From 16b3fd09506fe25244d83b615d8274b4dd9ce91c Mon Sep 17 00:00:00 2001 From: Samuel Bouchet Date: Wed, 18 Mar 2026 19:04:06 +0100 Subject: [PATCH] =?UTF-8?q?Blood=20=E2=86=92=20Ink?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy-itch.yml | 11 +++++++++++ CLAUDE.md | 6 +++--- GDD.md | 10 +++++----- content/adventures/darkfantasy/intro.fr.lor | 12 ++++++------ content/adventures/darkfantasy/intro.lor | 12 ++++++------ content/adventures/destiny/intro.fr.lor | 4 ++-- content/adventures/destiny/intro.lor | 4 ++-- content/data/boxes.json | 10 +++++----- content/data/items.json | 6 +++--- content/strings/en.json | 8 ++++---- content/strings/fr.json | 8 ++++---- specifications.md | 14 +++++++------- src/OpenTheBox/Core/Enums/AdventureTheme.cs | 2 +- src/OpenTheBox/Core/Enums/ResourceType.cs | 4 ++-- tests/OpenTheBox.Tests/RendererTests.cs | 6 +++--- tests/OpenTheBox.Tests/UnitTest1.cs | 2 +- tests/snapshots/item_utility_report.txt | 10 +++++----- 17 files changed, 70 insertions(+), 59 deletions(-) diff --git a/.github/workflows/deploy-itch.yml b/.github/workflows/deploy-itch.yml index b5115ce..61c7299 100644 --- a/.github/workflows/deploy-itch.yml +++ b/.github/workflows/deploy-itch.yml @@ -15,6 +15,17 @@ jobs: with: dotnet-version: '10.0.x' + - name: Download Loreline dependency + run: | + mkdir -p lib + curl -sL https://github.com/Loreline/loreline/releases/download/v0.7.1/loreline-csharp.zip -o lib/loreline-csharp.zip + unzip -o lib/loreline-csharp.zip -d lib/_extract + cp lib/_extract/*/Loreline.dll lib/ || cp lib/_extract/Loreline.dll lib/ + cp lib/_extract/*/Loreline.xml lib/ 2>/dev/null || cp lib/_extract/Loreline.xml lib/ 2>/dev/null || true + cp lib/_extract/*/Loreline.deps.json lib/ 2>/dev/null || cp lib/_extract/Loreline.deps.json lib/ 2>/dev/null || true + rm -rf lib/_extract lib/loreline-csharp.zip + ls -la lib/ + - name: Publish Blazor WASM run: dotnet publish src/OpenTheBox.Web -c Release -o publish diff --git a/CLAUDE.md b/CLAUDE.md index e188195..dd8b06e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -65,11 +65,11 @@ Hints for disabled choices use `|||` separator: `Option text|||Hint text #label full documentation: https://loreline.app/fr/docs/ ## Resources (Characteristics) -Only 2 resource types exist: **Gold** and **Blood**. Both have adventure secret branch gates: +Only 2 resource types exist: **Gold** and **Ink**. Both have adventure secret branch gates: - Gold ≥ 30 → Contemporary VIP branch -- Blood ≥ 20 → DarkFantasy Blood Communion branch +- Ink ≥ 20 → DarkFantasy Ink Communion branch -Consumables: `gold_pouch` (+50 Gold), `blood_vial` (+5 Blood), `resource_max_gold`, `resource_max_blood`. +Consumables: `gold_pouch` (+50 Gold), `ink_vial` (+5 Ink), `resource_max_gold`, `resource_max_ink`. Other resources (Health, Mana, Food, etc.) were removed as they had no gameplay impact. ## Ephemeral Items diff --git a/GDD.md b/GDD.md index 5b75d8d..bac4935 100644 --- a/GDD.md +++ b/GDD.md @@ -329,7 +329,7 @@ Chaque sous-boite d'aventure contient : | Stamina (endurance) | 15 | Restaure de l'endurance | | Gold (or) | 15 | Ajoute de l'or | | Energy (energie) | 10 | Restaure de l'energie | -| Blood (sang) | 3 | Restaure du sang (ressource rare) | +| Ink (encre) | 3 | Restaure de l'encre (ressource rare) | | Oxygen (oxygene) | 2 | Restaure de l'oxygene (ressource rare) | > **Note** : Seules les ressources deja debloquees par le joueur peuvent apparaitre dans le tirage. Les poids sont recalcules dynamiquement. @@ -692,7 +692,7 @@ Le joueur gere 8 ressources qui influencent sa capacite a explorer, combattre, c | Mana | MP | Points de magie | Sorts, enchantements | | Food | FD | Nourriture | Exploration, stamina | | Stamina | ST | Endurance | Actions physiques, craft | -| Blood | BL | Sang | Rituels, magie noire | +| Ink | IN | Encre | Rituels, magie noire | | Gold | GD | Or | Commerce, ameliorations | | Oxygen | O2 | Oxygene | Exploration spatiale/sous-marine| | Energy | EN | Energie | Machines, stations de craft | @@ -702,7 +702,7 @@ Le joueur gere 8 ressources qui influencent sa capacite a explorer, combattre, c - Chaque ressource a un **maximum** (cap) qui peut etre ameliore via la Boite d'amelioration. - Les ressources se consomment lors des aventures, du craft et des interactions. - Les ressources se restaurent via la Boite de fourniture, les consommables et certaines interactions. -- Certaines ressources sont conditionnelles : **Blood** n'apparait qu'avec le theme DarkFantasy, **Oxygen** qu'avec le theme Space ou des aventures sous-marines. +- Certaines ressources sont conditionnelles : **Ink** n'apparait qu'avec le theme DarkFantasy, **Oxygen** qu'avec le theme Space ou des aventures sous-marines. ### Deblocage des ressources @@ -714,7 +714,7 @@ Les ressources ne sont pas toutes disponibles des le debut : | Mana | Premiere rencontre avec un personnage magique | | Food | Premiere aventure exploree | | Stamina | Premiere action physique (combat, craft) | -| Blood | Deblocage du theme DarkFantasy | +| Ink | Deblocage du theme DarkFantasy | | Gold | Premier lieu de commerce decouvert | | Oxygen | Deblocage du theme Space OU aventure sous-marine | | Energy | Premiere station de craft construite | @@ -800,7 +800,7 @@ Les aventures interactives sont des sequences narratives jouables en CLI, chacun - **Ambiance** : fantasy sombre, horreur gothique - **Lieux typiques** : cryptes, forets maudites, tours sombres -- **Ressource cle** : Blood, Mana +- **Ressource cle** : Ink, Mana - **Personnages associes** : Malkith (version sombre) - **Mood possible** : Dark, Spooky, Tragedy - **Environnement** : Nature, Town diff --git a/content/adventures/darkfantasy/intro.fr.lor b/content/adventures/darkfantasy/intro.fr.lor index d3d2a1d..cb2d449 100644 --- a/content/adventures/darkfantasy/intro.fr.lor +++ b/content/adventures/darkfantasy/intro.fr.lor @@ -271,11 +271,11 @@ Ouvrir une boîte et voir ce qui se passe #opt-convince // "Convince Mordecai to open them together" Convaincre Mordecai de les ouvrir ensemble -#opt-blood // "Press your hand to the boxes and offer your blood as a bridge|||You feel a strange warmth in your veins, as though something ancient recognizes you..." -Poser votre main sur les boîtes et offrir votre sang comme pont|||Vous ressentez une étrange chaleur dans vos veines, comme si quelque chose d'ancien vous reconnaissait... +#opt-blood // "Press your hand to the boxes and offer your ink as a bridge|||You feel a strange warmth in your veins, as though something ancient recognizes you..." +Poser votre main sur les boîtes et offrir votre encre comme pont|||Vous ressentez une étrange chaleur dans vos veines, comme si quelque chose d'ancien vous reconnaissait... -#blood-press // "You press your palm against the nearest box. Your blood sings. The box answers." -Vous pressez votre paume contre la boîte la plus proche. Votre sang chante. La boîte répond. +#blood-press // "You press your palm against the nearest box. The ink sings. The box answers." +Vous pressez votre paume contre la boîte la plus proche. L'encre chante. La boîte répond. #blood-voices // "Every box in the vault flickers -- not with light, but with voices. Twelve thousand souls, speaking at once." Chaque boîte du caveau scintille -- pas de lumière, mais de voix. Douze mille âmes, parlant en même temps. @@ -286,8 +286,8 @@ Elles ne crient pas. Elles... se présentent. #mordecai-impossible // "Impossible. I've tried to speak with them for decades. They never answered ME." Impossible. J'ai essayé de leur parler pendant des décennies. Elles ne m'ont jamais répondu. -#pierrick-jailer // "Maybe they didn't trust you. You're their jailer. I'm just a baker with strange blood." -Peut-être qu'elles ne vous faisaient pas confiance. Vous êtes leur geôlier. Moi je suis juste un boulanger au sang étrange. +#pierrick-jailer // "Maybe they didn't trust you. You're their jailer. I'm just a baker with strange ink." +Peut-être qu'elles ne vous faisaient pas confiance. Vous êtes leur geôlier. Moi je suis juste un boulanger à l'encre étrange. #blood-consensus // "The souls whisper a consensus: half wish to stay, half wish to leave. They've voted. Through cardboard. Democracy at its most absurd." Les âmes chuchotent un consensus : la moitié souhaite rester, l'autre moitié souhaite partir. Elles ont voté. À travers du carton. La démocratie dans ce qu'elle a de plus absurde. diff --git a/content/adventures/darkfantasy/intro.lor b/content/adventures/darkfantasy/intro.lor index 513d53e..ee522cb 100644 --- a/content/adventures/darkfantasy/intro.lor +++ b/content/adventures/darkfantasy/intro.lor @@ -189,16 +189,16 @@ beat TheVault -> OpenOneBox Convince Mordecai to open them together #opt-convince if corruption < 30 -> ConvinceMordecai - Press your hand to the boxes and offer your blood as a bridge|||You feel a strange warmth in your veins, as though something ancient recognizes you... #opt-blood if hasResource("Blood", 20) - -> BloodCommunion + Press your hand to the boxes and offer your ink as a bridge|||You feel a strange warmth in your veins, as though something ancient recognizes you... #opt-blood if hasResource("Ink", 20) + -> InkCommunion -beat BloodCommunion - markSecretBranch("darkfantasy_blood_communion") - You press your palm against the nearest box. Your blood sings. The box answers. #blood-press +beat InkCommunion + markSecretBranch("darkfantasy_ink_communion") + You press your palm against the nearest box. The ink sings. The box answers. #blood-press Every box in the vault flickers -- not with light, but with voices. Twelve thousand souls, speaking at once. #blood-voices pierrick: They're not screaming. They're... introducing themselves. #pierrick-introduce mordecai: Impossible. I've tried to speak with them for decades. They never answered ME. #mordecai-impossible - pierrick: Maybe they didn't trust you. You're their jailer. I'm just a baker with strange blood. #pierrick-jailer + pierrick: Maybe they didn't trust you. You're their jailer. I'm just a baker with strange ink. #pierrick-jailer The souls whisper a consensus: half wish to stay, half wish to leave. They've voted. Through cardboard. Democracy at its most absurd. #blood-consensus mordecai: They VOTED? Without a suggestion box? Wait -- they ARE the suggestion boxes. #mordecai-voted boxesFreed += 50 diff --git a/content/adventures/destiny/intro.fr.lor b/content/adventures/destiny/intro.fr.lor index 17ce4bf..63dbb5c 100644 --- a/content/adventures/destiny/intro.fr.lor +++ b/content/adventures/destiny/intro.fr.lor @@ -106,8 +106,8 @@ Le Charmeur de Dragons. Tu as choisi le feu plutôt que la peur, et le dragon t' #secret-darkfantasy // "A drop of crimson hangs suspended in the air, neither falling nor fading." Une goutte de pourpre reste suspendue dans l'air, ne tombant ni ne s'effaçant. -#secret-darkfantasy-words // "The Blood Communion. You drank from the dark box and survived. Changed, but whole." -La Communion de Sang. Tu as bu à la boîte sombre et survécu. Changé, mais entier. +#secret-darkfantasy-words // "The Ink Communion. You drank from the dark box and survived. Changed, but whole." +La Communion d'Encre. Tu as bu à la boîte sombre et survécu. Changé, mais entier. #secret-pirate // "A coin spins endlessly on an invisible surface, never landing." Une pièce tourne sans fin sur une surface invisible, sans jamais retomber. diff --git a/content/adventures/destiny/intro.lor b/content/adventures/destiny/intro.lor index 3cf4868..123fb55 100644 --- a/content/adventures/destiny/intro.lor +++ b/content/adventures/destiny/intro.lor @@ -82,9 +82,9 @@ beat Alcove A scale glimmers on the ground, iridescent and warm to the touch. #secret-medieval destiny: The Dragon Charmer. You chose fire over fear, and the dragon chose you back. #secret-medieval-words - if hasSecretBranch("darkfantasy_blood_communion") + if hasSecretBranch("darkfantasy_ink_communion") A drop of crimson hangs suspended in the air, neither falling nor fading. #secret-darkfantasy - destiny: The Blood Communion. You drank from the dark box and survived. Changed, but whole. #secret-darkfantasy-words + destiny: The Ink Communion. You drank from the dark box and survived. Changed, but whole. #secret-darkfantasy-words if hasSecretBranch("pirate_one_of_us") A coin spins endlessly on an invisible surface, never landing. #secret-pirate diff --git a/content/data/boxes.json b/content/data/boxes.json index 0bf69b5..87da4a1 100644 --- a/content/data/boxes.json +++ b/content/data/boxes.json @@ -122,7 +122,7 @@ "entries": [ {"itemDefinitionId": "material_titanium_raw", "weight": 2}, {"itemDefinitionId": "material_steel_ingot", "weight": 3}, - {"itemDefinitionId": "blood_vial", "weight": 2}, + {"itemDefinitionId": "ink_vial", "weight": 2}, {"itemDefinitionId": "cosmetic_hair_cyberpunk", "weight": 2}, {"itemDefinitionId": "cosmetic_eyes_pilotglasses", "weight": 2}, {"itemDefinitionId": "cosmetic_body_suit", "weight": 2}, @@ -256,7 +256,7 @@ "rollCount": 1, "entries": [ {"itemDefinitionId": "meta_resource_gold", "weight": 2}, - {"itemDefinitionId": "meta_resource_blood", "weight": 1}, + {"itemDefinitionId": "meta_resource_ink", "weight": 1}, {"itemDefinitionId": "box_meta_mastery", "weight": 1} ] } @@ -497,7 +497,7 @@ {"itemDefinitionId": "darkfantasy_gem", "weight": 1}, {"itemDefinitionId": "darkfantasy_key", "weight": 3}, {"itemDefinitionId": "mysterious_key", "weight": 2}, - {"itemDefinitionId": "blood_vial", "weight": 3} + {"itemDefinitionId": "ink_vial", "weight": 3} ] } }, @@ -512,7 +512,7 @@ "rollCount": 1, "entries": [ {"itemDefinitionId": "resource_max_gold", "weight": 2}, - {"itemDefinitionId": "resource_max_blood", "weight": 1}, + {"itemDefinitionId": "resource_max_ink", "weight": 1}, {"itemDefinitionId": "blueprint_foundry", "weight": 4, "condition": {"type": "HasUIFeature", "targetId": "CraftingPanel"}}, {"itemDefinitionId": "blueprint_workbench", "weight": 4, "condition": {"type": "HasUIFeature", "targetId": "CraftingPanel"}}, {"itemDefinitionId": "blueprint_furnace", "weight": 4, "condition": {"type": "HasUIFeature", "targetId": "CraftingPanel"}}, @@ -532,7 +532,7 @@ "rollCount": 2, "entries": [ {"itemDefinitionId": "gold_pouch", "weight": 4}, - {"itemDefinitionId": "blood_vial", "weight": 1} + {"itemDefinitionId": "ink_vial", "weight": 1} ] } }, diff --git a/content/data/items.json b/content/data/items.json index b74107b..f71de92 100644 --- a/content/data/items.json +++ b/content/data/items.json @@ -11,7 +11,7 @@ {"id": "meta_animation", "nameKey": "meta.animation", "descriptionKey": "meta.animation.desc", "category": "Meta", "rarity": "Uncommon", "tags": ["Meta"], "metaUnlock": "BoxAnimation"}, {"id": "meta_crafting", "nameKey": "meta.crafting", "descriptionKey": "meta.crafting.desc", "category": "Meta", "rarity": "Epic", "tags": ["Meta"], "metaUnlock": "CraftingPanel"}, {"id": "meta_autosave", "nameKey": "meta.autosave", "descriptionKey": "meta.autosave.desc", "category": "Meta", "rarity": "Uncommon", "tags": ["Meta"], "metaUnlock": "AutoSave"}, - {"id": "meta_resource_blood", "nameKey": "resource.blood", "category": "Meta", "rarity": "Rare", "tags": ["Meta", "ResourceVisibility"], "resourceType": "Blood"}, + {"id": "meta_resource_ink", "nameKey": "resource.ink", "category": "Meta", "rarity": "Rare", "tags": ["Meta", "ResourceVisibility"], "resourceType": "Ink"}, {"id": "meta_resource_gold", "nameKey": "resource.gold", "category": "Meta", "rarity": "Uncommon", "tags": ["Meta", "ResourceVisibility"], "resourceType": "Gold"}, {"id": "meta_stat_strength", "nameKey": "stat.strength", "category": "Meta", "rarity": "Rare", "tags": ["Meta", "StatVisibility"], "statType": "Strength"}, {"id": "meta_stat_intelligence", "nameKey": "stat.intelligence", "category": "Meta", "rarity": "Rare", "tags": ["Meta", "StatVisibility"], "statType": "Intelligence"}, @@ -62,7 +62,7 @@ {"id": "tint_gold", "nameKey": "tint.gold", "category": "Cosmetic", "rarity": "Epic", "tags": ["Tint"], "tintColor": "Gold"}, {"id": "tint_void", "nameKey": "tint.void", "category": "Cosmetic", "rarity": "Legendary", "tags": ["Tint"], "tintColor": "Void"}, - {"id": "blood_vial", "nameKey": "item.blood_vial", "category": "Consumable", "rarity": "Rare", "tags": ["Consumable"], "resourceType": "Blood", "resourceAmount": 5}, + {"id": "ink_vial", "nameKey": "item.ink_vial", "category": "Consumable", "rarity": "Rare", "tags": ["Consumable"], "resourceType": "Ink", "resourceAmount": 5}, {"id": "gold_pouch", "nameKey": "item.gold_pouch", "category": "Consumable", "rarity": "Common", "tags": ["Consumable"], "resourceType": "Gold", "resourceAmount": 50}, {"id": "space_badge", "nameKey": "item.space.badge", "category": "AdventureToken", "rarity": "Rare", "tags": ["Adventure", "Space"], "adventureTheme": "Space"}, @@ -140,7 +140,7 @@ {"id": "material_carbonfiber_sheet", "nameKey": "material.carbonfiber", "category": "Material", "rarity": "Epic", "tags": ["Material"], "materialType": "CarbonFiber", "materialForm": "Sheet"}, {"id": "resource_max_gold", "nameKey": "item.resource_max_gold", "category": "Consumable", "rarity": "Rare", "tags": ["Improvement", "ResourceMax"], "resourceType": "Gold", "resourceMaxIncrease": 50}, - {"id": "resource_max_blood", "nameKey": "item.resource_max_blood", "category": "Consumable", "rarity": "Rare", "tags": ["Improvement", "ResourceMax"], "resourceType": "Blood", "resourceMaxIncrease": 5}, + {"id": "resource_max_ink", "nameKey": "item.resource_max_ink", "category": "Consumable", "rarity": "Rare", "tags": ["Improvement", "ResourceMax"], "resourceType": "Ink", "resourceMaxIncrease": 5}, {"id": "music_melody", "nameKey": "item.music_melody", "category": "Consumable", "rarity": "Rare", "tags": ["Music", "Fun"], "description": "A melody plays from the box. Console.Beep never sounded so good."}, {"id": "cookie_fortune", "nameKey": "item.cookie_fortune", "category": "Consumable", "rarity": "Common", "tags": ["Cookie", "Fun"], "description": "A fortune cookie with wisdom of questionable origin."}, diff --git a/content/strings/en.json b/content/strings/en.json index f37d1bd..8ae349e 100644 --- a/content/strings/en.json +++ b/content/strings/en.json @@ -132,7 +132,7 @@ "item.rarity.legendary": "Legendary", "item.rarity.mythic": "Mythic", - "resource.blood": "Blood", + "resource.ink": "Ink", "resource.gold": "Gold", "stat.strength": "Strength", @@ -215,7 +215,7 @@ "material.form.dust": "Dust", "material.form.gem": "Gem", - "item.blood_vial": "Blood Vial", + "item.ink_vial": "Ink Vial", "item.gold_pouch": "Gold Pouch", "item.space.badge": "Astronaut Badge", @@ -263,7 +263,7 @@ "item.microscopic.mitochondria": "Hyperactive Mitochondria", "item.microscopic.prion": "Friendly Prion (probably)", "item.darkfantasy.ring": "Cursed Ring", - "item.darkfantasy.rune": "Blood Rune", + "item.darkfantasy.rune": "Ink Rune", "item.darkfantasy.cloak": "Shadow Cloak", "item.darkfantasy.grimoire": "Necromancer's Grimoire", "item.darkfantasy.gem": "Soul Gem", @@ -274,7 +274,7 @@ "item.stat_boost": "{0} +1", "item.resource_max_gold": "Gold Capacity Upgrade", - "item.resource_max_blood": "Blood Capacity Upgrade", + "item.resource_max_ink": "Ink Capacity Upgrade", "item.music_melody": "Box Melody", "item.cookie_fortune": "Fortune Cookie", diff --git a/content/strings/fr.json b/content/strings/fr.json index 033c55b..9836ac4 100644 --- a/content/strings/fr.json +++ b/content/strings/fr.json @@ -132,7 +132,7 @@ "item.rarity.legendary": "Légendaire", "item.rarity.mythic": "Mythique", - "resource.blood": "Sang", + "resource.ink": "Encre", "resource.gold": "Or", "stat.strength": "Force", @@ -215,7 +215,7 @@ "material.form.dust": "Poudre", "material.form.gem": "Gemme", - "item.blood_vial": "Fiole de sang", + "item.ink_vial": "Fiole d'encre", "item.gold_pouch": "Bourse d'or", "item.space.badge": "Badge d'astronaute", @@ -263,7 +263,7 @@ "item.microscopic.mitochondria": "Mitochondrie hyperactive", "item.microscopic.prion": "Prion amical (probablement)", "item.darkfantasy.ring": "Anneau maudit", - "item.darkfantasy.rune": "Rune de sang", + "item.darkfantasy.rune": "Rune d'encre", "item.darkfantasy.cloak": "Cape d'ombre", "item.darkfantasy.grimoire": "Grimoire du nécromancien", "item.darkfantasy.gem": "Gemme d'âme", @@ -274,7 +274,7 @@ "item.stat_boost": "{0} +1", "item.resource_max_gold": "Amélioration Capacité Or", - "item.resource_max_blood": "Amélioration Capacité Sang", + "item.resource_max_ink": "Amélioration Capacité Encre", "item.music_melody": "Mélodie de boîte", "item.cookie_fortune": "Fortune Cookie", diff --git a/specifications.md b/specifications.md index a44d02f..bed0d6b 100644 --- a/specifications.md +++ b/specifications.md @@ -20,7 +20,7 @@ Special properties: - `adventureTheme` — Links token to an adventure theme - `cosmeticSlot` / `cosmeticValue` — Cosmetic equipment data - `statType` / `statValue` — Stat modification -- `resourceType` / `resourceAmount` — Resource modification (Gold, Blood only) +- `resourceType` / `resourceAmount` — Resource modification (Gold, Ink only) - `metaUnlock` — UI feature to unlock - `workstationType` — Workstation blueprint @@ -40,7 +40,7 @@ content/adventures/ ├── prehistoric/ — Stone age theme ├── cosmic/ — Cosmic/divine theme ├── microscopic/ — Micro-world theme -├── darkfantasy/ — Gothic horror theme (Key resource: Blood) +├── darkfantasy/ — Gothic horror theme (Key resource: Ink) └── destiny/ — Final adventure (acknowledges all other adventures) ``` @@ -62,7 +62,7 @@ Each regular adventure (not Destiny) has ONE secret branch gated by stats, resou | Prehistoric | `hasStat("Strength", 10)` | `prehistoric_champion` | | Cosmic | `hasStat("Intelligence", 10)` | `cosmic_enlightened` | | Microscopic | `hasStat("Dexterity", 10)` | `microscopic_surgeon` | -| DarkFantasy | `hasResource("Blood", 20)` | `darkfantasy_blood_communion`| +| DarkFantasy | `hasResource("Ink", 20)` | `darkfantasy_ink_communion`| ### Destiny Adventure (Final) - Triggered by `destiny_token` from `box_endgame` @@ -80,7 +80,7 @@ Boxes ──► Items ──► Inventory │ ├──► Cosmetics ──► Appearance ──┐ │ ├──► Stat Items ──► Stats ──────┤ │ └──► Consumables ──► Resources ─┤ - │ (Gold, Blood only) │ + │ (Gold, Ink only) │ │ │ │ ┌───────────────────────────────┘ │ ▼ @@ -106,8 +106,8 @@ Space, Medieval, Pirate, Contemporary, Sentimental, Prehistoric, Cosmic, Microsc Strength, Intelligence, Luck, Charisma, Dexterity, Wisdom ### ResourceType (Characteristics) -Blood, Gold -Only resources with actual adventure gates are kept. Blood gates the DarkFantasy secret branch (≥20), Gold gates the Contemporary secret branch (≥30). +Ink, Gold +Only resources with actual adventure gates are kept. Ink gates the DarkFantasy secret branch (≥20), Gold gates the Contemporary secret branch (≥30). Resources are displayed as "Characteristics" to the player with current/max values (e.g., Gold 50/100). ### CosmeticSlot @@ -125,7 +125,7 @@ UI features are unlocked in a fixed order regardless of which meta box drops. Th 3. **AutoSave** — Automatic saving 4. **InventoryPanel** — Interactive inventory table 5. **StatsPanel** — Progression stats and character attributes -6. **ResourcePanel** — Characteristics bars (Gold, Blood) +6. **ResourcePanel** — Characteristics bars (Gold, Ink) 7. **PortraitPanel** — ASCII art portrait 8. **ChatPanel** — Event log panel 9. **ExtendedColors** — 256-color palette diff --git a/src/OpenTheBox/Core/Enums/AdventureTheme.cs b/src/OpenTheBox/Core/Enums/AdventureTheme.cs index 7a8f1bc..eb87a20 100644 --- a/src/OpenTheBox/Core/Enums/AdventureTheme.cs +++ b/src/OpenTheBox/Core/Enums/AdventureTheme.cs @@ -31,7 +31,7 @@ public enum AdventureTheme /// Microscopic world of cells, atoms, and circuits. Key resources: Energy, Oxygen. Microscopic, - /// Dark fantasy with gothic horror elements. Key resources: Blood, Mana. Unlocks Blood resource. + /// Dark fantasy with gothic horror elements. Key resources: Ink, Mana. Unlocks Ink resource. DarkFantasy, /// The final adventure. Acknowledges all previous adventures and secret branches. Unlocked by the endgame box. diff --git a/src/OpenTheBox/Core/Enums/ResourceType.cs b/src/OpenTheBox/Core/Enums/ResourceType.cs index cabd90b..c8ca146 100644 --- a/src/OpenTheBox/Core/Enums/ResourceType.cs +++ b/src/OpenTheBox/Core/Enums/ResourceType.cs @@ -6,8 +6,8 @@ namespace OpenTheBox.Core.Enums; /// public enum ResourceType { - /// Blood resource. Unlocked with the DarkFantasy theme. Gates the Blood Communion secret branch (≥20). - Blood, + /// Ink resource. Unlocked with the DarkFantasy theme. Gates the Ink Communion secret branch (≥20). + Ink, /// Currency. Unlocked when a trading location is discovered. Gates the Corporate VIP secret branch (≥30). Gold diff --git a/tests/OpenTheBox.Tests/RendererTests.cs b/tests/OpenTheBox.Tests/RendererTests.cs index c807c95..a55ae2f 100644 --- a/tests/OpenTheBox.Tests/RendererTests.cs +++ b/tests/OpenTheBox.Tests/RendererTests.cs @@ -219,8 +219,8 @@ public class ResourcePanelTests public void Render_ZeroMax_DoesNotThrow() { var state = GameState.Create("Test", Locale.EN); - state.VisibleResources.Add(ResourceType.Blood); - state.Resources[ResourceType.Blood] = new ResourceState(0, 0); + state.VisibleResources.Add(ResourceType.Ink); + state.Resources[ResourceType.Ink] = new ResourceState(0, 0); var result = RenderHelper.RenderToString(ResourcePanel.Render(state)); Assert.NotEmpty(result); } @@ -239,7 +239,7 @@ public class ResourcePanelTests public void Render_VisibleButNotInDict_Skipped() { var state = GameState.Create("Test", Locale.EN); - state.VisibleResources.Add(ResourceType.Blood); + state.VisibleResources.Add(ResourceType.Ink); // Not adding to Resources dict → should skip without crash var result = RenderHelper.RenderToString(ResourcePanel.Render(state)); Assert.NotEmpty(result); diff --git a/tests/OpenTheBox.Tests/UnitTest1.cs b/tests/OpenTheBox.Tests/UnitTest1.cs index 3ebf6db..156befa 100644 --- a/tests/OpenTheBox.Tests/UnitTest1.cs +++ b/tests/OpenTheBox.Tests/UnitTest1.cs @@ -1158,7 +1158,7 @@ public class ContentValidationTests "prehistoric_champion", "cosmic_enlightened", "microscopic_surgeon", - "darkfantasy_blood_communion" + "darkfantasy_ink_communion" }; // All 9 regular adventure themes (excluding Destiny) diff --git a/tests/snapshots/item_utility_report.txt b/tests/snapshots/item_utility_report.txt index f3c24a7..a931150 100644 --- a/tests/snapshots/item_utility_report.txt +++ b/tests/snapshots/item_utility_report.txt @@ -174,9 +174,9 @@ ## Consumable (6 items) ──────────────────────────────────────────────────────────────────────────────── - [**] blood_vial (Rare) — Fiole de sang + [**] ink_vial (Rare) — Fiole d'encre Loot: box_epic, box_adventure_darkfantasy, box_supply - Consume: +5 Blood + Consume: +5 Ink [**] gold_pouch (Common) — Bourse d'or Loot: box_ok_tier, box_adventure_pirate, box_supply @@ -186,9 +186,9 @@ Loot: box_improvement Upgrade: max Gold - [**] resource_max_blood (Rare) — Amélioration Capacité Sang + [**] resource_max_ink (Rare) — Amélioration Capacité Encre Loot: box_improvement - Upgrade: max Blood + Upgrade: max Ink [**] music_melody (Rare) — Mélodie de boîte Loot: box_music(G) @@ -603,7 +603,7 @@ [*] meta_shortcuts (Rare) — Raccourcis clavier Unlock: KeyboardShortcuts - [*] meta_resource_blood (Rare) — Sang + [*] meta_resource_ink (Rare) — Encre Loot: box_meta_resources [*] meta_resource_gold (Uncommon) — Or