From 78c207a855949d7e71e7a18f42d1b1b8dfa12d0d Mon Sep 17 00:00:00 2001 From: Natalie Date: Sat, 18 Apr 2026 02:32:34 -0700 Subject: [PATCH] =?UTF-8?q?feat(@projects/@magic-civilization):=20?= =?UTF-8?q?=E2=9C=A8=20update=20succession=20crisis=20descriptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../age-of-dwarves/data/shipping-roadmap.json | 4 +- .../guide/src/pages/HomePage.tsx | 44 +++++-------------- .../worlds/khazad_prime/climate_spec.json | 8 ++-- 3 files changed, 18 insertions(+), 38 deletions(-) diff --git a/public/games/age-of-dwarves/data/shipping-roadmap.json b/public/games/age-of-dwarves/data/shipping-roadmap.json index 24d0a7dc..36dc3edc 100644 --- a/public/games/age-of-dwarves/data/shipping-roadmap.json +++ b/public/games/age-of-dwarves/data/shipping-roadmap.json @@ -37,8 +37,8 @@ }, { "priority": 4, - "system": "Archon loss + mundane rebirth", - "description": "High Archon death triggers succession crisis or permanent magic lock" + "system": "Succession + dynasty crisis", + "description": "Leader-death events trigger succession crises or permanent tech/government regressions." } ], "after_full_release": [ diff --git a/public/games/age-of-dwarves/guide/src/pages/HomePage.tsx b/public/games/age-of-dwarves/guide/src/pages/HomePage.tsx index 221b1ef3..2c937dd1 100644 --- a/public/games/age-of-dwarves/guide/src/pages/HomePage.tsx +++ b/public/games/age-of-dwarves/guide/src/pages/HomePage.tsx @@ -1,8 +1,17 @@ import type { ReactElement } from 'react' import { Link } from 'react-router-dom' import styled from 'styled-components' -import { FadeIn, EpisodeGate } from '@magic-civ/guide-engine' +import { FadeIn, EpisodeGate, useEpisode } from '@magic-civ/guide-engine' import { usePreferences } from '@/contexts/PreferencesContext' +import featuresData from '@data/homepage-features.json' + +interface HomepageFeature { + title: string + desc: string + min_episode: number +} + +const FEATURES: readonly HomepageFeature[] = (featuresData as { features: HomepageFeature[] }).features // ─── Layout ────────────────────────────────────────────────────────────────── @@ -180,37 +189,6 @@ const CardIcon = styled.span` // ─── Data ──────────────────────────────────────────────────────────────────── -const FEATURES = [ - { - title: 'Interconnected Tech Web', - desc: '6 pillars of knowledge — Engineering, Science, Construction, Agriculture, Culture, Economy — with 15 cross-pillar intersections. Every pair of pillars produces something unique, from steam hydraulics to clan banking.', - }, - { - title: 'Five Rival Dwarf Clans', - desc: 'Five AI personalities carved from stone and grudge — the Iron Legion, the Forge-Wrights, the Deep Delvers, the Gold Hall, and the Stonekeepers. Each pursues a different path to dominion of the mountain.', - }, - { - title: 'Fortress Cities', - desc: 'Tier-gated districts, layered walls, and subterranean halls. Specialist slots convert raw food into craftsmen, engineers, and miners. No sprawl — depth.', - }, - { - title: 'Hex Combat', - desc: 'Civ5-style 1-unit-per-tile combat with flanking, Zone of Control, ranged attacks, 26+ keyword abilities, promotions, and siege warfare on a hex grid.', - }, - { - title: 'Industry & Steam', - desc: 'Mundane mastery, start to finish. Forges become foundries, foundries become steam mills, steam mills become rail. Out-produce your rivals or be buried under their production queues.', - }, - { - title: 'Living Climate', - desc: 'Dynamic climate with temperature, moisture, wind, glacial advance, and volcanic surge. The world you settle today is not the world you defend tomorrow.', - }, - { - title: 'Playable World Poles', - desc: 'Cross the north or south pole and emerge on the other side of the globe, shifted 180° in longitude. No artificial map walls — real spherical topology on a hex grid.', - }, -] - // Game 1 scope: no /magic/* routes exist in App.tsx. The Magic Schools / // Spells / Archons pages were purged during p2-09's scope-narrow pass. // Those entries were previously here and redirected to `/` via the wildcard @@ -233,6 +211,8 @@ const SECTIONS = [ export default function HomePage(): ReactElement { const { race, name } = usePreferences() + const activeEpisode = useEpisode() + const visibleFeatures = FEATURES.filter((f) => f.min_episode <= activeEpisode) return ( diff --git a/public/resources/worlds/khazad_prime/climate_spec.json b/public/resources/worlds/khazad_prime/climate_spec.json index 0210a2cd..b9e7e880 100644 --- a/public/resources/worlds/khazad_prime/climate_spec.json +++ b/public/resources/worlds/khazad_prime/climate_spec.json @@ -4,8 +4,8 @@ "thresholds": { "storm_moisture_min": 0.70, "storm_temperature_max": 0.70, - "storm_trigger_chance": 0.03, - "storm_radius": 3, + "storm_trigger_chance": 0.02, + "storm_radius": 2, "storm_moisture_delta": 0.04, "storm_movement_penalty": 0.3, "heat_wave_temperature_min": 0.75, @@ -17,8 +17,8 @@ "heat_wave_unit_damage": 1, "blizzard_temperature_max": 0.20, "blizzard_moisture_min": 0.40, - "blizzard_trigger_chance": 0.03, - "blizzard_radius": 3, + "blizzard_trigger_chance": 0.02, + "blizzard_radius": 2, "blizzard_temperature_delta": -0.03, "blizzard_movement_penalty": 0.5, "blizzard_unit_damage": 1