Collision System
Hyperscape implements a unified collision system for OSRS-accurate tile blocking. The system handles static objects (trees, rocks, stations), entities (players, NPCs), and terrain (water, slopes) using efficient zone-based storage.Architecture
CollisionMatrix
The core collision storage uses zone-based chunking for optimal memory and cache performance:- World divided into 8×8 tile zones
- Each zone =
Int32Array[64]= 256 bytes - Lazy allocation (zones created on first write)
- 1000×1000 tile world = ~4MB memory
- O(1) tile lookups via array indexing
- Zero allocations in hot paths
- Bitwise operations for flag queries
- Delta-based entity moves (only update changed tiles)
Collision Flags
Tiles use bitmask flags for efficient collision queries:Individual Flags
Combined Masks
Usage Examples
Basic Collision Checks
Adding/Removing Collision
Multi-Tile Footprints
Stations and large resources can occupy multiple tiles:Footprints are centered on the entity position, not corner-based. This ensures consistent interaction from all sides.
Interaction Range Checks
Players can interact with multi-tile objects from any adjacent tile:Entity Occupancy
TheEntityOccupancyMap tracks entity positions and delegates to CollisionMatrix:
Pathfinding Integration
The pathfinding system checks collision when finding paths:Pathfinding uses
BLOCKS_WALK mask (excludes OCCUPIED flags) so entities can path through other entities. Collision is checked at movement execution time.Network Synchronization
Collision data is synchronized from server to client using zone serialization:- Zone data =
Int32Array[64]= 256 bytes - Base64 encoded for network transport (~344 chars)
- Only allocated zones are sent (sparse data)
Automatic Footprint Detection
Station and resource footprints are automatically calculated from 3D model bounds:Build-Time Extraction
- Scans
world/assets/models/**/*.glbfiles - Parses glTF position accessor min/max values
- Calculates bounding boxes at scale 1.0
- Writes to
world/assets/manifests/model-bounds.json
Runtime Calculation
StationDataProvider combines model bounds with modelScale from stations.json:
- No manual footprint configuration
- Footprints stay in sync with 3D models
- Turbo caching avoids rebuilding when models unchanged
- Override available via
footprintfield instations.json
OSRS Accuracy
Depleted Resources
Resources remain solid even when depleted (OSRS behavior):Safespotting
Players can use trees and rocks as obstacles to avoid melee combat:Multi-Tile Interaction
Players can interact with multi-tile objects from any adjacent tile:Performance Characteristics
Memory Footprint
Hot Path Performance
API Reference
CollisionMatrix
EntityOccupancyMap
Utility Functions
Implementation Details
Zone Coordinate Calculation
Negative coordinates are handled correctly using
Math.floor for zone calculation and corrected modulo for tile index.Atomic Entity Moves
Entity moves update collision atomically with delta optimization:Testing
The collision system includes comprehensive unit tests:- Zone allocation and storage
- Flag operations (add, remove, query)
- Negative coordinate handling
- Directional wall blocking
- Diagonal movement clipping
- Network serialization
- Multi-tile footprints
Related Documentation
Tile Movement
Tile-based movement, pathfinding, and distance calculations.
Manifests
Model bounds extraction and station configuration.
Combat System
Combat range checks and line of sight.
NPC AI
Mob pathfinding and aggro behavior.