{"id":13733160,"url":"https://github.com/olefasting/rust_rpg_toolkit","last_synced_at":"2025-06-22T23:06:51.501Z","repository":{"id":57665791,"uuid":"392742979","full_name":"olefasting/rust_rpg_toolkit","owner":"olefasting","description":"Engine / framework for creating highly customizable and user modable action RPG's","archived":false,"fork":false,"pushed_at":"2022-03-08T20:12:18.000Z","size":289700,"stargazers_count":62,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-06T19:05:52.422Z","etag":null,"topics":["2d-engine","game","game-development","gamedev","macroquad","rpg","rust","rust-lang"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/olefasting.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["olefasting"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-08-04T15:40:08.000Z","updated_at":"2025-04-10T14:46:14.000Z","dependencies_parsed_at":"2022-09-14T13:01:50.396Z","dependency_job_id":null,"html_url":"https://github.com/olefasting/rust_rpg_toolkit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/olefasting/rust_rpg_toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olefasting%2Frust_rpg_toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olefasting%2Frust_rpg_toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olefasting%2Frust_rpg_toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olefasting%2Frust_rpg_toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/olefasting","download_url":"https://codeload.github.com/olefasting/rust_rpg_toolkit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/olefasting%2Frust_rpg_toolkit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261380906,"owners_count":23149966,"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","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":["2d-engine","game","game-development","gamedev","macroquad","rpg","rust","rust-lang"],"created_at":"2024-08-03T03:00:38.583Z","updated_at":"2025-06-22T23:06:46.484Z","avatar_url":"https://github.com/olefasting.png","language":"Rust","funding_links":["https://github.com/sponsors/olefasting"],"categories":["Game engines"],"sub_categories":[],"readme":"# Rust RPG Toolkit\n\n**PLEASE NOTE:**\n\n**This project is discontinued, as most of it has been included in the internal engine we use for the Fish Fight project. As we near 1.0 for Fish Fight,\nthis summer, we will, in stead, release an engine core library (yet to be named) based on this. It follows the same principles as this project but will\nbe much more agnostic, in terms of game genre. It will also have support for multiple rendering backends**\n\nThis crate allows you to create tile-based, 2D action RPGs, using Rust amd JSON. It started out as a game project but was\nseparated into its own project, as it grew in scope. It uses JSON files for most of its game data and resources specification,\nso that games can be created with very little interaction with the Rust code. This has the benefit of making the end product\nvery easy to modify, both for non-developers involved in the development process, and by end users. Modification can be done,\neither by modifying a game's data files directly, or by creating user modules, which are supported, out-of-the-box.\n\nCurrently, as the name suggests, it is very RPG centric, but I am working on making it more flexible. As of writing this,\nthings like \"victory conditions\" have yet to be implemented, progression only being possible through mission/quest development,\nat this stage, but I plan to design this in such a way that it allows the framework to be used for non-RPG genres, as well.\n\nI also plan to add the possibility to create games in other perspectives than top-down. It is very easy to implement, for example,\na side scrolling view, as I already (more or less) have feature parity, as well as full compatability, with Tiled maps. Implementing\nside scrolling physics is just a matter of adding a few physics properties -- mainly gravity -- at this point...\n\n## Features\n\n- Easy definition and modification of game data and resources, without having to touch source code or re-compile your project\n- Mod support out-of-the-box with modules that can extend or replace a game's data and resources\n- RPG mechanics, like character stats, items and an inventory system\n- Conversion from Tiled maps and instantiation of actors and items from map properties\n- Flexible AI behaviors\n- Dialogue system\n- Mission and reward system\n- UI and menus that can be built and themed via JSON\n- WebAssembly support with wasm-bindgen\n\n## Current Milestones\n\n- [x] Re-design actor behavior system\n- [x] Define basic, default AI behaviors\n- [X] Refactor collision detection\n- [x] Polish pathfinding\n- [ ] Expanded character creation, with cosmetic options\n- [ ] Implement actor abilities (currently abilities are only implemented on items)\n- [ ] Refactor the UI system\n- [ ] Finalize the WASM build process\n\n## Using the library\n\nTo get started, add the following to your `Cargo.toml` file:\n\n```toml\n[dependencies]\nrust-rpg-toolkit = \"0.1.0\"\n```\n\n### Crate features\n\n- `collision-between-actors` If this is enabled, actors will collide with other actors, not just the map.\n  This is not recommended at this stage, as navigation does not take other actors into consideration.\n\n### Example\n\n```rust\nuse rust_rpg_toolkit::prelude::*;\n\nconst GAME_NAME: \u0026str = \"My Awesome Game\";\nconst GAME_VERSION: \u0026str = \"0.1.0\";\n\nconst CONFIG_PATH: \u0026str = \"config.json\";\n\nfn get_window_conf() -\u003e WindowConf {\n    let config = Config::load(CONFIG_PATH);\n\n    WindowConf {\n        window_title: GAME_NAME.to_owned(),\n        high_dpi: false,\n        window_width: config.resolution.x as i32,\n        window_height: config.resolution.y as i32,\n        fullscreen: config.fullscreen,\n        ..Default::default()\n    }\n}\n\n#[macroquad::main(get_window_conf)]\nasync fn main() -\u003e Result\u003c()\u003e {\n  let params = GameParams {\n    name: GAME_NAME.to_string(),\n    version: GAME_VERSION.to_string(),\n    ..Default::default()\n  };\n\n  // Load game resources, apply modules and dispatch an event that opens the main menu when the game loop starts.\n  // This puts a Resources struct, holding all the games assets and data files, including everything from modules,\n  // into storage, so any code that requires access to such data, must be called after this.\n  init(params).await?;\n  \n  /* Begin optional stuff */\n\n  // This defines the builder used when loading scenes and it is the best way to inject your own Macroquad\n  // scene node implementations into the scene tree and have them drawn when you want them to.\n  // The DrawBuffers require a type that implements BufferedDraw, so implementation of Macroquad's Node trait is,\n  // strictly speaking, not required. This is what it was meant to be used for, however.\n  // If you don't define your own scene builder, the default one will be used. \n  SceneBuilder::new()\n          .with_draw_buffer::\u003cMyBufferedDrawImpl\u003e(DrawStage::Actors)\n          .make_default();\n  \n  // This is also where you want to define anything else that you reference in your game data, like custom ActorBehaviors,\n  // custom ButtonBuilders that are referenced in your customized GUI theme(s), etc. \n  \n  /* End optional stuff */\n\n  // Handle event queue until encountering a Quit event\n  while handle_queued_events().await? {\n    // Begin frame\n    begin_frame();\n\n    // ...\n\n    // End frame\n    end_frame().await;\n  }\n\n  Ok(())\n}\n\n```\n\nAny game you create should also have an assets folder. Copy the one included in the example project as a starting point...\n\nThe example project can be built and run using the following cargo command:\n\n`cargo run --example example-project`\n\n### CLI\n\nThe CLI crate currently just consists of a tiled map conversion tool, but it will be expanded as we go\n\n### Further documentation\n\nCheck the [docs folder](https://github.com/olefasting/rust_rpg_toolkit/tree/master/docs) for more documentation.\n\n## Contributing\n\nContributions are more than welcome. Feel free to create a PR or an issue.\n\n## Credits\n\n- [Wenrexa Minimal UI Kit](https://wenrexa.itch.io/kit-nesia2) (UI theme)\n- [Free UI Kit #4](https://wenrexa.itch.io/ui-different02) (UI theme)\n- [Neo Zero Cyberpunk City Tileset](https://yunusyanin.itch.io/neo-zero-cyberpunk-city-tileset) (map tiles and props)\n- [Cyberpunk Top Down Game Asset Pack](https://rafazcruz.itch.io/cyberpunk-top-down-game-asset-pack) (currently not used but included in the repository)\n- [Cyberpunk Items 16x16](https://jeresikstus.itch.io/cyberpunk-items-16x16) (currently used for all item graphics)\n- [M4A1 Single sound by Kibblesbob](https://soundbible.com/1804-M4A1-Single.html) ([Creative Commons Attribution 3.0](https://creativecommons.org/licenses/by/3.0/))\n- [9mm Glock 17 sound by JKirsch](https://soundbible.com/1382-9mm-Glock-17.html) ([Creative Commons Attribution 3.0](https://creativecommons.org/licenses/by/3.0/))\n- Other sounds from [SciFi Weapons Pro](https://sidearm-studios.itch.io/sci-fi-weapon-sounds-pro), which is a paid asset pack. This means that you will not be able to redistribute these.\n\n\\\n\\\nLicense: MIT (excluding assets from external sources)\n\nCopyright 2021 Ole A. Sjo Fasting and [Magus](http://magus.no)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folefasting%2Frust_rpg_toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folefasting%2Frust_rpg_toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folefasting%2Frust_rpg_toolkit/lists"}