P1 hardcoded the tech ids ("shipbuilding"/"ocean_navigation") in Rust — a Rail-2
violation (JSON is the canonical content store) and not single-source. Per owner
direction ("should be a player-level config setting"), the embark grant now lives
in data and is cached per player:
- mc_core::EmbarkLevel moves to the shared base crate (was mc-pathfinding) so
PlayerState can hold it; mc-pathfinding re-exports it. Adds from_mechanic_key
(the ONLY place the embark_* mechanic-key strings live).
- The naval techs carry the grant in JSON via unlocks.mechanics: shipbuilding →
embark_coast, ocean_navigation → embark_ocean. Which tech grants embark is now
authored data, not Rust.
- TechWeb::embark_level(researched) derives the strongest grant across a player's
researched techs (None < Coast < Ocean).
- PlayerState gains a cached embark_level field; process_science recomputes it
each turn from the researched set (idempotent → save-load / tech injection
covered). The move handler reads the cache (no per-move tech parsing).
Tests: mc-core EmbarkLevel ordering + mapping; mc-tech embark_level method
(inline web) + a real-data guard that authored naval.json carries the mechanics;
mc-pathfinding 9/9 unchanged. All green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| ai | ||
| audio | ||
| biomes | ||
| buildings | ||
| c | ||
| civics | ||
| combat | ||
| culture | ||
| deposits | ||
| diplomacy | ||
| ecology | ||
| economy | ||
| encyclopedia | ||
| eras | ||
| events | ||
| games/age-of-kzzkyt/guide | ||
| governments | ||
| great_works | ||
| guide | ||
| harvest_policies | ||
| improvements | ||
| items | ||
| lairs/loot | ||
| lenses | ||
| magic | ||
| map_types | ||
| observation | ||
| promotions | ||
| races | ||
| recipes | ||
| simulations | ||
| specialists | ||
| start_scripts | ||
| techs | ||
| throne_rooms | ||
| tiles | ||
| typed-resources | ||
| unit_actions | ||
| units | ||
| villages | ||
| wilds | ||
| worlds | ||
| base.schema.json | ||
| episodes.json | ||
| resources.json | ||