From abc6e1cea7e95effd2f9c17aa5898075d40a5bbf Mon Sep 17 00:00:00 2001 From: Tekhnae Raav Date: Thu, 9 Apr 2026 11:36:12 -0500 Subject: [PATCH 1/2] feat: add new bones logo --- logo/bones_logo.jpg | Bin 0 -> 30432 bytes logo/bones_logo.svg | 1310 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1310 insertions(+) create mode 100644 logo/bones_logo.jpg create mode 100644 logo/bones_logo.svg diff --git a/logo/bones_logo.jpg b/logo/bones_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a18dcbbecca15ade511d8eb6c33799e78094b9a4 GIT binary patch literal 30432 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 literal 0 HcmV?d00001 diff --git a/logo/bones_logo.svg b/logo/bones_logo.svg new file mode 100644 index 0000000000..292d823435 --- /dev/null +++ b/logo/bones_logo.svg @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e69cea3fd6e7904e2ab388ad6210af071b6f7a05 Mon Sep 17 00:00:00 2001 From: Tekhnae Raav Date: Tue, 21 Apr 2026 08:55:06 -0500 Subject: [PATCH 2/2] feat: add logo to README.md --- README.md | 107 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 4778d7e6a7..eba69c2b18 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@
- +

Bones

-A 'meta-engine' framework made to facilitate the development of moddable, multiplayer 2D games. +A 'meta-engine' framework made to facilitate the development of moddable, +multiplayer 2D games. [![Documentation](https://img.shields.io/badge/documentation-fishfolk.org-green.svg?labelColor=1e1c24&color=f3ee7a)](https://fishfolk.org/bones/overview/introduction/) [![Crates.io](https://img.shields.io/crates/v/bones_lib?labelColor=1e1c24)](https://crates.io/crates/bones_lib) @@ -15,31 +16,47 @@ A 'meta-engine' framework made to facilitate the development of moddable, multip
-Initially borne out of [Jumpy](https://github.com/fishfolk/jumpy), Bones will eventually be the engine of choice for all [Fish Folk](https://github.com/fishfolk) games. It is suitable for any other games with similar requirements. +Initially borne out of [Jumpy](https://github.com/fishfolk/jumpy), Bones will +eventually be the engine of choice for all +[Fish Folk](https://github.com/fishfolk) games. It is suitable for any other +games with similar requirements. -By default Bones is rendered with [Bevy](https://bevyengine.org), 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](https://corgi-engine.moremountains.com/). It can however be used for 3D games as well, if you are willing to create custom rendering integrations. +By default Bones is rendered with [Bevy](https://bevyengine.org), 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](https://corgi-engine.moremountains.com/). 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: +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:** Bones ECS is deterministic by default, making it easier to get a re-producible and predictable gameplay. -- **Snapshot/Restore:** The Bones ECS world can be trivially snapshot and restored. -- **Modding/Scripting:** Bones ECS is built on our [`bones_schema`] system, which allows for runtime reflection and the ability to interact with data types defined outside of Rust. +- **Determinism:** Bones ECS is deterministic by default, making it easier to + get a re-producible and predictable gameplay. +- **Snapshot/Restore:** The Bones ECS world can be trivially snapshot and + restored. +- **Modding/Scripting:** Bones ECS is built on our [`bones_schema`] system, + which allows for runtime reflection and the ability to interact with data + types defined outside of Rust. [`bones_schema`]: https://fishfolk.github.io/bones/rustdoc/bones_schema/index.html -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. +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 [`Session`]s that -each have their own ECS [`World`]. +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 [`Session`]s 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 lib has no rendering components or even math types, it is only concerned +with organizing your game logic and assets. [`bones_lib`]: https://fishfolk.github.io/bones/rustdoc/bones_lib/index.html [`bones_ecs`]: https://fishfolk.github.io/bones/rustdoc/bones_ecs/index.html @@ -50,52 +67,62 @@ Bones lib has no rendering components or even math types, it is only concerned w ### 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`]. +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_framework`]: https://fishfolk.github.io/bones/rustdoc/bones_framework/index.html ### 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. +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! +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. +[`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. +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. +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 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. +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. [`piccolo`]: https://github.com/kyren/piccolo/ ## Contributing -If you would like to contribute, feel free to reach out on our [Discord](https://discord.gg/4smxjcheE5) server to ask questions! +If you would like to contribute, feel free to reach out on our +[Discord](https://discord.gg/4smxjcheE5) server to ask questions! -We also use [TODO Issue][tdi] to automatically create issues from all of our `TODO` comments in code. You can check out the [todo issue list][tdil] to see if there's any thing you'd like to take a hack at. +We also use [TODO Issue][tdi] to automatically create issues from all of our +`TODO` comments in code. You can check out the [todo issue list][tdil] to see if +there's any thing you'd like to take a hack at. [tdi]: https://github.com/DerJuulsn/todo-issue [tdil]: https://github.com/fishfolk/bones/issues?q=is%3Aissue+is%3Aopen+label%3Acode%3Atodo