Skip to content

Release FLATS 5.4.5 - #9

Merged
ken5170696 merged 8 commits into
mainfrom
codex/qa-545
Sep 26, 2026
Merged

ken5170696 merged 8 commits into
mainfrom
codex/qa-545

Conversation

@ken5170696

Copy link
Copy Markdown
Owner

Merges the FLATS 5.4.5 release source into main. The release is built from d00e2d4; the tag v5.4.5 is added once the release artifacts are verified.

What changes for players

  • VIP modes: VIP deaths respect the Kill Cinematic switch. Several soft locks are fixed (effects discarded during another cinematic, the Assortment skip target, a VIP dying from a fall or its own grenade); VIP round guards for dead players, stale selection and overlapping rounds.
  • Controllers: a PS5 controller on Android, and any controller in a browser, falls back to the standard layout instead of becoming an unusable unknown device. Legacy pad bindings no longer throw every frame; touch no longer disables a connected controller on phones.
  • Mode state: online-mode state (rule, bomb, invincibility, round end) no longer leaks into single-player modes and the Tutorial; AI spawning no longer clears player spawn protection, and the host's protection no longer makes bots immune.
  • Phone portrait: the main menu tiles and the Mod Center scale to fit the screen width; player names on the leaderboard, player details and match results use the bundled Chinese font.
  • Saves and settings: a missing avatar falls back to the default icon, duplicate preference keys no longer throw, module profile writes fall back to copying, save backups are capped; on Web and iOS the storage notice shows guidance instead of a Quit button that cannot work.
  • Interface: larger touch targets for pause and close buttons; dialogs and the Mod Center support directional navigation and scroll to the selection; Local Match and Mod Center overlays fit 4:3 screens; Chinese column labels in settings are complete.
  • Diagnostics: an online disconnect now records its cause in the player log.
  • Version 5.4.5 with a game-only What's New panel (first run and update).

Validation (isolated clones of d00e2d4)

  • Static: check_repository (5002 public files), check_source, workspace and YAML/GUID scans PASS.
  • EditMode 53/53 and PlayMode 3/3 via the Unity CLI test runner.
  • Windows player build: 0 errors. Six-target release build in progress from a clean clone; results are recorded in the private release record.
  • Two-client LAN/Photon acceptance (mutual visibility, attributable kill, results) passed at 6b1b649; 31c2b9c/d00e2d4 add only version, What's New text and disconnect logging.

🤖 Generated with Claude Code

ken5170696 and others added 8 commits September 26, 2026 09:04
…id and Web

VIP deaths (single-player VIP missions and multiplayer VIP rounds) created the
kill effect directly and always played the slow-motion cinematic. They now go
through Supershot.PlayKill, and the notice-only path still clears a
single-player VIP mission when it ends.

Controllers whose names match no InControl profile attached as an unmapped
Unknown Device, so a DualSense on Android had no usable input. On Android an
unlisted controller now uses Android's standard gamepad layout, and in a
browser every controller uses the W3C standard layout; button names follow the
PlayStation or Xbox family from the device name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Found in a full QA pass and checked against the source:

- Single-player and Tutorial reset Multiplayer.rule/end, bomb pickup and
  invincibility left over from an earlier match (Co-op scoring, VIP kill text
  and a blocked bomb round leaked into single-player).
- Spawning AI no longer clears the player's spawn or kill-camera protection,
  and that protection no longer makes every bot immune to network damage.
- A VIP death discarded during another cinematic, or removed by the
  Assortment skip target, still clears the mission; the skip keeps allies.
- Multiplayer VIP: a VIP lost to a fall or own grenade starts the next round;
  dead players are skipped when resetting and choosing VIPs; the old VIP's
  colour is reset on the right player.
- A leaving player no longer stalls round synchronisation.
- Background matchmaking resumes a paused single-player game when abandoned.
- A cinematic that ends after the final kill leaves time and menus to the
  results screen.
- Legacy per-controller bindings read KeyCode names with GetKey instead of
  GetButton, which threw every frame; the old editor no longer assigns them
  to StandaloneInputModule.
- Phones keep controller input while the screen is touched.
- Touch layouts are stored with invariant numbers, older values still load,
  an unreadable value is ignored, and save transfer accepts them.
- Touch layout edits are saved even if a controller connects meanwhile.
- The kill notice and kill feed use FlatsLocalizedText; Chinese entries added
  for feed messages, Assortment/Zombie HUD rules and the bumper hint, which
  now follows the controller family.
- Assortment headshots are labelled Headshot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nsfer

- An abandoned background match resumes single-player only while playing:
  an open pause menu gets the resume scale instead, and GameOver keeps time.
- A discarded VIP effect clears the mission only while another kill
  cinematic is playing, not during GameOver.
- VIP and Zombie round changes protect everyone again (Multiplayer.roundChanging)
  and a second VIP death cannot start an overlapping VIP round.
- Save transfer reads touch layouts with the menu's parser and exports them
  normalised; layouts are stored without rounding.
- Chinese entries for single-player log lines and the loading HUD.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…umn labels

Inspector-only changes to authored uGUI prefabs (saved through PrefabUtility, document
order and untouched whitespace restored):
- Pause/menu button 62.5x15.6 -> 80x40 in GameplayHUD, GameInterface and WatchCamera.
- Navigation None -> Automatic on Update/OK, ErrorMessage/Button, FoliageGames Close and
  the four social buttons (now 44x44) so a controller can reach and close them.
- ScrollToSelection (padding 12) on the five Mod Center ScrollRects and the
  ConfirmationDialog body so controller focus scrolls the list.
- LocalMatch ConnectAutomatically/ConnectManually 800 wide at x=150 -> 560 wide centred
  (no longer clipped at 4:3); ModConfirmation/ModuleStartup overlays 890/860 -> 760.
- Settings controller Plus/Minus 34 -> 44 wide; twenty binding Detail labels 13pt/72%
  -> 15pt/100% for legible Chinese.
- Weapon detail Index labels wrap -> overflow so translations are not truncated;
  NameInput placeholder contrast raised.
- FlatsChinese.txt: Preset, Setting, Value column headers.

Evidence: tools/unity-validation/quality/ai-upgrade-20260926/ui (private).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- MenuTileFit (new, on MainMenuScreen): scales the authored tile grid down when the
  root canvas is narrower than the 640-unit span plus margins, so phone portrait and
  narrow 4:3 canvases show all six tiles instead of clipping the side columns. Tile
  positions and sizes stay authored; designSpan, margin and minimumScale are Inspector
  fields.
- FlatsUserIcon (new): avatar reads fall back to the default icon and rewrite the file
  when Flats_UserIcon.png is missing, unreadable or under 128x128. Room creation, room
  join, the multiplayer page and the character screen no longer throw
  FileNotFoundException on a cleaned profile folder.
- FlatsPreferences: duplicate keys in the isolated preference file no longer throw
  (last entry wins).
- ModProfiles: File.Replace failure (cross-device or unsupported file system) falls
  back to copy so saving a mod profile cannot crash the game.
- FlatsAtomicRecord: generation mode keeps the newest 8 generation files instead of
  growing without bound.

Regression tests: Flats.Tests.EditMode PlatformIoHardeningTests (private overlay).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…on Web/iOS

- ModuleManagementPage: in portrait canvases the design height is derived from the
  new portraitReferenceWidth (720) so the page fits its width instead of shrinking to
  the landscape height; landscape layout is unchanged.
- Leaderboard, multiplayer result, player button, player detail and player name labels
  are FlatsLocalizedText with translate off: player data is never translated, but
  Chinese names now use the bundled Huninn font instead of the OS fallback.
  PlayerDetailPanel close button 30x30 -> 44x44.
- FlatsStorageNotice: on WebGL and iOS the fatal notice shows how to leave without
  saving instead of a Quit button that cannot work there (new Chinese entry).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…gging

- bundleVersion and module GameVersion 5.4.5
- What's New panel text (first run and update) with Chinese table entries
- OnConnectionFail / OnDisconnectedFromPhoton log the cause and state so silent returns to the main menu can be diagnosed

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 26, 2026 17:23

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 829b71d into main Sep 26, 2026
2 checks passed
@ken5170696
ken5170696 deleted the codex/qa-545 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.

2 participants