Discover gunctrl struct

This commit is contained in:
Ryan Dwyer 2021-03-02 08:16:54 +10:00
parent d700a15187
commit 8913306df8
9 changed files with 130 additions and 124 deletions

View File

@ -670,9 +670,9 @@ void amApply(s32 slot)
}
break;
case 1: // Function
if (g_Vars.currentplayer->weaponnum >= WEAPON_UNARMED
&& g_Vars.currentplayer->weaponnum <= WEAPON_COMBATBOOST
&& g_MpPlayers[g_Vars.currentplayerstats->mpindex].gunfuncs[(g_Vars.currentplayer->weaponnum - 1) >> 3] & (1 << (g_Vars.currentplayer->weaponnum - 1 & 7))) {
if (g_Vars.currentplayer->gunctrl.weaponnum >= WEAPON_UNARMED
&& g_Vars.currentplayer->gunctrl.weaponnum <= WEAPON_COMBATBOOST
&& g_MpPlayers[g_Vars.currentplayerstats->mpindex].gunfuncs[(g_Vars.currentplayer->gunctrl.weaponnum - 1) >> 3] & (1 << (g_Vars.currentplayer->gunctrl.weaponnum - 1 & 7))) {
if (slot == 1) {
g_AmMenus[g_AmIndex].togglefunc = true;
}
@ -766,9 +766,9 @@ void amGetSlotDetails(s32 slot, u32 *flags, char *label)
if (slot == 1) {
if (!secfunc
|| g_Vars.currentplayer->weaponnum < WEAPON_UNARMED
|| g_Vars.currentplayer->weaponnum > WEAPON_COMBATBOOST
|| (g_MpPlayers[g_Vars.currentplayerstats->mpindex].gunfuncs[(g_Vars.currentplayer->weaponnum - 1) >> 3] & (1 << (g_Vars.currentplayer->weaponnum - 1 & 7))) == 0) {
|| g_Vars.currentplayer->gunctrl.weaponnum < WEAPON_UNARMED
|| g_Vars.currentplayer->gunctrl.weaponnum > WEAPON_COMBATBOOST
|| (g_MpPlayers[g_Vars.currentplayerstats->mpindex].gunfuncs[(g_Vars.currentplayer->gunctrl.weaponnum - 1) >> 3] & (1 << (g_Vars.currentplayer->gunctrl.weaponnum - 1 & 7))) == 0) {
*flags |= AMSLOTFLAG_CURRENT;
}
@ -777,9 +777,9 @@ void amGetSlotDetails(s32 slot, u32 *flags, char *label)
}
} else {
if (!prifunc || (
g_Vars.currentplayer->weaponnum >= WEAPON_UNARMED
&& g_Vars.currentplayer->weaponnum <= WEAPON_COMBATBOOST
&& g_MpPlayers[g_Vars.currentplayerstats->mpindex].gunfuncs[(g_Vars.currentplayer->weaponnum - 1) >> 3] & (1 << (g_Vars.currentplayer->weaponnum - 1 & 7)))) {
g_Vars.currentplayer->gunctrl.weaponnum >= WEAPON_UNARMED
&& g_Vars.currentplayer->gunctrl.weaponnum <= WEAPON_COMBATBOOST
&& g_MpPlayers[g_Vars.currentplayerstats->mpindex].gunfuncs[(g_Vars.currentplayer->gunctrl.weaponnum - 1) >> 3] & (1 << (g_Vars.currentplayer->gunctrl.weaponnum - 1 & 7)))) {
*flags |= AMSLOTFLAG_CURRENT;
}
@ -1031,7 +1031,7 @@ void amAssignWeaponSlots(void)
void amOpen(void)
{
if (g_Vars.currentplayer->passivemode == false) {
if (g_Vars.currentplayer->gunctrl.passivemode == false) {
g_AmIndex = g_Vars.currentplayernum;
g_Vars.currentplayer->activemenumode = AMMODE_VIEW;
g_PlayersWithControl[g_Vars.currentplayernum] = false;

View File

@ -4082,7 +4082,7 @@ void chrUpdateCloak(struct chrdata *chr)
// If cloak is enabled via cloaking device or via RCP120
if ((g_Vars.currentplayer->devicesactive & DEVICE_CLOAKDEVICE)
|| (g_Vars.currentplayer->weaponnum == WEAPON_RCP120
|| (g_Vars.currentplayer->gunctrl.weaponnum == WEAPON_RCP120
&& (g_Vars.currentplayer->devicesactive & DEVICE_CLOAKRCP120))) {
if ((chr->hidden & CHRHFLAG_CLOAKED) == 0 && chr->cloakpause < 1) {
chrCloak(chr, true);

View File

@ -1062,12 +1062,12 @@ Gfx *coreRender(Gfx *gdl)
}
var80084050++;
} else if (g_Vars.currentplayer->unk1583_06
} else if (g_Vars.currentplayer->gunctrl.unk1583_06
&& var80075d60 == 2
&& g_Vars.currentplayer->cameramode != CAMERAMODE_THIRDPERSON
&& g_Vars.currentplayer->cameramode != CAMERAMODE_EYESPY
&& var8009dfc0 == 0) {
g_Vars.currentplayer->unk1583_06 = func0f09eae4();
g_Vars.currentplayer->gunctrl.unk1583_06 = func0f09eae4();
}
if (g_Vars.lockscreen) {

View File

@ -147,25 +147,25 @@ void func0f010bb0(void)
i = ALIGN16(func0f09ddfc());
}
g_Vars.currentplayer->unk158c = malloc(i, MEMPOOL_STAGE);
g_Vars.currentplayer->unk159c = 0;
g_Vars.currentplayer->unk15a0 = 0;
g_Vars.currentplayer->unk15a4 = 0;
g_Vars.currentplayer->unk15b0 = 0;
g_Vars.currentplayer->unk15b1 = 0;
g_Vars.currentplayer->unk1588 = 0;
g_Vars.currentplayer->unk1584 = -1;
g_Vars.currentplayer->unk15ea = 2;
g_Vars.currentplayer->unk15eb = 0;
g_Vars.currentplayer->gunctrl.unk158c = malloc(i, MEMPOOL_STAGE);
g_Vars.currentplayer->gunctrl.unk159c = 0;
g_Vars.currentplayer->gunctrl.unk15a0 = 0;
g_Vars.currentplayer->gunctrl.unk15a4 = 0;
g_Vars.currentplayer->gunctrl.unk15b0 = 0;
g_Vars.currentplayer->gunctrl.unk15b1 = 0;
g_Vars.currentplayer->gunctrl.gunmemtype = 0;
g_Vars.currentplayer->gunctrl.gunmemnew = -1;
g_Vars.currentplayer->gunctrl.unk15ea = 2;
g_Vars.currentplayer->gunctrl.unk15eb = 0;
g_Vars.currentplayer->unk1583_06 = true;
g_Vars.currentplayer->unk1583_00 = false;
g_Vars.currentplayer->unk1583_04 = false;
g_Vars.currentplayer->gunctrl.unk1583_06 = true;
g_Vars.currentplayer->gunctrl.unk1583_00 = false;
g_Vars.currentplayer->gunctrl.unk1583_04 = false;
g_Vars.currentplayer->switchtoweaponnum = -1;
g_Vars.currentplayer->unk15e7 = 0;
g_Vars.currentplayer->gunctrl.switchtoweaponnum = -1;
g_Vars.currentplayer->gunctrl.unk15e7 = 0;
g_Vars.currentplayer->invertgunfunc = false;
g_Vars.currentplayer->gunctrl.invertgunfunc = false;
g_Vars.currentplayer->hands[0] = hand;
g_Vars.currentplayer->hands[1] = hand;
@ -176,7 +176,7 @@ void func0f010bb0(void)
g_Vars.currentplayer->hands[1].audiohandle = NULL;
g_Vars.currentplayer->hands[0].audiohandle = NULL;
g_Vars.currentplayer->unk15f2 = 0;
g_Vars.currentplayer->gunctrl.unk15f2 = 0;
for (i = 0; i < ARRAYCOUNT(g_Vars.currentplayer->hands[1].unk0d74); i++) {
g_Vars.currentplayer->hands[1].unk0d74[i] = 0;
@ -194,8 +194,8 @@ void func0f010bb0(void)
g_Vars.currentplayerstats->killcount = 0;
g_Vars.currentplayerstats->ggkillcount = 0;
g_Vars.currentplayer->deathcount = 0;
g_Vars.currentplayer->unk15f8 = 1;
g_Vars.currentplayer->unk15fc = 1;
g_Vars.currentplayer->gunposamplitude = 1;
g_Vars.currentplayer->gunxamplitude = 1;
g_Vars.currentplayer->doautoselect = false;
g_Vars.currentplayer->playertriggeron = false;
g_Vars.currentplayer->playertriggerprev = false;

View File

@ -8004,20 +8004,20 @@ glabel var7f1ac6cc
void func0f09df50(void)
{
g_Vars.currentplayer->unk15ea = 11;
g_Vars.currentplayer->gunctrl.unk15ea = 11;
}
void func0f09df64(s32 arg0)
{
struct player *player = g_Vars.currentplayer;
if (player->unk15ea == 0) {
player->unk15b0 = 0;
player->unk15b1 = 0;
player->unk1584 = arg0;
player->unk15eb = -1;
if (player->gunctrl.unk15ea == 0) {
player->gunctrl.unk15b0 = 0;
player->gunctrl.unk15b1 = 0;
player->gunctrl.gunmemnew = arg0;
player->gunctrl.unk15eb = -1;
} else {
player->unk1584 = arg0;
player->gunctrl.gunmemnew = arg0;
}
}
@ -12100,12 +12100,12 @@ void currentPlayerEquipWeapon(s32 weaponnum)
{
struct player *player = g_Vars.currentplayer;
if (player->weaponnum == weaponnum && player->switchtoweaponnum == -1) {
if (player->gunctrl.weaponnum == weaponnum && player->gunctrl.switchtoweaponnum == -1) {
return;
}
player->switchtoweaponnum = weaponnum;
player->unk1583_05 = 0;
player->gunctrl.switchtoweaponnum = weaponnum;
player->gunctrl.unk1583_05 = 0;
}
s32 handGetWeaponNum(s32 handnum)
@ -12114,7 +12114,7 @@ s32 handGetWeaponNum(s32 handnum)
return WEAPON_NONE;
}
return g_Vars.currentplayer->weaponnum;
return g_Vars.currentplayer->gunctrl.weaponnum;
}
s32 getCurrentPlayerWeaponIdWrapper(s32 handnum)
@ -12136,13 +12136,13 @@ s32 func0f0a1a68(s32 arg0)
{
s32 weaponnum;
if (g_Vars.currentplayer->switchtoweaponnum >= 0) {
weaponnum = g_Vars.currentplayer->switchtoweaponnum;
if (g_Vars.currentplayer->gunctrl.switchtoweaponnum >= 0) {
weaponnum = g_Vars.currentplayer->gunctrl.switchtoweaponnum;
} else {
weaponnum = g_Vars.currentplayer->weaponnum;
weaponnum = g_Vars.currentplayer->gunctrl.weaponnum;
}
if (!g_Vars.currentplayer->unk1583_00 && arg0 == 1) {
if (!g_Vars.currentplayer->gunctrl.unk1583_00 && arg0 == 1) {
weaponnum = WEAPON_NONE;
}
@ -12155,10 +12155,11 @@ void func0f0a1ab0(void)
struct player *player = g_Vars.currentplayer;
s32 dualweaponnum;
if (invHasSingleWeaponIncAllGuns(player->prevweaponnum)) {
currentPlayerEquipWeaponWrapper(HAND_RIGHT, player->prevweaponnum);
if (invHasSingleWeaponIncAllGuns(player->gunctrl.prevweaponnum)) {
currentPlayerEquipWeaponWrapper(HAND_RIGHT, player->gunctrl.prevweaponnum);
dualweaponnum = invHasDoubleWeaponIncAllGuns(player->prevweaponnum, player->prevweaponnum) * player->prevweaponnum * player->unk1583_01;
dualweaponnum = invHasDoubleWeaponIncAllGuns(player->gunctrl.prevweaponnum, player->gunctrl.prevweaponnum)
* player->gunctrl.prevweaponnum * player->gunctrl.unk1583_01;
currentPlayerEquipWeaponWrapper(HAND_LEFT, dualweaponnum);
} else {
func0f0a1df4();
@ -12561,9 +12562,9 @@ void currentPlayerEquipWeaponWrapper(bool arg0, s32 weaponnum)
{
if (arg0 == 1) {
if (weaponnum == WEAPON_NONE) {
g_Vars.currentplayer->unk1583_00 = false;
g_Vars.currentplayer->gunctrl.unk1583_00 = false;
} else {
g_Vars.currentplayer->unk1583_00 = true;
g_Vars.currentplayer->gunctrl.unk1583_00 = true;
}
} else {
if (weaponnum > WEAPON_SUICIDEPILL) {
@ -13202,7 +13203,7 @@ void currentPlayerLoseGunInNbombStorm(struct prop *prop)
return;
}
if (weaponnum <= WEAPON_UNARMED || player->switchtoweaponnum != -1) {
if (weaponnum <= WEAPON_UNARMED || player->gunctrl.switchtoweaponnum != -1) {
return;
}
@ -20417,7 +20418,7 @@ glabel var7f1acb14
void func0f0a8c50(void)
{
if (g_Vars.currentplayer->hands[HAND_RIGHT].unk0d0f_03 == 0) {
g_Vars.currentplayer->invertgunfunc = false;
g_Vars.currentplayer->gunctrl.invertgunfunc = false;
}
}
@ -20507,7 +20508,7 @@ void currentPlayerTickInventory(bool triggeron)
s32 i;
// Remove weapons if in passive mode
if (g_Vars.currentplayer->passivemode) {
if (g_Vars.currentplayer->gunctrl.passivemode) {
struct chrdata *chr = g_Vars.currentplayer->prop->chr;
triggeron = false;
@ -20516,13 +20517,14 @@ void currentPlayerTickInventory(bool triggeron)
invGiveSingleWeapon(WEAPON_UNARMED);
}
if (g_Vars.currentplayer->weaponnum != WEAPON_UNARMED
&& g_Vars.currentplayer->switchtoweaponnum != WEAPON_UNARMED) {
if (g_Vars.currentplayer->gunctrl.weaponnum != WEAPON_UNARMED
&& g_Vars.currentplayer->gunctrl.switchtoweaponnum != WEAPON_UNARMED) {
currentPlayerEquipWeapon(WEAPON_UNARMED);
}
g_Vars.currentplayer->unk1583_00 = 0;
g_Vars.currentplayer->gunctrl.unk1583_00 = 0;
g_Vars.currentplayer->devicesactive = 0;
chr->cloakpause = 0;
chr->cloakfadefrac = 0;
chr->cloakfadefinished = false;
@ -20581,7 +20583,7 @@ void currentPlayerTickInventory(bool triggeron)
if (player->hands[HAND_LEFT].unk0640
&& player->hands[HAND_RIGHT].unk0640
&& player->weaponnum != WEAPON_REMOTEMINE) {
&& player->gunctrl.weaponnum != WEAPON_REMOTEMINE) {
if (player->playertrigtime240 > 80) {
gunsfiring[player->curguntofire] = 1;
@ -20604,7 +20606,7 @@ void currentPlayerTickInventory(bool triggeron)
player->curguntofire = 1 - player->curguntofire;
}
if (player->weaponnum == WEAPON_REMOTEMINE) {
if (player->gunctrl.weaponnum == WEAPON_REMOTEMINE) {
player->curguntofire = 0;
}
@ -20664,7 +20666,7 @@ void playersSetPassiveMode(bool enable)
s32 i;
for (i = 0; i < PLAYERCOUNT(); i++) {
g_Vars.players[i]->passivemode = enable;
g_Vars.players[i]->gunctrl.passivemode = enable;
}
}
@ -20953,7 +20955,7 @@ s32 currentPlayerGetAmmoCount(s32 ammotype)
for (i = 0; i < 2; i++) {
if (player->hands[i].unk0640) {
for (j = 0; j < 2; j++) {
if (player->equippedammotypes[j] == ammotype) {
if (player->gunctrl.totalammo[j] == ammotype) {
total = player->hands[i].loadedammo[j] + total;
}
}

View File

@ -399,25 +399,25 @@ void playerAllocate(s32 index)
g_Vars.players[index]->slayerrocket = NULL;
g_Vars.players[index]->badrockettime = 0;
g_Vars.players[index]->unk1588 = 0;
g_Vars.players[index]->unk158c = NULL;
g_Vars.players[index]->unk1590 = 0;
g_Vars.players[index]->gunctrl.gunmemtype = 0;
g_Vars.players[index]->gunctrl.unk158c = NULL;
g_Vars.players[index]->gunctrl.unk1590 = 0;
g_Vars.players[index]->weaponnum = WEAPON_NONE;
g_Vars.players[index]->prevweaponnum = -1;
g_Vars.players[index]->switchtoweaponnum = -1;
g_Vars.players[index]->gunctrl.weaponnum = WEAPON_NONE;
g_Vars.players[index]->gunctrl.prevweaponnum = -1;
g_Vars.players[index]->gunctrl.switchtoweaponnum = -1;
g_Vars.players[index]->unk15ea = 2;
g_Vars.players[index]->unk15eb = 0;
g_Vars.players[index]->unk15e6 = 0;
g_Vars.players[index]->gunctrl.unk15ea = 2;
g_Vars.players[index]->gunctrl.unk15eb = 0;
g_Vars.players[index]->gunctrl.unk15e6 = 0;
g_Vars.players[index]->passivemode = false;
g_Vars.players[index]->gunctrl.passivemode = false;
g_Vars.players[index]->hands[0] = hand;
g_Vars.players[index]->hands[1] = hand;
g_Vars.players[index]->unk15f8 = 1;
g_Vars.players[index]->unk15fc = 1;
g_Vars.players[index]->gunposamplitude = 1;
g_Vars.players[index]->gunxamplitude = 1;
g_Vars.players[index]->doautoselect = false;
g_Vars.players[index]->playertriggeron = false;

View File

@ -6122,7 +6122,7 @@ Gfx *sightRender(Gfx *gdl, bool sighton, s32 sight)
return gdl;
}
if (g_Vars.currentplayer->passivemode) {
if (g_Vars.currentplayer->gunctrl.passivemode) {
return gdl;
}

View File

@ -1818,7 +1818,7 @@ void frBeginSession(s32 weapon)
frCloseAndLockDoor();
for (i = 0; i < 2; i++) {
if (g_Vars.currentplayer->equippedammotypes[i] >= 0) {
if (g_Vars.currentplayer->gunctrl.totalammo[i] >= 0) {
g_Vars.currentplayer->hands[0].loadedammo[i] = 0;
g_Vars.currentplayer->hands[1].loadedammo[i] = 0;
}

View File

@ -2223,6 +2223,55 @@ struct player0610 {
/*0x0e*/ u16 unk0e;
};
struct gunctrl {
/*0x1580*/ s8 weaponnum;
/*0x1581*/ s8 prevweaponnum; // previously drawn weapon, switched to when throwing Dragon/Laptop or when ammo depleted
/*0x1582*/ s8 switchtoweaponnum; // weaponnum to change to
/*0x1583*/ u8 unk1583_00 : 1;
/*0x1583*/ u8 unk1583_01 : 1;
/*0x1583*/ u8 invertgunfunc : 1;
/*0x1583*/ u8 unk1583_03 : 1;
/*0x1583*/ u8 unk1583_04 : 1;
/*0x1583*/ u8 unk1583_05 : 1;
/*0x1583*/ u8 unk1583_06 : 1;
/*0x1583*/ u8 passivemode : 1;
/*0x1584*/ s32 gunmemnew;
/*0x1588*/ u32 gunmemtype;
/*0x158c*/ void *unk158c;
/*0x1590*/ u32 unk1590;
/*0x1594*/ s32 unk1594;
/*0x1598*/ u32 unk1598;
/*0x159c*/ u16 unk159c;
/*0x15a0*/ s32 unk15a0;
/*0x15a4*/ s32 unk15a4;
/*0x15a8*/ u32 unk15a8;
/*0x15ac*/ u32 unk15ac;
/*0x15b0*/ u8 unk15b0;
/*0x15b1*/ u8 unk15b1;
/*0x15b4*/ u32 unk15b4;
/*0x15b8*/ u32 unk15b8;
/*0x15bc*/ u32 unk15bc;
/*0x15c0*/ u32 unk15c0;
/*0x15c4*/ u32 unk15c4;
/*0x15c8*/ u32 unk15c8;
/*0x15cc*/ u32 unk15cc;
/*0x15d0*/ u32 unk15d0;
/*0x15d4*/ u32 unk15d4;
/*0x15d8*/ u32 unk15d8;
/*0x15dc*/ u32 unk15dc;
/*0x15e0*/ u32 unk15e0;
/*0x15e4*/ s8 totalammo[2];
/*0x15e6*/ u8 unk15e6;
/*0x15e7*/ u8 unk15e7;
/*0x15e8*/ u16 unk15e8;
/*0x15ea*/ u8 unk15ea;
/*0x15eb*/ s8 unk15eb;
/*0x15ec*/ u32 unk15ec;
/*0x15f0*/ u16 unk15f0;
/*0x15f2*/ u16 unk15f2;
/*0x15f4*/ u32 unk15f4;
};
struct player {
/*0x0000*/ s32 cameramode;
/*0x0004*/ struct coord memcampos;
@ -2479,54 +2528,9 @@ struct player {
/*0x0634*/ s16 viewleft; // 0
/*0x0636*/ s16 viewtop; // 0
/*0x0638*/ struct hand hands[2];
/*0x1580*/ s8 weaponnum;
/*0x1581*/ s8 prevweaponnum; // previously drawn weapon, switched to when throwing Dragon/Laptop or when ammo depleted
/*0x1582*/ s8 switchtoweaponnum; // weaponnum to change to
/*0x1583*/ u8 unk1583_00 : 1;
/*0x1583*/ u8 unk1583_01 : 1;
/*0x1583*/ u8 invertgunfunc : 1;
/*0x1583*/ u8 unk1583_03 : 1;
/*0x1583*/ u8 unk1583_04 : 1;
/*0x1583*/ u8 unk1583_05 : 1;
/*0x1583*/ u8 unk1583_06 : 1;
/*0x1583*/ u8 passivemode : 1;
/*0x1584*/ s32 unk1584;
/*0x1588*/ u32 unk1588;
/*0x158c*/ void *unk158c;
/*0x1590*/ u32 unk1590;
/*0x1594*/ s32 unk1594;
/*0x1598*/ u32 unk1598;
/*0x159c*/ u16 unk159c;
/*0x15a0*/ s32 unk15a0;
/*0x15a4*/ s32 unk15a4;
/*0x15a8*/ u32 unk15a8;
/*0x15ac*/ u32 unk15ac;
/*0x15b0*/ u8 unk15b0;
/*0x15b1*/ u8 unk15b1;
/*0x15b4*/ u32 unk15b4;
/*0x15b8*/ u32 unk15b8;
/*0x15bc*/ u32 unk15bc;
/*0x15c0*/ u32 unk15c0;
/*0x15c4*/ u32 unk15c4;
/*0x15c8*/ u32 unk15c8;
/*0x15cc*/ u32 unk15cc;
/*0x15d0*/ u32 unk15d0;
/*0x15d4*/ u32 unk15d4;
/*0x15d8*/ u32 unk15d8;
/*0x15dc*/ u32 unk15dc;
/*0x15e0*/ u32 unk15e0;
/*0x15e4*/ s8 equippedammotypes[2];
/*0x15e6*/ u8 unk15e6;
/*0x15e7*/ u8 unk15e7;
/*0x15e8*/ u16 unk15e8;
/*0x15ea*/ u8 unk15ea;
/*0x15eb*/ s8 unk15eb;
/*0x15ec*/ u32 unk15ec;
/*0x15f0*/ u16 unk15f0;
/*0x15f2*/ u16 unk15f2;
/*0x15f4*/ u32 unk15f4;
/*0x15f8*/ f32 unk15f8;
/*0x15fc*/ f32 unk15fc;
struct gunctrl gunctrl;
/*0x15f8*/ f32 gunposamplitude;
/*0x15fc*/ f32 gunxamplitude;
/*0x1600*/ s32 doautoselect;
/*0x1604*/ u32 playertriggeron;
/*0x1608*/ u32 playertriggerprev;