Log entry: day 20
Shadows again. On the edge of the chair's shadow, a staircase of little steps. The third pass in three days. I sent three shots and wrote: "I think we were fixing the wrong thing, and not globally. Look, the chair has a staircase too. And the potted plant and the drinking fountain too! But the wardrobe's is smooth, for example." The answer was in my own list: the smooth shadow by the wardrobe came from the sun, and all the stepped ones came from the hidden light inside the rooms. The flight engineer made a penumbra.
I asked straight out whether we'd got crisp, even lines. The answer was honest: "No." The steps were gone, but the edge went soft. On the fifth pass we tried laying the shadow onto the wall by hand, and the edge came out razor sharp.

The drinking fountain actually had two shadows. The drawn one was built from the ceiling lamps, and the real one fell from the room's hidden light, which hung somewhere else and lower. One object got two shadows of different lengths, pointing different ways. And the lamps themselves give no light at all.
Meanwhile, in another session, we were working on the style and the interface. I remembered how powerful the wanted stars were in GTA, while we had feeble hands instead. For the attention meter we compared a star and a bell. I picked the bell: "That's better." About the star, the note on the canvas said it was taken whole from GTA and says nothing about school.
The feeble hands were five little fists with the index finger raised. The code drew them directly, out of rectangles, without a single image file.

In the same place I said belief in the ghost shouldn't be shown so strongly, and maybe it shouldn't be added at all. Belief would live on in the game for another month.
Style canvases, September 5





Toward evening I wrote: "I'm tired of these shadows." And asked whether we'd gone overboard. The flight engineer went to see how other games lay down flat shadows: Toy Story 3, Oblivion, Sonic Adventure 2, Tanki Online. The verdict: we hadn't gone overboard, we'd arrived at what the textbooks say.
Hunting the edge of the shadow





Log entry: day 21
I wrote: "we overcomplicated … with all these shadows... we could just have the simplest crisp shadow from objects. I had that once." Going by my shot, the flight engineer removed the layer of "outline" shadows. I looked: in the toilet there were no shadows left at all, and none from the desk either. 35 minutes later the layer was back. We wrote it down honestly: removing it was the wrong move.
By evening the shadows were hanging in the air again.

And in the evening I said: make a commit, we'll sort it out later. That's the mistake of the week, more on it below.
Log entry: day 22
In the morning the work since September 2 went into the main branch: 431 files in one commit. The shadows stopped hanging in the air. Before that, "black slabs hang across the desks in the classroom". The kid's shadow fell on the side panel of a desk, 11 centimeters high, and stretched seven and a half meters across.
Soon it turned out that the same commit had broken the kid's model. The model got ruined three times in a day, the same way each time. The protection against this was listed as switched on and did nothing.
Another check went red 113 times in a row, and never for a real reason. Its measure of rotation gave a tiny number for two identical rotations, and a flat zero for a real difference. When the measure was replaced, two of the 113 complaints were left, and both were right: every body had two extra pose handlers hanging on it.
Then I asked: what if we make the models in Blender? And thirteen minutes later I wrote that I'd installed Blender. I opened the kid's model and asked whether it was normal for it to have so many points.

Handing the model over to Blender completely didn't work: three quarters of it isn't geometry, it's a program. We agreed on a loop: the shape gets edited in Blender, the numbers go back into the game. The first thing from Blender was a beanie.
We tested the loop on the head. Moved it five centimeters up in Blender, and exactly one line changed in the model. But on the way Blender swapped the neck and the chest, and eight nodes with the same name came back numbered. We had to start a census of names. And in its first day the bridge delivered only that beanie, and nobody wears it. The receiver replaced every mesh it brought with a box of the same overall size, so the beanie landed in the game as the same three boxes you'd have typed in as text. In that time the model was edited three times, and all three times by hand, bypassing the bridge.
Then came the day of the knee socks. The white knee socks stuck out like boxes above the shoes. I wrote: "well, the sock should be kind of part of the shin and move with it." They were taken in, and a gap of almost seven centimeters opened between the shin and the shoe, on all fifteen looks. I suggested: "Maybe we just make the legs go down to the shoe by default, and then the sock goes on top. That way we'd be covered." That's what we did.

The day of the knee socks






On top of that, the nerd had "some leftover of somebody else's hairdo on the side", and somebody had "a visor growing out of the forehead". In the evening I ran the whole game, and stray bars of hair were sticking out of every model's head again. The stray lock was removed from all fifteen.


The stray lock was a box by the right temple. It lived apart from the hairdo and poked through whichever one was put on. For the cat, the teacher and the janitor it was the only thing left of their hair at all. It couldn't be deleted: the hair swing hung on it. So now the lock is switched off instead of deleted.
There was good stuff that day too. Everyone who stands now breathes. Stand for six and a half seconds, shift from one foot to the other.
For them we built an idle stand: six students right in the editor. I opened the scene, saved it, and instead of six there was nobody. The flight engineer wrote: "This is exactly the trouble that ruined the kid's model three times in a day, and I set it up with my own hands in a new file." Then the stand had to be turned around as well: the six were standing with the backs of their heads to the camera.
Log entry: day 23
In the morning the flight engineer took the light apart layer by layer: switching off the sun, the lamps, the room light and the shadows one at a time, to see what each one gives.


I wrote: "I'm afraid my current approach is too much. And not best practice." And I brought in two outside reports made by other AIs. The flight engineer went through them against our code. Most of the advice was rejected, with a note on why for each one.
And then the main thing turned up. At every launch the school took 23 seconds to assemble, and 18 of them went into finding places for the furniture. Every beanbag looked for its spot through a tree of fifty thousand nodes. Now the school is up in four seconds. Placing the beanbags used to take two and a half seconds, now it takes nine thousandths.
And I said something important: "As the game's architect I'm supposed to place everything myself, to build the composition I need." Classroom 1A can now be arranged by hand in the editor. A spot placed by hand wins over the calculation.
Log entry: day 24
No commits, no messages.
Log entry: day 25
I asked: "Do we really need to 'assemble the school'?" The flight engineer said we didn't, and I wrote: "Yes, finally. Let's start with the first one and go." Now the school is baked into a scene in advance: 50,147 nodes in a 5.8-megabyte file, exactly as many as when it was assembled.
A check runner appeared: one command runs them all. There are 118 checks, and 18 of them are silent, meaning they can't turn red.
Log entry: day 26
23 rooms can now be arranged by hand: eight classrooms and fifteen restrooms. The first full run: 91 green checks, 4 red, 12 silent. I asked whether we really needed all these checks, or whether we'd slid into overengineering.
Then I played: "flooded the toilet and sat back down… an announcement about the flood started on the radio, and everyone's like ghost! ghost! and at the same time the teacher went to the window to look at the storm, and it all froze in one picture like that, and the camera froze." The camera got stuck on a cutaway. Now after thirty seconds the view comes back by itself.

In the evening I asked to check all the end conditions of the demo. It turned out the third line of the demo couldn't be done: after the film the blinds didn't go up. Now the demo can be played to the end. And two red checks turned out to be wrong themselves: they looked in the first desk drawer, and by design that's where the chalk and a pen are.
After the film the blinds now go up without the sound of the cord. Eight clicks of the slats turned out louder than the lesson's noise threshold, and the class would have called a witness on a player sitting quietly at a desk.
Where it came from
GTA 4 and 5: the wanted stars as the yardstick for the interface, which we left behind for the bell. Toy Story 3, Oblivion, Sonic Adventure 2 and Tanki Online: how others lay down flat shadows. Other people's video tutorials on skeletons and animation that I brought in. The Sims: the ceiling and near walls come off when you look from above.
The week in numbers
- 37commits
- 23 → 4 sschool launch
- 431files in one commit
- 113times in a row one check went red, never for a real reason
- 7.5 mwidth of the shadow from an 11 cm panel
- 3times in a day the model got ruined
