bones README

The project's README from github.com/fishfolk/bones. As one markdown file: README.md.

Bones

A 'meta-engine' framework made to facilitate the development of moddable, multiplayer 2D games.

Documentation Crates.io docs.rs Main Branch Docs License Discord


Initially borne out of Jumpy, Bones will eventually be the engine of choice for all Fish Folk games. It is suitable for any other games with similar requirements.

By default Bones is rendered with Bevy, but it is fundamentally engine-agnostic and comes with its own lightweight ECS, asset server and user experience. Bones is officially focused on 2D games and models itself after the likes of Corgi. It can however be used for 3D games as well, if you are willing to create custom rendering integrations.

Overview

Bones ECS

Bones is designed around a simple, custom Entity Component System (ECS), designed to make it easier to get a few features that are important to us:

Determinism and Snapshot/Restore are also key features for getting excellent network play with the rollback networking model, while requiring no changes to the core game loop implementation.

Bones Lib

The bones_lib contains the bones_ecs and the bones_asset system. It defines the concept of a Game which contains all of your game logic and data in a collection of Sessions that each have their own ECS World.

Bones lib has no rendering components or even math types, it is only concerned with organizing your game logic and assets.

Bones Framework

On top of bones_lib there is the bones_framework, which defines the rendering components and math types. Right now bones_framework is focused only on 2D rendering. 3D is not a priority for us now, but there is no technical limitation preventing community developed 3D rendering components either on top of bones_lib directly or as an extension to the bones_framework.

Bones Bevy Renderer

A game created with only the bones_framework is renderer agnostic, allowing us to create rendering integrations with other engines. Our official integration is with the [Bevy] engine.

Rendering in the bones_framework is intentionally simple, and some games may need more advanced features that aren't supported out of the box. Bones, and it's Bevy integration, are designed so that you can create custom rendering specific to your needs. That means you can still take advantage of any fancy new Bevy plugins, or maybe use something other than Bevy entirely!

Bones Scripting

bones_ecs is built to be scripted. Effort has also been made to avoid putting unnecessary performance limitations into the scripting system. Bones comes with an integration with the piccolo VM to enable Lua scripting out-of-the-box.

This integration allows Lua scripts to access the ECS world in a way very similar to the Rust API. Rust components and resources can be annotated with #[repr(C)] to enable direct access by Lua scripts, and if a type cannot be #[repr(C)], you can still manually create your own Lua bindings for that type.

Allowing both Rust and the scripting language to talk to the same ECS world allows you to easily blend both languages in your game, and have them interact quite easily in many circumstances. If a portion of your game needs extra high performance or low-level access, you can use Rust, but if you want hot reloaded and moddable elements of your game, you can use Lua.

The scripting system is not limited to Lua. Using the simple dynamic API to bones_ecs, you can create your own integrations to any language or system you desire.

The scripting system is new and work-in-progress, but all of the major things have been successfully implemented, and it is going to be actively used in Jumpy.

Contributing

If you would like to contribute, feel free to reach out on our Discord server to ask questions!

We also use TODO Issue to automatically create issues from all of our TODO comments in code. You can check out the todo issue list to see if there's any thing you'd like to take a hack at.

Similar Projects

Our architecure has many things in common with these other awesome projects:

bones (fishfolk/bones)

indie-game-dev
Searching Database…

319 ·GitHub
What is this?Bones is a 'meta-engine' framework for building moddable, multiplayer 2D games in Rust. It originated from the Fish Folk game Jumpy and is meant to eventually power all Fish Folk games.
Is this a full game engine or just a rendering plugin for Bevy?It is engine-agnostic: Bones has its own lightweight ECS, asset server and scripting system, and only uses Bevy by default for rendering, so other renderers could be swapped in.
Do I need Bevy to build a game with this?Not strictly - the core bones lib has no rendering or math types at all, it only organizes game logic and assets; Bevy is just the official rendering integration layered on top.
Does it support 3D games?Not really - Bones Framework is officially focused on 2D rendering only; 3D is possible in theory but would require writing your own custom rendering integration.
Can I script games in Lua instead of pure Rust?Yes - Bones ships with an out-of-the-box integration with the 'piccolo' VM for Lua scripting, letting Lua scripts access the same ECS world as the Rust API for hot-reloadable modding.
Why is the ECS described as deterministic?Bones ECS is deterministic by default and its World can be trivially snapshotted and restored, which is what makes rollback-style multiplayer networking possible without changing the core game loop.
How does Jumpy relate to this engine?Jumpy is the Fish Folk game Bones was extracted from, and Bones is being generalized so it can eventually drive all Fish Folk games and other similar projects.
What inspired Bones' architecture?The README lists similar projects it shares ideas with, including Gamercade/wasm4, Ambient, flecs-polyglot, and Tangle.
Creator
fishfolk
Size
377.3 MB
Stars
319
Age
3y
Commits · 90 Days