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 |
|
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 |
|