Skip to content

Overnight feature loop 2026-10-07 — task queue

Overnight feature loop 2026-10-07 — task queue

Section titled “Overnight feature loop 2026-10-07 — task queue”

Chris, 2026-10-06 23:45: bosses ramped up, overall slightly too easy; more varied enemy attacks; an EVE-style interceptor / assault-frigate elite (tackles: web + scram, boost in, orbit, retreats to heal when damaged, packs coordinate, countered by a player web / web drone); an enemy that suppresses health regen to counter heavy lifesteal; camera zooms out with player speed, when a boss is present, and while an interceptor is attacking; continue multiplayer from other devices (local + internet).

Mechanics. A 10-minute cron loop runs one task per cycle through a Workflow: implementer (own worktree, TDD, scripts/gate.sh) → adversarial reviewer → one fix round if needed → merge into the integration branch overnight-2026-10-07 (pushed to origin). Nothing merges to main overnight: another session is live on main, and balance/feel changes are Chris’s call. Every feel change is behind a DevFlags toggle (default OFF) or a registered remote tunable, so the morning Dev build can A/B it. Report: docs/research/2026-10-07-overnight-feature-loop.md.

Naming. Drone class interceptor already exists (drone_state.gd), so the enemy’s internal id must differ (e.g. tackler); player-facing name “Interceptor” is fine.

# Task Status
T1 Dynamic camera zoom ✅ MERGED 649e5848
T2 Interceptor elite — sim + render ✅ MERGED 35a01b99
T3 Interceptor packs + boost + zoom hook ✅ MERGED 523eedaa
T4 Player counters: web drone + stasis web ✅ MERGED 5987f80d
T5 Regen-suppressor enemy ✅ MERGED 57c0ead4
T6 Boss ramp + overall difficulty ✅ MERGED a6aff662
T7 Networked co-op design spec (LAN + internet) ✅ MERGED 702a3d01
T8 LAN lockstep transport + loopback sync test ✅ MERGED e3042beb
T9 Dev-only host/join flow for LAN co-op ✅ MERGED e3148943
T10 Morning handoff: Mac dev build + testing notes ✅ MERGED b077ed36

Render-only (main.gd camera; /sim untouched). Camera zoom target eases smoothly (no snapping, critically-damped or exponential lerp) from a base value toward a zoomed-OUT value driven by: (a) player speed above base move speed (faster ship → wider view, capped), (b) a boss alive, (c) a hook extra_zoom_out other systems can raise (T3 uses it for interceptors). Combine as the MAX of the contributions, not the sum. Total zoom-out cap 1.5–2.0x world shown (Chris: “50 to 100%”), tunable. Respect the touch readability zoom already applied (main.gd ~line 324) and everything that reads camera.zoom (threat radar, offscreen indicators, world-size calc ~line 2401) — check every consumer still behaves. DevFlags toggle dynamic_zoom (default off) + Debug Settings row + Remote Console parity (memory: every Debug Settings row must reach the console). Tunables for the caps registered via the tunables registry. Test: a headless/GUT test of the pure zoom-target function (speed, boss, extra inputs → target), not just the node.

Read docs/architecture/enemies-bosses-survival.md, sim/elite_kit.gd, skill bh-add-content. New enemy type (internal id NOT interceptor; e.g. tackler), spawned as an elite-tier threat in survival (behind DevFlags tackler_spawns, default OFF so the seed-1234 baselines are untouched — verify they are). Behaviour state machine (pure sim, SeededRng only): APPROACH (fast) → ORBIT at close range (~120–180 px) around the nearest pilot (_nearest_pilot), while tackling: web (strong pilot move-speed slow, e.g. −50–60%) and scramble (warp blocked — reuse the existing warp_scramble_timer / dash_cd mechanism EliteKit ATK_WARP uses) → when HP drops below a threshold (e.g. 40%) DISENGAGE: flee at high speed away from the pilot, regen HP over time while out of range → RE-ENGAGE when healed. Tough but killable; worth real XP (pass biomass_v explicitly; assert XP via the real spawn→kill→_sweep_dead path). Render consumer in the SAME chunk: distinct ship sprite/look, a visible web tether + scram indicator on the player while tackled, and a visible retreat/regen state. Add a VFX library manifest entry + score. Tunables for all numbers. Bestiary/codex entry if the codex lists enemies.

T3 — Interceptor packs + speed boost + zoom hook

Section titled “T3 — Interceptor packs + speed boost + zoom hook”

Builds on T2. (a) Speed-boost burst (“MWD”): a short big speed burst used to close in, to settle into orbit, and to escape when disengaging, with a visible boost trail and a cooldown. (b) Packs: when 2+ tacklers are alive they coordinate — share the target, spread orbit angles evenly around it, stagger so one tackles while others hold just outside, and a damaged one retreats while a healthy one swaps in. Spawn them in groups of 2–3 later in the run. (c) While any tackler is engaged with a pilot, raise the T1 camera extra_zoom_out so the whole pack and its orbit are visible (Chris: zoom out 50–100% while it attacks). Tests for coordination invariants (angle spread, one-tackler-at-a-time if that rule is chosen).

T4 — Player counters: web drone + stasis web

Section titled “T4 — Player counters: web drone + stasis web”

Chris: “the player needs to counter by having a web or a web drone”. Add a web drone class (the drone system: sim/drone_director.gd, docs/architecture/coop-and-pilots.md, shop drone trees) that locks the nearest elite/tackler and heavily slows it (and cancels its boost) — making orbiting/escape hard. And/or a player upgrade “Stasis Web” (level-up card) that webs the nearest fast elite on a cooldown. Both must visibly render. Unlockable/obtainable in a normal run when tackler_spawns is on (or a dev-grant path) so it can be tested tomorrow. Drone uses drone_rng only. Shop prices: propose, mark as Chris’s call.

Counter to high lifesteal/regen builds. New enemy (e.g. “Nullifier”/“Blight”): projects an aura; while a pilot is inside, that pilot’s passive regen AND lifesteal/leech healing are reduced (e.g. −75%), stacking sensibly with multiple. Visible aura ring on the enemy and a HUD/ship indicator on the player when suppressed (render consumer same chunk). Spawn behind DevFlags suppressor_spawns (default off). Find EVERY heal path (regen, still-regen ramp, lifesteal via lifesteal_dealt in _sweep_dead, Leech-related, pickups) and decide which are suppressed — document it. Tests through the real heal paths.

Chris: bosses need ramping up more; overall slightly too easy. Investigate current boss HP/damage/ attack cadence and run-difficulty curves (exponential scaling b258-dev-003 exists — read memory notes in docs; check docs/architecture/enemies-bosses-survival.md and remote-config tunables). Use the headless soak / autopilot / economy-careers tools to MEASURE before and after (e.g. boss time-to-kill, damage taken per boss, run survival time). Implement as a DevFlags hard_tuning toggle (or tunables overlay) applying: boss HP/damage multipliers, faster boss attack cadence or extra attack patterns, and a modest global difficulty bump. Do NOT change defaults; Chris decides after playing. Record measurements in the report.

Design doc only: docs/superpowers/specs/2026-10-07-networked-coop-design.md. Read coop-and-pilots.md, determinism rules, net/. Recommend architecture: deterministic input-lockstep (the sim is deterministic + seeded, so exchange per-tick InputState only) vs host-authoritative snapshots; input delay / rollback trade-offs; checksum desync detection (state hash per N ticks); LAN discovery (UDP broadcast) + ENet; internet via a relay (Cloudflare Durable Object WebSocket relay fits the existing CF stack) or WebRTC with STUN/TURN; tvOS/iOS networking constraints (local network permission prompt, Bonjour NSBonjourServices/NSLocalNetworkUsageDescription plist keys); how many pilots tick() supports today. Search the web for current Godot 4.x multiplayer state — don’t trust training data. Break into phases. Verify claims against code.

T8 — LAN lockstep transport + loopback sync test

Section titled “T8 — LAN lockstep transport + loopback sync test”

Per T7’s recommendation (lockstep unless T7 found a blocker). A net/-side (NOT /sim) lockstep session: transport abstraction (ENet in prod, in-memory loopback for tests), per-tick input exchange with a fixed input delay, stall when inputs missing, periodic state checksum compare with desync report. GUT test: two Sim instances driven through the loopback transport with scripted inputs for both pilots stay checksum-identical for N thousand ticks; a deliberately-perturbed one is detected. Headless ENet localhost test if feasible.

T9 — Dev-only host/join flow for LAN co-op

Section titled “T9 — Dev-only host/join flow for LAN co-op”

Debug Settings (dev builds only): “Host LAN co-op” / “Join LAN co-op” (UDP broadcast discovery, manual IP fallback). Hosting starts a run once a peer joins; each device controls its own pilot via the T8 session. Add the iOS/tvOS local-network plist keys to the platform presets ONLY if safe — otherwise document exactly what is needed (platform/tvos is guarded; note it for Chris). Goal: Chris can try two devices on the same Wi-Fi tomorrow, or at least two Mac instances.

Merge origin/main into overnight-2026-10-07, gate green, push. Build a Mac dev build if the bh-deploy-mac-dev path works from a worktree; otherwise write the exact device-install steps (skill bh-worktree-device-install). Write a “How to test tomorrow” section in the report: every DevFlag added, where the toggles are, what to look for, and the open Chris calls.