These messages carry world state — the initial snapshot that arrives on session entry, movement requests and authoritative confirmations, player and NPC position broadcasts, and ground item lifecycle events. All field names match the keys inDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/TaylorZaneKirk/MMO-Project/llms.txt
Use this file to discover all available pages before exploring further.
protocol-v1.json and the corresponding C# payload records.
world_snapshot S→C
Sent by the server afterenter_world_response and after a successful reconnect_response. Also sent to legacy clients after inventory, equipment, or status mutations. Carries complete authoritative world state for the receiving character’s current map.
The active session UUID.
The character this snapshot is addressed to.
The map this snapshot covers.
The current authoritative character stream revision. Delta clients use this to seed their revision tracking.
The current authoritative map stream revision. Delta clients use this to seed their map revision tracking.
The receiving character’s full local state.
All NPCs currently on the map, each with
npc_id, display_name, texture_path, tile_x, tile_y, facing, and current_state.All ground items currently visible to this character. Items dropped by other players are not included until the private visibility window (
Prototype:DroppedItemPrivateVisibilitySeconds) has elapsed. Each entry has ground_item_id, owner_character_id, map_id, tile_x, tile_y, item_id, item_name, icon_texture_path, and stack_count.Owner-only dropped items that are not yet publicly visible. Present in snapshots sent to delta clients only. Same shape as
ground_items entries. Use the combined ground_items list for rendering; private_ground_items drives the delta stream.Remote players on the same map. Each entry has
character_id, character_name, map_id, tile_x, tile_y, facing, and an equipment.slots array with slot_id, display_name, sort_order, item_id, item_name, and icon_texture_path.movement_intent C→S
Sent by the client to request movement to a target tile. The server treats this as world-tile coordinates and resolves the authoritative path using cardinal A* pathing.The active session UUID.
The UUID of the character requesting movement.
Target world-tile X coordinate. The server resolves the local map/chunk position through the world chunk catalog.
Target world-tile Y coordinate.
movement_applied S→C
Returned by the server after evaluating amovement_intent. Contains the authoritative final position, the movement outcome, and both local-map and world-space coordinates.
The character that moved.
The map the character is now on (may differ from
previous_map_id on a chunk boundary crossing).Updated map stream revision after this movement is committed.
The map the character was on before this movement step.
The character’s authoritative new tile X on
map_id.The character’s authoritative new tile Y on
map_id.The tile X the client originally requested.
The tile Y the client originally requested.
The tile X the server resolved as the destination. Differs from
requested_tile_x on a "partial" result.The tile Y the server resolved as the destination.
The character’s tile X before this movement step.
The character’s tile Y before this movement step.
The character’s new position in world-space tile coordinates.
The character’s new world-space tile Y.
The character’s previous world-space tile X.
The character’s previous world-space tile Y.
The character’s facing direction after the move:
"north", "south", "east", or "west".Authoritative outcome of the movement resolution. One of:
"reached"— the character reached the requested tile"partial"— the target was clamped to world bounds; the character reached the closest valid tile"blocked"— no legal path could be found; the character remains at the previous position"started"— movement toward the target has been queued; furthermovement_appliedmessages will follow as the character steps along the path"stepping"— the character completed one step of a multi-step path; more steps remain
player_state_update S→C
Broadcast to all other players on the same map when a player’s position or state changes. Carriesmap_revision so delta clients can verify stream continuity.
The map this update applies to.
Updated map stream revision.
The player who moved or changed state.
Display name of the player.
New tile X position.
New tile Y position.
Tile X before this update.
Tile Y before this update.
Facing direction after the update.
Current entity state string, e.g.
"idle", "walking".npc_state_update S→C
Broadcast to all players on the map when an NPC’s position or state changes. Same revision semantics asplayer_state_update.
The map this update applies to.
Updated map stream revision.
The NPC whose state changed.
NPC display name.
Asset path for the NPC sprite.
New tile X position.
New tile Y position.
Tile X before this update.
Tile Y before this update.
Facing direction after the update.
Current NPC state string.
ground_item_spawned S→C
Sent to all players on the map when a ground item becomes publicly visible. Carriesmap_revision for delta stream continuity.
The map the item spawned on.
Updated map stream revision.
The spawned ground item. Contains:
ground_item_id, owner_character_id, map_id, tile_x, tile_y, item_id, item_name, icon_texture_path, stack_count.ground_item_removed S→C
Sent to all players on the map when a ground item is picked up or otherwise removed from the world.The map the item was removed from.
Updated map stream revision.
The ID of the removed ground item.
world_resync_request C→S
Sent by delta clients when they detect a gap incharacter_revision or map_revision. The server responds with a fresh world_snapshot.
Names of the streams believed to be stale, e.g.
["inventory"], ["map"], or ["inventory", "map"].The last
character_revision value the client successfully processed.The last
map_revision value the client successfully processed.A human-readable string describing why the resync was triggered, e.g.
"character_revision_gap" or "map_revision_gap".