Settings

Theme

Making a game on a custom bytecode VM in 7 days and 3kB

laurent.le-brun.eu

92 points by laurentlb 6 days ago · 14 comments

Reader

vegabook 17 hours ago

It's incredibly satisfying to see the polar opposite of the usual LLM/superDB/K8/CICD/Cloud/Container/Crapola corpobloat we hear about on this site all the time, namely a tiny piece of handcrafted code, ironically produce something infinitely more aesthetically beautiful, and intellectually interesting from an almost artisan engineering perspective.

  • llmslave2 14 hours ago

    Especially because some framework slopper using all the LLM's and bloat in the world could never even imagine reaching this level of productivity. In 7 (SEVEN) days this coder

    - Designed a language.

    - Implemented a compiler to compile it to bytecode, using F#.

    - Wrote a bytecode interpreter, using C++.

    - Created a shoot’em up game, using the custom language.

    - Renderd the graphics, using a single GLSL shader.

    • suprjami 6 hours ago

      While I agree with the sentiment that LLM coding can produce a lot of inefficient junk code which works with holes if you're lucky...

      What you're describing is 7 days of productivity supported by probably 7+ years (or 27+ years) of experience and learning and getting things wrong and restarting over again.

      It is definitely wonderful to see though.

    • fragmede 5 hours ago

      I gave Claude a screenshot of your comment, and it accepted the challenge.

      Claude called the language Blitz.

      The repo it created: https://github.com/fragmede/blitz

      Is the code shit? I haven't looked at it. Didn't have to. Probably is. I fed it the blog post at the end, and difference.md has a comparison on what Laurent Le Brun built vs Claude, and Claude is fully aware that it went a different way on a number of different things.

      It chose python, I had to tell it to use uv.

      I'm on a mac with high DPI and it got confused about that.

      I had to tell it to make a binary format (it made a BLTZ header)

      But you can clone that repo, do uv run main.py --compile game/shooter.blitz and it'll make a .blitzc. Then you can do uv run main.py game/shooter.blitzc Tear the code apart. Call out every tiny mistake in that repo. It's probably cheating somewhere! But all I did was give it challenge.png that's in the repo, and tiny bits of English, and Claude went to work.

      It's been 21 years since my college computer graphics class and I went into distributed systems and not game dev, so someone else will have to tell me if it used a single (or even any!) GLSL shaders, or not.

      Call it slop all you want, but that took me 70 minutes of babysitting.

jstrieb 18 hours ago

The rest of the games submitted to this very interesting, somewhat niche game jam (including my own entry) are here:

https://itch.io/jam/langjamgamejam/entries

There were some really impressive submissions in spite of the short time frame!

NooneAtAll3 17 hours ago

Reminds me of https://js13kgames.com/ where people managed to do a whole air sim in 13kb (out of many other things)

PaulHoule 19 hours ago

Such a beautiful technique for shoehorning straight out of the 1970s! See also

https://en.wikipedia.org/wiki/CHIP-8

and

https://en.wikipedia.org/wiki/SWEET16

It seems so un-FORTRAN that DEC had a FORTRAN compiler for the PDP-11. that was based on a stack machine and then later built an FP accelerator specialized to accelerate the stack machine. It was a straggler but I'm still trying to track down a circa 1992 article from Dr. Dobb's Journal where someone used virtual machine techniques to unbreak the broken i860 and make a good FORTRAN compiler.

nsxwolf 20 hours ago

What's that overall filter that covers the view? Is it supposed to look like a late 80s passive matrix color LCD screen?

Edit: Thanks for the downvote, guess I shouldn't have paid any attention to this post at all?

  • macintux 15 hours ago

    Worth noting that it's easy (and probably fairly frequent) to click the wrong arrow, especially on a phone screen. I've started double-checking the "unvote" vs "undown" link that appears afterwards to make sure I hit the right one.

    • somat 15 hours ago

      So that's how you tell, salutes. Sometimes I worry that I inadvertently downvoted someone by mistake. "But you can just unvote if that happens" sure but how do you tell what was voted.

      Anyhow, I think if this was my forum I would put the downvote selector at the end of the comment title and have the upvote selector at the beginning.

  • laurentlbOP 11 hours ago

    There's no specific filter. The main effect is blending the previous frame with the current frame. When blending, I modify the coordinates and add some noise. This makes the graphics look less basic and it creates this noisy trail when things move.

    The source code is here: https://github.com/laurentlb/shmup8/blob/main/src/shaders/sc...

    Blending is on lines 241, 242.

    I didn't try to get a specific 80s look, I just played with formulas.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection