feat(ecology): natural nodes are physical for movement (#255) #257
No reviewers
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!257
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/ecology-nodes-physical"
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?
Summary
The movement half of #255 (epic #250 / ecology): natural nodes are now physical. A
BlocksWalknode — a mature tree, a rock outcrop — is impassable to players and creatures on the authoritative server; a walkable-stage node (an uprooted pine, a depleted rock) stays passable.NaturalNodeRegistry.BlocksWalkAt(cell)— does a node block walk at this cell right now (from its current stage).MovementSystem.ApplyPendingandCreatureSystem.Stepgain aNaturalNodeRegistryand reject a step onto a blocked cell, alongside the map's own walkability + mobile occupancy;World.Tickpasses_nodesto both (World.csstays delegation-only).IllegalMovesRejected(a modified-client tell, like an obstacle) — a modified client can't walk through a tree.Closes the walk-through-trees desync flagged before F5. Two remainders, tracked (not blocking):
HasLineOfSightlives inShared/TileMapRulesand can't see the GameServer node registry; a follow-up.ResolveStart/Teleport) isn't node-checked, so a scripted spawn could visually overlap a tree — not a correctness bug (BlocksWalkAtonly gates a move's target, never the actor's own cell). Noted on #255.How it was tested
World(WorldNodeCollisionTests): a player and a creature each cannot step onto aBlocksWalk(mature) node, and each can step onto a walkable-stage node. (The tests use terminal stages so a node's block state doesn't drift with the wall clock — a non-terminal stage planted at the epoch would grow to a blocking stage by now; documented in the test.)check-doc-refsresolves; fulldotnet testgreen (GameServer.Tests 344).Screenshots: N/A — server-side movement, no visible surface (nodes render in F5).
Checklist
just lint(0 warnings) · [x]just testgreen (whole solution) · [x] whole buildcheck-doc-refsgreen · [x] server-authoritative (blocked move = IllegalRejected)World.csdelegation-only; single-threaded, no lock