Swapbound Changelog

Volledige gerenderde weergave van GAME_CHANGELOG.md.

Laatst gesynchroniseerd: 13 april 2026

Swapbound Changelog

All notable changes to Swapbound (game + editor) are documented here.

[Unreleased]

  • Fix checkpoint respawn overlap handling in Swapbound game runtime: when a checkpoint is placed slightly inside solid geometry, player spawn now searches for the nearest non-overlapping position (prioritizing upward correction) to prevent spawning inside hitboxes and falling through collision.

[0.2.0] - 2026-03-01

  • Add a new water level object to Swapbound editor/runtime: water is rendered as a background layer behind other geometry, is placeable via a dedicated editor tool, and instantly kills the player on contact.
  • Remove Swapbound message text-trigger authoring/playback from active flow: hide message panel in editor, remove message tool placement, and ignore message triggers in editor/runtime sanitization and gameplay trigger handling.
  • Add advanced switch state behavior for Swapbound: switch visuals now show top glow by state (off=red, on=green, used=orange), editor exposes switch start-state + mode (activate/deactivate/toggle), and runtime supports switch targets controlling both platforms and other switches.
  • Harden community level ingestion for Swapbound editor + runtime: enforce JSON size limits, reject unsafe key paths (__proto__/prototype/constructor) and excessively deep/large payloads, sanitize imported world entities against strict type/range defaults, and validate external campaign/site-level fetches before parsing.
  • Continue Swapbound modularization from single-file runtime scripts into load-ordered modules: game-config.js, game-audio.js, game-core.js, game-runtime.js, game-render.js, plus editor modules editor-config.js, editor-data.js, editor-tools.js, editor-canvas.js, editor-main.js; remove legacy monolith files game.js and editor.js.
  • Split Swapbound runtime code out of inline HTML scripts into dedicated files (site/swapbound/js/game.js and site/swapbound/js/editor.js) while preserving behavior, enabling safer incremental refactors.
  • Restore Swapbound runtime pages from production snapshot after a failed intermediate script-extraction refactor, then re-apply site/swapbound/ path updates and hardening fixes (manifest fallback paths, test cache-busting, noopener, and missing-exit render guard).
  • Reorganize Swapbound into a dedicated subfolder structure under site/swapbound/: move runtime pages to site/swapbound/game.html and site/swapbound/editor.html, move campaign files to site/swapbound/assets/game-levels/, update internal/site/sitemap links, and keep legacy root URLs as redirect pages.
  • Enforce unique custom remap bindings in the editor (auto-swap behavior) so one key cannot accidentally carry multiple actions in the same remap trigger configuration.
  • Add legacy message-text compatibility for older level files using txt: the editor now surfaces it in message fields and the runtime can display it as fallback.
  • Add advanced remap authoring in the Swapbound editor: a visual key-overlay preview plus per-action routing controls (move left, move right, jump, interact/down) with preset A/B or custom mappings, and runtime support for trigger-level custom remap mappings in-game.
  • Move distance-helper configuration in the Swapbound editor into a dedicated collapsible panel, auto-opening only when Distance helper / Afstand-hulp is enabled and disabling controls when turned off.
  • Add explicit trigger-configuration controls in the Swapbound editor for remap and keyswap items (profile selection and keyswap target), removing the need to edit raw JSON for these trigger behaviors.
  • Make the in-game controls visualization update immediately on keyswap triggers, including swapping the displayed active overlays between Player 1 and Player 2 key layouts.
  • Update the Swapbound status-panel controls layout so Player 1 and Player 2 key maps render side-by-side on desktop (with mobile fallback stacking).
  • Redesign the in-game control mapping display into a visual key layout per player: blurred base keycaps (WASD / arrow keys) with high-contrast directional overlays for currently active actions.
  • Remove legacy redirect entry pages (site/game-shared-control-prototype.html, site/game-level-editor-prototype.html, site/split-step-game.html, site/split-step-editor.html) and keep Swapbound URLs canonical on site/swapbound/game.html and site/swapbound/editor.html.
  • Improve Swapbound external-campaign level loading with multi-path manifest fallbacks (assets/..., ./assets/..., /assets/..., site/assets/...) so level count/progression stays correct across local hosting setups.
  • Add a site-level picker in the Swapbound editor that reads assets/game-levels/manifest.json, allowing editors to select and load published level JSON files directly into the canvas workflow.
  • Add a hand-built shared-control co-op platformer prototype (site/swapbound/game.html) on the game branch, with two-player split controls for one character, block/switch/bridge puzzle flow, control remap event, room-jump test tooling, character animation polish, and local procedural synth SFX/music via Web Audio API.
  • Document the planned first 5 campaign levels for the shared-control game concept in gameURS.md, gameFS.md, and gameDS.md, including the “one new mechanic per level” progression and checkpoint-based fail/hazard approach.
  • Rework the shared-control prototype into a dedicated Level 1 onboarding layout (movement + pits/checkpoints only), add a 3-lives old-school loop (checkpoint respawn while lives remain, reset to Level 1 start on zero lives), and surface lives in the in-game HUD.
  • Add minimal multi-level progression (Level 1 -> Level 2) and tune the early level plan: Level 1 jump difficulty now ramps within the level, Level 2 emphasizes block use for higher climbs and longer jumps, and game docs now clarify Level 3 lift/switch progression with repeated block/jump practice.
  • Add Level 3 to the playable prototype progression as a lift/switch level with repeated jumping and block use, using one-way switches that lower bridge/lift platforms.
  • Add Level 4 to the playable shared-control prototype progression as the remap-focused chapter, including a later in-level player key-role swap trigger (WASD/Arrow groups), keyswap HUD/overlay feedback, and room-jump test behavior that respects remap/keyswap state (with solo test mode skipping both swaps).
  • Add Level 5 to the playable shared-control prototype progression as a first combo "exam" level, combining block, switch/lift, remap, and key-role swap concepts with checkpoint-based recovery and shared lives continuity.
  • Add a compact level editor prototype page (site/swapbound/editor.html) for the shared-control game with canvas placement tools, selection/move, and JSON import/export in the runtime world format so new hand-built levels can be authored without editing JS builders directly.
  • Improve the level editor prototype UX with grid snapping for placement/moving and a zoom-aware canvas work area that aligns the editable area with the colored room bands (removing the confusing extra non-level space below the rooms).
  • Improve editor placement flow so clicking existing objects selects/moves them instead of spawning duplicates, and auto-return to select after placing a new object (making block/platform editing much faster).
  • Add a direct Test level flow from the level editor prototype: export current world JSON to localStorage and open the shared-control game in ?editorTest=1 mode, with the game prototype able to load and play a custom editor-authored world as a single test level.
  • Add visual switch-to-platform link lines in the level editor prototype so switch target connections to lifts/bridges are visible on canvas (with a missing-target indicator when a switch target id does not resolve).
  • Add visual platform movement guides in the level editor prototype: a dashed vertical line with arrow and endpoints shows each platform/lift y0 -> y1 travel path so start/end positions are readable without inspecting JSON only.
  • Add a draggable platform path-end handle in the level editor prototype so the platform movement guide can be adjusted with the mouse (length/direction), while keeping the path anchor attached to the platform when the platform itself is moved.
  • Extend the shared-control game runtime platform movement to support editor-authored platform paths with horizontal/diagonal travel (x0/x1/targetX alongside y0/y1/targetY), while remaining backward-compatible with existing vertical-only lift/bridge levels.
  • Improve level editor iteration speed with a Fit R1 zoom shortcut (room 1 width in view) and a Duplicate selected action for quickly adding extra blocks/platforms/triggers while preserving snap-to-grid placement.
  • Fix editor-authored platform path behavior in the game runtime so platforms consistently spawn at their configured start point (x0/y0) and only move toward the configured end point (x1/y1) after activation, preventing unexpected movement at level start in editor test mode.
  • Make the level editor Export JSON action more explicit: it now refreshes the world JSON textarea, focuses/selects the exported JSON, and attempts clipboard copy (when supported) so export feedback is immediate and obvious.
  • Add a true file-save action to the level editor prototype (Save .json file) that downloads the current world data as a local JSON file, alongside the textarea/clipboard export flow.
  • Improve the level editor prototype with undo/redo history controls (buttons + Ctrl/Cmd shortcuts) and draggable resize handles for selected objects (corner handles for most rectangles, side handles for platforms).
  • Add visual switch-target linking in the level editor prototype: select a switch and drag its center node to a target object's center node to set switch.target without manual JSON id entry.
  • Add a distance/spaced-copy helper to the level editor prototype: preview and place a duplicate of the selected object at an exact DX/DY spacing (including horizontal edge-gap mode for jump tuning).
  • Add editor + runtime support for message triggers: place a text trigger zone in the level editor and show a custom on-enter toast in the game prototype (with textNl/textEn support).
  • Add dedicated message-trigger text fields in the level editor UI (NL/EN + once toggle) so message trigger copy can be authored without editing raw selected-object JSON.
  • Add room-based music preset authoring in the level editor (R1-R5 preset selectors) and extend editor test payloads to include { world, music }, with the game prototype applying editor-defined room music presets on room changes (bar-boundary switching, backward-compatible with world-only payloads).
  • Add external level JSON loading support for the game prototype via site/swapbound/assets/game-levels/manifest.json + per-level files (using the editor { world, music } format), with fallback to built-in JS levels when no manifest entries/files are present.
  • Migrate the current built-in campaign Level 1-Level 5 layouts into external JSON files under site/swapbound/assets/game-levels/ and populate manifest.json with 5 entries so the prototype now runs the file-based campaign path by default.
  • Improve shared-control runtime block/platform interaction so blocks standing on moving platforms are carried with platform movement (including horizontal motion), enabling puzzle setups where lifts transport blocks into stoppers/drop points more reliably.
  • Fix level editor Import JSON UX by opening a real file picker (.json) and loading the selected project file into the editor (instead of only parsing the textarea contents).
  • Add a jump-distance helper overlay to the level editor prototype for selected walkable geometry (solid/block/platform), showing estimated max jump distance/peak based on runtime movement physics.
  • Add a toggleable debug mode to the game prototype (default off) with a UI button + F3 hotkey, including an on-canvas debug HUD and conditional trigger-boundary/debug overlays.
  • Calibrate the editor jump helper to include practical edge-overhang reach (player body overlap at ledge) so displayed max gap distance better matches in-game jumps.
  • Extend the editor jump helper with separate safe and tight gap estimates (with a small safety buffer) and distinct guide lines for easier platform-spacing decisions.
  • Extend the editor jump trajectory arc visualization below start height (toward world floor) so downward-jump possibilities are visible instead of ending only at equal-height landing.
  • Remove the level editor Load example button from the UI to keep the action panel leaner during normal editing (startup still initializes with the default sample world).
  • Add a dedicated Distance helper / Afstand-hulp toggle in the level editor so spaced-copy preview lines/labels can be shown or hidden independently from the jump guide.
  • Rework message trigger authoring in the level editor + runtime: add selectable message modes (Zone enter, Progress line (Y), Always on), editable progress threshold Y, draggable Y-threshold line on canvas for Progress line, and runtime support for progress-crossing and persistent always-on message display.
  • Improve message-trigger editor UX by auto-focusing the NL message text field when a message item is created/selected and clarifying help text so trigger-mode editing (Zone enter / Progress line / Always on) is easier to discover.
  • Correct message progress-trigger orientation to a vertical X threshold line (instead of horizontal), with editor/runtime compatibility for legacy progressY payloads.
  • Fix accidental object movement on simple selection clicks by delaying drag-start until a small pointer-move threshold is exceeded.
  • Fix editor focus-steal on message selection by removing forced auto-focus to the message text field, so clicking other text areas keeps cursor focus where expected.
  • Improve progress-line interaction by allowing direct click/drag on the vertical line itself (not only the center handle), including selecting the linked message trigger on line click.
  • Clarify message progress input semantics as world-coordinate X (Progress X (world px)) in the editor.
  • Place triggered message text boxes near the configured trigger location in-game (anchor to trigger world position) instead of always rendering at a fixed HUD location.
  • Add collapsible panels in the level-editor sidebar (Music, Message, Selected JSON, Project JSON) and auto-open only selection-relevant panels (Message for message items, Selected JSON when any object is selected) to reduce visual clutter.
  • Refine level-editor sidebar information density by converting secondary sections to collapsible panels and keeping only selection-relevant panels expanded during editing.
  • Rename the co-op game project to Swapbound and update public integration naming/URLs (swapbound/game.html, swapbound/editor.html) while preserving legacy game URLs via redirects.
  • Simplify the player-facing Swapbound sidebar by removing in-page test tooling (room jump / solo / debug toggles), and move those controls into the editor test launcher (start room, solo test, debug on start) via URL-driven editor test parameters.
  • Remove the player-facing Room progress block from the Swapbound sidebar to keep gameplay UI focused on only actionable player information.
  • Fix Swapbound language synchronization so in-game UI text follows the active site language toggle, and pass lang through the editor Test level launcher for consistent NL/EN behavior in test sessions.
Terug naar home