# @rpgjs/action-battle

## 5.1.0

### Minor Changes

- 1626a67: Add an `enabled` option to `provideActionBattle()` (a boolean or a function of the player, event and map) to keep the module installed but inactive: no attack, dodge, guard or hotbar on the input, no AI for the events. The local attack animation of the client still follows the input.

### Patch Changes

- cd51839: Update CanvasEngine to 2.4.1.
- 2fbd534: Route the remaining player-facing texts through the i18n service: stat labels and close buttons of the menu, the action-battle menu button, level-up, skill and reward notifications, and item error notifications. The server now ships default `en`/`fr` messages (`rpg.notification.*`, `rpg.error.*`) that games can override with `provideI18n()`.

## 5.0.1

### Patch Changes

- acf93b3: With Action Battle, the action key talks to an NPC (or uses a chest) instead of attacking. Events with an `onAction` hook are now synchronized as `interactive` (enemies with a `BattleAi` are not), `map.getInteractableObjectIds()` lists what is in front of a character, and the `onInput` hooks receive the action with `interactedWithEvent` when an interactive event handled it. The client no longer plays its predicted attack when it faces an interactive event.
- 1f2f2aa: Fix the battle music of the project not playing when an enemy is approached. An enemy without its own battle music sent an empty track that hid the project one (Studio now drops empty values and Action Battle falls back to the project music on a blank track). A threat re-sent by a re-created enemy AI no longer piles up, and `engine.music.enter()` ignores a call for the track it already targets instead of cancelling its own transition on every tick (which also created a duplicate sound each time).
- 1f2f2aa: Fix an enemy that came back invisible after being defeated: a map reload (`updateMap`, run about twenty times when a Studio map loads) replaces the events, but the Action Battle AI of each replaced event kept running, unseen, and kept attacking and holding the battle music. The AI now stops as soon as its event is no longer the one registered on the map.

  Fix "Start" doing nothing after Game Over → Title screen: the title screen opened over the map, where nothing handles "Start". Studio now handles the title entries there: "Start" resets the hero, selects the actor and restarts on the start map, "Load" opens the load menu.

- 1f2f2aa: The hitbox of a Studio hero (actor) with a generated character now follows the display scale of the character, like the hitbox of an event, instead of being as big as the cell of its image (it was 160x105 next to a 32x32 enemy). The default attack zones of Action Battle are anchored on the real hitbox of the attacker (centered on its body, pushed out of its edge in the facing direction) instead of assuming a 32x32 body.
- b8f80ba: Fix hotbar skills that could not be used (Studio). The targeting cursor took the size of the hitbox of the player as the size of a tile, so the tile sent to the server did not match the server one and the skill was rejected as out of range; it now uses the configured tile size, else the one of the map. The targeting overlay and the attack preview never showed, because they read the id of the sprite from a signal instead of its value.

  A skill whose area mask hits a single cell (Studio writes it as a 3x3 grid, `["...", ".#.", "..."]`) is no longer treated as an area skill: a melee skill without range is used at once on the enemy in front of the player, with no manual targeting cursor.

## 5.0.0

### Major Changes

- 041d5ee: Add a persistent server-authoritative, type-extensible hotbar for skills, items, and custom gameplay entries. The hotbar now supports a dynamic 1–10 slot capacity, retained locked-slot assignments, unlock hints, a persistent active slot, automatic refresh after level/class/inventory/map changes, direct keyboard shortcuts, a radial gamepad selector, LT/RT slot cycling with X activation, mobile centering, cooldown/cost/quantity presentation, and serialized `instant`, `select`, or `target` activation handlers.

  Replace Action Battle's dedicated `ui.actionBar` and component with the generic `ui.hotbar`. Action Battle skills enrich generic entries with targeting, cooldown, projectile, sound, animation, and visual metadata while their authoritative execution continues through native skill and item hooks. This is an intentional breaking configuration and export cleanup.

  Keep direct 1–0 Zelda-style menu assignment, display unavailable slots with their unlock condition in the root-level assignment picker, execute Studio skill workflows through the native `onUse` hook, make instant skills soft-target without a confirmation step, preserve skill impact media through AI damage feedback, and add translated Studio presentation fields, visual area targeting, phase-specific CanvasEngine cast/trail/impact presets, a default projectile renderer compatible with Studio skill records, and robust object-signal hydration for class and hotbar sync payloads. Upgrade to `@signe/sync` 3.1.1 so object-signal hydration uses the upstream fix without a local package patch.

  Expose a complete set of `--rpg-hotbar-*` CSS variables, bridge them through
  `@rpgjs/ui-css`, document the public client and server APIs with generated
  JSDoc references, and add a farm-themed playground showing mixed item and skill
  slots, menu assignment, and the persistent hotbar show/hide lifecycle.

### Minor Changes

- 1bcd9fc: Keep `playSound()` as the single canonical sound API while adding persisted mixer channels, spatial playback, native interface cues, coordinated map and battle music, and Studio audio configuration, so framework users do not have to choose between overlapping concepts.

### Patch Changes

- b6ab003: Establish `defineModule()` as the canonical runtime module authoring API, export it from the client and server packages, keep `createModule()` for advanced provider composition, and align runtime-specific module installation documentation and examples.
- 973878b: Update CanvasEngine to 2.3.0. The 2.3 compiler no longer injects `computed`, `h`, `cond` and `loop` into every component, so components now import the helpers their script uses. `rpgjs()` declares its `Plugin[]` return type.
- 1cae469: Update CanvasEngine to 2.4.0. Templates now read computed signals explicitly (`position().x` in the HP bar, light halo and dynamic bar components) and the action-battle projectile trail passes `loop={true}` to its `Fx`.
- 59c06c9: Let skill cast and impact particle effects complete naturally instead of removing
  them after a fixed timeout. Fire explosions, magic bursts, healing effects, and
  custom finite presets now retain their full particle lifetime.
- fd12af7: Make Adventure combat more responsive and readable with overlap-safe control locks, guard/parry/counter gameplay, soft targeting, coordinated enemy attack turns, Studio-driven combat animations, skill hit-rate handling, anchored impact feedback, configurable hit-stop, and enemy death effects.

  Let temporary attack spritesheets finish their visual follow-through after gameplay recovery instead of forcing the character back to `stand` mid-animation. Studio four-direction attack spritesheets now play in 350ms by default without changing locomotion speed, with an optional `attackDurationMs` media metadata override.

  Keep repeated Studio event placements as independent runtime entities with deterministic instance ids and separate hitboxes.

  Add configurable attack, skill, hit, hurt, and defeat sounds plus per-player dynamic combat music. Battle music crossfades against map BGM, restores it after a configurable grace period, keeps ambient audio intact, and selects enemy, map, or project tracks with stable boss-aware priority.

  Expose Studio combat-audio project/map fields and `createStudioActionBattleAudio()` / `createStudioActionBattlePreset()` helpers. Studio sound resolution no longer stops every currently playing sound.

- f488e28: Keep temporary attack playback and its direction stable during locomotion synchronization. Ignore stale sprite completion callbacks, return stationary characters to idle, and preserve matching predicted attacks when the server confirms them.
- 00ac672: Prevent npm releases from containing unresolved `workspace:` dependency protocols, and publish release candidates directly under the npm `latest` tag.
- 995277f: Upgrade the RPGJS workspace and published package compatibility ranges to
  CanvasEngine 2.1, including its compiler, presets, testing, and Tiled
  integrations. Keep PixiJS on the CanvasEngine-supported 8.19 line and verify the
  existing client, server, sample, and playground builds against the new runtime.
- 0fa8fb9: Respect enemy attack phase and cooldown overrides, keep attack facing stable,
  preserve remote locomotion, and fit complete visual cycles to authoritative
  combat timings. Expose per-pattern enemy timing overrides in Studio.
- 59c06c9: Fix instant skills with zero targeting range selecting no nearby enemies because
  their automatic targeting radius was reduced to one pixel. Use the configured
  soft-targeting distance for server-selected targets, allowing damage and impact
  animations to execute while preserving explicit target range validation.
- e0bba29: Keep the legacy Action Battle-specific action bar available alongside the new
  persistent hotbar, including configured slot ordering, menu access, keyboard
  activation, and direct activation from its slots. Studio icon spritesheets now
  expose the default texture expected by GUI components.
- 15ae51e: Publish release candidates under the npm `latest` tag so fresh RPGJS projects install the current release.
- 98a30f0: Publish release candidates under npm's `latest` tag while retaining the repository's prerelease mode.
- 59c06c9: Resolve global animation functions on the authoritative combat entity before sending client visuals, including skill casts without per-action animation overrides. Preserve explicit animation overrides in standalone and MMORPG games.
- 1393b73: Keep top components such as enemy HP bars attached to scaled sprites when
  transparent frame bounds are still loading or cannot be scanned.

  Respect each enemy skill cooldown inside combos and choose varied special
  attacks that fit the current target distance.

  Let enemies choose among every learned skill, normal attacks, and contextual
  repositioning. Projectile and area skills now respect their targeting metadata,
  and optional structured AI logs explain each server-authoritative decision.

  Preload Studio skill impact and projectile media so enemy skills render their
  configured animation on the first use. Resolve reactive skill presentation
  and impact metadata before client transfer, consume their reactive SP and hit
  rate values, and play ranged skills as casts.

  Unwrap reactive skill combat values before RPGJS evaluates damage formulas, so
  enemy skills apply their configured power instead of resolving to zero damage.

  Remove the caster animation control from the Studio skill editor while keeping
  existing skill records compatible at runtime.

- e5ad24a: Establish the stable RPGJS-owned boundary for reactive gameplay properties,
  dependency-injection providers, Node room storage, and Cloudflare room hosting.
  Remove accidental Signe re-exports from the client and server roots, keep
  direct Signe imports as an explicitly advanced plugin path, and protect every
  published TypeScript entry with declaration reachability snapshots in CI.
  Keep provider creation strategies mutually exclusive, support asynchronous
  provider factories, and preserve strict member checking on the server engine.
  Enforce these public contracts in CI, test the RPGJS-owned Node storage
  lifecycle, and document complete stable migration examples.
- 8ef3f4a: Allow hotbars to filter entry types dynamically, let Action Battle resolve
  visibility per player, apply RPGJS Studio project hotbar settings, expose a
  Studio event block for displaying or hiding the Hotbar, and honor the Studio
  Title Screen, HUD, and Main Menu bindings. The main menu now hides disallowed
  item or skill assignment actions, displays the item slot picker correctly, and
  clears the native assignment when the last consumable is used.
- 3d13f8c: Add composable boss phase helpers, delayed AI sequences, server action intents,
  movement and teleport conveniences, and a generic server-driven AI visual
  registry. Resolve animation callbacks into serializable visual packets so
  Studio combat media are honored without cloning functions across rooms.

  Add the Adventure combat preset with buffered player combos, authoritative
  charged attacks, dodge invulnerability, attack multipliers, stronger Impact
  visuals, enemy telegraphs, reuse of the existing RPGJS HUD and graphic-bound
  HP components, contextual animated damage typography, skill-specific FX,
  and optional mobile heavy-attack controls. `preset: "classic"` preserves the
  previous combat and UI defaults.

  Position transient component animations from numeric world coordinates and
  derive component bounds from visible pixels for generated Studio spritesheets,
  so telegraphs, damage popups, and HP bars stay anchored to scaled characters
  without including transparent frame padding.

- Updated dependencies [decf73e]
- Updated dependencies [b74236b]
- Updated dependencies [37a4fb0]
- Updated dependencies [8ef3f4a]
- Updated dependencies [b6ab003]
- Updated dependencies [973878b]
- Updated dependencies [1cae469]
- Updated dependencies [e7b12ab]
- Updated dependencies [ccb9495]
- Updated dependencies [e7d8d13]
- Updated dependencies [1028c17]
- Updated dependencies [777541a]
- Updated dependencies [1bcd9fc]
- Updated dependencies [a0710ce]
- Updated dependencies [94cbdac]
- Updated dependencies [4d53aa7]
- Updated dependencies [66c0d77]
- Updated dependencies [66c0d77]
- Updated dependencies [94cbdac]
- Updated dependencies [94cbdac]
- Updated dependencies [fd12af7]
- Updated dependencies [c69f516]
- Updated dependencies [f488e28]
- Updated dependencies [8ef3f4a]
- Updated dependencies [48fcd25]
- Updated dependencies [e892732]
- Updated dependencies [00ac672]
- Updated dependencies [dc6aed5]
- Updated dependencies [0909491]
- Updated dependencies [50611c7]
- Updated dependencies [995277f]
- Updated dependencies [1fb8040]
- Updated dependencies [041d5ee]
- Updated dependencies [0fa8fb9]
- Updated dependencies [995277f]
- Updated dependencies [94cbdac]
- Updated dependencies [7846969]
- Updated dependencies [6b8d872]
- Updated dependencies [13517b8]
- Updated dependencies [72d3e5d]
- Updated dependencies [15ae51e]
- Updated dependencies [e11f2ed]
- Updated dependencies [f624302]
- Updated dependencies [59c06c9]
- Updated dependencies [98a30f0]
- Updated dependencies [335b768]
- Updated dependencies [e0bba29]
- Updated dependencies [85aea0c]
- Updated dependencies [c849207]
- Updated dependencies [f6aa046]
- Updated dependencies [14f7cf9]
- Updated dependencies [1393b73]
- Updated dependencies [3fb2765]
- Updated dependencies [1a45ca5]
- Updated dependencies [327185b]
- Updated dependencies [fc86ec2]
- Updated dependencies [66c0d77]
- Updated dependencies [e5ad24a]
- Updated dependencies [a7f44ba]
- Updated dependencies [83fc2b7]
- Updated dependencies [8ef3f4a]
- Updated dependencies [be412cf]
- Updated dependencies [2719f48]
- Updated dependencies [aed4d3e]
- Updated dependencies [06afecc]
- Updated dependencies [0dbe078]
- Updated dependencies [114469c]
- Updated dependencies [ef47908]
- Updated dependencies [0512640]
- Updated dependencies [3d13f8c]
  - @rpgjs/common@5.0.0
  - @rpgjs/client@5.0.0
  - @rpgjs/server@5.0.0
  - @rpgjs/vite@5.0.0

## 5.0.0-rc.9

### Patch Changes

- 1cae469: Update CanvasEngine to 2.4.0. Templates now read computed signals explicitly (`position().x` in the HP bar, light halo and dynamic bar components) and the action-battle projectile trail passes `loop={true}` to its `Fx`.
- Updated dependencies [1cae469]
- Updated dependencies [14f7cf9]
- Updated dependencies [114469c]
  - @rpgjs/client@5.0.0-rc.9
  - @rpgjs/server@5.0.0-rc.9
  - @rpgjs/vite@5.0.0-rc.9

## 5.0.0-rc.8

### Patch Changes

- 973878b: Update CanvasEngine to 2.3.0. The 2.3 compiler no longer injects `computed`, `h`, `cond` and `loop` into every component, so components now import the helpers their script uses. `rpgjs()` declares its `Plugin[]` return type.
- Updated dependencies [973878b]
- Updated dependencies [a0710ce]
- Updated dependencies [c69f516]
- Updated dependencies [7846969]
- Updated dependencies [13517b8]
- Updated dependencies [72d3e5d]
- Updated dependencies [1a45ca5]
- Updated dependencies [327185b]
- Updated dependencies [fc86ec2]
- Updated dependencies [a7f44ba]
- Updated dependencies [0dbe078]
  - @rpgjs/client@5.0.0-rc.8
  - @rpgjs/server@5.0.0-rc.8
  - @rpgjs/vite@5.0.0-rc.8
  - @rpgjs/common@5.0.0-rc.6

## 5.0.0-rc.7

### Patch Changes

- Let skill cast and impact particle effects complete naturally instead of removing
  them after a fixed timeout. Fire explosions, magic bursts, healing effects, and
  custom finite presets now retain their full particle lifetime.
- Fix instant skills with zero targeting range selecting no nearby enemies because
  their automatic targeting radius was reduced to one pixel. Use the configured
  soft-targeting distance for server-selected targets, allowing damage and impact
  animations to execute while preserving explicit target range validation.
- Resolve global animation functions on the authoritative combat entity before sending client visuals, including skill casts without per-action animation overrides. Preserve explicit animation overrides in standalone and MMORPG games.
- Updated dependencies
- Updated dependencies [ef47908]
  - @rpgjs/client@5.0.0-rc.7
  - @rpgjs/server@5.0.0-rc.7
  - @rpgjs/vite@5.0.0-rc.7

## 5.0.0-rc.6

### Patch Changes

- Respect enemy attack phase and cooldown overrides, keep attack facing stable,
  preserve remote locomotion, and fit complete visual cycles to authoritative
  combat timings. Expose per-pattern enemy timing overrides in Studio.
- Updated dependencies [d88267a]
- Updated dependencies
  - @rpgjs/common@5.0.0-rc.5
  - @rpgjs/server@5.0.0-rc.6
  - @rpgjs/client@5.0.0-rc.6
  - @rpgjs/vite@5.0.0-rc.6

## 5.0.0-rc.5

### Patch Changes

- f488e28: Keep temporary attack playback and its direction stable during locomotion synchronization. Ignore stale sprite completion callbacks, return stationary characters to idle, and preserve matching predicted attacks when the server confirms them.
- Updated dependencies [f488e28]
  - @rpgjs/client@5.0.0-rc.5
  - @rpgjs/server@5.0.0-rc.5
  - @rpgjs/vite@5.0.0-rc.5

## 5.0.0-rc.4

### Patch Changes

- Publish release candidates under npm's `latest` tag while retaining the repository's prerelease mode.
- Updated dependencies
  - @rpgjs/client@5.0.0-rc.4
  - @rpgjs/common@5.0.0-rc.4
  - @rpgjs/server@5.0.0-rc.4
  - @rpgjs/vite@5.0.0-rc.4

## 5.0.0-rc.3

### Patch Changes

- Publish release candidates under the npm `latest` tag so fresh RPGJS projects install the current release.
- Updated dependencies
  - @rpgjs/client@5.0.0-rc.3
  - @rpgjs/common@5.0.0-rc.3
  - @rpgjs/server@5.0.0-rc.3
  - @rpgjs/vite@5.0.0-rc.3

## 5.0.0-rc.2

### Patch Changes

- Prevent npm releases from containing unresolved `workspace:` dependency protocols.
- Updated dependencies
  - @rpgjs/client@5.0.0-rc.2
  - @rpgjs/common@5.0.0-rc.2
  - @rpgjs/server@5.0.0-rc.2
  - @rpgjs/vite@5.0.0-rc.2

## 5.0.0-rc.36

### Patch Changes

- Updated dependencies [94cbdac]
- Updated dependencies [4d53aa7]
- Updated dependencies [66c0d77]
- Updated dependencies [66c0d77]
- Updated dependencies [94cbdac]
- Updated dependencies [94cbdac]
- Updated dependencies [94cbdac]
- Updated dependencies [f624302]
- Updated dependencies [66c0d77]
  - @rpgjs/client@5.0.0-rc.36
  - @rpgjs/server@5.0.0-rc.36
  - @rpgjs/common@5.0.0-rc.32
  - @rpgjs/vite@5.0.0-rc.36

## 5.0.0-beta.35

### Patch Changes

- Updated dependencies [e7b12ab]
  - @rpgjs/client@5.0.0-beta.35
  - @rpgjs/server@5.0.0-beta.35
  - @rpgjs/vite@5.0.0-beta.35

## 5.0.0-beta.34

### Patch Changes

- Updated dependencies [b74236b]
- Updated dependencies [1fb8040]
- Updated dependencies [6b8d872]
- Updated dependencies [85aea0c]
  - @rpgjs/client@5.0.0-beta.34
  - @rpgjs/common@5.0.0-beta.31
  - @rpgjs/server@5.0.0-beta.34
  - @rpgjs/vite@5.0.0-beta.34

## 5.0.0-beta.33

### Patch Changes

- Updated dependencies [0909491]
- Updated dependencies [c849207]
  - @rpgjs/client@5.0.0-beta.33
  - @rpgjs/server@5.0.0-beta.33
  - @rpgjs/vite@5.0.0-beta.33

## 5.0.0-beta.32

### Minor Changes

- 1bcd9fc: Keep `playSound()` as the single canonical sound API while adding persisted mixer channels, spatial playback, native interface cues, coordinated map and battle music, and Studio audio configuration, so framework users do not have to choose between overlapping concepts.

### Patch Changes

- Updated dependencies [decf73e]
- Updated dependencies [1bcd9fc]
  - @rpgjs/common@5.0.0-beta.30
  - @rpgjs/client@5.0.0-beta.32
  - @rpgjs/server@5.0.0-beta.32
  - @rpgjs/vite@5.0.0-beta.32

## 5.0.0-beta.31

### Patch Changes

- Updated dependencies [e892732]
  - @rpgjs/client@5.0.0-beta.31
  - @rpgjs/common@5.0.0-beta.29
  - @rpgjs/server@5.0.0-beta.31
  - @rpgjs/vite@5.0.0-beta.31

## 5.0.0-beta.30

### Patch Changes

- e0bba29: Keep the legacy Action Battle-specific action bar available alongside the new
  persistent hotbar, including configured slot ordering, menu access, keyboard
  activation, and direct activation from its slots. Studio icon spritesheets now
  expose the default texture expected by GUI components.
- Updated dependencies [e0bba29]
- Updated dependencies [aed4d3e]
  - @rpgjs/client@5.0.0-beta.30
  - @rpgjs/common@5.0.0-beta.28
  - @rpgjs/server@5.0.0-beta.30
  - @rpgjs/vite@5.0.0-beta.30

## 5.0.0-beta.29

### Major Changes

- 4cc3086: Add a persistent server-authoritative, type-extensible hotbar for skills, items, and custom gameplay entries. The hotbar now supports a dynamic 1–10 slot capacity, retained locked-slot assignments, unlock hints, a persistent active slot, automatic refresh after level/class/inventory/map changes, direct keyboard shortcuts, a radial gamepad selector, LT/RT slot cycling with X activation, mobile centering, cooldown/cost/quantity presentation, and serialized `instant`, `select`, or `target` activation handlers.

  Replace Action Battle's dedicated `ui.actionBar` and component with the generic `ui.hotbar`. Action Battle skills enrich generic entries with targeting, cooldown, projectile, sound, animation, and visual metadata while their authoritative execution continues through native skill and item hooks. This is an intentional breaking configuration and export cleanup.

  Keep direct 1–0 Zelda-style menu assignment, display unavailable slots with their unlock condition in the root-level assignment picker, execute Studio skill workflows through the native `onUse` hook, make instant skills soft-target without a confirmation step, preserve skill impact media through AI damage feedback, and add translated Studio presentation fields, visual area targeting, phase-specific CanvasEngine cast/trail/impact presets, a default projectile renderer compatible with Studio skill records, and robust object-signal hydration for class and hotbar sync payloads. Upgrade to `@signe/sync` 3.1.1 so object-signal hydration uses the upstream fix without a local package patch.

  Expose a complete set of `--rpg-hotbar-*` CSS variables, bridge them through
  `@rpgjs/ui-css`, document the public client and server APIs with generated
  JSDoc references, and add a farm-themed playground showing mixed item and skill
  slots, menu assignment, and the persistent hotbar show/hide lifecycle.

### Patch Changes

- 4b6fe16: Make Adventure combat more responsive and readable with overlap-safe control locks, guard/parry/counter gameplay, soft targeting, coordinated enemy attack turns, Studio-driven combat animations, skill hit-rate handling, anchored impact feedback, configurable hit-stop, and enemy death effects.

  Let temporary attack spritesheets finish their visual follow-through after gameplay recovery instead of forcing the character back to `stand` mid-animation. Studio four-direction attack spritesheets now play in 350ms by default without changing locomotion speed, with an optional `attackDurationMs` media metadata override.

  Keep repeated Studio event placements as independent runtime entities with deterministic instance ids and separate hitboxes.

  Add configurable attack, skill, hit, hurt, and defeat sounds plus per-player dynamic combat music. Battle music crossfades against map BGM, restores it after a configurable grace period, keeps ambient audio intact, and selects enemy, map, or project tracks with stable boss-aware priority.

  Expose Studio combat-audio project/map fields and `createStudioActionBattleAudio()` / `createStudioActionBattlePreset()` helpers. Studio sound resolution no longer stops every currently playing sound.

- 9f317fb: Keep top components such as enemy HP bars attached to scaled sprites when
  transparent frame bounds are still loading or cannot be scanned.

  Respect each enemy skill cooldown inside combos and choose varied special
  attacks that fit the current target distance.

  Let enemies choose among every learned skill, normal attacks, and contextual
  repositioning. Projectile and area skills now respect their targeting metadata,
  and optional structured AI logs explain each server-authoritative decision.

  Preload Studio skill impact and projectile media so enemy skills render their
  configured animation on the first use. Resolve reactive skill presentation
  and impact metadata before client transfer, consume their reactive SP and hit
  rate values, and play ranged skills as casts.

  Unwrap reactive skill combat values before RPGJS evaluates damage formulas, so
  enemy skills apply their configured power instead of resolving to zero damage.

  Remove the caster animation control from the Studio skill editor while keeping
  existing skill records compatible at runtime.

- 512e637: Allow hotbars to filter entry types dynamically, let Action Battle resolve
  visibility per player, apply RPGJS Studio project hotbar settings, expose a
  Studio event block for displaying or hiding the Hotbar, and honor the Studio
  Title Screen, HUD, and Main Menu bindings. The main menu now hides disallowed
  item or skill assignment actions, displays the item slot picker correctly, and
  clears the native assignment when the last consumable is used.
- aa4a517: Add composable boss phase helpers, delayed AI sequences, server action intents,
  movement and teleport conveniences, and a generic server-driven AI visual
  registry. Resolve animation callbacks into serializable visual packets so
  Studio combat media are honored without cloning functions across rooms.

  Add the Adventure combat preset with buffered player combos, authoritative
  charged attacks, dodge invulnerability, attack multipliers, stronger Impact
  visuals, enemy telegraphs, reuse of the existing RPGJS HUD and graphic-bound
  HP components, contextual animated damage typography, skill-specific FX,
  and optional mobile heavy-attack controls. `preset: "classic"` preserves the
  previous combat and UI defaults.

  Position transient component animations from numeric world coordinates and
  derive component bounds from visible pixels for generated Studio spritesheets,
  so telegraphs, damage popups, and HP bars stay anchored to scaled characters
  without including transparent frame padding.

- Updated dependencies [512e637]
- Updated dependencies [4b6fe16]
- Updated dependencies [512e637]
- Updated dependencies [4cc3086]
- Updated dependencies [9f317fb]
- Updated dependencies [512e637]
- Updated dependencies [aa4a517]
  - @rpgjs/server@5.0.0-beta.29
  - @rpgjs/client@5.0.0-beta.29
  - @rpgjs/common@5.0.0-beta.27
  - @rpgjs/vite@5.0.0-beta.29

## 5.0.0-beta.28

### Patch Changes

- 995277f: Upgrade the RPGJS workspace and published package compatibility ranges to
  CanvasEngine 2.1, including its compiler, presets, testing, and Tiled
  integrations. Keep PixiJS on the CanvasEngine-supported 8.19 line and verify the
  existing client, server, sample, and playground builds against the new runtime.
- Updated dependencies [37a4fb0]
- Updated dependencies [995277f]
- Updated dependencies [995277f]
- Updated dependencies [335b768]
  - @rpgjs/server@5.0.0-beta.28
  - @rpgjs/client@5.0.0-beta.28
  - @rpgjs/vite@5.0.0-beta.28

## 5.0.0-beta.27

### Patch Changes

- e5ad24a: Establish the stable RPGJS-owned boundary for reactive gameplay properties,
  dependency-injection providers, Node room storage, and Cloudflare room hosting.
  Remove accidental Signe re-exports from the client and server roots, keep
  direct Signe imports as an explicitly advanced plugin path, and protect every
  published TypeScript entry with declaration reachability snapshots in CI.
  Keep provider creation strategies mutually exclusive, support asynchronous
  provider factories, and preserve strict member checking on the server engine.
  Enforce these public contracts in CI, test the RPGJS-owned Node storage
  lifecycle, and document complete stable migration examples.
- Updated dependencies [dc6aed5]
- Updated dependencies [e5ad24a]
  - @rpgjs/client@5.0.0-beta.27
  - @rpgjs/server@5.0.0-beta.27
  - @rpgjs/common@5.0.0-beta.26
  - @rpgjs/vite@5.0.0-beta.27

## 5.0.0-beta.26

### Patch Changes

- b6ab003: Establish `defineModule()` as the canonical runtime module authoring API, export it from the client and server packages, keep `createModule()` for advanced provider composition, and align runtime-specific module installation documentation and examples.
- Updated dependencies [b6ab003]
- Updated dependencies [777541a]
- Updated dependencies [48fcd25]
- Updated dependencies [83fc2b7]
  - @rpgjs/client@5.0.0-beta.26
  - @rpgjs/common@5.0.0-beta.25
  - @rpgjs/server@5.0.0-beta.26
  - @rpgjs/vite@5.0.0-beta.26

## 5.0.0-beta.25

### Patch Changes

- Updated dependencies [ccb9495]
- Updated dependencies [f6aa046]
- Updated dependencies [0512640]
  - @rpgjs/client@5.0.0-beta.25
  - @rpgjs/common@5.0.0-beta.24
  - @rpgjs/server@5.0.0-beta.25
  - @rpgjs/vite@5.0.0-beta.25

## 5.0.0-beta.24

### Patch Changes

- Updated dependencies [e11f2ed]
- Updated dependencies [3fb2765]
- Updated dependencies [be412cf]
  - @rpgjs/client@5.0.0-beta.24
  - @rpgjs/common@5.0.0-beta.23
  - @rpgjs/server@5.0.0-beta.24
  - @rpgjs/vite@5.0.0-beta.24

## 5.0.0-beta.23

### Patch Changes

- Updated dependencies [e7d8d13]
  - @rpgjs/client@5.0.0-beta.23
  - @rpgjs/common@5.0.0-beta.22
  - @rpgjs/server@5.0.0-beta.23
  - @rpgjs/vite@5.0.0-beta.23

## 5.0.0-beta.22

### Patch Changes

- Updated dependencies [1028c17]
- Updated dependencies [06afecc]
  - @rpgjs/client@5.0.0-beta.22
  - @rpgjs/vite@5.0.0-beta.22
  - @rpgjs/server@5.0.0-beta.22

## 5.0.0-beta.20

### Patch Changes

- Release the next RPGJS beta while keeping the physics package unchanged.
- Updated dependencies
  - @rpgjs/client@5.0.0-beta.20
  - @rpgjs/common@5.0.0-beta.20
  - @rpgjs/server@5.0.0-beta.20
  - @rpgjs/vite@5.0.0-beta.20

## 5.0.0-beta.19

### Patch Changes

- Release the next RPGJS beta while keeping the physics package unchanged.
- Updated dependencies
  - @rpgjs/client@5.0.0-beta.19
  - @rpgjs/common@5.0.0-beta.19
  - @rpgjs/server@5.0.0-beta.19
  - @rpgjs/vite@5.0.0-beta.19

## 5.0.0-beta.17

### Patch Changes

- Release the next RPGJS beta while keeping the physics package on its stable release line.
- Updated dependencies
  - @rpgjs/client@5.0.0-beta.17
  - @rpgjs/common@5.0.0-beta.16
  - @rpgjs/server@5.0.0-beta.17
  - @rpgjs/vite@5.0.0-beta.17

## 5.0.0-beta.16

### Patch Changes

- Release the next RPGJS beta with terrain rendering performance improvements and a unified server tick loop.
- Updated dependencies
  - @rpgjs/client@5.0.0-beta.16
  - @rpgjs/common@5.0.0-beta.15
  - @rpgjs/server@5.0.0-beta.16
  - @rpgjs/vite@5.0.0-beta.16

## 5.0.0-beta.15

### Patch Changes

- Updated dependencies [dba133e]
  - @rpgjs/client@5.0.0-beta.15
  - @rpgjs/server@5.0.0-beta.15
  - @rpgjs/vite@5.0.0-beta.15

## 5.0.0-beta.14

### Patch Changes

- Updated dependencies [c96b31a]
  - @rpgjs/common@5.0.0-beta.14
  - @rpgjs/server@5.0.0-beta.14
  - @rpgjs/client@5.0.0-beta.14
  - @rpgjs/vite@5.0.0-beta.14

## 5.0.0-beta.13

### Patch Changes

- Release the next RPGJS beta with client interactions, i18n support, movement and physics improvements, Studio fixes, action battle updates, playground migration, and related runtime documentation.
- Updated dependencies
  - @rpgjs/client@5.0.0-beta.13
  - @rpgjs/common@5.0.0-beta.13
  - @rpgjs/server@5.0.0-beta.13
  - @rpgjs/vite@5.0.0-beta.13

## 5.0.0-beta.12

### Patch Changes

- Prepare beta.12 with action battle AI, area queries, client visuals, event component resolvers, projectile handling, and related Vite/runtime updates.
- Updated dependencies
  - @rpgjs/client@5.0.0-beta.12
  - @rpgjs/common@5.0.0-beta.12
  - @rpgjs/server@5.0.0-beta.12
  - @rpgjs/vite@5.0.0-beta.12

## 5.0.0-beta.11

### Patch Changes

- Update CanvasEngine peer and compiler dependencies for the beta.11 package set.

  - @rpgjs/client@5.0.0-beta.11
  - @rpgjs/common@5.0.0-beta.11
  - @rpgjs/server@5.0.0-beta.11
  - @rpgjs/vite@5.0.0-beta.11

## 5.0.0-beta.10

### Patch Changes

- Updated dependencies
  - @rpgjs/client@5.0.0-beta.10
  - @rpgjs/server@5.0.0-beta.10
  - @rpgjs/vite@5.0.0-beta.10

## 5.0.0-beta.9

### Major Changes

- c456d25: beta.9

### Patch Changes

- Updated dependencies [c456d25]
  - @rpgjs/client@5.0.0-beta.9
  - @rpgjs/common@5.0.0-beta.9
  - @rpgjs/server@5.0.0-beta.9
  - @rpgjs/vite@5.0.0-beta.9

## 5.0.0-beta.8

### Major Changes

- 35e7fa4: beta.8

### Patch Changes

- Updated dependencies [35e7fa4]
  - @rpgjs/client@5.0.0-beta.8
  - @rpgjs/common@5.0.0-beta.8
  - @rpgjs/server@5.0.0-beta.8
  - @rpgjs/vite@5.0.0-beta.8
