diff --git a/docs/REQUIRED_ASSETS.md b/docs/REQUIRED_ASSETS.md new file mode 100644 index 0000000..753d61e --- /dev/null +++ b/docs/REQUIRED_ASSETS.md @@ -0,0 +1,954 @@ +# Required Visual Assets — Lords of Ash + +> Complete inventory of every visual asset needed across all milestones, from +> placeholder icons to publication-ready map art. + +## Summary + +| Category | Count | Format | First Needed | +|---|---|---|---| +| Trait icons | ~26 | DDS (uncompressed ARGB), 120x120 | M8 | +| Modifier icons | ~20 | DDS (uncompressed ARGB), 60x60 | M4/M8 | +| Decision illustrations | ~10 | DDS (DXT1), 1100x440 | M8 | +| Loading screens | 3-5 | DDS (DXT1), 3840x2160 | M8 | +| Bookmark art | 6 | DDS (DXT1/DXT5), 1920x1080 + UI sizes | M8 | +| Coat of Arms emblems | 12-15 | DDS (uncompressed ARGB), 128x128 | M3/M8 | +| Religion icons | 4-5 | DDS (uncompressed ARGB), 100x100 | M3/M8 | +| Men-at-Arms icons | 5 | DDS (DXT5), 60x60 | M8 | +| Event scene backgrounds | 8 | DDS, 1592x848 | M4/M8 | +| Custom map files | 20+ | PNG/BMP/DDS/CSV (see specs) | M8 | +| Portrait assets | varies | DDS (DXT5), 1024x1024 | M8 | +| Building icons | 5 | DDS (ARGB 32bpp), 60x60 | M3/M8 | +| Lifestyle assets | ~45+ | DDS, various (see 4d) | M4 | +| Activity assets | ~8+ per activity | DDS, various (see 4e) | M4 | +| Scheme icons | 2 | DDS, 120x120 | M4 | +| Bookmark art | 6 | DDS (DXT1/DXT5), various | M8 | +| Frontend art (optional) | 2 | DDS (DXT1), 3840x2160 | M8 | +| Workshop thumbnail | 1 | PNG, 512x512 | M8 | +| **Total unique assets** | **~200+** | | | + +### Current State: **0 assets exist** + +The mod references 50+ icon paths in code (traits, modifiers, decisions) but the +`gfx/` directory does not exist. All culture graphics fall back to vanilla +`western_*_gfx` packs. No custom map data exists. + +--- + +## DDS Production Guide + +All CK3 icon and illustration assets use the **DDS (DirectDraw Surface)** format. + +### Compression & Format Types (verified from CK3 v1.18 game files) + +| Use case | Format | Mipmaps | Notes | +|---|---|---|---| +| Trait icons (120x120) | **Uncompressed ARGB 32bpp** | **No** | Full alpha channel. NOT DXT compressed. | +| Modifier icons (60x60) | **Uncompressed ARGB 32bpp** | **Yes** (6 levels) | Full alpha channel. | +| Decision illustrations (1100x440) | **DXT1 / BC1** | **No** | No alpha needed. Some DLC use 2x (2200x880). | +| Loading screens (3840x2160) | **DXT1 / BC1** | **No** | Full 4K resolution. | +| Faith icons (100x100) | **Uncompressed ARGB** | **No** | Full alpha. | +| CoA colored emblems (128x128) | **Uncompressed ARGB 32bpp** | **No** | Required for color mask system. B8G8R8A8 Linear. | +| CoA patterns (256x256) | **DXT1 / BC1** | — | Opaque. | +| Tenet icons (260x400) | **DXT5 / BC3** | — | Tall format, with alpha. | +| Portrait textures | **DXT5 / BC3** | Yes | 1024x1024 typical. | +| Map terrain textures | **DXT5 / BC3** | Yes | Tiling textures. | +| Bookmark backgrounds (1920x1080) | **DXT1 / BC1** | **No** | Opaque illustrations. | +| Bookmark character overlays (1920x1080) | **DXT5 / BC3** | **No** | With alpha for compositing. | + +### Tools +- **GIMP** + NVIDIA DDS plugin (or GIMP 2.10+ built-in) — supports uncompressed ARGB export +- **Paint.NET** + DDS FileType Plus plugin — reliable, easy UI +- **texconv** (Microsoft DirectXTex) — CLI batch conversion from PNG to DDS +- **Photoshop** + Intel Texture Works plugin +- **Blender** / **Maya** — for portrait 3D model work (with CK3 export addon) + +### Workflow +1. Design at **exact target resolution** in PNG with transparent background +2. Export to DDS with the **correct format per asset type** (see table above) +3. Generate mipmaps **only where required** (modifier icons: yes; trait icons: no) +4. Place in correct `gfx/` subdirectory with exact filename matching code reference + +### Common Pitfalls +- **Trait icons must be uncompressed ARGB**, not DXT5 — wrong format causes invisible icons +- **Trait icons are 120x120**, not 60x60 — wrong resolution causes scaling artifacts +- Missing mipmaps on modifier icons cause blurry scaling +- Anti-aliased edges in province maps crash the game +- CoA emblems **must use uncompressed ARGB** for the color mask system to work +- DDS files must match the **exact** filename referenced in code (case-sensitive on Linux) +- Loading screens are **4K (3840x2160)**, not 1080p — lower res will appear blurry + +--- + +## M1: Foundation + +> *No visual assets required.* M1 is about data correctness — province history, +> scripted triggers, game rules, vanilla suppression. All visual display uses +> vanilla fallbacks. + +**Assets needed: 0** + +--- + +## M2: The Metallic Arts + +> *No visual assets required.* M2 validates and completes all metallic arts +> mechanics (traits, events, MaA balance). Trait icons will show as blank +> placeholders until M8, which is acceptable for testing. + +**Assets needed: 0** + +(Trait icon paths are defined in code during M2 but the actual `.dds` files are +created in M8. Missing icons produce a "missing texture" log warning but don't +crash the game.) + +--- + +## M3: The Final Empire + +> *Canonical characters, religions, buildings, kandra. Some assets benefit +> immersion but are not strictly required for functionality.* + +### 3a. Coat of Arms Emblems (Optional, polish in M8) + +Custom dynasty and house crests for the 10 Great Houses, Lord Ruler, and special +factions. In M3 these can use vanilla auto-generated CoA; custom emblems add +polish. + +**Directory:** `gfx/coat_of_arms/colored_emblems/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `ce_house_venture.dds` | DDS (ARGB 32bpp) | 128x128 | House Venture — silver tower | +| `ce_house_hasting.dds` | DDS (ARGB 32bpp) | 128x128 | House Hasting — crossed swords | +| `ce_house_elariel.dds` | DDS (ARGB 32bpp) | 128x128 | House Elariel — rose motif | +| `ce_house_lekal.dds` | DDS (ARGB 32bpp) | 128x128 | House Lekal — shield/lion | +| `ce_house_erikeller.dds` | DDS (ARGB 32bpp) | 128x128 | House Erikeller — crest | +| `ce_house_tekiel.dds` | DDS (ARGB 32bpp) | 128x128 | House Tekiel — merchant scales | +| `ce_house_bylerum.dds` | DDS (ARGB 32bpp) | 128x128 | House Bylerum — crest | +| `ce_house_getrue.dds` | DDS (ARGB 32bpp) | 128x128 | House Getrue — crest | +| `ce_house_urbain.dds` | DDS (ARGB 32bpp) | 128x128 | House Urbain — crest | +| `ce_house_entrone.dds` | DDS (ARGB 32bpp) | 128x128 | House Entrone — crest | +| `ce_house_rashek.dds` | DDS (ARGB 32bpp) | 128x128 | Lord Ruler's house — atium/sun motif | +| `ce_terris_synod.dds` | DDS (ARGB 32bpp) | 128x128 | Terris Synod — metalminds | +| `ce_kelsier_crew.dds` | DDS (ARGB 32bpp) | 128x128 | Kelsier's crew — mistcloak/coin | + +**Color mask system:** Colored emblems use three recognized mask colors: +- Color 1: `#000084` (blue) +- Color 2: `#00FF94` (light green) +- Color 3: `#FF0084` (magenta) + +The engine tints these regions at runtime based on the CoA color definition. +Emblems **must use uncompressed ARGB 32bpp (B8G8R8A8 Linear)** — DXT compression +breaks the color mask system. + +**Emblem registration:** Each emblem needs an entry in a definition file at +`gfx/coat_of_arms/colored_emblems/`: +``` +ce_house_venture.dds = { + colors = 3 # Number of color channels (1, 2, or 3) + visible = yes # Show in CoA designer +} +``` + +**CoA definitions** go in `common/coat_of_arms/coat_of_arms/` and auto-match by +keyname (dynasty/house/title key = CoA key). + +**Also needed:** +- **Patterns** in `gfx/coat_of_arms/patterns/` — 256x256, DXT1 (optional, can + reuse vanilla) +- **CoA mask** at `gfx/coat_of_arms/coa_mask_texture.dds` — 256x256, DXT1 + (optional, vanilla default works) + +**Count: ~13 emblems** + +### 3b. Religion Icons (Optional, polish in M8) + +**Faith icons** — `gfx/interface/icons/faith/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `steel_ministry.dds` | DDS (ARGB 32bpp) | 100x100 | Steel Ministry sigil — vertical lines/spikes | +| `terris_worldbringers.dds` | DDS (ARGB 32bpp) | 100x100 | Keeper symbol — metalminds | +| `survivorism.dds` | DDS (ARGB 32bpp) | 100x100 | Survivor symbol — scars/mist | +| `ruin_religion.dds` | DDS (ARGB 32bpp) | 100x100 | Ruin symbol — cracked/destructive | + +Referenced in religion definition via `icon = `. + +**Doctrine icons** (optional) — `gfx/interface/icons/faith_doctrine_groups/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| Custom doctrine group icons | DDS (ARGB) | 120x120 | One per custom doctrine group | + +**Tenet icons** (optional) — `gfx/interface/icons/faith_doctrines/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| Custom tenet icons | DDS (DXT5) | 260x400 | Tall format. One per custom tenet. | + +**Count: 4 faith icons (required) + doctrine/tenet icons (optional)** + +### 3c. Building Icons (Optional, polish in M8) + +Special buildings defined in M3 (Kredik Shaw, Pits of Hathsin, Conventical of +Seran, Great Library of Tathingdwen, Urteau Canal) need icons for the holding +view. + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Kredik Shaw | `gfx/interface/icons/buildings/building_kredik_shaw.dds` | DDS (ARGB 32bpp) | 60x60 | Spired fortress | +| Pits of Hathsin | `gfx/interface/icons/buildings/building_pits_of_hathsin.dds` | DDS (ARGB 32bpp) | 60x60 | Mining pit / caves | +| Conventical of Seran | `gfx/interface/icons/buildings/building_conventical_seran.dds` | DDS (ARGB 32bpp) | 60x60 | Dark monastery | +| Great Library | `gfx/interface/icons/buildings/building_tathingdwen_library.dds` | DDS (ARGB 32bpp) | 60x60 | Grand library | +| Urteau Canal | `gfx/interface/icons/buildings/building_urteau_canal.dds` | DDS (ARGB 32bpp) | 60x60 | Canal/waterway | + +**Count: 5 icons** + +--- + +## M4: Scadrial on the Map + +> *The vanilla map feels like Scadrial. Province modifiers, custom CBs, schemes, +> lifestyles, activities, and rethemed court content.* + +### 4a. Province Modifier Icons + +New province modifiers defined in M4 need icons. + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Heavy Mists | `gfx/interface/icons/modifiers/modifier_mist_heavy.dds` | DDS (ARGB 32bpp) | 60x60 | Thick swirling mist | +| Fertile Ashland | `gfx/interface/icons/modifiers/modifier_fertile_ashland.dds` | DDS (ARGB 32bpp) | 60x60 | Green sprout in grey ash | + +**Count: 2 icons** + +### 4b. Custom Casus Belli Icons + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Rebellion CB | `gfx/interface/icons/casus_belli/cb_rebellion.dds` | DDS (ARGB 32bpp) | 60x60 | Raised fist / broken chain | +| House Conquest | `gfx/interface/icons/casus_belli/cb_house_conquest.dds` | DDS (ARGB 32bpp) | 60x60 | Sword over noble crest | +| Reclaim Dominance | `gfx/interface/icons/casus_belli/cb_reclaim_dominance.dds` | DDS (ARGB 32bpp) | 60x60 | Crown / territory map | + +**Count: 3 icons** + +### 4c. Scheme Icons + +Scheme definitions reference icons via `icon = icon_scheme_` which maps to +`gfx/interface/icons/scheme_types/icon_scheme_.dds`. + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Noble Infiltration | `gfx/interface/icons/scheme_types/icon_scheme_noble_infiltration.dds` | DDS | 120x120 | Masked figure at a ball | +| Skaa Recruitment | `gfx/interface/icons/scheme_types/icon_scheme_skaa_recruit.dds` | DDS | 120x120 | Hidden handshake | + +Schemes also reference an `illustration` field pointing to an event scene DDS +for the scheme window background (see section 4f event backgrounds). + +**Count: 2 icons** + +### 4d. Lifestyle Assets + +5 Mistborn-themed lifestyles planned in M4, each with a tree of perks. CK3 +lifestyles require multiple asset types (verified from game files): + +**Lifestyle strip icons:** `gfx/interface/icons/lifestyles/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `allomantic_lifestyle.dds` | DDS | 480x160 | 3-frame sprite strip — burning metals motif | +| `political_lifestyle.dds` | DDS | 480x160 | Noble court / intrigue motif | +| `underworld_lifestyle.dds` | DDS | 480x160 | Shadowy thieving crew motif | +| `keeper_lifestyle.dds` | DDS | 480x160 | Terris keeper with metalminds motif | +| `military_lifestyle.dds` | DDS | 480x160 | Hazekillers / Koloss battle motif | + +**Focus icons:** `gfx/interface/icons/focuses/` — 140x140 DDS, ~3 per lifestyle + +| Lifestyle | Focus count (est.) | Example names | +|---|---|---| +| Allomantic | 3 | `allomantic_burning_focus`, `allomantic_pushing_focus`, `allomantic_enhancement_focus` | +| Political | 3 | `political_authority_focus`, `political_scheming_focus`, `political_diplomacy_focus` | +| Underworld | 3 | `underworld_thieving_focus`, `underworld_smuggling_focus`, `underworld_recruitment_focus` | +| Keeper | 3 | `keeper_knowledge_focus`, `keeper_breeding_focus`, `keeper_preservation_focus` | +| Military | 3 | `military_command_focus`, `military_hazekiller_focus`, `military_koloss_focus` | + +**Perk tree backgrounds:** `gfx/interface/icons/lifestyle_tree_backgrounds/` — 348x812 DDS (tall strip), one per perk tree (~15 total for 5 lifestyles x 3 trees) + +**Lifestyle background illustrations:** `gfx/interface/illustrations/lifestyles_background/` — 608x1552 DDS (very tall vertical sidebar art), one per lifestyle + +**Perk node icons:** `gfx/interface/icons/lifestyles_perks/` — 180x60 DDS per node type + +**Count: 5 lifestyle strips + ~15 focus icons + ~15 tree backgrounds + 5 sidebar illustrations + perk nodes = ~45+ assets** + +### 4e. Activity Assets + +Rethemed activities (Noble Ball, Mist Patrol). CK3 activities require multiple +visual asset types (verified from game files): + +**Activity icons:** `gfx/interface/icons/activities/` — 80x80 standard + 164x164 header variant + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `activity_noble_ball.dds` | DDS | 80x80 | Ball activity icon | +| `activity_noble_ball_header.dds` | DDS | 164x164 | Ball header variant | +| `activity_mist_patrol.dds` | DDS | 80x80 | Mist patrol icon | +| `activity_mist_patrol_header.dds` | DDS | 164x164 | Mist patrol header | + +**Activity header backgrounds:** `gfx/interface/illustrations/activity_header_backgrounds/` — 1100x440 DDS + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `activity_noble_ball.dds` | DDS | 1100x440 | Grand ballroom panoramic | +| `activity_mist_patrol.dds` | DDS | 1100x440 | Soldiers in mist panoramic | + +**Activity type illustrations** (vertical sidebar): `gfx/interface/illustrations/activity_types/` — 460x1100 DDS + +**Activity phase icons** (optional): `gfx/interface/icons/activity_phases/` — 140-160px DDS + +**Activity intent icons** (optional): `gfx/interface/icons/activity_intents/` — 60x60 DDS + +**Count: 4 icons + 2 headers + optional type/phase/intent icons = ~8+ assets per activity** + +### 4f. Event Background Themes + +Custom event themes so events don't use vanilla European backdrops. Vanilla has +205 event scene illustrations at 1592x848 (verified from game files). + +**Directory:** `gfx/interface/illustrations/event_scenes/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `mistborn_court.dds` | DDS | 1592x848 | Noble court with ash-stained windows | +| `mistborn_streets.dds` | DDS | 1592x848 | Luthadel street scene, ash and mist | +| `mistborn_wilderness.dds` | DDS | 1592x848 | Ash plains with distant ashmount | +| `mistborn_ball.dds` | DDS | 1592x848 | Ballroom scene, chandeliers, nobility | +| `mistborn_dungeon.dds` | DDS | 1592x848 | Dark dungeon / Pits of Hathsin caves | +| `mistborn_temple.dds` | DDS | 1592x848 | Steel Ministry canton interior | +| `mistborn_battlefield.dds` | DDS | 1592x848 | Battle scene with Koloss, ash | +| `mistborn_mists.dds` | DDS | 1592x848 | Dense mist scene, mysterious | + +**Event background definitions** go in `common/event_backgrounds/`: +``` +mistborn_court_background = { + background = { + reference = "gfx/interface/illustrations/event_scenes/mistborn_court.dds" + environment = "environment_event_courtroom" + ambience = "event:/SFX/Events/Backgrounds/castle_interior" + } +} +``` + +**Event themes** go in `common/event_themes/` and reference the backgrounds: +``` +mistborn_court_theme = { + background = { reference = "mistborn_court_background" } + icon = { reference = "gfx/interface/icons/event_types/type_intrigue.dds" } +} +``` + +Events reference themes via `theme = mistborn_court_theme`. + +**Event type icons** (optional): `gfx/interface/icons/event_types/` — 148x148 DDS + +**Count: 8 scene backgrounds + definition files** + +--- + +## M5: The Crew + +> *Kelsier's unlanded adventurer band. Bookmark rework.* + +### 5a. Bookmark Character Portraits + +Bookmark characters need curated portraits. CK3 uses the DNA/gene system for +portraits, not separate image files. However, the bookmark screen shows a +rendered portrait panel. + +**No separate image files needed** — character appearance is controlled via +`has_scripted_appearance = yes` and custom DNA strings in history files. But the +DNA strings must be carefully crafted for: +- Kelsier (scarred arms, confident look, skaa features) +- Vin (small, young, dark hair, mistrustful expression) +- Elend Venture (noble, scholarly appearance) +- Straff Venture (older, stern noble) + +**Count: 0 image files** (DNA is data, not art — but requires careful design) + +--- + +## M6: The Plan + +> *Core narrative arc events. No new visual asset categories introduced.* + +### 6a. Additional Modifier Icons + +New modifiers introduced in M6 event arcs: + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Full Crew Assembled | `gfx/interface/icons/modifiers/modifier_full_crew.dds` | DDS (ARGB 32bpp) | 60x60 | Circle of figures | + +**Count: 1 icon** + +--- + +## M7: The Deepness + +> *All event arcs, atium economy, political intrigue, Mistborn duels.* + +### 7a. Additional Modifier Icons + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Eleventh Metal Insight | `gfx/interface/icons/modifiers/modifier_eleventh_metal_insight.dds` | DDS (ARGB 32bpp) | 60x60 | Golden metal shard | +| Duel Veteran | `gfx/interface/icons/modifiers/modifier_duel_veteran.dds` | DDS (ARGB 32bpp) | 60x60 | Crossed coin and sword | +| Atium Contract Holder | `gfx/interface/icons/modifiers/modifier_atium_contract_holder.dds` | DDS (ARGB 32bpp) | 60x60 | Atium geode with scroll | +| Mist Empowerment | `gfx/interface/icons/modifiers/modifier_mist_empowerment.dds` | DDS (ARGB 32bpp) | 60x60 | Swirling mist with glow | +| False Flag Framed | `gfx/interface/icons/modifiers/modifier_false_flag_framed.dds` | DDS (ARGB 32bpp) | 60x60 | Two crests with knife | +| Skaa Scandal Shame | `gfx/interface/icons/modifiers/modifier_skaa_scandal.dds` | DDS (ARGB 32bpp) | 60x60 | Broken noble mask | +| Beauty in Ash | `gfx/interface/icons/modifiers/modifier_beauty_in_ash.dds` | DDS (ARGB 32bpp) | 60x60 | Flower against grey | +| Hero of Ages | `gfx/interface/icons/modifiers/modifier_hero_of_ages.dds` | DDS (ARGB 32bpp) | 60x60 | Radiant figure in mist | +| Ashmount Eruption | `gfx/interface/icons/modifiers/modifier_ashmount_eruption.dds` | DDS (ARGB 32bpp) | 60x60 | Erupting volcano | +| Mist Fear | `gfx/interface/icons/modifiers/modifier_mist_fear.dds` | DDS (ARGB 32bpp) | 60x60 | Cowering figure in fog | +| Post-Empire Chaos | `gfx/interface/icons/modifiers/modifier_post_empire_chaos.dds` | DDS (ARGB 32bpp) | 60x60 | Crumbling tower | +| Terris Breeding Program | `gfx/interface/icons/modifiers/modifier_terris_breeding.dds` | DDS (ARGB 32bpp) | 60x60 | Intertwined metalminds | + +**Count: 12 icons** + +### 7b. Additional Decision Illustrations + +New decisions from M7 event arcs: + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Raid Noble House | `gfx/interface/illustrations/decisions/decision_raid.dds` | DDS (DXT1) | 1100x440 | Night raid on a noble keep | +| Challenge Allomancer | `gfx/interface/illustrations/decisions/decision_duel.dds` | DDS (DXT1) | 1100x440 | Two Allomancers facing off in mist | +| Assault Kredik Shaw | `gfx/interface/illustrations/decisions/decision_assault_kredik_shaw.dds` | DDS (DXT1) | 1100x440 | Siege of Lord Ruler's palace | + +**Count: 3 illustrations** + +--- + +## M8: The Art of Metals + +> *Custom map, full graphics, publication polish. This is the primary art +> milestone where most visual assets are created.* + +### 8a. Custom Map Files + +The single highest-risk and most labor-intensive asset category. CK3 maps require +pixel-perfect files that work together as a set. All dimensions are relative to a +base map size (W x H). **Width must be >= height** (known bug since v1.9: north +part of heightmap renders black if height > width). + +**Recommended base size:** 4096x2048 for a focused total conversion. Vanilla is +8192x4096. Power-of-2 dimensions recommended. + +**Directory:** `map_data/` + +#### Core Map Files (required) + +| File | Format | Dimensions | Depth | Description | +|---|---|---|---|---| +| `provinces.png` | PNG | W x H | 24-bit RGB | Province boundaries. Each province is a unique RGB color. **No anti-aliasing, no gradients, no alpha.** Every pixel must match exactly one color from `definition.csv`. Pencil tool only — never brush. Black (0,0,0) = impassable. | +| `heightmap.png` | PNG | W x H | **16-bit greyscale, RGB mode** | Elevation data. **Must be RGB mode, not RGBA** (RGBA causes white fog rendering bug). Requires companion `heightmap.heightmap` declaring `original_heightmap_size { W H }`. After changes, must repack via CK3 map editor. Auto-generates `indirection_heightmap.png` (W/32 x H/32) and `packed_heightmap.png`. | +| `rivers.png` | PNG (indexed) | W x H | Indexed RGB | River network. **No anti-aliasing, no transparency** (causes CTD). River pixels must be orthogonally adjacent to max 2 other river pixels; splits/joins max 3. | +| `definition.csv` | CSV (`;` delimited) | — | — | `ID;R;G;B;Name;x;` — Province ID to RGB mapping. **IDs must be sequential** or game crashes. ~160 rows. | +| `default.map` | Text | — | — | Master config. Province type flags: blank=land, R=rivers, L=lakes, O=oceans, W=wasteland, IS=impassable seas, IM=impassable mountains. | +| `adjacencies.csv` | CSV | — | — | `From;To;Type;Through;start_x;start_y;stop_x;stop_y;Comment`. Types: `sea`, `river_large`. **Must end with** `-1;-1;;-1;-1;-1;-1;-1;` or infinite load. | + +**River color conventions:** + +| Color | RGB | Meaning | +|---|---|---| +| Green | `#00FF00` | River source | +| Red | `#FF0000` | Tributary junction | +| Yellow | `#FFFC00` | River split | +| Magenta | `#FF0080` | Sea/lake/navigable water connection | +| White | `#FFFFFF` | Land (no river) | +| Blue gradient | Various | River flow (darker = wider) | + +**Scadrial heightmap values:** Ashmounts: 220-250, Terris mountains: 180-220, +Central plains: 40-60, River valleys: 20-35, Ocean: 0. + +#### Terrain Files + +| File | Format | Dimensions | Description | +|---|---|---|---| +| Terrain masks (`*_mask.bmp`) | BMP (greyscale) | W x H | One per terrain type (e.g., `plains_01_mask.bmp`). Max height 4096px. | +| Terrain diffuse (`*_diffuse.dds`) | DDS (BC3/DXT5) | Tiling | Albedo/color texture per terrain type. With mipmaps. | +| Terrain normal (`*_normal.dds`) | DDS (BC3/DXT5) | Tiling | Normal map per terrain type. | +| Terrain properties (`*_properties.dds`) | DDS (BC3/DXT5) | Tiling | PBR: R=unused, G=specular, B=metalness, A=roughness. | +| `detail_index.tga` | TGA | W x H | Detail texture index map. | +| `detail_intensity.tga` | TGA | W x H | Detail texture intensity. | +| `colormap.dds` | DDS | W/2 x H/2 | Overall color overlay at quarter resolution. | +| `flatmap.dds` | DDS | W x H | Paper/flat map view texture. | +| `materials.settings` | Text | — | Maps texture sets to mask files. | + +Province terrain assignment is defined separately in +`common/province_terrain/00_province_terrain.txt` using the format +`province_id = terrain_type`. 14 vanilla terrain types: `plains`, `farmlands`, +`hills`, `mountains`, `desert`, `desert_mountains`, `oasis`, `jungle`, `forest`, +`taiga`, `wetlands`, `steppe`, `floodplains`, `drylands`. + +#### Water & Environment Files + +| File | Path | Format | Dimensions | +|---|---|---|---| +| `flowmap.dds` | `gfx/map/water/` | DDS | W/2 x H/2 | +| `foam_map.dds` | `gfx/map/water/` | DDS | W/4 x H/4 | +| `watercolor_rgb_waterspec_a.dds` | `gfx/map/water/` | DDS | W/√2 x H/√2 | +| `surround_mask.dds` | `gfx/map/surround_map/` | DDS | W/√2 x H/√2 | +| `surround_fade.dds` | `gfx/map/surround_map/` | DDS | W/4 x H/4 | +| `surround_tile.dds` | `gfx/map/surround_map/` | DDS | Tiling | + +#### Map Object Placement (3D objects on map) + +| File | Path | Format | Description | +|---|---|---|---| +| `building_locators.txt` | `gfx/map/map_object_data/` | Text | Holding/building positions per barony | +| `combat_locators.txt` | `gfx/map/map_object_data/` | Text | Army combat positions | +| `player_stack_locators.txt` | `gfx/map/map_object_data/` | Text | Raised army positions | +| `siege_locators.txt` | `gfx/map/map_object_data/` | Text | Siege weapon positions | +| `positions.txt` | `map_data/` | Text | City/unit/text positions per province | + +Locator files can be auto-generated using the CK3 map editor's auto-nudge tool. + +#### Defines (required for custom map dimensions) + +| File | Key | Value | +|---|---|---| +| `common/defines/00_defines.txt` | `WORLD_EXTENTS_X` | W - 1 | +| `common/defines/00_defines.txt` | `WORLD_EXTENTS_Z` | H - 1 | +| `common/defines/00_defines.txt` | `WATERLEVEL` | Height for ocean/lake | +| `common/defines/graphic/00_graphics.txt` | `PANNING_WIDTH` | W | +| `common/defines/graphic/00_graphics.txt` | `PANNING_HEIGHT` | H | + +#### Dimension Relationships Summary + +All dimensions relative to base map (W x H): + +| File | Size | +|---|---| +| provinces.png, rivers.png, heightmap.png | W x H | +| flatmap.dds, detail_index/intensity, terrain masks | W x H | +| colormap.dds, flowmap.dds | W/2 x H/2 (quarter) | +| watercolor.dds, surround_mask.dds | ~W/1.4 x H/1.4 (half area) | +| foam_map.dds, surround_fade.dds | W/4 x H/4 (sixteenth) | +| indirection_heightmap.png | W/32 x H/32 | + +**Map geography should depict:** +- Roughly circular landmass with Luthadel at center +- Terris mountains in the north +- Ashmounts scattered throughout (5+ volcanic peaks) +- River Channerel flowing south through Central Dominance +- Pits of Hathsin in the south +- Remote Dominance at the edges / frontier +- Ocean or impassable wasteland beyond the Empire borders + +**Recommended approach:** Start with 4096x2048 for prototyping. The +[Atlantis TC template](https://github.com/bombusfrigidus/Atlantis) provides a +clean starting scaffold for total conversion map_data structure. + +**Count: ~20+ image/data files across map_data/ and gfx/map/** + +### 8b. Trait Icons + +Every metallic arts trait defined in `common/traits/` needs a custom icon. + +**Directory:** `gfx/interface/icons/traits/` + +**Allomancy Misting traits (12 icons):** + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `trait_misting_coinshot.dds` | DDS (ARGB 32bpp) | 120x120 | Steel — blue/silver pushing-coins motif | +| `trait_misting_lurcher.dds` | DDS (ARGB 32bpp) | 120x120 | Iron — dark pulling-metals motif | +| `trait_misting_thug.dds` | DDS (ARGB 32bpp) | 120x120 | Pewter — fist/strength motif | +| `trait_misting_tineye.dds` | DDS (ARGB 32bpp) | 120x120 | Tin — eye/enhanced senses motif | +| `trait_misting_soother.dds` | DDS (ARGB 32bpp) | 120x120 | Brass — calming wave motif | +| `trait_misting_rioter.dds` | DDS (ARGB 32bpp) | 120x120 | Zinc — flame/emotion motif | +| `trait_misting_smoker.dds` | DDS (ARGB 32bpp) | 120x120 | Copper — cloud/shield motif | +| `trait_misting_seeker.dds` | DDS (ARGB 32bpp) | 120x120 | Bronze — detection/pulse motif | +| `trait_misting_augur.dds` | DDS (ARGB 32bpp) | 120x120 | Gold — mirror/past-self motif | +| `trait_misting_oracle.dds` | DDS (ARGB 32bpp) | 120x120 | Atium — eye-of-the-future motif | +| `trait_misting_duralumin.dds` | DDS (ARGB 32bpp) | 120x120 | Duralumin — amplification burst | +| `trait_misting_nicroburst.dds` | DDS (ARGB 32bpp) | 120x120 | Nicrosil — external amplification | + +**Mistborn (1 icon):** + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `trait_mistborn.dds` | DDS (ARGB 32bpp) | 120x120 | All-metals motif, mist-swirling figure. This is the signature icon — make it striking. | + +**Allomantic strength (3 icons):** + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `trait_allomantic_strength_weak.dds` | DDS (ARGB 32bpp) | 120x120 | Dim/faded metal glow | +| `trait_allomantic_strength_strong.dds` | DDS (ARGB 32bpp) | 120x120 | Bright metal glow | +| `trait_allomantic_strength_savant.dds` | DDS (ARGB 32bpp) | 120x120 | Intense/dangerous glow with cracks | + +**Allomantic potential (2 icons):** + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `trait_allomantic_potential.dds` | DDS (ARGB 32bpp) | 120x120 | Dormant spark, hidden potential | +| `trait_mistborn_potential.dds` | DDS (ARGB 32bpp) | 120x120 | Brighter dormant spark (Mistborn-level) | + +**Feruchemy (2 icons):** + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `trait_feruchemist.dds` | DDS (ARGB 32bpp) | 120x120 | Metalmind/arm-band motif, Terris styling | +| `trait_feruchemy_potential.dds` | DDS (ARGB 32bpp) | 120x120 | Dormant metalmind motif | + +**Hemalurgy (6 icons):** + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `trait_hemalurgist.dds` | DDS (ARGB 32bpp) | 120x120 | Dark spike motif, blood/corruption | +| `trait_hemalurgic_steel.dds` | DDS (ARGB 32bpp) | 120x120 | Steel spike — thin, precise | +| `trait_hemalurgic_pewter.dds` | DDS (ARGB 32bpp) | 120x120 | Pewter spike — thick, brutal | +| `trait_hemalurgic_bronze.dds` | DDS (ARGB 32bpp) | 120x120 | Bronze spike — warm-toned | +| `trait_hemalurgic_atium.dds` | DDS (ARGB 32bpp) | 120x120 | Atium spike — rare, glowing | +| `trait_knows_hemalurgy.dds` | DDS (ARGB 32bpp) | 120x120 | Book/knowledge with dark undertone | + +**Count: 26 icons** + +### 8c. Modifier Icons + +Every modifier needs a unique icon. Several currently share placeholder paths. + +**Directory:** `gfx/interface/icons/modifiers/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `modifier_compounder.dds` | DDS (ARGB 32bpp) | 60x60 | Golden dual-power (Allomancy + Feruchemy fused) | +| `modifier_lord_ruler_attention.dds` | DDS (ARGB 32bpp) | 60x60 | Red eye/gaze of the Lord Ruler | +| `modifier_lord_ruler_attention_1.dds` | DDS (ARGB 32bpp) | 60x60 | Amber eye (Tier 1 — warning) | +| `modifier_lord_ruler_attention_2.dds` | DDS (ARGB 32bpp) | 60x60 | Red eye (Tier 2 — investigation) | +| `modifier_lord_ruler_attention_3.dds` | DDS (ARGB 32bpp) | 60x60 | Burning eye (Tier 3 — retribution) | +| `modifier_steel_ministry_favor.dds` | DDS (ARGB 32bpp) | 60x60 | Steel Ministry sigil, gold/positive | +| `modifier_steel_ministry_displeasure.dds` | DDS (ARGB 32bpp) | 60x60 | Steel Ministry sigil, cracked/red | +| `modifier_ash_blight.dds` | DDS (ARGB 32bpp) | 60x60 | Grey ash covering land | +| `modifier_koloss_rampage.dds` | DDS (ARGB 32bpp) | 60x60 | Blue koloss fist/destruction | +| `modifier_great_house_status.dds` | DDS (ARGB 32bpp) | 60x60 | Noble house crest with gold frame | +| `modifier_atium_supply.dds` | DDS (ARGB 32bpp) | 60x60 | Atium geode, shimmering | +| `modifier_breeding_for_allomancy.dds` | DDS (ARGB 32bpp) | 60x60 | Intertwined bloodlines motif | +| `modifier_ruin_influence.dds` | DDS (ARGB 32bpp) | 60x60 | Dark red corruption veins | +| `modifier_steel_inquisitor_power.dds` | DDS (ARGB 32bpp) | 60x60 | Spiked eye sockets, menacing | +| `modifier_mist_heavy.dds` | DDS (ARGB 32bpp) | 60x60 | Dense mist (also in M4) | +| `modifier_fertile_ashland.dds` | DDS (ARGB 32bpp) | 60x60 | Green in grey (also in M4) | +| `modifier_full_crew.dds` | DDS (ARGB 32bpp) | 60x60 | Circle of figures (also in M6) | +| `modifier_eleventh_metal_insight.dds` | DDS (ARGB 32bpp) | 60x60 | Golden metal shard (also in M7) | +| `modifier_duel_veteran.dds` | DDS (ARGB 32bpp) | 60x60 | Crossed coin and sword (also in M7) | +| `modifier_atium_contract_holder.dds` | DDS (ARGB 32bpp) | 60x60 | Atium geode with scroll (also in M7) | + +(Plus 8 more from M7 — see M7 section above.) + +**Count: ~20 base + 12 from M7 = ~32 total modifier icons** + +> **Note:** Many of these are listed in both the milestone where they're first +> referenced in code (M4/M6/M7) and here in M8 where they're physically created. +> Create all modifier icons together during M8 for consistency. + +### 8d. Decision Illustrations + +Large artwork panels shown behind decisions in the decision detail view. + +**Directory:** `gfx/interface/illustrations/decisions/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `decision_host_ball.dds` | DDS (DXT1) | 1100x440 | Noble ball scene — chandelier, dancing | +| `decision_snapping.dds` | DDS (DXT1) | 1100x440 | Character in pain, awakening power | +| `decision_hemalurgy.dds` | DDS (DXT1) | 1100x440 | Dark ritual with metallic spike | +| `decision_hire_kandra.dds` | DDS (DXT1) | 1100x440 | Shapeshifter in shadows | +| `decision_breed_allomancy.dds` | DDS (DXT1) | 1100x440 | Noble house genealogy with metal glow | +| `decision_smuggle_atium.dds` | DDS (DXT1) | 1100x440 | Cloaked figure with atium geode | +| `decision_recruit_skaa.dds` | DDS (DXT1) | 1100x440 | Skaa allomancer hiding powers | +| `decision_crack_down_skaa.dds` | DDS (DXT1) | 1100x440 | Noble overseeing skaa workers | +| `decision_improve_conditions.dds` | DDS (DXT1) | 1100x440 | Compassionate scene with skaa | +| `decision_raid.dds` | DDS (DXT1) | 1100x440 | Night raid on noble keep (also in M7) | +| `decision_duel.dds` | DDS (DXT1) | 1100x440 | Allomantic duel (also in M7) | +| `decision_assault_kredik_shaw.dds` | DDS (DXT1) | 1100x440 | Siege of the spired palace (also in M7) | + +**Count: ~12 illustrations** + +### 8e. Loading Screens + +Custom loading screen art replaces vanilla during game load. + +**Directory:** `gfx/interface/illustrations/loading_screens/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `ls_luthadel_skyline.dds` | DDS (DXT1) | 3840x2160 | Luthadel skyline — ash, mists, spired buildings | +| `ls_kredik_shaw.dds` | DDS (DXT1) | 3840x2160 | Kredik Shaw palace — towering spires | +| `ls_ashmounts.dds` | DDS (DXT1) | 3840x2160 | Ashmounts at sunset — volcanic glow | +| `ls_vin_mists.dds` | DDS (DXT1) | 3840x2160 | Vin leaping through mist — action pose | +| `ls_kelsier_overlooking.dds` | DDS (DXT1) | 3840x2160 | Kelsier on rooftop overlooking Luthadel | + +CK3 automatically cycles through images. Configuration is via +`loadscreen_settings.txt` in the same directory: +``` +luthadel_skyline = { priority = 2 } +kredik_shaw = { priority = 2 } +ashmounts = { priority = 2 } +vin_mists = { priority = 2 show_first = yes } +``` +Format: ` = { priority = }`. Use +`show_first = yes` to prioritize a specific screen. + +**Count: 3-5 images + 1 config file** + +### 8f. Bookmark Art + +The "End of an Empire" bookmark needs multiple art assets (verified from vanilla). + +**Multiple files per bookmark:** + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Main background | `gfx/interface/bookmarks/bm_end_of_an_empire.dds` | DDS (DXT1) | 1920x1080 | Mist-shrouded Luthadel with Kredik Shaw, ash falling | +| Kelsier character overlay | `gfx/interface/bookmarks/bm_end_of_an_empire_bookmark_kelsier.dds` | DDS (DXT5) | 1920x1080 | Kelsier character art with alpha for compositing | +| Vin character overlay | `gfx/interface/bookmarks/bm_end_of_an_empire_bookmark_vin.dds` | DDS (DXT5) | 1920x1080 | Vin character art with alpha | +| Elend character overlay | `gfx/interface/bookmarks/bm_end_of_an_empire_bookmark_elend.dds` | DDS (DXT5) | 1920x1080 | Elend character art with alpha | +| Big icon | `gfx/interface/icons/bookmark_big/bm_end_of_an_empire.dds` | DDS | 336x152 | Thumbnail in bookmark selection list | +| Button | `gfx/interface/icons/bookmark_buttons/bm_end_of_an_empire.dds` | DDS | 580x160 | Bookmark selection button | + +Character overlays are composited on the background. Each shows a single +character in their `position = { x y }` as defined in the bookmark definition. +Use DXT5 (alpha) for overlays, DXT1 (opaque) for the background. + +**Count: 6 assets (1 background + 3 character overlays + 2 UI elements)** + +### 8g. Portrait & Ethnicity Assets + +Custom ethnicity definitions for the three Scadrial cultures, plus portrait +modifiers for Hemalurgic characters. + +**Custom ethnicity definitions** (data files, not images): + +| File | Description | +|---|---| +| `common/ethnicities/00_scadrial_ethnicities.txt` | `scadrial_noble` (pale), `scadrial_skaa` (darker/weathered), `scadrial_terris` (dark-skinned per lore) | + +**Portrait modifier textures** (optional, for Hemalurgic spike visuals): + +Portrait modifiers are defined in `gfx/portraits/portrait_modifiers/` (33 files +in vanilla). They use `dna_modifiers` blocks with modes: add, replace, modify. +Weight-based selection triggered by traits, culture, religion, rank. + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Inquisitor spike overlay | `gfx/portraits/portrait_modifiers/inquisitor_eyes.txt` | Text + DDS | — | Modifier definition + textures | + +For visual spike effects, options: +- **Option A (simpler):** Scripted DNA with `has_scripted_appearance = yes` for + named Inquisitors. Uses existing disfigured/scarred appearance genes. +- **Option B (complex):** Custom portrait modifier triggered by traits. Requires + custom accessory meshes and textures (Blender + CK3 export addon). + +**Culture graphics packs** (optional, aspirational): + +To fully replace the vanilla Western aesthetic, a complete custom `gfx` pack +includes (all textures DXT5, 1024x1024 unless noted): + +| Category | Path | Format | Resolution | Count (est.) | +|---|---|---|---|---| +| Clothing diffuse | `gfx/models/portraits/m_clothes/` & `f_clothes/` | DDS (DXT5) | 1024x1024 | ~20 per gender | +| Hair textures | `gfx/models/portraits/m_hair/` & `f_hair/` | DDS (DXT5) | 1024x1024 | ~10 per gender | +| Headgear textures | `gfx/models/portraits/m_headgear/` & `f_headgear/` | DDS (DXT5) | 512-1024 | ~10 per gender | + +These are major art projects requiring 3D modeling. For v1.0, using vanilla +`western_*_gfx` with custom ethnicity settings is acceptable. Custom culture +graphics are a post-launch enhancement. + +**Frontend / Main Menu** (optional polish): + +| Asset | Path | Format | Resolution | Description | +|---|---|---|---|---| +| Frontend background | `gfx/interface/illustrations/frontend/frontend_bg.dds` | DDS (DXT1) | 3840x2160 | Custom main menu background — Scadrial themed | +| Pause background | `gfx/interface/illustrations/frontend/pause_bg.dds` | DDS (DXT1) | 3840x2160 | Custom pause screen | + +**Count: 1 data file + optional portrait/clothing/frontend assets** + +### 8h. Men-at-Arms Custom Icons + +Replace the generic vanilla icon references with custom Mistborn-themed icons. + +**Directory:** `gfx/interface/icons/regiments/` + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `hazekillers.dds` | DDS (ARGB 32bpp) | 60x60 | Elite warrior with obsidian weapons | +| `koloss.dds` | DDS (ARGB 32bpp) | 60x60 | Blue-skinned giant with crude sword | +| `mistborn_agents.dds` | DDS (ARGB 32bpp) | 60x60 | Mistcloaked figure in shadow | +| `skaa_levies.dds` | DDS (ARGB 32bpp) | 60x60 | Ragged peasant militia | +| `noble_guard.dds` | DDS (ARGB 32bpp) | 60x60 | Armored house guard | + +To use custom MaA icons, update `common/men_at_arms_types/00_mistborn_maa.txt` +from `icon = heavy_infantry` to `icon = hazekillers` (custom type) and register +the icon type. + +**Count: 5 icons** + +### 8i. Steam Workshop Thumbnail + +| Asset | Format | Resolution | Description | +|---|---|---|---| +| `thumbnail.png` | PNG | 512x512 | Mod logo — Mistborn silhouette, metallic arts symbol, or Scadrial landscape. Must read clearly at small sizes. | + +Placed at `lords_of_ash/thumbnail.png`. + +**Count: 1 image** + +--- + +## Asset Totals by Milestone + +| Milestone | New Assets | Cumulative | Categories | +|---|---|---|---| +| **M1** | 0 | 0 | — | +| **M2** | 0 | 0 | — | +| **M3** | 0 (23 optional) | 0 (23) | CoA emblems, religion icons, building icons | +| **M4** | 0 (90+ optional) | 0 (113+) | Province modifier icons, CB icons, scheme icons, lifestyle assets (~45+), activity assets (~16+), event backgrounds (8) | +| **M5** | 0 | 0 (105) | DNA strings only | +| **M6** | 0 (1 optional) | 0 (106) | 1 modifier icon | +| **M7** | 0 (15 optional) | 0 (121) | 12 modifier icons, 3 decision illustrations | +| **M8** | ~200+ | ~200+ | Everything — map (20+), all icons, loading screens, bookmark (6), portraits, thumbnail | + +> **Strategy:** All visual assets can be deferred to M8 without breaking +> functionality. Icons show as blank/missing-texture in earlier milestones, which +> is acceptable during development. Creating assets incrementally during each +> milestone is ideal for iterating on style, but all can be batched in M8. + +--- + +## Priority Order for Art Production + +If creating assets incrementally rather than all in M8: + +### Priority 1 — Map files (M8.1) +The map is the riskiest, most complex, and most impactful visual change. Start +early and test obsessively. + +### Priority 2 — Trait icons (M8.4, 26 icons) +Most player-facing icons. Visible in character sheets, tooltips, dynastic views. +Establish the visual language of the metallic arts here. + +### Priority 3 — Loading screens + Bookmark art (M8.5, 4-6 images) +First impression art. Players see these before gameplay. High impact on perceived +quality. + +### Priority 4 — Decision illustrations (M8.5, ~12 images) +Visible whenever players interact with decisions. Moderate effort, high return. + +### Priority 5 — Modifier icons (M8.5, ~32 icons) +Visible in tooltips and character modifiers. Important but can survive as +placeholders longer. + +### Priority 6 — Event backgrounds (M4f, 8 images) +Replace vanilla European backdrops. High immersion value for events. + +### Priority 7 — Lifestyle assets (M4d, ~45+ assets) +Multiple asset types per lifestyle (strips, focuses, tree backgrounds, sidebar +illustrations, perk nodes). Use a consistent visual template per lifestyle. + +### Priority 8 — Everything else +CoA emblems, religion icons, building icons, MaA icons, portrait modifiers, +workshop thumbnail. These are all polish-level assets. + +--- + +## Art Style Guide + +All visual assets should follow a consistent Mistborn aesthetic: + +- **Color palette:** Muted greys, dark blues, burnt oranges, metallic silvers + and golds. The world is perpetually overcast with falling ash. +- **Motifs:** Metal symbols (steel, iron, pewter, tin, etc.), mist swirls, + falling ash, spires (Kredik Shaw), spikes (Hemalurgy), metalminds (Feruchemy) +- **Tone:** Dark fantasy with moments of hope. Gritty but not grimdark. +- **Typography reference:** Angular, metallic — inspired by the Mistborn book + cover designs +- **Icon style:** Clean silhouettes on transparent backgrounds. Each metallic + art icon should be immediately distinguishable at 60x60 pixels. +- **Illustrations:** Painterly style with dramatic lighting. Mist and ash should + be present in outdoor scenes. Interior scenes feature candlelight and metal + fixtures. + +--- + +## Directory Structure (Final) + +``` +lords_of_ash/ +├── common/ +│ ├── defines/ +│ │ ├── 00_defines.txt # WORLD_EXTENTS_X/Z, WATERLEVEL +│ │ └── graphic/ +│ │ └── 00_graphics.txt # PANNING_WIDTH/HEIGHT +│ ├── province_terrain/ +│ │ └── 00_scadrial_terrain.txt # Province-to-terrain assignment +│ └── ... +├── gfx/ +│ ├── coat_of_arms/ +│ │ └── colored_emblems/ # ~13 house/faction emblems +│ ├── interface/ +│ │ ├── bookmarks/ # 6 bookmark assets (bg + overlays + UI) +│ │ ├── icons/ +│ │ │ ├── bookmark_big/ # 1 bookmark thumbnail (336x152) +│ │ │ ├── bookmark_buttons/ # 1 bookmark button (580x160) +│ │ │ ├── buildings/ # 5 building icons +│ │ │ ├── activities/ # activity icons (80x80 + 164x164) +│ │ │ ├── activity_intents/ # intent icons (60x60) +│ │ │ ├── activity_phases/ # phase icons (140-160px) +│ │ │ ├── casus_belli/ # 3 CB icons +│ │ │ ├── faith/ # 4 faith icons (100x100) +│ │ │ ├── faith_doctrine_groups/ # doctrine group icons (120x120) +│ │ │ ├── faith_doctrines/ # tenet icons (260x400) +│ │ │ ├── focuses/ # ~15 focus icons (140x140) +│ │ │ ├── lifestyle_tree_backgrounds/ # ~15 tree bgs (348x812) +│ │ │ ├── lifestyles/ # 5 lifestyle strips (480x160) +│ │ │ ├── lifestyles_perks/ # perk nodes (180x60) +│ │ │ ├── modifiers/ # ~32 modifier icons (60x60) +│ │ │ ├── regiments/ # 5 MaA icons +│ │ │ ├── scheme_types/ # 2 scheme icons (120x120) +│ │ │ └── traits/ # 26 trait icons (120x120) +│ │ └── illustrations/ +│ │ ├── activity_header_backgrounds/ # activity headers (1100x440) +│ │ ├── activity_types/ # activity sidebars (460x1100) +│ │ ├── decisions/ # ~12 decision illustrations (1100x440) +│ │ ├── event_scenes/ # 8 event backgrounds (1592x848) +│ │ ├── frontend/ # 2 optional (menu bg, pause bg; 4K) +│ │ ├── lifestyles_background/ # 5 lifestyle sidebars (608x1552) +│ │ └── loading_screens/ # 3-5 loading screens (4K) + settings +│ ├── map/ +│ │ ├── map_object_data/ # building/combat/siege locators +│ │ ├── surround_map/ # surround_mask, surround_fade, surround_tile +│ │ ├── terrain/ # terrain masks, diffuse/normal/properties DDS +│ │ │ └── materials.settings # texture-to-mask mapping +│ │ └── water/ # flowmap, foam_map, watercolor +│ └── portraits/ +│ └── portrait_modifiers/ # 2 optional portrait overlays +├── map_data/ +│ ├── definition.csv # Province ID -> RGB color mapping +│ ├── default.map # Master map config +│ ├── provinces.png # Province boundary map (W x H) +│ ├── heightmap.png # Elevation (16-bit greyscale) +│ ├── heightmap.heightmap # Declares original_heightmap_size +│ ├── rivers.png # River network (indexed RGB) +│ ├── positions.txt # Province positions +│ ├── adjacencies.csv # Strait/river crossings +│ ├── colormap.dds # Color overlay (W/2 x H/2) +│ ├── flatmap.dds # Paper map view (W x H) +│ ├── detail_index.tga # Detail texture index (W x H) +│ ├── detail_intensity.tga # Detail texture intensity (W x H) +│ └── geographical_regions/ +│ └── 00_scadrial_regions.txt +└── thumbnail.png # Workshop thumbnail (512x512 PNG) +```