__/\\\_______________________________________________________________________________________________________
_\/\\\_______________________________________________________________________________________________________
_\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________
_\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_
_\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__
_\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_
_\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_
_\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_
_\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__
Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.
The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.
- Bun: Install from bun.sh
- Node.js: v18+ (for compatibility)
-
Install Dependencies:
bun install
-
Start Full Development Environment (Recommended):
bun run dev:full
This runs both the Bun server with auto-restart and client concurrently.
-
Individual Services:
# Start Bun server with auto-restart (recommended) bun run server # Start legacy Node.js server (fallback) bun run server:legacy # Start only the client bun run dev
-
Production Build:
bun run build bun run preview
- Client: http://localhost:5173 (Vite dev server)
- Server: WebSocket on port 8081 (Bun server)
- Health Check: http://localhost:8081/health
The server now automatically restarts when you save changes to:
src/server/**/*.ts
- Server-side codesrc/shared/**/*.ts
- Shared constants and types
No more manual server restarts during development! ๐
BUN_SERVER_MIGRATION.md
- NEW: Bun server migration details and auto-restart setupSERVER_CHUNK_SYSTEM.md
- Detailed chunk generation system documentationagent-summaries/
- Historical code change documents (performed with agents instead of manual changes)instructions.md
- Project coding standards and conventions
This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.
Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.
Key Features:
- Consistent factory API for all entities
- Server-first networking with automatic synchronization
- Type-safe entity creation with full TypeScript support
- Easy conversion between local and networked entities
Usage:
// Create networked entities
const tree = await WorldObjects.spruceTree.createNetworked(game, { x: 100, y: 200 });
// Create local entities
const preview = WorldObjects.assembler.createLocal(game, { x: 300, y: 400 });
// Convert local to networked
const converted = await WorldObjects.spruceTree.createNetworkedFromLocal(preview, game);
๐ง Entity Trait System
Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.
Key Features:
- Modular trait system (Transform, Container, Network, Placeable, Ghostable)
- Type-safe trait access with static type guards
- Automatic trait synchronization across the network
- Easy trait communication and dependencies
Usage:
// Add traits to entities
entity.addTrait('position', new TransformTrait(entity, game, x, y, 'global'));
entity.addTrait('container', new ContainerTrait(entity, transformTrait));
// Access traits safely
if (TransformTrait.is(entity)) {
const position = entity.getTrait('position').position.position;
}
Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.
Key Features:
- Server-first architecture with authoritative game state
- Automatic trait synchronization with configurable frequency
- Promise-based async requests with timeout handling
- Real-time WebSocket communication with message routing
Usage:
// Async entity creation with server validation
const entity = await WorldObjects.spruceTree.createNetworked(game, { x, y });
// Automatic trait synchronization
entity.getTrait('position').setPosition(newX, newY);
// โ Automatically syncs to server and other clients
Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.
Key Features:
- Infinite procedural world generation using Perlin noise
- Dynamic chunk loading/unloading based on player proximity
- Entity-chunk decoupling for simplified management
- Biome system with different terrain types and spawning rules
Usage:
// Automatic chunk loading around player
worldManager.setPlayerPosition(playerX, playerY);
// Entities positioned independently of chunks
const entity = WorldObjects.spruceTree.createLocal(game, { x: 1500, y: 800 });
// โ Automatically positioned correctly regardless of chunk boundaries
Each documentation file includes:
- Architecture Overview: High-level system design and concepts
- Implementation Details: Code examples and API references
- Usage Patterns: Common use cases and best practices
- Integration Guide: How systems work together
- Performance Considerations: Optimization tips and patterns
- Error Handling: Common issues and solutions
- New to the codebase? Start with Entity Factory System for entity creation
- Want to understand entities? Read Entity Trait System for composition patterns
- Building multiplayer features? Check Multiplayer Networking for sync patterns
- Working on world generation? See World and Chunk System for terrain systems
When adding new systems or modifying existing ones, please:
- Update the relevant documentation files
- Include code examples in your documentation
- Follow the established architectural patterns
- Add your system to this README's documentation index
src/App.tsx
- Main React application entry pointsrc/main.tsx
- Vite application bootstrappackage.json
- Dependencies and build scripts
src/server/bunServer.ts
- Bun-native multiplayer server with WebSocket handlingsrc/server/chunkdb.ts
- In-memory chunk database systemsrc/server/chunkGenerator.ts
- Server-side chunk generation with Perlin noisesrc/server/types.ts
- Server-specific type definitions
src/systems/chunkManager/
- Client-side chunk loading and managementsrc/utilities/multiplayer/manager.ts
- Multiplayer client coordinationsrc/utilities/game/game.ts
- Core game state managementsrc/utilities/player/index.ts
- Player entity and controls
src/entities/base.ts
- Base entity classsrc/entities/interfaces.ts
- Entity system interfacessrc/entities/traits/
- Reusable entity behaviors (container, placeable, rotatable)src/entities/assembler/
- Factory building entity implementation
src/components/pixi/index.tsx
- PIXI.js React context providersrc/components/hotbar/
- Player inventory hotbar UIsrc/components/infographic/
- Debug/info display component
src/utilities/eventEmitter/
- Custom event systemsrc/utilities/logger/
- Centralized logging systemsrc/workers/
- Web worker pool for background processing
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CLIENT ARCHITECTURE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ React App โ โ PIXI.js โ โ Multiplayer Client โ โ
โ โ โโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Hotbar โ โ โ โ Renderer โ โ โ โ WebSocket Client โ โ โ
โ โ โ Component โ โโโโโบโ โ โ โโโโโบโ โ โ โ โ
โ โ โโโโโโโโโโโโโ โ โ โ Sprites โ โ โ โ Event Handlers โ โ โ
โ โ โโโโโโโโโโโโโ โ โ โ Chunks โ โ โ โ โ โ โ
โ โ โInfographicโ โ โ โ Entities โ โ โ โ Entity Sync โ โ โ
โ โ โ Component โ โ โ โโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโโโโโโโ โ โ
โ โ โโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโ โ โ โ
โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ GAME SYSTEMS LAYER โ โ
โ โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ โ
โ โ โ Chunk Manager โ โEntity Systemโ โ Player โ โ Event Systemโ โ โ
โ โ โ โ โ โ โ Controls โ โ โ โ โ
โ โ โ โข Loading โ โ โข ECS Base โ โ โ โ โข Custom โ โ โ
โ โ โ โข Unloading โ โ โข Traits โ โ โข Movement โ โ โข Emitters โ โ โ
โ โ โ โข Registry โ โ โข Factory โ โ โข Camera โ โ โข Listeners โ โ โ
โ โ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโดโโโโโโโโ
โ WebSocket โ
โ Connection โ
โโโโโโโโโฌโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SERVER ARCHITECTURE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ WebSocket Serverโ โ Chunk System โ โ Entity Manager โ โ
โ โ โ โ โ โ โ โ
โ โ โข Player Mgmt โโโโโบโ โข Generator โโโโโบโ โข Placement/Removal โ โ
โ โ โข Connection โ โ โข Database โ โ โข State Sync โ โ
โ โ โข Broadcasting โ โ โข Perlin Noise โ โ โข Validation โ โ
โ โ โข Event Router โ โ โข 5x5 Radius โ โ โข Persistence โ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ SERVER STORAGE โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ โ
โ โ โ Player Map โ โ Chunk Cache โ โ Entity Database โ โ โ
โ โ โ โ โ โ โ โ โ โ
โ โ โ โข Positions โ โ โข In-Memory โ โ โข Global State โ โ โ
โ โ โ โข WebSocket โ โ โข 1024x1024 โ โ โข Type Safety โ โ โ
โ โ โ โข Visibilityโ โ โข Generated โ โ โข Relationships โ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Infinite Terrain: Server generates chunks using Perlin noise algorithm
- Efficient Loading: 5x5 chunk radius loaded around each player
- Memory Management: Automatic chunk unloading when players move away
- Database Persistence: In-memory chunk caching with generation timestamps
- Base Entity Class: Core entity functionality with lifecycle management
- Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
- Factory Pattern: Assembler entities with complex manufacturing logic
- Type Safety: Comprehensive TypeScript interfaces and namespaces
- Real-time Sync: WebSocket-based player and entity synchronization
- Event-Driven: Structured event system for game state changes
- Server Authority: Server validates all entity placements and movements
- Scalable Design: Modular event handlers and manager classes
- PIXI.js Integration: Hardware-accelerated 2D rendering
- Sprite Management: Efficient sprite sheet loading and caching
- React Context: Clean integration between React UI and PIXI rendering
- Performance Optimized: Worker pools for background processing
- Modern Toolchain: Vite build system with TypeScript and React
- Bun Runtime: Fast JavaScript runtime for server and package management
- Linting & Formatting: ESLint configuration with React hooks support
- Debug Systems: Comprehensive logging and infographic display components