Skip to content

1.18.15 - UI anchors, circle gradients, 2d noise, stability hardening

Latest

Choose a tag to compare

@KilledByAPixel KilledByAPixel released this 25 May 20:37

1.18.15 - UI anchors, circle gradients, 2d noise, stability hardening

  • Added UI anchor property for screen- and parent-relative positioning; existing shorts migrated to anchor-based layout
  • Added drawEllipseGradient for radial gradients (drawCircleGradient stays as a back-compat wrapper), demoed in the Shapes short
  • Added 1D and 2D gradient noise functions (noise1D, noise2D) with tests, demoed in the new Noise short
  • Added glDrawUntextured fast path for solid rectangles, plus primitive count tracking for debug
  • Added an Image Font short that displays the built-in engine font and full character set
  • Renames (breaking for ESM/TS users): FontImageImageFont, engineFontImageengineImageFont, isStringisStringLike. drawCircleGradient stays as a back-compat wrapper.
  • PathFinder: A* now uses octile distance, diagonal step blocked only by walls (not cost), maxLoop raised to 1000, smoothing drops collinear nodes
  • Engine robustness: zeroed first-frame delta, release-build double-init guard, EngineObject.addChild and updatePhysics bail mid-loop when active object is destroyed, rootElement defaults to document.body
  • Input: mouseWheel accumulates across the frame instead of overwriting; touch gamepad start-button fix; unused dpad digital-style input removed
  • Audio: node-graph leak plugged, hardened getCurrentTime, stacked fades cancel, fade-out ramps anchored at current volume; Sound.getDuration returns 0 (not undefined) while loading; speak/speakStop guard missing speechSynthesis
  • WebGL: bind default framebuffer before postProcess, reset glBatchCount on context loss, restore UNPACK_FLIP_Y_WEBGL after postProcess, mipmaps sync on glSetTextureData, glMakeOutline miter fix
  • Box2D: setMassData no longer silently ignores zero values, debug DrawTransform/destroy-tracking/raw-body contact listeners fixed, object physics methods refactored
  • Tile collision and tile layer issues found in deep-dive review fixed; smallMoveUp follows gravity sign so inverted gravity works
  • Tween system: clamp Ease.EXPO/Ease.ELASTIC at boundary inputs; reuse the same Tween object across loop iterations
  • Math: corrected randInCircle annulus distribution and clamped min/max radius ratio to avoid NaN; isOverlapping is now symmetric
  • Save system tolerates localStorage failures; Newgrounds bails early when first API call fails so offline games don't freeze and handles error responses without crashing
  • TypeScript: sign/hypot/log2 wrapped as function expressions so .d.ts picks up signatures; isArray type-guard annotation
  • Expanded FAQ and README, added Hello World snippet, clarified mirror (rendering only), ParticleEmitter.fadeRate, TileInfo padding/bleed, post-process defaults
  • Declared Node 18+ engine requirement; Vite starter notes Node 20.19+ via Vite
  • Dropped --warning_level=VERBOSE from Closure Compiler call; ship FAQ.md in the npm package

Check out the latest on GitHub to see everything we've been working on!

Gradient Noise Demo
gradient noise demo