You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -15,31 +16,47 @@ A 'meta-engine' framework made to facilitate the development of moddable, multip
15
16
16
17
</div>
17
18
18
-
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.
19
+
Initially borne out of [Jumpy](https://github.com/fishfolk/jumpy), Bones will
20
+
eventually be the engine of choice for all
21
+
[Fish Folk](https://github.com/fishfolk) games. It is suitable for any other
22
+
games with similar requirements.
19
23
20
-
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.
24
+
By default Bones is rendered with [Bevy](https://bevyengine.org), but it is
25
+
fundamentally engine-agnostic and comes with its own lightweight ECS, asset
26
+
server and user experience. Bones is officially focused on 2D games and models
27
+
itself after the likes of [Corgi](https://corgi-engine.moremountains.com/). It
28
+
can however be used for 3D games as well, if you are willing to create custom
29
+
rendering integrations.
21
30
22
31
## Overview
23
32
24
33
### Bones ECS
25
34
26
-
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:
35
+
Bones is designed around a simple, custom Entity Component System (ECS),
36
+
designed to make it easier to get a few features that are important to us:
27
37
28
-
-**Determinism:** Bones ECS is deterministic by default, making it easier to get a re-producible and predictable gameplay.
29
-
-**Snapshot/Restore:** The Bones ECS world can be trivially snapshot and restored.
30
-
-**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.
38
+
-**Determinism:** Bones ECS is deterministic by default, making it easier to
39
+
get a re-producible and predictable gameplay.
40
+
-**Snapshot/Restore:** The Bones ECS world can be trivially snapshot and
41
+
restored.
42
+
-**Modding/Scripting:** Bones ECS is built on our [`bones_schema`] system,
43
+
which allows for runtime reflection and the ability to interact with data
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.
48
+
Determinism and Snapshot/Restore are also key features for getting excellent
49
+
**network play** with the rollback networking model, while requiring no changes
50
+
to the core game loop implementation.
35
51
36
52
### Bones Lib
37
53
38
-
The [`bones_lib`] contains the [`bones_ecs`] and the [`bones_asset`] system. It defines the concept
39
-
of a [`Game`] which contains all of your game logic and data in a collection of [`Session`]s that
40
-
each have their own ECS [`World`].
54
+
The [`bones_lib`] contains the [`bones_ecs`] and the [`bones_asset`] system. It
55
+
defines the concept of a [`Game`] which contains all of your game logic and data
56
+
in a collection of [`Session`]s that each have their own ECS [`World`].
41
57
42
-
Bones lib has no rendering components or even math types, it is only concerned with organizing your game logic and assets.
58
+
Bones lib has no rendering components or even math types, it is only concerned
A game created with only the [`bones_framework`] is renderer agnostic, allowing us to create
63
-
rendering integrations with other engines. Our official integration is with the [Bevy] engine.
80
+
A game created with only the [`bones_framework`] is renderer agnostic, allowing
81
+
us to create rendering integrations with other engines. Our official integration
82
+
is with the [Bevy] engine.
64
83
65
-
Rendering in the [`bones_framework`] is intentionally simple, and some games may need more advanced
66
-
features that aren't supported out of the box. Bones, and it's Bevy integration, are designed so
67
-
that you can create custom rendering specific to your needs. That means you can still take advantage
68
-
of any fancy new Bevy plugins, or maybe use something other than Bevy entirely!
84
+
Rendering in the [`bones_framework`] is intentionally simple, and some games may
85
+
need more advanced features that aren't supported out of the box. Bones, and
86
+
it's Bevy integration, are designed so that you can create custom rendering
87
+
specific to your needs. That means you can still take advantage of any fancy new
88
+
Bevy plugins, or maybe use something other than Bevy entirely!
69
89
70
90
### Bones Scripting
71
91
72
-
[`bones_ecs`] is built to be scripted. Effort has also been made to avoid putting unnecessary
73
-
performance limitations into the scripting system. Bones comes with an integration with the
74
-
[`piccolo`] VM to enable Lua scripting out-of-the-box.
92
+
[`bones_ecs`] is built to be scripted. Effort has also been made to avoid
93
+
putting unnecessary performance limitations into the scripting system. Bones
94
+
comes with an integration with the [`piccolo`] VM to enable Lua scripting
95
+
out-of-the-box.
75
96
76
-
This integration allows Lua scripts to access the ECS world in a way very similar to the
77
-
Rust API. Rust components and resources can be annotated with`#[repr(C)]` to enable direct
78
-
access by Lua scripts, and if a type cannot be`#[repr(C)]`, you can still manually
79
-
create your own Lua bindings for that type.
97
+
This integration allows Lua scripts to access the ECS world in a way very
98
+
similar to the Rust API. Rust components and resources can be annotated with
99
+
`#[repr(C)]` to enable direct access by Lua scripts, and if a type cannot be
100
+
`#[repr(C)]`, you can still manually create your own Lua bindings for that type.
80
101
81
-
Allowing both Rust and the scripting language to talk to the _same_ ECS world allows you to easily
82
-
blend both languages in your game, and have them interact quite easily in many circumstances. If
83
-
a portion of your game needs extra high performance or low-level access, you can use Rust, but
84
-
if you want hot reloaded and moddable elements of your game, you can use Lua.
102
+
Allowing both Rust and the scripting language to talk to the _same_ ECS world
103
+
allows you to easily blend both languages in your game, and have them interact
104
+
quite easily in many circumstances. If a portion of your game needs extra high
105
+
performance or low-level access, you can use Rust, but if you want hot reloaded
106
+
and moddable elements of your game, you can use Lua.
85
107
86
-
The scripting system is not limited to Lua. Using the simple dynamic API to [`bones_ecs`], you can
87
-
create your own integrations to any language or system you desire.
108
+
The scripting system is not limited to Lua. Using the simple dynamic API to
109
+
[`bones_ecs`], you can create your own integrations to any language or system
110
+
you desire.
88
111
89
-
The scripting system is new and work-in-progress, but all of the major things have been
90
-
successfully implemented, and it is going to be actively used in Jumpy.
112
+
The scripting system is new and work-in-progress, but all of the major things
113
+
have been successfully implemented, and it is going to be actively used in
114
+
Jumpy.
91
115
92
116
[`piccolo`]: https://github.com/kyren/piccolo/
93
117
94
118
## Contributing
95
119
96
-
If you would like to contribute, feel free to reach out on our [Discord](https://discord.gg/4smxjcheE5) server to ask questions!
120
+
If you would like to contribute, feel free to reach out on our
121
+
[Discord](https://discord.gg/4smxjcheE5) server to ask questions!
97
122
98
-
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.
123
+
We also use [TODO Issue][tdi] to automatically create issues from all of our
124
+
`TODO` comments in code. You can check out the [todo issue list][tdil] to see if
0 commit comments