On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags
(1 edit) (+2)

Thank you for your feedback! Yes, the ammo is the little flames. We got in touch elsewhere, but here’s the rundown of the ash sim anyway in case somebody else is interested:

The game maintains a bitmap to keep track of terrain collision data. Basically, each pixel in the collision map is either solid or air. Each piece of ash “claims” a single pixel in this bitmap.

In the update routine, each piece of ash looks at a row of 3 pixels underneath it in the collision bitmap to decide what to do next.

  • 3 air pixels underneath ash: keep falling
  • 3 solid pixels underneath ash: go to sleep
  • At least 1 solid & 1 air pixel: glide diagonally on top of solid stuff

Each piece of ash has a floating-point velocity vector. The ash will only be able to “claim” a new pixel in the collision bitmap once the floating-point coordinates would take the ash to a different integer pixel. I guess if I were to port this to an old platform I should’ve used fixed-point math :P

That was the gist of it. Of course, there’s some secret sauce to improve the game feel of the ash: subtle randomness to make everything feel more organic, ash can also bounce off other stuff if projected with enough force, etc.

The old After Dark screensaver “Confetti Factory” inspired me to simulate ash like this. It used to captivate me as a kid. I have actually never played Noita so I guess I’ll have to see what it’s like!