Back in June I introduced Ka'Zhurn as a story: a farmer, a quiet morning, smoke on the horizon, and something very old arriving at the edge of his village. That was the Inkborne interactive novel. Ka'Zhurn: The Unbinding is the same story, told as a mobile-friendly action RPG that you play from above. It is all story and gameplay. There are no in-app purchases and no intrusive ads.
This post is a proper reintroduction, with screens of the boss himself. It is also about a step I have been waiting a long time for. The game's characters came out of Meshy, and this week Claude Opus 5.5 filled the gaps Meshy left. It made the farmer a brand-new animation from scratch, and it cut his model down to a size a mid-range phone can carry without changing how he looks while you play.
The game
You play the farmer. The world streams in around you as you travel, and you build him up across three skill trees, Divine, Mortal and Blood, gather followers, gear up by faction and work through quests and wave fights. It is built for phones first, with a Windows version alongside.
Ka'Zhurn first turns up on the farm in the opening act, long before you are anywhere near ready for him. The real fight comes much later.
Two years, on and off
I have been working on this game on and off for about two years. Mostly off, honestly. In between, I built the smaller games you can play here on legitsauce.com, and each one taught me something about making games. Lately they have also taught me how to work with AI models that now write much of my game code.
That last part has changed everything about how Ka'Zhurn moves forward. Before AI, a feature in this game took me weeks of free time. Now I can get the same kind of feature done in literally hours.
Here is the example that still makes me laugh. When you pick up an item in the game, your character wears it: the helmet goes on his head, the armour on his chest, the weapon in his hand. I toiled for days of my free time trying to get that as right as I could, and in the end I pushed it to the side. AI coded it up and made it look correct with a few minutes of prompting.
The story scenes were the other big wall. The exact beats of the story were hard to build correctly in Godot's editor, where I was sequencing everything by hand on the animation timeline. Now I give AI the script and it handles the whole thing, including how the camera pans during the quick cutscenes.
Screens from the boss fight
These are real frames from the game engine, using the game's own models, its own animations and the exact camera angle you play with. I did stage them. I placed the farmer and Ka'Zhurn, froze each of them on a frame of one of their attacks, and added a low evening sun, because the game's lighting pass has not happened yet. Opus wrote the small tool that does this, and it only reads the game project, so nothing in the game had to change to take them.
What Meshy got me, and where it stopped
The game's characters started in Meshy, the farmer and Ka'Zhurn included. Meshy gives you a textured model, a skeleton and a big library of ready-made animations, and that is how the game became playable at all. I am grateful for it. It also left me stuck in three places.
Weight. The player's farmer is 34,687 triangles with a 2048 pixel texture. Ka'Zhurn is 37,612. That is fine on a gaming PC and far too much for the kind of phone this game is for.
Animation. If a move is not in the library, you do not get it. I wanted the farmer to reach out and lay his palm on things: a door, a shrine, a frightened animal. Nothing in the library does that.
Fit. Looking closely, the animations in the game were made for a body with different proportions. One of them shortens his forearm by a quarter while it plays, and at least one scales his whole skeleton up by 18 percent. In one of the exported model files, the animation names did not even match what the animations do. The one called "Running" is him lying down asleep.
This week I worked with Claude Opus 5.5 in Claude Code, on my own PC, with Blender and Godot. Everything below came out of that session.
A new animation, made by Opus
The brief was simple. Reach out with the right hand, press a flat palm against something at chest height, hold it for a beat, and come back. It had to read clearly from above, and it had to be built on the farmer's existing skeleton so it plays alongside every other animation in the game.
Opus did not keyframe it by hand. It wrote the animation as a Blender script. The farmer starts in a relaxed stance. The script works out where his wrist has to go, a point in front of his shoulder at 80 percent of his arm's length, bends the elbow the way an elbow bends, and turns the hand so the palm faces the surface with the fingers up. His skeleton has no finger bones, so an open palm means the whole hand turned flat, which is plenty at the size you see him. A small lean through the spine and neck sells the reach. What comes out is 2.4 seconds of ordinary animation data, nothing special for the game to run.
It took six attempts.
- The first two started him from one of the game's idle animations, and he came out mid-lunge. Those animations were made for the other body proportions.
- The third leaned him backwards. The copy of the game's animations it was working from had the whole character turned around 180 degrees, and the maths was done in a space that included that turn.
- The fourth put his hand straight through the surface by about ten centimetres. Blender's arm solver aims at the tips of the bones, and the tips of imported bones are only guesses.
- The fifth tried a different setting on the same solver and missed by the same amount.
- The sixth dropped the solver and worked the arm out directly from where his shoulder, elbow and wrist really are. The wrist now lands on the target exactly.
Making it phone ready
A phone has to hold every model in a scene in memory and draw every triangle of it, many times a second, without cooking the battery. So the goal here is two things at once: spend as few triangles and as little texture memory as possible, and make sure every triangle that is left still faces the right way. The second part sounds like a detail. It is not, and it turned out to be the most important lesson of the week.
I set one rule: judge everything from the game camera that is actually used. This means the model can look terrible close up or from angles the game never uses, and still be identical when viewed from the top down.
Starting small: a barrel
First, where the barrel came from, because Opus did not sculpt it by hand. It was generated entirely offline on my own PC with open models, and Opus wrote the scripts that ran each step and fixed things when a step went wrong. A text prompt went into Stable Diffusion XL, which drew a concept image of the barrel on a white background. Tencent's Hunyuan3D-2 turned that single image into a detailed 3D model of about half a million triangles. Blender, driven by Opus's scripts, cleaned it up, cut away a floor slab that had come from the shadow in the concept image, reduced it to 3,000 triangles, unwrapped it and baked the fine detail into a normal map. To paint it, Stable Diffusion XL drew the barrel again from five angles, kept to its exact shape by a depth guide and to the concept's look by a style reference, and those five paintings were projected onto the model and merged into one texture. No Meshy and no cloud service: about four minutes on my graphics card from prompt to finished model.
Opus rebuilt the barrel at eight sizes, from 2,000 triangles down to 150, copied the same texture onto each, rendered them from game-like angles and measured how far each one drifted from the original. The texturing is not perfect, as you can see on top of the barrel, but it is good enough for a B-rated mobile game at this early stage. Down to about 350 triangles it is hard to tell them apart even up close. Below 250 the rim starts to show corners. At 300 triangles with a 512 pixel texture it looks right from the game camera. That is a tenth of the triangles and a quarter of the texture memory, and the file dropped from 2.7 MB to about 540 KB.
It also tried a second way of reducing the model, one that rebuilds the surface out of evenly sized squares. It lost at every size. Even squares waste triangles on flat staves that need almost none.
The farmer
Characters are harder, because they bend. This is the process Opus settled on.
- Keep the skeleton. Only the mesh gets reduced. The bones, their names and their weights stay, so every existing animation, the animation tree and the attachment points in his hands keep working.
- Weld the seams. The imported model arrives cut into hundreds of pieces along its texture seams. They get joined back into one closed surface before anything else happens.
- Reduce to the target number of triangles.
- Point every triangle outwards. Each remaining triangle is compared with the original surface underneath it, and any that face inwards are flipped back.
- Tidy the skin. Every point on the body keeps at most four bone influences, which phones handle well.
- Shrink the texture from 2048 to 1024 pixels and repaint it through the new mesh, so every seam has colour on both sides.
- Judge it moving. Nine poses from the game's own animations, including walking, running, attacking, being hit, picking something up, waving and dying, each rendered from the front and from above and compared with the original.
| Meshy original | Phone | NPC | |
|---|---|---|---|
| Triangles | 34,687 | 5,000 | 3,500 |
| Texture | 2048 px | 1024 px | 1024 px |
| File size | 5.4 MB | 1.5 MB | 1.4 MB |
| Outline match | 100% | 99.0% | 98.7% |
| Colour difference at phone size | 0 | 3.2 | 3.9 |
That is seven times fewer triangles, a quarter of the texture memory and well under a third of the file size. The colour difference is measured on a scale where 255 would mean every pixel went from black to white, so a 3 is well below what you can see on a phone screen. The farmer you play as gets the 5,000 triangle version. Villagers and enemies that share his skeleton can use 3,500.
Every triangle facing the right way
A game engine only draws and lights the front of a triangle properly. A triangle that faces inwards gets lit from the wrong side and shows up as a dark spot, and a gap between two triangles lets you see straight through the character. At 5,000 triangles there is nowhere to hide either one. In Blender's own renders none of this showed. In the engine it did.
The first reduced farmer had dark specks all over his shirt and pinholes of light in his shadow. Opus tried three fixes that did not cure it: padding the texture, flipping inward-facing triangles and adjusting the shadows. The flipping found 100 inside-out triangles, fixed them, and the specks stayed. Then it found the real cause. The imported model was split into 364 separate pieces along its texture seams, and reducing it pulled those pieces apart, leaving hairline cracks you could see straight through. Welding the seams first closed the cracks and made the reduced model match the original far more closely. Most of what I had put down to losing triangles was really those cracks.
Even after welding, 16 of the 5,000 triangles still came out of the reduction facing inwards. The check now runs on every character, comparing each triangle with the original surface beneath it and turning back any that point the wrong way. The last step is always to look at the result in the game engine itself, from the game's camera, because that is the only place these problems show.
One more finding saved a whole texture. A normal map, the usual trick for faking detail that the triangles no longer carry, made no visible difference at phone size, so the phone version does not use one. That is one less texture for the phone to hold in memory.
The dream for B-rated games
Put all of this together and you get a pipeline I would not have believed a year ago. An AI model generates the 3D model, either an expensive Meshy version or one made offline on your own PC, the way that barrel was. Then Blender and Opus 5.5 take it the rest of the way: texture, skin, animation and a phone-sized version with every triangle facing the right way. ChatGPT Astra can help with some of it too, to a lesser extent.
For the kind of game I make, which is B-rated games made by one person, that is the dream. It takes the parts that used to need a team, or weeks of my free time, and turns them into an afternoon. It is not AAA quality, and I am not pretending it is. Give it five years and perhaps AAA will be on the table too.
What's next
- Put the phone farmer into the game, with a matte material instead of the shiny one he wears now.
- Give Ka'Zhurn the same treatment. He is 37,612 triangles today.
- The lighting pass. The world does not have proper lights yet, which is why these screens needed a borrowed sunset.
- More animations like the reach. It was the test case. Doors, shrines and a kneel are next.
When
Ka'Zhurn: The Unbinding is coming in spring 2029, alongside Diablo V (or whenever that turns out to be). Just in case I'm disappointed in Diablo V, I'll be able to play my own ARPG on my phone!
Wrapping up
Meshy, my own coding skills and early AI models (like ChatGPT 4) got Ka'Zhurn to playable. Now Opus is optimizing it and helping to finish the game. The story, the look and every direction call about what is good enough are still mine. I will keep posting as the phone build firms up, starting with Ka'Zhurn next.