Commit Graph
1751 Commits
Author SHA1 Message Date
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
ricardoofnl 88f696841e [saco] Implement/match Unk3D; the dialog id widens with movsx, so the local is a signed short 2026-09-05 08:45:38 +07:00
ricardoofnl ac18ccbe0a [saco] Implement/match Unk24; it builds a 3D text label and the flag init lands between rep stosd and stosb 2026-09-05 08:45:38 +07:00
ricardoofnl 1ba74d3c0e [saco] Implement/match Unk3B; it sets a chat bubble and caps the text at 0x90 bytes 2026-09-05 08:45:38 +07:00
ricardoofnl 479436d28c [saco] Implement/match UpdateScoresPingsIPs; the row count is an unsigned divide and the loop index is a WORD 2026-09-05 08:45:38 +07:00
ricardoofnl 791edd231d [saco] Implement/match Unk22; MSVC parks the 2-byte locals below the 4-byte ones under the BitStream 2026-09-05 08:45:38 +07:00
ricardoofnl dcf5887c29 [saco] Implement/match EditObject; the WORD init widens to a dword store over the dead padding 2026-09-05 08:45:38 +07:00
ricardoofnl 8bac5c0eb0 [saco] Add FUNC_10011990; the inlined Write copies each by-value parameter into a temp slot first 2026-09-05 08:45:38 +07:00
ricardoofnl 77f69b96f2 [saco] Implement/match EditAttachedObject; the zero-init of the read target sits after the BitStream ctor 2026-09-05 08:45:38 +07:00
ricardoofnl ab2512f919 [saco] Implement/match SelectObject; it cancels all three editor globals, the last one without a state check 2026-09-05 08:45:38 +07:00
ricardoofnl 2eedb90411 [saco] Implement/match Unk1C; the +0x80 guard needs mov/test while the +0 one folds into a cmp 2026-09-05 08:45:38 +07:00
ricardoofnl 4fca89b828 [saco] Add FUNC_1000EBA0; the second member call reloads the global because the first one can move it 2026-09-05 08:45:38 +07:00
ricardoofnl 37db7dc3b2 [saco] Add FUNC_1000EC30; caching the global inside the guard keeps it in eax and copies to ecx 2026-09-05 08:45:38 +07:00
ricardoofnl df4b6ce913 [saco] Implement/match FUNC_100A47B0; every statement after the first reloads the aim pointer because the store through it may alias the global 2026-09-05 08:45:38 +07:00
ricardoofnl 2f1bbe95af [saco] Implement/match FUNC_100A4F60; the two byte nop is a memset, a plain WORD store would fold the immediate 2026-09-05 08:45:38 +07:00
ricardoofnl aad45bc751 [saco] Implement/match sub_100A5410; copying a VECTOR element wise avoids the scratch base register a struct assignment would need 2026-09-05 08:45:37 +07:00
ricardoofnl 83a6d7e517 [saco] Implement/match FUNC_100A2FC0 and FUNC_100A46F0; the flag clear masks with a literal 0xBF, ~0x40 would fit a sign extended imm8 2026-09-05 08:45:37 +07:00
ricardoofnl 487ea99c5f [saco] Implement/match FUNC_100A3070, FUNC_100A4670, FUNC_100A4E20 and FUNC_100A5F30; the single add esp, 0x20 is MSVC pooling the cleanup of three __cdecl calls 2026-09-05 08:45:37 +07:00
ricardoofnl 75c7514fcc [saco] Implement/match FUNC_100A4DC0, FUNC_100A5570 and FUNC_100A5EB0; AddDebugMessage is variadic so its this is pushed as the leftmost argument 2026-09-05 08:45:37 +07:00
ricardoofnl 3bcd9ffbde [saco] Implement/match FUNC_100A41A0, FUNC_100A4340, FUNC_100A43B0, FUNC_100A4D40, FUNC_100A2F60 and FUNC_100A5530; the load-then-push argument pairs are asm, a C call would use push dword ptr 2026-09-05 08:45:37 +07:00
ricardoofnl 9b7439cb06 [saco] Implement/match the three plate raster helpers; the mov edx, 0x34/lea pair is hand written asm and the trailing return 0 is what keeps the zero path last 2026-09-05 08:45:37 +07:00
ricardoofnl 366fbef654 [saco] Implement/match eight naked hook stubs; the bare pushad/popad pair marks where a body was compiled out 2026-09-05 08:45:37 +07:00
ricardoofnl 27f52e5fbe [saco] Implement/match CPlayerPed::FUNC_100ACE90; the weapon out-parameter is a full int that only its low byte is tested through 2026-09-05 08:45:37 +07:00
ricardoofnl faee9024b8 [saco] Implement/match CPlayerPed::FUNC_100AEC50; the same argument-slot tail call, into FUNC_100AEB10 2026-09-05 08:45:37 +07:00
ricardoofnl 56ef225874 [saco] Implement/match CPlayerPed::FUNC_100AEC10; the frame index goes back into the second argument slot, so the call tails into FUNC_100AEA80 2026-09-05 08:45:37 +07:00
ricardoofnl bc954875b3 [saco] Implement/match CPlayerPed::FUNC_100AE1E0; split _gap2BD into field_2BD and lock the offset with a probe 2026-09-05 08:45:37 +07:00
ricardoofnl 133894cdf5 [saco] Implement/match CPlayerPed::FUNC_100AC6C0; the tasks local is initialised before its own test, so the store precedes the branch 2026-09-05 08:45:37 +07:00
ricardoofnl f6c6d653a2 [saco] Implement/match CPlayerPed::FUNC_100AEA30; the same clump lookup again, reading the third word 2026-09-05 08:45:37 +07:00
ricardoofnl 67d91f09e0 [saco] Implement/match CPlayerPed::FUNC_100AE9E0; the same clump lookup as FUNC_100AE990, reading the second word 2026-09-05 08:45:37 +07:00
ricardoofnl ba2861f0be [saco] Implement/match CPlayerPed::FUNC_100AE990; the clump lookup keeps the GTA address in its own local so the _asm can call through it 2026-09-05 08:45:37 +07:00
ricardoofnl b345b1b9c8 [saco] Implement/match CPlayerPed::FUNC_100AD080; the task pointer is cached for the _asm and reloaded through Tasks for the clear 2026-09-05 08:45:37 +07:00
ricardoofnl 55151572b6 [saco] Implement/match CPlayerPed::FUNC_100AE560; the first branch has its own epilogue, so it ends in an explicit return 2026-09-05 08:45:37 +07:00
ricardoofnl 1e23436cb7 [saco] Implement/match CPlayerPed::FUNC_100AEBB0; the locals are declared up front so the renderware store precedes the two constants 2026-09-05 08:45:37 +07:00
ricardoofnl 6164c3283b [saco] Implement/match CPlayerPed::FUNC_100AD3E0; the object teardown Destroy spells out inline, as its own function 2026-09-05 08:45:37 +07:00
ricardoofnl 226301087b [saco] Implement/match CPlayerPed::FUNC_100AD030; nesting the tests keeps mov eax, 1 instead of folding the compare into neg/sbb 2026-09-05 08:45:37 +07:00
ricardoofnl 7d27da3613 [saco] Implement/match CPlayerPed::FUNC_100AD8B0; the GetWeaponInfo result is written back into the parameter slot 2026-09-05 08:45:37 +07:00
ricardoofnl 8cd945bd9f [saco] Implement/match CPlayerPed::FUNC_100ACE50; the else branch needs a zeroed register, which is why retail cmps instead of tests 2026-09-05 08:45:37 +07:00
ricardoofnl 9938023f49 [saco] Implement/match CPlayerPed::FUNC_100ADA00; the explicit else pins the early FALSE block ahead of the IsAdded call 2026-09-05 08:45:37 +07:00
ricardoofnl 371a18f009 [saco] Implement/match CPlayerPed::FUNC_100AE960; the result local is declared before the ped pointer, which is what orders the two stack slots 2026-09-05 08:45:37 +07:00