The T6 tactical insertion sits in the tactical slot and throws with the
tactical button beside the lethal: the class script is handed a smoke
grenade standing for it, and its giving starts IW4's tactical insertion
perk. The glow stick IW4's scripts plant for it carries the T6 planted
model, drawn as a projectile mesh standing on end, and the thrown grenade
is removed once it is planted.
IW4's own tactical insertion chosen as the lethal is given as the
equipment perk instead of a frag.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Reticles draw T6's emissive technique (T6 "unlit" is Radiant's preview);
packed constant rows, floatZ stand-in, blended surfaces drop depth writes
- Zone pointer lookups go through per-asset bound slots (reused memory)
- Holo and rangefinder swap to their ADS models when fully aimed
- BO2 scope overlays (variant/unique overlay materials); sights looked
through (ACOG, iron sights) on snipers aim down the 3D sight
- Select fire and other zero-timed alt raises last their clip
- Stat-only configurations (FMJ) keep the bare weapon's hides
- HUD names configurations with their attachments; equipment uses its
BO2 HUD icon; attachment and overlay icons decoded for the class menu
- World models (planted equipment, third person) use native T6 materials
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Each T6 configuration with an alternate weapon (grenade launcher,
select fire, dual optic) gets an alternate row of its own: it wears the
configuration's attachments and returns to it. Select fire and dual
optic fire from the configuration's magazine (WeaponAttachment
sharedAmmo). A switch plays only the raise of the weapon switched to;
select fire uses its attachment's in/out clips.
- weapon_iw4: a weapon with a fire delay re-armed the delay when it ran
out and never fired; the delayed shot now fires.
- Configurations hide only their attachments' gun bones, not the bare
weapon's (the Ballista's iron sights under its scope).
- A T6 riot shield bashes with the fire button (`fire_melees`).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each T6 attachment configuration takes the numbers of the attachment's
WeaponAttachment (fastfile_t6::weapon::attachment, offsets checked against
known effects): clip size, fire time, reload times, ADS in/out times, ADS
zoom FOV and zoom fractions, damage range, hip spread, ADS move speed,
ADS view kick centring, ADS idle sway, and FMJ penetration.
- ADS move speed is relative to walking as in IW4 (SMGs 2, rifles 1); a
stock raises it up to running pace.
- A pump shotgun's fast mag loads two shells a stroke.
- T6 weapons had no penetration multiplier; they take the stand-in's.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every attachment a T6 weapon offers, alone or in a compatible pair, is a
weapon row (`an94_acog_grip`) built from the base row and the weapon's
WeaponAttachmentUnique assets: the attachment's first-person and world
models at the weapon's own placement, hidden gun bones, clip overrides,
fire sounds and alternate weapon. Stat-only attachments make rows that
change nothing shown yet.
- fastfile_t6: AttachmentUniqueView; loaded assets record the asset each
pointer field named at load time, since walk memory is reused.
- Each attachment model is captured per weapon (`model@unique`) with its
offset as root rest and the gun bone it hangs from (ModelSkel::mount_tag).
- T6 guns hide parts by collapsing bones in skinning: their sights share
the body's surfaces.
- Bare T6 rows hide what their `none` unique hides.
- The full T6 attachment table loads; stats-table names like `acog_sniper`
map to `acog`.
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>
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.