feat(@projects/@magic-civilization): update runesmith specialist slots and building renames

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Natalie 2026-05-03 18:22:49 -04:00
parent 823ed7857d
commit 1b44fb3077
13 changed files with 34 additions and 28 deletions

View file

@ -48,6 +48,6 @@
},
"stack_mode": "amplify",
"specialist_slots": [
"loremaster_scholar"
"runescribe"
]
}

View file

@ -42,6 +42,6 @@
]
},
"specialist_slots": [
"loremaster_scholar"
"runescribe"
]
}

View file

@ -31,7 +31,7 @@
}
],
"requires_buildings_all_cities": [
"choral_hall"
"forge_chant_hall"
],
"sprite": "sprites/buildings/deep_atelier.png",
"stack_mode": "single",

View file

@ -1,6 +1,6 @@
{
"id": "choral_hall",
"name": "Choral Hall",
"id": "forge_chant_hall",
"name": "Forge-Chant Hall",
"description": "A vaulted chamber tuned for voice and drum — dwarven choirs rehearse the funeral chants and forge-songs that the holds carry forward through generations.",
"placement": "city",
"category": "culture",
@ -30,7 +30,7 @@
"value": 1
}
],
"requires_existing": "amphitheater",
"requires_existing": "saga_arena",
"consumes_existing": false,
"sprite": "sprites/buildings/choral_hall.png",
"stack_mode": "amplify",
@ -44,6 +44,6 @@
]
},
"specialist_slots": [
"choral_voice"
"forge_chanter"
]
}

View file

@ -1,6 +1,6 @@
{
"id": "grand_exposition",
"name": "Grand Exposition",
"id": "grand_clanmoot",
"name": "Grand Clanmoot",
"description": "Once per generation, every clan sends its finest works, weapons, and savants to the Mountain-Throne for a year-long exhibition that reshapes the realm's priorities.",
"placement": "city",
"category": "culture",

View file

@ -30,7 +30,7 @@
"value": 1
}
],
"requires_existing": "choral_hall",
"requires_existing": "forge_chant_hall",
"consumes_existing": false,
"sprite": "sprites/buildings/rune_museum.png",
"stack_mode": "amplify",

View file

@ -1,6 +1,6 @@
{
"id": "amphitheater",
"name": "Amphitheater",
"id": "saga_arena",
"name": "Saga Arena",
"description": "An echoing stone arena where bards recite clan sagas and history is etched into the rock walls. The first place a clan's stories outlive their tellers.",
"placement": "city",
"category": "culture",

View file

@ -31,7 +31,7 @@
}
],
"requires_buildings_all_cities": [
"amphitheater"
"saga_arena"
],
"sprite": "sprites/buildings/saga_chronicle.png",
"stack_mode": "single",

View file

@ -1,6 +1,6 @@
{
"id": "high_academy",
"name": "High Academy",
"id": "stonelore_academy",
"name": "Stonelore Academy",
"description": "The Mountain-Throne's central school of philosophy, mathematics, and runesmithing. Convened only when every hold has a library to send its brightest from.",
"placement": "city",
"category": "research",
@ -42,6 +42,6 @@
]
},
"specialist_slots": [
"loremaster_scholar"
"runescribe"
]
}

View file

@ -44,6 +44,6 @@
"requires_existing": "scriptorium",
"consumes_existing": false,
"specialist_slots": [
"loremaster_scholar"
"runescribe"
]
}

View file

@ -1,6 +1,6 @@
{
"id": "royal_treasury",
"name": "Royal Treasury",
"id": "vault_of_seals",
"name": "Vault of Seals",
"description": "Vault of the High Throne, fed by tithes from every market in the realm. To raise it, every hold must have a marketplace pumping its share into the coffer.",
"placement": "city",
"category": "economy",

View file

@ -16,7 +16,7 @@
}
],
"employed_in": [
"amphitheater",
"saga_arena",
"saga_chronicle"
],
"population_cost": 1,
@ -32,8 +32,8 @@
}
},
{
"id": "choral_voice",
"name": "Choral Voice",
"id": "forge_chanter",
"name": "Forge-Chanter",
"description": "Trained in the deep-throat singing and forge-rhythm of dwarven tradition. Performs at clan gatherings and funerals.",
"flavor": "We sing while we work. We work while we sing. The two have always been the same.",
"gpp_type": "music",
@ -48,7 +48,7 @@
}
],
"employed_in": [
"choral_hall"
"forge_chant_hall"
],
"population_cost": 1,
"encyclopedia": {
@ -129,8 +129,8 @@
}
},
{
"id": "loremaster_scholar",
"name": "Loremaster Scholar",
"id": "runescribe",
"name": "Runescribe",
"description": "An academic in the deep-archive tradition. Writes treatises, copies manuscripts, and tutors the next generation.",
"flavor": "We do not invent. We discover what was already true. Then we write it down.",
"gpp_type": "scholarship",
@ -147,7 +147,7 @@
"employed_in": [
"library",
"university",
"high_academy",
"stonelore_academy",
"council_of_runesmiths",
"archive_of_runes"
],
@ -182,7 +182,7 @@
"employed_in": [
"market",
"marketplace",
"royal_treasury",
"vault_of_seals",
"guild_hall",
"high_guild_hall"
],

View file

@ -262,7 +262,13 @@ func test_catchup_research_mult_active_when_two_eras_behind() -> void:
func test_player_tier_peak_returns_max_era() -> void:
## _player_tier_peak finds the highest era across researched_techs.
var p: PlayerScript = _make_player(0)
p.researched_techs = ["agriculture", "naval"] # era 1, era 2
var arr: Array[String] = ["agriculture", "naval"]
p.researched_techs = arr # era 1, era 2
# Diagnostic: confirm DataLoader can resolve these tech ids.
var ag: Dictionary = DataLoader.get_tech("agriculture")
var nv: Dictionary = DataLoader.get_tech("naval")
print("DBG agriculture=", ag, " naval=", nv)
print("DBG p.researched_techs=", p.researched_techs)
assert_eq(
TurnProcessorScript._player_tier_peak(p), 2,
"tier_peak must equal max era of researched_techs"