Commit Graph
79 Commits
Author SHA1 Message Date
ricardoofnl d7ac8188fa [saco] Match FUNC_1001B070; the count is read into an int before the guard and copied to the loop variable inside it, which is what sinks the store past the branch 2026-09-05 10:52:06 +07:00
ricardoofnl 237716a11e [saco] Implement/match ScrUnk53; the three UI dispatch objects take a local placeholder class, the way net/netrpc.cpp already does it 2026-09-05 10:32:34 +07:00
ricardoofnl 3f93cdf486 [saco] Implement/match ScrUnkAD; it is CActorPed::ApplyAnimation and reuses the ScrUnk56 bool read order of 1, 2, 4, 3 2026-09-05 10:07:58 +07:00
ricardoofnl 70b76e9806 [saco] Match ScrUnk21; memset over the aggregate initializer, and the empty-name branch is the fall-through so the test is negated 2026-09-05 10:07:58 +07:00
ricardoofnl 0d9a1c9f3c [saco] Implement/match ScrUnk5A; FUNC_100ABDD0 and FUNC_100ABDF0 take ecx, so both are CPlayerPed methods and the xor feeds the setter 2026-09-05 10:07:58 +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 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 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 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 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 12d85813ee [saco] Implement/match ScrUnk85; it calls CGame::SetWantedLevel behind an early return 2026-09-04 19:32:01 +07:00
ricardoofnl 1de918acd0 [saco] Implement/match ScrSetSpawnInfo; the player pool is fetched after the bitstream 2026-09-04 19:32:01 +07:00
ricardoofnl 3983f6e174 [saco] Implement/match ScrUnk90; it calls CNetGame::DisableMapIcon 2026-09-03 05:20:50 +07:00
ricardoofnl e39e76f106 [saco] Implement/match ScrUnk86; the oversize-textdraw warning is the fallthrough arm 2026-09-03 05:20:50 +07:00
ricardoofnl aa4345eedb [saco] Implement/match ScrUnkB0; it teleports an actor and reads the position into a VECTOR 2026-09-03 04:53:44 +07:00
ricardoofnl 33f11dd9d3 [saco] Implement/match ScrUnk87; it is the textdraw hide RPC and calls CTextDrawPool::FUNC_1001E7F0 2026-09-03 04:43:47 +07:00
ricardoofnl c901c3f7e5 Write the ScrUnk4B attach-object body; frame is 4 bytes short of 0x1001C6A0 2026-09-03 04:38:21 +07:00
ricardoofnl ae6110aa78 [saco] Implement/match ScrUnk56; it is the apply-animation RPC and sets the remote player flag at 0x1C1 2026-09-03 04:14:00 +07:00
ricardoofnl 554f00d613 Move the ScrUnk21 zero-init below the bitstream; frame size now matches, buffer still 1 byte off 2026-09-03 04:00:55 +07:00
ricardoofnl 7404343b7e Write the ScrUnk21 shop-name body; the zero-init lands before the ctor instead of after 2026-09-03 03:54:48 +07:00
ricardoofnl ddca4621ce Write the ScrInitMenu body; still 4 float stack slots short of 0x1001C870 2026-09-03 03:36:50 +07:00
ricardoofnl e2b4621acd [saco] Implement/match ScrUnk0F; it calls CPlayerPed::TogglePlayerControllable 2026-09-03 03:36:50 +07:00
ricardoofnl 989405a307 [saco] Implement/match ScrUnk16; it is the give-weapon RPC and calls CPlayerPed::GiveWeapon 2026-09-03 03:24:34 +07:00
ricardoofnl 3ed37ae8ee [saco] Implement/match ScrUnk43; it is the armed-weapon RPC and calls CPlayerPed::SetArmedWeapon 2026-09-03 03:24:34 +07:00
ricardoofnl d1425c2c8e Write the ScrUnk99 set-skin body; still one lazy push ebx short of 0x10019190 2026-09-03 03:04:22 +07:00
ricardoofnl 4edeb5b18c [saco] Implement/match ScrShowMenu and ScrHideMenu; CNetGame::GetMenuPool is an inline, not an out-of-line call 2026-09-03 02:57:22 +07:00
ricardoofnl 79f96e1555 [saco] Implement/match ScrUnk91; it is the set-ammo RPC and calls CPlayerPed::SetWeaponAmmo 2026-09-03 02:57:22 +07:00
ricardoofnl 5160deda40 [saco] Implement/match ScrAddGangZone and ScrFlashGangZone; the gang zone pool is fetched after the bitstream 2026-09-03 02:46:59 +07:00
ricardoofnl c44c11548d [saco] Implement/match ScrRemoveGangZone and ScrStopFlashGangZone; both read the zone id inside the pool null check 2026-09-03 02:46:59 +07:00
ricardoofnl f8d9e4dcf2 [saco] Implement/match ScrRemovePlayerFromVehicle; it calls CPlayerPed::ExitCurrentVehicle 2026-09-03 02:46:59 +07:00
ricardoofnl eb8859c573 [saco] Implement/match ScrUnkA7; it stores a bool into CNetGame::field_232 2026-09-03 02:21:32 +07:00
ricardoofnl ee4a28d11c [saco] Implement/match ScrUnk23; it calls CPlayerPed::FUNC_100ADFB0 with the value it reads 2026-09-03 02:21:32 +07:00
ricardoofnl 57a67d4cec [saco] Implement/match ScrUnk5B; it sets a vehicle move or turn speed vector 2026-09-03 02:09:29 +07:00
ricardoofnl dc4cb7f2bb [saco] Implement/match ScrSetInterior; it calls CPlayerPed::SetInterior with bRefresh TRUE 2026-09-03 02:09:29 +07:00