Circuit Artist DEV Blog

Circuit Artist v1.1 Coming Soon: Snail Mode, Time Travel Debugging, and Multi-Layer Circuits

Hello everyone! Development on Circuit Artist version 1.1 is underway, and I’m excited to share what’s coming before Christmas. Here’s a breakdown of the three major features I’m working on:


Feature 1: Snail Mode

snail mode button
New simulation modes

Simulation will have snail and rabbit modes. It should be just 2 buttons below the current “speed” choice buttons that appear when simulation is running.

  • Rabbit mode will be the classic one, where wires are updated all at the “same time” (ie, at the same game frame).
  • Snail mode will show the wires/nands changing progressively, where you’ll be able to see the propagation “flow” of the wires.
Wire state propagation visualisation
You can visualize wire state propagation

The initial problem I wanted to solve with this feature was the “infinite loop” situation, where wires would change state in a loop and the simulation would “crash”, providing little feedback to the player on what was the error, besides which wires were looping. With snail mode the simulation can continue so players can see what is going on, like in the example above. Now, when in rabbit mode, if a wire indeed starts looping, instead of crashing it falls back to snail mode and displays a warning to the player.

On top of that, I realised that the wire propagation animations are pretty cool and can indeed be very useful to understanding what the circuit is doing and how it works, and specially how efficient it is. Now, instead of the wire state immediately propagating to all it’s “outputs”, it needs to flow through the wire in simulation ticks, so longer wires mean more time spent in “propagation” . Nands also don’t activate immediately: they take a few simulation ticks to trigger, and if the input change in-between, it re-starts the activation countdown. I’ve added a small animation on Nands so it’s easier to follow up which ones are being activated, specially when zoomed out.

Turns out this change opens room for interesting circuit optimisation problems, that to some extent have some relation to real circuit design.


Feature 2: Time Travel

time travel icon

During simulation you’ll be able to right click to freeze simulation then rotate the mouse cursor clockwise to manually move simulation forward, or move it counter-clockwise to move it BACKWARD!

Rewinding and forwarding simulation time
Rewinding and forwarding simulation time

The motivation behind this change was that it was a bit frustrating to debug circuits during simulation and understand what was going on. Normally, one needs to pause at the exact right time and slowly move forward the simulation, and if you pass the thing you’re interested at you have to start over.

First I was thinking of adding a “step” functionality, just like software debuggers, but then I was afraid it would deviate from the minimalistic principles of the game and would look too much like “work software”, so I tried to look at other ways to achieve that. Then I took inspiration from video: when you want to see things in detail you just drag back and forward, so I tried to go in that direction. The key challenge was to implement a reversible simulation engine, but since I was already reworking the engine for the snail mode I went for it.

I managed to implement the reversible system using a similar pattern that I use for the drawing “undo” mechanism with a circular buffer for patches. Regarding UI, I tried to add something similar to a video, with an horizontal bar that the player could drag back and forth, but the problem with that was that the simulation doesn’t have beginning and end so it’s tricky to move back and forth, and if you do like a video streaming, it also gets weird because as simulation goes on, the resolution gets narrowed, so you wouldn’t have the same control at the start or late in simulation. Besides, there are currently two time resolutions in the game: in snail mode you want to advance by ticks and in rabbit mode you want to advance by clock cycles.

This will have impact with the lua scripts API, because each “sub-circuit” will need to be able to describe its internal state for forward/backward update instead of only-forward as before.


Feature 3: Layers

layers feature icon

You’ll be able to add layers to images. NANDs will still only be allowed on the bottom layer. (compatible with selections: you’ll be able to select and copy-paste multi-layer selections)

I’ve been planning on adding layers for a while, inspired mostly by real chips, but after implementing snail mode I realised that wire routing was taking a significant part of the canvas and it was slowing everything down big time, since now the longer the wire is, the longer it take for the information to propagate, so it seemed that layers were essential to have more control on circuit optimisation.

Storage Solution

For the storage, I tried animated PNG that works a bit like GIF but it’s still a png, but it seems support is very limited and I couldn’t find a largely used library that supported it. Then I tried GIF but itself also has limitations like limited palette, and I would need to handle both GIF and PNG format, that would be a mess. I also tried adding meta information on the PNG but that also was a bit painful, I had to bypass raylib’s image interface. Finally I found a very easy way to do that: I just stack the images vertically in a single PNG and use the first 5 pixels alpha channels to store meta information. Since circuits don’t use alpha channels, when I export a PNG they’re normally all hardcoded to 255 (full opaque), so instead I just use the first 3 pixels alphas as “magic bytes” to say it’s a layered image (like 254, 252 and 253 alpha), the fourth to store the serialisation version and the 5th pixel to store the number of layers (example 255-2=253 for 2 layers).

Visualisation Challenges

The second major problem was the visualisation. To some extent, during simulation it’s acceptable to have things hidden and scrambled, because you can still see things working, but during edition it’s more complicated: pixels by default stack on top of each other, and since everything is supposed to be colourful, it becomes very hard to see other layers when you’re editing one. I’ve tried adding a post-processing to make adjacent layers “hollow” with some patterns a bit like real EDA software do, and it looks acceptable. I tried doing the full-EDA approach with everything hollow+pattern but I found it killed the “pixelart” vibe. Also, in EDA software it seems people often edit all layers at same time (ie they can interact/modify each thing appearing on screen), while in CA the idea is to edit one layer at a time (we have “dense” pixel data while they have “sparse” structured data). I’m still trying to improve it, maybe I’ll add a few toggleable extra modes to try to help visualisation.


Conclusion

That’s it for patch 1.1. I’m also exploring a few other additions like a progressive campaign mode and blueprinting system if time allows.

I’ll be posting more technical deep dives on the reversible simulation engine and layer rendering system as I work through them. If you have feedback or want to discuss these features, join the Discord! You can also wishlist Circuit Artist on Steam if you’d like to be notified when v1.1 is released before Christmas.

2 responses to “Circuit Artist v1.1 Coming Soon: Snail Mode, Time Travel Debugging, and Multi-Layer Circuits”

  1. FUI Avatar
    FUI

    Hello. I have been playing and fallen in love with the game.
    There’s been a problem. As of 1st of May, 2026., i can’t no longer launch the game. I’m using Windows 11. PLease help
    Best regards.

    1. lets_all_be_stupid_forever Avatar
      lets_all_be_stupid_forever

      Hi!
      Are you the one who posted on discord? I’ve put a reply there.
      I’ve tried a few things, you can please check again.
      Otherwise, I would need some error message to see what is going on 🙁 .

      You can try to run it from the game directory: You can open via right click on steam too, then Manage -> Browse local files. This will give you the directory of the game. Then on the terminal (cmd.exe for example), you can go to the bin/ folder and launch the game (it needs to be from the bin/ folder). cd bin, then: ./ca.exe (or ./ca.exe -console

Leave a Reply

Discover more from Circuit Artist DEV Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading