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 helpers —
getRenderX(),getRenderY(),getRenderPreciseX/Y(),getRenderDirection(),getRenderBoundingBox() - World render alpha —
World.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
WeakHashMapcache for Image→BufferedImage conversion in pixel-perfect collision - Reusable lighting buffer — dynamic lighting composites through a reused off-screen buffer sized to the world
ResourcePathsutility — 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 fromActiverseSound
Input, Lifecycle & Utilities
- KeyboardInfo helpers —
isKeyDown(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;
setWorldteardown/setup is EDT-safe - ConfigPuller — synchronized property loading
- ActiverseMouseInfo — volatile component reference for safer cross-thread reads
- New / expanded utils —
PanelPainter,TextRenderUtils, expandedErrorLogger,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
@versiontags 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().