Isle-Slingers/MODULES.md
Relay dff5dd5b30 Clean release scrub: remove internal fleet references
Removes internal process references so the repo is presentable to an
outside audience: dropped the internal build-retrospective doc
(process log with internal terms, not useful to an outside reader),
and reworded remaining internal references in code comments and
module docs (agents.md cards, architecture.md, MODULES.md,
index.html, package.json) to generic descriptions of what changed
and when, with no behavior change -- full 47/47 suite re-run green
after the scrub, every edit verified comment/doc-only via diff.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-29 14:36:52 +00:00

4.1 KiB

Isle Slingers — MODULES.md (master module list)

the modularization pass. Folders = modules, subfolders = submodules. Every module and submodule carries an agents.md describing its surface and invariants. Load contract (order is load-bearing) is in architecture.md and encoded in index.html + test/page.test.mjs.

# Module Submodules Public global Role
1 js/physics/ constants, state, aim, abilities, damage, step, collision, topple, rules, camera ISLE_CORE (via js/physics/index.js) Deterministic DOM-free physics engine (shared scope P)
2 js/levels/ helpers, data (level-1..5) ISLE_LEVELS {LEVELS, SLING} (via js/levels/index.js) Level geometry + enemy/bird layouts (shared scope L)
3 js/audio/ — (single file) ISLE_AUDIO {AudioEngine} Synthesized WebAudio SFX (no assets)
4 js/render/ — (single file) ISLE_RENDERER {Renderer, VIEW_W, VIEW_H} Canvas drawing of the state object
5 js/app/ — (single file) page state on window Input, screens/HUD, fixed-timestep main loop

physics submodules (shared scope P)

Submodule Installs (into P) Consumes from P
constants WORLD, VIEW, MATERIALS, BIRD_TYPES, ENEMY_TYPES, GRAVITY, LAUNCH_POWER, MAX_PULL, MIN_PULL, AIR_DRAG, BIRD_BOUNCE, BIRD_GROUND_FRICTION, REST_SPEED, SETTLE_TIME, BIRD_MAX_AGE, ABILITY_CD, BIRD_BONUS —
state createGame, makeBird, activeBird WORLD, MATERIALS, BIRD_TYPES, ENEMY_TYPES, makeBird
aim aimVector, trajectory LAUNCH_POWER, GRAVITY, AIR_DRAG, BIRD_BOUNCE, WORLD, BIRD_GROUND_FRICTION
abilities launch, triggerAbility activeBird, aimVector, MATERIALS, BIRD_TYPES
damage damageBlock, damageEnemy MATERIALS, ENEMY_TYPES
step step, stepPhysics, spendBird (nearly all — the physics hub)
collision crushCircleVsBox, collideBirdWorld, collideBirdBlocks, collideBirdEnemies, REST_VEL_CLAMP, resolveBoxPair MATERIALS, WORLD, damageBlock, damageEnemy
topple toppleBlocks, blockSupportSpan, beginTopple, integrateTopple, landTopple, topplePathDamage, settleBack, supportStillAlive WORLD, GRAVITY, MATERIALS, REST_SPEED, damageBlock, damageEnemy, ENEMY_TYPES
rules checkEndStates, birdsRemaining, starsFor —
camera updatePopups, updateCameraTarget, decayCamera WORLD, VIEW

levels submodules (shared scope L)

Submodule Installs (into L) Consumes from L
helpers wood, ice, stone, mogg, grum, king, SLING —
data/level-N one level object each (returns it) wood/ice/stone/mogg/grum/king, SLING

Physics notes (S-3/S-4/S-5, the physics + modularization update — landed 2026-09-29)

  • topple (S-3): blocks carry a rotational DOF (ang, angVel, pivoting). A resting block whose COM is past its support span pivots about the support-edge corner (full continuous rotation, Q1) and either lands on the ground (impact damage via topplePathDamage) or, if the pivot is too high to reach the ground, swings back and settles flat (settleBack, anti-livelock).
  • collision (S-4): crush is velocity-direction-aware (boxAlong > 30 — falling boxes crush enemies from above or the side), per-enemy crush cooldown (0.12 s, one landing = one crush), and stacked block contact is mass-weighted so heavy blocks drive light planks (chain-crush).
  • step (S-5): a settled bird with another bird in play becomes landed (a live body under real gravity, no lifetime timer) and is integrated with the blocks; the last bird still spends (win/lose unchanged). rules must not declare lost while a landed bird is in the world.
  • state (S-3/S-5): block records carry ang/angVel/pivoting; bird records gain the landed state (queued | aiming | flying | landed | spent).

Invariants (see architecture.md)

  • ISLE_CORE and ISLE_LEVELS public API surfaces are key-for-key stable.
  • Deterministic core: createGame + step are DOM-free and headless-safe.
  • Fixed timestep 1/120 s. Game is fully offline; no new runtime deps.