Files
lords-of-ash/docs/REQUIRED_ASSETS.md
T
jpmschweitzerandClaude Opus 4.6 2516cc08e3 docs(events): add flavor events registry and update asset/milestone plans
Create docs/events-registry.md cataloging ~112 proposed flavor events:
- Part A: 17 extensions to existing event chains
- Part B: 32 chain steps across 7 new multi-event arcs
- Part C: 63 one-shot events including 8 artifact acquisition events

Update M7 milestone with task group 7.14 referencing the registry.
Update REQUIRED_ASSETS.md with 21 new modifier icons and 8 new event
backgrounds needed for the flavor events expansion (~53 total modifiers,
16 total event backgrounds).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 09:19:10 +01:00

50 KiB

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 ~53 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 16 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 ~230+

Current State

Completed: 26 trait icons, 21 modifier icons, 5 loading screens, 1 bookmark background. Remaining ~175+ assets still needed. 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 iconsgfx/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 = <name_without_extension>.

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_<name> which maps to gfx/interface/icons/scheme_types/icon_scheme_<name>.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

Flavor event backgrounds (needed for M7 task 7.14 — see docs/events-registry.md):

Asset Format Resolution Description
mistborn_underground.dds DDS 1592x848 Secret resistance hideout, torchlit underground passage
mistborn_fighting_pit.dds DDS 1592x848 Underground fighting arena, crowd, torchlight, blood
mistborn_ruins.dds DDS 1592x848 Pre-Ascension ruins deep underground, alien metalwork
mistborn_plantation.dds DDS 1592x848 Skaa plantation, ash-covered fields, overseers
mistborn_private_chamber.dds DDS 1592x848 Noble private study, candlelight, intimate setting
mistborn_market.dds DDS 1592x848 Trade district or black market, shadowy stalls
mistborn_ashmount_close.dds DDS 1592x848 Volcanic eruption close-up, glowing lava and ash
mistborn_clear_night.dds DDS 1592x848 Rare clear night sky with stars — eerie absence of mist

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: 16 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

7c. Flavor Event Modifier Icons

New modifiers introduced by the flavor events expansion (task 7.14 — see docs/events-registry.md for full event catalog).

Directory: gfx/interface/icons/modifiers/

Asset Format Resolution Description
modifier_underground_network.dds DDS (ARGB 32bpp) 60x60 Skaa resistance network — hidden tunnels
modifier_keeper_advisor.dds DDS (ARGB 32bpp) 60x60 Terris Keeper serving as advisor — metalmind glow
modifier_pewter_gate_champion.dds DDS (ARGB 32bpp) 60x60 Fighting pit champion — fist and laurel
modifier_mist_scholar.dds DDS (ARGB 32bpp) 60x60 Scholar studying mist behavior — book and swirl
modifier_mist_warden.dds DDS (ARGB 32bpp) 60x60 Guardian against mist threats — shield and mist
modifier_mist_denier.dds DDS (ARGB 32bpp) 60x60 Willful ignorance of mist changes — closed eye
modifier_ruin_pact.dds DDS (ARGB 32bpp) 60x60 Accepted Ruin's bargain — dark handshake
modifier_ministry_insider.dds DDS (ARGB 32bpp) 60x60 Obligator informant — Ministry sigil with whisper
modifier_combat_veteran.dds DDS (ARGB 32bpp) 60x60 Survived the pewter gate — scarred knuckles
modifier_underground_contacts.dds DDS (ARGB 32bpp) 60x60 Underworld connections — shadowed handshake
modifier_house_rivalry.dds DDS (ARGB 32bpp) 60x60 Active feud with another house — crossed crests
modifier_cautious_ruler.dds DDS (ARGB 32bpp) 60x60 Learned caution from Lord Ruler attention — wary eye
modifier_defiant_confidence.dds DDS (ARGB 32bpp) 60x60 Hardened by defying the Lord Ruler — raised chin
modifier_paranoid_ruler.dds DDS (ARGB 32bpp) 60x60 Paranoia from attention experience — fractured mirror
modifier_mist_sickness.dds DDS (ARGB 32bpp) 60x60 Province: mist sickness outbreak — sick figure in fog
modifier_ashfall_crisis.dds DDS (ARGB 32bpp) 60x60 Province: severe ashfall — buried buildings
modifier_metal_shortage.dds DDS (ARGB 32bpp) 60x60 Metal supply disrupted — empty scales
modifier_skaa_loyalty.dds DDS (ARGB 32bpp) 60x60 Skaa population supportive — clasped hands
modifier_skaa_resentment.dds DDS (ARGB 32bpp) 60x60 Skaa population hostile — clenched fist
modifier_double_agent.dds DDS (ARGB 32bpp) 60x60 Running a turned spy — two-faced mask
modifier_artifact_corruption.dds DDS (ARGB 32bpp) 60x60 Ruin-tainted artifact — cracked relic with red glow

Count: 21 icons


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 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_weak.dds DDS (ARGB 32bpp) 120x120 Dim/faded metal glow
trait_allomantic_strong.dds DDS (ARGB 32bpp) 120x120 Bright metal glow
trait_allomantic_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 12 from M7a and 21 from M7c — see M7 sections above.)

Count: ~20 base + 12 from M7a + 21 from M7c = ~53 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: <filename_without_extension> = { priority = <int> }. 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 (98+ optional) 0 (121+) Province modifier icons, CB icons, scheme icons, lifestyle assets (~45+), activity assets (~16+), event backgrounds (16)
M5 0 0 (121+) DNA strings only
M6 0 (1 optional) 0 (122+) 1 modifier icon
M7 0 (36 optional) 0 (158+) 33 modifier icons (12 existing + 21 flavor events), 3 decision illustrations
M8 ~230+ ~230+ 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, ~53 icons)

Visible in tooltips and character modifiers. Important but can survive as placeholders longer.

Priority 6 — Event backgrounds (M4f, 16 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/                # ~53 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/             # 16 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)