Opus 5.5 vs GPT-6.1 Sol: Can AI Build a Save System? A head-to-head test had Claude Opus 5.5 in Claude Code and GPT-6.1 Sol in Codex add save/load functionality to an existing Godot game, with each model given the same prompt and access to Flockbay's MCP-connected testing tools. Opus 5.5 finished in 14 minutes using 22 Flockbay tool calls and 67 of its own, and its work was then evaluated by saving mid-action, quitting, reloading, and comparing 124 values against an uninterrupted run. The comparison also measured file format and corruption handling, gameplay preservation, and estimated API cost. Can an AI model add saving and loading to a game that already exists, and get it right? Claude Opus 5.5 in Claude Code and GPT-6.1 Sol in Codex got the same finished Godot game, a small house with four doors, a key, a padlock, a crate and a guard on his round, and one job: F6 saves, F7 loads, and after a load the game carries on exactly as if it had never stopped. Source: https://flockbay.com/blog/opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game/ https://flockbay.com/blog/opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game/ · Updated 2026-10-10 First, how shipped games save: a typewriter in Resident Evil 2, a checkpoint in Halo: Reach, a quick save in Half-Life 2, and what a good save and a bad one look like. Then each model's work was tested the same way: save in the middle of things a door mid-swing, a padlock falling, the guard in a doorway , quit, load, and compare 124 values against the same game left running. Plus seven presses in a row, and a save file cut in half. The exact prompt both got: This is a small first-person Godot game that already works: a house with four doors, a brass key, a padlock, a wooden crate you can push, and a guard who walks a round through the house, opening doors and closing them behind him. The house is built from code when the game starts; the code is in the game folder. Read it first. Then add saving and loading. F6 saves the game and F7 loads the last save, at any moment and as often as the player likes, and a line on screen says when the game has been saved or loaded. A save survives quitting: after the game has been closed and started again, F7 brings the saved game back. A load puts the whole game back exactly as it was at the moment it was saved, so that what happens next is what would have happened if it had never stopped. If there is nothing to load, or the save can't be read, the game says so and carries on. Don't change how the game plays, looks or sounds apart from that. Run and test the game only through Flockbay's tools: flockbay play, flockbay run headless, flockbay script errors, flockbay game input, flockbay game get, flockbay game set, flockbay game screenshot, flockbay last run and flockbay stop. Don't start Godot from your own shell, and if one of those tools can't do something you need, say exactly what was missing in your handover. Test your own work, fix what you find, and hand it over when you think it's done. What comes back: of everything in the house that can change, how much is right after a load, in the same session and after a quit. What happens next: the doors, the guard and the crate after the load, against the game that never stopped. What the file is: where it is written, how big, in what format, and what the game does when it is missing or damaged. Whether the game is otherwise the game it was. What it cost: tokens, calls, time, and the estimated API bill. Claude Opus 5.5 ran in Claude Code for 14 minutes on the prompt above, with Flockbay’s tools connected over MCP: 22 calls to Flockbay’s tools and 67 to Claude Code’s own. Every call, from the run’s transcript: | Tool | Calls | |---|---| | Edit | 31 | | Bash | 23 | | flockbay run headless | 9 | | Read | 9 | | Write | 4 | | flockbay game input | 3 | | flockbay game get | 2 | | flockbay play | 2 | | flockbay script errors | 2 | | flockbay stop | 2 | | flockbay guide | 1 | | flockbay last run | 1 | The first check that failed was flockbay run headless on res://tests/save tests.tscn. The lines it returned that name the problem: 3 ERROR res://tests/save tests.gd:133: Parse Error: Cannot infer the type of "before" variable because the value doesn't have a set type. 5 ERROR res://tests/save tests.gd:226: Parse Error: Cannot infer the type of "before" variable because the value doesn't have a set type. 7 ERROR res://tests/save tests.gd:235: Parse Error: Cannot infer the type of "d" variable because the value doesn't have a set type. 9 ERROR: Failed to load script "res://tests/save tests.gd" with error "Parse error". The next edit Claude Code made after that check, through Edit: js - var worst := 0.0 - var worst at := -1 - var worst col := -1 - for i in n: - for j in first i .size : - var d := diff first i j , second i j - if d worst: - worst = d - worst at = i - worst col = j - var info := "worst difference %s at frame %d, column %d" % worst, worst at, worst col - if worst at = 0: - info += ": %s vs %s" % first worst at worst col , second worst at worst col - check name + ": after the load the game plays out as it did after the save", worst < 1e-4, info + var worst := 0.0 + var first off := "" + for i in n: + for j in first i .size : + var d := diff first i j , second i j + worst = maxf worst, d + if d = 1e-4 and first off == "": + first off = "; first off at frame %d, column %d: %s vs %s" % i, j, first i j , second i j + check name + ": after the load the game plays out as it did after the save", worst < 1e-4, + "%d frames, worst difference %s%s" % n, worst, first off Lines 105 to 137 of 283, from the game folder at the end of the build. check name + ": loaded", saver.load game check name + ": notice says loaded", main.hud.last notice == "Game loaded." var second: Array = await record n Every count, state, flag and text must be the same on every frame. A position, angle or timer may differ by float noise: the physics engine solves contacts in an order that depends on its own history, which no save can carry, so a body touching two things at once can come out a hair different fresh starts of this game differ the same way . var worst := 0.0 var exact := n var discrete := "" for i in n: for j in first i .size : var d := diff first i j , second i j if d 0.0 and exact == n: exact = i if d == INF: if discrete == "": discrete = "; frame %d, column %d: %s vs %s" % i, j, first i j , second i j else: worst = maxf worst, d check name + ": after the load the game plays out as it did after the save", discrete == "" and worst < 0.01, "%d frames, identical for the first %d, worst float difference %.6f%s" % n, exact, worst, discrete func press action: String, frames: int - void: Input.action press action await frames frames Input.action release action --- scenarios --- Download Flockbay free: Built in Flockbay, a free AI game maker built on Godot. https://flockbay.com/free-ai-game-maker/ https://flockbay.com/free-ai-game-maker/ Related: The doors episode: where this house was built https://flockbay.com/blog/opus-5-5-vs-gpt-6-1-sol-the-door-problem-in-godot/?utm source=devto&utm medium=syndication&utm campaign=blog-opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game , How to make games in Claude Code https://flockbay.com/how-to-make-games-in-claude-code/?utm source=devto&utm medium=syndication&utm campaign=blog-opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game , How to make games in Codex https://flockbay.com/how-to-make-games-in-codex/?utm source=devto&utm medium=syndication&utm campaign=blog-opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game I make Flockbay, a free AI game maker built on Godot. The original is on flockbay.com https://flockbay.com/blog/opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game/?utm source=devto&utm medium=syndication&utm campaign=blog-opus-5-5-vs-gpt-6-1-sol-add-save-and-load-to-a-godot-game .