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>
54 lines
2.8 KiB
JavaScript
54 lines
2.8 KiB
JavaScript
/* ISLE SLINGERS -- physics/constants/index.js (submodule: constants)
|
|
* RC-375D84 S-2 modularization (behavior-neutral split of the original
|
|
* js/core.js monolith). Installs its units into ONE shared physics scope `P`
|
|
* that every physics submodule sees -- the same single-scope semantics the
|
|
* monolith had. Must load before js/physics/index.js (the aggregator that
|
|
* attaches the public ISLE_CORE API). Surface installed: 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.
|
|
*/
|
|
(function (root, factory) {
|
|
var part = factory();
|
|
if (typeof module !== 'undefined' && module.exports) module.exports = part;
|
|
else (root.ISLE_PHYSICS_PARTS = root.ISLE_PHYSICS_PARTS || []).push(part);
|
|
})(typeof globalThis !== 'undefined' ? globalThis : this, function () {
|
|
'use strict';
|
|
return function (P) {
|
|
P.WORLD = { w: 2400, ground: 900 };
|
|
P.VIEW = { w: 1280, h: 720 }; // base viewport (renderer renders at this size,
|
|
// then CSS-scales; camera math lives in the core)
|
|
|
|
P.MATERIALS = {
|
|
wood: { hp: 1300, density: 1.0, restitution: 0.18, dmgFactor: 0.9, score: 500, maxVel: 520 },
|
|
ice: { hp: 480, density: 0.7, restitution: 0.05, dmgFactor: 1.6, score: 800, maxVel: 560 },
|
|
// stone: retuned 2026-09-28 (RC-0D193E, Commander bug #3 "blocks and pig
|
|
// bad guys too hard to kill"): at hp 3400 with dmgFactor 0.35 a 70x70
|
|
// cube took ~11 full-power direct hits — stone walls were functionally
|
|
// unbreakable, so every enemy behind one was unkillable. Now ~2-3 hits.
|
|
stone: { hp: 1400, density: 2.2, restitution: 0.04, dmgFactor: 0.8, score: 300, maxVel: 480 }
|
|
};
|
|
|
|
P.BIRD_TYPES = {
|
|
wren: { r: 20, mass: 3.0, label: 'Wren', ability: 'fury' }, // tap: horizontal burst
|
|
zippy: { r: 17, mass: 2.2, label: 'Zippy', ability: 'dive' }, // tap: steep dive
|
|
boulder: { r: 26, mass: 6.5, label: 'Boulder', ability: 'quake' } // tap: radial shock
|
|
};
|
|
|
|
P.ENEMY_TYPES = {
|
|
mogg: { hp: 1, r: 24, score: 5000, crushVel: 330, crushDmg: 1.2 },
|
|
grum: { hp: 2, r: 32, score: 8000, crushVel: 380, crushDmg: 1.0 },
|
|
king: { hp: 3, r: 38, score: 15000, crushVel: 430, crushDmg: 0.85 }
|
|
};
|
|
|
|
P.GRAVITY = 1500;
|
|
P.LAUNCH_POWER = 11.5; // velocity per px of pull
|
|
P.MAX_PULL = 150;
|
|
P.MIN_PULL = 14;
|
|
P.AIR_DRAG = 0.999;
|
|
P.BIRD_BOUNCE = 0.34;
|
|
P.BIRD_GROUND_FRICTION = 0.86;
|
|
P.REST_SPEED = 14; // below this a bird counts as settling
|
|
P.SETTLE_TIME = 0.9; // seconds under P.REST_SPEED before bird is spent
|
|
P.BIRD_MAX_AGE = 12;
|
|
P.ABILITY_CD = 0.35; // min seconds after P.launch before ability usable
|
|
P.BIRD_BONUS = 10000;
|
|
};
|
|
});
|