# @rpgjs/client

## 5.2.0

### Minor Changes

- ddc9fd5: Add a startup splash that shows at the first paint. A page declares `#rpg-splash` (the new `rpg-ui-splash` classes of `@rpgjs/ui-css`, pure HTML and CSS, so it keeps turning while the main thread is busy); the client fills its translated label, and `dismissStartupSplash()`, `setStartupSplashLabel()` and `hasStartupSplash()` are exported. Studio dismisses it when the first map is revealed or the title screen is shown, and shows its own loader without delay on the first map load.

### Patch Changes

- ba179fc: Render the camera on whole pixels so the tilemap no longer shimmers when the camera follows an interpolated (fractional) position. Set `engine.cameraPixelSnap = false` to keep a fully fluid camera.
- cd51839: Update CanvasEngine to 2.4.1.
- 27367eb: Gamepad in the menus: B and Start open, go back from and close the GUIs (they were mapped to a `back` control that the menus, which name it `escape`, never received); A advances dialog boxes; the d-pad navigates menus, the item confirmation popup and the hotbar slot picker; L/R (shoulder buttons) switch tabs in the main menu; the Options menu can be driven with the gamepad; the cursor stays on the entry you came from when leaving a submenu; the stick no longer races through entries.

  Closed GUIs no longer keep answering to the gamepad (a patch unsubscribes the CanvasEngine `GamepadControls` directive from joypad.js on destroy), which fixed A saving several slots at once and B/A acting on a GUI that was already closed.

- 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()`.
- 92cdd87: Fix: the icons of the skills menu, of the hotbar and of the hotbar slot picker are no longer drawn at twice the size of their box. `DOMSprite` already fits the icon into its width and height with `objectFit="contain"`, the extra `scale={2}` doubled it (the icon covered the skill name in the skills menu and was cropped in the hotbar).
- eafbca6: Fix: NPCs and other players no longer replay their old positions after a browser tab was hidden or frozen. The client consumes one movement frame per render tick, so the positions received while the render loop was paused formed a backlog that never drained; the backlog is now collapsed to the latest position.
- Updated dependencies [cd51839]
- Updated dependencies [2fbd534]
- Updated dependencies [dcd5a2d]
- Updated dependencies [ddc9fd5]
  - @rpgjs/server@5.1.1
  - @rpgjs/ui-css@5.2.0

## 5.1.0

### Minor Changes

- fcf625e: Weather supports every CanvasEngine effect and preset, and custom weather components.

  - `WeatherState.preset` is forwarded to CanvasEngine's `<Weather>`, `effect` is optional when a preset gives it, and every param is forwarded as it is. `map.setWeather()` and `patchWeather()` accept a preset without an effect, and a patch with a new preset or effect replaces the previous one.
  - `WeatherEffect` accepts the CanvasEngine effects (`rays`, `embers`, `ash`, `leaves`, `petals`, `fireflies`, `spores`, `sand`) and custom ids; `WeatherParams` is open. `@rpgjs/common` exports the catalog (`WEATHER_EFFECTS`, `WEATHER_PRESET_EFFECTS`, `WEATHER_PRESET_NAMES`, `getWeatherPresetEffect()`, `resolveWeatherEffect()`) without importing the renderer.
  - New `weathers: [{ id, component }]` client module option: when `effect` is a registered id, the scene renders that component in the weather layer, and a registered id replaces a built-in effect of the same name. An unknown effect or preset is reported once and renders nothing.

### Patch Changes

- 3d240d7: Add a day night cycle based on the `DayNightCycle` preset of CanvasEngine. Maps enable it with `lighting.dayNight`, and light spots get `halo` and `schedule` (hours they are on). With the Time Manager, `lighting: { dayNight: true }` drives the scene from the synchronized server hour; `state.hourFloat` and `state.phase` expose the hour with decimals and the phase of the day.

  Time Manager fixes: the lighting phases are now merged into the lighting of the map instead of replacing it (light spots were lost), and the client projects the time from the clock of the server so a client clock that is off no longer shifts the displayed hour.

  The Time Manager lighting accepts per map overrides (`lighting.maps`, `false` to leave a map untouched) and a map can opt out with `lighting.dayNight.enabled: false`. A new `onPhaseChange` hook fires with `onLightingPhaseChange`, the client warns when the server drives the cycle with the Time Manager and the client module is missing, and the docs state the unit of `scale` (game minutes per real minute).

- 6a924a3: Add a shared `withTimeManager()` module that synchronizes authoritative map time snapshots, exposes server and client time managers, supports calendars and pause/scale controls, and can optionally drive map lighting and weighted weather ambiences without adding new public methods to `RpgMap`.

  The time manager now also exposes map-aware environment hooks for plugin-level rules and event-level reactions when time, day, lighting phase, or weather ambience 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).
- 831d23a: Add a clock on screen for the Time Manager: `withTimeManager({ hud: true })` (or `hud: { position, size, fastScale }`) draws a pill with the day and the hour, and a round medallion whose sky, sun, moon and stars follow the hour of the server, with a badge when the time is paused or fast. `@rpgjs/ui-css` gets the `rpg-ui-clock` styles and Storybook stories.
- 1a7befc: Align the animations of a Studio character on its feet. Each direction of an animation is now calibrated on the median pose of its frames (height and feet position) instead of its first image, and a frame can carry a `footAnchor` that the client puts on the bottom center of the hitbox. Switching between stand and walk no longer shifts or resizes the character. A warning is logged when the pixels of a sheet cannot be read.
- Updated dependencies [3d240d7]
- Updated dependencies [9f92e2d]
- Updated dependencies [8abce20]
- Updated dependencies [6a924a3]
- Updated dependencies [0380564]
- Updated dependencies [acf93b3]
- Updated dependencies [9f92e2d]
- Updated dependencies [7b2e8d6]
- Updated dependencies [831d23a]
- Updated dependencies [fcf625e]
  - @rpgjs/common@5.1.0
  - @rpgjs/server@5.1.0
  - @rpgjs/ui-css@5.1.0

## 5.0.0

### Minor Changes

- decf73e: Add a server-authoritative Actor selection API, runtime Actor switching that preserves acquired progression, a responsive cinematic CanvasEngine character selector, resolved Actor and Class object inputs, class skill progression for CMS-backed data, RPGJS Studio new-game Actor selection settings, character-select/change-class event blocks, and a native query-area block with per-target child execution.
- b74236b: Add server-authoritative custom gameplay rooms with registered room paths,
  session-preserving player transfers, synchronized client room state, and
  CanvasEngine scene adapters that run independently of maps and map physics.
  Room providers also accept concrete `RpgGameplayRoom` subclasses with their
  typed constructor context, so strict TypeScript applications can register them.
  Returning from a custom room now waits for a fresh map-stream packet before
  remounting the map component and keeps the room scene visible until that data
  is ready. Map components are also gated on non-null render data, preventing
  stale or incomplete values from reaching CanvasEngine presets.
- 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.
- 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.

- 995277f: Add explicit renderer-neutral GUI registrations with an official Vue helper,
  ship the authoritative and replaceable RPGJS chat module, provide default and
  pixel chat themes over shared semantic CSS primitives, and enforce client/server
  production bundle isolation with executable fixtures. Include a runnable pixel
  chat playground and keep chat socket listeners active across standalone startup
  and player map transfers. Document client/server setup, moderation hooks,
  replacement components, themes, translations, and the public chat state API.
  Emit complete side-specific chat declarations, synchronize the built-in input
  length with client configuration, and reject explicitly unknown chat channels.
- f624302: Add a pre-connection MMORPG account GUI, deferred client connections, rich
  server authentication results, and player-aware authentication lifecycle hooks.
  Registration uses distinct username and email fields with password confirmation,
  and restored sessions no longer flash the account GUI before the title screen.
  Add branded account screens with configurable imagery, music and UI sounds,
  reusable form feedback primitives, and optional password recovery/reset adapters.
- 83fc2b7: Add production Signe room adapters for persistent Node servers and Cloudflare Durable Objects, plus remote Vite map publication for trusted editor workflows with transient-only retries. Resolve local TMX files and their external tilesets when publishing maps, recreate configured events safely during live map updates, and restore player and event graphics after clients reload the Tiled scene.

  Add provider-neutral authoritative map streaming with progressive render/physics chunks, client prediction barriers, and spatial interest management for players, NPCs, events, and projectiles. Keep complete Tiled TMX/TSX sources server-side in MMORPG mode while sharing the same game module between Node.js, local Wrangler, and Cloudflare Durable Object hosts.

  Use the physics broad-phase index when resolving synchronized entities in each player's retained chunks, avoiding full-room player and event scans on every sync packet.

  Assign Tiled collision geometry to every streamed chunk it intersects, and preserve the generated client reference for action, dash, pointer, and interaction APIs with a dedicated interactions guide.

  Preserve initial room synchronization on older local Workerd runtimes that expose an accepted Durable Object WebSocket with a transient `CONNECTING` ready state.

  Prevent CanvasEngine rain layers from retaining tick subscriptions when an asynchronous mount overlaps destruction or another mount.

  Keep component-ready standalone Studio maps intact when sharing the in-memory server, and select the Cloudflare publisher independently from the generic MMORPG entry so local Node.js development does not require a Worker secret.

  Add Studio v2 authoritative map preparation and progressive chunk streaming, including server physics, nearby rendering data, and provider-neutral entity synchronization. Trusted Vite publishers can now resolve a complete Studio payload before sending it to Node or Cloudflare map rooms, while raw Studio map structure, events, database records, and global collision data stay server-side.

  Make initial map streaming explicit and hibernation-safe: clients request a fresh manifest after joining, trusted map updates are durably stored before acknowledgement, and recreated Durable Object room instances rebuild their transient streaming runtime. Stream Studio terrain control masks per chunk so transition rendering and prediction physics work without disclosing the complete map, and reset spatial visibility on reconnect so existing clients receive newly joined players.

  Preserve custom streaming providers when Studio's built-in streaming is disabled, refresh cached client controllers after Durable Object hibernation, and key terrain-control buffers by their complete streamed region content to prevent stale masks.

  Suppress projectile lifecycle packets that fall outside a player's disclosed interest window, clear client prediction barriers after the final streamed chunk is evicted, and coalesce concurrent requests for the same map stream. Exercise these paths with server, client, and real Workerd WebSocket tests, and run the Cloudflare MMORPG and Studio runtime suites in CI.

  Avoid dereferencing an empty Studio weather state while switching maps.

  Publish authenticated world topology updates to every map room, persist them across Durable Object hibernation, and refresh automatic world-map transitions without restarting the MMORPG server.

  Document the Durable Object room model, map-and-world publication flow, hibernation recovery, production deployment, and common Cloudflare diagnostics.

  Correct the documented default runtime to standalone RPG and add a beginner deployment path that takes the v5 starter through explicit MMORPG development, private map bundling, authenticated map publication, a persistent Node Docker deployment, or a Cloudflare Durable Object deployment. Include an executable production map publisher in the Cloudflare sample and make the production pages discoverable from both documentation navigations.

  Declare the RPGJS Durable Object binding explicitly in Wrangler staging and production environments so isolated deployments keep their room namespace.

  Cover the previous Studio scene before unmounting it during World transfers, preserve recent directional movement into the destination room, then reveal the new map through a full-screen dark transition with a centered, delayed localized loader and a bounded asset wait so stale or white frames cannot flash while fast local transitions stay unobtrusive.

- 0512640: Add reusable typed input and textarea controls for standalone forms and dialog boxes, with shared server-side validation and an RPGJS Studio block that stores the submitted value.

### Patch Changes

- 8ef3f4a: Add type-aware Studio item fields and lifecycle workflows. Regular items expose
  consumable use hooks, while weapons and armors expose equipment modifiers and
  the native equip hook. Regular items can also display a configured spritesheet
  animation, play a personal sound, and display a built-in particle effect after
  successful use. The editor groups Item fields into dedicated layouts. Because
  the Item schema is conditional, it resolves the selected Item, Weapon, or Armor
  branch before distributing fields across editor tabs, avoiding duplicate
  generic property sections. Online Studio games refresh database records when a
  player joins a map, and item use resolves lifecycle hooks from the current map
  database so a removed use animation no longer survives in an inventory
  snapshot.

  Clarify the built-in hotbar model: it accepts learned skills and usable regular
  items, while weapons and armors remain browseable in Items and are managed from
  Equip. Studio now labels these choices as usable items, filters starting
  equipment selectors by slot type, and ignores invalid saved equipment without
  adding it to the player's inventory.

  The Studio Item editor now derives its tabs from the selected item type.
  Regular items expose Usage and Presentation, while weapons and armors expose
  Equipment, so conditional schemas no longer leave empty tabs visible.
  Custom fields now leave their schema description to the shared CMS field
  wrapper, preventing duplicate help text, and Item and Skill lifecycle actions
  are consistently presented as triggers in the editor.

  Creating a trigger now persists its parent Item or Skill first, keeps the
  editor on the newly created record, and immediately saves the trigger
  attachment. Failed attachments restore the previous form state instead of
  leaving an untracked trigger.

  The Studio Skill editor now presents its schema layouts as translated tabs,
  matching the Item editor while keeping Action Battle and its triggers together.
  Area size, presets, and individual area-mask edits now notify the Skill form,
  so the updated targeting area is saved and restored after reloading the editor.
  Translated Skill and Item media fields now render the same native media preview
  as icon fields, including image, spritesheet, and audio previews.
  The Studio sidebar now uses a supported panel icon for the GUI editor entry.

- 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`.
- e7b12ab: Add cinematic video playback through the existing GUI lifecycle, with aspect-preserving presentation, fades, accessible skip controls, autoplay recovery, temporary music attenuation, and error recovery. Register the Studio show_cinematic block and resolve its media through the game data provider without adding map-media associations.

  Support per-clip skip/music options, map video preloading and consecutive video playlists. Guard overlapping player event interactions and let gameplay release movement keys during cinematics.

  Skip immediately on click, tap or Escape, honoring non-skippable clips and ignoring key repeats and late responses from skipped clips.

- ccb9495: Fix TypeScript declaration errors across the package build, align multi-target declaration exports, complete movement API overloads, and make package and root builds fail when declaration generation reports a type error.
- e7d8d13: Hydrate Studio event hitboxes from the API initially, apply synchronized hitbox object payloads to client physics bodies, publish runtime Studio hitbox changes through the synced event collection instead of a separate setHitbox websocket path, and keep standalone map transfers on the restored room so transferred player positions and hitboxes are preserved in sample-dev.
- 1028c17: Use workspace protocol for internal RPGJS package dependencies during prerelease development so CI installs do not fetch unpublished beta packages from npm.
- a0710ce: Fix GUI and map rendering issues seen in the samples:

  - Registering a GUI no longer remounts every displayed GUI. GUIs are keyed by a new `renderKey`, which removes the repeated title screen mounts and the `FocusContainer ... not found` warnings at startup.
  - The map scene component keeps its last `data` until it is unmounted, so custom map components no longer read `undefined` during a map transfer.
  - The built-in HUD stays hidden until the player enters a map and while the title screen is displayed.

- 94cbdac: Move equipment details into a compact inspector beside the list, add a Status menu entry returning to the hero overview, and extend local key preferences to Action and Back with immediate menu/game updates and preserved action payloads.
- 4d53aa7: Replace the default GUI theme with a crystalline JRPG palette, refined controls,
  shared panel treatments and semantic customization tokens. Keep existing CSS
  entry points and support isolated pixel and custom themes on the same page.

  Add a Storybook catalogue of foundations, primitive states and game compositions,
  browser checks and GitHub Pages deployment. Document theme creation and migration.
  Bridge mobile canvas control colors to the game CSS palette while preserving
  explicit withMobile overrides.

- 66c0d77: Fix unnecessarily clipped dialogue choices by sizing short prompts from their complete text and giving choices the remaining fixed-height space. Keep scrolling for genuinely long lists.

  Restore mouse and touch assignment in the hotbar slot picker by avoiding false HTML disabled attributes, preserving locked-slot guards and keyboard focus selection.

- 66c0d77: Remove dialogue page counters, fill the panel's inner height with the portrait, and support Enter confirmation with a short guard against repeated advancement. Align shop attribute comparisons with the compact equipment inspector.

  Fix positive attribute changes rendering only the plus sign in both equipment and shop panels.

- 94cbdac: Polish equipment attribute comparisons and expose Studio's Options menu with per-project movement key preferences, conflict validation, reset controls and existing channel-based audio sliders.
- 94cbdac: Add reduced-motion-aware GUI transitions, nested input locks, submenu navigation sounds and writable audio sliders. Improve shop comparisons and dialogue typography/portraits. Add safe reusable Markdown text runs, paginated dialogue reveal and a configurable typewriter sound on the UI channel.
- 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.
- 8ef3f4a: Keep CanvasEngine GUIs registered while hidden and reactively mount their components when their display signal changes, restoring title screens and other GUIs after hide/show operations.
- e892732: Keep the camera attached when MMORPG streaming refreshes Tiled layers and synchronize instant following with the rendered character position so the viewport cannot trail by one frame. Stabilize predicted movement by publishing finalized input batches only after their client physics step, applying every input from the same client tick in one authoritative server step, capturing the matching acknowledged position, ignoring delayed acknowledgements whose prediction history expired, routing local-player snapshots through prediction instead of applying them directly, and sharing the same movement idle window on both peers.
- 00ac672: Prevent npm releases from containing unresolved `workspace:` dependency protocols, and publish release candidates directly under the npm `latest` tag.
- dc6aed5: Initialize recursively nested RPGJS provider lists in client and server setup so
  sample and consumer configurations register every provider at runtime.
- 0909491: Preserve weather WebSocket payloads through server reconciliation and render
  them as authoritative so runtime updates and `clearWeather()` replace weather
  initially configured in Studio map data.
- 50611c7: Keep combat recoil authoritative across RPG and MMORPG runtimes. Prevent velocity accumulation, premature cancellation by idle or locked input, and replay of pre-impact positions. Synchronize the transient recoil phase, smooth its presentation, and release completed attack locks without restarting locomotion during an impact.
- 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.
- 1fb8040: Keep the mobile joystick connected across MMORPG streamed map updates by preventing retired character effects from overwriting live controls, continue repeating held movement without new pointer events, and preserve joystick power after direction changes.

  Dispose the character controls effect through its underlying subscription so streamed player removal completes without a runtime error.

- 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.
- 94cbdac: Repair Studio hero initialization when a class skill is already learned, prefer canonical media references, and guard missing spritesheet identifiers. Refine the integrated status, inventory, equipment, skills, save and shop interfaces with theme-driven layouts, localized empty/unavailable states, safe icon fallbacks and window-local close buttons. Make the mobile hotbar scrollable instead of clipping its slots.
- 13517b8: Stop rebuilding projectile components on every frame. `ProjectileManager.renderList` only changes when projectiles appear or disappear, and pushes positions and progress into per-projectile signals on each step; the map scene renders from it. `current` keeps its plain-value contract. In the sample, JavaScript work per frame with projectiles drops from about 7.5 ms to 5.2 ms.
- 72d3e5d: Rendered projectile components receive spawn data as plain values and only the changing props as signals. Before an impact, `impact` is `null` and `impactElapsed` / `impactProgress` are `0`, so typed `defineProps` no longer reject `undefined` signal values.
- 15ae51e: Publish release candidates under the npm `latest` tag so fresh RPGJS projects install the current release.
- e11f2ed: Fix main menu Escape handling, add outside-click and touch close controls for prebuilt modal GUIs, make menu layouts responsive on small screens, restore a compact desktop menu with an integrated sidebar and column-based item views, use fade-only menu transitions, improve Skills/Equipment and save slot spacing, make active menu rows less visually harsh, and improve HUD and dialog border rendering.
- 59c06c9: Match Studio terrain texture sampling by excluding atlas cell borders before repeating textures. Measure the HUD portrait frame so facesets fit reliably on first display and after resizing in standalone and multiplayer games.
- 98a30f0: Publish release candidates under npm's `latest` tag while retaining the repository's prerelease mode.
- e0bba29: Fix Studio world-map transitions and preserve the reactive HUD state during
  map transfers.

  - Normalize scaled Studio world coordinates to integer pixels and resolve
    automatic transitions from exact directional neighbors.
  - Keep explicit border-entry coordinates through map-room transfers instead of
    falling back to the destination map's `start` position.
  - Restore Studio's generated class from every destination map database so a
    standalone session transfer keeps the player snapshot, including HP and SP,
    while deferring a runtime class until the destination database has loaded.
  - Apply synchronized player parameters through their signal and keep the Studio
    HUD mounted so the avatar, HP, and SP remain reactive across map changes.

- c849207: Add a post-acceptance player lifecycle context and a connection-scoped Studio MMORPG startup resolver with discriminated title/direct flows, single evaluation, URL project loading, and authoritative project/map validation.
- 14f7cf9: Update `@signe/room` to 3.2.1, which types node connection state like a party connection and includes Cloudflare WebSocket hibernation support from 3.2.0.
- 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.

- 3fb2765: Apply Studio media scale as a multiplier of the default RPGJS display scale, then combine it with event instance scale instead of overwriting it.
- 1a45ca5: Split `RpgClientEngine` into focused services (movement input helpers, canvas resize guard, and more). Public API and behavior are unchanged.
- 327185b: Spread the previous scene teardown over several frames during a map transfer (characters, then the map tree, then physics). In the sample, the worst blocking frame of a transfer drops from about 94 ms to 36-53 ms.
- 66c0d77: Add game-catalogue language selection with browser negotiation, project-scoped persistence, reactive client labels and validated per-player connection/action synchronization. Preserve the current language when loading saves.

  Stabilize dialogue heights across desktop, portrait and landscape layouts. Measure rich-text pagination against available space, retain reading progress on resize, reserve scrollable choice/input space and add a touch-friendly continuation triangle with reduced-motion support.

- 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.
- be412cf: Let Studio event-touch pressure plates overlap pushed events without physical separation, wait until ground sensors are mostly covered before firing, clean up touch tracking when collisions exit after z changes, and clamp route overshoot frames that could make pushed events jitter.
- aed4d3e: Position sprite components from intrinsic spritesheet dimensions and the scaled visible graphic bounds, with a full-frame fallback while transparent bounds are loading.
- 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 [777541a]
- Updated dependencies [1bcd9fc]
- Updated dependencies [94cbdac]
- Updated dependencies [4d53aa7]
- Updated dependencies [66c0d77]
- Updated dependencies [66c0d77]
- Updated dependencies [94cbdac]
- Updated dependencies [94cbdac]
- Updated dependencies [94cbdac]
- Updated dependencies [c69f516]
- Updated dependencies [48fcd25]
- Updated dependencies [e892732]
- Updated dependencies [00ac672]
- Updated dependencies [dc6aed5]
- Updated dependencies [0909491]
- Updated dependencies [50611c7]
- Updated dependencies [995277f]
- Updated dependencies [041d5ee]
- Updated dependencies [995277f]
- Updated dependencies [94cbdac]
- Updated dependencies [7846969]
- Updated dependencies [6b8d872]
- Updated dependencies [15ae51e]
- Updated dependencies [e11f2ed]
- Updated dependencies [f624302]
- Updated dependencies [98a30f0]
- Updated dependencies [335b768]
- Updated dependencies [e0bba29]
- Updated dependencies [85aea0c]
- Updated dependencies [c849207]
- Updated dependencies [f6aa046]
- Updated dependencies [14f7cf9]
- Updated dependencies [fc86ec2]
- Updated dependencies [66c0d77]
- Updated dependencies [e5ad24a]
- Updated dependencies [a7f44ba]
- Updated dependencies [83fc2b7]
- Updated dependencies [8ef3f4a]
- Updated dependencies [be412cf]
- Updated dependencies [0dbe078]
- Updated dependencies [114469c]
- Updated dependencies [ef47908]
- Updated dependencies [0512640]
  - @rpgjs/common@5.0.0
  - @rpgjs/server@5.0.0
  - @rpgjs/ui-css@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`.
- 14f7cf9: Update `@signe/room` to 3.2.1, which types node connection state like a party connection and includes Cloudflare WebSocket hibernation support from 3.2.0.
- Updated dependencies [1cae469]
- Updated dependencies [14f7cf9]
- Updated dependencies [114469c]
  - @rpgjs/server@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.
- a0710ce: Fix GUI and map rendering issues seen in the samples:

  - Registering a GUI no longer remounts every displayed GUI. GUIs are keyed by a new `renderKey`, which removes the repeated title screen mounts and the `FocusContainer ... not found` warnings at startup.
  - The map scene component keeps its last `data` until it is unmounted, so custom map components no longer read `undefined` during a map transfer.
  - The built-in HUD stays hidden until the player enters a map and while the title screen is displayed.

- 13517b8: Stop rebuilding projectile components on every frame. `ProjectileManager.renderList` only changes when projectiles appear or disappear, and pushes positions and progress into per-projectile signals on each step; the map scene renders from it. `current` keeps its plain-value contract. In the sample, JavaScript work per frame with projectiles drops from about 7.5 ms to 5.2 ms.
- 72d3e5d: Rendered projectile components receive spawn data as plain values and only the changing props as signals. Before an impact, `impact` is `null` and `impactElapsed` / `impactProgress` are `0`, so typed `defineProps` no longer reject `undefined` signal values.
- 1a45ca5: Split `RpgClientEngine` into focused services (movement input helpers, canvas resize guard, and more). Public API and behavior are unchanged.
- 327185b: Spread the previous scene teardown over several frames during a map transfer (characters, then the map tree, then physics). In the sample, the worst blocking frame of a transfer drops from about 94 ms to 36-53 ms.
- Updated dependencies [973878b]
- Updated dependencies [c69f516]
- Updated dependencies [7846969]
- Updated dependencies [fc86ec2]
- Updated dependencies [a7f44ba]
- Updated dependencies [0dbe078]
  - @rpgjs/server@5.0.0-rc.8
  - @rpgjs/common@5.0.0-rc.6

## 5.0.0-rc.7

### Patch Changes

- Match Studio terrain texture sampling by excluding atlas cell borders before repeating textures. Measure the HUD portrait frame so facesets fit reliably on first display and after resizing in standalone and multiplayer games.
- Updated dependencies [ef47908]
  - @rpgjs/server@5.0.0-rc.7

## 5.0.0-rc.6

### Patch Changes

- d88267a: Keep combat recoil authoritative across RPG and MMORPG runtimes. Prevent velocity accumulation, premature cancellation by idle or locked input, and replay of pre-impact positions. Synchronize the transient recoil phase, smooth its presentation, and release completed attack locks without restarting locomotion during an impact.
- 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]
  - @rpgjs/common@5.0.0-rc.5
  - @rpgjs/server@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.
  - @rpgjs/server@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/common@5.0.0-rc.4
  - @rpgjs/server@5.0.0-rc.4
  - @rpgjs/ui-css@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/common@5.0.0-rc.3
  - @rpgjs/server@5.0.0-rc.3
  - @rpgjs/ui-css@5.0.0-rc.3

## 5.0.0-rc.2

### Patch Changes

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

## 5.0.0-rc.36

### Minor Changes

- f624302: Add a pre-connection MMORPG account GUI, deferred client connections, rich
  server authentication results, and player-aware authentication lifecycle hooks.
  Registration uses distinct username and email fields with password confirmation,
  and restored sessions no longer flash the account GUI before the title screen.
  Add branded account screens with configurable imagery, music and UI sounds,
  reusable form feedback primitives, and optional password recovery/reset adapters.

### Patch Changes

- 94cbdac: Move equipment details into a compact inspector beside the list, add a Status menu entry returning to the hero overview, and extend local key preferences to Action and Back with immediate menu/game updates and preserved action payloads.
- 4d53aa7: Replace the default GUI theme with a crystalline JRPG palette, refined controls,
  shared panel treatments and semantic customization tokens. Keep existing CSS
  entry points and support isolated pixel and custom themes on the same page.

  Add a Storybook catalogue of foundations, primitive states and game compositions,
  browser checks and GitHub Pages deployment. Document theme creation and migration.
  Bridge mobile canvas control colors to the game CSS palette while preserving
  explicit withMobile overrides.

- 66c0d77: Fix unnecessarily clipped dialogue choices by sizing short prompts from their complete text and giving choices the remaining fixed-height space. Keep scrolling for genuinely long lists.

  Restore mouse and touch assignment in the hotbar slot picker by avoiding false HTML disabled attributes, preserving locked-slot guards and keyboard focus selection.

- 66c0d77: Remove dialogue page counters, fill the panel's inner height with the portrait, and support Enter confirmation with a short guard against repeated advancement. Align shop attribute comparisons with the compact equipment inspector.

  Fix positive attribute changes rendering only the plus sign in both equipment and shop panels.

- 94cbdac: Polish equipment attribute comparisons and expose Studio's Options menu with per-project movement key preferences, conflict validation, reset controls and existing channel-based audio sliders.
- 94cbdac: Add reduced-motion-aware GUI transitions, nested input locks, submenu navigation sounds and writable audio sliders. Improve shop comparisons and dialogue typography/portraits. Add safe reusable Markdown text runs, paginated dialogue reveal and a configurable typewriter sound on the UI channel.
- 94cbdac: Repair Studio hero initialization when a class skill is already learned, prefer canonical media references, and guard missing spritesheet identifiers. Refine the integrated status, inventory, equipment, skills, save and shop interfaces with theme-driven layouts, localized empty/unavailable states, safe icon fallbacks and window-local close buttons. Make the mobile hotbar scrollable instead of clipping its slots.
- 66c0d77: Add game-catalogue language selection with browser negotiation, project-scoped persistence, reactive client labels and validated per-player connection/action synchronization. Preserve the current language when loading saves.

  Stabilize dialogue heights across desktop, portrait and landscape layouts. Measure rich-text pagination against available space, retain reading progress on resize, reserve scrollable choice/input space and add a touch-friendly continuation triangle with reduced-motion support.

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

## 5.0.0-beta.35

### Patch Changes

- e7b12ab: Add cinematic video playback through the existing GUI lifecycle, with aspect-preserving presentation, fades, accessible skip controls, autoplay recovery, temporary music attenuation, and error recovery. Register the Studio show_cinematic block and resolve its media through the game data provider without adding map-media associations.

  Support per-clip skip/music options, map video preloading and consecutive video playlists. Guard overlapping player event interactions and let gameplay release movement keys during cinematics.

  Skip immediately on click, tap or Escape, honoring non-skippable clips and ignoring key repeats and late responses from skipped clips.

- Updated dependencies [e7b12ab]
  - @rpgjs/ui-css@5.0.0-beta.27
  - @rpgjs/server@5.0.0-beta.35

## 5.0.0-beta.34

### Minor Changes

- b74236b: Add server-authoritative custom gameplay rooms with registered room paths,
  session-preserving player transfers, synchronized client room state, and
  CanvasEngine scene adapters that run independently of maps and map physics.
  Room providers also accept concrete `RpgGameplayRoom` subclasses with their
  typed constructor context, so strict TypeScript applications can register them.
  Returning from a custom room now waits for a fresh map-stream packet before
  remounting the map component and keeps the room scene visible until that data
  is ready. Map components are also gated on non-null render data, preventing
  stale or incomplete values from reaching CanvasEngine presets.

### Patch Changes

- 1fb8040: Keep the mobile joystick connected across MMORPG streamed map updates by preventing retired character effects from overwriting live controls, continue repeating held movement without new pointer events, and preserve joystick power after direction changes.

  Dispose the character controls effect through its underlying subscription so streamed player removal completes without a runtime error.

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

## 5.0.0-beta.33

### Patch Changes

- 0909491: Preserve weather WebSocket payloads through server reconciliation and render
  them as authoritative so runtime updates and `clearWeather()` replace weather
  initially configured in Studio map data.
- c849207: Add a post-acceptance player lifecycle context and a connection-scoped Studio MMORPG startup resolver with discriminated title/direct flows, single evaluation, URL project loading, and authoritative project/map validation.
- Updated dependencies [0909491]
- Updated dependencies [c849207]
  - @rpgjs/server@5.0.0-beta.33

## 5.0.0-beta.32

### Minor Changes

- decf73e: Add a server-authoritative Actor selection API, runtime Actor switching that preserves acquired progression, a responsive cinematic CanvasEngine character selector, resolved Actor and Class object inputs, class skill progression for CMS-backed data, RPGJS Studio new-game Actor selection settings, character-select/change-class event blocks, and a native query-area block with per-target child execution.
- 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/server@5.0.0-beta.32
  - @rpgjs/ui-css@5.0.0-beta.26

## 5.0.0-beta.31

### Patch Changes

- e892732: Keep the camera attached when MMORPG streaming refreshes Tiled layers and synchronize instant following with the rendered character position so the viewport cannot trail by one frame. Stabilize predicted movement by publishing finalized input batches only after their client physics step, applying every input from the same client tick in one authoritative server step, capturing the matching acknowledged position, ignoring delayed acknowledgements whose prediction history expired, routing local-player snapshots through prediction instead of applying them directly, and sharing the same movement idle window on both peers.
- Updated dependencies [e892732]
  - @rpgjs/common@5.0.0-beta.29
  - @rpgjs/server@5.0.0-beta.31

## 5.0.0-beta.30

### Patch Changes

- e0bba29: Fix Studio world-map transitions and preserve the reactive HUD state during
  map transfers.

  - Normalize scaled Studio world coordinates to integer pixels and resolve
    automatic transitions from exact directional neighbors.
  - Keep explicit border-entry coordinates through map-room transfers instead of
    falling back to the destination map's `start` position.
  - Restore Studio's generated class from every destination map database so a
    standalone session transfer keeps the player snapshot, including HP and SP,
    while deferring a runtime class until the destination database has loaded.
  - Apply synchronized player parameters through their signal and keep the Studio
    HUD mounted so the avatar, HP, and SP remain reactive across map changes.

- aed4d3e: Position sprite components from intrinsic spritesheet dimensions and the scaled visible graphic bounds, with a full-frame fallback while transparent bounds are loading.
- Updated dependencies [e0bba29]
  - @rpgjs/common@5.0.0-beta.28
  - @rpgjs/server@5.0.0-beta.30

## 5.0.0-beta.29

### Minor 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

- 512e637: Add type-aware Studio item fields and lifecycle workflows. Regular items expose
  consumable use hooks, while weapons and armors expose equipment modifiers and
  the native equip hook. Regular items can also display a configured spritesheet
  animation, play a personal sound, and display a built-in particle effect after
  successful use. The editor groups Item fields into dedicated layouts. Because
  the Item schema is conditional, it resolves the selected Item, Weapon, or Armor
  branch before distributing fields across editor tabs, avoiding duplicate
  generic property sections. Online Studio games refresh database records when a
  player joins a map, and item use resolves lifecycle hooks from the current map
  database so a removed use animation no longer survives in an inventory
  snapshot.

  Clarify the built-in hotbar model: it accepts learned skills and usable regular
  items, while weapons and armors remain browseable in Items and are managed from
  Equip. Studio now labels these choices as usable items, filters starting
  equipment selectors by slot type, and ignores invalid saved equipment without
  adding it to the player's inventory.

  The Studio Item editor now derives its tabs from the selected item type.
  Regular items expose Usage and Presentation, while weapons and armors expose
  Equipment, so conditional schemas no longer leave empty tabs visible.
  Custom fields now leave their schema description to the shared CMS field
  wrapper, preventing duplicate help text, and Item and Skill lifecycle actions
  are consistently presented as triggers in the editor.

  Creating a trigger now persists its parent Item or Skill first, keeps the
  editor on the newly created record, and immediately saves the trigger
  attachment. Failed attachments restore the previous form state instead of
  leaving an untracked trigger.

  The Studio Skill editor now presents its schema layouts as translated tabs,
  matching the Item editor while keeping Action Battle and its triggers together.
  Area size, presets, and individual area-mask edits now notify the Skill form,
  so the updated targeting area is saved and restored after reloading the editor.
  Translated Skill and Item media fields now render the same native media preview
  as icon fields, including image, spritesheet, and audio previews.
  The Studio sidebar now uses a supported panel icon for the GUI editor entry.

- 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.

- 512e637: Keep CanvasEngine GUIs registered while hidden and reactively mount their components when their display signal changes, restoring title screens and other GUIs after hide/show operations.
- 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 [4cc3086]
- Updated dependencies [512e637]
  - @rpgjs/server@5.0.0-beta.29
  - @rpgjs/common@5.0.0-beta.27
  - @rpgjs/ui-css@5.0.0-beta.25

## 5.0.0-beta.28

### Minor Changes

- 995277f: Add explicit renderer-neutral GUI registrations with an official Vue helper,
  ship the authoritative and replaceable RPGJS chat module, provide default and
  pixel chat themes over shared semantic CSS primitives, and enforce client/server
  production bundle isolation with executable fixtures. Include a runnable pixel
  chat playground and keep chat socket listeners active across standalone startup
  and player map transfers. Document client/server setup, moderation hooks,
  replacement components, themes, translations, and the public chat state API.
  Emit complete side-specific chat declarations, synchronize the built-in input
  length with client configuration, and reject explicitly unknown chat channels.

### 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/ui-css@5.0.0-beta.24

## 5.0.0-beta.27

### Patch Changes

- dc6aed5: Initialize recursively nested RPGJS provider lists in client and server setup so
  sample and consumer configurations register every provider 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.
- Updated dependencies [dc6aed5]
- Updated dependencies [e5ad24a]
  - @rpgjs/server@5.0.0-beta.27
  - @rpgjs/common@5.0.0-beta.26

## 5.0.0-beta.26

### Minor Changes

- 83fc2b7: Add production Signe room adapters for persistent Node servers and Cloudflare Durable Objects, plus remote Vite map publication for trusted editor workflows with transient-only retries. Resolve local TMX files and their external tilesets when publishing maps, recreate configured events safely during live map updates, and restore player and event graphics after clients reload the Tiled scene.

  Add provider-neutral authoritative map streaming with progressive render/physics chunks, client prediction barriers, and spatial interest management for players, NPCs, events, and projectiles. Keep complete Tiled TMX/TSX sources server-side in MMORPG mode while sharing the same game module between Node.js, local Wrangler, and Cloudflare Durable Object hosts.

  Use the physics broad-phase index when resolving synchronized entities in each player's retained chunks, avoiding full-room player and event scans on every sync packet.

  Assign Tiled collision geometry to every streamed chunk it intersects, and preserve the generated client reference for action, dash, pointer, and interaction APIs with a dedicated interactions guide.

  Preserve initial room synchronization on older local Workerd runtimes that expose an accepted Durable Object WebSocket with a transient `CONNECTING` ready state.

  Prevent CanvasEngine rain layers from retaining tick subscriptions when an asynchronous mount overlaps destruction or another mount.

  Keep component-ready standalone Studio maps intact when sharing the in-memory server, and select the Cloudflare publisher independently from the generic MMORPG entry so local Node.js development does not require a Worker secret.

  Add Studio v2 authoritative map preparation and progressive chunk streaming, including server physics, nearby rendering data, and provider-neutral entity synchronization. Trusted Vite publishers can now resolve a complete Studio payload before sending it to Node or Cloudflare map rooms, while raw Studio map structure, events, database records, and global collision data stay server-side.

  Make initial map streaming explicit and hibernation-safe: clients request a fresh manifest after joining, trusted map updates are durably stored before acknowledgement, and recreated Durable Object room instances rebuild their transient streaming runtime. Stream Studio terrain control masks per chunk so transition rendering and prediction physics work without disclosing the complete map, and reset spatial visibility on reconnect so existing clients receive newly joined players.

  Preserve custom streaming providers when Studio's built-in streaming is disabled, refresh cached client controllers after Durable Object hibernation, and key terrain-control buffers by their complete streamed region content to prevent stale masks.

  Suppress projectile lifecycle packets that fall outside a player's disclosed interest window, clear client prediction barriers after the final streamed chunk is evicted, and coalesce concurrent requests for the same map stream. Exercise these paths with server, client, and real Workerd WebSocket tests, and run the Cloudflare MMORPG and Studio runtime suites in CI.

  Avoid dereferencing an empty Studio weather state while switching maps.

  Publish authenticated world topology updates to every map room, persist them across Durable Object hibernation, and refresh automatic world-map transitions without restarting the MMORPG server.

  Document the Durable Object room model, map-and-world publication flow, hibernation recovery, production deployment, and common Cloudflare diagnostics.

  Correct the documented default runtime to standalone RPG and add a beginner deployment path that takes the v5 starter through explicit MMORPG development, private map bundling, authenticated map publication, a persistent Node Docker deployment, or a Cloudflare Durable Object deployment. Include an executable production map publisher in the Cloudflare sample and make the production pages discoverable from both documentation navigations.

  Declare the RPGJS Durable Object binding explicitly in Wrangler staging and production environments so isolated deployments keep their room namespace.

  Cover the previous Studio scene before unmounting it during World transfers, preserve recent directional movement into the destination room, then reveal the new map through a full-screen dark transition with a centered, delayed localized loader and a bounded asset wait so stale or white frames cannot flash while fast local transitions stay unobtrusive.

### 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/common@5.0.0-beta.25
  - @rpgjs/server@5.0.0-beta.26

## 5.0.0-beta.25

### Minor Changes

- 0512640: Add reusable typed input and textarea controls for standalone forms and dialog boxes, with shared server-side validation and an RPGJS Studio block that stores the submitted value.

### Patch Changes

- ccb9495: Fix TypeScript declaration errors across the package build, align multi-target declaration exports, complete movement API overloads, and make package and root builds fail when declaration generation reports a type error.
- Updated dependencies [ccb9495]
- Updated dependencies [f6aa046]
- Updated dependencies [0512640]
  - @rpgjs/common@5.0.0-beta.24
  - @rpgjs/server@5.0.0-beta.25
  - @rpgjs/ui-css@5.0.0-beta.23

## 5.0.0-beta.24

### Patch Changes

- e11f2ed: Fix main menu Escape handling, add outside-click and touch close controls for prebuilt modal GUIs, make menu layouts responsive on small screens, restore a compact desktop menu with an integrated sidebar and column-based item views, use fade-only menu transitions, improve Skills/Equipment and save slot spacing, make active menu rows less visually harsh, and improve HUD and dialog border rendering.
- 3fb2765: Apply Studio media scale as a multiplier of the default RPGJS display scale, then combine it with event instance scale instead of overwriting it.
- be412cf: Let Studio event-touch pressure plates overlap pushed events without physical separation, wait until ground sensors are mostly covered before firing, clean up touch tracking when collisions exit after z changes, and clamp route overshoot frames that could make pushed events jitter.
- Updated dependencies [e11f2ed]
- Updated dependencies [be412cf]
  - @rpgjs/ui-css@5.0.0-beta.22
  - @rpgjs/common@5.0.0-beta.23
  - @rpgjs/server@5.0.0-beta.24

## 5.0.0-beta.23

### Patch Changes

- e7d8d13: Hydrate Studio event hitboxes from the API initially, apply synchronized hitbox object payloads to client physics bodies, publish runtime Studio hitbox changes through the synced event collection instead of a separate setHitbox websocket path, and keep standalone map transfers on the restored room so transferred player positions and hitboxes are preserved in sample-dev.
- Updated dependencies [e7d8d13]
  - @rpgjs/common@5.0.0-beta.22
  - @rpgjs/server@5.0.0-beta.23

## 5.0.0-beta.22

### Patch Changes

- 1028c17: Use workspace protocol for internal RPGJS package dependencies during prerelease development so CI installs do not fetch unpublished beta packages from npm.
  - @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/common@5.0.0-beta.20
  - @rpgjs/server@5.0.0-beta.20
  - @rpgjs/ui-css@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/common@5.0.0-beta.19
  - @rpgjs/server@5.0.0-beta.19
  - @rpgjs/ui-css@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/common@5.0.0-beta.16
  - @rpgjs/server@5.0.0-beta.17
  - @rpgjs/ui-css@5.0.0-beta.14

## 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/common@5.0.0-beta.15
  - @rpgjs/server@5.0.0-beta.16
  - @rpgjs/ui-css@5.0.0-beta.13

## 5.0.0-beta.15

### Patch Changes

- dba133e: Queue early changeMap packets until the client has finished loading modules and GUI definitions.
  - @rpgjs/server@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

## 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/common@5.0.0-beta.13
  - @rpgjs/server@5.0.0-beta.13
  - @rpgjs/ui-css@5.0.0-beta.12

## 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/common@5.0.0-beta.12
  - @rpgjs/server@5.0.0-beta.12

## 5.0.0-beta.11

### Patch Changes

- Add projectile runtime support with client-side prediction, action input payload handling, pointer context helpers, standalone message handling, and MMORPG connection authentication.

  Add composable CanvasEngine scene map components and update built-in GUI/dynamic components for the current CanvasEngine release.

  - @rpgjs/common@5.0.0-beta.11
  - @rpgjs/server@5.0.0-beta.11
  - @rpgjs/ui-css@5.0.0-beta.11

## 5.0.0-beta.10

### Patch Changes

- Fix current-player control binding and canMove reads when values are provided by synced or reactive state.

  Fix Vue GUI rendering for hidden fixed GUIs while keeping attached GUI targets updated.

  - @rpgjs/server@5.0.0-beta.10

## 5.0.0-beta.9

### Major Changes

- c456d25: beta.9

### Patch Changes

- Updated dependencies [c456d25]
  - @rpgjs/common@5.0.0-beta.9
  - @rpgjs/server@5.0.0-beta.9
  - @rpgjs/ui-css@5.0.0-beta.9

## 5.0.0-beta.8

### Major Changes

- 35e7fa4: beta.8

### Patch Changes

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