For Jack · from Chris · Carry the Fire

A new player, new weapons,
and the torch

A realistic player character with its own animations, three new weapons drawn after the 1998 game's, and every flag drawn as a burning torch. All render-side: the sim and the wire are untouched.

Branch chris/scout-player · 11 commits on top of master (19e853a) · not pushed yet · October 2026

1 · CharacterThe Avatar

A new skin (the fourth, id 3; nothing in the protocol moves). Realistic proportions instead of KayKit's short, wide bodies, on KayKit's own 23-bone skeleton, so every system that plays a clip on a body plays it on this one. A navy suit, white plates, a glowing visor and a twin-tank jetpack. All its colours sit in one 64 × 64 palette image, with red and blue team versions; in the arcade everybody wears it in their team's colour.

The Avatar from the front, holding the chaingun
FrontStanding, the chaingun held in both hands.
The Avatar from the side
SideThe weapon forward at the chest, the stock back under the right arm.
The Avatar from behind, showing the twin-tank jetpack
BackThe twin-tank jetpack; in the game its flames come out of the tanks' nozzles.
Three Avatars: red with the disc launcher, navy with the chaingun, blue with the grenade launcher
The team coloursRed, as made (navy) and blue: the same body, its palette swapped. Each holds one of the three weapons.

2 · MovementAnimations: a two-handed hold on every frame

Seventeen clips. They start as KayKit's free (CC0) animations, retargeted to the Avatar's proportions, with the arms brought in (KayKit holds them wide for its fat bodies). Then both arms are re-solved on every frame so the weapon is held the way a shooter's player holds it: the right hand on the grip, the left under the foregrip, the weapon forward at the chest. It rides the body's bounce and lean but not KayKit's sideways stance twist, and the chest turns back to face the aim while the legs strafe or back away.

The Avatar running with the chaingun, from the side
The runAll three weapons share one foregrip position, so the one hold fits each.
The Avatar holding the chaingun in the game
In the gameThe same hold on a blue Avatar in a match.

In the game now

Idle, run, walk backwards, strafe left and right, crouch (skiing), in the air, landing, two deaths.

Shipped for later

Two hit reactions, four dodges and a throw. They hold the weapon too; the throw will want its own pass before it is used.

Checked

Every other frame scanned for the weapon passing into the body: only the right fist round the grip touches it (about 1 cm), and about 4 cm into the arm for a moment in one death's collapse.

3 · LoadoutThe arsenal

Three weapons of our own, made after the look of the original game's (nothing of theirs is in them). They replace the KayKit crossbows and shotgun for every body and in first person. One file and one material: the colours, metal and glow sit in 64 × 64 palettes, as the Avatar's do, so each weapon draws as one part. Each lies as the KayKit ones did (the grip at the origin, forward +z), so every hand and the first-person view took them without change.

The disc launcher
Disc launcherLong and white: a blade along the top, yellow chevrons, blue light strips, and a slot at the front where the live disc spins.
1,608 triangles1 part
The chaingun
ChaingunBoxy and white, a dark ribbed receiver and a carry handle; its six barrels are their own part, so they spin when it fires, the muzzle flash at their tips.
1,708 triangles2 parts: the barrels turn
The grenade launcher
Grenade launcherDark gunmetal: a heavy barrel with a flared muzzle, vents down the side, and a drum underneath with glowing shell tips.
1,700 triangles1 part
The three weapons side by side
Side by sideDrawn at the same scale. On a realistic body (the Avatar, the humanoid) each is drawn at 0.55 of this; on a KayKit body at full size, as the KayKit weapons were.

4 · In a matchThe weapons in action

From the game itself: the sim's own scripted loadout match, where a defender stands on blue's base and stops each red runner with a different weapon.

ChaingunThe defender cuts down the red carrier coming off his stand.
Grenade launcherShells leaving the barrel and flying out to the carrier. (For this clip the defender fires on the flat arc; the script itself lobs them 70 m up, like a mortar, where they are specks.)
Hand grenadesThrown at close range: the blasts, then the carrier goes down and the torch falls.
Disc launcherA disc in flight to the fourth carrier.

5 · Your own eyesFirst person

The same moments through the defender's eyes, the weapon in hand as the first-person view draws it.

ChaingunThe barrels spin up and the flash fires at their tips.
Grenade launcherThe script's high lob: the view swings up to the sky to fire.
Hand grenadesThrown past the weapon in hand.
Disc launcherThe disc leaves the slot and flies out.

6 · ObjectiveEvery flag is drawn as the torch

Carry the Fire, literally: a wooden torch with a leather grip, a band in the team's colour, a brass collar and a metal brazier with a flickering fire. It stands 6 m on each stand, is slung across a carrier's back close up (and drawn larger far off, as the flag was), and lies on the ground under the beam when dropped. Only the picture changed: the sim's flag is exactly as it was.

On the stand, and takenBlue's torch burning on its stand; a red runner comes up the tower and takes it.
CarriedSlung like a sword across the back, so it follows every animation.
DroppedThe carrier is shot down; the torch falls and lies there, still burning, under its beam until the defender walks on to it and sends it home.
Dropped againA grenade-launcher shell lands on the next carrier.

Fixed while making this page: a dropped torch was drawn at the stand's 6 m (the old flag's way: a dropped flag kept its stand size), three times the height of the player beside it. It is now 1.9 m, about its size on a carrier's back, lying low with its fire clear of the ground (commit 0c4c5be).

7 · FallsDeaths

The Avatar keeps both hands on its weapon as it dies. As the chest tips over the weapon is brought round to lie along the body: on his back the muzzle drops to his feet; on his face it comes up and out to his right, from under his chest.

A red Avatar lying on its back, the disc launcher along its body
Death A, on his backThe weapon lies along him toward his feet.
In the gameThe body is thrown on with the speed it died at, as before; the new clips play on it.

8 · Before and afterOld vs new, the same moment

The same tick of the same match from the same camera: on the left master with a KayKit skin, in the middle master's arcade (the team humanoids), on the right this branch.

master · KayKit
master · arcade
this branch
Old: KayKit body carrying the KayKit flag
Old arcade: humanoid carrying the KayKit flag
New: Avatar carrying the torch
Old: KayKit body with the shotgun-chaingun
Old arcade: humanoid with the shotgun-chaingun
New: Avatar with the new chaingun
Old first person: the shotgun-chaingun
Old arcade first person
New first person: the new chaingun

9 · The filesWhat we made against what it replaces

Every file the new work loads, against the file it stands in for. Bytes are as served (a .gltf with its .bin and pictures); triangles and parts are the meshes as they are drawn (a part is one draw).

FileSizegzippedTrianglesPartsTexturesRig and animation
The player's body
KayKit Rogue_Hooded.glb (old skin; Engineer and Barbarian alike)381 KB196 KB7,1858one 1024 × 102423 bones; clips in the files below
KayKit clip files Rig_Medium_*.glb (three, shared by every KayKit body)2,237 KB(a body in each)39 clips, 38 s, 448 KB of keys; the player uses 10
Old arcade Humanoid.fbx + Humanoid.png89 KBone 1024 × 1024rigged at load to KayKit's skeleton and clips
New Avatar.glb (body, gear and its own clips)543 KB231 KB7,7802one 64 × 64 palette (+ glow, ORM); team palettes 0.2 KB each23 bones, 8 corrective shapes, the 10 clips the game plays
The weapons
KayKit crossbow_2handed, shotgun, crossbow_1handed, smokebomb196 KB2,8064KayKit's 1024 × 1024 sheets
New Weapons.glb (all three)376 KB56 KB5,0164three 64 × 64 palettes, sharedthe chaingun's barrels a part of their own
The flag
KayKit flag_C_red.gltf + flag_C_blue.gltf122 KB502 each1a 1024 × 1024 each
New Torch.glb (one file, the team colour set in code)45 KB9289noneits fire a part of its own, to flicker

Smaller where it counts on the GPU

A KayKit body or flag samples a 1024 × 1024 texture: about 5.6 MB of video memory each once mipmapped. The Avatar's palettes are 64 × 64 (about 22 KB), and the weapons and the torch have no textures at all.

Slimmed: the Avatar

It was 795 KB: a third of that was the glTF's own description of 17 clips, every bone's position, turn and size in each. Now it ships the 10 clips the game plays, and only the channels that ever move (21 a clip, not 70): 543 KB, 231 KB gzipped. The other 7 clips stay in the Blender file.

Slimmed: the weapons

They were one part per colour, 4 or 5 draws a weapon. Baked into palettes they are one draw each (the chaingun two, so its barrels can turn), the same as a KayKit weapon. The file grew to 376 KB for the palette's coordinates on every face; gzipped it is 56 KB.

10 · Running itWhat it costs a frame

Timed in the game's own renderer, in headless Chrome on this laptop's Intel UHD graphics (Vulkan), at 1280 × 720: the sim's scripted match, 500 frames from the same tick with the same camera, everything drawn and the GPU waited on each frame. Each run twice or three times and averaged. Good for comparing one against another on this machine, not a promise of anybody's frame rate.

The bodies alone

Six players is too few to tell bodies apart, so here every player is drawn six times over: 36 bodies running the match's moves, all holding the same (new) weapons, no torches. Only the body changes.

Body (36 on screen)ms a frameDraw callsTriangles a bodyWhy
Humanoid (the old arcade's)30.2180≈ 760a low-poly mannequin, one part
Avatar40.61967,780two parts, ten times the triangles, and 8 corrective shapes on every vertex
KayKit Rogue42.14677,185eight parts a body
KayKit Engineer43.94687,500eight parts
KayKit Barbarian42.44327,123seven parts

The Avatar against KayKit

A little cheaper than every KayKit body, with well under half the draw calls.

The Avatar against the humanoid

About 10 ms dearer for 36 bodies (0.3 ms a body here). Most of that is its 8 corrective shapes: in a run of its own, 36 Avatars took 37.1 ms with them and 29.8 ms with them taken out (a test file only), which is what the humanoid costs, ten times the triangles and all.

What the shapes buy

They stop the elbows, knees and shoulders collapsing as they bend. Dropping them, keeping only the worst two or three, or dropping them for far-off players would all close most of the gap.

The weapons, before and after their palette

36 Avatars holdingms a frameDraw calls
the new weapons, one part a colour (before)40.4229
the new weapons, one palette (now)39.4196

The whole set-ups, six players, after both slimming fixes

Set-upms a frameDraw calls
master, KayKit skin, KayKit weapons, KayKit flag24.2109
master, the arcade's humanoids, KayKit weapons, KayKit flag21.468
branch, the team Avatars, new weapons, the torch22.874
branch, KayKit skin, new weapons, the torch24.1113

With six players the terrain, buildings and sky (about 1.1 million triangles) are most of a frame. Against the old arcade the new one is now about 1.4 ms a frame dearer (it was 2.3 before the weapons' palette); against a KayKit skin it is about 1.4 ms cheaper. Measured with the scratch filming harness on both master and the branch: the same sim, map (Rainfall), match, ticks and cameras.

11 · For reviewWhat's in the branch

All of it is render, page and asset work. SIM_VERSION unchanged PROTOCOL_VERSION unchanged No pinned hash moves; nobody needs a reload at the deploy for this.

CommitWhat
4432ca4The new skin (then called the Scout): a realistic body on the KayKit rig, its own clips, one palette material
f24cd0dArcade: everybody is it in their team's colour
b908070Arcade: deploy/arcade.sh defaults to PROFILE=fast on Overpass
21ba170Arcade: lighter team colours, the body drawn 12% bigger
6af8b5fRenamed the Avatar; the loadout's weapons drawn to its size
5bedec3The torch: on its stand and on a carrier's back
40341b3The three new weapons
348e119The two-handed hold on every frame of every clip
c871f17The hold kept through the deaths
0c4c5beA dropped torch drawn at carry size, lying low
8da5fa2Slimmer: the Avatar ships the 10 clips the game plays; each weapon draws as one part

Checked

Both typechecks pass. The whole suite and the online suite pass, except two timing tests that fail only on a busy machine and pass alone (tests/p1.test.ts test 5, server/ps1.test.ts).

Licences

The Avatar, the weapons and the torch are Chris's own work, made in Blender from scripts, with no outside model or texture in them. Licence notes sit beside each, marked "the project's own art, to be confirmed". The animations' source is KayKit (CC0).

The hitbox

Every player is hit-tested as the sim's capsule for their armour (light: 1.8 m tall, 1.1 m across), the same for every skin. The arcade draws the Avatar 12% over that, so the top of the helmet (about 20 cm) is above the capsule; AVATAR_DRAWN = 1 lines it up.

12 · DecisionsQuestions for you

Look

Realistic next to KayKit

The Avatar and the new weapons are a step away from the KayKit look standard. Keep the Avatar as one skin among the others, or move the game toward it?

Licence

The art's licence

How do you want Chris's own models licensed in the repo (CC0 like the rest, or something else)?

Arcade

The 12% and fast

Keep the bigger drawn size, or line it up with the hitbox? And is PROFILE=fast right as the arcade's default?

Words

"Flag" or "torch"

The HUD and the kill feed still say "flag". Rename to "torch" to match the picture?

Cost

The corrective shapes

They are most of what the Avatar costs over the old humanoid. Keep all 8, keep the worst two or three, or drop them for players far off?

Scope

Other bodies

Only the Avatar has the two-handed hold; the KayKit skins and the humanoid keep KayKit's one-handed clips. Worth doing for them too?

How the pictures were made: the clips are the sim's own scripted loadout match (src/debug/w1Run.ts, on Rainfall) drawn a tick at a time through the game's renderers, put together at 30 frames a second; the filming harness is a scratch tool and is not on the branch. The studio pictures are rendered in Blender from the working file, in a scene of their own.