Skip to content

Release FLATS 5.4.3 - #7

Merged
ken5170696 merged 82 commits into
mainfrom
codex/restructure-a
Sep 25, 2026
Merged

ken5170696 merged 82 commits into
mainfrom
codex/restructure-a

Conversation

@ken5170696

Copy link
Copy Markdown
Owner

Merges the FLATS 5.4.3 release source into main. The release is built from 416ed2c and tagged v5.4.3.

This branch contains the unmerged 5.4.2 work, so it supersedes #4, #5 and #6. They close as merged once this lands.

What changes for players

  • Crosshair: one configurable Custom Crosshair, with Classic, Precision Dot and Wide Ring presets. Installed Precision Dot and Wide Ring packs migrate to these presets.
  • Mods: data mods (Mod SDK 1.1.0) and required-for-session mods. Random matchmaking only pairs players who run the same required mods. When joining fails, Open Mod goes straight to the missing mod.
  • Settings: new Language and Aim Mode (hold or toggle) rows. The crosshair moves from Display to the Mod center.
  • Save export: includes personal settings; original .dat saves import correctly.
  • Aiming:
    • scopes are no longer upside down;
    • reloading, switching weapons or sprinting cancels aim-in;
    • you can aim while holding fire.
  • Multiplayer:
    • PvP hits count once;
    • no more RPC errors after co-op enemies die;
    • the rabbit wave change works.
  • Interface: new Mod center header, translucent menu tiles, completed translations, and menu music starts sooner.
  • Project structure: scene roots are grouped, shared map systems are prefabs, and Menu and FPSController are split into partial files. Gameplay is unchanged.

Validation

  • Isolated-clone checks: Validate, Contracts, Play Mode and NavigationPlay.
  • Core tests: 81 module tests.
  • Builds: all six release targets built from 416ed2c with zero errors; Android is release-signed.
  • Owner: hands-on test before release.
  • Two-client acceptance on real Photon: enemy tuning session mod; PvP damage, kills and results; co-op to wave 3; six-map Training regression.

Platforms other than Windows are NOT_TESTED at runtime.

🤖 Generated with Claude Code

ken5170696 and others added 26 commits September 25, 2026 02:04
Choosing the language that already matched the system default was not
saved, so exports omitted it and a later system change flipped the UI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The aim mode is saved as controls.v1.aimMode (toggle by default), exported
with the other personal settings, shown on the keyboard Aim binding and in
control prompts. An optional authored Bindings/AimMode button switches it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Authored Settings rows named Language or AimMode (Index/Count/Plus/Minus
calling Menu.PlusMinus) switch the language and the keyboard aim mode.
Control general rows are found by their Plus button instead of by the
first five sibling indices, so a sixth row hides with the others.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without profiles nothing is applied, so the Mod center no longer reports
modules as enabled from the legacy modules-v1.json fallback. Selecting a
profile that lists an uninstalled module no longer fails with Missing
module; the module is skipped and the confirmation says how many.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Whole members move unchanged into Menu.Network (Photon lobby, room,
invitation and LAN sync), Menu.Results (GameOver), Menu.Options
(PlusMinus rows and text inputs), Menu.Navigation (page navigation and
MenuController) and Menu.Online (leaderboard, information, ads).
Menu.cs keeps its GUID, fields and lifecycle; it drops from 5,364 to
1,977 lines. The non-blank lines of the six files equal the original.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Whole members move unchanged into FPSController.Network (Photon RPCs and
synchronisation), FPSController.Touch (EasyTouch gestures) and
FPSController.Weapons (aim, fire, melee, reload, weapon change,
grenades). The class becomes partial; FPSController.cs keeps its GUID,
fields, lifecycle and Update and drops from 2,568 to 1,206 lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rows are looked up by name. The startup duplication of the VR rows only
runs for a Settings page that has not been authored yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MOD_SDK.md describes data modules, the crosshair@2 and enemy.tuning@1
adapters, the room agreement for required modules and the profile as the
only enabled-state record. package_mod.py packages schema 2 data modules
with their payload and checks adapter scope and tuning ranges. New
examples: a crosshair preset and an enemy tuning module. crosshair@2
presets are validated against the game's crosshair settings, so a
package need not redeclare them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The initial values of the sound, graphics, control, VR and extra rows
are written through SettingValue(page, rowName). Row names are already
the contract PlusMinus relies on, so authored rows can be added to a
page without shifting another row's value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Translation now keeps leading indentation and the √ check mark and
translates the rest, so unchecked filters and category choices are no
longer left in English. The filters use √, which the Chinese font has,
instead of ✓.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Phase 2 acceptance found the Explore card scope, the install review and
several notices in English in Chinese mode. The card translates its
scope label (the author's description stays as written), the import
review shows the scope label instead of the raw scope value, and 33
catalogue entries cover the review lines and notices.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Desktop shows the five authored Desktop rows on the VR-Image page and
hides the three VR rows; enabling VR switches back. The startup
duplication of rows is removed now that the prefab authors them. The
module settings form deactivates old rows before their deferred
Destroy, so reopening focuses a live row. The T crosshair style is
shown as "T shape" (a bare "T" would also translate key labels).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The room rejection's requirement lookup only checked installed packages,
so a player who had the module installed but disabled was sent to the
general Mod page. It now uses the same running-and-active test as the
player's own session agreement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Player builds add BuildOptions.Development when FLATS_DEVELOPMENT_BUILD
is 1 and record the choice in build-provenance.json. Release builds are
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Mod center detail page described every non-code package as a
crosshair change, including the session-wide enemy tuning module found
in two-client acceptance. The effect line now follows the package kind
and adapter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every client simulates every bullet, and each copy of a hit sent
NetworkDamage, so a PvP target took damage once per client (phase 5
acceptance: 3 shots, 6 damage events). Only the shooter's owner (the
master client for AI) now reports network damage; the co-op path, which
applies damage locally on each client, is unchanged.

A dead enemy's AI component is destroyed while RPCs sent before other
clients saw the death still arrive; a DeadAIRpcSink now accepts and
ignores them instead of Photon logging missing [PunRPC] methods.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Destroy(myAI) completes at the end of the frame, so adding the sink in
the same frame gave Photon two Shoot methods (co-op re-test) and could
run the dead AI's Shoot, whose bullet then passed a destroyed collider
to IgnoreCollision. The sink is added one frame later, and bullets skip
IgnoreCollision when the shooter's collider is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Precision Dot and Wide Ring are presets of Custom Crosshair now; the live
catalogue keeps them for older builds, so Explore hides them. Catalogue
pages are cached per query for the session: reopening Explore shows the
last result at once and refreshes it in the background, and a failed
refresh keeps the cached page. Each request logs MOD_CATALOGUE_BROWSE
with its duration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aim input required enableFire, which is false for most of an automatic
weapon's shot cycle, so aiming was blocked while the fire button was
held. A firing flag marks only Shoot's cooldown; aim input accepts it,
while reload, weapon change, grenades, melee and pickups still block.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The crosshair is configured in the Mod center (Custom Crosshair). The
Display page keeps resolution, window mode and VSync; older prefabs'
crosshair rows are hidden. Saved legacy values still apply to the
original reticle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The original plays the main menu music after its 5 s title. Returning
from a match skips the title but still waited 5 s in silence; it now
waits 0.5 s. First launch is unchanged. The quieter menu volume matches
the original (sound_all / 20 outside gameplay).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Game version 5.4.3 (Mod API 1.1.0). The README points at the v5.4.3
player and source releases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 25, 2026 06:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@ken5170696
ken5170696 merged commit 02a6131 into main Sep 25, 2026
2 checks passed
@ken5170696
ken5170696 deleted the codex/restructure-a branch September 27, 2026 08:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants