PostScript: Idle Frontier and on developing games with AI

ljvmiranda1 pts1 comments

Postscript: Idle Frontier and on developing games with AI

Postscript: Idle Frontier and on developing games with AI | Lj V. Miranda

Can you bootstrap your way from annotating data to training a frontier model in one thousand days? Play Idle Frontier!

Play Idle Frontier on itch.io

In this blog post, I want to share my experience developing this game with the aid of Opus 5 (which I’ll just call Claude from now on).<br>My goal is to give a tempered perspective on AI-aided game development:<br>something in between those zero-shot-three-js games that are popular recently and the no-AI-in-my-workflow crowd.<br>Note that I’m just a hobbyist game developer.<br>I learned pixel art and Godot and made four games before, but nothing too fancy.

But first, how did this game come to be?

The Idea

One of my projects during the first term of my PhD was a literature review of language model development in the context of data and compute constraints.1<br>Language models require a lot of these resources; this has been formalized into a set of scaling laws by Kaplan et al. (2020) and Hoffmann et al. (2022).<br>However, how do you build language models in environments where these resources are scarce, such as in the Global South?<br>I think this type of problem has a certain shape that can be simulated as a resource engine problem.<br>Initially, I thought of doing a card game about this, à la Blackjack, but I came across Inn Over Your Head and realized that balancing data and compute makes a perfect idle incremental game!

I believe that the “clicking” action being about annotating data is quite apt: it’s one of the few levers that you can actually control.<br>Sure, you’re gonna spend a lot of time and money if you want to annotate a huge corpus, but it’s virtually possible if you really want to.<br>Then, that’s where the research mechanic came in to ease the burden of annotation (e.g., synthetic data gives you some data), and with that, I realized that there’s a game there.

I admit that the released version of Idle Frontier is quite different from how I initially conceptualized it.<br>Here, there’s not much focus on Global South realities, as the final goal is to build a frontier-class language model.<br>I tried to steer it back by constraining compute such that you don’t have a way to earn it aside from grants, but it made the gameplay too constraining and unfun.<br>The only part that survived is the Sovereign AI grant mechanic, which gives you a trickle of compute to fulfill national objectives.<br>I might revisit this idea again in the future, but as a first pass, I’m quite happy with where Idle Frontier ended up.

Game Development with AI

In this section, I’ll talk more about my experience in developing Idle Frontiers using Claude, in the context of three aspects: programming, art, and gameplay.

Programming

Language models have been really good at coding tasks recently, and I think this is where Claude helped me the most.<br>The last time I made a game was back in 2022 using Godot 3, and in the four years since, Godot has shipped a major update.<br>In addition, I am not quite proud of my GDScript coding hygiene: most of my game dev projects have spaghetti code or random patches here and there.2<br>Working with Claude has helped me with two things: migrating my rusty Godot 3 knowledge to the new version and learning actual game design patterns.<br>Yes, I did learn a few new tricks just by reading Claude’s code!

One example of this is in my use of signals.<br>I learned that signals are now objects and we call them using await in Godot 4 instead of yield(...) in Godot 3.<br>In addition, I also learned about the event bus pattern when handling multiple signals together:

signal data_changed(total: int)<br>signal mission_claimed(mission: Mission)<br>signal grant_claimed(grant: GpuGrant)

func add_data(amount: int) -> void:<br>data += amount<br>EventBus.data_changed.emit(data)

func _ready() -> void:<br>EventBus.data_changed.connect(_refresh)

So instead of keeping track of every signal I created, I can just use the EventBus as the handler for any changes—awesome!

My workflow for Idle Frontier was to start constructing the scene in the Editor and write the functions for the interaction I want.<br>Initially, I asked Claude to help me with bugfixes and debugging, but I’ve been quite impressed with its skill in interacting with Godot (without any add-ons!).<br>In fact, some of the Screens were done by Claude end to end.<br>Although I can definitely imagine a Godot game done by Claude with minimal human input (similar to those zero-shot three-js games), there are still a lot of details that Claude missed.<br>For example, there are many moments when implementing a new feature breaks another, or like the screen has elements that are spaced weirdly.<br>What I found helpful is to always have the general “shape” or context of the codebase in your head, and let Claude implement the details.<br>The challenge usually is that when you vibe-code a lot, you lose your understanding of the organization of your codebase, and...

game idle frontier claude data godot

Related Articles