Blood → Ink

This commit is contained in:
Samuel Bouchet 2026-03-18 19:04:06 +01:00
parent 0a499d947e
commit 16b3fd0950
17 changed files with 70 additions and 59 deletions

View file

@ -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

View file

@ -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

10
GDD.md
View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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}
]
}
},

View file

@ -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."},

View file

@ -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",

View file

@ -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",

View file

@ -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

View file

@ -31,7 +31,7 @@ public enum AdventureTheme
/// <summary>Microscopic world of cells, atoms, and circuits. Key resources: Energy, Oxygen.</summary>
Microscopic,
/// <summary>Dark fantasy with gothic horror elements. Key resources: Blood, Mana. Unlocks Blood resource.</summary>
/// <summary>Dark fantasy with gothic horror elements. Key resources: Ink, Mana. Unlocks Ink resource.</summary>
DarkFantasy,
/// <summary>The final adventure. Acknowledges all previous adventures and secret branches. Unlocked by the endgame box.</summary>

View file

@ -6,8 +6,8 @@ namespace OpenTheBox.Core.Enums;
/// </summary>
public enum ResourceType
{
/// <summary>Blood resource. Unlocked with the DarkFantasy theme. Gates the Blood Communion secret branch (≥20).</summary>
Blood,
/// <summary>Ink resource. Unlocked with the DarkFantasy theme. Gates the Ink Communion secret branch (≥20).</summary>
Ink,
/// <summary>Currency. Unlocked when a trading location is discovered. Gates the Corporate VIP secret branch (≥30).</summary>
Gold

View file

@ -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);

View file

@ -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)

View file

@ -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