Experimental game engine for visual novels.
This is a work in progress game engine that focuses on making it simple but flexible to write visual novels.
The goal is to allow writing a visual novel without having to write any code, while also allowing more complex interactive novels by building game logic in your programming language of choice.
The term "visual novel" is somewhat broad and vague.
In Vienna's case, it represents the following characteristics:
- The game provides a visual story.
- The gameplay ranges from minimal to full interactivity.
- You play a (non-linear) sequence of scenes.
- The world operates in 2D space.
- It does not require high-performance computing.
There are more genres that fit this description, and all are a focus point of the engine:
The biggest inspiration for this engine is an all-time classic game: Indiana Jones and the Fate of Atlantis.
There are others, such as Myst, Broken Age, The Walking Dead, The Longest Journey, Life is Strange, Broken Sword, Dreamfall, The Curse of Monkey Island, Blade Runner, Syberia and Starship Titanic.
Not all of these can be represented by this engine, but the goal is to cover as much as possible, by offering a flexible system of plugins and widgets.
- Engine written in Rust
- First class support for WebAssembly based plugins and widgets
- Games built using a storybook and plugins
During development, you can run the test setup as follows:
- Install Rust.
- Clone project.
- Build test plugin.
- Run test game.
on macOS, this will get you started:
curl --proto "=https" --tlsv1.2 -sSf "https://sh.rustup.rs" | sh
git clone "https://github.com/rustic-games/vienna"
cargo build --target "wasm32-unknown-unknown" --manifest-path "plugins/test/Cargo.toml"
cargo run
The project consists of separate crates, each with their own set of responsibilities.
The responsibility of the vienna-engine
crate is to advance the game state
based on (player) input and render the results to the screen.
The vienna-runner
crate will become the binary to run the engine with a set of
external configuration files and assets. This allows you to distribute a visual
novel without having to compile the game itself.
Until then, the purpose of this crate is to allow running cargo run
from the
project root to test the engine.
The vienna
crate provides a Software Development Kit interface to build
Wasm plugins in Rust.
While technically not required, the crate vastly simplifies the process of creating a new plugin, and handles all unsafe FFI operations needed to communicate with the engine at runtime.
The crate has the naked vienna
name, since it is the one most often used by
external developers.
A set of default engine plugins live in the plugins
directory.
The engine embeds these plugins by default to provide the core functionality for any game. Custom plugins can further extend the capability of a game.
Currently, a single test
plugin exists to validate the functionality of the
engine.