plugins/lisa-phaser-copilot/skills/phaser-physics/SKILL.md
This skill should be used when working with physics in a Phaser 4 game — Arcade physics bodies, velocity/acceleration, colliders and overlaps, the fixed timestep, groups and static groups, and when (rarely) to reach for Matter.js instead. Use it when adding movement, collision, platforming behavior, or debugging tunneling/jitter. Pairs with phaser-gameobjects and phaser-scenes.
npx skillsauth add codyswanngt/lisa phaser-physicsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Phaser 4 bundles the same two engines as v3: Arcade (AABB, fast, the default) and Matter.js (full rigid-body). The opinionated default is Arcade; Matter is opt-in for genuinely physical mechanics (stacking, joints, torque). Bundled Spine left v4, Matter did not.
Key v4 fact: Arcade's fixedStep defaults to true — the world steps at a
fixed rate decoupled from render FPS. Keep it. Fixed-step physics is what makes
movement deterministic across 60 Hz/144 Hz displays and what makes
logic-level tests reproducible. Do not switch to variable step to mask a bug.
// game config
physics: { default: "arcade", arcade: { gravity: { x: 0, y: 0 }, debug: false } }
// scene
const player = this.physics.add.sprite(x, y, Tex.GameAtlas, "player");
player.setCollideWorldBounds(true);
const platforms = this.physics.add.staticGroup();
this.physics.add.collider(player, platforms);
this.physics.add.overlap(player, pickups, (p, item) => this.collect(item), undefined, this);
setVelocity, setAccelerationX),
never by writing x/y per frame — direct position writes teleport the body
past colliders and create tunneling.body.reset(x, y)).setDrag, setBounce, setMaxVelocity.body.blocked.down (world/static contact) rather
than touching.down alone.collider separates bodies; overlap only reports. Pickups/triggers are
overlaps; walls/floors are colliders.create between groups — never inside
update (a per-frame add.collider leaks collider objects and tanks the
frame rate).body.enable = false) or dead objects keep colliding invisibly.fixedStep: true, give
walls thickness, cap speed with setMaxVelocity.get() or wasn't disabled on despawn.update scaled by render delta.Choose Matter for: realistic stacking/toppling, constraints/joints, compound bodies, polygon collision shapes. Run it in a dedicated scene; don't mix Arcade and Matter for the same entities. If the mechanic is "platformer/top-down/ shmup", the answer is Arcade.
Physics-adjacent randomness (spawn jitter, knockback variance) uses the seeded
Phaser.Math.RND — never Math.random() — so a recorded seed reproduces a run
exactly. Combined with fixed-step Arcade, gameplay bugs become replayable; see
[[phaser-testing]].
Physics changes are verified by playing the affected interaction in the running
game with arcade.debug: true toggled on (body outlines visible), confirming
contacts/velocities behave as specified, then toggling debug back off before
committing.
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and
tools
--- name: harper-realtime description: This skill should be used when adding or troubleshooting Harper (HarperDB/Fabric) real-time behavior: MQTT topics, WebSocket resource subscriptions, resource publish/subscribe handlers, SSE-style streaming routes, and local subscriber verification. Pairs with harper-resources, harper-config-yaml, harper-schema-graphql, and harper-build-and-deploy. --- # Harper Realtime ## Overview Harper exposes live data through the same Resource model used for REST and