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 |
|
ricardoofnl
|
d8bc0efab5
|
[saco] Implement/match ScrUnk94; two GetAt lookups on different ids keep both slot tests, and the trailer is the this of the pair of calls
|
2026-09-05 08:11:28 +07:00 |
|
ricardoofnl
|
b18ac60ce5
|
[saco] Implement/match ScrUnk70; it forwards to CGame::PlayCrimeReport with the position passed by pointer
|
2026-09-05 08:11:28 +07:00 |
|
ricardoofnl
|
26cbdd6983
|
[saco] Implement/match ScrUnk38; it is CNetGame::SetMapIcon, and the contiguous ascending X/Y/Z slots mean a VECTOR rather than three floats
|
2026-09-05 08:11:28 +07:00 |
|
ricardoofnl
|
f904873daf
|
[saco] Implement/match ScrUnk7B; zeroing the 33-byte buffer with memset gives eight aligned dwords plus a trailing byte, an = {0} initializer does not
|
2026-09-05 08:11:28 +07:00 |
|
ricardoofnl
|
787d1811fd
|
[saco] Implement/match ScrUnk2D; the read order lands X in the second float slot, not the first
|
2026-09-05 08:11:28 +07:00 |
|
ricardoofnl
|
235b85f926
|
Document the build: VC7.1 toolchain, the Release flags and per-file overrides, and why the DLL does not link yet
|
2026-09-05 07:40:52 +07:00 |
|
ricardoofnl
|
7cf34084ce
|
[saco] Implement/match FUNC_100B5D20; it swaps the offscreen rasters into the scene camera around three GTA calls
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
315ae05989
|
[saco] Add FUNC_100B4430; the second asm block reads the 0x4D3A60 result straight out of eax
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
237a0fe6bb
|
[saco] Implement/match FUNC_100B42B0; the asm-visible copy is taken after the state tests so the object pointer stays in eax
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
db738d9c73
|
[saco] Add FUNC_100B41F0 and FUNC_100B4240; both dispatch the version-dependent 0x7EE2D0/0x7EE310 pair on the scene camera
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
17b3f3d248
|
[saco] Implement/match FUNC_100B3D30; the object pool walk advances the pointer in the for increment, after the counter
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
1bb92445f6
|
[saco] Implement/match FUNC_100B4A70; the unit-range test is <= and >= on all three components
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
cd7c129445
|
[saco] Implement/match VectorNormaliseTo; casting the sum to double picks the fsqrt intrinsic instead of the float sqrt overload
|
2026-09-05 07:37:06 +07:00 |
|
ricardoofnl
|
783584be6e
|
[saco] Implement/match VectorCrossProduct; each product needs its own statement or MSVC canonicalises the fmul operands by address
|
2026-09-05 07:37:05 +07:00 |
|
ricardoofnl
|
500a3abcd3
|
[saco] Implement/match FastSqrt; one newton step on the 0x5F3759D5 inverse-sqrt seed, scaled back up by x
|
2026-09-05 07:37:05 +07:00 |
|
ricardoofnl
|
0c4148e8a4
|
[saco] Add FUNC_100B4BC0; a 0x59C730 thunk with the same three-pop cleanup as FUNC_100B4C00
|
2026-09-05 07:37:05 +07:00 |
|
ricardoofnl
|
ec3b61abfa
|
[saco] Implement/match Packet_AimSync, Packet_PassengerSync and Packet_TrailerSync; the pool pointer is fetched before the id bound check
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
4ec0c924cf
|
[saco] Implement/match CChatWindow::FUNC_10067ED0; it only re-renders the target texture when m_bRedraw is set or the scroll position moved
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
f1d8eabde1
|
[saco] Implement/match CChatWindow::WriteChatLog; the entry type is a switch (subtract chain) and the timestamp buffer takes 68 stack bytes
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
256a3d372c
|
[saco] Implement/match CChatWindow::FUNC_10067E00; the scrollbar stays visible while scrolled off the bottom or the cmd window is open
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
6ce44a81b5
|
[saco] Implement/match CChatWindow::FUNC_10067120; it DT_CALCRECTs "Y" for the line height and "[19:58:34]" for the timestamp width in field_63E6
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
3c6628a812
|
[saco] Implement/match CChatWindow::ReleaseTextures and the FUNC_10067410 tail call into it, which is a bare 5-byte jmp
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
1e1006c1f1
|
[saco] Implement/match CChatWindow::AddInfoMessage; same body as AddDebugMessage with entry type 4 and m_dwChatInfoColor
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
8fa52f694e
|
[saco] Implement/match ScrUnk2B, ScrUnk2E and ScrUnk2F; CObjectPool::FUNC_10012850 takes a 16-bit object id, so the caller pushes the slot dword with no movzx
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
f685a0bcd9
|
[saco] Implement/match ScrPutPlayerInVehicle, ScrUnk9F and ScrUnk50; repeating GetVehiclePool() instead of caching it in a local is what keeps the second slot-state test
|
2026-09-05 07:36:48 +07:00 |
|
ricardoofnl
|
13029ebe53
|
[saco] Implement/match ScrDisplayGameText and ScrUnk69; the inline memset of a stack buffer is what forces the 8-byte aligned frame
|
2026-09-05 07:36:47 +07:00 |
|
ricardoofnl
|
6eede0e150
|
[saco] Implement/match ScrSetPlayerPos and ScrUnk0D; the ground-Z fixup is FindGroundZForCoord plus a 1.5f float literal
|
2026-09-05 07:36:47 +07:00 |
|
ricardoofnl
|
2a481d8ff8
|
[saco] Match CMenuPool::GetSlotState; ScrInitMenu reaches the slot array through it, not by direct indexing
|
2026-09-05 07:36:47 +07:00 |
|
ricardoofnl
|
63c79b1162
|
[saco] Implement/match ScrUnk45; its local-player arm inlines a new CLocalPlayer::SetTeam, whose COMDAT is the body at 0x10017C70
|
2026-09-05 07:36:47 +07:00 |
|
ricardoofnl
|
0fedc9c0bc
|
[saco] Match CLocalPlayer::FUNC_10006FE0, the enter-vehicle key handler; fcomp/test ah, 5/jp is a float <
|
2026-09-04 22:54:15 +07:00 |
|
ricardoofnl
|
773bf14843
|
[saco] Match CLocalPlayer::FUNC_10005AD0; the flag byte comes from a branch not setne, and the GTA id needs its own local to reuse esi
|
2026-09-04 22:52:29 +07:00 |
|
ricardoofnl
|
c2a7c3ad17
|
[saco] Match CLocalPlayer::FUNC_10005BF0; the guards must nest, sequential returns each emit their own BitStream dtor
|
2026-09-04 22:52:29 +07:00 |
|
ricardoofnl
|
4def6b65da
|
[saco] Implement/match CNetGame::UpdateScoresPingsIPs; the six argument RPC overload sits at vtable slot 25 because MSVC reverses an overload set
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
de62ab5a26
|
[saco] Implement/match CNetGame::ResetWorldBounds; the guard byte is struc_41 offset 0x2B
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
ab008a3286
|
[saco] Implement/match the three message-only handlers Packet_RSAPublicKeyMismatch, Packet_ConnectionBanned and Packet_ConnectionSucceeded
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
01fd323e8d
|
[saco] Implement/match CVehiclePool::FUNC_1001ED10; the waiting slots are 100 forty byte entries and the scan must be a do/while(i != n)
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
56909c4418
|
[saco] Implement/match CVehiclePool::FUNC_1001EF30; field-wise point copies keep vecStart enregistered and spill this
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
86edcdf9af
|
[saco] Implement/match CVehiclePool::FUNC_1001EC70; the closest-distance float has to be initialised before the id
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
a6dc7e699d
|
[saco] Implement/match CVehiclePool::FUNC_1001EE20; the 300 unit cutoff is a float literal and the walk is a plain int
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
80b6155fd6
|
[saco] Implement/match CVehiclePool::FUNC_1001EEB0; the sentinel stays 32-bit only while the loop exit assigns it
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
ea6365cdc6
|
[saco] Implement/match CVehiclePool::FUNC_1001ED70; the plate texture is built by a thiscall on the renderer global
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
e23f696955
|
[saco] Implement/match CVehiclePool::FUNC_1001EC00; the int return is what zero-extends the WORD id
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
1ab9ab262c
|
[saco] Implement/match CChatWindow::AddClientMessage; it drops anything over 144 chars and calls ReplaceControlChars out of line
|
2026-09-04 22:28:02 +07:00 |
|
ricardoofnl
|
b6e839d49f
|
[saco] Implement/match CChatWindow::AddChatMessage; the control-char scrub is written out again instead of calling ReplaceControlChars
|
2026-09-04 22:28:01 +07:00 |
|
ricardoofnl
|
13e0a5e9e8
|
[saco] Implement/match the four CChatWindow scrollbar pokes; CDXUTScrollBar::GetTrackPos comes along as the out-of-line COMDAT at 0x100670D0
|
2026-09-04 22:28:01 +07:00 |
|
ricardoofnl
|
272d63d75b
|
[saco] Implement/match CChatWindow::ReplaceControlChars; its range test is signed, unlike the ReplaceUnprintableChars in game/util.cpp
|
2026-09-04 22:28:01 +07:00 |
|
ricardoofnl
|
d9312cbda5
|
[saco] Implement/match CChatWindow::SetPageSize; it returns void, retail leaves the leftover FUNC_10067200 return in eax
|
2026-09-04 22:28:01 +07:00 |
|
ricardoofnl
|
6452edd2f1
|
[saco] Match CLocalPlayer::SelectNextClass; the class step plays sound 1052/1053 through CAudio at pGame+0
|
2026-09-04 22:28:01 +07:00 |
|