![Community banner](https://programming.dev/pictrs/image/8b83b0c1-6284-4ade-b7dc-96ed70557859.png)
![bevy](https://programming.dev/pictrs/image/529d2dbd-d15c-48f9-a0a8-b3d2051917b2.png?format=webp&thumbnail=48)
Bevy
- 🧬 Bevy Replicon 0.27.0-rc.3 is out!github.com GitHub - projectharmonia/bevy_replicon: Server-authoritative networking crate for the Bevy game engine.
Server-authoritative networking crate for the Bevy game engine. - projectharmonia/bevy_replicon
It’s a crate for server-authoritative networking.
We usually don't make breaking changes when a Bevy release is around the corner, but decided to make a small exception for this one :)
This release adds support for Bevy 0.14.0-rc.4 and splits the crate functionality by features. For example, for headless server you can disable
client
feature. By default all features, exceptdiagnostics
are enabled, so you have the same set of plugins as before. But most plugin authors will need to adddefault-features = false
. - Bevy 0.14.0-rc.4
You can find it on crates.io or on GitHub. If you're already on the
rc.3
,cargo update
should automatically pick it up.Here is the list of fixes since the 0.14.0-rc.3. This is likely the last release candidate!
The estimated release date for the 0.14 is now beginning of next week.
- Where do you think Bevy absolutely slaps and excels at compared to other game engines?bevyengine.org Bevy Engine
Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open-source forever!
For me, it's just ECS nature and Schedule that optimizes everything for you.
It's near native C / Assembly with safe garbage collection, so everything complex like some simulations should be more doable. I play Tunnet with no stuttering on my Linux machine in 4K and 144Hz!
- Bevy 0.14.0-rc.3 has just been released
You can find it on crates.io or on GitHub. If you're already on the
rc.2
,cargo update
should automatically pick it up.Here is the list of fixes since the 0.14.0-rc.2. This version also has observers merged!
The estimated release date for the 0.14 has been pushed back by one week, to be able to finish the release note and migration guide.
- What are your favorites Bevy made games to play?store.steampowered.com Tunnet on Steam
Build, debug and optimize a computer network in an underground facility.
Mine is Tunnet. Maybe someone found some gem? Itch.io games also counts, just needs to be made in Bevy!
- Issues with minesweeper algorithm
I don't know if it's the best place to ask this, but I've been having issues with trying to make minesweeper with bevy.
I tried making a function that would give the number of mines around the tile that was clicked if it wasn't a mine. Then, I wanted to make it so that when the number of mines around the clicked tiles is 0, it reveals the surrounding tiles. Finally, I tried making the function recursive by rerunning it on the empty surrounding tiles.
The issue is that it seems that certain tiles with no mines surrounding them don't reveal the surrounding tiles.
Here's the portion of the code I am talking about (I know it's pretty bad):
``` fn find_surrounding_mines( mut set: ParamSet<( EventReader<TileEntity>, EventWriter<TileEntity>, )>, mut surrounding_mines: EventWriter<SurroundingMines>, mut query_board: Query<&mut Board>, mut change_tile_image: EventWriter<ChangeTileImage>, mut query_mine: Query<(&Mine, &mut Tile)>) { let dy: [i8; 8] = [-1, -1, -1, 0, 0, 1, 1, 1]; let dx: [i8; 8] = [-1, 0, 1, -1, 1, -1, 0, 1];
let board = query_board.single_mut(); let mut num_mine: u8 = 0; let mut y: u8 = 0; let mut copy_x: usize = 0; let mut tile_read:bool = false; let mut copy_num_mine:u8 = 0; for tile in set.p0().read(){ for (row_index, vector) in board.tiles.iter().enumerate(){ if let Some(x) = vector.iter().position(|&x|x == tile.0) { copy_x = x; y = row_index as u8; for i in 0..8{ if x as i8 + dx[i] >= 0 && x as i8 + dx[i] < board.width as i8 && y as i8 + dy[i] >= 0 && y as i8 +dy[i] < board.height as i8{ if let Ok((_mine,mut tile)) = query_mine.get_mut(board.tiles[(y as i8 + dy[i]) as usize][(x as i8+ dx[i]) as usize]){ num_mine += 1; tile.hidden = false; } } } break; } }
surrounding_mines.send(SurroundingMines(num_mine)); change_tile_image.send(ChangeTileImage{tile: tile.0, asset: "Minesweeper_LAZARUS_21x21_".to_string() + &num_mine.to_string() + ".png"}); copy_num_mine = num_mine; num_mine = 0; tile_read = true; }
if copy_num_mine == 0 && tile_read{ tile_read = false; for i in 0..8{ if copy_x as i8 + dx[i] >= 0 && copy_x as i8 + dx[i] < board.width as i8 && y as i8 + dy[i] >= 0 && y as i8 +dy[i] < board.height as i8{ if let Ok((_mine, mut tile)) = query_mine.get(board.tiles[(y as i8 + dy[i]) as usize][(copy_x as i8 + dx[i]) as usize]){ continue; }else{ println!("{:?}", (y as i8 + dy[i], copy_x as i8 + dx[i])); set.p1().send(TileEntity(board.tiles[(y as i8 + dy[i]) as usize][(copy_x as i8 + dx[i]) as usize])); } } } } } ```
- 🧬 Bevy Replicon 0.27.0-rc.1 is out!
It’s a crate for server-authoritative networking.
Bevy has started drafting release candidates to let users test them before the actual release. And I think it's awesome!
This release adds support for Bevy 0.14.0-rc.2. There are no functional changes.
We haven't released
bevy_replicon_renet
because we need to wait forbevy_renet
. However, other crates, including other messaging backends, won't be blocked. - Bevy 0.14.0-rc.2
You can find it on crates.io or on GitHub. Notice that as it's a release candidate, you have to specify the version for it to be selected, it's not automatic.
Please test it on all the strange use cases you have, update the plugins you maintain, and get ready for an exceptional release! The migration guide is still being worked on, but the draft can already prove useful.
For the next two weeks, we'll cherrypick back to the release branch merged PRs from the 0.14 milestone, so that they will be in the 0.14 release. While we will avoid breaking changes, it's still a possiblity one will be merged if there's a big enough issue.
- Running my game on Steam Deck
Bought the device a few days ago and wanted to share the experience of running a Bevy game on it. I developing an open source life simulation game called Project Harmonia. The game is at the prototype stage: you can build walls, place objects and move around, but no no actual gameplay loop.
Bevy engine supports it natively since it's just a regular x86 with GNU/Linux. So nothing special was needed! I compiled the game via Cargo and it works.
The game runs great. I get stable 90 FPS (90Hz is the refresh rate of the device) consuming only 13.1 W. The UI is a little big and controls aren't adapted well for gamepads, but I will fix it later.
The console itself is also a nice machine for development. Next I will write about the setup I use.
As you may know, it runs SteamOS with KDE and based on ArchLinux.
Packages mostly mirror official ArchLinux repositories, but there are some additions and everything is compiled by Valve. So you can even install SuperTuxKart or GNOME 😃
Another difference from vanilla ArchLinux is immutable file system. You can make it writable via a single command in terminal, but each update wipes all changes made to the system. Home directory remains untouched.
Because of the immutable filesystem, I decided to try Flatpak. It installs packages into the user's home directory. Therefore, such apps won't be removed after an update.
But I faced some limitations due to containerization. For example, the Firefox extension for KeePassXC does not work because apps can't interact with each other. And it's not suited for installing stuff like compilers or libraries. So I decided to explore other options.
Next, I tried to create a script that I planned to run after each update. It installs all the packages I need through the system package manager.
But packages on SteamOS are older then in Archlinux. For example, Neovim on SteamOS is 0.9, but on ArchLinux it's 0.10, so I had to downgrade my configuration. And it causes incompatibilities with AUR. For example, I couldn't install Crow Translate because of it.
Another problem with such script is that Valve nuked
/usr/include
directory to free space. All packages are present, but the folder is missing. It makes sense for a gaming device, but I need it to compile packages from AUR.It can be solved by reinstalling all packages that put files into
/usr/include
. But it causes another problem 😃 Allocated space for/
is limited and you quickly run out of space after restoring headers and installing a couple of packages.Then I decided to try Distrobox. It creates containers that tightly integrated with the host system. It even comes pre-installed on the Steam Deck.
And I like it a lot! It is very easy to use and combines the advantages of both approaches. All packages will persist across updates and I have access to all packages that I have on my regular PC. Graphical apps look native and can interact with each other.
The game on photos was compiled on the Steam Deck 🥰
- 🧬 Bevy Replicon 0.26.0 is out!
cross-posted from: https://mastodon.social/users/Shatur/statuses/112508034539087653
It's a crate for server-authoritative networking.
In this release, we have completely reworked the events. We now use an optimization similar to what Bevy does for processing event updates.
The public API for events has not changed, except that custom systems have been replaced with simple serialization and deserialization functions. It’s faster and more convenient.
In addition, all network event registration functions can be used on regular events, automatically making them network events.
- Object side snapping
Video
Click to view this content.
cross-posted from: https://mastodon.social/users/Shatur/statuses/112464362803020971
Implemented a special component that allows the sides of objects to snap to others with the same component.
Bevy's gizmo was very helpful in visualizing the math.
- 🧬 Bevy Replicon 0.25.0 is out!
It's a crate for server-authoritative networking.
We worked closely with the author of
bevy_bundlication
on this release to provide better abstractions for third party plugins on top of replicon. Here are some highlights:Previously, users registered a component for replication and it was replicated if its entity was marked for replication. But this approach is quite limited. Now users can define replication rules similar to queries:
rust app.replicate_group::<(Transform, Player)>() // `Transform` and `Player` components will be replicated only if both present on an entity.
And it's possible to specialize ser/de for such groups. For example, replicateTransform
in one way for players and in another way for static objects. Groups with more components take priority by default (but it's configurable). So it's also possible to haveapp.replicate::<Transform>()
, but ifPlayer
component is present,(Transform, Player)
will take precedence. In the next release we planning to supportWith
andWithout
to let define something like this:app.replicate_group::<(A, B), Without<C>>()
.Also check out 📦bevy_bundlication which is now an abstraction over replicon that provides a bundle-like API for defining replication groups.
Custom replication functions was also heavily reworked:
- Public API no longer requires any
unsafe
. - Deserialization and writing now defined separately. This allows rollback crates to define their logic without touching user-defined ser/de functions.
- Writing now based on markers for more flexibility.
- Users can customize deserialization in-place.
The author of
bevy_bundlication
also developing input queue and rollback plugins, but they require an API for disabling entities from Bevy. If you are interested in this or have other suggestions how to achieve it, feel free to comment on this issue. - Public API no longer requires any
- Added vintage counter to the game
Working on a life simulator game with a working title Project Harmonia. Just added vintage counter that my wife made to the game. I think it looks quite nice in Bevy.
The same model in Blender: https://toot.garden/@YaraGardaria/112322312099954470
- Introducing renet2, a fork of the networking library renet that implements the game-oriented netcode standard.
Video
Click to view this content.
Introducing renet2, a fork of the networking library renet that implements the game-oriented netcode standard.
Highlights: \- Allow netcode servers to manage multiple data sources at once (e.g. UDP sockets and a WebTransport server). \- Add built-in in-memory sockets and WebTransport sockets. You can now run a netcode server with native AND browser clients, with the same exact authentication workflow for all clients (using ConnectTokens).
- Our very first game at Snowy Road Studios!
Our very first game at Snowy Road Studios!
Scavenger: Jump around and scavenge for good items! https://snowy-road-studios.itch.io/scavenger
Scavenger came from a small in-house game jam with me (SRS founder koe) and my kid brother. Check the devlog to see how it went: https://snowy-road-studios.itch.io/scavenger/devlog/711861/developing-scavenger.
- Bevy Playground
We've long wanted a Bevy playground, just like the official Rust one, where you can type in code in the browser and quickly mess around with Bevy. Now, thanks to Liam, you can experience this for yourself!
The author is looking for feedback here.
- Release v0.13.2 · bevyengine/bevygithub.com Release v0.13.2 · bevyengine/bevy
A full diff of what's been fixed can be seen here: v0.13.1...v0.13.2
- Bevy on PinePhone Pro
Bevy can run on Android phones. But what about GNU/Linux phones? I decided to find out using my PinePhone Pro with RK3399.
Managed to run my game using
WGPU_SETTINGS_PRIO=webgl2
. But couldn't get past the main menu due to limited features of the GPU. 😢But simple 2D games like breakout example runs!
Right now I working on networking for the game, but this evening I decided to tinker with my device a little.
- Release v0.13.1 · bevyengine/bevygithub.com Release v0.13.1 · bevyengine/bevy
A full diff of what's been fixed can be seen here: v0.13.0...v0.13.1
List of changes: https://github.com/bevyengine/bevy/compare/v0.13.0...v0.13.1
- 2024 Budgetbevyengine.org 2024 Budget
Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open-source forever!
- Bevy Foundationbevyengine.org Bevy Foundation
Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open-source forever!
- Implemented automatic door opening
Video
Click to view this content.
In my initial implementation, doors opened when a character approached them (using a sensor collider). But it looked creepy 😅 Imagine simply walking past the doors and having them open unexpectedly.
In the current implementation, I analyze navigation paths to determine if characters pass through the door, and open it when they approach.
Additionally, I added small visual feedback for wall placement, fine-tuned navigation, adjusted controls, made a few QoL improvements, and fixed a bunch of bugs.
This is for my WIP open source life simulation game under the working title Project Harmonia.
- 🧬 bevy_replicon v0.24.0 is out!
This release is big! We abstracted out all I/O and
renet
dependency. We will continue to provide first-party integration withrenet
viabevy_replion_renet
.But now users can write their own integration with other messaging libraries. Refer to the documentation for instructions on how to do it, the process is very simple. See
bevy_replicon_renet
as an example.This also opens up the possibility of simultaneously using multiple messaging libraries on the server, as long as the client identifiers they provide are unique.
See the changelog for a full list of changes.
- Added windows to my game
Video
Click to view this content.
Glad to see that you can import the model from Blender and the transparency just works. Also the index of refraction table in the Bevy docs was very helpful! All models made by my wife 😅
- 🧬 bevy_replicon v0.23.0 is out!
It's a high level networking crate for the Bevy game engine.
Now we support Bevy 0.13. With this release we now use the improved Bevy's
MapEntities
trait instead of our custom one. This way users no longer need to define both to make mapping work for scenes and networking.See the changelog for a full list of changes.
The crate is based on
renet
, but for the next release we planning to abstract out all I/O. We will continue to providerenet
integration via separatebevy_replicon_renet
crate. This way other messaging crates can be used by writing a thin integration crate. - Bevy 0.13bevyengine.org Bevy 0.13
Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open-source forever!
- 🧬 bevy_replicon v0.22.0 is out!
It's a high level networking crate for the Bevy game engine.
Now mapped client events will not be drained and will behave exactly like other events. But it's a small breaking change since such events now require a
Clone
impl.See the changelog for a full list of changes.
- Reworked object placing
Video
Click to view this content.
Improved logic and added visual feedback.
Also switched from
bevy_rapier
tobevy_xpbd
. My game only needs collision detection and withbevy_xpbd
I can disable unnecessary logic by toggling plugins. So convenient! It was an easy transition since the API is very similar. The author is also very active and helpful. - Implemented door placement
Video
Click to view this content.
Boolean operations in 3D are quite heavy. But fortunately, each wall can be represented as two 2D planes.
To determine which 2D shape I need to cut from the mentioned planes, I add a special plane in Blender with "Cutout" name. This is what The Sims series do.
And for all doors located on a wall I triangulate combined vertices using earcutr. The library API doesn't fit well with Bevy, but it does the trick.
The project is open source, so if you are interested in the implementation, you can take a look at the
wall
module. I organize my modules as plugins, so you can copy the module and its submodules into your game with some minor edits and enableWallPlugin
. - Improved wall generation
Video
Click to view this content.
Now walls are separate meshes and take full advantage of ECS, including change detection to rebuild only changed parts.
The new approach also automatically fixed some bugs and enabled instant update of other walls that were affected by currently spawning wall.
- Bevy 0.12 Beginner Tutorial Series - Ep 5 - State, Events, and Run Conditions
YouTube Video
Click to view this content.
- Added UV for generated walls
Video
Click to view this content.
It was an interesting task and I learned a lot about how meshes are represented internally.
Initially I used 8 vertices for each wall. But then I discovered that if I needed a different color and normal for each side, then I needed a different vertex! So I reworked the mesh generation to make 20 vertices per mesh (for each side with no bottom).
The project is open source, so if you are interested in the implementation, you can take a look at
mesh_update_system
. I organize my modules as plugins, so you can copy the module and its submodules into your game with some minor edits and enableWallPlugin
. - Added placeable Retro TV object
Video
Click to view this content.
The model made by @YaraGardaria, was posted before in @blender@lemmy.world.
Bevy looks quite nice with normal maps and good lighting settings.
- 🧬 bevy_replicon v0.21.1 is out!
It's a high level networking crate for the Bevy game engine.
After quite some R&D from UkoeHB in Discord and I, the library now features entity visibility control for clients!
The new companion crate bevy\_replicon\_attributes extends replicon visibility with a highly ergonomic attributes-based API.
See the changelog for a full list of changes.
- Love Bevy asset reloading feature!
Video
Click to view this content.
To implement object buttons reloading when changing metadata files, I simply added a system that respawns buttons when metadata changes. Complete separate preview system automatically updates the image. So convenient.
- SME Announcementsbevyengine.org SME Announcements
Bevy is a refreshingly simple data-driven game engine built in Rust. It is free and open-source forever!
- Bevy Editor Prototypes Kickoffgithub.com Project Kickoff · bevyengine/bevy_editor_prototypes · Discussion #1
Bevy Editor Prototypes Intro Bevy currently lacks a visual editor - some way of visually viewing and modifying assets, displaying debug info and performing other tasks that really just want a GUI. ...
- Blog Series: Bevy Adventures
Intro to a blog series this person is starting up for constructing features for their game in bevy