[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

This commit is contained in:
ricardoofnl
2026-09-05 09:07:45 +07:00
parent be7d816e20
commit 2f9da6d14b
3 changed files with 92 additions and 6 deletions
+2
View File
@@ -135,6 +135,8 @@ public:
void sub_10003C20(); // .text:10003C20
void sub_10003BE0(SPAWN_INFO *pSpawnInfo); // .text:10003BE0
void sub_100040E0(BOOL bSpawn); // .text:100040E0
void sub_100041C0(int a1); // .text:100041C0
void sub_100030F0(BYTE a1); // .text:100030F0
void sub_10003710(int a1, int a2); // .text:10003710
DWORD GetField_F0() { return field_F0; };
+3 -1
View File
@@ -7,7 +7,8 @@ class CObject
public:
char _gap0[68];
int field_44;
char _gap48[12];
char _gap48[11];
BYTE field_53;
float field_54;
char _gap58[4403];
int field_118B;
@@ -19,6 +20,7 @@ public:
void FUNC_100A9E30();
void FUNC_100A9E70();
void FUNC_100A80A0(VECTOR *pPos); // .text:100A80A0
void FUNC_100A8030(); // .text:100A8030
};
class CObjectPool
+87 -5
View File
@@ -256,7 +256,26 @@ void ScrUnk50(RPCParameters *rpcParams)
}
}
void ScrUnk63(RPCParameters *rpcParams) {}
void ScrUnk7A(RPCParameters *rpcParams) {}
void ScrUnk7A(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
int iBitLength = rpcParams->numberOfBitsOfData;
PlayerID sender = rpcParams->sender;
WORD objectId;
RakNet::BitStream bsData(Data,(iBitLength/8)+1,false);
bsData.Read(objectId);
CObjectPool *pObjectPool = pNetGame->GetObjectPool();
if(objectId <= MAX_OBJECTS) {
if(pObjectPool->field_4[objectId]) {
CObject *pObject = (CObject *)pObjectPool->field_FA4[objectId];
if(pObject) pObject->FUNC_100A8030();
}
}
}
void ScrUnk7B(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
@@ -287,7 +306,22 @@ void ScrUnk7B(RPCParameters *rpcParams)
}
}
}
void ScrUnk7C(RPCParameters *rpcParams) {}
void ScrUnk7C(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
int iBitLength = rpcParams->numberOfBitsOfData;
PlayerID sender = rpcParams->sender;
int iUnk;
CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
RakNet::BitStream bsData(Data,(iBitLength/8)+1,false);
bsData.Read(iUnk);
pPlayerPool->GetLocalPlayer()->sub_100041C0(iUnk);
}
void ScrUnk7D(RPCParameters *rpcParams)
{
@@ -592,7 +626,21 @@ void ScrUnk57(RPCParameters *rpcParams)
done:
;
}
void ScrUnk58(RPCParameters *rpcParams) {}
void ScrUnk58(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
int iBitLength = rpcParams->numberOfBitsOfData;
PlayerID sender = rpcParams->sender;
BYTE byteUnk;
RakNet::BitStream bsData(Data,(iBitLength/8)+1,false);
bsData.Read(byteUnk);
CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
if(pPlayerPool) pPlayerPool->GetLocalPlayer()->sub_100030F0(byteUnk);
}
void ScrUnk59(RPCParameters *rpcParams) {}
void ScrUnk5A(RPCParameters *rpcParams) {}
void ScrUnk5B(RPCParameters *rpcParams)
@@ -988,7 +1036,22 @@ void ScrUnk40(RPCParameters *rpcParams)
RakNet::BitStream bsData(Data,(iBitLength/8)+1,false);
bsData.Read(playerId);
}
void ScrUnk41(RPCParameters *rpcParams) {}
void ScrUnk41(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
int iBitLength = rpcParams->numberOfBitsOfData;
PlayerID sender = rpcParams->sender;
VEHICLEID vehicleId;
BYTE byteUnk;
RakNet::BitStream bsData(Data,(iBitLength/8)+1,false);
bsData.Read(vehicleId);
bsData.Read(byteUnk);
pNetGame->GetVehiclePool()->FUNC_1001EB00(vehicleId, byteUnk);
}
void ScrUnk42(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
@@ -1197,7 +1260,26 @@ void ScrUnk52(RPCParameters *rpcParams)
}
void ScrUnk53(RPCParameters *rpcParams) {}
void ScrUnk54(RPCParameters *rpcParams) {}
void ScrUnkA9(RPCParameters *rpcParams) {}
void ScrUnkA9(RPCParameters *rpcParams)
{
PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
int iBitLength = rpcParams->numberOfBitsOfData;
PlayerID sender = rpcParams->sender;
WORD objectId;
RakNet::BitStream bsData(Data,(iBitLength/8)+1,false);
bsData.Read(objectId);
CObjectPool *pObjectPool = pNetGame->GetObjectPool();
if(objectId <= MAX_OBJECTS) {
if(pObjectPool->field_4[objectId]) {
CObject *pObject = (CObject *)pObjectPool->field_FA4[objectId];
if(pObject) pObject->field_53 = 1;
}
}
}
void ScrUnkAD(RPCParameters *rpcParams) {}
void ScrUnkAE(RPCParameters *rpcParams) {}
void ScrUnkAF(RPCParameters *rpcParams) {}