Overwhelm II is the follow-up to Overwhelm: a horde game where the waves keep growing until the screen is full. It started today, in the browser, on Three.js.
One rule about art
Nothing from the original Overwhelm is reused: no textures, no models, no sprites. The old game was read for mechanics only. Its wave sizes, for one, run from 25 to 650 enemies.
Everything that appears on screen is generated by code. That covers the hero, the enemies, the world, the effects and the interface, and the sound is synthesized as well. The setting is a desecrated basilica under a blood moon.
What stood up in the first evening
By late evening there was a build that ran end to end:
- A hero with a sculpted skeleton, cloth, a rig and a set of animation clips.
- Five enemy types and a boss, with their own crowd system, AI and death animations.
- A cathedral built from baked procedural textures, with architecture, props, debris and fire.
- Gore and skill effects, a first HUD, and a synthesized audio engine with its own mixer and sound bank.
All eight test scenarios ran with zero errors. None of that matters if it does not run fast enough.
Frame rate was the problem from the start
| point | horde frame rate |
|---|---|
| first monster build | about 11 to 12 fps |
| first full integration | 14 to 17 fps |
| target | 30 fps |
The monster build came with a warning attached. Passing a value from the vertex shader to the fragment shader as flat (no interpolation) cost about 150 to 190 ms per frame on integrated graphics. That is a single qualifier on a variable, and it is larger than the entire frame budget.
The world build reported a second problem: black frames whenever the dynamic-resolution system stepped to a new size.
A measurement taken on a busy machine
A leftover background process from another project had been holding the GPU for more than a day. The first frame-rate numbers were therefore measured against a contended machine. It was found just after midnight and killed. From that point frame rate only counts when it is taken from a solo run on an otherwise idle machine.
