Files
perfect-dark/src/game/playermgr.c
T
2022-10-22 18:42:45 +10:00

1337 lines
42 KiB
C

#include <ultra64.h>
#include "constants.h"
#include "game/cheats.h"
#include "game/bondgun.h"
#include "game/player.h"
#include "game/playermgr.h"
#include "game/propobj.h"
#include "bss.h"
#include "lib/memp.h"
#include "lib/rng.h"
#include "data.h"
#include "types.h"
void playermgrInit(void)
{
s32 i;
for (i = 0; i < 4; i++) {
g_Vars.playerstats[i].damagescale = 1;
}
g_Vars.bondplayernum = 0;
g_Vars.coopplayernum = -1;
g_Vars.antiplayernum = -1;
}
void playermgrReset(void)
{
g_Vars.players[0] = NULL;
g_Vars.players[1] = NULL;
g_Vars.players[2] = NULL;
g_Vars.players[3] = NULL;
g_Vars.currentplayer = NULL;
g_Vars.currentplayerindex = 0;
g_Vars.currentplayerstats = NULL;
g_Vars.currentplayernum = 0;
g_Vars.playerorder[0] = 0;
g_Vars.playerorder[1] = 1;
g_Vars.playerorder[2] = 2;
g_Vars.playerorder[3] = 3;
g_Vars.bond = NULL;
g_Vars.coop = NULL;
g_Vars.anti = NULL;
}
void playermgrAllocatePlayers(s32 count)
{
g_Vars.players[0] = NULL;
g_Vars.players[1] = NULL;
g_Vars.players[2] = NULL;
g_Vars.players[3] = NULL;
if (count > 0) {
s32 i;
for (i = 0; i < count; i++) {
playermgrAllocatePlayer(i);
}
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);
if (g_Vars.fourmeg2player) {
playermgrSetViewSize(playerGetFbWidth(), playerGetFbHeight() * 2);
} else {
playermgrSetViewSize(playerGetFbWidth(), playerGetFbHeight());
}
g_Vars.coop = NULL;
g_Vars.anti = NULL;
g_Vars.bond = g_Vars.players[0];
}
}
void playermgrAllocatePlayer(s32 index)
{
struct hand hand = {
{0},
0,
0,
1, // gunon
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1, // unk06ac
0,
0,
0,
0,
1, // unk06c0
0,
0,
0,
0,
1, // unk06d4
0,
0,
0,
0,
1, // unk06e8
0,
0,
0,
0,
0,
0,
-1, // unk0704
0,
1, // unk070c
0,
0,
0,
0,
0,
0,
PAL ? -16.750415802002f : -19.999996185303f, // unk0728
0,
PAL ? 16.750415802002f : 19.999996185303f, // unk0730
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
-1, // unk0770
0,
0,
-1, // unk077c
0,
0,
-1, // unk0788
0,
0,
-1, // unk0794
0,
1, // unk079c
0,
0,
1, // unk07a8
0,
0,
1, // unk07b4
0,
0,
1, // unk07c0
0,
0,
0,
1, // unk07d0
1, // unk07d4
0,
0,
0,
0,
0,
0,
0,
0,
{0, 0, 1000}, // unk07f8
NULL, // audiohandle2
0,
0,
0,
{-1}, // beam.age
};
s32 i;
g_Vars.players[index] = mempAlloc(sizeof(struct player), MEMPOOL_STAGE);
g_Vars.players[index]->cameramode = CAMERAMODE_DEFAULT;
g_Vars.players[index]->memcampos.x = 0;
g_Vars.players[index]->memcampos.y = 0;
g_Vars.players[index]->memcampos.z = 0;
g_Vars.players[index]->memcamroom = -1;
g_Vars.players[index]->cam_pos.x = 0;
g_Vars.players[index]->cam_pos.y = 0;
g_Vars.players[index]->cam_pos.z = 0;
g_Vars.players[index]->cam_room = 1;
g_Vars.players[index]->globaldrawworldoffset.x = 0;
g_Vars.players[index]->globaldrawworldoffset.y = 0;
g_Vars.players[index]->globaldrawworldoffset.z = 0;
g_Vars.players[index]->globaldrawcameraoffset.x = 0;
g_Vars.players[index]->globaldrawcameraoffset.y = 0;
g_Vars.players[index]->globaldrawcameraoffset.z = 0;
g_Vars.players[index]->globaldrawworldbgoffset.x = 0;
g_Vars.players[index]->globaldrawworldbgoffset.y = 0;
g_Vars.players[index]->globaldrawworldbgoffset.z = 0;
g_Vars.players[index]->vv_manground = 0;
g_Vars.players[index]->vv_ground = 0;
g_Vars.players[index]->prop = NULL;
g_Vars.players[index]->bondperimenabled = true;
g_Vars.players[index]->periminfo.header.type = GEOTYPE_CYL;
g_Vars.players[index]->periminfo.header.flags = GEOFLAG_WALL | GEOFLAG_BLOCK_SHOOT;
g_Vars.players[index]->periminfo.ymax = 0;
g_Vars.players[index]->periminfo.ymin = 0;
g_Vars.players[index]->periminfo.x = 0;
g_Vars.players[index]->periminfo.z = 0;
g_Vars.players[index]->periminfo.radius = 0;
g_Vars.players[index]->bondactivateorreload = 0;
g_Vars.players[index]->model00d4 = 0;
g_Vars.players[index]->isdead = false;
g_Vars.players[index]->aborted = false;
g_Vars.players[index]->bondhealth = 1;
g_Vars.players[index]->stealhealth = -1;
g_Vars.players[index]->oldhealth = 1;
g_Vars.players[index]->oldarmour = 0;
g_Vars.players[index]->apparenthealth = 1;
g_Vars.players[index]->apparentarmour = 0;
g_Vars.players[index]->damageshowtime = -1;
g_Vars.players[index]->healthshowtime = -1;
g_Vars.players[index]->shieldshowtime = -1;
g_Vars.players[index]->healthshowmode = HEALTHSHOWMODE_HIDDEN;
g_Vars.players[index]->docentreupdown = false;
g_Vars.players[index]->lastupdown60 = 0;
g_Vars.players[index]->prevupdown = 0;
g_Vars.players[index]->movecentrerelease = 0;
g_Vars.players[index]->lookaheadcentreenabled = true;
g_Vars.players[index]->automovecentreenabled = true;
g_Vars.players[index]->fastmovecentreenabled = false;
g_Vars.players[index]->automovecentre = true;
g_Vars.players[index]->insightaimmode = false;
g_Vars.players[index]->autoyaimenabled = true;
g_Vars.players[index]->autoaimy = 0;
g_Vars.players[index]->autoyaimprop = NULL;
g_Vars.players[index]->autoyaimtime60 = -1;
g_Vars.players[index]->autoxaimenabled = true;
g_Vars.players[index]->autoaimx = 0;
g_Vars.players[index]->autoxaimprop = NULL;
g_Vars.players[index]->autoxaimtime60 = -1;
g_Vars.players[index]->vv_theta = 0;
g_Vars.players[index]->speedtheta = 0;
g_Vars.players[index]->speedthetacontrol = 0;
g_Vars.players[index]->vv_costheta = 1;
g_Vars.players[index]->vv_sintheta = 0;
g_Vars.players[index]->vv_verta = -4;
g_Vars.players[index]->vv_verta360 = -229.21960449219f;
g_Vars.players[index]->speedverta = 0;
g_Vars.players[index]->vv_cosverta = 1;
g_Vars.players[index]->vv_sinverta = 0;
g_Vars.players[index]->bondfadetime60 = -1;
g_Vars.players[index]->bondfadetimemax60 = -1;
g_Vars.players[index]->bondfadefracold = 0;
g_Vars.players[index]->bondfadefracnew = 0;
g_Vars.players[index]->bondbreathing = 0;
g_Vars.players[index]->playwatchup = true;
g_Vars.players[index]->colourscreenred = 0xff;
g_Vars.players[index]->colourscreengreen = 0xff;
g_Vars.players[index]->colourscreenblue = 0xff;
g_Vars.players[index]->colourscreenfrac = 0;
g_Vars.players[index]->colourfadetime60 = -1;
g_Vars.players[index]->colourfadetimemax60 = -1;
g_Vars.players[index]->colourfaderedold = 0xff;
g_Vars.players[index]->colourfaderednew = 0xff;
g_Vars.players[index]->colourfadegreenold = 0xff;
g_Vars.players[index]->colourfadegreennew = 0xff;
g_Vars.players[index]->colourfadeblueold = 0xff;
g_Vars.players[index]->colourfadebluenew = 0xff;
g_Vars.players[index]->colourfadefracold = 0;
g_Vars.players[index]->colourfadefracnew = 0;
g_Vars.players[index]->bondtype = OUTFIT_DEFAULT;
g_Vars.players[index]->startnewbonddie = true;
g_Vars.players[index]->redbloodfinished = false;
g_Vars.players[index]->deathanimfinished = false;
g_Vars.players[index]->controldef = 2;
g_Vars.players[index]->resetheadpos = true;
g_Vars.players[index]->resetheadrot = true;
g_Vars.players[index]->resetheadtick = true;
g_Vars.players[index]->headanim = 0;
g_Vars.players[index]->headdamp = (PAL ? 0.9166f : 0.93f);
g_Vars.players[index]->headwalkingtime60 = 0;
g_Vars.players[index]->headamplitude = 1;
g_Vars.players[index]->sideamplitude = 1;
g_Vars.players[index]->headpos.x = 0;
g_Vars.players[index]->headpos.y = 0;
g_Vars.players[index]->headpos.z = 0;
g_Vars.players[index]->headlook.x = 0;
g_Vars.players[index]->headlook.y = 0;
g_Vars.players[index]->headlook.z = 1;
g_Vars.players[index]->headup.x = 0;
g_Vars.players[index]->headup.y = 1;
g_Vars.players[index]->headup.z = 0;
g_Vars.players[index]->headpossum.x = 0;
g_Vars.players[index]->headpossum.y = 0;
g_Vars.players[index]->headpossum.z = 0;
g_Vars.players[index]->headlooksum.x = 0;
g_Vars.players[index]->headlooksum.y = 0;
g_Vars.players[index]->headlooksum.z = (PAL ? 11.990406036377f : 14.285716056824f);
g_Vars.players[index]->headupsum.x = 0;
g_Vars.players[index]->headupsum.y = (PAL ? 11.990406036377f : 14.285716056824f);
g_Vars.players[index]->headupsum.z = 0;
g_Vars.players[index]->headbodyoffset.x = 0;
g_Vars.players[index]->headbodyoffset.y = 0;
g_Vars.players[index]->headbodyoffset.z = 0;
g_Vars.players[index]->standheight = 0;
g_Vars.players[index]->standbodyoffset.x = 0;
g_Vars.players[index]->standbodyoffset.y = 0;
g_Vars.players[index]->standbodyoffset.z = 0;
g_Vars.players[index]->standfrac = 0;
g_Vars.players[index]->standlook[0].x = 0;
g_Vars.players[index]->standlook[0].y = 0;
g_Vars.players[index]->standlook[0].z = 1;
g_Vars.players[index]->standlook[1].x = 0;
g_Vars.players[index]->standlook[1].y = 0;
g_Vars.players[index]->standlook[1].z = 1;
g_Vars.players[index]->standup[0].x = 0;
g_Vars.players[index]->standup[0].y = 1;
g_Vars.players[index]->standup[0].z = 0;
g_Vars.players[index]->standup[1].x = 0;
g_Vars.players[index]->standup[1].y = 1;
g_Vars.players[index]->standup[1].z = 0;
g_Vars.players[index]->standcnt = 0;
g_Vars.players[index]->devicesactive = 0;
g_Vars.players[index]->devicesinhibit = 0;
g_Vars.players[index]->floorflags = 0;
for (i = 0; i < 2; i++) {
g_Vars.players[index]->viewport[i].vp.vscale[0] = 640;
g_Vars.players[index]->viewport[i].vp.vscale[1] = (PAL ? 544 : 480);
g_Vars.players[index]->viewport[i].vp.vscale[2] = 511;
g_Vars.players[index]->viewport[i].vp.vscale[3] = 0;
g_Vars.players[index]->viewport[i].vp.vtrans[0] = 640;
g_Vars.players[index]->viewport[i].vp.vtrans[1] = (PAL ? 544 : 480);
g_Vars.players[index]->viewport[i].vp.vtrans[2] = 511;
g_Vars.players[index]->viewport[i].vp.vtrans[3] = 0;
}
g_Vars.players[index]->viewwidth = 100;
g_Vars.players[index]->viewheight = 100;
g_Vars.players[index]->viewleft = 0;
g_Vars.players[index]->viewtop = 0;
g_Vars.players[index]->slayerrocket = NULL;
g_Vars.players[index]->badrockettime = 0;
#if VERSION >= VERSION_JPN_FINAL
g_Vars.players[index]->visionmode = VISIONMODE_NORMAL;
#endif
g_Vars.players[index]->gunctrl.gunmemtype = 0;
g_Vars.players[index]->gunctrl.gunmem = NULL;
g_Vars.players[index]->gunctrl.gunmodeldef = NULL;
g_Vars.players[index]->gunctrl.weaponnum = WEAPON_NONE;
g_Vars.players[index]->gunctrl.prevweaponnum = -1;
g_Vars.players[index]->gunctrl.switchtoweaponnum = -1;
g_Vars.players[index]->gunctrl.gunmemowner = GUNMEMOWNER_CHRBODY;
g_Vars.players[index]->gunctrl.gunlocktimer = 0;
g_Vars.players[index]->gunctrl.action = 0;
g_Vars.players[index]->gunctrl.passivemode = false;
g_Vars.players[index]->hands[0] = hand;
g_Vars.players[index]->hands[1] = hand;
g_Vars.players[index]->gunposamplitude = 1;
g_Vars.players[index]->gunxamplitude = 1;
g_Vars.players[index]->doautoselect = false;
g_Vars.players[index]->playertriggeron = false;
g_Vars.players[index]->playertriggerprev = 0;
g_Vars.players[index]->playertrigtime240 = 0;
g_Vars.players[index]->curguntofire = 0;
g_Vars.players[index]->gunshadecol[0] = 0xff;
g_Vars.players[index]->gunshadecol[1] = 0xff;
g_Vars.players[index]->gunshadecol[2] = 0xff;
g_Vars.players[index]->gunshadecol[3] = 0;
g_Vars.players[index]->resetshadecol = true;
g_Vars.players[index]->aimtype = 0;
g_Vars.players[index]->lookingatprop.prop = NULL;
for (i = 0; i < 4; i++) {
g_Vars.players[index]->trackedprops[i].prop = NULL;
}
g_Vars.players[index]->crosspos[0] = 0;
g_Vars.players[index]->crosspos[1] = 0;
g_Vars.players[index]->crosspossum[0] = 0;
g_Vars.players[index]->crosspossum[1] = 0;
g_Vars.players[index]->guncrossdamp = 0.9f;
g_Vars.players[index]->hands[HAND_LEFT].crosspos[0] = 0;
g_Vars.players[index]->hands[HAND_LEFT].crosspos[1] = 0;
g_Vars.players[index]->hands[HAND_LEFT].guncrosspossum[0] = 0;
g_Vars.players[index]->hands[HAND_LEFT].guncrosspossum[1] = 0;
g_Vars.players[index]->hands[HAND_RIGHT].crosspos[0] = 0;
g_Vars.players[index]->hands[HAND_RIGHT].crosspos[1] = 0;
g_Vars.players[index]->hands[HAND_RIGHT].guncrosspossum[0] = 0;
g_Vars.players[index]->hands[HAND_RIGHT].guncrosspossum[1] = 0;
g_Vars.players[index]->crosspos2[0] = 0;
g_Vars.players[index]->crosspos2[1] = 0;
g_Vars.players[index]->crosssum2[0] = 0;
g_Vars.players[index]->crosssum2[1] = 0;
g_Vars.players[index]->gunaimdamp = 0.9f;
g_Vars.players[index]->aimangle.x = 0;
g_Vars.players[index]->aimangle.y = -M_PI;
g_Vars.players[index]->aimangle.z = 0;
g_Vars.players[index]->copiedgoldeneye = 0;
g_Vars.players[index]->gunammooff = 0;
g_Vars.players[index]->gunsync = 0;
g_Vars.players[index]->syncchange = 0;
g_Vars.players[index]->synccount = 0;
g_Vars.players[index]->syncoffset = 0;
g_Vars.players[index]->cyclesum = 0;
g_Vars.players[index]->gunampsum = 0;
g_Vars.players[index]->gunzoomfovs[0] = 15;
g_Vars.players[index]->gunzoomfovs[1] = 60;
g_Vars.players[index]->gunzoomfovs[2] = 30;
g_Vars.players[index]->lastroomforoffset = -1;
g_Vars.players[index]->c_screenwidth = 320;
g_Vars.players[index]->c_screenheight = PAL ? 272 : 240;
g_Vars.players[index]->c_screenleft = 0;
g_Vars.players[index]->c_screentop = 0;
g_Vars.players[index]->c_perspnear = 10;
g_Vars.players[index]->c_perspfovy = 46;
g_Vars.players[index]->c_perspaspect = 1;
g_Vars.players[index]->c_halfwidth = 160;
g_Vars.players[index]->c_halfheight = PAL ? 136 : 120;
g_Vars.players[index]->c_scalex = 1;
g_Vars.players[index]->c_scaley = 1;
g_Vars.players[index]->c_recipscalex = 1;
g_Vars.players[index]->c_recipscaley = 1;
g_Vars.players[index]->mtxl1738 = NULL;
g_Vars.players[index]->mtxl173c = NULL;
g_Vars.players[index]->worldtoscreenmtx = NULL;
g_Vars.players[index]->c_viewfmdynticknum = -1;
g_Vars.players[index]->mtxf1748 = NULL;
g_Vars.players[index]->projectionmtx = NULL;
g_Vars.players[index]->perspmtxl = NULL;
g_Vars.players[index]->mtxf1754 = NULL;
g_Vars.players[index]->orthomtxl = NULL;
g_Vars.players[index]->lookat = NULL;
g_Vars.players[index]->prevworldtoscreenmtx = NULL;
g_Vars.players[index]->c_prevviewfmdynticknum = -1;
g_Vars.players[index]->prevprojectionmtx = NULL;
g_Vars.players[index]->unk0484 = NULL;
g_Vars.players[index]->unk0488 = NULL;
g_Vars.players[index]->c_scalelod60 = 1;
g_Vars.players[index]->c_scalelod = 1;
g_Vars.players[index]->c_lodscalez = 1;
g_Vars.players[index]->c_lodscalezu32 = 0x10000;
g_Vars.players[index]->screenxminf = 0;
g_Vars.players[index]->screenyminf = 0;
g_Vars.players[index]->screenxmaxf = 320;
g_Vars.players[index]->screenymaxf = PAL ? 272 : 240;
g_Vars.players[index]->gunsightoff = 0;
g_Vars.players[index]->unk1834 = 0;
g_Vars.players[index]->unk1838 = 0;
g_Vars.players[index]->unk183c = 0;
g_Vars.players[index]->zoomintime = 0;
g_Vars.players[index]->zoomintimemax = 0;
g_Vars.players[index]->zoominfovy = 60;
g_Vars.players[index]->zoominfovyold = 60;
g_Vars.players[index]->zoominfovynew = 60;
g_Vars.players[index]->fovy = 60;
g_Vars.players[index]->aspect = 640.0f / (PAL ? 544.0f : 480.0f);
g_Vars.players[index]->hudmessoff = 0;
g_Vars.players[index]->bondmesscnt = -1;
g_Vars.players[index]->weapons = NULL;
g_Vars.players[index]->equipment = NULL;
g_Vars.players[index]->equipmaxitems = 0;
g_Vars.players[index]->equipallguns = false;
g_Vars.players[index]->equipcuritem = 0;
g_Vars.players[index]->angleoffset = 0;
g_Vars.players[index]->invincible = cheatIsActive(CHEAT_INVINCIBLE);
g_Vars.players[index]->healthdamagetype = 7;
g_Vars.players[index]->vv_height = 1;
g_Vars.players[index]->vv_eyeheight = 1;
g_Vars.players[index]->vv_headheight = 1;
g_Vars.players[index]->bondleandown = 0;
g_Vars.players[index]->mpmenuon = false;
g_Vars.players[index]->damagetype = 7;
g_Vars.players[index]->deathcount = 0;
g_Vars.players[index]->lastkilltime60 = -1;
g_Vars.players[index]->lastkilltime60_2 = -1;
g_Vars.players[index]->lastkilltime60_3 = -1;
g_Vars.players[index]->lastkilltime60_4 = -1;
g_Vars.players[index]->healthdisplaytime60 = 0;
g_Vars.players[index]->chrmuzzlelast[0] = 0;
g_Vars.players[index]->chrmuzzlelast[1] = 0;
g_Vars.players[index]->healthscale = 1;
g_Vars.players[index]->armourscale = 1;
g_Vars.players[index]->haschrbody = false;
g_Vars.players[index]->pausemode = PAUSEMODE_UNPAUSED;
g_Vars.players[index]->pausetime60 = 0;
g_Vars.players[index]->activatetimelast = 0;
g_Vars.players[index]->activatetimethis = 0;
g_Vars.players[index]->bondmovemode = MOVEMODE_WALK;
g_Vars.players[index]->bondtankthetaspeedsum = 0;
g_Vars.players[index]->bondtankverta = 0;
g_Vars.players[index]->bondtankvertasum = 0;
g_Vars.players[index]->bondturrettheta = 0;
g_Vars.players[index]->bondturretthetasum = 0;
g_Vars.players[index]->bondturretspeedsum = 0;
g_Vars.players[index]->bondturretside = 0;
g_Vars.players[index]->bondturretchange = 0;
g_Vars.players[index]->bondtankslowtime = 0;
g_Vars.players[index]->hoverbike = NULL;
g_Vars.players[index]->bondonground = false;
g_Vars.players[index]->tank = NULL;
g_Vars.players[index]->unk1af0 = NULL;
g_Vars.players[index]->bondonturret = 0;
g_Vars.players[index]->grabbedprop = NULL;
g_Vars.players[index]->bondtankexplode = false;
g_Vars.players[index]->tickdiefinished = false;
g_Vars.players[index]->introanimnum = 0;
g_Vars.players[index]->lastsighton = 0;
for (i = 0; i < 4; i++) {
g_Vars.players[index]->targetset[i] = 0;
}
g_Vars.players[index]->sighttracktype = SIGHTTRACKTYPE_NONE;
g_Vars.players[index]->gunextraaimx = 0;
g_Vars.players[index]->gunextraaimy = 0;
g_Vars.players[index]->model.anim = &g_Vars.players[index]->unk01c0;
g_Vars.players[index]->eyespy = NULL;
g_Vars.players[index]->eyespydarts = 8;
g_Vars.players[index]->autocontrol_aimpad = 0;
g_Vars.players[index]->autocontrol_lookup = 0;
g_Vars.players[index]->autocontrol_dist = 0;
g_Vars.players[index]->autocontrol_walkspeed = 0;
g_Vars.players[index]->autocontrol_turnspeed = 0;
g_Vars.players[index]->autoerasertarget = NULL;
g_Vars.players[index]->autoeraserdist = -1;
g_Vars.players[index]->sighttimer240 = 0;
g_Vars.players[index]->aimtaptime = 0;
g_Vars.players[index]->cachedlookahead = -4;
g_Vars.players[index]->lookaheadframe = 0;
g_Vars.players[index]->numaibuddies = 0;
for (i = 0; i < MAX_BOTS; i++) {
g_Vars.players[index]->aibuddynums[i] = 0;
}
g_Vars.players[index]->teleportstate = TELEPORTSTATE_INACTIVE;
g_Vars.players[index]->teleporttime = 0;
g_Vars.players[index]->teleportpad = 0;
g_Vars.players[index]->commandingaibot = NULL;
g_Vars.players[index]->training = 0;
g_Vars.players[index]->deadtimer = -1;
g_Vars.players[index]->coopcanrestart = false;
g_Vars.players[index]->foot = 0;
g_Vars.players[index]->footstepdist = 0;
g_Vars.players[index]->unk1c64 = 0;
g_Vars.players[index]->bondextrapos.x = 0;
g_Vars.players[index]->bondextrapos.y = 0;
g_Vars.players[index]->bondextrapos.z = 0;
g_Vars.players[index]->disguised = false;
g_Vars.players[index]->dostartnewlife = false;
g_Vars.bondvisible = true;
g_Vars.bondcollisions = true;
}
void playermgrCalculateAiBuddyNums(void)
{
s32 i;
s32 playernum = g_Vars.currentplayernum;
s32 playercount = PLAYERCOUNT();
for (i = playercount; i < g_MpNumChrs; i++) {
if (g_MpAllChrConfigPtrs[i]->team == g_MpAllChrConfigPtrs[playernum]->team) {
g_Vars.players[playernum]->aibuddynums[g_Vars.players[playernum]->numaibuddies] = i;
g_Vars.players[playernum]->numaibuddies++;
}
}
}
void setCurrentPlayerNum(s32 playernum)
{
g_Vars.currentplayernum = playernum;
g_Vars.currentplayer = g_Vars.players[playernum];
g_Vars.currentplayerstats = &g_Vars.playerstats[playernum];
g_Vars.currentplayerindex = playermgrGetOrderOfPlayer(playernum);
}
s32 playermgrGetPlayerNumByProp(struct prop *prop)
{
s32 i;
for (i = 0; i < PLAYERCOUNT(); i++) {
if (prop == g_Vars.players[i]->prop) {
return i;
}
}
return -1;
}
void playermgrSetViewSize(s32 width, s32 height)
{
g_Vars.currentplayer->viewwidth = width;
g_Vars.currentplayer->viewheight = height;
}
void playermgrSetViewPosition(s32 viewleft, s32 viewtop)
{
g_Vars.currentplayer->viewleft = viewleft;
g_Vars.currentplayer->viewtop = viewtop;
}
void playermgrSetFovY(f32 fovy)
{
g_Vars.currentplayer->fovy = fovy;
}
void playermgrSetAspectRatio(f32 aspect)
{
g_Vars.currentplayer->aspect = aspect;
}
#if MATCHING
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel playermgrGetModelOfWeapon
.late_rodata
glabel var7f1b5168
.word playermgrGetModelOfWeapon+0x60 # f128b54
glabel var7f1b516c
.word playermgrGetModelOfWeapon+0x60 # f128b54
glabel var7f1b5170
.word playermgrGetModelOfWeapon+0x68 # f128b5c
glabel var7f1b5174
.word playermgrGetModelOfWeapon+0x98 # f128b8c
glabel var7f1b5178
.word playermgrGetModelOfWeapon+0xa0 # f128b94
glabel var7f1b517c
.word playermgrGetModelOfWeapon+0x70 # f128b64
glabel var7f1b5180
.word playermgrGetModelOfWeapon+0x78 # f128b6c
glabel var7f1b5184
.word playermgrGetModelOfWeapon+0x90 # f128b84
glabel var7f1b5188
.word playermgrGetModelOfWeapon+0x80 # f128b74
glabel var7f1b518c
.word playermgrGetModelOfWeapon+0x88 # f128b7c
glabel var7f1b5190
.word playermgrGetModelOfWeapon+0xa8 # f128b9c
glabel var7f1b5194
.word playermgrGetModelOfWeapon+0xd0 # f128bc4
glabel var7f1b5198
.word playermgrGetModelOfWeapon+0xd8 # f128bcc
glabel var7f1b519c
.word playermgrGetModelOfWeapon+0xe0 # f128bd4
glabel var7f1b51a0
.word playermgrGetModelOfWeapon+0xe8 # f128bdc
glabel var7f1b51a4
.word playermgrGetModelOfWeapon+0xb8 # f128bac
glabel var7f1b51a8
.word playermgrGetModelOfWeapon+0xc8 # f128bbc
glabel var7f1b51ac
.word playermgrGetModelOfWeapon+0xb0 # f128ba4
glabel var7f1b51b0
.word playermgrGetModelOfWeapon+0xc0 # f128bb4
glabel var7f1b51b4
.word playermgrGetModelOfWeapon+0xf0 # f128be4
glabel var7f1b51b8
.word playermgrGetModelOfWeapon+0xf8 # f128bec
glabel var7f1b51bc
.word playermgrGetModelOfWeapon+0x120 # f128c14
glabel var7f1b51c0
.word playermgrGetModelOfWeapon+0x118 # f128c0c
glabel var7f1b51c4
.word playermgrGetModelOfWeapon+0x108 # f128bfc
glabel var7f1b51c8
.word playermgrGetModelOfWeapon+0x100 # f128bf4
glabel var7f1b51cc
.word playermgrGetModelOfWeapon+0x110 # f128c04
glabel var7f1b51d0
.word playermgrGetModelOfWeapon+0x138 # f128c2c
glabel var7f1b51d4
.word playermgrGetModelOfWeapon+0x128 # f128c1c
glabel var7f1b51d8
.word playermgrGetModelOfWeapon+0x140 # f128c34
glabel var7f1b51dc
.word playermgrGetModelOfWeapon+0x130 # f128c24
glabel var7f1b51e0
.word playermgrGetModelOfWeapon+0x158 # f128c4c
glabel var7f1b51e4
.word playermgrGetModelOfWeapon+0x150 # f128c44
glabel var7f1b51e8
.word playermgrGetModelOfWeapon+0x170 # f128c64
glabel var7f1b51ec
.word playermgrGetModelOfWeapon+0x168 # f128c5c
glabel var7f1b51f0
.word playermgrGetModelOfWeapon+0x160 # f128c54
glabel var7f1b51f4
.word playermgrGetModelOfWeapon+0x1c8 # f128cbc
glabel var7f1b51f8
.word playermgrGetModelOfWeapon+0x188 # f128c7c
glabel var7f1b51fc
.word playermgrGetModelOfWeapon+0x190 # f128c84
glabel var7f1b5200
.word playermgrGetModelOfWeapon+0x198 # f128c8c
glabel var7f1b5204
.word playermgrGetModelOfWeapon+0x1a0 # f128c94
glabel var7f1b5208
.word playermgrGetModelOfWeapon+0x1a8 # f128c9c
glabel var7f1b520c
.word playermgrGetModelOfWeapon+0x1b0 # f128ca4
glabel var7f1b5210
.word playermgrGetModelOfWeapon+0x1b8 # f128cac
glabel var7f1b5214
.word playermgrGetModelOfWeapon+0x1c0 # f128cb4
glabel var7f1b5218
.word playermgrGetModelOfWeapon+0x148 # f128c3c
glabel var7f1b521c
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b5220
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b5224
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b5228
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b522c
.word playermgrGetModelOfWeapon+0x180 # f128c74
.text
/* f128af4: 28810052 */ slti $at,$a0,0x52
/* f128af8: 14200007 */ bnez $at,.L0f128b18
/* f128afc: 24010052 */ addiu $at,$zero,0x52
/* f128b00: 10810072 */ beq $a0,$at,.L0f128ccc
/* f128b04: 24010057 */ addiu $at,$zero,0x57
/* f128b08: 10810058 */ beq $a0,$at,.L0f128c6c
/* f128b0c: 00000000 */ nop
/* f128b10: 10000071 */ b .L0f128cd8
/* f128b14: 2881002d */ slti $at,$a0,0x2d
.L0f128b18:
/* f128b18: 28810032 */ slti $at,$a0,0x32
/* f128b1c: 14200005 */ bnez $at,.L0f128b34
/* f128b20: 24010051 */ addiu $at,$zero,0x51
/* f128b24: 10810067 */ beq $a0,$at,.L0f128cc4
/* f128b28: 00000000 */ nop
/* f128b2c: 1000006a */ b .L0f128cd8
/* f128b30: 2881002d */ slti $at,$a0,0x2d
.L0f128b34:
/* f128b34: 2c810032 */ sltiu $at,$a0,0x32
/* f128b38: 10200066 */ beqz $at,.L0f128cd4
/* f128b3c: 00047080 */ sll $t6,$a0,0x2
/* f128b40: 3c017f1b */ lui $at,%hi(var7f1b5168)
/* f128b44: 002e0821 */ addu $at,$at,$t6
/* f128b48: 8c2e5168 */ lw $t6,%lo(var7f1b5168)($at)
/* f128b4c: 01c00008 */ jr $t6
/* f128b50: 00000000 */ nop
/* f128b54: 03e00008 */ jr $ra
/* f128b58: 2402ffff */ addiu $v0,$zero,-1
/* f128b5c: 03e00008 */ jr $ra
/* f128b60: 240200f5 */ addiu $v0,$zero,0xf5
/* f128b64: 03e00008 */ jr $ra
/* f128b68: 240200f6 */ addiu $v0,$zero,0xf6
/* f128b6c: 03e00008 */ jr $ra
/* f128b70: 240200f7 */ addiu $v0,$zero,0xf7
/* f128b74: 03e00008 */ jr $ra
/* f128b78: 240200f8 */ addiu $v0,$zero,0xf8
/* f128b7c: 03e00008 */ jr $ra
/* f128b80: 240200f9 */ addiu $v0,$zero,0xf9
/* f128b84: 03e00008 */ jr $ra
/* f128b88: 240200fa */ addiu $v0,$zero,0xfa
/* f128b8c: 03e00008 */ jr $ra
/* f128b90: 240200fb */ addiu $v0,$zero,0xfb
/* f128b94: 03e00008 */ jr $ra
/* f128b98: 240200fc */ addiu $v0,$zero,0xfc
/* f128b9c: 03e00008 */ jr $ra
/* f128ba0: 240200fd */ addiu $v0,$zero,0xfd
/* f128ba4: 03e00008 */ jr $ra
/* f128ba8: 240200fe */ addiu $v0,$zero,0xfe
/* f128bac: 03e00008 */ jr $ra
/* f128bb0: 240200ff */ addiu $v0,$zero,0xff
/* f128bb4: 03e00008 */ jr $ra
/* f128bb8: 24020100 */ addiu $v0,$zero,0x100
/* f128bbc: 03e00008 */ jr $ra
/* f128bc0: 24020101 */ addiu $v0,$zero,0x101
/* f128bc4: 03e00008 */ jr $ra
/* f128bc8: 24020102 */ addiu $v0,$zero,0x102
/* f128bcc: 03e00008 */ jr $ra
/* f128bd0: 24020103 */ addiu $v0,$zero,0x103
/* f128bd4: 03e00008 */ jr $ra
/* f128bd8: 24020104 */ addiu $v0,$zero,0x104
/* f128bdc: 03e00008 */ jr $ra
/* f128be0: 24020105 */ addiu $v0,$zero,0x105
/* f128be4: 03e00008 */ jr $ra
/* f128be8: 24020106 */ addiu $v0,$zero,0x106
/* f128bec: 03e00008 */ jr $ra
/* f128bf0: 24020107 */ addiu $v0,$zero,0x107
/* f128bf4: 03e00008 */ jr $ra
/* f128bf8: 24020108 */ addiu $v0,$zero,0x108
/* f128bfc: 03e00008 */ jr $ra
/* f128c00: 24020109 */ addiu $v0,$zero,0x109
/* f128c04: 03e00008 */ jr $ra
/* f128c08: 2402010a */ addiu $v0,$zero,0x10a
/* f128c0c: 03e00008 */ jr $ra
/* f128c10: 2402010b */ addiu $v0,$zero,0x10b
/* f128c14: 03e00008 */ jr $ra
/* f128c18: 2402010c */ addiu $v0,$zero,0x10c
/* f128c1c: 03e00008 */ jr $ra
/* f128c20: 2402010d */ addiu $v0,$zero,0x10d
/* f128c24: 03e00008 */ jr $ra
/* f128c28: 24020195 */ addiu $v0,$zero,0x195
/* f128c2c: 03e00008 */ jr $ra
/* f128c30: 2402010f */ addiu $v0,$zero,0x10f
/* f128c34: 03e00008 */ jr $ra
/* f128c38: 2402010e */ addiu $v0,$zero,0x10e
/* f128c3c: 03e00008 */ jr $ra
/* f128c40: 2402010e */ addiu $v0,$zero,0x10e
/* f128c44: 03e00008 */ jr $ra
/* f128c48: 24020110 */ addiu $v0,$zero,0x110
/* f128c4c: 03e00008 */ jr $ra
/* f128c50: 24020112 */ addiu $v0,$zero,0x112
/* f128c54: 03e00008 */ jr $ra
/* f128c58: 24020115 */ addiu $v0,$zero,0x115
/* f128c5c: 03e00008 */ jr $ra
/* f128c60: 24020114 */ addiu $v0,$zero,0x114
/* f128c64: 03e00008 */ jr $ra
/* f128c68: 24020113 */ addiu $v0,$zero,0x113
.L0f128c6c:
/* f128c6c: 03e00008 */ jr $ra
/* f128c70: 24020011 */ addiu $v0,$zero,0x11
/* f128c74: 03e00008 */ jr $ra
/* f128c78: 2402012e */ addiu $v0,$zero,0x12e
/* f128c7c: 03e00008 */ jr $ra
/* f128c80: 24020117 */ addiu $v0,$zero,0x117
/* f128c84: 03e00008 */ jr $ra
/* f128c88: 24020118 */ addiu $v0,$zero,0x118
/* f128c8c: 03e00008 */ jr $ra
/* f128c90: 24020119 */ addiu $v0,$zero,0x119
/* f128c94: 03e00008 */ jr $ra
/* f128c98: 2402011a */ addiu $v0,$zero,0x11a
/* f128c9c: 03e00008 */ jr $ra
/* f128ca0: 2402011b */ addiu $v0,$zero,0x11b
/* f128ca4: 03e00008 */ jr $ra
/* f128ca8: 2402011c */ addiu $v0,$zero,0x11c
/* f128cac: 03e00008 */ jr $ra
/* f128cb0: 2402011d */ addiu $v0,$zero,0x11d
/* f128cb4: 03e00008 */ jr $ra
/* f128cb8: 2402011e */ addiu $v0,$zero,0x11e
/* f128cbc: 03e00008 */ jr $ra
/* f128cc0: 2402ffff */ addiu $v0,$zero,-1
.L0f128cc4:
/* f128cc4: 03e00008 */ jr $ra
/* f128cc8: 24020198 */ addiu $v0,$zero,0x198
.L0f128ccc:
/* f128ccc: 03e00008 */ jr $ra
/* f128cd0: 24020197 */ addiu $v0,$zero,0x197
.L0f128cd4:
/* f128cd4: 2881002d */ slti $at,$a0,0x2d
.L0f128cd8:
/* f128cd8: 10200003 */ beqz $at,.L0f128ce8
/* f128cdc: 2403ffff */ addiu $v1,$zero,-1
/* f128ce0: 03e00008 */ jr $ra
/* f128ce4: 2402010c */ addiu $v0,$zero,0x10c
.L0f128ce8:
/* f128ce8: 03e00008 */ jr $ra
/* f128cec: 00601025 */ or $v0,$v1,$zero
);
#else
GLOBAL_ASM(
glabel playermgrGetModelOfWeapon
.late_rodata
glabel var7f1b5168
.word playermgrGetModelOfWeapon+0x60 # f128b54
glabel var7f1b516c
.word playermgrGetModelOfWeapon+0x60 # f128b54
glabel var7f1b5170
.word playermgrGetModelOfWeapon+0x68 # f128b5c
glabel var7f1b5174
.word playermgrGetModelOfWeapon+0x98 # f128b8c
glabel var7f1b5178
.word playermgrGetModelOfWeapon+0xa0 # f128b94
glabel var7f1b517c
.word playermgrGetModelOfWeapon+0x70 # f128b64
glabel var7f1b5180
.word playermgrGetModelOfWeapon+0x78 # f128b6c
glabel var7f1b5184
.word playermgrGetModelOfWeapon+0x90 # f128b84
glabel var7f1b5188
.word playermgrGetModelOfWeapon+0x80 # f128b74
glabel var7f1b518c
.word playermgrGetModelOfWeapon+0x88 # f128b7c
glabel var7f1b5190
.word playermgrGetModelOfWeapon+0xa8 # f128b9c
glabel var7f1b5194
.word playermgrGetModelOfWeapon+0xd0 # f128bc4
glabel var7f1b5198
.word playermgrGetModelOfWeapon+0xd8 # f128bcc
glabel var7f1b519c
.word playermgrGetModelOfWeapon+0xe0 # f128bd4
glabel var7f1b51a0
.word playermgrGetModelOfWeapon+0xe8 # f128bdc
glabel var7f1b51a4
.word playermgrGetModelOfWeapon+0xb8 # f128bac
glabel var7f1b51a8
.word playermgrGetModelOfWeapon+0xc8 # f128bbc
glabel var7f1b51ac
.word playermgrGetModelOfWeapon+0xb0 # f128ba4
glabel var7f1b51b0
.word playermgrGetModelOfWeapon+0xc0 # f128bb4
glabel var7f1b51b4
.word playermgrGetModelOfWeapon+0xf0 # f128be4
glabel var7f1b51b8
.word playermgrGetModelOfWeapon+0xf8 # f128bec
glabel var7f1b51bc
.word playermgrGetModelOfWeapon+0x120 # f128c14
glabel var7f1b51c0
.word playermgrGetModelOfWeapon+0x118 # f128c0c
glabel var7f1b51c4
.word playermgrGetModelOfWeapon+0x108 # f128bfc
glabel var7f1b51c8
.word playermgrGetModelOfWeapon+0x100 # f128bf4
glabel var7f1b51cc
.word playermgrGetModelOfWeapon+0x110 # f128c04
glabel var7f1b51d0
.word playermgrGetModelOfWeapon+0x138 # f128c2c
glabel var7f1b51d4
.word playermgrGetModelOfWeapon+0x128 # f128c1c
glabel var7f1b51d8
.word playermgrGetModelOfWeapon+0x140 # f128c34
glabel var7f1b51dc
.word playermgrGetModelOfWeapon+0x130 # f128c24
glabel var7f1b51e0
.word playermgrGetModelOfWeapon+0x158 # f128c4c
glabel var7f1b51e4
.word playermgrGetModelOfWeapon+0x150 # f128c44
glabel var7f1b51e8
.word playermgrGetModelOfWeapon+0x170 # f128c64
glabel var7f1b51ec
.word playermgrGetModelOfWeapon+0x168 # f128c5c
glabel var7f1b51f0
.word playermgrGetModelOfWeapon+0x160 # f128c54
glabel var7f1b51f4
.word playermgrGetModelOfWeapon+0x1c8 # f128cbc
glabel var7f1b51f8
.word playermgrGetModelOfWeapon+0x188 # f128c7c
glabel var7f1b51fc
.word playermgrGetModelOfWeapon+0x190 # f128c84
glabel var7f1b5200
.word playermgrGetModelOfWeapon+0x198 # f128c8c
glabel var7f1b5204
.word playermgrGetModelOfWeapon+0x1a0 # f128c94
glabel var7f1b5208
.word playermgrGetModelOfWeapon+0x1a8 # f128c9c
glabel var7f1b520c
.word playermgrGetModelOfWeapon+0x1b0 # f128ca4
glabel var7f1b5210
.word playermgrGetModelOfWeapon+0x1b8 # f128cac
glabel var7f1b5214
.word playermgrGetModelOfWeapon+0x1c0 # f128cb4
glabel var7f1b5218
.word playermgrGetModelOfWeapon+0x148 # f128c3c
glabel var7f1b521c
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b5220
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b5224
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b5228
.word playermgrGetModelOfWeapon+0x1e0 # f128cd4
glabel var7f1b522c
.word playermgrGetModelOfWeapon+0x180 # f128c74
.text
/* f128af4: 28810052 */ slti $at,$a0,0x51
/* f128af8: 14200007 */ bnez $at,.L0f128b18
/* f128afc: 24010052 */ addiu $at,$zero,0x51
/* f128b00: 10810072 */ beq $a0,$at,.L0f128ccc
/* f128b04: 24010057 */ addiu $at,$zero,0x56
/* f128b08: 10810058 */ beq $a0,$at,.L0f128c6c
/* f128b0c: 00000000 */ nop
/* f128b10: 10000071 */ b .L0f128cd8
/* f128b14: 2881002d */ slti $at,$a0,0x2d
.L0f128b18:
/* f128b18: 28810032 */ slti $at,$a0,0x32
/* f128b1c: 14200005 */ bnez $at,.L0f128b34
/* f128b20: 24010051 */ addiu $at,$zero,0x50
/* f128b24: 10810067 */ beq $a0,$at,.L0f128cc4
/* f128b28: 00000000 */ nop
/* f128b2c: 1000006a */ b .L0f128cd8
/* f128b30: 2881002d */ slti $at,$a0,0x2d
.L0f128b34:
/* f128b34: 2c810032 */ sltiu $at,$a0,0x32
/* f128b38: 10200066 */ beqz $at,.L0f128cd4
/* f128b3c: 00047080 */ sll $t6,$a0,0x2
/* f128b40: 3c017f1b */ lui $at,%hi(var7f1b5168)
/* f128b44: 002e0821 */ addu $at,$at,$t6
/* f128b48: 8c2e5168 */ lw $t6,%lo(var7f1b5168)($at)
/* f128b4c: 01c00008 */ jr $t6
/* f128b50: 00000000 */ nop
/* f128b54: 03e00008 */ jr $ra
/* f128b58: 2402ffff */ addiu $v0,$zero,-1
/* f128b5c: 03e00008 */ jr $ra
/* f128b60: 240200f5 */ addiu $v0,$zero,0xf5
/* f128b64: 03e00008 */ jr $ra
/* f128b68: 240200f6 */ addiu $v0,$zero,0xf6
/* f128b6c: 03e00008 */ jr $ra
/* f128b70: 240200f7 */ addiu $v0,$zero,0xf7
/* f128b74: 03e00008 */ jr $ra
/* f128b78: 240200f8 */ addiu $v0,$zero,0xf8
/* f128b7c: 03e00008 */ jr $ra
/* f128b80: 240200f9 */ addiu $v0,$zero,0xf9
/* f128b84: 03e00008 */ jr $ra
/* f128b88: 240200fa */ addiu $v0,$zero,0xfa
/* f128b8c: 03e00008 */ jr $ra
/* f128b90: 240200fb */ addiu $v0,$zero,0xfb
/* f128b94: 03e00008 */ jr $ra
/* f128b98: 240200fc */ addiu $v0,$zero,0xfc
/* f128b9c: 03e00008 */ jr $ra
/* f128ba0: 240200fd */ addiu $v0,$zero,0xfd
/* f128ba4: 03e00008 */ jr $ra
/* f128ba8: 240200fe */ addiu $v0,$zero,0xfe
/* f128bac: 03e00008 */ jr $ra
/* f128bb0: 240200ff */ addiu $v0,$zero,0xff
/* f128bb4: 03e00008 */ jr $ra
/* f128bb8: 24020100 */ addiu $v0,$zero,0x100
/* f128bbc: 03e00008 */ jr $ra
/* f128bc0: 24020101 */ addiu $v0,$zero,0x101
/* f128bc4: 03e00008 */ jr $ra
/* f128bc8: 24020102 */ addiu $v0,$zero,0x102
/* f128bcc: 03e00008 */ jr $ra
/* f128bd0: 24020103 */ addiu $v0,$zero,0x103
/* f128bd4: 03e00008 */ jr $ra
/* f128bd8: 24020104 */ addiu $v0,$zero,0x104
/* f128bdc: 03e00008 */ jr $ra
/* f128be0: 24020105 */ addiu $v0,$zero,0x105
/* f128be4: 03e00008 */ jr $ra
/* f128be8: 24020106 */ addiu $v0,$zero,0x106
/* f128bec: 03e00008 */ jr $ra
/* f128bf0: 24020107 */ addiu $v0,$zero,0x107
/* f128bf4: 03e00008 */ jr $ra
/* f128bf8: 24020108 */ addiu $v0,$zero,0x108
/* f128bfc: 03e00008 */ jr $ra
/* f128c00: 24020109 */ addiu $v0,$zero,0x109
/* f128c04: 03e00008 */ jr $ra
/* f128c08: 2402010a */ addiu $v0,$zero,0x10a
/* f128c0c: 03e00008 */ jr $ra
/* f128c10: 2402010b */ addiu $v0,$zero,0x10b
/* f128c14: 03e00008 */ jr $ra
/* f128c18: 2402010c */ addiu $v0,$zero,0x10c
/* f128c1c: 03e00008 */ jr $ra
/* f128c20: 2402010d */ addiu $v0,$zero,0x10d
/* f128c24: 03e00008 */ jr $ra
/* f128c28: 24020195 */ addiu $v0,$zero,0x195
/* f128c2c: 03e00008 */ jr $ra
/* f128c30: 2402010f */ addiu $v0,$zero,0x10f
/* f128c34: 03e00008 */ jr $ra
/* f128c38: 2402010e */ addiu $v0,$zero,0x10e
/* f128c3c: 03e00008 */ jr $ra
/* f128c40: 2402010e */ addiu $v0,$zero,0x10e
/* f128c44: 03e00008 */ jr $ra
/* f128c48: 24020110 */ addiu $v0,$zero,0x110
/* f128c4c: 03e00008 */ jr $ra
/* f128c50: 24020112 */ addiu $v0,$zero,0x112
/* f128c54: 03e00008 */ jr $ra
/* f128c58: 24020115 */ addiu $v0,$zero,0x115
/* f128c5c: 03e00008 */ jr $ra
/* f128c60: 24020114 */ addiu $v0,$zero,0x114
/* f128c64: 03e00008 */ jr $ra
/* f128c68: 24020113 */ addiu $v0,$zero,0x113
.L0f128c6c:
/* f128c6c: 03e00008 */ jr $ra
/* f128c70: 24020011 */ addiu $v0,$zero,0x11
/* f128c74: 03e00008 */ jr $ra
/* f128c78: 2402012e */ addiu $v0,$zero,0x12e
/* f128c7c: 03e00008 */ jr $ra
/* f128c80: 24020117 */ addiu $v0,$zero,0x117
/* f128c84: 03e00008 */ jr $ra
/* f128c88: 24020118 */ addiu $v0,$zero,0x118
/* f128c8c: 03e00008 */ jr $ra
/* f128c90: 24020119 */ addiu $v0,$zero,0x119
/* f128c94: 03e00008 */ jr $ra
/* f128c98: 2402011a */ addiu $v0,$zero,0x11a
/* f128c9c: 03e00008 */ jr $ra
/* f128ca0: 2402011b */ addiu $v0,$zero,0x11b
/* f128ca4: 03e00008 */ jr $ra
/* f128ca8: 2402011c */ addiu $v0,$zero,0x11c
/* f128cac: 03e00008 */ jr $ra
/* f128cb0: 2402011d */ addiu $v0,$zero,0x11d
/* f128cb4: 03e00008 */ jr $ra
/* f128cb8: 2402011e */ addiu $v0,$zero,0x11e
/* f128cbc: 03e00008 */ jr $ra
/* f128cc0: 2402ffff */ addiu $v0,$zero,-1
.L0f128cc4:
/* f128cc4: 03e00008 */ jr $ra
/* f128cc8: 24020198 */ addiu $v0,$zero,0x198
.L0f128ccc:
/* f128ccc: 03e00008 */ jr $ra
/* f128cd0: 24020197 */ addiu $v0,$zero,0x197
.L0f128cd4:
/* f128cd4: 2881002d */ slti $at,$a0,0x2d
.L0f128cd8:
/* f128cd8: 10200003 */ beqz $at,.L0f128ce8
/* f128cdc: 2403ffff */ addiu $v1,$zero,-1
/* f128ce0: 03e00008 */ jr $ra
/* f128ce4: 2402010c */ addiu $v0,$zero,0x10c
.L0f128ce8:
/* f128ce8: 03e00008 */ jr $ra
/* f128cec: 00601025 */ or $v0,$v1,$zero
);
#endif
#else
s32 playermgrGetModelOfWeapon(s32 weapon)
{
switch (weapon) {
case WEAPON_NONE:
case WEAPON_UNARMED: return -1;
case WEAPON_FALCON2: return MODEL_CHRFALCON2;
case WEAPON_MAGSEC4: return MODEL_CHRLEEGUN1;
case WEAPON_MAULER: return MODEL_CHRMAULER;
case WEAPON_DY357MAGNUM: return MODEL_CHRDY357;
case WEAPON_DY357LX: return MODEL_CHRDY357TRENT;
case WEAPON_PHOENIX: return MODEL_CHRMAIANPISTOL;
case WEAPON_FALCON2_SILENCER: return MODEL_CHRFALCON2SIL;
case WEAPON_FALCON2_SCOPE: return MODEL_CHRFALCON2SCOPE;
case WEAPON_CMP150: return MODEL_CHRCMP150;
case WEAPON_AR34: return MODEL_CHRAR34;
case WEAPON_DRAGON: return MODEL_CHRDRAGON;
case WEAPON_SUPERDRAGON: return MODEL_CHRSUPERDRAGON;
case WEAPON_K7AVENGER: return MODEL_CHRAVENGER;
case WEAPON_CYCLONE: return MODEL_CHRCYCLONE;
case WEAPON_CALLISTO: return MODEL_CHRMAIANSMG;
case WEAPON_RCP120: return MODEL_CHRRCP120;
case WEAPON_LAPTOPGUN: return MODEL_CHRPCGUN;
case WEAPON_SHOTGUN: return MODEL_CHRSHOTGUN;
case WEAPON_REAPER: return MODEL_CHRSKMINIGUN;
case WEAPON_ROCKETLAUNCHER: return MODEL_CHRDYROCKET;
case WEAPON_DEVASTATOR: return MODEL_CHRDEVASTATOR;
case WEAPON_SLAYER: return MODEL_CHRSKROCKET;
case WEAPON_FARSIGHT: return MODEL_CHRZ2020;
case WEAPON_SNIPERRIFLE: return MODEL_CHRSNIPERRIFLE;
case WEAPON_CROSSBOW: return MODEL_CHRCROSSBOW;
case WEAPON_LASER: return MODEL_CHRLASER;
case WEAPON_COMBATKNIFE: return MODEL_CHRKNIFE;
case WEAPON_TRANQUILIZER: return MODEL_CHRDRUGGUN;
case WEAPON_PSYCHOSISGUN: return MODEL_CHRDRUGGUN;
case WEAPON_NBOMB: return MODEL_CHRNBOMB;
case WEAPON_GRENADE: return MODEL_CHRGRENADE;
case WEAPON_REMOTEMINE: return MODEL_CHRREMOTEMINE;
case WEAPON_PROXIMITYMINE: return MODEL_CHRPROXIMITYMINE;
case WEAPON_TIMEDMINE: return MODEL_CHRTIMEDMINE;
case WEAPON_BRIEFCASE2: return MODEL_CHRBRIEFCASE;
case WEAPON_CLOAKINGDEVICE: return MODEL_CHRCLOAKER;
case WEAPON_PP9I: return MODEL_CHRWPPK;
case WEAPON_CC13: return MODEL_CHRTT33;
case WEAPON_KL01313: return MODEL_CHRSKORPION;
case WEAPON_KF7SPECIAL: return MODEL_CHRKALASH;
case WEAPON_ZZT: return MODEL_CHRUZI;
case WEAPON_DMC: return MODEL_CHRMP5K;
case WEAPON_AR53: return MODEL_CHRM16;
case WEAPON_RCP45: return MODEL_CHRFNP90;
case WEAPON_COMBATBOOST: return -1;
case WEAPON_HAMMER: return MODEL_CHRLUMPHAMMER;
case WEAPON_SCREWDRIVER: return MODEL_CHRSONICSCREWER;
}
if (weapon <= WEAPON_PSYCHOSISGUN) {
return MODEL_CHRSNIPERRIFLE;
}
return -1;
}
#endif
void playermgrDeleteWeapon(s32 hand)
{
weaponDeleteFromChr(g_Vars.currentplayer->prop->chr, hand);
}
void playermgrCreateWeapon(s32 hand)
{
struct chrdata *chr = g_Vars.currentplayer->prop->chr;
if (chr->weapons_held[hand] == NULL) {
s32 weaponnum = bgunGetWeaponNum(hand);
s32 modelnum = playermgrGetModelOfWeapon(weaponnum);
if (hand == HAND_LEFT && weaponnum == WEAPON_REMOTEMINE) {
modelnum = -1;
}
if (modelnum >= 0) {
u32 flags;
if (hand == HAND_RIGHT) {
flags = 0;
} else {
flags = OBJFLAG_WEAPON_LEFTHANDED;
}
weaponCreateForChr(chr, modelnum, weaponnum, flags, NULL, NULL);
}
}
}
void playermgrShuffle(void)
{
s32 i;
// Order them ascending
for (i = 0; i < 4; i++) {
g_Vars.playerorder[i] = i;
}
// Randomly swap numbers with later elements
for (i = 0; i != 3; i++) {
s32 otherindex = random() % (4 - i);
s32 tmp = g_Vars.playerorder[i];
g_Vars.playerorder[i] = g_Vars.playerorder[i + otherindex];
g_Vars.playerorder[i + otherindex] = tmp;
}
}
s32 playermgrGetOrderOfPlayer(s32 playernum)
{
s32 index = 0;
s32 i;
for (i = 0; i < 4; i++) {
s32 thisnum = g_Vars.playerorder[i];
if (playernum == thisnum) {
break;
}
if (g_Vars.players[thisnum]) {
index++;
}
}
return index;
}
s32 playermgrGetPlayerAtOrder(s32 ordernum)
{
s32 i;
for (i = 0; i < 4; i++) {
if (g_Vars.players[g_Vars.playerorder[i]]) {
if (ordernum == 0) {
return g_Vars.playerorder[i];
}
ordernum--;
}
}
return 0;
}