Orchard rings, a furnace run and five more places to roll
This was a week of new ground. Level 2 stopped being a short hop: a long gauntlet of patrolling enemies, fire-spitters and geysers now turns it into a ten-minute level.
In plain words
This was a week of new ground. Level 2 stopped being a short hop: a long gauntlet of patrolling enemies, fire-spitters and geysers now turns it into a ten-minute level. Beside it there are fresh open levels to wander, among them an orchard, a meadow, windmill terraces, a lava crossing and a stone keep built around a stomping hazard. A first "Brute" enemy that takes three stomps to beat has been built too, though it lives only in a test arena for now. Villagers now wander and speak in readable bubbles, and grass, flowers and small wildlife fill the levels. On phones, menus and dialogs now keep clear of rounded corners and notches, and there is a graphics options panel. The barber shop gained about a hundred new parts.
Under the hood
- Level 2 gauntlet (!241):
tools/levels/gen_firefount.pygeneratesfire_fount_course.tscn, 18 lanes with 27 patrols, 31 fire-spitters, 20 chargers, 39 geysers and 12 burnable gates after the tutorial, with the goal flag moved to the end. Thetests/fire_fountsuite has 6 tests; thel2-goal-gamepadcorpus expectation was re-recorded. - New levels: Orchard Rings (#122, !240, with a bot that times the hazards), Meadow Climb (!244), Windmill Terraces, Ember Crossing (over lava) and Pounder Keep (a timing level). Pounder Keep's palette was changed twice because the floor read as water.
- Brute (#149 slice 1):
scripts/brute.gdextendsenemy_v1, cycling rush (telegraph, charge, dazed) and a five-shot fireball fan. A pure step function on a snapshot dict exposeshazard_points()andpredicted_global_position()for the bot. It is placed only inlevels/brute_arena_demo.tscn; no playable level uses it yet. - Playtest feedback (2026-10-06): NPC dialog advances on the Ability button, HUD labels get an outline, the orb magnet is smaller, there is one orb size, and ravine water was fixed. Also added: last-orb beams and a nearest-orb HUD, plus the upgradeable orb magnet (!243).
- Phone UI (#139, #140, #142): barber editor, story dialog and credits stay inside the safe area, and the safe-area helper now comes from BallOrcs-Core. The story dialog got a full-width backing and fitted text.
- Graphics (#127): device-profile table and persisted settings (slices 1-2 of 3), a graphics options panel, and a renderer fallback. A playtest run never relaunches on the compatibility renderer. Particle level is lazy-loaded.
- Colour (#141): the level's colours are drained, not the frame, so orbs and the player keep theirs.
- Barber: 64 new parts, then 32 more in brows, cheeks, ears and hands slots. Part scenes now load on first use, not at boot.
- Android (#133): a Firebase Game Loop soak APK. It took several manifest fixes: the exported
GodotApp, the classic launcher shape, aTEST_LOOPfilter andsingleToplaunch mode. - Perf: shader warm-up logs which variant it compiled and what the collector skipped. Perf baselines were re-recorded (main pipelines 1306 and 1310), the 120 camera anchor screenshots were re-baselined, and playtest runs now record time to complete per level (#143).
- Housekeeping: Sentry addon re-vendored at 2.3.0, and GitLab CE pinned at 19.4.1-ce.0 in
versions.lock.