Turing Complete cover
Turing Complete screenshot
Linux PC Mac Steam
Genre: Puzzle, Simulator

Turing Complete

Where is the patch?

A lot of really hard work has gone into the next upcoming patch. It has taken a long time to get this one ready though (and it still isn't done yet), so some new players are asking if the game is abandoned. It certainly isn't!

Here is a quick preview of what is going on behind the scenes:

Verilog export added

This update brings a verilog exporter to the game. Verilog is an industry standard hardware description language. With your favorite architecture exported to verilog format, you can theoretically simulate it with other simulators, simulate it on an FPGA (basically circuit simulation hardware) and presumably even get it produced as a chip if you can afford it. However if you are excited to try this out but don't have experience with industry tools, be warned that they are far from as polished from an ease of use perspective, as games like this are. Things can be painful to set up sometimes.

In other news, here are some of the things that were added since last update:
- Added a "Ticks Per Second" counter
- Added UI scaling
- Improved multi select
- Enabled reordering of the left side IO list by drag and drop
- Added bidirectional pins and tri state pins to that IO list
- Deleted the Stack component, created a new version of the "Negative numbers" level and more small iterations like that.
- Also I fixed a ton of long standing bugs

At the moment I am working on improving the programming language that the levels of the game are defined in. Once its updated, players will be able to write and share their own levels / level packs (with full server verified scoring), which will be very exciting. This might take a while though and it is hard to predict exactly how long, since I want to try to do some things I don't have much experience with. I will post more when I figure it out.

Update note

Color blind mode was finally added. The red "OFF" color is replaced by purple, since green / purple should be differentiable for all major forms of colorblindness. Also the purple is brighter so it can be distinguished from contrast as well. Color blind mode can be enabled it in the options menu.

If you have colorblindness, let me know how well it works!

The schematic hub is live

Check out the schematic hub, it is finally live and there are already a few really cool things uploaded.

Players who have 10 total upvotes or more between all their uploads on the 10th of August will get a badge on their profile.

Upcoming new feature - Schematics hub

It is finally time to add the feature that I have earlier referred to as "sharing". This will be in the form of an in game interface called the Schematics Hub, where players will be able to upload architectures or custom components and explore what others have uploaded. Players will be able to upvote, downvote or comment on other architectures and custom components.

You can expect this update within 1 or 2 weeks. After it has released, there will be a limited time opportunity to earn a new badge, more about that here:













I originally announced that I would be working on this new feature a couple of months ago, but the preparations for it ended up taking a long time. Specifically, I wanted to make an effort not to break shared schematics, so I ended up spending a lot of time agonizing over the details of many of the components. As an example of how far in the weeds I went to try and get everything right, I ended up creating a custom font (with the help of some community members) for the console, so that I wont have to break ascii art in the future. The most time consuming components to get right were the network component, the console and the different RAM options, which ended up taking about one or two weeks each. They were time consuming, not because their implementations were difficult, but because I learned something new after each implementation that made me want to revisit how they worked.

In any case, I can't 100% guarantee that I wont break working schematics from when the Schematics Hub goes live, but I do feel fairly optimistic about it.

New soundtrack!

Turing Complete now has a new synthwave soundtrack. As with all music, not everyone is going to like it but I personally can't stop listening to it!

You can also find it on Spotify:
https://open.spotify.com/album/1NV5KxX785RrwA5RWIz0j8?si=LlUK4wveTpaMeBT9Mh8r1g

Patch notes

The following was done since the realism patch 3 weeks ago:

- Fixed levels, scores, achievements and other things that were broken as a result of the realism patch.

- 16 bit and 32 bit components were introduced, as well as a 2 bit decoder and word sized NAND, NOR and XNOR.

- The component menu was reworked which was needed to accommodate all the new components. Custom components in the menu are now nested according to the players save folder structure.

- The old 64 bit RAM was replaced by 3 new RAM components, which all have their cost scale with their configurable size. The first RAM has a high gate cost, the second has a high delay cost. The third has a high delay cost, but its delay is amortized over several ticks. This means it effectually adds very little delay to the circuit, making it cheap in both gates and delay, but reading from it takes several ticks to complete. In future levels, more advanced score optimizing builds will likely use a slow cheap RAM for main memory, but cache results with a smaller fast RAM. All 3 RAM components have configurable size and word width.

- ROM was added. This component can only be written to in the sandbox, but its memory is not reset on level change or reset. It can be used for lookup tables in scored levels (where you cannot write to it). For creative builds that don't care about scored levels, this component can also be used as a hard disk in the sandbox. Like the RAM, the ROM component has configurable size and word width.

Embracing realism and short term roadmap

For a while now I have been working on removing some of the common critiques people had regarding the realism of the game. The main changes have been requiring components to be powered, adding latches and the change you can watch explained in this video.

[previewyoutube="THkYbpz3YEE;leftthumb"]










It is in a video format, because I wanted to explain the changes thoroughly and I fear the blog post would have been too long.

Because I wanted to announce this large change properly and not have players guess it ahead of time, I wasn't able to really let players know I was working towards this goal of realism and why. But since the cat is now out of the bag, I am excited to once again be able to share the short term roadmap for the game.

With this change, the realism modifications I wanted to make are pretty much done (there may or may not be an option for having an explicit clock at some point, but this would not affect scoring and might be better suited for user generated levels). The next goal is to finally implement in-game sharing. I imagine 3 types of sharing.

1. Architectures: These would be fully fledged machines you can download to your own computer. I imagine this being useful for fantasy game consoles, real world architectures or community architectures. Other players will then be able to share programs for each architecture. So user A can make a game for the fantasy console of user B and so on.

2. Demos: Read only schematics for neat stand alone programs, like the game of life, a mandelbrot explorer or games.

3. Custom components: A way to share custom components or packs of custom components.

All this would take place through in-game UI and there would be upvotes / downvotes and comments. The magic internet points earned by player uploads will be visible on their profile (but you can't get downvoted below 0, so no need to worry about losing points).

In order to get this far though, there is a bunch of stuff I want to do first.

First of all, I want to tie up some loose ends. I need to actually implement the change mentioned in the above video, then fix a bunch of small UI glitches and quality of life issues and I want to finish translation support.

Secondly, I want to get to a stable point in terms of the basic components supported in the game. My opinions of many of these things have stabilized I think and I would like to make an honest attempt at never having to break things that have been committed to the sharing platform. So first I will add a lot of missing sandbox components, like more kinds of RAM, displays, networking and sound. The way the players should interact with these things will take some time to settle, so I will prioritize adding this first. I used to think that I should give players as much power as possible, but my opinion has been refined a bit. Providing players with finished building blocks for everything is like giving players the most powerful weapons in a first person shooter game. It makes them feel powerful but removes a lot of gameplay and fun. Instead I should provide players low level control of the IO of their computer, so they can build anything they want. I also want to have just one easy to understand way to do things and it is OK if it means it takes a bit of work to do common things, as long as it is not extremely tedious. This is also why the Random component was removed.

While we experiment with the sandbox components and give their interface some time to settle, I will add 16 and 32 bit variants of the 64 bit components. I like simplicity and you can use the 64 bit components for 16 or 32 bit operations, by simply ignoring the high bits (for all components except signed less). Further there is a neat symmetry of the byte maker taking 8 bits to produce a byte, while the 64 bit maker takes 8 bytes. However, actually watching a stream of someone building a 16 bit computer it became clear that it is a bit awkward and it just doesn't feel right. I can’t see myself ever supporting odd bit widths, since for speed I want all components to map to a single x86 or ARM instruction as much as possible. If you want to build a 107 bit computer, you can still do it, but simple schematics should reduce to simple machine code and if you are doing something complicated, it should be obvious from your schematic.

To support all these new components I will also have to upgrade the component menu, so it doesn't become completely cluttered.

Finally I want to mention that I had originally planned to bring back the old architecture scoring "perf score" system around this time, but thinking about it more, saving this effort in order to get to user generated levels faster is the better plan. User levels is the most important missing feature (although it will take much work) and users will likely create a better architecture scoring systems than I could.

Patch notes

Components now have to be connected to an input to simulate.

Watched state had a major upgrade. In the component factory, use a "Watchable state" component to decide what state should be exposed on the custom component. This also adds a state indicator visually on the component. With this you can watch multiple different states inside a custom component or watch deeply nested state. You will have to reconnect your watched state the first time you play this patch.

Rendering was made a lot smoother, supporting large circuits.

The max zoom level was increased.

The buildable area of the architecture map was increased 4x.

Save files compressed by 40% by storing wires in a different way

Assembler supports octal numbers

Lots of little bug fixes.

Console and FileRom have been added

This patch brings the file rom, while the console was added a few days ago.

The console is the first of a couple of display components that are planned. It allows you to print colored characters to a 80x24 display. You can use this for displaying text, creating games or video.



The file ROM loads bytes from any file on your computer. This can for example be used for importing large amounts of data, building file format parsers or using an external assembler.

Both components are unlocked in the sandbox level.