johan helsing.studio

Extreme Bevy 5: Procedural generation

In this part, we'll explore how to seed a random number generator and use it to generate a map.

More →

Extreme Bevy 3.5: Detecting Desyncs

In this part, we’ll look at how to be completely certain all of our players are seeing the exact same game state.

More →

Extreme Bevy 4: Keeping score

In this part, we’ll be implementing respawning and adding a simple UI for keeping track of score.

More →

Cargo Space devlog #7 - Generating space backgrounds

I settled on an RNG crate, added "endless" procedural stars backgrounds, and made sure each run's star background was unique across runs and consistent for all players in a session.

More →

Announcing Matchbox 0.6

Matchbox is a solution for painless peer-to-peer networking in rust web assembly (and native!). 0.6 is its biggest release yet. We added support for multiple data channels with configurable reliability, support for peer disconnections, a bevy plugin, a new signaling server crate, and fixed quite a few bugs.

More →

Cargo Space devlog #6 - Steam integration, lobbies, chat

How I got side-tracked into implementing chat, adding Steam lobbies, wrestling logs out of Steam and made a tiny crate for turning crossbeam_channel messages into Bevy events.

More →

Cargo Space devlog #5 - Adventures in physics engine development with bevy_ecs

I started filling in the gaps in my home-made physics implementation. In this post I go painstakingly detailed about my adventures in implementing one-way platforms and prematurely optimizing broadphase collision detection. Bonus yak-shaving sections on bevy_screen_diagnostics, and bevy_sparse_grid_2d

More →

Cargo Space devlog #4 - Playing sound effects in a rollback world

I know there isn't supposed to be any sound in space, but I decided I didn't really care :) So I went ahead and added some sound effects to Cargo Space anyway... In this post, I describe the challenges with adding sound to a game with rollback-based netcode, and how I ended up solving them. I present my solution in detail so you could easily adapt it to your own rollback-based Bevy game.

More →

Cargo Space devlog #3 - Sprites, de-syncs, cross-platform p2p, kayak_ui, cargo-deny

I drew a couple of sprites, added cross-platform multiplayer, added some ui using kayak_ui and fixed a lot of network-related bugs. Last time, I thought I would be able to take a break from the technical side. It turned out I was wrong. I had a lot of tough bugs, both with de-syncs, and NAT-traversal. I guess it's one of those reasons why they tell you not to make a networked multiplayer game.

More →

Cargo Space devlog #2 - ship physics, networking, input

Cargo Space, my coop 2d space game prototype is chugging along. Since last time, I've added physics to ship modules, thrusters, terminals, and peer-to-peer multiplayer. In this post I'll go through the challenges I encountered and how I solved them. And some challenges I solved that I didn't really need to solve...

More →

Cargo Space - devlog #1

I've been working on Cargo Space, my space game prototype, for a couple of weeks now, and I wanted to share the progress I've made so far... and some yak's I've shaved along the way.

More →

Cargo Space - devlog #0

I started working on a new project, again, but this time, I really feel like it’s something I’d like to finish. So I’ll do something I rarely do, I’ll talk about my plans and goals for the project before I start. I’m hoping this will help me feel accountable for what I do, stay focused, and avoid excessive amounts of yak shaving.

More →

Announcing Matchbox 0.4

I'm happy to announce that Matchbox 0.4 has finally been released on crates.io. Matchbox is a solution for painless peer-to-peer networking in rust web assembly.

More →

dice another day - jam devlog

Dice Another Day is a game I made for GMTK Game Jam 2022. It’s a puzzle game where dice are missing pips and you roll them around and try assemble the right pattern. In this post, I’ll go through its development, both tech and design-wise.

More →

evaporate - devlog and post mortem

evaporate is a game I made for Ludum Dare 50. It's a first-person 3d game where you encounter a camel-obsessed snowman, in the middle of a desert... And you try to help him survive. This is a devlog and a post-mortem, with source code included.

More →

Making Dis order - post-mortem and reflections on Bevy

I made a jame game, Dis order, for Mini Jam 100 using the Bevy game engine, I thought I'd share some thoughts on the experience.

More →

Extreme Bevy: Making a p2p web game with rust and rollback netcode

In my previous post, Introducing Matchbox, I explained how Matchbox solves the problem of setting up peer-to-peer connections in rust web assembly for implementing low-latency multiplayer web games. I said I'd start making games using it and I figured it's about time I make good on that promise, as well as write a tutorial while at it. I'll explain step-by-step how to use Bevy, GGRS, and Matchbox to recreate the old classic Extreme Violence by Simon Green with online p2p multiplayer using rollback netcode.

More →

Tutorial: Making a physics engine with Bevy

In a sudden and ambitious outburst of not-invented-here syndrome combined with hype-train, I decided there weren't enough physics engines out there and it would be a good idea to write one myself using all the latest buzzwords. In this tutorial series, I'll explain step-by-step how to build an extended position-based dynamics (XPBD) rigid-body physics engine using entity component system (ECS) architecture in rust.

More →

Unity VR Quick Start Guide

This is a brief and opinionated step-by-step guide for how to get VR working in a new Unity project.

More →

Introducing Matchbox

I'm very happy to announce the Matchbox project. A solution for painless peer-to-peer networking in rust web assembly.

More →

Dead Heroes Don't Cry Released for Android

I just finished up the last fixes for the Android version of Dead Heroes Don't Cry, and it's finally available on Google Play.

More →

Cmyk Zero

I made puzzle game about subtractive color blending. It's available online at itch.io.

More →

UniRx observable reference

UniRx is a great reactive programming library for Unity. However, I found it a bit difficult to write a clean reusable and decoupled user interface, so I wrote a small add-on library for UniRX which I think solves the problem quite nicely.

More →

Automatically building and deploying Unity applications to itch.io

When doing game jams, you can easily waste a lot of time fixing one bug, manually build for four or more platforms, upload each to itch only to find there is another critical bug and you have to start all over again. In this post, I'll explain how to set up continuous deployment so all of this will be done automatically when you push to your git master branch.

More →

Making Universal Render Pipeline Look Decent

In this tutorial, I'll start with an empty project/scene, add a couple of basic objects, make sure we're using the univeral render pipeline and step by step go from quite underwhelming to decent.

More →

Choosing a graphics pipeline in Unity 2019.3

Unity has released a lot of news lately about new graphics pipelines in Unity, and it isn't always obvious which one you should choose. While Unity likes to brag about the benefits of each pipeline, they don't really do a good job about explaining the limitations.

More →