Table of Contents

Namespace GrindFest.Generation

Classes

AnchorSlot

A fixed, designer-authored placement slot inside the settlement (throne tent, forge, central fire pit, shrine). Picks one prefab from its Pool at generation time and instantiates it at LocalXZ with RotationDeg.

CityBlueprints

Registry of named medieval-city blueprints. The Ink prefab supplies a blueprint name + seed; MedievalCityGenerator resolves it here and runs the pipeline. Add new factories below as more city types are designed.

MedievalCityGenerator

Procedural church assembly. Split into its own partial because the church is a one-off landmark with its own geometry rules (long-nave silhouette, centre-front bell tower with pointed steeple, embedded crypt dungeon entrance) that don't belong in the generic house/wall code in the main partial.

SILHOUETTE GOAL: small parish chapel with a clearly central main door, a tall front bell tower projecting up through the roof line, and a TRUE pointed conical steeple (from the Synty Castle round roof-cap kit, not a scaled tile cap) on top. Stained-glass strip alternating with plain wall on the side faces. The nave roof is flattened (Y-scaled) so the steeple — not the roof — dominates the silhouette.

MATERIALS: the upper storey uses SyntyPFK's HouseWall_05/06 (white plaster + timber) to stay consistent with the surrounding village, sitting on a STONE foundation course (HouseBaseWall_01 + corners). This matches Synty's own optimized church preset exactly: stone skirt + plaster/timber walls + bell tower.

DIMENSIONS: 5 m wide × 10 m deep nave (2 × 4 modules on the 2.5 m HouseWall grid) so the stock BuildHouseRoof works at NATIVE scale — every Synty roof piece sits exactly where its art was authored, no stretching or hidden gaps. The bell tower sits on the SW front corner (asymmetric, like Synty's preset).

MedievalCitySpec

POCO spec for a rectangular walled medieval city. Consumed by MedievalCityGenerator; produced by CityBlueprints.

Layout: rectangular wall (width × depth), corner towers, evenly-spaced gates on the long edges. Interior is divided by a street network running gate-to-gate; remaining space is BSP-subdivided into plots and filled with modular houses, with reserved anchor slots for landmarks (market, fountain, statue, forge, etc).

MedievalCitySpec.AnchorSlot
MedievalCitySpec.PresetHouse
OrganicSettlementGenerator

Runtime generator for organic palisade-ringed settlements (goblin war camps, bandit hideouts, etc). Mirrors DungeonGenerator's lifecycle: hero enters ProximityGenerationTriggerGenerate() runs once → fires OnGenerated.

Spawns all prefabs as children of this GameObject, grouped under named sub-objects (Palisade / Anchors / Fillers / Decor / Lights). The actual spec is looked up from SettlementBlueprints by name — the Ink prefab just sets BlueprintName + Seed.

OrganicSettlementSpec

POCO describing a single instance of a procedural settlement (camp/village). Built by SettlementBlueprints, consumed by OrganicSettlementGenerator at runtime.

All positions in this spec are LOCAL XZ relative to the generator GameObject — the world placement of the settlement is the generator's transform.position (set by InkWorldGenerator when it instantiates the area prefab).

SettlementBlueprints

Static registry of settlement blueprints. Each blueprint is a method that takes a seed and returns a fully-configured OrganicSettlementSpec.

Code-as-config (consistent with MapMagicGraphBuilder): blueprints are C# methods, not ScriptableObjects. Refactoring is an IDE rename; conditional config is a normal if; git diffs are real code diffs.

Enums

MedievalCitySpec.SlotKind

Dispatch tag for MedievalCitySpec.AnchorSlot. Preset just instantiates PrefabAddress; other kinds invoke procedural builders in MedievalCityGenerator.