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>
Restore the akimbo sprint/reload and rapid weapon-cycle behavior needed for
wrist twist and righty tighty. Independent sprint checks previously replaced
one hand's reload animation while processing the other hand.
Prepare both hands and decay their timers before making one shared sprint
transition decision. Follow the original MW2 state checks: firing,
rechambering or melee in either hand can block the transition, while the
primary hand determines whether both hands enter or leave sprint. This
preserves the left reload pose through a rapid weapon-cycle cancellation
without a dedicated wrist-twist animation exception.
Allow combined use/reload to coexist with akimbo sprint while the primary
hand is not reloading. Account for the RELOAD bit added by the current
client when no interaction is targeted. Once the primary hand reloads,
restore normal sprint interruption so reloading both weapons cannot trigger
the left-only wrist twist. Keep ordinary reload-button sprint interruption.
Validation: play build, targeted formatting and diff checks passed. A
temporary probe matched 1,922 state/flag combinations against the original
MW2 sprint-decision instruction block. Lifecycle probes covered left-only,
right-only and both-hand reloads with tapped and held input, including ammo
completion and non-restarting reload timers. Rapid weapon cycling and the
previous held-fire/reload regression probes passed. The user confirmed the
resulting behavior in game. No temporary probes are included.
Reload requests were only accepted on a new button press, so holding reload
could not restart it after firing or canceling a weapon switch. Semi-auto
fire also required a new press even when a reload had rearmed the weapon.
Evaluate the held reload request through the existing reload eligibility
checks. Use the semi-auto shot count to gate firing, resetting it on trigger
release and reusing the existing resets during reloads and weapon changes.
Holding fire alone still produces one semi-auto shot, while holding fire
and reload repeats the shot/reload cycle. Holding reload through a double
weapon switch restarts the reload when the weapon becomes eligible again.
The shared simulation change applies to keyboard and controller input.
Validation: play build, targeted rustfmt and diff checks passed. Temporary
probes reproduced both failures before the change and passed afterward,
including normal and fast reloads, canceled and completed weapon switches,
semi-auto release/repress, reload eligibility, bolt actions and both akimbo
hands. The user confirmed the resulting behavior matches MW2 in game.
Temporary probes are excluded from the commit.
Holding aim originally allowed zooming throughout a reload. The blanket
reload-state restriction added in a2093b9 overcorrected this by blocking
ADS until the entire reload finished, delaying the return to aim compared
to MW2.
Replace that restriction with the original engine's ADS fraction logic.
Decode WeaponDef::iPositionReloadTransTime from IW4 assets and carry it
through the weapon catalog, combat facts and shared movement context.
Include the field in the simulation content fingerprint.
Magazine reloads suppress ADS while remaining weapon time exceeds the
weapon's authored transition window. Segmented reloads suppress ADS during
the start and insertion states, then use that window during reload end.
Keep ADS intent available so holding aim resumes the blend at the original
boundary. The comparison uses weapon-timer milliseconds, preserving the
existing Sleight of Hand timer scaling without an extra fixed delay.
Validation: play build, targeted formatting and diff checks passed. A
temporary reference probe compared 4,704 cases against the original
MW2/IW4x instruction block at 0x4a84ab..0x4a8513, including transition
boundaries and segmented reloads. Runtime traces verified authored windows
and early ADS recovery on M9, USP, Intervention and Barrett with Sleight
of Hand. The user confirmed the resulting behavior in game.
Temporary diagnostics and probes are excluded. The runtime test encountered
the previously observed shutdown SIGSEGV after process_exit code=0; this
change does not address that shutdown issue.
The shared ADS permission check excluded weapon switches, melee and offhand
states but omitted the reload family. Holding or requesting ADS during a
reload could therefore keep raising the weapon and zooming the view.
Reject ADS throughout Reloading, ReloadingInterrupt, ReloadStart,
ReloadStartInterrupt and ReloadEnd using the existing weapon-state helper.
The normal ADS intent/fraction update then lowers the weapon at its ADS-out
rate and prevents re-entry until the reload ends. The same permission check
runs in authoritative simulation and client prediction, covering keyboard
reload and controller use/reload without changing their bindings.
Validation: play build, targeted rustfmt and diff checks passed. A temporary
probe reproduced the permissive behavior with the previous implementation,
then verified ADS exit and blocked entry for all five reload states with
RELOAD and USE_RELOAD inputs. It also checked ADS recovery when ready and
preserved firing/rechamber permissions. No in-game visual retest was run.
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 turn-speed limit scaled with sensitivity while acceleration scaled
with FOV. Increasing sensitivity therefore lengthened the ramp, unlike
the local IW4x controller implementation.
Scale acceleration by the base controller sensitivity multiplier instead
of FOV, matching IW4x's default 1200 degrees/s squared times sensitivity.
Keep ADS and FOV scaling on the requested turn speed. Ramp the absolute
speed before applying the requested direction, matching IW4x's integrator
when the stick reverses direction during a ramp. Deceleration and disabled
acceleration remain immediate.
Validation: the play build, targeted rustfmt and diff checks passed.
A temporary reference probe passed 216 combinations of sensitivity, FOV,
ADS blend, frame rate and acceleration mode, including direction reversals,
release and disabling acceleration. No game relaunch or physical-controller
feel test 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.
The controller sensitivity slider advanced in steps of 0.5 and displayed
only whole numbers, hiding the selected fractional value.
Use 0.1 steps, matching the granularity of the earlier local controller
slider while retaining master's 1-10 sensitivity scale and speed mapping.
Add an optional decimal precision field to menu sliders and display one
decimal for controller look sensitivity. Other sliders retain their default
integer formatting; the renderer caps requested precision at six places.
Validation: the play build, targeted formatting and diff checks passed.
Temporary probes verified the controller menu's inherited slider definition,
its 1-10 bounds and 0.1 step, decimal precision, and preservation of fractional
sensitivity through settings sanitization. No permanent tests were added.
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.
Currently, first-person weapon models are tilted to the right when walking forward, and to the left when walking backward. In MW2 however, the weapon only cants to the right or left when strafing in that direction. This PR fixes that small inaccuracy.