Skip to content

Release FLATS 5.4.4 - #8

Merged
ken5170696 merged 31 commits into
mainfrom
codex/tidy-544
Sep 25, 2026
Merged

ken5170696 merged 31 commits into
mainfrom
codex/tidy-544

Conversation

@ken5170696

Copy link
Copy Markdown
Owner

Merges the FLATS 5.4.4 release source into main. The release is built from 5ba498e and tagged v5.4.4.

What changes for players

  • Controllers on PC:
    • Bluetooth Xbox controllers are recognised (Windows reports them without a name, which InControl ignored).
    • Aiming with LT no longer also fires: the shared trigger axis is ignored once the separate trigger axes move.
    • Bumpers, stick clicks, the D-pad and Start count as controller input, so RB (grenade) and RS (toggle aim) work in play.
    • Look speed no longer depends on frame rate: 180°/s at Normal, with a turn boost when held fully sideways.
    • A jumps on press, and clicking L3 toggles sprint. The grenade is on RB by default, with no hidden extra bindings.
  • Controller menus:
    • Focus is set from launch, and a focus frame shows the selected control.
    • Backing out returns to the tile you came from. Pause starts on Resume.
    • Settings pages start on their first option, and the Control page opens on the controller list.
    • Rebinding no longer restarts itself or freezes the menu; Start cancels. B closes the pause menu and confirmation dialogs.
    • The Mod center search box no longer traps the D-pad.
  • Settings:
    • separate aim sensitivity and a Kill Cinematic switch;
    • controller presets, curves, deadzones and a stick tester;
    • scrolling pages with one box model.
  • Mobile: a Swap button, and settings while spectating.
  • Tracers: they fade in toward the bullet.
  • Project tidy-up:
    • helper scripts are filed by owner and URP settings moved; GUIDs are kept;
    • 13 unused scripts and 106 unreferenced assets are removed;
    • editor-only glass copies and Mesh Baker objects are tagged EditorOnly.
    • Gameplay is unchanged.

Validation

  • Static: source, public-boundary and code-contract checks.
  • Isolated clone: Validate, Contracts, Play Mode, NavigationPlay and Localization.
  • Builds: all six release targets from 5ba498e; Android is release-signed.
  • Controller runtime:
    • three virtual Xbox pad passes on real player builds;
    • an input probe in a private development build confirmed each fix.
    • On real Photon: LT never fires across 30 pulls, and a controller PvP kill gives matching scoreboards.
  • Not tested: a physical Bluetooth controller in this final build, and exact turn-rate measurement.

🤖 Generated with Claude Code

ken5170696 and others added 30 commits September 25, 2026 15:47
…hair

- Touch players get a contextual Interact button (Swap / Pick up / Drop)
  next to the action buttons; the long tap still works. Mobile prompts no
  longer show the desktop key when a browser reports a mouse.
- Aim Sensitivity is a separate Control row ("Match camera" keeps the old
  behaviour) stored as a personal preference and included in save transfer.
- Spectators get their own Menu button, so pause and Settings are reachable;
  the player HUD stays hidden after closing pause.
- Enabling or disabling a crosshair module applies immediately, including a
  crosshair installed during the session; other modules keep the restart gate.
- SafeAreaInsets keeps edge touch controls and the menu button clear of
  notches; the HUD menu button has a larger touch target.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Holding the button no longer starts the long-tap grab, drop or grenade.
The button is saved hidden and hides while control is suspended. The
tutorial prompt follows the touch HUD on mobile browsers, and the crosshair
help text notes that another active crosshair still needs a restart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Extra Settings → Kill Cinematic (default ON). When OFF, headshot and
mortal-shot kills show only the existing text notice (Headshot, Headshot Nx,
Mortalshot): no slow motion, camera takeover, hidden HUD or locked pause
menu. The kill still enables the singleplayer chance bonus as before. VIP and
team-kill cinematics are unchanged because they end the round. The
preference is included in save export and import.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The page's reading panel grows from 340 to 420 units (still within a
landscape phone canvas), and the Kill Cinematic explanation fits one line, so
the Language row stays inside the panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With Kill Cinematic OFF, the ragdoll still receives the kill impulse, a new
kill replaces the previous notice instead of stacking it, and the notice
draws above the gameplay HUD. Found in an independent review.

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

The update panel described crosshair packages and module recovery, which
belong to the mod catalogue, not to a game release. It now lists the 5.4.3
game changes only, in both languages. The built-in Custom Crosshair
placeholder uses the same description as the published package.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The trail was a solid line from the muzzle. It is now resampled into
evenly spaced segments with an Inspector-editable opacity curve.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keyboard and controller bindings are each one scrolling list instead of two
pages with previous/next buttons. Extra Settings returns to the shared panel
size and scrolls. Lists open at the top, follow keyboard and controller
selection (ScrollToSelection), and clip their theme-coloured controls
(ClippedThemeGraphic) without losing the selected highlight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Selecting an option reveals its whole row, explanation included. A partial
seventh binding row and soft list edges show that the lists scroll, and the
status line keeps clear of the list. The Language row follows language
changes made elsewhere, the open-at-top reset no longer hides a control
selected while the page opens, and scroll offsets stay within range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Controller page: one sectioned list (button layout, look & sticks, feedback)
beside a preview pane. Layout presets (Default, Tactical, Bumper Jumper, or
Custom), binding a used button swaps it, per-axis look speed, response curve,
stick deadzones with a live tester, vibration strength, button names for
Xbox or PlayStation controllers, and LB/RB section jumps. Defaults keep the
original feel. A white controller drawing matches the flat pink panels.

Hover: menu buttons draw Selected exactly like hover and uGUI keeps a
clicked button selected, so the highlight stayed after the pointer left.
PointerFocusPolicy clears that selection while the pointer is in use and
restores it on keyboard or controller input.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The Dynamic curve is smooth: slope 1.4, 0.6 and 1.4 at the centre, the
  middle and the edge, with no jump at half deflection.
- Auto deadzones keep the controller profile value across sessions.
- The menu's controller focus watchdog waits while the pointer is in use,
  so it no longer fights PointerFocusPolicy when a pad is connected.
- The controller drawing is larger and its marker small enough to point at
  one button. The D-pad points use measured positions. The arrow buttons
  have a larger touch area. The description stays inside the preview pane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Art: one padding (24) and spacing grid for the binding lists, aligned label
and control columns, single-line labels, quieter secondary text, section
headers with an accent tick and hairline, a preview pane inset from the panel
with a titled divider, the status line on the label column, and the footer
backdrop reduced to the Restore defaults button it backs.

Fixes from independent verification: the controller preview is hidden on the
Keyboard / Mouse and General categories; the stick tester shows the stick
before the deadzone; a list scrolling under a resting pointer no longer
takes the preview from the selected option; binding names refresh when the
controller family changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All Settings pages now use the same 24-unit padding. Labels line up on the
left content edge and controls on the right edge, or on the scrollbar.
The controller list and preview share their top and bottom with a 24-unit
gutter, and the first section title lines up with the preview title.
Binding labels are centred unless a hint line sits below them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Game version 5.4.4 (Mod API 1.1.0). The What's New panel lists the 5.4.4
game changes in both languages, and the README points at the v5.4.4
player and source releases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Move the remaining helpers out of Assets/Scripts/Assembly-CSharp. EasyTouch
  and Photon support types go next to that vendor code; FLATS helpers go to
  Runtime/UI, Gameplay and Platform. Metas move with them, so GUIDs are kept.
- Move the URP global settings and default volume profile to
  _Flats/Settings/Rendering, and the GameInterface icon sprite out of
  Resources (it is referenced by GUID only).
- Tag the inactive GlassRootOriginal(ForEdit) copies and the [Baking] Mesh
  Baker objects EditorOnly. They stay editable but are no longer built into
  players. Nothing references them at runtime.
- Remove unused locals, the unused reset-mapping and news-URL fields, and the
  Windows Store (MetroPlayerX86) branches, which cannot run.
- Document the map scene root layout and the names runtime code relies on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Look speed no longer depends on frame rate: the right stick is scaled by
  frame time. At Normal sensitivity and 1x, a full push turns 180 deg/s and
  pitches 135 deg/s; holding it fully sideways ramps yaw to 1.6x when not
  aiming. Standard (exponential) is the default response curve.
- Jump fires on press instead of release, and holding jump no longer sprints.
  Clicking LS / L3 toggles sprint until forward input stops or the player aims.
- Default layout puts the grenade on RB. RB and LB are no longer hidden extra
  Fire and Aim buttons, and D-pad Up is no longer a hidden Scope button, so
  every action has exactly one button. Tactical keeps the grenade on B.
- Menu: the stick moves focus at half deflection and repeats after 0.4 s
  (was 90% and 0.8 s). When focus is lost on the main menu it returns to the
  last focused tile instead of the first one.
- Settings help texts, What's New and the project guide describe the new
  defaults.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Bluetooth Xbox Series controller shows up in Unity's joystick list with an
empty name. InControl skips every unnamed joystick on Windows, because that is
also how Windows reports an empty slot, so the controller was ignored: the
menu fell back to other input and gameplay never used the controller.

Unnamed Windows joysticks now wait until they produce button or stick input,
then attach with InControl's Xbox One (Windows 10 AE) profile, falling back to
the older Xbox profiles. Empty slots never produce input, so they add nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
InControl's Xbox profiles read each trigger from its own axis and also from
the shared 3rd axis (LT positive, RT negative), keeping the larger value. The
Bluetooth Xbox controller reports the shared axis with the other sign, so
pulling LT also registered RT and aiming fired.

Unnamed Windows controllers now use a profile whose shared-axis trigger
mappings switch off as soon as either separate trigger axis moves; the shared
axis is used only by a device that never reports the separate axes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner-approved cleanup. Every file was checked for GUID references across
Assets and ProjectSettings and, for Resources, for its name in C# strings.

- 13 scripts no scene, prefab or code uses (LeaderBoardSample, Swipe,
  GameObjectExtensions, FPSPlayerControl, ForEdit, ImpactEffect, InputIP,
  SaveData, UICompatibility, CubeSelect, MoveScrollRect, SliderText,
  SystemText), the now empty Assets/Scripts folder, and mcs.rsp, which
  Unity 6 no longer reads.
- 106 assets (about 6.3 MB): seven decompiled NavMesh assets superseded by
  OfflineNavigation, 76 orphan .state files and the clip only they used, and
  Resources files nothing loads (debug font set, GoodDog fonts, editor icons
  and colour ramps, shader-include stubs).

Cube and OVRVolumeController in Resources stay: NetworkManager settings
reference them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Every Xbox Windows profile, not only unnamed controllers, ignores the shared
  3rd trigger axis once a device's separate trigger axes move, so LT can no
  longer register as RT on controllers that report the shared axis inverted.
  Unnamed controllers attach from a 30% stick push instead of 50%.
- A resting mouse no longer switches gameplay from the controller back to
  mouse control; the mouse must move more than 3 pixels in a frame.
- Menus choose the controller or pointer input module every frame. Before,
  the choice was made only while nothing had focus, and a controller press
  that restored focus left the pointer module handling controller navigation.
- B closes the pause menu, like Start. Start no longer opens the quit dialog
  on top of the What's New panel.
- While spectating, triggers and bumpers switch the watched player only when
  no menu is open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The controller list said jump could be held to sprint and sprint was held.
Jump now fires on press and LS toggles sprint, so the Jump row has no hint,
the Sprint row reads 'Click to toggle', and both preview descriptions match.
Touch controls keep hold-to-sprint and their tutorial text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Binding capture read only InControl's active device. With a second pad
attached, or one whose sticks drift, the active device could be another pad,
so the new button and Start (cancel) on the pad in hand were never seen and
capture never finished. Capture now waits for release on, cancels from, and
binds from every attached pad.

B or Esc now answers an open confirmation dialog with its cancel button, or
the only button of an alert. Before, B did nothing while a dialog was open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Returning from Information or Settings restored focus to Play: during the
fade the remembered tile is briefly not interactable, so the first tile was
chosen and kept. Focus now waits for the remembered tile and falls back to
the first tile only when the remembered one is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Bumpers, stick clicks, the D-pad and Start count as controller input.
  InControl treats only the face buttons as buttons, while Input.anyKey also
  reports held joystick buttons, so holding RB or RS switched gameplay to
  mouse and keyboard: RB threw no grenade and RS did not toggle aim.
- Menus have controller focus from the start. The cursor jump when the
  window is created (or regains focus) no longer counts as mouse use.
- Returning to the main menu waits for the remembered tile while the tiles
  are still hidden, instead of settling on the first tile.
- Pages built from the menu tiles (Play, Singleplayer...) start on their
  first tile instead of Back.
- Input fields no longer start editing when focus lands on them, so the
  D-pad can move past the Mod center search box; A starts editing. The
  gamepad input-field helper also leaves editing on D-pad or B.
- Confirmation dialog buttons show a visible selected and hover tint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Singleplayer, Multiplayer and Play are built from the menu tiles, which are
still hidden for a moment after the page opens. The focus watchdog chose
Back in that moment, so A left the page. These pages now wait and select
their first tile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Pause starts on Resume (the Singleplayer pause shows it on the second
  tile). It started on Multiplayer, so A left Training for multiplayer.
- The Settings category page waits for its tiles instead of settling on
  Back. A Settings page opened with a controller focuses its first option,
  and the Control page opens on the controller list at its first binding.
- The controller input module no longer processes the mouse; the pointer
  module does. A resting cursor over a tile added a second hover highlight.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A capture that just ended waits for its button to be released. The row was
captured again on the next frame, and that second capture recorded the
disabled input modules as the state to restore, so the menu stopped taking
input until a restart. Starting a capture is now ignored while the previous
one is releasing. The 'Press a button...' prompt is translated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The EventSystem keeps calling its last input module even when every module
is disabled, and a disabled module stops updating its button state. The A
press that opened a capture therefore submitted to the row every frame, so
each capture restarted as soon as it ended. Navigation and submit events are
now off from the start of a capture until its buttons are released.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- While a keyboard or controller is in use, a thin frame follows the focused
  control. Menu, dialog and Mod center buttons draw with theme materials that
  ignore the Selectable tint, so controller focus was often invisible. The
  frame sits on its own overlay canvas and tracks the control's screen
  rectangle; it never becomes a child of authored UI. Colour and width are
  on PointerFocusPolicy.
- The main menu and the Settings categories share the same tiles. The main
  menu now only remembers tiles chosen on the main menu, so returning from
  Settings focuses Settings instead of the tile in the same position.
  Settings remembers its own category for returning from a page.
- The cursor jump on window creation or refocus is ignored for half a
  second instead of three frames, which was sometimes too short.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The cursor-jump grace period started in OnEnable, during the scene load, and
had often ended before the first frame ran. The jump when the window
appeared then counted as mouse use, so the main menu showed no focus and the
first controller press only restored it. The grace period now starts at the
first update after enabling or regaining focus and lasts at least ten frames
and half a second.

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

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 ebf295a into main Sep 25, 2026
2 checks passed
@ken5170696
ken5170696 deleted the codex/tidy-544 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