Commit Graph

1207 Commits

Author SHA1 Message Date
ricardoofnl f39b2c3da9 [saco] Call CChatWindow::AddChatMessage from FUNC_10017610 and drop the duplicate FUNC_10068020 declaration 2026-09-05 10:07:58 +07:00
ricardoofnl 662270a17a [saco] Drop my duplicate CPlayerPed::FUNC_100AD440 declaration; another lane landed the same one 2026-09-05 10:07:58 +07:00
ricardoofnl bc516c9fc8 [saco] Implement/match FUNC_100158D0, the unoccupied vehicle sync; the 0.05 lerp gate is a double literal here, unlike the trailer path 2026-09-05 10:07:58 +07:00
ricardoofnl 558f817285 [saco] Implement/match FUNC_10015140, the vehicle position resync; boats, helis and planes get a 2.0 Z snap limit through a local 2026-09-05 10:07:58 +07:00
ricardoofnl b145cc82f5 [saco] Implement/match FUNC_10015C90, the trailer sync handler; the 0.5 gate is a <= chain and the 6.0/3.0 snap gate a > chain 2026-09-05 10:07:58 +07:00
ricardoofnl 67c7c34fc0 [saco] Implement/match FUNC_10014950, the special-action driver; every pair is two sequential ifs with &&, not an if/else 2026-09-05 10:07:58 +07:00
ricardoofnl 10dddab97e [saco] Implement/match FUNC_10016370, the bullet sync handler; per-component float assignments keep the direct displacements a VECTOR copy would hide behind a lea 2026-09-05 10:07:58 +07:00
ricardoofnl 8d8b9e33d4 [saco] Implement/match FUNC_10014C40, the 3D position resync; the lerp factor is a mutable global so it lands in st(1) instead of an fmul operand 2026-09-05 10:07:57 +07:00
ricardoofnl ef8d3e3354 [saco] Implement/match FUNC_10014E60; writing the snap tail at both exits lets the merge hoist the field_17C load above the IsAdded branch 2026-09-05 10:07:57 +07:00
ricardoofnl 8b78747e06 [saco] Match FUNC_10014380 and FUNC_10014390; both are class-body getters whose COMDATs need an in-TU caller 2026-09-05 10:07:57 +07:00
ricardoofnl 99dda3ded5 [saco] Implement/match CChatWindow::FUNC_10067940; the entry walk needs its own index bumped ahead of the rect advance, and the strlen guards are bare temps rather than a named length 2026-09-05 10:03:36 +07:00
ricardoofnl c735f2f750 [saco] Implement/match ScrUnkAE, ScrUnkAF, ScrUnkB2, ScrUnkA0, ScrUnk39, ScrUnk7E and ScrUnk7F; the actor lookup lands in ecx because it is the this of a thiscall, not an allocator choice 2026-09-05 09:58:02 +07:00
ricardoofnl 1d0b3fac63 [saco] Implement/match ScrUnkA1; it forwards the two bytes straight to CVehiclePool::FUNC_1001EB30 2026-09-05 09:43:46 +07:00
ricardoofnl 39edc13d51 [saco] Match ScrUnk30 and CDownloadList::FUNC_10017D10; the guarded three-field update is an inline member, so the handler and its out-of-line COMDAT fall together 2026-09-05 09:43:46 +07:00
ricardoofnl 1df2731742 [saco] Match SendDeath and SetInteriorId; the killer id is a WORD out-param whose copy widens to a dword 2026-09-05 09:39:37 +07:00
ricardoofnl 3a04674340 [saco] Match FUNC_10004120; the counter is a free function whose loop index and bound are both locals declared ahead of the early return 2026-09-05 09:39:37 +07:00
ricardoofnl 8163d2e5ee [saco] Match FUNC_10003FC0, the in-vehicle boundary check; the id is tested against INVALID_VEHICLE_ID before the range 2026-09-05 09:39:37 +07:00
ricardoofnl 5baa271d74 [saco] Match FUNC_10004280; GetAt is called twice and the pool bound check folds into GetSlotState 2026-09-05 09:39:37 +07:00
ricardoofnl 2cf8455402 [saco] Correct the SCRIPT_COMMAND ids in FUNC_100AD3E0 and FUNC_100AE1E0; the id is a masked relocation, so the byte diff cannot see a wrong command 2026-09-05 09:33:55 +07:00
ricardoofnl 558298089e [saco] Match RequestSpawn, FUNC_10003F50 and FUNC_100041C0; the spectate reset is an else if, and a plain second if costs the jmp to the tail 2026-09-05 09:24:47 +07:00
ricardoofnl 3c8eb15683 [saco] Match five more CLocalPlayer members; SPAWN_INFO sits at +0x14F and the resend test duplicates its update arm rather than merging the conditions 2026-09-05 09:24:47 +07:00
ricardoofnl e18f766850 [saco] Match five more CLocalPlayer members; the sync interval globals at 0x100FE0A8/0x100FE0AC default to 30 2026-09-05 09:24:47 +07:00
ricardoofnl 375a1b3aa3 [saco] Match four small CLocalPlayer members; the 1000 fallback has to be the trailing else, and the three key words are read through field_0 2026-09-05 09:24:47 +07:00
ricardoofnl f4d31db33e [saco] Correct CGame::CreateWeaponPickup to inline the model wait; calling IsModelLoaded and friends out of line was wrong, the only delta left is MSVC rotating the wait loop where retail leaves it top tested 2026-09-05 09:24:47 +07:00
ricardoofnl 2f9da6d14b [saco] Implement/match ScrUnk7C, ScrUnk58, ScrUnk41, ScrUnkA9 and ScrUnk7A; CLocalPlayer::sub_100030F0 takes a byte, so the caller pushes the slot dword with no movzx 2026-09-05 09:24:47 +07:00
ricardoofnl be7d816e20 [saco] Implement/match ScrUnk62, ScrUnk11, ScrUnk93 and ScrUnk10; caching m_pGameAudio in a local is what loads this before the argument pushes 2026-09-05 09:24:47 +07:00
ricardoofnl 85d533a5af [saco] Match CRemotePlayer::FUNC_10017C80; the dead out-of-line COMDAT comes back once ScrUnk50 calls the inline setter instead of assigning field_4 directly 2026-09-05 09:24:47 +07:00
ricardoofnl efad9a4425 [saco] Implement/match ScrUnk52; the wire bool picks between InterpolatePosition and InterpolateLookAt, and both endpoints are VECTORs passed by pointer 2026-09-05 09:24:47 +07:00
ricardoofnl 4ea69b96c0 [saco] Implement/match CPlayerPed::FUNC_100AD440; the armed-weapon compare stays byte wide, and this one really does use destroy_object_with_fade 2026-09-05 09:12:31 +07:00
ricardoofnl 457fb47ee6 [saco] Implement/match CPlayerPed::FUNC_100AEEE0; the bone constant owns the lowest slot, so it is the last of the three locals declared 2026-09-05 09:12:31 +07:00
ricardoofnl 066b30a8b2 [saco] Implement/match CPlayerPed::FUNC_100AF220; the three contiguous ascending float slots are one VECTOR, not three locals 2026-09-05 09:12:31 +07:00
ricardoofnl 7f80a565e2 [saco] Implement/match CPlayerPed::FUNC_100AE790; the no-task branch tails into FUNC_100AE6A0 with this still in ecx 2026-09-05 09:12:31 +07:00
ricardoofnl 69cf2dfb20 [saco] Implement/match CPlayerPed::FUNC_100AF1F0; the ped local is stored before its own test, then the tail call reloads this 2026-09-05 09:12:31 +07:00
ricardoofnl b61d2ca7cc [saco] Implement/match CPlayerPed::FUNC_100AE530; the inherited renderware getter needs no ecx reload, this is still live 2026-09-05 09:12:31 +07:00
ricardoofnl 48dfa28b5d [saco] Implement/match CPlayerPed::FUNC_100AD9E0; the same lookup as FUNC_100AD9C0 against the ped-type field 2026-09-05 09:12:31 +07:00
ricardoofnl 984369a2a6 [saco] Implement/match CPlayerPed::FUNC_100AD9C0; the model index widens through movzx for the __cdecl stat lookup 2026-09-05 09:12:31 +07:00
ricardoofnl 4aea04637b Define dword_1026EB98 in main.cpp; net/netrpc.cpp declares it extern and nothing provided it 2026-09-05 09:10:01 +07:00
ricardoofnl a1748ca81f [saco] Implement/match UnkAB; the trailing GetAt only survives DCE when its result gates a return 2026-09-05 09:07:34 +07:00
ricardoofnl 4279b751fb Drop the duplicate CPlayerPed::FUNC_100ACEF0 declaration two lanes each added 2026-09-05 08:49:41 +07:00
ricardoofnl 313c7ee291 [saco] Implement/match ScrUnk29; it is PlayAudioStream on the object at 0x1026EB8C, and the position is a VECTOR with the radius slotted below it 2026-09-05 08:45:38 +07:00
ricardoofnl 03b2f5b5a5 [saco] Implement/match FUNC_10015460; the turn-speed clamp is gated by an initialised global and _gap16C is the synced quaternion 2026-09-05 08:45:38 +07:00
ricardoofnl 5f492d0791 [saco] Implement/match FUNC_10015760, the aim sync handler; repeating the sync load per destination keeps the copies in GPRs instead of fld/fst 2026-09-05 08:45:38 +07:00
ricardoofnl 8be02a792c [saco] Implement/match FUNC_10017130; the failure path sits after the nested success block and the widened callee params force both movzx 2026-09-05 08:45:38 +07:00
ricardoofnl b87030da7a [saco] Implement/match FUNC_10015650; writing the abs difference as >= keeps the subtract order and the test ah, 1 form 2026-09-05 08:45:38 +07:00
ricardoofnl 809df262a3 [saco] Implement/match FUNC_10017340, the driver sync store; the state change is written out longhand, not through FUNC_100165B0 2026-09-05 08:45:38 +07:00
ricardoofnl 998f68c583 [saco] Implement/match FUNC_10017440, the passenger sync store; the vehicle cache is an inlined CVehiclePool::GetAt 2026-09-05 08:45:38 +07:00
ricardoofnl e10d48a9e9 [saco] Implement/match FUNC_10017260, the on-foot sync store; the sign-bit mask on the anim field is what emits jns 2026-09-05 08:45:38 +07:00
ricardoofnl 486b730168 [saco] Implement/match FUNC_10014FF0; it slerps the ped 75% onto the synced quaternion and reheads it 2026-09-05 08:45:38 +07:00
ricardoofnl 0d9aedf631 [saco] Implement/match FUNC_100148F0; it drops the ped where it stands and clears the cached vehicle 2026-09-05 08:45:38 +07:00
ricardoofnl 4c4329f013 [saco] Match CPlayerPool::GetPlayerName; folding the range guard into the pointer initializer coalesces it onto this 2026-09-05 08:45:38 +07:00