https://github.com/rustic-games/vienna
An easy-to-use but extensible Visual Novel engine.
https://github.com/rustic-games/vienna
Last synced: 8 months ago
JSON representation
An easy-to-use but extensible Visual Novel engine.
- Host: GitHub
- URL: https://github.com/rustic-games/vienna
- Owner: rustic-games
- Created: 2020-05-03T20:52:55.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-05-26T19:47:03.000Z (about 6 years ago)
- Last Synced: 2025-03-24T12:33:39.052Z (about 1 year ago)
- Language: Rust
- Size: 474 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Vienna
Experimental game engine for visual novels.
## Goal
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.
## Visual Novel
The term "visual novel" is somewhat broad and vague.
In Vienna's case, it represents the following characteristics:
1. The game provides a visual story.
2. The gameplay ranges from minimal to full interactivity.
3. You play a (non-linear) sequence of scenes.
4. The world operates in 2D space.
5. It does not require high-performance computing.
There are more genres that fit this description, and all are a focus point of
the engine:
- [Visual Novel](https://www.giantbomb.com/_/3015-2029)
- [Interactive Film](https://en.wikipedia.org/wiki/Interactive_film)
- [(Point & Click) Adventure Game](https://en.wikipedia.org/wiki/Adventure_game#Point-and-click_adventure_games)
The biggest inspiration for this engine is an all-time classic game: [Indiana
Jones and the Fate of Atlantis][indy].
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_.
[indy]: https://www.gog.com/game/indiana_jones_and_the_fate_of_atlantis
[myst]: https://www.gog.com/game/myst_masterpiece_edition
[broken age]: https://www.gog.com/game/broken_age
[the walking dead]: https://www.gog.com/game/walking_dead_season_1_the
[the longest journey]: https://www.gog.com/game/the_longest_journey
[life is strange]: https://en.wikipedia.org/wiki/Life_Is_Strange
[broken sword]: https://www.gog.com/game/broken_sword_directors_cut
[dreamfall]: https://www.gog.com/game/dreamfall_the_longest_journey
[the curse of monkey island]: https://www.gog.com/game/the_curse_of_monkey_island
[blade runner]: https://www.gog.com/game/blade_runner
[syberia]: https://www.gog.com/game/syberia
[starship titanic]: https://www.gog.com/game/starship_titanic
## Concept
- Engine written in [Rust][]
- First class support for [WebAssembly][wasm] based plugins and widgets
- Games built using a storybook and plugins
[rust]: https://www.rust-lang.org/
[wasm]: https://webassembly.org/
## Development
During development, you can run the test setup as follows:
1. Install [Rust][install-rust].
2. Clone project.
3. Build test plugin.
4. Run test game.
on macOS, this will get you started:
```shell
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
```
[install-rust]: https://rustup.rs/
## Crates
The project consists of separate crates, each with their own set of
responsibilities.
### Engine
The responsibility of the `vienna-engine` crate is to advance the game state
based on (player) input and render the results to the screen.
### Runner
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.
### SDK
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.
## Plugins
A set of default engine plugins live in the [`plugins` directory](./plugins).
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.