Seeing this really makes it hit home how rarely you find this sort of joy in tech anymore. This reminds me of when computers still seemed fun and I wanted to learn more about them
Every year during snow season I try to make it faster/more flakes. After this year though in chrome, I think it'd be whiteout conditions ;-) (it'll auto-scale to try to match your system performance. Best effects in a clean browser with not too much else running/open at the same time)
Oh, that's something I also did in QBasic ages ago. I since lost the source code, but it basically worked by querying the screen from bottom to top, finding snow pixels (white) and moving them down, unless there was an obstacle. The initial snow on the ground (and the snowman) were using a different color that was almost white so it wouldn't detect as snow. It worked fairly well in 320×200 at the time.
I've tried the same approach in Turbo Pascal with BGI in the hopes of having a faster language and higher resolution available. It turned out to be quite a bit slower, likely because drawing and querying pixels was a bit more involved when using an adapter layer like BGI.
A few weeks ago I tried rewriting all that in TypeScript for fun and also trying to integrate it as an easter-egg with our graph drawing library (which renders with SVG) and first had to figure out how to efficiently support arbitrary obstacles that are initially SVG as well as a potentially changing viewport of the whole scene. I got sidetracked and didn't finish it, but proper collision handling was so easy back then (just look at the pixel color), but now with vector graphics and reading pixels being a very slow operation in many cases, it was surprisingly complicated.
Very nice! I made a version of this effect for a little NYE thing years ago [0] (source here [1]). I first saw this effect in Iguana's Blastersound BBS intro [2]. I always thought that intro looked slick!
I loved Christmas Lemmings so much back in the day! The snowfall visualization and the little Santa lemming clearing it. I made a much less impressive snowfall demo a while back based on that (minus the clearing lemming, because I always wanted to watch the snow pile up). https://anderegg.ca/projects/flake/
I haven't looked at the code, but I suspect that those flakes have hit another snowflake and are now considered "fallen" snow. And for fallen snow there's probably an optimization that only x% of particles are updated every step
I wrote a similar snow app a couple of years ago in Logitech Modula-2 for DOS. I used an array to hold the flake data. If a flake stopped when it hit another flake, it would go again on the next round because the flake it hit would also keep going.
Seeing this really makes it hit home how rarely you find this sort of joy in tech anymore. This reminds me of when computers still seemed fun and I wanted to learn more about them
Brilliant!
Did anyone else ramp up all the settings to try and fill the screen with snow?
I saw a cool "bubbling" effect. Some of the air gaps by the trees would bubble up as the snow pilled on.
Here's my variant on the same toy idea, using a CA, generated trees, and a few other tricks.
https://vps.kimbruning.nl/snow/2025/snow_singlecore_scalable...
Every year during snow season I try to make it faster/more flakes. After this year though in chrome, I think it'd be whiteout conditions ;-) (it'll auto-scale to try to match your system performance. Best effects in a clean browser with not too much else running/open at the same time)
Love everything about this. The idea of just do something because it's enjoyable for yourself, the retro style, the toyish-aspect...
Love it :)
I also rate the author's slogan: "make things, not too much, mostly crap". A reference to Michael Pollan's "eat food, not too much, mostly veg".
Oh, that's something I also did in QBasic ages ago. I since lost the source code, but it basically worked by querying the screen from bottom to top, finding snow pixels (white) and moving them down, unless there was an obstacle. The initial snow on the ground (and the snowman) were using a different color that was almost white so it wouldn't detect as snow. It worked fairly well in 320×200 at the time.
I've tried the same approach in Turbo Pascal with BGI in the hopes of having a faster language and higher resolution available. It turned out to be quite a bit slower, likely because drawing and querying pixels was a bit more involved when using an adapter layer like BGI.
A few weeks ago I tried rewriting all that in TypeScript for fun and also trying to integrate it as an easter-egg with our graph drawing library (which renders with SVG) and first had to figure out how to efficiently support arbitrary obstacles that are initially SVG as well as a potentially changing viewport of the whole scene. I got sidetracked and didn't finish it, but proper collision handling was so easy back then (just look at the pixel color), but now with vector graphics and reading pixels being a very slow operation in many cases, it was surprisingly complicated.
Very nice! I made a version of this effect for a little NYE thing years ago [0] (source here [1]). I first saw this effect in Iguana's Blastersound BBS intro [2]. I always thought that intro looked slick!
[0] https://www.horsedrawngames.com/nye
[1] https://bitbucket.org/izzo/hdgnye
[2] https://youtu.be/qPOoU44GU50
I feel like playing lemmings now!
I loved Christmas Lemmings so much back in the day! The snowfall visualization and the little Santa lemming clearing it. I made a much less impressive snowfall demo a while back based on that (minus the clearing lemming, because I always wanted to watch the snow pile up). https://anderegg.ca/projects/flake/
Why do some snowflakes stop in mid-air?
I haven't looked at the code, but I suspect that those flakes have hit another snowflake and are now considered "fallen" snow. And for fallen snow there's probably an optimization that only x% of particles are updated every step
I wrote a similar snow app a couple of years ago in Logitech Modula-2 for DOS. I used an array to hold the flake data. If a flake stopped when it hit another flake, it would go again on the next round because the flake it hit would also keep going.
I had to check if the author was Alphapapa
This is fun to see :) thanks!
Powder toy deserves a mention here