Nothing puts anything in an instance, and nothing takes one down #68

Open
opened 2026-07-30 21:03:33 +00:00 by sickday · 0 comments
Owner

Instances are addressable, walkable and renderable. Nothing puts anything in
one, and there is no policy for taking one down.

Built and working: allocation from a band of unused map, a chunk map that
collision derives its floor from, Collision.view/1 resolving by position, and
the dynamic rebuild (opcode 44) that tells the client to draw the copy from
the source square. A player teleported into one walks around in it correctly.

Missing, and all of it content decisions rather than engine gaps:

  • no spawn-into-instance helper. NPCs and ground items inside an instance
    work automatically because they are coordinates, but nothing places them
    there — an instanced boss room needs its boss put in it.
  • no collapse policy. release/1 exists and nothing calls it. Whatever
    calls it has to get players out first: a banded tile with no instance is
    void, so a player left in a collapsed one is standing in nothing.
  • one map square per instance, fixed, at a slot derived from the id by
    arithmetic. That is what makes "which instance is this tile in" a division
    rather than a search, which matters because route-finding asks it. A boss room
    fits; a raid does not. Variable extents want an interval tree.
  • rotation is encodable and derivable but has no producercopy_of/1
    builds unrotated copies, which is what an instance of an existing room is.

One thing worth checking against before the first caller lands: #26 (closed)
names instancing as a thing that might send the player-list reset packet, which
would silently reset every slot's render speed. The instance work does not
send it — it reuses the ordinary scene rebuild — and a future caller should keep
it that way.

Instances are addressable, walkable and renderable. Nothing puts anything in one, and there is no policy for taking one down. Built and working: allocation from a band of unused map, a chunk map that collision derives its floor from, `Collision.view/1` resolving by position, and the dynamic rebuild (opcode `44`) that tells the client to draw the copy from the source square. A player teleported into one walks around in it correctly. Missing, and all of it content decisions rather than engine gaps: * **no spawn-into-instance helper.** NPCs and ground items inside an instance work automatically because they are coordinates, but nothing places them there — an instanced boss room needs its boss put in it. * **no collapse policy.** `release/1` exists and nothing calls it. Whatever calls it has to get players out first: a banded tile with no instance is void, so a player left in a collapsed one is standing in nothing. * **one map square per instance**, fixed, at a slot derived from the id by arithmetic. That is what makes "which instance is this tile in" a division rather than a search, which matters because route-finding asks it. A boss room fits; a raid does not. Variable extents want an interval tree. * **rotation is encodable and derivable but has no producer** — `copy_of/1` builds unrotated copies, which is what an instance of an existing room is. One thing worth checking against before the first caller lands: #26 (closed) names instancing as a thing that might send the player-list reset packet, which would silently reset every slot's render speed. The instance work does **not** send it — it reuses the ordinary scene rebuild — and a future caller should keep it that way.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Revenant/Server#68
No description provided.