AoI: line-of-sight filter (don't stream entities through walls) #150
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#150
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?
Discovered by the PvP-arena design review (#109). The server streams every entity within the AoI Chebyshev radius (
PlayersWithin(pos, radius)/InterestManager/InterestDiff) regardless of walls — it filters on distance, not line of sight. So a modified client sees enemy positions through walls and cover, defeating any cover/LoS play (the arena's whole point) and breaking the server-authoritative fairness pillar.Fix
Add a line-of-sight filter to AoI membership: an observer is only sent an entity it has
TileMap.HasLineOfSightto (in addition to being in range). Entering/leaving LoS reconciles like entering/leaving range (spawn/remove). Compatible with the 'broadcasts carry absolute positions' invariant — this is a membership change, not a delta change.Notes
say(AoI-scoped chat): decide whether chat still carries through walls (probably yes — you hear a shout you don't see). Scope this issue to visual entity reconciliation.Definition of Done
Base DoD applies.
Closing — won't do (wrong feature). Hiding entities out of line-of-sight is:
vision.mdexplicitly defers ('friends-scale; no anti-abuse machinery until publicly exposed').Decision: AoI stays = Chebyshev radius (UO-style visibility); cover is enforced by server-side attack-LoS. Revisit only if the game goes public or gains large room maps. Arena design doc corrected to drop this dependency.