Changelog
What changed, and why.
1.0 — 29 August 2026
First public release.
Gameplay
- Tap mode — one cow, five random reactions, combo counter.
- Invasion mode — cows converge on a snake at the centre; tap them before they arrive.
- Four difficulty levels, from Easy to Insane.
- Cows speed up as your score rises, capped at +60%.
- Spawn angles are spaced apart so cows do not arrive in a clump.
Animation
- Procedural jaw deformation, because the source model has no skeleton and no mouth cavity.
- Lip sync driven by the real-time amplitude of the audio rather than a fixed animation.
- Each cow in invasion mode owns its geometry, so only the one that was tapped opens its mouth.
- The snake uses skeletal animation — idle, and a strike when a cow gets through.
Scene
- Fully procedural grassland: canvas-generated sky and grass, 900 instanced tufts, drifting clouds.
- Camera framing adapts to the screen's aspect ratio, so the whole arena fits on a portrait phone.
Audio
- Only a 2-second slice of the source recording is used.
- A new moo fades the previous one out over 70ms instead of overlapping, so rapid tapping sounds like separate calls.
- Short fades at both ends prevent clicks from cutting into the middle of the waveform.
Performance
- Textures converted from PNG to JPEG: 7.1 MB → 0.25 MB, with a measured mean pixel difference of 1.62/255.
- Total download reduced from 12 MB to 4.8 MB.
- Mesh deformation touches only the ~1,600 affected vertices, and normals are recomputed only while the mouth is moving.
Fixes made during development
- Flat shading caused by recomputing normals on non-indexed geometry — fixed by welding vertices first.
- Rotation pivot was at the cow's feet, so backflips threw it off screen — moved to the model's centre.
- Z-fighting between the arena disc and the field — resolved by offsetting the ground 0.09 units down.
- The snake was invisible because its bounding box was measured from bone nodes rather than the skinned mesh.
- Text baked into the model's neck texture was removed by masking and inpainting.