Files
perfect-dark/src/game/bodyreset.c
T
2022-11-11 17:42:42 +10:00

104 lines
2.3 KiB
C

#include <ultra64.h>
#include "constants.h"
#include "game/body.h"
#include "game/cheats.h"
#include "game/chrai.h"
#include "game/game_00b820.h"
#include "game/playerreset.h"
#include "game/setuputils.h"
#include "bss.h"
#include "lib/memp.h"
#include "lib/rng.h"
#include "data.h"
#include "types.h"
struct stageheadlimit g_StageHeadLimits[3] = {
{ STAGE_INFILTRATION, 5 },
{ STAGE_RESCUE, 4 },
{ STAGE_ESCAPE, 5 },
};
u32 var80061708 = 0x00000000;
u32 var8006170c = 0x00000000;
void bodiesReset(s32 stagenum)
{
s32 *headsavailablelist;
s32 headsavailablelen;
bool done;
s32 i;
s32 j;
for (i = 0; g_HeadsAndBodies[i].filenum; i++) {
g_HeadsAndBodies[i].filedata = NULL;
}
var80062c80 = random() % g_NumBondBodies;
var80062b14 = 0;
var80062b18 = 0;
if (PLAYERCOUNT() >= 2) {
g_NumActiveHeadsPerGender = 4;
} else {
// 950
g_NumActiveHeadsPerGender = 8;
for (i = 0; i < ARRAYCOUNT(g_StageHeadLimits); i++) {
if (g_StageHeadLimits[i].stagenum == stagenum) {
g_NumActiveHeadsPerGender = g_StageHeadLimits[i].maxheads;
}
}
}
// Male heads
if (cheatIsActive(CHEAT_TEAMHEADSONLY)) {
headsavailablelist = g_MaleGuardTeamHeads;
headsavailablelen = g_NumMaleGuardTeamHeads;
} else {
headsavailablelist = g_MaleGuardHeads;
headsavailablelen = g_NumMaleGuardHeads;
}
for (i = 0; i < g_NumActiveHeadsPerGender; i++) {
do {
done = true;
g_ActiveMaleHeads[i] = headsavailablelist[random() % headsavailablelen];
if (headsavailablelen > g_NumActiveHeadsPerGender) {
for (j = 0; j < i; j++) {
if (g_ActiveMaleHeads[i] == g_ActiveMaleHeads[j]) {
done = false;
}
}
}
} while (!done);
}
// Female heads
if (cheatIsActive(CHEAT_TEAMHEADSONLY)) {
headsavailablelist = g_FemaleGuardTeamHeads;
headsavailablelen = g_NumFemaleGuardTeamHeads;
} else {
headsavailablelist = g_FemaleGuardHeads;
headsavailablelen = g_NumFemaleGuardHeads;
}
for (i = 0; i < g_NumActiveHeadsPerGender; i++) {
do {
done = true;
g_ActiveFemaleHeads[i] = headsavailablelist[random() % headsavailablelen];
if (headsavailablelen > g_NumActiveHeadsPerGender) {
for (j = 0; j < i; j++) {
if (g_ActiveFemaleHeads[i] == g_ActiveFemaleHeads[j]) {
done = false;
}
}
}
} while (!done);
}
g_ActiveMaleHeadsIndex = 0;
g_ActiveFemaleHeadsIndex = 0;
}