2026-03-10 18:24:01 +01:00
{
"game.title" : "OUVRE LA BOITE" ,
"game.subtitle" : "Qu'est-ce qu'il y a dedans ? Un seul moyen de le savoir." ,
"game.version" : "v0.1.0" ,
"menu.new_game" : "Nouvelle Partie" ,
"menu.load_game" : "Charger une Partie" ,
"menu.language" : "Langue" ,
"menu.quit" : "Quitter" ,
"menu.back" : "Retour" ,
"menu.continue" : "Continuer" ,
"menu.save" : "Sauvegarder" ,
"menu.settings" : "Parametres" ,
"action.open_box" : "Ouvrir une boite" ,
"action.inventory" : "Voir l'inventaire" ,
"action.craft" : "Fabriquer" ,
"action.adventure" : "Partir a l'aventure" ,
"action.appearance" : "Changer d'apparence" ,
"action.save" : "Sauvegarder" ,
"action.quit" : "Retourner au menu" ,
"prompt.name" : "Quel est ton nom, brave ouvreur de boites ?" ,
"prompt.choose_action" : "Que veux-tu faire ?" ,
"prompt.choose_box" : "Quelle boite veux-tu ouvrir ?" ,
"prompt.choose_interaction" : "Plusieurs interactions possibles ! Choisis-en une :" ,
"prompt.press_key" : "Appuie sur une touche pour continuer..." ,
"box.opening" : "Ouverture de {0}..." ,
2026-03-10 20:31:46 +01:00
"box.opened" : "{0} ouverte ! (Rarete : {1})" ,
"box.opened_short" : "{0} ouverte !" ,
"box.shimmer" : "Quelque chose scintille..." ,
2026-03-10 18:24:01 +01:00
"box.found" : "Tu as trouve : {0} !" ,
"box.found_box" : "A l'interieur il y avait... une autre boite ! {0} !" ,
"box.empty" : "La boite est vide ! Philosophique." ,
"box.no_boxes" : "Tu n'as aucune boite. Comment t'as fait ?" ,
"box.auto_open" : "{0} s'ouvre automatiquement !" ,
2026-03-10 20:31:46 +01:00
"loot.received" : "Tu as recu :" ,
"loot.title" : "Butin !" ,
"loot.name" : "Nom" ,
"loot.rarity" : "Rarete" ,
"loot.category" : "Categorie" ,
"ui.feature_unlocked" : "NOUVELLE FONCTIONNALITE : {0}" ,
Fix bugs, add endgame/completion features, adventure dedup, and comprehensive renderer tests
Bug fixes:
- Fix double "NEW FEATURE UNLOCKED" message and broken enum-to-key mapping for all UIFeatures
- Fix Spectre markup crash when opening inventory with colors unlocked (unescaped rarity brackets)
- Fix latent Spectre markup crash in ResourcePanel (unescaped bar brackets)
- Fix WeightedRandom.PickMultiple picking with replacement causing duplicate drops
- Fix double AddItem bug (BoxEngine + RenderEvents both adding to state)
- Add StatType and FontStyle fields to ItemDefinition (were in JSON but missing from C# record)
New features:
- Endgame box (Mythic) that appears when all 8 resources are discovered, contains Crown of Completion
- Completion percentage tracker as mid-game meta unlock (tier 3), shown in both renderers
- Adventure pool depletion: adventure sub-boxes with already-unlocked themes are removed from loot pool
- Global error handling with log file output (openthebox-error.log)
- Tiered meta progression: 5 sequential meta boxes replacing single box_meta
New tests (180 new, 228 total):
- 5 panel rendering test classes covering all enum values (Portrait, Resource, Stats, Inventory, Chat)
- RenderContext and RendererFactory logic tests
- SpectreRenderer output tests across 4 context configurations
- BasicRenderer output and input method tests
- Simulation state mutation and full-run completion tests
2026-03-11 09:34:30 +01:00
"ui.completion" : "Completion : {0}%" ,
2026-03-10 20:31:46 +01:00
"prompt.what_do" : "Que fais-tu ?" ,
"prompt.invalid_choice" : "Entre un nombre entre 1 et {0}." ,
2026-03-10 18:24:01 +01:00
"box.starter" : "Boite de depart" ,
"box.starter.desc" : "Ta premiere boite. Le debut de tout. Ou de rien. Probablement de quelque chose quand meme." ,
"box.box_of_boxes" : "Boite a boite" ,
"box.box_of_boxes.desc" : "Une boite qui contient... des boites. C'est des boites jusqu'en bas." ,
"box.not_great" : "Boite pas ouf" ,
"box.not_great.desc" : "Elle est pas geniale. Elle est pas terrible. Elle... est." ,
"box.ok_tier" : "Boite ok tiers" ,
"box.ok_tier.desc" : "La mediocrite n'a jamais ete aussi carree." ,
"box.cool" : "Boite coolos" ,
"box.cool.desc" : "La on commence a causer. A causer cool." ,
"box.epic" : "Boite epique" ,
"box.epic.desc" : "L'orchestre s'intensifie. La foule retient son souffle. C'est... une boite." ,
"box.legendhair" : "Boite legend'hair" ,
"box.legendhair.desc" : "La coiffure la plus legendaire que tu deballeras jamais. Cheveu-jour-d'hui, legende demain." ,
"box.legendary" : "Boite legendaire" ,
"box.legendary.desc" : "Les legendes parlent de cette boite. Doucement quand meme, c'est une boite." ,
"box.adventure" : "Boite aventure" ,
"box.adventure.desc" : "Contient la cle de l'aventure ! Litteralement, parfois." ,
"box.style" : "Boite stylee" ,
"box.style.desc" : "La mode est ephemere. Le style sorti d'une boite est eternel." ,
"box.improvement" : "Boite d'amelioration" ,
"box.improvement.desc" : "On peut toujours s'ameliorer. Surtout avec des boites." ,
"box.supply" : "Boite de fourniture" ,
"box.supply.desc" : "Des fournitures ! Le sang vital de tout passione d'ouverture de boites." ,
Fix bugs, add endgame/completion features, adventure dedup, and comprehensive renderer tests
Bug fixes:
- Fix double "NEW FEATURE UNLOCKED" message and broken enum-to-key mapping for all UIFeatures
- Fix Spectre markup crash when opening inventory with colors unlocked (unescaped rarity brackets)
- Fix latent Spectre markup crash in ResourcePanel (unescaped bar brackets)
- Fix WeightedRandom.PickMultiple picking with replacement causing duplicate drops
- Fix double AddItem bug (BoxEngine + RenderEvents both adding to state)
- Add StatType and FontStyle fields to ItemDefinition (were in JSON but missing from C# record)
New features:
- Endgame box (Mythic) that appears when all 8 resources are discovered, contains Crown of Completion
- Completion percentage tracker as mid-game meta unlock (tier 3), shown in both renderers
- Adventure pool depletion: adventure sub-boxes with already-unlocked themes are removed from loot pool
- Global error handling with log file output (openthebox-error.log)
- Tiered meta progression: 5 sequential meta boxes replacing single box_meta
New tests (180 new, 228 total):
- 5 panel rendering test classes covering all enum values (Portrait, Resource, Stats, Inventory, Chat)
- RenderContext and RendererFactory logic tests
- SpectreRenderer output tests across 4 context configurations
- BasicRenderer output and input method tests
- Simulation state mutation and full-run completion tests
2026-03-11 09:34:30 +01:00
"box.meta_basics" : "Boite Meta - Les Bases" ,
"box.meta_basics.desc" : "Couleurs, fleches, animations. Le fondement de la vision." ,
"box.meta_interface" : "Boite Meta - L'Interface" ,
"box.meta_interface.desc" : "Panneaux, ressources, stats. Les outils de la comprehension." ,
"box.meta_deep" : "Boite Meta - Personnalisation" ,
"box.meta_deep.desc" : "Couleurs etendues, artisanat, chat, portrait. Exprime-toi." ,
"box.meta_resources" : "Boite Meta - Ressources" ,
"box.meta_resources.desc" : "Deverouille la capacite de voir ce que tu as. Et ce qui te manque." ,
"box.meta_mastery" : "Boite Meta - La Maitrise" ,
"box.meta_mastery.desc" : "Mise en page, stats, polices. Les touches finales d'un vrai maitre des boites." ,
2026-03-10 18:24:01 +01:00
"box.black" : "Boite noire" ,
"box.black.desc" : "Personne ne sait ce qu'il y a dedans. Meme pas la boite." ,
"box.story" : "Boite a histoire" ,
"box.story.desc" : "Chaque boite a une histoire. Celle-ci plus que les autres." ,
"box.music" : "Boite a musique" ,
"box.music.desc" : "Do do do do. La musique de boite c'est la meilleure musique." ,
"box.cookie" : "Boite a Cookies" ,
"box.cookie.desc" : "La fortune sourit aux audacieux. Et a ceux qui ouvrent des boites." ,
"box.adventure.space" : "Boite d'aventure spatiale" ,
"box.adventure.space.desc" : "Vers l'infini et au-dela ! (Boite non incluse dans l'infini)" ,
"box.adventure.medieval" : "Boite d'aventure medievale" ,
"box.adventure.medieval.desc" : "Oyez, oyez ! Une boite d'aventure d'antan !" ,
"box.adventure.pirate" : "Boite d'aventure pirate" ,
"box.adventure.pirate.desc" : "Arr ! X marque la boite !" ,
"box.adventure.contemporary" : "Boite d'aventure contemporaine" ,
"box.adventure.contemporary.desc" : "Une boite pour les temps modernes. Livree avec l'anxiete du WiFi." ,
"box.adventure.sentimental" : "Boite d'aventure sentimentale" ,
"box.adventure.sentimental.desc" : "Cette boite te fait ressentir des choses. Surtout de la curiosite." ,
"box.adventure.prehistoric" : "Boite d'aventure prehistorique" ,
"box.adventure.prehistoric.desc" : "Ouga bouga boite. Tres vieille. Beaucoup mystere." ,
"box.adventure.cosmic" : "Boite d'aventure cosmique" ,
"box.adventure.cosmic.desc" : "L'univers est une boite. Cette boite est un univers." ,
"box.adventure.microscopic" : "Boite d'aventure microscopique" ,
"box.adventure.microscopic.desc" : "La taille ne compte pas. Sauf quand si. Zoom !" ,
"box.adventure.darkfantasy" : "Boite d'aventure dark fantasy" ,
"box.adventure.darkfantasy.desc" : "Les tenebres t'attendent. Et aussi une boite. Une boite sombre." ,
"meta.unlocked" : "NOUVELLE FONCTIONNALITE : {0} !" ,
"meta.colors" : "Couleurs de texte" ,
"meta.extended_colors" : "Palette de couleurs etendue" ,
"meta.arrows" : "Navigation avec les fleches" ,
"meta.inventory" : "Panneau d'inventaire" ,
"meta.resources" : "Panneau de ressources" ,
"meta.stats" : "Panneau de statistiques" ,
"meta.portrait" : "Panneau portrait" ,
"meta.chat" : "Panneau de discussion" ,
"meta.layout" : "Mise en page complete" ,
"meta.shortcuts" : "Raccourcis clavier" ,
"meta.animation" : "Animation d'ouverture de boite" ,
"meta.crafting" : "Panneau de fabrication" ,
Fix bugs, add endgame/completion features, adventure dedup, and comprehensive renderer tests
Bug fixes:
- Fix double "NEW FEATURE UNLOCKED" message and broken enum-to-key mapping for all UIFeatures
- Fix Spectre markup crash when opening inventory with colors unlocked (unescaped rarity brackets)
- Fix latent Spectre markup crash in ResourcePanel (unescaped bar brackets)
- Fix WeightedRandom.PickMultiple picking with replacement causing duplicate drops
- Fix double AddItem bug (BoxEngine + RenderEvents both adding to state)
- Add StatType and FontStyle fields to ItemDefinition (were in JSON but missing from C# record)
New features:
- Endgame box (Mythic) that appears when all 8 resources are discovered, contains Crown of Completion
- Completion percentage tracker as mid-game meta unlock (tier 3), shown in both renderers
- Adventure pool depletion: adventure sub-boxes with already-unlocked themes are removed from loot pool
- Global error handling with log file output (openthebox-error.log)
- Tiered meta progression: 5 sequential meta boxes replacing single box_meta
New tests (180 new, 228 total):
- 5 panel rendering test classes covering all enum values (Portrait, Resource, Stats, Inventory, Chat)
- RenderContext and RendererFactory logic tests
- SpectreRenderer output tests across 4 context configurations
- BasicRenderer output and input method tests
- Simulation state mutation and full-run completion tests
2026-03-11 09:34:30 +01:00
"meta.completion" : "Suivi de completion" ,
2026-03-10 18:24:01 +01:00
"item.rarity.common" : "Commun" ,
"item.rarity.uncommon" : "Peu commun" ,
"item.rarity.rare" : "Rare" ,
"item.rarity.epic" : "Epique" ,
"item.rarity.legendary" : "Legendaire" ,
"item.rarity.mythic" : "Mythique" ,
"resource.health" : "Sante" ,
"resource.mana" : "Mana" ,
"resource.food" : "Nourriture" ,
"resource.stamina" : "Endurance" ,
"resource.blood" : "Sang" ,
"resource.gold" : "Or" ,
"resource.oxygen" : "Oxygene" ,
"resource.energy" : "Energie" ,
"stat.strength" : "Force" ,
"stat.intelligence" : "Intelligence" ,
"stat.luck" : "Chance" ,
"stat.charisma" : "Charisme" ,
"stat.dexterity" : "Dexterite" ,
"stat.wisdom" : "Sagesse" ,
2026-03-10 19:25:02 +01:00
"item.meta_font_consolas" : "Police : Consolas" ,
"item.meta_font_firetruc" : "Police : Firetruc" ,
"item.meta_font_jetbrains" : "Police : JetBrains Mono" ,
2026-03-10 18:24:01 +01:00
"cosmetic.hair.none" : "Chauve" ,
"cosmetic.hair.short" : "Cheveux courts" ,
"cosmetic.hair.long" : "Cheveux longs" ,
"cosmetic.hair.ponytail" : "Queue de cheval" ,
"cosmetic.hair.braided" : "Tresses" ,
"cosmetic.hair.cyberpunk" : "Cheveux neon cyberpunk" ,
"cosmetic.hair.fire" : "Cheveux en feu" ,
"cosmetic.hair.stardust" : "Coiffure Poussiere d'Etoile legendaire" ,
"cosmetic.eyes.none" : "Pas d'yeux (mysterieux !)" ,
"cosmetic.eyes.blue" : "Yeux bleus" ,
"cosmetic.eyes.green" : "Yeux verts" ,
"cosmetic.eyes.redorange" : "Yeux rouge-orange" ,
"cosmetic.eyes.brown" : "Yeux marron" ,
"cosmetic.eyes.black" : "Yeux noirs" ,
"cosmetic.eyes.sunglasses" : "Lunettes de soleil" ,
"cosmetic.eyes.pilotglasses" : "Lunettes d'aviateur" ,
"cosmetic.eyes.aircraftglasses" : "Lunettes de pilote de chasse" ,
"cosmetic.eyes.cybernetic" : "Yeux cybernetiques" ,
"cosmetic.eyes.magician" : "Lunettes de magicien" ,
"cosmetic.body.naked" : "Torse nu" ,
"cosmetic.body.regulartshirt" : "T-shirt basique" ,
"cosmetic.body.sexytshirt" : "T-shirt sexy" ,
"cosmetic.body.suit" : "Costume" ,
"cosmetic.body.armored" : "Armure" ,
"cosmetic.body.robotic" : "Chassis robotique" ,
"cosmetic.legs.none" : "Flottant (pas de jambes !)" ,
"cosmetic.legs.naked" : "Jambes nues" ,
"cosmetic.legs.slip" : "Slip" ,
"cosmetic.legs.short" : "Short" ,
"cosmetic.legs.panty" : "Culotte" ,
"cosmetic.legs.rocketboots" : "Bottes a reaction" ,
"cosmetic.legs.pegleg" : "Jambe de bois" ,
"cosmetic.legs.tentacles" : "Tentacules" ,
"cosmetic.arms.none" : "Pas de bras (mode T-Rex)" ,
"cosmetic.arms.short" : "Bras courts" ,
"cosmetic.arms.regular" : "Bras normaux" ,
"cosmetic.arms.long" : "Bras longs extensibles" ,
"cosmetic.arms.mechanical" : "Bras mecaniques" ,
"cosmetic.arms.wings" : "Ailes" ,
"cosmetic.arms.extrapair" : "Quatre bras" ,
"cosmetic.gender_error" : "Nouveau genre (ERREUR : les boites n'ont pas de genre. La boite s'excuse pour la confusion.)" ,
"tint.none" : "Naturel" ,
"tint.cyan" : "Cyan" ,
"tint.orange" : "Orange" ,
"tint.purple" : "Violet" ,
"tint.warmpink" : "Rose chaud" ,
"tint.light" : "Clair" ,
"tint.dark" : "Sombre" ,
"tint.rainbow" : "Arc-en-ciel" ,
"tint.neon" : "Neon" ,
"tint.silver" : "Argent" ,
"tint.gold" : "Or" ,
"tint.void" : "Neant" ,
"material.wood" : "Bois" ,
"material.bronze" : "Bronze" ,
"material.iron" : "Fer" ,
"material.steel" : "Acier" ,
"material.titanium" : "Titane" ,
"material.diamond" : "Diamant" ,
"material.carbonfiber" : "Fibre de carbone" ,
"material.form.raw" : "Brut" ,
"material.form.refined" : "Raffine" ,
"material.form.nail" : "Clou" ,
"material.form.plank" : "Planche" ,
"material.form.ingot" : "Lingot" ,
"material.form.sheet" : "Feuille" ,
"material.form.thread" : "Fil" ,
"material.form.dust" : "Poudre" ,
"material.form.gem" : "Gemme" ,
"item.health_potion_small" : "Petite Potion de Sante" ,
"item.health_potion_medium" : "Potion de Sante Moyenne" ,
"item.health_potion_large" : "Grande Potion de Sante" ,
"item.mana_crystal_small" : "Petit Cristal de Mana" ,
"item.mana_crystal_medium" : "Cristal de Mana Moyen" ,
"item.food_ration" : "Ration alimentaire" ,
"item.stamina_drink" : "Boisson d'endurance" ,
"item.blood_vial" : "Fiole de sang" ,
"item.gold_pouch" : "Bourse d'or" ,
"item.oxygen_tank" : "Reservoir d'oxygene" ,
"item.energy_cell" : "Cellule d'energie" ,
"item.space.badge" : "Badge d'astronaute" ,
"item.space.phone" : "Numero de telephone alien" ,
"item.space.key" : "Cle d'acces au sas" ,
"item.space.map" : "Carte stellaire" ,
"item.space.coordinates" : "Coordonnees mysterieuses" ,
"item.space.helmet" : "Casque spatial" ,
"item.medieval.crest" : "Blason de chevalier" ,
"item.medieval.sword" : "Replique d'Excalibur" ,
"item.medieval.scroll" : "Parchemin ancien" ,
"item.medieval.seal" : "Sceau royal" ,
"item.medieval.key" : "Cle du donjon" ,
"item.pirate.map" : "Carte au tresor" ,
"item.pirate.compass" : "Boussole enchantee" ,
"item.pirate.feather" : "Plume de perroquet" ,
"item.pirate.rum" : "Bouteille de rhum" ,
"item.pirate.flag" : "Jolly Roger" ,
"item.pirate.key" : "Cle du coffre" ,
"item.contemporary.phone" : "Smartphone" ,
"item.contemporary.card" : "Carte de credit" ,
"item.contemporary.ticket" : "Ticket de metro" ,
"item.contemporary.usb" : "Cle USB suspecte" ,
"item.contemporary.key" : "Cle d'appartement" ,
"item.contemporary.badge" : "Badge d'entreprise" ,
"item.sentimental.letter" : "Lettre d'amour" ,
"item.sentimental.flower" : "Fleur sechee" ,
"item.sentimental.album" : "Album photo" ,
"item.sentimental.melody" : "Melodie de boite a musique" ,
"item.sentimental.teddy" : "Vieil ours en peluche" ,
"item.sentimental.phone" : "Numero de l'ex" ,
"item.prehistoric.tooth" : "Dent de dinosaure" ,
"item.prehistoric.painting" : "Fragment de peinture rupestre" ,
"item.prehistoric.amber" : "Pierre d'ambre" ,
"item.prehistoric.club" : "Massue en os" ,
"item.prehistoric.fossil" : "Fossile de trilobite" ,
"item.cosmic.shard" : "Eclat de nebuleuse" ,
"item.cosmic.fragment" : "Fragment de trou noir" ,
"item.cosmic.crystal" : "Cristal de quasar" ,
"item.cosmic.dust" : "Poussiere cosmique" ,
"item.cosmic.core" : "Coeur d'etoile" ,
"item.microscopic.bacteria" : "Echantillon de bacterie sentiente" ,
"item.microscopic.dna" : "Brin d'ADN luminescent" ,
"item.microscopic.membrane" : "Membrane cellulaire renforcee" ,
"item.microscopic.mitochondria" : "Mitochondrie hyperactive" ,
"item.microscopic.prion" : "Prion amical (probablement)" ,
"item.darkfantasy.ring" : "Anneau maudit" ,
"item.darkfantasy.rune" : "Rune de sang" ,
"item.darkfantasy.cloak" : "Cape d'ombre" ,
"item.darkfantasy.grimoire" : "Grimoire du necromancien" ,
"item.darkfantasy.gem" : "Gemme d'ame" ,
"item.darkfantasy.key" : "Cle en os" ,
"item.resource_max_up" : "{0} Max +1" ,
"item.resource_up" : "{0} +1" ,
"item.stat_boost" : "{0} +1" ,
Add complete content: recipes, French translations, music/cookie events
- Add 34 crafting recipes (materials, consumables, cosmetics, adventures, boxes)
- Add French translations for all 8 remaining adventures
- Add missing item definitions (resource_max_*, music_melody, cookie_fortune)
- Add MusicPlayedEvent and CookieFortuneEvent for special box types
- Make box_story, box_cookie, box_music reachable from box_of_boxes
- Fix content file copying in csproj (None -> Content)
- Add global.json pinning .NET 10 SDK
- Add graceful Console.Clear() error handling
- Add recipe localization keys (EN/FR)
- Add adventure localization keys (EN/FR)
2026-03-10 18:45:54 +01:00
"item.resource_max_health" : "Amelioration Capacite Sante" ,
"item.resource_max_mana" : "Amelioration Capacite Mana" ,
"item.resource_max_food" : "Amelioration Capacite Nourriture" ,
"item.resource_max_stamina" : "Amelioration Capacite Endurance" ,
"item.resource_max_gold" : "Amelioration Capacite Or" ,
"item.resource_max_blood" : "Amelioration Capacite Sang" ,
"item.resource_max_oxygen" : "Amelioration Capacite Oxygene" ,
"item.resource_max_energy" : "Amelioration Capacite Energie" ,
"item.music_melody" : "Melodie de boite" ,
"item.cookie_fortune" : "Fortune Cookie" ,
2026-03-10 18:24:01 +01:00
"item.mysterious_key" : "Cle mysterieuse" ,
"item.mysterious_key.desc" : "Une cle pour... quelque chose. La boite sait, mais la boite ne parle pas." ,
"lore.fragment_1" : "Au commencement, il y avait une boite. La boite contenait une autre boite. Et c'est ainsi que ca a ete, et que ca sera." ,
"lore.fragment_2" : "L'Ancien Ordre des Ouvreurs de Boites n'a qu'un seul commandement : Tu ouvriras tes boites." ,
"lore.fragment_3" : "Certains disent que l'univers lui-meme est une boite, attendant d'etre ouverte par quelqu'un d'assez curieux." ,
"lore.fragment_4" : "La premiere boite a ete ouverte par Farah, qui a trouve a l'interieur le concept d''interieur'." ,
"lore.fragment_5" : "Malkith a un jour ouvert une boite contenant le son d'une seule main qui applaudit. Personne ne sait ce que ca veut dire." ,
"lore.fragment_6" : "La legende dit qu'il existe une boite qui contient toutes les autres boites. L'ouvrir causerait un paradoxe. Ou un remboursement." ,
"lore.fragment_7" : "Duncan a essaye de fermer une boite un jour. Le syndicat des boites s'est mis en greve pendant trois semaines." ,
"lore.fragment_8" : "Pierrick a construit une machine a ouvrir des boites. Elle s'est ouverte elle-meme. Puis elle a ouvert la machine. Puis elle a ouvert le concept d'ouverture." ,
"lore.fragment_9" : "Samuel a ecrit le premier manuel d'ouverture de boites. Chapitre 1 : Ouvre la boite. Chapitre 2 : Voir Chapitre 1." ,
"lore.fragment_10" : "La Boite Noire contient un chat. Ou pas. Jusqu'a ce que tu l'ouvres, elle en contient et n'en contient pas. Le chat est aussi une boite." ,
"cookie.1" : "Une boite dans une boite reste une boite." ,
"cookie.2" : "ERREUR : Ce cookie ne contient aucune fortune. Reessayez." ,
"cookie.3" : "Vous ouvrirez beaucoup de boites. Cette prediction a un taux de precision de 100%." ,
"cookie.4" : "Le vrai tresor, c'etait les boites qu'on a ouvertes en chemin." ,
"cookie.5" : "ATTENTION : Les effets secondaires de l'ouverture de boites incluent la joie, la confusion et des bras-tentacules." ,
"cookie.6" : "Demain tu trouveras une boite. Puis une autre. Puis une autre. Envoyez de l'aide." ,
"cookie.7" : "Ton nombre porte-bonheur est le nombre de boites que tu as ouvertes. Donc... beaucoup." ,
"cookie.8" : "Confucius dit : celui qui ouvre boite trouve boite. Celui qui n'ouvre pas boite trouve aussi boite. Boite est inevitable." ,
"cookie.9" : "Un voyage de mille boites commence par une seule ouverture." ,
"cookie.10" : "Si tu lis ceci, tu as passe trop de temps a ouvrir des boites. Je rigole, ca n'existe pas." ,
"cookie.11" : "La boite donne, et la boite redonne des boites." ,
"cookie.12" : "En Russie sovietique, c'est la boite qui t'ouvre." ,
"cookie.13" : "Au secours je suis piege dans une usine a fortune cookies a l'interieur d'une boite." ,
"cookie.14" : "Cette fortune a ete intentionnellement laissee vide. Je rigole. Ou pas ?" ,
"cookie.15" : "Tu es l'elu. Celui qui ouvre les boites. Vraiment une noble vocation." ,
"cookie.16" : "Plot twist : la boite c'etait les amis qu'on s'est faits en chemin." ,
"cookie.17" : "Schrodinger a appele. Il veut recuperer son concept de boite." ,
"cookie.18" : "Si tu ouvres une boite et que personne n'est la pour l'entendre, est-ce que ca fait un loot ?" ,
"cookie.19" : "Aujourd'hui est un bon jour pour ouvrir des boites. Demain aussi. Tous les jours, en fait." ,
"cookie.20" : "Ton animal totem est une boite. Ton pouvoir special c'est l'ouverture." ,
"character.farah" : "Farah" ,
"character.malkith" : "Malkith" ,
"character.linu" : "Linu" ,
"character.chenda" : "Chenda" ,
"character.duncan" : "Duncan" ,
"character.sandrea" : "Sandrea" ,
"character.samuel" : "Samuel" ,
"character.pierrick" : "Pierrick" ,
"character.nova" : "Capitaine Nova" ,
"character.aria" : "ARIA" ,
"character.blackbeard" : "Barbe-Noire l'Indeboitable" ,
"character.mordecai" : "Mordecai le Sinistre" ,
"character.zephyr" : "Zephyr" ,
"character.quantum" : "Dr. Quantum" ,
"adventure.start" : "Commencer l'aventure {0}" ,
"adventure.resume" : "Reprendre l'aventure {0}" ,
"adventure.completed" : "Aventure terminee ! Tu es maintenant un aventurier de boites certifie." ,
Add complete content: recipes, French translations, music/cookie events
- Add 34 crafting recipes (materials, consumables, cosmetics, adventures, boxes)
- Add French translations for all 8 remaining adventures
- Add missing item definitions (resource_max_*, music_melody, cookie_fortune)
- Add MusicPlayedEvent and CookieFortuneEvent for special box types
- Make box_story, box_cookie, box_music reachable from box_of_boxes
- Fix content file copying in csproj (None -> Content)
- Add global.json pinning .NET 10 SDK
- Add graceful Console.Clear() error handling
- Add recipe localization keys (EN/FR)
- Add adventure localization keys (EN/FR)
2026-03-10 18:45:54 +01:00
"adventure.item_granted" : "Recu : {0} x{1}" ,
"adventure.item_removed" : "Perdu : {0}" ,
"adventure.resource_added" : "{0} +{1}" ,
2026-03-10 18:24:01 +01:00
"interaction.key_chest" : "La cle rentre ! Le coffre s'ouvre automatiquement !" ,
"interaction.key_no_match" : "Cette cle semble ouvrir quelque chose... mais tu ne l'as pas encore. Peut-etre qu'une future boite le fournira." ,
"interaction.craft_available" : "Nouvelle recette disponible a {0} !" ,
"save.saving" : "Sauvegarde en cours..." ,
"save.saved" : "Partie sauvegardee dans l'emplacement '{0}'." ,
"save.loading" : "Chargement..." ,
"save.loaded" : "Partie chargee depuis l'emplacement '{0}'." ,
"save.no_saves" : "Aucune sauvegarde trouvee." ,
"save.choose_slot" : "Choisis un emplacement de sauvegarde :" ,
"error.invalid_input" : "Entree invalide. Reessaie, brave ouvreur de boites." ,
"error.no_boxes" : "Tu n'as aucune boite a ouvrir. Comment t'as fait ? Ouvre plus de boites pour avoir des boites." ,
"error.not_enough_resources" : "Pas assez de {0}. Il t'en manque {1}." ,
"misc.boxes_opened" : "Total de boites ouvertes : {0}" ,
"misc.play_time" : "Temps de jeu : {0}" ,
Add complete content: recipes, French translations, music/cookie events
- Add 34 crafting recipes (materials, consumables, cosmetics, adventures, boxes)
- Add French translations for all 8 remaining adventures
- Add missing item definitions (resource_max_*, music_melody, cookie_fortune)
- Add MusicPlayedEvent and CookieFortuneEvent for special box types
- Make box_story, box_cookie, box_music reachable from box_of_boxes
- Fix content file copying in csproj (None -> Content)
- Add global.json pinning .NET 10 SDK
- Add graceful Console.Clear() error handling
- Add recipe localization keys (EN/FR)
- Add adventure localization keys (EN/FR)
2026-03-10 18:45:54 +01:00
"misc.welcome_back" : "Bon retour, {0} ! Tes boites se sont ennuyees." ,
"recipe.refine_wood" : "Raffiner le bois" ,
"recipe.smelt_bronze_ingot" : "Fondre un lingot de bronze" ,
"recipe.smelt_iron_ingot" : "Fondre un lingot de fer" ,
"recipe.smelt_steel_ingot" : "Fondre un lingot d'acier" ,
"recipe.smelt_titanium_ingot" : "Fondre un lingot de titane" ,
"recipe.forge_carbonfiber_sheet" : "Presser une feuille de fibre de carbone" ,
"recipe.brew_health_potion_medium" : "Brasser une potion de sante moyenne" ,
"recipe.brew_mana_crystal_medium" : "Raffiner un cristal de mana moyen" ,
"recipe.synthesize_energy_cell" : "Synthetiser une cellule d'energie" ,
"recipe.pressurize_oxygen_tank" : "Pressuriser un reservoir d'oxygene" ,
"recipe.craft_pilot_glasses" : "Fabriquer des lunettes d'aviateur" ,
"recipe.forge_armored_plate" : "Forger une armure" ,
"recipe.engineer_rocket_boots" : "Concevoir des bottes a reaction" ,
"recipe.chart_star_navigation" : "Cartographier la navigation stellaire" ,
"recipe.engrave_royal_seal" : "Graver un sceau royal" ,
"recipe.enchant_dark_grimoire" : "Enchanter le grimoire sombre" ,
"recipe.fuse_cosmic_crystal" : "Fusionner un cristal cosmique" ,
"recipe.splice_glowing_dna" : "Episser de l'ADN luminescent" ,
"recipe.preserve_amber" : "Conserver une pierre d'ambre" ,
"recipe.craft_box_ok_tier" : "Fabriquer une boite ok tiers" ,
"recipe.craft_box_cool" : "Fabriquer une boite coolos" ,
"recipe.craft_box_supply" : "Fabriquer une boite de fourniture" ,
Fix bugs, add endgame/completion features, adventure dedup, and comprehensive renderer tests
Bug fixes:
- Fix double "NEW FEATURE UNLOCKED" message and broken enum-to-key mapping for all UIFeatures
- Fix Spectre markup crash when opening inventory with colors unlocked (unescaped rarity brackets)
- Fix latent Spectre markup crash in ResourcePanel (unescaped bar brackets)
- Fix WeightedRandom.PickMultiple picking with replacement causing duplicate drops
- Fix double AddItem bug (BoxEngine + RenderEvents both adding to state)
- Add StatType and FontStyle fields to ItemDefinition (were in JSON but missing from C# record)
New features:
- Endgame box (Mythic) that appears when all 8 resources are discovered, contains Crown of Completion
- Completion percentage tracker as mid-game meta unlock (tier 3), shown in both renderers
- Adventure pool depletion: adventure sub-boxes with already-unlocked themes are removed from loot pool
- Global error handling with log file output (openthebox-error.log)
- Tiered meta progression: 5 sequential meta boxes replacing single box_meta
New tests (180 new, 228 total):
- 5 panel rendering test classes covering all enum values (Portrait, Resource, Stats, Inventory, Chat)
- RenderContext and RendererFactory logic tests
- SpectreRenderer output tests across 4 context configurations
- BasicRenderer output and input method tests
- Simulation state mutation and full-run completion tests
2026-03-11 09:34:30 +01:00
"recipe.craft_box_epic" : "Fabriquer une boite epique" ,
2026-03-11 17:50:37 +01:00
"action.collect_crafting" : "Recuperer les fabrications" ,
"craft.started" : "Fabrication auto : {0} a l'atelier {1}" ,
"craft.completed" : "{0} a termine la fabrication !" ,
"craft.done" : "Termine" ,
"craft.panel.title" : "Ateliers" ,
"craft.panel.empty" : "Aucun atelier en activite." ,
"item.blueprint.foundry" : "Plan de Fonderie" ,
"item.blueprint.workbench" : "Plan d'Etabli" ,
"item.blueprint.furnace" : "Plan de Fourneau" ,
"item.blueprint.forge" : "Plan de Forge" ,
"item.blueprint.alchemy" : "Plan de Table d'Alchimie" ,
"item.blueprint.engineer" : "Plan de Bureau d'Ingenieur" ,
"item.blueprint.drawing" : "Plan de Table a Dessin" ,
"item.blueprint.engraving" : "Plan de Banc de Gravure" ,
"item.blueprint.pentacle" : "Plan de Pentacle de Transformation" ,
"item.blueprint.printer" : "Plan d'Imprimante 3D" ,
"item.blueprint.synthesizer" : "Plan de Synthetiseur de Matiere" ,
"item.blueprint.genetic" : "Plan de Station de Modification Genetique" ,
"item.blueprint.stasis" : "Plan de Chambre de Stase" ,
Fix bugs, add endgame/completion features, adventure dedup, and comprehensive renderer tests
Bug fixes:
- Fix double "NEW FEATURE UNLOCKED" message and broken enum-to-key mapping for all UIFeatures
- Fix Spectre markup crash when opening inventory with colors unlocked (unescaped rarity brackets)
- Fix latent Spectre markup crash in ResourcePanel (unescaped bar brackets)
- Fix WeightedRandom.PickMultiple picking with replacement causing duplicate drops
- Fix double AddItem bug (BoxEngine + RenderEvents both adding to state)
- Add StatType and FontStyle fields to ItemDefinition (were in JSON but missing from C# record)
New features:
- Endgame box (Mythic) that appears when all 8 resources are discovered, contains Crown of Completion
- Completion percentage tracker as mid-game meta unlock (tier 3), shown in both renderers
- Adventure pool depletion: adventure sub-boxes with already-unlocked themes are removed from loot pool
- Global error handling with log file output (openthebox-error.log)
- Tiered meta progression: 5 sequential meta boxes replacing single box_meta
New tests (180 new, 228 total):
- 5 panel rendering test classes covering all enum values (Portrait, Resource, Stats, Inventory, Chat)
- RenderContext and RendererFactory logic tests
- SpectreRenderer output tests across 4 context configurations
- BasicRenderer output and input method tests
- Simulation state mutation and full-run completion tests
2026-03-11 09:34:30 +01:00
"box.endgame" : "La Boite Finale" ,
"box.endgame.desc" : "Tu as trouve toutes les ressources. C'est la derniere boite. Es-tu pret ?" ,
2026-03-11 17:50:37 +01:00
"item.endgame_crown" : "Couronne d'Accomplissement" ,
"item.destiny_token" : "Jeton du Destin" ,
"adventure.secret_branch_found" : "Tu sens un chemin secret se reveler..."
2026-03-10 18:24:01 +01:00
}