Skip to content

Releases: jsvd/arcane

Arcane v0.26.1

03 Mar 23:06

Choose a tag to compare

[0.26.1] - 2026-03-03

Fixed

  • Direction export crashDirection was a type-only alias re-exported as a value, causing V8 module loader to fail on scaffolded projects importing from @arcane/runtime/input

Changed

  • Asset catalog preview — sprites 32px or smaller now render at 192px preview (was 96px), making small pixel art easier to inspect

Install: cargo install arcane-engine

Arcane v0.26.0

03 Mar 22:39

Choose a tag to compare

[0.26.0] - 2026-03-03

Added

  • Live debug sessioncreateDebugSession() with per-frame probes, scripted input injection, measurement windows, and analysis helpers (detectJumps, maxDrift, isStable) for programmatic runtime debugging
  • Debug script builder — fluent DSL (debugScript().holdKey("d", 60).release().measure("post-stop", 180, "camera").build()) for composing input injection sequences with wait, measure, log, and completion callbacks
  • Input override layersetInputOverride() / clearInputOverride() intercept keyboard, mouse, and button queries to return synthetic values; enables headless input injection without Rust changes
  • Action map override support — default input poller routes through the override layer so isActionDown() respects injected input automatically

Changed

  • Isometric dungeon camera test — rewritten from 150-line ad-hoc state machine to ~30 lines using the debug session API

Fixed

  • Camera smooth follow convergence — added 120 units/sec minimum approach speed to prevent sluggish final-pixel convergence from exponential smoothing decay
  • Camera sub-pixel jitter — internal _smoothCamX/_smoothCamY tracking avoids getCamera() rounding feedback loop that caused delayed 1px jumps at rounding boundaries
  • Camera snap threshold — bumped from 0.1 to 0.5 for sub-pixel mode to prevent 188-frame settle times

Install: cargo install arcane-engine

Arcane v0.25.2

02 Mar 08:26

Choose a tag to compare

Added

  • /ci-check skill — automated GitHub Actions CI status checking, error diagnosis, and fix suggestions; identifies common patterns (type conflicts, test mismatches, stale declarations) and recommends remediation

Changed

  • Template scaffolding — updated to recommend /start, /check, /sprite, /sound skills in agent environments (Claude Code, Cursor, etc.) instead of raw arcane dev commands
  • Agent environment terminology — use inclusive language across documentation to acknowledge multiple AI-native development tools (Claude Code, Cursor, etc.) support the same skill format
  • MCP troubleshooting — updated template guides to reference /start and /check skills for error resolution instead of manual terminal commands

Install: `cargo install arcane-engine`

Arcane v0.25.1

01 Mar 23:41

Choose a tag to compare

Added

  • Camera rounding controlsetCamera(x, y, zoom, { disableRounding: true }) option to eliminate micro-adjustment artifacts in smooth camera follow, critical for jitter-free isometric games
  • Direction mapping helpermapScreenDirectionToSprite(moveX, moveY, options) with 'screen-aligned' (WASD follows keyboard) and 'grid-aligned' (isometric tile directions) modes; includes SpriteDirection enum and utilities (directionName, oppositeDirection, rotateDirection)
  • Isometric game development guide — comprehensive docs/isometric-games.md covering coordinate systems, camera patterns, depth sorting, tile sizing, complete working example, common pitfalls, and performance tips

Fixed

  • MCP capture_frame file size — auto-downscaling algorithm ensures PNG output never exceeds 10MB; scales from 0.1x to 1.0x with stderr logging of actual reduction; prevents 20MB limit errors in Claude sessions
  • capture_frame region support — HTTP and MCP parameter parsing for optional rectangular region (regionX, regionY, regionWidth, regionHeight) to isolate specific areas of the game

Install: `cargo install arcane-engine`

Arcane v0.25.0

01 Mar 19:15

Choose a tag to compare

Added

  • Multi-cell sprite selection — catalog sheet viewer now supports click-and-drag to select rectangular regions of contiguous grid cells for non-square sprites; stores correct pixel width/height, shows combined preview, auto-replaces overlapping selections
  • ~30 new asset packs — expanded catalog.json with additional Kenney packs (platformer, shooter, puzzle, UI, nature, vehicles, and more)

Fixed

  • arcane test type checking no longer requires @types/node to be installed; ambient runtime/env.d.ts provides type declarations for shared globals (console, crypto, setTimeout, node:test, node:assert)

Removed

  • Stale packages/ directory (deprecated npm packages)
  • Stale mcp/ directory (superseded by built-in arcane catalog)
  • Root-level convenience scripts (consolidated into scripts/)

Install: cargo install arcane-engine

Arcane v0.24.0

01 Mar 17:37

Choose a tag to compare

[0.24.0] - 2026-03-01

Added

  • TAS bot sessioncreateTASSession() wraps a pure update function with frame stepping, named checkpoints (save/load), isolated branching, and BFS goal search (findInput()) for deterministic gameplay exploration
  • Input sequence builderinputSequence() fluent DSL for constructing frame-by-frame input: .hold(), .press(), .combo(), .wait(), .click(), .repeat(), .append()
  • Recording serializationserializeRecording() / deserializeRecording() for persisting replay recordings as JSON

Fixed

  • Asset skill files now use built-in arcane catalog instead of external tool references
  • README doc links use absolute GitHub URLs for correct rendering on crates.io and npm

Install: cargo install arcane-engine

Arcane v0.23.1

28 Feb 22:48

Choose a tag to compare

[0.23.1] - 2026-02-28

Added

  • ctx.vpW / ctx.vpH — shorthand viewport dimensions on the frame context; eliminates the getViewportSize() call at the top of every onFrame callback

Fixed

  • Demo regressionsisometric-dungeon crash (getViewportSize import removed by cleanup agent), hex-strategy camera clipped to top-left (coordinate system migration), mouse clicks broken in juice-showcase / hex-strategy / isometric-dungeon / menu-flow (isKeyPressed("MouseLeft")isMouseButtonPressed(0))
  • shader-showcasesetBackgroundColor called with three positional args instead of {r,g,b} object; drawText called with options object as first arg instead of (text, x, y, options) positional form; color field renamed to tint with Color object instead of array
  • Stale declarationsrendering.d.ts regenerated after stopSound JSDoc/signature update from legacy code cleanup
  • Legacy code removal — removed ~250 lines: op_draw_sprite fallback, op_play_sound / op_stop_sound legacy ops, legacy_sinks HashMap and PlaySound/StopSound audio commands
  • Template — removed stale autoCamera: false from scaffolded visual.ts (option removed in 0.23.0 coordinate system change)

Changed

  • All demos updated to use ctx.vpW / ctx.vpH instead of getViewportSize() inside frame callbacks

Install: cargo install arcane-engine

Arcane v0.23.0

28 Feb 20:47

Choose a tag to compare

[0.23.0] - 2026-02-28

Added

  • spawnBurst(x, y, opts) — self-destructing particle burst with automatic Rust emitter lifecycle management; emits count particles over duration seconds then cleans up when all particles die. Replaces ~70 lines of manual emitter bookkeeping.
  • getManagedBurstCount() — returns number of active managed bursts (for testing/debugging)
  • trackTarget(getTarget, opts) — declarative camera tracking; set once, runs automatically each frame via createGame(). Accepts zoom as number or getter function. Replaces per-frame followTargetSmooth() boilerplate.
  • stopTracking() / isTracking() — control and query declarative camera tracking state
  • withScreenSpace(fn) — push/pop screen-space context so all draw calls inside default to screenSpace: true. Explicit screenSpace on individual calls always wins. Wired into drawSprite, drawText, all 4 UI primitives, and all 10 shape functions.
  • isScreenSpaceActive() — query whether a withScreenSpace context is active
  • drawBody(bodyId, opts) — draws a sprite centered on a physics body's position/rotation; simplifies the common getBodyState() + drawSprite() pattern
  • Auto-clamp delta time — 250ms hard cap in Rust; optional maxDeltaTime in GameConfig for per-game tighter caps

Changed (BREAKING)

  • Coordinate system now top-left origin(0, 0) is the top-left corner of the screen, matching web canvas, Unity 2D, and Godot conventions. Camera position represents the viewport's top-left corner in world space. autoCamera option removed from createGame(). All screen↔world math simplified. All demos and documentation updated.
  • sdfOffset / sdfRepeat now take Vec2sdfOffset(shape, x, y)sdfOffset(shape, {x, y}); sdfRepeat(shape, x, y)sdfRepeat(shape, {x, y}) for consistency with the rest of the SDF API

Fixed

  • Physics bounce — restitution combining changed from min() to max() so the bouncier surface wins (matching Box2D/Rapier). Fixed speculative contact bias cancelling out bounce impulse.
  • Glow shader — moved spread→intensity conversion from WGSL to TypeScript layer; shader uses clean exp(-d * intensity) formula

Removed

  • Legacy physics solver — removed single-contact solver (~250 lines); manifold solver (TGS Soft) is now the only path

Install: cargo install arcane-engine

Arcane v0.22.0

28 Feb 11:30

Choose a tag to compare

Added

  • Texture filtering modesloadTexture() accepts optional filtering parameter: "nearest" (default, pixel-perfect) for pixel art and UI, "linear" (smooth, blended) for gradients and photos
  • Asset catalog expansion — 23 additional Kenney asset packs added to arcane catalog browser

Changed

  • Unified sprite APIdrawColorSprite(), drawParallaxSprite(), and drawTiledSprite() merged into drawSprite(). Use color: for solid-color sprites, parallax: for depth scrolling, and tileW:/tileH: for repeating textures. The old functions and their types (ColorSpriteOptions, ParallaxSpriteOptions) have been removed.
  • Catalog view unificationarcane catalog now supports both sprite sheets and individual sprite galleries in a single unified interface

Fixed

  • Asset path resolution — paths now resolve relative to the entry script's directory instead of current working directory; demos can have their own assets/ directories and work regardless of where the command is run from

Install: cargo install arcane-engine

Arcane v0.21.0

28 Feb 09:02

Choose a tag to compare

Added

  • drawBurst(x, y, options) — one-shot particle burst convenience function; creates emitter, spawns particles, draws, and cleans up automatically
  • drawContinuous(id, x, y, dt, options) — persistent particle stream with automatic emitter management; useful for jetpacks, torches, trails
  • stopContinuous(id) — cleanup for continuous particle effects
  • drawTiledSprite(opts) — repeating texture primitive for backgrounds, floors, walls; extends UV coordinates to tile seamlessly
  • arcane screenshot <output.png> command — capture current frame via MCP capture_frame tool; requires active arcane dev session
  • Unified "arcane" import namespaceimport { drawSprite, createStore } from "arcane" works instead of individual @arcane/runtime/* paths
  • KeyName normalizationisKeyDown() and isKeyPressed() accept multiple formats: "a", "KeyA", "Digit1", "ArrowUp", "F1"

Changed

  • Vec2 API unified — all SDF functions now use {x, y} objects instead of [x, y] tuples for consistency and discoverability
  • SDF glow semanticsglow(color, spread) replaces intensity parameter; higher spread = bigger glow (intuitive)
  • Asset path resolution — always relative to current working directory instead of entry file parent; eliminates ../assets confusion
  • Import map"arcane" alias added alongside @arcane/runtime and @arcane-engine/runtime

Fixed

  • SDF glow compilation — missed intensityspread property access in WGSL generation
  • Test suitearcane-simple.test.ts now skips in Node (V8-only); all 2160 Node tests pass

Migration Guide: See MIGRATION-0.21.md

Install: cargo install arcane-engine

Test Coverage: 2160 TS (Node) + 2163 (V8) + 355 Rust tests passing