Hot Reloading Constants: Tweak Values Without Recompiling

Tired of the compile-restart-test loop when tuning parameters? In this video, I show you a clever technique for hot reloading hardcoded constants. By wrapping values in a TWEAK() macro, you can edit numbers directly in your source code and see them update in real-time while your program is running—no recompiling or restarting needed. ...

October 7, 2025 · 1 min

Boids With Raylib and C++

In this video, I implement a Boids flocking simulation using C++ and Raylib. Watch as autonomous agents exhibit emergent behavior through simple rules of separation, alignment, and cohesion, creating mesmerizing patterns that mimic real-world flocking behaviors found in birds, fish, and other animals. Source Code: https://gist.github.com/bi3mer/0017a28837bfa4f380364c6a4e089f68 Raylib: https://www.raylib.com/ ...

September 15, 2025 · 1 min

Creating a Sorting Visualization With C++ and Raylib

In this video, I build a real-time sorting algorithm visualizer using C++ and Raylib. Watch as the sorting process comes to life through smooth animations and colorful graphics, demonstrating how the algorithm works under the hood with visual feedback for each comparison and swap operation. ...

September 8, 2025 · 1 min

Sokoban

While I was TA’ing C++, the professor for the class asked all the TAs to record a forty minute long video on some topic related to C++. I figured it may be useful to see someone coding a game from scratch, so that’s what I did with part 1, which was Sokoban with bitboards. I enjoyed programming the game and making the first video, though, and I decided to keep going. The result was a 31 Part Youtube Series! ...

August 25, 2025 · 1 min

Block Randomization

Last month I ran an online study with 250 participants. There were 5 possible conditions, and assignment was random. You would expect there to be ~50 participants per condition. In my case, though, one condition had 36 participants, creating an unideal skew in the dataset in terms of participants per condition. The problem was random assignment. What I should have used instead was block randomization. Block Randomization Block randomization is super simple to implement, but it comes with a major downside when compared to random assignment. Random assignment is great when you’re running an online study because it does not require a server. Every client can call select a random condition on its own. Block randomization needs a server. ...

April 30, 2025 · 6 min

Logging for Recformer

One of my regrets is not actively writing about Recformer1 as I implemented it. I realized this while writing my last blog post, and this post is me trying to rectify that mistake. So, in this post I am going to discuss logging for Recformer. Why Does Recformer Need Logging? Great question! Recformer is part of the work I’m doing for my dissertation. The work I have done up and to this point has shown that the method I created for dynamic difficulty adjustment via procedural level assembly works when tested with agents, but I have not shown that it has any effect when player’s (i.e., actual human beings) interact with it. To address this, I am running several studies with real player’s to see how the system works. And while I will be asking the user to fill out a survey to learn more about the player’s experience, I also want quantitative data (e.g, levels completed, time played, etc.), and this is why Recformer needs logging. ...

March 27, 2025 · 10 min

A* for Recformer

Recformer is a simple platformer. To beat a level, the player has to collect every coin in the level. Recformer is implemented in Typescript. I built it for the web because I am planning to run a player study with it, and it is a lot easier for people to open up a webpage than to install an executable. Another reason I made it is because I wanted to, and because of that, I want the game to be good; at the very least, I want Recformer to be decent. An image I have had in my mind for a while now is a main menu where you can watch an agent that plays the game. This blog post is going to show you how I accomplished exactly that. ...

March 20, 2025 · 14 min

Graph Simplfication for a Faster A*

A* is an algorithm that is so well covered that I won’t be wasting my time to add to the noise in this blog post, but if you are unfamiliar with A*, I recommend reading an introduction from Red Blob Games and then coming back here.1 Alright, assuming you are familiar with A*, the question you may be having is: “How can we make A* faster?” There are, in fact, a lot of ways. If you don’t care about finding an optimal path, you can use an inadmissable heuristic.2 If you wish to reduce resources required, you can cache common path requests. If you have a problem where the path is constantly being recalculated, then you can migrate to D*. If you want every search possible to be less costly to compute while still being optimal, you have to do something different. Specifically, you need to reduce the search space.3 ...

March 1, 2025 · 7 min

Visualizing Hilbert Curves With Raylib

In my most recent post, I showed how to implement Conway’s Game of Life in C++ and visualize it with raylib. This post is of the same kind, except we are going to visualize Hilbert Curves with raylib. However, this post will only have an example of the final result and the code.1 I am of the opinion that that the two sources below are of a high enough quality that I don’t have anything more to add. ...

December 3, 2024 · 3 min

Visualizing Conway's Game of Life with Raylib

Introduction Conway’s Game of Life was created by John Horton Conway. The idea is simple: you have a grid of cells that can either be alive or dead. In every iteration, a new grid is made from the current grid by following a set of rules based on a cell’s neighbors. Since this is a grid, there are 8 possible neighbors when diagonals are included. The rules are the following: Any live cell with less than two neighbors dies. Any live cell with two or three neighbors stays alive. Any live cell with more than three neighbors dies. Any dead cell with three live neighbors becomes a live cell. The rules are simple, but the results can be mesmerizing. However, there are more reasons to care about Conway’s Game of Life than the fact that it is nice to look at. For example, it has been shown that a turing machine can be simulated with it. It is also proof of how seemingly incredibly complex phenomena can appear from straightforward rules. ...

November 26, 2024 · 7 min