diff --git a/src/game/activemenu.c b/src/game/activemenu.c index 4380bdb1e..8793ca26b 100644 --- a/src/game/activemenu.c +++ b/src/game/activemenu.c @@ -443,24 +443,10 @@ void amGetSlotDetails(s32 slot, u32 *flags, char *label) default: // Orders screen strcpy(label, ""); - if (g_MissionConfig.iscoop) { - if (slot == 4) { - strcpy(label, langGet(L_MISC_474)); // "Perfect Buddies" - } else if (slot == 1) { - strcpy(label, langGet(L_MISC_472)); // "Aggressive" - } else if (slot == 7) { - strcpy(label, langGet(L_MISC_473)); // "Passive" -#if VERSION >= VERSION_NTSC_1_0 - } else if (slot == 3) { - strcpy(label, langGet(L_MISC_475)); // "Stealth" -#endif - } + if (slot == 4) { + strcpy(label, langGet(L_MISC_172)); // "Orders" } else { - if (slot == 4) { - strcpy(label, langGet(L_MISC_172)); // "Orders" - } else { - strcpy(label, botGetCommandName(g_AmBotCommands[slot])); - } + strcpy(label, botGetCommandName(g_AmBotCommands[slot])); } break; } @@ -576,13 +562,8 @@ void amChangeScreen(s32 step) } } else { // Solo missions, or MP with no teams - if (g_MissionConfig.iscoop && amGetFirstBuddyIndex() >= 0) { - // Weapon selection, second function and AI buddy commands - maxscreenindex = 2; - } else { - // Weapon selection and second function - maxscreenindex = 1; - } + // Weapon selection and second function + maxscreenindex = 1; } if (g_AmMenus[g_AmIndex].screenindex > maxscreenindex) { @@ -1350,42 +1331,12 @@ Gfx *amRender(Gfx *gdl) mode = AMSLOTMODE_FOCUSED; } - if (g_MissionConfig.iscoop && (buddynum = amGetFirstBuddyIndex(), buddynum >= 0)) { - if (mode == AMSLOTMODE_DEFAULT && g_AmMenus[g_AmIndex].screenindex >= 2) { - struct chrdata *chr = g_Vars.aibuddies[buddynum]->chr; + if (mode == AMSLOTMODE_DEFAULT && g_AmMenus[g_AmIndex].screenindex >= 2) { + s32 slotcmd = g_AmBotCommands[var800719a0[row][column]]; + s32 botcmd = g_MpAllChrPtrs[mpchrnum]->aibot->command; -#if VERSION >= VERSION_NTSC_1_0 - if (var800719a0[row][column] == 7) { - if (chr->hidden & CHRHFLAG_PASSIVE) { - mode = AMSLOTMODE_CURRENT; - } - } else if (var800719a0[row][column] == 1) { - if ((chr->hidden & CHRHFLAG_PASSIVE) == 0) { - mode = AMSLOTMODE_CURRENT; - } - } -#else - if (chr->hidden & CHRHFLAG_PASSIVE) { - if (var800719a0[row][column] == 7) { - mode = AMSLOTMODE_CURRENT; - } - } else { - if (var800719a0[row][column] == 1) { - mode = AMSLOTMODE_CURRENT; - } - } -#endif - } - } else { - if (g_Vars.normmplayerisrunning - && mode == AMSLOTMODE_DEFAULT - && g_AmMenus[g_AmIndex].screenindex >= 2) { - s32 slotcmd = g_AmBotCommands[var800719a0[row][column]]; - s32 botcmd = g_MpAllChrPtrs[mpchrnum]->aibot->command; - - if (slotcmd == botcmd) { - mode = AMSLOTMODE_CURRENT; - } + if (slotcmd == botcmd) { + mode = AMSLOTMODE_CURRENT; } } @@ -1408,22 +1359,8 @@ Gfx *amRender(Gfx *gdl) } // Render AI bot name and weapon - { - struct g_vars *vars = &g_Vars; - -#if VERSION >= VERSION_JPN_FINAL - if (!(g_MissionConfig.iscoop && amGetFirstBuddyIndex() >= 0) - && g_Vars.normmplayerisrunning - && g_AmMenus[g_AmIndex].screenindex >= 2) { - gdl = amRenderAibotInfo(gdl, g_AmMenus[g_AmIndex].screenindex - 2); - } -#else - if (!(g_MissionConfig.iscoop && amGetFirstBuddyIndex() >= 0) - && vars->normmplayerisrunning - && g_AmMenus[g_AmIndex].screenindex >= 2) { - gdl = amRenderAibotInfo(gdl, g_AmMenus[g_AmIndex].screenindex - 2); - } -#endif + if (g_AmMenus[g_AmIndex].screenindex >= 2) { + gdl = amRenderAibotInfo(gdl, g_AmMenus[g_AmIndex].screenindex - 2); } // Note: the column and row values will never be 1 here, so this diff --git a/src/game/activemenutick.c b/src/game/activemenutick.c index 27654a88a..9f902b5d5 100644 --- a/src/game/activemenutick.c +++ b/src/game/activemenutick.c @@ -1225,24 +1225,15 @@ void amTick(void) if (toggle) { if (g_AmMenus[g_AmIndex].screenindex >= 2) { - if (g_Vars.numaibuddies && g_MissionConfig.iscoop) { - // Bot command screen, in coop with AI buddies - if (g_AmMenus[g_AmIndex].slotnum == 4) { - gotonextscreen = true; - } else { - amApply(g_AmMenus[g_AmIndex].slotnum); - } - } else { - // Bot command screen, in multiplayer - if (g_AmBotCommands[g_AmMenus[g_AmIndex].slotnum] == MPBOTCOMMAND_ATTACK) { - amOpenPickTarget(); - } else if (g_AmMenus[g_AmIndex].allbots == false) { - gotonextscreen = true; - } + // Bot command screen, in multiplayer + if (g_AmBotCommands[g_AmMenus[g_AmIndex].slotnum] == MPBOTCOMMAND_ATTACK) { + amOpenPickTarget(); + } else if (g_AmMenus[g_AmIndex].allbots == false) { + gotonextscreen = true; + } - if (g_AmMenus[g_AmIndex].slotnum != 4) { - amApply(g_AmMenus[g_AmIndex].slotnum); - } + if (g_AmMenus[g_AmIndex].slotnum != 4) { + amApply(g_AmMenus[g_AmIndex].slotnum); } } else { // Weapon or function screen diff --git a/src/game/body.c b/src/game/body.c index b9c4a5f2e..3b66393a4 100644 --- a/src/game/body.c +++ b/src/game/body.c @@ -483,10 +483,6 @@ void bodyAllocateChr(s32 stagenum, struct packedchr *packed, s32 cmdindex) chr->chrflags |= CHRCFLAG_CLONEABLE; } - if (!g_Vars.normmplayerisrunning && g_MissionConfig.iscoop && g_Vars.numaibuddies > 0) { - chr->flags |= CHRFLAG0_AIVSAI; - } - if (random() % 5 == 0) { // Make chr punch slower chr->flags2 |= CHRFLAG1_ADJUSTPUNCHSPEED; diff --git a/src/game/bondgun.c b/src/game/bondgun.c index ad25aff31..937376924 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -6152,17 +6152,6 @@ void bgunDisarm(struct prop *attackerprop) bool drop; if (!weaponHasFlag(weaponnum, WEAPONFLAG_UNDROPPABLE) && weaponnum <= WEAPON_RCP45) { -#if VERSION >= VERSION_NTSC_1_0 - // Coop must not allow player to drop a mission critical weapon - // because AI lists can fail the mission if the player has zero - // quantity. - if (g_Vars.coopplayernum >= 0 - && (attackerprop == g_Vars.bond->prop || attackerprop == g_Vars.coop->prop) - && bgunIsMissionCritical(weaponnum)) { - return; - } -#endif - if (weaponnum <= WEAPON_UNARMED || player->gunctrl.switchtoweaponnum != -1) { return; } diff --git a/src/game/bondmove.c b/src/game/bondmove.c index 81a863a14..3420d7ce2 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -1022,9 +1022,7 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i // Handle shutting eyes in multiplayer if (bmoveGetCrouchPos() == CROUCHPOS_SQUAT - && g_Vars.currentplayer->crouchoffset == -90 - && g_Vars.mplayerisrunning - && g_Vars.coopplayernum < 0) { + && g_Vars.currentplayer->crouchoffset == -90) { movedata.eyesshut = g_Vars.currentplayer->insightaimmode && !canmanualzoom && joyGetStickY(contpad2) < -30; @@ -1377,9 +1375,7 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i // Handle shutting eyes in multiplayer if (bmoveGetCrouchPos() == CROUCHPOS_SQUAT - && g_Vars.currentplayer->crouchoffset == -90 - && g_Vars.mplayerisrunning - && g_Vars.coopplayernum <= -1) { + && g_Vars.currentplayer->crouchoffset == -90) { movedata.eyesshut = g_Vars.currentplayer->insightaimmode && !canmanualzoom && joyGetButtons(contpad1, c1allowedbuttons & (0 | D_CBUTTONS)); diff --git a/src/game/bondwalk.c b/src/game/bondwalk.c index af7e12254..de5db4233 100644 --- a/src/game/bondwalk.c +++ b/src/game/bondwalk.c @@ -402,11 +402,7 @@ bool bwalkCalculateNewPositionWithPush(struct coord *delta, f32 rotateamount, bo canpush = true; } } else if (chr->chrflags & CHRCFLAG_PUSHABLE) { - if (g_Vars.antiplayernum < 0 - || g_Vars.currentplayer != g_Vars.anti - || (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE) == 0) { - canpush = true; - } + canpush = true; } if (canpush) { @@ -733,19 +729,6 @@ void bwalkUpdateVertical(void) playerGetBbox(g_Vars.currentplayer->prop, &radius, &ymax, &ymin); -#if VERSION >= VERSION_NTSC_1_0 - // Maybe reset counter-op's radius - not sure why - // Maybe it gets set to 0 when they die? - if (g_Vars.antiplayernum >= 0 - && g_Vars.currentplayer == g_Vars.anti - && g_Vars.currentplayer->bond2.radius != 30 - && cdTestVolume(&g_Vars.currentplayer->prop->pos, 30, g_Vars.currentplayer->prop->rooms, CDTYPE_ALL, CHECKVERTICAL_YES, ymax - g_Vars.currentplayer->prop->pos.y, ymin - g_Vars.currentplayer->prop->pos.y)) { - g_Vars.currentplayer->prop->chr->radius = 30; - g_Vars.currentplayer->bond2.radius = 30; - radius = 30; - } -#endif - // Determine if player is on a ladder // If this comes up false, a second check is done... maybe checking if the // player is touching a ladder from a room which shares the same coordinate diff --git a/src/game/chr.c b/src/game/chr.c index d06a0bb00..1ac25ab1c 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -1352,16 +1352,6 @@ void chrRemove(struct prop *prop, bool delete) chrClearReferences(prop - g_Vars.props); projectilesUnrefOwner(prop); - if (g_Vars.normmplayerisrunning == false && g_MissionConfig.iscoop) { - s32 i; - - for (i = 0; i < g_Vars.numaibuddies && i < 4; i++) { - if (g_Vars.aibuddies[i] == prop) { - g_Vars.aibuddies[i] = NULL; - } - } - } - chr->chrnum = -1; rebuildTeams(); @@ -2446,26 +2436,8 @@ s32 chrTick(struct prop *prop) } else { onscreen = func0f08e8ac(prop, &prop->pos, model0001af80(model), true); - if (g_Vars.mplayerisrunning) { - if (fulltick) { - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - if (onscreen) { - chr0f0220ec(chr, lvupdate240, 1); - } else if (model->anim->animnum2 != 0) { - chr0f0220ec(chr, lvupdate240, 0); - } - } else { - chr0f0220ec(chr, lvupdate240, 1); - } - } - } else if (onscreen) { - if (chr->act_stand.playwalkanim == true) { - chr0f0220ec(chr, lvupdate240, 0); - } else { - chr0f0220ec(chr, lvupdate240, 1); - } - } else if (model->anim->animnum2 != 0) { - chr0f0220ec(chr, lvupdate240, 0); + if (fulltick) { + chr0f0220ec(chr, lvupdate240, 1); } } } else if (chr->actiontype == ACT_DEAD) { @@ -2543,10 +2515,6 @@ s32 chrTick(struct prop *prop) prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK; chr->chrflags |= CHRCFLAG_EVERONSCREEN; - if (g_Vars.antiplayernum >= 0 && g_Vars.currentplayer == g_Vars.bond) { - chr->hidden |= CHRHFLAG_00800000; - } - g_ModelJointPositionedFunc = &chrHandleJointPositioned; g_CurModelChr = chr; @@ -2730,10 +2698,6 @@ s32 chrTick(struct prop *prop) // Offscreen prop->flags &= ~PROPFLAG_ONTHISSCREENTHISTICK; - if (g_Vars.antiplayernum >= 0 && g_Vars.currentplayer == g_Vars.bond) { - chr->hidden &= ~CHRHFLAG_00800000; - } - child = prop->child; while (child) { @@ -5014,22 +4978,6 @@ void chrHit(struct shotdata *shotdata, struct hit *hit) g_Vars.currentplayer->prop, hit->hitpart, hit->prop, hit->node, hit->model, hit->hitthing.unk28 / 2, sp90); - if (g_Vars.antiplayernum >= 0 - && g_Vars.currentplayer == g_Vars.anti - && (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE)) { - return; - } - - if (g_Vars.coopplayernum >= 0 - && g_Vars.coopfriendlyfire == 0 - && prop->type == PROPTYPE_PLAYER) { - return; - } - - if (g_MissionConfig.iscoop && g_Vars.coopfriendlyfire == 0 && chr->team == TEAM_ALLY) { - return; - } - if (shield <= 0) { if (hit->prop->type == PROPTYPE_WEAPON) { // Shot a chr's weapon @@ -5383,8 +5331,7 @@ bool chrCalculateAutoAim(struct prop *prop, struct coord *arg1, f32 *arg2, f32 * && chr->actiontype != ACT_DEAD && (chr->chrflags & CHRCFLAG_NOAUTOAIM) == 0 && ((chr->hidden & CHRHFLAG_CLOAKED) == 0) - && !(prop->type == PROPTYPE_PLAYER && g_Vars.players[playermgrGetPlayerNumByProp(prop)]->isdead) - && !(g_Vars.coopplayernum >= 0 && (prop == g_Vars.bond->prop || prop == g_Vars.coop->prop))) { + && !(prop->type == PROPTYPE_PLAYER && g_Vars.players[playermgrGetPlayerNumByProp(prop)]->isdead)) { struct model *model = chr->model; Mtxf *mtx1; Mtxf *mtx2; diff --git a/src/game/chraction.c b/src/game/chraction.c index 9a9ee6dd7..a4a569845 100644 --- a/src/game/chraction.c +++ b/src/game/chraction.c @@ -4144,46 +4144,6 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse return; } - // Don't damage if attacker was anti and chr is non-interactable by anti - if (g_Vars.antiplayernum >= 0 - && aprop - && aprop == g_Vars.anti->prop - && (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE)) { - return; - } - - // Don't damage if coop and friendly fire is off (human buddy) - if (g_Vars.coopplayernum >= 0 - && g_Vars.coopfriendlyfire == false - && aprop - && aprop != vprop - && aprop->type == PROPTYPE_PLAYER - && vprop->type == PROPTYPE_PLAYER) { - return; - } - - // Don't damage if coop and friendly fire is off (AI buddy) - if (g_MissionConfig.iscoop - && g_Vars.coopfriendlyfire == false - && aprop - && aprop != vprop - && (aprop->type == PROPTYPE_PLAYER || aprop->type == PROPTYPE_CHR) - && chr->team == TEAM_ALLY - && aprop->chr->team == TEAM_ALLY) { - return; - } - - // Don't allow coop AI to kill or destroy anything - // which anti wouldn't be able to - if (g_MissionConfig.iscoop - && aprop - && aprop != vprop - && aprop->type == PROPTYPE_CHR - && aprop->chr->team == TEAM_ALLY - && (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE)) { - return; - } - if (gset == NULL) { gset = &gset2; } @@ -4218,85 +4178,11 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse damage = 0; } - // Apply damage scaling based on difficulty settings - if (g_Vars.mplayerisrunning == false) { - // Solo - if (explosion) { - if (vprop->type == PROPTYPE_PLAYER) { - damage *= g_ExplosionDamageTxScale; - } - } else if (aprop && aprop->type == PROPTYPE_PLAYER) { - // Player is attacking - damage *= g_PlayerDamageTxScale; - headshotdamagescale = 25; - } else if (aprop && aprop->type == PROPTYPE_CHR && vprop->type == PROPTYPE_PLAYER) { - // Chr is attacking player - damage *= g_PlayerDamageRxScale * pdmodeGetEnemyDamage(); - } - - if (vprop->type != PROPTYPE_PLAYER) { - damage /= pdmodeGetEnemyHealth(); - } - - if (vprop->type == PROPTYPE_PLAYER) { - healthscale = g_Vars.players[playermgrGetPlayerNumByProp(vprop)]->healthscale; - armourscale = g_Vars.players[playermgrGetPlayerNumByProp(vprop)]->armourscale; - } - } else if (g_Vars.coopplayernum >= 0) { - // Co-op - if (explosion) { - if (vprop->type == PROPTYPE_PLAYER) { - damage *= g_ExplosionDamageTxScale; - } - } else if (aprop && aprop->type == PROPTYPE_PLAYER && vprop->type != PROPTYPE_PLAYER) { - damage *= g_PlayerDamageTxScale; - headshotdamagescale = 25; - } else if (aprop && aprop->type == PROPTYPE_CHR && vprop->type == PROPTYPE_PLAYER) { - damage *= g_PlayerDamageRxScale * pdmodeGetEnemyDamage(); - } - - if (vprop->type != PROPTYPE_PLAYER) { - damage /= pdmodeGetEnemyHealth(); - } - - if (vprop->type == PROPTYPE_PLAYER) { - healthscale = g_Vars.players[playermgrGetPlayerNumByProp(vprop)]->healthscale; - armourscale = g_Vars.players[playermgrGetPlayerNumByProp(vprop)]->armourscale; - } - } else if (g_Vars.antiplayernum >= 0) { - // Anti - if (explosion) { - if (vprop == g_Vars.bond->prop) { - damage *= g_ExplosionDamageTxScale; - } - } else if (aprop && aprop == g_Vars.bond->prop) { - damage *= g_PlayerDamageTxScale; - headshotdamagescale = 25; - } else if (aprop && aprop != g_Vars.bond->prop && vprop == g_Vars.bond->prop) { - damage *= g_PlayerDamageRxScale * pdmodeGetEnemyDamage(); - } - - if (vprop != g_Vars.bond->prop) { - damage /= pdmodeGetEnemyHealth(); - } - - if (vprop == g_Vars.bond->prop) { - healthscale = g_Vars.players[playermgrGetPlayerNumByProp(vprop)]->healthscale; - armourscale = g_Vars.players[playermgrGetPlayerNumByProp(vprop)]->armourscale; - } - - // Anti shooting other enemies is lethal - if (aprop && aprop == g_Vars.anti->prop && vprop != g_Vars.bond->prop) { - damage *= 100; - } - } else { - // Normal multiplayer - if (vprop->type == PROPTYPE_PLAYER) { - s32 prevplayernum = g_Vars.currentplayernum; - setCurrentPlayerNum(playermgrGetPlayerNumByProp(vprop)); - damage *= g_Vars.currentplayerstats->damagescale; - setCurrentPlayerNum(prevplayernum); - } + if (vprop->type == PROPTYPE_PLAYER) { + s32 prevplayernum = g_Vars.currentplayernum; + setCurrentPlayerNum(playermgrGetPlayerNumByProp(vprop)); + damage *= g_Vars.currentplayerstats->damagescale; + setCurrentPlayerNum(prevplayernum); } // Apply rumble @@ -8032,10 +7918,6 @@ void chrAlertOthersOfInjury(struct chrdata *chr, bool dying) s32 numinrange = 0; s32 numchrs = chrsGetNumSlots(); - if (g_Vars.antiplayernum >= 0 && chr->prop == g_Vars.anti->prop) { - return; - } - if (chr->actiontype == ACT_ARGH) { index = chr->act_argh.notifychrindex; } else if (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DRUGGEDDROP) { @@ -10123,12 +10005,7 @@ void chrTickShoot(struct chrdata *chr, s32 handnum) sparksCreate(hitrooms[0], hitprop, &hitpos, NULL, NULL, SPARKTYPE_DEFAULT); } - if (g_MissionConfig.iscoop && chr->team == TEAM_ALLY - && (hitobj->flags2 & OBJFLAG2_IMMUNETOANTI)) { - // Co-op can't damage mission critical objects - } else { - objTakeGunfire(hitobj, gsetGetDamage(&gset), &hitpos, gset.weaponnum, playernum); - } + objTakeGunfire(hitobj, gsetGetDamage(&gset), &hitpos, gset.weaponnum, playernum); } } else if (hitsomething) { // Hit the background @@ -13149,7 +13026,6 @@ void chraTickBg(void) if (targetprop && (targetprop->type == PROPTYPE_CHR || targetprop->type == PROPTYPE_PLAYER)) { if ((targetprop->type == PROPTYPE_PLAYER - && !(g_Vars.antiplayernum >= 0 && g_Vars.anti && g_Vars.anti->prop == targetprop) && chrCompareTeams(chr, targetprop->chr, COMPARE_ENEMIES))) { s32 time60; s32 lastsee; @@ -13758,39 +13634,6 @@ s32 chrResolvePadId(struct chrdata *chr, s32 pad_id) return pad_id; } -/** - * For all chrs, clear their target and p1p2 values if set to the given player. - * - * This function is called when the given player has died. It causes all guards - * to switch their focus to the remaining coop player. - */ -void chrsClearRefsToPlayer(s32 playernum) -{ - s32 otherplayernum; - s32 playerpropnum; - s32 i; - - if (g_Vars.coopplayernum >= 0) { - if (playernum == g_Vars.bondplayernum) { - otherplayernum = g_Vars.coopplayernum; - playerpropnum = g_Vars.bond->prop - g_Vars.props; - } else { - otherplayernum = g_Vars.bondplayernum; - playerpropnum = g_Vars.coop->prop - g_Vars.props; - } - - for (i = 0; i < chrsGetNumSlots(); i++) { - if (g_ChrSlots[i].p1p2 == playernum) { - g_ChrSlots[i].p1p2 = otherplayernum; - } - - if (g_ChrSlots[i].target == playerpropnum) { - g_ChrSlots[i].target = -1; - } - } - } -} - s32 chrResolveId(struct chrdata *ref, s32 id) { if (ref) { @@ -13815,33 +13658,15 @@ s32 chrResolveId(struct chrdata *ref, s32 id) id = g_Vars.bond->prop->chr->chrnum; } break; - case CHR_COOP: - if (g_Vars.coop && g_Vars.coop->prop && g_Vars.coop->prop->chr) { - id = g_Vars.coop->prop->chr->chrnum; - } - break; - case CHR_ANTI: - if (g_Vars.anti && g_Vars.anti->prop && g_Vars.anti->prop->chr) { - id = g_Vars.anti->prop->chr->chrnum; - } - break; case CHR_P1P2: { - u32 index = g_Vars.coopplayernum >= 0 ? ref->p1p2 : g_Vars.bondplayernum; + u32 index = g_Vars.bondplayernum; struct player *player = g_Vars.players[index]; if (player && player->prop && player->prop->chr) { id = player->prop->chr->chrnum; } } break; - case CHR_P1P2_OPPOSITE: - if (g_Vars.coopplayernum >= 0) { - struct player *player = g_Vars.players[1 - ref->p1p2]; - if (player && player->prop && player->prop->chr) { - id = player->prop->chr->chrnum; - } - } - break; case CHR_TARGET: { struct prop *target = chrGetTargetProp(ref); @@ -13858,16 +13683,6 @@ s32 chrResolveId(struct chrdata *ref, s32 id) id = g_Vars.bond->prop->chr->chrnum; } break; - case CHR_COOP: - if (g_Vars.coop && g_Vars.coop->prop && g_Vars.coop->prop->chr) { - id = g_Vars.coop->prop->chr->chrnum; - } - break; - case CHR_ANTI: - if (g_Vars.anti && g_Vars.anti->prop && g_Vars.anti->prop->chr) { - id = g_Vars.anti->prop->chr->chrnum; - } - break; case CHR_P1P2: { struct player *player = g_Vars.players[g_Vars.bondplayernum]; @@ -13876,14 +13691,6 @@ s32 chrResolveId(struct chrdata *ref, s32 id) } } break; - case CHR_P1P2_OPPOSITE: - if (g_Vars.coopplayernum >= 0) { - struct player *player = g_Vars.players[g_Vars.coopplayernum]; - if (player && player->prop && player->prop->chr) { - id = player->prop->chr->chrnum; - } - } - break; } } diff --git a/src/game/explosions.c b/src/game/explosions.c index 29b550d05..9534423e6 100644 --- a/src/game/explosions.c +++ b/src/game/explosions.c @@ -840,11 +840,7 @@ void explosionInflictDamage(struct prop *expprop) minfrac = (minfrac * 0.7f + 0.3f) * type->damage; - if (g_Vars.antiplayernum >= 0 - && g_Vars.antiplayernum == exp->owner - && (obj->flags2 & OBJFLAG2_IMMUNETOANTI)) { - // anti cannot damage this obj - } else if (isfirstframe) { + if (isfirstframe) { // Unblock path if this object is a path blocker objUpdateLinkedScenery(obj, expprop); @@ -981,18 +977,12 @@ void explosionInflictDamage(struct prop *expprop) minfrac *= 0.05f * g_Vars.lvupdate60freal; } - if (g_Vars.normmplayerisrunning) { + { struct chrdata *ownerchr = mpGetChrFromPlayerIndex(exp->owner); if (ownerchr) { ownerprop = ownerchr->prop; } - } else if (exp->owner == g_Vars.bondplayernum) { - ownerprop = g_Vars.bond->prop; - } else if (g_Vars.coopplayernum >= 0 && exp->owner == g_Vars.coopplayernum) { - ownerprop = g_Vars.coop->prop; - } else if (g_Vars.antiplayernum >= 0 && exp->owner == g_Vars.antiplayernum) { - ownerprop = g_Vars.anti->prop; } chrDamageByExplosion(chr, minfrac, &spa0, ownerprop, &expprop->pos); @@ -1204,15 +1194,7 @@ u32 explosionTick(struct prop *prop) scorchsize *= 0.8f + 0.2f * RANDOMFRAC(); - if (g_Vars.normmplayerisrunning) { - chr = mpGetChrFromPlayerIndex(exp->owner); - } else if (g_Vars.antiplayernum >= 0 && exp->owner == g_Vars.antiplayernum) { - chr = g_Vars.anti->prop->chr; - } else if (g_Vars.coopplayernum >= 0 && exp->owner == g_Vars.coopplayernum) { - chr = g_Vars.coop->prop->chr; - } else { - chr = g_Vars.bond->prop->chr; - } + chr = mpGetChrFromPlayerIndex(exp->owner); if (g_Rooms[exp->room].gfxdata) { if (g_Rooms[exp->room].gfxdata->xlublocks && bgTestHitInRoom(&prop->pos, &exp->unk3d0, exp->room, &hitthing)) { diff --git a/src/game/gamefile.c b/src/game/gamefile.c index e8a0ec437..750270947 100644 --- a/src/game/gamefile.c +++ b/src/game/gamefile.c @@ -50,8 +50,8 @@ void gamefilePrintFlags(void) void gamefileApplyOptions(struct gamefile *file) { - s32 player1 = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) ? 0 : 4; - s32 player2 = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) ? 1 : 5; + s32 player1 = 4; + s32 player2 = 5; optionsSetForwardPitch(player1, pakHasBitflag(GAMEFILEFLAG_P1_FORWARDPITCH, file->flags)); optionsSetAutoAim(player1, pakHasBitflag(GAMEFILEFLAG_P1_AUTOAIM, file->flags)); @@ -139,8 +139,8 @@ void gamefileApplyOptions(struct gamefile *file) void gamefileLoadDefaults(struct gamefile *file) { - s32 player1 = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) ? 0 : 4; - s32 player2 = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) ? 1 : 5; + s32 player1 = 4; + s32 player2 = 5; s32 i; s32 j; @@ -274,8 +274,8 @@ s32 gamefileLoad(s32 device) s32 ret; u32 stack; - p1index = g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0 ? 0 : 4; - p2index = g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0 ? 1 : 5; + p1index = 4; + p2index = 5; if (device >= 0) { savebufferClear(&buffer); @@ -365,8 +365,8 @@ s32 gamefileSave(s32 device, s32 fileid, u16 deviceserial) s32 p2index; struct savebuffer buffer; - p1index = g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0 ? 0 : 4; - p2index = g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0 ? 1 : 5; + p1index = 4; + p2index = 5; var80075bd0[0] = 1; diff --git a/src/game/gfxmemory.c b/src/game/gfxmemory.c index 301920841..95ebd143b 100644 --- a/src/game/gfxmemory.c +++ b/src/game/gfxmemory.c @@ -76,23 +76,6 @@ void gfxReset(void) gfx = strtol(argFindByPrefix(1, "-mgfx"), NULL, 0) * 1024; - if (argFindByPrefix(1, "-mgfxtra")) { - // ******** Extra specified but are we in the correct game mode I wonder???\n - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() == 2) { - // ******** Extra Display List Memeory Required\n - // ******** Shall steal from video buffer\n - // ******** If you try and run hi-res then\n - // ******** you're gonna shafted up the arse\n - // ******** so don't blame me\n - gfxtra = strtol(argFindByPrefix(1, "-mgfxtra"), NULL, 0) * 1024; - } else { - // ******** No we're not so there\n - } - } - - // ******** Original Amount required = %dK ber buffer\n - // ******** Extra Amount required = %dK ber buffer\n - // ******** Total of %dK (Double Buffered)\n g_GfxSizesByPlayerCount[PLAYERCOUNT() - 1] = gfx + gfxtra; } diff --git a/src/game/hudmsg.c b/src/game/hudmsg.c index a5ac755d5..5fce9fc90 100644 --- a/src/game/hudmsg.c +++ b/src/game/hudmsg.c @@ -85,10 +85,7 @@ u8 hudmsgsAreActive(void) s32 hudmsgIsZoomRangeVisible(void) { return optionsGetShowZoomRange(g_Vars.currentplayerstats->mpindex) - && (PLAYERCOUNT() == 1 - || !g_Vars.mplayerisrunning - || g_Vars.coopplayernum >= 0 - || g_Vars.antiplayernum >= 0) + && PLAYERCOUNT() == 1 && currentPlayerGetSight() == SIGHT_ZOOM && g_Vars.currentplayer->cameramode != CAMERAMODE_THIRDPERSON; } @@ -1493,13 +1490,6 @@ Gfx *hudmsgsRender(Gfx *gdl) gdl = text0f153628(gdl); - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && g_InCutscene - && g_MainIsEndscreen == 0 - && g_Vars.currentplayernum == 0) { - spdc = false; - } - for (i = 0; i < g_NumHudMessages; i++) { msg = &g_HudMessages[i]; diff --git a/src/game/lv.c b/src/game/lv.c index 5ba7c1397..31cdae910 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -1114,17 +1114,10 @@ Gfx *lvRender(Gfx *gdl) s32 i; s32 playercount; Gfx *savedgdl; -#if VERSION >= VERSION_NTSC_1_0 - bool forcesingleplayer = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && playerHasSharedViewport(); -#else - bool forcesingleplayer = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && ((g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE); -#endif struct player *player; struct chrdata *chr; - playercount = forcesingleplayer ? 1 : PLAYERCOUNT(); + playercount = PLAYERCOUNT(); gSPClipRatio(gdl++, FRUSTRATIO_2); @@ -1134,11 +1127,7 @@ Gfx *lvRender(Gfx *gdl) savedgdl = gdl; - if (forcesingleplayer) { - setCurrentPlayerNum(0); - g_Vars.currentplayerindex = 0; - islastplayer = true; - } else { + { s32 nextplayernum = i + 1; setCurrentPlayerNum(playermgrGetPlayerAtOrder(i)); islastplayer = playercount == nextplayernum; @@ -1225,10 +1214,7 @@ Gfx *lvRender(Gfx *gdl) handsTickAttack(); // Calculate lookingatprop - if (PLAYERCOUNT() == 1 - || g_Vars.coopplayernum >= 0 - || g_Vars.antiplayernum >= 0 - || (weaponHasFlag(bgunGetWeaponNum(HAND_RIGHT), WEAPONFLAG_AIMTRACK) && bmoveIsInSightAimMode())) { + if (bmoveIsInSightAimMode() && (PLAYERCOUNT() == 1 || weaponHasFlag(bgunGetWeaponNum(HAND_RIGHT), WEAPONFLAG_AIMTRACK))) { g_Vars.currentplayer->lookingatprop.prop = func0f061d54(HAND_RIGHT, 0, 0); if (g_Vars.currentplayer->lookingatprop.prop) { @@ -1530,16 +1516,6 @@ Gfx *lvRender(Gfx *gdl) playerStartNewLife(); } } - - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) -#if VERSION >= VERSION_NTSC_1_0 - && playerHasSharedViewport() -#else - && ((g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE) -#endif - && g_Vars.currentplayernum != 0) { - gdl = savedgdl; - } } // end of player loop } // end of stage if-statements @@ -1593,172 +1569,29 @@ u32 var800840bc = 0; void lvUpdateSoloHandicaps(void) { - if (g_Vars.antiplayernum >= 0) { - if (g_Difficulty == DIFF_A) { - g_CctvWaitScale = 2; - g_CctvDamageRxScale = 2; - g_AutogunAccuracyScale = 0.5f; - g_AutogunDamageTxScale = 0.5f; - g_AutogunDamageRxScale = 2; - g_EnemyAccuracyScale = 0.5f; - g_PlayerDamageRxScale = 0.35f; - g_PlayerDamageTxScale = 4; - g_ExplosionDamageTxScale = 0.25f; - g_AutoAimScale = 1.5f; - g_AmmoQuantityScale = 3; - g_AttackWalkDurationScale = 0.2f; - } else if (g_Difficulty == DIFF_SA) { - g_CctvWaitScale = 2; - g_CctvDamageRxScale = 1.5f; - g_AutogunAccuracyScale = 0.5f; - g_AutogunDamageTxScale = 0.5f; - g_AutogunDamageRxScale = 1.5f; - g_EnemyAccuracyScale = 0.6f; - g_PlayerDamageRxScale = 0.5f; - g_PlayerDamageTxScale = 3; - g_ExplosionDamageTxScale = 0.25f; - g_AutoAimScale = 1.1f; - g_AmmoQuantityScale = 2.5f; - g_AttackWalkDurationScale = 0.5f; - } else { - g_CctvWaitScale = 2; - g_CctvDamageRxScale = 1; - g_AutogunAccuracyScale = 0.5f; - g_AutogunDamageTxScale = 0.5f; - g_AutogunDamageRxScale = 1; - g_EnemyAccuracyScale = 0.7f; - g_PlayerDamageRxScale = 0.65f; - g_PlayerDamageTxScale = 2; - g_ExplosionDamageTxScale = 0.25f; - g_AutoAimScale = 0.75f; - g_AmmoQuantityScale = 2; - g_AttackWalkDurationScale = 1; - } - } else if (g_Vars.coopplayernum >= 0) { - if (g_Difficulty == DIFF_A) { - g_CctvWaitScale = 2; - g_CctvDamageRxScale = 2; - g_AutogunAccuracyScale = 0.5f; - g_AutogunDamageTxScale = 0.5f; - g_AutogunDamageRxScale = 2; - g_EnemyAccuracyScale = 0.6f; - g_PlayerDamageRxScale = 0.5f; - g_PlayerDamageTxScale = 2; - g_ExplosionDamageTxScale = 0.25f; - g_AutoAimScale = 1.5f; - g_AmmoQuantityScale = 2; - g_AttackWalkDurationScale = 0.2f; - } else if (g_Difficulty == DIFF_SA) { - g_CctvWaitScale = 1; - g_CctvDamageRxScale = 1; - g_AutogunAccuracyScale = 0.75f; - g_AutogunDamageTxScale = 1; - g_AutogunDamageRxScale = 1; - g_EnemyAccuracyScale = 0.75f; - g_PlayerDamageRxScale = 1; - g_PlayerDamageTxScale = 1; - g_ExplosionDamageTxScale = 1; -#if VERSION >= VERSION_JPN_FINAL - g_AutoAimScale = 0.75f; -#else - g_AutoAimScale = g_Jpn ? 1.1f : 0.75f; -#endif - g_AmmoQuantityScale = 1.5f; - g_AttackWalkDurationScale = 0.5f; - } else { - g_CctvWaitScale = 1; - g_CctvDamageRxScale = 1; - g_AutogunAccuracyScale = 1; - g_AutogunDamageTxScale = 1.5f; - g_AutogunDamageRxScale = 1; - g_EnemyAccuracyScale = 1.5f; - g_PlayerDamageRxScale = 1.5f; - g_PlayerDamageTxScale = 1; - g_ExplosionDamageTxScale = 1.5f; -#if VERSION >= VERSION_JPN_FINAL - g_AutoAimScale = 0.2f; -#else - g_AutoAimScale = g_Jpn ? 0.75f : 0.2f; -#endif - g_AmmoQuantityScale = 1; - g_AttackWalkDurationScale = 1; - } - } else { - if (g_Difficulty == DIFF_A) { - f32 totalhealth; - f32 frac = 1; + f32 totalhealth; + f32 frac = 1; - if (g_Vars.coopplayernum < 0 && g_Vars.antiplayernum < 0) { - totalhealth = playerGetHealthFrac() + playerGetShieldFrac(); + totalhealth = playerGetHealthFrac() + playerGetShieldFrac(); - if (totalhealth <= 0.125f) { - frac = 0.5f; - } else if (totalhealth <= 0.6f) { - frac = (totalhealth - 0.125f) * 0.5f / 0.47500002384186f + 0.5f; - } - } - - g_CctvWaitScale = 2; - g_CctvDamageRxScale = 2; - g_AutogunAccuracyScale = 0.5f * frac; - g_AutogunDamageTxScale = 0.5f * frac; - g_AutogunDamageRxScale = 2; - g_EnemyAccuracyScale = 0.6f; - g_PlayerDamageRxScale = 0.5f * frac; - g_PlayerDamageTxScale = 2; - g_ExplosionDamageTxScale = 0.25f * frac; - g_AutoAimScale = 1.5f; - g_AmmoQuantityScale = 2; - g_AttackWalkDurationScale = 0.2f; - } else if (g_Difficulty == DIFF_SA) { - g_CctvWaitScale = 1; - g_CctvDamageRxScale = 1; - g_AutogunAccuracyScale = 0.75f; - g_AutogunDamageTxScale = 0.75f; - g_AutogunDamageRxScale = 1; - g_EnemyAccuracyScale = 0.8f; - g_PlayerDamageRxScale = 0.6f; - g_PlayerDamageTxScale = 1; - g_ExplosionDamageTxScale = 0.75f; -#if VERSION >= VERSION_JPN_FINAL - g_AutoAimScale = 0.75f; -#else - g_AutoAimScale = g_Jpn ? 1.1f : 0.75f; -#endif - g_AmmoQuantityScale = 1.5f; - g_AttackWalkDurationScale = 0.5f; - } else if (g_Difficulty == DIFF_PA) { - g_CctvWaitScale = 1; - g_CctvDamageRxScale = 1; - g_AutogunAccuracyScale = 1; - g_AutogunDamageTxScale = 1; - g_AutogunDamageRxScale = 1; - g_EnemyAccuracyScale = 1.175f; - g_PlayerDamageRxScale = 1; - g_PlayerDamageTxScale = 1; - g_ExplosionDamageTxScale = 1; -#if VERSION >= VERSION_JPN_FINAL - g_AutoAimScale = 0.2f; -#else - g_AutoAimScale = g_Jpn ? 0.75f : 0.2f; -#endif - g_AmmoQuantityScale = 1; - g_AttackWalkDurationScale = 1; - } else if (g_Difficulty == DIFF_PD) { - g_CctvWaitScale = 1; - g_CctvDamageRxScale = 1; - g_AutogunAccuracyScale = 1; - g_AutogunDamageTxScale = 1; - g_AutogunDamageRxScale = 1; - g_EnemyAccuracyScale = 1.1f; - g_PlayerDamageRxScale = 1; - g_PlayerDamageTxScale = 1; - g_ExplosionDamageTxScale = 1; - g_AutoAimScale = 1; - g_AmmoQuantityScale = 1; - g_AttackWalkDurationScale = 1; - } + if (totalhealth <= 0.125f) { + frac = 0.5f; + } else if (totalhealth <= 0.6f) { + frac = (totalhealth - 0.125f) * 0.5f / 0.47500002384186f + 0.5f; } + + g_CctvWaitScale = 2; + g_CctvDamageRxScale = 2; + g_AutogunAccuracyScale = 0.5f * frac; + g_AutogunDamageTxScale = 0.5f * frac; + g_AutogunDamageRxScale = 2; + g_EnemyAccuracyScale = 0.6f; + g_PlayerDamageRxScale = 0.5f * frac; + g_PlayerDamageTxScale = 2; + g_ExplosionDamageTxScale = 0.25f * frac; + g_AutoAimScale = 1.5f; + g_AmmoQuantityScale = 2; + g_AttackWalkDurationScale = 0.2f; } #if PIRACYCHECKS diff --git a/src/game/mainmenu.c b/src/game/mainmenu.c index 0fbc7a3c6..0848ebb41 100644 --- a/src/game/mainmenu.c +++ b/src/game/mainmenu.c @@ -53,10 +53,6 @@ s32 menuhandlerControlStyleImpl(s32 operation, struct menuitem *item, union hand L_OPTIONS_238, // "Double" }; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpindex = g_Vars.currentplayerstats->mpindex; - } - switch (operation) { case MENUOP_GETOPTIONCOUNT: data->list.value = 8; @@ -103,11 +99,7 @@ s32 menuhandlerReversePitch(s32 operation, struct menuitem *item, union handlerd { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -122,8 +114,7 @@ s32 menuhandlerReversePitch(s32 operation, struct menuitem *item, union handlerd s32 menuhandlerAimControl(s32 operation, struct menuitem *item, union handlerdata *data) { - u32 playernum = (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - ? g_Vars.currentplayerstats->mpindex : item->param3; + u32 playernum = item->param3; #if VERSION >= VERSION_PAL_FINAL s32 index = 0; @@ -315,11 +306,7 @@ s32 menuhandlerLookAhead(s32 operation, struct menuitem *item, union handlerdata { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -336,11 +323,7 @@ s32 menuhandlerHeadRoll(s32 operation, struct menuitem *item, union handlerdata { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -404,11 +387,6 @@ s32 menuhandlerHiRes(s32 operation, struct menuitem *item, union handlerdata *da if (IS4MB()) { return true; } - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - if (PLAYERCOUNT() >= 2) { - return true; - } - } break; case MENUOP_GET: return g_HiResEnabled == true; @@ -424,11 +402,7 @@ s32 menuhandlerAmmoOnScreen(s32 operation, struct menuitem *item, union handlerd { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -445,11 +419,7 @@ s32 menuhandlerShowGunFunction(s32 operation, struct menuitem *item, union handl { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_CHECKDISABLED: @@ -471,11 +441,7 @@ s32 menuhandlerShowMissionTime(s32 operation, struct menuitem *item, union handl { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -492,11 +458,7 @@ s32 menuhandlerAlwaysShowTarget(s32 operation, struct menuitem *item, union hand { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_CHECKDISABLED: @@ -518,11 +480,7 @@ s32 menuhandlerShowZoomRange(s32 operation, struct menuitem *item, union handler { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_CHECKDISABLED: @@ -544,11 +502,7 @@ s32 menuhandlerPaintball(s32 operation, struct menuitem *item, union handlerdata { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -565,11 +519,7 @@ s32 menuhandlerSightOnScreen(s32 operation, struct menuitem *item, union handler { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -586,11 +536,7 @@ s32 menuhandlerAutoAim(s32 operation, struct menuitem *item, union handlerdata * { u32 mpchrnum; - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mpchrnum = g_Vars.currentplayerstats->mpindex; - } else { - mpchrnum = item->param3; - } + mpchrnum = item->param3; switch (operation) { case MENUOP_GET: @@ -662,7 +608,7 @@ s32 menudialog0010559c(s32 operation, struct menudialogdef *dialogdef, union han case MENUOP_OPEN: break; case MENUOP_CLOSE: - if ((g_Vars.modifiedfiles & MODFILE_GAME) && g_Vars.coopplayernum < 0 && g_Vars.antiplayernum < 0) { + if (g_Vars.modifiedfiles & MODFILE_GAME) { if (filemgrSaveOrLoad(&g_GameFileGuid, FILEOP_SAVE_GAME_001, 0) == 0) { data->dialog1.preventclose = true; } diff --git a/src/game/menu.c b/src/game/menu.c index 3e3e03824..660ab860e 100644 --- a/src/game/menu.c +++ b/src/game/menu.c @@ -4128,14 +4128,6 @@ Gfx *dialogRender(Gfx *gdl, struct menudialog *dialog, struct menu *menu, bool l bgx2 = dialog->x + dialog->width; bgy2 = dialog->y + dialog->height; -#if VERSION >= VERSION_NTSC_1_0 - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && menuGetRoot() == MENUROOT_MPENDSCREEN - && !var8009dfc0) { - return gdl; - } -#endif - colour1 = MIXCOLOUR(dialog, unk28); text0f156030(colour1); @@ -4162,13 +4154,6 @@ Gfx *dialogRender(Gfx *gdl, struct menudialog *dialog, struct menu *menu, bool l #endif sp170 = 1.0f - g_MenuData.unk010; - -#if VERSION >= VERSION_NTSC_1_0 - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && menuGetRoot() == MENUROOT_MPENDSCREEN) { - sp170 = 1.0f - dialog->statefrac; - } -#endif - sp170 = 1.0f - sp170 * sp170; dialogheight *= sp170; bgy2 = dialog->y + dialogheight; @@ -5950,19 +5935,9 @@ void menuReset(void) g_MenuData.unk01c.unk004 = NULL; - if (g_Vars.stagenum == STAGE_CITRAINING) { - g_MissionConfig.iscoop = false; - g_MissionConfig.isanti = false; - g_MissionConfig.pdmode = false; - } - if (!g_Vars.mplayerisrunning) { s32 max = 0; - if (g_Vars.stagenum == STAGE_CITRAINING) { - max = 4; - } - if (g_Vars.stagenum == STAGE_4MBMENU) { max = 4; } @@ -6282,20 +6257,6 @@ void dialogTick(struct menudialog *dialog, struct menuinputs *inputs, u32 tickfl dialog->redrawtimer = 0.0f; dialog->statefrac = 0.5f; } - } else if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && menuGetRoot() == MENUROOT_MPENDSCREEN) { - if (var8009dfc0) { -#if VERSION >= VERSION_PAL_BETA - dialog->statefrac += g_Vars.diffframe240freal / 60.0f; -#else - dialog->statefrac += g_Vars.diffframe240 / 60.0f; -#endif - - if (dialog->statefrac > 1.0f) { - dialog->state = MENUDIALOGSTATE_OPENING; - dialog->redrawtimer = 0.0f; - dialog->statefrac = 0.5f; - } - } } else { if (g_MenuData.nextbg == 255 || g_MenuData.bg != 0) { dialog->state = MENUDIALOGSTATE_OPENING; @@ -9042,12 +9003,6 @@ u32 func0f0fd118(u32 playernum) if (g_MpSetup.chrslots & (1 << playernum)) { result = playernum; } - } else { - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && PLAYERCOUNT() >= 2 - && playernum == 1) { - result = 1; - } } return result; diff --git a/src/game/menutick.c b/src/game/menutick.c index 6636742f2..b9b249b07 100644 --- a/src/game/menutick.c +++ b/src/game/menutick.c @@ -541,19 +541,7 @@ void menuTick(void) case MENUROOT_MPPAUSE: break; case MENUROOT_MPENDSCREEN: - if (g_Vars.normmplayerisrunning) { - var80087260 = 3; - } else if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - struct mpplayerconfig tmp; - - tmp = g_PlayerConfigsArray[4]; - g_PlayerConfigsArray[4] = g_PlayerConfigsArray[0]; - g_PlayerConfigsArray[0] = tmp; - - tmp = g_PlayerConfigsArray[5]; - g_PlayerConfigsArray[5] = g_PlayerConfigsArray[1]; - g_PlayerConfigsArray[1] = tmp; - } + var80087260 = 3; if (g_Vars.restartlevel) { mainChangeToStage(mainGetStageNum()); @@ -573,19 +561,6 @@ void menuTick(void) mainChangeToStage(STAGE_4MBMENU); } break; - case MENUROOT_COOPCONTINUE: - if (g_Vars.coopplayernum >= 0) { - mpSetPaused(MPPAUSEMODE_UNPAUSED); - g_Vars.mplayerisrunning = false; - g_Vars.normmplayerisrunning = false; - g_Vars.lvmpbotlevel = 0; - titleSetNextStage(STAGE_CITRAINING); - setNumPlayers(1); - titleSetNextMode(TITLEMODE_SKIP); - mainChangeToStage(STAGE_CITRAINING); - g_MissionConfig.iscoop = false; - } - break; } } } @@ -655,12 +630,6 @@ void menuTick(void) } g_Vars.players[i]->devicesinhibit = 0; - - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && PLAYERCOUNT() >= 2 - && g_Menus[mpindex].curdialog) { - g_Vars.players[i]->devicesinhibit = 0; - } } } diff --git a/src/game/mplayer/mplayer.c b/src/game/mplayer/mplayer.c index 144d72701..d3c039faa 100644 --- a/src/game/mplayer/mplayer.c +++ b/src/game/mplayer/mplayer.c @@ -179,12 +179,7 @@ void mpReset(void) g_MpNumChrs = 0; g_Vars.mplayerisrunning = true; - - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - g_Vars.normmplayerisrunning = false; - } else { - g_Vars.normmplayerisrunning = true; - } + g_Vars.normmplayerisrunning = true; g_Vars.perfectbuddynum = 0; @@ -192,59 +187,19 @@ void mpReset(void) g_Vars.lvmpbotlevel = true; } - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - struct mpplayerconfig tmp; + for (i = 0; i < 4; i++) { + if (g_MpSetup.chrslots & (1 << i)) { + g_Vars.playerstats[mpindex].mpindex = i; - tmp = g_PlayerConfigsArray[4]; - g_PlayerConfigsArray[4] = g_PlayerConfigsArray[0]; - g_PlayerConfigsArray[0] = tmp; + g_PlayerConfigsArray[i].contpad1 = i; + g_PlayerConfigsArray[i].contpad2 = 0; - tmp = g_PlayerConfigsArray[5]; - g_PlayerConfigsArray[5] = g_PlayerConfigsArray[1]; - g_PlayerConfigsArray[1] = tmp; - - // Player index 0 - g_Vars.playerstats[0].mpindex = 0; - - g_PlayerConfigsArray[0].contpad1 = 0; - g_PlayerConfigsArray[0].contpad2 = 2; - - if ((g_Vars.coopplayernum >= 0 && g_Vars.coopradaron) - || (g_Vars.antiplayernum >= 0 && g_Vars.antiradaron)) { - g_PlayerConfigsArray[0].base.displayoptions |= MPDISPLAYOPTION_RADAR; - } else { - g_PlayerConfigsArray[0].base.displayoptions &= ~MPDISPLAYOPTION_RADAR; - } - - // Player index 1 - g_Vars.playerstats[1].mpindexu32 = 1; - - g_PlayerConfigsArray[1].contpad1 = 1; - g_PlayerConfigsArray[1].contpad2 = 3; - - if ((g_Vars.coopplayernum >= 0 && g_Vars.coopradaron) - || (g_Vars.antiplayernum >= 0 && g_Vars.antiradaron)) { - g_PlayerConfigsArray[1].base.displayoptions |= MPDISPLAYOPTION_RADAR; - } else { - g_PlayerConfigsArray[1].base.displayoptions &= ~MPDISPLAYOPTION_RADAR; - } - - g_MpNumChrs = 2; - } else { - for (i = 0; i < 4; i++) { - if (g_MpSetup.chrslots & (1 << i)) { - g_Vars.playerstats[mpindex].mpindex = i; - - g_PlayerConfigsArray[i].contpad1 = i; - g_PlayerConfigsArray[i].contpad2 = 0; - - mpCalculatePlayerTitle(&g_PlayerConfigsArray[i]); + mpCalculatePlayerTitle(&g_PlayerConfigsArray[i]); - g_PlayerConfigsArray[i].newtitle = g_PlayerConfigsArray[i].title; - g_MpNumChrs++; - mpindex++; - } + g_PlayerConfigsArray[i].newtitle = g_PlayerConfigsArray[i].title; + g_MpNumChrs++; + mpindex++; } } @@ -1258,8 +1213,6 @@ Gfx *mpRenderModalText(Gfx *gdl) && g_Vars.currentplayer->isdead && g_Vars.currentplayer->redbloodfinished && g_Vars.currentplayer->deathanimfinished - && !(g_Vars.coopplayernum >= 0 && ((g_Vars.bond->isdead && g_Vars.coop->isdead) || !g_Vars.currentplayer->coopcanrestart || g_InCutscene)) - && !(g_Vars.antiplayernum >= 0 && ((g_Vars.currentplayer != g_Vars.anti || g_InCutscene))) && g_NumReasonsToEndMpMatch == 0) { // Render "Press START" text gdl = text0f153628(gdl); diff --git a/src/game/player.c b/src/game/player.c index 3469c7323..133bc2cb4 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -488,7 +488,7 @@ void playerStartNewLife(void) g_Vars.currentplayer->dostartnewlife = false; - if (g_Vars.coopplayernum < 0) { + { struct prop *prop = g_Vars.currentplayer->prop->child; while (prop) { @@ -545,36 +545,10 @@ void playerStartNewLife(void) playerSetCamPropertiesWithRoom(&pos, &g_Vars.currentplayer->bond2.unk28, &g_Vars.currentplayer->bond2.unk1c, rooms[0]); - if (g_Vars.coopplayernum >= 0) { - u32 stack; - bool ammotypesheld[33]; - s32 stack2[2]; + invClear(); - for (i = 0; i != ARRAYCOUNT(ammotypesheld); i++) { - ammotypesheld[i] = false; - } - - for (i = 1; i != ARRAYCOUNT(g_Weapons); i++) { - if (invHasSingleWeaponOrProp(i)) { - s32 ammotype = bgunGetAmmoTypeForWeapon(i, FUNC_PRIMARY); - - if (ammotype >= 0 && ammotype <= AMMOTYPE_ECM_MINE) { - ammotypesheld[ammotype] = true; - } - } - } - - for (i = 0; i != ARRAYCOUNT(ammotypesheld); i++) { - if (ammotypesheld[i] == false) { - g_Vars.currentplayer->ammoheldarr[i] = 0; - } - } - } else { - invClear(); - - for (i = 0; i < ARRAYCOUNT(g_Vars.currentplayer->ammoheldarr); i++) { - g_Vars.currentplayer->ammoheldarr[i] = 0; - } + for (i = 0; i < ARRAYCOUNT(g_Vars.currentplayer->ammoheldarr); i++) { + g_Vars.currentplayer->ammoheldarr[i] = 0; } invGiveSingleWeapon(WEAPON_UNARMED); @@ -587,63 +561,53 @@ void playerStartNewLife(void) if (cmd); if (cmd); - if (g_Vars.antiplayernum < 0 || g_Vars.currentplayer != g_Vars.anti) { - while (cmd[0] != INTROCMD_END) { - switch (cmd[0]) { - case INTROCMD_SPAWN: - cmd += 3; - break; - case INTROCMD_CASE: - case INTROCMD_CASERESPAWN: - cmd += 3; - break; - case INTROCMD_HILL: - cmd += 2; - break; - case INTROCMD_WEAPON: - if (cmd[3] == 0) { - if (cmd[2] >= 0) { - invGiveDoubleWeapon(cmd[1], cmd[2]); - } else { - invGiveSingleWeapon(cmd[1]); - } + while (cmd[0] != INTROCMD_END) { + switch (cmd[0]) { + case INTROCMD_SPAWN: + cmd += 3; + break; + case INTROCMD_CASE: + case INTROCMD_CASERESPAWN: + cmd += 3; + break; + case INTROCMD_HILL: + cmd += 2; + break; + case INTROCMD_WEAPON: + if (cmd[3] == 0) { + if (cmd[2] >= 0) { + invGiveDoubleWeapon(cmd[1], cmd[2]); + } else { + invGiveSingleWeapon(cmd[1]); } - cmd += 4; - break; - case INTROCMD_AMMO: - if (cmd[3] == 0) { - bgunSetAmmoQuantity(cmd[1], cmd[2]); - } - cmd += 4; - break; - case INTROCMD_3: - cmd += 8; - break; - case INTROCMD_4: - cmd += 2; - break; - case INTROCMD_OUTFIT: - cmd += 2; - break; - case INTROCMD_6: - cmd += 10; - break; - default: - cmd++; - break; } + cmd += 4; + break; + case INTROCMD_AMMO: + if (cmd[3] == 0) { + bgunSetAmmoQuantity(cmd[1], cmd[2]); + } + cmd += 4; + break; + case INTROCMD_3: + cmd += 8; + break; + case INTROCMD_4: + cmd += 2; + break; + case INTROCMD_OUTFIT: + cmd += 2; + break; + case INTROCMD_6: + cmd += 10; + break; + default: + cmd++; + break; } } } - if (g_Vars.coopplayernum >= 0 && g_Vars.currentplayer->stealhealth > 0) { - g_Vars.currentplayer->bondhealth = g_Vars.currentplayer->stealhealth; - g_Vars.currentplayer->oldhealth = 0; - g_Vars.currentplayer->oldarmour = 0; - g_Vars.currentplayer->apparenthealth = 0; - g_Vars.currentplayer->apparentarmour = 0; - } - bmoveUpdateRooms(g_Vars.currentplayer); playerSpawn(); @@ -802,123 +766,6 @@ void playerLoadDefaults(void) g_Vars.currentplayer->unk1c3c = 0; } -bool playerSpawnAnti(struct chrdata *hostchr, bool force) -{ - struct prop *hostprop; - union modelrwdata *chrrootrwdata; - struct chrdata *playerchr = g_Vars.currentplayer->prop->chr; - union modelrwdata *playerrootrwdata; - - hostprop = hostchr->prop; - - hostchr->chrflags |= CHRCFLAG_PERIMDISABLEDTMP; - playerchr->hidden |= CHRHFLAG_00100000; - playerchr->radius = hostchr->radius; - - if (chrMoveToPos(playerchr, &hostchr->prop->pos, hostchr->prop->rooms, chrGetInverseTheta(hostchr), false) || force) { - if (hostchr->weapons_held[0] && hostchr->weapons_held[1]) { - // Dual wielding - struct weaponobj *weapon1 = hostchr->weapons_held[0]->weapon; - struct weaponobj *weapon2 = hostchr->weapons_held[1]->weapon; - -#if VERSION >= VERSION_NTSC_1_0 - invGiveSingleWeapon(weapon1->weaponnum); - invGiveDoubleWeapon(weapon1->weaponnum, weapon1->weaponnum); - bgunEquipWeapon2(HAND_RIGHT, weapon1->weaponnum); - bgunEquipWeapon2(HAND_LEFT, weapon1->weaponnum); -#else - invGiveDoubleWeapon(weapon1->weaponnum, weapon2->weaponnum); - bgunEquipWeapon2(HAND_RIGHT, weapon1->weaponnum); - bgunEquipWeapon2(HAND_LEFT, weapon2->weaponnum); -#endif - } else if (hostchr->weapons_held[0]) { - // Right hand only - struct weaponobj *weapon = hostchr->weapons_held[0]->weapon; - - if (weapon->weaponnum == WEAPON_SUPERDRAGON) { - invGiveSingleWeapon(WEAPON_DRAGON); - bgunEquipWeapon2(HAND_RIGHT, WEAPON_DRAGON); - } else { - invGiveSingleWeapon(weapon->weaponnum); - bgunEquipWeapon2(HAND_RIGHT, weapon->weaponnum); - } - } else if (hostchr->weapons_held[1]) { - // Left hand only - struct weaponobj *weapon = hostchr->weapons_held[1]->weapon; - - if (weapon->weaponnum == WEAPON_SUPERDRAGON) { - invGiveSingleWeapon(WEAPON_DRAGON); - bgunEquipWeapon2(HAND_RIGHT, WEAPON_DRAGON); - } else { - invGiveSingleWeapon(weapon->weaponnum); - bgunEquipWeapon2(HAND_RIGHT, weapon->weaponnum); - } - } else { - // Unarmed - invGiveSingleWeapon(WEAPON_UNARMED); - bgunEquipWeapon2(HAND_RIGHT, WEAPON_UNARMED); - } - - g_Vars.currentplayer->invdowntime = TICKS(-40); - g_Vars.currentplayer->usedowntime = TICKS(-40); - - bgunGiveMaxAmmo(true); - - g_Vars.currentplayer->bondhealth = (chrGetMaxDamage(hostchr) - hostchr->damage) * 0.125f; - - if (g_Vars.currentplayer->bondhealth > 1) { - g_Vars.currentplayer->bondhealth = 1; - } - - chrSetShield(playerchr, chrGetShield(hostchr)); - - g_Vars.currentplayer->haschrbody = false; - g_Vars.currentplayer->model00d4 = NULL; - - chrRemove(g_Vars.currentplayer->prop, false); - - if (hostchr->bodynum == BODY_SKEDAR) { - g_Vars.antiheadnum = HEAD_MRBLONDE; - g_Vars.antibodynum = BODY_MRBLONDE; - } else { - g_Vars.antiheadnum = hostchr->headnum; - g_Vars.antibodynum = hostchr->bodynum; - } - - playerTickChrBody(); - modelCopyAnimData(hostchr->model, playerchr->model); - func0f02e9a0(playerchr, 12); - - chrrootrwdata = modelGetNodeRwData(hostchr->model, hostchr->model->filedata->rootnode); - playerrootrwdata = modelGetNodeRwData(playerchr->model, playerchr->model->filedata->rootnode); - - playerrootrwdata->chrinfo = chrrootrwdata->chrinfo; - - if (playerrootrwdata->chrinfo.unk34.y < 10) { - playerrootrwdata->chrinfo.unk34.y = 10; - } - - if (playerrootrwdata->chrinfo.unk24.y < 10) { - playerrootrwdata->chrinfo.unk24.y = 10; - } - - playerchr->radius = hostchr->radius; - g_Vars.currentplayer->bond2.radius = hostchr->radius; - - chrRemove(hostprop, true); - propDeregisterRooms(hostprop); - propDelist(hostprop); - propDisable(hostprop); - propFree(hostprop); - - return true; - } - - hostchr->chrflags &= ~CHRCFLAG_PERIMDISABLEDTMP; - - return false; -} - void playerSpawn(void) { f32 xdiff; @@ -949,145 +796,11 @@ void playerSpawn(void) invGiveSingleWeapon(WEAPON_UNARMED); playerSetShieldFrac(0); - if (g_Vars.mplayerisrunning) { - if (g_Vars.antiplayernum >= 0 && g_Vars.currentplayer == g_Vars.anti) { - numsqdists = 0; - force = false; + bgunEquipWeapon2(HAND_LEFT, g_DefaultWeapons[HAND_LEFT]); + bgunEquipWeapon2(HAND_RIGHT, g_DefaultWeapons[HAND_RIGHT]); - invGiveSingleWeapon(WEAPON_SUICIDEPILL); - bgunEquipWeapon2(HAND_LEFT, WEAPON_NONE); - bgunEquipWeapon2(HAND_RIGHT, WEAPON_UNARMED); - - if (g_Vars.lvframenum > 0) { - s32 prevplayernum = g_Vars.currentplayernum; - setCurrentPlayerNum(g_Vars.bondplayernum); - bgun0f0a0c08(&sp84, &sp9c); - mtx4RotateVec(camGetProjectionMtxF(), &sp9c, &sp90); - mtx4TransformVec(camGetProjectionMtxF(), &sp84, &sp78); - setCurrentPlayerNum(prevplayernum); - } - - if (g_Vars.currentplayer->model00d4 == NULL) { - playerTickChrBody(); - } - - for (i = 0; i < chrsGetNumSlots(); i++) { - if (g_ChrSlots[i].model - && g_ChrSlots[i].prop - && (g_ChrSlots[i].hidden & CHRHFLAG_00400000) - && (g_ChrSlots[i].chrflags & CHRCFLAG_HIDDEN) == 0 - && g_ChrSlots[i].prop->type == PROPTYPE_CHR - && !chrIsDead(&g_ChrSlots[i]) - && (g_ChrSlots[i].prop->flags & PROPFLAG_ENABLED)) { - if (g_Vars.bond->prop) { - xdiff = g_ChrSlots[i].prop->pos.x - g_Vars.bond->prop->pos.x; - ydiff = g_ChrSlots[i].prop->pos.y - g_Vars.bond->prop->pos.y; - zdiff = g_ChrSlots[i].prop->pos.z - g_Vars.bond->prop->pos.z; - } else { - xdiff = g_ChrSlots[i].prop->pos.x - g_Vars.currentplayer->prop->pos.x; - ydiff = g_ChrSlots[i].prop->pos.y - g_Vars.currentplayer->prop->pos.y; - zdiff = g_ChrSlots[i].prop->pos.z - g_Vars.currentplayer->prop->pos.z; - } - - sqdist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff; - - if (g_Vars.lvframenum > 0 - && (g_ChrSlots[i].hidden & CHRHFLAG_00800000) - && func0f06b39c(&sp78, &sp90, &g_ChrSlots[i].prop->pos, model0001af80(g_ChrSlots[i].model)) - && (random() % 8)) { - sqdist += 1000000; - } - - // Insert sqdist to sorteddists, maintaining sort order, - // and mirror the changes into the sortedchrs array. - - // Move j to the first sqdist that is further than the new one - for (j = 0; j < numsqdists; j++) { - if (sqdist < sorteddists[j]) { - break; - } - } - - if (j < 10) { - // Move the higher sorteddists forward, removing the highest item - for (k = numsqdists; k > j; k--) { - if (k < 10) { - sortedchrs[k] = sortedchrs[k - 1]; - sorteddists[k] = sorteddists[k - 1]; - } - } - - // Write new sqdist - sortedchrs[j] = &g_ChrSlots[i]; - sorteddists[j] = sqdist; - - if (numsqdists < 9) { - numsqdists++; - } - } - } - } - - // Randomly swap some of the earlier elements so the player - // doesn't always spawn into the closest - if (numsqdists > 1 && (random() % 2) == 0) { - tmpchr = sortedchrs[0]; - sqdist = sorteddists[0]; - sortedchrs[0] = sortedchrs[1]; - sorteddists[0] = sorteddists[1]; - sortedchrs[1] = tmpchr; - sorteddists[1] = sqdist; - } - - if (numsqdists > 2 && (random() % 4) == 0) { - tmpchr = sortedchrs[0]; - sqdist = sorteddists[0]; - sortedchrs[0] = sortedchrs[2]; - sorteddists[0] = sorteddists[2]; - sortedchrs[2] = tmpchr; - sorteddists[2] = sqdist; - } - - // Iterate sortedchrs in order and try to spawn into any of them. - // The spawn may fail if the chr is on-screen, and potentially in - // some other conditions such as the chr being too close to a wall. - // If no chrs can be spawned into, iterate the list again but this - // time allowing the spawn to happen on-screen (force = true). - for (i = 0; i < numsqdists; i++) { - if (playerSpawnAnti(sortedchrs[i], force)) { - break; - } - - if (i == numsqdists - 1) { - i = 0; - - if (force) { - break; - } - - force = true; - } - } - - if (g_Vars.currentplayer->prop->chr) { - g_Vars.currentplayer->prop->chr->blurdrugamount = 0; - g_Vars.currentplayer->prop->chr->blurnumtimesdied = 0; - } - } else { - bgunEquipWeapon2(HAND_LEFT, g_DefaultWeapons[HAND_LEFT]); - bgunEquipWeapon2(HAND_RIGHT, g_DefaultWeapons[HAND_RIGHT]); - -#if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.currentplayer->model00d4 == NULL - && (IS8MB() || g_Vars.fourmeg2player || g_MpAllChrPtrs[g_Vars.currentplayernum] == NULL)) { - playerTickChrBody(); - } -#else - if (g_Vars.currentplayer->model00d4 == NULL) { - playerTickChrBody(); - } -#endif - } + if (g_Vars.currentplayer->model00d4 == NULL) { + playerTickChrBody(); } playerUpdatePerimInfo(); @@ -1129,110 +842,17 @@ void playersTickAllChrBodies(void) void playerChooseBodyAndHead(s32 *bodynum, s32 *headnum, s32 *arg2) { - s32 outfit; - bool solo; + if (g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum < mpGetNumHeads2()) { + *headnum = mpGetHeadId(g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum); + } else { + *headnum = g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum - mpGetNumHeads2(); - if (g_Vars.antiplayernum >= 0 - && g_Vars.currentplayer == g_Vars.anti - && g_Vars.antiheadnum >= 0 - && g_Vars.antibodynum >= 0) { - *headnum = g_Vars.antiheadnum; - *bodynum = g_Vars.antibodynum; - return; - } - - if (g_Vars.normmplayerisrunning) { - if (g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum < mpGetNumHeads2()) { - *headnum = mpGetHeadId(g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum); - } else { - *headnum = g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpheadnum - mpGetNumHeads2(); - - if (arg2) { - *arg2 = true; - } - } - - *bodynum = mpGetBodyId(g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpbodynum); - return; - } - - outfit = g_Vars.currentplayer->bondtype; - solo = !(g_Vars.coopplayernum >= 0) || (g_Vars.currentplayer != g_Vars.coop); - - if (g_Vars.stagenum == STAGE_VILLA && lvGetDifficulty() >= DIFF_PA) { - outfit = OUTFIT_NEGOTIATOR; - } - - if (g_Vars.currentplayer->disguised) { - switch (g_Vars.stagenum) { - case STAGE_RESCUE: outfit = OUTFIT_LAB; break; - case STAGE_AIRBASE: outfit = OUTFIT_STEWARDESS; break; + if (arg2) { + *arg2 = true; } } - switch (outfit) { - default: - case OUTFIT_DEFAULT: - *bodynum = BODY_DARK_COMBAT; - *headnum = solo ? HEAD_DARK_COMBAT : HEAD_VD; - break; - case OUTFIT_ELVIS: - *bodynum = BODY_THEKING; - *headnum = solo ? HEAD_ELVIS : HEAD_ELVIS; - break; - case OUTFIT_TRENT: - *bodynum = BODY_TRENT; - *headnum = solo ? HEAD_TRENT : HEAD_TRENT; - break; - case OUTFIT_TRENCH: - *bodynum = BODY_DARK_TRENCH; - *headnum = solo ? HEAD_DARK_COMBAT : HEAD_VD; - break; - case OUTFIT_FROCK_RIPPED: - *bodynum = BODY_DARK_RIPPED; - *headnum = solo ? HEAD_DARK_FROCK : HEAD_VD; - break; - case OUTFIT_FROCK: - *bodynum = BODY_DARK_FROCK; - *headnum = solo ? HEAD_DARK_FROCK : HEAD_VD; - break; - case OUTFIT_LEATHER: - *bodynum = BODY_DARK_LEATHER; - *headnum = solo ? HEAD_DARK_COMBAT : HEAD_VD; - break; - case OUTFIT_DEEPSEA: - *bodynum = BODY_DARKWET; - *headnum = solo ? HEAD_DARK_COMBAT : HEAD_VD; - break; - case OUTFIT_WETSUIT: - *bodynum = BODY_DARKAQUALUNG; - *headnum = solo ? HEAD_DARKAQUA : HEAD_VD; - break; - case OUTFIT_SNOW: - *bodynum = BODY_DARKSNOW; - *headnum = solo ? HEAD_DARK_SNOW : HEAD_VD; - break; - case OUTFIT_LAB: - *bodynum = BODY_DARKLAB; - *headnum = solo ? HEAD_DARK_COMBAT : HEAD_VD; - break; - case OUTFIT_STEWARDESS: - *bodynum = BODY_DARK_AF1; - *headnum = solo ? HEAD_DARK_FROCK : HEAD_VD; - break; - case OUTFIT_NEGOTIATOR: - *bodynum = BODY_DARK_NEGOTIATOR; - *headnum = solo ? HEAD_DARK_FROCK : HEAD_VD; - break; - case OUTFIT_MRBLONDE: - *bodynum = BODY_MRBLONDE; - *headnum = solo ? HEAD_MRBLONDE : HEAD_MRBLONDE; - break; - case OUTFIT_MAIAN: - *bodynum = BODY_ELVIS1; - *headnum = solo ? HEAD_MAIAN_S : HEAD_MAIAN_S; - break; - } + *bodynum = mpGetBodyId(g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.mpbodynum); } /** @@ -1456,15 +1076,6 @@ void playerTickChrBody(void) chr->radius = g_Vars.currentplayer->bond2.radius; g_Vars.currentplayer->vv_eyeheight = (s32)g_HeadsAndBodies[bodynum].height; - -#if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.antiplayernum >= 0 - && g_Vars.currentplayer == g_Vars.anti - && g_Vars.currentplayer->vv_eyeheight > 159) { - g_Vars.currentplayer->vv_eyeheight = 159; - } -#endif - g_Vars.currentplayer->vv_headheight = g_Vars.currentplayer->vv_eyeheight; if (headnum >= 0) { @@ -2733,54 +2344,31 @@ s16 playerGetFbHeight(void) return height; } -#if VERSION >= VERSION_NTSC_1_0 -bool playerHasSharedViewport(void) -{ - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && menuGetRoot() == MENUROOT_MPENDSCREEN - && var8009dfc0 == 0) { - return true; - } - - return (g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE; -} -#endif - s16 playerGetViewportWidth(void) { s16 width; -#if VERSION >= VERSION_NTSC_1_0 - if (!playerHasSharedViewport()) -#else - if ((!g_InCutscene || g_MainIsEndscreen) && menuGetRoot() != MENUROOT_COOPCONTINUE) -#endif - { - if (PLAYERCOUNT() >= 3) { - // 3/4 players + if (PLAYERCOUNT() >= 3) { + // 3/4 players + width = g_ViModes[g_ViRes].width / 2; + + if (g_Vars.currentplayernum == 0 || g_Vars.currentplayernum == 2) { + width--; + } + } else if (PLAYERCOUNT() == 2) { + if (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || g_Vars.fourmeg2player) { + // 2 players vsplit width = g_ViModes[g_ViRes].width / 2; - if (g_Vars.currentplayernum == 0 || g_Vars.currentplayernum == 2) { + if (g_Vars.currentplayernum == 0) { width--; } - } else if (PLAYERCOUNT() == 2) { - if (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || g_Vars.fourmeg2player) { - // 2 players vsplit - width = g_ViModes[g_ViRes].width / 2; - - if (g_Vars.currentplayernum == 0) { - width--; - } - } else { - // 2 players full width - width = g_ViModes[g_ViRes].width; - } } else { - // 1 player + // 2 players full width width = g_ViModes[g_ViRes].width; } } else { - // Probably cutscene + // 1 player width = g_ViModes[g_ViRes].width; } @@ -2789,11 +2377,7 @@ s16 playerGetViewportWidth(void) s16 playerGetViewportLeft(void) { -#if VERSION >= VERSION_NTSC_1_0 - s32 something = !playerHasSharedViewport(); -#else - s32 something = !((g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE); -#endif + s32 something = true; s16 left; if (PLAYERCOUNT() >= 3 && something != 0) { @@ -2829,13 +2413,7 @@ s16 playerGetViewportHeight(void) { s16 height; - if (PLAYERCOUNT() >= 2 -#if VERSION >= VERSION_NTSC_1_0 - && !playerHasSharedViewport() -#else - && !((g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE) -#endif - ) { + if (PLAYERCOUNT() >= 2) { s16 tmp = g_ViModes[g_ViRes].fullheight; if (IS4MB() && !g_Vars.fourmeg2player) { @@ -2881,13 +2459,7 @@ s16 playerGetViewportTop(void) { s16 top; - if (PLAYERCOUNT() >= 2 -#if VERSION >= VERSION_NTSC_1_0 - && !playerHasSharedViewport() -#else - && !((g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE) -#endif - ) { + if (PLAYERCOUNT() >= 2) { top = g_ViModes[g_ViRes].fulltop; if (optionsGetScreenSplit() != SCREENSPLIT_VERTICAL || PLAYERCOUNT() != 2) { @@ -3424,10 +2996,6 @@ void playerTick(bool arg0) g_ViRes = g_HiResEnabled; - if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() > 1) { - g_ViRes = VIRES_LO; - } - #if PAL text0f1531dc(false); #else @@ -4032,23 +3600,6 @@ void playerTick(bool arg0) if (g_Vars.currentplayer->redbloodfinished == false) { bgunHandlePlayerDead(); } - - if (g_Vars.currentplayer->redbloodfinished && g_Vars.currentplayer->deathanimfinished) { - if (g_Vars.mplayerisrunning == false) { - mainEndStage(); - } else if (g_Vars.coopplayernum >= 0) { - if (g_Vars.currentplayer == g_Vars.bond - && g_Vars.coop->isdead - && g_Vars.coop->redbloodfinished - && g_Vars.coop->deathanimfinished) { - mainEndStage(); - } else { - chrsClearRefsToPlayer(g_Vars.currentplayernum); - } - } else if (g_Vars.antiplayernum >= 0 && g_Vars.currentplayer == g_Vars.bond) { - mainEndStage(); - } - } } if (g_Vars.tickmode == TICKMODE_GE_FADEOUT && playerIsFadeComplete()) { @@ -4479,148 +4030,43 @@ Gfx *playerRenderHud(Gfx *gdl) if (playerIsFadeComplete()) { bool canrestart = false; - if (g_Vars.mplayerisrunning) { - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - // Coop or anti - struct chrdata *chr = g_Vars.currentplayer->prop->chr; + u32 playernum = g_Vars.currentplayernum; + s32 playercount = PLAYERCOUNT(); + struct chrdata *chr = g_Vars.currentplayer->prop->chr; + s32 numdeaths = 0; + s32 i; - if (chr) { - chr->chrflags |= CHRCFLAG_HIDDEN; - } + if (chr) { + chr->chrflags |= CHRCFLAG_HIDDEN; + } - if (g_Vars.antiplayernum >= 0 && g_Vars.currentplayer == g_Vars.anti) { - // Anti - if (joyGetButtons(optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex), 0xb000) && !mpIsPaused()) { - g_Vars.currentplayer->dostartnewlife = true; - } - } else { - // Coop - if (g_Vars.coopplayernum >= 0 && - (!g_Vars.bond->isdead || !g_Vars.coop->isdead)) { - f32 totalhealth; - u32 buddyplayernum = g_Vars.bondplayernum; - u32 prevplayernum = g_Vars.currentplayernum; - f32 stealhealth; - f32 shield; + for (i = 0; i < playercount; i++) { + numdeaths += g_Vars.playerstats[i].kills[playernum]; + } - canrestart = joyGetButtons(optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex), 0xb000) - && !mpIsPaused(); + if (g_BossFile.locktype == MPLOCKTYPE_CHALLENGE) { + if (g_Vars.currentplayer->deadtimer < 0) { + g_Vars.currentplayer->deadtimer = TICKS(600); + } - // Get ready to respawn. - // The other player's health will be halved. - buddyplayernum = g_Vars.currentplayer == g_Vars.coop ? g_Vars.bondplayernum : g_Vars.coopplayernum; + if (g_Vars.currentplayer->deadtimer >= 0) { + g_Vars.currentplayer->deadtimer -= g_Vars.lvupdate60; - setCurrentPlayerNum(buddyplayernum); - shield = chrGetShield(g_Vars.currentplayer->prop->chr) * 0.125f; - totalhealth = g_Vars.currentplayer->bondhealth + shield; - -#if VERSION >= VERSION_NTSC_FINAL - // NTSC final prevents coop from being able to respawn - // in Deep Sea after the mid cutscene. Without this condition, - // the player could respawn on the other side of the exit trigger. - // Additionally, the logic for coopcanrestart is different. - if (totalhealth > 0.125f - && !(mainGetStageNum() == STAGE_DEEPSEA && chrHasStageFlag(NULL, 0x00000200))) { - if (canrestart) { - playerDisplayHealth(); - - stealhealth = totalhealth * 0.5f; - - if (stealhealth < shield) { - chrSetShield(g_Vars.currentplayer->prop->chr, (shield - stealhealth) * 8.0f); - } else { - chrSetShield(g_Vars.currentplayer->prop->chr, 0); - g_Vars.currentplayer->bondhealth -= stealhealth - shield; - } - - // Back to the player who died - setCurrentPlayerNum(prevplayernum); - g_Vars.currentplayer->dostartnewlife = true; - g_Vars.currentplayer->oldhealth = 0; - g_Vars.currentplayer->oldarmour = 0; - g_Vars.currentplayer->apparenthealth = 0; - g_Vars.currentplayer->apparentarmour = 0; - g_Vars.currentplayer->stealhealth = stealhealth; - } else { - setCurrentPlayerNum(prevplayernum); - } - - g_Vars.currentplayer->coopcanrestart = true; - } else { - // Can't respawn - setCurrentPlayerNum(prevplayernum); - } -#else - if (totalhealth > 0.125f && canrestart) { - playerDisplayHealth(); - - stealhealth = totalhealth * 0.5f; - - if (stealhealth < shield) { - chrSetShield(g_Vars.currentplayer->prop->chr, (shield - stealhealth) * 8.0f); - } else { - chrSetShield(g_Vars.currentplayer->prop->chr, 0); - g_Vars.currentplayer->bondhealth -= stealhealth - shield; - } - - // Back to the player who died - setCurrentPlayerNum(prevplayernum); - g_Vars.currentplayer->dostartnewlife = true; - g_Vars.currentplayer->oldhealth = 0; - g_Vars.currentplayer->oldarmour = 0; - g_Vars.currentplayer->apparenthealth = 0; - g_Vars.currentplayer->apparentarmour = 0; - g_Vars.currentplayer->stealhealth = stealhealth; - } else { - setCurrentPlayerNum(prevplayernum); - } - - if (totalhealth > 0.125f) { - g_Vars.currentplayer->coopcanrestart = true; - } -#endif - } - } - } else { - u32 playernum = g_Vars.currentplayernum; - s32 playercount = PLAYERCOUNT(); - struct chrdata *chr = g_Vars.currentplayer->prop->chr; - s32 numdeaths = 0; - s32 i; - - if (chr) { - chr->chrflags |= CHRCFLAG_HIDDEN; - } - - for (i = 0; i < playercount; i++) { - numdeaths += g_Vars.playerstats[i].kills[playernum]; - } - - if (g_BossFile.locktype == MPLOCKTYPE_CHALLENGE) { - if (g_Vars.currentplayer->deadtimer < 0) { - g_Vars.currentplayer->deadtimer = TICKS(600); - } - - if (g_Vars.currentplayer->deadtimer >= 0) { - g_Vars.currentplayer->deadtimer -= g_Vars.lvupdate60; - - if (g_Vars.currentplayer->deadtimer < 0) { - canrestart = true; - } - } - } - - if (joyGetButtons(optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex), 0xb000) - && !mpIsPaused() - && g_NumReasonsToEndMpMatch == 0) { + if (g_Vars.currentplayer->deadtimer < 0) { canrestart = true; } - - if (canrestart) { - g_Vars.currentplayer->dostartnewlife = true; - } } } + + if (joyGetButtons(optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex), 0xb000) + && !mpIsPaused() + && g_NumReasonsToEndMpMatch == 0) { + canrestart = true; + } + + if (canrestart) { + g_Vars.currentplayer->dostartnewlife = true; + } } } } @@ -4681,12 +4127,7 @@ void playerDieByShooter(u32 shooter, bool force) chrUncloak(g_Vars.currentplayer->prop->chr, true); - if (g_Vars.mplayerisrunning && - (g_Vars.antiplayernum < 0 - || g_Vars.currentplayernum != g_Vars.antiplayernum - || shooter != g_Vars.antiplayernum)) { - currentPlayerDropAllItems(); - } + currentPlayerDropAllItems(); g_Vars.currentplayer->isdead = true; g_Vars.currentplayer->bonddie = g_Vars.currentplayer->bond2; diff --git a/src/game/playermgr.c b/src/game/playermgr.c index 793b36a27..7a33c9cdc 100644 --- a/src/game/playermgr.c +++ b/src/game/playermgr.c @@ -58,14 +58,6 @@ void playermgrAllocatePlayers(s32 count) setCurrentPlayerNum(0); g_Vars.bond = g_Vars.players[g_Vars.bondplayernum]; - - if (g_Vars.coopplayernum >= 0) { - g_Vars.coop = g_Vars.players[g_Vars.coopplayernum]; - g_Vars.anti = NULL; - } else if (g_Vars.antiplayernum >= 0) { - g_Vars.coop = NULL; - g_Vars.anti = g_Vars.players[g_Vars.antiplayernum]; - } } else { playermgrAllocatePlayer(0); setCurrentPlayerNum(0); @@ -76,10 +68,11 @@ void playermgrAllocatePlayers(s32 count) playermgrSetViewSize(playerGetFbWidth(), playerGetFbHeight()); } - g_Vars.coop = NULL; - g_Vars.anti = NULL; g_Vars.bond = g_Vars.players[0]; } + + g_Vars.coop = NULL; + g_Vars.anti = NULL; } void playermgrAllocatePlayer(s32 index) diff --git a/src/game/playerreset.c b/src/game/playerreset.c index fb93177f4..da1b582a8 100644 --- a/src/game/playerreset.c +++ b/src/game/playerreset.c @@ -181,34 +181,10 @@ void playerReset(void) propEnable(g_Vars.currentplayer->prop); chrInit(g_Vars.currentplayer->prop); - if (g_Vars.coopplayernum >= 0) { - g_Vars.currentplayer->prop->chr->team = TEAM_ALLY; - } else if (g_Vars.antiplayernum >= 0) { - if (g_Vars.currentplayer == g_Vars.bond) { - g_Vars.currentplayer->prop->chr->team = TEAM_ALLY; - } else { - g_Vars.currentplayer->prop->chr->team = TEAM_ENEMY; - } - } else { - if (g_Vars.mplayerisrunning) { - g_Vars.currentplayer->prop->chr->team = 1 << g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.team; - } else { - g_Vars.currentplayer->prop->chr->team = TEAM_ALLY; - } - } + g_Vars.currentplayer->prop->chr->team = 1 << g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.team; if (g_NumSpawnPoints > 0) { - if (g_Vars.coopplayernum >= 0) { - turnanglerad = M_BADTAU - scenarioChooseSpawnLocation(30, &pos, rooms, g_Vars.currentplayer->prop); - } else if (g_Vars.antiplayernum >= 0) { - turnanglerad = M_BADTAU - scenarioChooseSpawnLocation(30, &pos, rooms, g_Vars.currentplayer->prop); - } else { - if (g_Vars.mplayerisrunning == 0) { - g_NumSpawnPoints = 1; - } - - turnanglerad = M_BADTAU - scenarioChooseSpawnLocation(30, &pos, rooms, g_Vars.currentplayer->prop); - } + turnanglerad = M_BADTAU - scenarioChooseSpawnLocation(30, &pos, rooms, g_Vars.currentplayer->prop); } groundy = cdFindGroundInfoAtCyl(&pos, 30, rooms, diff --git a/src/game/propobj.c b/src/game/propobj.c index 6ce353fcc..c69f11006 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -1505,34 +1505,7 @@ s32 func0f068fc8(struct prop *prop, bool arg1) } else if (obj->type == OBJTYPE_DOOR) { struct doorobj *door = (struct doorobj *)obj; - if (g_Vars.normmplayerisrunning) { - actual = 255; - } else { - actualptr = arg1 == 0 ? &actual : NULL; - extraptr = arg1 == 1 ? &extra : NULL; - - door0f068c04(prop, actualptr, extraptr); - - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - if (g_Vars.currentplayernum == 1) { - if (actualptr) { - door->actual1 = actual & 0xff; - } - - if (extraptr) { - door->extra1 = extra & 0xff; - } - } else { - if (actualptr) { - door->actual2 = actual & 0xff; - } - - if (extraptr) { - door->extra2 = extra & 0xff; - } - } - } - } + actual = 255; } else { actual = func0f068b14(prop->rooms, 0); extra = func0f068b14(prop->rooms, 1); @@ -1672,22 +1645,6 @@ void propCalculateShadeInfo(struct prop *prop, u8 *nextcol, u16 floorcol) nextcol[0] >>= 1; nextcol[1] >>= 1; nextcol[2] >>= 1; - - if (prop->type == PROPTYPE_DOOR && (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0)) { - struct doorobj *door = prop->door; - - if (g_Vars.currentplayernum == 0) { - door->shadeinfo1[0] = nextcol[0]; - door->shadeinfo1[1] = nextcol[1]; - door->shadeinfo1[2] = nextcol[2]; - door->shadeinfo1[3] = nextcol[3]; - } else { - door->shadeinfo2[0] = nextcol[0]; - door->shadeinfo2[1] = nextcol[1]; - door->shadeinfo2[2] = nextcol[2]; - door->shadeinfo2[3] = nextcol[3]; - } - } } /** @@ -4396,27 +4353,7 @@ void weaponTick(struct prop *prop) // If a player manages to throw a mine on themselves, it will not detonate. // You can't throw a mine on yourself anyway, so this check always passes if (prop->parent == NULL || parentchr == NULL || mpPlayerGetIndex(parentchr) != ownerplayernum) { - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - if (ownerplayernum == 2) { - u32 mask = 0; - - if (g_Vars.coop && g_Vars.coop->prop) { - mask |= 1 << playermgrGetPlayerNumByProp(g_Vars.coop->prop); - } - - if (g_Vars.bond && g_Vars.bond->prop) { - mask |= 1 << playermgrGetPlayerNumByProp(g_Vars.bond->prop); - } - - g_PlayersDetonatingMines &= mask; - - if (g_PlayersDetonatingMines != 0) { - weapon->timer240 = 0; - } - } else if (g_PlayersDetonatingMines & 1 << ownerplayernum) { - weapon->timer240 = 0; - } - } else if (g_PlayersDetonatingMines & 1 << ownerplayernum) { + if (g_PlayersDetonatingMines & 1 << ownerplayernum) { weapon->timer240 = 0; } } @@ -8984,16 +8921,7 @@ void cctvTick(struct prop *camprop) f32 zdist; bool canseeplayer = true; - // If playing in coop mode, cycle between players in alternating frames - if (g_Vars.coopplayernum >= 0) { - if (g_Vars.lvframenum & 1) { - playerprop = g_Vars.bond->prop; - } else { - playerprop = g_Vars.coop->prop; - } - } else { - playerprop = g_Vars.bond->prop; - } + playerprop = g_Vars.bond->prop; // Check distance xdist = playerprop->pos.x - camprop->pos.x; @@ -9094,10 +9022,6 @@ void cctvTick(struct prop *camprop) obj->flags |= OBJFLAG_CAMERA_BONDINVIEW; camera->seebondtime60 += g_Vars.lvupdate60; - if (g_Vars.coopplayernum >= 0) { - camera->seebondtime60 += g_Vars.lvupdate60; - } - if (camera->seebondtime60 >= (s32)(TICKS(300) * g_CctvWaitScale)) { alarmActivate(); camera->seebondtime60 = 0; @@ -9439,15 +9363,7 @@ void autogunTick(struct prop *prop) } } else { // Not configured for teams, so target a player - if (g_Vars.coopplayernum >= 0) { - if (g_Vars.lvframenum & 1) { - target = g_Vars.bond->prop; - } else { - target = g_Vars.coop->prop; - } - } else { - target = g_Vars.bond->prop; - } + target = g_Vars.bond->prop; } } @@ -9884,170 +9800,48 @@ void autogunTickShoot(struct prop *autogunprop) // If multiplayer, or targeting a bad guy in solo // (ie. autogun is a Defense autogun or a thrown laptop) - if (g_Vars.normmplayerisrunning - || (targetprop && (targetprop->type == PROPTYPE_CHR)) - || (g_Vars.antiplayernum >= 0 && targetprop && targetprop == g_Vars.anti->prop)) { - if (cdExamLos08(&gunpos, gunrooms, &hitpos, CDTYPE_ALL, GEOFLAG_BLOCK_SHOOT) == CDRESULT_COLLISION) { -#if VERSION >= VERSION_PAL_FINAL - cdGetPos(&hitpos, 11480, "prop/propobj.c"); -#elif VERSION >= VERSION_PAL_BETA - cdGetPos(&hitpos, 11480, "propobj.c"); -#elif VERSION >= VERSION_NTSC_1_0 - cdGetPos(&hitpos, 11458, "propobj.c"); -#else - cdGetPos(&hitpos, 11296, "propobj.c"); -#endif + if (cdExamLos08(&gunpos, gunrooms, &hitpos, CDTYPE_ALL, GEOFLAG_BLOCK_SHOOT) == CDRESULT_COLLISION) { + cdGetPos(&hitpos, 11458, "propobj.c"); - hitprop = cdGetObstacleProp(); + hitprop = cdGetObstacleProp(); - // SP: If the hit prop is a chr and it's our target - // MP: If the hit prop is a chr - if (hitprop - && (hitprop->type == PROPTYPE_CHR || hitprop->type == PROPTYPE_PLAYER) - && (g_Vars.normmplayerisrunning || targetprop == hitprop)) { - struct modelnode *hitnode = NULL; - struct model *hitmodel = NULL; - s32 hitside = -1; - s32 hitpart = HITPART_GENERAL; - f32 damage = gsetGetDamage(&gset); - struct chrdata *hitchr = hitprop->chr; + // SP: If the hit prop is a chr and it's our target + // MP: If the hit prop is a chr + if (hitprop + && (hitprop->type == PROPTYPE_CHR || hitprop->type == PROPTYPE_PLAYER) + && (g_Vars.normmplayerisrunning || targetprop == hitprop)) { + struct modelnode *hitnode = NULL; + struct model *hitmodel = NULL; + s32 hitside = -1; + s32 hitpart = HITPART_GENERAL; + f32 damage = gsetGetDamage(&gset); + struct chrdata *hitchr = hitprop->chr; - if (g_Vars.normmplayerisrunning) { - damage *= 0.5f; - } - - if (ownerprop == hitprop || (ownerchr && chrCompareTeams(hitprop->chr, ownerchr, COMPARE_FRIENDS))) { - // A teammate entered the line of fire - makebeam = false; - fireleft = false; - fireright = false; - friendly = true; - } - - if (fireleft || fireright) { - bgunPlayPropHitSound(&gset, hitprop, -1); - - if (hitchr->model && chrGetShield(hitchr) > 0.0f) { - chrCalculateShieldHit(hitchr, &hitpos, &dir, &hitnode, &hitpart, &hitmodel, &hitside); - } - - chrEmitSparks(hitchr, hitprop, hitpart, &hitpos, &dir, ownerchr); - func0f0341dc(hitchr, damage, &dir, &gset, ownerprop, HITPART_GENERAL, hitprop, hitnode, hitmodel, hitside, NULL); - } - } else { - missed = true; + if (g_Vars.normmplayerisrunning) { + damage *= 0.5f; } - } - } else if (targetprop && targetprop->type == PROPTYPE_OBJ) { - // Laptop in firing range - struct prop *hitprop = NULL; - if (cdExamLos08(&gunpos, gunrooms, &hitpos, - CDTYPE_ALL & ~CDTYPE_PLAYERS, - GEOFLAG_BLOCK_SHOOT) == CDRESULT_COLLISION) { -#if VERSION >= VERSION_PAL_FINAL - cdGetPos(&hitpos, 11535, "prop/propobj.c"); -#elif VERSION >= VERSION_PAL_BETA - cdGetPos(&hitpos, 11535, "propobj.c"); -#elif VERSION >= VERSION_NTSC_1_0 - cdGetPos(&hitpos, 11513, "propobj.c"); -#else - cdGetPos(&hitpos, 11351, "propobj.c"); -#endif + if (ownerprop == hitprop || (ownerchr && chrCompareTeams(hitprop->chr, ownerchr, COMPARE_FRIENDS))) { + // A teammate entered the line of fire + makebeam = false; + fireleft = false; + fireright = false; + friendly = true; + } - hitprop = cdGetObstacleProp(); + if (fireleft || fireright) { + bgunPlayPropHitSound(&gset, hitprop, -1); + + if (hitchr->model && chrGetShield(hitchr) > 0.0f) { + chrCalculateShieldHit(hitchr, &hitpos, &dir, &hitnode, &hitpart, &hitmodel, &hitside); + } + + chrEmitSparks(hitchr, hitprop, hitpart, &hitpos, &dir, ownerchr); + func0f0341dc(hitchr, damage, &dir, &gset, ownerprop, HITPART_GENERAL, hitprop, hitnode, hitmodel, hitside, NULL); + } + } else { missed = true; } - - if (hitprop && hitprop->type == PROPTYPE_OBJ) { - struct defaultobj *hitobj = hitprop->obj; - - if (hitobj->modelnum == MODEL_TARGET) { - struct gset gset = { WEAPON_LAPTOPGUN, 0, 0, FUNC_SECONDARY }; - - missed = false; - - if (chrIsUsingPaintball(ownerchr)) { - sparksCreate(hitprop->rooms[0], hitprop, &hitpos, 0, 0, SPARKTYPE_PAINT); - } else { - sparksCreate(hitprop->rooms[0], hitprop, &hitpos, 0, 0, SPARKTYPE_DEFAULT); - } - - bgunPlayPropHitSound(&gset, hitprop, TEXTURE_00F2); - } - } - } else { - // Enemy autogun in solo - if (cdExamLos08(&gunpos, gunrooms, &hitpos, - CDTYPE_DOORS | CDTYPE_BG, - GEOFLAG_BLOCK_SHOOT) == CDRESULT_COLLISION) { -#if VERSION >= VERSION_PAL_FINAL - cdGetPos(&hitpos, 11561, "prop/propobj.c"); -#elif VERSION >= VERSION_PAL_BETA - cdGetPos(&hitpos, 11561, "propobj.c"); -#elif VERSION >= VERSION_NTSC_1_0 - cdGetPos(&hitpos, 11539, "propobj.c"); -#else - cdGetPos(&hitpos, 11377, "propobj.c"); -#endif - - missed = true; - } - - if (g_Vars.lvframe60 == autogun->lastaimbond60 - && targetprop && targetprop->type == PROPTYPE_PLAYER) { - f32 x; - f32 y; - f32 z; - f32 sqguntotargetdist; - f32 sqguntohitdist; - f32 damage; - - x = targetprop->pos.x - gunpos.x; - y = targetprop->pos.y - gunpos.y; - z = targetprop->pos.z - gunpos.z; - - sqguntotargetdist = x * x + y * y + z * z; - - x = hitpos.f[0] - gunpos.f[0]; - y = hitpos.f[1] - gunpos.f[1]; - z = hitpos.f[2] - gunpos.f[2]; - - sqguntohitdist = x * x + y * y + z * z; - - if (sqguntohitdist >= sqguntotargetdist) { - f32 guntotargetdist = sqrtf(sqguntotargetdist); - f32 increment = 0.16f * g_Vars.lvupdate60freal * g_AutogunAccuracyScale; - - if (guntotargetdist > 200.0f) { - increment *= 200.0f / guntotargetdist; - } - - autogun->shotbondsum += increment; - - if (autogun->shotbondsum >= 1.0f) { - hitpos.x = targetprop->pos.x; - hitpos.y = targetprop->pos.y; - hitpos.z = targetprop->pos.z; - - missed = false; - - if (random() % 2) { - hitpos.y += 2 + (random() % 10); - } else { - hitpos.y -= 2 + (random() % 10); - } - - bgunPlayPropHitSound(&gset, targetprop, -1); - - damage = 0.5f * g_AutogunDamageTxScale; - - chrDamageByImpact(targetprop->chr, damage, &dir, &gset, 0, HITPART_GENERAL); - - autogun->shotbondsum = 0.0f; - } - } - } } propSetPerimEnabled(autogunprop, true); @@ -14472,31 +14266,12 @@ Gfx *objRender(struct prop *prop, Gfx *gdl, bool xlupass) } } - if (prop->type == PROPTYPE_DOOR - && (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0)) { - struct doorobj *door = prop->door; + colour[0] = obj->shadecol[0]; + colour[1] = obj->shadecol[1]; + colour[2] = obj->shadecol[2]; + colour[3] = obj->shadecol[3]; - if (g_Vars.currentplayernum == 0) { - colour[0] = door->shadeinfo1[0]; - colour[1] = door->shadeinfo1[1]; - colour[2] = door->shadeinfo1[2]; - colour[3] = door->shadeinfo1[3]; - } else { - colour[0] = door->shadeinfo2[0]; - colour[1] = door->shadeinfo2[1]; - colour[2] = door->shadeinfo2[2]; - colour[3] = door->shadeinfo2[3]; - } - } else { - colour[0] = obj->shadecol[0]; - colour[1] = obj->shadecol[1]; - colour[2] = obj->shadecol[2]; - colour[3] = obj->shadecol[3]; - } - - if (g_Vars.normmplayerisrunning) { - scenarioHighlightProp(prop, colour); - } + scenarioHighlightProp(prop, colour); if (g_Vars.currentplayer->visionmode == VISIONMODE_XRAY) { colour[g_Vars.currentplayer->epcol_0] = xrayalphafrac * 255.0f; @@ -16563,88 +16338,86 @@ void objHit(struct shotdata *shotdata, struct hit *hit) } } - if (g_Vars.antiplayernum < 0 || g_Vars.currentplayer != g_Vars.anti || (obj->flags2 & OBJFLAG2_IMMUNETOANTI) == 0) { - if (hit->hitthing.texturenum != 10000) { - f32 damage = gsetGetDamage(&shotdata->gset); + if (hit->hitthing.texturenum != 10000) { + f32 damage = gsetGetDamage(&shotdata->gset); - if (obj->type == OBJTYPE_AUTOGUN) { - damage *= g_AutogunDamageRxScale; - } else if (obj->type == OBJTYPE_CCTV) { - // Leftover from GE: shots to a CCTV's lens is a one hit kill - if (obj->model->filedata->skel == &g_SkelCctv) { - if (modelGetPart(obj->model->filedata, MODELPART_CCTV_LENS) == hit->unk44) { - damage *= 100.0f; - cctvHandleLensShot(obj); - } - } - - damage *= g_CctvDamageRxScale; - } else if (explosiveshells) { - if (obj->type == OBJTYPE_GLASS || obj->type == OBJTYPE_TINTEDGLASS) { + if (obj->type == OBJTYPE_AUTOGUN) { + damage *= g_AutogunDamageRxScale; + } else if (obj->type == OBJTYPE_CCTV) { + // Leftover from GE: shots to a CCTV's lens is a one hit kill + if (obj->model->filedata->skel == &g_SkelCctv) { + if (modelGetPart(obj->model->filedata, MODELPART_CCTV_LENS) == hit->unk44) { damage *= 100.0f; - } else { - damage *= 5.0f; + cctvHandleLensShot(obj); } } - objTakeGunfire(obj, damage, &sp110, shotdata->gset.weaponnum, g_Vars.currentplayernum); - - if (obj->model->filedata->skel == &g_SkelWindowedDoor && !hit->unk4c) { - struct doorobj *door = (struct doorobj *)obj; - door->glasshits++; - - if (door->glasshits >= 3) { - doorDestroyGlass(door); - } + damage *= g_CctvDamageRxScale; + } else if (explosiveshells) { + if (obj->type == OBJTYPE_GLASS || obj->type == OBJTYPE_TINTEDGLASS) { + damage *= 100.0f; + } else { + damage *= 5.0f; } } - objDropRecursively(hit->prop, false); + objTakeGunfire(obj, damage, &sp110, shotdata->gset.weaponnum, g_Vars.currentplayernum); - // Handle pushing and bouncing - if ((obj->hidden & OBJHFLAG_MOUNTED) == 0 && (obj->hidden & OBJHFLAG_GRABBED) == 0) { - if (obj->flags3 & OBJFLAG3_PUSHABLE) { - struct coord spb0; - struct coord spa4; - struct coord pushdir; - Mtxf sp58; + if (obj->model->filedata->skel == &g_SkelWindowedDoor && !hit->unk4c) { + struct doorobj *door = (struct doorobj *)obj; + door->glasshits++; - spb0.x = shotdata->dir.x * 3.0f; - spb0.y = shotdata->dir.y * 3.0f; - spb0.z = shotdata->dir.z * 3.0f; + if (door->glasshits >= 3) { + doorDestroyGlass(door); + } + } + } - mtx4MultMtx4(camGetProjectionMtxF(), &obj->model->matrices[hit->mtxindex], &sp58); - mtx4TransformVec(&sp58, &hit->hitthing.unk00, &spa4); + objDropRecursively(hit->prop, false); - pushdir.x = shotdata->dir.x; - pushdir.y = shotdata->dir.y; - pushdir.z = shotdata->dir.z; + // Handle pushing and bouncing + if ((obj->hidden & OBJHFLAG_MOUNTED) == 0 && (obj->hidden & OBJHFLAG_GRABBED) == 0) { + if (obj->flags3 & OBJFLAG3_PUSHABLE) { + struct coord spb0; + struct coord spa4; + struct coord pushdir; + Mtxf sp58; - func0f082e84(obj, &spa4, &pushdir, &spb0, true); - } else { - bool bounce = false; + spb0.x = shotdata->dir.x * 3.0f; + spb0.y = shotdata->dir.y * 3.0f; + spb0.z = shotdata->dir.z * 3.0f; - if (func0f085194(obj)) { - if ((obj->flags & OBJFLAG_00400000) == 0) { - bounce = true; - } - } else if (obj->flags & OBJFLAG_BOUNCEIFSHOT) { + mtx4MultMtx4(camGetProjectionMtxF(), &obj->model->matrices[hit->mtxindex], &sp58); + mtx4TransformVec(&sp58, &hit->hitthing.unk00, &spa4); + + pushdir.x = shotdata->dir.x; + pushdir.y = shotdata->dir.y; + pushdir.z = shotdata->dir.z; + + func0f082e84(obj, &spa4, &pushdir, &spb0, true); + } else { + bool bounce = false; + + if (func0f085194(obj)) { + if ((obj->flags & OBJFLAG_00400000) == 0) { bounce = true; } + } else if (obj->flags & OBJFLAG_BOUNCEIFSHOT) { + bounce = true; + } - if (obj->flags2 & OBJFLAG2_00000002) { - if (!objIsHealthy(obj)) { - bounce = true; - } + if (obj->flags2 & OBJFLAG2_00000002) { + if (!objIsHealthy(obj)) { + bounce = true; } + } - if (obj->flags2 & OBJFLAG2_LINKEDTOSAFE) { - bounce = false; - } + if (obj->flags2 & OBJFLAG2_LINKEDTOSAFE) { + bounce = false; + } - if (bounce) { - objBounce(obj, &shotdata->unk0c); - } + if (bounce) { + objBounce(obj, &shotdata->unk0c); } } } @@ -16828,15 +16601,7 @@ bool propobjInteract(struct prop *prop) bmoveGrabProp(prop); } - if (g_Vars.normmplayerisrunning) { - scenarioHandleActivatedProp(g_Vars.currentplayer->prop->chr, prop); - } else { - if (g_Vars.currentplayernum == g_Vars.coopplayernum) { - obj->hidden |= OBJHFLAG_ACTIVATED_BY_COOP; - } else if (g_Vars.currentplayernum == g_Vars.bondplayernum) { - obj->hidden |= OBJHFLAG_ACTIVATED_BY_BOND; - } - } + scenarioHandleActivatedProp(g_Vars.currentplayer->prop->chr, prop); doorCallLift(prop, false); @@ -21177,9 +20942,7 @@ void doorsActivate(struct prop *doorprop, bool allowliftclose) } } - if (g_Vars.currentplayernum == g_Vars.coopplayernum) { - door->base.hidden |= OBJHFLAG_ACTIVATED_BY_COOP; - } else if (g_Vars.currentplayernum == g_Vars.bondplayernum) { + if (g_Vars.currentplayernum == g_Vars.bondplayernum) { door->base.hidden |= OBJHFLAG_ACTIVATED_BY_BOND; } @@ -21265,9 +21028,7 @@ bool propdoorInteract(struct prop *doorprop) } } - if (g_Vars.currentplayernum == g_Vars.coopplayernum) { - door->base.hidden |= OBJHFLAG_ACTIVATED_BY_COOP; - } else if (g_Vars.currentplayernum == g_Vars.bondplayernum) { + if (g_Vars.currentplayernum == g_Vars.bondplayernum) { door->base.hidden |= OBJHFLAG_ACTIVATED_BY_BOND; } @@ -21607,63 +21368,7 @@ void currentPlayerDropAllItems(void) || (g_Vars.normmplayerisrunning && g_MpSetup.scenario == MPSCENARIO_HACKERCENTRAL && i == WEAPON_DATAUPLINK)) { -#if VERSION >= VERSION_NTSC_1_0 - if (g_Vars.coopplayernum >= 0) { - bool canremove = true; - struct prop *child = g_Vars.currentplayer->prop->child; - - while (child) { - struct defaultobj *obj = child->obj; - - if (obj->type == OBJTYPE_WEAPON) { - struct weaponobj *weapon = child->weapon; - - if (i == weapon->weaponnum && (obj->flags3 & OBJFLAG3_PLAYERUNDROPPABLE)) { - canremove = false; - break; - } - } - - child = child->next; - } - - if (canremove) { - invRemoveItemByNum(i); - } - - if (!bgunIsMissionCritical(i)) { - weaponCreateForPlayerDrop(i); - } - } else { - weaponCreateForPlayerDrop(i); - } -#else - if (g_Vars.coopplayernum >= 0) { - bool canremove = true; - struct prop *child = g_Vars.currentplayer->prop->child; - - while (child) { - struct defaultobj *obj = child->obj; - - if (obj->type == OBJTYPE_WEAPON) { - struct weaponobj *weapon = child->weapon; - - if (i == weapon->weaponnum && (obj->flags3 & OBJFLAG3_PLAYERUNDROPPABLE)) { - canremove = false; - break; - } - } - - child = child->next; - } - - if (canremove) { - invRemoveItemByNum(i); - } - } - weaponCreateForPlayerDrop(i); -#endif } } } diff --git a/src/game/radar.c b/src/game/radar.c index a07471ffa..ea345133c 100644 --- a/src/game/radar.c +++ b/src/game/radar.c @@ -253,18 +253,12 @@ Gfx *radarRender(Gfx *gdl) playernum = g_Vars.currentplayernum; playercount = PLAYERCOUNT(); - if (g_Vars.mplayerisrunning) { - if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_NORADAR)) { - return gdl; - } + if (g_MpSetup.options & MPOPTION_NORADAR) { + return gdl; + } - if ((g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.displayoptions & 0x00000004) == 0) { - return gdl; - } - } else if ((g_Vars.currentplayer->devicesactive & ~g_Vars.currentplayer->devicesinhibit & DEVICE_RTRACKER) == 0) { - if (!g_MissionConfig.iscoop || !g_Vars.coopradaron) { - return gdl; - } + if ((g_PlayerConfigsArray[g_Vars.currentplayerstats->mpindex].base.displayoptions & 0x00000004) == 0) { + return gdl; } if (g_Vars.currentplayer->mpmenuon || g_Vars.currentplayer->isdead) { @@ -348,43 +342,22 @@ Gfx *radarRender(Gfx *gdl) } } - // Draw dots for coop AI buddies - if (!g_Vars.normmplayerisrunning && g_MissionConfig.iscoop) { - for (i = 0; i < g_Vars.numaibuddies && i < 4; i++) { - struct prop *prop = g_Vars.aibuddies[i]; - - if (prop - && prop->type == PROPTYPE_CHR - && prop->chr - && prop->chr->actiontype != ACT_DIE - && prop->chr->actiontype != ACT_DEAD) { - pos.x = prop->pos.x - g_Vars.currentplayer->prop->pos.x; - pos.y = prop->pos.y - g_Vars.currentplayer->prop->pos.y; - pos.z = prop->pos.z - g_Vars.currentplayer->prop->pos.z; - - gdl = radarDrawDot(gdl, prop, &pos, 0x00ff0000, 0, 0); - } - } - } - // Draw dots for MP simulants - if (g_Vars.normmplayerisrunning != 0) { - for (i = 0; i < g_BotCount; i++) { - if (!chrIsDead(g_MpBotChrPtrs[i]) - && (g_MpBotChrPtrs[i]->hidden & CHRHFLAG_CLOAKED) == 0 - && scenarioRadarChr(&gdl, g_MpBotChrPtrs[i]->prop) == false) { - pos.x = g_MpBotChrPtrs[i]->prop->pos.x - g_Vars.currentplayer->prop->pos.x; - pos.y = g_MpBotChrPtrs[i]->prop->pos.y - g_Vars.currentplayer->prop->pos.y; - pos.z = g_MpBotChrPtrs[i]->prop->pos.z - g_Vars.currentplayer->prop->pos.z; + for (i = 0; i < g_BotCount; i++) { + if (!chrIsDead(g_MpBotChrPtrs[i]) + && (g_MpBotChrPtrs[i]->hidden & CHRHFLAG_CLOAKED) == 0 + && scenarioRadarChr(&gdl, g_MpBotChrPtrs[i]->prop) == false) { + pos.x = g_MpBotChrPtrs[i]->prop->pos.x - g_Vars.currentplayer->prop->pos.x; + pos.y = g_MpBotChrPtrs[i]->prop->pos.y - g_Vars.currentplayer->prop->pos.y; + pos.z = g_MpBotChrPtrs[i]->prop->pos.z - g_Vars.currentplayer->prop->pos.z; - if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_TEAMSENABLED)) { - colour = g_TeamColours[radarGetTeamIndex(g_MpBotChrPtrs[i]->team)]; - } else { - colour = 0x00ff0000; - } - - gdl = radarDrawDot(gdl, g_MpBotChrPtrs[i]->prop, &pos, colour, 0, 0); + if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_TEAMSENABLED)) { + colour = g_TeamColours[radarGetTeamIndex(g_MpBotChrPtrs[i]->team)]; + } else { + colour = 0x00ff0000; } + + gdl = radarDrawDot(gdl, g_MpBotChrPtrs[i]->prop, &pos, colour, 0, 0); } } diff --git a/src/game/setup.c b/src/game/setup.c index 1667c54a9..2066a59d1 100644 --- a/src/game/setup.c +++ b/src/game/setup.c @@ -706,10 +706,6 @@ void setupCreateMine(struct mineobj *mine, s32 cmdindex) setupCreateObject(&mine->base, cmdindex); - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - mine->base.hidden = (mine->base.hidden & 0x0fffffff) | OBJHFLAG_20000000; - } - mine->base.prop->forcetick = true; } @@ -1272,12 +1268,6 @@ void setupLoadFiles(s32 stagenum) // Count the number of chrs and objects so enough model slots can be allocated numchrs += setupCountCommandType(OBJTYPE_CHR); - if (!g_Vars.normmplayerisrunning && g_MissionConfig.iscoop && g_Vars.numaibuddies > 0) { - // @bug? The Hotshot buddy has two guns, but only one is counted here. - numchrs += g_Vars.numaibuddies; - numobjs += g_Vars.numaibuddies; // the buddy's weapon - } - numobjs += setupCountCommandType(OBJTYPE_WEAPON); numobjs += setupCountCommandType(OBJTYPE_KEY); numobjs += setupCountCommandType(OBJTYPE_HAT); @@ -1350,8 +1340,7 @@ void setupCreateProps(s32 stagenum) s32 j; s32 liftnum = 0; - withhovercars = !(stagenum == STAGE_EXTRACTION || stagenum == STAGE_DEFECTION) - || !(g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0); + withhovercars = true; escstepx = 0; escstepy = 0; @@ -1376,12 +1365,6 @@ void setupCreateProps(s32 stagenum) numchrs += setupCountCommandType(OBJTYPE_CHR); - if (g_Vars.normmplayerisrunning == false - && g_MissionConfig.iscoop - && g_Vars.numaibuddies > 0) { - numchrs += g_Vars.numaibuddies; - } - chrmgrConfigure(numchrs); } else { chrmgrConfigure(0); diff --git a/src/game/sight.c b/src/game/sight.c index 228050a8b..15d2d6dc5 100644 --- a/src/game/sight.c +++ b/src/game/sight.c @@ -37,14 +37,6 @@ bool sightIsPropFriendly(struct prop *prop) return false; } - if (g_Vars.coopplayernum >= 0 && prop->type == PROPTYPE_PLAYER) { - return true; - } - - if (g_Vars.antiplayernum >= 0 && prop->type == PROPTYPE_PLAYER) { - return false; - } - if (g_Vars.normmplayerisrunning == false && prop->chr && (prop->chr->hidden2 & CHRH2FLAG_BLUESIGHT)) { @@ -1433,7 +1425,7 @@ Gfx *sightDraw(Gfx *gdl, bool sighton, s32 sight) } #endif - if (PLAYERCOUNT() >= 2 && g_Vars.coopplayernum < 0 && g_Vars.antiplayernum < 0) { + if (PLAYERCOUNT() >= 2) { sight = SIGHT_DEFAULT; } diff --git a/src/game/wallhitreset.c b/src/game/wallhitreset.c index 11dd79b95..1eb82e062 100644 --- a/src/game/wallhitreset.c +++ b/src/game/wallhitreset.c @@ -35,8 +35,6 @@ void wallhitReset(void) if (IS4MB()) { type = 0; - } else if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() == 2) { - type = 1; } else if (PLAYERCOUNT() >= 2) { type = 0; } @@ -54,18 +52,6 @@ void wallhitReset(void) var8009cc74 = 15; g_WallhitTargetBloodRatio = 0.3f; break; - case 1: - // 2 player coop/anti - g_WallhitsMax = 200; - g_MinPropWallhits = 25; - g_MaxPropWallhits = 100; - g_MinBgWallhitsPerRoom = 4; - g_MaxBgWallhitsPerRoom = 40; - var8009cc6c = 80; - var8009cc70 = 20; - var8009cc74 = 30; - g_WallhitTargetBloodRatio = 0.4f; - break; case 2: default: // 1 player 8MB diff --git a/src/lib/main.c b/src/lib/main.c index 8c1cbf8e8..a572028af 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -1176,28 +1176,7 @@ void mainLoop(void) g_Vars.lvmpbotlevel = 1; } - if (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) { - g_MpSetup.chrslots = 0x03; - mpReset(); - } else if (g_Vars.perfectbuddynum) { - mpReset(); - } else if (g_Vars.mplayerisrunning == false - && (numplayers >= 2 || g_Vars.lvmpbotlevel || argFindByPrefix(1, "-play"))) { - g_MpSetup.chrslots = 1; - - if (numplayers >= 2) { - g_MpSetup.chrslots |= 1 << 1; - } - - if (numplayers >= 3) { - g_MpSetup.chrslots |= 1 << 2; - } - - if (numplayers >= 4) { - g_MpSetup.chrslots |= 1 << 3; - } - - g_MpSetup.stagenum = g_StageNum; + if (g_Vars.perfectbuddynum) { mpReset(); } diff --git a/src/lib/music.c b/src/lib/music.c index 5033d9701..8fcddcde0 100644 --- a/src/lib/music.c +++ b/src/lib/music.c @@ -1027,10 +1027,7 @@ void musicTick(void) bool playnrg = false; if (!g_SndDisabled) { - if (g_MusicDeathTimer240 > 0 - && (g_Vars.normmplayerisrunning - || (g_Vars.antiplayernum >= 0 && !g_Vars.bond->isdead) - || (g_Vars.coopplayernum >= 0 && (!g_Vars.bond->isdead || !g_Vars.coop->isdead)))) { + if (g_MusicDeathTimer240 > 0) { // Someone is dying in MP, or anti is dying, or *one* person is dying in coop g_MusicSilenceTimer60 = 0; g_MusicDeathTimer240 -= g_Vars.lvupdate240; diff --git a/src/lib/vi.c b/src/lib/vi.c index 1c8c7746a..7e738586e 100644 --- a/src/lib/vi.c +++ b/src/lib/vi.c @@ -210,16 +210,6 @@ void viReset(s32 stagenum) fbsize = 320 * 240; #endif g_Vars.fourmeg2player = true; - } else if ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) && PLAYERCOUNT() == 2) { -#if VERSION >= VERSION_JPN_FINAL - fbsize = 320 * 220 * 2; -#elif VERSION >= VERSION_PAL_FINAL - fbsize = 320 * 266 * 2; -#elif VERSION >= VERSION_PAL_BETA - fbsize = 320 * 252 * 2; -#else - fbsize = 320 * 220 * 2; -#endif } } @@ -2526,18 +2516,7 @@ Gfx *viRenderViewportEdges(Gfx *gdl) gDPSetScissor(gdl++, G_SC_NON_INTERLACE, 0, 0, viGetWidth(), viGetHeight()); gDPSetFillColor(gdl++, GPACK_RGBA5551(0, 0, 0, 1) << 16 | GPACK_RGBA5551(0, 0, 0, 1)); -#if VERSION >= VERSION_NTSC_1_0 - if (PLAYERCOUNT() == 1 - || ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && playerHasSharedViewport() && g_Vars.currentplayernum == 0)) -#else - if (PLAYERCOUNT() == 1 - || ((g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0) - && ( - (g_InCutscene && !g_MainIsEndscreen) || menuGetRoot() == MENUROOT_COOPCONTINUE - ) && g_Vars.currentplayernum == 0)) -#endif - { + if (PLAYERCOUNT() == 1) { // Single viewport if (viGetViewTop() > 0) { // Fill above