Skip to content

v1.0.0-beta.8 — sharper pixel art (force_nearest)

Pre-release
Pre-release

Choose a tag to compare

@springah springah released this 26 Jul 00:51
· 7 commits to main since this release

Sharper pixel art, a safety fix to the language patch, and a documentation pass.

Crisper art — force_nearest, on by default

The port previously had render_filter, but that only ever affected its own final upscale
blit. The softness you actually saw came from the engine sampling its own textures
bilinearly at a fractional zoom.

force_nearest rewrites every texture filter the engine sets to NEAREST, and stamps it at
texture creation. It is enforced at the GL boundary rather than by patching the game's
texture-creation sites, because that alone is provably not enough: GL's default magnification
filter is GL_LINEAR, so any texture created outside those paths samples linear regardless,
and runtime setAntiAliasTexParameters calls can turn it back on afterwards. The wrapper is
registered on all three resolution paths, so nothing escapes it.

On by default after an on-device A/B. Set force_nearest 0 in config.txt for the older,
softer bilinear look — at 1 the pixel art is crisp, but deliberately-softened stretched
backgrounds go blocky. It is a taste call, so the switch is there.

Safety — the language patch is now version-gated

The two writes that force the UI language (getCurrentLanguage and
getLocalizeResourcePath) are as build-specific as anything else the port patches, but they
were going in blind: no check of the existing instruction, and outside the v2.1.5 fingerprint
gate that the surrounding code already used. A libchrono.so that was not v2.1.5 but still
exported those two symbols would have taken two silent code-corrupting writes — exactly what
the fingerprint check exists to prevent.

They now go through the same verified path as the other runtime patches, so a mismatch skips
the site instead of overwriting it, and the startup warning names the language override among
the fixes that get disabled on an unrecognised library.

Documentation

A pass over claims that had drifted from the code: the Linux backend was still described as a
skeleton with input and env unimplemented (both have been complete for a while); a
fully-executed bring-up plan was still written as a to-do list; CT_LOG and the other
diagnostic environment variables were undocumented; CT_FONT_SCALE's stated default was the
launcher's rather than the binary's; and language auto-detect reads LC_ALL, then
LC_MESSAGES, then LANG, not just LANG.

LICENSE now carries its own copyright line and scope-carves the CC BY-NC-SA font and the
LGPL FFmpeg libraries, so the tree is no longer blanket-labelled MIT. The Multiverse
submission notes were rewritten against the current repo, since the one they described has
been archived.

Also corrected: the engine's 16:9 design resolution is 568×320, not the 640×360 stated
before, so 720p is roughly a 2.25× scale rather than an exact 2×.


This archive contains no game data. You supply libchrono.so, libc++_shared.so and
assets/ from your own legally-owned Chrono Trigger Android APK (v2.1.5). See the README.