Brassneck Studio

Brassneck Studio Ltd

SCUTTLERS

Devlog 01 – ·  Godot 4.6

A narrative RPG set in a run-down British secondary school that has lost its mind over a collectible battling toy. Two weeks in, the school has walls, doors, thirteen kids and a working loop. It also has a door that is visibly a wardrobe.

Scuttlers are palm-sized plastic things on wheels, tracks or legs, sold by a company in Redditch that peaked in 1996 and whose customer service line is still a fax number. You drive one with a pistol-grip handset and you fight other kids' ones in bin lids, sinks, taped squares on the floor and the drain hollow behind the sports hall.

Everyone at this school has one. There is an elaborate unwritten rulebook enforced by sixth-formers. There is a black market. There is a kid who will trade you a Series Two for whatever is in your pockets and is visibly not to be trusted.

It is a funny game about a stupid craze, and underneath it there is something considerably less funny that the school has quietly agreed not to talk about. That is all you are getting for now.

11rooms
6,488floor tiles
13kids
3loops
0fights yet

Week one · the foundationsThirty-one files and a kid who can walk

The first deliverable was deliberately unexciting: project settings, folder structure, five autoloads, the resource classes that describe a toy, and one room you could walk around in at the final resolution. 640×360, 16×16 tiles, integer scaling to 1920×1080.

The point of a scaffold is not that it does much. It is that the interfaces it establishes are the ones you will still be using in two years. The one that matters most here is the wall between the world and the battle: a BattleRequest goes in, a BattleResult comes out, and the battle scene holds no reference to the world at all. You can launch a fight from an empty debug scene with no school loaded. That boundary is the single thing most likely to save this project from itself.

Two rooms, a door between them, three things you could read, and a girl behind the bike sheds who would have a go at you. The fight was a placeholder. It proved the pipes.

Week one · the reckoningEverything that was quietly broken

Then came the unglamorous pass, which is most of what game development actually is. Five things were wrong and every one of them had a cause that was duller and more specific than the symptom suggested.

You could walk through the vending machine

Collision existed. The problem was that every prop had a hard-coded collision height of eight to twelve pixels regardless of how big it was, so a forty-pixel vending machine blocked its bottom tenth and you strolled through the rest. Props now derive collision from a single footprint number per prop type — how many pixels of the sprite's bottom edge are floor the object actually stands on. One number, set once, inherited by every instance in the game.

The dialogue ran off the screen

Text went into a fixed eighteen-pixel-tall label anchored to the bottom of the screen with autowrap turned on. Anything longer than one line overflowed its own box, because no pagination existed. There is now a proper dialogue box that wraps and paginates against real font metrics, which is also testable without a window open — autowrap is not.

Testing collision by standing in it proves nothing

This one is worth passing on. The obvious way to check whether a wall is solid is to put the player inside it and see if they move. They do not move, because they have no velocity. It is not a test, it is a body at rest. Use a shape query.

Now permanent

A headless test suite that walks every room and checks the things that have actually gone wrong: whether props are solid, whether every kid can be talked to, whether any interaction trigger has ended up buried inside a locker, whether a text box fits its own text. Every check in it exists because that exact thing broke at least once.

Week twoThe school stopped being a corridor with rooms stuck on it

The most useful thing done this week was not writing anything. It was drawing the whole school on one page.

Individually every room was fine. Seen all at once, the layout was a star: six rooms, seven doors, and every single one of them hanging off the main corridor as a dead end. The only route between any two rooms was back through the middle. For a game pitched as almost a small Metroidvania, that is the wrong shape at a fundamental level — the entire pleasure of that genre is the loop closing, the locked door you finally open from the far side, the drop that turns a ten-minute walk into a shortcut. A star has nowhere for a shortcut to go.

Worse, walking east down the corridor you hit a locked classroom, then out-of-order toilets, then blocked stairs, in that order, before anything opened. Three shut doors in a row across a third of the school's spine. One tantalising locked door is a promise. Three is a game that is not finished.

A1 A2 A3 Toilets Stairs Caretaker's locked Main corridor Gym new Foyer Alley Canteen glazed south side side path — past the glass Playground half the floor area of the game
Eleven rooms, thirteen two-way doors, three independent loops. Teaching rooms north of the corridor, entrance and yard south. The dashed ones do not open yet.

So the school got rearranged. The canteen moved from a dead end off the north side to the corridor's south-east corner, with a door straight out to the yard and a second one onto a narrow path that runs the length of its glazed south wall. The alley — already out the back — now drops south onto the west end of that same path. And the east end of the corridor, which used to be a wall you turned around at with a vending machine on it, is now a gymnasium that also opens onto the top of the playground.

Thirteen doors across eleven rooms in one connected piece. Three independent loops. You can go out through the canteen and come back through the gym, or out through the alley and back through the canteen, or cut across the yard between the two.

The side path is the best thing to come out of the week. It is thirty-two tiles long and four tiles wide, with the canteen lit up behind glass along one whole side of it and nowhere to hide. It is a single choke point. Put a bin across it, or a prefect on duty, or a gate, and the entire loop becomes a shortcut you have to earn rather than one you were handed. That is a design lever the layout simply did not have last week.

Week two · new roomsA cupboard, a gym, and the worst toilets in Britain

Three of the corridor's dead ends became real places.

The caretaker's cupboard is built, dressed and locked. Not "locked" as in a message telling you it is locked — the room exists, with a laminated rota going back years that has the same name on every week in a hand that changes a third of the way down, and a crate marked CONFISCATED with NOT FOR RETURN added underneath by somebody who wanted to be clear. It opens when a flag says it opens.

The gymnasium has four sets of court lines in four colours, laid over each other by four different people who each thought theirs would be the last. There is an honours board that stops four years ago with the lines still ruled on the empty years. There is one patch of floor where the varnish is newer than everywhere else.

The toilets are a room I am slightly reluctant to describe in a public document. There is a permanent tidemark. There is a cubicle door off its top hinge, around which somebody has carefully touched up the paint rather than fix the hinge. There is a bin containing eleven dead vapes, a lighter with no flint and one cigarette that has been rained on and dried out again, and a tally scratched into the tiles above it that does not match. The whole room sits under a haze.

And there is a lad at the middle urinal. With both others free. Trousers fully down, round the ankles, like he is being measured for something. He has thoughts about this and will share them with you.

Currently unfunny for technical reasons

That joke is, at present, entirely in the text. He is a standard student sprite facing a wall, because the silhouette that actually sells it — and it is entirely a silhouette joke — does not exist yet. It is now a line item on the art queue, between "wall bars" and "urinal run", which is a sentence I did not expect to write this fortnight.

The confessionThe door was a wardrobe the whole time

Every classroom door in the game has been a picture of a wardrobe.

The tileset the project is temporarily built on has no door sprite in it. None. It has cupboards, desks, chairs, a blackboard, lockers, vending machines and an actual artist's easel, but not one door. At some point a region of that sheet got picked as the closest available thing, and it was a wardrobe panel. Worse, the region was thirty-two pixels tall against a cupboard only about twenty-four pixels tall, so it was also catching the top of a desk sitting underneath it on the sheet. Panel, then two little legs.

Which is why, for two weeks, the doors have read to everyone who looked at them as painters' easels standing against the wall.

Lesson, filed

A wrong asset is worse than an obvious placeholder, because a wrong asset stops you looking. Nobody queries a slightly odd door. Everybody queries a grey box. Everything in this project that has no art is now a grey box with a label on it, and where a room is fully placeholder it contains a note saying so in plain language.

For the Godot peopleThe bug that filled the school with junk

The school's rooms are generated by a builder script — a bootstrap, not a pipeline. It writes ordinary editable scenes that you can then open and dress by hand, and rooms leave the builder permanently once they have been worked on.

Opening the corridor scene showed twenty-seven nodes named @Node2D@9, @CollisionShape2D@14 and so on.

The cause: Godot does not number duplicate child names. Add a second child called LockersWarm to a node that already has one and it does not become LockersWarm2 — the name is discarded and an internal one is generated instead. Silently. So the first prop of each type kept a readable name and every duplicate turned to noise. The builder now makes every name unique before handing it out, and names things after what they are in the room rather than what prop they happen to use: DoorCorridorToA1, SignCorridorToA2, ExitSignCorridorToAlley.

One other pattern worth sharing, because it came out nicer than expected. A door that is locked now but will open later is two interaction triggers on the same spot: the real door carries a "only works once this flag is set" condition, and the "it's locked" line carries a "stops existing once this flag is set" condition. Exactly one of them is live at any moment, and the thing that picks what you interact with already filters on that. No Door subclass, no branch, nothing else in the codebase learns a new concept.

The honest bitHalf this game is grey boxes

Art is commissioned on this project, not generated, and nothing gets commissioned until the combat is proven fun. That is a deliberate order of operations and it means the world currently looks like this:

GREY BOXES — 63% PLACEHOLDER ART
Share of the school's floor area with no art at all

The playground alone is 3,264 tiles — half the floor area of the entire game — and every object in it is a labelled grey rectangle. The bike sheds are a rectangle. The bins are a rectangle. The goal painted on the wall is a rectangle. Five of eleven rooms are dressed entirely in placeholders, and they are the four biggest ones plus the gym.

This is fine and it is on purpose, but it is worth being straight about rather than photographing the two rooms that look alright.

NextThe bit that decides whether any of this matters

M0Foundations, scaffolding, the school shelldone
M1The battle bench — two toys, one ring, no menus, no worldnext
M2Parts and the garage screenafter
M3World shell — walk to a kid, fight, return with a result that sticksafter

Everything above is scenery. The next milestone is the only one that can kill the project, and it is deliberately walled off from everything just described: two Scuttlers, one arena, force-based movement, ring-out, one AI. No menus. No school. Just driving a small heavy plastic thing around an empty ring until it feels like an actual radio-controlled toy — mass, thrust, turn rate, grip — and then adding the ring edge, and then the rest.

The gate on it is not a checklist. It is: put it in front of people and see whether they ask for a rematch without being prompted. If they do not, the fighting is not there, and no amount of school is going to rescue a game whose core loop is a shrug. Better to find that out at week six than week sixty.

Back in a week.

Scuttlers — working title — is in development at Brassneck Studio Ltd.

Solo development, commissioned art, single-player. Godot 4.6, GDScript, 640×360 at 16px tiles.

All art currently on screen is placeholder and none of it ships.

Back to the studio