Releases: jsvd/arcane
Releases · jsvd/arcane
Arcane v0.26.1
[0.26.1] - 2026-03-03
Fixed
- Direction export crash —
Directionwas 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
[0.26.0] - 2026-03-03
Added
- Live debug session —
createDebugSession()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 layer —
setInputOverride()/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/_smoothCamYtracking avoidsgetCamera()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
Added
/ci-checkskill — 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,/soundskills in agent environments (Claude Code, Cursor, etc.) instead of rawarcane devcommands - 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
/startand/checkskills for error resolution instead of manual terminal commands
Install: `cargo install arcane-engine`
Arcane v0.25.1
Added
- Camera rounding control —
setCamera(x, y, zoom, { disableRounding: true })option to eliminate micro-adjustment artifacts in smooth camera follow, critical for jitter-free isometric games - Direction mapping helper —
mapScreenDirectionToSprite(moveX, moveY, options)with'screen-aligned'(WASD follows keyboard) and'grid-aligned'(isometric tile directions) modes; includesSpriteDirectionenum and utilities (directionName,oppositeDirection,rotateDirection) - Isometric game development guide — comprehensive
docs/isometric-games.mdcovering 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
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 testtype checking no longer requires@types/nodeto be installed; ambientruntime/env.d.tsprovides 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-inarcane catalog) - Root-level convenience scripts (consolidated into
scripts/)
Install: cargo install arcane-engine
Arcane v0.24.0
[0.24.0] - 2026-03-01
Added
- TAS bot session —
createTASSession()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 builder —
inputSequence()fluent DSL for constructing frame-by-frame input:.hold(),.press(),.combo(),.wait(),.click(),.repeat(),.append() - Recording serialization —
serializeRecording()/deserializeRecording()for persisting replay recordings as JSON
Fixed
- Asset skill files now use built-in
arcane cataloginstead 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
[0.23.1] - 2026-02-28
Added
ctx.vpW/ctx.vpH— shorthand viewport dimensions on the frame context; eliminates thegetViewportSize()call at the top of everyonFramecallback
Fixed
- Demo regressions —
isometric-dungeoncrash (getViewportSizeimport removed by cleanup agent),hex-strategycamera clipped to top-left (coordinate system migration), mouse clicks broken injuice-showcase/hex-strategy/isometric-dungeon/menu-flow(isKeyPressed("MouseLeft")→isMouseButtonPressed(0)) shader-showcase—setBackgroundColorcalled with three positional args instead of{r,g,b}object;drawTextcalled with options object as first arg instead of(text, x, y, options)positional form;colorfield renamed totintwithColorobject instead of array- Stale declarations —
rendering.d.tsregenerated afterstopSoundJSDoc/signature update from legacy code cleanup - Legacy code removal — removed ~250 lines:
op_draw_spritefallback,op_play_sound/op_stop_soundlegacy ops,legacy_sinksHashMap andPlaySound/StopSoundaudio commands - Template — removed stale
autoCamera: falsefrom scaffoldedvisual.ts(option removed in 0.23.0 coordinate system change)
Changed
- All demos updated to use
ctx.vpW/ctx.vpHinstead ofgetViewportSize()inside frame callbacks
Install: cargo install arcane-engine
Arcane v0.23.0
[0.23.0] - 2026-02-28
Added
spawnBurst(x, y, opts)— self-destructing particle burst with automatic Rust emitter lifecycle management; emitscountparticles overdurationseconds 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 viacreateGame(). Acceptszoomas number or getter function. Replaces per-framefollowTargetSmooth()boilerplate.stopTracking()/isTracking()— control and query declarative camera tracking statewithScreenSpace(fn)— push/pop screen-space context so all draw calls inside default toscreenSpace: true. ExplicitscreenSpaceon individual calls always wins. Wired intodrawSprite,drawText, all 4 UI primitives, and all 10 shape functions.isScreenSpaceActive()— query whether awithScreenSpacecontext is activedrawBody(bodyId, opts)— draws a sprite centered on a physics body's position/rotation; simplifies the commongetBodyState()+drawSprite()pattern- Auto-clamp delta time — 250ms hard cap in Rust; optional
maxDeltaTimeinGameConfigfor 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.autoCameraoption removed fromcreateGame(). All screen↔world math simplified. All demos and documentation updated. sdfOffset/sdfRepeatnow take Vec2 —sdfOffset(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()tomax()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
Added
- Texture filtering modes —
loadTexture()accepts optionalfilteringparameter:"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 catalogbrowser
Changed
- Unified sprite API —
drawColorSprite(),drawParallaxSprite(), anddrawTiledSprite()merged intodrawSprite(). Usecolor:for solid-color sprites,parallax:for depth scrolling, andtileW:/tileH:for repeating textures. The old functions and their types (ColorSpriteOptions,ParallaxSpriteOptions) have been removed. - Catalog view unification —
arcane catalognow 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
Added
drawBurst(x, y, options)— one-shot particle burst convenience function; creates emitter, spawns particles, draws, and cleans up automaticallydrawContinuous(id, x, y, dt, options)— persistent particle stream with automatic emitter management; useful for jetpacks, torches, trailsstopContinuous(id)— cleanup for continuous particle effectsdrawTiledSprite(opts)— repeating texture primitive for backgrounds, floors, walls; extends UV coordinates to tile seamlesslyarcane screenshot <output.png>command — capture current frame via MCPcapture_frametool; requires activearcane devsession- Unified "arcane" import namespace —
import { drawSprite, createStore } from "arcane"works instead of individual@arcane/runtime/*paths - KeyName normalization —
isKeyDown()andisKeyPressed()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 semantics —
glow(color, spread)replacesintensityparameter; higher spread = bigger glow (intuitive) - Asset path resolution — always relative to current working directory instead of entry file parent; eliminates
../assetsconfusion - Import map —
"arcane"alias added alongside@arcane/runtimeand@arcane-engine/runtime
Fixed
- SDF glow compilation — missed
intensity→spreadproperty access in WGSL generation - Test suite —
arcane-simple.test.tsnow 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