I used to run a small MMORPG. I only had to ban a player once but when I did they made it their life's mission to get around it and spam profanities. They went through every proxy in existence and I had to resort to banning whole IP ranges to keep them out.
Actually even higher level than that: it's all JavaScript, but it relies heavily on multithreading (see the linked Noita talk, which uses the same model). But basically:
The world is divided into chunks and the threads are processing them simultaneously in an even-odd checker pattern to avoid race conditions. When all pixels settle in a chunk it falls asleep and can be skipped altogether until an active pixel enters and wakes it up again.
As a fan of both Neal and R74n this was an unexpected collaboration!
I can highly recommend building your own falling sand simulator. It's really fun to see how such simple rules create emergent behaviors. Sand pixels try to move down, then diagonally down. Water does the same, then tries sideways.
I've built something similar and have yet to find a compelling use case for it. In my mind it seemed like such an obvious idea that I thought I'd start using it instead of Wikipedia. However, in practice I seldom care about the broader or more specific topics for the thing I'm looking into. It's strange though because I'm a compulsive rabbit holer but it just doesn't trigger the same urge to explore related nodes as Wikipedia does.
With that said, this UI is much slicker so maybe that is the missing piece.
This seems really cool and I'm excited to play around with it once it's up and running properly again. These type of things are my favorite applications of LLMs.
A while back I made something similar in the form of an incremental "clicker" game where you split things ad infinitum: https://lantto.github.io/hypersplit/
Great article and very relevant for me since I'm building a game in JavaScript based on "falling sand" physics, which is all about simulating massive amount of particles (think Noita meets Factorio - feel free to wishlist if you think it sounds interesting).
My custom engine is built on a very similar solution using SharedArrayBuffers but there are still many things in this article that I'm eager to try, so thanks!
Yes, this is a really good article that I can highly recommend if you're interested in these type of "falling sand" simulations.
A big difference between a classic powder toy game like in the article and Noita is that Noita needs to run a much larger simulation that extends beyond the visible canvas. So while multithreading is probably not needed in the former it's most likely needed when the game is a scrolling platformer. I posted a GDC talk by the Noita devs as a reply to a sibling comment if you're interested in their tech.
If you haven't played Noita it's basically a "falling sand" or powder physics game where every pixel is simulated. You need a special cellular automata that is not your typical game physics engine, so I don't think Babylon.js would be a good choice but I may be wrong.
I'm building a JavaScript game in my own engine, which in retrospect was a big mistake considering the game utilizes a lot of multithreading (the game is "Noita meets Factorio" so it's required for the simulation). You can only share memory between threads using a SharedArrayBuffer with raw binary data and you need special headers from the web server to even enable it. This means that I've had to write a lot of convoluted code that simply wouldn't be necessary in a non-browser environment.
Other than that I really like that I can piggyback on the browser's devtools and that I can use the DOM for the UI.
Sorry about that! I realized too late that the game is really badly optimized once you hit higher levels and start getting chain reactions. Turning off Effects helps for some things.
I wonder how far you can push the DOM. It gets crazy with so many element updates after a while but there are probably many performance improvements that can be done.
Getting the second resource (can't post emojis here) means you hit a quark, loop or a dead-end. I have a version where it continues splitting to up/down quarks and then fantasy matters but it quickly derails into chaos.