Learn Simulant
Everything you need to know to build games with Simulant
Simulant Game Engine Documentation
Welcome to the Simulant Game Engine documentation! This comprehensive guide will help you build games using Simulant, from your first application to advanced features.
Simulant is a cross-platform C++ game engine with support for desktop (Linux, Windows), retro consoles (Sega Dreamcast), and handhelds (PSP). It features a scene graph architecture, compositor-based rendering, physics simulation, UI system, and more.
🚀 Getting Started
New to Simulant? Start here!
- Overview - What is Simulant and what can it do?
- Installation Guide - Get set up on Fedora, Ubuntu, or Windows (WSL2)
- Your First Game - Complete beginner tutorial
- Project Structure - Understanding Simulant projects
- Development Setup - Configure your IDE and tools
📚 Core Concepts
The fundamental building blocks of Simulant games.
- Application - Entry point to your game
- Scenes - Managing game states and screens
- Scene Management - Transitions, preloading, and scene lifecycle
- Stage & StageNodes - The scene graph hierarchy
- Actors - Mesh-rendering entities in your scene
- Cameras - Viewpoints into your 3D world
- Transforms & Hierarchy - Positioning, rotation, and scaling
- Resource Management - IDs, references, and garbage collection
🎨 Rendering System
Everything about rendering visuals in Simulant.
- Render Pipelines - Compositor and render passes
- Materials - Controlling appearance with materials
- Textures - Loading and using textures
- Meshes - 3D geometry and mesh handling
- Mesh Instancer - Efficient instanced rendering
- Lighting - Point lights, directional lights, and illumination
- Sprites - 2D sprite rendering
- Particle Systems - GPU particle effects
- Viewports & Layers - Multi-camera setups
- Partitioners & Culling - Spatial optimization
- Geom & Static Geometry - Optimized static meshes
🎵 Audio System
- Audio Overview - Playing sounds and music
- Positional Audio - 3D sound and spatialization
- Audio Formats - Supported sound file formats
🎮 Input System
- Input Overview - Reading keyboards, mice, and gamepads
- Input Axes - Configurable input abstraction
- Rumble & Feedback - Controller feedback
⚙️ Physics System
- Physics Overview - Introduction to physics simulation
- Rigid Bodies - Dynamic, static, and kinematic bodies
- Colliders & Fixtures - Shapes and collision detection
- Joints - Connecting physics bodies
- Raycasting - Collision queries
- Physics Best Practices - Optimization and common patterns
🖥️ UI System
- UI Overview - Introduction to the widget system
- Widgets - Labels, buttons, images, and more
- Layouts & Frames - Organizing UI elements
- Styling & Themes - Customizing appearance
- Text & Localization - Multi-language support
🎬 Animation
- Animation Overview - Animation system introduction
- Skeleton Animation - Rigged character animation
- Animation Controller - Playing and blending animations
- Sprite Animation - 2D sprite sheets
🛠️ Scripting & Advanced Patterns
- Coroutines - Asynchronous game logic
- Signals & Events - Event-driven programming
- Behaviours - Reusable node components
- Threading - Background processing
📦 Assets & Resources
- Asset Managers - Loading and managing game assets
- Virtual File System - File search paths and organization
- Prefab System - Reusable scene templates
- Mesh Formats - Supported 3D file formats
- Material Files - .smat material format
- Particle Script Format - Particle system definitions
🧰 Utilities
- Math Library - Vectors, matrices, quaternions
- Random Numbers - PRNG utilities
- JSON Parsing - Reading JSON files
- Logging - Debug output and diagnostics
- Debug Drawing - Visualization helpers
- Profiling - Performance measurement
- Command Line Args - Runtime configuration
📖 Guides
- Building a Complete Game - Step-by-step game development
- 2D Game Development - Tips for 2D games
- 3D Game Development - Tips for 3D games
- Dreamcast Development - Sega Dreamcast specifics
- PSP Development - PSP specifics
- Performance Optimization - Making your game run faster
- Asset Pipeline - Importing and preparing assets
- Packaging & Distribution - Shipping your game
📝 Tutorials
- Tutorial 1: Basic Application - Your first Simulant app
- Tutorial 2: Loading 3D Models - Working with meshes and prefabs
- Tutorial 3: Adding Physics - Physics simulation basics
- Tutorial 4: Building a UI - Creating menus and HUDs
- Tutorial 5: Animation - Character animation
🔧 Development
- C++ Guidelines - Code style and best practices
- Engine Structure - Internal architecture
- Testing Framework - Writing unit tests
- Debugging Tips - Debugging strategies
- Platform Notes - Cross-platform considerations
- Environment Variables - Runtime configuration
- Known Issues & TODO - Current limitations
📚 API Reference
For detailed API documentation, see the Doxygen-generated reference.
🤝 Contributing
Simulant is an open-source project. See CONTRIBUTING.md for information on how to contribute.