Skip to content

Release 1.1.1

Choose a tag to compare

@vancura vancura released this 07 Jun 12:11
1.1.1
c7d4f81

The biggest thing in 1.1.1 is a crash fix that should have been caught earlier: WebGPURenderer was imported statically, which evaluated GPUTextureUsage at module load time, which meant Firefox – and anything else running without WebGPU globals – died before the software fallback could do anything about it. That's fixed. Everything else is cleanup: the BT API got a naming pass so boolean queries, predicates, and HardwareSettings config flags all follow is*/has* consistently, the asset subsystem went through a structural refactor across BitmapFont, SpriteSheet, Palette, PaletteEffect, and SystemFont, and documentation was corrected and expanded across 45+ files, including a new overlay guide that probably should have existed a year ago.

API Changes

A large naming normalization pass touches the BT namespace and related input/config surfaces.

  • Boolean queries (isDown, isPressed, isPointerActive), predicate methods (isEqual, isContaining, isIntersecting), and HardwareSettings config flags (isOverlayEnabled, isDetectingDroppedFrames) now all follow is*/has* conventions consistently across the board. Deprecated aliases keep previous names alive for backward compatibility. (#241)

Asset System

Seven refactor PRs tighten control flow, strengthen validation, and extract focused helpers across every asset class.

  • WebGPU mock factories and test-time stubs consolidated across asset loading, palette management, sprite-sheet processing, font generation, and preset data. Shared helpers introduced; duplication removed. (#256)
  • BitmapFont load helpers, glyph lookup, and measurement now use single-return control flow. .btfont JSON is parsed as unknown and narrowed through a runtime FileData guard so texture and glyph fields are validated before use. Benchmark glyph seeding merged into one loop. (#257)
  • AssetLoader.buildExtensionHint uses a single return path, matching the style used elsewhere in the asset system. (#258)
  • Palette.fromJSON validates with positive checks and loads colors and names in one loop. Palette.set uses if/else for slot 0 vs other indices; constructor positioned before the isDirty getter. (#259)
  • PaletteEffectManager.update, CycleEffect.update, FlashEffect.update, and paletteSwap collapsed to single return points. Flash apply/restore loops extracted into module helpers so update() stays loop-free. Related test assertions deduplicated. (#260)
  • SystemFont.writeGlyphPixels replaces nested x/y loops with a single flat index loop, preserving atlas write semantics and bitmap bit decoding. (#261)
  • SpriteSheet color collection, palette-fit validation, palette writes, and usage-mask marking extracted into focused helpers. Method complexity reduced; dead oversized-image canvas stubs removed from tests. (#262)

CI and Tooling

Zed agent skill support landed, editor configs were cleaned up, and // #region markers were removed everywhere.

  • .agents/skills/ added with symlinks to .claude/skills/ for Zed skill discovery. All skills renamed with bt- prefix (perfbt-perf, releasebt-release, testbt-test). Required name frontmatter added to all SKILL.md files for Zed validation. (#253)
  • Dead VS Code debug launch config removed. .zed/settings.json is now tracked (.gitignore updated to mirror the .vscode pattern). Prettier coverage expanded to .mdc files. Zed agent terminal/git/write/edit allowlists tightened. (#254)
  • // #region and // #endregion markers stripped from src/, scripts/, tests, and benchmarks. CLAUDE.md and docs/testing.md updated to remove guidance that recommended region markers for long files. (#263)
  • Broad reformat pass across documentation and internal code structure. No public API or behavior changes. (#266)

Rendering

GPU acronym casing normalized to uppercase across all identifiers.

  • WebGpuRenderer, disposeGpuState, renderDimensionGpuLimitError, and related identifiers renamed to their uppercase GPU forms (WebGPURenderer, disposeGPUState, renderDimensionGPULimitError). Changes touch source, tests, and documentation; behavior is unchanged. (#267)

Core and Utils

The software fallback was unreachable on browsers without WebGPU globals.

  • Static import of WebGPURenderer was evaluating GPUTextureUsage at module load time, crashing Firefox on Linux and any browser without WebGPU globals before the software backend could start. WebGPURenderer is now loaded dynamically only after WebGPU init succeeds, so the software fallback can actually reach init. (#240)

Tests

  • Visual test specifications and fixtures refactored for naming consistency and code organization. Linting improvements across test specs. (#255)

Documentation

Four PRs corrected factual accuracy and added new guides across the full doc set.

  • Cursor glob-scoped rule and Claude Code rule added documenting src/ file layout, class member order as enforced by perfectionist/sort-classes, and the ban on // #region markers. Mirrors CLAUDE.md and the developer-experience guide. (#265)
  • CLAUDE.md architecture map updated to reflect SystemFont, Timer, fullscreenVS, overlay constants/labels/types, and the consumer-doc-imports test guard. BT API methods list expanded with grouped categories, deprecated aliases, and top-level package exports. (#268)
  • New docs/overlay.md covering subsystem layout, visibility model, custom overlayRows, optional bands, HUD palette slots, and the present/target FPS distinction. Factual accuracy corrected across api-assets.md, api-core.md, api-utils.md, and other existing guides. (#269)
  • 45+ files of JSDoc precision work: all {@link} tags qualified to full interface.member form, paletteSet vs in-place mutation semantics clarified, spritesRefresh documented for when it is actually required (layout swaps, not value changes), effectAdd/effectRemove/effectClear corrected. (#270)

Full Changelog: 1.1.0...1.1.1