{"id":22147745,"url":"https://github.com/rustic-games/vienna","last_synced_at":"2025-10-05T05:17:49.143Z","repository":{"id":98823146,"uuid":"261018774","full_name":"rustic-games/vienna","owner":"rustic-games","description":"An easy-to-use but extensible Visual Novel engine.","archived":false,"fork":false,"pushed_at":"2020-05-26T19:47:03.000Z","size":485,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T12:33:39.052Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rustic-games.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-03T20:52:55.000Z","updated_at":"2021-07-30T18:37:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"3052a5ff-a663-4bdb-af48-251b70ca293e","html_url":"https://github.com/rustic-games/vienna","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rustic-games/vienna","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustic-games%2Fvienna","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustic-games%2Fvienna/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustic-games%2Fvienna/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustic-games%2Fvienna/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rustic-games","download_url":"https://codeload.github.com/rustic-games/vienna/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustic-games%2Fvienna/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278411261,"owners_count":25982368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-01T23:20:32.877Z","updated_at":"2025-10-05T05:17:49.077Z","avatar_url":"https://github.com/rustic-games.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vienna\n\nExperimental game engine for visual novels.\n\n## Goal\n\nThis is a _work in progress_ game engine that focuses on making it simple but\nflexible to write visual novels.\n\nThe goal is to allow writing a visual novel without having to write any code,\nwhile also allowing more complex interactive novels by building game logic in\nyour programming language of choice.\n\n## Visual Novel\n\nThe term \"visual novel\" is somewhat broad and vague.\n\nIn Vienna's case, it represents the following characteristics:\n\n1. The game provides a visual story.\n2. The gameplay ranges from minimal to full interactivity.\n3. You play a (non-linear) sequence of scenes.\n4. The world operates in 2D space.\n5. It does not require high-performance computing.\n\nThere are more genres that fit this description, and all are a focus point of\nthe engine:\n\n- [Visual Novel](https://www.giantbomb.com/_/3015-2029)\n- [Interactive Film](https://en.wikipedia.org/wiki/Interactive_film)\n- [(Point \u0026 Click) Adventure Game](https://en.wikipedia.org/wiki/Adventure_game#Point-and-click_adventure_games)\n\nThe biggest inspiration for this engine is an all-time classic game: [Indiana\nJones and the Fate of Atlantis][indy].\n\nThere are others, such as [Myst], [Broken Age], [The Walking Dead], [The Longest\nJourney], [Life is Strange], [Broken Sword], [Dreamfall], [The Curse of Monkey\nIsland], [Blade Runner], [Syberia] and [Starship Titanic].\n\nNot all of these can be represented by this engine, but the goal is to cover as\nmuch as possible, by offering a flexible system of _plugins_ and _widgets_.\n\n[indy]: https://www.gog.com/game/indiana_jones_and_the_fate_of_atlantis\n[myst]: https://www.gog.com/game/myst_masterpiece_edition\n[broken age]: https://www.gog.com/game/broken_age\n[the walking dead]: https://www.gog.com/game/walking_dead_season_1_the\n[the longest journey]: https://www.gog.com/game/the_longest_journey\n[life is strange]: https://en.wikipedia.org/wiki/Life_Is_Strange\n[broken sword]: https://www.gog.com/game/broken_sword_directors_cut\n[dreamfall]: https://www.gog.com/game/dreamfall_the_longest_journey\n[the curse of monkey island]: https://www.gog.com/game/the_curse_of_monkey_island\n[blade runner]: https://www.gog.com/game/blade_runner\n[syberia]: https://www.gog.com/game/syberia\n[starship titanic]: https://www.gog.com/game/starship_titanic\n\n## Concept\n\n- Engine written in [Rust][]\n- First class support for [WebAssembly][wasm] based plugins and widgets\n- Games built using a storybook and plugins\n\n[rust]: https://www.rust-lang.org/\n[wasm]: https://webassembly.org/\n\n## Development\n\nDuring development, you can run the test setup as follows:\n\n1. Install [Rust][install-rust].\n2. Clone project.\n3. Build test plugin.\n4. Run test game.\n\non macOS, this will get you started:\n\n```shell\ncurl --proto \"=https\" --tlsv1.2 -sSf \"https://sh.rustup.rs\" | sh\ngit clone \"https://github.com/rustic-games/vienna\"\ncargo build --target \"wasm32-unknown-unknown\" --manifest-path \"plugins/test/Cargo.toml\"\ncargo run\n```\n\n[install-rust]: https://rustup.rs/\n\n## Crates\n\nThe project consists of separate crates, each with their own set of\nresponsibilities.\n\n### Engine\n\nThe responsibility of the `vienna-engine` crate is to advance the game state\nbased on (player) input and render the results to the screen.\n\n### Runner\n\nThe `vienna-runner` crate will become the binary to run the engine with a set of\nexternal configuration files and assets. This allows you to distribute a visual\nnovel without having to compile the game itself.\n\nUntil then, the purpose of this crate is to allow running `cargo run` from the\nproject root to test the engine.\n\n### SDK\n\nThe `vienna` crate provides a Software Development Kit interface to build\nWasm plugins in Rust.\n\nWhile technically not required, the crate vastly simplifies the process of\ncreating a new plugin, and handles all unsafe _FFI_ operations needed to\ncommunicate with the engine at runtime.\n\nThe crate has the naked `vienna` name, since it is the one most often used by\nexternal developers.\n\n## Plugins\n\nA set of default engine plugins live in the [`plugins` directory](./plugins).\n\nThe engine embeds these plugins by default to provide the core functionality for\nany game. Custom plugins can further extend the capability of a game.\n\nCurrently, a single `test` plugin exists to validate the functionality of the\nengine.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustic-games%2Fvienna","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frustic-games%2Fvienna","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustic-games%2Fvienna/lists"}