Skip to content

1.4.2 - Monotonic Clolcks

Latest

Choose a tag to compare

@knivier knivier released this 30 Jul 20:51

Activerse v1.4.2 — Timing, Interpolation & Runtime Hardening

Released: July 30, 2026

Changelogs are AI assisted but quality checked by humans

v1.4.2 unifies the simulation clock, interpolates rendering between fixed ticks, and hardens asset loading for both filesystem and classpath (java -jar) packaging. The TLDR is that if you're a game developer, you're not going to notice unless you tinker with the engine a lot. Backwards compatibility is expected for down to v1.0.7 with minor porting, but is untested.

Game Loop & Rendering

  • Unified internal clock — update and render share one monotonic schedule; the render loop samples the main clock instead of drifting on a separate timer
  • Epoch-based tick scheduling — timing drift no longer accumulates across long sessions
  • Spiral-of-death protection — missed ticks are skipped rather than burst-processed under heavy load
  • Actor state snapshots — each tick stores prior position/direction so paint can interpolate between simulation states
  • New render helpersgetRenderX(), getRenderY(), getRenderPreciseX/Y(), getRenderDirection(), getRenderBoundingBox()
  • World render alphaWorld.getRenderAlpha() / setRenderAlpha() drive smooth visuals while simulation still uses integer coords
  • Camera interpolation — interpolated offsets, visibility checks, and worldToScreenInterpolated()

Performance & Assets

  • BufferedImage collision cache — soft-referenced WeakHashMap cache for Image→BufferedImage conversion in pixel-perfect collision
  • Reusable lighting buffer — dynamic lighting composites through a reused off-screen buffer sized to the world
  • ResourcePaths utility — resolves paths from filesystem first, then classpath (IDE runs and packaged jars)
  • Safer image/sound loading — MediaTracker uses a shared Canvas peer; sound streams close cleanly; deprecated finalize() removed from ActiverseSound

Input, Lifecycle & Utilities

  • KeyboardInfo helpersisKeyDown(char), letter helpers, multi-key checks, justPressed / justReleased, alphanumeric append/sync helpers for text entry UIs
  • World switching — GameLoop starts after the world is attached on the EDT; setWorld teardown/setup is EDT-safe
  • ConfigPuller — synchronized property loading
  • ActiverseMouseInfo — volatile component reference for safer cross-thread reads
  • New / expanded utilsPanelPainter, TextRenderUtils, expanded ErrorLogger, DaemonExecutors, DelayScheduler
  • JDK compatibility — deprecated API cleanup and concurrency hardening

Documentation

  • Full JavaDoc regenerated for the v1.4.2 API surface
  • Published at https://knivier.com/Activerse/
  • Instance window and class @version tags updated to 1.4.2

Compatibility

Backwards compatible with the v1.4.* series. Prefer the new render helpers for drawing; simulation code should continue using getX() / getY().