Skip to content

Releases: FPSMasterTeam/FPSMaster-Extreme

Extreme 1.0.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 08:44

release: 1.0.0 — vanilla-parity lighting, world-gen relight, stained glass

Product version moves to plain semver starting at 1.0.0. This is a version
bump only: the client still targets Minecraft Java 1.8.9 / protocol 47, and
the extension API contract stays at 0.3.0 (manifest.rs NATIVE_API_VERSION),
so mods declaring api = "^0.3" are unaffected.

Rendering fixes in this release:

  • Shading was applied in linear space. The atlas is sampled as Rgba8UnormSrgb
    and the swapchain re-encodes, but the vertex colour (biome tint x face shade
    x AO) and the lightmap were multiplied in linear anyway, effectively raising
    every multiplier to ~1/2.2 — the 1.0/0.8/0.6/0.5 face-shade ladder rendered
    as 1.0/0.90/0.79/0.73 and the darkest AO corner as 0.67 instead of 0.40.
    The combined multiplier is now sRGB-decoded once before it scales the linear
    texel, as ui.wgsl already did. Sky/horizon/sunset constants are converted at
    the same boundary. This also fixes grass top vs side disagreeing.
  • Distance fog defaulted off, leaving a hard edge at the render boundary.
  • Brightness defaulted to 0.5; vanilla's slider defaults to 0.0 ("Moody").
  • Generated single-player worlds never ran a sky-light flood — only the
    per-column vertical cast — so ground under a tree canopy sat at sky 0 where
    vanilla has ~13. World::light_generated_column adds bounded sky and block
    light floods, seeded from the new column plus its neighbours' border strip
    so the cost is O(column), not O(loaded world). Measured +0.21 ms/column.
    Generator-placed emitters are now seeded too.
  • Stained glass rendered as a multiply colour filter that ignored the texel
    alpha and folded the face shade into the filter: red glass darkened the view
    behind it to ~0.23 vs vanilla ~0.47, black glass was effectively opaque, and
    the pane vanished against a dark background. The translucent layer now uses
    vanilla SRC_ALPHA/ONE_MINUS_SRC_ALPHA, matching the greedy path. Water, ice,
    portal and slime share the layer and change with it. The per-block alpha
    overrides in blocks.json are removed — vanilla carries translucency entirely
    in the texture alpha, so they double-applied.
  • East-west pane arms sampled the empty columns of glass_pane_top_* (opaque
    only in columns 7-8) because vanilla's "y": 90 blockstate rotation was not
    reproduced; the mesher now does it.
  • Fast graphics wrote fully transparent texels as solid black (REPLACE drops
    alpha); those pipelines alpha-test now.

Verified: 463 tests pass, clippy clean (no new warnings). The rendering
changes have NOT been verified against a real rendered frame.

Co-Authored-By: Claude noreply@anthropic.com

Extreme 0.3.1

Choose a tag to compare

Merge remote-tracking branch 'origin/main' into fix/extreme-ci-macos-build

Extreme 0.3.1

Choose a tag to compare

perf(ui): render HUD as GPU glyph-atlas quads instead of CPU rasterize

Replace the per-layer CPU software rasterizer (a full-screen RGBA buffer
rasterized and re-uploaded every frame) with a batched textured-quad
renderer. UiFrame::tessellate emits quads in command order, starting a new
draw call whenever the sampled atlas changes so painter's ordering stays
exact; a shared 1x1 white texel backs rects/gradients/lines, the font
sheets back text, and the GUI/item/block atlases and favicons back images.

Font layout (§ codes, bold/italic/shadow, advances) is factored into
Font::layout, which emits glyph quads instead of blitting pixels; the CPU
Font::draw path stays for nametag/sign world-space text.

This removes the ~16ms/frame "cpu prepare" spike the debug overlay caused:
its volatile text defeated the layer cache, forcing a full re-rasterize and
full-screen re-upload every frame. Opaque text/images stay pixel-identical;
semi-transparent fills now blend in linear space (see shader/ui.wgsl).

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

Extreme 0.3.1

Choose a tag to compare

ci(release): fail the build if a tarball bundles mods/ or sdk/

package-launcher.sh already excludes the dev-only extensions (mods/, incl. a
scaffold/auto-aim cheat) and the extension SDK (sdk/). Add a CI guard that
inspects each built tarball and hard-fails if either ever creeps back in, so a
future regression can't ship them to end users. package.ps1 and the workflow
itself don't add them; this locks the invariant at the CI level.

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

Extreme 0.3.1

Choose a tag to compare

build(release): stop bundling dev-demo extensions + SDK in the launcher package

package-launcher.sh shipped mods/ and sdk/ in every release tarball. mods/ holds
only development demos — including scaffold_demo, an auto-aim + auto-place cheat —
which must not reach end users (ban risk), and the rest are just API examples;
sdk/ is the extension developer kit. Ship only the binary + resourcepacks/. End
users add their own extensions to a mods/ dir they create (the client loads none
gracefully when it's absent).

Verified: the produced tarball now stages just fpsmaster_app + resourcepacks/.

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com

Extreme 0.3.1

Choose a tag to compare

@github-actions github-actions released this 03 Jul 10:00
7c2e922

Merge pull request #2 from FPSMasterTeam/fix/extreme-ci-macos-build

fix(ci): macOS bash 3.2 empty-array build failure