Isle-Slingers/js/physics/state/agents.md
Relay dc68c6e3dd Physics upgrade + repo modularization (RC-375D84)
Delivered by Hermies Qwen, gated and deployed by Relay.

- Board tip/topple: full continuous rotation when a board's center of
  mass passes its support edge (Q1: smooth pivot swing, no discrete
  snap). Falling boards deal impact damage and can kill enemies in
  their fall path.
- Falling-object impact damage: blocks and birds can now kill enemies
  from vertical drops and side plows (velocity-aware crush gate),
  chain momentum transfers correctly through stacks (mass-weighted
  contact), repeated impacts finish tougher enemies.
- Landed-bird physics: a bird resting on a board remains a real
  physical body under continuous gravity (Q2: no lifetime timer). If
  its platform is destroyed it falls, damages what it lands on
  (chain reaction), and can kill enemies.
- Repo modularized: folders = modules, subfolders = submodules,
  architecture.md + MODULES.md at root, an agents.md card in every
  module and submodule (17 total).
- Test suite grown from 27 to 47 (20 new RED-watched tests for the
  above behaviors), all green. Golden differential against the
  original core confirmed the only behavioral changes are the
  intended ones.

Live at http://10.244.136.121:8093/, independently re-verified by
Relay (full suite re-run, module structure check, headless Chromium
smoke) before this push.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 13:21:18 +00:00

1.1 KiB

js/physics/state/ — agents.md

RC-375D84 S-2. Module map: MODULES.md; runtime model: architecture.md.

Installs into P: createGame, makeBird, activeBird.

  • createGame(levelDef) is the ONLY constructor of a gameplay state object. Its shape (keys level, world, time, score, birds, blocks, enemies, events, scorePopups, hadEnemies, camera, status, activeBird, launched, wonAt, lostAt, stats) is consumed by render, app and every test — extending is OK, silently dropping a key is not.
  • Block/enemy/bird records are plain objects. S-3/S-5 (RC-375D84, landed) extended them additively: blocks carry ang, angVel, pivoting (topple DOF) and birds gain the landed state (a live body under gravity while another bird is in play; see step/topple). Keep further extensions additive and keep createGame the single place where initial state is minted.
  • activeBird(g) is the canonical "whose turn is it" query — input, camera and rules all go through it; do not re-derive it elsewhere.
  • Consumes: WORLD, MATERIALS, BIRD_TYPES, ENEMY_TYPES (constants) + makeBird.