Angry Birds is fundamentally a rotating rigid-body stacking game, and neither existing engine could be extended into it: PeggleLogic collides a moving circle against static pegs with no rotation, and GooTowerLogic has no angular state at all because its rigidity is emergent from triangulation. Matter.js ships in the CDN Phaser build but is not importable in bare Node and not reproducible, which would forfeit the verifier, the generator's measured star thresholds, and the editor's winnability gate. AngryBirdsPhysics.js is a bespoke solver: convex polygons and circles, uniform-grid broadphase, SAT with reference-face clipping to 2-point manifolds, sequential impulses with warm starting keyed on stable feature ids, Coulomb friction, split-impulse position correction, and island sleeping. Split impulse rather than plain Baumgarte is the load-bearing choice. Biasing the real velocity makes penetration proportional to load, so the bottom contact of a 10-box tower sank ~9x deeper than the top and the stack sagged 12.85px. Correcting position through a discarded pseudo-velocity removes a fixed fraction of the excess per substep regardless of load; sag is now 0.46px per contact, exactly the slop band we deliberately allow. Gate: 10-box tower settles in 0.68s and sleeps with <1px drift and 0.35 degrees of tilt; friction holds on a 15 degree slope and slips on 40; replay is bit-identical and frame-rate independent; 40 monkey seeds produce no NaN, no overspeed and no sinking. tools/verifyAngryBirds.js -> 51 checks green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M1wNRvLLtyfCDAET7oYouf |
||
|---|---|---|
| .. | ||
| data | ||
| lib | ||
| bloxorzMap.js | ||
| buildCommonWords.js | ||
| fetchStarControlAssets.js | ||
| genBloxorz.js | ||
| genDotLink.js | ||
| genExcitebikeTracks.js | ||
| genGooTower.js | ||
| genJumble.js | ||
| genKatamino.js | ||
| genMiniCrossword.js | ||
| genPeggleLevels.js | ||
| genPuddingMonsters.js | ||
| genRushHour.js | ||
| genSpireClimbCreatures.js | ||
| genSuperKartTracks.js | ||
| genTACampaign.js | ||
| genTetrisAttackPuzzles.js | ||
| genZuma.js | ||
| readExcitebikeMaps.js | ||
| verifyAdvanceWars.js | ||
| verifyAngryBirds.js | ||
| verifyBalatro.js | ||
| verifyBejeweled.js | ||
| verifyBlockFighter.js | ||
| verifyBloxorz.js | ||
| verifyBookwork.js | ||
| verifyCanasta.js | ||
| verifyCivilization.js | ||
| verifyColoradoDefense.js | ||
| verifyCribbage.js | ||
| verifyDotLink.js | ||
| verifyDungeonBoss.js | ||
| verifyExcitebike.js | ||
| verifyGinRummy.js | ||
| verifyGooTower.js | ||
| verifyJewelQuest.js | ||
| verifyJumble.js | ||
| verifyMahjong.js | ||
| verifyMahjongMatch.js | ||
| verifyMiniMotorways.js | ||
| verifyPaiGowPoker.js | ||
| verifyPeggle.js | ||
| verifyPuddingMonsters.js | ||
| verifyRisk.js | ||
| verifyRummikub.js | ||
| verifyRushHour.js | ||
| verifySWDBG.js | ||
| verifySlots.js | ||
| verifySpireClimb.js | ||
| verifyStarControl.js | ||
| verifySuperKart.js | ||
| verifyTempest.js | ||
| verifyTetrisAttack.js | ||
| verifyTotalAnnihilation.js | ||
| verifyZuma.js | ||