Sandblaster (CSF Game-A-Week #9)

HOW TO PLAY:

Draw on the screen with your mouse. Click the UI buttons to change what is drawn and how big they are drawn. Click "Forward" to run the simulation. Click "Reverse" to step back in time. Note that you can only draw when in the Paused or Forward state. Finally, beware that this is not optimized, so don't fill the entire canvas with lava. :)

CONCEPT:

  • Make a falling sand puzzle game
  • Implement time dilation mechanics

WHAT WENT RIGHT:

Time dilation was trivial to implement and I had that working on day one thanks to the Command pattern. Falling sand simulators have been around for decades as well, so coming up with basic algorithms to try out was also easy to do. Loading an initial state from an image file was also somewhat easy to do after searching forums for the pieces I needed to implement. Finally, publishing to WebGL was easy because I have recently gained experience doing just that. This reinforces the underlying concept behind the fail fast approach at the core of game-a-week projects: extend your skillset with hands-on experience and learn what works without considering other external factors like code quality, marketability, and so on.

WHAT WENT WRONG:

Performance is a major issue when dealing with cellular automata at scale. If you write one line of bad code (e.g. I was calling `texture.Apply()` every time a pixel was drawn), then performance can suffer greatly.

There is no game here, just a basic simulator (and one that might freeze up if you play with too much lava, so beware). What went wrong is explained more in "what I learned" below.

WHAT I LEARNED:

I learned a few things this week, one of which is that there are a lot of issues involving the ordering in which cellular automata are processed and how that affects the state of the simulation per frame. 

I also learned that hand-waving major design decisions with vague statements (e.g. "make a puzzle game") is a disaster in a time crunch. There was and is ultimately no puzzle game here. I then thought that maybe a side-scrolling game would be fun. But that didn't work out either. 

Another important takeaway is that sometimes it is better to pivot when struggling with a design decision, rather than forcing something that just doesn't fit. For example, a version of this prototype had a "player" particle that could be controlled. It was a mess to implement and didn't add much fun by itself. When I finally stopped trying to force other game paradigms into this one, I finally let the prototype be a sand simulation, and more ideas started to flow when I embraced what worked (though too late to be implemented here).

Comments

Log in with itch.io to leave a comment.

I really enjoyed this as a relaxing sandbox toy while sitting at my desk. It was like one of those toys you flip and the sand or water moves to the other side but this one is every element all in one. Cool idea. 

I did have a bit of trouble drawing solid lines with my mouse which I wanted to do to make more intricate layers of stone to have the other elements fall through. 

Making the snowfall was very relaxing and watching it pile up was cool. Lava seem to take over in most cases and I wasn't really sure what to do with that element. 

It was a great time and the perfect office toy to have in the background and mess with every once in a while. 

This is quite a piece of work!

The interaction systems are complex and enjoyable to watch unfold and there is a mastery of procedural systems at play here.

It's difficult to critique the work since it's at an early stage, what you have here is the basis of a concept that has a lot of possibilities. What's important is that the implementation is proven to work and you have a method to scale these systems if you wanted to.

I would take a step back and come up with solid theories on finding the fun of this system and focus on it with a razor sharp precision. There is a danger of working and working on this to no end since the systems are infinitely deep and complex. 

It will take careful design considerations to push this prototype to something truly special.

Amazing work, it's an achievement that you were able to execute on this within a week.