A Modern Visual Novel Game Engine
Sabi is a cutting-edge visual novel engine built with Rust and Bevy, featuring dynamic character interactions and flexible scripting capabilities. Create immersive, responsive visual novels with rich character systems, dynamic backgrounds, and engaging dialogue.
- Dynamic Character Management: JSON-based character definitions with customizable attributes
- Emotion System: Real-time emotion changes that affect character sprites and dialogue
- Multi-Outfit Support: Characters can switch between different outfits and emotional states
- Character Descriptions: Rich personality profiles for immersive storytelling
- Dynamic Backgrounds: Environment changes based on story progression
- Character Sprites: Emotion-based sprite switching with fade transitions
- Custom GUI System: Modular interface with themed textboxes and UI elements
- Typing Animation: Smooth text scrolling effects for immersive reading
- Custom Script Language: Bash-like syntax for easy story creation
- Scene Management: Seamless transitions between story segments
- Command System: Rich set of commands for controlling game flow
- Event-Driven Architecture: Responsive system for handling user interactions
- Modular Plugin System: Built on Bevy's ECS architecture
- Hot-Reloadable Assets: Dynamic loading of scripts, sprites, and configurations
- Cross-Platform: Runs on Windows, macOS, and Linux
- Nix Integration: Reproducible development environment with flake.nix
- Rust (latest stable)
- Git
-
Clone the repository:
git clone https://github.com/yourusername/sabi.git cd sabi -
Run the game:
cargo run
nix develop # Enter development shell
cargo run # Build and runSabi uses a custom scripting language with bash-like syntax for defining story flow:
# Character dialogue
say character=`Nayu` msg=`Hello, how are you today?`
# Player dialogue
psay msg=`I'm doing great, thanks for asking!`
# Set character emotion
set type=`emotion` character=`Nayu` emotion=`HAPPY`
# Change background
set type=`background` background=`main_classroom_day`
# Scene transitions
scene id=`scene2`
# Logging (development)
log msg=`Debug message here`# GUI customization
set type=`GUI` id=`_textbox_background` sprite=`TEXTBOX_NAYU`
# End scene
endSabi is built on Bevy's Entity Component System (ECS) with distinct modules:
- Compiler Module: Parses script files and converts them to executable transitions
- Character Module: Manages character sprites, emotions, and properties
- Chat Module: Handles dialogue display and text animation
- Background Module: Controls scene backgrounds and environmental changes
Player name and other settings are currently configured in src/main.rs:
game_state.playername = String::from("YourName");We welcome contributions! Here are some areas where you can help:
- UI/UX Improvements: Enhanced text input, visual effects
- Script Language Features: New commands and functionality
- Performance Optimization: Better asset loading and memory management
- Cross-Platform Support: Testing and fixes for different platforms
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
- Character system with emotions and outfits
- Custom scripting language
- Scene management
- Dynamic backgrounds
- Text rendering and animation
- Enhanced text input system
- Visual transition effects
- Save/load system
- Audio integration
- Visual script editor
- Multiplayer support
- Mobile platform support
- Steam Workshop integration
- Advanced character interaction system
- Built with Bevy Engine
- Development environment managed with Nix
- Special thanks to the Rust and game development communities