@codyswann/lisa 2.179.0 → 2.180.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/package.json +1 -1
  2. package/phaser/merge/.claude/settings.json +1 -0
  3. package/phaser/merge/.mcp.json +8 -0
  4. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  6. package/plugins/lisa-agy/plugin.json +1 -1
  7. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  8. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  10. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  16. package/plugins/lisa-expo-agy/plugin.json +1 -1
  17. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  21. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  27. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  32. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa-phaser/rules/phaser.md +25 -2
  37. package/plugins/lisa-phaser/skills/phaser-accessibility/SKILL.md +1 -1
  38. package/plugins/lisa-phaser/skills/phaser-asset-pipeline/SKILL.md +4 -4
  39. package/plugins/lisa-phaser/skills/phaser-i18n/SKILL.md +1 -1
  40. package/plugins/lisa-phaser/skills/phaser-project-structure/SKILL.md +5 -5
  41. package/plugins/lisa-phaser/skills/phaser-services/SKILL.md +1 -1
  42. package/plugins/lisa-phaser/skills/phaser-testing/SKILL.md +2 -2
  43. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  44. package/plugins/lisa-phaser-agy/skills/phaser-accessibility/SKILL.md +1 -1
  45. package/plugins/lisa-phaser-agy/skills/phaser-asset-pipeline/SKILL.md +4 -4
  46. package/plugins/lisa-phaser-agy/skills/phaser-i18n/SKILL.md +1 -1
  47. package/plugins/lisa-phaser-agy/skills/phaser-project-structure/SKILL.md +5 -5
  48. package/plugins/lisa-phaser-agy/skills/phaser-services/SKILL.md +1 -1
  49. package/plugins/lisa-phaser-agy/skills/phaser-testing/SKILL.md +2 -2
  50. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-phaser-copilot/rules/phaser.md +25 -2
  52. package/plugins/lisa-phaser-copilot/skills/phaser-accessibility/SKILL.md +1 -1
  53. package/plugins/lisa-phaser-copilot/skills/phaser-asset-pipeline/SKILL.md +4 -4
  54. package/plugins/lisa-phaser-copilot/skills/phaser-i18n/SKILL.md +1 -1
  55. package/plugins/lisa-phaser-copilot/skills/phaser-project-structure/SKILL.md +5 -5
  56. package/plugins/lisa-phaser-copilot/skills/phaser-services/SKILL.md +1 -1
  57. package/plugins/lisa-phaser-copilot/skills/phaser-testing/SKILL.md +2 -2
  58. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-phaser-cursor/rules/phaser.mdc +25 -2
  60. package/plugins/lisa-phaser-cursor/skills/phaser-accessibility/SKILL.md +1 -1
  61. package/plugins/lisa-phaser-cursor/skills/phaser-asset-pipeline/SKILL.md +4 -4
  62. package/plugins/lisa-phaser-cursor/skills/phaser-i18n/SKILL.md +1 -1
  63. package/plugins/lisa-phaser-cursor/skills/phaser-project-structure/SKILL.md +5 -5
  64. package/plugins/lisa-phaser-cursor/skills/phaser-services/SKILL.md +1 -1
  65. package/plugins/lisa-phaser-cursor/skills/phaser-testing/SKILL.md +2 -2
  66. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails-agy/plugin.json +1 -1
  69. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  74. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  79. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  81. package/plugins/src/phaser/rules/phaser.md +25 -2
  82. package/plugins/src/phaser/skills/phaser-accessibility/SKILL.md +1 -1
  83. package/plugins/src/phaser/skills/phaser-asset-pipeline/SKILL.md +4 -4
  84. package/plugins/src/phaser/skills/phaser-i18n/SKILL.md +1 -1
  85. package/plugins/src/phaser/skills/phaser-project-structure/SKILL.md +5 -5
  86. package/plugins/src/phaser/skills/phaser-services/SKILL.md +1 -1
  87. package/plugins/src/phaser/skills/phaser-testing/SKILL.md +2 -2
  88. package/plugins/lisa-phaser/skills/phaser-assets/SKILL.md +0 -96
  89. package/plugins/lisa-phaser/skills/phaser-assets/agents/openai.yaml +0 -4
  90. package/plugins/lisa-phaser/skills/phaser-gameobjects/SKILL.md +0 -94
  91. package/plugins/lisa-phaser/skills/phaser-gameobjects/agents/openai.yaml +0 -4
  92. package/plugins/lisa-phaser/skills/phaser-physics/SKILL.md +0 -86
  93. package/plugins/lisa-phaser/skills/phaser-physics/agents/openai.yaml +0 -4
  94. package/plugins/lisa-phaser/skills/phaser-rendering/SKILL.md +0 -89
  95. package/plugins/lisa-phaser/skills/phaser-rendering/agents/openai.yaml +0 -4
  96. package/plugins/lisa-phaser/skills/phaser-scenes/SKILL.md +0 -86
  97. package/plugins/lisa-phaser/skills/phaser-scenes/agents/openai.yaml +0 -4
  98. package/plugins/lisa-phaser/skills/phaser-v3-migration/SKILL.md +0 -81
  99. package/plugins/lisa-phaser/skills/phaser-v3-migration/agents/openai.yaml +0 -4
  100. package/plugins/lisa-phaser-agy/skills/phaser-assets/SKILL.md +0 -96
  101. package/plugins/lisa-phaser-agy/skills/phaser-gameobjects/SKILL.md +0 -94
  102. package/plugins/lisa-phaser-agy/skills/phaser-physics/SKILL.md +0 -86
  103. package/plugins/lisa-phaser-agy/skills/phaser-rendering/SKILL.md +0 -89
  104. package/plugins/lisa-phaser-agy/skills/phaser-scenes/SKILL.md +0 -86
  105. package/plugins/lisa-phaser-agy/skills/phaser-v3-migration/SKILL.md +0 -81
  106. package/plugins/lisa-phaser-copilot/skills/phaser-assets/SKILL.md +0 -96
  107. package/plugins/lisa-phaser-copilot/skills/phaser-gameobjects/SKILL.md +0 -94
  108. package/plugins/lisa-phaser-copilot/skills/phaser-physics/SKILL.md +0 -86
  109. package/plugins/lisa-phaser-copilot/skills/phaser-rendering/SKILL.md +0 -89
  110. package/plugins/lisa-phaser-copilot/skills/phaser-scenes/SKILL.md +0 -86
  111. package/plugins/lisa-phaser-copilot/skills/phaser-v3-migration/SKILL.md +0 -81
  112. package/plugins/lisa-phaser-cursor/skills/phaser-assets/SKILL.md +0 -96
  113. package/plugins/lisa-phaser-cursor/skills/phaser-gameobjects/SKILL.md +0 -94
  114. package/plugins/lisa-phaser-cursor/skills/phaser-physics/SKILL.md +0 -86
  115. package/plugins/lisa-phaser-cursor/skills/phaser-rendering/SKILL.md +0 -89
  116. package/plugins/lisa-phaser-cursor/skills/phaser-scenes/SKILL.md +0 -86
  117. package/plugins/lisa-phaser-cursor/skills/phaser-v3-migration/SKILL.md +0 -81
  118. package/plugins/src/phaser/skills/phaser-assets/SKILL.md +0 -96
  119. package/plugins/src/phaser/skills/phaser-gameobjects/SKILL.md +0 -94
  120. package/plugins/src/phaser/skills/phaser-physics/SKILL.md +0 -86
  121. package/plugins/src/phaser/skills/phaser-rendering/SKILL.md +0 -89
  122. package/plugins/src/phaser/skills/phaser-scenes/SKILL.md +0 -86
  123. package/plugins/src/phaser/skills/phaser-v3-migration/SKILL.md +0 -81
@@ -1,89 +0,0 @@
1
- ---
2
- name: phaser-rendering
3
- description: This skill should be used when working on rendering in Phaser 4 — the render node architecture that replaced v3 pipelines, the unified Filter system that replaced FX and masks, tint modes, pixel-rounding options (roundPixels, smoothPixelArt, vertexRoundMode), DynamicTexture's buffered drawing, the Extern object for external WebGL, and lighting. Use it for any visual-effect, shader, mask, or custom-rendering task, and whenever v3 rendering idioms (setPipeline, preFX/postFX, BitmapMask, tintFill) appear. Pairs with phaser-gameobjects and phaser-v3-migration.
4
- ---
5
-
6
- # Phaser 4 Rendering
7
-
8
- ## Overview
9
-
10
- Phaser 4 replaced the entire v3 WebGL pipeline system with a **render node
11
- architecture**: small single-purpose nodes (each with a `run` method, batchable
12
- where it matters) that the renderer composes per object. WebGL state is fully
13
- managed, context loss restores automatically, and rendering is just-in-time —
14
- GPU work is deferred until actually needed. WebGL2 is fully supported; WebGL1
15
- still works; **there is no WebGPU backend**; the Canvas renderer is deprecated.
16
-
17
- Practical consequences, in order of how often they bite:
18
-
19
- ## Filters replaced FX and masks
20
-
21
- The v3 `preFX`/`postFX` controllers and `BitmapMask` are gone. Phaser 4 has one
22
- unified **Filter** system that works on any GameObject **and on cameras**:
23
-
24
- - Geometry/bitmap masks → the `Mask` filter.
25
- - Bloom / Shine / Circle FX → `Phaser.Actions.AddEffectBloom()`,
26
- `AddEffectShine()`, `AddMaskShape()` helpers.
27
- - Gradient FX → the new `Gradient` GameObject.
28
- - Filters split into **internal** and **external** lists (replacing the
29
- pre/post distinction); filter setters are chainable.
30
- - A filtered or masked `Container` can itself be used as a mask source — new
31
- capability, not possible in v3.
32
-
33
- ## Tinting
34
-
35
- `tintFill` and `setTintFill()` were removed. Use `setTint(color)` plus
36
- `setTintMode(mode)` with `Phaser.TintModes`: `MULTIPLY` (default), `FILL`,
37
- `ADD`, `SCREEN`, `OVERLAY`, `HARD_LIGHT`.
38
-
39
- ## Custom shaders and pipelines
40
-
41
- - A v3 custom pipeline must be rewritten as a **RenderNode**, registered at boot
42
- via the game config's `render.renderNodes` map.
43
- - The `Shader` GameObject was rewritten: config-based constructor
44
- (`ShaderQuadConfig`), explicit `setUniform()`, `renderImmediate`, GLSL
45
- `#pragma` directives. Shadertoy-style automatic uniforms are gone.
46
- - **Never make raw WebGL calls** — wrap external GL renderers in the `Extern`
47
- GameObject, which fences GL state around your code.
48
- - Texture coordinates now follow GL orientation (**Y=0 at bottom**). Phaser
49
- translates standard usage automatically, but custom shaders and pre-compressed
50
- textures must account for the flip (re-encode compressed textures).
51
-
52
- ## Pixel rounding and pixel art
53
-
54
- - `roundPixels` defaults to **`false`** in v4 (v3: true). The old default caused
55
- flicker on rotated/scaled objects; leave the new default alone.
56
- - Pixel-art projects choose ONE strategy: `pixelArt: true` (crisp,
57
- nearest-neighbor) or `render.smoothPixelArt: true` (WebGL-only, anti-aliased
58
- scaling/rotation of pixel art).
59
- - Per-object fine-tuning: `gameObject.vertexRoundMode` —
60
- `"off" | "safe" | "safeAuto" | "full" | "fullAuto"`.
61
-
62
- ## DynamicTexture / RenderTexture are buffered
63
-
64
- Draw commands no longer execute immediately — they queue until you call
65
- **`render()`**. Forgetting `render()` is the #1 "my RenderTexture is blank" bug
66
- in v4. Related: `preserve()` keeps a command buffer for reuse, `callback()`
67
- injects custom steps, and `RenderTexture#renderMode` selects
68
- `"render" | "redraw" | "all"`.
69
-
70
- ## Lighting
71
-
72
- `setPipeline('Light2D')` is gone. Enable per object with
73
- `gameObject.setLighting(true)`; lights have an explicit `z`; self-shadowing is
74
- supported; lighting now works on many more object types (including particles).
75
-
76
- ## Performance notes specific to the v4 renderer
77
-
78
- - Quads render from index buffers (4 vertices, not 6) and batching survives
79
- multi-texture switches better, especially on mobile — but atlases are still
80
- the foundation of batching ([[phaser-assets]]).
81
- - For massive draw counts use `SpriteGPULayer` / `TilemapGPULayer`
82
- ([[phaser-gameobjects]]) instead of thousands of individual sprites.
83
-
84
- ## Verification
85
-
86
- Rendering changes are verified visually in a real browser: `bun run dev`, then a
87
- Playwright screenshot assertion or manual confirmation that the effect renders
88
- and the console shows no WebGL errors. For filter/shader work, verify on both a
89
- WebGL2 and (if supported) WebGL1 context before calling it done.
@@ -1,86 +0,0 @@
1
- ---
2
- name: phaser-scenes
3
- description: This skill should be used when creating or editing Phaser 4 scenes — the init/preload/create/update lifecycle, starting/stopping/sleeping scenes, running scenes in parallel (HUD/pause overlays), passing data between scenes, the registry, and event-based communication. Use it when adding a scene, wiring scene transitions, or debugging lifecycle/ordering issues. Pairs with phaser-project-structure, phaser-assets, and phaser-gameobjects.
4
- ---
5
-
6
- # Phaser 4 Scenes
7
-
8
- ## Overview
9
-
10
- Scenes are Phaser's unit of game-flow composition. The lifecycle is unchanged
11
- from Phaser 3 — `init(data)` → `preload()` → `create(data)` → `update(time, delta)`
12
- — and each scene owns its display list, input, camera, time events, and (if
13
- enabled) physics world.
14
-
15
- One scene class per file under `src/scenes/`, exported as a class whose key
16
- matches the file name:
17
-
18
- ```ts
19
- export class Game extends Phaser.Scene {
20
- constructor() {
21
- super("Game"); // the scene key — also a constant in src/assets.ts
22
- }
23
- init(data: GameStartData) { /* receive data, reset state */ }
24
- preload() { /* per-scene late loads only — bulk loading is the Preloader's job */ }
25
- create() { /* build GameObjects, wire input + events */ }
26
- update(_time: number, delta: number) { /* per-frame; delta in ms */ }
27
- }
28
- ```
29
-
30
- ## Lifecycle rules
31
-
32
- - `init` receives the data passed by `scene.start(key, data)` — type that payload
33
- (an interface per scene) instead of `any`.
34
- - `preload` in gameplay scenes should be rare; the Preloader scene loads the game
35
- pack up front ([[phaser-assets]]). Use per-scene `preload` only for genuinely
36
- scene-local or late-bound assets.
37
- - `create` is where GameObjects are built. Everything constructed here must be
38
- cleaned up on shutdown if it lives outside the scene's display list (timers on
39
- other scenes, global event listeners, DOM elements).
40
- - `update(time, delta)` runs per render frame. Frame-rate-independent movement
41
- multiplies by `delta`; physics movement belongs in Arcade bodies, not manual
42
- position math ([[phaser-physics]]).
43
-
44
- ## Scene control
45
-
46
- Via `this.scene` (the ScenePlugin):
47
-
48
- - `start(key, data)` — stop the current scene, start another.
49
- - `launch(key, data)` — start another scene **in parallel** (HUD, pause overlay).
50
- - `pause` / `resume`, `sleep` / `wake` — suspend update/render without rebuild.
51
- - `stop(key)` — shuts a scene down (fires `Phaser.Scenes.Events.SHUTDOWN`).
52
- - `bringToTop` / `sendToBack` — z-order between parallel scenes.
53
-
54
- Overlay pattern: `Game` launches `HUD`; `HUD` renders score/health and listens to
55
- events from `Game`. Pause: launch `Pause`, `this.scene.pause("Game")`.
56
-
57
- ## Communicating between scenes
58
-
59
- In preference order:
60
-
61
- 1. **Events** — emit on the scene's own emitter and have the other scene listen:
62
- `gameScene.events.emit("score-changed", score)`. Always remove listeners on
63
- `SHUTDOWN`: `this.events.once(Phaser.Scenes.Events.SHUTDOWN, () => …)`.
64
- 2. **`scene.start`/`launch` data** — for handoff at transition time.
65
- 3. **The registry** (`this.registry`) — game-wide key/value store with change
66
- events; for cross-cutting state like settings or the run seed.
67
-
68
- Never reach into another scene's GameObjects directly
69
- (`this.scene.get("Game").player.x = …`) — that couples scenes to each other's
70
- display-list internals and breaks when the other scene rebuilds.
71
-
72
- ## Project conventions
73
-
74
- - Scene keys are constants in `src/assets.ts` (e.g. `SceneKeys.Game`) — `super(SceneKeys.Game)`.
75
- - A scene is an orchestrator: input wiring, GameObject lifecycles, and event
76
- plumbing. Game rules live in `src/logic/**` and are called from the scene.
77
- - Per-scene state is reset in `init`, not in field initializers — scene classes
78
- are instantiated once but started many times; stale fields from a previous run
79
- are a classic restart bug.
80
-
81
- ## Verification
82
-
83
- A scene change is verified by booting the game (`bun run dev`) and exercising the
84
- actual transition: start → play → (pause/resume or restart) → confirm no
85
- duplicated listeners (events firing twice after a restart is the canonical
86
- symptom of a missed `SHUTDOWN` cleanup).
@@ -1,81 +0,0 @@
1
- ---
2
- name: phaser-v3-migration
3
- description: This skill should be used when migrating a Phaser 3 game to Phaser 4, reviewing code that contains Phaser 3 idioms, or answering "does this v3 API still exist" questions — pipelines→render nodes, preFX/postFX/BitmapMask→Filters, tintFill→TintModes, removed namespaces (Geom.Point, Struct, Mesh/Plane, Camera3D, bundled Spine), config default changes, and texture-orientation changes. Pairs with phaser-rendering and phaser-project-structure.
4
- ---
5
-
6
- # Phaser 3 → Phaser 4 Migration
7
-
8
- ## Overview
9
-
10
- Phaser 4.0.0 "Caladan" (April 2026; current line v4.1 "Salusa") keeps the core
11
- game-facing API stable — scenes, input, Arcade/Matter physics, tweens,
12
- animations, audio, and the scale manager are **unchanged** — and replaces the
13
- rendering internals. The official estimate for a standard-API game is hours,
14
- not weeks. The npm package is still `phaser`; v4 ships its own
15
- `types/phaser.d.ts`.
16
-
17
- Upstream references for deeper detail: the official migration guide in the
18
- phaser repo (`changelog/v4/4.0/MIGRATION-GUIDE.md`) and the shader-specific
19
- guide. This skill is original Lisa content written against those primary
20
- sources — it is not a port of any upstream plugin or skill package.
21
-
22
- ## What did NOT change (don't "migrate" these)
23
-
24
- Scene lifecycle (`init/preload/create/update`), `this.scene` control, Loader
25
- API (plus new `atlasPCT`), Input, Arcade & Matter physics, Tweens/Timelines,
26
- `anims`, Scale Manager, Sound managers, Groups, Containers, particle emitter
27
- API (v3.60 style).
28
-
29
- ## The breaking changes, by frequency of impact
30
-
31
- | Phaser 3 | Phaser 4 |
32
- | --- | --- |
33
- | `setPipeline(...)` / `setPostPipeline(...)` / `resetPipeline()` | RenderNodes (`render.renderNodes` config) — rewrite required |
34
- | `preFX` / `postFX` controllers | Unified **Filter** system (internal/external lists) |
35
- | `BitmapMask` / `GeometryMask` | `Mask` filter; `Phaser.Actions.AddMaskShape()` |
36
- | Bloom/Shine/Circle FX | `Actions.AddEffectBloom()` / `AddEffectShine()` |
37
- | Gradient FX | `Gradient` GameObject |
38
- | `setTintFill(c)` / `tintFill` | `setTint(c)` + `setTintMode(Phaser.TintModes.FILL)` |
39
- | `setPipeline('Light2D')` | `gameObject.setLighting(true)`; lights gained `z` |
40
- | `Phaser.Geom.Point` | Removed — `Phaser.Math.Vector2` (geometry returns Vector2) |
41
- | `Phaser.Struct.Set` / `Struct.Map` | Native `Set` / `Map` |
42
- | Shadertoy-style `Shader` uniforms | Rewritten Shader: `ShaderQuadConfig`, `setUniform()`, `#pragma` |
43
- | RenderTexture/DynamicTexture draw-executes-immediately | **Buffered** — call `render()`; `preserve()`, `renderMode` |
44
- | Bundled Spine 3/4 plugins | Removed — Esoteric's official Phaser Spine runtime |
45
- | `Mesh`, `Plane`, OBJ loader, `Camera3D`, `Layer3D` | Removed, no replacement |
46
- | `Math.TAU` = π/2 (wrong) | `Math.TAU` = 2π (correct); `PI_OVER_2` added; `PI2` removed |
47
- | `Create.GenerateTexture`, polyfills, IE9 entry | Removed |
48
-
49
- ## Behavior/default changes that silently alter a port
50
-
51
- - `roundPixels` default flipped **true → false**. If a pixel-art game looks
52
- blurry after porting, set `pixelArt: true` (or `render.smoothPixelArt`) —
53
- don't blanket-restore roundPixels.
54
- - **Texture Y-flip**: UVs are GL-oriented (Y=0 bottom). Standard usage is
55
- translated automatically, but custom shaders and **compressed textures** must
56
- be updated/re-encoded.
57
- - `Camera#matrix` no longer includes position (`matrixExternal` does;
58
- `matrixCombined` removed) — affects code doing manual camera-space math.
59
- - `Grid` "outline" properties renamed to "stroke". TileSprite was rebuilt
60
- (atlas frames, `tileRotation`; cropping removed). `DOMElement` without a
61
- container parent now throws.
62
-
63
- ## Migration procedure
64
-
65
- 1. Bump `phaser` to `^4.1.0`; remove any `@types/phaser`.
66
- 2. Typecheck — removed APIs surface as compile errors; fix using the table.
67
- 3. Grep for the silent ones types won't catch: `Light2D`, `tintFill`,
68
- `Math.TAU`, custom shader GLSL, compressed-texture loads.
69
- 4. Rewrite pipelines/FX as RenderNodes/Filters ([[phaser-rendering]]); re-add
70
- `render()` calls after DynamicTexture drawing.
71
- 5. Swap Spine to the Esoteric runtime; check third-party plugins (`rex` users:
72
- the v4 line is the separate `phaser4-rex-plugins` package, which also ships
73
- `p3-fx` ports of the dropped v3 FX).
74
- 6. Verify visually per [[phaser-rendering]] — renderer migrations produce
75
- wrong-pixels bugs, not exceptions.
76
-
77
- ## Project conventions
78
-
79
- This stack's lint config hard-bans the left column of the table in `src/**` —
80
- a migration is not complete until lint passes with those rules on, with zero
81
- disables.