feat(age-of-dwarves): ✨ simplify demo 2a to focus on clan personalities
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
701bba5df9
commit
bf31a99c37
6 changed files with 72 additions and 63 deletions
|
|
@ -6,7 +6,7 @@ Fantasy 4X turn-based strategy game (Civ5 + Master of Magic + Magic: The Gatheri
|
|||
|
||||
## Scope
|
||||
|
||||
**Early access demo** ("Age of Dwarves") — 4 races (High Elf, Human, Dwarf, Orc), all 5 magic schools, full 4X + magic loop. See `.project/ROADMAP.md` for scope and build sequence.
|
||||
**Early access demo** ("Age of Dwarves", demo 2a) — **single race (Dwarf), NO magic, mundane tech paths only**. Full 4X loop with dwarf-vs-dwarf matchups driven by clan personalities (Ironhold/Goldvein/Blackhammer/Deepforge/Runesmith). See `.project/ROADMAP.md` line 7 — magic/spells/Archons/Ascension/additional races are scoped to demo 2b (future expansion).
|
||||
|
||||
## Tech Stack
|
||||
|
||||
|
|
|
|||
|
|
@ -1,42 +0,0 @@
|
|||
[
|
||||
{
|
||||
"id": "tree_of_life",
|
||||
"name": "Tree of Life",
|
||||
"description": "A colossal white-barked tree grown from the first seed of creation. Its canopy shelters the kingdom and its roots drink from the ley of life itself, answering drought with bloom and wound with sap.",
|
||||
"placement": "city",
|
||||
"category": "wonder",
|
||||
"school": "life",
|
||||
"cost": 600,
|
||||
"upkeep": 0,
|
||||
"tech_required": "life_magic",
|
||||
"race_required": null,
|
||||
"wonder_type": "school",
|
||||
"wonder_scope": "school_life",
|
||||
"era": 4,
|
||||
"unique": true,
|
||||
"ley_anchor_strength": 6,
|
||||
"ley_anchor_school": "life",
|
||||
"mana_generated": 2,
|
||||
"tier": 6,
|
||||
"effects": [
|
||||
{ "type": "food_all_cities", "value": 4 },
|
||||
{ "type": "happiness_global", "value": 2 },
|
||||
{ "type": "unlock_spell", "value": "verdant_aura" }
|
||||
],
|
||||
"civilization_effects": {
|
||||
"food_all_cities": 4,
|
||||
"happiness_global": 2,
|
||||
"unlock_spell": "verdant_aura"
|
||||
},
|
||||
"sprite": "sprites/buildings/wonders/tree_of_life.png",
|
||||
"flavor": "Where its shadow falls, winter forgets the name of cold.",
|
||||
"quote": "We did not plant it. We merely recognised it, and stopped cutting.",
|
||||
"flags": ["wonder", "school_wonder"],
|
||||
"encyclopedia": {
|
||||
"category": "magic",
|
||||
"entry_type": "wonder",
|
||||
"detail_route": "/buildings/wonders",
|
||||
"tags": ["school", "life"]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
@ -9,18 +9,64 @@
|
|||
"cost": 75,
|
||||
"requires": ["scholarship"],
|
||||
"unlocks_school": "life",
|
||||
"unlocks": {
|
||||
"buildings": ["tree_of_life"],
|
||||
"units": [],
|
||||
"improvements": [],
|
||||
"other": ["school:life"]
|
||||
},
|
||||
"unlocks": { "buildings": ["tree_of_life"], "units": [], "improvements": [], "other": ["school:life"] },
|
||||
"flavor": "Every living thing already knows this magic. We are only late to admit it.",
|
||||
"encyclopedia": {
|
||||
"category": "magic",
|
||||
"entry_type": "tech",
|
||||
"detail_route": "/research/tech-tree",
|
||||
"tags": ["scholarship", "magic", "life"]
|
||||
}
|
||||
"encyclopedia": { "category": "magic", "entry_type": "tech", "detail_route": "/research/tech-tree", "tags": ["scholarship", "magic", "life"] }
|
||||
},
|
||||
{
|
||||
"id": "death_magic",
|
||||
"name": "Death Magic",
|
||||
"description": "The disciplined study of endings — of stilled breath, quiet marrow, and the weight carried by ancestors. Unlocks the Death school and its rites.",
|
||||
"pillar": "scholarship",
|
||||
"era": 3,
|
||||
"tier": 3,
|
||||
"cost": 75,
|
||||
"requires": ["scholarship"],
|
||||
"unlocks_school": "death",
|
||||
"unlocks": { "buildings": [], "units": [], "improvements": [], "other": ["school:death"] },
|
||||
"flavor": "The dead do not answer. We study their silence until it instructs us.",
|
||||
"encyclopedia": { "category": "magic", "entry_type": "tech", "detail_route": "/research/tech-tree", "tags": ["scholarship", "magic", "death"] }
|
||||
},
|
||||
{
|
||||
"id": "chaos_magic",
|
||||
"name": "Chaos Magic",
|
||||
"description": "The first harnessing of storm, flame, and fracture — the magics that resist containment and reward audacity over precision.",
|
||||
"pillar": "scholarship",
|
||||
"era": 3,
|
||||
"tier": 3,
|
||||
"cost": 80,
|
||||
"requires": ["scholarship"],
|
||||
"unlocks_school": "chaos",
|
||||
"unlocks": { "buildings": [], "units": [], "improvements": [], "other": ["school:chaos"] },
|
||||
"flavor": "A spell without risk is only a rumour of power.",
|
||||
"encyclopedia": { "category": "magic", "entry_type": "tech", "detail_route": "/research/tech-tree", "tags": ["scholarship", "magic", "chaos"] }
|
||||
},
|
||||
{
|
||||
"id": "nature_magic",
|
||||
"name": "Nature Magic",
|
||||
"description": "The study of the wilderness' own grammar — herd, bough, season, and stone. Unlocks the Nature school and its druidic arts.",
|
||||
"pillar": "scholarship",
|
||||
"era": 3,
|
||||
"tier": 3,
|
||||
"cost": 70,
|
||||
"requires": ["scholarship", "herbalism"],
|
||||
"unlocks_school": "nature",
|
||||
"unlocks": { "buildings": [], "units": [], "improvements": [], "other": ["school:nature"] },
|
||||
"flavor": "The forest does not negotiate. It teaches those patient enough to listen.",
|
||||
"encyclopedia": { "category": "magic", "entry_type": "tech", "detail_route": "/research/tech-tree", "tags": ["scholarship", "magic", "nature"] }
|
||||
},
|
||||
{
|
||||
"id": "aether_magic",
|
||||
"name": "Aether Magic",
|
||||
"description": "The first manipulation of pure thought, distance, and time — magics of perception, displacement, and the weave behind the world.",
|
||||
"pillar": "scholarship",
|
||||
"era": 3,
|
||||
"tier": 3,
|
||||
"cost": 85,
|
||||
"requires": ["scholarship", "mathematics"],
|
||||
"unlocks_school": "aether",
|
||||
"unlocks": { "buildings": [], "units": [], "improvements": [], "other": ["school:aether"] },
|
||||
"flavor": "To move the mind is to move the world. Only slower.",
|
||||
"encyclopedia": { "category": "magic", "entry_type": "tech", "detail_route": "/research/tech-tree", "tags": ["scholarship", "magic", "aether"] }
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -283,12 +283,18 @@ func _refresh_queue(game_map: RefCounted) -> void:
|
|||
_rush_button.text = "Rush (%dg)" % rush_gold
|
||||
_rush_button.visible = true
|
||||
|
||||
var cumulative_remaining: int = remaining
|
||||
for i: int in range(1, queue.size()):
|
||||
var entry: Dictionary = queue[i]
|
||||
var eid: String = entry.get("id", "")
|
||||
var ecost: int = entry.get("cost", 0)
|
||||
cumulative_remaining += ecost
|
||||
var turn_suffix: String = ""
|
||||
if prod_per_turn > 0:
|
||||
var eta: int = ceili(float(cumulative_remaining) / float(prod_per_turn))
|
||||
turn_suffix = " [%d turns]" % maxi(eta, 1)
|
||||
_queue_list.add_item(
|
||||
"%d. %s (%d)" % [i + 1, ThemeVocabulary.lookup(eid), ecost]
|
||||
"%d. %s (%d)%s" % [i + 1, ThemeVocabulary.lookup(eid), ecost, turn_suffix]
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -20,4 +20,4 @@ static func assign(player: RefCounted, rng: RandomNumberGenerator) -> void:
|
|||
if axes.is_empty():
|
||||
return
|
||||
player.strategic_axes = axes.duplicate()
|
||||
print("Player %s personality: %s" % [player.player_name, pick.get("name", "")])
|
||||
print("%s personality: %s" % [player.player_name, pick.get("name", "")])
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
//! Magic subsystem — unused in Game 1 ("Age of Dwarves").
|
||||
//! Magic subsystem — unused in Age of Dwarves (demo 2a).
|
||||
//!
|
||||
//! Age of Dwarves (Early Access / Game 1) ships with NO magic: no spells,
|
||||
//! no Archons, no Ascension. Magic is scoped to Game 2 ("Age of Kzzykt").
|
||||
//! This crate is intentionally empty until that release; workspace
|
||||
//! membership is retained so the Cargo.toml manifest list stays stable
|
||||
//! across the Game 1 → Game 2 transition.
|
||||
//! Age of Dwarves ships with NO magic: no spells, no Archons, no Ascension.
|
||||
//! Magic is scoped to demo 2b (ROADMAP.md:27). This crate is intentionally
|
||||
//! empty until that expansion; workspace membership is retained so the
|
||||
//! Cargo.toml manifest list stays stable across the 2a → 2b transition.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue