mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-22 17:49:43 +01:00
Add per-area untranslated roomname counters
This makes it easy from the "explore game" menu to see which levels still have untranslated room names and how many.
This commit is contained in:
parent
46af7ecdfc
commit
88c8ad5a57
8 changed files with 128 additions and 4 deletions
|
@ -25,4 +25,8 @@
|
||||||
<translation form="0" translation=""/>
|
<translation form="0" translation=""/>
|
||||||
<translation form="1" translation=""/>
|
<translation form="1" translation=""/>
|
||||||
</string>
|
</string>
|
||||||
|
<string english_plural="{n} normal room names untranslated" english_singular="{n} normal room name untranslated" explanation="per-area counts for room name translator mode" max="38*4" var="n" expect="48">
|
||||||
|
<translation form="0" translation=""/>
|
||||||
|
<translation form="1" translation=""/>
|
||||||
|
</string>
|
||||||
</strings_plural>
|
</strings_plural>
|
||||||
|
|
|
@ -25,4 +25,8 @@
|
||||||
<translation form="0" translation="Plej malfacila ĉambro (kun {n_deaths} mortoj)"/>
|
<translation form="0" translation="Plej malfacila ĉambro (kun {n_deaths} mortoj)"/>
|
||||||
<translation form="1" translation="Plej malfacila ĉambro (kun {n_deaths} morto)"/>
|
<translation form="1" translation="Plej malfacila ĉambro (kun {n_deaths} morto)"/>
|
||||||
</string>
|
</string>
|
||||||
|
<string english_plural="{n} normal room names untranslated" english_singular="{n} normal room name untranslated" explanation="per-area counts for room name translator mode" max="38*4" var="n" expect="48">
|
||||||
|
<translation form="0" translation=""/>
|
||||||
|
<translation form="1" translation=""/>
|
||||||
|
</string>
|
||||||
</strings_plural>
|
</strings_plural>
|
||||||
|
|
|
@ -25,4 +25,8 @@
|
||||||
<translation form="0" translation=""/>
|
<translation form="0" translation=""/>
|
||||||
<translation form="1" translation=""/>
|
<translation form="1" translation=""/>
|
||||||
</string>
|
</string>
|
||||||
|
<string english_plural="{n} normal room names untranslated" english_singular="{n} normal room name untranslated" explanation="per-area counts for room name translator mode" max="38*4" var="n" expect="48">
|
||||||
|
<translation form="0" translation=""/>
|
||||||
|
<translation form="1" translation=""/>
|
||||||
|
</string>
|
||||||
</strings_plural>
|
</strings_plural>
|
||||||
|
|
|
@ -25,4 +25,8 @@
|
||||||
<translation form="0" translation="Moeilijkste kamer ({n_deaths} keer dood)"/>
|
<translation form="0" translation="Moeilijkste kamer ({n_deaths} keer dood)"/>
|
||||||
<translation form="1" translation="Moeilijkste kamer ({n_deaths} keer dood)"/>
|
<translation form="1" translation="Moeilijkste kamer ({n_deaths} keer dood)"/>
|
||||||
</string>
|
</string>
|
||||||
|
<string english_plural="{n} normal room names untranslated" english_singular="{n} normal room name untranslated" explanation="per-area counts for room name translator mode" max="38*4" var="n" expect="48">
|
||||||
|
<translation form="0" translation="{n} normale kamernamen onvertaald"/>
|
||||||
|
<translation form="1" translation="{n} normale kamernaam onvertaald"/>
|
||||||
|
</string>
|
||||||
</strings_plural>
|
</strings_plural>
|
||||||
|
|
|
@ -26,6 +26,7 @@ int n_untranslated_roomnames = 0;
|
||||||
int n_unexplained_roomnames = 0;
|
int n_unexplained_roomnames = 0;
|
||||||
int n_untranslated_roomnames_custom = 0;
|
int n_untranslated_roomnames_custom = 0;
|
||||||
int n_unexplained_roomnames_custom = 0;
|
int n_unexplained_roomnames_custom = 0;
|
||||||
|
int n_untranslated_roomnames_area[9];
|
||||||
|
|
||||||
int n_untranslated[COUNT_UNTRANSLATED_INDEX] = {0};
|
int n_untranslated[COUNT_UNTRANSLATED_INDEX] = {0};
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ extern int n_untranslated_roomnames;
|
||||||
extern int n_unexplained_roomnames;
|
extern int n_unexplained_roomnames;
|
||||||
extern int n_untranslated_roomnames_custom;
|
extern int n_untranslated_roomnames_custom;
|
||||||
extern int n_unexplained_roomnames_custom;
|
extern int n_unexplained_roomnames_custom;
|
||||||
|
extern int n_untranslated_roomnames_area[9];
|
||||||
|
|
||||||
enum n_untranslated_index
|
enum n_untranslated_index
|
||||||
{
|
{
|
||||||
|
|
|
@ -241,6 +241,7 @@ void resettext(bool final_shutdown)
|
||||||
|
|
||||||
n_untranslated_roomnames = 0;
|
n_untranslated_roomnames = 0;
|
||||||
n_unexplained_roomnames = 0;
|
n_unexplained_roomnames = 0;
|
||||||
|
SDL_zeroa(n_untranslated_roomnames_area);
|
||||||
|
|
||||||
SDL_zeroa(n_untranslated);
|
SDL_zeroa(n_untranslated);
|
||||||
|
|
||||||
|
@ -736,16 +737,99 @@ bool fix_room_coords(bool custom_level, int* roomx, int* roomy)
|
||||||
return !(*roomx < 0 || *roomy < 0 || *roomx > max_x || *roomy > max_y);
|
return !(*roomx < 0 || *roomy < 0 || *roomx > max_x || *roomy > max_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_left_counter(const char* old_text, const char* new_text, int* counter)
|
static unsigned coords_to_area(int roomx, int roomy)
|
||||||
|
{
|
||||||
|
if (!fix_room_coords(false, &roomx, &roomy))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We want to know per-area how many room names are untranslated... */
|
||||||
|
enum area_letter {
|
||||||
|
_, /* None */
|
||||||
|
S, /* SS1 */
|
||||||
|
L, /* Lab */
|
||||||
|
T, /* Tower */
|
||||||
|
Y, /* SS2 */
|
||||||
|
W, /* Warp */
|
||||||
|
I, /* Intermission */
|
||||||
|
G, /* Gravitron */
|
||||||
|
F /* Final */
|
||||||
|
};
|
||||||
|
static enum area_letter area_map[MAP_MAX_Y+1][MAP_MAX_Y+1] = {
|
||||||
|
{_,L,L,L,L,L,L,L,_,T,_,_,_,W,W,W,W,W,W,W},
|
||||||
|
{_,L,L,L,L,L,L,_,_,T,_,_,_,_,W,W,W,W,W,W},
|
||||||
|
{_,_,_,_,L,_,_,_,_,T,_,_,_,_,W,W,W,W,W,W},
|
||||||
|
{_,_,_,_,L,_,_,_,_,T,_,_,S,S,S,S,W,W,W,W},
|
||||||
|
{_,_,L,L,L,_,_,_,_,T,T,T,S,S,S,S,_,_,_,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,Y,Y,S,S,S,S,_,_,_,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,Y,Y,S,S,S,S,S,_,_,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,Y,Y,S,S,S,S,S,S,S,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,_,_,_,Y,Y,S,Y,Y,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,_,T,T,_,_,_,Y,Y,Y,Y,Y,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,_,_,_,Y,Y,Y,Y,Y,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,_,Y,Y,Y,Y,Y,Y,Y,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,_,Y,Y,Y,Y,Y,Y,_,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,_,Y,Y,Y,Y,Y,Y,_,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,T,_,Y,Y,_,_,_,_,_,Y,_},
|
||||||
|
{_,_,_,_,_,_,_,L,_,T,_,_,_,_,_,_,_,_,_,_},
|
||||||
|
{_,_,L,L,L,L,L,L,_,T,_,_,_,_,_,_,_,_,_,_},
|
||||||
|
{_,L,L,L,L,L,L,L,_,T,_,_,_,_,_,_,_,_,_,_},
|
||||||
|
{L,L,L,L,L,_,_,L,_,T,_,_,_,_,_,_,_,_,_,_},
|
||||||
|
{L,L,L,L,L,_,_,L,_,T,_,_,_,_,_,_,_,_,_,_}
|
||||||
|
};
|
||||||
|
static bool area_map_has_final = false;
|
||||||
|
|
||||||
|
if (!area_map_has_final)
|
||||||
|
{
|
||||||
|
static const enum area_letter final_map[9][14] = {
|
||||||
|
{_,_,_,_,_,_,_,_,_,_,_,_,G,F},
|
||||||
|
{_,_,_,_,_,_,_,_,_,_,_,_,G,F},
|
||||||
|
{_,_,_,_,_,_,_,_,_,_,_,_,G,F},
|
||||||
|
{F,F,F,F,F,F,F,F,F,F,_,_,G,F},
|
||||||
|
{F,F,F,F,F,_,F,F,F,F,_,_,G,F},
|
||||||
|
{_,_,_,_,_,_,_,_,F,F,F,F,F,F},
|
||||||
|
{_,_,_,_,_,F,F,F,F,F,F,_,_,_},
|
||||||
|
{_,_,_,_,_,_,_,_,_,_,_,_,_,_},
|
||||||
|
{I,I,I,I,I,I,I,I,I,I,I,I,I,I}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int y = 0; y < 9; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < 14; x++)
|
||||||
|
{
|
||||||
|
area_map[MAP_MAX_Y+1 - 9 + y][MAP_MAX_X+1 - 14 + x] = final_map[y][x];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
area_map_has_final = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (area_map[roomy][roomx] == 0)
|
||||||
|
{
|
||||||
|
vlog_error("LocalizationStorage: Room %d,%d has no area associated with it", roomx, roomy);
|
||||||
|
}
|
||||||
|
|
||||||
|
return area_map[roomy][roomx];
|
||||||
|
}
|
||||||
|
|
||||||
|
static void update_left_counter(const char* old_text, const char* new_text, int* counter, int* counter_area)
|
||||||
{
|
{
|
||||||
bool now_filled = new_text[0] != '\0';
|
bool now_filled = new_text[0] != '\0';
|
||||||
if ((old_text == NULL || old_text[0] == '\0') && now_filled)
|
if ((old_text == NULL || old_text[0] == '\0') && now_filled)
|
||||||
{
|
{
|
||||||
(*counter)--;
|
(*counter)--;
|
||||||
|
if (counter_area != NULL)
|
||||||
|
{
|
||||||
|
(*counter_area)--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (old_text != NULL && old_text[0] != '\0' && !now_filled)
|
else if (old_text != NULL && old_text[0] != '\0' && !now_filled)
|
||||||
{
|
{
|
||||||
(*counter)++;
|
(*counter)++;
|
||||||
|
if (counter_area != NULL)
|
||||||
|
{
|
||||||
|
(*counter_area)++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -760,6 +844,7 @@ bool store_roomname_translation(bool custom_level, int roomx, int roomy, const c
|
||||||
const char** ptr_translation;
|
const char** ptr_translation;
|
||||||
const char** ptr_explanation;
|
const char** ptr_explanation;
|
||||||
int* ptr_n_untranslated;
|
int* ptr_n_untranslated;
|
||||||
|
int* ptr_n_untranslated_area = NULL;
|
||||||
int* ptr_n_unexplained;
|
int* ptr_n_unexplained;
|
||||||
if (custom_level)
|
if (custom_level)
|
||||||
{
|
{
|
||||||
|
@ -773,17 +858,18 @@ bool store_roomname_translation(bool custom_level, int roomx, int roomy, const c
|
||||||
ptr_translation = &translation_roomnames[roomy][roomx];
|
ptr_translation = &translation_roomnames[roomy][roomx];
|
||||||
ptr_explanation = &explanation_roomnames[roomy][roomx];
|
ptr_explanation = &explanation_roomnames[roomy][roomx];
|
||||||
ptr_n_untranslated = &n_untranslated_roomnames;
|
ptr_n_untranslated = &n_untranslated_roomnames;
|
||||||
|
ptr_n_untranslated_area = &n_untranslated_roomnames_area[coords_to_area(roomx, roomy)];
|
||||||
ptr_n_unexplained = &n_unexplained_roomnames;
|
ptr_n_unexplained = &n_unexplained_roomnames;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tra != NULL)
|
if (tra != NULL)
|
||||||
{
|
{
|
||||||
update_left_counter(*ptr_translation, tra, ptr_n_untranslated);
|
update_left_counter(*ptr_translation, tra, ptr_n_untranslated, ptr_n_untranslated_area);
|
||||||
*ptr_translation = textbook_store(&textbook_main, tra);
|
*ptr_translation = textbook_store(&textbook_main, tra);
|
||||||
}
|
}
|
||||||
if (explanation != NULL)
|
if (explanation != NULL)
|
||||||
{
|
{
|
||||||
update_left_counter(*ptr_explanation, explanation, ptr_n_unexplained);
|
update_left_counter(*ptr_explanation, explanation, ptr_n_unexplained, NULL);
|
||||||
*ptr_explanation = textbook_store(&textbook_main, explanation);
|
*ptr_explanation = textbook_store(&textbook_main, explanation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -840,6 +926,7 @@ static void loadtext_roomnames(bool custom_level)
|
||||||
{
|
{
|
||||||
n_untranslated_roomnames++;
|
n_untranslated_roomnames++;
|
||||||
n_unexplained_roomnames++;
|
n_unexplained_roomnames++;
|
||||||
|
n_untranslated_roomnames_area[coords_to_area(x, y)]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
store_roomname_translation(
|
store_roomname_translation(
|
||||||
|
@ -901,6 +988,7 @@ void loadtext(bool check_max)
|
||||||
// We may still need the room name explanations
|
// We may still need the room name explanations
|
||||||
loadtext_roomnames(false);
|
loadtext_roomnames(false);
|
||||||
n_untranslated_roomnames = 0;
|
n_untranslated_roomnames = 0;
|
||||||
|
SDL_zeroa(n_untranslated_roomnames_area);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -782,7 +782,25 @@ static void menurender(void)
|
||||||
graphics.bigprint( -1, 30, loc::gettext("The Final Level"), tr, tg, tb, true);
|
graphics.bigprint( -1, 30, loc::gettext("The Final Level"), tr, tg, tb, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!roomname_translator::enabled)
|
if (roomname_translator::enabled)
|
||||||
|
{
|
||||||
|
if (game.currentmenuoption >= 0 && game.currentmenuoption < 8)
|
||||||
|
{
|
||||||
|
int names_left = loc::n_untranslated_roomnames_area[game.currentmenuoption + 1];
|
||||||
|
int coldiv = names_left > 0 ? 1 : 2;
|
||||||
|
|
||||||
|
char buffer[4*SCREEN_WIDTH_CHARS + 1];
|
||||||
|
loc::gettext_plural_fill(
|
||||||
|
buffer, sizeof(buffer),
|
||||||
|
"{n} normal room names untranslated",
|
||||||
|
"{n} normal room name untranslated",
|
||||||
|
"n:int",
|
||||||
|
names_left
|
||||||
|
);
|
||||||
|
graphics.PrintWrap( -1, 65, buffer, tr/coldiv, tg/coldiv, tb/coldiv, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
graphics.PrintWrap( -1, 65, loc::gettext("You have not enabled room name translation mode!"), tr, tg, tb, true);
|
graphics.PrintWrap( -1, 65, loc::gettext("You have not enabled room name translation mode!"), tr, tg, tb, true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue