Langjam Gamejam

Published: (December 20, 2025 at 08:56 AM EST)
3 min read
Source: Dev.to

Source: Dev.to

Day 1

Suicmez, the Language

Suicmez underwent PDD (panic‑driven development). After two speedruns of implementing languages from scratch—both in Rust—I slapped together a lexer and a parser in about two hours. The practice paid off, but the project turned out to be more challenging than expected.

Performance

For any non‑trivial game, a bloated DSL that consumes gigabytes of RAM and runs at 2 FPS is unacceptable. The previous speedruns used tree‑walked interpreters (one even got a JIT after the run). Suicmez considered three execution strategies:

  • Bytecode VM
  • JIT using Cranelift
  • Compiling to C

A robust typechecker was also required; insufficient inference would force unnecessary annotations, while an overly complex one would delay the project indefinitely. After the typechecker, the runtime, built‑ins, and FFI support needed to be implemented before any game work could begin.

Hopium

Realizing the scope was too large for one person, I looked for a teammate. Fortunately, Nishi joined the effort.

What We Did

We discussed the game plan and how the compiler would interact with the rest of the system. Nishi initially considered using his graphics library, Milsko, but the required math work was prohibitive, so we switched to Raylib.

Nishi split the game work into three sections:

  • Rendering
  • Collisions
  • Networking

He also started a networking library for the game, libfishsoup.

Day 2

The Best Team Ever

Wildered and El1i0r soon joined.

  • El1i0r contributed deep PLTDI theory knowledge, helping refine language design and correcting earlier decisions.
  • Wildered built a generational garbage collector tailored to our needs and worked on code generation.

We set clear goals for both the language and the game. Performance concerns led us to reject a bytecode VM, and the complexity of a JIT pushed us toward a C backend as the “Goldilocks” solution.

Days 3‑4‑5

We decided on a multiplayer 3D FPS where the last player standing wins.

  • Wildered’s GC performed flawlessly.
  • I focused on Suicmez’s standard library.
  • The project used ODE for physics and Raylib for rendering.

In hindsight, we regretted not choosing a full engine, but the commitment was already deep.

Near day 5 we discovered that Suicmez’s high‑level abstractions hindered C interop, so Wildered and I spent a night adding low‑level features.

Here's how our language looks

Bitwise ops

Fixed arrays

Enums

Days 6 and 7

Our target was to finish by Day 6, but shader errors pushed work into Day 7.

Terrain placeholder

The terrain initially appeared as a green blob, but we resolved the issue and the game ran smoothly. In the final 15 hours we deployed the game on Nishi’s VPS and prepared the submission.

We had a lot of fun throughout the jam and wrapped up with a play‑testing session—though we all agree we still have a lot to improve in the game.

Back to Blog

Related posts

Read more »