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
|
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
|
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
|
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
|
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
|
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
|
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
|
40f011845e
|
[saco] Implement/match ScrUnk57; a single goto exit gives the one shared epilogue while keeping push esi delayed, which neither early returns nor nesting produced
|
2026-09-05 08:24:05 +07:00 |
|
ricardoofnl
|
810a3cffbd
|
[saco] Implement/match ScrUnk71; CPlayerPool::GetAt will not inline here, so the ternary has to be spelled out, and the attach test is negated
|
2026-09-05 08:11:28 +07:00 |
|