Inspiration
Douglas Engelbart told us that machines should augment human intellect; it often feels as though we are living out the science-fiction cautionary tales in which the machines supplant our intellect. One must wonder whether the convenience afforded to young, impressionable users is worth the long-term cost of overreliance on AI tools. Shaped by Nozick's Experience Machine, Scott Alexander's Whispering Earring, and more, The Thinking Machine grapples with the ideas of these thought experiments directly; we take aesthetic cues from several indie games, most notably "Milk Inside a Bag of Milk Inside a Bag of Milk."
What it does
The Thinking Machine is a text-based game with one question at its center: If you had a machine that always knew what you should do, would you use it? Rather than use point-and-click gameplay, we chose to actualize this question through a newly developed controller that puts this Thinking Machine directly in the player's hand. By bridging the game's world with our own, we draw an explicit link between the careless use of technology in-game and the ease with which this carelessness extends into the real world.
How we built it
We first mapped out The Thinking Machine's narrative in Twine, a tool specially designed for scripting interactive stories with branching pathways and endings. Once we had settled on the game's story, programming began.
The game was primarily developed using Godot, an open-source game engine which our team had preexisting familiarity with. Godot provides immense flexibility and very low overhead compared to other mainstream game engines, so it is well-suited for games requiring low-latency communcation to hardware components. Dialogue systems were implemented using the Dialogic library. Our hardware components, including an Arduino Uno R4 Wi-Fi, an LCD display, a gyroscopic sensor, and a push button, were all provided on-site by MLH. Software for the Arduino was written in the Arduino IDE, and interfacing with the parts required the use of several libraries.
Our development process also utilized Google's Antigravity IDE for assistance throughout the development process. There is a high degree of complexity involved in communicating through the game engine over networks to our controller, and Antigravity's Agentic AI assistance and code auto-complete made the process significantly smoother and simpler.
Challenges We Ran Into
Establishing reliable UDP communication between the Arduino Uno and Godot was our most significant difficulty, especially because this communication was handled wirelessly. Ensuring that the Arduino and the game blocked each other — i.e., ensuring that players only had to focus on one at a time — was essential to creating a gameplay loop with a natural feel that supported the story of the game. While setting this up, we ran into a number of issues, including losing packets, formatting them incorrectly, unpacking them incorrectly, and taking signals from the packet and implementing them in the game's broader logic, which is usually kept separate by Godot.
Accomplishments That We're Proud Of
First and foremost, we're incredibly proud of the game's narrative. The overuse of AI is something we are all seriously concerned about, and being able to express our feelings on this issue in a way unique to us had made this development experience very fulfilling.
We are also extremely proud of the way in which The Thinking Machine ties together traditional game development with embedded systems and networking. Although we were worried about our controller feeling awkwardly integrated into the project, we find that it lends itself to the themes of the game seamlessly. Moreover, we are proud of the quality of the integration! The controller has near-zero latency, making it comparable to any major gaming system users are familiar with, and the loss of packets has also been virtually eliminated.
What we learned
Given that some members of our team were already experienced with Godot, and other members with Arduino, this project provided a very fun opportunity for members to mentor one another in their tools. By keeping the length of the game relatively short, we were able to give the team time to develop at a learning pace. This allowed members who had never coded in C# to learn many of the fundamentals of C# with Godot, including scene creation, linking scripts to signals, creating dialogue with Dialogic, and integrating basic networking protocols. Similarly, members less familiar with Arduino got to learn about the basic structure of an Arduino program, how to use the Digital I/O and I2C pins on an Arduino, and how to utilize multiple peripherals simultaneously.
What's next for The Thinking Machine
We would love to distribute The Thinking Machine to more players worldwide! However, we recognize that most players would be unable to recreate the controller, even with the code. As such, we are interested in exploring how we can develop a purely digital version of the game that still maintains the impact of the original experience.

Log in or sign up for Devpost to join the conversation.