diff --git a/runtime/cosmetic_colour.c b/runtime/cosmetic_colour.c index 136535a4..ce7a3bf3 100644 --- a/runtime/cosmetic_colour.c +++ b/runtime/cosmetic_colour.c @@ -40,31 +40,15 @@ void col_format(const CosColour *c, char *out, size_t n) { else snprintf(out, n, "%s", g_col_names[c->pick >= 0 && c->pick < N_COL ? c->pick : 0]); } -int (*g_col_seed_pick)(int slot, uint32_t *rgb); - -static int seed_pick(const CosColour *c, int slot, uint32_t *rgb) { - (void)c; // (the seed's colour wins over the player's: the Cosmetics tab is locked while it's played) - if (!g_col_seed_pick) return COL_DEFAULT; - uint32_t v = 0; - int p = g_col_seed_pick(slot, &v); - if (p > COL_DEFAULT && p < COL_RANDOM) v = g_col_rgb[p]; - else if (p != COL_CUSTOM) return COL_DEFAULT; - if (rgb) *rgb = v & 0xFFFFFF; - return p; -} - -bool col_seed_rgb(const CosColour *c, int slot, uint32_t *rgb) { return seed_pick(c, slot, rgb) != COL_DEFAULT; } - -int col_pick(const CosColour *c, int slot) { - int p = seed_pick(c, slot, NULL); - return p ? p : c->pick; -} +void (*g_col_seed_check)(void); bool col_target(const CosColour *c, int slot, uint32_t *rgb) { static int picks[COL_SLOTS]; static unsigned seed; + static time_t checked; if (slot < 0 || slot >= COL_SLOTS) return false; - if (col_seed_rgb(c, slot, rgb)) return true; // (the seed's colour, if it has its own) + time_t now = time(NULL); + if (g_col_seed_check && now != checked) checked = now, g_col_seed_check(); // (a new seed's own set: once a second) if (c->pick != COL_RANDOM) picks[slot] = 0; if (c->pick == COL_CUSTOM) { *rgb = c->rgb & 0xFFFFFF; return true; } if (c->pick == COL_RANDOM) { diff --git a/runtime/cosmetic_colour.h b/runtime/cosmetic_colour.h index 1b02868f..77e7717e 100644 --- a/runtime/cosmetic_colour.h +++ b/runtime/cosmetic_colour.h @@ -27,14 +27,9 @@ extern const uint32_t g_col_rgb[N_COL]; // the named colours' targets (0 for De void col_parse(CosColour *c, const char *val); // c -> its larecomp.ini value (name, or #RRGGBB for Custom) void col_format(const CosColour *c, char *out, size_t n); -// The randomizer seed's own cosmetics (seed option "Random cosmetics", runtime/cosmetics_seed.c): the colour row `slot` -// takes whatever the player chose: a palette colour, or COL_CUSTOM with *rgb (0: none - vanilla, or a seed without the -// option). NULL until set. -extern int (*g_col_seed_pick)(int slot, uint32_t *rgb); -// The seed's own colour for row `slot` (0xRRGGBB); false: none -bool col_seed_rgb(const CosColour *c, int slot, uint32_t *rgb); -// The palette colour row `slot` shows: the seed's, else the player's choice -int col_pick(const CosColour *c, int slot); +// The randomizer seed's own cosmetics (seed option "Random cosmetics", runtime/cosmetics_seed.c): looks for a newly +// played seed's set and copies it into the rows once. NULL until set. +extern void (*g_col_seed_check)(void); // The colour row `slot` should show now (0xRRGGBB); false: Default (the game's own look). bool col_target(const CosColour *c, int slot, uint32_t *rgb); // HSV (hue in turns, saturation, value: 0..1) of 0xRRGGBB diff --git a/runtime/cosmetics_seed.c b/runtime/cosmetics_seed.c index d064dc7e..585e4612 100644 --- a/runtime/cosmetics_seed.c +++ b/runtime/cosmetics_seed.c @@ -2,9 +2,9 @@ // made with it has its own set, picked from its seed (the same every time it's played): a fully random colour (any // hue, saturation and brightness) for each of the tunic, hearts, hair, skin, shield, leaves, grass, sand, water, // fences, walls and houses, enemy colours "per seed" and a weather (clear, rain, snow or storm: runtime/nvn/weather.c; -// the screen filter stays off: it isn't a colour). Only while that seed is being played (never in vanilla), over -// whatever the player chose: the Cosmetics tab is locked meanwhile (the player's own choices stay saved, and are back -// in another seed or vanilla). +// the screen filter off: it isn't a colour). The first time such a seed is played its set is copied into the Cosmetics +// tab's rows (g_settings.cosmetics_seed remembers which seed did it), and from then on they are the player's own to +// change; the tab's "Seed's look" copies them in again. #include #include #include @@ -60,31 +60,45 @@ static void refresh_locked(void) { LOG("[cosmetics] seed's own cosmetics (%s)\n", dir); } -static int seed_pick(int slot, uint32_t *rgb) { - pthread_mutex_lock(&g_lock); +// The seed's set -> the Cosmetics tab's rows (the weather's 0..3 are WEATHER_OFF..WEATHER_STORM) +static void apply_locked(void) { + CosColour *rows[COL_SLOTS] = {&g_settings.tunic, &g_settings.hearts, &g_settings.hair, &g_settings.skin, + &g_settings.shield, &g_settings.leaves, &g_settings.grass, &g_settings.sand, + &g_settings.water, &g_settings.fences, &g_settings.walls, &g_settings.houses}; + for (int slot = 0; slot < COL_SLOTS; slot++) rows[slot]->pick = COL_CUSTOM, rows[slot]->rgb = g_rgb[slot]; + g_settings.enemy_colours = 1; + g_settings.screen_filter = 0; + g_settings.weather = g_weather; + snprintf(g_settings.cosmetics_seed, sizeof g_settings.cosmetics_seed, "%s", g_dir); + LOG("[cosmetics] the seed's own cosmetics copied into the Cosmetics tab (%s)\n", g_dir); +} + +static void check_locked(void) { refresh_locked(); - int p = g_on && slot >= 0 && slot < COL_SLOTS ? COL_CUSTOM : COL_DEFAULT; - if (p) *rgb = g_rgb[slot]; + if (g_on && strcmp(g_settings.cosmetics_seed, g_dir)) apply_locked(); // (a seed played for the first time) +} + +static void check(void) { + pthread_mutex_lock(&g_lock); + check_locked(); pthread_mutex_unlock(&g_lock); - return p; } -// The seed has its own cosmetics (the Cosmetics tab is locked; enemy colours "per seed", no screen filter) +// The seed being played (or PLAY's, on the start screen) has its own cosmetics bool cosmetics_seed_on(void) { pthread_mutex_lock(&g_lock); - refresh_locked(); + check_locked(); bool on = g_on; pthread_mutex_unlock(&g_lock); return on; } -// The seed's own weather (0 clear, 1 rain, 2 snow, 3 storm), over the Weather row; 0 without one -int cosmetics_seed_weather(void) { +// "Seed's look": its set into the rows again +void cosmetics_seed_apply(void) { pthread_mutex_lock(&g_lock); refresh_locked(); - int w = g_on ? g_weather : 0; + if (g_on) apply_locked(); pthread_mutex_unlock(&g_lock); - return w; } -__attribute__((constructor)) static void install(void) { g_col_seed_pick = seed_pick; } +__attribute__((constructor)) static void install(void) { g_col_seed_check = check; } diff --git a/runtime/nvn/recolour_enemies.c b/runtime/nvn/recolour_enemies.c index 57cb95b1..fee76001 100644 --- a/runtime/nvn/recolour_enemies.c +++ b/runtime/nvn/recolour_enemies.c @@ -78,8 +78,7 @@ static uint32_t seed_seed(void) { // Per seed: the randomizer seed's name (vani } static bool tint(int cls, float t[8]) { - extern bool cosmetics_seed_on(void); // (a seed with its own cosmetics has them per seed) - int mode = cosmetics_seed_on() ? 1 : g_settings.enemy_colours; + int mode = g_settings.enemy_colours; if (mode <= 0 || mode >= N_ENEMY_COLOUR_MODES || cls < E_BASE || cls >= E_BASE + N_SPECIES) return false; uint32_t h = mix32((mode == 2 ? load_seed() : seed_seed()) ^ (uint32_t)(cls - E_BASE) * 0x27D4EB2Fu); float shift = 0.12f + (h >> 8) / 16777216.0f * 0.76f; // (12-88% of the wheel: always clearly another colour) diff --git a/runtime/nvn/screen_filter.h b/runtime/nvn/screen_filter.h index 2328addf..7f0609e6 100644 --- a/runtime/nvn/screen_filter.h +++ b/runtime/nvn/screen_filter.h @@ -10,10 +10,9 @@ enum { SCREEN_FILTER_OFF, SCREEN_FILTER_GB, SCREEN_FILTER_GBC, SCREEN_FILTER_GRAY }; -// pf for the present shader (x: the mode; off in a seed with its own cosmetics) -extern bool cosmetics_seed_on(void); // runtime/cosmetics_seed.c +// pf for the present shader (x: the mode) static inline void screen_filter_params(float pf[4]) { - pf[0] = cosmetics_seed_on() ? 0 : (float)g_settings.screen_filter; + pf[0] = (float)g_settings.screen_filter; pf[1] = pf[2] = pf[3] = 0; } diff --git a/runtime/nvn/weather.c b/runtime/nvn/weather.c index 4d85b943..e7b42543 100644 --- a/runtime/nvn/weather.c +++ b/runtime/nvn/weather.c @@ -15,8 +15,6 @@ #include "../settings.h" extern int game_in_play(void); // runtime/hle/warp.c -extern int cosmetics_seed_weather(void); // runtime/cosmetics_seed.c -extern bool cosmetics_seed_on(void); extern bool widescreen_frame_boxed(uint64_t frame); // runtime/hle/widescreen.c (indoors: the interior backdrop) extern void input_rumble_pulse(uint16_t lo, uint16_t hi, uint32_t ms); // runtime/hle/input.c @@ -61,12 +59,6 @@ static bool g_outdoors; int weather_current(void) { if (weather_cycle_on()) return weather_cycle_kind(NULL); - static int seed_on, seed_w; - static uint64_t at; // (the seed's pick: looked up once a second, it only changes with the seed) - uint64_t now = (uint64_t)time(NULL); - if (now != at) at = now, seed_on = cosmetics_seed_on(), seed_w = cosmetics_seed_weather(); - if (seed_on && env_weather() < 0) return seed_w; // (a seed with its own cosmetics: its weather, over the setting - - // the row is locked) int s = setting(); return s == WEATHER_RANDOM ? g_random : s; } diff --git a/runtime/settings.c b/runtime/settings.c index 9f1edae7..445889ff 100644 --- a/runtime/settings.c +++ b/runtime/settings.c @@ -197,6 +197,10 @@ void settings_load(void) { strlcpy(g_settings.rando_seed, val, sizeof g_settings.rando_seed); continue; } + if (!strcmp(key, "cosmetics_seed")) { + strlcpy(g_settings.cosmetics_seed, val, sizeof g_settings.cosmetics_seed); + continue; + } if (fields != 2) continue; if (!strcmp(key, "aspect")) g_settings.aspect = !strcmp(val, "original") ? ASPECT_ORIGINAL : ASPECT_UNLOCKED; else if (!strcmp(key, "fullscreen")) g_settings.fullscreen = atoi(val) != 0; @@ -360,6 +364,7 @@ void settings_save(void) { fprintf(f, "enemy_colours = %s\n", k_enemy_colour_keys[g_settings.enemy_colours]); fprintf(f, "screen_filter = %s\n", k_screen_filter_keys[g_settings.screen_filter]); fprintf(f, "weather = %s\n", k_weather_keys[g_settings.weather]); + if (g_settings.cosmetics_seed[0]) fprintf(f, "cosmetics_seed = %s\n", g_settings.cosmetics_seed); bind_settings_save(f); fprintf(f, "rando_seed = %s\n", g_settings.rando_seed); if (g_settings.rando_options[0]) fprintf(f, "rando_options = %s\n", g_settings.rando_options); diff --git a/runtime/settings.h b/runtime/settings.h index 2b8a8616..9eb2bd8a 100644 --- a/runtime/settings.h +++ b/runtime/settings.h @@ -88,6 +88,7 @@ typedef struct { int enemy_colours; // 0 Off, 1 Random per seed, 2 Random every load (runtime/nvn/recolour_enemies.c) int screen_filter; // 0 Off, 1 Game Boy, 2 Game Boy Color, 3 Grayscale (runtime/nvn/screen_filter.h) int weather; // WEATHER_* (runtime/nvn/weather.h): rain / snow / storm / blizzard on the overworld, looks only + char cosmetics_seed[300]; // the seed folder whose own cosmetics were last copied into the rows (cosmetics_seed.c) // speedrun (Gameplay tab; runtime/hle/run_timer.c, runtime/livesplit.c) bool timer; // the in-game run timer in the corner (game time: level loads don't count) int timer_pos; // TIMER_POS_*: which bottom corner it sits in diff --git a/runtime/ui/lang/de.inc b/runtime/ui/lang/de.inc index a1c838a0..9ca3ac1c 100644 --- a/runtime/ui/lang/de.inc +++ b/runtime/ui/lang/de.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "Controller funktionieren weiter, wenn ein anderes Fenster im Vordergrund ist. macOS fragt eventuell nach der Berechtigung für Eingabeüberwachung."}, {"Movement", "Bewegung"}, {"Nothing", "Nichts"}, +{"Items", "Items"}, {"What the D-pad does in play.", "Was das Steuerkreuz im Spiel tut."}, {"360-degree movement", "360-Grad-Bewegung"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Link läuft genau in Stick-Richtung, statt nur in 8 Richtungen."}, @@ -262,7 +263,6 @@ {"Rooster", "Gockel"}, {"Choose", "Wählen"}, {"Tunics", "Gewänder"}, -{"Keys", "Schlüssel"}, // runtime/ui/item_names.h {"Sword", "Schwert"}, {"Noble Sword", "Cocolint-Schwert"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Schaltet die Tilt-Shift-Unschärfe am oberen und unteren Bildrand ab."}, {"Hide Hero Mode icon", "Heldenmodus-Symbol aus"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Blendet das Heldenmodus-Emblem in der Bildschirmecke aus, wenn du einen Spielstand im Heldenmodus spielst."}, -{"This seed picked your look. Commit to it!", "Dieser Seed hat deinen Look gewählt. Steh dazu!"}, {"Randomize all", "Alles zufällig"}, {"Picks a random color for everything below.", "Wählt für alles unten eine zufällige Farbe."}, {"Default all", "Alles Standard"}, {"Puts everything on this page back to the game's normal look.", "Setzt alles auf dieser Seite auf den normalen Look des Spiels zurück."}, +{"Seed's look", "Look des Seeds"}, +{"Puts everything on this page back to this seed's look.", "Setzt alles auf dieser Seite auf den Look dieses Seeds zurück."}, {"Colors", "Farben"}, {"Tunic color", "Gewandfarbe"}, {"Link's tunic color.", "Die Farbe von Links Gewand."}, @@ -548,12 +549,12 @@ {"House color", "Hausfarbe"}, {"The roofs of the village houses.", "Die Dächer der Häuser im Dorf."}, {"Enemies", "Gegner"}, -{"Seed", "Seed"}, {"Enemy colors", "Gegnerfarben"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Gibt jeder Gegnerart eine neue Farbe. Gegner, deren Farbe ihre Stärke zeigt, behalten ihre."}, {"Screen", "Bildschirm"}, {"Screen filter", "Bildfilter"}, {"Puts a filter over the whole screen, HUD included.", "Legt einen Filter über den ganzen Bildschirm, samt HUD."}, +{"Seed", "Seed"}, {"Weather", "Wetter"}, {"This seed picked the weather. Commit to it!", "Dieser Seed hat das Wetter gewählt. Steh dazu!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Regen, Schnee, Gewitter oder Schneesturm in der Oberwelt."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f FPS"}, // runtime/ui/option_rows.mm {"On", "An"}, -{"Seed: %s", "Seed: %s"}, {"Custom color", "Eigene Farbe"}, {"Pick any color by hue, saturation and brightness.", "Wähle eine beliebige Farbe nach Farbton, Sättigung und Helligkeit."}, {"Done", "Fertig"}, @@ -630,7 +630,6 @@ {"Seeds", "Seeds"}, {"Presets", "Presets"}, {"Goal", "Ziel"}, -{"Items", "Items"}, {"Extra checks", "Extra-Checks"}, {"World", "Welt"}, {"Enemies & bosses", "Gegner & Bosse"}, @@ -1206,7 +1205,6 @@ {"Trap!", "Falle!"}, {"Frog Song of Soul", "Krötenrap"}, {"Chamber Stone", "Kammerstein"}, -{"shared", "geteilt"}, {"Beach chest", "Truhe am Strand"}, {"Taltal entrance chest", "Taltal, Truhe am Eingang"}, {"Taltal east left chest", "Taltal Ost, linke Truhe"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "Schlüssel"}, +{"This seed picked your look. Commit to it!", "Dieser Seed hat deinen Look gewählt. Steh dazu!"}, +{"Seed: %s", "Seed: %s"}, +{"shared", "geteilt"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Marin ist ein Item im Pool, und ohne sie ist die Wüste versperrt."}, {"boss cutscenes", "Boss-Sequenzen"}, {"extended consumable drop", "mehr Verbrauchs-Drops"}, diff --git a/runtime/ui/lang/es.inc b/runtime/ui/lang/es.inc index d4df5c4c..e5d3af52 100644 --- a/runtime/ui/lang/es.inc +++ b/runtime/ui/lang/es.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "Los mandos siguen funcionando aunque haya otra ventana delante. macOS puede pedirte permiso de monitorización de entrada."}, {"Movement", "Movimiento"}, {"Nothing", "Nada"}, +{"Items", "Objetos"}, {"What the D-pad does in play.", "Lo que hace la cruceta al jugar."}, {"360-degree movement", "Movimiento 360°"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Link camina en la dirección exacta de la palanca en vez de limitarse a 8 direcciones."}, @@ -262,7 +263,6 @@ {"Rooster", "Cuco"}, {"Choose", "Elegir"}, {"Tunics", "Ropas"}, -{"Keys", "Llaves"}, // runtime/ui/item_names.h {"Sword", "Espada"}, {"Noble Sword", "Espada de Koholint"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Quita el desenfoque de efecto maqueta de la parte superior e inferior de la pantalla."}, {"Hide Hero Mode icon", "Ocultar icono modo Héroe"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Oculta el emblema del modo Héroe en la esquina de la pantalla al jugar una partida en modo Héroe."}, -{"This seed picked your look. Commit to it!", "Esta semilla ha elegido tu aspecto. ¡Acéptalo!"}, {"Randomize all", "Todo aleatorio"}, {"Picks a random color for everything below.", "Elige un color aleatorio para todo lo de abajo."}, {"Default all", "Restablecer todo"}, {"Puts everything on this page back to the game's normal look.", "Devuelve todo lo de esta página al aspecto normal del juego."}, +{"Seed's look", "Aspecto de la semilla"}, +{"Puts everything on this page back to this seed's look.", "Devuelve todo lo de esta página al aspecto de esta semilla."}, {"Colors", "Colores"}, {"Tunic color", "Color de ropas"}, {"Link's tunic color.", "El color de las ropas de Link."}, @@ -548,12 +549,12 @@ {"House color", "Color de casas"}, {"The roofs of the village houses.", "Los tejados de las casas de la aldea."}, {"Enemies", "Enemigos"}, -{"Seed", "Semilla"}, {"Enemy colors", "Color de enemigos"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Da un color nuevo a cada tipo de enemigo. Los enemigos cuyo color indica su fuerza conservan el suyo."}, {"Screen", "Pantalla"}, {"Screen filter", "Filtro de pantalla"}, {"Puts a filter over the whole screen, HUD included.", "Pone un filtro sobre toda la pantalla, HUD incluido."}, +{"Seed", "Semilla"}, {"Weather", "Clima"}, {"This seed picked the weather. Commit to it!", "Esta semilla ha elegido el clima. ¡Acéptalo!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Lluvia, nieve, tormenta o ventisca en el mundo exterior."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "Activado"}, -{"Seed: %s", "Semilla: %s"}, {"Custom color", "Color personalizado"}, {"Pick any color by hue, saturation and brightness.", "Elige cualquier color por tono, saturación y brillo."}, {"Done", "Listo"}, @@ -630,7 +630,6 @@ {"Seeds", "Semillas"}, {"Presets", "Preajustes"}, {"Goal", "Objetivo"}, -{"Items", "Objetos"}, {"Extra checks", "Ubicaciones extra"}, {"World", "Mundo"}, {"Enemies & bosses", "Enemigos y jefes"}, @@ -1206,7 +1205,6 @@ {"Trap!", "¡Trampa!"}, {"Frog Song of Soul", "Canción vital de las ranas"}, {"Chamber Stone", "Piedra saliza"}, -{"shared", "compartida"}, {"Beach chest", "Cofre de la playa"}, {"Taltal entrance chest", "Cofre de la entrada de Tal Tal"}, {"Taltal east left chest", "Cofre izquierdo del este de Tal Tal"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "Llaves"}, +{"This seed picked your look. Commit to it!", "Esta semilla ha elegido tu aspecto. ¡Acéptalo!"}, +{"Seed: %s", "Semilla: %s"}, +{"shared", "compartida"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Marin es un objeto de la reserva, y el desierto está bloqueado sin ella."}, {"boss cutscenes", "escenas de jefes"}, {"extended consumable drop", "más consumibles"}, diff --git a/runtime/ui/lang/fr.inc b/runtime/ui/lang/fr.inc index d3528166..74a8c12d 100644 --- a/runtime/ui/lang/fr.inc +++ b/runtime/ui/lang/fr.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "Les manettes restent actives quand une autre fenêtre est au premier plan. macOS peut demander l'autorisation « Surveillance de l'entrée »."}, {"Movement", "Déplacement"}, {"Nothing", "Rien"}, +{"Items", "Objets"}, {"What the D-pad does in play.", "Ce que fait la croix en jeu."}, {"360-degree movement", "Déplacement à 360°"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Link marche dans la direction exacte du stick au lieu de se limiter à 8 directions."}, @@ -262,7 +263,6 @@ {"Rooster", "Coq"}, {"Choose", "Choisir"}, {"Tunics", "Tuniques"}, -{"Keys", "Clés"}, // runtime/ui/item_names.h {"Sword", "Épée"}, {"Noble Sword", "Épée de Cocolint"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Désactive le flou tilt-shift en haut et en bas de l'écran."}, {"Hide Hero Mode icon", "Masquer l'icône du mode Héros"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Masque l'emblème du mode Héros dans le coin de l'écran quand tu joues une partie en mode Héros."}, -{"This seed picked your look. Commit to it!", "Cette seed a choisi ton look. Assume-le !"}, {"Randomize all", "Tout au hasard"}, {"Picks a random color for everything below.", "Choisit une couleur au hasard pour tout ce qui suit."}, {"Default all", "Tout par défaut"}, {"Puts everything on this page back to the game's normal look.", "Remet tout ce qui est sur cette page à l'apparence normale du jeu."}, +{"Seed's look", "Apparence de la seed"}, +{"Puts everything on this page back to this seed's look.", "Remet tout ce qui est sur cette page à l'apparence de cette seed."}, {"Colors", "Couleurs"}, {"Tunic color", "Couleur tunique"}, {"Link's tunic color.", "La couleur de la tunique de Link."}, @@ -548,12 +549,12 @@ {"House color", "Couleur maisons"}, {"The roofs of the village houses.", "Les toits des maisons du village."}, {"Enemies", "Ennemis"}, -{"Seed", "Seed"}, {"Enemy colors", "Couleur ennemis"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Donne une nouvelle couleur à chaque type d'ennemi. Ceux dont la couleur indique la force gardent la leur."}, {"Screen", "Écran"}, {"Screen filter", "Filtre d'écran"}, {"Puts a filter over the whole screen, HUD included.", "Applique un filtre sur tout l'écran, interface comprise."}, +{"Seed", "Seed"}, {"Weather", "Météo"}, {"This seed picked the weather. Commit to it!", "Cette seed a choisi la météo. Assume-la !"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Pluie, neige, orage ou blizzard dans le monde extérieur."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f FPS"}, // runtime/ui/option_rows.mm {"On", "Oui"}, -{"Seed: %s", "Seed : %s"}, {"Custom color", "Couleur perso"}, {"Pick any color by hue, saturation and brightness.", "Choisis n'importe quelle couleur par teinte, saturation et luminosité."}, {"Done", "OK"}, @@ -630,7 +630,6 @@ {"Seeds", "Seeds"}, {"Presets", "Préréglages"}, {"Goal", "Objectif"}, -{"Items", "Objets"}, {"Extra checks", "Emplacements bonus"}, {"World", "Monde"}, {"Enemies & bosses", "Ennemis et boss"}, @@ -1206,7 +1205,6 @@ {"Trap!", "Piège !"}, {"Frog Song of Soul", "Rap des grenouilles"}, {"Chamber Stone", "Carrelite"}, -{"shared", "partagée"}, {"Beach chest", "Coffre de la plage"}, {"Taltal entrance chest", "Coffre de l'entrée de Tartare"}, {"Taltal east left chest", "Coffre de gauche, Tartare est"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", " : "}, // not used any more +{"Keys", "Clés"}, +{"This seed picked your look. Commit to it!", "Cette seed a choisi ton look. Assume-le !"}, +{"Seed: %s", "Seed : %s"}, +{"shared", "partagée"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Marine est un objet de la réserve, et le désert est bloqué sans elle."}, {"boss cutscenes", "cinématiques des boss"}, {"extended consumable drop", "butin étendu"}, diff --git a/runtime/ui/lang/it.inc b/runtime/ui/lang/it.inc index 3254e3a7..17a8851b 100644 --- a/runtime/ui/lang/it.inc +++ b/runtime/ui/lang/it.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "I controller funzionano anche quando un'altra finestra è in primo piano. macOS potrebbe chiedere il permesso di Monitoraggio input."}, {"Movement", "Movimento"}, {"Nothing", "Niente"}, +{"Items", "Oggetti"}, {"What the D-pad does in play.", "Cosa fa la croce direzionale in gioco."}, {"360-degree movement", "Movimento a 360°"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Link cammina nella direzione esatta della levetta invece di limitarsi a 8 direzioni."}, @@ -262,7 +263,6 @@ {"Rooster", "Gallo"}, {"Choose", "Scegli"}, {"Tunics", "Tuniche"}, -{"Keys", "Chiavi"}, // runtime/ui/item_names.h {"Sword", "Spada"}, {"Noble Sword", "Spada nobile"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Disattiva la sfocatura tilt-shift in alto e in basso sullo schermo."}, {"Hide Hero Mode icon", "Nascondi icona Eroe"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Nasconde l'emblema della modalità Eroe nell'angolo dello schermo mentre giochi un file in modalità Eroe."}, -{"This seed picked your look. Commit to it!", "Il tuo aspetto l'ha scelto questo seed. Tienitelo!"}, {"Randomize all", "Tutto casuale"}, {"Picks a random color for everything below.", "Sceglie un colore a caso per tutto quello che c'è sotto."}, {"Default all", "Tutto predefinito"}, {"Puts everything on this page back to the game's normal look.", "Riporta tutto in questa pagina all'aspetto normale del gioco."}, +{"Seed's look", "Aspetto del seed"}, +{"Puts everything on this page back to this seed's look.", "Riporta tutto in questa pagina all'aspetto di questo seed."}, {"Colors", "Colori"}, {"Tunic color", "Colore tunica"}, {"Link's tunic color.", "Il colore della tunica di Link."}, @@ -548,12 +549,12 @@ {"House color", "Colore case"}, {"The roofs of the village houses.", "I tetti delle case del villaggio."}, {"Enemies", "Nemici"}, -{"Seed", "Seed"}, {"Enemy colors", "Colore nemici"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Dà a ogni tipo di nemico un nuovo colore. I nemici il cui colore indica quanto sono forti tengono il loro."}, {"Screen", "Schermo"}, {"Screen filter", "Filtro schermo"}, {"Puts a filter over the whole screen, HUD included.", "Applica un filtro su tutto lo schermo, HUD compreso."}, +{"Seed", "Seed"}, {"Weather", "Meteo"}, {"This seed picked the weather. Commit to it!", "Il meteo l'ha scelto questo seed. Tienitelo!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Pioggia, neve, temporale o bufera nel mondo esterno."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "Sì"}, -{"Seed: %s", "Seed: %s"}, {"Custom color", "Colore personalizzato"}, {"Pick any color by hue, saturation and brightness.", "Scegli un colore qualsiasi per tonalità, saturazione e luminosità."}, {"Done", "Fatto"}, @@ -630,7 +630,6 @@ {"Seeds", "Seed"}, {"Presets", "Preset"}, {"Goal", "Obiettivo"}, -{"Items", "Oggetti"}, {"Extra checks", "Controlli extra"}, {"World", "Mondo"}, {"Enemies & bosses", "Nemici e boss"}, @@ -1206,7 +1205,6 @@ {"Trap!", "Trappola!"}, {"Frog Song of Soul", "Soul della rana"}, {"Chamber Stone", "Pietra tessera"}, -{"shared", "condivisa"}, {"Beach chest", "Forziere della spiaggia"}, {"Taltal entrance chest", "Forziere all'ingresso di Tal Tal"}, {"Taltal east left chest", "Forziere a sinistra, Tal Tal est"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "Chiavi"}, +{"This seed picked your look. Commit to it!", "Il tuo aspetto l'ha scelto questo seed. Tienitelo!"}, +{"Seed: %s", "Seed: %s"}, +{"shared", "condivisa"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Marin è un oggetto del pool, e senza di lei il deserto è bloccato."}, {"boss cutscenes", "scene dei boss"}, {"extended consumable drop", "più consumabili lasciati"}, diff --git a/runtime/ui/lang/ja.inc b/runtime/ui/lang/ja.inc index d9f2158d..f68153fb 100644 --- a/runtime/ui/lang/ja.inc +++ b/runtime/ui/lang/ja.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "ほかのウィンドウが前面にあってもコントローラーが使えます。macOSで「入力監視」の許可を求められることがあります。"}, {"Movement", "移動"}, {"Nothing", "なし"}, +{"Items", "アイテム"}, {"What the D-pad does in play.", "プレイ中の十字ボタンの役割。"}, {"360-degree movement", "360度移動"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "8方向ではなく、スティックを倒した方向にそのまま歩きます。"}, @@ -262,7 +263,6 @@ {"Rooster", "ニワトリ"}, {"Choose", "選ぶ"}, {"Tunics", "服"}, -{"Keys", "カギ"}, // runtime/ui/item_names.h {"Sword", "剣"}, {"Noble Sword", "コホリントの剣"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "画面の上下にかかるミニチュア風のぼかしを消します。"}, {"Hide Hero Mode icon", "辛口モードのアイコンを隠す"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "辛口モードのデータで遊んでいるとき、画面の隅のマークを隠します。"}, -{"This seed picked your look. Commit to it!", "見た目はこのシードが決めました。これで行きましょう!"}, {"Randomize all", "すべてランダム"}, {"Picks a random color for everything below.", "下の項目すべてにランダムな色を選びます。"}, {"Default all", "すべて元に戻す"}, {"Puts everything on this page back to the game's normal look.", "このページの項目をすべてゲーム本来の見た目に戻します。"}, +{"Seed's look", "シードの見た目"}, +{"Puts everything on this page back to this seed's look.", "このページの項目をすべてこのシードの見た目に戻します。"}, {"Colors", "色"}, {"Tunic color", "服の色"}, {"Link's tunic color.", "リンクの服の色。"}, @@ -548,12 +549,12 @@ {"House color", "家の色"}, {"The roofs of the village houses.", "村の家の屋根。"}, {"Enemies", "敵"}, -{"Seed", "シード"}, {"Enemy colors", "敵の色"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "敵の種類ごとに新しい色をつけます。色で強さがわかる敵は元の色のままです。"}, {"Screen", "画面"}, {"Screen filter", "画面フィルター"}, {"Puts a filter over the whole screen, HUD included.", "HUDも含め、画面全体にフィルターをかけます。"}, +{"Seed", "シード"}, {"Weather", "天気"}, {"This seed picked the weather. Commit to it!", "天気はこのシードが決めました。これで行きましょう!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "フィールドに雨、雪、嵐、吹雪を降らせます。"}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "オン"}, -{"Seed: %s", "シード: %s"}, {"Custom color", "カスタムカラー"}, {"Pick any color by hue, saturation and brightness.", "色相、彩度、明るさで好きな色を選べます。"}, {"Done", "完了"}, @@ -630,7 +630,6 @@ {"Seeds", "シード"}, {"Presets", "プリセット"}, {"Goal", "目標"}, -{"Items", "アイテム"}, {"Extra checks", "追加チェック"}, {"World", "ワールド"}, {"Enemies & bosses", "敵とボス"}, @@ -1206,7 +1205,6 @@ {"Trap!", "トラップ!"}, {"Frog Song of Soul", "カエルのソウル"}, {"Chamber Stone", "パネ石"}, -{"shared", "共有"}, {"Beach chest", "浜辺の宝箱"}, {"Taltal entrance chest", "タルタルの入口の宝箱"}, {"Taltal east left chest", "タルタル東の左の宝箱"}, @@ -1496,6 +1494,10 @@ {", ", "、"}, {": ", ":"}, // not used any more +{"Keys", "カギ"}, +{"This seed picked your look. Commit to it!", "見た目はこのシードが決めました。これで行きましょう!"}, +{"Seed: %s", "シード: %s"}, +{"shared", "共有"}, {"Marin is an item in the pool, and the desert is blocked without her.", "マリンがアイテムプールのアイテムになり、マリンがいないと砂漠に入れません。"}, {"boss cutscenes", "ボスのイベントシーン"}, {"extended consumable drop", "消耗品ドロップ拡張"}, diff --git a/runtime/ui/lang/ko.inc b/runtime/ui/lang/ko.inc index 52b11f82..a3b2b5c2 100644 --- a/runtime/ui/lang/ko.inc +++ b/runtime/ui/lang/ko.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "다른 창이 앞에 있어도 컨트롤러가 계속 작동합니다. macOS에서 입력 모니터링 권한을 요청할 수 있습니다."}, {"Movement", "이동"}, {"Nothing", "없음"}, +{"Items", "아이템"}, {"What the D-pad does in play.", "플레이 중 방향 버튼의 기능."}, {"360-degree movement", "360도 이동"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "8방향으로 고정되지 않고 스틱을 기울인 방향 그대로 걷습니다."}, @@ -262,7 +263,6 @@ {"Rooster", "닭"}, {"Choose", "선택"}, {"Tunics", "옷"}, -{"Keys", "열쇠"}, // runtime/ui/item_names.h {"Sword", "검"}, {"Noble Sword", "코호린트의 검"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "화면 위아래의 틸트 시프트 흐림 효과를 끕니다."}, {"Hide Hero Mode icon", "용사 모드 아이콘 숨기기"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "용사 모드 데이터를 플레이하는 동안 화면 구석의 용사 모드 마크를 숨깁니다."}, -{"This seed picked your look. Commit to it!", "이 시드가 외형을 정했습니다. 받아들이세요!"}, {"Randomize all", "모두 랜덤"}, {"Picks a random color for everything below.", "아래 항목을 모두 랜덤 색으로 정합니다."}, {"Default all", "모두 기본"}, {"Puts everything on this page back to the game's normal look.", "이 페이지의 모든 항목을 게임 원래 모습으로 되돌립니다."}, +{"Seed's look", "시드 모습"}, +{"Puts everything on this page back to this seed's look.", "이 페이지의 모든 항목을 이 시드의 모습으로 되돌립니다."}, {"Colors", "색"}, {"Tunic color", "옷 색"}, {"Link's tunic color.", "링크의 옷 색입니다."}, @@ -548,12 +549,12 @@ {"House color", "집 색"}, {"The roofs of the village houses.", "마을 집들의 지붕입니다."}, {"Enemies", "적"}, -{"Seed", "시드"}, {"Enemy colors", "적 색"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "적의 종류마다 새 색을 입힙니다. 색으로 강함을 나타내는 적은 원래 색을 유지합니다."}, {"Screen", "화면"}, {"Screen filter", "화면 필터"}, {"Puts a filter over the whole screen, HUD included.", "HUD를 포함한 화면 전체에 필터를 씌웁니다."}, +{"Seed", "시드"}, {"Weather", "날씨"}, {"This seed picked the weather. Commit to it!", "이 시드가 날씨를 정했습니다. 받아들이세요!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "필드에 비, 눈, 폭풍우, 눈보라가 내립니다."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "켜기"}, -{"Seed: %s", "시드: %s"}, {"Custom color", "사용자 지정 색"}, {"Pick any color by hue, saturation and brightness.", "색상, 채도, 밝기로 원하는 색을 고릅니다."}, {"Done", "완료"}, @@ -630,7 +630,6 @@ {"Seeds", "시드"}, {"Presets", "프리셋"}, {"Goal", "목표"}, -{"Items", "아이템"}, {"Extra checks", "추가 체크"}, {"World", "월드"}, {"Enemies & bosses", "적과 보스"}, @@ -1206,7 +1205,6 @@ {"Trap!", "함정!"}, {"Frog Song of Soul", "개구리의 소울"}, {"Chamber Stone", "패널석"}, -{"shared", "공용"}, {"Beach chest", "해변 보물상자"}, {"Taltal entrance chest", "타르타르 입구 보물상자"}, {"Taltal east left chest", "타르타르 동쪽 왼쪽 보물상자"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "열쇠"}, +{"This seed picked your look. Commit to it!", "이 시드가 외형을 정했습니다. 받아들이세요!"}, +{"Seed: %s", "시드: %s"}, +{"shared", "공용"}, {"Marin is an item in the pool, and the desert is blocked without her.", "마린이 풀의 아이템이 되며, 마린이 없으면 사막에 갈 수 없습니다."}, {"boss cutscenes", "보스 등장 장면"}, {"extended consumable drop", "소모품 드롭 확장"}, diff --git a/runtime/ui/lang/nl.inc b/runtime/ui/lang/nl.inc index 8027514e..296a1fa1 100644 --- a/runtime/ui/lang/nl.inc +++ b/runtime/ui/lang/nl.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "Controllers blijven werken als er een ander venster op de voorgrond staat. macOS kan om toestemming voor Invoermonitoring vragen."}, {"Movement", "Beweging"}, {"Nothing", "Niets"}, +{"Items", "Voorwerpen"}, {"What the D-pad does in play.", "Wat de pijltjestoetsen in het spel doen."}, {"360-degree movement", "360 gradenbeweging"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Link loopt precies in de richting van de stick, in plaats van in 8 vaste richtingen."}, @@ -262,7 +263,6 @@ {"Rooster", "Haan"}, {"Choose", "Kiezen"}, {"Tunics", "Outfits"}, -{"Keys", "Sleutels"}, // runtime/ui/item_names.h {"Sword", "Zwaard"}, {"Noble Sword", "Koholint-zwaard"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Zet de tilt-shiftvervaging boven- en onderaan het scherm uit."}, {"Hide Hero Mode icon", "Icoon Legendarisch weg"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Verbergt het embleem van de moeilijkheidsgraad Legendarisch in de hoek van het scherm als je een bestand op Legendarisch speelt."}, -{"This seed picked your look. Commit to it!", "Deze seed heeft je uiterlijk gekozen. Hou je eraan!"}, {"Randomize all", "Alles willekeurig"}, {"Picks a random color for everything below.", "Kiest een willekeurige kleur voor alles hieronder."}, {"Default all", "Alles standaard"}, {"Puts everything on this page back to the game's normal look.", "Zet alles op deze pagina terug naar het normale uiterlijk van het spel."}, +{"Seed's look", "Uiterlijk van de seed"}, +{"Puts everything on this page back to this seed's look.", "Zet alles op deze pagina terug naar het uiterlijk van deze seed."}, {"Colors", "Kleuren"}, {"Tunic color", "Kleur outfit"}, {"Link's tunic color.", "De kleur van Links outfit."}, @@ -548,12 +549,12 @@ {"House color", "Kleur huizen"}, {"The roofs of the village houses.", "De daken van de huizen in het dorp."}, {"Enemies", "Vijanden"}, -{"Seed", "Seed"}, {"Enemy colors", "Kleur vijanden"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Geeft elk soort vijand een nieuwe kleur. Vijanden bij wie de kleur laat zien hoe sterk ze zijn, houden die van hen."}, {"Screen", "Scherm"}, {"Screen filter", "Schermfilter"}, {"Puts a filter over the whole screen, HUD included.", "Legt een filter over het hele scherm, inclusief de HUD."}, +{"Seed", "Seed"}, {"Weather", "Weer"}, {"This seed picked the weather. Commit to it!", "Deze seed heeft het weer gekozen. Hou je eraan!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Regen, sneeuw, onweer of een sneeuwstorm in de buitenwereld."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "Aan"}, -{"Seed: %s", "Seed: %s"}, {"Custom color", "Eigen kleur"}, {"Pick any color by hue, saturation and brightness.", "Kies elke kleur op tint, verzadiging en helderheid."}, {"Done", "Klaar"}, @@ -630,7 +630,6 @@ {"Seeds", "Seeds"}, {"Presets", "Presets"}, {"Goal", "Doel"}, -{"Items", "Voorwerpen"}, {"Extra checks", "Extra checks"}, {"World", "Wereld"}, {"Enemies & bosses", "Vijanden & eindbazen"}, @@ -1206,7 +1205,6 @@ {"Trap!", "Val!"}, {"Frog Song of Soul", "Opkikkerlied"}, {"Chamber Stone", "Kamersteen"}, -{"shared", "gedeeld"}, {"Beach chest", "Kist strand"}, {"Taltal entrance chest", "Kist ingang Tal Tal"}, {"Taltal east left chest", "Linkerkist Tal Tal-oost"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "Sleutels"}, +{"This seed picked your look. Commit to it!", "Deze seed heeft je uiterlijk gekozen. Hou je eraan!"}, +{"Seed: %s", "Seed: %s"}, +{"shared", "gedeeld"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Marin is een voorwerp in de pool, en zonder haar is de woestijn geblokkeerd."}, {"boss cutscenes", "scènes eindbazen"}, {"extended consumable drop", "meer drops"}, diff --git a/runtime/ui/lang/pt-BR.inc b/runtime/ui/lang/pt-BR.inc index 8947a582..1def4bde 100644 --- a/runtime/ui/lang/pt-BR.inc +++ b/runtime/ui/lang/pt-BR.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "Os controles continuam funcionando com outra janela na frente. O macOS pode pedir a permissão de Monitoramento de Entrada."}, {"Movement", "Movimento"}, {"Nothing", "Nada"}, +{"Items", "Itens"}, {"What the D-pad does in play.", "O que o direcional faz durante o jogo."}, {"360-degree movement", "Movimento em 360 graus"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Link anda na direção exata do analógico em vez de se limitar a 8 direções."}, @@ -263,7 +264,6 @@ {"Rooster", "Galo"}, {"Choose", "Escolher"}, {"Tunics", "Túnicas"}, -{"Keys", "Chaves"}, // runtime/ui/item_names.h {"Sword", "Espada"}, {"Noble Sword", "Espada de Koholint"}, @@ -510,11 +510,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Desativa o desfoque tilt-shift nas partes de cima e de baixo da tela."}, {"Hide Hero Mode icon", "Ocultar ícone do Modo Herói"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Oculta o emblema do Modo Herói no canto da tela ao jogar um arquivo salvo no Modo Herói."}, -{"This seed picked your look. Commit to it!", "Esta seed escolheu seu visual. Aceite!"}, {"Randomize all", "Aleatorizar tudo"}, {"Picks a random color for everything below.", "Escolhe uma cor aleatória para tudo abaixo."}, {"Default all", "Restaurar tudo"}, {"Puts everything on this page back to the game's normal look.", "Volta tudo nesta página ao visual normal do jogo."}, +{"Seed's look", "Visual da seed"}, +{"Puts everything on this page back to this seed's look.", "Volta tudo nesta página ao visual desta seed."}, {"Colors", "Cores"}, {"Tunic color", "Cor da túnica"}, {"Link's tunic color.", "A cor da túnica do Link."}, @@ -549,12 +550,12 @@ {"House color", "Cor das casas"}, {"The roofs of the village houses.", "Os telhados das casas da vila."}, {"Enemies", "Inimigos"}, -{"Seed", "Seed"}, {"Enemy colors", "Cor dos inimigos"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Dá uma cor nova a cada tipo de inimigo. Inimigos cuja cor indica sua força mantêm a deles."}, {"Screen", "Tela"}, {"Screen filter", "Filtro de tela"}, {"Puts a filter over the whole screen, HUD included.", "Aplica um filtro sobre a tela toda, incluindo o HUD."}, +{"Seed", "Seed"}, {"Weather", "Clima"}, {"This seed picked the weather. Commit to it!", "Esta seed escolheu o clima. Aceite!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Chuva, neve, tempestade ou nevasca no mundo externo."}, @@ -595,7 +596,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "Ativado"}, -{"Seed: %s", "Seed: %s"}, {"Custom color", "Cor personalizada"}, {"Pick any color by hue, saturation and brightness.", "Escolha qualquer cor por matiz, saturação e brilho."}, {"Done", "Pronto"}, @@ -631,7 +631,6 @@ {"Seeds", "Seeds"}, {"Presets", "Predefinições"}, {"Goal", "Objetivo"}, -{"Items", "Itens"}, {"Extra checks", "Locais extras"}, {"World", "Mundo"}, {"Enemies & bosses", "Inimigos e chefes"}, @@ -1207,7 +1206,6 @@ {"Trap!", "Armadilha!"}, {"Frog Song of Soul", "Canção da Alma do Sapo"}, {"Chamber Stone", "Pedra de Câmara"}, -{"shared", "compartilhada"}, {"Beach chest", "Baú da praia"}, {"Taltal entrance chest", "Baú da entrada de Tal Tal"}, {"Taltal east left chest", "Baú esquerdo do leste de Tal Tal"}, @@ -1497,4 +1495,8 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "Chaves"}, +{"This seed picked your look. Commit to it!", "Esta seed escolheu seu visual. Aceite!"}, +{"Seed: %s", "Seed: %s"}, +{"shared", "compartilhada"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Marin é um item na lista, e o deserto fica bloqueado sem ela."}, diff --git a/runtime/ui/lang/ru.inc b/runtime/ui/lang/ru.inc index ce063196..9c2e0027 100644 --- a/runtime/ui/lang/ru.inc +++ b/runtime/ui/lang/ru.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "Контроллеры работают, даже когда впереди другое окно. macOS может запросить разрешение на мониторинг ввода."}, {"Movement", "Передвижение"}, {"Nothing", "Ничего"}, +{"Items", "Предметы"}, {"What the D-pad does in play.", "Что делает крестовина в игре."}, {"360-degree movement", "Движение на 360°"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "Линк идет точно в направлении стика, а не по одному из 8 направлений."}, @@ -262,7 +263,6 @@ {"Rooster", "Петух"}, {"Choose", "Выбрать"}, {"Tunics", "Туники"}, -{"Keys", "Ключи"}, // runtime/ui/item_names.h {"Sword", "Меч"}, {"Noble Sword", "Кохолинтский меч"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "Отключает размытие «тилт-шифт» вверху и внизу экрана."}, {"Hide Hero Mode icon", "Скрыть значок героя"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "Скрывает значок режима героя в углу экрана, когда вы играете в режиме героя."}, -{"This seed picked your look. Commit to it!", "Этот сид выбрал вам внешний вид. Смиритесь!"}, {"Randomize all", "Все случайно"}, {"Picks a random color for everything below.", "Выбирает случайный цвет для всего, что ниже."}, {"Default all", "Все по умолчанию"}, {"Puts everything on this page back to the game's normal look.", "Возвращает всему на этой странице обычный вид игры."}, +{"Seed's look", "Вид сида"}, +{"Puts everything on this page back to this seed's look.", "Возвращает всему на этой странице вид этого сида."}, {"Colors", "Цвета"}, {"Tunic color", "Цвет туники"}, {"Link's tunic color.", "Цвет туники Линка."}, @@ -548,12 +549,12 @@ {"House color", "Цвет домов"}, {"The roofs of the village houses.", "Крыши домов в деревнях."}, {"Enemies", "Враги"}, -{"Seed", "Сид"}, {"Enemy colors", "Цвета врагов"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "Дает каждому виду врагов новый цвет. Враги, у которых цвет показывает силу, сохраняют свой."}, {"Screen", "Экран"}, {"Screen filter", "Фильтр экрана"}, {"Puts a filter over the whole screen, HUD included.", "Накладывает фильтр на весь экран, включая интерфейс."}, +{"Seed", "Сид"}, {"Weather", "Погода"}, {"This seed picked the weather. Commit to it!", "Этот сид выбрал погоду. Смиритесь!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "Дождь, снег, гроза или метель на поверхности."}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f FPS"}, // runtime/ui/option_rows.mm {"On", "Вкл."}, -{"Seed: %s", "Сид: %s"}, {"Custom color", "Свой цвет"}, {"Pick any color by hue, saturation and brightness.", "Выберите любой цвет по тону, насыщенности и яркости."}, {"Done", "Готово"}, @@ -630,7 +630,6 @@ {"Seeds", "Сиды"}, {"Presets", "Пресеты"}, {"Goal", "Цель"}, -{"Items", "Предметы"}, {"Extra checks", "Доп. проверки"}, {"World", "Мир"}, {"Enemies & bosses", "Враги и боссы"}, @@ -1206,7 +1205,6 @@ {"Trap!", "Ловушка!"}, {"Frog Song of Soul", "«Жабья задушевная»"}, {"Chamber Stone", "Камень-заготовка"}, -{"shared", "общий"}, {"Beach chest", "Сундук на пляже"}, {"Taltal entrance chest", "Тал-Тал: сундук у входа"}, {"Taltal east left chest", "Тал-Тал, восток: левый сундук"}, @@ -1496,6 +1494,10 @@ {", ", ", "}, {": ", ": "}, // not used any more +{"Keys", "Ключи"}, +{"This seed picked your look. Commit to it!", "Этот сид выбрал вам внешний вид. Смиритесь!"}, +{"Seed: %s", "Сид: %s"}, +{"shared", "общий"}, {"Marin is an item in the pool, and the desert is blocked without her.", "Марин — предмет в общем пуле, без нее путь в пустыню закрыт."}, {"boss cutscenes", "сцены боссов"}, {"extended consumable drop", "больше выпадающих припасов"}, diff --git a/runtime/ui/lang/zh-Hans.inc b/runtime/ui/lang/zh-Hans.inc index 00e9b65e..b80ec787 100644 --- a/runtime/ui/lang/zh-Hans.inc +++ b/runtime/ui/lang/zh-Hans.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "其他窗口在前台时手柄仍然有效。macOS可能会请求“输入监控”权限。"}, {"Movement", "移动"}, {"Nothing", "无"}, +{"Items", "道具"}, {"What the D-pad does in play.", "游戏中十字键的作用。"}, {"360-degree movement", "360度移动"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "林克会朝摇杆的准确方向移动,而不是只能朝8个方向。"}, @@ -262,7 +263,6 @@ {"Rooster", "飞天鸡"}, {"Choose", "选择"}, {"Tunics", "衣服"}, -{"Keys", "钥匙"}, // runtime/ui/item_names.h {"Sword", "剑"}, {"Noble Sword", "可湖霖之剑"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "关闭画面上下边缘的移轴模糊。"}, {"Hide Hero Mode icon", "隐藏英雄模式图标"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "游玩英雄模式存档时,隐藏画面角落的英雄模式标志。"}, -{"This seed picked your look. Commit to it!", "你的外观由这个种子决定。就这样吧!"}, {"Randomize all", "全部随机"}, {"Picks a random color for everything below.", "为以下所有项目随机选择颜色。"}, {"Default all", "全部默认"}, {"Puts everything on this page back to the game's normal look.", "将本页所有项目恢复为游戏原本的外观。"}, +{"Seed's look", "种子外观"}, +{"Puts everything on this page back to this seed's look.", "将本页所有项目恢复为这个种子的外观。"}, {"Colors", "颜色"}, {"Tunic color", "衣服颜色"}, {"Link's tunic color.", "林克衣服的颜色。"}, @@ -548,12 +549,12 @@ {"House color", "房屋颜色"}, {"The roofs of the village houses.", "村子房屋的屋顶。"}, {"Enemies", "敌人"}, -{"Seed", "种子"}, {"Enemy colors", "敌人颜色"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "为每种敌人换上新颜色。用颜色区分强弱的敌人保持原色。"}, {"Screen", "画面"}, {"Screen filter", "画面滤镜"}, {"Puts a filter over the whole screen, HUD included.", "为整个画面(包括HUD)加上滤镜。"}, +{"Seed", "种子"}, {"Weather", "天气"}, {"This seed picked the weather. Commit to it!", "天气由这个种子决定。就这样吧!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "在野外下雨、下雪、暴风雨或暴风雪。"}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "开"}, -{"Seed: %s", "种子:%s"}, {"Custom color", "自定义颜色"}, {"Pick any color by hue, saturation and brightness.", "通过色相、饱和度和亮度选择任意颜色。"}, {"Done", "完成"}, @@ -630,7 +630,6 @@ {"Seeds", "种子"}, {"Presets", "预设"}, {"Goal", "目标"}, -{"Items", "道具"}, {"Extra checks", "额外检查点"}, {"World", "世界"}, {"Enemies & bosses", "敌人与首领"}, @@ -1206,7 +1205,6 @@ {"Trap!", "陷阱!"}, {"Frog Song of Soul", "蛙之灵魂曲"}, {"Chamber Stone", "嵌石"}, -{"shared", "共用"}, {"Beach chest", "海滩宝箱"}, {"Taltal entrance chest", "达达入口宝箱"}, {"Taltal east left chest", "达达东侧左边宝箱"}, @@ -1496,6 +1494,10 @@ {", ", "、"}, {": ", ":"}, // not used any more +{"Keys", "钥匙"}, +{"This seed picked your look. Commit to it!", "你的外观由这个种子决定。就这样吧!"}, +{"Seed: %s", "种子:%s"}, +{"shared", "共用"}, {"Marin is an item in the pool, and the desert is blocked without her.", "玛林是道具池中的道具,没有她就进不了沙漠。"}, {"boss cutscenes", "首领过场动画"}, {"extended consumable drop", "更多消耗品掉落"}, diff --git a/runtime/ui/lang/zh-Hant.inc b/runtime/ui/lang/zh-Hant.inc index d983523b..2bc4b900 100644 --- a/runtime/ui/lang/zh-Hant.inc +++ b/runtime/ui/lang/zh-Hant.inc @@ -181,6 +181,7 @@ {"Controllers keep working while another window is in front. macOS may ask for Input Monitoring permission.", "其他視窗在前景時,控制器仍可使用。macOS可能會要求「輸入監控」權限。"}, {"Movement", "移動"}, {"Nothing", "無"}, +{"Items", "道具"}, {"What the D-pad does in play.", "遊戲中十字鍵的作用。"}, {"360-degree movement", "360度移動"}, {"Link walks in the exact direction of the stick instead of snapping to 8 directions.", "林克會照搖桿的精確方向行走,而不是只有8個方向。"}, @@ -262,7 +263,6 @@ {"Rooster", "飛天雞"}, {"Choose", "選擇"}, {"Tunics", "衣服"}, -{"Keys", "鑰匙"}, // runtime/ui/item_names.h {"Sword", "劍"}, {"Noble Sword", "高貴之劍"}, @@ -509,11 +509,12 @@ {"Turns off the tilt-shift blur at the top and bottom of the screen.", "關閉畫面上下方的移軸模糊效果。"}, {"Hide Hero Mode icon", "隱藏英雄模式圖示"}, {"Hides the Hero Mode emblem in the corner of the screen while playing a Hero Mode file.", "遊玩英雄模式存檔時,隱藏畫面角落的英雄模式標誌。"}, -{"This seed picked your look. Commit to it!", "這個種子已經決定了你的外觀。就這樣吧!"}, {"Randomize all", "全部隨機"}, {"Picks a random color for everything below.", "為下方所有項目隨機選擇顏色。"}, {"Default all", "全部預設"}, {"Puts everything on this page back to the game's normal look.", "將這一頁的所有項目恢復為遊戲原本的外觀。"}, +{"Seed's look", "種子外觀"}, +{"Puts everything on this page back to this seed's look.", "將這一頁的所有項目恢復為這個種子的外觀。"}, {"Colors", "顏色"}, {"Tunic color", "衣服顏色"}, {"Link's tunic color.", "林克衣服的顏色。"}, @@ -548,12 +549,12 @@ {"House color", "房屋顏色"}, {"The roofs of the village houses.", "村莊房屋的屋頂。"}, {"Enemies", "敵人"}, -{"Seed", "種子"}, {"Enemy colors", "敵人顏色"}, {"Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs.", "為每種敵人換上新顏色。以顏色區分強弱的敵人會保留原本的顏色。"}, {"Screen", "畫面"}, {"Screen filter", "畫面濾鏡"}, {"Puts a filter over the whole screen, HUD included.", "在整個畫面上套用濾鏡,包含HUD。"}, +{"Seed", "種子"}, {"Weather", "天氣"}, {"This seed picked the weather. Commit to it!", "這個種子已經決定了天氣。就這樣吧!"}, {"Rain, snow, a storm or a blizzard on the overworld.", "在野外下雨、下雪、暴風雨或暴風雪。"}, @@ -594,7 +595,6 @@ {"%.0f fps", "%.0f fps"}, // runtime/ui/option_rows.mm {"On", "開"}, -{"Seed: %s", "種子:%s"}, {"Custom color", "自訂顏色"}, {"Pick any color by hue, saturation and brightness.", "依色相、飽和度和亮度選擇任何顏色。"}, {"Done", "完成"}, @@ -630,7 +630,6 @@ {"Seeds", "種子"}, {"Presets", "預設組合"}, {"Goal", "目標"}, -{"Items", "道具"}, {"Extra checks", "額外檢查點"}, {"World", "世界"}, {"Enemies & bosses", "敵人與首領"}, @@ -1206,7 +1205,6 @@ {"Trap!", "陷阱!"}, {"Frog Song of Soul", "蛙之靈魂曲"}, {"Chamber Stone", "嵌石"}, -{"shared", "共用"}, {"Beach chest", "海灘寶箱"}, {"Taltal entrance chest", "達達入口寶箱"}, {"Taltal east left chest", "達達東側左寶箱"}, @@ -1496,6 +1494,10 @@ {", ", "、"}, {": ", ":"}, // not used any more +{"Keys", "鑰匙"}, +{"This seed picked your look. Commit to it!", "這個種子已經決定了你的外觀。就這樣吧!"}, +{"Seed: %s", "種子:%s"}, +{"shared", "共用"}, {"Marin is an item in the pool, and the desert is blocked without her.", "瑪林是道具池中的道具,沒有她就無法進入沙漠。"}, {"boss cutscenes", "首領過場動畫"}, {"extended consumable drop", "擴充消耗品掉落"}, diff --git a/runtime/ui/menu.mm b/runtime/ui/menu.mm index a3441577..04214db0 100644 --- a/runtime/ui/menu.mm +++ b/runtime/ui/menu.mm @@ -564,31 +564,28 @@ static void tab_display(void) { opt_end(); } -extern "C" bool cosmetics_seed_on(void); // runtime/cosmetics_seed.c -extern "C" bool weather_cycle_on(void); // runtime/nvn/weather_cycle.c +extern "C" bool cosmetics_seed_on(void); // runtime/cosmetics_seed.c +extern "C" void cosmetics_seed_apply(void); +extern "C" bool weather_cycle_on(void); // runtime/nvn/weather_cycle.c // Cosmetics: tunic / heart colours, live (runtime/nvn/texpatch.c), and recolours by draw (runtime/nvn/recolour*.c); -// a seed made with "Random cosmetics" has its own, and the page is locked while it's played (rows greyed out, showing -// the seed's): the player's own choices stay saved for another seed or vanilla +// a seed made with "Random cosmetics" puts its own set into the rows the first time it's played (cosmetics_seed.c), +// and they stay the player's to change: "Seed's look" puts the seed's back, "Default all" the game's own static void tab_cosmetics(void) { opt_begin("##cosmetics", ImGui::GetFontSize() / 34); CosColour *rows[] = {&g_settings.tunic, &g_settings.hearts, &g_settings.hair, &g_settings.skin, &g_settings.shield, &g_settings.leaves, &g_settings.grass, &g_settings.sand, &g_settings.water, &g_settings.fences, &g_settings.walls, &g_settings.houses}; - bool seed = cosmetics_seed_on(); - if (seed) { - opt_disable_next(); - opt_action("This seed picked your look. Commit to it!", "", NULL, false); - } else { - if (opt_button("Randomize all", "Picks a random color for everything below.")) - for (CosColour *c : rows) c->pick = 1 + rand() % (COL_RANDOM - 1); // (a named colour: shown as what it is) - if (opt_button("Default all", "Puts everything on this page back to the game's normal look.")) { - for (CosColour *c : rows) c->pick = COL_DEFAULT; - g_settings.enemy_colours = 0; - g_settings.screen_filter = 0; - g_settings.weather = 0; - } + if (opt_button("Randomize all", "Picks a random color for everything below.")) + for (CosColour *c : rows) c->pick = 1 + rand() % (COL_RANDOM - 1); // (a named colour: shown as what it is) + if (opt_button("Default all", "Puts everything on this page back to the game's normal look.")) { + for (CosColour *c : rows) c->pick = COL_DEFAULT; + g_settings.enemy_colours = 0; + g_settings.screen_filter = 0; + g_settings.weather = 0; } + if (cosmetics_seed_on() && opt_button("Seed's look", "Puts everything on this page back to this seed's look.")) + cosmetics_seed_apply(); opt_section("Colors"); opt_colour("Tunic color", &g_settings.tunic, COL_SLOT_TUNIC, "Link's tunic color."); opt_colour("Heart color", &g_settings.hearts, COL_SLOT_HEARTS, "The color of the hearts on the HUD."); @@ -603,14 +600,12 @@ static void tab_cosmetics(void) { LN("Cherry blossom"), LN("Mixed")}; static const int preset[4][3] = {{COL_DEFAULT, COL_DEFAULT, COL_DEFAULT}, {2, 3, 3}, {10, 10, 10}, {9, COL_DEFAULT, COL_DEFAULT}}; - int cur = 4; // (as shown: a row on Default shows the seed's colour, if it has its own) + int cur = 4; for (int i = 0; i < 4; i++) - if (col_pick(&g_settings.leaves, COL_SLOT_LEAVES) == preset[i][0] && - col_pick(&g_settings.grass, COL_SLOT_GRASS) == preset[i][1] && - col_pick(&g_settings.sand, COL_SLOT_SAND) == preset[i][2]) + if (g_settings.leaves.pick == preset[i][0] && g_settings.grass.pick == preset[i][1] && + g_settings.sand.pick == preset[i][2]) cur = i; int v = cur; - if (seed) opt_disable_next(); if (opt_choice("Season", &v, names, 5, 0, "Sets the leaves, grass and sand colors below.") && v != cur) { if (v == 4) v = cur == 0 ? 3 : 0; // (Mixed is never chosen: past the ends, back round) g_settings.leaves.pick = preset[v][0]; @@ -626,26 +621,19 @@ static void tab_cosmetics(void) { opt_colour("Wall color", &g_settings.walls, COL_SLOT_WALLS, "The overworld's cliff walls and ledges."); opt_colour("House color", &g_settings.houses, COL_SLOT_HOUSES, "The roofs of the village houses."); opt_section("Enemies"); - { // (a seed with its own cosmetics: "Seed", its enemies are per seed; and no screen filter) - const char *modes[N_ENEMY_COLOUR_MODES]; - for (int i = 0; i < N_ENEMY_COLOUR_MODES; i++) modes[i] = g_enemy_colour_modes[i]; - int shown = 0; - if (seed) modes[0] = LN("Seed"), opt_disable_next(); - opt_choice("Enemy colors", seed ? &shown : &g_settings.enemy_colours, modes, N_ENEMY_COLOUR_MODES, 0, - "Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs."); - opt_section("Screen"); - if (seed) opt_disable_next(); - opt_choice("Screen filter", seed ? &shown : &g_settings.screen_filter, g_screen_filters, N_SCREEN_FILTERS, 0, - "Puts a filter over the whole screen, HUD included."); - } + opt_choice("Enemy colors", &g_settings.enemy_colours, g_enemy_colour_modes, N_ENEMY_COLOUR_MODES, 0, + "Gives each kind of enemy a new color. Enemies whose color shows how strong they are keep theirs."); + opt_section("Screen"); + opt_choice("Screen filter", &g_settings.screen_filter, g_screen_filters, N_SCREEN_FILTERS, 0, + "Puts a filter over the whole screen, HUD included."); #ifdef __APPLE__ // (the Metal renderer draws it; Vulkan: not yet - the setting does nothing there) - { // (a seed with its own cosmetics, or the seed's weather cycle: "Seed", the seed's weather - locked) + { // (the seed's weather cycle: "Seed", the seed's weather - locked) const char *names[N_WEATHERS]; for (int i = 0; i < N_WEATHERS; i++) names[i] = g_weathers[i]; bool cycle = weather_cycle_on(); int shown = 0; - if (seed || cycle) names[0] = LN("Seed"), opt_disable_next(); - opt_choice("Weather", seed || cycle ? &shown : &g_settings.weather, names, N_WEATHERS, 0, + if (cycle) names[0] = LN("Seed"), opt_disable_next(); + opt_choice("Weather", cycle ? &shown : &g_settings.weather, names, N_WEATHERS, 0, cycle ? "This seed picked the weather. Commit to it!" : "Rain, snow, a storm or a blizzard on the overworld."); } #endif diff --git a/runtime/ui/option_rows.mm b/runtime/ui/option_rows.mm index ba89c8b8..61d0696a 100644 --- a/runtime/ui/option_rows.mm +++ b/runtime/ui/option_rows.mm @@ -357,19 +357,7 @@ bool opt_colour(const char *label, CosColour *c, int slot, const char *desc) { int prev = c->pick; const char *names[N_COL]; for (int i = 0; i < N_COL; i++) names[i] = g_col_names[i]; - char seed[96], hexs[16]; - int sp = col_pick(c, slot); - uint32_t srgb = 0; // (the seed's own colours are any colour: shown as #RRGGBB) - if (sp == COL_CUSTOM && col_seed_rgb(c, slot, &srgb)) - snprintf(hexs, sizeof hexs, "#%06X", (unsigned)srgb), snprintf(seed, sizeof seed, L("Seed: %s"), hexs); - else if (col_seed_rgb(c, slot, &srgb)) snprintf(seed, sizeof seed, L("Seed: %s"), L(g_col_names[sp])); - else seed[0] = 0; - if (seed[0]) { // (the seed's own colour: locked, greyed out) - opt_disable_next(); - g_value_shown = true; - opt_action(label, seed, desc, true, true); - return false; - } + (void)slot; bool changed = opt_choice(label, &c->pick, names, N_COL, COL_DEFAULT, desc); if (g_collect) return false; if (changed && c->pick == COL_CUSTOM && prev != COL_CUSTOM) // (Custom starts from the colour it was on)