cd /news/artificial-intelligence/playing-contra-with-decision-models · home › topics › artificial-intelligence › article
[ARTICLE · art-158238] src=morethanamachine.com ↗ pub= topic=artificial-intelligence verified=true sentiment=· neutral

Playing Contra with decision models

A fine-tuned Laya Multilingual model (322 million parameters) cleared the first level of NES Contra, boss included, in 69.40 game seconds, according to a write-up by Nishaanth Reddy, falling just short of the 68.40-second run by hosted Jev that he was trying to beat. Reddy trained Laya and Qwen3.5-4B on two DGX Spark machines using decisions from Jev, and the frozen Laya checkpoint cleared 3 of 5 final runs on 8 October 2026, with two ending in game over. A separate GPT-6 Luna attempt through Codex produced only partial runs, with a median decision call of 5.26 seconds to choose an action lasting about 0.10 game seconds.

by read3 min views37 publishedOct 8, 2026
Playing Contra with decision models
Image: Morethanamachine (auto-discovered)

By Nishaanth Reddy · · updated After trying decision models in Doom, I wanted one to finish the original NES Contra’s first level, boss included. Fine-tuned Laya got through in 69.40 game seconds. My saved Jev run took 68.40. Close, but I haven’t beaten it.

The four panels show Jev, Qwen and Laya’s best development run, plus Laya’s first failed final test. Settings differ across controllers. Playback follows game time, with decision s removed. Laya’s 69-second clear took 6 minutes 18 seconds to run.

The sidebars show the last reply’s top three action scores. These aren’t calibrated odds of success. Call times include network latency.

[00] Controls #

Jev scores a set of possible answers. I gave the controller 12 actions, including running, jumping and firing. Each choice lasts six frames.

The models read player, terrain and enemy data from game memory. They also get emulator previews of each move, which is a lot of help. Shooting actions pulse the fire button at 10 Hz. The verified clears use no cheats, continues or human takeover.

I checked each clear by replaying the saved button inputs and confirming boss defeat followed by entry into Stage 2.

[01] Training #

I fine-tuned Qwen3.5-4B on one DGX Spark and Laya Multilingual, with 322 million parameters, on the other. Qwen continued an existing low-rank adapter (LoRA). All training and local-model inference ran on the Sparks.

Hosted Jev supplied training decisions, including its 68.40-second run and labels for states where the local models got into trouble. I kept development and final test episodes out of the training updates. Jev itself was unchanged.

One mistake was in the loss function. It punished a move for a death predicted 39 frames later, even though the model could choose again after six. I shortened that penalty to the six frames the action would actually run.

[02] Results #

These are selected successful runs from different development settings, so they aren’t a matched benchmark. Elapsed time includes decision waits and emulator work.

Local recordings, 7–8 October 2026.

Individual recordings #

A later Qwen checkpoint kept retreating at the boss and lost both development games. The video uses the earlier checkpoint that finished.

Laya then cleared 3 of 5 final runs with the checkpoint frozen. Each used a different starting delay on the same stage. Two ended in game over. The 69.40-second development run isn’t in this set.

Five final attempts, 8 October 2026.

I’d work on keeping it alive across more runs before trying to shave off another second.

[03] The Luna runs #

I also tried GPT-6 Luna through Codex using my ChatGPT Pro subscription on 7 October. I built a separate Decisions API adapter, but never made a live call through it. The saved gameplay came through Codex.

Attempt Decisions Game time Outcome
Integration check 10 1.00 s Stopped at the test limit
First longer attempt 8 0.80 s Request timed out
Second longer attempt 54 5.39 s d at my request

The longest attempt saved 324 frames. Its median decision call took 5.26 seconds, including Codex overhead, to choose an action lasting about 0.10 game seconds. The saved replies contain a chosen move without action scores.

These are partial runs with no verified stage clear or full video. They aren’t included in the clear-time charts or the four-panel recording.

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @laya multilingual 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/playing-contra-with-…] indexed:0 read:3min 2026-10-08 · —