pouët.net

Explosion by Musk

 
 - E X P L O S I O N -

         by musk at Function 2022


 - T E C H N I Q U E -

It's a 3D particle system simulation. 
Each particle eats 32 bytes of RAM.
I've hardcoded 400 particles.

No FPU is used, it's all integer
math using 16 signed integers.

No buffering, pixels are drawn and 
cleared directly to the screen.

There are 4 simulation ticks per frame
and each pixel drawn persists for 2
frames. This creates an ultra smooth
motion blur effect.

I tried adding sound but I couln't 
make it sound good, as good so it does
not distract from the visuals. So I 
decided to not have sound.

The color intensity is actually a 4th 
dimension which is  simulated the same 
way as the XYZ coordiantes.


 - O P T I M I Z A T I O N - 

I got a solid simulation with 192 
bytes I used the rest of the space to
add color and variation.

I passed the 256 byte limit a few 
times but I managed to optimize it 
back under 256 byte. 

There is a single loop that handles
both updates and initialization for
each particle.

The update loop is so large that it
uses less space to call it as a 
function instead of inlining because
the main loop is transformed into a 
short jump. Because of subframes
I have multiple jumps that go back.

The biggest optimization I did is to 
treat each coordinate axis uniformly
this allows to do the whole simulation
on all axes with the same code.

Further optimization is still possible
with a memory reogranization and by
applying more hacks. I didn't apply 
any advanced size optimization hacks.


 - C O D E -

For this one I decided to lean more
heavily onto nasm macros.

My initial goal was to have the 
assembly code a bit more readable and
maybe I end up with a few reusable 
components.

But the most useful thing was that it
allowed me to easily reorganize the 
code. In the end it was an easy 
process to inline most function calls.

The source code should be in the 
release, maybe someone can learn 
something from it.