Dev log

Nocturnal Cycle - Shi no Yoru · Epic AI MegaJam 2026 · theme: Director's Cut · Nov 12-15

Two developers and an AI coding assistant built a hamster-on-a-wheel gothic castle game in three days. This is the honest version: what worked, what we threw away, and where the human steered.

The idea

Hammsing is a gnostic-Christian psychonaut hamster. He rides a hamster wheel through a castle toward a boss fight with Nyaacula, guided by Abraxas, a familiar made only of particles. "Director's Cut" is the hamster's name in the fake human world: he eats a misplaced teleport item and is pulled into the game.

Tone rules we set early: Nyaacula is not evil. Abraxas is neutral but unsettling, esoteric on purpose. No health bar; the screen darkens instead. The wheel is a found object you never keep.

Timeline

WhenWhat happened
Nov 11 nightWhisper research for voice notes. No game assets yet.
Nov 12Unreal Engine 5.9 beta connected to Claude Code through an MCP plugin. First prompt: "place a cube in the middle". Repo created. Style-sheet interview with both devs. Logo drawn as a vector, main menu built in engine. Hero art chosen from candidates.
Nov 13Moved from hosted tools to local ComfyUI (Flux.2 Klein, Wan 2.2, local voice). Fractal "save" trip effect. Intro and outro. Nyaacula and Hammsing voices in English and Japanese. Cross split out as its own asset. Castle Wall level started. 14-state animation sheet workflow.
Nov 14Cross became an engine overlay after generated clips drifted. Cave puzzle rooms rejected and replaced by story rooms. Floating island with ghost hamster audience. WASM package. Art site for voting on assets. Bosses split across the castle.
Nov 15Overnight generation run finished at 06:55. Animation sheet regenerated, hamster clips wired into the castle pawn, submission.

What worked

Unreal Engine driven by an assistant

The editor was controlled over MCP, and bigger jobs ran as Unreal Python commandlets: levels, materials, menus, the cross glow. One rule learned the hard way: commandlets only run with the editor closed.

A fully local art pipeline

Flux.2 Klein edits made keyframes, Wan 2.2 image-to-video made clips, and voice and sound ran locally too. Reference-image edits beat text-only prompts for keeping the hamster looking like the hamster. About 37 final clips came out of 233 render folders of seeds and rerolls.

Design docs before generation

The animation sheet was planned on paper first: 14 states, 23 transitions, 136 frames. Decisions were written into a table (clean coat, 15 fps everywhere, 16 columns) so the rerolls stayed consistent.

The cross as an engine effect

Generating the cross inside video clips made it drift from frame to frame and look painted on. So we generated the hamster without it and drew the glow, pulse and sparks in the engine, driven by per-frame anchor points.

Rig from the original art

Two AI run cycles failed on consistency. Cutting the hero art into parts and animating those meant every frame reused the same pixels, which solved it and gave us the first playable hamster.

Whisper as the ears

The assistant cannot listen, so generated voice lines were checked by transcription. Takes that came out as noise were thrown away.

An art site for two devs

A small LAN web tool for viewing sheets, queueing rerolls, voting on clips and voting on audio, so both of us could pick the best of an overnight run.

Two devs, one branch

Commit straight to main, fetch first, fast-forward only. About 800 LFS objects pushed without overwriting the other dev's work.

What failed

ProblemWhat we did
Hosted tools started for images and voice"dont use elevenlabs. use comfyui". Local only from then on.
First cross art "very ugly"Regenerated from final art, made a 3D version, scaled it up.
Cross drifted inside generated clipsEngine overlay with anchors.
First animation sheet "pretty unusable"Rebuilt as a reusable workflow that works for any character.
Voice clips "all just noise"Verified every take with Whisper, kept only the confirmed ones.
Sprite upside down, then mirrored; floor blown out whiteMaterial fixes in the import script.
Rain fell up and did not collide; sky too brightReworked weather, sky and the darkening vignette.
Gold material looked wrongRebuilt it.
Four cave puzzle designs rejected: too clear, not fun, not like the inspirational artScrapped puzzles for story rooms and a floating island with ghost hamsters.
Longer garden made the eyes and towers vanishFound a 100000-wide sky backdrop as the cause; reverted the expansion.
Two main menus, dead controls, no gamepadLinked menu to castle to boss.
MetaHuman from a photo; candle-hall photo scanBoth dropped. "The art is just ugly ingame."
Clips at 6 to 27 fps, coat damaged in some clips and not othersFixed 15 fps and a clean coat, then rerolled everything.
Fall poses ugly in every roundMore seeds and an image-edit model comparison. Still the weakest poses.
Image-edit model got the pose but lost the character; Klein kept the character but ignored the poseProposed a two-step pipeline; a LoRA training script was written but not run.
Zombie editor process and a forced rebootNew rule: close the editor before builds. Both game and editor targets built.
Two GPU jobs shared one base image and corrupted a clipOne GPU job at a time.

Where the human steered

"this sheet is pretty unusable. we need to fix this fundamentally as this will be used for other characters as well."
"don't you know how gold materials look like"
"fall_down is always ugly. why is this so hard to generate"
"i need the computer to be working 9 hours of generating new tries of content so we can pick the best tomorrow"

By the numbers

WhatRoughly
Commits on main15 over four days
Game C++51 files, about 11,700 lines
Python tools51
Claude Code sessions61, about 377 human prompts
Audio files96
PNG frames and art filesabout 5,000

What is still rough

Third-party content: the candle hall scan and Fab assets are listed on the submission page. Everything else was generated locally or made by us.