Prepare progression and loading through Bevy scheduling, preserve round HUD and bombsite props, restore grenade and T5 shadow presentation, and keep menus usable while classes load. Report update progress and continue startup after update failures.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When a private match fails to load, the session returns to the menu
without a world and the frontend only handled that case for public
lobbies. The host was left on the main menu with in_lobby and is_host
still set but game_lobby closed by the loading screen, which also kept
the Community Servers switch locked.
A host of a private lobby whose map fails to load now gets game_lobby
reopened under the map error, the same way as after a match end.
Quitting during the load now resets the party, and the host stays on the
main menu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When the match scripts end a private match, the session swap already
tears the world down as MatchEnded, but ReturnedToMenu did not carry the
reason. The frontend treated every return from a world like a disconnect:
it reset the party, so the host landed on the bare main menu and Start
Game refused with "Only the lobby host can start a match" until a new
lobby was created.
ReturnedToMenu now carries the teardown reason (None for a failed load).
After a MatchEnded return the host of a private lobby keeps the party,
and once the main menu is open again the frontend reopens game_lobby over
it with map, mode and rules kept. If the main menu does not come up
within five seconds, the party is reset as before. Disconnects, failed
loads, public lobbies and clients still go to the main menu. Creating a
lobby or starting a match clears a pending reopen, so it cannot reset
the party later.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
remote_control_axes filled the Predator's remote_control axes from mouse
motion only, so with a controller the missile flew straight down, while
the look stick still turned the hidden player's view through
pad_look_delta.
Either stick now steers the missile, whichever is pushed further. Stick
up is nose up and stick right turns right, following the sim's
remote_control sign rather than the mouse's, so the pad terms are added
outside the m_pitch/m_yaw factors and do not depend on the mouse sign
convention. pad_look already carries the look inversion; the new
pad_invert field gives the move stick the same pitch sign, so both
sticks agree when look is inverted. pad_look_delta is cleared while the
missile is linked so the hidden player's view no longer turns. Mouse
steering is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The stance button's press was timed on the virtual clock while its hold
was sampled on the real one, so after a loading stall any press already
counted as a hold and went straight to prone. Time both on the real clock.
Holding jump cleared the stance latch every frame, so crouch pressed
while still holding jump never took; jump now stands once, on its press.
The hold toward prone only counts on the ground, so crouch held through
a jump lands crouched.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Decode Black Ops audio natively and load Black Ops II worlds, faction
models, equipment, materials, lighting and weapon camouflage.
Rework capsule collision, solid recovery, penetration, recoil, effects
and sentry placement; synchronize late joins and player event delivery.
Keep local skill ratings and signed player accounts.
Show the selected community and master ping on the main menu. Add twenty
asset-filtered class presets across IW4, IW5, T5 and T6, plus fifty-two
unique player-style names shared by AI bots and dummies. Honor the chosen
dev descriptor in the two-client approved scenario and credit contributors
and weapon, map and attachment QA testers.
Validated with the approved gameplay lifecycle and two-client dev-master
scenarios, installed class-asset audit, bot-name uniqueness checks and
Linux IW4/IW5/T5/T6 gameplay smoke runs. Foreign-weapon match-stat schema
coverage remains incomplete.
- Format with rustfmt and clear the clippy warnings on lines this branch
adds (fixed-size chunks via as_chunks, explicit fallbacks instead of
unwrap_or_default, range patterns, elided lifetimes).
- The engine-supplied equipment script is t6_equipment.gsc.txt, since
publish-check treats any .gsc as game data; FNV constants are named.
- NOTICE credits the Plutonium t6-scripts dump that the equipment
behaviour was worked out from.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The camouflage picker showed its swatch in the square attachment preview;
it now fills the weapon-wide preview, as the class panel shows it behind
the weapon.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A weapon's gunXModel / worldModel slots 1-8 are its camouflage models
(woodland ... orange_fall, numbered as mp/camoTable.csv). They are now
captured, aliased arrays included, and bound per weapon.
Classes carry a camouflage per weapon (classes.txt: two optional trailing
fields, written only when one is set; PersonalClass on the wire, protocol
103). MW2's _class.gsc reads it from customClasses...camo and gives the
weapon with its number; giveWeapon stores it as the slot's weaponModel in
weapon_data, which replicates. First person swaps the gun's materials for
the camouflage model's (it shares the gun's surfaces); third person draws
the camouflage world model.
Create-a-Class goes weapon, attachment, then camouflage, as MW2 does,
offering only the camouflage the weapon has, and MW2's panel shows it
behind the weapon. Console: give ... camo=<name|slot>, bot give ...
camo=<name>.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts kept both sides: Steam discovery next to Game Folders and
sibling titles, upstream's profile/account persistence next to the
folder picks and saved position, SAB/FLAC beside blake3, the T6
localize loader on the raw-bytes catalog (cache format 3), and our
tactical insertion equipment mapping with upstream's specialty_null.
The fire-delay fix takes upstream's form. Exit silencing now mutes the
new audio runtime instead of Bevy audio sinks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
T6 (Black Ops II) weapons load from the BO2 install beside MW2 and play
with their own models, materials, animations, sounds and icons, standing
in for an MW2 weapon row for gameplay.
- fastfile_t6: T6 zone walking and weapon views; IPak/SAB image and sound
sources in asset_transport.
- dxbc_sm5: DX11 shader bytecode lowered to WGSL, so T6 materials draw
with their own technique sets (t6_techset, dxbc_abi).
- Materials: borrowed draw states come from the stand-in's opaque body,
never a lens; colour-map alpha (the camo mask) reads as one on opaque
surfaces; specular and probe reflection scaled for IW4 lighting; maps
named by another kind's samplers fall back to the same-role map.
- Dual wield (`X_dw` + `X_lh`) through the shared secondary-gun viewmodel,
and the `dw` attachment from T6's attachment table.
- Melee: guns without their own melee clip (and pistols, whose clip is the
tactical knife's) borrow knife_mp's knife and swings; the hip ADS layer
returns after a melee.
- T6 clip names match case-insensitively.
- Game Folders option for BO1/MW3/BO2 installs, multi-game lookup fixes,
clean exit, crosshairs, save/load/loadspawn console commands.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scoped weapons hold breath with recovery feedback and sound. Riot shields
block and deflect bullets in hand and on the back; explosive crossbow bolts,
destructible map cars with round resets, and T5 map model collision work.
Remote players show last stand, weapon change, jump, mantle, landing,
ladder and stun animations, and server hitboxes follow the shared torso tree.
GSC gains spectator follow cameras, chat, kick, vehicle paths and flight
controls, physics spheres, slow motion, slide and mantle movers, damage
triggers, music, ambience, rumble and live audio fades over a shared mixer.
IW5 and T5 maps get sun shadows with per-stage sun selection; post-fx
pipelines compile before a vision blend needs them. The lobby browser keeps
focus and selection, and rooms can be password protected. Console supply
and give commands search every item category. Frames and replays decode
only the current wire protocol.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The weapon simulation fires the right akimbo hand with THROW and the left
with ATTACK. Default controller bindings therefore fired the opposite hand:
RT used ATTACK while LT used speed_throw.
Port the hand-mapping behavior from the local Xbox branch to the unified
binding system. Resolve akimbo state from the predicted local player, with
a presented-snapshot fallback, and swap controller attack/speed_throw actions
when installing gameplay bindings. Preserve saved bindings, keyboard/mouse
controls and unrelated controller actions. Lefty and custom layouts follow
their assigned fire/aim actions rather than hard-coded physical triggers.
Use the existing binding-change path to release the old action and block a
held button until release when switching between single and dual weapons.
Validation: play build and diff checks passed. A temporary probe covered
right/left/both triggers, releases, normal fire/ADS bindings, Lefty and custom
assignments, mouse preservation, and release-before-remap weapon transitions.
No physical-controller gameplay retest was performed.
The fine sensitivity slider reused the 1-10 setting, conflating console
preset numbers with a continuous speed control. Selecting a preset must
leave the player's custom slider value available for later use.
Store the selected preset and custom multiplier independently. Add Custom
and integer choices 1 through 10 to the Controller menu. Use the IW4x
pc_options_gamepad.menu preset table: 0.6, 1.0, 1.4, 1.8, 2.0, 2.2, 2.6,
3.0, 3.5 and 4.0. Custom uses the local controller slider's 0.1-5.0 multiplier
range with 0.1 steps. Editing the slider selects Custom; selecting a preset
never overwrites the saved custom value.
Resolve the active multiplier before applying controller aiming. Persist
both settings and migrate the previous pad_sensitivity value to Custom
using its old value/3 speed mapping, preserving existing effective speed.
The acceleration toggle remains independent.
Validation: play build, targeted formatting and diff checks passed.
Temporary probes verified all ten preset multipliers, custom-value retention,
settings save/reload and legacy migration, and menu inheritance/choices.
Aiming probes also passed for acceleration on/off and ADS/FOV scaling at
30, 60 and 144 Hz. Gameplay feel and visual layout were not retested.
Controller aiming always ramped toward the requested turn rate, preventing
players from choosing an immediate response to right-stick input.
Add an Enabled/Disabled Look Acceleration control to the Controller menu
and persist it through settings load/save and native menu dvars. Forward
the setting to the aiming code: disabling it applies the requested angular
velocity immediately, including when switching off an active ramp.
Keep acceleration enabled by default for existing configurations. Preserve
response curves, sensitivity scaling, ADS blending and FOV scaling.
Validation: the play build and targeted formatting checks passed. Temporary
probes checked immediate turning, the existing acceleration ramp, switching
off mid-ramp, and ADS/FOV scaling at 30, 60 and 144 Hz. Menu inheritance and
the toggle choices were also checked. Physical-controller feel has not
been retested in game.
The mode picked in the lobby outlived its match: HostMatchRules was dropped on the way back to the menu, HostGameModeSelection was not, so a later `map` from the console started the old mode with default rules.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Controller buttons bind through the same table as keys: every command on
the controls page shows its key and its button, and either is rebound by
pressing a key or a button. The options gain a Controller page: button
layout (Default, Tactical, Lefty, Bumper Jumper, Bumper Jumper Tactical),
stick layout, look and aim-down-sight sensitivity, invert, response curve,
aim assist, vibration and deadzones, all kept in settings.cfg.
The look stick turns at rates that build up to full deflection, slower
down the sight and scaled by the zoom. Aim assist works over visible
enemies within each weapon's own aim assist ranges, read from the weapon
data: slowdown and lock-on, and on Full a pull onto a target when the
sight comes up. It applies only while aiming with the controller.
Menus take the D-pad or left stick, A and B, and Start opens them. Focus
moves by screen position rather than by menu file order, which jumped
around the options pages for arrow keys too; left and right on a button
cross columns. The Advanced Video page no longer draws the FOV slider
over Bloom.
The controller in use is the last one pressed or moved, so a virtual
joystick or an idle second pad stays out of the way; rumble follows it and
the vibration setting. Use/reload reloads when nothing usable is in reach.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Controls list Aim Down the Sight and Hold Aim Down the Sight; pressing hold
clears a toggle latch so release always leaves ADS. MWHEELUP and MWHEELDOWN
bind from the menu, the console and saved settings, and wheel scroll reaches
the game as discrete presses, so weapon cycling works on the wheel.
Closes#6Closes#7