feat: base-Z per terreno (terra Z1, spiagge/oceano Z0) — modello additivo #238
Labels
No labels
alpha:wave-0
alpha:wave-1
alpha:wave-2
alpha:wave-3
area:assets
area:combat
area:ecology
area:infra
area:render
area:scripting
area:ui
area:world
enhancement
epic
migration
post-alpha
roadmap
tech-debt
type:bug
type:chore
type:design
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
marco/IsoMmo#238
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Base-Z per tipo di terreno, così la terra sta sopra il livello del mare e le coste prendono un gradino. Segue terreno-Z (#224); il mondo è asterra (#229).
Modello (concordato: additivo)
GroundZAt(cella) = terreno(cella).BaseZ + relief(cella)— il Z per-cella esistente diventa relief (altezza sopra la base del terreno), non più assoluto.beach_*) e oceano/liquidi BaseZ 0.BaseZè un campo diTerrainDefdatiledata.txt(colonna opzionale in coda, default 0), comeMoveCost.Effetto su asterra (misurato)
asterra ha relief reale in 64 chunk (fino a Z48). Con l'additivo, senza re-bake:
beach_*(base 0).GroundZAtinvariato → test Z verdi. Nessun cambio storage/formato, nessun bumpProtocolVersion.Invariants Check
Scope ✓ (lavoro mappa/terreno, #224/#229) · Server-authoritative ✓ (Z autorevole via
CanStep/GroundZAt; il client lo deriva dalla stessa mappa+tiledata, non dal wire) · GM/Identity N/A · Protocol versioned ✓ nessun cambio wire → nessun bump · String catalog N/A · Single-thread/World.cs gate N/A · Screen gate ✓ (rendering Z già nei renderer) · Client engine-independence ✓ (BaseZ/GroundZAtin Shared) · Gameplay/Networking sep ✓ · Act-on-instance N/A · Extend-by-type ✓ (BaseZcampo dato suTerrainDef, non switch) · Typed content-def ✓ (intero, comeMoveCost) · Server-paced N/A · Persistence ✓ (contenuto autorato, nonworld.sav; no I/O nel tick) · Process sep ✓ · Typed options N/A · Broadcasts/AoI N/A · Multi-platform ✓ (.NET puro) · Assets ✓ (spiagge già esistono) · Asset naming N/A · ModernUO: UO salva Z assoluto per-cella; noi divergiamo (base per-terreno + relief) perché a 133M una griglia Z densa è la bloat che #229 evita — l'additivo riusa il relief esistente senza densificare · Docs & DoD ✓.Validazione server-side
Il passo resta gattato da
CanStep(from,into,MaxStepZ)sulGroundZAtautorevole; il client deriva lo stesso Z, non lo impone. Confine invariato da 7a. Terra uniforme Z1 → passi intra-terra ΔZ0; costa terra↔spiaggia ΔZ1 ≤ MaxStepZ2 → nessuno bloccato.Verification plan
GroundZAt = BaseZ + relief(terra base 1, oceano 0; montagna relief preservata) in TileMap + parità CompactWorldMap;CanStepcosta ΔZ1 ok; test Z esistenti restano verdi.dotnet testverde.Piano (2 fette, riviste separatamente)
TerrainDef.BaseZ+tiledata+GroundZAt = BaseZ + relief(TileMap/CompactWorldMap). asterra si aggiorna da sola in-game. Nessun cambio storage.Definition of Done (fetta 1, delta)
TerrainDef.BaseZletto datiledata(colonna opzionale, default 0); terra=1, spiagge/oceano=0.GroundZAt = BaseZ + reliefinTileMapeCompactWorldMap, con test di parità.ProtocolVersion; i test Z esistenti restano verdi.dotnet testverde.docs/world-map-format.md+ doc tiledata + sezione Z diarchitecture.mdaggiornati.Decisioni prese: grammatica tiledata = colonna posizionale
[moveCost] [baseZ]; overlay Z editor (fetta 2) = ombreggiatura altezza + numero sotto il cursore.Marco aiutami invece di farti le unghie a tema pokemon 💅
Risolta: base-Z del terreno (modello additivo) su main (#241).