Files
perfect-dark/src/game/propobj.c
T
2022-07-28 17:55:15 +10:00

40251 lines
1.3 MiB
Plaintext

#include <ultra64.h>
#include "constants.h"
#include "game/bondmove.h"
#include "game/bondwalk.h"
#include "game/cheats.h"
#include "game/chraction.h"
#include "game/chrai.h"
#include "game/debug.h"
#include "game/dlights.h"
#include "game/nbomb.h"
#include "game/playerreset.h"
#include "game/chr.h"
#include "game/prop.h"
#include "game/setuputils.h"
#include "game/propsnd.h"
#include "game/objectives.h"
#include "game/game_096360.h"
#include "game/atan2f.h"
#include "game/acosfasinf.h"
#include "game/quaternion.h"
#include "game/floor.h"
#include "game/ceil.h"
#include "game/bondgun.h"
#include "game/gunfx.h"
#include "game/game_0b0fd0.h"
#include "game/game_0b28d0.h"
#include "game/tex.h"
#include "game/camera.h"
#include "game/portal.h"
#include "game/player.h"
#include "game/game_0c33f0.h"
#include "game/hudmsg.h"
#include "game/menu.h"
#include "game/inv.h"
#include "game/playermgr.h"
#include "game/game_1291b0.h"
#include "game/vtxstore.h"
#include "game/explosions.h"
#include "game/smoke.h"
#include "game/sparks.h"
#include "game/game_1531a0.h"
#include "game/bg.h"
#include "game/stagetable.h"
#include "game/env.h"
#include "game/gfxmemory.h"
#include "game/lv.h"
#include "game/mplayer/setup.h"
#include "game/mplayer/scenarios.h"
#include "game/mpstats.h"
#include "game/bot.h"
#include "game/botact.h"
#include "game/training.h"
#include "game/lang.h"
#include "game/mplayer/mplayer.h"
#include "game/pad.h"
#include "game/options.h"
#include "game/propobj.h"
#include "game/wallhit.h"
#include "game/shards.h"
#include "bss.h"
#include "tvcmds.h"
#include "lib/vi.h"
#include "lib/dma.h"
#include "lib/main.h"
#include "lib/snd.h"
#include "lib/str.h"
#include "lib/memp.h"
#include "lib/model.h"
#include "lib/rng.h"
#include "lib/mtx.h"
#include "lib/anim.h"
#include "lib/collision.h"
#include "lib/lib_317f0.h"
#include "data.h"
#include "textures.h"
#include "types.h"
#if VERSION < VERSION_PAL_BETA
const char var7f1a9f60[] = "debugdoors";
#endif
const char var7f1a9f6c[] = "scol";
const char var7f1a9f74[] = "salp";
struct weaponobj *g_Proxies[30];
f32 g_GasReleaseTimerMax240;
bool g_GasEnableDamage;
s32 g_MaxWeaponSlots;
s32 g_MaxHatSlots;
s32 g_MaxAmmoCrates;
s32 g_MaxDebrisSlots;
s32 g_MaxProjectiles;
s32 g_MaxEmbedments;
struct weaponobj *g_WeaponSlots;
struct hatobj *g_HatSlots;
struct ammocrateobj *g_AmmoCrates;
struct defaultobj *g_DebrisSlots;
struct projectile *g_Projectiles;
struct embedment *g_Embedments;
u32 g_TintedGlassEnabled = 0;
s32 g_AlarmTimer = 0;
struct sndstate *g_AlarmAudioHandle = NULL;
f32 g_AlarmSpeakerWeight = 64;
f32 g_AlarmSpeakerDirection = 1;
f32 g_GasReleaseTimer240 = 0;
bool g_GasReleasing = false;
struct coord g_GasPos = {0};
s32 g_GasLastCough60 = 0;
f32 g_GasSoundTimer240 = 0;
struct sndstate *g_GasAudioHandle = NULL;
u32 g_CountdownTimerOff = COUNTDOWNTIMERREASON_AI;
bool g_CountdownTimerRunning = false;
f32 g_CountdownTimerValue60 = 0;
u32 g_PlayersDetonatingMines = 0x00000000;
s32 g_NextWeaponSlot = 0;
s32 g_NextHatSlot = 0;
struct linkliftdoorobj *g_LiftDoors = NULL;
struct padlockeddoorobj *g_PadlockedDoors = NULL;
struct safeitemobj *g_SafeItems = NULL;
struct linksceneryobj *g_LinkedScenery = NULL;
struct blockedpathobj *g_BlockedPaths = NULL;
struct prop *g_EmbedProp = NULL;
s32 g_EmbedHitPart = 0;
u32 g_EmbedSide = 0x00000000;
s16 var8006993c[3] = {0};
u32 var80069944 = 0x00000000;
f32 g_CctvWaitScale = 1;
f32 g_CctvDamageRxScale = 1;
f32 g_AutogunAccuracyScale = 1;
f32 g_AutogunDamageTxScale = 1;
f32 g_AutogunDamageRxScale = 1;
f32 g_AmmoQuantityScale = 1;
struct padeffectobj *g_PadEffects = NULL;
s32 g_LastPadEffectIndex = -1;
struct autogunobj *g_ThrownLaptops = NULL;
struct beam *g_ThrownLaptopBeams = NULL;
s32 g_MaxThrownLaptops = 0;
#if VERSION < VERSION_PAL_BETA
u32 var80069974 = 0x00000000;
#endif
/**
* Attempt to call a lift from the given door.
*
* Returns true if the door activation was handled by this function, or false
* if the caller should proceed with opening or closing the door. A true return
* doesn't necessarily mean the lift was called.
*
* The allowclose argument determines whether the door should be closed if the
* lift is at the door. This is typically true when the player has activated the
* door, and false when NPCs have activated the door. If true, doorCallLift
* doesn't handle the activation which allows the caller to close the door.
*
* Lifts will not be called if it's occupied by anyone. This prevents chrs from
* from calling lifts back when players are in them.
*/
bool doorCallLift(struct prop *doorprop, bool allowclose)
{
struct doorobj *door = doorprop->door;
bool handled = false;
if (door->base.hidden & OBJHFLAG_LIFTDOOR) {
struct linkliftdoorobj *link = g_LiftDoors;
while (link) {
if (doorprop == link->door && link->lift
&& (link->lift->type == PROPTYPE_OBJ || link->lift->type == PROPTYPE_DOOR)) {
bool type = link->lift->obj->type;
handled = true;
if (type == OBJTYPE_DOOR) {
// This appears to be handling situations where the setup
// file specifies a door as the lift object. It activates
// that door, which then calls doorCallLift. This allows
// setup files to chain lift doors to other lift doors
// rather than directly to the lift, but this doesn't happen
// in practice so this branch is unused.
doorsActivate(link->lift, allowclose);
} else if (type == OBJTYPE_LIFT) {
if (allowclose
#if VERSION < VERSION_NTSC_1_0
&& g_Vars.currentplayer->lift == link->lift
#endif
&& door->base.type == OBJTYPE_DOOR
&& !doorIsClosed(door)) {
handled = false;
} else {
bool vacant = true;
s32 numchrslots = chrsGetNumSlots();
s32 i;
for (i = 0; i < PLAYERCOUNT(); i++) {
if (g_Vars.players[i]->lift == link->lift) {
vacant = false;
}
}
if (vacant) {
for (i = 0; i < numchrslots; i++) {
/**
* @bug: This is missing a chrIsDead check.
* If a chr dies in a lift it can no longer be called.
*/
if (g_ChrSlots[i].prop && g_ChrSlots[i].lift == link->lift) {
vacant = false;
break;
}
}
}
if (vacant) {
liftGoToStop((struct liftobj *) link->lift->obj, link->stopnum);
}
}
}
}
link = link->next;
}
}
return handled;
}
bool doorIsPadlockFree(struct doorobj *door)
{
if (door->base.hidden & OBJHFLAG_PADLOCKEDDOOR) {
struct padlockeddoorobj *padlockeddoor = g_PadlockedDoors;
while (padlockeddoor) {
if (door == padlockeddoor->door
&& padlockeddoor->lock
&& padlockeddoor->lock->prop
&& objIsHealthy(padlockeddoor->lock)) {
return false;
}
padlockeddoor = padlockeddoor->next;
}
}
return true;
}
bool objCanPickupFromSafe(struct defaultobj *obj)
{
if (obj->flags2 & OBJFLAG2_LINKEDTOSAFE) {
struct safeitemobj *link = g_SafeItems;
while (link) {
struct defaultobj *loopobj = link->item;
if (obj == link->item && link->door && link->door->base.prop) {
if (link->door->frac <= 0.5f * link->door->maxfrac) {
return false;
}
}
link = link->next;
}
}
return true;
}
void objUpdateLinkedScenery(struct defaultobj *obj, struct prop *prop)
{
if ((obj->hidden & OBJHFLAG_CONDITIONALSCENERY) && (obj->flags & OBJFLAG_INVINCIBLE) == 0) {
struct linksceneryobj *link = g_LinkedScenery;
while (link) {
if (link->trigger == obj) {
objCreateDebris(obj, prop);
link->trigger->flags2 |= OBJFLAG2_INVISIBLE;
link->trigger->hidden |= OBJHFLAG_REAPABLE;
if (link->unexp) {
link->unexp->flags2 |= OBJFLAG2_INVISIBLE;
}
if (link->exp) {
link->exp->flags2 &= ~OBJFLAG2_INVISIBLE;
}
objSetBlockedPathUnblocked(obj, true);
return;
}
link = link->next;
}
}
}
f32 objGetLocalXMin(struct modelrodata_bbox *bbox)
{
return bbox->xmin;
}
f32 objGetLocalXMax(struct modelrodata_bbox *bbox)
{
return bbox->xmax;
}
f32 objGetLocalYMin(struct modelrodata_bbox *bbox)
{
return bbox->ymin;
}
f32 objGetLocalYMax(struct modelrodata_bbox *bbox)
{
return bbox->ymax;
}
f32 objGetLocalZMin(struct modelrodata_bbox *bbox)
{
return bbox->zmin;
}
f32 objGetLocalZMax(struct modelrodata_bbox *bbox)
{
return bbox->zmax;
}
f32 objGetRotatedLocalXMinByMtx4(struct modelrodata_bbox *bbox, Mtxf *mtx)
{
return objGetRotatedLocalMin(bbox, mtx->m[0][0], mtx->m[1][0], mtx->m[2][0]);
}
f32 objGetRotatedLocalXMaxByMtx4(struct modelrodata_bbox *bbox, Mtxf *mtx)
{
return objGetRotatedLocalMax(bbox, mtx->m[0][0], mtx->m[1][0], mtx->m[2][0]);
}
f32 objGetRotatedLocalYMinByMtx4(struct modelrodata_bbox *bbox, Mtxf *mtx)
{
return objGetRotatedLocalMin(bbox, mtx->m[0][1], mtx->m[1][1], mtx->m[2][1]);
}
f32 objGetRotatedLocalYMaxByMtx4(struct modelrodata_bbox *bbox, Mtxf *mtx)
{
return objGetRotatedLocalMax(bbox, mtx->m[0][1], mtx->m[1][1], mtx->m[2][1]);
}
f32 objGetRotatedLocalZMinByMtx4(struct modelrodata_bbox *bbox, Mtxf *mtx)
{
return objGetRotatedLocalMin(bbox, mtx->m[0][2], mtx->m[1][2], mtx->m[2][2]);
}
f32 objGetRotatedLocalZMaxByMtx4(struct modelrodata_bbox *bbox, Mtxf *mtx)
{
return objGetRotatedLocalMax(bbox, mtx->m[0][2], mtx->m[1][2], mtx->m[2][2]);
}
f32 objGetRotatedLocalXMinByMtx3(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return objGetRotatedLocalMin(bbox, realrot[0][0], realrot[1][0], realrot[2][0]);
}
f32 objGetRotatedLocalXMaxByMtx3(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return objGetRotatedLocalMax(bbox, realrot[0][0], realrot[1][0], realrot[2][0]);
}
f32 objGetRotatedLocalYMinByMtx3(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return objGetRotatedLocalMin(bbox, realrot[0][1], realrot[1][1], realrot[2][1]);
}
f32 objGetRotatedLocalYMaxByMtx3(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return objGetRotatedLocalMax(bbox, realrot[0][1], realrot[1][1], realrot[2][1]);
}
f32 objGetRotatedLocalZMinByMtx3(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return objGetRotatedLocalMin(bbox, realrot[0][2], realrot[1][2], realrot[2][2]);
}
f32 objGetRotatedLocalZMaxByMtx3(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return objGetRotatedLocalMax(bbox, realrot[0][2], realrot[1][2], realrot[2][2]);
}
f32 objGetRotatedLocalMin(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3)
{
f32 sum = 0;
if (arg1 >= 0) {
sum += bbox->xmin * arg1;
} else {
sum += bbox->xmax * arg1;
}
if (arg2 >= 0) {
sum += bbox->ymin * arg2;
} else {
sum += bbox->ymax * arg2;
}
if (arg3 >= 0) {
sum += bbox->zmin * arg3;
} else {
sum += bbox->zmax * arg3;
}
return sum;
}
f32 objGetRotatedLocalMax(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3)
{
f32 sum = 0;
if (arg1 <= 0) {
sum += bbox->xmin * arg1;
} else {
sum += bbox->xmax * arg1;
}
if (arg2 <= 0) {
sum += bbox->ymin * arg2;
} else {
sum += bbox->ymax * arg2;
}
if (arg3 <= 0) {
sum += bbox->zmin * arg3;
} else {
sum += bbox->zmax * arg3;
}
return sum;
}
s32 objCalculateGeoBlockVertices(f32 xmin, f32 xmax, f32 ymin, f32 ymax, f32 zmin, f32 zmax, Mtxf *mtx, struct geoblock *block)
{
s32 i;
s32 j;
s32 len = 0;
s32 numindexes;
f64 sp270[8][2];
f64 sp1f0[8][2];
s32 numverts;
s32 t3 = 0;
s32 t1 = 0;
s32 t2 = 0;
s32 t0 = 0;
s32 indexes[8];
f64 a;
f64 b;
f64 xmin64 = xmin;
f64 xmax64 = xmax;
f64 ymin64 = ymin;
f64 ymax64 = ymax;
f64 zmin64 = zmin;
f64 zmax64 = zmax;
f64 mtx00 = mtx->m[0][0];
f64 mtx02 = mtx->m[0][2];
f64 mtx10 = mtx->m[1][0];
f64 mtx12 = mtx->m[1][2];
f64 mtx20 = mtx->m[2][0];
f64 mtx22 = mtx->m[2][2];
f64 mtx00min = mtx00 * xmin64;
f64 mtx02min = mtx02 * xmin64;
f64 mtx10min = mtx10 * ymin64;
f64 mtx12min = mtx12 * ymin64;
f64 mtx20min = mtx20 * zmin64;
f64 mtx22min = mtx22 * zmin64;
f64 mtx00max = mtx00 * xmax64;
f64 mtx02max = mtx02 * xmax64;
f64 mtx10max = mtx10 * ymax64;
f64 mtx12max = mtx12 * ymax64;
f64 mtx20max = mtx20 * zmax64;
f64 mtx22max = mtx22 * zmax64;
sp270[0][0] = mtx00min + mtx10min + mtx20min;
sp270[0][1] = mtx02min + mtx12min + mtx22min;
sp270[1][0] = mtx00min + mtx10min + mtx20max;
sp270[1][1] = mtx02min + mtx12min + mtx22max;
sp270[2][0] = mtx00min + mtx10max + mtx20min;
sp270[2][1] = mtx02min + mtx12max + mtx22min;
sp270[3][0] = mtx00min + mtx10max + mtx20max;
sp270[3][1] = mtx02min + mtx12max + mtx22max;
sp270[4][0] = mtx00max + mtx10min + mtx20min;
sp270[4][1] = mtx02max + mtx12min + mtx22min;
sp270[5][0] = mtx00max + mtx10min + mtx20max;
sp270[5][1] = mtx02max + mtx12min + mtx22max;
sp270[6][0] = mtx00max + mtx10max + mtx20min;
sp270[6][1] = mtx02max + mtx12max + mtx22min;
sp270[7][0] = mtx00max + mtx10max + mtx20max;
sp270[7][1] = mtx02max + mtx12max + mtx22max;
for (i = 0; i < 8; i++) {
for (j = 0; j < len; j++) {
f32 tmp = 0.001f;
f64 f0 = tmp;
a = sp270[i][0] - sp1f0[j][0];
b = sp270[i][1] - sp1f0[j][1];
if (a < f0 && a > -f0 && b < f0 && b > -f0) {
break;
}
}
if (j >= len) {
sp1f0[len][0] = sp270[i][0];
sp1f0[len][1] = sp270[i][1];
len++;
}
}
for (i = 1; i < len; i++) {
if (sp1f0[i][0] < sp1f0[t3][0] || (sp1f0[i][0] == sp1f0[t3][0] && sp1f0[i][1] < sp1f0[t3][1])) {
t3 = i;
}
}
for (i = 1; i < len; i++) {
if (sp1f0[t2][1] < sp1f0[i][1] || (sp1f0[i][1] == sp1f0[t2][1] && sp1f0[i][0] < sp1f0[t2][0])) {
t2 = i;
}
}
for (i = 1; i < len; i++) {
if (sp1f0[t1][0] < sp1f0[i][0] || (sp1f0[i][0] == sp1f0[t1][0] && sp1f0[t1][1] < sp1f0[i][1])) {
t1 = i;
}
}
for (i = 1; i < len; i++) {
if (sp1f0[i][1] < sp1f0[t0][1] || (sp1f0[i][1] == sp1f0[t0][1] && sp1f0[t0][0] < sp1f0[i][0])) {
t0 = i;
}
}
numindexes = 0;
for (i = 0; i < len; i++) {
if (i != t3 && i != t1 && i != t2 && i != t0) {
indexes[numindexes] = i;
numindexes++;
}
}
numverts = 0;
block->vertices[numverts][0] = sp1f0[t3][0];
block->vertices[numverts][1] = sp1f0[t3][1];
numverts++;
if (t0 != t3) {
for (i = 0; i < numindexes; i++) {
s32 index = indexes[i];
if ((sp1f0[index][0] - sp1f0[t0][0]) * (sp1f0[t3][1] - sp1f0[t0][1]) < (sp1f0[t3][0] - sp1f0[t0][0]) * (sp1f0[index][1] - sp1f0[t0][1])) {
block->vertices[numverts][0] = sp1f0[index][0];
block->vertices[numverts][1] = sp1f0[index][1];
numverts++;
break;
}
}
block->vertices[numverts][0] = sp1f0[t0][0];
block->vertices[numverts][1] = sp1f0[t0][1];
numverts++;
}
if (t1 != t0) {
for (i = 0; i < numindexes; i++) {
s32 index = indexes[i];
if ((sp1f0[index][0] - sp1f0[t1][0]) * (sp1f0[t0][1] - sp1f0[t1][1]) < (sp1f0[t0][0] - sp1f0[t1][0]) * (sp1f0[index][1] - sp1f0[t1][1])) {
block->vertices[numverts][0] = sp1f0[index][0];
block->vertices[numverts][1] = sp1f0[index][1];
numverts++;
break;
}
}
block->vertices[numverts][0] = sp1f0[t1][0];
block->vertices[numverts][1] = sp1f0[t1][1];
numverts++;
}
if (t2 != t1) {
for (i = 0; i < numindexes; i++) {
s32 index = indexes[i];
if ((sp1f0[index][0] - sp1f0[t2][0]) * (sp1f0[t1][1] - sp1f0[t2][1]) < (sp1f0[t1][0] - sp1f0[t2][0]) * (sp1f0[index][1] - sp1f0[t2][1])) {
block->vertices[numverts][0] = sp1f0[index][0];
block->vertices[numverts][1] = sp1f0[index][1];
numverts++;
break;
}
}
}
if (t2 != t1 && t3 != t2) {
block->vertices[numverts][0] = sp1f0[t2][0];
block->vertices[numverts][1] = sp1f0[t2][1];
numverts++;
}
if (t3 != t2) {
for (i = 0; i < numindexes; i++) {
s32 index = indexes[i];
if ((sp1f0[index][0] - sp1f0[t3][0]) * (sp1f0[t2][1] - sp1f0[t3][1]) < (sp1f0[t2][0] - sp1f0[t3][0]) * (sp1f0[index][1] - sp1f0[t3][1])) {
block->vertices[numverts][0] = sp1f0[index][0];
block->vertices[numverts][1] = sp1f0[index][1];
numverts++;
break;
}
}
}
for (i = 0; i < numverts; i++) {
block->vertices[i][0] += mtx->m[3][0];
block->vertices[i][1] += mtx->m[3][2];
}
return numverts;
}
void objCalculateGeoBlockFromBboxAndMtx(struct modelrodata_bbox *bbox, Mtxf *mtx, struct geoblock *block)
{
block->header.numvertices = objCalculateGeoBlockVertices(
bbox->xmin, bbox->xmax, bbox->ymin, bbox->ymax, bbox->zmin, bbox->zmax, mtx, block);
block->header.type = GEOTYPE_BLOCK;
block->ymin = mtx->m[3][1] + objGetRotatedLocalYMinByMtx4(bbox, mtx);
block->ymax = mtx->m[3][1] + objGetRotatedLocalYMaxByMtx4(bbox, mtx);
}
void objCalculateGeoBlockFromNode19Data(struct modelrodata_type19 *rodata19, struct modelrodata_bbox *bbox, Mtxf *mtx, struct geoblock *block)
{
s32 i;
for (i = 0; i < rodata19->numvertices; i++) {
block->vertices[i][0] = mtx->m[3][0] + mtx->m[0][0] * rodata19->vertices[i].x + mtx->m[1][0] * rodata19->vertices[i].y + mtx->m[2][0] * rodata19->vertices[i].z;
block->vertices[i][1] = mtx->m[3][2] + mtx->m[0][2] * rodata19->vertices[i].x + mtx->m[1][2] * rodata19->vertices[i].y + mtx->m[2][2] * rodata19->vertices[i].z;
}
block->header.numvertices = rodata19->numvertices;
block->header.type = GEOTYPE_BLOCK;
block->ymin = mtx->m[3][1] + objGetRotatedLocalYMinByMtx4(bbox, mtx);
block->ymax = mtx->m[3][1] + objGetRotatedLocalYMaxByMtx4(bbox, mtx);
}
bool func0f0675c8(struct coord *pos, f32 arg1, struct modelrodata_bbox *bbox, Mtxf *mtx)
{
Mtxf sp58;
struct coord sp4c;
struct coord sp40;
struct coord sp34;
struct coord sp28;
sp34.f[0] = sp34.f[1] = sp34.f[2] = arg1;
sp4c.x = pos->x - mtx->m[3][0];
sp4c.y = pos->y - mtx->m[3][1];
sp4c.z = pos->z - mtx->m[3][2];
mtx000170e4(mtx->m, sp58.m);
mtx4RotateVec(&sp58, &sp4c, &sp40);
mtx4RotateVec(&sp58, &sp34, &sp28);
if (sp28.x < 0.0f) {
sp28.x = -sp28.x;
}
if (sp28.y < 0.0f) {
sp28.y = -sp28.y;
}
if (sp28.z < 0.0f) {
sp28.z = -sp28.z;
}
return sp40.x - sp28.x <= bbox->xmax && sp28.x + sp40.x >= bbox->xmin
&& sp40.y - sp28.y <= bbox->ymax && sp28.y + sp40.y >= bbox->ymin
&& sp40.z - sp28.z <= bbox->zmax && sp28.z + sp40.z >= bbox->zmin;
}
bool func0f0677ac(struct coord *coord, struct coord *arg1, struct coord *pos,
struct coord *normal, struct coord *up, struct coord *look,
f32 xmin, f32 xmax, f32 ymin, f32 ymax, f32 zmin, f32 zmax)
{
f32 xdiff = coord->x - pos->x;
f32 ydiff = coord->y - pos->y;
f32 zdiff = coord->z - pos->z;
f32 f0;
f0 = xdiff * look->f[0] + ydiff * look->f[1] + zdiff * look->f[2];
if (f0 > arg1->z + zmax || f0 < zmin - arg1->z) {
return false;
}
f0 = xdiff * up->f[0] + ydiff * up->f[1] + zdiff * up->f[2];
if (f0 > arg1->y + ymax || f0 < ymin - arg1->y) {
return false;
}
f0 = xdiff * normal->f[0] + ydiff * normal->f[1] + zdiff * normal->f[2];
if (f0 > arg1->x + xmax || f0 < xmin - arg1->x) {
return false;
}
return true;
}
bool func0f0678f8(struct coord *coord, struct coord *arg1, s32 padnum)
{
struct pad pad;
padUnpack(padnum, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_UP | PADFIELD_NORMAL | PADFIELD_BBOX, &pad);
return func0f0677ac(coord, arg1, &pad.pos, &pad.normal, &pad.up, &pad.look,
pad.bbox.xmin, pad.bbox.xmax, pad.bbox.ymin, pad.bbox.ymax, pad.bbox.zmin, pad.bbox.zmax);
}
bool func0f06797c(struct coord *coord, f32 arg1, s32 padnum)
{
struct coord sp1c;
sp1c.x = arg1;
sp1c.y = arg1;
sp1c.z = arg1;
return func0f0678f8(coord, &sp1c, padnum);
}
bool func0f0679ac(struct model *model, f32 *max, f32 *min, f32 arg3[2], f32 arg4[2])
{
struct modelnode *node = model->filedata->rootnode;
bool first = true;
while (node) {
u32 type = node->type & 0xff;
if (type == MODELNODETYPE_BBOX) {
struct modelrodata_bbox *bbox = &node->rodata->bbox;
Mtxf *mtx = model0001a5cc(model, node, 0);
f32 dist1;
f32 dist2;
dist1 = objGetRotatedLocalXMaxByMtx4(bbox, mtx) + mtx->m[3][0];
dist2 = objGetRotatedLocalXMinByMtx4(bbox, mtx) + mtx->m[3][0];
if (arg3[0] - arg4[0] <= dist1 && arg3[0] + arg4[0] >= dist2) {
dist1 = objGetRotatedLocalYMaxByMtx4(bbox, mtx) + mtx->m[3][1];
dist2 = objGetRotatedLocalYMinByMtx4(bbox, mtx) + mtx->m[3][1];
if (arg3[1] - arg4[1] <= dist1 && arg3[1] + arg4[1] >= dist2) {
dist1 = objGetRotatedLocalZMaxByMtx4(bbox, mtx) + mtx->m[3][2];
dist2 = objGetRotatedLocalZMinByMtx4(bbox, mtx) + mtx->m[3][2];
if (first || dist1 > *max) {
*max = dist1;
}
if (first || dist2 < *min) {
*min = dist2;
}
first = false;
}
}
} else {
// empty
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
return !first;
}
void func0f067bc4(struct model *model, f32 *max, f32 *min, s32 axis)
{
struct modelnode *node = model->filedata->rootnode;
bool first = true;
while (node) {
u32 type = node->type & 0xff;
if (type == MODELNODETYPE_BBOX) {
struct modelrodata_bbox *bbox = &node->rodata->bbox;
Mtxf *mtx = model0001a5cc(model, node, 0);
f32 dist1;
f32 dist2;
if (axis == 0) {
dist1 = objGetRotatedLocalXMaxByMtx4(bbox, mtx) + mtx->m[3][0];
dist2 = objGetRotatedLocalXMinByMtx4(bbox, mtx) + mtx->m[3][0];
} else if (axis == 1) {
dist1 = objGetRotatedLocalYMaxByMtx4(bbox, mtx) + mtx->m[3][1];
dist2 = objGetRotatedLocalYMinByMtx4(bbox, mtx) + mtx->m[3][1];
} else {
dist1 = objGetRotatedLocalZMaxByMtx4(bbox, mtx) + mtx->m[3][2];
dist2 = objGetRotatedLocalZMinByMtx4(bbox, mtx) + mtx->m[3][2];
}
if (first || dist1 > *max) {
*max = dist1;
}
if (first || dist2 < *min) {
*min = dist2;
}
first = false;
} else {
// empty
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
}
void func0f067d88(struct model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4)
{
func0f067bc4(model, arg1, arg2, 0);
func0f067bc4(model, arg3, arg4, 1);
}
bool modelGetScreenCoords2(struct model *model, f32 *x2, f32 *x1, f32 *y2, f32 *y1)
{
bool first = true;
if (model) {
struct modelfiledata *modeldef = model->filedata;
if (modeldef) {
struct modelnode *node = modeldef->rootnode;
while (node) {
u32 type = node->type & 0xff;
if (type == MODELNODETYPE_BBOX) {
struct modelrodata_bbox *bbox = &node->rodata->bbox;
f32 sp74[2];
f32 sp6c[2];
f32 sp64[2];
f32 sp5c[2];
struct coord sp50;
Mtxf *mtx = model0001a5cc(model, node, 0);
if (mtx->m[3][2] < 0.0f) {
sp50.x = mtx->m[3][0];
sp50.y = mtx->m[3][1];
sp50.z = mtx->m[3][2];
sp64[0] = objGetRotatedLocalXMinByMtx4(bbox, mtx) + sp50.f[0];
sp64[1] = objGetRotatedLocalXMaxByMtx4(bbox, mtx) + sp50.f[0];
sp5c[0] = objGetRotatedLocalYMinByMtx4(bbox, mtx) + sp50.f[1];
sp5c[1] = objGetRotatedLocalYMaxByMtx4(bbox, mtx) + sp50.f[1];
func0f06803c(&sp50, sp64, sp5c, sp74, sp6c);
if (first || sp74[0] < *x1) {
*x1 = sp74[0];
}
if (first || sp6c[0] > *x2) {
*x2 = sp6c[0];
}
if (first || sp74[1] < *y1) {
*y1 = sp74[1];
}
if (first || sp6c[1] > *y2) {
*y2 = sp6c[1];
}
first = false;
}
} else {
// empty
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
}
}
return first ? false : true;
}
bool modelGetScreenCoords(struct model *model, f32 *x2, f32 *x1, f32 *y2, f32 *y1)
{
return modelGetScreenCoords2(model, x2, x1, y2, y1);
}
void func0f06803c(struct coord *arg0, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4)
{
struct coord sp4c;
f32 sp44[2];
f32 aspect = viGetAspect();
f32 fovy = viGetFovY();
if (g_Vars.currentplayer->devicesactive & ~g_Vars.currentplayer->devicesinhibit & DEVICE_EYESPY) {
if (g_Vars.currentplayer->eyespy && g_Vars.currentplayer->eyespy->active) {
fovy = 120.0f;
}
}
sp4c.x = arg1[0];
sp4c.y = arg0->y;
sp4c.z = arg0->z;
cam0f0b4eb8(&sp4c, sp44, fovy, aspect);
arg3[0] = sp44[0];
sp4c.x = arg1[1];
sp4c.y = arg0->y;
sp4c.z = arg0->z;
cam0f0b4eb8(&sp4c, sp44, fovy, aspect);
arg4[0] = sp44[0];
sp4c.x = arg0->x;
sp4c.y = arg2[1];
sp4c.z = arg0->z;
cam0f0b4eb8(&sp4c, sp44, fovy, aspect);
arg3[1] = sp44[1];
sp4c.x = arg0->x;
sp4c.y = arg2[0];
sp4c.z = arg0->z;
cam0f0b4eb8(&sp4c, sp44, fovy, aspect);
arg4[1] = sp44[1];
}
struct defaultobj *objFindByPadNum(s32 padnum)
{
struct prop *prop = g_Vars.activeprops;
while (prop) {
if (prop->type == PROPTYPE_OBJ) {
struct defaultobj *obj = prop->obj;
if (obj->pad == (s16)padnum) {
return obj;
}
}
prop = prop->next;
}
return NULL;
}
struct defaultobj *objFindByPos(struct coord *pos, s16 *rooms)
{
struct prop *prop = g_Vars.activeprops;
u8 *sp38;
u8 *sp34;
while (prop) {
if (prop->type == PROPTYPE_OBJ
&& arrayIntersects(prop->rooms, rooms)
&& propUpdateGeometry(prop, &sp38, &sp34)
&& func000266a4(pos->x, pos->z, (struct geo *)sp38)) {
return prop->obj;
}
prop = prop->next;
}
return NULL;
}
void projectileFree(struct projectile *projectile)
{
if (projectile) {
projectile->flags |= PROJECTILEFLAG_FREE;
}
}
void projectilesUnrefOwner(struct prop *owner)
{
s32 i;
for (i = 0; i < g_MaxProjectiles; i++) {
if ((g_Projectiles[i].flags & PROJECTILEFLAG_FREE) == 0
&& g_Projectiles[i].ownerprop == owner) {
g_Projectiles[i].ownerprop = NULL;
}
}
}
void projectileReset(struct projectile *projectile)
{
projectile->flags = 0;
projectile->speed.x = 0;
projectile->speed.y = 0;
projectile->speed.z = 0;
projectile->unk010 = 0;
projectile->unk014 = 0;
projectile->unk018 = 0;
projectile->unk01c = 0;
mtx4LoadIdentity(&projectile->mtx);
projectile->unk060 = 1;
projectile->ownerprop = NULL;
projectile->unk08c = 0.05f;
projectile->bouncecount = 0;
projectile->bounceframe = -1;
projectile->lastwooshframe = -1;
projectile->flighttime240 = 0;
projectile->unk0a4 = -1;
projectile->droptype = DROPTYPE_DEFAULT;
projectile->pickuptimer240 = 0;
projectile->losttimer240 = 0;
projectile->obj = NULL;
projectile->unk0d8 = 0;
projectile->smoketimer240 = 0;
projectile->targetprop = NULL;
projectile->pickupby = NULL;
projectile->powerlimit240 = -1;
projectile->unk0b8[0] = 1;
projectile->unk0b8[1] = 1;
projectile->unk0b8[2] = 1;
projectile->unk0e4 = 1;
projectile->unk098 = 0;
projectile->unk0dc = 0;
projectile->unk0e0 = 0;
projectile->unk0ec = 0;
projectile->unk0f0 = 0;
}
struct projectile *projectileAllocate(void)
{
s32 bestindex = -1;
s32 i;
// Happy path - find one that is already free
for (i = 0; i < g_MaxProjectiles; i++) {
if (g_Projectiles[i].flags & PROJECTILEFLAG_FREE) {
projectileReset(&g_Projectiles[i]);
return &g_Projectiles[i];
}
}
// Find one with the lowest unk0d8 (some kind of age/timer?)
// and some other conditions
for (i = 0; i < g_MaxProjectiles; i++) {
if (g_Projectiles[i].obj
&& g_Projectiles[i].unk0d8 > 0
&& (bestindex < 0 || g_Projectiles[i].unk0d8 < g_Projectiles[bestindex].unk0d8)) {
bestindex = i;
}
}
// If there were none, pick one at random
if (bestindex == -1 && g_MaxProjectiles) {
bestindex = random() % g_MaxProjectiles;
}
if (bestindex >= 0) {
// Reset and return it
if (g_Projectiles[bestindex].obj) {
if (g_Projectiles[bestindex].obj->prop) {
objFreeEmbedmentOrProjectile(g_Projectiles[bestindex].obj->prop);
}
g_Projectiles[bestindex].obj->hidden |= OBJHFLAG_REAPABLE;
}
projectileReset(&g_Projectiles[bestindex]);
return &g_Projectiles[bestindex];
} else {
return NULL;
}
}
void func0f0685e4(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
if (obj->hidden & OBJHFLAG_EMBEDDED) {
if (obj->embedment->projectile) {
projectileReset(obj->embedment->projectile);
} else {
obj->embedment->projectile = projectileAllocate();
}
} else if ((obj->hidden & OBJHFLAG_PROJECTILE) == 0) {
if (obj->projectile) {
projectileReset(obj->projectile);
} else {
obj->projectile = projectileAllocate();
}
if (obj->projectile) {
obj->hidden |= OBJHFLAG_PROJECTILE;
}
}
}
void projectileSetSticky(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
struct projectile *projectile = NULL;
if (obj->hidden & OBJHFLAG_EMBEDDED) {
projectile = obj->embedment->projectile;
} else if (obj->hidden & OBJHFLAG_PROJECTILE) {
projectile = obj->projectile;
}
if (projectile) {
projectile->flags |= PROJECTILEFLAG_STICKY;
}
}
void embedmentFree(struct embedment *embedment)
{
embedment->flags |= EMBEDMENTFLAG_FREE;
}
struct embedment *embedmentAllocate(void)
{
s32 i;
for (i = 0; i < g_MaxEmbedments; i++) {
if (g_Embedments[i].flags & EMBEDMENTFLAG_FREE) {
g_Embedments[i].flags = 0;
g_Embedments[i].projectile = NULL;
return &g_Embedments[i];
}
}
return NULL;
}
/**
* This doesn't exactly return the number of shots taken but it's the best way
* to describe the behaviour of the function without writing a novel into the
* function's name.
*
* The number returned is 0 when at full health and only ever increments as the
* object takes damage. While healthy, the number scales from 0 to 4 based on
* how close it is to being destroyed, where 4 is destroyed. After being
* destroyed, the number increments at 1 per shot up to a max of 12.
*/
s32 objGetShotsTaken(struct defaultobj *obj)
{
if ((obj->hidden2 & OBJH2FLAG_DESTROYED) == 0) {
return obj->damage * 3.0f / obj->maxdamage;
}
return obj->damage + 4;
}
/**
* Return 0 if not destroyed
* Return 1 if at destroyed level 1
* Return 2 if at destroyed level 2
* Return 3 if at destroyed level 3
*
* Each destroyed level is a new phase of visual brokenness. Typically the
* object is destroyed and it looks broken (level 1), then after a couple of
* shots it enters level 2, and a few shots later level 3.
*
* While healthy, damage goes from 0 to maxdamage (eg. 1000) but this function
* returns 0 due to the if statement.
*
* When destroyed, damage is reset to 0 then incremented at one unit per shot,
* so four shots causes it to enter a new destroyed level.
*/
s32 objGetDestroyedLevel(struct defaultobj *obj)
{
if ((obj->hidden2 & OBJH2FLAG_DESTROYED) == 0) {
return 0;
}
return (obj->damage >> 2) + 1;
}
struct modelnode *func0f0687e4(struct model *model)
{
struct modelfiledata *filedata = model->filedata;
struct modelnode *node = filedata->rootnode;
while (node) {
u32 type = node->type & 0xff;
switch (type) {
case MODELNODETYPE_DL:
return node;
case MODELNODETYPE_DISTANCE:
model0001c784(model, node);
break;
case MODELNODETYPE_TOGGLE:
model0001c7d0(model, node);
break;
case MODELNODETYPE_HEADSPOT:
modelAttachHead(model, node);
break;
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
return NULL;
}
struct modelnode *modelFileDataFindBboxNode(struct modelfiledata *filedata)
{
struct modelnode *node = filedata->rootnode;
while (node) {
if ((node->type & 0xff) == MODELNODETYPE_BBOX) {
return node;
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
return NULL;
}
struct modelrodata_bbox *modelFileDataFindBboxRodata(struct modelfiledata *filedata)
{
struct modelnode *node = modelFileDataFindBboxNode(filedata);
if (node) {
return &node->rodata->bbox;
}
return NULL;
}
struct modelnode *modelFindBboxNode(struct model *model)
{
struct modelnode *node = model->filedata->rootnode;
while (node) {
u32 type = node->type & 0xff;
switch (type) {
case MODELNODETYPE_BBOX:
return node;
case MODELNODETYPE_DISTANCE:
model0001c784(model, node);
break;
case MODELNODETYPE_TOGGLE:
model0001c7d0(model, node);
break;
case MODELNODETYPE_HEADSPOT:
modelAttachHead(model, node);
break;
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
return NULL;
}
struct modelrodata_bbox *modelFindBboxRodata(struct model *model)
{
struct modelnode *node = modelFindBboxNode(model);
if (node) {
return &node->rodata->bbox;
}
return NULL;
}
struct modelnode *objFindBboxNode(struct defaultobj *obj)
{
return modelFindBboxNode(obj->model);
}
struct modelrodata_bbox *objFindBboxRodata(struct defaultobj *obj)
{
return modelFindBboxRodata(obj->model);
}
s32 func0f068b14(s16 *rooms, s32 arg1)
{
s32 total = 0;
s32 i;
for (i = 0; rooms[i] != -1; i++) {
if (arg1 == 0) {
total += func0f000b24(rooms[i]);
} else if (arg1 == 1) {
total += func0f000c54(rooms[i]);
}
}
if (i) {
s32 average = total / i;
if (average > 255) {
average = 255;
}
return average;
}
return 0;
}
#if VERSION >= VERSION_JPN_FINAL
GLOBAL_ASM(
glabel func0f068c04
/* f069d24: 27bdfed0 */ addiu $sp,$sp,-304
/* f069d28: afbf0054 */ sw $ra,0x54($sp)
/* f069d2c: afbe0050 */ sw $s8,0x50($sp)
/* f069d30: afb7004c */ sw $s7,0x4c($sp)
/* f069d34: afb60048 */ sw $s6,0x48($sp)
/* f069d38: afb50044 */ sw $s5,0x44($sp)
/* f069d3c: afb40040 */ sw $s4,0x40($sp)
/* f069d40: afb3003c */ sw $s3,0x3c($sp)
/* f069d44: afb20038 */ sw $s2,0x38($sp)
/* f069d48: afb10034 */ sw $s1,0x34($sp)
/* f069d4c: afb00030 */ sw $s0,0x30($sp)
/* f069d50: f7b80028 */ sdc1 $f24,0x28($sp)
/* f069d54: f7b60020 */ sdc1 $f22,0x20($sp)
/* f069d58: f7b40018 */ sdc1 $f20,0x18($sp)
/* f069d5c: afa40130 */ sw $a0,0x130($sp)
/* f069d60: afa50134 */ sw $a1,0x134($sp)
/* f069d64: afa60138 */ sw $a2,0x138($sp)
/* f069d68: 8c8f0004 */ lw $t7,0x4($a0)
/* f069d6c: 00807025 */ move $t6,$a0
/* f069d70: 00009825 */ move $s3,$zero
/* f069d74: 0000a025 */ move $s4,$zero
/* f069d78: 00009025 */ move $s2,$zero
/* f069d7c: 0000a825 */ move $s5,$zero
/* f069d80: afaf012c */ sw $t7,0x12c($sp)
/* f069d84: 11e00095 */ beqz $t7,.JF0f069fdc
/* f069d88: 01e03825 */ move $a3,$t7
/* f069d8c: 8df80014 */ lw $t8,0x14($t7)
/* f069d90: 13000092 */ beqz $t8,.JF0f069fdc
/* f069d94: 00000000 */ nop
/* f069d98: 3c17800a */ lui $s7,0x800a
/* f069d9c: 4480c000 */ mtc1 $zero,$f24
/* f069da0: 26f75308 */ addiu $s7,$s7,0x5308
/* f069da4: 241e008c */ li $s8,0x8c
/* f069da8: 2416ffff */ li $s6,-1
/* f069dac: 8fb9012c */ lw $t9,0x12c($sp)
.JF0f069db0:
/* f069db0: afa70128 */ sw $a3,0x128($sp)
/* f069db4: 84e900c4 */ lh $t1,0xc4($a3)
/* f069db8: 872800c4 */ lh $t0,0xc4($t9)
/* f069dbc: 5509007e */ bnel $t0,$t1,.JF0f069fb8
/* f069dc0: 8fa70128 */ lw $a3,0x128($sp)
/* f069dc4: 3c02800a */ lui $v0,0x800a
/* f069dc8: 8c42a8b4 */ lw $v0,-0x574c($v0)
/* f069dcc: afa70128 */ sw $a3,0x128($sp)
/* f069dd0: 8c4a00bc */ lw $t2,0xbc($v0)
/* f069dd4: 51400078 */ beqzl $t2,.JF0f069fb8
/* f069dd8: 8fa70128 */ lw $a3,0x128($sp)
/* f069ddc: 8ce30014 */ lw $v1,0x14($a3)
/* f069de0: 84e40006 */ lh $a0,0x6($a3)
/* f069de4: 24501bb0 */ addiu $s0,$v0,0x1bb0
/* f069de8: afa70128 */ sw $a3,0x128($sp)
/* f069dec: 2405005e */ li $a1,0x5e
/* f069df0: 27a600b0 */ addiu $a2,$sp,0xb0
/* f069df4: 0fc45798 */ jal padUnpack
/* f069df8: afa30104 */ sw $v1,0x104($sp)
/* f069dfc: 8fab012c */ lw $t3,0x12c($sp)
/* f069e00: 3c010400 */ lui $at,0x400
/* f069e04: 8fa30104 */ lw $v1,0x104($sp)
/* f069e08: 8d6c0010 */ lw $t4,0x10($t3)
/* f069e0c: 8fae012c */ lw $t6,0x12c($sp)
/* f069e10: 01816824 */ and $t5,$t4,$at
/* f069e14: 51a0000f */ beqzl $t5,.JF0f069e54
/* f069e18: 95cf0070 */ lhu $t7,0x70($t6)
/* f069e1c: 0fc002ed */ jal func0f000b24
/* f069e20: 8fa400f8 */ lw $a0,0xf8($sp)
/* f069e24: 02629821 */ addu $s3,$s3,$v0
/* f069e28: 0fc00339 */ jal func0f000c54
/* f069e2c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f069e30: 0282a021 */ addu $s4,$s4,$v0
/* f069e34: 02741821 */ addu $v1,$s3,$s4
/* f069e38: 28610100 */ slti $at,$v1,0x100
/* f069e3c: 26b50001 */ addiu $s5,$s5,0x1
/* f069e40: 1420005c */ bnez $at,.JF0f069fb4
/* f069e44: 00609025 */ move $s2,$v1
/* f069e48: 1000005a */ b .JF0f069fb4
/* f069e4c: 241200ff */ li $s2,0xff
/* f069e50: 95cf0070 */ lhu $t7,0x70($t6)
.JF0f069e54:
/* f069e54: 00001025 */ move $v0,$zero
/* f069e58: 31f80008 */ andi $t8,$t7,0x8
/* f069e5c: 5300000b */ beqzl $t8,.JF0f069e8c
/* f069e60: c6080000 */ lwc1 $f8,0x0($s0)
/* f069e64: c7b600d4 */ lwc1 $f22,0xd4($sp)
/* f069e68: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f069e6c: c7ac00dc */ lwc1 $f12,0xdc($sp)
/* f069e70: 4600b587 */ neg.s $f22,$f22
/* f069e74: 46004287 */ neg.s $f10,$f8
/* f069e78: 46006307 */ neg.s $f12,$f12
/* f069e7c: e7b600d4 */ swc1 $f22,0xd4($sp)
/* f069e80: e7aa00d8 */ swc1 $f10,0xd8($sp)
/* f069e84: e7ac00dc */ swc1 $f12,0xdc($sp)
/* f069e88: c6080000 */ lwc1 $f8,0x0($s0)
.JF0f069e8c:
/* f069e8c: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f069e90: c6040004 */ lwc1 $f4,0x4($s0)
/* f069e94: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f069e98: 460a4001 */ sub.s $f0,$f8,$f10
/* f069e9c: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f069ea0: c6080008 */ lwc1 $f8,0x8($s0)
/* f069ea4: 46062081 */ sub.s $f2,$f4,$f6
/* f069ea8: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f069eac: 84790028 */ lh $t9,0x28($v1)
/* f069eb0: 460a4301 */ sub.s $f12,$f8,$f10
/* f069eb4: 46002182 */ mul.s $f6,$f4,$f0
/* f069eb8: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f069ebc: 46081282 */ mul.s $f10,$f2,$f8
/* f069ec0: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f069ec4: 460a3100 */ add.s $f4,$f6,$f10
/* f069ec8: 46086182 */ mul.s $f6,$f12,$f8
/* f069ecc: 12d90039 */ beq $s6,$t9,.JF0f069fb4
/* f069ed0: 46062580 */ add.s $f22,$f4,$f6
/* f069ed4: 00608825 */ move $s1,$v1
/* f069ed8: 84640028 */ lh $a0,0x28($v1)
.JF0f069edc:
/* f069edc: 009e0019 */ multu $a0,$s8
/* f069ee0: 8ee80000 */ lw $t0,0x0($s7)
/* f069ee4: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f069ee8: c7a800b4 */ lwc1 $f8,0xb4($sp)
/* f069eec: c7a600d4 */ lwc1 $f6,0xd4($sp)
/* f069ef0: c7a400b8 */ lwc1 $f4,0xb8($sp)
/* f069ef4: 4618b03c */ c.lt.s $f22,$f24
/* f069ef8: 00004812 */ mflo $t1
/* f069efc: 01091021 */ addu $v0,$t0,$t1
/* f069f00: c4400030 */ lwc1 $f0,0x30($v0)
/* f069f04: c4420034 */ lwc1 $f2,0x34($v0)
/* f069f08: c44c0038 */ lwc1 $f12,0x38($v0)
/* f069f0c: 460a0381 */ sub.s $f14,$f0,$f10
/* f069f10: 46081401 */ sub.s $f16,$f2,$f8
/* f069f14: 460e3282 */ mul.s $f10,$f6,$f14
/* f069f18: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f069f1c: 46046481 */ sub.s $f18,$f12,$f4
/* f069f20: 46088102 */ mul.s $f4,$f16,$f8
/* f069f24: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f069f28: 46045180 */ add.s $f6,$f10,$f4
/* f069f2c: 46089282 */ mul.s $f10,$f18,$f8
/* f069f30: 45000005 */ bc1f .JF0f069f48
/* f069f34: 460a3500 */ add.s $f20,$f6,$f10
/* f069f38: 4618b03c */ c.lt.s $f22,$f24
/* f069f3c: 00000000 */ nop
/* f069f40: 45010009 */ bc1t .JF0f069f68
/* f069f44: 00000000 */ nop
.JF0f069f48:
/* f069f48: 4616c03c */ c.lt.s $f24,$f22
/* f069f4c: 00000000 */ nop
/* f069f50: 45020015 */ bc1fl .JF0f069fa8
/* f069f54: 8624002a */ lh $a0,0x2a($s1)
/* f069f58: 4614c03c */ c.lt.s $f24,$f20
/* f069f5c: 00000000 */ nop
/* f069f60: 45020011 */ bc1fl .JF0f069fa8
/* f069f64: 8624002a */ lh $a0,0x2a($s1)
.JF0f069f68:
/* f069f68: 0fc00339 */ jal func0f000c54
/* f069f6c: 00000000 */ nop
/* f069f70: 00408025 */ move $s0,$v0
/* f069f74: 0fc002ed */ jal func0f000b24
/* f069f78: 86240028 */ lh $a0,0x28($s1)
/* f069f7c: 00501821 */ addu $v1,$v0,$s0
/* f069f80: 28610100 */ slti $at,$v1,0x100
/* f069f84: 00602825 */ move $a1,$v1
/* f069f88: 14200002 */ bnez $at,.JF0f069f94
/* f069f8c: 00402025 */ move $a0,$v0
/* f069f90: 240500ff */ li $a1,0xff
.JF0f069f94:
/* f069f94: 26b50001 */ addiu $s5,$s5,0x1
/* f069f98: 02649821 */ addu $s3,$s3,$a0
/* f069f9c: 0290a021 */ addu $s4,$s4,$s0
/* f069fa0: 02459021 */ addu $s2,$s2,$a1
/* f069fa4: 8624002a */ lh $a0,0x2a($s1)
.JF0f069fa8:
/* f069fa8: 26310002 */ addiu $s1,$s1,0x2
/* f069fac: 16c4ffcb */ bne $s6,$a0,.JF0f069edc
/* f069fb0: 00000000 */ nop
.JF0f069fb4:
/* f069fb4: 8fa70128 */ lw $a3,0x128($sp)
.JF0f069fb8:
/* f069fb8: 8faa012c */ lw $t2,0x12c($sp)
/* f069fbc: 8ce700bc */ lw $a3,0xbc($a3)
/* f069fc0: 10ea0006 */ beq $a3,$t2,.JF0f069fdc
/* f069fc4: 00000000 */ nop
/* f069fc8: 10e00004 */ beqz $a3,.JF0f069fdc
/* f069fcc: 00000000 */ nop
/* f069fd0: 8ceb0014 */ lw $t3,0x14($a3)
/* f069fd4: 5560ff76 */ bnezl $t3,.JF0f069db0
/* f069fd8: 8fb9012c */ lw $t9,0x12c($sp)
.JF0f069fdc:
/* f069fdc: 16a0000c */ bnez $s5,.JF0f06a010
/* f069fe0: 00000000 */ nop
/* f069fe4: 8fb00130 */ lw $s0,0x130($sp)
/* f069fe8: 00002825 */ move $a1,$zero
/* f069fec: 26100028 */ addiu $s0,$s0,0x28
/* f069ff0: 0fc1a70d */ jal func0f068b14
/* f069ff4: 02002025 */ move $a0,$s0
/* f069ff8: 00408825 */ move $s1,$v0
/* f069ffc: 02002025 */ move $a0,$s0
/* f06a000: 0fc1a70d */ jal func0f068b14
/* f06a004: 24050001 */ li $a1,0x1
/* f06a008: 10000017 */ b .JF0f06a068
/* f06a00c: 00401825 */ move $v1,$v0
.JF0f06a010:
/* f06a010: 0275001a */ div $zero,$s3,$s5
/* f06a014: 00008812 */ mflo $s1
/* f06a018: 16a00002 */ bnez $s5,.JF0f06a024
/* f06a01c: 00000000 */ nop
/* f06a020: 0007000d */ break 0x7
.JF0f06a024:
/* f06a024: 2401ffff */ li $at,-1
/* f06a028: 16a10004 */ bne $s5,$at,.JF0f06a03c
/* f06a02c: 3c018000 */ lui $at,0x8000
/* f06a030: 16610002 */ bne $s3,$at,.JF0f06a03c
/* f06a034: 00000000 */ nop
/* f06a038: 0006000d */ break 0x6
.JF0f06a03c:
/* f06a03c: 0295001a */ div $zero,$s4,$s5
/* f06a040: 00001812 */ mflo $v1
/* f06a044: 16a00002 */ bnez $s5,.JF0f06a050
/* f06a048: 00000000 */ nop
/* f06a04c: 0007000d */ break 0x7
.JF0f06a050:
/* f06a050: 2401ffff */ li $at,-1
/* f06a054: 16a10004 */ bne $s5,$at,.JF0f06a068
/* f06a058: 3c018000 */ lui $at,0x8000
/* f06a05c: 16810002 */ bne $s4,$at,.JF0f06a068
/* f06a060: 00000000 */ nop
/* f06a064: 0006000d */ break 0x6
.JF0f06a068:
/* f06a068: 8fac0134 */ lw $t4,0x134($sp)
/* f06a06c: 02231021 */ addu $v0,$s1,$v1
/* f06a070: 284100ff */ slti $at,$v0,0xff
/* f06a074: 51800003 */ beqzl $t4,.JF0f06a084
/* f06a078: 8fad0138 */ lw $t5,0x138($sp)
/* f06a07c: ad910000 */ sw $s1,0x0($t4)
/* f06a080: 8fad0138 */ lw $t5,0x138($sp)
.JF0f06a084:
/* f06a084: 11a00002 */ beqz $t5,.JF0f06a090
/* f06a088: 00000000 */ nop
/* f06a08c: ada30000 */ sw $v1,0x0($t5)
.JF0f06a090:
/* f06a090: 10200003 */ beqz $at,.JF0f06a0a0
/* f06a094: d7b40018 */ ldc1 $f20,0x18($sp)
/* f06a098: 10000002 */ b .JF0f06a0a4
/* f06a09c: 00401825 */ move $v1,$v0
.JF0f06a0a0:
/* f06a0a0: 240300ff */ li $v1,0xff
.JF0f06a0a4:
/* f06a0a4: 8fbf0054 */ lw $ra,0x54($sp)
/* f06a0a8: d7b60020 */ ldc1 $f22,0x20($sp)
/* f06a0ac: d7b80028 */ ldc1 $f24,0x28($sp)
/* f06a0b0: 8fb00030 */ lw $s0,0x30($sp)
/* f06a0b4: 8fb10034 */ lw $s1,0x34($sp)
/* f06a0b8: 8fb20038 */ lw $s2,0x38($sp)
/* f06a0bc: 8fb3003c */ lw $s3,0x3c($sp)
/* f06a0c0: 8fb40040 */ lw $s4,0x40($sp)
/* f06a0c4: 8fb50044 */ lw $s5,0x44($sp)
/* f06a0c8: 8fb60048 */ lw $s6,0x48($sp)
/* f06a0cc: 8fb7004c */ lw $s7,0x4c($sp)
/* f06a0d0: 8fbe0050 */ lw $s8,0x50($sp)
/* f06a0d4: 27bd0130 */ addiu $sp,$sp,0x130
/* f06a0d8: 03e00008 */ jr $ra
/* f06a0dc: 00601025 */ move $v0,$v1
);
#elif VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f068c04
/* f068e94: 27bdfed0 */ addiu $sp,$sp,-304
/* f068e98: afbf0054 */ sw $ra,0x54($sp)
/* f068e9c: afbe0050 */ sw $s8,0x50($sp)
/* f068ea0: afb7004c */ sw $s7,0x4c($sp)
/* f068ea4: afb60048 */ sw $s6,0x48($sp)
/* f068ea8: afb50044 */ sw $s5,0x44($sp)
/* f068eac: afb40040 */ sw $s4,0x40($sp)
/* f068eb0: afb3003c */ sw $s3,0x3c($sp)
/* f068eb4: afb20038 */ sw $s2,0x38($sp)
/* f068eb8: afb10034 */ sw $s1,0x34($sp)
/* f068ebc: afb00030 */ sw $s0,0x30($sp)
/* f068ec0: f7b80028 */ sdc1 $f24,0x28($sp)
/* f068ec4: f7b60020 */ sdc1 $f22,0x20($sp)
/* f068ec8: f7b40018 */ sdc1 $f20,0x18($sp)
/* f068ecc: afa40130 */ sw $a0,0x130($sp)
/* f068ed0: afa50134 */ sw $a1,0x134($sp)
/* f068ed4: afa60138 */ sw $a2,0x138($sp)
/* f068ed8: 8c8f0004 */ lw $t7,0x4($a0)
/* f068edc: 00807025 */ move $t6,$a0
/* f068ee0: 00009825 */ move $s3,$zero
/* f068ee4: 0000a025 */ move $s4,$zero
/* f068ee8: 00009025 */ move $s2,$zero
/* f068eec: 0000a825 */ move $s5,$zero
/* f068ef0: afaf012c */ sw $t7,0x12c($sp)
/* f068ef4: 11e00095 */ beqz $t7,.PF0f06914c
/* f068ef8: 01e03825 */ move $a3,$t7
/* f068efc: 8df80014 */ lw $t8,0x14($t7)
/* f068f00: 13000092 */ beqz $t8,.PF0f06914c
/* f068f04: 00000000 */ nop
/* f068f08: 3c17800a */ lui $s7,0x800a
/* f068f0c: 4480c000 */ mtc1 $zero,$f24
/* f068f10: 26f74ec8 */ addiu $s7,$s7,0x4ec8
/* f068f14: 241e008c */ li $s8,0x8c
/* f068f18: 2416ffff */ li $s6,-1
/* f068f1c: 8fb9012c */ lw $t9,0x12c($sp)
.PF0f068f20:
/* f068f20: afa70128 */ sw $a3,0x128($sp)
/* f068f24: 84e900c4 */ lh $t1,0xc4($a3)
/* f068f28: 872800c4 */ lh $t0,0xc4($t9)
/* f068f2c: 5509007e */ bnel $t0,$t1,.PF0f069128
/* f068f30: 8fa70128 */ lw $a3,0x128($sp)
/* f068f34: 3c02800a */ lui $v0,0x800a
/* f068f38: 8c42a794 */ lw $v0,-0x586c($v0)
/* f068f3c: afa70128 */ sw $a3,0x128($sp)
/* f068f40: 8c4a00bc */ lw $t2,0xbc($v0)
/* f068f44: 51400078 */ beqzl $t2,.PF0f069128
/* f068f48: 8fa70128 */ lw $a3,0x128($sp)
/* f068f4c: 8ce30014 */ lw $v1,0x14($a3)
/* f068f50: 84e40006 */ lh $a0,0x6($a3)
/* f068f54: 24501bb0 */ addiu $s0,$v0,0x1bb0
/* f068f58: afa70128 */ sw $a3,0x128($sp)
/* f068f5c: 2405005e */ li $a1,0x5e
/* f068f60: 27a600b0 */ addiu $a2,$sp,0xb0
/* f068f64: 0fc45964 */ jal padUnpack
/* f068f68: afa30104 */ sw $v1,0x104($sp)
/* f068f6c: 8fab012c */ lw $t3,0x12c($sp)
/* f068f70: 3c010400 */ lui $at,0x400
/* f068f74: 8fa30104 */ lw $v1,0x104($sp)
/* f068f78: 8d6c0010 */ lw $t4,0x10($t3)
/* f068f7c: 8fae012c */ lw $t6,0x12c($sp)
/* f068f80: 01816824 */ and $t5,$t4,$at
/* f068f84: 51a0000f */ beqzl $t5,.PF0f068fc4
/* f068f88: 95cf0070 */ lhu $t7,0x70($t6)
/* f068f8c: 0fc002c9 */ jal func0f000b24
/* f068f90: 8fa400f8 */ lw $a0,0xf8($sp)
/* f068f94: 02629821 */ addu $s3,$s3,$v0
/* f068f98: 0fc00315 */ jal func0f000c54
/* f068f9c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f068fa0: 0282a021 */ addu $s4,$s4,$v0
/* f068fa4: 02741821 */ addu $v1,$s3,$s4
/* f068fa8: 28610100 */ slti $at,$v1,0x100
/* f068fac: 26b50001 */ addiu $s5,$s5,0x1
/* f068fb0: 1420005c */ bnez $at,.PF0f069124
/* f068fb4: 00609025 */ move $s2,$v1
/* f068fb8: 1000005a */ b .PF0f069124
/* f068fbc: 241200ff */ li $s2,0xff
/* f068fc0: 95cf0070 */ lhu $t7,0x70($t6)
.PF0f068fc4:
/* f068fc4: 00001025 */ move $v0,$zero
/* f068fc8: 31f80008 */ andi $t8,$t7,0x8
/* f068fcc: 5300000b */ beqzl $t8,.PF0f068ffc
/* f068fd0: c6080000 */ lwc1 $f8,0x0($s0)
/* f068fd4: c7b600d4 */ lwc1 $f22,0xd4($sp)
/* f068fd8: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068fdc: c7ac00dc */ lwc1 $f12,0xdc($sp)
/* f068fe0: 4600b587 */ neg.s $f22,$f22
/* f068fe4: 46004287 */ neg.s $f10,$f8
/* f068fe8: 46006307 */ neg.s $f12,$f12
/* f068fec: e7b600d4 */ swc1 $f22,0xd4($sp)
/* f068ff0: e7aa00d8 */ swc1 $f10,0xd8($sp)
/* f068ff4: e7ac00dc */ swc1 $f12,0xdc($sp)
/* f068ff8: c6080000 */ lwc1 $f8,0x0($s0)
.PF0f068ffc:
/* f068ffc: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f069000: c6040004 */ lwc1 $f4,0x4($s0)
/* f069004: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f069008: 460a4001 */ sub.s $f0,$f8,$f10
/* f06900c: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f069010: c6080008 */ lwc1 $f8,0x8($s0)
/* f069014: 46062081 */ sub.s $f2,$f4,$f6
/* f069018: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f06901c: 84790028 */ lh $t9,0x28($v1)
/* f069020: 460a4301 */ sub.s $f12,$f8,$f10
/* f069024: 46002182 */ mul.s $f6,$f4,$f0
/* f069028: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f06902c: 46081282 */ mul.s $f10,$f2,$f8
/* f069030: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f069034: 460a3100 */ add.s $f4,$f6,$f10
/* f069038: 46086182 */ mul.s $f6,$f12,$f8
/* f06903c: 12d90039 */ beq $s6,$t9,.PF0f069124
/* f069040: 46062580 */ add.s $f22,$f4,$f6
/* f069044: 00608825 */ move $s1,$v1
/* f069048: 84640028 */ lh $a0,0x28($v1)
.PF0f06904c:
/* f06904c: 009e0019 */ multu $a0,$s8
/* f069050: 8ee80000 */ lw $t0,0x0($s7)
/* f069054: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f069058: c7a800b4 */ lwc1 $f8,0xb4($sp)
/* f06905c: c7a600d4 */ lwc1 $f6,0xd4($sp)
/* f069060: c7a400b8 */ lwc1 $f4,0xb8($sp)
/* f069064: 4618b03c */ c.lt.s $f22,$f24
/* f069068: 00004812 */ mflo $t1
/* f06906c: 01091021 */ addu $v0,$t0,$t1
/* f069070: c4400030 */ lwc1 $f0,0x30($v0)
/* f069074: c4420034 */ lwc1 $f2,0x34($v0)
/* f069078: c44c0038 */ lwc1 $f12,0x38($v0)
/* f06907c: 460a0381 */ sub.s $f14,$f0,$f10
/* f069080: 46081401 */ sub.s $f16,$f2,$f8
/* f069084: 460e3282 */ mul.s $f10,$f6,$f14
/* f069088: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f06908c: 46046481 */ sub.s $f18,$f12,$f4
/* f069090: 46088102 */ mul.s $f4,$f16,$f8
/* f069094: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f069098: 46045180 */ add.s $f6,$f10,$f4
/* f06909c: 46089282 */ mul.s $f10,$f18,$f8
/* f0690a0: 45000005 */ bc1f .PF0f0690b8
/* f0690a4: 460a3500 */ add.s $f20,$f6,$f10
/* f0690a8: 4618b03c */ c.lt.s $f22,$f24
/* f0690ac: 00000000 */ nop
/* f0690b0: 45010009 */ bc1t .PF0f0690d8
/* f0690b4: 00000000 */ nop
.PF0f0690b8:
/* f0690b8: 4616c03c */ c.lt.s $f24,$f22
/* f0690bc: 00000000 */ nop
/* f0690c0: 45020015 */ bc1fl .PF0f069118
/* f0690c4: 8624002a */ lh $a0,0x2a($s1)
/* f0690c8: 4614c03c */ c.lt.s $f24,$f20
/* f0690cc: 00000000 */ nop
/* f0690d0: 45020011 */ bc1fl .PF0f069118
/* f0690d4: 8624002a */ lh $a0,0x2a($s1)
.PF0f0690d8:
/* f0690d8: 0fc00315 */ jal func0f000c54
/* f0690dc: 00000000 */ nop
/* f0690e0: 00408025 */ move $s0,$v0
/* f0690e4: 0fc002c9 */ jal func0f000b24
/* f0690e8: 86240028 */ lh $a0,0x28($s1)
/* f0690ec: 00501821 */ addu $v1,$v0,$s0
/* f0690f0: 28610100 */ slti $at,$v1,0x100
/* f0690f4: 00602825 */ move $a1,$v1
/* f0690f8: 14200002 */ bnez $at,.PF0f069104
/* f0690fc: 00402025 */ move $a0,$v0
/* f069100: 240500ff */ li $a1,0xff
.PF0f069104:
/* f069104: 26b50001 */ addiu $s5,$s5,0x1
/* f069108: 02649821 */ addu $s3,$s3,$a0
/* f06910c: 0290a021 */ addu $s4,$s4,$s0
/* f069110: 02459021 */ addu $s2,$s2,$a1
/* f069114: 8624002a */ lh $a0,0x2a($s1)
.PF0f069118:
/* f069118: 26310002 */ addiu $s1,$s1,0x2
/* f06911c: 16c4ffcb */ bne $s6,$a0,.PF0f06904c
/* f069120: 00000000 */ nop
.PF0f069124:
/* f069124: 8fa70128 */ lw $a3,0x128($sp)
.PF0f069128:
/* f069128: 8faa012c */ lw $t2,0x12c($sp)
/* f06912c: 8ce700bc */ lw $a3,0xbc($a3)
/* f069130: 10ea0006 */ beq $a3,$t2,.PF0f06914c
/* f069134: 00000000 */ nop
/* f069138: 10e00004 */ beqz $a3,.PF0f06914c
/* f06913c: 00000000 */ nop
/* f069140: 8ceb0014 */ lw $t3,0x14($a3)
/* f069144: 5560ff76 */ bnezl $t3,.PF0f068f20
/* f069148: 8fb9012c */ lw $t9,0x12c($sp)
.PF0f06914c:
/* f06914c: 16a0000c */ bnez $s5,.PF0f069180
/* f069150: 00000000 */ nop
/* f069154: 8fb00130 */ lw $s0,0x130($sp)
/* f069158: 00002825 */ move $a1,$zero
/* f06915c: 26100028 */ addiu $s0,$s0,0x28
/* f069160: 0fc1a369 */ jal func0f068b14
/* f069164: 02002025 */ move $a0,$s0
/* f069168: 00408825 */ move $s1,$v0
/* f06916c: 02002025 */ move $a0,$s0
/* f069170: 0fc1a369 */ jal func0f068b14
/* f069174: 24050001 */ li $a1,0x1
/* f069178: 10000017 */ b .PF0f0691d8
/* f06917c: 00401825 */ move $v1,$v0
.PF0f069180:
/* f069180: 0275001a */ div $zero,$s3,$s5
/* f069184: 00008812 */ mflo $s1
/* f069188: 16a00002 */ bnez $s5,.PF0f069194
/* f06918c: 00000000 */ nop
/* f069190: 0007000d */ break 0x7
.PF0f069194:
/* f069194: 2401ffff */ li $at,-1
/* f069198: 16a10004 */ bne $s5,$at,.PF0f0691ac
/* f06919c: 3c018000 */ lui $at,0x8000
/* f0691a0: 16610002 */ bne $s3,$at,.PF0f0691ac
/* f0691a4: 00000000 */ nop
/* f0691a8: 0006000d */ break 0x6
.PF0f0691ac:
/* f0691ac: 0295001a */ div $zero,$s4,$s5
/* f0691b0: 00001812 */ mflo $v1
/* f0691b4: 16a00002 */ bnez $s5,.PF0f0691c0
/* f0691b8: 00000000 */ nop
/* f0691bc: 0007000d */ break 0x7
.PF0f0691c0:
/* f0691c0: 2401ffff */ li $at,-1
/* f0691c4: 16a10004 */ bne $s5,$at,.PF0f0691d8
/* f0691c8: 3c018000 */ lui $at,0x8000
/* f0691cc: 16810002 */ bne $s4,$at,.PF0f0691d8
/* f0691d0: 00000000 */ nop
/* f0691d4: 0006000d */ break 0x6
.PF0f0691d8:
/* f0691d8: 8fac0134 */ lw $t4,0x134($sp)
/* f0691dc: 02231021 */ addu $v0,$s1,$v1
/* f0691e0: 284100ff */ slti $at,$v0,0xff
/* f0691e4: 51800003 */ beqzl $t4,.PF0f0691f4
/* f0691e8: 8fad0138 */ lw $t5,0x138($sp)
/* f0691ec: ad910000 */ sw $s1,0x0($t4)
/* f0691f0: 8fad0138 */ lw $t5,0x138($sp)
.PF0f0691f4:
/* f0691f4: 11a00002 */ beqz $t5,.PF0f069200
/* f0691f8: 00000000 */ nop
/* f0691fc: ada30000 */ sw $v1,0x0($t5)
.PF0f069200:
/* f069200: 10200003 */ beqz $at,.PF0f069210
/* f069204: d7b40018 */ ldc1 $f20,0x18($sp)
/* f069208: 10000002 */ b .PF0f069214
/* f06920c: 00401825 */ move $v1,$v0
.PF0f069210:
/* f069210: 240300ff */ li $v1,0xff
.PF0f069214:
/* f069214: 8fbf0054 */ lw $ra,0x54($sp)
/* f069218: d7b60020 */ ldc1 $f22,0x20($sp)
/* f06921c: d7b80028 */ ldc1 $f24,0x28($sp)
/* f069220: 8fb00030 */ lw $s0,0x30($sp)
/* f069224: 8fb10034 */ lw $s1,0x34($sp)
/* f069228: 8fb20038 */ lw $s2,0x38($sp)
/* f06922c: 8fb3003c */ lw $s3,0x3c($sp)
/* f069230: 8fb40040 */ lw $s4,0x40($sp)
/* f069234: 8fb50044 */ lw $s5,0x44($sp)
/* f069238: 8fb60048 */ lw $s6,0x48($sp)
/* f06923c: 8fb7004c */ lw $s7,0x4c($sp)
/* f069240: 8fbe0050 */ lw $s8,0x50($sp)
/* f069244: 27bd0130 */ addiu $sp,$sp,0x130
/* f069248: 03e00008 */ jr $ra
/* f06924c: 00601025 */ move $v0,$v1
);
#elif VERSION >= VERSION_PAL_BETA
GLOBAL_ASM(
glabel func0f068c04
/* f068de4: 27bdfed0 */ addiu $sp,$sp,-304
/* f068de8: afbf0054 */ sw $ra,0x54($sp)
/* f068dec: afbe0050 */ sw $s8,0x50($sp)
/* f068df0: afb7004c */ sw $s7,0x4c($sp)
/* f068df4: afb60048 */ sw $s6,0x48($sp)
/* f068df8: afb50044 */ sw $s5,0x44($sp)
/* f068dfc: afb40040 */ sw $s4,0x40($sp)
/* f068e00: afb3003c */ sw $s3,0x3c($sp)
/* f068e04: afb20038 */ sw $s2,0x38($sp)
/* f068e08: afb10034 */ sw $s1,0x34($sp)
/* f068e0c: afb00030 */ sw $s0,0x30($sp)
/* f068e10: f7b80028 */ sdc1 $f24,0x28($sp)
/* f068e14: f7b60020 */ sdc1 $f22,0x20($sp)
/* f068e18: f7b40018 */ sdc1 $f20,0x18($sp)
/* f068e1c: afa40130 */ sw $a0,0x130($sp)
/* f068e20: afa50134 */ sw $a1,0x134($sp)
/* f068e24: afa60138 */ sw $a2,0x138($sp)
/* f068e28: 8c8f0004 */ lw $t7,0x4($a0)
/* f068e2c: 00807025 */ move $t6,$a0
/* f068e30: 00009825 */ move $s3,$zero
/* f068e34: 0000a025 */ move $s4,$zero
/* f068e38: 00009025 */ move $s2,$zero
/* f068e3c: 0000a825 */ move $s5,$zero
/* f068e40: afaf012c */ sw $t7,0x12c($sp)
/* f068e44: 11e00095 */ beqz $t7,.PB0f06909c
/* f068e48: 01e03825 */ move $a3,$t7
/* f068e4c: 8df80014 */ lw $t8,0x14($t7)
/* f068e50: 13000092 */ beqz $t8,.PB0f06909c
/* f068e54: 00000000 */ nop
/* f068e58: 3c17800b */ lui $s7,0x800b
/* f068e5c: 4480c000 */ mtc1 $zero,$f24
/* f068e60: 26f78f48 */ addiu $s7,$s7,-28856
/* f068e64: 241e008c */ li $s8,0x8c
/* f068e68: 2416ffff */ li $s6,-1
/* f068e6c: 8fb9012c */ lw $t9,0x12c($sp)
.PB0f068e70:
/* f068e70: afa70128 */ sw $a3,0x128($sp)
/* f068e74: 84e900c4 */ lh $t1,0xc4($a3)
/* f068e78: 872800c4 */ lh $t0,0xc4($t9)
/* f068e7c: 5509007e */ bnel $t0,$t1,.PB0f069078
/* f068e80: 8fa70128 */ lw $a3,0x128($sp)
/* f068e84: 3c02800a */ lui $v0,0x800a
/* f068e88: 8c42e754 */ lw $v0,-0x18ac($v0)
/* f068e8c: afa70128 */ sw $a3,0x128($sp)
/* f068e90: 8c4a00bc */ lw $t2,0xbc($v0)
/* f068e94: 51400078 */ beqzl $t2,.PB0f069078
/* f068e98: 8fa70128 */ lw $a3,0x128($sp)
/* f068e9c: 8ce30014 */ lw $v1,0x14($a3)
/* f068ea0: 84e40006 */ lh $a0,0x6($a3)
/* f068ea4: 24501bb0 */ addiu $s0,$v0,0x1bb0
/* f068ea8: afa70128 */ sw $a3,0x128($sp)
/* f068eac: 2405005e */ li $a1,0x5e
/* f068eb0: 27a600b0 */ addiu $a2,$sp,0xb0
/* f068eb4: 0fc458d4 */ jal padUnpack
/* f068eb8: afa30104 */ sw $v1,0x104($sp)
/* f068ebc: 8fab012c */ lw $t3,0x12c($sp)
/* f068ec0: 3c010400 */ lui $at,0x400
/* f068ec4: 8fa30104 */ lw $v1,0x104($sp)
/* f068ec8: 8d6c0010 */ lw $t4,0x10($t3)
/* f068ecc: 8fae012c */ lw $t6,0x12c($sp)
/* f068ed0: 01816824 */ and $t5,$t4,$at
/* f068ed4: 51a0000f */ beqzl $t5,.PB0f068f14
/* f068ed8: 95cf0070 */ lhu $t7,0x70($t6)
/* f068edc: 0fc002c9 */ jal func0f000b24
/* f068ee0: 8fa400f8 */ lw $a0,0xf8($sp)
/* f068ee4: 02629821 */ addu $s3,$s3,$v0
/* f068ee8: 0fc00315 */ jal func0f000c54
/* f068eec: 8fa400f8 */ lw $a0,0xf8($sp)
/* f068ef0: 0282a021 */ addu $s4,$s4,$v0
/* f068ef4: 02741821 */ addu $v1,$s3,$s4
/* f068ef8: 28610100 */ slti $at,$v1,0x100
/* f068efc: 26b50001 */ addiu $s5,$s5,0x1
/* f068f00: 1420005c */ bnez $at,.PB0f069074
/* f068f04: 00609025 */ move $s2,$v1
/* f068f08: 1000005a */ b .PB0f069074
/* f068f0c: 241200ff */ li $s2,0xff
/* f068f10: 95cf0070 */ lhu $t7,0x70($t6)
.PB0f068f14:
/* f068f14: 00001025 */ move $v0,$zero
/* f068f18: 31f80008 */ andi $t8,$t7,0x8
/* f068f1c: 5300000b */ beqzl $t8,.PB0f068f4c
/* f068f20: c6080000 */ lwc1 $f8,0x0($s0)
/* f068f24: c7b600d4 */ lwc1 $f22,0xd4($sp)
/* f068f28: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068f2c: c7ac00dc */ lwc1 $f12,0xdc($sp)
/* f068f30: 4600b587 */ neg.s $f22,$f22
/* f068f34: 46004287 */ neg.s $f10,$f8
/* f068f38: 46006307 */ neg.s $f12,$f12
/* f068f3c: e7b600d4 */ swc1 $f22,0xd4($sp)
/* f068f40: e7aa00d8 */ swc1 $f10,0xd8($sp)
/* f068f44: e7ac00dc */ swc1 $f12,0xdc($sp)
/* f068f48: c6080000 */ lwc1 $f8,0x0($s0)
.PB0f068f4c:
/* f068f4c: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f068f50: c6040004 */ lwc1 $f4,0x4($s0)
/* f068f54: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f068f58: 460a4001 */ sub.s $f0,$f8,$f10
/* f068f5c: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f068f60: c6080008 */ lwc1 $f8,0x8($s0)
/* f068f64: 46062081 */ sub.s $f2,$f4,$f6
/* f068f68: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f068f6c: 84790028 */ lh $t9,0x28($v1)
/* f068f70: 460a4301 */ sub.s $f12,$f8,$f10
/* f068f74: 46002182 */ mul.s $f6,$f4,$f0
/* f068f78: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068f7c: 46081282 */ mul.s $f10,$f2,$f8
/* f068f80: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f068f84: 460a3100 */ add.s $f4,$f6,$f10
/* f068f88: 46086182 */ mul.s $f6,$f12,$f8
/* f068f8c: 12d90039 */ beq $s6,$t9,.PB0f069074
/* f068f90: 46062580 */ add.s $f22,$f4,$f6
/* f068f94: 00608825 */ move $s1,$v1
/* f068f98: 84640028 */ lh $a0,0x28($v1)
.PB0f068f9c:
/* f068f9c: 009e0019 */ multu $a0,$s8
/* f068fa0: 8ee80000 */ lw $t0,0x0($s7)
/* f068fa4: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f068fa8: c7a800b4 */ lwc1 $f8,0xb4($sp)
/* f068fac: c7a600d4 */ lwc1 $f6,0xd4($sp)
/* f068fb0: c7a400b8 */ lwc1 $f4,0xb8($sp)
/* f068fb4: 4618b03c */ c.lt.s $f22,$f24
/* f068fb8: 00004812 */ mflo $t1
/* f068fbc: 01091021 */ addu $v0,$t0,$t1
/* f068fc0: c4400030 */ lwc1 $f0,0x30($v0)
/* f068fc4: c4420034 */ lwc1 $f2,0x34($v0)
/* f068fc8: c44c0038 */ lwc1 $f12,0x38($v0)
/* f068fcc: 460a0381 */ sub.s $f14,$f0,$f10
/* f068fd0: 46081401 */ sub.s $f16,$f2,$f8
/* f068fd4: 460e3282 */ mul.s $f10,$f6,$f14
/* f068fd8: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068fdc: 46046481 */ sub.s $f18,$f12,$f4
/* f068fe0: 46088102 */ mul.s $f4,$f16,$f8
/* f068fe4: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f068fe8: 46045180 */ add.s $f6,$f10,$f4
/* f068fec: 46089282 */ mul.s $f10,$f18,$f8
/* f068ff0: 45000005 */ bc1f .PB0f069008
/* f068ff4: 460a3500 */ add.s $f20,$f6,$f10
/* f068ff8: 4618b03c */ c.lt.s $f22,$f24
/* f068ffc: 00000000 */ nop
/* f069000: 45010009 */ bc1t .PB0f069028
/* f069004: 00000000 */ nop
.PB0f069008:
/* f069008: 4616c03c */ c.lt.s $f24,$f22
/* f06900c: 00000000 */ nop
/* f069010: 45020015 */ bc1fl .PB0f069068
/* f069014: 8624002a */ lh $a0,0x2a($s1)
/* f069018: 4614c03c */ c.lt.s $f24,$f20
/* f06901c: 00000000 */ nop
/* f069020: 45020011 */ bc1fl .PB0f069068
/* f069024: 8624002a */ lh $a0,0x2a($s1)
.PB0f069028:
/* f069028: 0fc00315 */ jal func0f000c54
/* f06902c: 00000000 */ nop
/* f069030: 00408025 */ move $s0,$v0
/* f069034: 0fc002c9 */ jal func0f000b24
/* f069038: 86240028 */ lh $a0,0x28($s1)
/* f06903c: 00501821 */ addu $v1,$v0,$s0
/* f069040: 28610100 */ slti $at,$v1,0x100
/* f069044: 00602825 */ move $a1,$v1
/* f069048: 14200002 */ bnez $at,.PB0f069054
/* f06904c: 00402025 */ move $a0,$v0
/* f069050: 240500ff */ li $a1,0xff
.PB0f069054:
/* f069054: 26b50001 */ addiu $s5,$s5,0x1
/* f069058: 02649821 */ addu $s3,$s3,$a0
/* f06905c: 0290a021 */ addu $s4,$s4,$s0
/* f069060: 02459021 */ addu $s2,$s2,$a1
/* f069064: 8624002a */ lh $a0,0x2a($s1)
.PB0f069068:
/* f069068: 26310002 */ addiu $s1,$s1,0x2
/* f06906c: 16c4ffcb */ bne $s6,$a0,.PB0f068f9c
/* f069070: 00000000 */ nop
.PB0f069074:
/* f069074: 8fa70128 */ lw $a3,0x128($sp)
.PB0f069078:
/* f069078: 8faa012c */ lw $t2,0x12c($sp)
/* f06907c: 8ce700bc */ lw $a3,0xbc($a3)
/* f069080: 10ea0006 */ beq $a3,$t2,.PB0f06909c
/* f069084: 00000000 */ nop
/* f069088: 10e00004 */ beqz $a3,.PB0f06909c
/* f06908c: 00000000 */ nop
/* f069090: 8ceb0014 */ lw $t3,0x14($a3)
/* f069094: 5560ff76 */ bnezl $t3,.PB0f068e70
/* f069098: 8fb9012c */ lw $t9,0x12c($sp)
.PB0f06909c:
/* f06909c: 16a0000c */ bnez $s5,.PB0f0690d0
/* f0690a0: 00000000 */ nop
/* f0690a4: 8fb00130 */ lw $s0,0x130($sp)
/* f0690a8: 00002825 */ move $a1,$zero
/* f0690ac: 26100028 */ addiu $s0,$s0,0x28
/* f0690b0: 0fc1a33d */ jal func0f068b14
/* f0690b4: 02002025 */ move $a0,$s0
/* f0690b8: 00408825 */ move $s1,$v0
/* f0690bc: 02002025 */ move $a0,$s0
/* f0690c0: 0fc1a33d */ jal func0f068b14
/* f0690c4: 24050001 */ li $a1,0x1
/* f0690c8: 10000017 */ b .PB0f069128
/* f0690cc: 00401825 */ move $v1,$v0
.PB0f0690d0:
/* f0690d0: 0275001a */ div $zero,$s3,$s5
/* f0690d4: 00008812 */ mflo $s1
/* f0690d8: 16a00002 */ bnez $s5,.PB0f0690e4
/* f0690dc: 00000000 */ nop
/* f0690e0: 0007000d */ break 0x7
.PB0f0690e4:
/* f0690e4: 2401ffff */ li $at,-1
/* f0690e8: 16a10004 */ bne $s5,$at,.PB0f0690fc
/* f0690ec: 3c018000 */ lui $at,0x8000
/* f0690f0: 16610002 */ bne $s3,$at,.PB0f0690fc
/* f0690f4: 00000000 */ nop
/* f0690f8: 0006000d */ break 0x6
.PB0f0690fc:
/* f0690fc: 0295001a */ div $zero,$s4,$s5
/* f069100: 00001812 */ mflo $v1
/* f069104: 16a00002 */ bnez $s5,.PB0f069110
/* f069108: 00000000 */ nop
/* f06910c: 0007000d */ break 0x7
.PB0f069110:
/* f069110: 2401ffff */ li $at,-1
/* f069114: 16a10004 */ bne $s5,$at,.PB0f069128
/* f069118: 3c018000 */ lui $at,0x8000
/* f06911c: 16810002 */ bne $s4,$at,.PB0f069128
/* f069120: 00000000 */ nop
/* f069124: 0006000d */ break 0x6
.PB0f069128:
/* f069128: 8fac0134 */ lw $t4,0x134($sp)
/* f06912c: 02231021 */ addu $v0,$s1,$v1
/* f069130: 284100ff */ slti $at,$v0,0xff
/* f069134: 51800003 */ beqzl $t4,.PB0f069144
/* f069138: 8fad0138 */ lw $t5,0x138($sp)
/* f06913c: ad910000 */ sw $s1,0x0($t4)
/* f069140: 8fad0138 */ lw $t5,0x138($sp)
.PB0f069144:
/* f069144: 11a00002 */ beqz $t5,.PB0f069150
/* f069148: 00000000 */ nop
/* f06914c: ada30000 */ sw $v1,0x0($t5)
.PB0f069150:
/* f069150: 10200003 */ beqz $at,.PB0f069160
/* f069154: d7b40018 */ ldc1 $f20,0x18($sp)
/* f069158: 10000002 */ b .PB0f069164
/* f06915c: 00401825 */ move $v1,$v0
.PB0f069160:
/* f069160: 240300ff */ li $v1,0xff
.PB0f069164:
/* f069164: 8fbf0054 */ lw $ra,0x54($sp)
/* f069168: d7b60020 */ ldc1 $f22,0x20($sp)
/* f06916c: d7b80028 */ ldc1 $f24,0x28($sp)
/* f069170: 8fb00030 */ lw $s0,0x30($sp)
/* f069174: 8fb10034 */ lw $s1,0x34($sp)
/* f069178: 8fb20038 */ lw $s2,0x38($sp)
/* f06917c: 8fb3003c */ lw $s3,0x3c($sp)
/* f069180: 8fb40040 */ lw $s4,0x40($sp)
/* f069184: 8fb50044 */ lw $s5,0x44($sp)
/* f069188: 8fb60048 */ lw $s6,0x48($sp)
/* f06918c: 8fb7004c */ lw $s7,0x4c($sp)
/* f069190: 8fbe0050 */ lw $s8,0x50($sp)
/* f069194: 27bd0130 */ addiu $sp,$sp,0x130
/* f069198: 03e00008 */ jr $ra
/* f06919c: 00601025 */ move $v0,$v1
);
#else
GLOBAL_ASM(
glabel func0f068c04
/* f068c04: 27bdfed0 */ addiu $sp,$sp,-304
/* f068c08: afbf0054 */ sw $ra,0x54($sp)
/* f068c0c: afbe0050 */ sw $s8,0x50($sp)
/* f068c10: afb7004c */ sw $s7,0x4c($sp)
/* f068c14: afb60048 */ sw $s6,0x48($sp)
/* f068c18: afb50044 */ sw $s5,0x44($sp)
/* f068c1c: afb40040 */ sw $s4,0x40($sp)
/* f068c20: afb3003c */ sw $s3,0x3c($sp)
/* f068c24: afb20038 */ sw $s2,0x38($sp)
/* f068c28: afb10034 */ sw $s1,0x34($sp)
/* f068c2c: afb00030 */ sw $s0,0x30($sp)
/* f068c30: f7b80028 */ sdc1 $f24,0x28($sp)
/* f068c34: f7b60020 */ sdc1 $f22,0x20($sp)
/* f068c38: f7b40018 */ sdc1 $f20,0x18($sp)
/* f068c3c: afa40130 */ sw $a0,0x130($sp)
/* f068c40: afa50134 */ sw $a1,0x134($sp)
/* f068c44: afa60138 */ sw $a2,0x138($sp)
/* f068c48: 8c8f0004 */ lw $t7,0x4($a0)
/* f068c4c: 3c047f1b */ lui $a0,%hi(var7f1a9f60)
/* f068c50: 3c058007 */ lui $a1,%hi(var80069974)
/* f068c54: 00009825 */ or $s3,$zero,$zero
/* f068c58: 0000a025 */ or $s4,$zero,$zero
/* f068c5c: 00009025 */ or $s2,$zero,$zero
/* f068c60: 0000a825 */ or $s5,$zero,$zero
/* f068c64: 24a59974 */ addiu $a1,$a1,%lo(var80069974)
/* f068c68: 24849f60 */ addiu $a0,$a0,%lo(var7f1a9f60)
/* f068c6c: 0c0036cc */ jal mainOverrideVariable
/* f068c70: afaf012c */ sw $t7,0x12c($sp)
/* f068c74: 8fa3012c */ lw $v1,0x12c($sp)
/* f068c78: 10600092 */ beqz $v1,.L0f068ec4
/* f068c7c: 00603825 */ or $a3,$v1,$zero
/* f068c80: 8c780014 */ lw $t8,0x14($v1)
/* f068c84: 1300008f */ beqz $t8,.L0f068ec4
/* f068c88: 00000000 */ nop
/* f068c8c: 3c17800a */ lui $s7,%hi(g_Rooms)
/* f068c90: 4480c000 */ mtc1 $zero,$f24
/* f068c94: 26f74928 */ addiu $s7,$s7,%lo(g_Rooms)
/* f068c98: 241e008c */ addiu $s8,$zero,0x8c
/* f068c9c: 2416ffff */ addiu $s6,$zero,-1
/* f068ca0: afa70128 */ sw $a3,0x128($sp)
.L0f068ca4:
/* f068ca4: 84e800c4 */ lh $t0,0xc4($a3)
/* f068ca8: 847900c4 */ lh $t9,0xc4($v1)
/* f068cac: 5728007c */ bnel $t9,$t0,.L0f068ea0
/* f068cb0: 8fa70128 */ lw $a3,0x128($sp)
/* f068cb4: 3c02800a */ lui $v0,%hi(g_Vars+0x284)
/* f068cb8: 8c42a244 */ lw $v0,%lo(g_Vars+0x284)($v0)
/* f068cbc: afa70128 */ sw $a3,0x128($sp)
/* f068cc0: 8c4900bc */ lw $t1,0xbc($v0)
/* f068cc4: 51200076 */ beqzl $t1,.L0f068ea0
/* f068cc8: 8fa70128 */ lw $a3,0x128($sp)
/* f068ccc: 8ce30014 */ lw $v1,0x14($a3)
/* f068cd0: 84e40006 */ lh $a0,0x6($a3)
/* f068cd4: 24501bb0 */ addiu $s0,$v0,0x1bb0
/* f068cd8: afa70128 */ sw $a3,0x128($sp)
/* f068cdc: 2405005e */ addiu $a1,$zero,0x5e
/* f068ce0: 27a600b0 */ addiu $a2,$sp,0xb0
/* f068ce4: 0fc456ac */ jal padUnpack
/* f068ce8: afa30104 */ sw $v1,0x104($sp)
/* f068cec: 8faa012c */ lw $t2,0x12c($sp)
/* f068cf0: 3c010400 */ lui $at,0x400
/* f068cf4: 8fa30104 */ lw $v1,0x104($sp)
/* f068cf8: 8d4b0010 */ lw $t3,0x10($t2)
/* f068cfc: 8fad012c */ lw $t5,0x12c($sp)
/* f068d00: 01616024 */ and $t4,$t3,$at
/* f068d04: 5180000e */ beqzl $t4,.L0f068d40
/* f068d08: 95ae0070 */ lhu $t6,0x70($t5)
/* f068d0c: 0fc002c9 */ jal func0f000b24
/* f068d10: 8fa400f8 */ lw $a0,0xf8($sp)
/* f068d14: 02629821 */ addu $s3,$s3,$v0
/* f068d18: 0fc00315 */ jal func0f000c54
/* f068d1c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f068d20: 0282a021 */ addu $s4,$s4,$v0
/* f068d24: 02749021 */ addu $s2,$s3,$s4
/* f068d28: 2a410100 */ slti $at,$s2,0x100
/* f068d2c: 1420005b */ bnez $at,.L0f068e9c
/* f068d30: 26b50001 */ addiu $s5,$s5,0x1
/* f068d34: 10000059 */ b .L0f068e9c
/* f068d38: 241200ff */ addiu $s2,$zero,0xff
/* f068d3c: 95ae0070 */ lhu $t6,0x70($t5)
.L0f068d40:
/* f068d40: 00001025 */ or $v0,$zero,$zero
/* f068d44: 31cf0008 */ andi $t7,$t6,0x8
/* f068d48: 51e0000b */ beqzl $t7,.L0f068d78
/* f068d4c: c6080000 */ lwc1 $f8,0x0($s0)
/* f068d50: c7b600d4 */ lwc1 $f22,0xd4($sp)
/* f068d54: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068d58: c7ac00dc */ lwc1 $f12,0xdc($sp)
/* f068d5c: 4600b587 */ neg.s $f22,$f22
/* f068d60: 46004287 */ neg.s $f10,$f8
/* f068d64: 46006307 */ neg.s $f12,$f12
/* f068d68: e7b600d4 */ swc1 $f22,0xd4($sp)
/* f068d6c: e7aa00d8 */ swc1 $f10,0xd8($sp)
/* f068d70: e7ac00dc */ swc1 $f12,0xdc($sp)
/* f068d74: c6080000 */ lwc1 $f8,0x0($s0)
.L0f068d78:
/* f068d78: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f068d7c: c6040004 */ lwc1 $f4,0x4($s0)
/* f068d80: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f068d84: 460a4001 */ sub.s $f0,$f8,$f10
/* f068d88: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f068d8c: c6080008 */ lwc1 $f8,0x8($s0)
/* f068d90: 46062081 */ sub.s $f2,$f4,$f6
/* f068d94: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f068d98: 84780028 */ lh $t8,0x28($v1)
/* f068d9c: 460a4301 */ sub.s $f12,$f8,$f10
/* f068da0: 46002182 */ mul.s $f6,$f4,$f0
/* f068da4: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068da8: 46081282 */ mul.s $f10,$f2,$f8
/* f068dac: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f068db0: 460a3100 */ add.s $f4,$f6,$f10
/* f068db4: 46086182 */ mul.s $f6,$f12,$f8
/* f068db8: 12d80038 */ beq $s6,$t8,.L0f068e9c
/* f068dbc: 46062580 */ add.s $f22,$f4,$f6
/* f068dc0: 00608825 */ or $s1,$v1,$zero
/* f068dc4: 84640028 */ lh $a0,0x28($v1)
.L0f068dc8:
/* f068dc8: 009e0019 */ multu $a0,$s8
/* f068dcc: 8ef90000 */ lw $t9,0x0($s7)
/* f068dd0: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f068dd4: c7a800b4 */ lwc1 $f8,0xb4($sp)
/* f068dd8: c7a600d4 */ lwc1 $f6,0xd4($sp)
/* f068ddc: c7a400b8 */ lwc1 $f4,0xb8($sp)
/* f068de0: 4618b03c */ c.lt.s $f22,$f24
/* f068de4: 00004012 */ mflo $t0
/* f068de8: 03281021 */ addu $v0,$t9,$t0
/* f068dec: c4400030 */ lwc1 $f0,0x30($v0)
/* f068df0: c4420034 */ lwc1 $f2,0x34($v0)
/* f068df4: c44c0038 */ lwc1 $f12,0x38($v0)
/* f068df8: 460a0381 */ sub.s $f14,$f0,$f10
/* f068dfc: 46081401 */ sub.s $f16,$f2,$f8
/* f068e00: 460e3282 */ mul.s $f10,$f6,$f14
/* f068e04: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f068e08: 46046481 */ sub.s $f18,$f12,$f4
/* f068e0c: 46088102 */ mul.s $f4,$f16,$f8
/* f068e10: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f068e14: 46045180 */ add.s $f6,$f10,$f4
/* f068e18: 46089282 */ mul.s $f10,$f18,$f8
/* f068e1c: 45000005 */ bc1f .L0f068e34
/* f068e20: 460a3500 */ add.s $f20,$f6,$f10
/* f068e24: 4618b03c */ c.lt.s $f22,$f24
/* f068e28: 00000000 */ nop
/* f068e2c: 45010009 */ bc1t .L0f068e54
/* f068e30: 00000000 */ nop
.L0f068e34:
/* f068e34: 4616c03c */ c.lt.s $f24,$f22
/* f068e38: 00000000 */ nop
/* f068e3c: 45020014 */ bc1fl .L0f068e90
/* f068e40: 8624002a */ lh $a0,0x2a($s1)
/* f068e44: 4614c03c */ c.lt.s $f24,$f20
/* f068e48: 00000000 */ nop
/* f068e4c: 45020010 */ bc1fl .L0f068e90
/* f068e50: 8624002a */ lh $a0,0x2a($s1)
.L0f068e54:
/* f068e54: 0fc00315 */ jal func0f000c54
/* f068e58: 00000000 */ nop
/* f068e5c: 00408025 */ or $s0,$v0,$zero
/* f068e60: 0fc002c9 */ jal func0f000b24
/* f068e64: 86240028 */ lh $a0,0x28($s1)
/* f068e68: 00502821 */ addu $a1,$v0,$s0
/* f068e6c: 28a10100 */ slti $at,$a1,0x100
/* f068e70: 14200002 */ bnez $at,.L0f068e7c
/* f068e74: 00402025 */ or $a0,$v0,$zero
/* f068e78: 240500ff */ addiu $a1,$zero,0xff
.L0f068e7c:
/* f068e7c: 26b50001 */ addiu $s5,$s5,0x1
/* f068e80: 02649821 */ addu $s3,$s3,$a0
/* f068e84: 0290a021 */ addu $s4,$s4,$s0
/* f068e88: 02459021 */ addu $s2,$s2,$a1
/* f068e8c: 8624002a */ lh $a0,0x2a($s1)
.L0f068e90:
/* f068e90: 26310002 */ addiu $s1,$s1,0x2
/* f068e94: 16c4ffcc */ bne $s6,$a0,.L0f068dc8
/* f068e98: 00000000 */ nop
.L0f068e9c:
/* f068e9c: 8fa70128 */ lw $a3,0x128($sp)
.L0f068ea0:
/* f068ea0: 8fa3012c */ lw $v1,0x12c($sp)
/* f068ea4: 8ce700bc */ lw $a3,0xbc($a3)
/* f068ea8: 10e30006 */ beq $a3,$v1,.L0f068ec4
/* f068eac: 00000000 */ nop
/* f068eb0: 10e00004 */ beqz $a3,.L0f068ec4
/* f068eb4: 00000000 */ nop
/* f068eb8: 8ce90014 */ lw $t1,0x14($a3)
/* f068ebc: 5520ff79 */ bnezl $t1,.L0f068ca4
/* f068ec0: afa70128 */ sw $a3,0x128($sp)
.L0f068ec4:
/* f068ec4: 16a0000c */ bnez $s5,.L0f068ef8
/* f068ec8: 00000000 */ nop
/* f068ecc: 8fb00130 */ lw $s0,0x130($sp)
/* f068ed0: 00002825 */ or $a1,$zero,$zero
/* f068ed4: 26100028 */ addiu $s0,$s0,0x28
/* f068ed8: 0fc1a2c5 */ jal func0f068b14
/* f068edc: 02002025 */ or $a0,$s0,$zero
/* f068ee0: 00408825 */ or $s1,$v0,$zero
/* f068ee4: 02002025 */ or $a0,$s0,$zero
/* f068ee8: 0fc1a2c5 */ jal func0f068b14
/* f068eec: 24050001 */ addiu $a1,$zero,0x1
/* f068ef0: 10000017 */ b .L0f068f50
/* f068ef4: 00401825 */ or $v1,$v0,$zero
.L0f068ef8:
/* f068ef8: 0275001a */ div $zero,$s3,$s5
/* f068efc: 00008812 */ mflo $s1
/* f068f00: 16a00002 */ bnez $s5,.L0f068f0c
/* f068f04: 00000000 */ nop
/* f068f08: 0007000d */ break 0x7
.L0f068f0c:
/* f068f0c: 2401ffff */ addiu $at,$zero,-1
/* f068f10: 16a10004 */ bne $s5,$at,.L0f068f24
/* f068f14: 3c018000 */ lui $at,0x8000
/* f068f18: 16610002 */ bne $s3,$at,.L0f068f24
/* f068f1c: 00000000 */ nop
/* f068f20: 0006000d */ break 0x6
.L0f068f24:
/* f068f24: 0295001a */ div $zero,$s4,$s5
/* f068f28: 00001812 */ mflo $v1
/* f068f2c: 16a00002 */ bnez $s5,.L0f068f38
/* f068f30: 00000000 */ nop
/* f068f34: 0007000d */ break 0x7
.L0f068f38:
/* f068f38: 2401ffff */ addiu $at,$zero,-1
/* f068f3c: 16a10004 */ bne $s5,$at,.L0f068f50
/* f068f40: 3c018000 */ lui $at,0x8000
/* f068f44: 16810002 */ bne $s4,$at,.L0f068f50
/* f068f48: 00000000 */ nop
/* f068f4c: 0006000d */ break 0x6
.L0f068f50:
/* f068f50: 8fa20134 */ lw $v0,0x134($sp)
/* f068f54: 50400003 */ beqzl $v0,.L0f068f64
/* f068f58: 8fa20138 */ lw $v0,0x138($sp)
/* f068f5c: ac510000 */ sw $s1,0x0($v0)
/* f068f60: 8fa20138 */ lw $v0,0x138($sp)
.L0f068f64:
/* f068f64: 50400003 */ beqzl $v0,.L0f068f74
/* f068f68: 02231021 */ addu $v0,$s1,$v1
/* f068f6c: ac430000 */ sw $v1,0x0($v0)
/* f068f70: 02231021 */ addu $v0,$s1,$v1
.L0f068f74:
/* f068f74: 284100ff */ slti $at,$v0,0xff
/* f068f78: 10200003 */ beqz $at,.L0f068f88
/* f068f7c: d7b40018 */ ldc1 $f20,0x18($sp)
/* f068f80: 10000002 */ b .L0f068f8c
/* f068f84: 00401825 */ or $v1,$v0,$zero
.L0f068f88:
/* f068f88: 240300ff */ addiu $v1,$zero,0xff
.L0f068f8c:
/* f068f8c: 8fbf0054 */ lw $ra,0x54($sp)
/* f068f90: d7b60020 */ ldc1 $f22,0x20($sp)
/* f068f94: d7b80028 */ ldc1 $f24,0x28($sp)
/* f068f98: 8fb00030 */ lw $s0,0x30($sp)
/* f068f9c: 8fb10034 */ lw $s1,0x34($sp)
/* f068fa0: 8fb20038 */ lw $s2,0x38($sp)
/* f068fa4: 8fb3003c */ lw $s3,0x3c($sp)
/* f068fa8: 8fb40040 */ lw $s4,0x40($sp)
/* f068fac: 8fb50044 */ lw $s5,0x44($sp)
/* f068fb0: 8fb60048 */ lw $s6,0x48($sp)
/* f068fb4: 8fb7004c */ lw $s7,0x4c($sp)
/* f068fb8: 8fbe0050 */ lw $s8,0x50($sp)
/* f068fbc: 27bd0130 */ addiu $sp,$sp,0x130
/* f068fc0: 03e00008 */ jr $ra
/* f068fc4: 00601025 */ or $v0,$v1,$zero
);
#endif
// Mismatch: Something weird with the registers for the neg.s instructions for
// the pad normal. Two of them reuse the same register, and one of those is a
// callee-save register.
//s32 func0f068c04(struct prop *prop, s32 *arg1, s32 *arg2)
//{
// struct doorobj *door = prop->door; // 12c
// struct doorobj *sibling; // 128
// f32 f22;
// s32 s1;
// s32 s3 = 0;
// s32 s4 = 0;
// s32 s2 = 0;
// s32 s5 = 0;
// s32 v1;
// s32 result;
// struct prop *loopprop; // 104
// struct pad pad; // b0
// s32 i;
// u32 stack[7];
//
//#if VERSION < VERSION_PAL_BETA
// static u32 var80069974 = 0;
//
// mainOverrideVariable("debugdoors", &var80069974);
//#endif
//
// sibling = door;
//
// while (sibling && sibling->base.prop) {
// if (sibling->portalnum == door->portalnum) {
// if (g_Vars.currentplayer->prop) {
// struct coord *campos = &g_Vars.currentplayer->cam_pos;
// loopprop = sibling->base.prop;
//
// padUnpack(sibling->base.pad, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_UP | PADFIELD_NORMAL | PADFIELD_ROOM, &pad);
//
// if (door->base.flags3 & OBJFLAG3_04000000) {
// s3 += func0f000b24(pad.room);
// s4 += func0f000c54(pad.room);
// s5++;
//
// s2 = s3 + s4;
//
// if (s2 > 255) {
// s2 = 255;
// }
// } else {
// // d3c
// f32 a;
// f32 b;
// f32 c;
//
// if (door->doorflags & DOORFLAG_FLIP) {
// pad.normal.f[0] = -pad.normal.f[0];
// pad.normal.f[1] = -pad.normal.f[1];
// pad.normal.f[2] = -pad.normal.f[2];
// }
//
// // d78
// a = campos->f[0] - pad.pos.f[0];
// b = campos->f[1] - pad.pos.f[1];
// c = campos->f[2] - pad.pos.f[2];
//
// f22 = pad.normal.f[0] * a + pad.normal.f[1] * b + pad.normal.f[2] * c;
//
// for (i = 0; loopprop->rooms[i] != -1; i++) {
// f32 a;
// f32 b;
// f32 c;
// f32 f20;
//
// a = g_Rooms[loopprop->rooms[i]].centre.f[0] - pad.pos.f[0];
// b = g_Rooms[loopprop->rooms[i]].centre.f[1] - pad.pos.f[1];
// c = g_Rooms[loopprop->rooms[i]].centre.f[2] - pad.pos.f[2];
//
// f20 = pad.normal.f[0] * a + pad.normal.f[1] * b + pad.normal.f[2] * c;
//
// // e1c
// if ((f22 < 0.0f && f22 < 0.0f) || (f22 > 0.0f && f20 > 0.0f)) {
// s32 value1 = func0f000c54(loopprop->rooms[i]);
// s32 value2 = func0f000b24(loopprop->rooms[i]);
// s32 sum = value2 + value1;
//
// if (sum > 255) {
// sum = 255;
// }
//
// s5++;
// s3 += value2;
// s4 += value1;
// s2 += sum;
// }
// }
// }
// }
// }
//
// sibling = sibling->sibling;
//
// if (sibling == door) {
// break;
// }
// }
//
// if (s5 == 0) {
// s1 = func0f068b14(prop->rooms, 0);
// v1 = func0f068b14(prop->rooms, 1);
// } else {
// s1 = s3 / s5;
// v1 = s4 / s5;
// }
//
// if (arg1 != NULL) {
// *arg1 = s1;
// }
//
// if (arg2 != NULL) {
// *arg2 = v1;
// }
//
// if (s1 + v1 < 255) {
// result = s1 + v1;
// } else {
// result = 255;
// }
//
// return result;
//}
s32 func0f068fc8(struct prop *prop, bool arg1)
{
struct defaultobj *obj = prop->obj;
s32 actual = 0;
s32 extra = 0;
s32 *actualptr;
s32 *extraptr;
if (prop->rooms[0] == -1) {
actual = random() % 255;
extra = 0;
} 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;
func0f068c04(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;
}
}
}
}
} else {
actual = func0f068b14(prop->rooms, 0);
extra = func0f068b14(prop->rooms, 1);
}
if (arg1 == 0) {
return actual;
}
if (arg1 == 1) {
return extra;
}
return 255;
}
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f069144
.late_rodata
glabel var7f1aa1d4
.word 0x39cd9a67
glabel var7f1aa1d8
.word 0x3f666666
.text
/* f069144: 27bdff90 */ addiu $sp,$sp,-112
/* f069148: afb00018 */ sw $s0,0x18($sp)
/* f06914c: 00a08025 */ or $s0,$a1,$zero
/* f069150: afa40070 */ sw $a0,0x70($sp)
/* f069154: afbf001c */ sw $ra,0x1c($sp)
/* f069158: 3c047f1b */ lui $a0,%hi(var7f1a9f6c)
/* f06915c: 3c058007 */ lui $a1,%hi(var80069978)
/* f069160: afa60078 */ sw $a2,0x78($sp)
/* f069164: 24a59978 */ addiu $a1,$a1,%lo(var80069978)
/* f069168: 0c0036cc */ jal mainOverrideVariable
/* f06916c: 24849f6c */ addiu $a0,$a0,%lo(var7f1a9f6c)
/* f069170: 3c047f1b */ lui $a0,%hi(var7f1a9f74)
/* f069174: 3c058007 */ lui $a1,%hi(var8006997c)
/* f069178: 24a5997c */ addiu $a1,$a1,%lo(var8006997c)
/* f06917c: 0c0036cc */ jal mainOverrideVariable
/* f069180: 24849f74 */ addiu $a0,$a0,%lo(var7f1a9f74)
/* f069184: 8fae0070 */ lw $t6,0x70($sp)
/* f069188: 24010001 */ addiu $at,$zero,0x1
/* f06918c: 8faf0070 */ lw $t7,0x70($sp)
/* f069190: 91c20000 */ lbu $v0,0x0($t6)
/* f069194: 8fb80070 */ lw $t8,0x70($sp)
/* f069198: 10410005 */ beq $v0,$at,.L0f0691b0
/* f06919c: 24010004 */ addiu $at,$zero,0x4
/* f0691a0: 10410003 */ beq $v0,$at,.L0f0691b0
/* f0691a4: 24010002 */ addiu $at,$zero,0x2
/* f0691a8: 14410003 */ bne $v0,$at,.L0f0691b8
/* f0691ac: 00003025 */ or $a2,$zero,$zero
.L0f0691b0:
/* f0691b0: 10000001 */ b .L0f0691b8
/* f0691b4: 8de60004 */ lw $a2,0x4($t7)
.L0f0691b8:
/* f0691b8: 24010003 */ addiu $at,$zero,0x3
/* f0691bc: 14410005 */ bne $v0,$at,.L0f0691d4
/* f0691c0: 00000000 */ nop
/* f0691c4: 8f020004 */ lw $v0,0x4($t8)
/* f0691c8: 9059032e */ lbu $t9,0x32e($v0)
/* f0691cc: 332effdf */ andi $t6,$t9,0xffdf
/* f0691d0: a04e032e */ sb $t6,0x32e($v0)
.L0f0691d4:
/* f0691d4: 10c0000b */ beqz $a2,.L0f069204
/* f0691d8: 97a2007a */ lhu $v0,0x7a($sp)
/* f0691dc: 8ccf0008 */ lw $t7,0x8($a2)
/* f0691e0: 240700ff */ addiu $a3,$zero,0xff
/* f0691e4: 31f80400 */ andi $t8,$t7,0x400
/* f0691e8: 53000007 */ beqzl $t8,.L0f069208
/* f0691ec: 00021a03 */ sra $v1,$v0,0x8
/* f0691f0: a2070000 */ sb $a3,0x0($s0)
/* f0691f4: a2070001 */ sb $a3,0x1($s0)
/* f0691f8: a2070002 */ sb $a3,0x2($s0)
/* f0691fc: 10000011 */ b .L0f069244
/* f069200: a2070003 */ sb $a3,0x3($s0)
.L0f069204:
/* f069204: 00021a03 */ sra $v1,$v0,0x8
.L0f069208:
/* f069208: 306e000f */ andi $t6,$v1,0xf
/* f06920c: 000e7900 */ sll $t7,$t6,0x4
/* f069210: 01eec025 */ or $t8,$t7,$t6
/* f069214: 00022103 */ sra $a0,$v0,0x4
/* f069218: 308e000f */ andi $t6,$a0,0xf
/* f06921c: a2180000 */ sb $t8,0x0($s0)
/* f069220: 000e7900 */ sll $t7,$t6,0x4
/* f069224: 01eec025 */ or $t8,$t7,$t6
/* f069228: 3059000f */ andi $t9,$v0,0xf
/* f06922c: 00197100 */ sll $t6,$t9,0x4
/* f069230: 240700ff */ addiu $a3,$zero,0xff
/* f069234: 01d97825 */ or $t7,$t6,$t9
/* f069238: a2180001 */ sb $t8,0x1($s0)
/* f06923c: a20f0002 */ sb $t7,0x2($s0)
/* f069240: a2070003 */ sb $a3,0x3($s0)
.L0f069244:
/* f069244: 50c0000a */ beqzl $a2,.L0f069270
/* f069248: 8fa40070 */ lw $a0,0x70($sp)
/* f06924c: 8cd80008 */ lw $t8,0x8($a2)
/* f069250: 33191000 */ andi $t9,$t8,0x1000
/* f069254: 53200006 */ beqzl $t9,.L0f069270
/* f069258: 8fa40070 */ lw $a0,0x70($sp)
/* f06925c: 0fc41b99 */ jal cheatIsActive
/* f069260: 24040015 */ addiu $a0,$zero,0x15
/* f069264: 50400065 */ beqzl $v0,.L0f0693fc
/* f069268: 920a0002 */ lbu $t2,0x2($s0)
/* f06926c: 8fa40070 */ lw $a0,0x70($sp)
.L0f069270:
/* f069270: 0fc1a3f2 */ jal func0f068fc8
/* f069274: 00002825 */ or $a1,$zero,$zero
/* f069278: 44822000 */ mtc1 $v0,$f4
/* f06927c: 3c017f1b */ lui $at,%hi(var7f1aa1d4)
/* f069280: c428a1d4 */ lwc1 $f8,%lo(var7f1aa1d4)($at)
/* f069284: 468021a0 */ cvt.s.w $f6,$f4
/* f069288: 3c013f80 */ lui $at,0x3f80
/* f06928c: 44818000 */ mtc1 $at,$f16
/* f069290: 8fae0070 */ lw $t6,0x70($sp)
/* f069294: afa20058 */ sw $v0,0x58($sp)
/* f069298: afa20054 */ sw $v0,0x54($sp)
/* f06929c: 46083282 */ mul.s $f10,$f6,$f8
/* f0692a0: afa20050 */ sw $v0,0x50($sp)
/* f0692a4: 27a50058 */ addiu $a1,$sp,0x58
/* f0692a8: 27a60054 */ addiu $a2,$sp,0x54
/* f0692ac: 27a70050 */ addiu $a3,$sp,0x50
/* f0692b0: 460a8481 */ sub.s $f18,$f16,$f10
/* f0692b4: e7b2005c */ swc1 $f18,0x5c($sp)
/* f0692b8: 0fc6192e */ jal scenarioHighlightRoom
/* f0692bc: 85c40028 */ lh $a0,0x28($t6)
/* f0692c0: 920f0000 */ lbu $t7,0x0($s0)
/* f0692c4: 8fb80058 */ lw $t8,0x58($sp)
/* f0692c8: 3c014f00 */ lui $at,0x4f00
/* f0692cc: 01f80019 */ multu $t7,$t8
/* f0692d0: 920f0001 */ lbu $t7,0x1($s0)
/* f0692d4: 0000c812 */ mflo $t9
/* f0692d8: 00197203 */ sra $t6,$t9,0x8
/* f0692dc: a20e0000 */ sb $t6,0x0($s0)
/* f0692e0: 8fb80054 */ lw $t8,0x54($sp)
/* f0692e4: 920c0000 */ lbu $t4,0x0($s0)
/* f0692e8: 01f80019 */ multu $t7,$t8
/* f0692ec: 920f0002 */ lbu $t7,0x2($s0)
/* f0692f0: 0000c812 */ mflo $t9
/* f0692f4: 00197203 */ sra $t6,$t9,0x8
/* f0692f8: a20e0001 */ sb $t6,0x1($s0)
/* f0692fc: 8fb80050 */ lw $t8,0x50($sp)
/* f069300: 920d0001 */ lbu $t5,0x1($s0)
/* f069304: 01f80019 */ multu $t7,$t8
/* f069308: 000cc080 */ sll $t8,$t4,0x2
/* f06930c: 030cc021 */ addu $t8,$t8,$t4
/* f069310: 0018c100 */ sll $t8,$t8,0x4
/* f069314: 030cc023 */ subu $t8,$t8,$t4
/* f069318: 0000c812 */ mflo $t9
/* f06931c: 00197203 */ sra $t6,$t9,0x8
/* f069320: 31ca00ff */ andi $t2,$t6,0xff
/* f069324: a20e0002 */ sb $t6,0x2($s0)
/* f069328: 000a7880 */ sll $t7,$t2,0x2
/* f06932c: 01ea7821 */ addu $t7,$t7,$t2
/* f069330: 000d7080 */ sll $t6,$t5,0x2
/* f069334: 000f7880 */ sll $t7,$t7,0x2
/* f069338: 01cd7021 */ addu $t6,$t6,$t5
/* f06933c: 000e70c0 */ sll $t6,$t6,0x3
/* f069340: 01ea7821 */ addu $t7,$t7,$t2
/* f069344: 01f8c821 */ addu $t9,$t7,$t8
/* f069348: 01cd7023 */ subu $t6,$t6,$t5
/* f06934c: 000e7080 */ sll $t6,$t6,0x2
/* f069350: 032e1021 */ addu $v0,$t9,$t6
/* f069354: 00027a03 */ sra $t7,$v0,0x8
/* f069358: 241800ff */ addiu $t8,$zero,0xff
/* f06935c: 030fc823 */ subu $t9,$t8,$t7
/* f069360: 44992000 */ mtc1 $t9,$f4
/* f069364: c7a8005c */ lwc1 $f8,0x5c($sp)
/* f069368: 240f0001 */ addiu $t7,$zero,0x1
/* f06936c: 468021a0 */ cvt.s.w $f6,$f4
/* f069370: 46083402 */ mul.s $f16,$f6,$f8
/* f069374: 444ef800 */ cfc1 $t6,$31
/* f069378: 44cff800 */ ctc1 $t7,$31
/* f06937c: 00000000 */ nop
/* f069380: 460082a4 */ cvt.w.s $f10,$f16
/* f069384: 444ff800 */ cfc1 $t7,$31
/* f069388: 00000000 */ nop
/* f06938c: 31ef0078 */ andi $t7,$t7,0x78
/* f069390: 51e00013 */ beqzl $t7,.L0f0693e0
/* f069394: 440f5000 */ mfc1 $t7,$f10
/* f069398: 44815000 */ mtc1 $at,$f10
/* f06939c: 240f0001 */ addiu $t7,$zero,0x1
/* f0693a0: 460a8281 */ sub.s $f10,$f16,$f10
/* f0693a4: 44cff800 */ ctc1 $t7,$31
/* f0693a8: 00000000 */ nop
/* f0693ac: 460052a4 */ cvt.w.s $f10,$f10
/* f0693b0: 444ff800 */ cfc1 $t7,$31
/* f0693b4: 00000000 */ nop
/* f0693b8: 31ef0078 */ andi $t7,$t7,0x78
/* f0693bc: 15e00005 */ bnez $t7,.L0f0693d4
/* f0693c0: 00000000 */ nop
/* f0693c4: 440f5000 */ mfc1 $t7,$f10
/* f0693c8: 3c018000 */ lui $at,0x8000
/* f0693cc: 10000007 */ b .L0f0693ec
/* f0693d0: 01e17825 */ or $t7,$t7,$at
.L0f0693d4:
/* f0693d4: 10000005 */ b .L0f0693ec
/* f0693d8: 240fffff */ addiu $t7,$zero,-1
/* f0693dc: 440f5000 */ mfc1 $t7,$f10
.L0f0693e0:
/* f0693e0: 00000000 */ nop
/* f0693e4: 05e0fffb */ bltz $t7,.L0f0693d4
/* f0693e8: 00000000 */ nop
.L0f0693ec:
/* f0693ec: 44cef800 */ ctc1 $t6,$31
/* f0693f0: 1000003e */ b .L0f0694ec
/* f0693f4: a20f0003 */ sb $t7,0x3($s0)
/* f0693f8: 920a0002 */ lbu $t2,0x2($s0)
.L0f0693fc:
/* f0693fc: 920c0000 */ lbu $t4,0x0($s0)
/* f069400: 920d0001 */ lbu $t5,0x1($s0)
/* f069404: 000ac080 */ sll $t8,$t2,0x2
/* f069408: 000cc880 */ sll $t9,$t4,0x2
/* f06940c: 030ac021 */ addu $t8,$t8,$t2
/* f069410: 032cc821 */ addu $t9,$t9,$t4
/* f069414: 000d7880 */ sll $t7,$t5,0x2
/* f069418: 0019c900 */ sll $t9,$t9,0x4
/* f06941c: 0018c080 */ sll $t8,$t8,0x2
/* f069420: 01ed7821 */ addu $t7,$t7,$t5
/* f069424: 000f78c0 */ sll $t7,$t7,0x3
/* f069428: 030ac021 */ addu $t8,$t8,$t2
/* f06942c: 032cc823 */ subu $t9,$t9,$t4
/* f069430: 03197021 */ addu $t6,$t8,$t9
/* f069434: 01ed7823 */ subu $t7,$t7,$t5
/* f069438: 000f7880 */ sll $t7,$t7,0x2
/* f06943c: 01cf1021 */ addu $v0,$t6,$t7
/* f069440: 0002c203 */ sra $t8,$v0,0x8
/* f069444: 241900ff */ addiu $t9,$zero,0xff
/* f069448: 03387023 */ subu $t6,$t9,$t8
/* f06944c: 448e9000 */ mtc1 $t6,$f18
/* f069450: 3c017f1b */ lui $at,%hi(var7f1aa1d8)
/* f069454: c426a1d8 */ lwc1 $f6,%lo(var7f1aa1d8)($at)
/* f069458: 46809120 */ cvt.s.w $f4,$f18
/* f06945c: 24180001 */ addiu $t8,$zero,0x1
/* f069460: 3c014f00 */ lui $at,0x4f00
/* f069464: 46062202 */ mul.s $f8,$f4,$f6
/* f069468: 444ff800 */ cfc1 $t7,$31
/* f06946c: 44d8f800 */ ctc1 $t8,$31
/* f069470: 00000000 */ nop
/* f069474: 46004424 */ cvt.w.s $f16,$f8
/* f069478: 4458f800 */ cfc1 $t8,$31
/* f06947c: 00000000 */ nop
/* f069480: 33180078 */ andi $t8,$t8,0x78
/* f069484: 53000013 */ beqzl $t8,.L0f0694d4
/* f069488: 44188000 */ mfc1 $t8,$f16
/* f06948c: 44818000 */ mtc1 $at,$f16
/* f069490: 24180001 */ addiu $t8,$zero,0x1
/* f069494: 46104401 */ sub.s $f16,$f8,$f16
/* f069498: 44d8f800 */ ctc1 $t8,$31
/* f06949c: 00000000 */ nop
/* f0694a0: 46008424 */ cvt.w.s $f16,$f16
/* f0694a4: 4458f800 */ cfc1 $t8,$31
/* f0694a8: 00000000 */ nop
/* f0694ac: 33180078 */ andi $t8,$t8,0x78
/* f0694b0: 17000005 */ bnez $t8,.L0f0694c8
/* f0694b4: 00000000 */ nop
/* f0694b8: 44188000 */ mfc1 $t8,$f16
/* f0694bc: 3c018000 */ lui $at,0x8000
/* f0694c0: 10000007 */ b .L0f0694e0
/* f0694c4: 0301c025 */ or $t8,$t8,$at
.L0f0694c8:
/* f0694c8: 10000005 */ b .L0f0694e0
/* f0694cc: 2418ffff */ addiu $t8,$zero,-1
/* f0694d0: 44188000 */ mfc1 $t8,$f16
.L0f0694d4:
/* f0694d4: 00000000 */ nop
/* f0694d8: 0700fffb */ bltz $t8,.L0f0694c8
/* f0694dc: 00000000 */ nop
.L0f0694e0:
/* f0694e0: 44cff800 */ ctc1 $t7,$31
/* f0694e4: a2180003 */ sb $t8,0x3($s0)
/* f0694e8: 00000000 */ nop
.L0f0694ec:
/* f0694ec: 018d082a */ slt $at,$t4,$t5
/* f0694f0: 00001025 */ or $v0,$zero,$zero
/* f0694f4: 10200003 */ beqz $at,.L0f069504
/* f0694f8: 00005825 */ or $t3,$zero,$zero
/* f0694fc: 10000002 */ b .L0f069508
/* f069500: 24020001 */ addiu $v0,$zero,0x1
.L0f069504:
/* f069504: 240b0001 */ addiu $t3,$zero,0x1
.L0f069508:
/* f069508: 02024821 */ addu $t1,$s0,$v0
/* f06950c: 91260000 */ lbu $a2,0x0($t1)
/* f069510: 00402825 */ or $a1,$v0,$zero
/* f069514: 020bc821 */ addu $t9,$s0,$t3
/* f069518: 00ca082a */ slt $at,$a2,$t2
/* f06951c: 50200005 */ beqzl $at,.L0f069534
/* f069520: 932e0000 */ lbu $t6,0x0($t9)
/* f069524: 26090002 */ addiu $t1,$s0,0x2
/* f069528: 10000009 */ b .L0f069550
/* f06952c: 91260000 */ lbu $a2,0x0($t1)
/* f069530: 932e0000 */ lbu $t6,0x0($t9)
.L0f069534:
/* f069534: 01602825 */ or $a1,$t3,$zero
/* f069538: 01ca082a */ slt $at,$t6,$t2
/* f06953c: 50200004 */ beqzl $at,.L0f069550
/* f069540: 240b0002 */ addiu $t3,$zero,0x2
/* f069544: 10000002 */ b .L0f069550
/* f069548: 24050002 */ addiu $a1,$zero,0x2
/* f06954c: 240b0002 */ addiu $t3,$zero,0x2
.L0f069550:
/* f069550: 18c0001b */ blez $a2,.L0f0695c0
/* f069554: 02051821 */ addu $v1,$s0,$a1
/* f069558: 020b1021 */ addu $v0,$s0,$t3
/* f06955c: 904f0000 */ lbu $t7,0x0($v0)
/* f069560: 90780000 */ lbu $t8,0x0($v1)
/* f069564: a0400000 */ sb $zero,0x0($v0)
/* f069568: 00cf2023 */ subu $a0,$a2,$t7
/* f06956c: 03040019 */ multu $t8,$a0
/* f069570: 00804025 */ or $t0,$a0,$zero
/* f069574: 0000c812 */ mflo $t9
/* f069578: 00000000 */ nop
/* f06957c: 00000000 */ nop
/* f069580: 0326001a */ div $zero,$t9,$a2
/* f069584: 00003812 */ mflo $a3
/* f069588: a0670000 */ sb $a3,0x0($v1)
/* f06958c: a1240000 */ sb $a0,0x0($t1)
/* f069590: 14c00002 */ bnez $a2,.L0f06959c
/* f069594: 00000000 */ nop
/* f069598: 0007000d */ break 0x7
.L0f06959c:
/* f06959c: 2401ffff */ addiu $at,$zero,-1
/* f0695a0: 14c10004 */ bne $a2,$at,.L0f0695b4
/* f0695a4: 3c018000 */ lui $at,0x8000
/* f0695a8: 17210002 */ bne $t9,$at,.L0f0695b4
/* f0695ac: 00000000 */ nop
/* f0695b0: 0006000d */ break 0x6
.L0f0695b4:
/* f0695b4: 920a0002 */ lbu $t2,0x2($s0)
/* f0695b8: 920d0001 */ lbu $t5,0x1($s0)
/* f0695bc: 920c0000 */ lbu $t4,0x0($s0)
.L0f0695c0:
/* f0695c0: 000c7042 */ srl $t6,$t4,0x1
/* f0695c4: 000d7842 */ srl $t7,$t5,0x1
/* f0695c8: 000ac042 */ srl $t8,$t2,0x1
/* f0695cc: a20e0000 */ sb $t6,0x0($s0)
/* f0695d0: a20f0001 */ sb $t7,0x1($s0)
/* f0695d4: a2180002 */ sb $t8,0x2($s0)
/* f0695d8: 3c198007 */ lui $t9,%hi(var80069978)
/* f0695dc: 8f399978 */ lw $t9,%lo(var80069978)($t9)
/* f0695e0: 3c0e8007 */ lui $t6,%hi(var8006997c)
/* f0695e4: 3c0f8007 */ lui $t7,%hi(var80069978)
/* f0695e8: 17200004 */ bnez $t9,.L0f0695fc
/* f0695ec: 3c028007 */ lui $v0,%hi(var80069978+0x3)
/* f0695f0: 8dce997c */ lw $t6,%lo(var8006997c)($t6)
/* f0695f4: 51c0000a */ beqzl $t6,.L0f069620
/* f0695f8: 8fbf001c */ lw $ra,0x1c($sp)
.L0f0695fc:
/* f0695fc: 9042997b */ lbu $v0,%lo(var80069978+0x3)($v0)
/* f069600: 8def9978 */ lw $t7,%lo(var80069978)($t7)
/* f069604: 3c188007 */ lui $t8,%hi(var8006997c)
/* f069608: a2020000 */ sb $v0,0x0($s0)
/* f06960c: a2020001 */ sb $v0,0x1($s0)
/* f069610: a20f0002 */ sb $t7,0x2($s0)
/* f069614: 8f18997c */ lw $t8,%lo(var8006997c)($t8)
/* f069618: a2180003 */ sb $t8,0x3($s0)
/* f06961c: 8fbf001c */ lw $ra,0x1c($sp)
.L0f069620:
/* f069620: 8fb00018 */ lw $s0,0x18($sp)
/* f069624: 27bd0070 */ addiu $sp,$sp,0x70
/* f069628: 03e00008 */ jr $ra
/* f06962c: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f069144
.late_rodata
glabel var7f1aa1d4
.word 0x39cd9a67
glabel var7f1aa1d8
.word 0x3f666666
.text
/* f0683c4: 27bdff90 */ addiu $sp,$sp,-112
/* f0683c8: afb00018 */ sw $s0,0x18($sp)
/* f0683cc: 00a08025 */ or $s0,$a1,$zero
/* f0683d0: afa40070 */ sw $a0,0x70($sp)
/* f0683d4: afbf001c */ sw $ra,0x1c($sp)
/* f0683d8: 3c047f1a */ lui $a0,0x7f1a
/* f0683dc: 3c058007 */ lui $a1,0x8007
/* f0683e0: afa60078 */ sw $a2,0x78($sp)
/* f0683e4: 24a5c078 */ addiu $a1,$a1,-16264
/* f0683e8: 0c00381c */ jal mainOverrideVariable
/* f0683ec: 2484428c */ addiu $a0,$a0,0x428c
/* f0683f0: 3c047f1a */ lui $a0,0x7f1a
/* f0683f4: 3c058007 */ lui $a1,0x8007
/* f0683f8: 24a5c07c */ addiu $a1,$a1,-16260
/* f0683fc: 0c00381c */ jal mainOverrideVariable
/* f068400: 24844294 */ addiu $a0,$a0,0x4294
/* f068404: 8fae0070 */ lw $t6,0x70($sp)
/* f068408: 24010001 */ addiu $at,$zero,0x1
/* f06840c: 8faf0070 */ lw $t7,0x70($sp)
/* f068410: 91c20000 */ lbu $v0,0x0($t6)
/* f068414: 8fb80070 */ lw $t8,0x70($sp)
/* f068418: 10410005 */ beq $v0,$at,.NB0f068430
/* f06841c: 24010004 */ addiu $at,$zero,0x4
/* f068420: 10410003 */ beq $v0,$at,.NB0f068430
/* f068424: 24010002 */ addiu $at,$zero,0x2
/* f068428: 14410003 */ bne $v0,$at,.NB0f068438
/* f06842c: 00003025 */ or $a2,$zero,$zero
.NB0f068430:
/* f068430: 10000001 */ beqz $zero,.NB0f068438
/* f068434: 8de60004 */ lw $a2,0x4($t7)
.NB0f068438:
/* f068438: 24010003 */ addiu $at,$zero,0x3
/* f06843c: 14410005 */ bne $v0,$at,.NB0f068454
/* f068440: 00000000 */ sll $zero,$zero,0x0
/* f068444: 8f020004 */ lw $v0,0x4($t8)
/* f068448: 9059032e */ lbu $t9,0x32e($v0)
/* f06844c: 332effdf */ andi $t6,$t9,0xffdf
/* f068450: a04e032e */ sb $t6,0x32e($v0)
.NB0f068454:
/* f068454: 10c0000b */ beqz $a2,.NB0f068484
/* f068458: 97a2007a */ lhu $v0,0x7a($sp)
/* f06845c: 8ccf0008 */ lw $t7,0x8($a2)
/* f068460: 240700ff */ addiu $a3,$zero,0xff
/* f068464: 31f80400 */ andi $t8,$t7,0x400
/* f068468: 53000007 */ beqzl $t8,.NB0f068488
/* f06846c: 00021a03 */ sra $v1,$v0,0x8
/* f068470: a2070000 */ sb $a3,0x0($s0)
/* f068474: a2070001 */ sb $a3,0x1($s0)
/* f068478: a2070002 */ sb $a3,0x2($s0)
/* f06847c: 10000011 */ beqz $zero,.NB0f0684c4
/* f068480: a2070003 */ sb $a3,0x3($s0)
.NB0f068484:
/* f068484: 00021a03 */ sra $v1,$v0,0x8
.NB0f068488:
/* f068488: 306e000f */ andi $t6,$v1,0xf
/* f06848c: 000e7900 */ sll $t7,$t6,0x4
/* f068490: 01eec025 */ or $t8,$t7,$t6
/* f068494: 00022103 */ sra $a0,$v0,0x4
/* f068498: 308e000f */ andi $t6,$a0,0xf
/* f06849c: a2180000 */ sb $t8,0x0($s0)
/* f0684a0: 000e7900 */ sll $t7,$t6,0x4
/* f0684a4: 01eec025 */ or $t8,$t7,$t6
/* f0684a8: 3059000f */ andi $t9,$v0,0xf
/* f0684ac: 00197100 */ sll $t6,$t9,0x4
/* f0684b0: 240700ff */ addiu $a3,$zero,0xff
/* f0684b4: 01d97825 */ or $t7,$t6,$t9
/* f0684b8: a2180001 */ sb $t8,0x1($s0)
/* f0684bc: a20f0002 */ sb $t7,0x2($s0)
/* f0684c0: a2070003 */ sb $a3,0x3($s0)
.NB0f0684c4:
/* f0684c4: 10c00005 */ beqz $a2,.NB0f0684dc
/* f0684c8: 8fa40070 */ lw $a0,0x70($sp)
/* f0684cc: 8cd80008 */ lw $t8,0x8($a2)
/* f0684d0: 33191000 */ andi $t9,$t8,0x1000
/* f0684d4: 57200064 */ bnezl $t9,.NB0f068668
/* f0684d8: 920a0002 */ lbu $t2,0x2($s0)
.NB0f0684dc:
/* f0684dc: 0fc1a092 */ jal func0f068fc8
/* f0684e0: 00002825 */ or $a1,$zero,$zero
/* f0684e4: 44822000 */ mtc1 $v0,$f4
/* f0684e8: 3c017f1a */ lui $at,0x7f1a
/* f0684ec: c42844f4 */ lwc1 $f8,0x44f4($at)
/* f0684f0: 468021a0 */ cvt.s.w $f6,$f4
/* f0684f4: 3c013f80 */ lui $at,0x3f80
/* f0684f8: 44818000 */ mtc1 $at,$f16
/* f0684fc: 8fae0070 */ lw $t6,0x70($sp)
/* f068500: afa20058 */ sw $v0,0x58($sp)
/* f068504: afa20054 */ sw $v0,0x54($sp)
/* f068508: 46083282 */ mul.s $f10,$f6,$f8
/* f06850c: afa20050 */ sw $v0,0x50($sp)
/* f068510: 27a50058 */ addiu $a1,$sp,0x58
/* f068514: 27a60054 */ addiu $a2,$sp,0x54
/* f068518: 27a70050 */ addiu $a3,$sp,0x50
/* f06851c: 460a8481 */ sub.s $f18,$f16,$f10
/* f068520: e7b2005c */ swc1 $f18,0x5c($sp)
/* f068524: 0fc60248 */ jal scenarioHighlightRoom
/* f068528: 85c40028 */ lh $a0,0x28($t6)
/* f06852c: 920f0000 */ lbu $t7,0x0($s0)
/* f068530: 8fb80058 */ lw $t8,0x58($sp)
/* f068534: 3c014f00 */ lui $at,0x4f00
/* f068538: 01f80019 */ multu $t7,$t8
/* f06853c: 920f0001 */ lbu $t7,0x1($s0)
/* f068540: 0000c812 */ mflo $t9
/* f068544: 00197203 */ sra $t6,$t9,0x8
/* f068548: a20e0000 */ sb $t6,0x0($s0)
/* f06854c: 8fb80054 */ lw $t8,0x54($sp)
/* f068550: 920c0000 */ lbu $t4,0x0($s0)
/* f068554: 01f80019 */ multu $t7,$t8
/* f068558: 920f0002 */ lbu $t7,0x2($s0)
/* f06855c: 0000c812 */ mflo $t9
/* f068560: 00197203 */ sra $t6,$t9,0x8
/* f068564: a20e0001 */ sb $t6,0x1($s0)
/* f068568: 8fb80050 */ lw $t8,0x50($sp)
/* f06856c: 920d0001 */ lbu $t5,0x1($s0)
/* f068570: 01f80019 */ multu $t7,$t8
/* f068574: 000cc080 */ sll $t8,$t4,0x2
/* f068578: 030cc021 */ addu $t8,$t8,$t4
/* f06857c: 0018c100 */ sll $t8,$t8,0x4
/* f068580: 030cc023 */ subu $t8,$t8,$t4
/* f068584: 0000c812 */ mflo $t9
/* f068588: 00197203 */ sra $t6,$t9,0x8
/* f06858c: 31ca00ff */ andi $t2,$t6,0xff
/* f068590: a20e0002 */ sb $t6,0x2($s0)
/* f068594: 000a7880 */ sll $t7,$t2,0x2
/* f068598: 01ea7821 */ addu $t7,$t7,$t2
/* f06859c: 000d7080 */ sll $t6,$t5,0x2
/* f0685a0: 000f7880 */ sll $t7,$t7,0x2
/* f0685a4: 01cd7021 */ addu $t6,$t6,$t5
/* f0685a8: 000e70c0 */ sll $t6,$t6,0x3
/* f0685ac: 01ea7821 */ addu $t7,$t7,$t2
/* f0685b0: 01f8c821 */ addu $t9,$t7,$t8
/* f0685b4: 01cd7023 */ subu $t6,$t6,$t5
/* f0685b8: 000e7080 */ sll $t6,$t6,0x2
/* f0685bc: 032e1021 */ addu $v0,$t9,$t6
/* f0685c0: 00027a03 */ sra $t7,$v0,0x8
/* f0685c4: 241800ff */ addiu $t8,$zero,0xff
/* f0685c8: 030fc823 */ subu $t9,$t8,$t7
/* f0685cc: 44992000 */ mtc1 $t9,$f4
/* f0685d0: c7a8005c */ lwc1 $f8,0x5c($sp)
/* f0685d4: 240f0001 */ addiu $t7,$zero,0x1
/* f0685d8: 468021a0 */ cvt.s.w $f6,$f4
/* f0685dc: 46083402 */ mul.s $f16,$f6,$f8
/* f0685e0: 444ef800 */ cfc1 $t6,$31
/* f0685e4: 44cff800 */ ctc1 $t7,$31
/* f0685e8: 00000000 */ sll $zero,$zero,0x0
/* f0685ec: 460082a4 */ cvt.w.s $f10,$f16
/* f0685f0: 444ff800 */ cfc1 $t7,$31
/* f0685f4: 00000000 */ sll $zero,$zero,0x0
/* f0685f8: 31ef0078 */ andi $t7,$t7,0x78
/* f0685fc: 51e00013 */ beqzl $t7,.NB0f06864c
/* f068600: 440f5000 */ mfc1 $t7,$f10
/* f068604: 44815000 */ mtc1 $at,$f10
/* f068608: 240f0001 */ addiu $t7,$zero,0x1
/* f06860c: 460a8281 */ sub.s $f10,$f16,$f10
/* f068610: 44cff800 */ ctc1 $t7,$31
/* f068614: 00000000 */ sll $zero,$zero,0x0
/* f068618: 460052a4 */ cvt.w.s $f10,$f10
/* f06861c: 444ff800 */ cfc1 $t7,$31
/* f068620: 00000000 */ sll $zero,$zero,0x0
/* f068624: 31ef0078 */ andi $t7,$t7,0x78
/* f068628: 15e00005 */ bnez $t7,.NB0f068640
/* f06862c: 00000000 */ sll $zero,$zero,0x0
/* f068630: 440f5000 */ mfc1 $t7,$f10
/* f068634: 3c018000 */ lui $at,0x8000
/* f068638: 10000007 */ beqz $zero,.NB0f068658
/* f06863c: 01e17825 */ or $t7,$t7,$at
.NB0f068640:
/* f068640: 10000005 */ beqz $zero,.NB0f068658
/* f068644: 240fffff */ addiu $t7,$zero,-1
/* f068648: 440f5000 */ mfc1 $t7,$f10
.NB0f06864c:
/* f06864c: 00000000 */ sll $zero,$zero,0x0
/* f068650: 05e0fffb */ bltz $t7,.NB0f068640
/* f068654: 00000000 */ sll $zero,$zero,0x0
.NB0f068658:
/* f068658: 44cef800 */ ctc1 $t6,$31
/* f06865c: 1000003e */ beqz $zero,.NB0f068758
/* f068660: a20f0003 */ sb $t7,0x3($s0)
/* f068664: 920a0002 */ lbu $t2,0x2($s0)
.NB0f068668:
/* f068668: 920c0000 */ lbu $t4,0x0($s0)
/* f06866c: 920d0001 */ lbu $t5,0x1($s0)
/* f068670: 000ac080 */ sll $t8,$t2,0x2
/* f068674: 000cc880 */ sll $t9,$t4,0x2
/* f068678: 030ac021 */ addu $t8,$t8,$t2
/* f06867c: 032cc821 */ addu $t9,$t9,$t4
/* f068680: 000d7880 */ sll $t7,$t5,0x2
/* f068684: 0019c900 */ sll $t9,$t9,0x4
/* f068688: 0018c080 */ sll $t8,$t8,0x2
/* f06868c: 01ed7821 */ addu $t7,$t7,$t5
/* f068690: 000f78c0 */ sll $t7,$t7,0x3
/* f068694: 030ac021 */ addu $t8,$t8,$t2
/* f068698: 032cc823 */ subu $t9,$t9,$t4
/* f06869c: 03197021 */ addu $t6,$t8,$t9
/* f0686a0: 01ed7823 */ subu $t7,$t7,$t5
/* f0686a4: 000f7880 */ sll $t7,$t7,0x2
/* f0686a8: 01cf1021 */ addu $v0,$t6,$t7
/* f0686ac: 0002c203 */ sra $t8,$v0,0x8
/* f0686b0: 241900ff */ addiu $t9,$zero,0xff
/* f0686b4: 03387023 */ subu $t6,$t9,$t8
/* f0686b8: 448e9000 */ mtc1 $t6,$f18
/* f0686bc: 3c017f1a */ lui $at,0x7f1a
/* f0686c0: c42644f8 */ lwc1 $f6,0x44f8($at)
/* f0686c4: 46809120 */ cvt.s.w $f4,$f18
/* f0686c8: 24180001 */ addiu $t8,$zero,0x1
/* f0686cc: 3c014f00 */ lui $at,0x4f00
/* f0686d0: 46062202 */ mul.s $f8,$f4,$f6
/* f0686d4: 444ff800 */ cfc1 $t7,$31
/* f0686d8: 44d8f800 */ ctc1 $t8,$31
/* f0686dc: 00000000 */ sll $zero,$zero,0x0
/* f0686e0: 46004424 */ cvt.w.s $f16,$f8
/* f0686e4: 4458f800 */ cfc1 $t8,$31
/* f0686e8: 00000000 */ sll $zero,$zero,0x0
/* f0686ec: 33180078 */ andi $t8,$t8,0x78
/* f0686f0: 53000013 */ beqzl $t8,.NB0f068740
/* f0686f4: 44188000 */ mfc1 $t8,$f16
/* f0686f8: 44818000 */ mtc1 $at,$f16
/* f0686fc: 24180001 */ addiu $t8,$zero,0x1
/* f068700: 46104401 */ sub.s $f16,$f8,$f16
/* f068704: 44d8f800 */ ctc1 $t8,$31
/* f068708: 00000000 */ sll $zero,$zero,0x0
/* f06870c: 46008424 */ cvt.w.s $f16,$f16
/* f068710: 4458f800 */ cfc1 $t8,$31
/* f068714: 00000000 */ sll $zero,$zero,0x0
/* f068718: 33180078 */ andi $t8,$t8,0x78
/* f06871c: 17000005 */ bnez $t8,.NB0f068734
/* f068720: 00000000 */ sll $zero,$zero,0x0
/* f068724: 44188000 */ mfc1 $t8,$f16
/* f068728: 3c018000 */ lui $at,0x8000
/* f06872c: 10000007 */ beqz $zero,.NB0f06874c
/* f068730: 0301c025 */ or $t8,$t8,$at
.NB0f068734:
/* f068734: 10000005 */ beqz $zero,.NB0f06874c
/* f068738: 2418ffff */ addiu $t8,$zero,-1
/* f06873c: 44188000 */ mfc1 $t8,$f16
.NB0f068740:
/* f068740: 00000000 */ sll $zero,$zero,0x0
/* f068744: 0700fffb */ bltz $t8,.NB0f068734
/* f068748: 00000000 */ sll $zero,$zero,0x0
.NB0f06874c:
/* f06874c: 44cff800 */ ctc1 $t7,$31
/* f068750: a2180003 */ sb $t8,0x3($s0)
/* f068754: 00000000 */ sll $zero,$zero,0x0
.NB0f068758:
/* f068758: 018d082a */ slt $at,$t4,$t5
/* f06875c: 00001025 */ or $v0,$zero,$zero
/* f068760: 10200003 */ beqz $at,.NB0f068770
/* f068764: 00005825 */ or $t3,$zero,$zero
/* f068768: 10000002 */ beqz $zero,.NB0f068774
/* f06876c: 24020001 */ addiu $v0,$zero,0x1
.NB0f068770:
/* f068770: 240b0001 */ addiu $t3,$zero,0x1
.NB0f068774:
/* f068774: 02024821 */ addu $t1,$s0,$v0
/* f068778: 91260000 */ lbu $a2,0x0($t1)
/* f06877c: 00402825 */ or $a1,$v0,$zero
/* f068780: 020bc821 */ addu $t9,$s0,$t3
/* f068784: 00ca082a */ slt $at,$a2,$t2
/* f068788: 50200005 */ beqzl $at,.NB0f0687a0
/* f06878c: 932e0000 */ lbu $t6,0x0($t9)
/* f068790: 26090002 */ addiu $t1,$s0,0x2
/* f068794: 10000009 */ beqz $zero,.NB0f0687bc
/* f068798: 91260000 */ lbu $a2,0x0($t1)
/* f06879c: 932e0000 */ lbu $t6,0x0($t9)
.NB0f0687a0:
/* f0687a0: 01602825 */ or $a1,$t3,$zero
/* f0687a4: 01ca082a */ slt $at,$t6,$t2
/* f0687a8: 50200004 */ beqzl $at,.NB0f0687bc
/* f0687ac: 240b0002 */ addiu $t3,$zero,0x2
/* f0687b0: 10000002 */ beqz $zero,.NB0f0687bc
/* f0687b4: 24050002 */ addiu $a1,$zero,0x2
/* f0687b8: 240b0002 */ addiu $t3,$zero,0x2
.NB0f0687bc:
/* f0687bc: 18c0001b */ blez $a2,.NB0f06882c
/* f0687c0: 02051821 */ addu $v1,$s0,$a1
/* f0687c4: 020b1021 */ addu $v0,$s0,$t3
/* f0687c8: 904f0000 */ lbu $t7,0x0($v0)
/* f0687cc: 90780000 */ lbu $t8,0x0($v1)
/* f0687d0: a0400000 */ sb $zero,0x0($v0)
/* f0687d4: 00cf2023 */ subu $a0,$a2,$t7
/* f0687d8: 03040019 */ multu $t8,$a0
/* f0687dc: 00804025 */ or $t0,$a0,$zero
/* f0687e0: 0000c812 */ mflo $t9
/* f0687e4: 00000000 */ sll $zero,$zero,0x0
/* f0687e8: 00000000 */ sll $zero,$zero,0x0
/* f0687ec: 0326001a */ div $zero,$t9,$a2
/* f0687f0: 00003812 */ mflo $a3
/* f0687f4: a0670000 */ sb $a3,0x0($v1)
/* f0687f8: a1240000 */ sb $a0,0x0($t1)
/* f0687fc: 14c00002 */ bnez $a2,.NB0f068808
/* f068800: 00000000 */ sll $zero,$zero,0x0
/* f068804: 0007000d */ break 0x7
.NB0f068808:
/* f068808: 2401ffff */ addiu $at,$zero,-1
/* f06880c: 14c10004 */ bne $a2,$at,.NB0f068820
/* f068810: 3c018000 */ lui $at,0x8000
/* f068814: 17210002 */ bne $t9,$at,.NB0f068820
/* f068818: 00000000 */ sll $zero,$zero,0x0
/* f06881c: 0006000d */ break 0x6
.NB0f068820:
/* f068820: 920a0002 */ lbu $t2,0x2($s0)
/* f068824: 920d0001 */ lbu $t5,0x1($s0)
/* f068828: 920c0000 */ lbu $t4,0x0($s0)
.NB0f06882c:
/* f06882c: 000c7042 */ srl $t6,$t4,0x1
/* f068830: 000d7842 */ srl $t7,$t5,0x1
/* f068834: 000ac042 */ srl $t8,$t2,0x1
/* f068838: a20e0000 */ sb $t6,0x0($s0)
/* f06883c: a20f0001 */ sb $t7,0x1($s0)
/* f068840: a2180002 */ sb $t8,0x2($s0)
/* f068844: 3c198007 */ lui $t9,0x8007
/* f068848: 8f39c078 */ lw $t9,-0x3f88($t9)
/* f06884c: 3c0e8007 */ lui $t6,0x8007
/* f068850: 3c0f8007 */ lui $t7,0x8007
/* f068854: 17200004 */ bnez $t9,.NB0f068868
/* f068858: 3c028007 */ lui $v0,0x8007
/* f06885c: 8dcec07c */ lw $t6,-0x3f84($t6)
/* f068860: 51c0000a */ beqzl $t6,.NB0f06888c
/* f068864: 8fbf001c */ lw $ra,0x1c($sp)
.NB0f068868:
/* f068868: 9042c07b */ lbu $v0,-0x3f85($v0)
/* f06886c: 8defc078 */ lw $t7,-0x3f88($t7)
/* f068870: 3c188007 */ lui $t8,0x8007
/* f068874: a2020000 */ sb $v0,0x0($s0)
/* f068878: a2020001 */ sb $v0,0x1($s0)
/* f06887c: a20f0002 */ sb $t7,0x2($s0)
/* f068880: 8f18c07c */ lw $t8,-0x3f84($t8)
/* f068884: a2180003 */ sb $t8,0x3($s0)
/* f068888: 8fbf001c */ lw $ra,0x1c($sp)
.NB0f06888c:
/* f06888c: 8fb00018 */ lw $s0,0x18($sp)
/* f068890: 27bd0070 */ addiu $sp,$sp,0x70
/* f068894: 03e00008 */ jr $ra
/* f068898: 00000000 */ sll $zero,$zero,0x0
);
#endif
u32 var80069978 = 0x00000000;
u32 var8006997c = 0x00000000;
//void func0f069144(struct prop *prop, u8 *nextcol, u16 floorcol)
//{
// f32 sp5C;
// s32 sp58;
// s32 sp54;
// s32 sp50;
// struct defaultobj *obj;
// s32 v0;
// s32 a0;
// s32 a1;
// s32 a2;
// s32 t3;
//
// static u32 var80069978 = 0;
// static u32 var8006997c = 0;
//
// mainOverrideVariable("scol", &var80069978);
// mainOverrideVariable("salp", &var8006997c);
//
// if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_WEAPON || prop->type == PROPTYPE_DOOR) {
// obj = prop->obj;
// } else {
// obj = NULL;
// }
//
// if (prop->type == PROPTYPE_CHR) {
// struct chrdata *chr = prop->chr;
// chr->unk32c_18 = false;
// }
//
// if (obj && (obj->flags & OBJFLAG_ILLUMINATED)) {
// nextcol[0] = 0xff;
// nextcol[1] = 0xff;
// nextcol[2] = 0xff;
// nextcol[3] = 0xff;
// } else {
// u8 r;
// u8 g;
// u8 b;
//
// r = (floorcol >> 8) & 0xf;
// g = (floorcol >> 4) & 0xf;
// b = (floorcol >> 0) & 0xf;
//
// nextcol[0] = (r << 4) | r;
// nextcol[1] = (g << 4) | g;
// nextcol[2] = (b << 4) | b;
// nextcol[3] = 0xff;
// }
//
//#if VERSION >= VERSION_NTSC_1_0
// if (obj == NULL || (obj->flags & OBJFLAG_00001000) == 0 || cheatIsActive(CHEAT_PERFECTDARKNESS))
//#else
// if (obj == NULL || (obj->flags & OBJFLAG_00001000) == 0)
//#endif
// {
// s32 tmp;
// s32 shade = func0f068fc8(prop, 0);
//
// sp58 = shade;
// sp54 = shade;
// sp50 = shade;
//
// sp5C = 1.0f - shade * (1.0f / 2550.0f);
//
// scenarioHighlightRoom(prop->rooms[0], &sp58, &sp54, &sp50);
//
// nextcol[0] = (nextcol[0] * sp58) >> 8;
// nextcol[1] = (nextcol[1] * sp54) >> 8;
// nextcol[2] = (nextcol[2] * sp50) >> 8;
//
// tmp = nextcol[0] * 79 + nextcol[1] * 156 + nextcol[2] * 21;
// nextcol[3] = (0xff - (tmp >> 8)) * sp5C;
// } else {
// s32 tmp = nextcol[0] * 79 + nextcol[1] * 156 + nextcol[2] * 21;
// nextcol[3] = (0xff - (tmp >> 8)) * 0.9f;
// }
//
// // 4e0
// v0 = 0;
// t3 = 0;
//
// if (nextcol[0] < nextcol[1]) {
// v0 = 1;
// } else {
// t3 = 1;
// }
//
// // 508
// a2 = nextcol[v0];
// a1 = v0;
//
// if (nextcol[v0] < nextcol[2]) {
// v0 = 2;
// a2 = nextcol[v0];
// } else {
// // 530
// a1 = t3;
//
// if (nextcol[t3] < nextcol[2]) {
// a1 = 2;
// } else {
// t3 = 2;
// }
// }
//
// // 550
// if (a2 > 0) {
// a0 = a2 - nextcol[t3];
// nextcol[t3] = 0;
// nextcol[a1] = nextcol[a1] * a0 / a2;
// nextcol[v0] = a0;
// }
//
// nextcol[0] >>= 1;
// nextcol[1] >>= 1;
// nextcol[2] >>= 1;
//
// if (var80069978 || var8006997c) {
// nextcol[0] = nextcol[1] = nextcol[2] = var80069978;
// nextcol[3] = var8006997c;
// }
//}
void func0f069630(struct prop *prop, u8 *nextcol, u16 floorcol)
{
func0f069144(prop, nextcol, 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];
}
}
}
/**
* Shift col to be closer to nextcol.
*
* It works by moving halfway towards the nextcol colour each time it's called.
*/
void colourTween(u8 *col, u8 *nextcol)
{
s32 i;
for (i = 0; i < 4; i++) {
s32 remaining = nextcol[i] - col[i];
s32 newcol = col[i] + (remaining >> 1);
col[i] = newcol;
}
}
void func0f069750(s32 *arg0, s32 arg1, f32 *arg2)
{
if (arg1 == 1) {
f32 tmp;
arg2[0] *= 255.0f;
arg2[1] *= 255.0f;
arg2[2] *= 255.0f;
tmp = arg0[0];
arg0[0] = tmp + (arg2[0] - tmp) * arg2[3];
tmp = arg0[1];
arg0[1] = tmp + (arg2[1] - tmp) * arg2[3];
tmp = arg0[2];
arg0[2] = tmp + (arg2[2] - tmp) * arg2[3];
tmp = arg0[3];
arg0[3] = tmp + (255.0f - tmp) * arg2[3];
}
}
struct hovtype g_HovTypes[];
void func0f069850(struct defaultobj *obj, struct coord *pos, f32 rot[3][3], struct geocyl *cyl)
{
Mtxf mtx;
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
struct modelrodata_type19 *rodata19 = NULL;
struct hoverbikeobj *hoverbike;
struct hoverpropobj *hoverprop;
mtx3ToMtx4(rot, &mtx);
mtx4SetTranslation(pos, &mtx);
if (obj->model->filedata->skel == &g_SkelHoverbike
|| obj->model->filedata->skel == &g_SkelBasic
|| obj->model->filedata->skel == &g_SkelMaianUfo
|| obj->model->filedata->skel == &g_SkelDropship) {
rodata19 = modelGetPartRodata(obj->model->filedata, MODELPART_HOVERBIKE_0064);
}
if (obj->flags3 & OBJFLAG3_GEOCYL) {
cyl->header.type = GEOTYPE_CYL;
cyl->header.flags = GEOFLAG_COLLISIONS | GEOFLAG_0008 | GEOFLAG_OPAQUE;
if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbike = (struct hoverbikeobj *)obj;
cyl->ymax = hoverbike->hov.ground + g_HovTypes[hoverbike->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverbike->hov.ground + 20.0f;
} else if (obj->type == OBJTYPE_HOVERPROP) {
hoverprop = (struct hoverpropobj *)obj;
cyl->ymax = hoverprop->hov.ground + g_HovTypes[hoverprop->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverprop->hov.ground + 20.0f;
} else {
cyl->ymin = mtx.m[3][1] + objGetRotatedLocalYMinByMtx4(bbox, &mtx);
cyl->ymax = mtx.m[3][1] + objGetRotatedLocalYMaxByMtx4(bbox, &mtx);
}
cyl->x = pos->x;
cyl->z = pos->z;
cyl->radius = 90.0f;
} else {
if (rodata19 != NULL) {
objCalculateGeoBlockFromNode19Data(rodata19, bbox, &mtx, (struct geoblock *)cyl);
} else {
objCalculateGeoBlockFromBboxAndMtx(bbox, &mtx, (struct geoblock *)cyl);
}
if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbike = (struct hoverbikeobj *)obj;
cyl->ymax = hoverbike->hov.ground + g_HovTypes[hoverbike->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverbike->hov.ground + 20.0f;
} else if (obj->type == OBJTYPE_HOVERPROP) {
hoverprop = (struct hoverpropobj *)obj;
cyl->ymax = hoverprop->hov.ground + g_HovTypes[hoverprop->hov.type].unk00 + objGetLocalYMax(bbox) * obj->model->scale;
cyl->ymin = hoverprop->hov.ground + 20.0f;
}
}
}
void func0f069b4c(struct defaultobj *obj)
{
union modelrodata *rodata;
u8 *ptr = (u8 *) obj->unkgeo;
if (ptr != NULL) {
if ((obj->hidden2 & OBJH2FLAG_08)) {
if (obj->flags3 & OBJFLAG3_GEOCYL) {
ptr += sizeof(struct geocyl);
} else {
ptr += sizeof(struct geoblock);
}
}
rodata = modelGetPartRodata(obj->model->filedata, MODELPART_0065);
if (rodata != NULL) {
u32 flags = GEOFLAG_0001 | GEOFLAG_0002;
if (obj->type == OBJTYPE_ESCASTEP) {
flags |= GEOFLAG_LIFTFLOOR;
}
func0f070ca0(obj, (struct geotilef *)ptr, flags, NULL, &rodata->type19);
ptr += 0x40;
}
rodata = modelGetPartRodata(obj->model->filedata, MODELPART_0066);
if (rodata != NULL) {
func0f070ca0(obj, (struct geotilef *)ptr, GEOFLAG_COLLISIONS | GEOFLAG_0008 | GEOFLAG_OPAQUE, NULL, &rodata->type19);
}
}
}
void func0f069c1c(struct defaultobj *obj)
{
if (obj->geocyl) {
if (obj->hidden2 & OBJH2FLAG_08) {
func0f069850(obj, &obj->prop->pos, obj->realrot, obj->geocyl);
}
func0f069b4c(obj);
}
}
void func0f069c70(struct defaultobj *obj, bool arg1, bool arg2)
{
struct prop *prop;
if (arg1) {
func0f069c1c(obj);
}
if (arg2) {
setup0f0923d4(obj);
}
prop = obj->prop;
func0f069630(prop, obj->nextcol, obj->floorcol);
coordTriggerProxies(&obj->prop->pos, false);
}
/**
* Iterate the model parts in range 201 to 220 (0xc9 to 0xdc) and disable them,
* stopping when any part doesn't exist.
*
* This range of part numbers is a special range that is hidden when the object
* is initialised.
*/
void objInitToggleNodes(struct defaultobj *obj)
{
struct model *model = obj->model;
union modelrwdata *rwdata;
s32 i;
for (i = 0; i < 20; i++) {
struct modelnode *node = modelGetPart(model->filedata, 201 + i);
if (!node) {
return;
}
rwdata = modelGetNodeRwData(model, node);
rwdata->toggle.visible = false;
}
}
void objCreateOneDebris(struct defaultobj *obj, s32 partindex, struct prop *prop)
{
struct defaultobj *debris = debrisAllocate();
if (debris) {
struct defaultobj tmp = {
256, // extrascale
0, // hidden2
OBJTYPE_DEBRIS, // type
0, // modelnum
-1, // pad
OBJFLAG_00000001, // flags
0, // flags2
0, // flags3
NULL, // prop
NULL, // model
1, 0, 0, // realrot
0, 1, 0,
0, 0, 1,
0, // hidden
NULL, // geo
NULL, // projectile
0, // damage
1000, // maxdamage
0xff, 0xff, 0xff, 0x00, // shadecol
0xff, 0xff, 0xff, 0x00, // nextcol
0x0fff, // floorcol
0, // tiles
};
struct modelnode *node;
*debris = tmp;
debris->modelnum = obj->modelnum;
if (objInitWithModelDef(debris, g_ModelStates[debris->modelnum].filedata)) {
propReparent(debris->prop, obj->prop);
objSetDropped(debris->prop, DROPTYPE_5);
if (debris->hidden & OBJHFLAG_PROJECTILE) {
f32 distance;
struct projectile *projectile = debris->projectile;
struct coord rot = {0, 0, 0};
struct coord dist;
dist.x = obj->prop->pos.x - prop->pos.x;
dist.y = 0.0f;
dist.z = obj->prop->pos.z - prop->pos.z;
distance = sqrtf(dist.f[0] * dist.f[0] + dist.f[2] * dist.f[2]);
if (distance > 0.0f) {
distance = 1.0f / distance;
dist.x *= distance;
dist.z *= distance;
} else {
dist.x = RANDOMFRAC() * 0.5f;
dist.z = RANDOMFRAC() * 0.5f;
}
projectile->speed.x = dist.x * 3.3333333f;
projectile->speed.y = RANDOMFRAC() * 6.6666665f;
projectile->speed.z = dist.z * 3.3333333f;
#if PAL
rot.x = RANDOMFRAC() * 0.058895487f - 0.029447744f;
rot.y = RANDOMFRAC() * 0.058895487f - 0.029447744f;
rot.z = RANDOMFRAC() * 0.058895487f - 0.029447744f;
#else
rot.x = RANDOMFRAC() * 0.04907957f - 0.024539785f;
rot.y = RANDOMFRAC() * 0.04907957f - 0.024539785f;
rot.z = RANDOMFRAC() * 0.04907957f - 0.024539785f;
#endif
mtx4LoadRotation(&rot, &projectile->mtx);
}
debris->model->scale = obj->model->scale;
debris->flags |= OBJFLAG_INVINCIBLE | OBJFLAG_BOUNCEIFSHOT | OBJFLAG_01000000;
debris->flags2 |= OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_00200000;
debris->flags3 |= OBJFLAG3_00000008;
node = modelGetPart(debris->model->filedata, MODELPART_BASIC_00C8);
{
struct modelrwdata_toggle *rodata;
if (node) {
rodata = modelGetNodeRwData(debris->model, node);
rodata->visible = false;
}
node = modelGetPart(debris->model->filedata, MODELPART_BASIC_00C9 + partindex);
if (node) {
rodata = modelGetNodeRwData(debris->model, node);
rodata->visible = true;
}
}
}
}
}
void objCreateDebris(struct defaultobj *obj, struct prop *prop)
{
struct model *model = obj->model;
s32 i;
if (prop);
for (i = 0; i < 20; i++) {
if (modelGetPart(model->filedata, 201 + i) == NULL) {
break;
}
objCreateOneDebris(obj, i, prop);
}
}
struct prop *objInit(struct defaultobj *obj, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
if (prop == NULL) {
prop = propAllocate();
}
if (model == NULL) {
model = modelInstantiateWithoutAnim(filedata);
}
if (prop && model) {
s32 geosize;
obj->model = model;
if (modelGetPartRodata(filedata, MODELPART_BASIC_0065)) {
obj->geocount++;
}
if (modelGetPartRodata(filedata, MODELPART_BASIC_0066)) {
obj->geocount++;
}
geosize = obj->geocount * 0x40;
if (obj->flags & OBJFLAG_00000100) {
if (obj->flags3 & OBJFLAG3_GEOCYL) {
geosize += sizeof(struct geocyl);
} else {
geosize += sizeof(struct geoblock);
}
obj->geocount++;
obj->hidden2 |= OBJH2FLAG_08;
} else {
obj->hidden2 &= ~OBJH2FLAG_08;
}
if (obj->geocount > 0) {
obj->unkgeo = mempAlloc(ALIGN16(geosize), MEMPOOL_STAGE);
} else {
obj->unkgeo = NULL;
}
obj->prop = prop;
obj->damage = 0;
obj->projectile = NULL;
obj->shadecol[0] = 0;
obj->shadecol[1] = 0;
obj->shadecol[2] = 0;
obj->shadecol[3] = 0;
obj->nextcol[0] = 0;
obj->nextcol[1] = 0;
obj->nextcol[2] = 0;
obj->nextcol[3] = 0;
obj->floorcol = 0xfff;
obj->model->obj = obj;
obj->model->unk01 = 0;
modelSetScale(obj->model, g_ModelStates[obj->modelnum].scale * (1.0f / 4096.0f));
prop->type = PROPTYPE_OBJ;
prop->obj = obj;
prop->pos.x = 0;
prop->pos.y = 0;
prop->pos.z = 0;
objInitToggleNodes(obj);
if (obj->flags3 & OBJFLAG3_RENDERPOSTBG) {
prop->flags |= PROPFLAG_RENDERPOSTBG;
}
if (obj->flags3 & OBJFLAG3_DRAWONTOP) {
prop->flags |= PROPFLAG_DRAWONTOP;
}
} else {
if (model) {
modelFree(model);
}
if (prop) {
propFree(prop);
prop = NULL;
}
if (obj) {
obj->prop = NULL;
obj->model = NULL;
}
}
if (g_Vars.normmplayerisrunning && prop && obj && obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
if (weapon->weaponnum == WEAPON_BRIEFCASE2) {
if (g_MpSetup.scenario == MPSCENARIO_HOLDTHEBRIEFCASE) {
g_ScenarioData.htb.token = prop;
}
prop->forcetick = true;
obj->flags |= OBJFLAG_INVINCIBLE | OBJFLAG_00400000;
obj->flags2 |= OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_00200000;
} else if (weapon->weaponnum == WEAPON_DATAUPLINK) {
if (g_MpSetup.scenario == MPSCENARIO_HACKERCENTRAL) {
g_ScenarioData.htm.uplink = prop;
}
prop->forcetick = true;
obj->flags |= OBJFLAG_INVINCIBLE | OBJFLAG_00400000;
obj->flags2 |= OBJFLAG2_IMMUNETOGUNFIRE | OBJFLAG2_00200000;
}
}
return prop;
}
struct prop *objInitWithModelDef(struct defaultobj *obj, struct modelfiledata *filedata)
{
return objInit(obj, filedata, NULL, NULL);
}
struct prop *objInitWithAutoModel(struct defaultobj *obj)
{
return objInitWithModelDef(obj, g_ModelStates[obj->modelnum].filedata);
}
void func0f06a580(struct defaultobj *obj, struct coord *pos, Mtxf *matrix, s16 *rooms)
{
struct prop *prop = obj->prop;
mtx4ToMtx3(matrix, obj->realrot);
prop->pos.x = pos->x;
prop->pos.y = pos->y;
prop->pos.z = pos->z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
func0f069c70(obj, true, true);
obj->shadecol[0] = obj->nextcol[0];
obj->shadecol[1] = obj->nextcol[1];
obj->shadecol[2] = obj->nextcol[2];
obj->shadecol[3] = obj->nextcol[3];
}
f32 func0f06a620(struct defaultobj *obj)
{
if (obj->type == OBJTYPE_WEAPON) {
return 0;
}
return 4;
}
void func0f06a650(struct defaultobj *obj, struct coord *pos, Mtxf *arg2, s16 *rooms)
{
struct modelrodata_bbox *bbox;
s16 room;
f32 sp3c;
struct coord newpos;
s16 newrooms[2];
bbox = modelFindBboxRodata(obj->model);
#if VERSION >= VERSION_NTSC_1_0
room = cd0002a440(pos, rooms, &sp3c, &obj->floorcol, NULL);
#else
room = cd0002a440(pos, rooms, &sp3c, &obj->floorcol);
#endif
if (room > 0) {
newpos.x = pos->x;
newpos.y = (sp3c + func0f06a620(obj)) - objGetRotatedLocalYMinByMtx4(bbox, arg2);
newpos.z = pos->z;
newrooms[0] = room;
newrooms[1] = -1;
func0f06a580(obj, &newpos, arg2, newrooms);
} else {
func0f06a580(obj, pos, arg2, rooms);
}
}
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f06a730
.late_rodata
glabel var7f1aa200
.word 0x404907a9
.text
/* f06a730: 27bdff38 */ addiu $sp,$sp,-200
/* f06a734: afbf0024 */ sw $ra,0x24($sp)
/* f06a738: f7b40018 */ sdc1 $f20,0x18($sp)
/* f06a73c: afa400c8 */ sw $a0,0xc8($sp)
/* f06a740: afa500cc */ sw $a1,0xcc($sp)
/* f06a744: afa600d0 */ sw $a2,0xd0($sp)
/* f06a748: afa700d4 */ sw $a3,0xd4($sp)
/* f06a74c: 0fc1a2aa */ jal modelFindBboxRodata
/* f06a750: 8c840018 */ lw $a0,0x18($a0)
/* f06a754: afa200c4 */ sw $v0,0xc4($sp)
/* f06a758: 0fc199ef */ jal objGetLocalYMin
/* f06a75c: 00402025 */ or $a0,$v0,$zero
/* f06a760: 46000506 */ mov.s $f20,$f0
/* f06a764: 0fc199f1 */ jal objGetLocalYMax
/* f06a768: 8fa400c4 */ lw $a0,0xc4($sp)
/* f06a76c: 8faf00c8 */ lw $t7,0xc8($sp)
/* f06a770: 46000386 */ mov.s $f14,$f0
/* f06a774: 3c017f1b */ lui $at,%hi(var7f1aa200)
/* f06a778: 8de20008 */ lw $v0,0x8($t7)
/* f06a77c: 27a50070 */ addiu $a1,$sp,0x70
/* f06a780: 30580004 */ andi $t8,$v0,0x4
/* f06a784: 13000019 */ beqz $t8,.L0f06a7ec
/* f06a788: 30590008 */ andi $t9,$v0,0x8
/* f06a78c: c42ca200 */ lwc1 $f12,%lo(var7f1aa200)($at)
/* f06a790: 0c005900 */ jal mtx4LoadZRotation
/* f06a794: e7ae00bc */ swc1 $f14,0xbc($sp)
/* f06a798: 8fa400d0 */ lw $a0,0xd0($sp)
/* f06a79c: 0c00567f */ jal mtx4MultMtx4InPlace
/* f06a7a0: 27a50070 */ addiu $a1,$sp,0x70
/* f06a7a4: c7ae00bc */ lwc1 $f14,0xbc($sp)
/* f06a7a8: c7a60080 */ lwc1 $f6,0x80($sp)
/* f06a7ac: 8fa200d8 */ lw $v0,0xd8($sp)
/* f06a7b0: 460e3202 */ mul.s $f8,$f6,$f14
/* f06a7b4: c4440000 */ lwc1 $f4,0x0($v0)
/* f06a7b8: 46082281 */ sub.s $f10,$f4,$f8
/* f06a7bc: c7a40084 */ lwc1 $f4,0x84($sp)
/* f06a7c0: 460e2202 */ mul.s $f8,$f4,$f14
/* f06a7c4: e7aa00b0 */ swc1 $f10,0xb0($sp)
/* f06a7c8: c4460004 */ lwc1 $f6,0x4($v0)
/* f06a7cc: 46083281 */ sub.s $f10,$f6,$f8
/* f06a7d0: c7a60088 */ lwc1 $f6,0x88($sp)
/* f06a7d4: 460e3202 */ mul.s $f8,$f6,$f14
/* f06a7d8: e7aa00b4 */ swc1 $f10,0xb4($sp)
/* f06a7dc: c4440008 */ lwc1 $f4,0x8($v0)
/* f06a7e0: 46082281 */ sub.s $f10,$f4,$f8
/* f06a7e4: 100000cf */ b .L0f06ab24
/* f06a7e8: e7aa00b8 */ swc1 $f10,0xb8($sp)
.L0f06a7ec:
/* f06a7ec: 13200015 */ beqz $t9,.L0f06a844
/* f06a7f0: 8fa400d0 */ lw $a0,0xd0($sp)
/* f06a7f4: 8fa400d0 */ lw $a0,0xd0($sp)
/* f06a7f8: 0c005746 */ jal mtx4Copy
/* f06a7fc: 27a50070 */ addiu $a1,$sp,0x70
/* f06a800: c7a40080 */ lwc1 $f4,0x80($sp)
/* f06a804: 8fa200d8 */ lw $v0,0xd8($sp)
/* f06a808: 46142202 */ mul.s $f8,$f4,$f20
/* f06a80c: c4460000 */ lwc1 $f6,0x0($v0)
/* f06a810: 46083281 */ sub.s $f10,$f6,$f8
/* f06a814: c7a60084 */ lwc1 $f6,0x84($sp)
/* f06a818: 46143202 */ mul.s $f8,$f6,$f20
/* f06a81c: e7aa00b0 */ swc1 $f10,0xb0($sp)
/* f06a820: c4440004 */ lwc1 $f4,0x4($v0)
/* f06a824: 46082281 */ sub.s $f10,$f4,$f8
/* f06a828: c7a40088 */ lwc1 $f4,0x88($sp)
/* f06a82c: 46142202 */ mul.s $f8,$f4,$f20
/* f06a830: e7aa00b4 */ swc1 $f10,0xb4($sp)
/* f06a834: c4460008 */ lwc1 $f6,0x8($v0)
/* f06a838: 46083281 */ sub.s $f10,$f6,$f8
/* f06a83c: 100000b9 */ b .L0f06ab24
/* f06a840: e7aa00b8 */ swc1 $f10,0xb8($sp)
.L0f06a844:
/* f06a844: 27a50070 */ addiu $a1,$sp,0x70
/* f06a848: 0c005746 */ jal mtx4Copy
/* f06a84c: e7ae00bc */ swc1 $f14,0xbc($sp)
/* f06a850: 44806000 */ mtc1 $zero,$f12
/* f06a854: c7b20074 */ lwc1 $f18,0x74($sp)
/* f06a858: c7ae00bc */ lwc1 $f14,0xbc($sp)
/* f06a85c: 460c903c */ c.lt.s $f18,$f12
/* f06a860: 46009006 */ mov.s $f0,$f18
/* f06a864: 45020003 */ bc1fl .L0f06a874
/* f06a868: 460c903c */ c.lt.s $f18,$f12
/* f06a86c: 46009007 */ neg.s $f0,$f18
/* f06a870: 460c903c */ c.lt.s $f18,$f12
.L0f06a874:
/* f06a874: c7b00084 */ lwc1 $f16,0x84($sp)
/* f06a878: 00004025 */ or $t0,$zero,$zero
/* f06a87c: 00004825 */ or $t1,$zero,$zero
/* f06a880: 45020003 */ bc1fl .L0f06a890
/* f06a884: 460c803c */ c.lt.s $f16,$f12
/* f06a888: 24090001 */ addiu $t1,$zero,0x1
/* f06a88c: 460c803c */ c.lt.s $f16,$f12
.L0f06a890:
/* f06a890: 46000086 */ mov.s $f2,$f0
/* f06a894: afa9004c */ sw $t1,0x4c($sp)
/* f06a898: 46008006 */ mov.s $f0,$f16
/* f06a89c: 45020003 */ bc1fl .L0f06a8ac
/* f06a8a0: 4600103c */ c.lt.s $f2,$f0
/* f06a8a4: 46008007 */ neg.s $f0,$f16
/* f06a8a8: 4600103c */ c.lt.s $f2,$f0
.L0f06a8ac:
/* f06a8ac: 00000000 */ nop
/* f06a8b0: 4502000a */ bc1fl .L0f06a8dc
/* f06a8b4: c7b00094 */ lwc1 $f16,0x94($sp)
/* f06a8b8: 460c803c */ c.lt.s $f16,$f12
/* f06a8bc: 24080001 */ addiu $t0,$zero,0x1
/* f06a8c0: 00005025 */ or $t2,$zero,$zero
/* f06a8c4: 46000086 */ mov.s $f2,$f0
/* f06a8c8: 45020003 */ bc1fl .L0f06a8d8
/* f06a8cc: afaa004c */ sw $t2,0x4c($sp)
/* f06a8d0: 240a0001 */ addiu $t2,$zero,0x1
/* f06a8d4: afaa004c */ sw $t2,0x4c($sp)
.L0f06a8d8:
/* f06a8d8: c7b00094 */ lwc1 $f16,0x94($sp)
.L0f06a8dc:
/* f06a8dc: 24010002 */ addiu $at,$zero,0x2
/* f06a8e0: 460c803c */ c.lt.s $f16,$f12
/* f06a8e4: 46008006 */ mov.s $f0,$f16
/* f06a8e8: 45020003 */ bc1fl .L0f06a8f8
/* f06a8ec: 4600103c */ c.lt.s $f2,$f0
/* f06a8f0: 46008007 */ neg.s $f0,$f16
/* f06a8f4: 4600103c */ c.lt.s $f2,$f0
.L0f06a8f8:
/* f06a8f8: 00000000 */ nop
/* f06a8fc: 45000008 */ bc1f .L0f06a920
/* f06a900: 00000000 */ nop
/* f06a904: 460c803c */ c.lt.s $f16,$f12
/* f06a908: 24080002 */ addiu $t0,$zero,0x2
/* f06a90c: 00005825 */ or $t3,$zero,$zero
/* f06a910: 45020003 */ bc1fl .L0f06a920
/* f06a914: afab004c */ sw $t3,0x4c($sp)
/* f06a918: 240b0001 */ addiu $t3,$zero,0x1
/* f06a91c: afab004c */ sw $t3,0x4c($sp)
.L0f06a920:
/* f06a920: 15000009 */ bnez $t0,.L0f06a948
/* f06a924: 8fa400c4 */ lw $a0,0xc4($sp)
/* f06a928: 0fc199eb */ jal objGetLocalXMin
/* f06a92c: afa80050 */ sw $t0,0x50($sp)
/* f06a930: 46000506 */ mov.s $f20,$f0
/* f06a934: 0fc199ed */ jal objGetLocalXMax
/* f06a938: 8fa400c4 */ lw $a0,0xc4($sp)
/* f06a93c: 8fa80050 */ lw $t0,0x50($sp)
/* f06a940: 1000000a */ b .L0f06a96c
/* f06a944: 46000386 */ mov.s $f14,$f0
.L0f06a948:
/* f06a948: 15010008 */ bne $t0,$at,.L0f06a96c
/* f06a94c: 8fa400c4 */ lw $a0,0xc4($sp)
/* f06a950: 0fc199f3 */ jal objGetLocalZMin
/* f06a954: afa80050 */ sw $t0,0x50($sp)
/* f06a958: 46000506 */ mov.s $f20,$f0
/* f06a95c: 0fc199f5 */ jal objGetLocalZMax
/* f06a960: 8fa400c4 */ lw $a0,0xc4($sp)
/* f06a964: 8fa80050 */ lw $t0,0x50($sp)
/* f06a968: 46000386 */ mov.s $f14,$f0
.L0f06a96c:
/* f06a96c: 8fac004c */ lw $t4,0x4c($sp)
/* f06a970: 00086900 */ sll $t5,$t0,0x4
/* f06a974: 27ae0070 */ addiu $t6,$sp,0x70
/* f06a978: 11800004 */ beqz $t4,.L0f06a98c
/* f06a97c: 01ae1821 */ addu $v1,$t5,$t6
/* f06a980: 4600a006 */ mov.s $f0,$f20
/* f06a984: 46007506 */ mov.s $f20,$f14
/* f06a988: 46000386 */ mov.s $f14,$f0
.L0f06a98c:
/* f06a98c: c4660000 */ lwc1 $f6,0x0($v1)
/* f06a990: 8fa200d8 */ lw $v0,0xd8($sp)
/* f06a994: 8fa400cc */ lw $a0,0xcc($sp)
/* f06a998: 46143202 */ mul.s $f8,$f6,$f20
/* f06a99c: c4440000 */ lwc1 $f4,0x0($v0)
/* f06a9a0: 8fa500d4 */ lw $a1,0xd4($sp)
/* f06a9a4: 27a600b0 */ addiu $a2,$sp,0xb0
/* f06a9a8: 27a70060 */ addiu $a3,$sp,0x60
/* f06a9ac: 46082281 */ sub.s $f10,$f4,$f8
/* f06a9b0: e7aa00b0 */ swc1 $f10,0xb0($sp)
/* f06a9b4: c4640004 */ lwc1 $f4,0x4($v1)
/* f06a9b8: c4460004 */ lwc1 $f6,0x4($v0)
/* f06a9bc: 46142202 */ mul.s $f8,$f4,$f20
/* f06a9c0: 46083281 */ sub.s $f10,$f6,$f8
/* f06a9c4: e7aa00b4 */ swc1 $f10,0xb4($sp)
/* f06a9c8: c4660008 */ lwc1 $f6,0x8($v1)
/* f06a9cc: c4440008 */ lwc1 $f4,0x8($v0)
/* f06a9d0: e7ae00bc */ swc1 $f14,0xbc($sp)
/* f06a9d4: 46143202 */ mul.s $f8,$f6,$f20
/* f06a9d8: afa30030 */ sw $v1,0x30($sp)
/* f06a9dc: 46082281 */ sub.s $f10,$f4,$f8
/* f06a9e0: 0fc1979d */ jal func0f065e74
/* f06a9e4: e7aa00b8 */ swc1 $f10,0xb8($sp)
/* f06a9e8: 8fa700c8 */ lw $a3,0xc8($sp)
/* f06a9ec: 27a400b0 */ addiu $a0,$sp,0xb0
/* f06a9f0: 27a50060 */ addiu $a1,$sp,0x60
/* f06a9f4: 27a60058 */ addiu $a2,$sp,0x58
/* f06a9f8: afa00010 */ sw $zero,0x10($sp)
/* f06a9fc: 0c00a910 */ jal cd0002a440
/* f06aa00: 24e70058 */ addiu $a3,$a3,0x58
/* f06aa04: 18400047 */ blez $v0,.L0f06ab24
/* f06aa08: c7ae00bc */ lwc1 $f14,0xbc($sp)
/* f06aa0c: 27a400b0 */ addiu $a0,$sp,0xb0
/* f06aa10: 27a50060 */ addiu $a1,$sp,0x60
/* f06aa14: 0fc1a086 */ jal objFindByPos
/* f06aa18: e7ae00bc */ swc1 $f14,0xbc($sp)
/* f06aa1c: 10400038 */ beqz $v0,.L0f06ab00
/* f06aa20: c7ae00bc */ lwc1 $f14,0xbc($sp)
/* f06aa24: 8c440014 */ lw $a0,0x14($v0)
/* f06aa28: e7ae00bc */ swc1 $f14,0xbc($sp)
/* f06aa2c: 27a5003c */ addiu $a1,$sp,0x3c
/* f06aa30: 0fc198a4 */ jal propUpdateGeometry
/* f06aa34: 27a60038 */ addiu $a2,$sp,0x38
/* f06aa38: 10400027 */ beqz $v0,.L0f06aad8
/* f06aa3c: c7ae00bc */ lwc1 $f14,0xbc($sp)
/* f06aa40: 8faf003c */ lw $t7,0x3c($sp)
/* f06aa44: 24010002 */ addiu $at,$zero,0x2
/* f06aa48: c7a60058 */ lwc1 $f6,0x58($sp)
/* f06aa4c: 91f80000 */ lbu $t8,0x0($t7)
/* f06aa50: 17010021 */ bne $t8,$at,.L0f06aad8
/* f06aa54: 00000000 */ nop
/* f06aa58: c5e40004 */ lwc1 $f4,0x4($t7)
/* f06aa5c: 8fa400c8 */ lw $a0,0xc8($sp)
/* f06aa60: 4604303c */ c.lt.s $f6,$f4
/* f06aa64: 00000000 */ nop
/* f06aa68: 4500001b */ bc1f .L0f06aad8
/* f06aa6c: 00000000 */ nop
/* f06aa70: afaf0034 */ sw $t7,0x34($sp)
/* f06aa74: 0fc1a988 */ jal func0f06a620
/* f06aa78: e7ae00bc */ swc1 $f14,0xbc($sp)
/* f06aa7c: c7ae00bc */ lwc1 $f14,0xbc($sp)
/* f06aa80: 8fb90030 */ lw $t9,0x30($sp)
/* f06aa84: c7aa0058 */ lwc1 $f10,0x58($sp)
/* f06aa88: 46147181 */ sub.s $f6,$f14,$f20
/* f06aa8c: c7220004 */ lwc1 $f2,0x4($t9)
/* f06aa90: 8fa20034 */ lw $v0,0x34($sp)
/* f06aa94: 46023102 */ mul.s $f4,$f6,$f2
/* f06aa98: c4480008 */ lwc1 $f8,0x8($v0)
/* f06aa9c: 46045180 */ add.s $f6,$f10,$f4
/* f06aaa0: 46060280 */ add.s $f10,$f0,$f6
/* f06aaa4: 460a403c */ c.lt.s $f8,$f10
/* f06aaa8: 00000000 */ nop
/* f06aaac: 4500000a */ bc1f .L0f06aad8
/* f06aab0: 00000000 */ nop
/* f06aab4: 46141182 */ mul.s $f6,$f2,$f20
/* f06aab8: c4440004 */ lwc1 $f4,0x4($v0)
/* f06aabc: 8fa900c8 */ lw $t1,0xc8($sp)
/* f06aac0: 46062201 */ sub.s $f8,$f4,$f6
/* f06aac4: e7a800b4 */ swc1 $f8,0xb4($sp)
/* f06aac8: 8d2a0040 */ lw $t2,0x40($t1)
/* f06aacc: 354b8000 */ ori $t3,$t2,0x8000
/* f06aad0: 10000014 */ b .L0f06ab24
/* f06aad4: ad2b0040 */ sw $t3,0x40($t1)
.L0f06aad8:
/* f06aad8: 0fc1a988 */ jal func0f06a620
/* f06aadc: 8fa400c8 */ lw $a0,0xc8($sp)
/* f06aae0: 8fac0030 */ lw $t4,0x30($sp)
/* f06aae4: c7aa0058 */ lwc1 $f10,0x58($sp)
/* f06aae8: c5840004 */ lwc1 $f4,0x4($t4)
/* f06aaec: 4604a182 */ mul.s $f6,$f20,$f4
/* f06aaf0: 46065201 */ sub.s $f8,$f10,$f6
/* f06aaf4: 46080100 */ add.s $f4,$f0,$f8
/* f06aaf8: 1000000a */ b .L0f06ab24
/* f06aafc: e7a400b4 */ swc1 $f4,0xb4($sp)
.L0f06ab00:
/* f06ab00: 0fc1a988 */ jal func0f06a620
/* f06ab04: 8fa400c8 */ lw $a0,0xc8($sp)
/* f06ab08: 8fad0030 */ lw $t5,0x30($sp)
/* f06ab0c: c7aa0058 */ lwc1 $f10,0x58($sp)
/* f06ab10: c5a60004 */ lwc1 $f6,0x4($t5)
/* f06ab14: 4606a202 */ mul.s $f8,$f20,$f6
/* f06ab18: 46085101 */ sub.s $f4,$f10,$f8
/* f06ab1c: 46040180 */ add.s $f6,$f0,$f4
/* f06ab20: e7a600b4 */ swc1 $f6,0xb4($sp)
.L0f06ab24:
/* f06ab24: 8fa400cc */ lw $a0,0xcc($sp)
/* f06ab28: 8fa500d4 */ lw $a1,0xd4($sp)
/* f06ab2c: 27a600b0 */ addiu $a2,$sp,0xb0
/* f06ab30: 0fc1979d */ jal func0f065e74
/* f06ab34: 27a70060 */ addiu $a3,$sp,0x60
/* f06ab38: 8fa400c8 */ lw $a0,0xc8($sp)
/* f06ab3c: 27a500b0 */ addiu $a1,$sp,0xb0
/* f06ab40: 27a60070 */ addiu $a2,$sp,0x70
/* f06ab44: 0fc1a960 */ jal func0f06a580
/* f06ab48: 27a70060 */ addiu $a3,$sp,0x60
/* f06ab4c: 8fbf0024 */ lw $ra,0x24($sp)
/* f06ab50: d7b40018 */ ldc1 $f20,0x18($sp)
/* f06ab54: 27bd00c8 */ addiu $sp,$sp,0xc8
/* f06ab58: 03e00008 */ jr $ra
/* f06ab5c: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f06a730
.late_rodata
glabel var7f1aa200
.word 0x404907a9
.text
/* f069998: 27bdff40 */ addiu $sp,$sp,-192
/* f06999c: afbf001c */ sw $ra,0x1c($sp)
/* f0699a0: f7b40010 */ sdc1 $f20,0x10($sp)
/* f0699a4: afa400c0 */ sw $a0,0xc0($sp)
/* f0699a8: afa500c4 */ sw $a1,0xc4($sp)
/* f0699ac: afa600c8 */ sw $a2,0xc8($sp)
/* f0699b0: afa700cc */ sw $a3,0xcc($sp)
/* f0699b4: 0fc19f4a */ jal modelFindBboxRodata
/* f0699b8: 8c840018 */ lw $a0,0x18($a0)
/* f0699bc: afa200bc */ sw $v0,0xbc($sp)
/* f0699c0: 0fc1968f */ jal objGetLocalYMin
/* f0699c4: 00402025 */ or $a0,$v0,$zero
/* f0699c8: 46000506 */ mov.s $f20,$f0
/* f0699cc: 0fc19691 */ jal objGetLocalYMax
/* f0699d0: 8fa400bc */ lw $a0,0xbc($sp)
/* f0699d4: 8faf00c0 */ lw $t7,0xc0($sp)
/* f0699d8: 46000386 */ mov.s $f14,$f0
/* f0699dc: 3c017f1a */ lui $at,0x7f1a
/* f0699e0: 8de20008 */ lw $v0,0x8($t7)
/* f0699e4: 27a50068 */ addiu $a1,$sp,0x68
/* f0699e8: 30580004 */ andi $t8,$v0,0x4
/* f0699ec: 13000019 */ beqz $t8,.NB0f069a54
/* f0699f0: 30590008 */ andi $t9,$v0,0x8
/* f0699f4: c42c4520 */ lwc1 $f12,0x4520($at)
/* f0699f8: 0c005ce4 */ jal mtx4LoadZRotation
/* f0699fc: e7ae00b4 */ swc1 $f14,0xb4($sp)
/* f069a00: 8fa400c8 */ lw $a0,0xc8($sp)
/* f069a04: 0c005a3b */ jal mtx4MultMtx4InPlace
/* f069a08: 27a50068 */ addiu $a1,$sp,0x68
/* f069a0c: c7ae00b4 */ lwc1 $f14,0xb4($sp)
/* f069a10: c7a60078 */ lwc1 $f6,0x78($sp)
/* f069a14: 8fa200d0 */ lw $v0,0xd0($sp)
/* f069a18: 460e3202 */ mul.s $f8,$f6,$f14
/* f069a1c: c4440000 */ lwc1 $f4,0x0($v0)
/* f069a20: 46082281 */ sub.s $f10,$f4,$f8
/* f069a24: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f069a28: 460e2202 */ mul.s $f8,$f4,$f14
/* f069a2c: e7aa00a8 */ swc1 $f10,0xa8($sp)
/* f069a30: c4460004 */ lwc1 $f6,0x4($v0)
/* f069a34: 46083281 */ sub.s $f10,$f6,$f8
/* f069a38: c7a60080 */ lwc1 $f6,0x80($sp)
/* f069a3c: 460e3202 */ mul.s $f8,$f6,$f14
/* f069a40: e7aa00ac */ swc1 $f10,0xac($sp)
/* f069a44: c4440008 */ lwc1 $f4,0x8($v0)
/* f069a48: 46082281 */ sub.s $f10,$f4,$f8
/* f069a4c: 100000ce */ beqz $zero,.NB0f069d88
/* f069a50: e7aa00b0 */ swc1 $f10,0xb0($sp)
.NB0f069a54:
/* f069a54: 13200015 */ beqz $t9,.NB0f069aac
/* f069a58: 8fa400c8 */ lw $a0,0xc8($sp)
/* f069a5c: 8fa400c8 */ lw $a0,0xc8($sp)
/* f069a60: 0c005b02 */ jal mtx4Copy
/* f069a64: 27a50068 */ addiu $a1,$sp,0x68
/* f069a68: c7a40078 */ lwc1 $f4,0x78($sp)
/* f069a6c: 8fa200d0 */ lw $v0,0xd0($sp)
/* f069a70: 46142202 */ mul.s $f8,$f4,$f20
/* f069a74: c4460000 */ lwc1 $f6,0x0($v0)
/* f069a78: 46083281 */ sub.s $f10,$f6,$f8
/* f069a7c: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f069a80: 46143202 */ mul.s $f8,$f6,$f20
/* f069a84: e7aa00a8 */ swc1 $f10,0xa8($sp)
/* f069a88: c4440004 */ lwc1 $f4,0x4($v0)
/* f069a8c: 46082281 */ sub.s $f10,$f4,$f8
/* f069a90: c7a40080 */ lwc1 $f4,0x80($sp)
/* f069a94: 46142202 */ mul.s $f8,$f4,$f20
/* f069a98: e7aa00ac */ swc1 $f10,0xac($sp)
/* f069a9c: c4460008 */ lwc1 $f6,0x8($v0)
/* f069aa0: 46083281 */ sub.s $f10,$f6,$f8
/* f069aa4: 100000b8 */ beqz $zero,.NB0f069d88
/* f069aa8: e7aa00b0 */ swc1 $f10,0xb0($sp)
.NB0f069aac:
/* f069aac: 27a50068 */ addiu $a1,$sp,0x68
/* f069ab0: 0c005b02 */ jal mtx4Copy
/* f069ab4: e7ae00b4 */ swc1 $f14,0xb4($sp)
/* f069ab8: 44806000 */ mtc1 $zero,$f12
/* f069abc: c7b2006c */ lwc1 $f18,0x6c($sp)
/* f069ac0: c7ae00b4 */ lwc1 $f14,0xb4($sp)
/* f069ac4: 460c903c */ c.lt.s $f18,$f12
/* f069ac8: 46009006 */ mov.s $f0,$f18
/* f069acc: 45020003 */ bc1fl .NB0f069adc
/* f069ad0: 460c903c */ c.lt.s $f18,$f12
/* f069ad4: 46009007 */ neg.s $f0,$f18
/* f069ad8: 460c903c */ c.lt.s $f18,$f12
.NB0f069adc:
/* f069adc: c7b0007c */ lwc1 $f16,0x7c($sp)
/* f069ae0: 00004025 */ or $t0,$zero,$zero
/* f069ae4: 00004825 */ or $t1,$zero,$zero
/* f069ae8: 45020003 */ bc1fl .NB0f069af8
/* f069aec: 460c803c */ c.lt.s $f16,$f12
/* f069af0: 24090001 */ addiu $t1,$zero,0x1
/* f069af4: 460c803c */ c.lt.s $f16,$f12
.NB0f069af8:
/* f069af8: 46000086 */ mov.s $f2,$f0
/* f069afc: afa90044 */ sw $t1,0x44($sp)
/* f069b00: 46008006 */ mov.s $f0,$f16
/* f069b04: 45020003 */ bc1fl .NB0f069b14
/* f069b08: 4600103c */ c.lt.s $f2,$f0
/* f069b0c: 46008007 */ neg.s $f0,$f16
/* f069b10: 4600103c */ c.lt.s $f2,$f0
.NB0f069b14:
/* f069b14: 00000000 */ sll $zero,$zero,0x0
/* f069b18: 4502000a */ bc1fl .NB0f069b44
/* f069b1c: c7b0008c */ lwc1 $f16,0x8c($sp)
/* f069b20: 460c803c */ c.lt.s $f16,$f12
/* f069b24: 24080001 */ addiu $t0,$zero,0x1
/* f069b28: 00005025 */ or $t2,$zero,$zero
/* f069b2c: 46000086 */ mov.s $f2,$f0
/* f069b30: 45020003 */ bc1fl .NB0f069b40
/* f069b34: afaa0044 */ sw $t2,0x44($sp)
/* f069b38: 240a0001 */ addiu $t2,$zero,0x1
/* f069b3c: afaa0044 */ sw $t2,0x44($sp)
.NB0f069b40:
/* f069b40: c7b0008c */ lwc1 $f16,0x8c($sp)
.NB0f069b44:
/* f069b44: 24010002 */ addiu $at,$zero,0x2
/* f069b48: 460c803c */ c.lt.s $f16,$f12
/* f069b4c: 46008006 */ mov.s $f0,$f16
/* f069b50: 45020003 */ bc1fl .NB0f069b60
/* f069b54: 4600103c */ c.lt.s $f2,$f0
/* f069b58: 46008007 */ neg.s $f0,$f16
/* f069b5c: 4600103c */ c.lt.s $f2,$f0
.NB0f069b60:
/* f069b60: 00000000 */ sll $zero,$zero,0x0
/* f069b64: 45000008 */ bc1f .NB0f069b88
/* f069b68: 00000000 */ sll $zero,$zero,0x0
/* f069b6c: 460c803c */ c.lt.s $f16,$f12
/* f069b70: 24080002 */ addiu $t0,$zero,0x2
/* f069b74: 00005825 */ or $t3,$zero,$zero
/* f069b78: 45020003 */ bc1fl .NB0f069b88
/* f069b7c: afab0044 */ sw $t3,0x44($sp)
/* f069b80: 240b0001 */ addiu $t3,$zero,0x1
/* f069b84: afab0044 */ sw $t3,0x44($sp)
.NB0f069b88:
/* f069b88: 15000009 */ bnez $t0,.NB0f069bb0
/* f069b8c: 8fa400bc */ lw $a0,0xbc($sp)
/* f069b90: 0fc1968b */ jal objGetLocalXMin
/* f069b94: afa80048 */ sw $t0,0x48($sp)
/* f069b98: 46000506 */ mov.s $f20,$f0
/* f069b9c: 0fc1968d */ jal objGetLocalXMax
/* f069ba0: 8fa400bc */ lw $a0,0xbc($sp)
/* f069ba4: 8fa80048 */ lw $t0,0x48($sp)
/* f069ba8: 1000000a */ beqz $zero,.NB0f069bd4
/* f069bac: 46000386 */ mov.s $f14,$f0
.NB0f069bb0:
/* f069bb0: 15010008 */ bne $t0,$at,.NB0f069bd4
/* f069bb4: 8fa400bc */ lw $a0,0xbc($sp)
/* f069bb8: 0fc19693 */ jal objGetLocalZMin
/* f069bbc: afa80048 */ sw $t0,0x48($sp)
/* f069bc0: 46000506 */ mov.s $f20,$f0
/* f069bc4: 0fc19695 */ jal objGetLocalZMax
/* f069bc8: 8fa400bc */ lw $a0,0xbc($sp)
/* f069bcc: 8fa80048 */ lw $t0,0x48($sp)
/* f069bd0: 46000386 */ mov.s $f14,$f0
.NB0f069bd4:
/* f069bd4: 8fac0044 */ lw $t4,0x44($sp)
/* f069bd8: 00086900 */ sll $t5,$t0,0x4
/* f069bdc: 27ae0068 */ addiu $t6,$sp,0x68
/* f069be0: 11800004 */ beqz $t4,.NB0f069bf4
/* f069be4: 01ae1821 */ addu $v1,$t5,$t6
/* f069be8: 4600a006 */ mov.s $f0,$f20
/* f069bec: 46007506 */ mov.s $f20,$f14
/* f069bf0: 46000386 */ mov.s $f14,$f0
.NB0f069bf4:
/* f069bf4: c4660000 */ lwc1 $f6,0x0($v1)
/* f069bf8: 8fa200d0 */ lw $v0,0xd0($sp)
/* f069bfc: 8fa400c4 */ lw $a0,0xc4($sp)
/* f069c00: 46143202 */ mul.s $f8,$f6,$f20
/* f069c04: c4440000 */ lwc1 $f4,0x0($v0)
/* f069c08: 8fa500cc */ lw $a1,0xcc($sp)
/* f069c0c: 27a600a8 */ addiu $a2,$sp,0xa8
/* f069c10: 27a70058 */ addiu $a3,$sp,0x58
/* f069c14: 46082281 */ sub.s $f10,$f4,$f8
/* f069c18: e7aa00a8 */ swc1 $f10,0xa8($sp)
/* f069c1c: c4640004 */ lwc1 $f4,0x4($v1)
/* f069c20: c4460004 */ lwc1 $f6,0x4($v0)
/* f069c24: 46142202 */ mul.s $f8,$f4,$f20
/* f069c28: 46083281 */ sub.s $f10,$f6,$f8
/* f069c2c: e7aa00ac */ swc1 $f10,0xac($sp)
/* f069c30: c4660008 */ lwc1 $f6,0x8($v1)
/* f069c34: c4440008 */ lwc1 $f4,0x8($v0)
/* f069c38: e7ae00b4 */ swc1 $f14,0xb4($sp)
/* f069c3c: 46143202 */ mul.s $f8,$f6,$f20
/* f069c40: afa30028 */ sw $v1,0x28($sp)
/* f069c44: 46082281 */ sub.s $f10,$f4,$f8
/* f069c48: 0fc19437 */ jal func0f065e74
/* f069c4c: e7aa00b0 */ swc1 $f10,0xb0($sp)
/* f069c50: 8fa700c0 */ lw $a3,0xc0($sp)
/* f069c54: 27a400a8 */ addiu $a0,$sp,0xa8
/* f069c58: 27a50058 */ addiu $a1,$sp,0x58
/* f069c5c: 27a60050 */ addiu $a2,$sp,0x50
/* f069c60: 0c00ae22 */ jal cd0002a440
/* f069c64: 24e70058 */ addiu $a3,$a3,0x58
/* f069c68: 18400047 */ blez $v0,.NB0f069d88
/* f069c6c: c7ae00b4 */ lwc1 $f14,0xb4($sp)
/* f069c70: 27a400a8 */ addiu $a0,$sp,0xa8
/* f069c74: 27a50058 */ addiu $a1,$sp,0x58
/* f069c78: 0fc19d26 */ jal objFindByPos
/* f069c7c: e7ae00b4 */ swc1 $f14,0xb4($sp)
/* f069c80: 10400038 */ beqz $v0,.NB0f069d64
/* f069c84: c7ae00b4 */ lwc1 $f14,0xb4($sp)
/* f069c88: 8c440014 */ lw $a0,0x14($v0)
/* f069c8c: e7ae00b4 */ swc1 $f14,0xb4($sp)
/* f069c90: 27a50034 */ addiu $a1,$sp,0x34
/* f069c94: 0fc1953e */ jal propUpdateGeometry
/* f069c98: 27a60030 */ addiu $a2,$sp,0x30
/* f069c9c: 10400027 */ beqz $v0,.NB0f069d3c
/* f069ca0: c7ae00b4 */ lwc1 $f14,0xb4($sp)
/* f069ca4: 8faf0034 */ lw $t7,0x34($sp)
/* f069ca8: 24010002 */ addiu $at,$zero,0x2
/* f069cac: c7a60050 */ lwc1 $f6,0x50($sp)
/* f069cb0: 91f80000 */ lbu $t8,0x0($t7)
/* f069cb4: 17010021 */ bne $t8,$at,.NB0f069d3c
/* f069cb8: 00000000 */ sll $zero,$zero,0x0
/* f069cbc: c5e40004 */ lwc1 $f4,0x4($t7)
/* f069cc0: 8fa400c0 */ lw $a0,0xc0($sp)
/* f069cc4: 4604303c */ c.lt.s $f6,$f4
/* f069cc8: 00000000 */ sll $zero,$zero,0x0
/* f069ccc: 4500001b */ bc1f .NB0f069d3c
/* f069cd0: 00000000 */ sll $zero,$zero,0x0
/* f069cd4: afaf002c */ sw $t7,0x2c($sp)
/* f069cd8: 0fc1a623 */ jal func0f06a620
/* f069cdc: e7ae00b4 */ swc1 $f14,0xb4($sp)
/* f069ce0: c7ae00b4 */ lwc1 $f14,0xb4($sp)
/* f069ce4: 8fb90028 */ lw $t9,0x28($sp)
/* f069ce8: c7aa0050 */ lwc1 $f10,0x50($sp)
/* f069cec: 46147181 */ sub.s $f6,$f14,$f20
/* f069cf0: c7220004 */ lwc1 $f2,0x4($t9)
/* f069cf4: 8fa2002c */ lw $v0,0x2c($sp)
/* f069cf8: 46023102 */ mul.s $f4,$f6,$f2
/* f069cfc: c4480008 */ lwc1 $f8,0x8($v0)
/* f069d00: 46045180 */ add.s $f6,$f10,$f4
/* f069d04: 46060280 */ add.s $f10,$f0,$f6
/* f069d08: 460a403c */ c.lt.s $f8,$f10
/* f069d0c: 00000000 */ sll $zero,$zero,0x0
/* f069d10: 4500000a */ bc1f .NB0f069d3c
/* f069d14: 00000000 */ sll $zero,$zero,0x0
/* f069d18: 46141182 */ mul.s $f6,$f2,$f20
/* f069d1c: c4440004 */ lwc1 $f4,0x4($v0)
/* f069d20: 8fa900c0 */ lw $t1,0xc0($sp)
/* f069d24: 46062201 */ sub.s $f8,$f4,$f6
/* f069d28: e7a800ac */ swc1 $f8,0xac($sp)
/* f069d2c: 8d2a0040 */ lw $t2,0x40($t1)
/* f069d30: 354b8000 */ ori $t3,$t2,0x8000
/* f069d34: 10000014 */ beqz $zero,.NB0f069d88
/* f069d38: ad2b0040 */ sw $t3,0x40($t1)
.NB0f069d3c:
/* f069d3c: 0fc1a623 */ jal func0f06a620
/* f069d40: 8fa400c0 */ lw $a0,0xc0($sp)
/* f069d44: 8fac0028 */ lw $t4,0x28($sp)
/* f069d48: c7aa0050 */ lwc1 $f10,0x50($sp)
/* f069d4c: c5840004 */ lwc1 $f4,0x4($t4)
/* f069d50: 4604a182 */ mul.s $f6,$f20,$f4
/* f069d54: 46065201 */ sub.s $f8,$f10,$f6
/* f069d58: 46080100 */ add.s $f4,$f0,$f8
/* f069d5c: 1000000a */ beqz $zero,.NB0f069d88
/* f069d60: e7a400ac */ swc1 $f4,0xac($sp)
.NB0f069d64:
/* f069d64: 0fc1a623 */ jal func0f06a620
/* f069d68: 8fa400c0 */ lw $a0,0xc0($sp)
/* f069d6c: 8fad0028 */ lw $t5,0x28($sp)
/* f069d70: c7aa0050 */ lwc1 $f10,0x50($sp)
/* f069d74: c5a60004 */ lwc1 $f6,0x4($t5)
/* f069d78: 4606a202 */ mul.s $f8,$f20,$f6
/* f069d7c: 46085101 */ sub.s $f4,$f10,$f8
/* f069d80: 46040180 */ add.s $f6,$f0,$f4
/* f069d84: e7a600ac */ swc1 $f6,0xac($sp)
.NB0f069d88:
/* f069d88: 8fa400c4 */ lw $a0,0xc4($sp)
/* f069d8c: 8fa500cc */ lw $a1,0xcc($sp)
/* f069d90: 27a600a8 */ addiu $a2,$sp,0xa8
/* f069d94: 0fc19437 */ jal func0f065e74
/* f069d98: 27a70058 */ addiu $a3,$sp,0x58
/* f069d9c: 8fa400c0 */ lw $a0,0xc0($sp)
/* f069da0: 27a500a8 */ addiu $a1,$sp,0xa8
/* f069da4: 27a60068 */ addiu $a2,$sp,0x68
/* f069da8: 0fc1a5fb */ jal func0f06a580
/* f069dac: 27a70058 */ addiu $a3,$sp,0x58
/* f069db0: 8fbf001c */ lw $ra,0x1c($sp)
/* f069db4: d7b40010 */ ldc1 $f20,0x10($sp)
/* f069db8: 27bd00c0 */ addiu $sp,$sp,0xc0
/* f069dbc: 03e00008 */ jr $ra
/* f069dc0: 00000000 */ sll $zero,$zero,0x0
);
#endif
// Mismatch: Floating point pain, and sp50 needs to prefer t0 rather than v0
//void func0f06a730(struct defaultobj *obj, struct coord *arg1, Mtxf *mtx, s16 *rooms, struct coord *centre)
//{
// struct modelrodata_bbox *bbox; // c4
// f32 min;
// f32 max; // bc
// struct coord spb0;
// Mtxf sp70;
// s16 sp60[8];
// f32 sp58;
// s32 sp50;
// s32 sp4c;
// u8 *sp3c;
// u8 *sp38;
// f32 curval;
// f32 bestval;
//
// bbox = modelFindBboxRodata(obj->model);
// min = objGetLocalYMin(bbox);
// max = objGetLocalYMax(bbox);
//
// if (obj->flags & OBJFLAG_00000004) {
// mtx4LoadZRotation(M_BADPI, &sp70);
// mtx4MultMtx4InPlace(mtx, &sp70);
//
// spb0.f[0] = centre->f[0] - sp70.m[1][0] * max;
// spb0.f[1] = centre->f[1] - sp70.m[1][1] * max;
// spb0.f[2] = centre->f[2] - sp70.m[1][2] * max;
// } else if (obj->flags & OBJFLAG_00000008) {
// mtx4Copy(mtx, &sp70);
//
// spb0.f[0] = centre->f[0] - sp70.m[1][0] * min;
// spb0.f[1] = centre->f[1] - sp70.m[1][1] * min;
// spb0.f[2] = centre->f[2] - sp70.m[1][2] * min;
// } else {
// mtx4Copy(mtx, &sp70);
//
// curval = sp70.m[0][1];
//
// if (curval < 0.0f) {
// curval = -curval;
// }
//
// sp50 = 0;
// sp4c = 0;
//
// if (sp70.m[0][1] < 0.0f) {
// sp4c = 1;
// }
//
// bestval = curval;
//
// curval = sp70.m[1][1];
//
// if (curval < 0.0f) {
// curval = -curval;
// }
//
// if (bestval < curval) {
// sp50 = 1;
// sp4c = 0;
// bestval = curval;
//
// if (sp70.m[1][1] < 0.0f) {
// sp4c = 1;
// }
// }
//
// curval = sp70.m[2][1];
//
// if (curval < 0.0f) {
// curval = -curval;
// }
//
// if (bestval < curval) {
// sp50 = 2;
// sp4c = 0;
//
// if (sp70.m[2][1] < 0.0f) {
// sp4c = 1;
// }
// }
//
// if (sp50 == 0) {
// min = objGetLocalXMin(bbox);
// max = objGetLocalXMax(bbox);
// } else if (sp50 == 2) {
// min = objGetLocalZMin(bbox);
// max = objGetLocalZMax(bbox);
// }
//
// if (sp70.m[sp50][0]);
//
// if (sp4c) {
// f32 tmp = min;
// min = max;
// max = tmp;
// }
//
// spb0.x = centre->x - sp70.m[sp50][0] * min;
// spb0.y = centre->y - sp70.m[sp50][1] * min;
// spb0.z = centre->z - sp70.m[sp50][2] * min;
//
// func0f065e74(arg1, rooms, &spb0, sp60);
//
//#if VERSION >= VERSION_NTSC_1_0
// if (cd0002a440(&spb0, sp60, &sp58, &obj->floorcol, NULL) > 0)
//#else
// if (cd0002a440(&spb0, sp60, &sp58, &obj->floorcol) > 0)
//#endif
// {
// struct defaultobj *obj2 = objFindByPos(&spb0, sp60);
//
// if (obj2) {
// bool updated = propUpdateGeometry(obj2->prop, &sp3c, &sp38);
// struct geoblock *tile2 = (struct geoblock *)sp3c;
//
// if (updated
// && sp3c[0] == GEOTYPE_BLOCK
// && tile2->ymax > sp58
// && tile2->ymin < sp58 + (max - min) * sp70.m[sp50][1] + func0f06a620(obj)) {
// spb0.y = tile2->ymax - sp70.m[sp50][1] * min;
// obj->hidden |= OBJHFLAG_00008000;
// } else {
// spb0.y = sp58 - min * sp70.m[sp50][1] + func0f06a620(obj);
// }
// } else {
// spb0.y = sp58 - min * sp70.m[sp50][1] + func0f06a620(obj);
// }
// }
// }
//
// func0f065e74(arg1, rooms, &spb0, sp60);
// func0f06a580(obj, &spb0, &sp70, sp60);
//}
void func0f06ab60(struct defaultobj *obj, struct coord *arg1, Mtxf *arg2, s16 *rooms, struct coord *arg4)
{
struct modelrodata_bbox *bbox;
f32 mult;
struct coord newpos;
s16 newrooms[8];
Mtxf sp5c;
Mtxf sp1c;
bbox = modelFindBboxRodata(obj->model);
mult = objGetLocalZMin(bbox);
mtx4LoadXRotation(4.7116389274597f, &sp5c);
mtx4LoadYRotation(M_BADPI, &sp1c);
mtx4MultMtx4InPlace(&sp1c, &sp5c);
mtx4MultMtx4InPlace(arg2, &sp5c);
newpos.x = arg4->x - sp5c.m[2][0] * mult;
newpos.y = arg4->y - sp5c.m[2][1] * mult;
newpos.z = arg4->z - sp5c.m[2][2] * mult;
func0f065e74(arg1, rooms, &newpos, newrooms);
func0f06a580(obj, &newpos, &sp5c, newrooms);
}
void objFreeProjectile(struct defaultobj *obj)
{
if (obj->hidden & OBJHFLAG_PROJECTILE) {
projectileFree(obj->projectile);
obj->projectile = NULL;
obj->hidden &= ~OBJHFLAG_PROJECTILE;
}
}
void objFreeEmbedmentOrProjectile(struct prop *prop)
{
if (prop && prop->obj) {
struct defaultobj *obj = prop->obj;
if (obj->hidden & OBJHFLAG_EMBEDDED) {
if (obj->embedment) {
if (obj->embedment->projectile) {
projectileFree(obj->embedment->projectile);
}
embedmentFree(obj->embedment);
}
obj->embedment = NULL;
obj->hidden &= ~OBJHFLAG_EMBEDDED;
} else if (obj->hidden & OBJHFLAG_PROJECTILE) {
objFreeProjectile(obj);
}
}
}
/**
* Remove an object from the game world by clearing all references to it.
*
* If freeprop is true, the obj's prop will be returned to the freeprops list.
* Child objects such as attached knives and mines will always have their props
* freed.
*/
void objFree(struct defaultobj *obj, bool freeprop, bool canregen)
{
struct prop *child;
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
if (weapon->dualweapon) {
weapon->dualweapon->dualweapon = NULL;
weapon->dualweapon = NULL;
}
if (weapon->weaponnum == WEAPON_PROXIMITYMINE) {
weaponUnregisterProxy(weapon);
}
if (weapon->weaponnum == WEAPON_DRAGON && weapon->gunfunc == FUNC_SECONDARY) {
weaponUnregisterProxy(weapon);
}
if (weapon->weaponnum == WEAPON_NBOMB && weapon->gunfunc == FUNC_SECONDARY) {
weaponUnregisterProxy(weapon);
}
if (weapon->weaponnum == WEAPON_GRENADE && weapon->gunfunc == FUNC_SECONDARY) {
weaponUnregisterProxy(weapon);
smokeClearForProp(obj->prop);
}
if (weapon->weaponnum == WEAPON_BOLT) {
s32 beammnum = boltbeamFindByProp(obj->prop);
if (beammnum != -1) {
boltbeamSetAutomatic(beammnum, 1400);
}
}
if (g_Vars.normmplayerisrunning
&& weapon->weaponnum == WEAPON_SKROCKET
&& obj->projectile
&& obj->projectile->ownerprop) {
s32 i;
for (i = 0; i < g_MpNumChrs; i++) {
if (g_MpAllChrPtrs[i]->aibot && g_MpAllChrPtrs[i]->aibot->skrocket == obj->prop) {
g_MpAllChrPtrs[i]->aibot->skrocket = NULL;
}
}
}
} else if (obj->type == OBJTYPE_TINTEDGLASS) {
struct tintedglassobj *glass = (struct tintedglassobj *) obj;
if (glass->portalnum >= 0) {
portalSetXluFrac(glass->portalnum, 1);
portalSetOpen(glass->portalnum, true);
g_BgPortals[glass->portalnum].flags |= PORTALFLAG_FORCEOPEN;
}
} else if (obj->type == OBJTYPE_GLASS) {
struct glassobj *glass = (struct glassobj *) obj;
if (glass->portalnum >= 0) {
portalSetXluFrac(glass->portalnum, 1);
}
} else if (obj->type == OBJTYPE_DOOR) {
struct doorobj *door = (struct doorobj *) obj;
doorActivatePortal(door);
if (door->portalnum >= 0) {
g_BgPortals[door->portalnum].flags |= PORTALFLAG_FORCEOPEN;
}
}
if (obj->prop) {
s32 prevplayernum = g_Vars.currentplayernum;
s32 i;
for (i = 0; i < PLAYERCOUNT(); i++) {
setCurrentPlayerNum(i);
if (obj->prop == bmoveGetGrabbedProp() || obj->prop == bmoveGetHoverbike()) {
bmoveSetMode(MOVEMODE_WALK);
}
invRemoveProp(obj->prop);
}
setCurrentPlayerNum(prevplayernum);
// If obj is an occupied chair, remove the chr from it
if (obj->hidden & OBJHFLAG_OCCUPIEDCHAIR) {
s32 numchrs = chrsGetNumSlots();
s32 i;
obj->hidden &= ~OBJHFLAG_OCCUPIEDCHAIR;
for (i = 0; i < numchrs; i++) {
// @bug: Should be ==, but this isn't a problem because occupied
// chairs are never removed using this code. If they were, and
// the propnum was > 0, all chrs would be disassociated with
// their chairs but their chairs would still have the occupied
// flag. If the propnum was 0, all chrs would be assigned to
// this one chair, and their original chairs would still have
// the occupied flag.
if (g_ChrSlots[i].proppreset1 = obj->prop - g_Vars.props) {
g_ChrSlots[i].proppreset1 = -1;
}
}
}
// Remove references from aibots if the obj is the item being fetched
if (g_Vars.normmplayerisrunning) {
s32 i;
for (i = 0; i < g_MpNumChrs; i++) {
if (g_MpAllChrPtrs[i]->aibot && g_MpAllChrPtrs[i]->aibot->gotoprop == obj->prop) {
g_MpAllChrPtrs[i]->aibot->gotoprop = NULL;
}
}
}
func0f0926bc(obj->prop, 1, 0xffff);
shieldhitsRemoveByProp(obj->prop);
chrClearReferences(obj->prop - g_Vars.props);
projectilesUnrefOwner(obj->prop);
wallhitsFreeByProp(obj->prop, 0);
wallhitsFreeByProp(obj->prop, 1);
objFreeEmbedmentOrProjectile(obj->prop);
child = obj->prop->child;
while (child) {
struct prop *next = child->next;
objFreePermanently(child->obj, true);
child = next;
}
if (!canregen) {
if (obj->prop->parent) {
objDetach(obj->prop);
}
propDeregisterRooms(obj->prop);
if (obj->prop->type != PROPTYPE_DOOR) {
modelFreeVertices(1, obj->model);
}
modelFree(obj->model);
if (freeprop) {
propDelist(obj->prop);
propDisable(obj->prop);
propFree(obj->prop);
}
obj->prop->obj = NULL;
obj->prop = NULL;
}
}
}
void objFreePermanently(struct defaultobj *obj, bool freeprop)
{
objFree(obj, freeprop, false);
}
f32 objGetWidth(struct defaultobj *obj)
{
if (obj->type == OBJTYPE_KEY) {
return 20;
}
return 10;
}
bool func0f06b39c(struct coord *arg0, struct coord *arg1, struct coord *arg2, f32 arg3)
{
struct coord sp0c;
f32 value;
sp0c.x = arg2->x - arg0->x;
sp0c.y = arg2->y - arg0->y;
sp0c.z = arg2->z - arg0->z;
value = arg1->f[0] * sp0c.f[0] + arg1->f[1] * sp0c.f[1] + arg1->f[2] * sp0c.f[2];
if (value > 0) {
f32 a = arg1->f[0] * arg1->f[0] + arg1->f[1] * arg1->f[1] + arg1->f[2] * arg1->f[2];
f32 b = sp0c.f[0] * sp0c.f[0] + sp0c.f[1] * sp0c.f[1] + sp0c.f[2] * sp0c.f[2];
if ((b - arg3 * arg3) * a <= value * value) {
return true;
}
}
return false;
}
bool func0f06b488(struct prop *prop, struct coord *arg1, struct coord *arg2, struct coord *arg3, struct coord *arg4, struct coord *arg5, f32 *arg6)
{
struct coord sp3c;
struct coord sp30;
f32 f0;
struct coord sp20;
if (!cd0002ded8(arg1, arg2, prop)) {
#if VERSION >= VERSION_PAL_FINAL
cd00024e4c(&sp3c, &sp30, 2910, "prop/propobj.c");
cdGetPos(&sp20, 2911, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cd00024e4c(&sp3c, &sp30, 2910, "propobj.c");
cdGetPos(&sp20, 2911, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cd00024e4c(&sp3c, &sp30, 2909, "propobj.c");
cdGetPos(&sp20, 2910, "propobj.c");
#else
cd00024e4c(&sp3c, &sp30, 2898, "propobj.c");
cdGetPos(&sp20, 2899, "propobj.c");
#endif
f0 = (sp20.f[0] - arg1->f[0]) * arg3->f[0]
+ (sp20.f[1] - arg1->f[1]) * arg3->f[1]
+ (sp20.f[2] - arg1->f[2]) * arg3->f[2];
if (f0 < *arg6) {
*arg6 = f0;
arg4->x = sp20.x;
arg4->y = sp20.y;
arg4->z = sp20.z;
arg5->x = -arg3->x;
arg5->y = 0.0f;
arg5->z = -arg3->z;
if (arg5->x != 0.0f || arg5->z != 0.0f) {
guNormalize(&arg5->x, &arg5->y, &arg5->z);
} else {
arg5->z = 1.0f;
}
g_EmbedProp = prop;
g_EmbedHitPart = 0;
g_EmbedModel = NULL;
g_EmbedNode = NULL;
return true;
}
}
return false;
}
bool func0f06b610(struct defaultobj *obj, struct coord *arg1, struct coord *arg2, struct coord *arg3, f32 arg4, struct coord *arg5, struct coord *arg6, struct coord *arg7, struct coord *arg8, f32 *arg9)
{
struct model *model = obj->model;
f32 f0 = model0001af80(model);
f32 xdiff;
f32 ydiff;
f32 zdiff;
f32 sum1 = 0.0f;
struct prop *prop = obj->prop;
struct prop *child;
bool result = false;
f32 sum2;
struct coord spfc;
struct coord spf0;
struct modelnode *node1;
s32 hitpart;
struct modelnode *spe4 = NULL;
struct hitthing thing1;
s32 mtxindex1;
struct modelnode *node;
struct hitthing thing2;
s32 mtxindex2;
struct modelnode *node2;
f32 sum3;
if (prop->parent == NULL) {
xdiff = prop->pos.f[0] - arg1->f[0];
ydiff = prop->pos.f[1] - arg1->f[1];
zdiff = prop->pos.f[2] - arg1->f[2];
sum1 = xdiff * arg3->f[0] + ydiff * arg3->f[1] + zdiff * arg3->f[2];
}
if (sum1 >= -f0 && sum1 <= arg4 + f0) {
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
if (var8005efc0 > 0.0f) {
hitpart = model000225d4(model, arg5, arg6, &spe4);
while (hitpart > 0) {
if (func0f084594(model, spe4, arg5, arg6, &thing1, &mtxindex1, &node1)) {
mtx4TransformVec(&model->matrices[mtxindex1], &thing1.unk00, &spfc);
sum2 = (spfc.f[0] - arg5->f[0]) * arg6->f[0]
+ (spfc.f[1] - arg5->f[1]) * arg6->f[1]
+ (spfc.f[2] - arg5->f[2]) * arg6->f[2];
if (sum2 < *arg9) {
mtx4RotateVec(&model->matrices[mtxindex1], &thing1.unk0c, &spf0);
*arg9 = sum2;
mtx4TransformVec(camGetProjectionMtxF(), &spfc, arg7);
mtx4RotateVec(camGetProjectionMtxF(), &spf0, arg8);
if (arg8->x != 0.0f || arg8->y != 0.0f || arg8->z != 0.0f) {
guNormalize(&arg8->x, &arg8->y, &arg8->z);
} else {
arg8->z = 1.0f;
}
g_EmbedProp = prop;
g_EmbedModel = model;
g_EmbedHitPart = hitpart;
g_EmbedNode = spe4;
g_EmbedSide = thing1.unk28 / 2;
var8006993c[0] = thing1.unk00.x;
var8006993c[1] = thing1.unk00.y;
var8006993c[2] = thing1.unk00.z;
result = 1;
}
}
hitpart = model000225d4(model, arg5, arg6, &spe4);
}
} else {
do {
hitpart = model000225d4(model, arg5, arg6, &spe4);
if (hitpart > 0) {
if (func0f0849dc(model, spe4, arg5, arg6, &thing1, &mtxindex1, &node1)) {
break;
}
}
} while (hitpart > 0);
if (obj->flags3 & OBJFLAG3_HOVERBEDSHIELD) {
node = modelGetPart(model->filedata, MODELPART_BASIC_0067);
if (node && func0f084594(model, node, arg5, arg6, &thing2, &mtxindex2, &node2)) {
if (hitpart <= 0 ||
+ model->matrices[mtxindex2].m[0][2] * thing2.unk00.f[0]
+ model->matrices[mtxindex2].m[1][2] * thing2.unk00.f[1]
+ model->matrices[mtxindex2].m[2][2] * thing2.unk00.f[2]
>
+ model->matrices[mtxindex1].m[0][2] * thing1.unk00.f[0]
+ model->matrices[mtxindex1].m[1][2] * thing1.unk00.f[1]
+ model->matrices[mtxindex1].m[2][2] * thing1.unk00.f[2]
) {
hitpart = 1;
thing1 = thing2;
mtxindex1 = mtxindex2;
node1 = node2;
thing1.texturenum = 10000;
}
}
}
if (hitpart > 0) {
mtx4TransformVec(&model->matrices[mtxindex1], &thing1.unk00, &spfc);
sum3 = (spfc.f[0] - arg5->f[0]) * arg6->f[0]
+ (spfc.f[1] - arg5->f[1]) * arg6->f[1]
+ (spfc.f[2] - arg5->f[2]) * arg6->f[2];
if (sum3 >= 0.0f && sum3 <= *arg9) {
mtx4RotateVec(&model->matrices[mtxindex1], &thing1.unk0c, &spf0);
*arg9 = sum1;
mtx4TransformVec(camGetProjectionMtxF(), &spfc, arg7);
if (spf0.f[0] * arg6->f[0] + spf0.f[1] * arg6->f[1] + spf0.f[2] * arg6->f[2] > 0.0f) {
spf0.f[0] = -spf0.f[0];
spf0.f[1] = -spf0.f[1];
spf0.f[2] = -spf0.f[2];
}
mtx4RotateVec(camGetProjectionMtxF(), &spf0, arg8);
if (arg8->f[0] != 0.0f || arg8->f[1] != 0.0f || arg8->f[2] != 0.0f) {
guNormalize(&arg8->x, &arg8->y, &arg8->z);
} else {
arg8->z = 1.0f;
}
g_EmbedProp = prop;
g_EmbedHitPart = hitpart;
g_EmbedModel = model;
g_EmbedNode = node1;
var80069944 = thing1.texturenum;
result = true;
if (thing1.texturenum == 10000) {
g_EmbedSide = thing1.unk28 / 2;
var8006993c[0] = thing1.unk00.x;
var8006993c[1] = thing1.unk00.y;
var8006993c[2] = thing1.unk00.z;
}
}
}
}
} else {
if (func0f06b39c(arg1, arg3, &prop->pos, model0001af80(model))
&& func0f06b488(prop, arg1, arg2, arg3, arg7, arg8, arg9)) {
g_EmbedModel = model;
g_EmbedNode = model->filedata->rootnode;
result = true;
}
}
}
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
child = prop->child;
while (child) {
if (child->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
if (func0f06b610(child->obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) {
result = true;
}
}
child = child->next;
}
}
return result;
}
s32 func0f06be44(struct modelnode *rootnode)
{
s32 count = 0;
struct modelnode *node = rootnode;
while (node) {
count++;
if (node->child) {
count += func0f06be44(node->child);
}
node = node->next;
}
return count;
}
bool func0f06bea0(struct model *model, struct modelnode *endnode, struct modelnode *node, struct coord *arg3, struct coord *arg4, void *arg5, f32 *arg6, struct modelnode **arg7, s32 *hitpart, s32 *arg9, struct modelnode **arg10)
{
u32 stack;
union modelrodata *rodata;
bool ok = false;
f32 sp98 = MAXFLOAT;
Gfx *s4;
Gfx *s6;
struct gfxvtx *vertices;
struct modelnode *sp88;
struct modelnode *sp84 = NULL;
bool s7;
struct coord sp74;
struct modelrwdata_dl *rwdata;
vertices = NULL;
s7 = false;
var8005efc0 = 2.5f / model->scale;
sp74.x = arg3->x + arg4->f[0] * 32767.0f;
sp74.y = arg3->y + arg4->f[1] * 32767.0f;
sp74.z = arg3->z + arg4->f[2] * 32767.0f;
g_Vars.hitboundscount = 0;
while (node) {
u32 type = node->type & 0xff;
s4 = NULL;
s6 = NULL;
switch (type) {
case MODELNODETYPE_BBOX:
rodata = node->rodata;
if (model000220fc(&rodata->bbox, model0001a5cc(model, node, 0), arg3, arg4)) {
s7 = true;
sp84 = node;
if (g_Vars.hitboundscount < ARRAYCOUNT(g_Vars.hitnodes)) {
g_Vars.hitnodes[g_Vars.hitboundscount] = node;
g_Vars.hitboundscount++;
}
} else {
s7 = false;
var8005efc0 = 10.0f / model->scale;
if (model000220fc(&rodata->bbox, model0001a5cc(model, node, 0), arg3, arg4)) {
if (g_Vars.hitboundscount < ARRAYCOUNT(g_Vars.hitnodes)) {
g_Vars.hitnodes[g_Vars.hitboundscount] = node;
g_Vars.hitboundscount++;
}
}
var8005efc0 = 2.5f / model->scale;
}
break;
case MODELNODETYPE_DL:
if (s7) {
rodata = node->rodata;
rwdata = modelGetNodeRwData(model, node);
if (rwdata->gdl != NULL) {
if (rwdata->gdl == rodata->dl.primary) {
s4 = (Gfx *)((u32)rodata->dl.colourtable + ((u32)rodata->dl.primary & 0xffffff));
} else {
s4 = rwdata->gdl;
}
if (rodata->dl.secondary != NULL) {
s6 = (Gfx *)((u32)rodata->dl.colourtable + ((u32)rodata->dl.secondary & 0xffffff));
}
vertices = rwdata->vertices;
}
}
break;
case MODELNODETYPE_GUNDL:
if (s7) {
if (node->rodata->gundl.primary != NULL) {
s32 base = (s32)node->rodata->gundl.baseaddr;
s4 = (Gfx *)(base + ((u32)node->rodata->gundl.primary & 0xffffff));
if (node->rodata->gundl.secondary != NULL) {
s6 = (Gfx *)(base + ((u32)node->rodata->gundl.secondary & 0xffffff));
}
vertices = (struct gfxvtx *)base;
}
}
break;
case MODELNODETYPE_DISTANCE:
model0001c784(model, node);
break;
case MODELNODETYPE_TOGGLE:
model0001c7d0(model, node);
break;
case MODELNODETYPE_HEADSPOT:
modelAttachHead(model, node);
break;
}
if (s4 && func0f15ffdc(model, arg3, &sp74, arg4, s4, s6, vertices, &sp98, arg5)) {
ok = true;
sp88 = node;
*arg7 = sp84;
*hitpart = sp84->rodata->bbox.hitpart;
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node == endnode) {
node = NULL;
break;
}
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
if (ok) {
*arg6 = sqrtf(sp98);
*arg10 = sp88;
*arg9 = model0001a524(sp88, 0);
}
var8005efc0 = 0.0f;
return ok;
}
bool func0f06c28c(struct chrdata *chr, struct coord *arg1, struct coord *arg2, struct coord *arg3, f32 arg4, struct coord *arg5, struct coord *arg6, struct coord *arg7, struct coord *arg8, f32 *arg9)
{
f32 spec;
struct prop *prop = chr->prop;
f32 spe4 = chr0f0278a4(chr);
f32 x = (prop->pos.f[0] - arg1->f[0]);
f32 y = (prop->pos.f[1] - arg1->f[1]);
f32 z = (prop->pos.f[2] - arg1->f[2]);
f32 spd4 = x * arg3->f[0] + y * arg3->f[1] + z * arg3->f[2];
s32 hitpart = 0;
struct modelnode *spcc = NULL;
bool result = false;
struct prop *child;
struct coord spb8;
struct coord spac;
struct hitthing sp7c;
s32 sp78 = 0;
struct modelnode *sp74 = NULL;
struct model *model = chr->model;
if (chrGetShield(chr) > 0.0f) {
var8005efc0 = 10.0f / chr->model->scale;
}
if (-spe4 <= spd4 && spd4 <= arg4 + spe4 && func0f06b39c(arg1, arg3, &prop->pos, spe4)) {
if ((prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)) {
if (var8005efc0 > 0.0f) {
hitpart = model000225d4(model, arg5, arg6, &spcc);
while (hitpart > 0) {
if (func0f084594(model, spcc, arg5, arg6, &sp7c, &sp78, &sp74)) {
mtx4TransformVec(&model->matrices[sp78], &sp7c.unk00, &spb8);
spec = (spb8.f[0] - arg5->f[0]) * arg6->f[0]
+ (spb8.f[1] - arg5->f[1]) * arg6->f[1]
+ (spb8.f[2] - arg5->f[2]) * arg6->f[2];
if (spec < *arg9) {
mtx4RotateVec(&model->matrices[sp78], &sp7c.unk0c, &spac);
*arg9 = spec;
mtx4TransformVec(camGetProjectionMtxF(), &spb8, arg7);
mtx4RotateVec(camGetProjectionMtxF(), &spac, arg8);
if (arg8->x != 0.0f || arg8->y != 0.0f || arg8->z != 0.0f) {
guNormalize(&arg8->x, &arg8->y, &arg8->z);
} else {
arg8->z = 1.0f;
}
g_EmbedProp = prop;
g_EmbedModel = model;
g_EmbedHitPart = hitpart;
g_EmbedNode = spcc;
g_EmbedSide = sp7c.unk28 / 2;
var8006993c[0] = sp7c.unk00.x;
var8006993c[1] = sp7c.unk00.y;
var8006993c[2] = sp7c.unk00.z;
result = true;
}
}
hitpart = model000225d4(model, arg5, arg6, &spcc);
}
} else {
hitpart = model000225d4(model, arg5, arg6, &spcc);
if (hitpart > 0
&& func0f06bea0(model, model->filedata->rootnode, model->filedata->rootnode, arg5, arg6, &sp7c.unk00, &spec, &spcc, &hitpart, &sp78, &sp74)
&& spec < *arg9) {
*arg9 = spec;
mtx4TransformVec(camGetProjectionMtxF(), &sp7c.unk00, arg7);
mtx4RotateVec(camGetProjectionMtxF(), &sp7c.unk0c, arg8);
if (arg8->x != 0.0f || arg8->y != 0.0f || arg8->z != 0.0f) {
guNormalize(&arg8->x, &arg8->y, &arg8->z);
} else {
arg8->z = 1.0f;
}
g_EmbedProp = prop;
g_EmbedModel = model;
g_EmbedHitPart = hitpart;
g_EmbedNode = spcc;
result = true;
}
}
} else if (func0f06b488(prop, arg1, arg2, arg3, arg7, arg8, arg9)) {
g_EmbedHitPart = HITPART_TORSO;
result = true;
}
}
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
child = prop->child;
while (child) {
if (child->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
if (func0f06b610(child->obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)) {
result = true;
}
}
child = child->next;
}
}
if (var8005efc0 > 0.0f) {
var8005efc0 = 0.0f;
}
return result;
}
bool projectileFindCollidingProp(struct prop *prop, struct coord *pos1, struct coord *pos2, u32 cdtypes, struct coord *arg4, struct coord *arg5, s16 *rooms)
{
bool result = false;
f32 dist;
s16 *propnumptr;
s16 propnums[256];
f32 spa8;
bool spa4 = false;
struct coord sp98;
f32 tmp;
struct coord sp88;
struct coord sp7c;
struct chrdata *chr;
sp98.x = pos2->x - pos1->x;
sp98.y = pos2->y - pos1->y;
sp98.z = pos2->z - pos1->z;
dist = sqrtf(sp98.f[0] * sp98.f[0] + sp98.f[1] * sp98.f[1] + sp98.f[2] * sp98.f[2]);
if (dist == 0.0f) {
return false;
}
tmp = 1.0f / dist;
sp98.x *= tmp;
sp98.y *= tmp;
sp98.z *= tmp;
sp88.x = pos1->x;
sp88.y = pos1->y;
sp88.z = pos1->z;
mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &sp88);
sp7c.x = sp98.x;
sp7c.y = sp98.y;
sp7c.z = sp98.z;
mtx4RotateVecInPlace(camGetWorldToScreenMtxf(), &sp7c);
spa8 = dist;
if (cdtypes != 0) {
roomGetProps(rooms, propnums, 256);
for (propnumptr = propnums; *propnumptr >= 0; propnumptr++) {
struct prop *iterprop = &g_Vars.props[*propnumptr];
if (*propnumptr);
if (iterprop != prop) {
if (iterprop->type == PROPTYPE_OBJ
|| iterprop->type == PROPTYPE_WEAPON
|| iterprop->type == PROPTYPE_DOOR) {
struct defaultobj *obj = iterprop->obj;
if ((obj->hidden & OBJHFLAG_ISRETICK) == 0 && (obj->flags2 & OBJFLAG2_THROWTHROUGH) == 0) {
if (iterprop->type == PROPTYPE_DOOR) {
if ((cdtypes & CDTYPE_DOORS) == 0 && (propDoorGetCdTypes(iterprop) & cdtypes) == 0) {
continue;
}
} else {
if ((cdtypes & CDTYPE_OBJS) == 0) {
continue;
}
}
if (func0f06b610(obj, pos1, pos2, &sp98, dist, &sp88, &sp7c, arg4, arg5, &spa8)) {
spa4 = true;
}
}
} else if (iterprop->type == PROPTYPE_CHR
|| (iterprop->type == PROPTYPE_PLAYER && g_Vars.players[playermgrGetPlayerNumByProp(iterprop)]->haschrbody)) {
struct chrdata *chr = iterprop->chr;
if (iterprop->type == PROPTYPE_PLAYER) {
if (!g_Vars.players[playermgrGetPlayerNumByProp(iterprop)]->bondperimenabled || (cdtypes & CDTYPE_PLAYERS) == 0) {
continue;
}
} else if (iterprop->type == PROPTYPE_CHR) {
if ((chr->hidden & CHRHFLAG_PERIMDISABLED)
|| (chr->chrflags & CHRCFLAG_HIDDEN)
|| (cdtypes & CDTYPE_CHRS) == 0) {
continue;
}
}
if (func0f06c28c(chr, pos1, pos2, &sp98, dist, &sp88, &sp7c, arg4, arg5, &spa8)) {
spa4 = true;
}
} else if (iterprop->type == PROPTYPE_PLAYER
&& g_Vars.players[playermgrGetPlayerNumByProp(iterprop)]->bondperimenabled) {
if (func0f06b488(iterprop, pos1, pos2, &sp98, arg4, arg5, &spa8)) {
spa4 = true;
}
}
}
}
}
if (spa4) {
result = true;
var8009ce78.x = sp98.x;
var8009ce78.y = sp98.y;
var8009ce78.z = sp98.z;
var8009ce88.x = sp7c.x;
var8009ce88.y = sp7c.y;
var8009ce88.z = sp7c.z;
}
return result;
}
s32 func0f06cd00(struct defaultobj *obj, struct coord *pos, struct coord *arg2, struct coord *arg3)
{
struct prop *prop = obj->prop;
s32 cdresult;
struct hitthing hitthing;
struct coord sp1c4;
u32 stack;
bool s0;
s16 spcc[120];
s16 *ptr;
s32 i;
f32 scale = 1.0f;
u32 stack2;
s32 spb8;
u32 stack3[2];
cdresult = CDRESULT_NOCOLLISION;
if (g_Vars.normmplayerisrunning) {
g_Vars.useperimshoot = true;
}
g_EmbedProp = 0;
var80069944 = 0;
sp1c4.x = pos->x;
sp1c4.y = pos->y;
sp1c4.z = pos->z;
if ((prop->pos.x != pos->x || prop->pos.y != pos->y || prop->pos.z != pos->z)
&& (obj->hidden & OBJHFLAG_PROJECTILE)
&& (obj->projectile->flags & PROJECTILEFLAG_STICKY)) {
portal00018148(&prop->pos, &sp1c4, prop->rooms, &spb8, &spcc, 20);
ptr = spcc;
while (*ptr != -1) {
ptr++;
}
roomsGetActive(ptr, 100);
for (i = 0; spcc[i] != -1; i++) {
s0 = false;
if (roomIsLoaded(spcc[i])) {
if (bgCalculateHitInRoom(&prop->pos, &sp1c4, spcc[i], &hitthing)) {
hitthing.unk00.x *= scale;
hitthing.unk00.y *= scale;
hitthing.unk00.z *= scale;
var80069944 = hitthing.texturenum;
s0 = true;
if (g_Textures[hitthing.texturenum].surfacetype == SURFACETYPE_DEEPWATER) {
struct coord spa4 = {0, 0, 0};
s0 = false;
sparksCreate(prop->rooms[0], prop, &hitthing.unk00, &spa4, &hitthing.unk0c, SPARKTYPE_DEEPWATER);
propsnd0f0939f8(0, prop, SFX_HIT_WATER, -1, -1, 1024, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
obj->hidden |= OBJHFLAG_REAPABLE;
}
}
} else {
s16 spa0[2];
spa0[0] = spcc[i];
spa0[1] = -1;
if (cd0002de10(&prop->pos, spa0, &sp1c4, CDTYPE_BG) == CDRESULT_COLLISION) {
s0 = true;
#if VERSION >= VERSION_PAL_FINAL
cdGetPos(&hitthing.unk00, 4258, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cdGetPos(&hitthing.unk00, 4258, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cdGetPos(&hitthing.unk00, 4257, "propobj.c");
#else
cdGetPos(&hitthing.unk00, 4246, "propobj.c");
#endif
cd00024ee8(&hitthing.unk0c);
}
}
if (s0
&& ((prop->pos.x <= sp1c4.x && hitthing.unk00.x <= sp1c4.x && prop->pos.x <= hitthing.unk00.x) || (sp1c4.x <= prop->pos.x && sp1c4.x <= hitthing.unk00.x && hitthing.unk00.x <= prop->pos.x))
&& ((prop->pos.y <= sp1c4.y && hitthing.unk00.y <= sp1c4.y && prop->pos.y <= hitthing.unk00.y) || (sp1c4.y <= prop->pos.y && sp1c4.y <= hitthing.unk00.y && hitthing.unk00.y <= prop->pos.y))
&& ((prop->pos.z <= sp1c4.z && hitthing.unk00.z <= sp1c4.z && prop->pos.z <= hitthing.unk00.z) || (sp1c4.z <= prop->pos.z && sp1c4.z <= hitthing.unk00.z && hitthing.unk00.z <= prop->pos.z))
&& (prop->pos.f[0] != hitthing.unk00.f[0] || prop->pos.f[1] != hitthing.unk00.f[1] || prop->pos.f[2] != hitthing.unk00.f[2])) {
cdresult = CDRESULT_COLLISION;
sp1c4.x = hitthing.unk00.x;
sp1c4.y = hitthing.unk00.y;
sp1c4.z = hitthing.unk00.z;
arg3->x = hitthing.unk0c.x;
arg3->y = hitthing.unk0c.y;
arg3->z = hitthing.unk0c.z;
}
}
if (!projectileFindCollidingProp(prop, &prop->pos, &sp1c4, CDTYPE_ALL, arg2, arg3, spcc)) {
if (cdresult == CDRESULT_COLLISION) {
arg2->x = sp1c4.x;
arg2->y = sp1c4.y;
arg2->z = sp1c4.z;
}
} else {
cdresult = CDRESULT_COLLISION;
}
if (cdresult != CDRESULT_NOCOLLISION) {
struct coord dist;
f32 distance;
f32 mult;
dist.x = pos->x - prop->pos.x;
dist.y = pos->y - prop->pos.y;
dist.z = pos->z - prop->pos.z;
distance = sqrtf(dist.f[0] * dist.f[0] + dist.f[1] * dist.f[1] + dist.f[2] * dist.f[2]);
if (distance > 0.1f) {
mult = 0.1f / distance;
} else {
mult = 0.5f;
}
arg2->x -= mult * dist.x;
arg2->y -= mult * dist.y;
arg2->z -= mult * dist.z;
if (arg3->x != 0.0f || arg3->y != 0.0f || arg3->z != 0.0f) {
guNormalize(&arg3->x, &arg3->y, &arg3->z);
} else {
arg3->z = 1.0f;
}
}
}
if (g_Vars.normmplayerisrunning) {
g_Vars.useperimshoot = false;
}
return cdresult;
}
bool func0f06d37c(struct defaultobj *obj, struct coord *arg1, struct coord *arg2, struct coord *arg3)
{
struct prop *prop = obj->prop;
f32 width = objGetWidth(obj);
bool result = true;
bool sp98 = false;
struct coord sp8c;
struct coord sp80;
s16 rooms[8];
struct coord sp64;
struct coord sp58;
struct coord sp4c;
f32 f2;
g_EmbedProp = NULL;
var80069944 = 0;
sp80.x = arg1->x;
sp80.y = arg1->y;
sp80.z = arg1->z;
if (prop->pos.x != arg1->x || prop->pos.y != arg1->y || prop->pos.z != arg1->z) {
if (obj->hidden & OBJHFLAG_PROJECTILE) {
if (cd0002dac8(&prop->pos, prop->rooms, &sp80, rooms, width, CDTYPE_ALL, false, 0.0f, 0.0f) != CDRESULT_COLLISION) {
setup0f09233c(obj, &sp80, obj->realrot, rooms);
if (cdTestAToB1(&prop->pos, &sp80, width, rooms, CDTYPE_ALL, false, 0.0f, 0.0f) != CDRESULT_COLLISION) {
prop->pos.x = sp80.x;
prop->pos.y = sp80.y;
prop->pos.z = sp80.z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
} else {
result = false;
}
} else {
result = false;
}
if (!result) {
#if VERSION >= VERSION_PAL_FINAL
cd00024e4c(&sp64, &sp58, 4386, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cd00024e4c(&sp64, &sp58, 4386, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cd00024e4c(&sp64, &sp58, 4385, "propobj.c");
#else
cd00024e4c(&sp64, &sp58, 4374, "propobj.c");
#endif
arg3->x = sp58.z - sp64.z;
arg3->y = 0.0f;
arg3->z = sp64.x - sp58.x;
if (arg3->x != 0.0f || arg3->z != 0.0f) {
guNormalize(&arg3->x, &arg3->y, &arg3->z);
} else {
arg3->z = 1.0f;
}
if (sp80.x != prop->pos.x || sp80.y != prop->pos.y || sp80.z != prop->pos.z) {
sp8c.x = sp80.x - prop->pos.x;
sp8c.y = sp80.y - prop->pos.y;
sp8c.z = sp80.z - prop->pos.z;
func0f02e4f8(&prop->pos, &sp8c, arg2);
if (prop->pos.x < sp80.x) {
if (arg2->x > sp80.x) {
arg2->x = sp80.x;
} else if (arg2->x < prop->pos.x) {
arg2->x = prop->pos.x;
}
} else {
if (arg2->x > prop->pos.x) {
arg2->x = prop->pos.x;
} else if (arg2->x < sp80.x) {
arg2->x = sp80.x;
}
}
if (prop->pos.y < sp80.y) {
if (arg2->y > sp80.y) {
arg2->y = sp80.y;
} else if (arg2->y < prop->pos.y) {
arg2->y = prop->pos.y;
}
} else {
if (arg2->y > prop->pos.y) {
arg2->y = prop->pos.y;
} else if (arg2->y < sp80.y) {
arg2->y = sp80.y;
}
}
if (prop->pos.z < sp80.z) {
if (arg2->z > sp80.z) {
arg2->z = sp80.z;
} else if (arg2->z < prop->pos.z) {
arg2->z = prop->pos.z;
}
} else {
if (arg2->z > prop->pos.z) {
arg2->z = prop->pos.z;
} else if (arg2->z < sp80.z) {
arg2->z = sp80.z;
}
}
f2 = cd00024e98() * 0.99f;
sp4c.x = sp8c.x * f2 + prop->pos.x;
sp4c.y = sp80.y;
sp4c.z = sp8c.z * f2 + prop->pos.z;
if (cd0002da50(&prop->pos, prop->rooms, &sp4c, rooms, CDTYPE_ALL, false, 0.0f, 0.0f) != CDRESULT_COLLISION) {
setup0f09233c(obj, &sp4c, obj->realrot, rooms);
if (cdTestVolume(&sp4c, width, rooms, CDTYPE_ALL, false, 0.0f, 0.0f) != CDRESULT_COLLISION) {
prop->pos.x = sp4c.x;
prop->pos.y = sp4c.y;
prop->pos.z = sp4c.z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
sp98 = true;
}
}
} else {
arg2->x = sp80.x;
arg2->y = sp80.y;
arg2->z = sp80.z;
}
if (!sp98) {
sp4c.x = prop->pos.x;
sp4c.y = sp80.y;
sp4c.z = prop->pos.z;
func0f065e74(&prop->pos, prop->rooms, &sp4c, rooms);
prop->pos.y = sp4c.y;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
}
}
}
}
return result;
}
/**
* Update a speed and distance travelled, factoring in acceleration,
* deceleration and the global update multiplier.
*
* The new speed and distance done are written back to those pointers.
*/
void applySpeed(f32 *distdone, f32 maxdist, f32 *speedptr, f32 accel, f32 decel, f32 maxspeed)
{
f32 speed = *speedptr;
s32 i;
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
f32 limit = speed * speed * 0.5f / decel;
f32 distremaining = maxdist - *distdone;
if (distremaining > 0.0f) {
if (speed > 0.0f && distremaining <= limit) {
// Slow down for end
speed -= decel;
if (speed < decel) {
speed = decel;
}
} else if (speed < maxspeed) {
// Accelerate
if (speed < 0.0f) {
speed += decel;
} else {
speed += accel;
}
if (speed > maxspeed) {
speed = maxspeed;
}
}
if (speed >= distremaining) {
*distdone = maxdist;
break;
}
*distdone += speed;
} else {
if (speed < 0.0f && -distremaining <= limit) {
speed += decel;
if (speed > -decel) {
speed = -decel;
}
} else if (speed > -maxspeed) {
if (speed > 0.0f) {
speed -= decel;
} else {
speed -= accel;
}
if (speed < -maxspeed) {
speed = -maxspeed;
}
}
if (speed <= distremaining) {
*distdone = maxdist;
break;
}
*distdone += speed;
}
}
*speedptr = speed;
}
void applyRotation(f32 *angle, f32 maxrot, f32 *speed, f32 accel, f32 decel, f32 maxspeed)
{
f32 tmp = maxrot - *angle;
if (tmp < -M_PI) {
maxrot += M_BADTAU;
} else if (tmp >= M_PI) {
maxrot -= M_BADTAU;
}
applySpeed(angle, maxrot, speed, accel, decel, maxspeed);
if (*angle < 0) {
*angle += M_BADTAU;
}
if (*angle >= M_BADTAU) {
*angle -= M_BADTAU;
}
}
#define NEXT(i) ((i + 1) % 3)
#define PREV(i) ((i + 2) % 3)
/**
* Make a projectile fall to the ground once it's hit a wall.
*
* The vast majority of this is calculating the rotation for the projectile.
*/
void projectileFall(struct defaultobj *obj, f32 arg1[3][3])
{
s32 t2;
s32 t4;
s32 t3;
struct coord sp188;
Mtxf sp148;
Mtxf sp108;
Mtxf spc8;
Mtxf sp88;
f32 sp84;
f32 sp80;
struct modelrodata_bbox *bbox;
s32 i;
u32 stack[2];
f32 sp6c;
struct projectile *projectile;
f32 f2;
f32 sp58[3];
f32 sp4c[3];
f32 sp40[3];
obj->hidden &= ~OBJHFLAG_00010000;
if (obj->hidden & OBJHFLAG_PROJECTILE) {
projectile = obj->projectile;
if (obj->type == OBJTYPE_DOOR) {
objFreeProjectile(obj);
return;
}
projectile->ownerprop = NULL;
projectile->flags &= ~PROJECTILEFLAG_AIRBORNE;
projectile->flags |= PROJECTILEFLAG_FALLING;
projectile->flags &= ~PROJECTILEFLAG_STICKY;
mtx3ToMtx4(obj->realrot, &sp148);
mtx4GetRotation(sp148.m, &sp188);
mtx4LoadRotation(&sp188, &sp108);
quaternion0f096ca0(&sp188, projectile->unk068);
mtx4LoadRotationFrom(sp108.m, spc8.m);
mtx4MultMtx4(&spc8, &sp148, &sp88);
projectile->unk0b8[0] = sqrtf(sp88.m[0][0] * sp88.m[0][0] + sp88.m[0][1] * sp88.m[0][1] + sp88.m[0][2] * sp88.m[0][2]);
projectile->unk0b8[1] = sqrtf(sp88.m[1][0] * sp88.m[1][0] + sp88.m[1][1] * sp88.m[1][1] + sp88.m[1][2] * sp88.m[1][2]);
projectile->unk0b8[2] = sqrtf(sp88.m[2][0] * sp88.m[2][0] + sp88.m[2][1] * sp88.m[2][1] + sp88.m[2][2] * sp88.m[2][2]);
t2 = -1;
t4 = -1;
t3 = -1;
bbox = objFindBboxRodata(obj);
sp4c[0] = bbox->xmax - bbox->xmin;
sp4c[1] = bbox->ymax - bbox->ymin;
sp4c[2] = bbox->zmax - bbox->zmin;
for (i = 0; i < 3; i++) {
sp58[i] = sp4c[i] * projectile->unk0b8[i];
sp40[i] = obj->realrot[i][1] * sp4c[i];
if (sp40[i] < 0.0f) {
sp40[i] = -sp40[i];
}
}
if (obj->flags3 & (OBJFLAG3_00000008 | OBJFLAG3_00000200 | OBJFLAG3_08000000)) {
if (obj->flags3 & OBJFLAG3_00000008) {
for (i = 0; i < 3; i++) {
if (sp58[i] < sp58[NEXT(i)] && sp58[i] < sp58[PREV(i)]) {
t4 = i;
break;
}
}
} else {
t4 = 1;
}
if (sp40[(t4 + 2) % 3] <= sp40[(t4 + 1) % 3]) {
t2 = (t4 + 1) % 3;
t3 = (t4 + 2) % 3;
} else {
t2 = (t4 + 2) % 3;
t3 = (t4 + 1) % 3;
}
}
if (t2 < 0) {
for (i = 0; i < 3; i++) {
if (sp58[i] > sp58[NEXT(i)] * 3.0f && sp58[i] > sp58[PREV(i)] * 3.0f) {
t2 = i;
if (sp58[NEXT(i)] > sp58[PREV(i)] * 2.0f) {
t4 = PREV(i);
t3 = NEXT(i);
} else if (sp58[PREV(i)] > sp58[NEXT(i)] * 2.0f) {
t4 = NEXT(i);
t3 = PREV(i);
} else {
if ((random() % 2) == 0) {
t4 = PREV(i);
t3 = NEXT(i);
} else {
t4 = NEXT(i);
t3 = PREV(i);
}
}
break;
}
}
}
if (t2 < 0) {
for (i = 0; i < 3; i++) {
if (sp58[i] > sp58[NEXT(i)] * 3.0f || sp58[i] > sp58[PREV(i)] * 3.0f) {
if (sp58[i] > sp58[NEXT(i)] * 3.0f) {
t4 = NEXT(i);
} else if (sp58[i] > sp58[PREV(i)] * 3.0f) {
t4 = PREV(i);
}
if (sp40[(t4 + 2) % 3] <= sp40[(t4 + 1) % 3]) {
t2 = (t4 + 1) % 3;
t3 = (t4 + 2) % 3;
} else {
t2 = (t4 + 2) % 3;
t3 = (t4 + 1) % 3;
}
break;
}
}
}
if (t2 < 0) {
for (i = 0; i < 3; i++) {
if (sp40[i] >= sp40[NEXT(i)] && sp40[i] >= sp40[PREV(i)]) {
t4 = i;
if (sp40[PREV(i)] <= sp40[NEXT(i)]) {
t3 = PREV(i);
t2 = NEXT(i);
} else {
t2 = PREV(i);
t3 = NEXT(i);
}
break;
}
}
}
if (t2 < 0) {
t2 = 0;
t4 = 1;
t3 = 2;
}
sp84 = obj->realrot[t2][0];
sp80 = obj->realrot[t2][2];
if (sp84 != 0.0f || sp80 != 0.0f) {
f32 f0 = sqrtf(sp84 * sp84 + sp80 * sp80);
if (f0 > 0.0f) {
f0 = 1.0f / f0;
sp84 *= f0;
sp80 *= f0;
} else {
sp84 = 0.0f;
sp80 = 1.0f;
}
} else {
sp84 = 0.0f;
sp80 = 1.0f;
}
spc8.m[t2][0] = sp84;
spc8.m[t2][1] = 0.0f;
spc8.m[t2][2] = sp80;
spc8.m[t2][3] = 0.0f;
if (((obj->realrot[t4][1] >= 0.0f || (obj->flags3 & OBJFLAG3_08000000)) && t3 == ((t4 + 1) % 3))
|| (obj->realrot[t4][1] <= 0.0f && (obj->flags3 & OBJFLAG3_08000000) == 0 && t3 == (t4 + 2) % 3)) {
spc8.m[t3][0] = -sp80;
spc8.m[t3][1] = 0.0f;
spc8.m[t3][2] = sp84;
spc8.m[t3][3] = 0.0f;
} else {
spc8.m[t3][0] = sp80;
spc8.m[t3][1] = 0.0f;
spc8.m[t3][2] = -sp84;
spc8.m[t3][3] = 0.0f;
}
if (obj->realrot[t4][1] >= 0.0f || (obj->flags3 & OBJFLAG3_08000000)) {
spc8.m[t4][0] = 0.0f;
spc8.m[t4][1] = 1.0f;
spc8.m[t4][2] = 0.0f;
spc8.m[t4][3] = 0.0f;
} else {
spc8.m[t4][0] = 0.0f;
spc8.m[t4][1] = -1.0f;
spc8.m[t4][2] = 0.0f;
spc8.m[t4][3] = 0.0f;
}
spc8.m[3][0] = 0.0f;
spc8.m[3][1] = 0.0f;
spc8.m[3][2] = 0.0f;
spc8.m[3][3] = 1.0f;
mtx4GetRotation(spc8.m, &sp188);
quaternion0f096ca0(&sp188, projectile->unk078);
quaternion0f0976c0(projectile->unk068, projectile->unk078);
projectile->unk060 = 0.0f;
sp6c = acosf(spc8.m[t2][0] * sp108.m[t2][0] + spc8.m[t2][1] * sp108.m[t2][1] + spc8.m[t2][2] * sp108.m[t2][2]);
if (sp6c > 0.0f && obj->realrot[t2][1] > 0.0f && obj->realrot[t2][1] > arg1[t2][1]) {
projectile->unk064 = 0.05f / (sp6c * 0.63672113f);
} else if (sp6c > 0.0f && obj->realrot[t2][1] < 0.0f && obj->realrot[t2][1] < arg1[t2][1]) {
projectile->unk064 = 0.05f / (sp6c * 0.63672113f);
} else {
f2 = acosf((arg1[t2][0] * obj->realrot[t2][0] + arg1[t2][1] * obj->realrot[t2][1] + arg1[t2][2] * obj->realrot[t2][2]) / (obj->model->scale * obj->model->scale)) / g_Vars.lvupdate240freal;
if (sp6c != 0.0f) {
projectile->unk064 = f2 / sp6c;
} else {
projectile->unk064 = 1.0f;
}
}
if (projectile->unk064 < 0.0f) {
projectile->unk064 = -projectile->unk064;
}
if (projectile->unk064 < 0.03f) {
projectile->unk064 = 0.03f;
} else if (projectile->unk064 > 0.15f) {
projectile->unk064 = 0.15f;
}
}
}
void knifePlayWooshSound(struct defaultobj *obj)
{
if (obj->hidden & OBJHFLAG_PROJECTILE) {
if ((obj->projectile->flags & PROJECTILEFLAG_AIRBORNE)
&& obj->projectile->bouncecount <= 0
&& (obj->hidden & OBJHFLAG_00000020)) {
u16 soundnums[] = { SFX_8074, SFX_8074, SFX_8074 };
s32 index = random() % ARRAYCOUNT(soundnums);
if (obj->projectile->lastwooshframe < g_Vars.lvframe60 - TICKS(6)) {
func0f0926bc(obj->prop, 1, 0xffff);
if (!lvIsPaused()) {
propsnd0f0939f8(0, obj->prop, soundnums[index], -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
obj->projectile->lastwooshframe = g_Vars.lvframe60;
}
}
} else {
obj->hidden &= ~OBJHFLAG_00000020;
func0f0926bc(obj->prop, 1, 0xffff);
}
}
}
void func0f06e9cc(struct coord *arg0, Mtxf *arg1)
{
f32 sp124;
f32 sp120;
f32 sp11c;
f32 sp118;
f32 sp114;
f32 f0;
f32 sp10c;
f32 sp108;
f32 sp104;
f32 a;
f32 b;
f32 stack;
f32 spf4;
f32 spf0;
Mtxf spb0;
Mtxf sp70;
Mtxf sp30;
struct coord sp24;
f0 = sqrtf(arg0->f[0] * arg0->f[0] + arg0->f[1] * arg0->f[1] + arg0->f[2] * arg0->f[2]);
sp10c = arg0->x / f0;
sp108 = arg0->y / f0;
sp104 = arg0->z / f0;
if (sp10c == 0.0f && sp104 == 0.0f) {
sp124 = 0.0f;
sp120 = 0.0f;
sp11c = sp108;
sp118 = 1.0f;
sp114 = 0.0f;
} else {
a = sqrtf(sp10c * sp10c + sp104 * sp104);
b = sp10c / a;
sp118 = sp104 / a;
sp114 = -b;
sp124 = sp108 * b;
sp120 = -a;
sp11c = sp108 * sp118;
}
spf4 = atan2f(sp118, sp114);
mtx4LoadYRotation(-spf4, &spb0);
sp24.x = sp124;
sp24.y = sp120;
sp24.z = sp11c;
mtx4RotateVecInPlace(&spb0, &sp24);
spf0 = atan2f(sp24.x, sp24.y);
mtx4LoadYRotation(-1.5705463f + spf4, &sp70);
mtx4LoadXRotation(-1.5705463f - spf0, &sp30);
mtx4MultMtx4(&sp70, &sp30, arg1);
}
void objLand2(struct defaultobj *obj, struct coord *arg1, struct coord *arg2)
{
Mtxf sp40;
struct coord newpos;
struct modelrodata_bbox *bbox = modelFindBboxRodata(obj->model);
f32 ymin = objGetLocalYMin(bbox);
struct prop *prop = obj->prop;
s16 newrooms[8];
func0f06e9cc(arg2, &sp40);
mtx00015f04(obj->model->scale, &sp40);
newpos.x = arg1->x - sp40.m[1][0] * ymin;
newpos.y = arg1->y - sp40.m[1][1] * ymin;
newpos.z = arg1->z - sp40.m[1][2] * ymin;
func0f065e74(&prop->pos, prop->rooms, &newpos, newrooms);
func0f06a580(obj, &newpos, &sp40, newrooms);
}
void boltLand(struct weaponobj *weapon, struct coord *arg1)
{
Mtxf mtx;
struct coord newpos;
struct modelrodata_bbox *bbox;
s32 beamnum;
f32 zmax;
struct prop *prop;
s16 newrooms[8];
bbox = modelFindBboxRodata(weapon->base.model);
prop = weapon->base.prop;
weapon->timer240 = 13;
zmax = objGetLocalZMax(bbox);
zmax -= 25.0f + 2.0f * RANDOMFRAC();
mtx3ToMtx4(weapon->base.realrot, &mtx);
newpos.x = arg1->x - mtx.m[2][0] * zmax;
newpos.y = arg1->y - mtx.m[2][1] * zmax;
newpos.z = arg1->z - mtx.m[2][2] * zmax;
func0f065dd8(&prop->pos, prop->rooms, &newpos, newrooms);
func0f06a580(&weapon->base, &newpos, &mtx, newrooms);
beamnum = boltbeamFindByProp(prop);
if (beamnum != -1) {
boltbeamSetTailPos(beamnum, &prop->pos);
boltbeamSetAutomatic(beamnum, 2100);
}
}
void knifeLand(struct defaultobj *obj, struct coord *arg1, struct coord *arg2)
{
Mtxf spd0;
Mtxf sp90;
Mtxf sp50;
struct coord newpos;
struct modelrodata_bbox *bbox = modelFindBboxRodata(obj->model);
f32 zero = 0.0f;
struct prop *prop = obj->prop;
s16 newrooms[8];
struct coord sp1c;
// @bug? Should these be assigned to zero?
objGetLocalZMin(bbox);
random();
sp1c.x = RANDOMFRAC() * 0.8f + arg2->x - 0.4f;
sp1c.y = RANDOMFRAC() * 0.8f + arg2->y - 0.4f;
sp1c.z = RANDOMFRAC() * 0.8f + arg2->z - 0.4f;
func0f06e9cc(&sp1c, &sp90);
mtx4LoadXRotation(-1.5705463f, &sp50);
mtx4MultMtx4(&sp90, &sp50, &spd0);
mtx00015f04(obj->model->scale, &spd0);
newpos.x = arg1->x - zero;
newpos.y = arg1->y - zero;
newpos.z = arg1->z - zero;
func0f065e74(&prop->pos, prop->rooms, &newpos, newrooms);
func0f06a580(obj, &newpos, &spd0, newrooms);
}
bool objEmbed(struct prop *prop, struct prop *parent, struct model *model, struct modelnode *node)
{
if (parent->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
struct defaultobj *obj = prop->obj;
Mtxf sp134;
Mtxf spf4;
Mtxf spb4;
Mtxf sp74;
Mtxf sp34;
struct coord sp28;
Mtxf *sp24;
obj->embedment = embedmentAllocate();
if (obj->embedment) {
sp24 = model0001a5cc(model, node, 0);
obj->hidden |= OBJHFLAG_EMBEDDED;
propDeregisterRooms(prop);
propDelist(prop);
propDisable(prop);
obj->model->attachedtomodel = model;
obj->model->attachedtonode = node;
propReparent(prop, parent);
modelGetRootPosition(obj->model, &sp28);
sp28.x = -sp28.x;
sp28.y = -sp28.y;
sp28.z = -sp28.z;
mtx4LoadTranslation(&sp28, &sp74);
mtx3ToMtx4(obj->realrot, &sp34);
mtx4SetTranslation(&prop->pos, &sp34);
mtx00015be4(&sp34, &sp74, &sp134);
mtx00015be4(camGetProjectionMtxF(), sp24, &spf4);
mtx000172f0(spf4.m, spb4.m);
mtx00015be4(&spb4, &sp134, &obj->embedment->matrix);
return true;
}
}
return false;
}
void objLand(struct prop *prop, struct coord *arg1, struct coord *arg2, bool *embedded)
{
struct defaultobj *obj = prop->obj;
struct prop *ownerprop = NULL;
if (obj->hidden & OBJHFLAG_PROJECTILE) {
ownerprop = obj->projectile->ownerprop;
objFreeProjectile(obj);
}
obj->hidden |= OBJHFLAG_00020000;
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *)obj;
if (weapon->weaponnum == WEAPON_ECMMINE
|| weapon->weaponnum == WEAPON_COMMSRIDER
|| weapon->weaponnum == WEAPON_TRACERBUG
|| weapon->weaponnum == WEAPON_TARGETAMPLIFIER) {
obj->flags |= OBJFLAG_INVINCIBLE;
obj->flags |= OBJFLAG_00400000;
obj->flags2 |= OBJFLAG2_IMMUNETOGUNFIRE;
}
objectiveCheckThrowInRoom(weapon->weaponnum, prop->rooms);
if (weapon->weaponnum == WEAPON_BOLT) {
boltLand(weapon, arg1);
} else if (weapon->weaponnum == WEAPON_COMBATKNIFE) {
knifeLand(obj, arg1, arg2);
} else {
objLand2(obj, arg1, arg2);
}
} else if (obj->type == OBJTYPE_AUTOGUN) {
struct autogunobj *autogun = (struct autogunobj *)obj;
objLand2(obj, arg1, arg2);
autogun->yzero = atan2f(arg2->x, arg2->z);
autogun->xzero = atan2f(arg2->y, sqrtf(arg2->f[0] * arg2->f[0] + arg2->f[2] * arg2->f[2]));
autogun->xrot = autogun->xzero;
autogun->yrot = autogun->yzero;
}
if (g_EmbedProp) {
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *)obj;
bgunPlayPropHitSound(&weapon->gset, g_EmbedProp, -1);
if (weapon->weaponnum == WEAPON_COMBATKNIFE
&& (g_EmbedProp->type == PROPTYPE_CHR || g_EmbedProp->type == PROPTYPE_PLAYER)) {
chrSetPoisoned(g_EmbedProp->chr, ownerprop);
}
}
if (g_EmbedProp->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
if (objEmbed(prop, g_EmbedProp, g_EmbedModel, g_EmbedNode)) {
*embedded = true;
}
} else {
obj->hidden |= OBJHFLAG_REAPABLE;
}
} else if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *)obj;
bgunPlayBgHitSound(&weapon->gset, arg1, -1, prop->rooms);
}
}
bool propExplode(struct prop *prop, s32 exptype)
{
struct defaultobj *obj = prop->obj;
s32 playernum = (obj->hidden & 0xf0000000) >> 28;
bool result;
if (prop->parent) {
struct prop *parent = prop->parent;
struct coord pos;
s16 rooms[8];
while (parent->parent) {
parent = parent->parent;
}
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
Mtxf *mtx = model0001a60c(obj->model);
pos.x = mtx->m[3][0];
pos.y = mtx->m[3][1];
pos.z = mtx->m[3][2];
mtx4TransformVecInPlace(camGetProjectionMtxF(), &pos);
} else {
pos.x = parent->pos.x;
pos.y = parent->pos.y;
pos.z = parent->pos.z;
}
func0f065e74(&parent->pos, parent->rooms, &pos, rooms);
result = explosionCreateComplex(NULL, &pos, rooms, exptype, playernum);
} else if ((obj->hidden & (OBJHFLAG_EMBEDDED | OBJHFLAG_PROJECTILE | OBJHFLAG_00020000)) == OBJHFLAG_00020000) {
struct coord sp5c;
struct coord sp50;
f32 ymin = objGetLocalYMin(modelFindBboxRodata(obj->model));
s32 room = prop->rooms[0];
sp50.x = obj->realrot[1][0];
sp50.y = obj->realrot[1][1];
sp50.z = obj->realrot[1][2];
sp5c.x = prop->pos.f[0] + obj->realrot[1][0] * ymin;
sp5c.y = prop->pos.f[1] + obj->realrot[1][1] * ymin;
sp5c.z = prop->pos.f[2] + obj->realrot[1][2] * ymin;
result = explosionCreate(NULL, &prop->pos, prop->rooms, exptype,
playernum, true, &sp5c, room, &sp50);
} else {
result = explosionCreateComplex(NULL, &prop->pos, prop->rooms, exptype, playernum);
}
return result;
}
void ammocrateTick(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
if (obj->flags & OBJFLAG_AMMOCRATE_EXPLODENOW) {
propExplode(prop, EXPLOSIONTYPE_12);
obj->hidden |= OBJHFLAG_REAPABLE;
}
}
u32 var800699fc = 0x00000000;
u32 var80069a00 = 0xc1200000;
u32 var80069a04 = 0x00000000;
#if PAL
GLOBAL_ASM(
glabel weaponTick
.late_rodata
glabel var7f1aa2c0
.word 0x47742400
glabel var7f1aa2c4
.word 0x3cd67750
.text
/* f06f54c: 27bdfe50 */ addiu $sp,$sp,-432
/* f06f550: afbf001c */ sw $ra,0x1c($sp)
/* f06f554: afb00018 */ sw $s0,0x18($sp)
/* f06f558: afa401b0 */ sw $a0,0x1b0($sp)
/* f06f55c: 8c820004 */ lw $v0,0x4($a0)
/* f06f560: 2406001e */ addiu $a2,$zero,0x1e
/* f06f564: afa201a8 */ sw $v0,0x1a8($sp)
/* f06f568: 904f005c */ lbu $t7,0x5c($v0)
/* f06f56c: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06f570: 00408025 */ or $s0,$v0,$zero
/* f06f574: 54cf0005 */ bnel $a2,$t7,.L0f06f58c
/* f06f578: 91c2005c */ lbu $v0,0x5c($t6)
/* f06f57c: 9059005f */ lbu $t9,0x5f($v0)
/* f06f580: 53200006 */ beqzl $t9,.L0f06f59c
/* f06f584: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06f588: 91c2005c */ lbu $v0,0x5c($t6)
.L0f06f58c:
/* f06f58c: 24010055 */ addiu $at,$zero,0x55
/* f06f590: 544100cf */ bnel $v0,$at,.L0f06f8d0
/* f06f594: 2405001f */ addiu $a1,$zero,0x1f
/* f06f598: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06f59c:
/* f06f59c: 24010055 */ addiu $at,$zero,0x55
/* f06f5a0: 85e30062 */ lh $v1,0x62($t7)
/* f06f5a4: 91e2005c */ lbu $v0,0x5c($t7)
/* f06f5a8: 046200c9 */ bltzl $v1,.L0f06f8d0
/* f06f5ac: 2405001f */ addiu $a1,$zero,0x1f
/* f06f5b0: 1441005f */ bne $v0,$at,.L0f06f730
/* f06f5b4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f5b8: 91f8005f */ lbu $t8,0x5f($t7)
/* f06f5bc: 24070001 */ addiu $a3,$zero,0x1
/* f06f5c0: 14f8005b */ bne $a3,$t8,.L0f06f730
/* f06f5c4: 00000000 */ nop
/* f06f5c8: 18600059 */ blez $v1,.L0f06f730
/* f06f5cc: 28610002 */ slti $at,$v1,0x2
/* f06f5d0: 14200055 */ bnez $at,.L0f06f728
/* f06f5d4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f5d8: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f5dc: 8db90034 */ lw $t9,0x34($t5)
/* f06f5e0: 00797023 */ subu $t6,$v1,$t9
/* f06f5e4: 29c10008 */ slti $at,$t6,0x8
/* f06f5e8: 102003e9 */ beqz $at,.L0f070590
/* f06f5ec: a5ee0062 */ sh $t6,0x62($t7)
/* f06f5f0: 3c198007 */ lui $t9,%hi(var800699fc)
/* f06f5f4: 273999fc */ addiu $t9,$t9,%lo(var800699fc)
/* f06f5f8: 8f210000 */ lw $at,0x0($t9)
/* f06f5fc: 27b8019c */ addiu $t8,$sp,0x19c
/* f06f600: 8f2e0004 */ lw $t6,0x4($t9)
/* f06f604: af010000 */ sw $at,0x0($t8)
/* f06f608: 8f210008 */ lw $at,0x8($t9)
/* f06f60c: af0e0004 */ sw $t6,0x4($t8)
/* f06f610: af010008 */ sw $at,0x8($t8)
/* f06f614: afa00194 */ sw $zero,0x194($sp)
/* f06f618: 0fc1a179 */ jal func0f0685e4
/* f06f61c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f620: 8e020040 */ lw $v0,0x40($s0)
/* f06f624: 8fa50194 */ lw $a1,0x194($sp)
/* f06f628: 24070001 */ addiu $a3,$zero,0x1
/* f06f62c: 304f0040 */ andi $t7,$v0,0x40
/* f06f630: 11e00004 */ beqz $t7,.L0f06f644
/* f06f634: 30590080 */ andi $t9,$v0,0x80
/* f06f638: 8e180048 */ lw $t8,0x48($s0)
/* f06f63c: 10000004 */ b .L0f06f650
/* f06f640: 8f050044 */ lw $a1,0x44($t8)
.L0f06f644:
/* f06f644: 13200002 */ beqz $t9,.L0f06f650
/* f06f648: 00000000 */ nop
/* f06f64c: 8e050048 */ lw $a1,0x48($s0)
.L0f06f650:
/* f06f650: 10a00032 */ beqz $a1,.L0f06f71c
/* f06f654: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06f658: 8fae01b0 */ lw $t6,0x1b0($sp)
/* f06f65c: 8dcf0018 */ lw $t7,0x18($t6)
/* f06f660: 01c01825 */ or $v1,$t6,$zero
/* f06f664: 11e00006 */ beqz $t7,.L0f06f680
/* f06f668: 00000000 */ nop
/* f06f66c: 8dc20018 */ lw $v0,0x18($t6)
/* f06f670: 00401825 */ or $v1,$v0,$zero
.L0f06f674:
/* f06f674: 8c420018 */ lw $v0,0x18($v0)
/* f06f678: 5440fffe */ bnezl $v0,.L0f06f674
/* f06f67c: 00401825 */ or $v1,$v0,$zero
.L0f06f680:
/* f06f680: 5060000d */ beqzl $v1,.L0f06f6b8
/* f06f684: 8cae0000 */ lw $t6,0x0($a1)
/* f06f688: 90620000 */ lbu $v0,0x0($v1)
/* f06f68c: 24010003 */ addiu $at,$zero,0x3
/* f06f690: 10410003 */ beq $v0,$at,.L0f06f6a0
/* f06f694: 24010006 */ addiu $at,$zero,0x6
/* f06f698: 54410007 */ bnel $v0,$at,.L0f06f6b8
/* f06f69c: 8cae0000 */ lw $t6,0x0($a1)
.L0f06f6a0:
/* f06f6a0: 8c620004 */ lw $v0,0x4($v1)
/* f06f6a4: 8c580014 */ lw $t8,0x14($v0)
/* f06f6a8: 37190001 */ ori $t9,$t8,0x1
/* f06f6ac: 10000005 */ b .L0f06f6c4
/* f06f6b0: ac590014 */ sw $t9,0x14($v0)
/* f06f6b4: 8cae0000 */ lw $t6,0x0($a1)
.L0f06f6b8:
/* f06f6b8: aca00088 */ sw $zero,0x88($a1)
/* f06f6bc: 35cf0001 */ ori $t7,$t6,0x1
/* f06f6c0: acaf0000 */ sw $t7,0x0($a1)
.L0f06f6c4:
/* f06f6c4: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06f6c8: a7070062 */ sh $a3,0x62($t8)
/* f06f6cc: afa50194 */ sw $a1,0x194($sp)
/* f06f6d0: 0fc1a1a5 */ jal projectileSetSticky
/* f06f6d4: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f6d8: 8fa50194 */ lw $a1,0x194($sp)
/* f06f6dc: c7a4019c */ lwc1 $f4,0x19c($sp)
/* f06f6e0: 24a40020 */ addiu $a0,$a1,0x20
/* f06f6e4: e4a40004 */ swc1 $f4,0x4($a1)
/* f06f6e8: c7a601a0 */ lwc1 $f6,0x1a0($sp)
/* f06f6ec: e4a60008 */ swc1 $f6,0x8($a1)
/* f06f6f0: c7a801a4 */ lwc1 $f8,0x1a4($sp)
/* f06f6f4: 0c00566c */ jal mtx4LoadIdentity
/* f06f6f8: e4a8000c */ swc1 $f8,0xc($a1)
/* f06f6fc: 8fa50194 */ lw $a1,0x194($sp)
/* f06f700: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06f704: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f708: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f70c: acb900d4 */ sw $t9,0xd4($a1)
/* f06f710: 8dae000c */ lw $t6,0xc($t5)
/* f06f714: 1000039e */ b .L0f070590
/* f06f718: acae00d8 */ sw $t6,0xd8($a1)
.L0f06f71c:
/* f06f71c: 240f0002 */ addiu $t7,$zero,0x2
/* f06f720: 1000039b */ b .L0f070590
/* f06f724: a70f0062 */ sh $t7,0x62($t8)
.L0f06f728:
/* f06f728: 1000039a */ b .L0f070594
/* f06f72c: 8e190010 */ lw $t9,0x10($s0)
.L0f06f730:
/* f06f730: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f734: 8db90034 */ lw $t9,0x34($t5)
/* f06f738: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06f73c: 00797023 */ subu $t6,$v1,$t9
/* f06f740: 05c10393 */ bgez $t6,.L0f070590
/* f06f744: a5ee0062 */ sh $t6,0x62($t7)
/* f06f748: 0fc10e62 */ jal propUnsetDangerous
/* f06f74c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f750: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06f754: 24010002 */ addiu $at,$zero,0x2
/* f06f758: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f75c: 9319005f */ lbu $t9,0x5f($t8)
/* f06f760: 57210007 */ bnel $t9,$at,.L0f06f780
/* f06f764: 8e0f000c */ lw $t7,0xc($s0)
/* f06f768: 0fc1bcc5 */ jal propExplode
/* f06f76c: 24050015 */ addiu $a1,$zero,0x15
/* f06f770: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f774: 1000000c */ b .L0f06f7a8
/* f06f778: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f77c: 8e0f000c */ lw $t7,0xc($s0)
.L0f06f780:
/* f06f780: 2405000d */ addiu $a1,$zero,0xd
/* f06f784: 000f7000 */ sll $t6,$t7,0x0
/* f06f788: 05c10003 */ bgez $t6,.L0f06f798
/* f06f78c: 00000000 */ nop
/* f06f790: 10000001 */ b .L0f06f798
/* f06f794: 24050011 */ addiu $a1,$zero,0x11
.L0f06f798:
/* f06f798: 0fc1bcc5 */ jal propExplode
/* f06f79c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f7a0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f7a4: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
.L0f06f7a8:
/* f06f7a8: 8e180040 */ lw $t8,0x40($s0)
/* f06f7ac: 00004025 */ or $t0,$zero,$zero
/* f06f7b0: 00003025 */ or $a2,$zero,$zero
/* f06f7b4: 37190004 */ ori $t9,$t8,0x4
/* f06f7b8: ae190040 */ sw $t9,0x40($s0)
/* f06f7bc: 8dab006c */ lw $t3,0x6c($t5)
/* f06f7c0: 00002025 */ or $a0,$zero,$zero
/* f06f7c4: 00001025 */ or $v0,$zero,$zero
/* f06f7c8: 11600003 */ beqz $t3,.L0f06f7d8
/* f06f7cc: 00002825 */ or $a1,$zero,$zero
/* f06f7d0: 10000001 */ b .L0f06f7d8
/* f06f7d4: 24060001 */ addiu $a2,$zero,0x1
.L0f06f7d8:
/* f06f7d8: 8daa0068 */ lw $t2,0x68($t5)
/* f06f7dc: 0008c880 */ sll $t9,$t0,0x2
/* f06f7e0: 01b91821 */ addu $v1,$t5,$t9
/* f06f7e4: 11400003 */ beqz $t2,.L0f06f7f4
/* f06f7e8: 240c0003 */ addiu $t4,$zero,0x3
/* f06f7ec: 10000001 */ b .L0f06f7f4
/* f06f7f0: 24040001 */ addiu $a0,$zero,0x1
.L0f06f7f4:
/* f06f7f4: 8da90064 */ lw $t1,0x64($t5)
/* f06f7f8: 11200003 */ beqz $t1,.L0f06f808
/* f06f7fc: 00000000 */ nop
/* f06f800: 10000001 */ b .L0f06f808
/* f06f804: 24020001 */ addiu $v0,$zero,0x1
.L0f06f808:
/* f06f808: 8da70070 */ lw $a3,0x70($t5)
/* f06f80c: 10e00003 */ beqz $a3,.L0f06f81c
/* f06f810: 00000000 */ nop
/* f06f814: 10000001 */ b .L0f06f81c
/* f06f818: 24050001 */ addiu $a1,$zero,0x1
.L0f06f81c:
/* f06f81c: 00a27821 */ addu $t7,$a1,$v0
/* f06f820: 01e47021 */ addu $t6,$t7,$a0
/* f06f824: 01c6c021 */ addu $t8,$t6,$a2
/* f06f828: 5b00035a */ blezl $t8,.L0f070594
/* f06f82c: 8e190010 */ lw $t9,0x10($s0)
/* f06f830: 8c620064 */ lw $v0,0x64($v1)
.L0f06f834:
/* f06f834: 25080001 */ addiu $t0,$t0,0x1
/* f06f838: 00003025 */ or $a2,$zero,$zero
/* f06f83c: 8c4f0264 */ lw $t7,0x264($v0)
/* f06f840: 00002025 */ or $a0,$zero,$zero
/* f06f844: 00002825 */ or $a1,$zero,$zero
/* f06f848: 160f0008 */ bne $s0,$t7,.L0f06f86c
/* f06f84c: 00000000 */ nop
/* f06f850: ac400264 */ sw $zero,0x264($v0)
/* f06f854: 8c6e0064 */ lw $t6,0x64($v1)
/* f06f858: a5cc0010 */ sh $t4,0x10($t6)
/* f06f85c: 8da70070 */ lw $a3,0x70($t5)
/* f06f860: 8da90064 */ lw $t1,0x64($t5)
/* f06f864: 8daa0068 */ lw $t2,0x68($t5)
/* f06f868: 8dab006c */ lw $t3,0x6c($t5)
.L0f06f86c:
/* f06f86c: 11600003 */ beqz $t3,.L0f06f87c
/* f06f870: 24630004 */ addiu $v1,$v1,0x4
/* f06f874: 10000001 */ b .L0f06f87c
/* f06f878: 24060001 */ addiu $a2,$zero,0x1
.L0f06f87c:
/* f06f87c: 11400003 */ beqz $t2,.L0f06f88c
/* f06f880: 00001025 */ or $v0,$zero,$zero
/* f06f884: 10000001 */ b .L0f06f88c
/* f06f888: 24040001 */ addiu $a0,$zero,0x1
.L0f06f88c:
/* f06f88c: 11200003 */ beqz $t1,.L0f06f89c
/* f06f890: 00000000 */ nop
/* f06f894: 10000001 */ b .L0f06f89c
/* f06f898: 24020001 */ addiu $v0,$zero,0x1
.L0f06f89c:
/* f06f89c: 10e00003 */ beqz $a3,.L0f06f8ac
/* f06f8a0: 00000000 */ nop
/* f06f8a4: 10000001 */ b .L0f06f8ac
/* f06f8a8: 24050001 */ addiu $a1,$zero,0x1
.L0f06f8ac:
/* f06f8ac: 00a2c021 */ addu $t8,$a1,$v0
/* f06f8b0: 0304c821 */ addu $t9,$t8,$a0
/* f06f8b4: 03267821 */ addu $t7,$t9,$a2
/* f06f8b8: 010f082a */ slt $at,$t0,$t7
/* f06f8bc: 5420ffdd */ bnezl $at,.L0f06f834
/* f06f8c0: 8c620064 */ lw $v0,0x64($v1)
/* f06f8c4: 10000333 */ b .L0f070594
/* f06f8c8: 8e190010 */ lw $t9,0x10($s0)
/* f06f8cc: 2405001f */ addiu $a1,$zero,0x1f
.L0f06f8d0:
/* f06f8d0: 54a2006b */ bnel $a1,$v0,.L0f06fa80
/* f06f8d4: 24010053 */ addiu $at,$zero,0x53
/* f06f8d8: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06f8dc: 91d8005f */ lbu $t8,0x5f($t6)
/* f06f8e0: 57000067 */ bnezl $t8,.L0f06fa80
/* f06f8e4: 24010053 */ addiu $at,$zero,0x53
/* f06f8e8: 85c30062 */ lh $v1,0x62($t6)
/* f06f8ec: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f8f0: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f8f4: 0460005f */ bltz $v1,.L0f06fa74
/* f06f8f8: 00000000 */ nop
/* f06f8fc: 8db90034 */ lw $t9,0x34($t5)
/* f06f900: 00002825 */ or $a1,$zero,$zero
/* f06f904: 00797823 */ subu $t7,$v1,$t9
/* f06f908: 05e1005a */ bgez $t7,.L0f06fa74
/* f06f90c: a5cf0062 */ sh $t7,0x62($t6)
/* f06f910: 8e040040 */ lw $a0,0x40($s0)
/* f06f914: 8dae0318 */ lw $t6,0x318($t5)
/* f06f918: 3c01f000 */ lui $at,0xf000
/* f06f91c: 0081c024 */ and $t8,$a0,$at
/* f06f920: 11c00006 */ beqz $t6,.L0f06f93c
/* f06f924: 00182702 */ srl $a0,$t8,0x1c
/* f06f928: 0fc63410 */ jal mpGetChrFromPlayerIndex
/* f06f92c: afa0018c */ sw $zero,0x18c($sp)
/* f06f930: 10400002 */ beqz $v0,.L0f06f93c
/* f06f934: 8fa5018c */ lw $a1,0x18c($sp)
/* f06f938: 8c45001c */ lw $a1,0x1c($v0)
.L0f06f93c:
/* f06f93c: 8fa601b0 */ lw $a2,0x1b0($sp)
/* f06f940: 0fc0287e */ jal nbombCreateStorm
/* f06f944: 24c40008 */ addiu $a0,$a2,0x8
/* f06f948: 0fc10e62 */ jal propUnsetDangerous
/* f06f94c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f950: 8e180040 */ lw $t8,0x40($s0)
/* f06f954: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f958: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f95c: 37190004 */ ori $t9,$t8,0x4
/* f06f960: ae190040 */ sw $t9,0x40($s0)
/* f06f964: 8dab006c */ lw $t3,0x6c($t5)
/* f06f968: 00004025 */ or $t0,$zero,$zero
/* f06f96c: 00003025 */ or $a2,$zero,$zero
/* f06f970: 11600003 */ beqz $t3,.L0f06f980
/* f06f974: 00002025 */ or $a0,$zero,$zero
/* f06f978: 10000001 */ b .L0f06f980
/* f06f97c: 24060001 */ addiu $a2,$zero,0x1
.L0f06f980:
/* f06f980: 8daa0068 */ lw $t2,0x68($t5)
/* f06f984: 00001025 */ or $v0,$zero,$zero
/* f06f988: 00002825 */ or $a1,$zero,$zero
/* f06f98c: 11400003 */ beqz $t2,.L0f06f99c
/* f06f990: 0008c880 */ sll $t9,$t0,0x2
/* f06f994: 10000001 */ b .L0f06f99c
/* f06f998: 24040001 */ addiu $a0,$zero,0x1
.L0f06f99c:
/* f06f99c: 8da90064 */ lw $t1,0x64($t5)
/* f06f9a0: 01b91821 */ addu $v1,$t5,$t9
/* f06f9a4: 240c0003 */ addiu $t4,$zero,0x3
/* f06f9a8: 11200003 */ beqz $t1,.L0f06f9b8
/* f06f9ac: 00000000 */ nop
/* f06f9b0: 10000001 */ b .L0f06f9b8
/* f06f9b4: 24020001 */ addiu $v0,$zero,0x1
.L0f06f9b8:
/* f06f9b8: 8da70070 */ lw $a3,0x70($t5)
/* f06f9bc: 10e00003 */ beqz $a3,.L0f06f9cc
/* f06f9c0: 00000000 */ nop
/* f06f9c4: 10000001 */ b .L0f06f9cc
/* f06f9c8: 24050001 */ addiu $a1,$zero,0x1
.L0f06f9cc:
/* f06f9cc: 00a27021 */ addu $t6,$a1,$v0
/* f06f9d0: 01c47821 */ addu $t7,$t6,$a0
/* f06f9d4: 01e6c021 */ addu $t8,$t7,$a2
/* f06f9d8: 1b000026 */ blez $t8,.L0f06fa74
/* f06f9dc: 00000000 */ nop
/* f06f9e0: 8c620064 */ lw $v0,0x64($v1)
.L0f06f9e4:
/* f06f9e4: 25080001 */ addiu $t0,$t0,0x1
/* f06f9e8: 00003025 */ or $a2,$zero,$zero
/* f06f9ec: 8c4e0264 */ lw $t6,0x264($v0)
/* f06f9f0: 00002025 */ or $a0,$zero,$zero
/* f06f9f4: 00002825 */ or $a1,$zero,$zero
/* f06f9f8: 160e0008 */ bne $s0,$t6,.L0f06fa1c
/* f06f9fc: 00000000 */ nop
/* f06fa00: ac400264 */ sw $zero,0x264($v0)
/* f06fa04: 8c6f0064 */ lw $t7,0x64($v1)
/* f06fa08: a5ec0010 */ sh $t4,0x10($t7)
/* f06fa0c: 8da70070 */ lw $a3,0x70($t5)
/* f06fa10: 8da90064 */ lw $t1,0x64($t5)
/* f06fa14: 8daa0068 */ lw $t2,0x68($t5)
/* f06fa18: 8dab006c */ lw $t3,0x6c($t5)
.L0f06fa1c:
/* f06fa1c: 11600003 */ beqz $t3,.L0f06fa2c
/* f06fa20: 24630004 */ addiu $v1,$v1,0x4
/* f06fa24: 10000001 */ b .L0f06fa2c
/* f06fa28: 24060001 */ addiu $a2,$zero,0x1
.L0f06fa2c:
/* f06fa2c: 11400003 */ beqz $t2,.L0f06fa3c
/* f06fa30: 00001025 */ or $v0,$zero,$zero
/* f06fa34: 10000001 */ b .L0f06fa3c
/* f06fa38: 24040001 */ addiu $a0,$zero,0x1
.L0f06fa3c:
/* f06fa3c: 11200003 */ beqz $t1,.L0f06fa4c
/* f06fa40: 00000000 */ nop
/* f06fa44: 10000001 */ b .L0f06fa4c
/* f06fa48: 24020001 */ addiu $v0,$zero,0x1
.L0f06fa4c:
/* f06fa4c: 10e00003 */ beqz $a3,.L0f06fa5c
/* f06fa50: 00000000 */ nop
/* f06fa54: 10000001 */ b .L0f06fa5c
/* f06fa58: 24050001 */ addiu $a1,$zero,0x1
.L0f06fa5c:
/* f06fa5c: 00a2c021 */ addu $t8,$a1,$v0
/* f06fa60: 0304c821 */ addu $t9,$t8,$a0
/* f06fa64: 03267021 */ addu $t6,$t9,$a2
/* f06fa68: 010e082a */ slt $at,$t0,$t6
/* f06fa6c: 5420ffdd */ bnezl $at,.L0f06f9e4
/* f06fa70: 8c620064 */ lw $v0,0x64($v1)
.L0f06fa74:
/* f06fa74: 100002c7 */ b .L0f070594
/* f06fa78: 8e190010 */ lw $t9,0x10($s0)
/* f06fa7c: 24010053 */ addiu $at,$zero,0x53
.L0f06fa80:
/* f06fa80: 10410005 */ beq $v0,$at,.L0f06fa98
/* f06fa84: 24010054 */ addiu $at,$zero,0x54
/* f06fa88: 10410003 */ beq $v0,$at,.L0f06fa98
/* f06fa8c: 24010058 */ addiu $at,$zero,0x58
/* f06fa90: 5441005a */ bnel $v0,$at,.L0f06fbfc
/* f06fa94: 24010020 */ addiu $at,$zero,0x20
.L0f06fa98:
/* f06fa98: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06fa9c: 85f80062 */ lh $t8,0x62($t7)
/* f06faa0: 17000053 */ bnez $t8,.L0f06fbf0
/* f06faa4: 00000000 */ nop
/* f06faa8: 8e19000c */ lw $t9,0xc($s0)
/* f06faac: 2405000d */ addiu $a1,$zero,0xd
/* f06fab0: 00197000 */ sll $t6,$t9,0x0
/* f06fab4: 05c10003 */ bgez $t6,.L0f06fac4
/* f06fab8: 00000000 */ nop
/* f06fabc: 10000001 */ b .L0f06fac4
/* f06fac0: 24050011 */ addiu $a1,$zero,0x11
.L0f06fac4:
/* f06fac4: 0fc1bcc5 */ jal propExplode
/* f06fac8: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06facc: 8e0f0040 */ lw $t7,0x40($s0)
/* f06fad0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fad4: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fad8: 35f80004 */ ori $t8,$t7,0x4
/* f06fadc: ae180040 */ sw $t8,0x40($s0)
/* f06fae0: 8dab006c */ lw $t3,0x6c($t5)
/* f06fae4: 00004025 */ or $t0,$zero,$zero
/* f06fae8: 00003025 */ or $a2,$zero,$zero
/* f06faec: 11600003 */ beqz $t3,.L0f06fafc
/* f06faf0: 00002025 */ or $a0,$zero,$zero
/* f06faf4: 10000001 */ b .L0f06fafc
/* f06faf8: 24060001 */ addiu $a2,$zero,0x1
.L0f06fafc:
/* f06fafc: 8daa0068 */ lw $t2,0x68($t5)
/* f06fb00: 00001025 */ or $v0,$zero,$zero
/* f06fb04: 00002825 */ or $a1,$zero,$zero
/* f06fb08: 11400003 */ beqz $t2,.L0f06fb18
/* f06fb0c: 0008c080 */ sll $t8,$t0,0x2
/* f06fb10: 10000001 */ b .L0f06fb18
/* f06fb14: 24040001 */ addiu $a0,$zero,0x1
.L0f06fb18:
/* f06fb18: 8da90064 */ lw $t1,0x64($t5)
/* f06fb1c: 01b81821 */ addu $v1,$t5,$t8
/* f06fb20: 240c0003 */ addiu $t4,$zero,0x3
/* f06fb24: 11200003 */ beqz $t1,.L0f06fb34
/* f06fb28: 00000000 */ nop
/* f06fb2c: 10000001 */ b .L0f06fb34
/* f06fb30: 24020001 */ addiu $v0,$zero,0x1
.L0f06fb34:
/* f06fb34: 8da70070 */ lw $a3,0x70($t5)
/* f06fb38: 10e00003 */ beqz $a3,.L0f06fb48
/* f06fb3c: 00000000 */ nop
/* f06fb40: 10000001 */ b .L0f06fb48
/* f06fb44: 24050001 */ addiu $a1,$zero,0x1
.L0f06fb48:
/* f06fb48: 00a2c821 */ addu $t9,$a1,$v0
/* f06fb4c: 03247021 */ addu $t6,$t9,$a0
/* f06fb50: 01c67821 */ addu $t7,$t6,$a2
/* f06fb54: 19e00026 */ blez $t7,.L0f06fbf0
/* f06fb58: 00000000 */ nop
/* f06fb5c: 8c620064 */ lw $v0,0x64($v1)
.L0f06fb60:
/* f06fb60: 25080001 */ addiu $t0,$t0,0x1
/* f06fb64: 00003025 */ or $a2,$zero,$zero
/* f06fb68: 8c590264 */ lw $t9,0x264($v0)
/* f06fb6c: 00002025 */ or $a0,$zero,$zero
/* f06fb70: 00002825 */ or $a1,$zero,$zero
/* f06fb74: 16190008 */ bne $s0,$t9,.L0f06fb98
/* f06fb78: 00000000 */ nop
/* f06fb7c: ac400264 */ sw $zero,0x264($v0)
/* f06fb80: 8c6e0064 */ lw $t6,0x64($v1)
/* f06fb84: a5cc0010 */ sh $t4,0x10($t6)
/* f06fb88: 8da70070 */ lw $a3,0x70($t5)
/* f06fb8c: 8da90064 */ lw $t1,0x64($t5)
/* f06fb90: 8daa0068 */ lw $t2,0x68($t5)
/* f06fb94: 8dab006c */ lw $t3,0x6c($t5)
.L0f06fb98:
/* f06fb98: 11600003 */ beqz $t3,.L0f06fba8
/* f06fb9c: 24630004 */ addiu $v1,$v1,0x4
/* f06fba0: 10000001 */ b .L0f06fba8
/* f06fba4: 24060001 */ addiu $a2,$zero,0x1
.L0f06fba8:
/* f06fba8: 11400003 */ beqz $t2,.L0f06fbb8
/* f06fbac: 00001025 */ or $v0,$zero,$zero
/* f06fbb0: 10000001 */ b .L0f06fbb8
/* f06fbb4: 24040001 */ addiu $a0,$zero,0x1
.L0f06fbb8:
/* f06fbb8: 11200003 */ beqz $t1,.L0f06fbc8
/* f06fbbc: 00000000 */ nop
/* f06fbc0: 10000001 */ b .L0f06fbc8
/* f06fbc4: 24020001 */ addiu $v0,$zero,0x1
.L0f06fbc8:
/* f06fbc8: 10e00003 */ beqz $a3,.L0f06fbd8
/* f06fbcc: 00000000 */ nop
/* f06fbd0: 10000001 */ b .L0f06fbd8
/* f06fbd4: 24050001 */ addiu $a1,$zero,0x1
.L0f06fbd8:
/* f06fbd8: 00a27821 */ addu $t7,$a1,$v0
/* f06fbdc: 01e4c021 */ addu $t8,$t7,$a0
/* f06fbe0: 0306c821 */ addu $t9,$t8,$a2
/* f06fbe4: 0119082a */ slt $at,$t0,$t9
/* f06fbe8: 5420ffdd */ bnezl $at,.L0f06fb60
/* f06fbec: 8c620064 */ lw $v0,0x64($v1)
.L0f06fbf0:
/* f06fbf0: 10000268 */ b .L0f070594
/* f06fbf4: 8e190010 */ lw $t9,0x10($s0)
/* f06fbf8: 24010020 */ addiu $at,$zero,0x20
.L0f06fbfc:
/* f06fbfc: 54410022 */ bnel $v0,$at,.L0f06fc88
/* f06fc00: 24010022 */ addiu $at,$zero,0x22
/* f06fc04: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06fc08: 85c30062 */ lh $v1,0x62($t6)
/* f06fc0c: 0462001e */ bltzl $v1,.L0f06fc88
/* f06fc10: 24010022 */ addiu $at,$zero,0x22
/* f06fc14: 91cf005f */ lbu $t7,0x5f($t6)
/* f06fc18: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fc1c: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fc20: 15e00016 */ bnez $t7,.L0f06fc7c
/* f06fc24: 00000000 */ nop
/* f06fc28: 8db80034 */ lw $t8,0x34($t5)
/* f06fc2c: 0078c823 */ subu $t9,$v1,$t8
/* f06fc30: 07210257 */ bgez $t9,.L0f070590
/* f06fc34: a5d90062 */ sh $t9,0x62($t6)
/* f06fc38: 8e0f000c */ lw $t7,0xc($s0)
/* f06fc3c: 2405000d */ addiu $a1,$zero,0xd
/* f06fc40: 000fc000 */ sll $t8,$t7,0x0
/* f06fc44: 07010003 */ bgez $t8,.L0f06fc54
/* f06fc48: 00000000 */ nop
/* f06fc4c: 10000001 */ b .L0f06fc54
/* f06fc50: 24050011 */ addiu $a1,$zero,0x11
.L0f06fc54:
/* f06fc54: 0fc1bcc5 */ jal propExplode
/* f06fc58: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06fc5c: 1040024c */ beqz $v0,.L0f070590
/* f06fc60: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06fc64: 240effff */ addiu $t6,$zero,-1
/* f06fc68: a72e0062 */ sh $t6,0x62($t9)
/* f06fc6c: 8e0f0040 */ lw $t7,0x40($s0)
/* f06fc70: 35f80004 */ ori $t8,$t7,0x4
/* f06fc74: 10000246 */ b .L0f070590
/* f06fc78: ae180040 */ sw $t8,0x40($s0)
.L0f06fc7c:
/* f06fc7c: 10000245 */ b .L0f070594
/* f06fc80: 8e190010 */ lw $t9,0x10($s0)
/* f06fc84: 24010022 */ addiu $at,$zero,0x22
.L0f06fc88:
/* f06fc88: 5441007a */ bnel $v0,$at,.L0f06fe74
/* f06fc8c: 24010021 */ addiu $at,$zero,0x21
/* f06fc90: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fc94: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fc98: 8cae0000 */ lw $t6,0x0($a1)
/* f06fc9c: 8fb801b0 */ lw $t8,0x1b0($sp)
/* f06fca0: 51c00053 */ beqzl $t6,.L0f06fdf0
/* f06fca4: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06fca8: 8e030040 */ lw $v1,0x40($s0)
/* f06fcac: 8f020018 */ lw $v0,0x18($t8)
/* f06fcb0: 3c01f000 */ lui $at,0xf000
/* f06fcb4: 0061c824 */ and $t9,$v1,$at
/* f06fcb8: 10400003 */ beqz $v0,.L0f06fcc8
/* f06fcbc: 00191f02 */ srl $v1,$t9,0x1c
/* f06fcc0: 10000002 */ b .L0f06fccc
/* f06fcc4: 8c440004 */ lw $a0,0x4($v0)
.L0f06fcc8:
/* f06fcc8: 00002025 */ or $a0,$zero,$zero
.L0f06fccc:
/* f06fccc: 10400009 */ beqz $v0,.L0f06fcf4
/* f06fcd0: 00000000 */ nop
/* f06fcd4: 10800007 */ beqz $a0,.L0f06fcf4
/* f06fcd8: 00000000 */ nop
/* f06fcdc: 0fc633fe */ jal mpPlayerGetIndex
/* f06fce0: afa30178 */ sw $v1,0x178($sp)
/* f06fce4: 8fa30178 */ lw $v1,0x178($sp)
/* f06fce8: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fcec: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fcf0: 1043003e */ beq $v0,$v1,.L0f06fdec
.L0f06fcf4:
/* f06fcf4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fcf8: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fcfc: 8dae0298 */ lw $t6,0x298($t5)
/* f06fd00: 24010002 */ addiu $at,$zero,0x2
/* f06fd04: 05c10004 */ bgez $t6,.L0f06fd18
/* f06fd08: 00000000 */ nop
/* f06fd0c: 8db9029c */ lw $t9,0x29c($t5)
/* f06fd10: 07220030 */ bltzl $t9,.L0f06fdd4
/* f06fd14: 8cae0000 */ lw $t6,0x0($a1)
.L0f06fd18:
/* f06fd18: 54610026 */ bnel $v1,$at,.L0f06fdb4
/* f06fd1c: 8cb80000 */ lw $t8,0x0($a1)
/* f06fd20: 8da202a4 */ lw $v0,0x2a4($t5)
/* f06fd24: 00001825 */ or $v1,$zero,$zero
/* f06fd28: 5040000d */ beqzl $v0,.L0f06fd60
/* f06fd2c: 8da202a0 */ lw $v0,0x2a0($t5)
/* f06fd30: 8c4400bc */ lw $a0,0xbc($v0)
/* f06fd34: 5080000a */ beqzl $a0,.L0f06fd60
/* f06fd38: 8da202a0 */ lw $v0,0x2a0($t5)
/* f06fd3c: 0fc4a25f */ jal playermgrGetPlayerNumByProp
/* f06fd40: 00000000 */ nop
/* f06fd44: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fd48: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fd4c: 240f0001 */ addiu $t7,$zero,0x1
/* f06fd50: 004f1804 */ sllv $v1,$t7,$v0
/* f06fd54: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fd58: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fd5c: 8da202a0 */ lw $v0,0x2a0($t5)
.L0f06fd60:
/* f06fd60: 5040000d */ beqzl $v0,.L0f06fd98
/* f06fd64: 8cb90000 */ lw $t9,0x0($a1)
/* f06fd68: 8c4400bc */ lw $a0,0xbc($v0)
/* f06fd6c: 5080000a */ beqzl $a0,.L0f06fd98
/* f06fd70: 8cb90000 */ lw $t9,0x0($a1)
/* f06fd74: 0fc4a25f */ jal playermgrGetPlayerNumByProp
/* f06fd78: afa30170 */ sw $v1,0x170($sp)
/* f06fd7c: 8fa30170 */ lw $v1,0x170($sp)
/* f06fd80: 24180001 */ addiu $t8,$zero,0x1
/* f06fd84: 00587004 */ sllv $t6,$t8,$v0
/* f06fd88: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fd8c: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fd90: 006e1825 */ or $v1,$v1,$t6
/* f06fd94: 8cb90000 */ lw $t9,0x0($a1)
.L0f06fd98:
/* f06fd98: 03237824 */ and $t7,$t9,$v1
/* f06fd9c: 11e00013 */ beqz $t7,.L0f06fdec
/* f06fda0: acaf0000 */ sw $t7,0x0($a1)
/* f06fda4: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06fda8: 10000010 */ b .L0f06fdec
/* f06fdac: a5c00062 */ sh $zero,0x62($t6)
/* f06fdb0: 8cb80000 */ lw $t8,0x0($a1)
.L0f06fdb4:
/* f06fdb4: 24190001 */ addiu $t9,$zero,0x1
/* f06fdb8: 00797804 */ sllv $t7,$t9,$v1
/* f06fdbc: 01f87024 */ and $t6,$t7,$t8
/* f06fdc0: 11c0000a */ beqz $t6,.L0f06fdec
/* f06fdc4: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06fdc8: 10000008 */ b .L0f06fdec
/* f06fdcc: a7200062 */ sh $zero,0x62($t9)
/* f06fdd0: 8cae0000 */ lw $t6,0x0($a1)
.L0f06fdd4:
/* f06fdd4: 240f0001 */ addiu $t7,$zero,0x1
/* f06fdd8: 006fc004 */ sllv $t8,$t7,$v1
/* f06fddc: 030ec824 */ and $t9,$t8,$t6
/* f06fde0: 13200002 */ beqz $t9,.L0f06fdec
/* f06fde4: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06fde8: a5e00062 */ sh $zero,0x62($t7)
.L0f06fdec:
/* f06fdec: 8fb801a8 */ lw $t8,0x1a8($sp)
.L0f06fdf0:
/* f06fdf0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fdf4: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fdf8: 87030062 */ lh $v1,0x62($t8)
/* f06fdfc: 28610002 */ slti $at,$v1,0x2
/* f06fe00: 14200009 */ bnez $at,.L0f06fe28
/* f06fe04: 00000000 */ nop
/* f06fe08: 8dae0034 */ lw $t6,0x34($t5)
/* f06fe0c: 24070001 */ addiu $a3,$zero,0x1
/* f06fe10: 006ec823 */ subu $t9,$v1,$t6
/* f06fe14: 2b210002 */ slti $at,$t9,0x2
/* f06fe18: 102001dd */ beqz $at,.L0f070590
/* f06fe1c: a7190062 */ sh $t9,0x62($t8)
/* f06fe20: 100001db */ b .L0f070590
/* f06fe24: a7070062 */ sh $a3,0x62($t8)
.L0f06fe28:
/* f06fe28: 546001da */ bnezl $v1,.L0f070594
/* f06fe2c: 8e190010 */ lw $t9,0x10($s0)
/* f06fe30: 8e0f000c */ lw $t7,0xc($s0)
/* f06fe34: 2405000d */ addiu $a1,$zero,0xd
/* f06fe38: 000f7000 */ sll $t6,$t7,0x0
/* f06fe3c: 05c10002 */ bgez $t6,.L0f06fe48
/* f06fe40: 00000000 */ nop
/* f06fe44: 24050011 */ addiu $a1,$zero,0x11
.L0f06fe48:
/* f06fe48: 0fc1bcc5 */ jal propExplode
/* f06fe4c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06fe50: 104001cf */ beqz $v0,.L0f070590
/* f06fe54: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06fe58: 2419ffff */ addiu $t9,$zero,-1
/* f06fe5c: a7190062 */ sh $t9,0x62($t8)
/* f06fe60: 8e0f0040 */ lw $t7,0x40($s0)
/* f06fe64: 35ee0004 */ ori $t6,$t7,0x4
/* f06fe68: 100001c9 */ b .L0f070590
/* f06fe6c: ae0e0040 */ sw $t6,0x40($s0)
/* f06fe70: 24010021 */ addiu $at,$zero,0x21
.L0f06fe74:
/* f06fe74: 10410012 */ beq $v0,$at,.L0f06fec0
/* f06fe78: 2401000f */ addiu $at,$zero,0xf
/* f06fe7c: 14410005 */ bne $v0,$at,.L0f06fe94
/* f06fe80: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06fe84: 9338005f */ lbu $t8,0x5f($t9)
/* f06fe88: 24070001 */ addiu $a3,$zero,0x1
/* f06fe8c: 50f8000d */ beql $a3,$t8,.L0f06fec4
/* f06fe90: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06fe94:
/* f06fe94: 14c20005 */ bne $a2,$v0,.L0f06feac
/* f06fe98: 24070001 */ addiu $a3,$zero,0x1
/* f06fe9c: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06fea0: 91ee005f */ lbu $t6,0x5f($t7)
/* f06fea4: 50ee0007 */ beql $a3,$t6,.L0f06fec4
/* f06fea8: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06feac:
/* f06feac: 14a200af */ bne $a1,$v0,.L0f07016c
/* f06feb0: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06feb4: 9338005f */ lbu $t8,0x5f($t9)
/* f06feb8: 54f800ad */ bnel $a3,$t8,.L0f070170
/* f06febc: 24010056 */ addiu $at,$zero,0x56
.L0f06fec0:
/* f06fec0: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06fec4:
/* f06fec4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fec8: 24070001 */ addiu $a3,$zero,0x1
/* f06fecc: 85e30062 */ lh $v1,0x62($t7)
/* f06fed0: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fed4: 28610002 */ slti $at,$v1,0x2
/* f06fed8: 1420000e */ bnez $at,.L0f06ff14
/* f06fedc: 00000000 */ nop
/* f06fee0: 8dae0034 */ lw $t6,0x34($t5)
/* f06fee4: 01e02025 */ or $a0,$t7,$zero
/* f06fee8: 006ec823 */ subu $t9,$v1,$t6
/* f06feec: 2b210002 */ slti $at,$t9,0x2
/* f06fef0: a5f90062 */ sh $t9,0x62($t7)
/* f06fef4: 10200025 */ beqz $at,.L0f06ff8c
/* f06fef8: 03201825 */ or $v1,$t9,$zero
/* f06fefc: 0fc22ad9 */ jal weaponRegisterProxy
/* f06ff00: a5e70062 */ sh $a3,0x62($t7)
/* f06ff04: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06ff08: 2405001f */ addiu $a1,$zero,0x1f
/* f06ff0c: 1000001f */ b .L0f06ff8c
/* f06ff10: 87030062 */ lh $v1,0x62($t8)
.L0f06ff14:
/* f06ff14: 14e3001d */ bne $a3,$v1,.L0f06ff8c
/* f06ff18: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06ff1c: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06ff20: 8dae0284 */ lw $t6,0x284($t5)
/* f06ff24: 8fb901b0 */ lw $t9,0x1b0($sp)
/* f06ff28: 3c017f1b */ lui $at,%hi(var7f1aa2c0)
/* f06ff2c: 8dc200bc */ lw $v0,0xbc($t6)
/* f06ff30: c7240008 */ lwc1 $f4,0x8($t9)
/* f06ff34: c728000c */ lwc1 $f8,0xc($t9)
/* f06ff38: c44a0008 */ lwc1 $f10,0x8($v0)
/* f06ff3c: c446000c */ lwc1 $f6,0xc($v0)
/* f06ff40: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06ff44: 46045001 */ sub.s $f0,$f10,$f4
/* f06ff48: c7240010 */ lwc1 $f4,0x10($t9)
/* f06ff4c: c44a0010 */ lwc1 $f10,0x10($v0)
/* f06ff50: 46083081 */ sub.s $f2,$f6,$f8
/* f06ff54: 46000182 */ mul.s $f6,$f0,$f0
/* f06ff58: 24420008 */ addiu $v0,$v0,0x8
/* f06ff5c: 46045301 */ sub.s $f12,$f10,$f4
/* f06ff60: 46021202 */ mul.s $f8,$f2,$f2
/* f06ff64: 46083280 */ add.s $f10,$f6,$f8
/* f06ff68: 460c6102 */ mul.s $f4,$f12,$f12
/* f06ff6c: c428a2c0 */ lwc1 $f8,%lo(var7f1aa2c0)($at)
/* f06ff70: 46045180 */ add.s $f6,$f10,$f4
/* f06ff74: 4608303c */ c.lt.s $f6,$f8
/* f06ff78: 00000000 */ nop
/* f06ff7c: 45000003 */ bc1f .L0f06ff8c
/* f06ff80: 00000000 */ nop
/* f06ff84: a5e00062 */ sh $zero,0x62($t7)
/* f06ff88: 00001825 */ or $v1,$zero,$zero
.L0f06ff8c:
/* f06ff8c: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06ff90: 1460017f */ bnez $v1,.L0f070590
/* f06ff94: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06ff98: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06ff9c: 2401000f */ addiu $at,$zero,0xf
/* f06ffa0: 9302005c */ lbu $v0,0x5c($t8)
/* f06ffa4: 54a2005e */ bnel $a1,$v0,.L0f070120
/* f06ffa8: 8e18000c */ lw $t8,0xc($s0)
/* f06ffac: 8e040040 */ lw $a0,0x40($s0)
/* f06ffb0: 8daf0318 */ lw $t7,0x318($t5)
/* f06ffb4: 3c01f000 */ lui $at,0xf000
/* f06ffb8: 00817024 */ and $t6,$a0,$at
/* f06ffbc: 00002825 */ or $a1,$zero,$zero
/* f06ffc0: 11e00006 */ beqz $t7,.L0f06ffdc
/* f06ffc4: 000e2702 */ srl $a0,$t6,0x1c
/* f06ffc8: 0fc63410 */ jal mpGetChrFromPlayerIndex
/* f06ffcc: afa00154 */ sw $zero,0x154($sp)
/* f06ffd0: 10400002 */ beqz $v0,.L0f06ffdc
/* f06ffd4: 8fa50154 */ lw $a1,0x154($sp)
/* f06ffd8: 8c45001c */ lw $a1,0x1c($v0)
.L0f06ffdc:
/* f06ffdc: 8fa601b0 */ lw $a2,0x1b0($sp)
/* f06ffe0: 0fc0287e */ jal nbombCreateStorm
/* f06ffe4: 24c40008 */ addiu $a0,$a2,0x8
/* f06ffe8: 0fc10e62 */ jal propUnsetDangerous
/* f06ffec: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06fff0: 8e0e0040 */ lw $t6,0x40($s0)
/* f06fff4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fff8: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fffc: 35d90004 */ ori $t9,$t6,0x4
/* f070000: ae190040 */ sw $t9,0x40($s0)
/* f070004: 8dab006c */ lw $t3,0x6c($t5)
/* f070008: 00004025 */ or $t0,$zero,$zero
/* f07000c: 00003025 */ or $a2,$zero,$zero
/* f070010: 11600003 */ beqz $t3,.L0f070020
/* f070014: 00002025 */ or $a0,$zero,$zero
/* f070018: 10000001 */ b .L0f070020
/* f07001c: 24060001 */ addiu $a2,$zero,0x1
.L0f070020:
/* f070020: 8daa0068 */ lw $t2,0x68($t5)
/* f070024: 00001025 */ or $v0,$zero,$zero
/* f070028: 00002825 */ or $a1,$zero,$zero
/* f07002c: 11400003 */ beqz $t2,.L0f07003c
/* f070030: 0008c880 */ sll $t9,$t0,0x2
/* f070034: 10000001 */ b .L0f07003c
/* f070038: 24040001 */ addiu $a0,$zero,0x1
.L0f07003c:
/* f07003c: 8da90064 */ lw $t1,0x64($t5)
/* f070040: 01b91821 */ addu $v1,$t5,$t9
/* f070044: 240c0003 */ addiu $t4,$zero,0x3
/* f070048: 11200003 */ beqz $t1,.L0f070058
/* f07004c: 00000000 */ nop
/* f070050: 10000001 */ b .L0f070058
/* f070054: 24020001 */ addiu $v0,$zero,0x1
.L0f070058:
/* f070058: 8da70070 */ lw $a3,0x70($t5)
/* f07005c: 10e00003 */ beqz $a3,.L0f07006c
/* f070060: 00000000 */ nop
/* f070064: 10000001 */ b .L0f07006c
/* f070068: 24050001 */ addiu $a1,$zero,0x1
.L0f07006c:
/* f07006c: 00a27821 */ addu $t7,$a1,$v0
/* f070070: 01e4c021 */ addu $t8,$t7,$a0
/* f070074: 03067021 */ addu $t6,$t8,$a2
/* f070078: 59c00146 */ blezl $t6,.L0f070594
/* f07007c: 8e190010 */ lw $t9,0x10($s0)
/* f070080: 8c620064 */ lw $v0,0x64($v1)
.L0f070084:
/* f070084: 25080001 */ addiu $t0,$t0,0x1
/* f070088: 00003025 */ or $a2,$zero,$zero
/* f07008c: 8c4f0264 */ lw $t7,0x264($v0)
/* f070090: 00002025 */ or $a0,$zero,$zero
/* f070094: 00002825 */ or $a1,$zero,$zero
/* f070098: 160f0008 */ bne $s0,$t7,.L0f0700bc
/* f07009c: 00000000 */ nop
/* f0700a0: ac400264 */ sw $zero,0x264($v0)
/* f0700a4: 8c780064 */ lw $t8,0x64($v1)
/* f0700a8: a70c0010 */ sh $t4,0x10($t8)
/* f0700ac: 8da70070 */ lw $a3,0x70($t5)
/* f0700b0: 8da90064 */ lw $t1,0x64($t5)
/* f0700b4: 8daa0068 */ lw $t2,0x68($t5)
/* f0700b8: 8dab006c */ lw $t3,0x6c($t5)
.L0f0700bc:
/* f0700bc: 11600003 */ beqz $t3,.L0f0700cc
/* f0700c0: 24630004 */ addiu $v1,$v1,0x4
/* f0700c4: 10000001 */ b .L0f0700cc
/* f0700c8: 24060001 */ addiu $a2,$zero,0x1
.L0f0700cc:
/* f0700cc: 11400003 */ beqz $t2,.L0f0700dc
/* f0700d0: 00001025 */ or $v0,$zero,$zero
/* f0700d4: 10000001 */ b .L0f0700dc
/* f0700d8: 24040001 */ addiu $a0,$zero,0x1
.L0f0700dc:
/* f0700dc: 11200003 */ beqz $t1,.L0f0700ec
/* f0700e0: 00000000 */ nop
/* f0700e4: 10000001 */ b .L0f0700ec
/* f0700e8: 24020001 */ addiu $v0,$zero,0x1
.L0f0700ec:
/* f0700ec: 10e00003 */ beqz $a3,.L0f0700fc
/* f0700f0: 00000000 */ nop
/* f0700f4: 10000001 */ b .L0f0700fc
/* f0700f8: 24050001 */ addiu $a1,$zero,0x1
.L0f0700fc:
/* f0700fc: 00a27021 */ addu $t6,$a1,$v0
/* f070100: 01c4c821 */ addu $t9,$t6,$a0
/* f070104: 03267821 */ addu $t7,$t9,$a2
/* f070108: 010f082a */ slt $at,$t0,$t7
/* f07010c: 5420ffdd */ bnezl $at,.L0f070084
/* f070110: 8c620064 */ lw $v0,0x64($v1)
/* f070114: 1000011f */ b .L0f070594
/* f070118: 8e190010 */ lw $t9,0x10($s0)
/* f07011c: 8e18000c */ lw $t8,0xc($s0)
.L0f070120:
/* f070120: 2405000d */ addiu $a1,$zero,0xd
/* f070124: 00187000 */ sll $t6,$t8,0x0
/* f070128: 05c10003 */ bgez $t6,.L0f070138
/* f07012c: 00000000 */ nop
/* f070130: 10000001 */ b .L0f070138
/* f070134: 24050011 */ addiu $a1,$zero,0x11
.L0f070138:
/* f070138: 14410002 */ bne $v0,$at,.L0f070144
/* f07013c: 00000000 */ nop
/* f070140: 24050017 */ addiu $a1,$zero,0x17
.L0f070144:
/* f070144: 0fc1bcc5 */ jal propExplode
/* f070148: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f07014c: 10400110 */ beqz $v0,.L0f070590
/* f070150: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f070154: 2419ffff */ addiu $t9,$zero,-1
/* f070158: a5f90062 */ sh $t9,0x62($t7)
/* f07015c: 8e180040 */ lw $t8,0x40($s0)
/* f070160: 370e0004 */ ori $t6,$t8,0x4
/* f070164: 1000010a */ b .L0f070590
/* f070168: ae0e0040 */ sw $t6,0x40($s0)
.L0f07016c:
/* f07016c: 24010056 */ addiu $at,$zero,0x56
.L0f070170:
/* f070170: 54410108 */ bnel $v0,$at,.L0f070594
/* f070174: 8e190010 */ lw $t9,0x10($s0)
/* f070178: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f07017c: 87230062 */ lh $v1,0x62($t9)
/* f070180: 28610002 */ slti $at,$v1,0x2
/* f070184: 14200099 */ bnez $at,.L0f0703ec
/* f070188: 00000000 */ nop
/* f07018c: 0fc1a2aa */ jal modelFindBboxRodata
/* f070190: 8e040018 */ lw $a0,0x18($s0)
/* f070194: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f070198: 3c014140 */ lui $at,0x4140
/* f07019c: 44811000 */ mtc1 $at,$f2
/* f0701a0: 85e30062 */ lh $v1,0x62($t7)
/* f0701a4: 3c017f1b */ lui $at,%hi(var7f1aa2c4)
/* f0701a8: c42ea2c4 */ lwc1 $f14,%lo(var7f1aa2c4)($at)
/* f0701ac: 2463ffff */ addiu $v1,$v1,-1
/* f0701b0: 44835000 */ mtc1 $v1,$f10
/* f0701b4: 2861000c */ slti $at,$v1,0xc
/* f0701b8: 24070001 */ addiu $a3,$zero,0x1
/* f0701bc: 46805120 */ cvt.s.w $f4,$f10
/* f0701c0: 00403025 */ or $a2,$v0,$zero
/* f0701c4: 24780001 */ addiu $t8,$v1,0x1
/* f0701c8: 306e0001 */ andi $t6,$v1,0x1
/* f0701cc: 27a500b8 */ addiu $a1,$sp,0xb8
/* f0701d0: 46022183 */ div.s $f6,$f4,$f2
/* f0701d4: 460e3002 */ mul.s $f0,$f6,$f14
/* f0701d8: 10200007 */ beqz $at,.L0f0701f8
/* f0701dc: 46000306 */ mov.s $f12,$f0
/* f0701e0: 44984000 */ mtc1 $t8,$f8
/* f0701e4: 00000000 */ nop
/* f0701e8: 468042a0 */ cvt.s.w $f10,$f8
/* f0701ec: 46025103 */ div.s $f4,$f10,$f2
/* f0701f0: 46047182 */ mul.s $f6,$f14,$f4
/* f0701f4: 46060300 */ add.s $f12,$f0,$f6
.L0f0701f8:
/* f0701f8: 14ee0002 */ bne $a3,$t6,.L0f070204
/* f0701fc: 00000000 */ nop
/* f070200: 46006307 */ neg.s $f12,$f12
.L0f070204:
/* f070204: 0c0058dd */ jal mtx4LoadYRotation
/* f070208: afa60140 */ sw $a2,0x140($sp)
/* f07020c: 8e030048 */ lw $v1,0x48($s0)
/* f070210: 8fa60140 */ lw $a2,0x140($sp)
/* f070214: 8fb901b0 */ lw $t9,0x1b0($sp)
/* f070218: 50600040 */ beqzl $v1,.L0f07031c
/* f07021c: 44808000 */ mtc1 $zero,$f16
/* f070220: 8f220018 */ lw $v0,0x18($t9)
/* f070224: 5040006e */ beqzl $v0,.L0f0703e0
/* f070228: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f07022c: 904f0000 */ lbu $t7,0x0($v0)
/* f070230: 24010003 */ addiu $at,$zero,0x3
/* f070234: 24640004 */ addiu $a0,$v1,0x4
/* f070238: 11e10068 */ beq $t7,$at,.L0f0703dc
/* f07023c: 27a500f8 */ addiu $a1,$sp,0xf8
/* f070240: 0c005746 */ jal mtx4Copy
/* f070244: afa60140 */ sw $a2,0x140($sp)
/* f070248: 44800000 */ mtc1 $zero,$f0
/* f07024c: 8fa40140 */ lw $a0,0x140($sp)
/* f070250: e7a0012c */ swc1 $f0,0x12c($sp)
/* f070254: e7a00128 */ swc1 $f0,0x128($sp)
/* f070258: e7a00114 */ swc1 $f0,0x114($sp)
/* f07025c: e7a00104 */ swc1 $f0,0x104($sp)
/* f070260: e7a00070 */ swc1 $f0,0x70($sp)
/* f070264: e7a00060 */ swc1 $f0,0x60($sp)
/* f070268: e7a0006c */ swc1 $f0,0x6c($sp)
/* f07026c: e7a00130 */ swc1 $f0,0x130($sp)
/* f070270: e7a00124 */ swc1 $f0,0x124($sp)
/* f070274: 0fc199f5 */ jal objGetLocalZMax
/* f070278: e7a00064 */ swc1 $f0,0x64($sp)
/* f07027c: e7a00068 */ swc1 $f0,0x68($sp)
/* f070280: e7a00074 */ swc1 $f0,0x74($sp)
/* f070284: 27a400f8 */ addiu $a0,$sp,0xf8
/* f070288: 27a500b8 */ addiu $a1,$sp,0xb8
/* f07028c: 0c005680 */ jal mtx4MultMtx4
/* f070290: 27a60078 */ addiu $a2,$sp,0x78
/* f070294: 27a400f8 */ addiu $a0,$sp,0xf8
/* f070298: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f07029c: 27a5006c */ addiu $a1,$sp,0x6c
/* f0702a0: 27a40078 */ addiu $a0,$sp,0x78
/* f0702a4: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f0702a8: 27a50060 */ addiu $a1,$sp,0x60
/* f0702ac: c7a80060 */ lwc1 $f8,0x60($sp)
/* f0702b0: c7aa006c */ lwc1 $f10,0x6c($sp)
/* f0702b4: 8e180048 */ lw $t8,0x48($s0)
/* f0702b8: 27a40078 */ addiu $a0,$sp,0x78
/* f0702bc: 460a4101 */ sub.s $f4,$f8,$f10
/* f0702c0: c7060034 */ lwc1 $f6,0x34($t8)
/* f0702c4: c7aa0064 */ lwc1 $f10,0x64($sp)
/* f0702c8: 46043201 */ sub.s $f8,$f6,$f4
/* f0702cc: c7a60070 */ lwc1 $f6,0x70($sp)
/* f0702d0: e7a800a8 */ swc1 $f8,0xa8($sp)
/* f0702d4: 8e0e0048 */ lw $t6,0x48($s0)
/* f0702d8: 46065101 */ sub.s $f4,$f10,$f6
/* f0702dc: c7a60068 */ lwc1 $f6,0x68($sp)
/* f0702e0: c5c80038 */ lwc1 $f8,0x38($t6)
/* f0702e4: 46044281 */ sub.s $f10,$f8,$f4
/* f0702e8: c7a80074 */ lwc1 $f8,0x74($sp)
/* f0702ec: e7aa00ac */ swc1 $f10,0xac($sp)
/* f0702f0: 8e190048 */ lw $t9,0x48($s0)
/* f0702f4: 46083101 */ sub.s $f4,$f6,$f8
/* f0702f8: c72a003c */ lwc1 $f10,0x3c($t9)
/* f0702fc: 46045181 */ sub.s $f6,$f10,$f4
/* f070300: e7a600b0 */ swc1 $f6,0xb0($sp)
/* f070304: 8e050048 */ lw $a1,0x48($s0)
/* f070308: 0c005746 */ jal mtx4Copy
/* f07030c: 24a50004 */ addiu $a1,$a1,0x4
/* f070310: 10000033 */ b .L0f0703e0
/* f070314: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f070318: 44808000 */ mtc1 $zero,$f16
.L0f07031c:
/* f07031c: 00c02025 */ or $a0,$a2,$zero
/* f070320: e7b00070 */ swc1 $f16,0x70($sp)
/* f070324: e7b00060 */ swc1 $f16,0x60($sp)
/* f070328: e7b0006c */ swc1 $f16,0x6c($sp)
/* f07032c: 0fc199f5 */ jal objGetLocalZMax
/* f070330: e7b00064 */ swc1 $f16,0x64($sp)
/* f070334: 2604001c */ addiu $a0,$s0,0x1c
/* f070338: e7a00068 */ swc1 $f0,0x68($sp)
/* f07033c: e7a00074 */ swc1 $f0,0x74($sp)
/* f070340: afa40038 */ sw $a0,0x38($sp)
/* f070344: 0c005755 */ jal mtx3ToMtx4
/* f070348: 27a500f8 */ addiu $a1,$sp,0xf8
/* f07034c: 27a400f8 */ addiu $a0,$sp,0xf8
/* f070350: 27a500b8 */ addiu $a1,$sp,0xb8
/* f070354: 0c005680 */ jal mtx4MultMtx4
/* f070358: 27a60078 */ addiu $a2,$sp,0x78
/* f07035c: 27a40078 */ addiu $a0,$sp,0x78
/* f070360: 0c005768 */ jal mtx4ToMtx3
/* f070364: 8fa50038 */ lw $a1,0x38($sp)
/* f070368: 27a400f8 */ addiu $a0,$sp,0xf8
/* f07036c: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f070370: 27a5006c */ addiu $a1,$sp,0x6c
/* f070374: 27a40078 */ addiu $a0,$sp,0x78
/* f070378: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f07037c: 27a50060 */ addiu $a1,$sp,0x60
/* f070380: c7a80060 */ lwc1 $f8,0x60($sp)
/* f070384: c7aa006c */ lwc1 $f10,0x6c($sp)
/* f070388: 8faf01b0 */ lw $t7,0x1b0($sp)
/* f07038c: 02002025 */ or $a0,$s0,$zero
/* f070390: 460a4101 */ sub.s $f4,$f8,$f10
/* f070394: c5e60008 */ lwc1 $f6,0x8($t7)
/* f070398: 00002825 */ or $a1,$zero,$zero
/* f07039c: 24060001 */ addiu $a2,$zero,0x1
/* f0703a0: 46043201 */ sub.s $f8,$f6,$f4
/* f0703a4: e5e80008 */ swc1 $f8,0x8($t7)
/* f0703a8: c7a60070 */ lwc1 $f6,0x70($sp)
/* f0703ac: c7aa0064 */ lwc1 $f10,0x64($sp)
/* f0703b0: c5e8000c */ lwc1 $f8,0xc($t7)
/* f0703b4: 46065101 */ sub.s $f4,$f10,$f6
/* f0703b8: 46044281 */ sub.s $f10,$f8,$f4
/* f0703bc: e5ea000c */ swc1 $f10,0xc($t7)
/* f0703c0: c7a80074 */ lwc1 $f8,0x74($sp)
/* f0703c4: c7a60068 */ lwc1 $f6,0x68($sp)
/* f0703c8: c5ea0010 */ lwc1 $f10,0x10($t7)
/* f0703cc: 46083101 */ sub.s $f4,$f6,$f8
/* f0703d0: 46045181 */ sub.s $f6,$f10,$f4
/* f0703d4: 0fc1a71c */ jal func0f069c70
/* f0703d8: e5e60010 */ swc1 $f6,0x10($t7)
.L0f0703dc:
/* f0703dc: 8fb801a8 */ lw $t8,0x1a8($sp)
.L0f0703e0:
/* f0703e0: 870e0062 */ lh $t6,0x62($t8)
/* f0703e4: 25c3ffff */ addiu $v1,$t6,-1
/* f0703e8: a7030062 */ sh $v1,0x62($t8)
.L0f0703ec:
/* f0703ec: 04610023 */ bgez $v1,.L0f07047c
/* f0703f0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f0703f4: 8e030048 */ lw $v1,0x48($s0)
/* f0703f8: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f0703fc: 0fc2bb15 */ jal boltbeamFindByProp
/* f070400: afa3005c */ sw $v1,0x5c($sp)
/* f070404: 2401ffff */ addiu $at,$zero,-1
/* f070408: 8fa3005c */ lw $v1,0x5c($sp)
/* f07040c: 10410019 */ beq $v0,$at,.L0f070474
/* f070410: 00402025 */ or $a0,$v0,$zero
/* f070414: 8fa501b0 */ lw $a1,0x1b0($sp)
/* f070418: afa3005c */ sw $v1,0x5c($sp)
/* f07041c: afa20058 */ sw $v0,0x58($sp)
/* f070420: 0fc2bb5c */ jal boltbeamSetTailPos
/* f070424: 24a50008 */ addiu $a1,$a1,0x8
/* f070428: 3c05453b */ lui $a1,0x453b
/* f07042c: 34a58000 */ ori $a1,$a1,0x8000
/* f070430: 8fa40058 */ lw $a0,0x58($sp)
/* f070434: 0fc2bb69 */ jal boltbeamIncrementHeadPos
/* f070438: 00003025 */ or $a2,$zero,$zero
/* f07043c: 8fa3005c */ lw $v1,0x5c($sp)
/* f070440: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f070444: 3c0544af */ lui $a1,0x44af
/* f070448: 10600005 */ beqz $v1,.L0f070460
/* f07044c: 00000000 */ nop
/* f070450: 8c6f0090 */ lw $t7,0x90($v1)
/* f070454: 19e00002 */ blez $t7,.L0f070460
/* f070458: 00000000 */ nop
/* f07045c: 00001825 */ or $v1,$zero,$zero
.L0f070460:
/* f070460: 14600004 */ bnez $v1,.L0f070474
/* f070464: 00000000 */ nop
/* f070468: a5c00062 */ sh $zero,0x62($t6)
/* f07046c: 0fc2bbaa */ jal boltbeamSetAutomatic
/* f070470: 8fa40058 */ lw $a0,0x58($sp)
.L0f070474:
/* f070474: 10000047 */ b .L0f070594
/* f070478: 8e190010 */ lw $t9,0x10($s0)
.L0f07047c:
/* f07047c: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f070480: 8dab006c */ lw $t3,0x6c($t5)
/* f070484: 00004025 */ or $t0,$zero,$zero
/* f070488: 00003025 */ or $a2,$zero,$zero
/* f07048c: 11600003 */ beqz $t3,.L0f07049c
/* f070490: 00002025 */ or $a0,$zero,$zero
/* f070494: 10000001 */ b .L0f07049c
/* f070498: 24060001 */ addiu $a2,$zero,0x1
.L0f07049c:
/* f07049c: 8daa0068 */ lw $t2,0x68($t5)
/* f0704a0: 00001025 */ or $v0,$zero,$zero
/* f0704a4: 00002825 */ or $a1,$zero,$zero
/* f0704a8: 11400003 */ beqz $t2,.L0f0704b8
/* f0704ac: 00087080 */ sll $t6,$t0,0x2
/* f0704b0: 10000001 */ b .L0f0704b8
/* f0704b4: 24040001 */ addiu $a0,$zero,0x1
.L0f0704b8:
/* f0704b8: 8da90064 */ lw $t1,0x64($t5)
/* f0704bc: 01ae1821 */ addu $v1,$t5,$t6
/* f0704c0: 240c0003 */ addiu $t4,$zero,0x3
/* f0704c4: 11200003 */ beqz $t1,.L0f0704d4
/* f0704c8: 00000000 */ nop
/* f0704cc: 10000001 */ b .L0f0704d4
/* f0704d0: 24020001 */ addiu $v0,$zero,0x1
.L0f0704d4:
/* f0704d4: 8da70070 */ lw $a3,0x70($t5)
/* f0704d8: 10e00003 */ beqz $a3,.L0f0704e8
/* f0704dc: 00000000 */ nop
/* f0704e0: 10000001 */ b .L0f0704e8
/* f0704e4: 24050001 */ addiu $a1,$zero,0x1
.L0f0704e8:
/* f0704e8: 00a2c021 */ addu $t8,$a1,$v0
/* f0704ec: 0304c821 */ addu $t9,$t8,$a0
/* f0704f0: 03267821 */ addu $t7,$t9,$a2
/* f0704f4: 59e00027 */ blezl $t7,.L0f070594
/* f0704f8: 8e190010 */ lw $t9,0x10($s0)
/* f0704fc: 8c620064 */ lw $v0,0x64($v1)
.L0f070500:
/* f070500: 25080001 */ addiu $t0,$t0,0x1
/* f070504: 00003025 */ or $a2,$zero,$zero
/* f070508: 8c580264 */ lw $t8,0x264($v0)
/* f07050c: 00002025 */ or $a0,$zero,$zero
/* f070510: 00002825 */ or $a1,$zero,$zero
/* f070514: 16180008 */ bne $s0,$t8,.L0f070538
/* f070518: 00000000 */ nop
/* f07051c: ac400264 */ sw $zero,0x264($v0)
/* f070520: 8c790064 */ lw $t9,0x64($v1)
/* f070524: a72c0010 */ sh $t4,0x10($t9)
/* f070528: 8da70070 */ lw $a3,0x70($t5)
/* f07052c: 8da90064 */ lw $t1,0x64($t5)
/* f070530: 8daa0068 */ lw $t2,0x68($t5)
/* f070534: 8dab006c */ lw $t3,0x6c($t5)
.L0f070538:
/* f070538: 11600003 */ beqz $t3,.L0f070548
/* f07053c: 24630004 */ addiu $v1,$v1,0x4
/* f070540: 10000001 */ b .L0f070548
/* f070544: 24060001 */ addiu $a2,$zero,0x1
.L0f070548:
/* f070548: 11400003 */ beqz $t2,.L0f070558
/* f07054c: 00001025 */ or $v0,$zero,$zero
/* f070550: 10000001 */ b .L0f070558
/* f070554: 24040001 */ addiu $a0,$zero,0x1
.L0f070558:
/* f070558: 11200003 */ beqz $t1,.L0f070568
/* f07055c: 00000000 */ nop
/* f070560: 10000001 */ b .L0f070568
/* f070564: 24020001 */ addiu $v0,$zero,0x1
.L0f070568:
/* f070568: 10e00003 */ beqz $a3,.L0f070578
/* f07056c: 00000000 */ nop
/* f070570: 10000001 */ b .L0f070578
/* f070574: 24050001 */ addiu $a1,$zero,0x1
.L0f070578:
/* f070578: 00a27821 */ addu $t7,$a1,$v0
/* f07057c: 01e47021 */ addu $t6,$t7,$a0
/* f070580: 01c6c021 */ addu $t8,$t6,$a2
/* f070584: 0118082a */ slt $at,$t0,$t8
/* f070588: 5420ffdd */ bnezl $at,.L0f070500
/* f07058c: 8c620064 */ lw $v0,0x64($v1)
.L0f070590:
/* f070590: 8e190010 */ lw $t9,0x10($s0)
.L0f070594:
/* f070594: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f070598: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f07059c: 332f0100 */ andi $t7,$t9,0x100
/* f0705a0: 11e0000a */ beqz $t7,.L0f0705cc
/* f0705a4: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f0705a8: 81d80060 */ lb $t8,0x60($t6)
/* f0705ac: 8db90038 */ lw $t9,0x38($t5)
/* f0705b0: 03197823 */ subu $t7,$t8,$t9
/* f0705b4: 1de00005 */ bgtz $t7,.L0f0705cc
/* f0705b8: a1cf0060 */ sb $t7,0x60($t6)
/* f0705bc: a1c00060 */ sb $zero,0x60($t6)
/* f0705c0: 8e180040 */ lw $t8,0x40($s0)
/* f0705c4: 37190004 */ ori $t9,$t8,0x4
/* f0705c8: ae190040 */ sw $t9,0x40($s0)
.L0f0705cc:
/* f0705cc: 8e0f0010 */ lw $t7,0x10($s0)
/* f0705d0: 8fb801b0 */ lw $t8,0x1b0($sp)
/* f0705d4: 31ee0080 */ andi $t6,$t7,0x80
/* f0705d8: 51c00014 */ beqzl $t6,.L0f07062c
/* f0705dc: 8fbf001c */ lw $ra,0x1c($sp)
/* f0705e0: 93190001 */ lbu $t9,0x1($t8)
/* f0705e4: 332f0002 */ andi $t7,$t9,0x2
/* f0705e8: 51e00010 */ beqzl $t7,.L0f07062c
/* f0705ec: 8fbf001c */ lw $ra,0x1c($sp)
/* f0705f0: 8dae043c */ lw $t6,0x43c($t5)
/* f0705f4: 25d80001 */ addiu $t8,$t6,0x1
/* f0705f8: 2b010015 */ slti $at,$t8,0x15
/* f0705fc: 1420000a */ bnez $at,.L0f070628
/* f070600: adb8043c */ sw $t8,0x43c($t5)
/* f070604: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f070608: 240f003c */ addiu $t7,$zero,0x32
/* f07060c: 2401ff7f */ addiu $at,$zero,-129
/* f070610: a1cf0060 */ sb $t7,0x60($t6)
/* f070614: 8e180010 */ lw $t8,0x10($s0)
/* f070618: 0301c824 */ and $t9,$t8,$at
/* f07061c: ae190010 */ sw $t9,0x10($s0)
/* f070620: 372e0100 */ ori $t6,$t9,0x100
/* f070624: ae0e0010 */ sw $t6,0x10($s0)
.L0f070628:
/* f070628: 8fbf001c */ lw $ra,0x1c($sp)
.L0f07062c:
/* f07062c: 8fb00018 */ lw $s0,0x18($sp)
/* f070630: 27bd01b0 */ addiu $sp,$sp,0x1b0
/* f070634: 03e00008 */ jr $ra
/* f070638: 00000000 */ nop
);
#elif VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel weaponTick
.late_rodata
glabel var7f1aa2c0
.word 0x47742400
glabel var7f1aa2c4
.word 0x3cd67750
.text
/* f06f54c: 27bdfe50 */ addiu $sp,$sp,-432
/* f06f550: afbf001c */ sw $ra,0x1c($sp)
/* f06f554: afb00018 */ sw $s0,0x18($sp)
/* f06f558: afa401b0 */ sw $a0,0x1b0($sp)
/* f06f55c: 8c820004 */ lw $v0,0x4($a0)
/* f06f560: 2406001e */ addiu $a2,$zero,0x1e
/* f06f564: afa201a8 */ sw $v0,0x1a8($sp)
/* f06f568: 904f005c */ lbu $t7,0x5c($v0)
/* f06f56c: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06f570: 00408025 */ or $s0,$v0,$zero
/* f06f574: 54cf0005 */ bnel $a2,$t7,.L0f06f58c
/* f06f578: 91c2005c */ lbu $v0,0x5c($t6)
/* f06f57c: 9059005f */ lbu $t9,0x5f($v0)
/* f06f580: 53200006 */ beqzl $t9,.L0f06f59c
/* f06f584: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06f588: 91c2005c */ lbu $v0,0x5c($t6)
.L0f06f58c:
/* f06f58c: 24010055 */ addiu $at,$zero,0x55
/* f06f590: 544100cf */ bnel $v0,$at,.L0f06f8d0
/* f06f594: 2405001f */ addiu $a1,$zero,0x1f
/* f06f598: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06f59c:
/* f06f59c: 24010055 */ addiu $at,$zero,0x55
/* f06f5a0: 85e30062 */ lh $v1,0x62($t7)
/* f06f5a4: 91e2005c */ lbu $v0,0x5c($t7)
/* f06f5a8: 046200c9 */ bltzl $v1,.L0f06f8d0
/* f06f5ac: 2405001f */ addiu $a1,$zero,0x1f
/* f06f5b0: 1441005f */ bne $v0,$at,.L0f06f730
/* f06f5b4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f5b8: 91f8005f */ lbu $t8,0x5f($t7)
/* f06f5bc: 24070001 */ addiu $a3,$zero,0x1
/* f06f5c0: 14f8005b */ bne $a3,$t8,.L0f06f730
/* f06f5c4: 00000000 */ nop
/* f06f5c8: 18600059 */ blez $v1,.L0f06f730
/* f06f5cc: 28610002 */ slti $at,$v1,0x2
/* f06f5d0: 14200055 */ bnez $at,.L0f06f728
/* f06f5d4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f5d8: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f5dc: 8db90034 */ lw $t9,0x34($t5)
/* f06f5e0: 00797023 */ subu $t6,$v1,$t9
/* f06f5e4: 29c10008 */ slti $at,$t6,0x8
/* f06f5e8: 102003e9 */ beqz $at,.L0f070590
/* f06f5ec: a5ee0062 */ sh $t6,0x62($t7)
/* f06f5f0: 3c198007 */ lui $t9,%hi(var800699fc)
/* f06f5f4: 273999fc */ addiu $t9,$t9,%lo(var800699fc)
/* f06f5f8: 8f210000 */ lw $at,0x0($t9)
/* f06f5fc: 27b8019c */ addiu $t8,$sp,0x19c
/* f06f600: 8f2e0004 */ lw $t6,0x4($t9)
/* f06f604: af010000 */ sw $at,0x0($t8)
/* f06f608: 8f210008 */ lw $at,0x8($t9)
/* f06f60c: af0e0004 */ sw $t6,0x4($t8)
/* f06f610: af010008 */ sw $at,0x8($t8)
/* f06f614: afa00194 */ sw $zero,0x194($sp)
/* f06f618: 0fc1a179 */ jal func0f0685e4
/* f06f61c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f620: 8e020040 */ lw $v0,0x40($s0)
/* f06f624: 8fa50194 */ lw $a1,0x194($sp)
/* f06f628: 24070001 */ addiu $a3,$zero,0x1
/* f06f62c: 304f0040 */ andi $t7,$v0,0x40
/* f06f630: 11e00004 */ beqz $t7,.L0f06f644
/* f06f634: 30590080 */ andi $t9,$v0,0x80
/* f06f638: 8e180048 */ lw $t8,0x48($s0)
/* f06f63c: 10000004 */ b .L0f06f650
/* f06f640: 8f050044 */ lw $a1,0x44($t8)
.L0f06f644:
/* f06f644: 13200002 */ beqz $t9,.L0f06f650
/* f06f648: 00000000 */ nop
/* f06f64c: 8e050048 */ lw $a1,0x48($s0)
.L0f06f650:
/* f06f650: 10a00032 */ beqz $a1,.L0f06f71c
/* f06f654: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06f658: 8fae01b0 */ lw $t6,0x1b0($sp)
/* f06f65c: 8dcf0018 */ lw $t7,0x18($t6)
/* f06f660: 01c01825 */ or $v1,$t6,$zero
/* f06f664: 11e00006 */ beqz $t7,.L0f06f680
/* f06f668: 00000000 */ nop
/* f06f66c: 8dc20018 */ lw $v0,0x18($t6)
/* f06f670: 00401825 */ or $v1,$v0,$zero
.L0f06f674:
/* f06f674: 8c420018 */ lw $v0,0x18($v0)
/* f06f678: 5440fffe */ bnezl $v0,.L0f06f674
/* f06f67c: 00401825 */ or $v1,$v0,$zero
.L0f06f680:
/* f06f680: 5060000d */ beqzl $v1,.L0f06f6b8
/* f06f684: 8cae0000 */ lw $t6,0x0($a1)
/* f06f688: 90620000 */ lbu $v0,0x0($v1)
/* f06f68c: 24010003 */ addiu $at,$zero,0x3
/* f06f690: 10410003 */ beq $v0,$at,.L0f06f6a0
/* f06f694: 24010006 */ addiu $at,$zero,0x6
/* f06f698: 54410007 */ bnel $v0,$at,.L0f06f6b8
/* f06f69c: 8cae0000 */ lw $t6,0x0($a1)
.L0f06f6a0:
/* f06f6a0: 8c620004 */ lw $v0,0x4($v1)
/* f06f6a4: 8c580014 */ lw $t8,0x14($v0)
/* f06f6a8: 37190001 */ ori $t9,$t8,0x1
/* f06f6ac: 10000005 */ b .L0f06f6c4
/* f06f6b0: ac590014 */ sw $t9,0x14($v0)
/* f06f6b4: 8cae0000 */ lw $t6,0x0($a1)
.L0f06f6b8:
/* f06f6b8: aca00088 */ sw $zero,0x88($a1)
/* f06f6bc: 35cf0001 */ ori $t7,$t6,0x1
/* f06f6c0: acaf0000 */ sw $t7,0x0($a1)
.L0f06f6c4:
/* f06f6c4: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06f6c8: a7070062 */ sh $a3,0x62($t8)
/* f06f6cc: afa50194 */ sw $a1,0x194($sp)
/* f06f6d0: 0fc1a1a5 */ jal projectileSetSticky
/* f06f6d4: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f6d8: 8fa50194 */ lw $a1,0x194($sp)
/* f06f6dc: c7a4019c */ lwc1 $f4,0x19c($sp)
/* f06f6e0: 24a40020 */ addiu $a0,$a1,0x20
/* f06f6e4: e4a40004 */ swc1 $f4,0x4($a1)
/* f06f6e8: c7a601a0 */ lwc1 $f6,0x1a0($sp)
/* f06f6ec: e4a60008 */ swc1 $f6,0x8($a1)
/* f06f6f0: c7a801a4 */ lwc1 $f8,0x1a4($sp)
/* f06f6f4: 0c00566c */ jal mtx4LoadIdentity
/* f06f6f8: e4a8000c */ swc1 $f8,0xc($a1)
/* f06f6fc: 8fa50194 */ lw $a1,0x194($sp)
/* f06f700: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06f704: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f708: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f70c: acb900d4 */ sw $t9,0xd4($a1)
/* f06f710: 8dae000c */ lw $t6,0xc($t5)
/* f06f714: 1000039e */ b .L0f070590
/* f06f718: acae00d8 */ sw $t6,0xd8($a1)
.L0f06f71c:
/* f06f71c: 240f0002 */ addiu $t7,$zero,0x2
/* f06f720: 1000039b */ b .L0f070590
/* f06f724: a70f0062 */ sh $t7,0x62($t8)
.L0f06f728:
/* f06f728: 1000039a */ b .L0f070594
/* f06f72c: 8e190010 */ lw $t9,0x10($s0)
.L0f06f730:
/* f06f730: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f734: 8db90034 */ lw $t9,0x34($t5)
/* f06f738: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06f73c: 00797023 */ subu $t6,$v1,$t9
/* f06f740: 05c10393 */ bgez $t6,.L0f070590
/* f06f744: a5ee0062 */ sh $t6,0x62($t7)
/* f06f748: 0fc10e62 */ jal propUnsetDangerous
/* f06f74c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f750: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06f754: 24010002 */ addiu $at,$zero,0x2
/* f06f758: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f75c: 9319005f */ lbu $t9,0x5f($t8)
/* f06f760: 57210007 */ bnel $t9,$at,.L0f06f780
/* f06f764: 8e0f000c */ lw $t7,0xc($s0)
/* f06f768: 0fc1bcc5 */ jal propExplode
/* f06f76c: 24050015 */ addiu $a1,$zero,0x15
/* f06f770: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f774: 1000000c */ b .L0f06f7a8
/* f06f778: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f77c: 8e0f000c */ lw $t7,0xc($s0)
.L0f06f780:
/* f06f780: 2405000d */ addiu $a1,$zero,0xd
/* f06f784: 000f7000 */ sll $t6,$t7,0x0
/* f06f788: 05c10003 */ bgez $t6,.L0f06f798
/* f06f78c: 00000000 */ nop
/* f06f790: 10000001 */ b .L0f06f798
/* f06f794: 24050011 */ addiu $a1,$zero,0x11
.L0f06f798:
/* f06f798: 0fc1bcc5 */ jal propExplode
/* f06f79c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f7a0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f7a4: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
.L0f06f7a8:
/* f06f7a8: 8e180040 */ lw $t8,0x40($s0)
/* f06f7ac: 00004025 */ or $t0,$zero,$zero
/* f06f7b0: 00003025 */ or $a2,$zero,$zero
/* f06f7b4: 37190004 */ ori $t9,$t8,0x4
/* f06f7b8: ae190040 */ sw $t9,0x40($s0)
/* f06f7bc: 8dab006c */ lw $t3,0x6c($t5)
/* f06f7c0: 00002025 */ or $a0,$zero,$zero
/* f06f7c4: 00001025 */ or $v0,$zero,$zero
/* f06f7c8: 11600003 */ beqz $t3,.L0f06f7d8
/* f06f7cc: 00002825 */ or $a1,$zero,$zero
/* f06f7d0: 10000001 */ b .L0f06f7d8
/* f06f7d4: 24060001 */ addiu $a2,$zero,0x1
.L0f06f7d8:
/* f06f7d8: 8daa0068 */ lw $t2,0x68($t5)
/* f06f7dc: 0008c880 */ sll $t9,$t0,0x2
/* f06f7e0: 01b91821 */ addu $v1,$t5,$t9
/* f06f7e4: 11400003 */ beqz $t2,.L0f06f7f4
/* f06f7e8: 240c0003 */ addiu $t4,$zero,0x3
/* f06f7ec: 10000001 */ b .L0f06f7f4
/* f06f7f0: 24040001 */ addiu $a0,$zero,0x1
.L0f06f7f4:
/* f06f7f4: 8da90064 */ lw $t1,0x64($t5)
/* f06f7f8: 11200003 */ beqz $t1,.L0f06f808
/* f06f7fc: 00000000 */ nop
/* f06f800: 10000001 */ b .L0f06f808
/* f06f804: 24020001 */ addiu $v0,$zero,0x1
.L0f06f808:
/* f06f808: 8da70070 */ lw $a3,0x70($t5)
/* f06f80c: 10e00003 */ beqz $a3,.L0f06f81c
/* f06f810: 00000000 */ nop
/* f06f814: 10000001 */ b .L0f06f81c
/* f06f818: 24050001 */ addiu $a1,$zero,0x1
.L0f06f81c:
/* f06f81c: 00a27821 */ addu $t7,$a1,$v0
/* f06f820: 01e47021 */ addu $t6,$t7,$a0
/* f06f824: 01c6c021 */ addu $t8,$t6,$a2
/* f06f828: 5b00035a */ blezl $t8,.L0f070594
/* f06f82c: 8e190010 */ lw $t9,0x10($s0)
/* f06f830: 8c620064 */ lw $v0,0x64($v1)
.L0f06f834:
/* f06f834: 25080001 */ addiu $t0,$t0,0x1
/* f06f838: 00003025 */ or $a2,$zero,$zero
/* f06f83c: 8c4f0264 */ lw $t7,0x264($v0)
/* f06f840: 00002025 */ or $a0,$zero,$zero
/* f06f844: 00002825 */ or $a1,$zero,$zero
/* f06f848: 160f0008 */ bne $s0,$t7,.L0f06f86c
/* f06f84c: 00000000 */ nop
/* f06f850: ac400264 */ sw $zero,0x264($v0)
/* f06f854: 8c6e0064 */ lw $t6,0x64($v1)
/* f06f858: a5cc0010 */ sh $t4,0x10($t6)
/* f06f85c: 8da70070 */ lw $a3,0x70($t5)
/* f06f860: 8da90064 */ lw $t1,0x64($t5)
/* f06f864: 8daa0068 */ lw $t2,0x68($t5)
/* f06f868: 8dab006c */ lw $t3,0x6c($t5)
.L0f06f86c:
/* f06f86c: 11600003 */ beqz $t3,.L0f06f87c
/* f06f870: 24630004 */ addiu $v1,$v1,0x4
/* f06f874: 10000001 */ b .L0f06f87c
/* f06f878: 24060001 */ addiu $a2,$zero,0x1
.L0f06f87c:
/* f06f87c: 11400003 */ beqz $t2,.L0f06f88c
/* f06f880: 00001025 */ or $v0,$zero,$zero
/* f06f884: 10000001 */ b .L0f06f88c
/* f06f888: 24040001 */ addiu $a0,$zero,0x1
.L0f06f88c:
/* f06f88c: 11200003 */ beqz $t1,.L0f06f89c
/* f06f890: 00000000 */ nop
/* f06f894: 10000001 */ b .L0f06f89c
/* f06f898: 24020001 */ addiu $v0,$zero,0x1
.L0f06f89c:
/* f06f89c: 10e00003 */ beqz $a3,.L0f06f8ac
/* f06f8a0: 00000000 */ nop
/* f06f8a4: 10000001 */ b .L0f06f8ac
/* f06f8a8: 24050001 */ addiu $a1,$zero,0x1
.L0f06f8ac:
/* f06f8ac: 00a2c021 */ addu $t8,$a1,$v0
/* f06f8b0: 0304c821 */ addu $t9,$t8,$a0
/* f06f8b4: 03267821 */ addu $t7,$t9,$a2
/* f06f8b8: 010f082a */ slt $at,$t0,$t7
/* f06f8bc: 5420ffdd */ bnezl $at,.L0f06f834
/* f06f8c0: 8c620064 */ lw $v0,0x64($v1)
/* f06f8c4: 10000333 */ b .L0f070594
/* f06f8c8: 8e190010 */ lw $t9,0x10($s0)
/* f06f8cc: 2405001f */ addiu $a1,$zero,0x1f
.L0f06f8d0:
/* f06f8d0: 54a2006b */ bnel $a1,$v0,.L0f06fa80
/* f06f8d4: 24010053 */ addiu $at,$zero,0x53
/* f06f8d8: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06f8dc: 91d8005f */ lbu $t8,0x5f($t6)
/* f06f8e0: 57000067 */ bnezl $t8,.L0f06fa80
/* f06f8e4: 24010053 */ addiu $at,$zero,0x53
/* f06f8e8: 85c30062 */ lh $v1,0x62($t6)
/* f06f8ec: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f8f0: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f8f4: 0460005f */ bltz $v1,.L0f06fa74
/* f06f8f8: 00000000 */ nop
/* f06f8fc: 8db90034 */ lw $t9,0x34($t5)
/* f06f900: 00002825 */ or $a1,$zero,$zero
/* f06f904: 00797823 */ subu $t7,$v1,$t9
/* f06f908: 05e1005a */ bgez $t7,.L0f06fa74
/* f06f90c: a5cf0062 */ sh $t7,0x62($t6)
/* f06f910: 8e040040 */ lw $a0,0x40($s0)
/* f06f914: 8dae0318 */ lw $t6,0x318($t5)
/* f06f918: 3c01f000 */ lui $at,0xf000
/* f06f91c: 0081c024 */ and $t8,$a0,$at
/* f06f920: 11c00006 */ beqz $t6,.L0f06f93c
/* f06f924: 00182702 */ srl $a0,$t8,0x1c
/* f06f928: 0fc63410 */ jal mpGetChrFromPlayerIndex
/* f06f92c: afa0018c */ sw $zero,0x18c($sp)
/* f06f930: 10400002 */ beqz $v0,.L0f06f93c
/* f06f934: 8fa5018c */ lw $a1,0x18c($sp)
/* f06f938: 8c45001c */ lw $a1,0x1c($v0)
.L0f06f93c:
/* f06f93c: 8fa601b0 */ lw $a2,0x1b0($sp)
/* f06f940: 0fc0287e */ jal nbombCreateStorm
/* f06f944: 24c40008 */ addiu $a0,$a2,0x8
/* f06f948: 0fc10e62 */ jal propUnsetDangerous
/* f06f94c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06f950: 8e180040 */ lw $t8,0x40($s0)
/* f06f954: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06f958: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06f95c: 37190004 */ ori $t9,$t8,0x4
/* f06f960: ae190040 */ sw $t9,0x40($s0)
/* f06f964: 8dab006c */ lw $t3,0x6c($t5)
/* f06f968: 00004025 */ or $t0,$zero,$zero
/* f06f96c: 00003025 */ or $a2,$zero,$zero
/* f06f970: 11600003 */ beqz $t3,.L0f06f980
/* f06f974: 00002025 */ or $a0,$zero,$zero
/* f06f978: 10000001 */ b .L0f06f980
/* f06f97c: 24060001 */ addiu $a2,$zero,0x1
.L0f06f980:
/* f06f980: 8daa0068 */ lw $t2,0x68($t5)
/* f06f984: 00001025 */ or $v0,$zero,$zero
/* f06f988: 00002825 */ or $a1,$zero,$zero
/* f06f98c: 11400003 */ beqz $t2,.L0f06f99c
/* f06f990: 0008c880 */ sll $t9,$t0,0x2
/* f06f994: 10000001 */ b .L0f06f99c
/* f06f998: 24040001 */ addiu $a0,$zero,0x1
.L0f06f99c:
/* f06f99c: 8da90064 */ lw $t1,0x64($t5)
/* f06f9a0: 01b91821 */ addu $v1,$t5,$t9
/* f06f9a4: 240c0003 */ addiu $t4,$zero,0x3
/* f06f9a8: 11200003 */ beqz $t1,.L0f06f9b8
/* f06f9ac: 00000000 */ nop
/* f06f9b0: 10000001 */ b .L0f06f9b8
/* f06f9b4: 24020001 */ addiu $v0,$zero,0x1
.L0f06f9b8:
/* f06f9b8: 8da70070 */ lw $a3,0x70($t5)
/* f06f9bc: 10e00003 */ beqz $a3,.L0f06f9cc
/* f06f9c0: 00000000 */ nop
/* f06f9c4: 10000001 */ b .L0f06f9cc
/* f06f9c8: 24050001 */ addiu $a1,$zero,0x1
.L0f06f9cc:
/* f06f9cc: 00a27021 */ addu $t6,$a1,$v0
/* f06f9d0: 01c47821 */ addu $t7,$t6,$a0
/* f06f9d4: 01e6c021 */ addu $t8,$t7,$a2
/* f06f9d8: 1b000026 */ blez $t8,.L0f06fa74
/* f06f9dc: 00000000 */ nop
/* f06f9e0: 8c620064 */ lw $v0,0x64($v1)
.L0f06f9e4:
/* f06f9e4: 25080001 */ addiu $t0,$t0,0x1
/* f06f9e8: 00003025 */ or $a2,$zero,$zero
/* f06f9ec: 8c4e0264 */ lw $t6,0x264($v0)
/* f06f9f0: 00002025 */ or $a0,$zero,$zero
/* f06f9f4: 00002825 */ or $a1,$zero,$zero
/* f06f9f8: 160e0008 */ bne $s0,$t6,.L0f06fa1c
/* f06f9fc: 00000000 */ nop
/* f06fa00: ac400264 */ sw $zero,0x264($v0)
/* f06fa04: 8c6f0064 */ lw $t7,0x64($v1)
/* f06fa08: a5ec0010 */ sh $t4,0x10($t7)
/* f06fa0c: 8da70070 */ lw $a3,0x70($t5)
/* f06fa10: 8da90064 */ lw $t1,0x64($t5)
/* f06fa14: 8daa0068 */ lw $t2,0x68($t5)
/* f06fa18: 8dab006c */ lw $t3,0x6c($t5)
.L0f06fa1c:
/* f06fa1c: 11600003 */ beqz $t3,.L0f06fa2c
/* f06fa20: 24630004 */ addiu $v1,$v1,0x4
/* f06fa24: 10000001 */ b .L0f06fa2c
/* f06fa28: 24060001 */ addiu $a2,$zero,0x1
.L0f06fa2c:
/* f06fa2c: 11400003 */ beqz $t2,.L0f06fa3c
/* f06fa30: 00001025 */ or $v0,$zero,$zero
/* f06fa34: 10000001 */ b .L0f06fa3c
/* f06fa38: 24040001 */ addiu $a0,$zero,0x1
.L0f06fa3c:
/* f06fa3c: 11200003 */ beqz $t1,.L0f06fa4c
/* f06fa40: 00000000 */ nop
/* f06fa44: 10000001 */ b .L0f06fa4c
/* f06fa48: 24020001 */ addiu $v0,$zero,0x1
.L0f06fa4c:
/* f06fa4c: 10e00003 */ beqz $a3,.L0f06fa5c
/* f06fa50: 00000000 */ nop
/* f06fa54: 10000001 */ b .L0f06fa5c
/* f06fa58: 24050001 */ addiu $a1,$zero,0x1
.L0f06fa5c:
/* f06fa5c: 00a2c021 */ addu $t8,$a1,$v0
/* f06fa60: 0304c821 */ addu $t9,$t8,$a0
/* f06fa64: 03267021 */ addu $t6,$t9,$a2
/* f06fa68: 010e082a */ slt $at,$t0,$t6
/* f06fa6c: 5420ffdd */ bnezl $at,.L0f06f9e4
/* f06fa70: 8c620064 */ lw $v0,0x64($v1)
.L0f06fa74:
/* f06fa74: 100002c7 */ b .L0f070594
/* f06fa78: 8e190010 */ lw $t9,0x10($s0)
/* f06fa7c: 24010053 */ addiu $at,$zero,0x53
.L0f06fa80:
/* f06fa80: 10410005 */ beq $v0,$at,.L0f06fa98
/* f06fa84: 24010054 */ addiu $at,$zero,0x54
/* f06fa88: 10410003 */ beq $v0,$at,.L0f06fa98
/* f06fa8c: 24010058 */ addiu $at,$zero,0x58
/* f06fa90: 5441005a */ bnel $v0,$at,.L0f06fbfc
/* f06fa94: 24010020 */ addiu $at,$zero,0x20
.L0f06fa98:
/* f06fa98: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06fa9c: 85f80062 */ lh $t8,0x62($t7)
/* f06faa0: 17000053 */ bnez $t8,.L0f06fbf0
/* f06faa4: 00000000 */ nop
/* f06faa8: 8e19000c */ lw $t9,0xc($s0)
/* f06faac: 2405000d */ addiu $a1,$zero,0xd
/* f06fab0: 00197000 */ sll $t6,$t9,0x0
/* f06fab4: 05c10003 */ bgez $t6,.L0f06fac4
/* f06fab8: 00000000 */ nop
/* f06fabc: 10000001 */ b .L0f06fac4
/* f06fac0: 24050011 */ addiu $a1,$zero,0x11
.L0f06fac4:
/* f06fac4: 0fc1bcc5 */ jal propExplode
/* f06fac8: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06facc: 8e0f0040 */ lw $t7,0x40($s0)
/* f06fad0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fad4: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fad8: 35f80004 */ ori $t8,$t7,0x4
/* f06fadc: ae180040 */ sw $t8,0x40($s0)
/* f06fae0: 8dab006c */ lw $t3,0x6c($t5)
/* f06fae4: 00004025 */ or $t0,$zero,$zero
/* f06fae8: 00003025 */ or $a2,$zero,$zero
/* f06faec: 11600003 */ beqz $t3,.L0f06fafc
/* f06faf0: 00002025 */ or $a0,$zero,$zero
/* f06faf4: 10000001 */ b .L0f06fafc
/* f06faf8: 24060001 */ addiu $a2,$zero,0x1
.L0f06fafc:
/* f06fafc: 8daa0068 */ lw $t2,0x68($t5)
/* f06fb00: 00001025 */ or $v0,$zero,$zero
/* f06fb04: 00002825 */ or $a1,$zero,$zero
/* f06fb08: 11400003 */ beqz $t2,.L0f06fb18
/* f06fb0c: 0008c080 */ sll $t8,$t0,0x2
/* f06fb10: 10000001 */ b .L0f06fb18
/* f06fb14: 24040001 */ addiu $a0,$zero,0x1
.L0f06fb18:
/* f06fb18: 8da90064 */ lw $t1,0x64($t5)
/* f06fb1c: 01b81821 */ addu $v1,$t5,$t8
/* f06fb20: 240c0003 */ addiu $t4,$zero,0x3
/* f06fb24: 11200003 */ beqz $t1,.L0f06fb34
/* f06fb28: 00000000 */ nop
/* f06fb2c: 10000001 */ b .L0f06fb34
/* f06fb30: 24020001 */ addiu $v0,$zero,0x1
.L0f06fb34:
/* f06fb34: 8da70070 */ lw $a3,0x70($t5)
/* f06fb38: 10e00003 */ beqz $a3,.L0f06fb48
/* f06fb3c: 00000000 */ nop
/* f06fb40: 10000001 */ b .L0f06fb48
/* f06fb44: 24050001 */ addiu $a1,$zero,0x1
.L0f06fb48:
/* f06fb48: 00a2c821 */ addu $t9,$a1,$v0
/* f06fb4c: 03247021 */ addu $t6,$t9,$a0
/* f06fb50: 01c67821 */ addu $t7,$t6,$a2
/* f06fb54: 19e00026 */ blez $t7,.L0f06fbf0
/* f06fb58: 00000000 */ nop
/* f06fb5c: 8c620064 */ lw $v0,0x64($v1)
.L0f06fb60:
/* f06fb60: 25080001 */ addiu $t0,$t0,0x1
/* f06fb64: 00003025 */ or $a2,$zero,$zero
/* f06fb68: 8c590264 */ lw $t9,0x264($v0)
/* f06fb6c: 00002025 */ or $a0,$zero,$zero
/* f06fb70: 00002825 */ or $a1,$zero,$zero
/* f06fb74: 16190008 */ bne $s0,$t9,.L0f06fb98
/* f06fb78: 00000000 */ nop
/* f06fb7c: ac400264 */ sw $zero,0x264($v0)
/* f06fb80: 8c6e0064 */ lw $t6,0x64($v1)
/* f06fb84: a5cc0010 */ sh $t4,0x10($t6)
/* f06fb88: 8da70070 */ lw $a3,0x70($t5)
/* f06fb8c: 8da90064 */ lw $t1,0x64($t5)
/* f06fb90: 8daa0068 */ lw $t2,0x68($t5)
/* f06fb94: 8dab006c */ lw $t3,0x6c($t5)
.L0f06fb98:
/* f06fb98: 11600003 */ beqz $t3,.L0f06fba8
/* f06fb9c: 24630004 */ addiu $v1,$v1,0x4
/* f06fba0: 10000001 */ b .L0f06fba8
/* f06fba4: 24060001 */ addiu $a2,$zero,0x1
.L0f06fba8:
/* f06fba8: 11400003 */ beqz $t2,.L0f06fbb8
/* f06fbac: 00001025 */ or $v0,$zero,$zero
/* f06fbb0: 10000001 */ b .L0f06fbb8
/* f06fbb4: 24040001 */ addiu $a0,$zero,0x1
.L0f06fbb8:
/* f06fbb8: 11200003 */ beqz $t1,.L0f06fbc8
/* f06fbbc: 00000000 */ nop
/* f06fbc0: 10000001 */ b .L0f06fbc8
/* f06fbc4: 24020001 */ addiu $v0,$zero,0x1
.L0f06fbc8:
/* f06fbc8: 10e00003 */ beqz $a3,.L0f06fbd8
/* f06fbcc: 00000000 */ nop
/* f06fbd0: 10000001 */ b .L0f06fbd8
/* f06fbd4: 24050001 */ addiu $a1,$zero,0x1
.L0f06fbd8:
/* f06fbd8: 00a27821 */ addu $t7,$a1,$v0
/* f06fbdc: 01e4c021 */ addu $t8,$t7,$a0
/* f06fbe0: 0306c821 */ addu $t9,$t8,$a2
/* f06fbe4: 0119082a */ slt $at,$t0,$t9
/* f06fbe8: 5420ffdd */ bnezl $at,.L0f06fb60
/* f06fbec: 8c620064 */ lw $v0,0x64($v1)
.L0f06fbf0:
/* f06fbf0: 10000268 */ b .L0f070594
/* f06fbf4: 8e190010 */ lw $t9,0x10($s0)
/* f06fbf8: 24010020 */ addiu $at,$zero,0x20
.L0f06fbfc:
/* f06fbfc: 54410022 */ bnel $v0,$at,.L0f06fc88
/* f06fc00: 24010022 */ addiu $at,$zero,0x22
/* f06fc04: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06fc08: 85c30062 */ lh $v1,0x62($t6)
/* f06fc0c: 0462001e */ bltzl $v1,.L0f06fc88
/* f06fc10: 24010022 */ addiu $at,$zero,0x22
/* f06fc14: 91cf005f */ lbu $t7,0x5f($t6)
/* f06fc18: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fc1c: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fc20: 15e00016 */ bnez $t7,.L0f06fc7c
/* f06fc24: 00000000 */ nop
/* f06fc28: 8db80034 */ lw $t8,0x34($t5)
/* f06fc2c: 0078c823 */ subu $t9,$v1,$t8
/* f06fc30: 07210257 */ bgez $t9,.L0f070590
/* f06fc34: a5d90062 */ sh $t9,0x62($t6)
/* f06fc38: 8e0f000c */ lw $t7,0xc($s0)
/* f06fc3c: 2405000d */ addiu $a1,$zero,0xd
/* f06fc40: 000fc000 */ sll $t8,$t7,0x0
/* f06fc44: 07010003 */ bgez $t8,.L0f06fc54
/* f06fc48: 00000000 */ nop
/* f06fc4c: 10000001 */ b .L0f06fc54
/* f06fc50: 24050011 */ addiu $a1,$zero,0x11
.L0f06fc54:
/* f06fc54: 0fc1bcc5 */ jal propExplode
/* f06fc58: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06fc5c: 1040024c */ beqz $v0,.L0f070590
/* f06fc60: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06fc64: 240effff */ addiu $t6,$zero,-1
/* f06fc68: a72e0062 */ sh $t6,0x62($t9)
/* f06fc6c: 8e0f0040 */ lw $t7,0x40($s0)
/* f06fc70: 35f80004 */ ori $t8,$t7,0x4
/* f06fc74: 10000246 */ b .L0f070590
/* f06fc78: ae180040 */ sw $t8,0x40($s0)
.L0f06fc7c:
/* f06fc7c: 10000245 */ b .L0f070594
/* f06fc80: 8e190010 */ lw $t9,0x10($s0)
/* f06fc84: 24010022 */ addiu $at,$zero,0x22
.L0f06fc88:
/* f06fc88: 5441007a */ bnel $v0,$at,.L0f06fe74
/* f06fc8c: 24010021 */ addiu $at,$zero,0x21
/* f06fc90: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fc94: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fc98: 8cae0000 */ lw $t6,0x0($a1)
/* f06fc9c: 8fb801b0 */ lw $t8,0x1b0($sp)
/* f06fca0: 51c00053 */ beqzl $t6,.L0f06fdf0
/* f06fca4: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06fca8: 8e030040 */ lw $v1,0x40($s0)
/* f06fcac: 8f020018 */ lw $v0,0x18($t8)
/* f06fcb0: 3c01f000 */ lui $at,0xf000
/* f06fcb4: 0061c824 */ and $t9,$v1,$at
/* f06fcb8: 10400003 */ beqz $v0,.L0f06fcc8
/* f06fcbc: 00191f02 */ srl $v1,$t9,0x1c
/* f06fcc0: 10000002 */ b .L0f06fccc
/* f06fcc4: 8c440004 */ lw $a0,0x4($v0)
.L0f06fcc8:
/* f06fcc8: 00002025 */ or $a0,$zero,$zero
.L0f06fccc:
/* f06fccc: 10400009 */ beqz $v0,.L0f06fcf4
/* f06fcd0: 00000000 */ nop
/* f06fcd4: 10800007 */ beqz $a0,.L0f06fcf4
/* f06fcd8: 00000000 */ nop
/* f06fcdc: 0fc633fe */ jal mpPlayerGetIndex
/* f06fce0: afa30178 */ sw $v1,0x178($sp)
/* f06fce4: 8fa30178 */ lw $v1,0x178($sp)
/* f06fce8: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fcec: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fcf0: 1043003e */ beq $v0,$v1,.L0f06fdec
.L0f06fcf4:
/* f06fcf4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fcf8: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fcfc: 8dae0298 */ lw $t6,0x298($t5)
/* f06fd00: 24010002 */ addiu $at,$zero,0x2
/* f06fd04: 05c10004 */ bgez $t6,.L0f06fd18
/* f06fd08: 00000000 */ nop
/* f06fd0c: 8db9029c */ lw $t9,0x29c($t5)
/* f06fd10: 07220030 */ bltzl $t9,.L0f06fdd4
/* f06fd14: 8cae0000 */ lw $t6,0x0($a1)
.L0f06fd18:
/* f06fd18: 54610026 */ bnel $v1,$at,.L0f06fdb4
/* f06fd1c: 8cb80000 */ lw $t8,0x0($a1)
/* f06fd20: 8da202a4 */ lw $v0,0x2a4($t5)
/* f06fd24: 00001825 */ or $v1,$zero,$zero
/* f06fd28: 5040000d */ beqzl $v0,.L0f06fd60
/* f06fd2c: 8da202a0 */ lw $v0,0x2a0($t5)
/* f06fd30: 8c4400bc */ lw $a0,0xbc($v0)
/* f06fd34: 5080000a */ beqzl $a0,.L0f06fd60
/* f06fd38: 8da202a0 */ lw $v0,0x2a0($t5)
/* f06fd3c: 0fc4a25f */ jal playermgrGetPlayerNumByProp
/* f06fd40: 00000000 */ nop
/* f06fd44: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fd48: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fd4c: 240f0001 */ addiu $t7,$zero,0x1
/* f06fd50: 004f1804 */ sllv $v1,$t7,$v0
/* f06fd54: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fd58: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fd5c: 8da202a0 */ lw $v0,0x2a0($t5)
.L0f06fd60:
/* f06fd60: 5040000d */ beqzl $v0,.L0f06fd98
/* f06fd64: 8cb90000 */ lw $t9,0x0($a1)
/* f06fd68: 8c4400bc */ lw $a0,0xbc($v0)
/* f06fd6c: 5080000a */ beqzl $a0,.L0f06fd98
/* f06fd70: 8cb90000 */ lw $t9,0x0($a1)
/* f06fd74: 0fc4a25f */ jal playermgrGetPlayerNumByProp
/* f06fd78: afa30170 */ sw $v1,0x170($sp)
/* f06fd7c: 8fa30170 */ lw $v1,0x170($sp)
/* f06fd80: 24180001 */ addiu $t8,$zero,0x1
/* f06fd84: 00587004 */ sllv $t6,$t8,$v0
/* f06fd88: 3c058007 */ lui $a1,%hi(g_PlayersDetonatingMines)
/* f06fd8c: 24a59910 */ addiu $a1,$a1,%lo(g_PlayersDetonatingMines)
/* f06fd90: 006e1825 */ or $v1,$v1,$t6
/* f06fd94: 8cb90000 */ lw $t9,0x0($a1)
.L0f06fd98:
/* f06fd98: 03237824 */ and $t7,$t9,$v1
/* f06fd9c: 11e00013 */ beqz $t7,.L0f06fdec
/* f06fda0: acaf0000 */ sw $t7,0x0($a1)
/* f06fda4: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f06fda8: 10000010 */ b .L0f06fdec
/* f06fdac: a5c00062 */ sh $zero,0x62($t6)
/* f06fdb0: 8cb80000 */ lw $t8,0x0($a1)
.L0f06fdb4:
/* f06fdb4: 24190001 */ addiu $t9,$zero,0x1
/* f06fdb8: 00797804 */ sllv $t7,$t9,$v1
/* f06fdbc: 01f87024 */ and $t6,$t7,$t8
/* f06fdc0: 11c0000a */ beqz $t6,.L0f06fdec
/* f06fdc4: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06fdc8: 10000008 */ b .L0f06fdec
/* f06fdcc: a7200062 */ sh $zero,0x62($t9)
/* f06fdd0: 8cae0000 */ lw $t6,0x0($a1)
.L0f06fdd4:
/* f06fdd4: 240f0001 */ addiu $t7,$zero,0x1
/* f06fdd8: 006fc004 */ sllv $t8,$t7,$v1
/* f06fddc: 030ec824 */ and $t9,$t8,$t6
/* f06fde0: 13200002 */ beqz $t9,.L0f06fdec
/* f06fde4: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06fde8: a5e00062 */ sh $zero,0x62($t7)
.L0f06fdec:
/* f06fdec: 8fb801a8 */ lw $t8,0x1a8($sp)
.L0f06fdf0:
/* f06fdf0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fdf4: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fdf8: 87030062 */ lh $v1,0x62($t8)
/* f06fdfc: 28610002 */ slti $at,$v1,0x2
/* f06fe00: 14200009 */ bnez $at,.L0f06fe28
/* f06fe04: 00000000 */ nop
/* f06fe08: 8dae0034 */ lw $t6,0x34($t5)
/* f06fe0c: 24070001 */ addiu $a3,$zero,0x1
/* f06fe10: 006ec823 */ subu $t9,$v1,$t6
/* f06fe14: 2b210002 */ slti $at,$t9,0x2
/* f06fe18: 102001dd */ beqz $at,.L0f070590
/* f06fe1c: a7190062 */ sh $t9,0x62($t8)
/* f06fe20: 100001db */ b .L0f070590
/* f06fe24: a7070062 */ sh $a3,0x62($t8)
.L0f06fe28:
/* f06fe28: 546001da */ bnezl $v1,.L0f070594
/* f06fe2c: 8e190010 */ lw $t9,0x10($s0)
/* f06fe30: 8e0f000c */ lw $t7,0xc($s0)
/* f06fe34: 2405000d */ addiu $a1,$zero,0xd
/* f06fe38: 000f7000 */ sll $t6,$t7,0x0
/* f06fe3c: 05c10002 */ bgez $t6,.L0f06fe48
/* f06fe40: 00000000 */ nop
/* f06fe44: 24050011 */ addiu $a1,$zero,0x11
.L0f06fe48:
/* f06fe48: 0fc1bcc5 */ jal propExplode
/* f06fe4c: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06fe50: 104001cf */ beqz $v0,.L0f070590
/* f06fe54: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06fe58: 2419ffff */ addiu $t9,$zero,-1
/* f06fe5c: a7190062 */ sh $t9,0x62($t8)
/* f06fe60: 8e0f0040 */ lw $t7,0x40($s0)
/* f06fe64: 35ee0004 */ ori $t6,$t7,0x4
/* f06fe68: 100001c9 */ b .L0f070590
/* f06fe6c: ae0e0040 */ sw $t6,0x40($s0)
/* f06fe70: 24010021 */ addiu $at,$zero,0x21
.L0f06fe74:
/* f06fe74: 10410012 */ beq $v0,$at,.L0f06fec0
/* f06fe78: 2401000f */ addiu $at,$zero,0xf
/* f06fe7c: 14410005 */ bne $v0,$at,.L0f06fe94
/* f06fe80: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06fe84: 9338005f */ lbu $t8,0x5f($t9)
/* f06fe88: 24070001 */ addiu $a3,$zero,0x1
/* f06fe8c: 50f8000d */ beql $a3,$t8,.L0f06fec4
/* f06fe90: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06fe94:
/* f06fe94: 14c20005 */ bne $a2,$v0,.L0f06feac
/* f06fe98: 24070001 */ addiu $a3,$zero,0x1
/* f06fe9c: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06fea0: 91ee005f */ lbu $t6,0x5f($t7)
/* f06fea4: 50ee0007 */ beql $a3,$t6,.L0f06fec4
/* f06fea8: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06feac:
/* f06feac: 14a200af */ bne $a1,$v0,.L0f07016c
/* f06feb0: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f06feb4: 9338005f */ lbu $t8,0x5f($t9)
/* f06feb8: 54f800ad */ bnel $a3,$t8,.L0f070170
/* f06febc: 24010056 */ addiu $at,$zero,0x56
.L0f06fec0:
/* f06fec0: 8faf01a8 */ lw $t7,0x1a8($sp)
.L0f06fec4:
/* f06fec4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fec8: 24070001 */ addiu $a3,$zero,0x1
/* f06fecc: 85e30062 */ lh $v1,0x62($t7)
/* f06fed0: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fed4: 28610002 */ slti $at,$v1,0x2
/* f06fed8: 1420000e */ bnez $at,.L0f06ff14
/* f06fedc: 00000000 */ nop
/* f06fee0: 8dae0034 */ lw $t6,0x34($t5)
/* f06fee4: 01e02025 */ or $a0,$t7,$zero
/* f06fee8: 006ec823 */ subu $t9,$v1,$t6
/* f06feec: 2b210002 */ slti $at,$t9,0x2
/* f06fef0: a5f90062 */ sh $t9,0x62($t7)
/* f06fef4: 10200025 */ beqz $at,.L0f06ff8c
/* f06fef8: 03201825 */ or $v1,$t9,$zero
/* f06fefc: 0fc22ad9 */ jal weaponRegisterProxy
/* f06ff00: a5e70062 */ sh $a3,0x62($t7)
/* f06ff04: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06ff08: 2405001f */ addiu $a1,$zero,0x1f
/* f06ff0c: 1000001f */ b .L0f06ff8c
/* f06ff10: 87030062 */ lh $v1,0x62($t8)
.L0f06ff14:
/* f06ff14: 14e3001d */ bne $a3,$v1,.L0f06ff8c
/* f06ff18: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06ff1c: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06ff20: 8dae0284 */ lw $t6,0x284($t5)
/* f06ff24: 8fb901b0 */ lw $t9,0x1b0($sp)
/* f06ff28: 3c017f1b */ lui $at,%hi(var7f1aa2c0)
/* f06ff2c: 8dc200bc */ lw $v0,0xbc($t6)
/* f06ff30: c7240008 */ lwc1 $f4,0x8($t9)
/* f06ff34: c728000c */ lwc1 $f8,0xc($t9)
/* f06ff38: c44a0008 */ lwc1 $f10,0x8($v0)
/* f06ff3c: c446000c */ lwc1 $f6,0xc($v0)
/* f06ff40: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f06ff44: 46045001 */ sub.s $f0,$f10,$f4
/* f06ff48: c7240010 */ lwc1 $f4,0x10($t9)
/* f06ff4c: c44a0010 */ lwc1 $f10,0x10($v0)
/* f06ff50: 46083081 */ sub.s $f2,$f6,$f8
/* f06ff54: 46000182 */ mul.s $f6,$f0,$f0
/* f06ff58: 24420008 */ addiu $v0,$v0,0x8
/* f06ff5c: 46045301 */ sub.s $f12,$f10,$f4
/* f06ff60: 46021202 */ mul.s $f8,$f2,$f2
/* f06ff64: 46083280 */ add.s $f10,$f6,$f8
/* f06ff68: 460c6102 */ mul.s $f4,$f12,$f12
/* f06ff6c: c428a2c0 */ lwc1 $f8,%lo(var7f1aa2c0)($at)
/* f06ff70: 46045180 */ add.s $f6,$f10,$f4
/* f06ff74: 4608303c */ c.lt.s $f6,$f8
/* f06ff78: 00000000 */ nop
/* f06ff7c: 45000003 */ bc1f .L0f06ff8c
/* f06ff80: 00000000 */ nop
/* f06ff84: a5e00062 */ sh $zero,0x62($t7)
/* f06ff88: 00001825 */ or $v1,$zero,$zero
.L0f06ff8c:
/* f06ff8c: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06ff90: 1460017f */ bnez $v1,.L0f070590
/* f06ff94: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06ff98: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f06ff9c: 2401000f */ addiu $at,$zero,0xf
/* f06ffa0: 9302005c */ lbu $v0,0x5c($t8)
/* f06ffa4: 54a2005e */ bnel $a1,$v0,.L0f070120
/* f06ffa8: 8e18000c */ lw $t8,0xc($s0)
/* f06ffac: 8e040040 */ lw $a0,0x40($s0)
/* f06ffb0: 8daf0318 */ lw $t7,0x318($t5)
/* f06ffb4: 3c01f000 */ lui $at,0xf000
/* f06ffb8: 00817024 */ and $t6,$a0,$at
/* f06ffbc: 00002825 */ or $a1,$zero,$zero
/* f06ffc0: 11e00006 */ beqz $t7,.L0f06ffdc
/* f06ffc4: 000e2702 */ srl $a0,$t6,0x1c
/* f06ffc8: 0fc63410 */ jal mpGetChrFromPlayerIndex
/* f06ffcc: afa00154 */ sw $zero,0x154($sp)
/* f06ffd0: 10400002 */ beqz $v0,.L0f06ffdc
/* f06ffd4: 8fa50154 */ lw $a1,0x154($sp)
/* f06ffd8: 8c45001c */ lw $a1,0x1c($v0)
.L0f06ffdc:
/* f06ffdc: 8fa601b0 */ lw $a2,0x1b0($sp)
/* f06ffe0: 0fc0287e */ jal nbombCreateStorm
/* f06ffe4: 24c40008 */ addiu $a0,$a2,0x8
/* f06ffe8: 0fc10e62 */ jal propUnsetDangerous
/* f06ffec: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f06fff0: 8e0e0040 */ lw $t6,0x40($s0)
/* f06fff4: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f06fff8: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f06fffc: 35d90004 */ ori $t9,$t6,0x4
/* f070000: ae190040 */ sw $t9,0x40($s0)
/* f070004: 8dab006c */ lw $t3,0x6c($t5)
/* f070008: 00004025 */ or $t0,$zero,$zero
/* f07000c: 00003025 */ or $a2,$zero,$zero
/* f070010: 11600003 */ beqz $t3,.L0f070020
/* f070014: 00002025 */ or $a0,$zero,$zero
/* f070018: 10000001 */ b .L0f070020
/* f07001c: 24060001 */ addiu $a2,$zero,0x1
.L0f070020:
/* f070020: 8daa0068 */ lw $t2,0x68($t5)
/* f070024: 00001025 */ or $v0,$zero,$zero
/* f070028: 00002825 */ or $a1,$zero,$zero
/* f07002c: 11400003 */ beqz $t2,.L0f07003c
/* f070030: 0008c880 */ sll $t9,$t0,0x2
/* f070034: 10000001 */ b .L0f07003c
/* f070038: 24040001 */ addiu $a0,$zero,0x1
.L0f07003c:
/* f07003c: 8da90064 */ lw $t1,0x64($t5)
/* f070040: 01b91821 */ addu $v1,$t5,$t9
/* f070044: 240c0003 */ addiu $t4,$zero,0x3
/* f070048: 11200003 */ beqz $t1,.L0f070058
/* f07004c: 00000000 */ nop
/* f070050: 10000001 */ b .L0f070058
/* f070054: 24020001 */ addiu $v0,$zero,0x1
.L0f070058:
/* f070058: 8da70070 */ lw $a3,0x70($t5)
/* f07005c: 10e00003 */ beqz $a3,.L0f07006c
/* f070060: 00000000 */ nop
/* f070064: 10000001 */ b .L0f07006c
/* f070068: 24050001 */ addiu $a1,$zero,0x1
.L0f07006c:
/* f07006c: 00a27821 */ addu $t7,$a1,$v0
/* f070070: 01e4c021 */ addu $t8,$t7,$a0
/* f070074: 03067021 */ addu $t6,$t8,$a2
/* f070078: 59c00146 */ blezl $t6,.L0f070594
/* f07007c: 8e190010 */ lw $t9,0x10($s0)
/* f070080: 8c620064 */ lw $v0,0x64($v1)
.L0f070084:
/* f070084: 25080001 */ addiu $t0,$t0,0x1
/* f070088: 00003025 */ or $a2,$zero,$zero
/* f07008c: 8c4f0264 */ lw $t7,0x264($v0)
/* f070090: 00002025 */ or $a0,$zero,$zero
/* f070094: 00002825 */ or $a1,$zero,$zero
/* f070098: 160f0008 */ bne $s0,$t7,.L0f0700bc
/* f07009c: 00000000 */ nop
/* f0700a0: ac400264 */ sw $zero,0x264($v0)
/* f0700a4: 8c780064 */ lw $t8,0x64($v1)
/* f0700a8: a70c0010 */ sh $t4,0x10($t8)
/* f0700ac: 8da70070 */ lw $a3,0x70($t5)
/* f0700b0: 8da90064 */ lw $t1,0x64($t5)
/* f0700b4: 8daa0068 */ lw $t2,0x68($t5)
/* f0700b8: 8dab006c */ lw $t3,0x6c($t5)
.L0f0700bc:
/* f0700bc: 11600003 */ beqz $t3,.L0f0700cc
/* f0700c0: 24630004 */ addiu $v1,$v1,0x4
/* f0700c4: 10000001 */ b .L0f0700cc
/* f0700c8: 24060001 */ addiu $a2,$zero,0x1
.L0f0700cc:
/* f0700cc: 11400003 */ beqz $t2,.L0f0700dc
/* f0700d0: 00001025 */ or $v0,$zero,$zero
/* f0700d4: 10000001 */ b .L0f0700dc
/* f0700d8: 24040001 */ addiu $a0,$zero,0x1
.L0f0700dc:
/* f0700dc: 11200003 */ beqz $t1,.L0f0700ec
/* f0700e0: 00000000 */ nop
/* f0700e4: 10000001 */ b .L0f0700ec
/* f0700e8: 24020001 */ addiu $v0,$zero,0x1
.L0f0700ec:
/* f0700ec: 10e00003 */ beqz $a3,.L0f0700fc
/* f0700f0: 00000000 */ nop
/* f0700f4: 10000001 */ b .L0f0700fc
/* f0700f8: 24050001 */ addiu $a1,$zero,0x1
.L0f0700fc:
/* f0700fc: 00a27021 */ addu $t6,$a1,$v0
/* f070100: 01c4c821 */ addu $t9,$t6,$a0
/* f070104: 03267821 */ addu $t7,$t9,$a2
/* f070108: 010f082a */ slt $at,$t0,$t7
/* f07010c: 5420ffdd */ bnezl $at,.L0f070084
/* f070110: 8c620064 */ lw $v0,0x64($v1)
/* f070114: 1000011f */ b .L0f070594
/* f070118: 8e190010 */ lw $t9,0x10($s0)
/* f07011c: 8e18000c */ lw $t8,0xc($s0)
.L0f070120:
/* f070120: 2405000d */ addiu $a1,$zero,0xd
/* f070124: 00187000 */ sll $t6,$t8,0x0
/* f070128: 05c10003 */ bgez $t6,.L0f070138
/* f07012c: 00000000 */ nop
/* f070130: 10000001 */ b .L0f070138
/* f070134: 24050011 */ addiu $a1,$zero,0x11
.L0f070138:
/* f070138: 14410002 */ bne $v0,$at,.L0f070144
/* f07013c: 00000000 */ nop
/* f070140: 24050017 */ addiu $a1,$zero,0x17
.L0f070144:
/* f070144: 0fc1bcc5 */ jal propExplode
/* f070148: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f07014c: 10400110 */ beqz $v0,.L0f070590
/* f070150: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f070154: 2419ffff */ addiu $t9,$zero,-1
/* f070158: a5f90062 */ sh $t9,0x62($t7)
/* f07015c: 8e180040 */ lw $t8,0x40($s0)
/* f070160: 370e0004 */ ori $t6,$t8,0x4
/* f070164: 1000010a */ b .L0f070590
/* f070168: ae0e0040 */ sw $t6,0x40($s0)
.L0f07016c:
/* f07016c: 24010056 */ addiu $at,$zero,0x56
.L0f070170:
/* f070170: 54410108 */ bnel $v0,$at,.L0f070594
/* f070174: 8e190010 */ lw $t9,0x10($s0)
/* f070178: 8fb901a8 */ lw $t9,0x1a8($sp)
/* f07017c: 87230062 */ lh $v1,0x62($t9)
/* f070180: 28610002 */ slti $at,$v1,0x2
/* f070184: 14200099 */ bnez $at,.L0f0703ec
/* f070188: 00000000 */ nop
/* f07018c: 0fc1a2aa */ jal modelFindBboxRodata
/* f070190: 8e040018 */ lw $a0,0x18($s0)
/* f070194: 8faf01a8 */ lw $t7,0x1a8($sp)
/* f070198: 3c014140 */ lui $at,0x4140
/* f07019c: 44811000 */ mtc1 $at,$f2
/* f0701a0: 85e30062 */ lh $v1,0x62($t7)
/* f0701a4: 3c017f1b */ lui $at,%hi(var7f1aa2c4)
/* f0701a8: c42ea2c4 */ lwc1 $f14,%lo(var7f1aa2c4)($at)
/* f0701ac: 2463ffff */ addiu $v1,$v1,-1
/* f0701b0: 44835000 */ mtc1 $v1,$f10
/* f0701b4: 2861000c */ slti $at,$v1,0xc
/* f0701b8: 24070001 */ addiu $a3,$zero,0x1
/* f0701bc: 46805120 */ cvt.s.w $f4,$f10
/* f0701c0: 00403025 */ or $a2,$v0,$zero
/* f0701c4: 24780001 */ addiu $t8,$v1,0x1
/* f0701c8: 306e0001 */ andi $t6,$v1,0x1
/* f0701cc: 27a500b8 */ addiu $a1,$sp,0xb8
/* f0701d0: 46022183 */ div.s $f6,$f4,$f2
/* f0701d4: 460e3002 */ mul.s $f0,$f6,$f14
/* f0701d8: 10200007 */ beqz $at,.L0f0701f8
/* f0701dc: 46000306 */ mov.s $f12,$f0
/* f0701e0: 44984000 */ mtc1 $t8,$f8
/* f0701e4: 00000000 */ nop
/* f0701e8: 468042a0 */ cvt.s.w $f10,$f8
/* f0701ec: 46025103 */ div.s $f4,$f10,$f2
/* f0701f0: 46047182 */ mul.s $f6,$f14,$f4
/* f0701f4: 46060300 */ add.s $f12,$f0,$f6
.L0f0701f8:
/* f0701f8: 14ee0002 */ bne $a3,$t6,.L0f070204
/* f0701fc: 00000000 */ nop
/* f070200: 46006307 */ neg.s $f12,$f12
.L0f070204:
/* f070204: 0c0058dd */ jal mtx4LoadYRotation
/* f070208: afa60140 */ sw $a2,0x140($sp)
/* f07020c: 8e030048 */ lw $v1,0x48($s0)
/* f070210: 8fa60140 */ lw $a2,0x140($sp)
/* f070214: 8fb901b0 */ lw $t9,0x1b0($sp)
/* f070218: 50600040 */ beqzl $v1,.L0f07031c
/* f07021c: 44808000 */ mtc1 $zero,$f16
/* f070220: 8f220018 */ lw $v0,0x18($t9)
/* f070224: 5040006e */ beqzl $v0,.L0f0703e0
/* f070228: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f07022c: 904f0000 */ lbu $t7,0x0($v0)
/* f070230: 24010003 */ addiu $at,$zero,0x3
/* f070234: 24640004 */ addiu $a0,$v1,0x4
/* f070238: 11e10068 */ beq $t7,$at,.L0f0703dc
/* f07023c: 27a500f8 */ addiu $a1,$sp,0xf8
/* f070240: 0c005746 */ jal mtx4Copy
/* f070244: afa60140 */ sw $a2,0x140($sp)
/* f070248: 44800000 */ mtc1 $zero,$f0
/* f07024c: 8fa40140 */ lw $a0,0x140($sp)
/* f070250: e7a0012c */ swc1 $f0,0x12c($sp)
/* f070254: e7a00128 */ swc1 $f0,0x128($sp)
/* f070258: e7a00114 */ swc1 $f0,0x114($sp)
/* f07025c: e7a00104 */ swc1 $f0,0x104($sp)
/* f070260: e7a00070 */ swc1 $f0,0x70($sp)
/* f070264: e7a00060 */ swc1 $f0,0x60($sp)
/* f070268: e7a0006c */ swc1 $f0,0x6c($sp)
/* f07026c: e7a00130 */ swc1 $f0,0x130($sp)
/* f070270: e7a00124 */ swc1 $f0,0x124($sp)
/* f070274: 0fc199f5 */ jal objGetLocalZMax
/* f070278: e7a00064 */ swc1 $f0,0x64($sp)
/* f07027c: e7a00068 */ swc1 $f0,0x68($sp)
/* f070280: e7a00074 */ swc1 $f0,0x74($sp)
/* f070284: 27a400f8 */ addiu $a0,$sp,0xf8
/* f070288: 27a500b8 */ addiu $a1,$sp,0xb8
/* f07028c: 0c005680 */ jal mtx4MultMtx4
/* f070290: 27a60078 */ addiu $a2,$sp,0x78
/* f070294: 27a400f8 */ addiu $a0,$sp,0xf8
/* f070298: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f07029c: 27a5006c */ addiu $a1,$sp,0x6c
/* f0702a0: 27a40078 */ addiu $a0,$sp,0x78
/* f0702a4: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f0702a8: 27a50060 */ addiu $a1,$sp,0x60
/* f0702ac: c7a80060 */ lwc1 $f8,0x60($sp)
/* f0702b0: c7aa006c */ lwc1 $f10,0x6c($sp)
/* f0702b4: 8e180048 */ lw $t8,0x48($s0)
/* f0702b8: 27a40078 */ addiu $a0,$sp,0x78
/* f0702bc: 460a4101 */ sub.s $f4,$f8,$f10
/* f0702c0: c7060034 */ lwc1 $f6,0x34($t8)
/* f0702c4: c7aa0064 */ lwc1 $f10,0x64($sp)
/* f0702c8: 46043201 */ sub.s $f8,$f6,$f4
/* f0702cc: c7a60070 */ lwc1 $f6,0x70($sp)
/* f0702d0: e7a800a8 */ swc1 $f8,0xa8($sp)
/* f0702d4: 8e0e0048 */ lw $t6,0x48($s0)
/* f0702d8: 46065101 */ sub.s $f4,$f10,$f6
/* f0702dc: c7a60068 */ lwc1 $f6,0x68($sp)
/* f0702e0: c5c80038 */ lwc1 $f8,0x38($t6)
/* f0702e4: 46044281 */ sub.s $f10,$f8,$f4
/* f0702e8: c7a80074 */ lwc1 $f8,0x74($sp)
/* f0702ec: e7aa00ac */ swc1 $f10,0xac($sp)
/* f0702f0: 8e190048 */ lw $t9,0x48($s0)
/* f0702f4: 46083101 */ sub.s $f4,$f6,$f8
/* f0702f8: c72a003c */ lwc1 $f10,0x3c($t9)
/* f0702fc: 46045181 */ sub.s $f6,$f10,$f4
/* f070300: e7a600b0 */ swc1 $f6,0xb0($sp)
/* f070304: 8e050048 */ lw $a1,0x48($s0)
/* f070308: 0c005746 */ jal mtx4Copy
/* f07030c: 24a50004 */ addiu $a1,$a1,0x4
/* f070310: 10000033 */ b .L0f0703e0
/* f070314: 8fb801a8 */ lw $t8,0x1a8($sp)
/* f070318: 44808000 */ mtc1 $zero,$f16
.L0f07031c:
/* f07031c: 00c02025 */ or $a0,$a2,$zero
/* f070320: e7b00070 */ swc1 $f16,0x70($sp)
/* f070324: e7b00060 */ swc1 $f16,0x60($sp)
/* f070328: e7b0006c */ swc1 $f16,0x6c($sp)
/* f07032c: 0fc199f5 */ jal objGetLocalZMax
/* f070330: e7b00064 */ swc1 $f16,0x64($sp)
/* f070334: 2604001c */ addiu $a0,$s0,0x1c
/* f070338: e7a00068 */ swc1 $f0,0x68($sp)
/* f07033c: e7a00074 */ swc1 $f0,0x74($sp)
/* f070340: afa40038 */ sw $a0,0x38($sp)
/* f070344: 0c005755 */ jal mtx3ToMtx4
/* f070348: 27a500f8 */ addiu $a1,$sp,0xf8
/* f07034c: 27a400f8 */ addiu $a0,$sp,0xf8
/* f070350: 27a500b8 */ addiu $a1,$sp,0xb8
/* f070354: 0c005680 */ jal mtx4MultMtx4
/* f070358: 27a60078 */ addiu $a2,$sp,0x78
/* f07035c: 27a40078 */ addiu $a0,$sp,0x78
/* f070360: 0c005768 */ jal mtx4ToMtx3
/* f070364: 8fa50038 */ lw $a1,0x38($sp)
/* f070368: 27a400f8 */ addiu $a0,$sp,0xf8
/* f07036c: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f070370: 27a5006c */ addiu $a1,$sp,0x6c
/* f070374: 27a40078 */ addiu $a0,$sp,0x78
/* f070378: 0c0056c4 */ jal mtx4RotateVecInPlace
/* f07037c: 27a50060 */ addiu $a1,$sp,0x60
/* f070380: c7a80060 */ lwc1 $f8,0x60($sp)
/* f070384: c7aa006c */ lwc1 $f10,0x6c($sp)
/* f070388: 8faf01b0 */ lw $t7,0x1b0($sp)
/* f07038c: 02002025 */ or $a0,$s0,$zero
/* f070390: 460a4101 */ sub.s $f4,$f8,$f10
/* f070394: c5e60008 */ lwc1 $f6,0x8($t7)
/* f070398: 00002825 */ or $a1,$zero,$zero
/* f07039c: 24060001 */ addiu $a2,$zero,0x1
/* f0703a0: 46043201 */ sub.s $f8,$f6,$f4
/* f0703a4: e5e80008 */ swc1 $f8,0x8($t7)
/* f0703a8: c7a60070 */ lwc1 $f6,0x70($sp)
/* f0703ac: c7aa0064 */ lwc1 $f10,0x64($sp)
/* f0703b0: c5e8000c */ lwc1 $f8,0xc($t7)
/* f0703b4: 46065101 */ sub.s $f4,$f10,$f6
/* f0703b8: 46044281 */ sub.s $f10,$f8,$f4
/* f0703bc: e5ea000c */ swc1 $f10,0xc($t7)
/* f0703c0: c7a80074 */ lwc1 $f8,0x74($sp)
/* f0703c4: c7a60068 */ lwc1 $f6,0x68($sp)
/* f0703c8: c5ea0010 */ lwc1 $f10,0x10($t7)
/* f0703cc: 46083101 */ sub.s $f4,$f6,$f8
/* f0703d0: 46045181 */ sub.s $f6,$f10,$f4
/* f0703d4: 0fc1a71c */ jal func0f069c70
/* f0703d8: e5e60010 */ swc1 $f6,0x10($t7)
.L0f0703dc:
/* f0703dc: 8fb801a8 */ lw $t8,0x1a8($sp)
.L0f0703e0:
/* f0703e0: 870e0062 */ lh $t6,0x62($t8)
/* f0703e4: 25c3ffff */ addiu $v1,$t6,-1
/* f0703e8: a7030062 */ sh $v1,0x62($t8)
.L0f0703ec:
/* f0703ec: 04610023 */ bgez $v1,.L0f07047c
/* f0703f0: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f0703f4: 8e030048 */ lw $v1,0x48($s0)
/* f0703f8: 8fa401b0 */ lw $a0,0x1b0($sp)
/* f0703fc: 0fc2bb15 */ jal boltbeamFindByProp
/* f070400: afa3005c */ sw $v1,0x5c($sp)
/* f070404: 2401ffff */ addiu $at,$zero,-1
/* f070408: 8fa3005c */ lw $v1,0x5c($sp)
/* f07040c: 10410019 */ beq $v0,$at,.L0f070474
/* f070410: 00402025 */ or $a0,$v0,$zero
/* f070414: 8fa501b0 */ lw $a1,0x1b0($sp)
/* f070418: afa3005c */ sw $v1,0x5c($sp)
/* f07041c: afa20058 */ sw $v0,0x58($sp)
/* f070420: 0fc2bb5c */ jal boltbeamSetTailPos
/* f070424: 24a50008 */ addiu $a1,$a1,0x8
/* f070428: 3c05453b */ lui $a1,0x453b
/* f07042c: 34a58000 */ ori $a1,$a1,0x8000
/* f070430: 8fa40058 */ lw $a0,0x58($sp)
/* f070434: 0fc2bb69 */ jal boltbeamIncrementHeadPos
/* f070438: 00003025 */ or $a2,$zero,$zero
/* f07043c: 8fa3005c */ lw $v1,0x5c($sp)
/* f070440: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f070444: 3c0544af */ lui $a1,0x44af
/* f070448: 10600005 */ beqz $v1,.L0f070460
/* f07044c: 00000000 */ nop
/* f070450: 8c6f0090 */ lw $t7,0x90($v1)
/* f070454: 19e00002 */ blez $t7,.L0f070460
/* f070458: 00000000 */ nop
/* f07045c: 00001825 */ or $v1,$zero,$zero
.L0f070460:
/* f070460: 14600004 */ bnez $v1,.L0f070474
/* f070464: 00000000 */ nop
/* f070468: a5c00062 */ sh $zero,0x62($t6)
/* f07046c: 0fc2bbaa */ jal boltbeamSetAutomatic
/* f070470: 8fa40058 */ lw $a0,0x58($sp)
.L0f070474:
/* f070474: 10000047 */ b .L0f070594
/* f070478: 8e190010 */ lw $t9,0x10($s0)
.L0f07047c:
/* f07047c: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f070480: 8dab006c */ lw $t3,0x6c($t5)
/* f070484: 00004025 */ or $t0,$zero,$zero
/* f070488: 00003025 */ or $a2,$zero,$zero
/* f07048c: 11600003 */ beqz $t3,.L0f07049c
/* f070490: 00002025 */ or $a0,$zero,$zero
/* f070494: 10000001 */ b .L0f07049c
/* f070498: 24060001 */ addiu $a2,$zero,0x1
.L0f07049c:
/* f07049c: 8daa0068 */ lw $t2,0x68($t5)
/* f0704a0: 00001025 */ or $v0,$zero,$zero
/* f0704a4: 00002825 */ or $a1,$zero,$zero
/* f0704a8: 11400003 */ beqz $t2,.L0f0704b8
/* f0704ac: 00087080 */ sll $t6,$t0,0x2
/* f0704b0: 10000001 */ b .L0f0704b8
/* f0704b4: 24040001 */ addiu $a0,$zero,0x1
.L0f0704b8:
/* f0704b8: 8da90064 */ lw $t1,0x64($t5)
/* f0704bc: 01ae1821 */ addu $v1,$t5,$t6
/* f0704c0: 240c0003 */ addiu $t4,$zero,0x3
/* f0704c4: 11200003 */ beqz $t1,.L0f0704d4
/* f0704c8: 00000000 */ nop
/* f0704cc: 10000001 */ b .L0f0704d4
/* f0704d0: 24020001 */ addiu $v0,$zero,0x1
.L0f0704d4:
/* f0704d4: 8da70070 */ lw $a3,0x70($t5)
/* f0704d8: 10e00003 */ beqz $a3,.L0f0704e8
/* f0704dc: 00000000 */ nop
/* f0704e0: 10000001 */ b .L0f0704e8
/* f0704e4: 24050001 */ addiu $a1,$zero,0x1
.L0f0704e8:
/* f0704e8: 00a2c021 */ addu $t8,$a1,$v0
/* f0704ec: 0304c821 */ addu $t9,$t8,$a0
/* f0704f0: 03267821 */ addu $t7,$t9,$a2
/* f0704f4: 59e00027 */ blezl $t7,.L0f070594
/* f0704f8: 8e190010 */ lw $t9,0x10($s0)
/* f0704fc: 8c620064 */ lw $v0,0x64($v1)
.L0f070500:
/* f070500: 25080001 */ addiu $t0,$t0,0x1
/* f070504: 00003025 */ or $a2,$zero,$zero
/* f070508: 8c580264 */ lw $t8,0x264($v0)
/* f07050c: 00002025 */ or $a0,$zero,$zero
/* f070510: 00002825 */ or $a1,$zero,$zero
/* f070514: 16180008 */ bne $s0,$t8,.L0f070538
/* f070518: 00000000 */ nop
/* f07051c: ac400264 */ sw $zero,0x264($v0)
/* f070520: 8c790064 */ lw $t9,0x64($v1)
/* f070524: a72c0010 */ sh $t4,0x10($t9)
/* f070528: 8da70070 */ lw $a3,0x70($t5)
/* f07052c: 8da90064 */ lw $t1,0x64($t5)
/* f070530: 8daa0068 */ lw $t2,0x68($t5)
/* f070534: 8dab006c */ lw $t3,0x6c($t5)
.L0f070538:
/* f070538: 11600003 */ beqz $t3,.L0f070548
/* f07053c: 24630004 */ addiu $v1,$v1,0x4
/* f070540: 10000001 */ b .L0f070548
/* f070544: 24060001 */ addiu $a2,$zero,0x1
.L0f070548:
/* f070548: 11400003 */ beqz $t2,.L0f070558
/* f07054c: 00001025 */ or $v0,$zero,$zero
/* f070550: 10000001 */ b .L0f070558
/* f070554: 24040001 */ addiu $a0,$zero,0x1
.L0f070558:
/* f070558: 11200003 */ beqz $t1,.L0f070568
/* f07055c: 00000000 */ nop
/* f070560: 10000001 */ b .L0f070568
/* f070564: 24020001 */ addiu $v0,$zero,0x1
.L0f070568:
/* f070568: 10e00003 */ beqz $a3,.L0f070578
/* f07056c: 00000000 */ nop
/* f070570: 10000001 */ b .L0f070578
/* f070574: 24050001 */ addiu $a1,$zero,0x1
.L0f070578:
/* f070578: 00a27821 */ addu $t7,$a1,$v0
/* f07057c: 01e47021 */ addu $t6,$t7,$a0
/* f070580: 01c6c021 */ addu $t8,$t6,$a2
/* f070584: 0118082a */ slt $at,$t0,$t8
/* f070588: 5420ffdd */ bnezl $at,.L0f070500
/* f07058c: 8c620064 */ lw $v0,0x64($v1)
.L0f070590:
/* f070590: 8e190010 */ lw $t9,0x10($s0)
.L0f070594:
/* f070594: 3c0d800a */ lui $t5,%hi(g_Vars)
/* f070598: 25ad9fc0 */ addiu $t5,$t5,%lo(g_Vars)
/* f07059c: 332f0100 */ andi $t7,$t9,0x100
/* f0705a0: 11e0000a */ beqz $t7,.L0f0705cc
/* f0705a4: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f0705a8: 81d80060 */ lb $t8,0x60($t6)
/* f0705ac: 8db90038 */ lw $t9,0x38($t5)
/* f0705b0: 03197823 */ subu $t7,$t8,$t9
/* f0705b4: 1de00005 */ bgtz $t7,.L0f0705cc
/* f0705b8: a1cf0060 */ sb $t7,0x60($t6)
/* f0705bc: a1c00060 */ sb $zero,0x60($t6)
/* f0705c0: 8e180040 */ lw $t8,0x40($s0)
/* f0705c4: 37190004 */ ori $t9,$t8,0x4
/* f0705c8: ae190040 */ sw $t9,0x40($s0)
.L0f0705cc:
/* f0705cc: 8e0f0010 */ lw $t7,0x10($s0)
/* f0705d0: 8fb801b0 */ lw $t8,0x1b0($sp)
/* f0705d4: 31ee0080 */ andi $t6,$t7,0x80
/* f0705d8: 51c00014 */ beqzl $t6,.L0f07062c
/* f0705dc: 8fbf001c */ lw $ra,0x1c($sp)
/* f0705e0: 93190001 */ lbu $t9,0x1($t8)
/* f0705e4: 332f0002 */ andi $t7,$t9,0x2
/* f0705e8: 51e00010 */ beqzl $t7,.L0f07062c
/* f0705ec: 8fbf001c */ lw $ra,0x1c($sp)
/* f0705f0: 8dae043c */ lw $t6,0x43c($t5)
/* f0705f4: 25d80001 */ addiu $t8,$t6,0x1
/* f0705f8: 2b010015 */ slti $at,$t8,0x15
/* f0705fc: 1420000a */ bnez $at,.L0f070628
/* f070600: adb8043c */ sw $t8,0x43c($t5)
/* f070604: 8fae01a8 */ lw $t6,0x1a8($sp)
/* f070608: 240f003c */ addiu $t7,$zero,0x3c
/* f07060c: 2401ff7f */ addiu $at,$zero,-129
/* f070610: a1cf0060 */ sb $t7,0x60($t6)
/* f070614: 8e180010 */ lw $t8,0x10($s0)
/* f070618: 0301c824 */ and $t9,$t8,$at
/* f07061c: ae190010 */ sw $t9,0x10($s0)
/* f070620: 372e0100 */ ori $t6,$t9,0x100
/* f070624: ae0e0010 */ sw $t6,0x10($s0)
.L0f070628:
/* f070628: 8fbf001c */ lw $ra,0x1c($sp)
.L0f07062c:
/* f07062c: 8fb00018 */ lw $s0,0x18($sp)
/* f070630: 27bd01b0 */ addiu $sp,$sp,0x1b0
/* f070634: 03e00008 */ jr $ra
/* f070638: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel weaponTick
.late_rodata
glabel var7f1aa2c0
.word 0x47742400
glabel var7f1aa2c4
.word 0x3cd67750
.text
/* f06e7b0: 27bdfe88 */ addiu $sp,$sp,-376
/* f06e7b4: afbf0014 */ sw $ra,0x14($sp)
/* f06e7b8: afa40178 */ sw $a0,0x178($sp)
/* f06e7bc: 8c820004 */ lw $v0,0x4($a0)
/* f06e7c0: 2406001e */ addiu $a2,$zero,0x1e
/* f06e7c4: afa20174 */ sw $v0,0x174($sp)
/* f06e7c8: 904f005c */ lbu $t7,0x5c($v0)
/* f06e7cc: 00403825 */ or $a3,$v0,$zero
/* f06e7d0: 54cf0005 */ bnel $a2,$t7,.NB0f06e7e8
/* f06e7d4: 90e2005c */ lbu $v0,0x5c($a3)
/* f06e7d8: 9058005f */ lbu $t8,0x5f($v0)
/* f06e7dc: 53000006 */ beqzl $t8,.NB0f06e7f8
/* f06e7e0: 84e30062 */ lh $v1,0x62($a3)
/* f06e7e4: 90e2005c */ lbu $v0,0x5c($a3)
.NB0f06e7e8:
/* f06e7e8: 24010054 */ addiu $at,$zero,0x54
/* f06e7ec: 54410092 */ bnel $v0,$at,.NB0f06ea38
/* f06e7f0: 2405001f */ addiu $a1,$zero,0x1f
/* f06e7f4: 84e30062 */ lh $v1,0x62($a3)
.NB0f06e7f8:
/* f06e7f8: 90e2005c */ lbu $v0,0x5c($a3)
/* f06e7fc: 24010054 */ addiu $at,$zero,0x54
/* f06e800: 0462008d */ bltzl $v1,.NB0f06ea38
/* f06e804: 2405001f */ addiu $a1,$zero,0x1f
/* f06e808: 1441005f */ bne $v0,$at,.NB0f06e988
/* f06e80c: 3c09800a */ lui $t1,0x800a
/* f06e810: 90f9005f */ lbu $t9,0x5f($a3)
/* f06e814: 24080001 */ addiu $t0,$zero,0x1
/* f06e818: 1519005b */ bne $t0,$t9,.NB0f06e988
/* f06e81c: 00000000 */ sll $zero,$zero,0x0
/* f06e820: 18600059 */ blez $v1,.NB0f06e988
/* f06e824: 28610002 */ slti $at,$v1,0x2
/* f06e828: 142002d2 */ bnez $at,.NB0f06f374
/* f06e82c: 3c09800a */ lui $t1,0x800a
/* f06e830: 8d29e6f4 */ lw $t1,-0x190c($t1)
/* f06e834: 3c0d8007 */ lui $t5,0x8007
/* f06e838: 25adc0fc */ addiu $t5,$t5,-16132
/* f06e83c: 00695023 */ subu $t2,$v1,$t1
/* f06e840: a4ea0062 */ sh $t2,0x62($a3)
/* f06e844: 84eb0062 */ lh $t3,0x62($a3)
/* f06e848: 29610008 */ slti $at,$t3,0x8
/* f06e84c: 502002ca */ beqzl $at,.NB0f06f378
/* f06e850: 8fae0174 */ lw $t6,0x174($sp)
/* f06e854: 8da10000 */ lw $at,0x0($t5)
/* f06e858: 27ac0164 */ addiu $t4,$sp,0x164
/* f06e85c: 8daf0004 */ lw $t7,0x4($t5)
/* f06e860: ad810000 */ sw $at,0x0($t4)
/* f06e864: 8da10008 */ lw $at,0x8($t5)
/* f06e868: ad8f0004 */ sw $t7,0x4($t4)
/* f06e86c: ad810008 */ sw $at,0x8($t4)
/* f06e870: afa70170 */ sw $a3,0x170($sp)
/* f06e874: afa0015c */ sw $zero,0x15c($sp)
/* f06e878: 0fc19e19 */ jal func0f0685e4
/* f06e87c: 8fa40178 */ lw $a0,0x178($sp)
/* f06e880: 8fa60174 */ lw $a2,0x174($sp)
/* f06e884: 8fa5015c */ lw $a1,0x15c($sp)
/* f06e888: 8fa70170 */ lw $a3,0x170($sp)
/* f06e88c: 8cc20040 */ lw $v0,0x40($a2)
/* f06e890: 24080001 */ addiu $t0,$zero,0x1
/* f06e894: 8faa0178 */ lw $t2,0x178($sp)
/* f06e898: 30580040 */ andi $t8,$v0,0x40
/* f06e89c: 13000004 */ beqz $t8,.NB0f06e8b0
/* f06e8a0: 30490080 */ andi $t1,$v0,0x80
/* f06e8a4: 8cd90048 */ lw $t9,0x48($a2)
/* f06e8a8: 10000004 */ beqz $zero,.NB0f06e8bc
/* f06e8ac: 8f250044 */ lw $a1,0x44($t9)
.NB0f06e8b0:
/* f06e8b0: 11200002 */ beqz $t1,.NB0f06e8bc
/* f06e8b4: 00000000 */ sll $zero,$zero,0x0
/* f06e8b8: 8cc50048 */ lw $a1,0x48($a2)
.NB0f06e8bc:
/* f06e8bc: 10a00030 */ beqz $a1,.NB0f06e980
/* f06e8c0: 24190002 */ addiu $t9,$zero,0x2
/* f06e8c4: 8d4b0018 */ lw $t3,0x18($t2)
/* f06e8c8: 01401825 */ or $v1,$t2,$zero
/* f06e8cc: 11600006 */ beqz $t3,.NB0f06e8e8
/* f06e8d0: 00000000 */ sll $zero,$zero,0x0
/* f06e8d4: 8d420018 */ lw $v0,0x18($t2)
/* f06e8d8: 00401825 */ or $v1,$v0,$zero
.NB0f06e8dc:
/* f06e8dc: 8c420018 */ lw $v0,0x18($v0)
/* f06e8e0: 5440fffe */ bnezl $v0,.NB0f06e8dc
/* f06e8e4: 00401825 */ or $v1,$v0,$zero
.NB0f06e8e8:
/* f06e8e8: 5060000d */ beqzl $v1,.NB0f06e920
/* f06e8ec: 8cad0000 */ lw $t5,0x0($a1)
/* f06e8f0: 90620000 */ lbu $v0,0x0($v1)
/* f06e8f4: 24010003 */ addiu $at,$zero,0x3
/* f06e8f8: 10410003 */ beq $v0,$at,.NB0f06e908
/* f06e8fc: 24010006 */ addiu $at,$zero,0x6
/* f06e900: 54410007 */ bnel $v0,$at,.NB0f06e920
/* f06e904: 8cad0000 */ lw $t5,0x0($a1)
.NB0f06e908:
/* f06e908: 8c620004 */ lw $v0,0x4($v1)
/* f06e90c: 8c4e0014 */ lw $t6,0x14($v0)
/* f06e910: 35cc0001 */ ori $t4,$t6,0x1
/* f06e914: 10000005 */ beqz $zero,.NB0f06e92c
/* f06e918: ac4c0014 */ sw $t4,0x14($v0)
/* f06e91c: 8cad0000 */ lw $t5,0x0($a1)
.NB0f06e920:
/* f06e920: aca00088 */ sw $zero,0x88($a1)
/* f06e924: 35af0001 */ ori $t7,$t5,0x1
/* f06e928: acaf0000 */ sw $t7,0x0($a1)
.NB0f06e92c:
/* f06e92c: a4e80062 */ sh $t0,0x62($a3)
/* f06e930: afa70170 */ sw $a3,0x170($sp)
/* f06e934: afa5015c */ sw $a1,0x15c($sp)
/* f06e938: 0fc19e45 */ jal projectileSetSticky
/* f06e93c: 8fa40178 */ lw $a0,0x178($sp)
/* f06e940: 8fa5015c */ lw $a1,0x15c($sp)
/* f06e944: c7a40164 */ lwc1 $f4,0x164($sp)
/* f06e948: 24a40020 */ addiu $a0,$a1,0x20
/* f06e94c: e4a40004 */ swc1 $f4,0x4($a1)
/* f06e950: c7a60168 */ lwc1 $f6,0x168($sp)
/* f06e954: e4a60008 */ swc1 $f6,0x8($a1)
/* f06e958: c7a8016c */ lwc1 $f8,0x16c($sp)
/* f06e95c: 0c005a28 */ jal mtx4LoadIdentity
/* f06e960: e4a8000c */ swc1 $f8,0xc($a1)
/* f06e964: 8fa5015c */ lw $a1,0x15c($sp)
/* f06e968: 8fa70170 */ lw $a3,0x170($sp)
/* f06e96c: 3c18800a */ lui $t8,0x800a
/* f06e970: aca700d4 */ sw $a3,0xd4($a1)
/* f06e974: 8f18e6cc */ lw $t8,-0x1934($t8)
/* f06e978: 1000027e */ beqz $zero,.NB0f06f374
/* f06e97c: acb800d8 */ sw $t8,0xd8($a1)
.NB0f06e980:
/* f06e980: 1000027c */ beqz $zero,.NB0f06f374
/* f06e984: a4f90062 */ sh $t9,0x62($a3)
.NB0f06e988:
/* f06e988: 8d29e6f4 */ lw $t1,-0x190c($t1)
/* f06e98c: 00695023 */ subu $t2,$v1,$t1
/* f06e990: a4ea0062 */ sh $t2,0x62($a3)
/* f06e994: 84eb0062 */ lh $t3,0x62($a3)
/* f06e998: 8fa40178 */ lw $a0,0x178($sp)
/* f06e99c: 05630276 */ bgezl $t3,.NB0f06f378
/* f06e9a0: 8fae0174 */ lw $t6,0x174($sp)
/* f06e9a4: 0fc10c55 */ jal propUnsetDangerous
/* f06e9a8: afa70170 */ sw $a3,0x170($sp)
/* f06e9ac: 8fa70170 */ lw $a3,0x170($sp)
/* f06e9b0: 24010002 */ addiu $at,$zero,0x2
/* f06e9b4: 24050015 */ addiu $a1,$zero,0x15
/* f06e9b8: 90ee005f */ lbu $t6,0x5f($a3)
/* f06e9bc: 8fac0174 */ lw $t4,0x174($sp)
/* f06e9c0: 8fa40178 */ lw $a0,0x178($sp)
/* f06e9c4: 55c10007 */ bnel $t6,$at,.NB0f06e9e4
/* f06e9c8: 8d8d000c */ lw $t5,0xc($t4)
/* f06e9cc: 8fa40178 */ lw $a0,0x178($sp)
/* f06e9d0: 0fc1b95e */ jal propExplode
/* f06e9d4: afa70170 */ sw $a3,0x170($sp)
/* f06e9d8: 1000000b */ beqz $zero,.NB0f06ea08
/* f06e9dc: 8fa70170 */ lw $a3,0x170($sp)
/* f06e9e0: 8d8d000c */ lw $t5,0xc($t4)
.NB0f06e9e4:
/* f06e9e4: 2405000d */ addiu $a1,$zero,0xd
/* f06e9e8: 000d7800 */ sll $t7,$t5,0x0
/* f06e9ec: 05e10003 */ bgez $t7,.NB0f06e9fc
/* f06e9f0: 00000000 */ sll $zero,$zero,0x0
/* f06e9f4: 10000001 */ beqz $zero,.NB0f06e9fc
/* f06e9f8: 24050011 */ addiu $a1,$zero,0x11
.NB0f06e9fc:
/* f06e9fc: 0fc1b95e */ jal propExplode
/* f06ea00: afa70170 */ sw $a3,0x170($sp)
/* f06ea04: 8fa70170 */ lw $a3,0x170($sp)
.NB0f06ea08:
/* f06ea08: 8fa20174 */ lw $v0,0x174($sp)
/* f06ea0c: 3c03800a */ lui $v1,0x800a
/* f06ea10: 8c580040 */ lw $t8,0x40($v0)
/* f06ea14: 37190004 */ ori $t9,$t8,0x4
/* f06ea18: ac590040 */ sw $t9,0x40($v0)
/* f06ea1c: 8c63e944 */ lw $v1,-0x16bc($v1)
/* f06ea20: 8c690264 */ lw $t1,0x264($v1)
/* f06ea24: 54490254 */ bnel $v0,$t1,.NB0f06f378
/* f06ea28: 8fae0174 */ lw $t6,0x174($sp)
/* f06ea2c: 10000251 */ beqz $zero,.NB0f06f374
/* f06ea30: ac600264 */ sw $zero,0x264($v1)
/* f06ea34: 2405001f */ addiu $a1,$zero,0x1f
.NB0f06ea38:
/* f06ea38: 14a20030 */ bne $a1,$v0,.NB0f06eafc
/* f06ea3c: 24010052 */ addiu $at,$zero,0x52
/* f06ea40: 90ea005f */ lbu $t2,0x5f($a3)
/* f06ea44: 1540002d */ bnez $t2,.NB0f06eafc
/* f06ea48: 00000000 */ sll $zero,$zero,0x0
/* f06ea4c: 84e30062 */ lh $v1,0x62($a3)
/* f06ea50: 3c0b800a */ lui $t3,0x800a
/* f06ea54: 04620248 */ bltzl $v1,.NB0f06f378
/* f06ea58: 8fae0174 */ lw $t6,0x174($sp)
/* f06ea5c: 8d6be6f4 */ lw $t3,-0x190c($t3)
/* f06ea60: 3c01f000 */ lui $at,0xf000
/* f06ea64: 3c19800a */ lui $t9,0x800a
/* f06ea68: 006b7023 */ subu $t6,$v1,$t3
/* f06ea6c: a4ee0062 */ sh $t6,0x62($a3)
/* f06ea70: 84ec0062 */ lh $t4,0x62($a3)
/* f06ea74: 8fad0174 */ lw $t5,0x174($sp)
/* f06ea78: 0583023f */ bgezl $t4,.NB0f06f378
/* f06ea7c: 8fae0174 */ lw $t6,0x174($sp)
/* f06ea80: 8da40040 */ lw $a0,0x40($t5)
/* f06ea84: 8f39e9d8 */ lw $t9,-0x1628($t9)
/* f06ea88: 00002825 */ or $a1,$zero,$zero
/* f06ea8c: 00817824 */ and $t7,$a0,$at
/* f06ea90: 13200008 */ beqz $t9,.NB0f06eab4
/* f06ea94: 000f2702 */ srl $a0,$t7,0x1c
/* f06ea98: afa00158 */ sw $zero,0x158($sp)
/* f06ea9c: 0fc61c91 */ jal mpGetChrFromPlayerIndex
/* f06eaa0: afa70170 */ sw $a3,0x170($sp)
/* f06eaa4: 8fa50158 */ lw $a1,0x158($sp)
/* f06eaa8: 10400002 */ beqz $v0,.NB0f06eab4
/* f06eaac: 8fa70170 */ lw $a3,0x170($sp)
/* f06eab0: 8c45001c */ lw $a1,0x1c($v0)
.NB0f06eab4:
/* f06eab4: 8fa60178 */ lw $a2,0x178($sp)
/* f06eab8: afa70170 */ sw $a3,0x170($sp)
/* f06eabc: 0fc027b2 */ jal nbombCreateStorm
/* f06eac0: 24c40008 */ addiu $a0,$a2,0x8
/* f06eac4: 0fc10c55 */ jal propUnsetDangerous
/* f06eac8: 8fa40178 */ lw $a0,0x178($sp)
/* f06eacc: 8fa20174 */ lw $v0,0x174($sp)
/* f06ead0: 8fa70170 */ lw $a3,0x170($sp)
/* f06ead4: 3c03800a */ lui $v1,0x800a
/* f06ead8: 8c4a0040 */ lw $t2,0x40($v0)
/* f06eadc: 354b0004 */ ori $t3,$t2,0x4
/* f06eae0: ac4b0040 */ sw $t3,0x40($v0)
/* f06eae4: 8c63e944 */ lw $v1,-0x16bc($v1)
/* f06eae8: 8c6e0264 */ lw $t6,0x264($v1)
/* f06eaec: 544e0222 */ bnel $v0,$t6,.NB0f06f378
/* f06eaf0: 8fae0174 */ lw $t6,0x174($sp)
/* f06eaf4: 1000021f */ beqz $zero,.NB0f06f374
/* f06eaf8: ac600264 */ sw $zero,0x264($v1)
.NB0f06eafc:
/* f06eafc: 10410005 */ beq $v0,$at,.NB0f06eb14
/* f06eb00: 24010053 */ addiu $at,$zero,0x53
/* f06eb04: 10410003 */ beq $v0,$at,.NB0f06eb14
/* f06eb08: 24010057 */ addiu $at,$zero,0x57
/* f06eb0c: 5441001c */ bnel $v0,$at,.NB0f06eb80
/* f06eb10: 24010020 */ addiu $at,$zero,0x20
.NB0f06eb14:
/* f06eb14: 84ec0062 */ lh $t4,0x62($a3)
/* f06eb18: 8fad0174 */ lw $t5,0x174($sp)
/* f06eb1c: 8fa40178 */ lw $a0,0x178($sp)
/* f06eb20: 55800215 */ bnezl $t4,.NB0f06f378
/* f06eb24: 8fae0174 */ lw $t6,0x174($sp)
/* f06eb28: 8daf000c */ lw $t7,0xc($t5)
/* f06eb2c: 2405000d */ addiu $a1,$zero,0xd
/* f06eb30: 000fc000 */ sll $t8,$t7,0x0
/* f06eb34: 07010003 */ bgez $t8,.NB0f06eb44
/* f06eb38: 00000000 */ sll $zero,$zero,0x0
/* f06eb3c: 10000001 */ beqz $zero,.NB0f06eb44
/* f06eb40: 24050011 */ addiu $a1,$zero,0x11
.NB0f06eb44:
/* f06eb44: 0fc1b95e */ jal propExplode
/* f06eb48: afa70170 */ sw $a3,0x170($sp)
/* f06eb4c: 8fa40174 */ lw $a0,0x174($sp)
/* f06eb50: 8fa70170 */ lw $a3,0x170($sp)
/* f06eb54: 3c03800a */ lui $v1,0x800a
/* f06eb58: 8c990040 */ lw $t9,0x40($a0)
/* f06eb5c: 37290004 */ ori $t1,$t9,0x4
/* f06eb60: ac890040 */ sw $t1,0x40($a0)
/* f06eb64: 8c63e944 */ lw $v1,-0x16bc($v1)
/* f06eb68: 8c6a0264 */ lw $t2,0x264($v1)
/* f06eb6c: 548a0202 */ bnel $a0,$t2,.NB0f06f378
/* f06eb70: 8fae0174 */ lw $t6,0x174($sp)
/* f06eb74: 100001ff */ beqz $zero,.NB0f06f374
/* f06eb78: ac600264 */ sw $zero,0x264($v1)
/* f06eb7c: 24010020 */ addiu $at,$zero,0x20
.NB0f06eb80:
/* f06eb80: 54410023 */ bnel $v0,$at,.NB0f06ec10
/* f06eb84: 24010022 */ addiu $at,$zero,0x22
/* f06eb88: 84e30062 */ lh $v1,0x62($a3)
/* f06eb8c: 04620020 */ bltzl $v1,.NB0f06ec10
/* f06eb90: 24010022 */ addiu $at,$zero,0x22
/* f06eb94: 90eb005f */ lbu $t3,0x5f($a3)
/* f06eb98: 3c0e800a */ lui $t6,0x800a
/* f06eb9c: 556001f6 */ bnezl $t3,.NB0f06f378
/* f06eba0: 8fae0174 */ lw $t6,0x174($sp)
/* f06eba4: 8dcee6f4 */ lw $t6,-0x190c($t6)
/* f06eba8: 006e6023 */ subu $t4,$v1,$t6
/* f06ebac: a4ec0062 */ sh $t4,0x62($a3)
/* f06ebb0: 84ed0062 */ lh $t5,0x62($a3)
/* f06ebb4: 8fa40178 */ lw $a0,0x178($sp)
/* f06ebb8: 8faf0174 */ lw $t7,0x174($sp)
/* f06ebbc: 05a301ee */ bgezl $t5,.NB0f06f378
/* f06ebc0: 8fae0174 */ lw $t6,0x174($sp)
/* f06ebc4: 8df8000c */ lw $t8,0xc($t7)
/* f06ebc8: 2405000d */ addiu $a1,$zero,0xd
/* f06ebcc: 0018c800 */ sll $t9,$t8,0x0
/* f06ebd0: 07210003 */ bgez $t9,.NB0f06ebe0
/* f06ebd4: 00000000 */ sll $zero,$zero,0x0
/* f06ebd8: 10000001 */ beqz $zero,.NB0f06ebe0
/* f06ebdc: 24050011 */ addiu $a1,$zero,0x11
.NB0f06ebe0:
/* f06ebe0: 0fc1b95e */ jal propExplode
/* f06ebe4: afa70170 */ sw $a3,0x170($sp)
/* f06ebe8: 104001e2 */ beqz $v0,.NB0f06f374
/* f06ebec: 8fa70170 */ lw $a3,0x170($sp)
/* f06ebf0: 2409ffff */ addiu $t1,$zero,-1
/* f06ebf4: a4e90062 */ sh $t1,0x62($a3)
/* f06ebf8: 8faa0174 */ lw $t2,0x174($sp)
/* f06ebfc: 8d4b0040 */ lw $t3,0x40($t2)
/* f06ec00: 356e0004 */ ori $t6,$t3,0x4
/* f06ec04: 100001db */ beqz $zero,.NB0f06f374
/* f06ec08: ad4e0040 */ sw $t6,0x40($t2)
/* f06ec0c: 24010022 */ addiu $at,$zero,0x22
.NB0f06ec10:
/* f06ec10: 54410080 */ bnel $v0,$at,.NB0f06ee14
/* f06ec14: 24010021 */ addiu $at,$zero,0x21
/* f06ec18: 3c058007 */ lui $a1,0x8007
/* f06ec1c: 24a5c010 */ addiu $a1,$a1,-16368
/* f06ec20: 8cac0000 */ lw $t4,0x0($a1)
/* f06ec24: 8fad0174 */ lw $t5,0x174($sp)
/* f06ec28: 8fb90178 */ lw $t9,0x178($sp)
/* f06ec2c: 51800056 */ beqzl $t4,.NB0f06ed88
/* f06ec30: 84e30062 */ lh $v1,0x62($a3)
/* f06ec34: 8da30040 */ lw $v1,0x40($t5)
/* f06ec38: 8f220018 */ lw $v0,0x18($t9)
/* f06ec3c: 3c01f000 */ lui $at,0xf000
/* f06ec40: 00617824 */ and $t7,$v1,$at
/* f06ec44: 10400003 */ beqz $v0,.NB0f06ec54
/* f06ec48: 000f1f02 */ srl $v1,$t7,0x1c
/* f06ec4c: 10000002 */ beqz $zero,.NB0f06ec58
/* f06ec50: 8c440004 */ lw $a0,0x4($v0)
.NB0f06ec54:
/* f06ec54: 00002025 */ or $a0,$zero,$zero
.NB0f06ec58:
/* f06ec58: 1040000b */ beqz $v0,.NB0f06ec88
/* f06ec5c: 00000000 */ sll $zero,$zero,0x0
/* f06ec60: 10800009 */ beqz $a0,.NB0f06ec88
/* f06ec64: 00000000 */ sll $zero,$zero,0x0
/* f06ec68: afa3014c */ sw $v1,0x14c($sp)
/* f06ec6c: 0fc61c7f */ jal mpPlayerGetIndex
/* f06ec70: afa70170 */ sw $a3,0x170($sp)
/* f06ec74: 8fa3014c */ lw $v1,0x14c($sp)
/* f06ec78: 3c058007 */ lui $a1,0x8007
/* f06ec7c: 24a5c010 */ addiu $a1,$a1,-16368
/* f06ec80: 10430040 */ beq $v0,$v1,.NB0f06ed84
/* f06ec84: 8fa70170 */ lw $a3,0x170($sp)
.NB0f06ec88:
/* f06ec88: 3c09800a */ lui $t1,0x800a
/* f06ec8c: 8d29e958 */ lw $t1,-0x16a8($t1)
/* f06ec90: 3c0b800a */ lui $t3,0x800a
/* f06ec94: 24010002 */ addiu $at,$zero,0x2
/* f06ec98: 05210004 */ bgez $t1,.NB0f06ecac
/* f06ec9c: 00000000 */ sll $zero,$zero,0x0
/* f06eca0: 8d6be95c */ lw $t3,-0x16a4($t3)
/* f06eca4: 05620031 */ bltzl $t3,.NB0f06ed6c
/* f06eca8: 8cad0000 */ lw $t5,0x0($a1)
.NB0f06ecac:
/* f06ecac: 14610026 */ bne $v1,$at,.NB0f06ed48
/* f06ecb0: 3c02800a */ lui $v0,0x800a
/* f06ecb4: 8c42e964 */ lw $v0,-0x169c($v0)
/* f06ecb8: 00001825 */ or $v1,$zero,$zero
/* f06ecbc: 1040000b */ beqz $v0,.NB0f06ecec
/* f06ecc0: 00000000 */ sll $zero,$zero,0x0
/* f06ecc4: 8c4400bc */ lw $a0,0xbc($v0)
/* f06ecc8: 10800008 */ beqz $a0,.NB0f06ecec
/* f06eccc: 00000000 */ sll $zero,$zero,0x0
/* f06ecd0: 0fc48d6f */ jal playermgrGetPlayerNumByProp
/* f06ecd4: afa70170 */ sw $a3,0x170($sp)
/* f06ecd8: 3c058007 */ lui $a1,0x8007
/* f06ecdc: 240e0001 */ addiu $t6,$zero,0x1
/* f06ece0: 004e1804 */ sllv $v1,$t6,$v0
/* f06ece4: 24a5c010 */ addiu $a1,$a1,-16368
/* f06ece8: 8fa70170 */ lw $a3,0x170($sp)
.NB0f06ecec:
/* f06ecec: 3c02800a */ lui $v0,0x800a
/* f06ecf0: 8c42e960 */ lw $v0,-0x16a0($v0)
/* f06ecf4: 5040000f */ beqzl $v0,.NB0f06ed34
/* f06ecf8: 8cad0000 */ lw $t5,0x0($a1)
/* f06ecfc: 8c4400bc */ lw $a0,0xbc($v0)
/* f06ed00: 5080000c */ beqzl $a0,.NB0f06ed34
/* f06ed04: 8cad0000 */ lw $t5,0x0($a1)
/* f06ed08: afa30144 */ sw $v1,0x144($sp)
/* f06ed0c: 0fc48d6f */ jal playermgrGetPlayerNumByProp
/* f06ed10: afa70170 */ sw $a3,0x170($sp)
/* f06ed14: 8fa30144 */ lw $v1,0x144($sp)
/* f06ed18: 240a0001 */ addiu $t2,$zero,0x1
/* f06ed1c: 004a6004 */ sllv $t4,$t2,$v0
/* f06ed20: 3c058007 */ lui $a1,0x8007
/* f06ed24: 24a5c010 */ addiu $a1,$a1,-16368
/* f06ed28: 8fa70170 */ lw $a3,0x170($sp)
/* f06ed2c: 006c1825 */ or $v1,$v1,$t4
/* f06ed30: 8cad0000 */ lw $t5,0x0($a1)
.NB0f06ed34:
/* f06ed34: 01a37824 */ and $t7,$t5,$v1
/* f06ed38: 11e00012 */ beqz $t7,.NB0f06ed84
/* f06ed3c: acaf0000 */ sw $t7,0x0($a1)
/* f06ed40: 10000010 */ beqz $zero,.NB0f06ed84
/* f06ed44: a4e00062 */ sh $zero,0x62($a3)
.NB0f06ed48:
/* f06ed48: 8cab0000 */ lw $t3,0x0($a1)
/* f06ed4c: 24190001 */ addiu $t9,$zero,0x1
/* f06ed50: 00794804 */ sllv $t1,$t9,$v1
/* f06ed54: 012b7024 */ and $t6,$t1,$t3
/* f06ed58: 51c0000b */ beqzl $t6,.NB0f06ed88
/* f06ed5c: 84e30062 */ lh $v1,0x62($a3)
/* f06ed60: 10000008 */ beqz $zero,.NB0f06ed84
/* f06ed64: a4e00062 */ sh $zero,0x62($a3)
/* f06ed68: 8cad0000 */ lw $t5,0x0($a1)
.NB0f06ed6c:
/* f06ed6c: 240a0001 */ addiu $t2,$zero,0x1
/* f06ed70: 006a6004 */ sllv $t4,$t2,$v1
/* f06ed74: 018d7824 */ and $t7,$t4,$t5
/* f06ed78: 51e00003 */ beqzl $t7,.NB0f06ed88
/* f06ed7c: 84e30062 */ lh $v1,0x62($a3)
/* f06ed80: a4e00062 */ sh $zero,0x62($a3)
.NB0f06ed84:
/* f06ed84: 84e30062 */ lh $v1,0x62($a3)
.NB0f06ed88:
/* f06ed88: 3c18800a */ lui $t8,0x800a
/* f06ed8c: 28610002 */ slti $at,$v1,0x2
/* f06ed90: 1420000b */ bnez $at,.NB0f06edc0
/* f06ed94: 00000000 */ sll $zero,$zero,0x0
/* f06ed98: 8f18e6f4 */ lw $t8,-0x190c($t8)
/* f06ed9c: 24080001 */ addiu $t0,$zero,0x1
/* f06eda0: 0078c823 */ subu $t9,$v1,$t8
/* f06eda4: a4f90062 */ sh $t9,0x62($a3)
/* f06eda8: 84e90062 */ lh $t1,0x62($a3)
/* f06edac: 29210002 */ slti $at,$t1,0x2
/* f06edb0: 50200171 */ beqzl $at,.NB0f06f378
/* f06edb4: 8fae0174 */ lw $t6,0x174($sp)
/* f06edb8: 1000016e */ beqz $zero,.NB0f06f374
/* f06edbc: a4e80062 */ sh $t0,0x62($a3)
.NB0f06edc0:
/* f06edc0: 1460016c */ bnez $v1,.NB0f06f374
/* f06edc4: 8fab0174 */ lw $t3,0x174($sp)
/* f06edc8: 8d6e000c */ lw $t6,0xc($t3)
/* f06edcc: 2405000d */ addiu $a1,$zero,0xd
/* f06edd0: 8fa40178 */ lw $a0,0x178($sp)
/* f06edd4: 000e5000 */ sll $t2,$t6,0x0
/* f06edd8: 05410002 */ bgez $t2,.NB0f06ede4
/* f06eddc: 00000000 */ sll $zero,$zero,0x0
/* f06ede0: 24050011 */ addiu $a1,$zero,0x11
.NB0f06ede4:
/* f06ede4: 0fc1b95e */ jal propExplode
/* f06ede8: afa70170 */ sw $a3,0x170($sp)
/* f06edec: 10400161 */ beqz $v0,.NB0f06f374
/* f06edf0: 8fa70170 */ lw $a3,0x170($sp)
/* f06edf4: 240cffff */ addiu $t4,$zero,-1
/* f06edf8: a4ec0062 */ sh $t4,0x62($a3)
/* f06edfc: 8fad0174 */ lw $t5,0x174($sp)
/* f06ee00: 8daf0040 */ lw $t7,0x40($t5)
/* f06ee04: 35f80004 */ ori $t8,$t7,0x4
/* f06ee08: 1000015a */ beqz $zero,.NB0f06f374
/* f06ee0c: adb80040 */ sw $t8,0x40($t5)
/* f06ee10: 24010021 */ addiu $at,$zero,0x21
.NB0f06ee14:
/* f06ee14: 10410011 */ beq $v0,$at,.NB0f06ee5c
/* f06ee18: 2401000f */ addiu $at,$zero,0xf
/* f06ee1c: 14410005 */ bne $v0,$at,.NB0f06ee34
/* f06ee20: 00000000 */ sll $zero,$zero,0x0
/* f06ee24: 90f9005f */ lbu $t9,0x5f($a3)
/* f06ee28: 24080001 */ addiu $t0,$zero,0x1
/* f06ee2c: 5119000c */ beql $t0,$t9,.NB0f06ee60
/* f06ee30: 84e30062 */ lh $v1,0x62($a3)
.NB0f06ee34:
/* f06ee34: 14c20004 */ bne $a2,$v0,.NB0f06ee48
/* f06ee38: 24080001 */ addiu $t0,$zero,0x1
/* f06ee3c: 90e9005f */ lbu $t1,0x5f($a3)
/* f06ee40: 51090007 */ beql $t0,$t1,.NB0f06ee60
/* f06ee44: 84e30062 */ lh $v1,0x62($a3)
.NB0f06ee48:
/* f06ee48: 14a20073 */ bne $a1,$v0,.NB0f06f018
/* f06ee4c: 24010055 */ addiu $at,$zero,0x55
/* f06ee50: 90eb005f */ lbu $t3,0x5f($a3)
/* f06ee54: 150b0070 */ bne $t0,$t3,.NB0f06f018
/* f06ee58: 00000000 */ sll $zero,$zero,0x0
.NB0f06ee5c:
/* f06ee5c: 84e30062 */ lh $v1,0x62($a3)
.NB0f06ee60:
/* f06ee60: 24080001 */ addiu $t0,$zero,0x1
/* f06ee64: 3c0e800a */ lui $t6,0x800a
/* f06ee68: 28610002 */ slti $at,$v1,0x2
/* f06ee6c: 14200010 */ bnez $at,.NB0f06eeb0
/* f06ee70: 00000000 */ sll $zero,$zero,0x0
/* f06ee74: 8dcee6f4 */ lw $t6,-0x190c($t6)
/* f06ee78: 00e02025 */ or $a0,$a3,$zero
/* f06ee7c: 006e5023 */ subu $t2,$v1,$t6
/* f06ee80: a4ea0062 */ sh $t2,0x62($a3)
/* f06ee84: 84e30062 */ lh $v1,0x62($a3)
/* f06ee88: 28610002 */ slti $at,$v1,0x2
/* f06ee8c: 10200024 */ beqz $at,.NB0f06ef20
/* f06ee90: 00000000 */ sll $zero,$zero,0x0
/* f06ee94: a4e80062 */ sh $t0,0x62($a3)
/* f06ee98: 0fc224eb */ jal weaponRegisterProxy
/* f06ee9c: afa70170 */ sw $a3,0x170($sp)
/* f06eea0: 8fa70170 */ lw $a3,0x170($sp)
/* f06eea4: 2405001f */ addiu $a1,$zero,0x1f
/* f06eea8: 1000001d */ beqz $zero,.NB0f06ef20
/* f06eeac: 84e30062 */ lh $v1,0x62($a3)
.NB0f06eeb0:
/* f06eeb0: 1503001b */ bne $t0,$v1,.NB0f06ef20
/* f06eeb4: 3c0c800a */ lui $t4,0x800a
/* f06eeb8: 8d8ce944 */ lw $t4,-0x16bc($t4)
/* f06eebc: 8faf0178 */ lw $t7,0x178($sp)
/* f06eec0: 3c017f1a */ lui $at,0x7f1a
/* f06eec4: 8d8200bc */ lw $v0,0xbc($t4)
/* f06eec8: c5e40008 */ lwc1 $f4,0x8($t7)
/* f06eecc: c5e8000c */ lwc1 $f8,0xc($t7)
/* f06eed0: c44a0008 */ lwc1 $f10,0x8($v0)
/* f06eed4: c446000c */ lwc1 $f6,0xc($v0)
/* f06eed8: 24420008 */ addiu $v0,$v0,0x8
/* f06eedc: 46045001 */ sub.s $f0,$f10,$f4
/* f06eee0: c5e40010 */ lwc1 $f4,0x10($t7)
/* f06eee4: c44a0008 */ lwc1 $f10,0x8($v0)
/* f06eee8: 46083081 */ sub.s $f2,$f6,$f8
/* f06eeec: 46000182 */ mul.s $f6,$f0,$f0
/* f06eef0: 46045301 */ sub.s $f12,$f10,$f4
/* f06eef4: 46021202 */ mul.s $f8,$f2,$f2
/* f06eef8: 46083280 */ add.s $f10,$f6,$f8
/* f06eefc: 460c6102 */ mul.s $f4,$f12,$f12
/* f06ef00: c42845e0 */ lwc1 $f8,0x45e0($at)
/* f06ef04: 46045180 */ add.s $f6,$f10,$f4
/* f06ef08: 4608303c */ c.lt.s $f6,$f8
/* f06ef0c: 00000000 */ sll $zero,$zero,0x0
/* f06ef10: 45000003 */ bc1f .NB0f06ef20
/* f06ef14: 00000000 */ sll $zero,$zero,0x0
/* f06ef18: a4e00062 */ sh $zero,0x62($a3)
/* f06ef1c: 84e30062 */ lh $v1,0x62($a3)
.NB0f06ef20:
/* f06ef20: 54600115 */ bnezl $v1,.NB0f06f378
/* f06ef24: 8fae0174 */ lw $t6,0x174($sp)
/* f06ef28: 90e2005c */ lbu $v0,0x5c($a3)
/* f06ef2c: 8fb80174 */ lw $t8,0x174($sp)
/* f06ef30: 2401000f */ addiu $at,$zero,0xf
/* f06ef34: 14a20023 */ bne $a1,$v0,.NB0f06efc4
/* f06ef38: 8fa40178 */ lw $a0,0x178($sp)
/* f06ef3c: 8fb80174 */ lw $t8,0x174($sp)
/* f06ef40: 3c09800a */ lui $t1,0x800a
/* f06ef44: 8d29e9d8 */ lw $t1,-0x1628($t1)
/* f06ef48: 8f040040 */ lw $a0,0x40($t8)
/* f06ef4c: 3c01f000 */ lui $at,0xf000
/* f06ef50: 00002825 */ or $a1,$zero,$zero
/* f06ef54: 00816824 */ and $t5,$a0,$at
/* f06ef58: 11200008 */ beqz $t1,.NB0f06ef7c
/* f06ef5c: 000d2702 */ srl $a0,$t5,0x1c
/* f06ef60: afa00128 */ sw $zero,0x128($sp)
/* f06ef64: 0fc61c91 */ jal mpGetChrFromPlayerIndex
/* f06ef68: afa70170 */ sw $a3,0x170($sp)
/* f06ef6c: 8fa50128 */ lw $a1,0x128($sp)
/* f06ef70: 10400002 */ beqz $v0,.NB0f06ef7c
/* f06ef74: 8fa70170 */ lw $a3,0x170($sp)
/* f06ef78: 8c45001c */ lw $a1,0x1c($v0)
.NB0f06ef7c:
/* f06ef7c: 8fa60178 */ lw $a2,0x178($sp)
/* f06ef80: afa70170 */ sw $a3,0x170($sp)
/* f06ef84: 0fc027b2 */ jal nbombCreateStorm
/* f06ef88: 24c40008 */ addiu $a0,$a2,0x8
/* f06ef8c: 0fc10c55 */ jal propUnsetDangerous
/* f06ef90: 8fa40178 */ lw $a0,0x178($sp)
/* f06ef94: 8fae0174 */ lw $t6,0x174($sp)
/* f06ef98: 8fa70170 */ lw $a3,0x170($sp)
/* f06ef9c: 3c03800a */ lui $v1,0x800a
/* f06efa0: 8dca0040 */ lw $t2,0x40($t6)
/* f06efa4: 354c0004 */ ori $t4,$t2,0x4
/* f06efa8: adcc0040 */ sw $t4,0x40($t6)
/* f06efac: 8c63e944 */ lw $v1,-0x16bc($v1)
/* f06efb0: 8c6f0264 */ lw $t7,0x264($v1)
/* f06efb4: 55cf00f0 */ bnel $t6,$t7,.NB0f06f378
/* f06efb8: 8fae0174 */ lw $t6,0x174($sp)
/* f06efbc: 100000ed */ beqz $zero,.NB0f06f374
/* f06efc0: ac600264 */ sw $zero,0x264($v1)
.NB0f06efc4:
/* f06efc4: 8f0d000c */ lw $t5,0xc($t8)
/* f06efc8: 2405000d */ addiu $a1,$zero,0xd
/* f06efcc: 000dc800 */ sll $t9,$t5,0x0
/* f06efd0: 07210003 */ bgez $t9,.NB0f06efe0
/* f06efd4: 00000000 */ sll $zero,$zero,0x0
/* f06efd8: 10000001 */ beqz $zero,.NB0f06efe0
/* f06efdc: 24050011 */ addiu $a1,$zero,0x11
.NB0f06efe0:
/* f06efe0: 14410002 */ bne $v0,$at,.NB0f06efec
/* f06efe4: 00000000 */ sll $zero,$zero,0x0
/* f06efe8: 24050017 */ addiu $a1,$zero,0x17
.NB0f06efec:
/* f06efec: 0fc1b95e */ jal propExplode
/* f06eff0: afa70170 */ sw $a3,0x170($sp)
/* f06eff4: 104000df */ beqz $v0,.NB0f06f374
/* f06eff8: 8fa70170 */ lw $a3,0x170($sp)
/* f06effc: 2409ffff */ addiu $t1,$zero,-1
/* f06f000: a4e90062 */ sh $t1,0x62($a3)
/* f06f004: 8fab0174 */ lw $t3,0x174($sp)
/* f06f008: 8d6a0040 */ lw $t2,0x40($t3)
/* f06f00c: 354c0004 */ ori $t4,$t2,0x4
/* f06f010: 100000d8 */ beqz $zero,.NB0f06f374
/* f06f014: ad6c0040 */ sw $t4,0x40($t3)
.NB0f06f018:
/* f06f018: 544100d7 */ bnel $v0,$at,.NB0f06f378
/* f06f01c: 8fae0174 */ lw $t6,0x174($sp)
/* f06f020: 84e30062 */ lh $v1,0x62($a3)
/* f06f024: 8fae0174 */ lw $t6,0x174($sp)
/* f06f028: 28610002 */ slti $at,$v1,0x2
/* f06f02c: 142000a2 */ bnez $at,.NB0f06f2b8
/* f06f030: 00000000 */ sll $zero,$zero,0x0
/* f06f034: 8dc40018 */ lw $a0,0x18($t6)
/* f06f038: 0fc19f4a */ jal modelFindBboxRodata
/* f06f03c: afa70170 */ sw $a3,0x170($sp)
/* f06f040: 8fa70170 */ lw $a3,0x170($sp)
/* f06f044: 3c014140 */ lui $at,0x4140
/* f06f048: 44811000 */ mtc1 $at,$f2
/* f06f04c: 84e30062 */ lh $v1,0x62($a3)
/* f06f050: 3c017f1a */ lui $at,0x7f1a
/* f06f054: c42e45e4 */ lwc1 $f14,0x45e4($at)
/* f06f058: 2463ffff */ addiu $v1,$v1,-1
/* f06f05c: 44835000 */ mtc1 $v1,$f10
/* f06f060: 2861000c */ slti $at,$v1,0xc
/* f06f064: 24080001 */ addiu $t0,$zero,0x1
/* f06f068: 46805120 */ cvt.s.w $f4,$f10
/* f06f06c: 00403025 */ or $a2,$v0,$zero
/* f06f070: 246f0001 */ addiu $t7,$v1,0x1
/* f06f074: 30780001 */ andi $t8,$v1,0x1
/* f06f078: 27a50090 */ addiu $a1,$sp,0x90
/* f06f07c: 46022183 */ div.s $f6,$f4,$f2
/* f06f080: 460e3002 */ mul.s $f0,$f6,$f14
/* f06f084: 10200007 */ beqz $at,.NB0f06f0a4
/* f06f088: 46000306 */ mov.s $f12,$f0
/* f06f08c: 448f4000 */ mtc1 $t7,$f8
/* f06f090: 00000000 */ sll $zero,$zero,0x0
/* f06f094: 468042a0 */ cvt.s.w $f10,$f8
/* f06f098: 46025103 */ div.s $f4,$f10,$f2
/* f06f09c: 46047182 */ mul.s $f6,$f14,$f4
/* f06f0a0: 46060300 */ add.s $f12,$f0,$f6
.NB0f06f0a4:
/* f06f0a4: 55180003 */ bnel $t0,$t8,.NB0f06f0b4
/* f06f0a8: afa60118 */ sw $a2,0x118($sp)
/* f06f0ac: 46006307 */ neg.s $f12,$f12
/* f06f0b0: afa60118 */ sw $a2,0x118($sp)
.NB0f06f0b4:
/* f06f0b4: 0c005cc1 */ jal mtx4LoadYRotation
/* f06f0b8: afa70170 */ sw $a3,0x170($sp)
/* f06f0bc: 8fad0174 */ lw $t5,0x174($sp)
/* f06f0c0: 8fa60118 */ lw $a2,0x118($sp)
/* f06f0c4: 8fa70170 */ lw $a3,0x170($sp)
/* f06f0c8: 8da30048 */ lw $v1,0x48($t5)
/* f06f0cc: 8fb90178 */ lw $t9,0x178($sp)
/* f06f0d0: 50600042 */ beqzl $v1,.NB0f06f1dc
/* f06f0d4: 44808000 */ mtc1 $zero,$f16
/* f06f0d8: 8f220018 */ lw $v0,0x18($t9)
/* f06f0dc: 50400073 */ beqzl $v0,.NB0f06f2ac
/* f06f0e0: 84f80062 */ lh $t8,0x62($a3)
/* f06f0e4: 90490000 */ lbu $t1,0x0($v0)
/* f06f0e8: 24010003 */ addiu $at,$zero,0x3
/* f06f0ec: 24640004 */ addiu $a0,$v1,0x4
/* f06f0f0: 1121006d */ beq $t1,$at,.NB0f06f2a8
/* f06f0f4: 27a500d0 */ addiu $a1,$sp,0xd0
/* f06f0f8: afa60118 */ sw $a2,0x118($sp)
/* f06f0fc: 0c005b02 */ jal mtx4Copy
/* f06f100: afa70170 */ sw $a3,0x170($sp)
/* f06f104: 44800000 */ mtc1 $zero,$f0
/* f06f108: 8fa40118 */ lw $a0,0x118($sp)
/* f06f10c: e7a00104 */ swc1 $f0,0x104($sp)
/* f06f110: e7a00100 */ swc1 $f0,0x100($sp)
/* f06f114: e7a000ec */ swc1 $f0,0xec($sp)
/* f06f118: e7a000dc */ swc1 $f0,0xdc($sp)
/* f06f11c: e7a00048 */ swc1 $f0,0x48($sp)
/* f06f120: e7a00038 */ swc1 $f0,0x38($sp)
/* f06f124: e7a00044 */ swc1 $f0,0x44($sp)
/* f06f128: e7a00108 */ swc1 $f0,0x108($sp)
/* f06f12c: e7a000fc */ swc1 $f0,0xfc($sp)
/* f06f130: 0fc19695 */ jal objGetLocalZMax
/* f06f134: e7a0003c */ swc1 $f0,0x3c($sp)
/* f06f138: e7a00040 */ swc1 $f0,0x40($sp)
/* f06f13c: e7a0004c */ swc1 $f0,0x4c($sp)
/* f06f140: 27a400d0 */ addiu $a0,$sp,0xd0
/* f06f144: 27a50090 */ addiu $a1,$sp,0x90
/* f06f148: 0c005a3c */ jal mtx4MultMtx4
/* f06f14c: 27a60050 */ addiu $a2,$sp,0x50
/* f06f150: 27a400d0 */ addiu $a0,$sp,0xd0
/* f06f154: 0c005a80 */ jal mtx4RotateVecInPlace
/* f06f158: 27a50044 */ addiu $a1,$sp,0x44
/* f06f15c: 27a40050 */ addiu $a0,$sp,0x50
/* f06f160: 0c005a80 */ jal mtx4RotateVecInPlace
/* f06f164: 27a50038 */ addiu $a1,$sp,0x38
/* f06f168: 8faa0174 */ lw $t2,0x174($sp)
/* f06f16c: c7a80038 */ lwc1 $f8,0x38($sp)
/* f06f170: c7aa0044 */ lwc1 $f10,0x44($sp)
/* f06f174: 8d4c0048 */ lw $t4,0x48($t2)
/* f06f178: 27a40050 */ addiu $a0,$sp,0x50
/* f06f17c: 460a4101 */ sub.s $f4,$f8,$f10
/* f06f180: c5860034 */ lwc1 $f6,0x34($t4)
/* f06f184: c7aa003c */ lwc1 $f10,0x3c($sp)
/* f06f188: 46043201 */ sub.s $f8,$f6,$f4
/* f06f18c: c7a60048 */ lwc1 $f6,0x48($sp)
/* f06f190: e7a80080 */ swc1 $f8,0x80($sp)
/* f06f194: 8d4b0048 */ lw $t3,0x48($t2)
/* f06f198: 46065101 */ sub.s $f4,$f10,$f6
/* f06f19c: c7a60040 */ lwc1 $f6,0x40($sp)
/* f06f1a0: c5680038 */ lwc1 $f8,0x38($t3)
/* f06f1a4: 46044281 */ sub.s $f10,$f8,$f4
/* f06f1a8: c7a8004c */ lwc1 $f8,0x4c($sp)
/* f06f1ac: e7aa0084 */ swc1 $f10,0x84($sp)
/* f06f1b0: 8d4e0048 */ lw $t6,0x48($t2)
/* f06f1b4: 46083101 */ sub.s $f4,$f6,$f8
/* f06f1b8: c5ca003c */ lwc1 $f10,0x3c($t6)
/* f06f1bc: 46045181 */ sub.s $f6,$f10,$f4
/* f06f1c0: e7a60088 */ swc1 $f6,0x88($sp)
/* f06f1c4: 8d450048 */ lw $a1,0x48($t2)
/* f06f1c8: 0c005b02 */ jal mtx4Copy
/* f06f1cc: 24a50004 */ addiu $a1,$a1,0x4
/* f06f1d0: 10000035 */ beqz $zero,.NB0f06f2a8
/* f06f1d4: 8fa70170 */ lw $a3,0x170($sp)
/* f06f1d8: 44808000 */ mtc1 $zero,$f16
.NB0f06f1dc:
/* f06f1dc: 00c02025 */ or $a0,$a2,$zero
/* f06f1e0: afa70170 */ sw $a3,0x170($sp)
/* f06f1e4: e7b00048 */ swc1 $f16,0x48($sp)
/* f06f1e8: e7b00038 */ swc1 $f16,0x38($sp)
/* f06f1ec: e7b00044 */ swc1 $f16,0x44($sp)
/* f06f1f0: 0fc19695 */ jal objGetLocalZMax
/* f06f1f4: e7b0003c */ swc1 $f16,0x3c($sp)
/* f06f1f8: 8fa40174 */ lw $a0,0x174($sp)
/* f06f1fc: e7a00040 */ swc1 $f0,0x40($sp)
/* f06f200: e7a0004c */ swc1 $f0,0x4c($sp)
/* f06f204: 2484001c */ addiu $a0,$a0,0x1c
/* f06f208: afa40020 */ sw $a0,0x20($sp)
/* f06f20c: 0c005b11 */ jal mtx3ToMtx4
/* f06f210: 27a500d0 */ addiu $a1,$sp,0xd0
/* f06f214: 27a400d0 */ addiu $a0,$sp,0xd0
/* f06f218: 27a50090 */ addiu $a1,$sp,0x90
/* f06f21c: 0c005a3c */ jal mtx4MultMtx4
/* f06f220: 27a60050 */ addiu $a2,$sp,0x50
/* f06f224: 27a40050 */ addiu $a0,$sp,0x50
/* f06f228: 0c005b24 */ jal mtx4ToMtx3
/* f06f22c: 8fa50020 */ lw $a1,0x20($sp)
/* f06f230: 27a400d0 */ addiu $a0,$sp,0xd0
/* f06f234: 0c005a80 */ jal mtx4RotateVecInPlace
/* f06f238: 27a50044 */ addiu $a1,$sp,0x44
/* f06f23c: 27a40050 */ addiu $a0,$sp,0x50
/* f06f240: 0c005a80 */ jal mtx4RotateVecInPlace
/* f06f244: 27a50038 */ addiu $a1,$sp,0x38
/* f06f248: c7a80038 */ lwc1 $f8,0x38($sp)
/* f06f24c: c7aa0044 */ lwc1 $f10,0x44($sp)
/* f06f250: 8faf0178 */ lw $t7,0x178($sp)
/* f06f254: 00002825 */ or $a1,$zero,$zero
/* f06f258: 460a4101 */ sub.s $f4,$f8,$f10
/* f06f25c: c5e60008 */ lwc1 $f6,0x8($t7)
/* f06f260: 24060001 */ addiu $a2,$zero,0x1
/* f06f264: 46043201 */ sub.s $f8,$f6,$f4
/* f06f268: e5e80008 */ swc1 $f8,0x8($t7)
/* f06f26c: c7a60048 */ lwc1 $f6,0x48($sp)
/* f06f270: c7aa003c */ lwc1 $f10,0x3c($sp)
/* f06f274: c5e8000c */ lwc1 $f8,0xc($t7)
/* f06f278: 46065101 */ sub.s $f4,$f10,$f6
/* f06f27c: 46044281 */ sub.s $f10,$f8,$f4
/* f06f280: e5ea000c */ swc1 $f10,0xc($t7)
/* f06f284: c7a8004c */ lwc1 $f8,0x4c($sp)
/* f06f288: c7a60040 */ lwc1 $f6,0x40($sp)
/* f06f28c: c5ea0010 */ lwc1 $f10,0x10($t7)
/* f06f290: 46083101 */ sub.s $f4,$f6,$f8
/* f06f294: 46045181 */ sub.s $f6,$f10,$f4
/* f06f298: e5e60010 */ swc1 $f6,0x10($t7)
/* f06f29c: 0fc1a3b7 */ jal func0f069c70
/* f06f2a0: 8fa40174 */ lw $a0,0x174($sp)
/* f06f2a4: 8fa70170 */ lw $a3,0x170($sp)
.NB0f06f2a8:
/* f06f2a8: 84f80062 */ lh $t8,0x62($a3)
.NB0f06f2ac:
/* f06f2ac: 270dffff */ addiu $t5,$t8,-1
/* f06f2b0: a4ed0062 */ sh $t5,0x62($a3)
/* f06f2b4: 84e30062 */ lh $v1,0x62($a3)
.NB0f06f2b8:
/* f06f2b8: 04610027 */ bgez $v1,.NB0f06f358
/* f06f2bc: 8fb90174 */ lw $t9,0x174($sp)
/* f06f2c0: 8f230048 */ lw $v1,0x48($t9)
/* f06f2c4: afa70170 */ sw $a3,0x170($sp)
/* f06f2c8: 8fa40178 */ lw $a0,0x178($sp)
/* f06f2cc: 0fc2b26d */ jal boltbeamFindByProp
/* f06f2d0: afa30034 */ sw $v1,0x34($sp)
/* f06f2d4: 2401ffff */ addiu $at,$zero,-1
/* f06f2d8: 8fa30034 */ lw $v1,0x34($sp)
/* f06f2dc: 8fa70170 */ lw $a3,0x170($sp)
/* f06f2e0: 10410024 */ beq $v0,$at,.NB0f06f374
/* f06f2e4: 00402025 */ or $a0,$v0,$zero
/* f06f2e8: 8fa50178 */ lw $a1,0x178($sp)
/* f06f2ec: afa30034 */ sw $v1,0x34($sp)
/* f06f2f0: afa20030 */ sw $v0,0x30($sp)
/* f06f2f4: afa70170 */ sw $a3,0x170($sp)
/* f06f2f8: 0fc2b2b4 */ jal boltbeamSetTailPos
/* f06f2fc: 24a50008 */ addiu $a1,$a1,0x8
/* f06f300: 3c05453b */ lui $a1,0x453b
/* f06f304: 34a58000 */ ori $a1,$a1,0x8000
/* f06f308: 8fa40030 */ lw $a0,0x30($sp)
/* f06f30c: 0fc2b2c1 */ jal boltbeamIncrementHeadPos
/* f06f310: 00003025 */ or $a2,$zero,$zero
/* f06f314: 8fa30034 */ lw $v1,0x34($sp)
/* f06f318: 8fa70170 */ lw $a3,0x170($sp)
/* f06f31c: 3c0544af */ lui $a1,0x44af
/* f06f320: 10600005 */ beqz $v1,.NB0f06f338
/* f06f324: 00000000 */ sll $zero,$zero,0x0
/* f06f328: 8c690090 */ lw $t1,0x90($v1)
/* f06f32c: 19200002 */ blez $t1,.NB0f06f338
/* f06f330: 00000000 */ sll $zero,$zero,0x0
/* f06f334: 00001825 */ or $v1,$zero,$zero
.NB0f06f338:
/* f06f338: 5460000f */ bnezl $v1,.NB0f06f378
/* f06f33c: 8fae0174 */ lw $t6,0x174($sp)
/* f06f340: a4e00062 */ sh $zero,0x62($a3)
/* f06f344: afa70170 */ sw $a3,0x170($sp)
/* f06f348: 0fc2b302 */ jal boltbeamSetAutomatic
/* f06f34c: 8fa40030 */ lw $a0,0x30($sp)
/* f06f350: 10000008 */ beqz $zero,.NB0f06f374
/* f06f354: 8fa70170 */ lw $a3,0x170($sp)
.NB0f06f358:
/* f06f358: 3c03800a */ lui $v1,0x800a
/* f06f35c: 8c63e944 */ lw $v1,-0x16bc($v1)
/* f06f360: 8fac0174 */ lw $t4,0x174($sp)
/* f06f364: 8c6b0264 */ lw $t3,0x264($v1)
/* f06f368: 558b0003 */ bnel $t4,$t3,.NB0f06f378
/* f06f36c: 8fae0174 */ lw $t6,0x174($sp)
/* f06f370: ac600264 */ sw $zero,0x264($v1)
.NB0f06f374:
/* f06f374: 8fae0174 */ lw $t6,0x174($sp)
.NB0f06f378:
/* f06f378: 3c0d800a */ lui $t5,0x800a
/* f06f37c: 8dca0010 */ lw $t2,0x10($t6)
/* f06f380: 314f0100 */ andi $t7,$t2,0x100
/* f06f384: 51e0000e */ beqzl $t7,.NB0f06f3c0
/* f06f388: 8faa0174 */ lw $t2,0x174($sp)
/* f06f38c: 80f80060 */ lb $t8,0x60($a3)
/* f06f390: 8dade6f8 */ lw $t5,-0x1908($t5)
/* f06f394: 030dc823 */ subu $t9,$t8,$t5
/* f06f398: a0f90060 */ sb $t9,0x60($a3)
/* f06f39c: 80e90060 */ lb $t1,0x60($a3)
/* f06f3a0: 5d200007 */ bgtzl $t1,.NB0f06f3c0
/* f06f3a4: 8faa0174 */ lw $t2,0x174($sp)
/* f06f3a8: a0e00060 */ sb $zero,0x60($a3)
/* f06f3ac: 8fac0174 */ lw $t4,0x174($sp)
/* f06f3b0: 8d8b0040 */ lw $t3,0x40($t4)
/* f06f3b4: 356e0004 */ ori $t6,$t3,0x4
/* f06f3b8: ad8e0040 */ sw $t6,0x40($t4)
/* f06f3bc: 8faa0174 */ lw $t2,0x174($sp)
.NB0f06f3c0:
/* f06f3c0: 8fad0178 */ lw $t5,0x178($sp)
/* f06f3c4: 8d4f0010 */ lw $t7,0x10($t2)
/* f06f3c8: 31f80080 */ andi $t8,$t7,0x80
/* f06f3cc: 53000017 */ beqzl $t8,.NB0f06f42c
/* f06f3d0: 8fbf0014 */ lw $ra,0x14($sp)
/* f06f3d4: 91b90001 */ lbu $t9,0x1($t5)
/* f06f3d8: 3c0b800a */ lui $t3,0x800a
/* f06f3dc: 33290002 */ andi $t1,$t9,0x2
/* f06f3e0: 51200012 */ beqzl $t1,.NB0f06f42c
/* f06f3e4: 8fbf0014 */ lw $ra,0x14($sp)
/* f06f3e8: 8d6beafc */ lw $t3,-0x1504($t3)
/* f06f3ec: 3c01800a */ lui $at,0x800a
/* f06f3f0: 240c003c */ addiu $t4,$zero,0x3c
/* f06f3f4: 256e0001 */ addiu $t6,$t3,0x1
/* f06f3f8: ac2eeafc */ sw $t6,-0x1504($at)
/* f06f3fc: 29c10015 */ slti $at,$t6,0x15
/* f06f400: 5420000a */ bnezl $at,.NB0f06f42c
/* f06f404: 8fbf0014 */ lw $ra,0x14($sp)
/* f06f408: a0ec0060 */ sb $t4,0x60($a3)
/* f06f40c: 8faa0174 */ lw $t2,0x174($sp)
/* f06f410: 2401ff7f */ addiu $at,$zero,-129
/* f06f414: 8d4f0010 */ lw $t7,0x10($t2)
/* f06f418: 01e1c024 */ and $t8,$t7,$at
/* f06f41c: 370d0100 */ ori $t5,$t8,0x100
/* f06f420: ad580010 */ sw $t8,0x10($t2)
/* f06f424: ad4d0010 */ sw $t5,0x10($t2)
/* f06f428: 8fbf0014 */ lw $ra,0x14($sp)
.NB0f06f42c:
/* f06f42c: 27bd0178 */ addiu $sp,$sp,0x178
/* f06f430: 03e00008 */ jr $ra
/* f06f434: 00000000 */ sll $zero,$zero,0x0
);
#endif
// Mismatch: Crossbow bolt matrix code needs some work
//void weaponTick(struct prop *prop)
//{
// struct defaultobj *obj = prop->obj;
// struct weaponobj *weapon = prop->weapon;
// s32 exptype;
// s32 i;
//
// // Handle grenade timers
// if (((weapon->weaponnum == WEAPON_GRENADE && weapon->gunfunc == FUNC_PRIMARY)
// || weapon->weaponnum == WEAPON_GRENADEROUND)
// && weapon->timer240 >= 0) {
// // 5b0
// // Handle Devastator wall hugger timer
// if (weapon->weaponnum == WEAPON_GRENADEROUND
// && weapon->gunfunc == FUNC_SECONDARY
// && weapon->timer240 > 0) {
// if (weapon->timer240 >= 2) {
// // Still on the wall
// weapon->timer240 -= g_Vars.lvupdate240;
//
// if (weapon->timer240 < 8) {
// // Time to fall
// struct coord direction = {0, -10, 0}; // var800699fc
// struct prop *parent;
// struct projectile *projectile = NULL;
//
// func0f0685e4(prop);
//
// if (obj->hidden & OBJHFLAG_EMBEDDED) {
// projectile = obj->projectile->unk044;
// } else if (obj->hidden & OBJHFLAG_PROJECTILE) {
// projectile = obj->projectile;
// }
//
// if (projectile) {
// parent = prop;
//
// while (parent->parent) {
// parent = parent->parent;
// }
//
// if (parent && (parent->type == PROPTYPE_CHR || parent->type == PROPTYPE_PLAYER)) {
// parent->chr->hidden |= CHRHFLAG_00000001;
// } else {
// projectile->ownerprop = NULL;
// projectile->flags |= PROJECTILEFLAG_AIRBORNE;
// }
//
// weapon->timer240 = 1;
//
// projectileSetSticky(prop);
//
// projectile->speed.x = direction.x;
// projectile->speed.y = direction.y;
// projectile->speed.z = direction.z;
//
// mtx4LoadIdentity((Mtxf *)&projectile->mtx);
//
// projectile->obj = (struct defaultobj *)weapon;
// projectile->unk0d8 = g_Vars.lvframenum;
// } else {
// // Couldn't create projectile - try again next frame
// weapon->timer240 = 2;
// }
// }
// } else {
// // empty
// }
// } else {
// // 730
// // Normal grenade
// weapon->timer240 -= g_Vars.lvupdate240;
//
// if (weapon->timer240 < 0) {
// propUnsetDangerous(prop);
//
// if (weapon->gunfunc == FUNC_2) {
// propExplode(prop, EXPLOSIONTYPE_SDGRENADE);
// } else {
// propExplode(prop, (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) ? EXPLOSIONTYPE_HUGE17 : EXPLOSIONTYPE_ROCKET);
// }
//
// obj->hidden |= OBJHFLAG_REAPABLE;
//
// for (i = 0; i < PLAYERCOUNT(); i++) {
// if (g_Vars.players[i]->slayerrocket == (struct weaponobj *)obj) {
// g_Vars.players[i]->slayerrocket = NULL;
// g_Vars.players[i]->visionmode = VISIONMODE_SLAYERROCKETSTATIC;
// }
// }
// }
// }
// } else if (weapon->weaponnum == WEAPON_NBOMB && weapon->gunfunc == FUNC_PRIMARY) {
// // 8e8
// // Handle nbombs being thrown normally
// if (weapon->timer240 >= 0) {
// struct prop *ownerprop = NULL;
//
// weapon->timer240 -= g_Vars.lvupdate240;
//
// if (weapon->timer240 < 0) {
// // Nbombs detonate when they hit the ground, so this code only
// // runs if it's airborne for the entire duration of its timer.
// s32 ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
//
// if (g_Vars.normmplayerisrunning) {
// struct chrdata *chr = mpGetChrFromPlayerIndex(ownerplayernum);
//
// if (chr) {
// ownerprop = chr->prop;
// }
// }
//
// nbombCreateStorm(&prop->pos, ownerprop);
// propUnsetDangerous(prop);
//
// obj->hidden |= OBJHFLAG_REAPABLE;
//
// for (i = 0; i < PLAYERCOUNT(); i++) {
// if (g_Vars.players[i]->slayerrocket == (struct weaponobj *)obj) {
// g_Vars.players[i]->slayerrocket = NULL;
// g_Vars.players[i]->visionmode = VISIONMODE_SLAYERROCKETSTATIC;
// }
// }
// }
// }
// } else if (weapon->weaponnum == WEAPON_ROCKET
// || weapon->weaponnum == WEAPON_HOMINGROCKET
// || weapon->weaponnum == WEAPON_SKROCKET) {
// // a98
// // Handle rockets
// if (weapon->timer240 == 0) {
// propExplode(prop, (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) ? EXPLOSIONTYPE_HUGE17 : EXPLOSIONTYPE_ROCKET);
//
// obj->hidden |= OBJHFLAG_REAPABLE;
//
// for (i = 0; i < PLAYERCOUNT(); i++) {
// if (g_Vars.players[i]->slayerrocket == (struct weaponobj *)obj) {
// g_Vars.players[i]->slayerrocket = NULL;
// g_Vars.players[i]->visionmode = VISIONMODE_SLAYERROCKETSTATIC;
// }
// }
// }
// } else if (weapon->weaponnum == WEAPON_TIMEDMINE && weapon->timer240 >= 0) {
// // c14
// // Handle timed mines
// if (weapon->gunfunc == FUNC_PRIMARY) {
// weapon->timer240 -= g_Vars.lvupdate240;
//
// if (weapon->timer240 < 0) {
// if (propExplode(prop, (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) ? EXPLOSIONTYPE_HUGE17 : EXPLOSIONTYPE_ROCKET)) {
// weapon->timer240 = -1;
// obj->hidden |= OBJHFLAG_REAPABLE;
// }
// }
// } else {
// // empty
// }
// } else if (weapon->weaponnum == WEAPON_REMOTEMINE) {
// // c90
// // Handle remote mines
// if (g_PlayersDetonatingMines != 0) {
// s32 ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
// struct chrdata *parentchr = prop->parent ? prop->parent->chr : NULL;
//
// // 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) {
// weapon->timer240 = 0;
// }
// }
// }
//
// if (weapon->timer240 >= 2) {
// // I don't think this is reachable? Remote mines don't use a timer.
// weapon->timer240 -= g_Vars.lvupdate240;
//
// if (weapon->timer240 < 2) {
// weapon->timer240 = 1;
// }
// } else if (weapon->timer240 == 0) {
// // Mine was damaged or timer was set to 0 above
// exptype = EXPLOSIONTYPE_ROCKET;
//
// if (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) {
// exptype = EXPLOSIONTYPE_HUGE17;
// }
//
// if (propExplode(prop, exptype)) {
// weapon->timer240 = -1;
// obj->hidden |= OBJHFLAG_REAPABLE;
// }
// }
// } else if (weapon->weaponnum == WEAPON_PROXIMITYMINE
// || (weapon->weaponnum == WEAPON_DRAGON && weapon->gunfunc == FUNC_SECONDARY)
// || (weapon->weaponnum == WEAPON_GRENADE && weapon->gunfunc == FUNC_SECONDARY)
// || (weapon->weaponnum == WEAPON_NBOMB && weapon->gunfunc == FUNC_SECONDARY)) {
// // ec0
// // Handle proximity items
// if (weapon->timer240 >= 2) {
// // The timer is still active, so the proxy isn't active yet
// weapon->timer240 -= g_Vars.lvupdate240;
//
// if (weapon->timer240 < 2) {
// weapon->timer240 = 1;
// weaponRegisterProxy(weapon);
// }
// } else if (weapon->timer240 == 1) {
// // Proxy is active
// struct coord *playerpos = &g_Vars.currentplayer->prop->pos;
// f32 xdist = playerpos->x - prop->pos.x;
// f32 ydist = playerpos->y - prop->pos.y;
// f32 zdist = playerpos->z - prop->pos.z;
//
// if (xdist * xdist + ydist * ydist + zdist * zdist < 250 * 250) {
// weapon->timer240 = 0;
// }
// }
//
// if (weapon->timer240 == 0) {
// // Proxy was triggered or shot
// if (weapon->weaponnum == WEAPON_NBOMB) {
// struct prop *ownerprop = NULL;
// s32 ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
//
// if (g_Vars.normmplayerisrunning) {
// struct chrdata *chr = mpGetChrFromPlayerIndex(ownerplayernum);
//
// if (chr) {
// ownerprop = chr->prop;
// }
// }
//
// nbombCreateStorm(&prop->pos, ownerprop);
// propUnsetDangerous(prop);
//
// obj->hidden |= OBJHFLAG_REAPABLE;
//
// for (i = 0; i < PLAYERCOUNT(); i++) {
// if (g_Vars.players[i]->slayerrocket == (struct weaponobj *)obj) {
// g_Vars.players[i]->slayerrocket = NULL;
// g_Vars.players[i]->visionmode = VISIONMODE_SLAYERROCKETSTATIC;
// }
// }
// } else {
// // Regular explosive
// exptype = EXPLOSIONTYPE_ROCKET;
//
// if (obj->flags2 & OBJFLAG2_WEAPON_HUGEEXP) {
// exptype = EXPLOSIONTYPE_HUGE17;
// } else if (weapon->weaponnum == WEAPON_DRAGON) {
// exptype = EXPLOSIONTYPE_DRAGONBOMBSPY;
// }
//
// if (propExplode(prop, exptype)) {
// weapon->timer240 = -1;
// obj->hidden |= OBJHFLAG_REAPABLE;
// }
// }
// }
// } else if (weapon->weaponnum == WEAPON_BOLT) {
// // 178
// // Handle crossbow bolts
// // Note that the timer240 value doesn't act like a timer at all
// if (weapon->timer240 >= 2) {
// // Bolt is travelling
// struct modelrodata_bbox *sp140 = modelFindBboxRodata(obj->model);
// s32 ival = weapon->timer240 - 1;
// f32 radians = ival / 12.0f * 0.026179939508438f;
// Mtxf spf8;
// Mtxf spb8;
// Mtxf sp78;
// struct coord sp6c;
// struct coord sp60;
// f32 sp38[3][3];
//
// if (ival < 12) {
// radians += (ival + 1) / 12.0f * 0.026179939508438f;
// }
//
// if ((ival & 1) == 1) {
// radians = -radians;
// }
//
// mtx4LoadYRotation(radians, &spb8);
//
// if (obj->projectile) {
// if (prop->parent && prop->parent->type != PROPTYPE_CHR) {
// mtx4Copy((Mtxf *)&obj->projectile->speed, &spf8);
//
// spf8.m[3][0] = spf8.m[3][1] = 0;
// spf8.m[0][3] = spf8.m[1][3] = 0;
//
// sp6c.y = 0;
// sp60.x = 0;
// sp6c.x = 0;
//
// spf8.m[3][2] = 0;
// spf8.m[2][3] = 0;
//
// sp60.y = 0;
// sp6c.z = sp60.z = objGetLocalZMax(sp140);
//
// mtx4MultMtx4(&spf8, &spb8, &sp78);
// mtx4RotateVecInPlace(&spf8, &sp6c);
// mtx4RotateVecInPlace(&sp78, &sp60);
//
// sp78.m[3][0] = obj->projectile->unk034 - (sp60.x - sp6c.x);
// sp78.m[3][1] = obj->projectile->unk038 - (sp60.y - sp6c.y);
// sp78.m[3][2] = obj->projectile->unk03c - (sp60.z - sp6c.z);
//
// mtx4Copy(&sp78, (Mtxf *)&obj->projectile->speed);
// }
// } else {
// sp6c.y = 0;
// sp60.x = 0;
// sp6c.x = 0;
// sp60.y = 0;
//
// sp38[0][0] = sp6c.z = sp60.z = objGetLocalZMax(sp140);
//
// mtx3ToMtx4(obj->realrot, &spf8);
// mtx4MultMtx4(&spf8, &spb8, &sp78);
// mtx4ToMtx3(&sp78, sp38);
//
// mtx4RotateVecInPlace(&spf8, &sp6c);
// mtx4RotateVecInPlace(&sp78, &sp60);
//
// prop->pos.x -= sp60.x - sp6c.x;
// prop->pos.y -= sp60.y - sp6c.y;
// prop->pos.z -= sp60.z - sp6c.z;
//
// func0f069c70(obj, false, true);
// }
//
// weapon->timer240--;
// }
//
// if (weapon->timer240 < 0) {
// struct projectile *projectile = obj->projectile;
// s32 beamnum = boltbeamFindByProp(prop);
//
// if (beamnum != -1) {
// boltbeamSetTailPos(beamnum, &prop->pos);
//
// boltbeamIncrementHeadPos(beamnum, 3000, 0);
//
// if (projectile && projectile->bouncecount > 0) {
// projectile = NULL;
// }
//
// if (projectile == NULL) {
// weapon->timer240 = 0;
// boltbeamSetAutomatic(beamnum, 1400);
// }
// }
// } else {
// for (i = 0; i < PLAYERCOUNT(); i++) {
// if (g_Vars.players[i]->slayerrocket == (struct weaponobj *)obj) {
// g_Vars.players[i]->slayerrocket = NULL;
// g_Vars.players[i]->visionmode = VISIONMODE_SLAYERROCKETSTATIC;
// }
// }
// }
// }
//
// // Hard freeing is the practice of freeing a prop while it's on screen.
// // Hard frees are triggered when there are over 20 props on screen with the
// // flag CANHARDFREE. This flag is given to dropped weapons in multiplayer.
// // When this occurs, the props past the first 20 are given the flag
// // HARDFREEING. They then fade out over 1 second, at which point they are
// // given the REAPABLE flag and soon freed.
// // 594
// if (obj->flags3 & OBJFLAG3_HARDFREEING) {
// weapon->fadeouttimer60 -= g_Vars.lvupdate240_60;
//
// if (weapon->fadeouttimer60 <= 0) {
// weapon->fadeouttimer60 = 0;
// obj->hidden |= OBJHFLAG_REAPABLE;
// }
// }
//
// if ((obj->flags3 & OBJFLAG3_CANHARDFREE) && (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)) {
// g_Vars.hardfreeabletally++;
//
// if (g_Vars.hardfreeabletally > 20) {
// weapon->fadeouttimer60 = 60;
// obj->flags3 &= ~OBJFLAG3_CANHARDFREE;
// obj->flags3 |= OBJFLAG3_HARDFREEING;
// }
// }
//}
void func0f07063c(struct prop *prop, bool arg1)
{
struct defaultobj *obj = prop->obj;
if (arg1) {
if (obj->type == OBJTYPE_AMMOCRATE || obj->type == OBJTYPE_MULTIAMMOCRATE) {
ammocrateTick(prop);
} else if (obj->type == OBJTYPE_WEAPON) {
weaponTick(prop);
}
}
}
void objDropRecursively(struct prop *prop, bool arg1)
{
struct prop *child = prop->child;
while (child) {
struct prop *next = child->next;
objDropRecursively(child, arg1);
objDrop(child, arg1);
child = next;
}
}
void func0f0706f8(struct prop *prop, bool arg1)
{
struct defaultobj *obj = prop->obj;
struct prop *child;
if (obj->hidden & OBJHFLAG_REAPABLE) {
objFree(obj, true, obj->hidden2 & OBJH2FLAG_CANREGEN);
} else {
prop->flags &= ~PROPFLAG_ONTHISSCREENTHISTICK;
func0f07063c(prop, arg1);
// Recurse into children
child = prop->child;
while (child) {
struct prop *next = child->next;
func0f0706f8(child, arg1);
child = next;
}
}
}
void func0f07079c(struct prop *prop, bool fulltick)
{
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
struct prop *child;
struct prop *next;
if (obj->hidden & OBJHFLAG_REAPABLE) {
objFree(obj, true, obj->hidden2 & OBJH2FLAG_CANREGEN);
return;
}
if (model->attachedtonode && (obj->hidden & OBJHFLAG_EMBEDDED)) {
Mtxf *mtx = model0001a5cc(model->attachedtomodel, model->attachedtonode, 0);
struct modelrenderdata renderdata = {NULL, true, 3};
u32 stack;
Mtxf sp30;
prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK;
mtx00015be4(mtx, &obj->embedment->matrix, &sp30);
renderdata.unk10 = gfxAllocate(model->filedata->nummatrices * sizeof(Mtxf));
renderdata.unk00 = &sp30;
model0001ce64(&renderdata, model);
func0f07063c(prop, fulltick);
child = prop->child;
while (child) {
next = child->next;
func0f07079c(child, fulltick);
child = next;
}
} else {
prop->flags &= ~PROPFLAG_ONTHISSCREENTHISTICK;
func0f07063c(prop, fulltick);
child = prop->child;
while (child) {
next = child->next;
func0f0706f8(child, fulltick);
child = next;
}
}
}
s32 glassCalculateOpacity(struct coord *pos, f32 xludist, f32 opadist, f32 arg3)
{
struct coord *campos = &g_Vars.currentplayer->cam_pos;
s32 opacity;
f32 xdiff = pos->x - campos->x;
f32 ydiff = pos->y - campos->y;
f32 zdiff = pos->z - campos->z;
f32 distance = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
if (distance > opadist) {
opacity = 255;
} else if (distance < xludist) {
opacity = arg3 * 255;
} else {
opacity = (((distance - xludist) * (1.0f - arg3)) / (opadist - xludist) + arg3) * 255;
}
return opacity;
}
struct prop *g_Lifts[MAX_LIFTS] = {NULL};
struct hovtype g_HovTypes[] = {
#if PAL
/* HOVTYPE_BED */ { 90, 1, 2, 0.0012, 1.200000000, 0.0062821852043271, 0.0062821852043271, 0.000012564370990731, 0.00037693112972192, 0.0062821852043271, 0.0062821852043271, 0.000012564370990731, 0.00037693112972192 },
/* HOVTYPE_BIKE */ { 80, 1, 3, 0.0030, 0.120000004, 0.0125643704086540, 0.0188465546816590, 0.000025128741981462, 0.00075386225944385, 0.0125643704086540, 0.0188465546816590, 0.000025128741981462, 0.00075386225944385 },
/* HOVTYPE_CRATE */ { 70, 2, 4, 0.0012, 1.200000000, 0.0062821852043271, 0.0125643704086540, 0.000012564370990731, 0.00037693112972192, 0.0062821852043271, 0.0125643704086540, 0.000012564370990731, 0.00037693112972192 },
/* HOVTYPE_3 */ { 170, 2, 2, 0.0012, 1.200000000, 0.0031410926021636, 0.0031410926021636, 0.000006282185495365, 0.00022615866328124, 0.0031410926021636, 0.0031410926021636, 0.000006282185495365, 0.00022615866328124 },
/* HOVTYPE_4 */ { 170, 2, 2, 0.0012, 1.200000000, 0.0031410926021636, 0.0031410926021636, 0.000006282185495365, 0.00022615866328124, 0.0031410926021636, 0.0031410926021636, 0.000006282185495365, 0.00022615866328124 },
#else
/* HOVTYPE_BED */ { 90, 1, 2, 0.0010, 1.000000000, 0.0062821852043271, 0.0062821852043271, 0.000010470308552613, 0.00031410926021636, 0.0062821852043271, 0.0062821852043271, 0.000010470308552613, 0.00031410926021636 },
/* HOVTYPE_BIKE */ { 80, 1, 3, 0.0025, 0.100000000, 0.0125643704086540, 0.0188465546816590, 0.000020940617105225, 0.00062821852043271, 0.0125643704086540, 0.0188465546816590, 0.000020940617105225, 0.00062821852043271 },
/* HOVTYPE_CRATE */ { 70, 2, 4, 0.0010, 1.000000000, 0.0062821852043271, 0.0125643704086540, 0.000010470308552613, 0.00031410926021636, 0.0062821852043271, 0.0125643704086540, 0.000010470308552613, 0.00031410926021636 },
/* HOVTYPE_3 */ { 170, 2, 2, 0.0010, 1.000000000, 0.0031410926021636, 0.0031410926021636, 0.000005235154276306, 0.00018846555030905, 0.0031410926021636, 0.0031410926021636, 0.000005235154276306, 0.00018846555030905 },
/* HOVTYPE_4 */ { 170, 2, 2, 0.0010, 1.000000000, 0.0031410926021636, 0.0031410926021636, 0.000005235154276306, 0.00018846555030905, 0.0031410926021636, 0.0031410926021636, 0.000005235154276306, 0.00018846555030905 },
#endif
};
void func0f070a1c(struct modelrodata_bbox *bbox, f32 rot[3][3], struct coord *pos, struct coord *vertices)
{
f32 sp54 = rot[0][0] * bbox->xmin;
f32 sp50 = rot[0][1] * bbox->xmin;
f32 sp4c = rot[0][2] * bbox->xmin;
f32 sp48 = rot[2][0] * bbox->zmin;
f32 sp44 = rot[2][1] * bbox->zmin;
f32 sp40 = rot[2][2] * bbox->zmin;
f32 sp3c = rot[0][0] * bbox->xmax;
f32 sp38 = rot[0][1] * bbox->xmax;
f32 sp34 = rot[0][2] * bbox->xmax;
f32 sp30 = rot[2][0] * bbox->zmax;
f32 sp2c = rot[2][1] * bbox->zmax;
f32 sp28 = rot[2][2] * bbox->zmax;
f32 sp24 = rot[1][0] * bbox->ymin + pos->f[0];
f32 sp20 = rot[1][1] * bbox->ymin + pos->f[1];
f32 sp1c = rot[1][2] * bbox->ymin + pos->f[2];
vertices[0].x = sp54 + sp24 + sp48;
vertices[0].y = sp50 + sp20 + sp44;
vertices[0].z = sp4c + sp1c + sp40;
vertices[1].x = sp54 + sp24 + sp30;
vertices[1].y = sp50 + sp20 + sp2c;
vertices[1].z = sp4c + sp1c + sp28;
vertices[2].x = sp3c + sp24 + sp30;
vertices[2].y = sp38 + sp20 + sp2c;
vertices[2].z = sp34 + sp1c + sp28;
vertices[3].x = sp3c + sp24 + sp48;
vertices[3].y = sp38 + sp20 + sp44;
vertices[3].z = sp34 + sp1c + sp40;
}
void func0f070bd0(struct modelrodata_type19 *rodata, f32 rot[3][3], struct coord *pos, struct coord *vertices)
{
s32 i;
for (i = 0; i < 4; i++) {
vertices[i].x = pos->x + rot[0][0] * rodata->vertices[i].x + rot[1][0] * rodata->vertices[i].y + rot[2][0] * rodata->vertices[i].z;
vertices[i].y = pos->y + rot[0][1] * rodata->vertices[i].x + rot[1][1] * rodata->vertices[i].y + rot[2][1] * rodata->vertices[i].z;
vertices[i].z = pos->z + rot[0][2] * rodata->vertices[i].x + rot[1][2] * rodata->vertices[i].y + rot[2][2] * rodata->vertices[i].z;
}
}
void func0f070ca0(struct defaultobj *obj, struct geotilef *tile, u32 flags, struct modelrodata_bbox *bbox, struct modelrodata_type19 *rodata)
{
struct coord vertices[4];
s32 i;
s32 j;
if (bbox != NULL) {
func0f070a1c(bbox, obj->realrot, &obj->prop->pos, vertices);
} else if (rodata != NULL) {
func0f070bd0(rodata, obj->realrot, &obj->prop->pos, vertices);
}
tile->header.type = GEOTYPE_TILE_F;
tile->header.flags = flags;
tile->header.numvertices = 4;
for (i = 0; i < 4; i++) {
tile->vertices[i].x = vertices[i].x;
tile->vertices[i].y = vertices[i].y;
tile->vertices[i].z = vertices[i].z;
}
tile->floorcol = 0xfff;
#if VERSION >= VERSION_NTSC_1_0
tile->floortype = FLOORTYPE_DEFAULT;
#endif
for (i = 0; i < 3; i++) {
tile->min[i] = 0;
tile->max[i] = 0;
for (j = 1; j < tile->header.numvertices; j++) {
if (tile->vertices[j].f[i] < tile->vertices[tile->min[i]].f[i]) {
tile->min[i] = j;
}
if (tile->vertices[j].f[i] > tile->vertices[tile->max[i]].f[i]) {
tile->max[i] = j;
}
}
}
}
void liftActivate(struct prop *prop, u8 liftnum)
{
if (liftnum > 0 && liftnum <= MAX_LIFTS) {
g_Lifts[liftnum - 1] = prop;
}
}
struct prop *liftFindByPad(s16 padnum)
{
struct pad pad;
padUnpack(padnum, PADFIELD_LIFT, &pad);
if (pad.liftnum <= 0 || pad.liftnum > MAX_LIFTS) {
return NULL;
}
return g_Lifts[pad.liftnum - 1];
}
f32 liftGetY(struct liftobj *lift)
{
f32 y = lift->base.prop->pos.y;
if (lift->base.geocount > 0) {
struct geotilef *tile = lift->base.geotilef;
if (tile && tile->header.type == GEOTYPE_TILE_F) {
if (tile->header.flags & GEOFLAG_0001) {
y = tile->vertices[tile->max[1]].y;
}
}
}
return y;
}
/**
* Recalculate a lift's tile/geometry information.
*
* The lift models and the part numbers in each model are:
*
* a51_lift_control 0
* a51_lift_hangar 0
* a51_lift_store 0
* a51_lift_thinwall 0
* a51dish 0
* airbase_lift_angle 0 1 2
* airbase_lift_enclosed 0 1 2
* al_docklift 5 6
* baggagecarrier 0
* chamber 0
* ci_lift 0
* dd_liftr 0 1 2 3 4
* lift_platform 0 1
* matrix_lift 0 1 2
* ravinelift 0
* sk_lift 0
* skedarbridge 0
*
* Part 0 is the floor if rectangular
* Parts 1-3 are walls (some lifts rely on BG geometry instead)
* Part 4 is a door blocker (used by dataDyne tower lifts)
* Part 5 is the first half of the floor if non-rectangular (Deep Sea lift)
* Part 6 is the second half of the floor if non-rectangular (Deep Sea lift)
*/
void liftUpdateTiles(struct liftobj *lift, bool stationary)
{
u8 *geo;
union modelrodata *rodata;
struct modelrodata_bbox *bbox;
s32 geocount;
u32 flags;
s32 i;
lift->base.geocount = 0;
i = 0;
do {
geo = (u8 *)lift->base.unkgeo + lift->base.geocount * 0x40;
bbox = NULL;
rodata = NULL;
do {
if (i == 0) {
#if VERSION >= VERSION_NTSC_1_0
flags = GEOFLAG_0001 | GEOFLAG_0002 | GEOFLAG_0008 | GEOFLAG_OPAQUE | GEOFLAG_LIFTFLOOR;
#else
flags = GEOFLAG_0001 | GEOFLAG_0002 | GEOFLAG_LIFTFLOOR;
#endif
// Look for a non-rectangular floor with fallback to rectangular
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_FLOORNONRECT1);
if (rodata == NULL) {
union modelrodata *tmp;
tmp = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_FLOORRECT);
bbox = &tmp->bbox;
if (bbox == NULL) {
bbox = objFindBboxRodata(&lift->base);
}
}
} else if (i == 1) {
flags = GEOFLAG_COLLISIONS;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_WALL1);
} else if (i == 2) {
flags = GEOFLAG_COLLISIONS;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_WALL2);
} else if (i == 3) {
flags = GEOFLAG_COLLISIONS;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_WALL3);
} else if (i == 4) {
// The doorblock model part exists in the dataDyne tower lifts.
// It's a tile across the door that only applies while the lift
// is moving. Without it, the player could exit the lift through
// the doorway while it's moving.
if (!stationary) {
flags = GEOFLAG_COLLISIONS;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_DOORBLOCK);
}
} else if (i == 5) {
#if VERSION >= VERSION_NTSC_1_0
flags = GEOFLAG_0001 | GEOFLAG_0002 | GEOFLAG_0008 | GEOFLAG_OPAQUE | GEOFLAG_LIFTFLOOR;
#else
flags = GEOFLAG_0001 | GEOFLAG_0002 | GEOFLAG_LIFTFLOOR;
#endif
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_FLOORNONRECT2);
} else {
break;
}
i++;
} while (!bbox && !rodata);
if (bbox || rodata) {
func0f070ca0(&lift->base, (struct geotilef *)geo, flags, bbox, &rodata->type19);
lift->base.geocount++;
}
} while (bbox || rodata);
}
void liftGoToStop(struct liftobj *lift, s32 stopnum)
{
#if VERSION >= VERSION_NTSC_1_0
u32 stack;
#endif
struct pad curpad;
struct pad aimpad;
struct pad reqpad;
if (lift->pads[stopnum] >= 0 && lift->levelaim != stopnum) {
#if VERSION >= VERSION_NTSC_1_0
// If lift is stopped (cur == aim)
// or door is not fully closed yet
if (lift->levelcur == lift->levelaim ||
(lift->doors[lift->levelcur] && !doorIsClosed(lift->doors[lift->levelcur]))) {
// Sanity check to make sure lift is actually not moving
if (lift->dist == 0 && lift->speed == 0) {
lift->levelaim = stopnum;
return;
}
}
#else
if (lift->levelcur == lift->levelaim) {
lift->levelaim = stopnum;
return;
}
#endif
padUnpack(lift->pads[lift->levelcur], PADFIELD_POS, &curpad);
padUnpack(lift->pads[lift->levelaim], PADFIELD_POS, &aimpad);
padUnpack(lift->pads[stopnum], PADFIELD_POS, &reqpad);
// Figure out if the lift needs to reverse direction on any axis
#if VERSION >= VERSION_NTSC_1_0
if (stopnum != lift->levelcur &&
((aimpad.pos.x >= curpad.pos.x && reqpad.pos.x >= curpad.pos.x) ||
(curpad.pos.x >= aimpad.pos.x && curpad.pos.x >= reqpad.pos.x)) &&
((aimpad.pos.y >= curpad.pos.y && reqpad.pos.y >= curpad.pos.y) ||
(curpad.pos.y >= aimpad.pos.y && curpad.pos.y >= reqpad.pos.y)) &&
((aimpad.pos.z >= curpad.pos.z && reqpad.pos.z >= curpad.pos.z) ||
(curpad.pos.z >= aimpad.pos.z && curpad.pos.z >= reqpad.pos.z)))
#else
if (((aimpad.pos.x >= curpad.pos.x && reqpad.pos.x >= aimpad.pos.x) ||
(curpad.pos.x >= aimpad.pos.x && aimpad.pos.x >= reqpad.pos.x)) &&
((aimpad.pos.y >= curpad.pos.y && reqpad.pos.y >= aimpad.pos.y) ||
(curpad.pos.y >= aimpad.pos.y && aimpad.pos.y >= reqpad.pos.y)) &&
((aimpad.pos.z >= curpad.pos.z && reqpad.pos.z >= aimpad.pos.z) ||
(curpad.pos.z >= aimpad.pos.z && aimpad.pos.z >= reqpad.pos.z)))
#endif
{
// Same direction
lift->levelaim = stopnum;
} else {
// Reverse direction
f32 xdiff = aimpad.pos.x - curpad.pos.x;
f32 ydiff = aimpad.pos.y - curpad.pos.y;
f32 zdiff = aimpad.pos.z - curpad.pos.z;
f32 result = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
lift->levelcur = lift->levelaim;
lift->dist = result - lift->dist;
lift->speed = -lift->speed;
lift->levelaim = stopnum;
}
}
}
f32 objGetHov04(struct defaultobj *obj)
{
struct hov *hov = NULL;
f32 result;
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *tmp = (struct hoverpropobj *) obj;
hov = &tmp->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *tmp = (struct hoverbikeobj *) obj;
hov = &tmp->hov;
}
if (hov) {
result = hov->unk04;
} else {
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
f32 value = objGetRotatedLocalYMinByMtx3(bbox, obj->realrot);
result = func0f06a620(obj) - value;
}
return result;
}
void hovUpdateGround(struct defaultobj *obj, struct hov *hov, struct coord *pos, s16 *rooms, f32 matrix[3][3])
{
f32 ground;
s16 testrooms[8];
struct coord testpos;
if (g_Vars.lvframe60 > hov->nexttick60) {
testpos.x = pos->x;
testpos.y = pos->y - 50;
testpos.z = pos->z;
roomsCopy(rooms, testrooms);
setup0f09233c(obj, &testpos, matrix, testrooms);
ground = cdFindGroundYSimple(pos, 5, testrooms, &obj->floorcol, NULL);
if (ground < -30000) {
ground = hov->ground;
}
hov->ground = ground;
hov->prevtick60 = g_Vars.lvframe60;
}
}
void hovTick(struct defaultobj *obj, struct hov *hov)
{
struct prop *prop;
f32 sp1d0;
f32 sp1cc;
f32 ground1;
f32 ground2;
struct modelrodata_bbox *bbox;
struct coord sp1b4;
struct coord sp1a8;
s16 sp198[8];
s16 sp188[8];
Mtxf sp148;
Mtxf sp108;
Mtxf spc8;
s32 i;
struct hovtype *type;
f32 spbc;
f32 spb8;
f32 spb4;
f32 xrot;
f32 spac;
s16 sp9c[8];
struct coord sp90;
bool sp8c;
f32 radius;
f32 ymax;
f32 ymin;
if (g_Vars.lvframe60 > hov->nexttick60) {
prop = obj->prop;
bbox = objFindBboxRodata(obj);
type = &g_HovTypes[hov->type];
sp8c = false;
if (hov->prevtick60 < g_Vars.lvframe60) {
hovUpdateGround(obj, hov, &prop->pos, prop->rooms, obj->realrot);
}
hov->nexttick60 = g_Vars.lvframe60;
if (obj->flags & OBJFLAG_DEACTIVATED) {
spb4 = 0.0f;
} else {
if (obj->flags3 & OBJFLAG3_GEOCYL) {
objGetBbox(prop, &radius, &ymax, &ymin);
sp1cc = radius * 0.9f;
sp1d0 = -sp1cc;
} else {
sp1d0 = bbox->zmin * 0.9f * obj->model->scale;
sp1cc = bbox->zmax * 0.9f * obj->model->scale;
}
spbc = cosf(hov->unk10);
spb8 = sinf(hov->unk10);
sp1b4.x = prop->pos.x + sp1d0 * spb8;
sp1b4.y = prop->pos.y;
sp1b4.z = prop->pos.z + sp1d0 * spbc;
sp1a8.x = prop->pos.x + sp1cc * spb8;
sp1a8.y = prop->pos.y;
sp1a8.z = prop->pos.z + sp1cc * spbc;
sp90.x = prop->pos.x;
sp90.y = prop->pos.y - 50.0f;
sp90.z = prop->pos.z;
roomsCopy(prop->rooms, sp9c);
setup0f09233c(obj, &sp90, obj->realrot, sp9c);
func0f065e74(&prop->pos, prop->rooms, &sp1b4, sp198);
roomsAppend(sp9c, sp198, ARRAYCOUNT(sp198));
ground1 = cdFindGroundYSimple(&sp1b4, 5, sp198, &obj->floorcol, NULL);
func0f065e74(&prop->pos, prop->rooms, &sp1a8, sp188);
roomsAppend(sp9c, sp188, ARRAYCOUNT(sp188));
ground2 = cdFindGroundYSimple(&sp1a8, 5, sp188, NULL, NULL);
if (ground1 >= -30000.0f && ground2 >= -30000.0f) {
spb4 = atan2f(ground1 - ground2, sp1cc - sp1d0);
if (spb4 >= M_PI) {
spb4 -= M_BADTAU;
}
} else if (ground1 >= -30000.0f) {
spb4 = atan2f(ground1 - hov->ground, -sp1d0);
if (spb4 >= M_PI) {
spb4 -= M_BADTAU;
}
} else if (ground2 >= -30000.0f) {
spb4 = atan2f(hov->ground - ground2, sp1cc);
if (spb4 >= M_PI) {
spb4 -= M_BADTAU;
}
} else {
spb4 = 0.0f;
}
}
spac = hov->ground;
if (obj->hidden & OBJHFLAG_GRABBED) {
if (spac < g_Vars.currentplayer->vv_ground - 70.0f) {
spac = g_Vars.currentplayer->vv_ground;
}
}
if (hov->flags & 1) {
sp8c = true;
hov->unk04 = hov->unk08 = type->unk00;
hov->unk30 = spac;
hov->flags &= ~1;
if (obj->type == OBJTYPE_HOVERBIKE) {
propsnd0f0939f8(NULL, obj->prop, SFX_BIKE_PULSE, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
}
}
applySpeed(&hov->unk04, hov->unk08, &hov->unk0c, type->unk0c, type->unk0c, type->unk10);
if (hov->unk08 >= type->unk00 && hov->unk08 <= hov->unk04) {
hov->unk0c = 0.0f;
hov->unk08 = type->unk00 - type->unk04 - RANDOMFRAC() * type->unk08;
} else if (hov->unk08 < type->unk00 && hov->unk08 >= hov->unk04) {
hov->unk0c = 0.0f;
hov->unk08 = type->unk00 + type->unk04 + RANDOMFRAC() * type->unk08;
}
applyRotation(&hov->unk14, hov->unk18, &hov->unk1c, type->unk1c, type->unk1c, type->unk20);
if (hov->unk14 == hov->unk18) {
if (hov->unk1c <= 2.0f * type->unk1c && hov->unk1c >= 2.0f * -type->unk1c) {
hov->unk1c = 0.0f;
if (hov->unk18 < M_PI) {
hov->unk18 = M_BADTAU - type->unk14 - RANDOMFRAC() * type->unk18;
} else {
hov->unk18 = type->unk14 + RANDOMFRAC() * type->unk18;
}
}
}
applyRotation(&hov->unk20, hov->unk24, &hov->unk28, type->unk2c, type->unk2c, type->unk30);
if (hov->unk20 == hov->unk24) {
if (hov->unk28 <= 2.0f * type->unk2c && hov->unk28 >= 2.0f * -type->unk2c) {
hov->unk28 = 0.0f;
if (hov->unk24 < M_PI) {
hov->unk24 = M_BADTAU - type->unk24 - RANDOMFRAC() * type->unk28;
} else {
hov->unk24 = type->unk24 + RANDOMFRAC() * type->unk28;
}
}
}
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
f32 f0;
f32 f12;
f32 f2;
hov->unk2c += (spb4 - hov->unk2c) * (PAL ? 0.0893f : 0.075f);
f0 = spac - hov->unk30;
f12 = (PAL ? 0.102000005f : 0.085f);
if (hov->unk30 < hov->ground) {
if (f0 >= 0.0f) {
f2 = f0;
} else {
f2 = -f0;
}
if (f2 > 10.0f) {
f12 *= 1.0f + (f2 - 10.0f) * 0.2f;
}
if (f12 > PALUPF(0.5f)) {
f12 = PALUPF(0.5f);
}
f0 *= f12;
} else {
f0 *= f12;
if (obj->hidden & OBJHFLAG_MOUNTED) {
if (f0 > 10.0f) {
f0 = 10.0f;
} else if (f0 < -10.0f) {
f0 = -10.0f;
}
} else {
if (f0 > 5.0f) {
f0 = 5.0f;
} else if (f0 < -5.0f) {
f0 = -5.0f;
}
}
}
hov->unk30 += f0;
if (f0 > 1.0f || f0 < -1.0f) {
sp8c = true;
}
}
if (sp8c) {
func0f069c70(obj, true, true);
}
if (hov->unk30 < hov->ground - 5.0f || hov->unk30 > hov->ground + 5.0f) {
obj->flags |= OBJFLAG_80000000;
} else {
obj->flags &= ~OBJFLAG_80000000;
}
prop->pos.y = objGetHov04(obj) + hov->unk30;
mtx4LoadZRotation(hov->unk20, &sp148);
xrot = hov->unk2c + hov->unk14;
if (xrot >= M_BADTAU) {
xrot -= M_BADTAU;
} else if (xrot < 0.0f) {
xrot += M_BADTAU;
}
mtx4LoadXRotation(xrot, &sp108);
mtx00015be0(&sp108, &sp148);
mtx4LoadYRotation(hov->unk10, &sp108);
mtx00015be0(&sp108, &sp148);
mtx00015f04(obj->model->scale, &sp148);
if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *bike = (struct hoverbikeobj *) obj;
f32 ezreal = bike->ezreal + bike->ezreal2;
if (bike->exreal != 0.0f) {
mtx4LoadXRotation(bike->exreal, &sp108);
mtx00015be4(&sp148, &sp108, &spc8);
mtx4Copy(&spc8, &sp148);
}
if (ezreal != 0.0f) {
mtx4LoadZRotation(ezreal, &sp108);
mtx00015be4(&sp148, &sp108, &spc8);
mtx4Copy(&spc8, &sp148);
}
}
mtx4ToMtx3(&sp148, obj->realrot);
}
}
s32 objIsHoverpropOrBike(struct defaultobj *obj)
{
return obj->type == OBJTYPE_HOVERPROP || obj->type == OBJTYPE_HOVERBIKE;
}
f32 hoverpropGetTurnAngle(struct defaultobj *obj)
{
f32 angle = 0;
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverprop = (struct hoverpropobj *)obj;
angle = hoverprop->hov.unk10;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *hoverbike = (struct hoverbikeobj *)obj;
angle = hoverbike->hov.unk10;
}
return angle;
}
void hoverpropSetTurnAngle(struct defaultobj *obj, f32 angle)
{
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverprop = (struct hoverpropobj *)obj;
hoverprop->hov.unk10 = angle;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *hoverbike = (struct hoverbikeobj *)obj;
hoverbike->hov.unk10 = angle;
}
}
s32 func0f072144(struct defaultobj *obj, struct coord *arg1, f32 arg2, bool arg3)
{
s32 cdresult = CDRESULT_NOCOLLISION;
f32 sp460[3][3];
f32 yrot;
struct coord pos;
s16 rooms[8];
struct hov prevhov;
struct hov *hov = NULL;
struct hoverbikeobj *hoverbike;
struct hoverpropobj *hoverprop;
u8 stack[0x2f0];
struct geocyl cyl;
struct prop *prop = obj->prop;
u32 stack2;
Mtxf spa4;
Mtxf sp64;
f32 sp40[3][3];
if (objIsHoverpropOrBike(obj)) {
if (arg2 != 0.0f) {
yrot = arg2 + hoverpropGetTurnAngle(obj);
if (yrot >= M_BADTAU) {
yrot -= M_BADTAU;
} else if (yrot < 0.0f) {
yrot += M_BADTAU;
}
} else {
yrot = hoverpropGetTurnAngle(obj);
}
mtx4LoadYRotation(yrot, &spa4);
mtx00015f04(obj->model->scale, &spa4);
mtx4ToMtx3(&spa4, sp460);
} else {
yrot = 0.0f;
if (arg2 != 0.0f) {
if (arg2 >= M_BADTAU) {
arg2 -= M_BADTAU;
} else if (arg2 < 0.0f) {
arg2 += M_BADTAU;
}
mtx4LoadYRotation(arg2, &sp64);
mtx4ToMtx3(&sp64, sp40);
mtx00016140(sp40, obj->realrot, sp460);
} else {
mtx3Copy(obj->realrot, sp460);
}
}
pos.x = prop->pos.x;
pos.y = prop->pos.y;
pos.z = prop->pos.z;
propSetPerimEnabled(prop, false);
if (arg1->x != 0.0f || arg1->z != 0.0f) {
pos.x += arg1->x;
pos.z += arg1->z;
func0f065e74(&prop->pos, prop->rooms, &pos, rooms);
setup0f09233c(obj, &pos, sp460, rooms);
if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbike = (struct hoverbikeobj *)obj;
hov = &hoverbike->hov;
} else if (obj->type == OBJTYPE_HOVERPROP) {
hoverprop = (struct hoverpropobj *)obj;
hov = &hoverprop->hov;
}
if (hov != NULL) {
prevhov = *hov;
hovUpdateGround(obj, hov, &pos, rooms, sp460);
pos.y += hov->ground - prevhov.ground;
}
cdresult = cd0002d8b8(&prop->pos, prop->rooms, &pos, rooms, CDTYPE_ALL, true, 0.0f, 0.0f);
if (cdresult == CDRESULT_ERROR) {
// empty
} else if (cdresult == CDRESULT_COLLISION) {
cd00025314(&prop->pos, &pos);
}
} else {
roomsCopy(prop->rooms, rooms);
setup0f09233c(obj, &pos, sp460, rooms);
}
if (cdresult == CDRESULT_NOCOLLISION) {
func0f069850(obj, &pos, sp460, &cyl);
if (obj->flags3 & OBJFLAG3_GEOCYL) {
cdresult = cd0002a6fc(&prop->pos, &pos, cyl.radius, rooms, CDTYPE_ALL, true, cyl.ymax - pos.y, cyl.ymin - pos.y);
} else {
cdresult = cd0002f02c((struct geoblock *)&cyl, rooms, CDTYPE_ALL);
}
}
propSetPerimEnabled(prop, true);
if (cdresult == CDRESULT_NOCOLLISION && arg3) {
hoverpropSetTurnAngle(obj, yrot);
mtx3Copy(sp460, obj->realrot);
prop->pos.x = pos.x;
prop->pos.z = pos.z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
if (obj->geocyl && (obj->hidden2 & OBJH2FLAG_08)) {
if (obj->flags3 & OBJFLAG3_GEOCYL) {
*obj->geocyl = cyl;
} else {
*obj->geoblock = *(struct geoblock *)&cyl;
}
}
} else if (hov) {
*hov = prevhov;
}
return cdresult;
}
void hovercarFindNextPath(struct hovercarobj *hovercar)
{
s32 index = hovercar->path - g_StageSetup.paths + 1;
while (true) {
if (g_StageSetup.paths[index].pads == NULL) {
index = 0;
}
if (&g_StageSetup.paths[index] == hovercar->path) {
break;
}
if ((g_StageSetup.paths[index].flags & PATHFLAG_FLYING)
&& (g_StageSetup.paths[index].flags & PATHFLAG_INUSE) == 0) {
hovercar->path->flags &= ~PATHFLAG_INUSE;
hovercar->path = &g_StageSetup.paths[index];
hovercar->path->flags |= PATHFLAG_INUSE;
return;
}
index++;
}
}
void hovercarStartNextPath(struct hovercarobj *hovercar)
{
s32 *pads;
struct pad pad;
Mtxf matrix;
s16 rooms[2];
hovercarFindNextPath(hovercar);
pads = hovercar->path->pads;
hovercar->nextstep = 0;
padUnpack(pads[0], PADFIELD_POS | PADFIELD_ROOM, &pad);
mtx3ToMtx4(hovercar->base.realrot, &matrix);
rooms[0] = pad.room;
rooms[1] = -1;
func0f06a730(&hovercar->base, &pad.pos, &matrix, rooms, &pad.pos);
hovercar->base.flags |= OBJFLAG_HOVERCAR_20000000;
}
void hovercarIncrementStep(struct hovercarobj *hovercar)
{
hovercar->nextstep++;
if (hovercar->path->pads[hovercar->nextstep] < 0) {
if (hovercar->path->flags & PATHFLAG_CIRCULAR) {
hovercar->nextstep = 0;
} else {
hovercarStartNextPath(hovercar);
}
}
}
/**
* Check if the given obj is colliding with another obj. If so, transfer
* velocity into the collided obj. Return a frac that should be applied to the
* moving obj's speed.
*
* Assumes the caller has used the collision system already, so any obstacle is
* already known by the collision system.
*
* For collisions with chrs, no transfer of intertia is done and the moving obj
* rebounds at full speed. For collisions with pushable objects, the force is
* applied half to both objects.
*/
f32 objCollide(struct defaultobj *movingobj, struct coord *movingvel, f32 rotation)
{
f32 force = 1.0f;
struct prop *obstacle = cdGetObstacle();
if (obstacle && g_Vars.lvupdate240 > 0) {
if (obstacle->type == PROPTYPE_CHR || obstacle->type == PROPTYPE_PLAYER) {
if (1);
} else if (obstacle->type == PROPTYPE_OBJ) {
struct defaultobj *obstacleobj = obstacle->obj;
if ((obstacleobj->hidden & OBJHFLAG_MOUNTED) == 0
&& (obstacleobj->hidden & OBJHFLAG_GRABBED) == 0
&& (obstacleobj->flags3 & OBJFLAG3_PUSHABLE)) {
struct coord sp88;
struct coord obstaclevel = {0, 0, 0};
struct coord sp70;
struct coord sp64;
struct coord sp58;
struct coord sp4c;
obstaclevel.x = movingvel->x * 0.5f / g_Vars.lvupdate240freal;
obstaclevel.y = 0.0f;
obstaclevel.z = movingvel->z * 0.5f / g_Vars.lvupdate240freal;
objApplyMomentum(obstacleobj, &obstaclevel, 0.0f, true, true);
#if VERSION >= VERSION_PAL_FINAL
cd00024e4c(&sp70, &sp64, 7356, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cd00024e4c(&sp70, &sp64, 7356, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cd00024e4c(&sp70, &sp64, 7355, "propobj.c");
#else
cd00024e4c(&sp70, &sp64, 7308, "propobj.c");
#endif
if (cd00025364(&sp58, &sp4c)) {
sp4c.x -= sp58.x;
sp4c.y -= sp58.y;
sp4c.z -= sp58.z;
} else {
sp58.x = movingobj->prop->pos.x;
sp58.y = movingobj->prop->pos.y;
sp58.z = movingobj->prop->pos.z;
sp4c.x = obstacle->pos.x - movingobj->prop->pos.x;
sp4c.y = obstacle->pos.y - movingobj->prop->pos.y;
sp4c.z = obstacle->pos.z - movingobj->prop->pos.z;
}
func0f02e3dc(&sp70, &sp64, &sp58, &sp4c, &sp88);
force = 0.5f;
if (rotation != 0.0f) {
f32 xdiff = sp88.f[0] - movingobj->prop->pos.f[0];
f32 zdiff = sp88.f[2] - movingobj->prop->pos.f[2];
f32 finalrotation = 0.0f;
struct coord speed = {0, 0, 0};
f32 mult = 1.0f / sqrtf(xdiff * xdiff + zdiff * zdiff);
xdiff *= mult;
zdiff *= mult;
rotation /= g_Vars.lvupdate240freal;
speed.f[0] += -zdiff * rotation * 10.0f;
speed.f[2] += xdiff * rotation * 10.0f;
finalrotation += rotation * 0.1f;
objApplyMomentum(obstacleobj, &speed, finalrotation, true, true);
}
}
}
}
return force;
}
#if VERSION == VERSION_PAL_FINAL
GLOBAL_ASM(
glabel hoverbikeUpdateMovement
.late_rodata
glabel var7f1ab5d0pf
.word 0x3d32b179
glabel var7f1ab5d4pf
.word 0x3db6e2eb
glabel var7f1ab5d8pf
.word 0x3e99999a
glabel var7f1ab5dcpf
.word 0x3dcccccd
glabel var7f1ab5e0pf
.word 0x3e99999a
glabel var7f1ab5e4pf
.word 0x3dcccccd
glabel var7f1ab5e8pf
.word 0x3f6e147b
glabel var7f1ab5ecpf
.word 0x3f333333
glabel var7f1ab5f0pf
.word 0x3d23d70a
glabel var7f1ab5f4pf
.word 0x40c907a9
glabel var7f1ab5f8pf
.word 0x3dcccccd
glabel var7f1ab5fcpf
.word 0x3dcccccd
glabel var7f1ab600pf
.word 0x3ecccccd
glabel var7f1ab604pf
.word 0x3e80a8be
glabel var7f1ab608pf
.word 0x3fa5e355
glabel var7f1ab60cpf
.word 0x3f5d2f1c
glabel var7f1ab610pf
.word 0x3fa5e355
glabel var7f1ab614pf
.word 0x3f5d2f1c
glabel var7f1ab618pf
.word 0x3f76c8b4
glabel var7f1ab61cpf
.word 0x3e353f7d
glabel var7f1ab620pf
.word 0x3d43c9ef
glabel var7f1ab624pf
.word 0x3f7d70a4
glabel var7f1ab628pf
.word 0x3f4ccccd
glabel var7f1ab62cpf
.word 0xbdcccccd
glabel var7f1ab630pf
.word 0x459c4000
glabel var7f1ab634pf
.word 0x49f42400
glabel var7f1ab638pf
.word 0x3dcccccd
glabel var7f1ab63cpf
.word 0x3dcccccd
glabel var7f1ab640pf
.word 0x3a83126f
glabel var7f1ab644pf
.word 0x3dcccccd
glabel var7f1ab648pf
.word 0xbdcccccd
glabel var7f1ab64cpf
.word 0xbdcccccd
glabel var7f1ab650pf
.word 0xba83126f
glabel var7f1ab654pf
.word 0xbdcccccd
.text
/* f072d60: 27bdff78 */ addiu $sp,$sp,-136
/* f072d64: f7b40010 */ sdc1 $f20,0x10($sp)
/* f072d68: afa5008c */ sw $a1,0x8c($sp)
/* f072d6c: 4480a000 */ mtc1 $zero,$f20
/* f072d70: c7a6008c */ lwc1 $f6,0x8c($sp)
/* f072d74: 3c017f1b */ lui $at,0x7f1b
/* f072d78: 44877000 */ mtc1 $a3,$f14
/* f072d7c: 4614303c */ c.lt.s $f6,$f20
/* f072d80: c424b5d0 */ lwc1 $f4,-0x4a30($at)
/* f072d84: afbf001c */ sw $ra,0x1c($sp)
/* f072d88: afa60090 */ sw $a2,0x90($sp)
/* f072d8c: 46047302 */ mul.s $f12,$f14,$f4
/* f072d90: 45000009 */ bc1f .PF0f072db8
/* f072d94: 3c05800a */ lui $a1,0x800a
/* f072d98: 3c013f00 */ lui $at,0x3f00
/* f072d9c: 44814000 */ mtc1 $at,$f8
/* f072da0: 3c013f80 */ lui $at,0x3f80
/* f072da4: 44812000 */ mtc1 $at,$f4
/* f072da8: 46083282 */ mul.s $f10,$f6,$f8
/* f072dac: 460a2181 */ sub.s $f6,$f4,$f10
/* f072db0: 46066302 */ mul.s $f12,$f12,$f6
/* f072db4: 00000000 */ nop
.PF0f072db8:
/* f072db8: 3c013f00 */ lui $at,0x3f00
/* f072dbc: 44812000 */ mtc1 $at,$f4
/* f072dc0: c7a8008c */ lwc1 $f8,0x8c($sp)
/* f072dc4: 24a5a510 */ addiu $a1,$a1,-23280
/* f072dc8: 8cae0038 */ lw $t6,0x38($a1)
/* f072dcc: 46044382 */ mul.s $f14,$f8,$f4
/* f072dd0: 00001825 */ move $v1,$zero
/* f072dd4: 19c0000d */ blez $t6,.PF0f072e0c
/* f072dd8: 3c017f1b */ lui $at,0x7f1b
/* f072ddc: c420b5d4 */ lwc1 $f0,-0x4a2c($at)
/* f072de0: c48200ac */ lwc1 $f2,0xac($a0)
.PF0f072de4:
/* f072de4: 24630001 */ addiu $v1,$v1,0x1
/* f072de8: 46026281 */ sub.s $f10,$f12,$f2
/* f072dec: 46005182 */ mul.s $f6,$f10,$f0
/* f072df0: 46061200 */ add.s $f8,$f2,$f6
/* f072df4: e48800ac */ swc1 $f8,0xac($a0)
/* f072df8: 8caf0038 */ lw $t7,0x38($a1)
/* f072dfc: 006f082a */ slt $at,$v1,$t7
/* f072e00: 5420fff8 */ bnezl $at,.PF0f072de4
/* f072e04: c48200ac */ lwc1 $f2,0xac($a0)
/* f072e08: 00001825 */ move $v1,$zero
.PF0f072e0c:
/* f072e0c: 3c014140 */ lui $at,0x4140
/* f072e10: 44815000 */ mtc1 $at,$f10
/* f072e14: c48400ac */ lwc1 $f4,0xac($a0)
/* f072e18: e7ae0044 */ swc1 $f14,0x44($sp)
/* f072e1c: afa40088 */ sw $a0,0x88($sp)
/* f072e20: 460a2182 */ mul.s $f6,$f4,$f10
/* f072e24: afa30064 */ sw $v1,0x64($sp)
/* f072e28: 4606a200 */ add.s $f8,$f20,$f6
/* f072e2c: 0fc1c8d7 */ jal hoverpropGetTurnAngle
/* f072e30: e7a8006c */ swc1 $f8,0x6c($sp)
/* f072e34: e7a00080 */ swc1 $f0,0x80($sp)
/* f072e38: 0c00685b */ jal sinf
/* f072e3c: 46000306 */ mov.s $f12,$f0
/* f072e40: e7a0007c */ swc1 $f0,0x7c($sp)
/* f072e44: 0c006858 */ jal cosf
/* f072e48: c7ac0080 */ lwc1 $f12,0x80($sp)
/* f072e4c: c7b0008c */ lwc1 $f16,0x8c($sp)
/* f072e50: 3c05800a */ lui $a1,0x800a
/* f072e54: 24a5a510 */ addiu $a1,$a1,-23280
/* f072e58: 4610a03e */ c.le.s $f20,$f16
/* f072e5c: 8fa30064 */ lw $v1,0x64($sp)
/* f072e60: 8fa40088 */ lw $a0,0x88($sp)
/* f072e64: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f072e68: 4500000c */ bc1f .PF0f072e9c
/* f072e6c: 3c017f1b */ lui $at,0x7f1b
/* f072e70: 3c017f1b */ lui $at,0x7f1b
/* f072e74: c432b5d8 */ lwc1 $f18,-0x4a28($at)
/* f072e78: 3c017f1b */ lui $at,0x7f1b
/* f072e7c: c424b5dc */ lwc1 $f4,-0x4a24($at)
/* f072e80: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f072e84: 46048280 */ add.s $f10,$f16,$f4
/* f072e88: 46125182 */ mul.s $f6,$f10,$f18
/* f072e8c: 00000000 */ nop
/* f072e90: 46083082 */ mul.s $f2,$f6,$f8
/* f072e94: 1000000a */ b .PF0f072ec0
/* f072e98: 00000000 */ nop
.PF0f072e9c:
/* f072e9c: c432b5e0 */ lwc1 $f18,-0x4a20($at)
/* f072ea0: 3c017f1b */ lui $at,0x7f1b
/* f072ea4: c424b5e4 */ lwc1 $f4,-0x4a1c($at)
/* f072ea8: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f072eac: 46102281 */ sub.s $f10,$f4,$f16
/* f072eb0: 46125182 */ mul.s $f6,$f10,$f18
/* f072eb4: 00000000 */ nop
/* f072eb8: 46083082 */ mul.s $f2,$f6,$f8
/* f072ebc: 00000000 */ nop
.PF0f072ec0:
/* f072ec0: c48c00b4 */ lwc1 $f12,0xb4($a0)
/* f072ec4: 3c013f80 */ lui $at,0x3f80
/* f072ec8: 460e603c */ c.lt.s $f12,$f14
/* f072ecc: 00000000 */ nop
/* f072ed0: 4502000b */ bc1fl .PF0f072f00
/* f072ed4: 46026181 */ sub.s $f6,$f12,$f2
/* f072ed8: 46026100 */ add.s $f4,$f12,$f2
/* f072edc: e48400b4 */ swc1 $f4,0xb4($a0)
/* f072ee0: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f072ee4: 460a703c */ c.lt.s $f14,$f10
/* f072ee8: 00000000 */ nop
/* f072eec: 4502000c */ bc1fl .PF0f072f20
/* f072ef0: 44816000 */ mtc1 $at,$f12
/* f072ef4: 10000009 */ b .PF0f072f1c
/* f072ef8: e48e00b4 */ swc1 $f14,0xb4($a0)
/* f072efc: 46026181 */ sub.s $f6,$f12,$f2
.PF0f072f00:
/* f072f00: e48600b4 */ swc1 $f6,0xb4($a0)
/* f072f04: c48800b4 */ lwc1 $f8,0xb4($a0)
/* f072f08: 460e403c */ c.lt.s $f8,$f14
/* f072f0c: 00000000 */ nop
/* f072f10: 45020003 */ bc1fl .PF0f072f20
/* f072f14: 44816000 */ mtc1 $at,$f12
/* f072f18: e48e00b4 */ swc1 $f14,0xb4($a0)
.PF0f072f1c:
/* f072f1c: 44816000 */ mtc1 $at,$f12
.PF0f072f20:
/* f072f20: 3c017f1b */ lui $at,0x7f1b
/* f072f24: c42ab5e8 */ lwc1 $f10,-0x4a18($at)
/* f072f28: c48400c8 */ lwc1 $f4,0xc8($a0)
/* f072f2c: 3c0140a0 */ lui $at,0x40a0
/* f072f30: 460a2182 */ mul.s $f6,$f4,$f10
/* f072f34: c48400c4 */ lwc1 $f4,0xc4($a0)
/* f072f38: e49000c4 */ swc1 $f16,0xc4($a0)
/* f072f3c: 46048281 */ sub.s $f10,$f16,$f4
/* f072f40: e48600c8 */ swc1 $f6,0xc8($a0)
/* f072f44: c48800c8 */ lwc1 $f8,0xc8($a0)
/* f072f48: 460a4180 */ add.s $f6,$f8,$f10
/* f072f4c: 44814000 */ mtc1 $at,$f8
/* f072f50: 3c01bf80 */ lui $at,0xbf80
/* f072f54: e48600c8 */ swc1 $f6,0xc8($a0)
/* f072f58: c48400c8 */ lwc1 $f4,0xc8($a0)
/* f072f5c: 46082082 */ mul.s $f2,$f4,$f8
/* f072f60: 4602603c */ c.lt.s $f12,$f2
/* f072f64: 00000000 */ nop
/* f072f68: 45020004 */ bc1fl .PF0f072f7c
/* f072f6c: 44816000 */ mtc1 $at,$f12
/* f072f70: 10000008 */ b .PF0f072f94
/* f072f74: 46006086 */ mov.s $f2,$f12
/* f072f78: 44816000 */ mtc1 $at,$f12
.PF0f072f7c:
/* f072f7c: 00000000 */ nop
/* f072f80: 460c103c */ c.lt.s $f2,$f12
/* f072f84: 00000000 */ nop
/* f072f88: 45020003 */ bc1fl .PF0f072f98
/* f072f8c: 4610a03e */ c.le.s $f20,$f16
/* f072f90: 46006086 */ mov.s $f2,$f12
.PF0f072f94:
/* f072f94: 4610a03e */ c.le.s $f20,$f16
.PF0f072f98:
/* f072f98: 00000000 */ nop
/* f072f9c: 45020010 */ bc1fl .PF0f072fe0
/* f072fa0: 4614103c */ c.lt.s $f2,$f20
/* f072fa4: 4602a03c */ c.lt.s $f20,$f2
/* f072fa8: 3c017f1b */ lui $at,0x7f1b
/* f072fac: 45000008 */ bc1f .PF0f072fd0
/* f072fb0: 00000000 */ nop
/* f072fb4: 46128282 */ mul.s $f10,$f16,$f18
/* f072fb8: c426b5ec */ lwc1 $f6,-0x4a14($at)
/* f072fbc: 46068102 */ mul.s $f4,$f16,$f6
/* f072fc0: 00000000 */ nop
/* f072fc4: 46022202 */ mul.s $f8,$f4,$f2
/* f072fc8: 1000000c */ b .PF0f072ffc
/* f072fcc: 46085300 */ add.s $f12,$f10,$f8
.PF0f072fd0:
/* f072fd0: 46128302 */ mul.s $f12,$f16,$f18
/* f072fd4: 10000009 */ b .PF0f072ffc
/* f072fd8: 00000000 */ nop
/* f072fdc: 4614103c */ c.lt.s $f2,$f20
.PF0f072fe0:
/* f072fe0: 00000000 */ nop
/* f072fe4: 45020005 */ bc1fl .PF0f072ffc
/* f072fe8: 46007306 */ mov.s $f12,$f14
/* f072fec: 46027182 */ mul.s $f6,$f14,$f2
/* f072ff0: 10000002 */ b .PF0f072ffc
/* f072ff4: 46067301 */ sub.s $f12,$f14,$f6
/* f072ff8: 46007306 */ mov.s $f12,$f14
.PF0f072ffc:
/* f072ffc: 3c017f1b */ lui $at,0x7f1b
/* f073000: c424b5f0 */ lwc1 $f4,-0x4a10($at)
/* f073004: 3c017f1b */ lui $at,0x7f1b
/* f073008: c428b5f4 */ lwc1 $f8,-0x4a0c($at)
/* f07300c: 46046282 */ mul.s $f10,$f12,$f4
/* f073010: 3c017f1b */ lui $at,0x7f1b
/* f073014: 46085182 */ mul.s $f6,$f10,$f8
/* f073018: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f07301c: 460aa03e */ c.le.s $f20,$f10
/* f073020: 4606a100 */ add.s $f4,$f20,$f6
/* f073024: c7a60090 */ lwc1 $f6,0x90($sp)
/* f073028: 4500000a */ bc1f .PF0f073054
/* f07302c: e7a40070 */ swc1 $f4,0x70($sp)
/* f073030: 3c017f1b */ lui $at,0x7f1b
/* f073034: c428b5f8 */ lwc1 $f8,-0x4a08($at)
/* f073038: 46085180 */ add.s $f6,$f10,$f8
/* f07303c: c4aa004c */ lwc1 $f10,0x4c($a1)
/* f073040: 46123102 */ mul.s $f4,$f6,$f18
/* f073044: 00000000 */ nop
/* f073048: 460a2302 */ mul.s $f12,$f4,$f10
/* f07304c: 10000008 */ b .PF0f073070
/* f073050: 00000000 */ nop
.PF0f073054:
/* f073054: c428b5fc */ lwc1 $f8,-0x4a04($at)
/* f073058: 46064101 */ sub.s $f4,$f8,$f6
/* f07305c: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f073060: 46122282 */ mul.s $f10,$f4,$f18
/* f073064: 00000000 */ nop
/* f073068: 46085302 */ mul.s $f12,$f10,$f8
/* f07306c: 00000000 */ nop
.PF0f073070:
/* f073070: 3c017f1b */ lui $at,0x7f1b
/* f073074: c426b600 */ lwc1 $f6,-0x4a00($at)
/* f073078: c7a40090 */ lwc1 $f4,0x90($sp)
/* f07307c: c48e00b0 */ lwc1 $f14,0xb0($a0)
/* f073080: 3c017f1b */ lui $at,0x7f1b
/* f073084: 46043082 */ mul.s $f2,$f6,$f4
/* f073088: 4602703c */ c.lt.s $f14,$f2
/* f07308c: 00000000 */ nop
/* f073090: 4502000b */ bc1fl .PF0f0730c0
/* f073094: 460c7181 */ sub.s $f6,$f14,$f12
/* f073098: 460c7280 */ add.s $f10,$f14,$f12
/* f07309c: e48a00b0 */ swc1 $f10,0xb0($a0)
/* f0730a0: c48800b0 */ lwc1 $f8,0xb0($a0)
/* f0730a4: 4608103c */ c.lt.s $f2,$f8
/* f0730a8: 00000000 */ nop
/* f0730ac: 4502000c */ bc1fl .PF0f0730e0
/* f0730b0: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f0730b4: 10000009 */ b .PF0f0730dc
/* f0730b8: e48200b0 */ swc1 $f2,0xb0($a0)
/* f0730bc: 460c7181 */ sub.s $f6,$f14,$f12
.PF0f0730c0:
/* f0730c0: e48600b0 */ swc1 $f6,0xb0($a0)
/* f0730c4: c48400b0 */ lwc1 $f4,0xb0($a0)
/* f0730c8: 4602203c */ c.lt.s $f4,$f2
/* f0730cc: 00000000 */ nop
/* f0730d0: 45020003 */ bc1fl .PF0f0730e0
/* f0730d4: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f0730d8: e48200b0 */ swc1 $f2,0xb0($a0)
.PF0f0730dc:
/* f0730dc: c7aa0090 */ lwc1 $f10,0x90($sp)
.PF0f0730e0:
/* f0730e0: c428b604 */ lwc1 $f8,-0x49fc($at)
/* f0730e4: 8ca20038 */ lw $v0,0x38($a1)
/* f0730e8: 46085182 */ mul.s $f6,$f10,$f8
/* f0730ec: c7a8007c */ lwc1 $f8,0x7c($sp)
/* f0730f0: 4606a100 */ add.s $f4,$f20,$f6
/* f0730f4: 18400033 */ blez $v0,.PF0f0731c4
/* f0730f8: e7a40068 */ swc1 $f4,0x68($sp)
/* f0730fc: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f073100: 3c017f1b */ lui $at,0x7f1b
/* f073104: c424b608 */ lwc1 $f4,-0x49f8($at)
/* f073108: 46085182 */ mul.s $f6,$f10,$f8
/* f07310c: c48a00b0 */ lwc1 $f10,0xb0($a0)
/* f073110: 3c017f1b */ lui $at,0x7f1b
/* f073114: 46043302 */ mul.s $f12,$f6,$f4
/* f073118: c424b60c */ lwc1 $f4,-0x49f4($at)
/* f07311c: 3c017f1b */ lui $at,0x7f1b
/* f073120: 46085182 */ mul.s $f6,$f10,$f8
/* f073124: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f073128: 46043382 */ mul.s $f14,$f6,$f4
/* f07312c: c426b610 */ lwc1 $f6,-0x49f0($at)
/* f073130: c48400b0 */ lwc1 $f4,0xb0($a0)
/* f073134: 46005202 */ mul.s $f8,$f10,$f0
/* f073138: 3c017f1b */ lui $at,0x7f1b
/* f07313c: 46002287 */ neg.s $f10,$f4
/* f073140: 46064402 */ mul.s $f16,$f8,$f6
/* f073144: c426b614 */ lwc1 $f6,-0x49ec($at)
/* f073148: 3c017f1b */ lui $at,0x7f1b
/* f07314c: 46005202 */ mul.s $f8,$f10,$f0
/* f073150: c422b618 */ lwc1 $f2,-0x49e8($at)
/* f073154: 46064482 */ mul.s $f18,$f8,$f6
/* f073158: 00000000 */ nop
.PF0f07315c:
/* f07315c: c48400d4 */ lwc1 $f4,0xd4($a0)
/* f073160: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f073164: 24630001 */ addiu $v1,$v1,0x1
/* f073168: 46022282 */ mul.s $f10,$f4,$f2
/* f07316c: 00000000 */ nop
/* f073170: 46024182 */ mul.s $f6,$f8,$f2
/* f073174: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f073178: c48400d4 */ lwc1 $f4,0xd4($a0)
/* f07317c: e48600d0 */ swc1 $f6,0xd0($a0)
/* f073180: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f073184: 46102280 */ add.s $f10,$f4,$f16
/* f073188: 460c4180 */ add.s $f6,$f8,$f12
/* f07318c: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f073190: c48400d4 */ lwc1 $f4,0xd4($a0)
/* f073194: e48600d0 */ swc1 $f6,0xd0($a0)
/* f073198: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f07319c: 460e2280 */ add.s $f10,$f4,$f14
/* f0731a0: 46124180 */ add.s $f6,$f8,$f18
/* f0731a4: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f0731a8: e48600d0 */ swc1 $f6,0xd0($a0)
/* f0731ac: 8ca20038 */ lw $v0,0x38($a1)
/* f0731b0: 0062082a */ slt $at,$v1,$v0
/* f0731b4: 1420ffe9 */ bnez $at,.PF0f07315c
/* f0731b8: 00000000 */ nop
/* f0731bc: 00001825 */ move $v1,$zero
/* f0731c0: c7b0008c */ lwc1 $f16,0x8c($sp)
.PF0f0731c4:
/* f0731c4: 1840001c */ blez $v0,.PF0f073238
/* f0731c8: 3c017f1b */ lui $at,0x7f1b
/* f0731cc: c42cb61c */ lwc1 $f12,-0x49e4($at)
/* f0731d0: 3c017f1b */ lui $at,0x7f1b
/* f0731d4: c422b620 */ lwc1 $f2,-0x49e0($at)
/* f0731d8: c48e00b8 */ lwc1 $f14,0xb8($a0)
.PF0f0731dc:
/* f0731dc: c7a40070 */ lwc1 $f4,0x70($sp)
/* f0731e0: c49000bc */ lwc1 $f16,0xbc($a0)
/* f0731e4: c49200c0 */ lwc1 $f18,0xc0($a0)
/* f0731e8: 460e2281 */ sub.s $f10,$f4,$f14
/* f0731ec: 24630001 */ addiu $v1,$v1,0x1
/* f0731f0: 46025202 */ mul.s $f8,$f10,$f2
/* f0731f4: 46087180 */ add.s $f6,$f14,$f8
/* f0731f8: e48600b8 */ swc1 $f6,0xb8($a0)
/* f0731fc: c7a4006c */ lwc1 $f4,0x6c($sp)
/* f073200: 46102281 */ sub.s $f10,$f4,$f16
/* f073204: 460c5202 */ mul.s $f8,$f10,$f12
/* f073208: 46088180 */ add.s $f6,$f16,$f8
/* f07320c: e48600bc */ swc1 $f6,0xbc($a0)
/* f073210: c7a40068 */ lwc1 $f4,0x68($sp)
/* f073214: 46122281 */ sub.s $f10,$f4,$f18
/* f073218: 46025202 */ mul.s $f8,$f10,$f2
/* f07321c: 46089180 */ add.s $f6,$f18,$f8
/* f073220: e48600c0 */ swc1 $f6,0xc0($a0)
/* f073224: 8cb80038 */ lw $t8,0x38($a1)
/* f073228: 0078082a */ slt $at,$v1,$t8
/* f07322c: 5420ffeb */ bnezl $at,.PF0f0731dc
/* f073230: c48e00b8 */ lwc1 $f14,0xb8($a0)
/* f073234: c7b0008c */ lwc1 $f16,0x8c($sp)
.PF0f073238:
/* f073238: 3c017f1b */ lui $at,0x7f1b
/* f07323c: c424b624 */ lwc1 $f4,-0x49dc($at)
/* f073240: 4610203e */ c.le.s $f4,$f16
/* f073244: 00000000 */ nop
/* f073248: 4502000b */ bc1fl .PF0f073278
/* f07324c: 8c8200cc */ lw $v0,0xcc($a0)
/* f073250: 8c9900cc */ lw $t9,0xcc($a0)
/* f073254: 8ca80034 */ lw $t0,0x34($a1)
/* f073258: 03281021 */ addu $v0,$t9,$t0
/* f07325c: 284107d1 */ slti $at,$v0,0x7d1
/* f073260: 1420001e */ bnez $at,.PF0f0732dc
/* f073264: ac8200cc */ sw $v0,0xcc($a0)
/* f073268: 240207d0 */ li $v0,0x7d0
/* f07326c: 1000001b */ b .PF0f0732dc
/* f073270: ac8200cc */ sw $v0,0xcc($a0)
/* f073274: 8c8200cc */ lw $v0,0xcc($a0)
.PF0f073278:
/* f073278: 3c017f1b */ lui $at,0x7f1b
/* f07327c: 58400018 */ blezl $v0,.PF0f0732e0
/* f073280: 44822000 */ mtc1 $v0,$f4
/* f073284: c42ab628 */ lwc1 $f10,-0x49d8($at)
/* f073288: 3c017f1b */ lui $at,0x7f1b
/* f07328c: c7a8008c */ lwc1 $f8,0x8c($sp)
/* f073290: 4610503e */ c.le.s $f10,$f16
/* f073294: 00000000 */ nop
/* f073298: 45030011 */ bc1tl .PF0f0732e0
/* f07329c: 44822000 */ mtc1 $v0,$f4
/* f0732a0: c426b62c */ lwc1 $f6,-0x49d4($at)
/* f0732a4: 4608303e */ c.le.s $f6,$f8
/* f0732a8: 00000000 */ nop
/* f0732ac: 4502000a */ bc1fl .PF0f0732d8
/* f0732b0: ac8000cc */ sw $zero,0xcc($a0)
/* f0732b4: 8cab0034 */ lw $t3,0x34($a1)
/* f0732b8: 004b6023 */ subu $t4,$v0,$t3
/* f0732bc: ac8c00cc */ sw $t4,0xcc($a0)
/* f0732c0: 05810006 */ bgez $t4,.PF0f0732dc
/* f0732c4: 01801025 */ move $v0,$t4
/* f0732c8: ac8000cc */ sw $zero,0xcc($a0)
/* f0732cc: 10000003 */ b .PF0f0732dc
/* f0732d0: 00001025 */ move $v0,$zero
/* f0732d4: ac8000cc */ sw $zero,0xcc($a0)
.PF0f0732d8:
/* f0732d8: 00001025 */ move $v0,$zero
.PF0f0732dc:
/* f0732dc: 44822000 */ mtc1 $v0,$f4
.PF0f0732e0:
/* f0732e0: 3c017f1b */ lui $at,0x7f1b
/* f0732e4: c428b630 */ lwc1 $f8,-0x49d0($at)
/* f0732e8: 468022a0 */ cvt.s.w $f10,$f4
/* f0732ec: 3c017f1b */ lui $at,0x7f1b
/* f0732f0: c424b634 */ lwc1 $f4,-0x49cc($at)
/* f0732f4: c48c00d8 */ lwc1 $f12,0xd8($a0)
/* f0732f8: 8c8d0008 */ lw $t5,0x8($a0)
/* f0732fc: 46085182 */ mul.s $f6,$f10,$f8
/* f073300: c48a00d4 */ lwc1 $f10,0xd4($a0)
/* f073304: 000d7040 */ sll $t6,$t5,0x1
/* f073308: 46043083 */ div.s $f2,$f6,$f4
/* f07330c: 46001202 */ mul.s $f8,$f2,$f0
/* f073310: e48200dc */ swc1 $f2,0xdc($a0)
/* f073314: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f073318: 46085180 */ add.s $f6,$f10,$f8
/* f07331c: 46046282 */ mul.s $f10,$f12,$f4
/* f073320: c48400d0 */ lwc1 $f4,0xd0($a0)
/* f073324: 46065200 */ add.s $f8,$f10,$f6
/* f073328: e48800a0 */ swc1 $f8,0xa0($a0)
/* f07332c: c7aa007c */ lwc1 $f10,0x7c($sp)
/* f073330: 460a1182 */ mul.s $f6,$f2,$f10
/* f073334: 46062200 */ add.s $f8,$f4,$f6
/* f073338: 46006282 */ mul.s $f10,$f12,$f0
/* f07333c: 460a4101 */ sub.s $f4,$f8,$f10
/* f073340: 05c1007d */ bgez $t6,.PF0f073538
/* f073344: e484009c */ swc1 $f4,0x9c($a0)
/* f073348: c486009c */ lwc1 $f6,0x9c($a0)
/* f07334c: 3c017f1b */ lui $at,0x7f1b
/* f073350: c428b638 */ lwc1 $f8,-0x49c8($at)
/* f073354: e7a60028 */ swc1 $f6,0x28($sp)
/* f073358: c7aa0028 */ lwc1 $f10,0x28($sp)
/* f07335c: 460a403c */ c.lt.s $f8,$f10
/* f073360: 00000000 */ nop
/* f073364: 45030075 */ bc1tl .PF0f07353c
/* f073368: 8fbf001c */ lw $ra,0x1c($sp)
/* f07336c: c48400a0 */ lwc1 $f4,0xa0($a0)
/* f073370: 3c017f1b */ lui $at,0x7f1b
/* f073374: c426b63c */ lwc1 $f6,-0x49c4($at)
/* f073378: e7a40024 */ swc1 $f4,0x24($sp)
/* f07337c: c7a80024 */ lwc1 $f8,0x24($sp)
/* f073380: 3c017f1b */ lui $at,0x7f1b
/* f073384: 4608303c */ c.lt.s $f6,$f8
/* f073388: 00000000 */ nop
/* f07338c: 4503006b */ bc1tl .PF0f07353c
/* f073390: 8fbf001c */ lw $ra,0x1c($sp)
/* f073394: c420b640 */ lwc1 $f0,-0x49c0($at)
/* f073398: c48200ac */ lwc1 $f2,0xac($a0)
/* f07339c: 4602003c */ c.lt.s $f0,$f2
/* f0733a0: 00000000 */ nop
/* f0733a4: 45030065 */ bc1tl .PF0f07353c
/* f0733a8: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733ac: c49200b0 */ lwc1 $f18,0xb0($a0)
/* f0733b0: 4612003c */ c.lt.s $f0,$f18
/* f0733b4: 00000000 */ nop
/* f0733b8: 45030060 */ bc1tl .PF0f07353c
/* f0733bc: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733c0: c48c00b4 */ lwc1 $f12,0xb4($a0)
/* f0733c4: 460c003c */ c.lt.s $f0,$f12
/* f0733c8: 00000000 */ nop
/* f0733cc: 4503005b */ bc1tl .PF0f07353c
/* f0733d0: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733d4: c48e00b8 */ lwc1 $f14,0xb8($a0)
/* f0733d8: 460e003c */ c.lt.s $f0,$f14
/* f0733dc: 00000000 */ nop
/* f0733e0: 45030056 */ bc1tl .PF0f07353c
/* f0733e4: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733e8: c49000bc */ lwc1 $f16,0xbc($a0)
/* f0733ec: e7b20038 */ swc1 $f18,0x38($sp)
/* f0733f0: 4610003c */ c.lt.s $f0,$f16
/* f0733f4: 00000000 */ nop
/* f0733f8: 45030050 */ bc1tl .PF0f07353c
/* f0733fc: 8fbf001c */ lw $ra,0x1c($sp)
/* f073400: c49200c0 */ lwc1 $f18,0xc0($a0)
/* f073404: 3c017f1b */ lui $at,0x7f1b
/* f073408: 4612003c */ c.lt.s $f0,$f18
/* f07340c: 00000000 */ nop
/* f073410: 4503004a */ bc1tl .PF0f07353c
/* f073414: 8fbf001c */ lw $ra,0x1c($sp)
/* f073418: c48000c8 */ lwc1 $f0,0xc8($a0)
/* f07341c: c424b644 */ lwc1 $f4,-0x49bc($at)
/* f073420: 3c017f1b */ lui $at,0x7f1b
/* f073424: 4600203c */ c.lt.s $f4,$f0
/* f073428: 00000000 */ nop
/* f07342c: 45030043 */ bc1tl .PF0f07353c
/* f073430: 8fbf001c */ lw $ra,0x1c($sp)
/* f073434: c426b648 */ lwc1 $f6,-0x49b8($at)
/* f073438: 3c017f1b */ lui $at,0x7f1b
/* f07343c: 4606503c */ c.lt.s $f10,$f6
/* f073440: 00000000 */ nop
/* f073444: 4503003d */ bc1tl .PF0f07353c
/* f073448: 8fbf001c */ lw $ra,0x1c($sp)
/* f07344c: c424b64c */ lwc1 $f4,-0x49b4($at)
/* f073450: 3c017f1b */ lui $at,0x7f1b
/* f073454: e7a0003c */ swc1 $f0,0x3c($sp)
/* f073458: 4604403c */ c.lt.s $f8,$f4
/* f07345c: 00000000 */ nop
/* f073460: 45030036 */ bc1tl .PF0f07353c
/* f073464: 8fbf001c */ lw $ra,0x1c($sp)
/* f073468: c420b650 */ lwc1 $f0,-0x49b0($at)
/* f07346c: c7aa0038 */ lwc1 $f10,0x38($sp)
/* f073470: 4600103c */ c.lt.s $f2,$f0
/* f073474: 00000000 */ nop
/* f073478: 45030030 */ bc1tl .PF0f07353c
/* f07347c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073480: 4600503c */ c.lt.s $f10,$f0
/* f073484: 00000000 */ nop
/* f073488: 4503002c */ bc1tl .PF0f07353c
/* f07348c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073490: 4600603c */ c.lt.s $f12,$f0
/* f073494: 00000000 */ nop
/* f073498: 45030028 */ bc1tl .PF0f07353c
/* f07349c: 8fbf001c */ lw $ra,0x1c($sp)
/* f0734a0: 4600703c */ c.lt.s $f14,$f0
/* f0734a4: 00000000 */ nop
/* f0734a8: 45030024 */ bc1tl .PF0f07353c
/* f0734ac: 8fbf001c */ lw $ra,0x1c($sp)
/* f0734b0: 4600803c */ c.lt.s $f16,$f0
/* f0734b4: 00000000 */ nop
/* f0734b8: 45030020 */ bc1tl .PF0f07353c
/* f0734bc: 8fbf001c */ lw $ra,0x1c($sp)
/* f0734c0: 4600903c */ c.lt.s $f18,$f0
/* f0734c4: c7a6003c */ lwc1 $f6,0x3c($sp)
/* f0734c8: 3c017f1b */ lui $at,0x7f1b
/* f0734cc: 4503001b */ bc1tl .PF0f07353c
/* f0734d0: 8fbf001c */ lw $ra,0x1c($sp)
/* f0734d4: c428b654 */ lwc1 $f8,-0x49ac($at)
/* f0734d8: 3c01bfff */ lui $at,0xbfff
/* f0734dc: 3421ffff */ ori $at,$at,0xffff
/* f0734e0: 4608303c */ c.lt.s $f6,$f8
/* f0734e4: 00000000 */ nop
/* f0734e8: 45030014 */ bc1tl .PF0f07353c
/* f0734ec: 8fbf001c */ lw $ra,0x1c($sp)
/* f0734f0: 8c8f0008 */ lw $t7,0x8($a0)
/* f0734f4: e494009c */ swc1 $f20,0x9c($a0)
/* f0734f8: e49400a0 */ swc1 $f20,0xa0($a0)
/* f0734fc: 01e1c024 */ and $t8,$t7,$at
/* f073500: e49400ac */ swc1 $f20,0xac($a0)
/* f073504: e49400b0 */ swc1 $f20,0xb0($a0)
/* f073508: e49400b4 */ swc1 $f20,0xb4($a0)
/* f07350c: e49400b8 */ swc1 $f20,0xb8($a0)
/* f073510: e49400bc */ swc1 $f20,0xbc($a0)
/* f073514: e49400c0 */ swc1 $f20,0xc0($a0)
/* f073518: e49400c4 */ swc1 $f20,0xc4($a0)
/* f07351c: e49400c8 */ swc1 $f20,0xc8($a0)
/* f073520: ac8000cc */ sw $zero,0xcc($a0)
/* f073524: e49400d0 */ swc1 $f20,0xd0($a0)
/* f073528: e49400d4 */ swc1 $f20,0xd4($a0)
/* f07352c: e49400d8 */ swc1 $f20,0xd8($a0)
/* f073530: e49400dc */ swc1 $f20,0xdc($a0)
/* f073534: ac980008 */ sw $t8,0x8($a0)
.PF0f073538:
/* f073538: 8fbf001c */ lw $ra,0x1c($sp)
.PF0f07353c:
/* f07353c: d7b40010 */ ldc1 $f20,0x10($sp)
/* f073540: 27bd0088 */ addiu $sp,$sp,0x88
/* f073544: 03e00008 */ jr $ra
/* f073548: 00000000 */ nop
);
#elif VERSION == VERSION_PAL_BETA
GLOBAL_ASM(
glabel hoverbikeUpdateMovement
.late_rodata
glabel var7f1ab5d0pf
.word 0x3d32b179
glabel var7f1ab5d4pf
.word 0x3db6e2eb
glabel var7f1ab5d8pf
.word 0x3e99999a
glabel var7f1ab5dcpf
.word 0x3dcccccd
glabel var7f1ab5e0pf
.word 0x3e99999a
glabel var7f1ab5e4pf
.word 0x3dcccccd
glabel var7f1ab5e8pf
.word 0x3f6e147b
glabel var7f1ab5ecpf
.word 0x3f333333
glabel var7f1ab5f0pf
.word 0x3d23d70a
glabel var7f1ab5f4pf
.word 0x40c907a9
glabel var7f1ab5f8pf
.word 0x3dcccccd
glabel var7f1ab5fcpf
.word 0x3dcccccd
glabel var7f1ab600pf
.word 0x3ecccccd
glabel var7f1ab604pf
.word 0x3e80a8be
glabel var7f1ab608pf
.word 0x3fa5e355
glabel var7f1ab60cpf
.word 0x3f5d2f1c
glabel var7f1ab610pf
.word 0x3fa5e355
glabel var7f1ab614pf
.word 0x3f5d2f1c
glabel var7f1ab618pf
.word 0x3f76c8b4
glabel var7f1ab61cpf
.word 0x3e353f7d
glabel var7f1ab620pf
.word 0x3d43c9ef
glabel var7f1ab624pf
.word 0x3f7d70a4
glabel var7f1ab628pf
.word 0x3f4ccccd
glabel var7f1ab62cpf
.word 0xbdcccccd
glabel var7f1ab630pf
.word 0x459c4000
glabel var7f1ab634pf
.word 0x49f42400
glabel var7f1ab638pf
.word 0x3dcccccd
glabel var7f1ab63cpf
.word 0x3dcccccd
glabel var7f1ab640pf
.word 0x3a83126f
glabel var7f1ab644pf
.word 0x3dcccccd
glabel var7f1ab648pf
.word 0xbdcccccd
glabel var7f1ab64cpf
.word 0xbdcccccd
glabel var7f1ab650pf
.word 0xba83126f
glabel var7f1ab654pf
.word 0xbdcccccd
.text
/* f072cb0: 27bdff78 */ addiu $sp,$sp,-136
/* f072cb4: f7b40010 */ sdc1 $f20,0x10($sp)
/* f072cb8: afa5008c */ sw $a1,0x8c($sp)
/* f072cbc: 4480a000 */ mtc1 $zero,$f20
/* f072cc0: c7a6008c */ lwc1 $f6,0x8c($sp)
/* f072cc4: 3c017f1b */ lui $at,0x7f1b
/* f072cc8: 44877000 */ mtc1 $a3,$f14
/* f072ccc: 4614303c */ c.lt.s $f6,$f20
/* f072cd0: c424c020 */ lwc1 $f4,-0x3fe0($at)
/* f072cd4: afbf001c */ sw $ra,0x1c($sp)
/* f072cd8: afa60090 */ sw $a2,0x90($sp)
/* f072cdc: 46047302 */ mul.s $f12,$f14,$f4
/* f072ce0: 45000009 */ bc1f .PB0f072d08
/* f072ce4: 3c05800a */ lui $a1,0x800a
/* f072ce8: 3c013f00 */ lui $at,0x3f00
/* f072cec: 44814000 */ mtc1 $at,$f8
/* f072cf0: 3c013f80 */ lui $at,0x3f80
/* f072cf4: 44812000 */ mtc1 $at,$f4
/* f072cf8: 46083282 */ mul.s $f10,$f6,$f8
/* f072cfc: 460a2181 */ sub.s $f6,$f4,$f10
/* f072d00: 46066302 */ mul.s $f12,$f12,$f6
/* f072d04: 00000000 */ nop
.PB0f072d08:
/* f072d08: 3c013f00 */ lui $at,0x3f00
/* f072d0c: 44812000 */ mtc1 $at,$f4
/* f072d10: c7a8008c */ lwc1 $f8,0x8c($sp)
/* f072d14: 24a5e4d0 */ addiu $a1,$a1,-6960
/* f072d18: 8cae0038 */ lw $t6,0x38($a1)
/* f072d1c: 46044382 */ mul.s $f14,$f8,$f4
/* f072d20: 00001825 */ move $v1,$zero
/* f072d24: 19c0000d */ blez $t6,.PB0f072d5c
/* f072d28: 3c017f1b */ lui $at,0x7f1b
/* f072d2c: c420c024 */ lwc1 $f0,-0x3fdc($at)
/* f072d30: c48200ac */ lwc1 $f2,0xac($a0)
.PB0f072d34:
/* f072d34: 24630001 */ addiu $v1,$v1,0x1
/* f072d38: 46026281 */ sub.s $f10,$f12,$f2
/* f072d3c: 46005182 */ mul.s $f6,$f10,$f0
/* f072d40: 46061200 */ add.s $f8,$f2,$f6
/* f072d44: e48800ac */ swc1 $f8,0xac($a0)
/* f072d48: 8caf0038 */ lw $t7,0x38($a1)
/* f072d4c: 006f082a */ slt $at,$v1,$t7
/* f072d50: 5420fff8 */ bnezl $at,.PB0f072d34
/* f072d54: c48200ac */ lwc1 $f2,0xac($a0)
/* f072d58: 00001825 */ move $v1,$zero
.PB0f072d5c:
/* f072d5c: 3c014140 */ lui $at,0x4140
/* f072d60: 44815000 */ mtc1 $at,$f10
/* f072d64: c48400ac */ lwc1 $f4,0xac($a0)
/* f072d68: e7ae0044 */ swc1 $f14,0x44($sp)
/* f072d6c: afa40088 */ sw $a0,0x88($sp)
/* f072d70: 460a2182 */ mul.s $f6,$f4,$f10
/* f072d74: afa30064 */ sw $v1,0x64($sp)
/* f072d78: 4606a200 */ add.s $f8,$f20,$f6
/* f072d7c: 0fc1c8ab */ jal hoverpropGetTurnAngle
/* f072d80: e7a8006c */ swc1 $f8,0x6c($sp)
/* f072d84: e7a00080 */ swc1 $f0,0x80($sp)
/* f072d88: 0c006b8b */ jal sinf
/* f072d8c: 46000306 */ mov.s $f12,$f0
/* f072d90: e7a0007c */ swc1 $f0,0x7c($sp)
/* f072d94: 0c006b88 */ jal cosf
/* f072d98: c7ac0080 */ lwc1 $f12,0x80($sp)
/* f072d9c: c7b0008c */ lwc1 $f16,0x8c($sp)
/* f072da0: 3c05800a */ lui $a1,0x800a
/* f072da4: 24a5e4d0 */ addiu $a1,$a1,-6960
/* f072da8: 4610a03e */ c.le.s $f20,$f16
/* f072dac: 8fa30064 */ lw $v1,0x64($sp)
/* f072db0: 8fa40088 */ lw $a0,0x88($sp)
/* f072db4: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f072db8: 4500000c */ bc1f .PB0f072dec
/* f072dbc: 3c017f1b */ lui $at,0x7f1b
/* f072dc0: 3c017f1b */ lui $at,0x7f1b
/* f072dc4: c432c028 */ lwc1 $f18,-0x3fd8($at)
/* f072dc8: 3c017f1b */ lui $at,0x7f1b
/* f072dcc: c424c02c */ lwc1 $f4,-0x3fd4($at)
/* f072dd0: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f072dd4: 46048280 */ add.s $f10,$f16,$f4
/* f072dd8: 46125182 */ mul.s $f6,$f10,$f18
/* f072ddc: 00000000 */ nop
/* f072de0: 46083082 */ mul.s $f2,$f6,$f8
/* f072de4: 1000000a */ b .PB0f072e10
/* f072de8: 00000000 */ nop
.PB0f072dec:
/* f072dec: c432c030 */ lwc1 $f18,-0x3fd0($at)
/* f072df0: 3c017f1b */ lui $at,0x7f1b
/* f072df4: c424c034 */ lwc1 $f4,-0x3fcc($at)
/* f072df8: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f072dfc: 46102281 */ sub.s $f10,$f4,$f16
/* f072e00: 46125182 */ mul.s $f6,$f10,$f18
/* f072e04: 00000000 */ nop
/* f072e08: 46083082 */ mul.s $f2,$f6,$f8
/* f072e0c: 00000000 */ nop
.PB0f072e10:
/* f072e10: c48c00b4 */ lwc1 $f12,0xb4($a0)
/* f072e14: 3c013f80 */ lui $at,0x3f80
/* f072e18: 460e603c */ c.lt.s $f12,$f14
/* f072e1c: 00000000 */ nop
/* f072e20: 4502000b */ bc1fl .PB0f072e50
/* f072e24: 46026181 */ sub.s $f6,$f12,$f2
/* f072e28: 46026100 */ add.s $f4,$f12,$f2
/* f072e2c: e48400b4 */ swc1 $f4,0xb4($a0)
/* f072e30: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f072e34: 460a703c */ c.lt.s $f14,$f10
/* f072e38: 00000000 */ nop
/* f072e3c: 4502000c */ bc1fl .PB0f072e70
/* f072e40: 44816000 */ mtc1 $at,$f12
/* f072e44: 10000009 */ b .PB0f072e6c
/* f072e48: e48e00b4 */ swc1 $f14,0xb4($a0)
/* f072e4c: 46026181 */ sub.s $f6,$f12,$f2
.PB0f072e50:
/* f072e50: e48600b4 */ swc1 $f6,0xb4($a0)
/* f072e54: c48800b4 */ lwc1 $f8,0xb4($a0)
/* f072e58: 460e403c */ c.lt.s $f8,$f14
/* f072e5c: 00000000 */ nop
/* f072e60: 45020003 */ bc1fl .PB0f072e70
/* f072e64: 44816000 */ mtc1 $at,$f12
/* f072e68: e48e00b4 */ swc1 $f14,0xb4($a0)
.PB0f072e6c:
/* f072e6c: 44816000 */ mtc1 $at,$f12
.PB0f072e70:
/* f072e70: 3c017f1b */ lui $at,0x7f1b
/* f072e74: c42ac038 */ lwc1 $f10,-0x3fc8($at)
/* f072e78: c48400c8 */ lwc1 $f4,0xc8($a0)
/* f072e7c: 3c0140a0 */ lui $at,0x40a0
/* f072e80: 460a2182 */ mul.s $f6,$f4,$f10
/* f072e84: c48400c4 */ lwc1 $f4,0xc4($a0)
/* f072e88: e49000c4 */ swc1 $f16,0xc4($a0)
/* f072e8c: 46048281 */ sub.s $f10,$f16,$f4
/* f072e90: e48600c8 */ swc1 $f6,0xc8($a0)
/* f072e94: c48800c8 */ lwc1 $f8,0xc8($a0)
/* f072e98: 460a4180 */ add.s $f6,$f8,$f10
/* f072e9c: 44814000 */ mtc1 $at,$f8
/* f072ea0: 3c01bf80 */ lui $at,0xbf80
/* f072ea4: e48600c8 */ swc1 $f6,0xc8($a0)
/* f072ea8: c48400c8 */ lwc1 $f4,0xc8($a0)
/* f072eac: 46082082 */ mul.s $f2,$f4,$f8
/* f072eb0: 4602603c */ c.lt.s $f12,$f2
/* f072eb4: 00000000 */ nop
/* f072eb8: 45020004 */ bc1fl .PB0f072ecc
/* f072ebc: 44816000 */ mtc1 $at,$f12
/* f072ec0: 10000008 */ b .PB0f072ee4
/* f072ec4: 46006086 */ mov.s $f2,$f12
/* f072ec8: 44816000 */ mtc1 $at,$f12
.PB0f072ecc:
/* f072ecc: 00000000 */ nop
/* f072ed0: 460c103c */ c.lt.s $f2,$f12
/* f072ed4: 00000000 */ nop
/* f072ed8: 45020003 */ bc1fl .PB0f072ee8
/* f072edc: 4610a03e */ c.le.s $f20,$f16
/* f072ee0: 46006086 */ mov.s $f2,$f12
.PB0f072ee4:
/* f072ee4: 4610a03e */ c.le.s $f20,$f16
.PB0f072ee8:
/* f072ee8: 00000000 */ nop
/* f072eec: 45020010 */ bc1fl .PB0f072f30
/* f072ef0: 4614103c */ c.lt.s $f2,$f20
/* f072ef4: 4602a03c */ c.lt.s $f20,$f2
/* f072ef8: 3c017f1b */ lui $at,0x7f1b
/* f072efc: 45000008 */ bc1f .PB0f072f20
/* f072f00: 00000000 */ nop
/* f072f04: 46128282 */ mul.s $f10,$f16,$f18
/* f072f08: c426c03c */ lwc1 $f6,-0x3fc4($at)
/* f072f0c: 46068102 */ mul.s $f4,$f16,$f6
/* f072f10: 00000000 */ nop
/* f072f14: 46022202 */ mul.s $f8,$f4,$f2
/* f072f18: 1000000c */ b .PB0f072f4c
/* f072f1c: 46085300 */ add.s $f12,$f10,$f8
.PB0f072f20:
/* f072f20: 46128302 */ mul.s $f12,$f16,$f18
/* f072f24: 10000009 */ b .PB0f072f4c
/* f072f28: 00000000 */ nop
/* f072f2c: 4614103c */ c.lt.s $f2,$f20
.PB0f072f30:
/* f072f30: 00000000 */ nop
/* f072f34: 45020005 */ bc1fl .PB0f072f4c
/* f072f38: 46007306 */ mov.s $f12,$f14
/* f072f3c: 46027182 */ mul.s $f6,$f14,$f2
/* f072f40: 10000002 */ b .PB0f072f4c
/* f072f44: 46067301 */ sub.s $f12,$f14,$f6
/* f072f48: 46007306 */ mov.s $f12,$f14
.PB0f072f4c:
/* f072f4c: 3c017f1b */ lui $at,0x7f1b
/* f072f50: c424c040 */ lwc1 $f4,-0x3fc0($at)
/* f072f54: 3c017f1b */ lui $at,0x7f1b
/* f072f58: c428c044 */ lwc1 $f8,-0x3fbc($at)
/* f072f5c: 46046282 */ mul.s $f10,$f12,$f4
/* f072f60: 3c017f1b */ lui $at,0x7f1b
/* f072f64: 46085182 */ mul.s $f6,$f10,$f8
/* f072f68: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f072f6c: 460aa03e */ c.le.s $f20,$f10
/* f072f70: 4606a100 */ add.s $f4,$f20,$f6
/* f072f74: c7a60090 */ lwc1 $f6,0x90($sp)
/* f072f78: 4500000a */ bc1f .PB0f072fa4
/* f072f7c: e7a40070 */ swc1 $f4,0x70($sp)
/* f072f80: 3c017f1b */ lui $at,0x7f1b
/* f072f84: c428c048 */ lwc1 $f8,-0x3fb8($at)
/* f072f88: 46085180 */ add.s $f6,$f10,$f8
/* f072f8c: c4aa004c */ lwc1 $f10,0x4c($a1)
/* f072f90: 46123102 */ mul.s $f4,$f6,$f18
/* f072f94: 00000000 */ nop
/* f072f98: 460a2302 */ mul.s $f12,$f4,$f10
/* f072f9c: 10000008 */ b .PB0f072fc0
/* f072fa0: 00000000 */ nop
.PB0f072fa4:
/* f072fa4: c428c04c */ lwc1 $f8,-0x3fb4($at)
/* f072fa8: 46064101 */ sub.s $f4,$f8,$f6
/* f072fac: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f072fb0: 46122282 */ mul.s $f10,$f4,$f18
/* f072fb4: 00000000 */ nop
/* f072fb8: 46085302 */ mul.s $f12,$f10,$f8
/* f072fbc: 00000000 */ nop
.PB0f072fc0:
/* f072fc0: 3c017f1b */ lui $at,0x7f1b
/* f072fc4: c426c050 */ lwc1 $f6,-0x3fb0($at)
/* f072fc8: c7a40090 */ lwc1 $f4,0x90($sp)
/* f072fcc: c48e00b0 */ lwc1 $f14,0xb0($a0)
/* f072fd0: 3c017f1b */ lui $at,0x7f1b
/* f072fd4: 46043082 */ mul.s $f2,$f6,$f4
/* f072fd8: 4602703c */ c.lt.s $f14,$f2
/* f072fdc: 00000000 */ nop
/* f072fe0: 4502000b */ bc1fl .PB0f073010
/* f072fe4: 460c7181 */ sub.s $f6,$f14,$f12
/* f072fe8: 460c7280 */ add.s $f10,$f14,$f12
/* f072fec: e48a00b0 */ swc1 $f10,0xb0($a0)
/* f072ff0: c48800b0 */ lwc1 $f8,0xb0($a0)
/* f072ff4: 4608103c */ c.lt.s $f2,$f8
/* f072ff8: 00000000 */ nop
/* f072ffc: 4502000c */ bc1fl .PB0f073030
/* f073000: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f073004: 10000009 */ b .PB0f07302c
/* f073008: e48200b0 */ swc1 $f2,0xb0($a0)
/* f07300c: 460c7181 */ sub.s $f6,$f14,$f12
.PB0f073010:
/* f073010: e48600b0 */ swc1 $f6,0xb0($a0)
/* f073014: c48400b0 */ lwc1 $f4,0xb0($a0)
/* f073018: 4602203c */ c.lt.s $f4,$f2
/* f07301c: 00000000 */ nop
/* f073020: 45020003 */ bc1fl .PB0f073030
/* f073024: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f073028: e48200b0 */ swc1 $f2,0xb0($a0)
.PB0f07302c:
/* f07302c: c7aa0090 */ lwc1 $f10,0x90($sp)
.PB0f073030:
/* f073030: c428c054 */ lwc1 $f8,-0x3fac($at)
/* f073034: 8ca20038 */ lw $v0,0x38($a1)
/* f073038: 46085182 */ mul.s $f6,$f10,$f8
/* f07303c: c7a8007c */ lwc1 $f8,0x7c($sp)
/* f073040: 4606a100 */ add.s $f4,$f20,$f6
/* f073044: 18400033 */ blez $v0,.PB0f073114
/* f073048: e7a40068 */ swc1 $f4,0x68($sp)
/* f07304c: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f073050: 3c017f1b */ lui $at,0x7f1b
/* f073054: c424c058 */ lwc1 $f4,-0x3fa8($at)
/* f073058: 46085182 */ mul.s $f6,$f10,$f8
/* f07305c: c48a00b0 */ lwc1 $f10,0xb0($a0)
/* f073060: 3c017f1b */ lui $at,0x7f1b
/* f073064: 46043302 */ mul.s $f12,$f6,$f4
/* f073068: c424c05c */ lwc1 $f4,-0x3fa4($at)
/* f07306c: 3c017f1b */ lui $at,0x7f1b
/* f073070: 46085182 */ mul.s $f6,$f10,$f8
/* f073074: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f073078: 46043382 */ mul.s $f14,$f6,$f4
/* f07307c: c426c060 */ lwc1 $f6,-0x3fa0($at)
/* f073080: c48400b0 */ lwc1 $f4,0xb0($a0)
/* f073084: 46005202 */ mul.s $f8,$f10,$f0
/* f073088: 3c017f1b */ lui $at,0x7f1b
/* f07308c: 46002287 */ neg.s $f10,$f4
/* f073090: 46064402 */ mul.s $f16,$f8,$f6
/* f073094: c426c064 */ lwc1 $f6,-0x3f9c($at)
/* f073098: 3c017f1b */ lui $at,0x7f1b
/* f07309c: 46005202 */ mul.s $f8,$f10,$f0
/* f0730a0: c422c068 */ lwc1 $f2,-0x3f98($at)
/* f0730a4: 46064482 */ mul.s $f18,$f8,$f6
/* f0730a8: 00000000 */ nop
.PB0f0730ac:
/* f0730ac: c48400d4 */ lwc1 $f4,0xd4($a0)
/* f0730b0: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f0730b4: 24630001 */ addiu $v1,$v1,0x1
/* f0730b8: 46022282 */ mul.s $f10,$f4,$f2
/* f0730bc: 00000000 */ nop
/* f0730c0: 46024182 */ mul.s $f6,$f8,$f2
/* f0730c4: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f0730c8: c48400d4 */ lwc1 $f4,0xd4($a0)
/* f0730cc: e48600d0 */ swc1 $f6,0xd0($a0)
/* f0730d0: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f0730d4: 46102280 */ add.s $f10,$f4,$f16
/* f0730d8: 460c4180 */ add.s $f6,$f8,$f12
/* f0730dc: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f0730e0: c48400d4 */ lwc1 $f4,0xd4($a0)
/* f0730e4: e48600d0 */ swc1 $f6,0xd0($a0)
/* f0730e8: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f0730ec: 460e2280 */ add.s $f10,$f4,$f14
/* f0730f0: 46124180 */ add.s $f6,$f8,$f18
/* f0730f4: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f0730f8: e48600d0 */ swc1 $f6,0xd0($a0)
/* f0730fc: 8ca20038 */ lw $v0,0x38($a1)
/* f073100: 0062082a */ slt $at,$v1,$v0
/* f073104: 1420ffe9 */ bnez $at,.PB0f0730ac
/* f073108: 00000000 */ nop
/* f07310c: 00001825 */ move $v1,$zero
/* f073110: c7b0008c */ lwc1 $f16,0x8c($sp)
.PB0f073114:
/* f073114: 1840001c */ blez $v0,.PB0f073188
/* f073118: 3c017f1b */ lui $at,0x7f1b
/* f07311c: c42cc06c */ lwc1 $f12,-0x3f94($at)
/* f073120: 3c017f1b */ lui $at,0x7f1b
/* f073124: c422c070 */ lwc1 $f2,-0x3f90($at)
/* f073128: c48e00b8 */ lwc1 $f14,0xb8($a0)
.PB0f07312c:
/* f07312c: c7a40070 */ lwc1 $f4,0x70($sp)
/* f073130: c49000bc */ lwc1 $f16,0xbc($a0)
/* f073134: c49200c0 */ lwc1 $f18,0xc0($a0)
/* f073138: 460e2281 */ sub.s $f10,$f4,$f14
/* f07313c: 24630001 */ addiu $v1,$v1,0x1
/* f073140: 46025202 */ mul.s $f8,$f10,$f2
/* f073144: 46087180 */ add.s $f6,$f14,$f8
/* f073148: e48600b8 */ swc1 $f6,0xb8($a0)
/* f07314c: c7a4006c */ lwc1 $f4,0x6c($sp)
/* f073150: 46102281 */ sub.s $f10,$f4,$f16
/* f073154: 460c5202 */ mul.s $f8,$f10,$f12
/* f073158: 46088180 */ add.s $f6,$f16,$f8
/* f07315c: e48600bc */ swc1 $f6,0xbc($a0)
/* f073160: c7a40068 */ lwc1 $f4,0x68($sp)
/* f073164: 46122281 */ sub.s $f10,$f4,$f18
/* f073168: 46025202 */ mul.s $f8,$f10,$f2
/* f07316c: 46089180 */ add.s $f6,$f18,$f8
/* f073170: e48600c0 */ swc1 $f6,0xc0($a0)
/* f073174: 8cb80038 */ lw $t8,0x38($a1)
/* f073178: 0078082a */ slt $at,$v1,$t8
/* f07317c: 5420ffeb */ bnezl $at,.PB0f07312c
/* f073180: c48e00b8 */ lwc1 $f14,0xb8($a0)
/* f073184: c7b0008c */ lwc1 $f16,0x8c($sp)
.PB0f073188:
/* f073188: 3c017f1b */ lui $at,0x7f1b
/* f07318c: c424c074 */ lwc1 $f4,-0x3f8c($at)
/* f073190: 4610203e */ c.le.s $f4,$f16
/* f073194: 00000000 */ nop
/* f073198: 4502000b */ bc1fl .PB0f0731c8
/* f07319c: 8c8200cc */ lw $v0,0xcc($a0)
/* f0731a0: 8c9900cc */ lw $t9,0xcc($a0)
/* f0731a4: 8ca80034 */ lw $t0,0x34($a1)
/* f0731a8: 03281021 */ addu $v0,$t9,$t0
/* f0731ac: 284107d1 */ slti $at,$v0,0x7d1
/* f0731b0: 1420001e */ bnez $at,.PB0f07322c
/* f0731b4: ac8200cc */ sw $v0,0xcc($a0)
/* f0731b8: 240207d0 */ li $v0,0x7d0
/* f0731bc: 1000001b */ b .PB0f07322c
/* f0731c0: ac8200cc */ sw $v0,0xcc($a0)
/* f0731c4: 8c8200cc */ lw $v0,0xcc($a0)
.PB0f0731c8:
/* f0731c8: 3c017f1b */ lui $at,0x7f1b
/* f0731cc: 58400018 */ blezl $v0,.PB0f073230
/* f0731d0: 44822000 */ mtc1 $v0,$f4
/* f0731d4: c42ac078 */ lwc1 $f10,-0x3f88($at)
/* f0731d8: 3c017f1b */ lui $at,0x7f1b
/* f0731dc: c7a8008c */ lwc1 $f8,0x8c($sp)
/* f0731e0: 4610503e */ c.le.s $f10,$f16
/* f0731e4: 00000000 */ nop
/* f0731e8: 45030011 */ bc1tl .PB0f073230
/* f0731ec: 44822000 */ mtc1 $v0,$f4
/* f0731f0: c426c07c */ lwc1 $f6,-0x3f84($at)
/* f0731f4: 4608303e */ c.le.s $f6,$f8
/* f0731f8: 00000000 */ nop
/* f0731fc: 4502000a */ bc1fl .PB0f073228
/* f073200: ac8000cc */ sw $zero,0xcc($a0)
/* f073204: 8cab0034 */ lw $t3,0x34($a1)
/* f073208: 004b6023 */ subu $t4,$v0,$t3
/* f07320c: ac8c00cc */ sw $t4,0xcc($a0)
/* f073210: 05810006 */ bgez $t4,.PB0f07322c
/* f073214: 01801025 */ move $v0,$t4
/* f073218: ac8000cc */ sw $zero,0xcc($a0)
/* f07321c: 10000003 */ b .PB0f07322c
/* f073220: 00001025 */ move $v0,$zero
/* f073224: ac8000cc */ sw $zero,0xcc($a0)
.PB0f073228:
/* f073228: 00001025 */ move $v0,$zero
.PB0f07322c:
/* f07322c: 44822000 */ mtc1 $v0,$f4
.PB0f073230:
/* f073230: 3c017f1b */ lui $at,0x7f1b
/* f073234: c428c080 */ lwc1 $f8,-0x3f80($at)
/* f073238: 468022a0 */ cvt.s.w $f10,$f4
/* f07323c: 3c017f1b */ lui $at,0x7f1b
/* f073240: c424c084 */ lwc1 $f4,-0x3f7c($at)
/* f073244: c48c00d8 */ lwc1 $f12,0xd8($a0)
/* f073248: 8c8d0008 */ lw $t5,0x8($a0)
/* f07324c: 46085182 */ mul.s $f6,$f10,$f8
/* f073250: c48a00d4 */ lwc1 $f10,0xd4($a0)
/* f073254: 000d7040 */ sll $t6,$t5,0x1
/* f073258: 46043083 */ div.s $f2,$f6,$f4
/* f07325c: 46001202 */ mul.s $f8,$f2,$f0
/* f073260: e48200dc */ swc1 $f2,0xdc($a0)
/* f073264: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f073268: 46085180 */ add.s $f6,$f10,$f8
/* f07326c: 46046282 */ mul.s $f10,$f12,$f4
/* f073270: c48400d0 */ lwc1 $f4,0xd0($a0)
/* f073274: 46065200 */ add.s $f8,$f10,$f6
/* f073278: e48800a0 */ swc1 $f8,0xa0($a0)
/* f07327c: c7aa007c */ lwc1 $f10,0x7c($sp)
/* f073280: 460a1182 */ mul.s $f6,$f2,$f10
/* f073284: 46062200 */ add.s $f8,$f4,$f6
/* f073288: 46006282 */ mul.s $f10,$f12,$f0
/* f07328c: 460a4101 */ sub.s $f4,$f8,$f10
/* f073290: 05c1007d */ bgez $t6,.PB0f073488
/* f073294: e484009c */ swc1 $f4,0x9c($a0)
/* f073298: c486009c */ lwc1 $f6,0x9c($a0)
/* f07329c: 3c017f1b */ lui $at,0x7f1b
/* f0732a0: c428c088 */ lwc1 $f8,-0x3f78($at)
/* f0732a4: e7a60028 */ swc1 $f6,0x28($sp)
/* f0732a8: c7aa0028 */ lwc1 $f10,0x28($sp)
/* f0732ac: 460a403c */ c.lt.s $f8,$f10
/* f0732b0: 00000000 */ nop
/* f0732b4: 45030075 */ bc1tl .PB0f07348c
/* f0732b8: 8fbf001c */ lw $ra,0x1c($sp)
/* f0732bc: c48400a0 */ lwc1 $f4,0xa0($a0)
/* f0732c0: 3c017f1b */ lui $at,0x7f1b
/* f0732c4: c426c08c */ lwc1 $f6,-0x3f74($at)
/* f0732c8: e7a40024 */ swc1 $f4,0x24($sp)
/* f0732cc: c7a80024 */ lwc1 $f8,0x24($sp)
/* f0732d0: 3c017f1b */ lui $at,0x7f1b
/* f0732d4: 4608303c */ c.lt.s $f6,$f8
/* f0732d8: 00000000 */ nop
/* f0732dc: 4503006b */ bc1tl .PB0f07348c
/* f0732e0: 8fbf001c */ lw $ra,0x1c($sp)
/* f0732e4: c420c090 */ lwc1 $f0,-0x3f70($at)
/* f0732e8: c48200ac */ lwc1 $f2,0xac($a0)
/* f0732ec: 4602003c */ c.lt.s $f0,$f2
/* f0732f0: 00000000 */ nop
/* f0732f4: 45030065 */ bc1tl .PB0f07348c
/* f0732f8: 8fbf001c */ lw $ra,0x1c($sp)
/* f0732fc: c49200b0 */ lwc1 $f18,0xb0($a0)
/* f073300: 4612003c */ c.lt.s $f0,$f18
/* f073304: 00000000 */ nop
/* f073308: 45030060 */ bc1tl .PB0f07348c
/* f07330c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073310: c48c00b4 */ lwc1 $f12,0xb4($a0)
/* f073314: 460c003c */ c.lt.s $f0,$f12
/* f073318: 00000000 */ nop
/* f07331c: 4503005b */ bc1tl .PB0f07348c
/* f073320: 8fbf001c */ lw $ra,0x1c($sp)
/* f073324: c48e00b8 */ lwc1 $f14,0xb8($a0)
/* f073328: 460e003c */ c.lt.s $f0,$f14
/* f07332c: 00000000 */ nop
/* f073330: 45030056 */ bc1tl .PB0f07348c
/* f073334: 8fbf001c */ lw $ra,0x1c($sp)
/* f073338: c49000bc */ lwc1 $f16,0xbc($a0)
/* f07333c: e7b20038 */ swc1 $f18,0x38($sp)
/* f073340: 4610003c */ c.lt.s $f0,$f16
/* f073344: 00000000 */ nop
/* f073348: 45030050 */ bc1tl .PB0f07348c
/* f07334c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073350: c49200c0 */ lwc1 $f18,0xc0($a0)
/* f073354: 3c017f1b */ lui $at,0x7f1b
/* f073358: 4612003c */ c.lt.s $f0,$f18
/* f07335c: 00000000 */ nop
/* f073360: 4503004a */ bc1tl .PB0f07348c
/* f073364: 8fbf001c */ lw $ra,0x1c($sp)
/* f073368: c48000c8 */ lwc1 $f0,0xc8($a0)
/* f07336c: c424c094 */ lwc1 $f4,-0x3f6c($at)
/* f073370: 3c017f1b */ lui $at,0x7f1b
/* f073374: 4600203c */ c.lt.s $f4,$f0
/* f073378: 00000000 */ nop
/* f07337c: 45030043 */ bc1tl .PB0f07348c
/* f073380: 8fbf001c */ lw $ra,0x1c($sp)
/* f073384: c426c098 */ lwc1 $f6,-0x3f68($at)
/* f073388: 3c017f1b */ lui $at,0x7f1b
/* f07338c: 4606503c */ c.lt.s $f10,$f6
/* f073390: 00000000 */ nop
/* f073394: 4503003d */ bc1tl .PB0f07348c
/* f073398: 8fbf001c */ lw $ra,0x1c($sp)
/* f07339c: c424c09c */ lwc1 $f4,-0x3f64($at)
/* f0733a0: 3c017f1b */ lui $at,0x7f1b
/* f0733a4: e7a0003c */ swc1 $f0,0x3c($sp)
/* f0733a8: 4604403c */ c.lt.s $f8,$f4
/* f0733ac: 00000000 */ nop
/* f0733b0: 45030036 */ bc1tl .PB0f07348c
/* f0733b4: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733b8: c420c0a0 */ lwc1 $f0,-0x3f60($at)
/* f0733bc: c7aa0038 */ lwc1 $f10,0x38($sp)
/* f0733c0: 4600103c */ c.lt.s $f2,$f0
/* f0733c4: 00000000 */ nop
/* f0733c8: 45030030 */ bc1tl .PB0f07348c
/* f0733cc: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733d0: 4600503c */ c.lt.s $f10,$f0
/* f0733d4: 00000000 */ nop
/* f0733d8: 4503002c */ bc1tl .PB0f07348c
/* f0733dc: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733e0: 4600603c */ c.lt.s $f12,$f0
/* f0733e4: 00000000 */ nop
/* f0733e8: 45030028 */ bc1tl .PB0f07348c
/* f0733ec: 8fbf001c */ lw $ra,0x1c($sp)
/* f0733f0: 4600703c */ c.lt.s $f14,$f0
/* f0733f4: 00000000 */ nop
/* f0733f8: 45030024 */ bc1tl .PB0f07348c
/* f0733fc: 8fbf001c */ lw $ra,0x1c($sp)
/* f073400: 4600803c */ c.lt.s $f16,$f0
/* f073404: 00000000 */ nop
/* f073408: 45030020 */ bc1tl .PB0f07348c
/* f07340c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073410: 4600903c */ c.lt.s $f18,$f0
/* f073414: c7a6003c */ lwc1 $f6,0x3c($sp)
/* f073418: 3c017f1b */ lui $at,0x7f1b
/* f07341c: 4503001b */ bc1tl .PB0f07348c
/* f073420: 8fbf001c */ lw $ra,0x1c($sp)
/* f073424: c428c0a4 */ lwc1 $f8,-0x3f5c($at)
/* f073428: 3c01bfff */ lui $at,0xbfff
/* f07342c: 3421ffff */ ori $at,$at,0xffff
/* f073430: 4608303c */ c.lt.s $f6,$f8
/* f073434: 00000000 */ nop
/* f073438: 45030014 */ bc1tl .PB0f07348c
/* f07343c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073440: 8c8f0008 */ lw $t7,0x8($a0)
/* f073444: e494009c */ swc1 $f20,0x9c($a0)
/* f073448: e49400a0 */ swc1 $f20,0xa0($a0)
/* f07344c: 01e1c024 */ and $t8,$t7,$at
/* f073450: e49400ac */ swc1 $f20,0xac($a0)
/* f073454: e49400b0 */ swc1 $f20,0xb0($a0)
/* f073458: e49400b4 */ swc1 $f20,0xb4($a0)
/* f07345c: e49400b8 */ swc1 $f20,0xb8($a0)
/* f073460: e49400bc */ swc1 $f20,0xbc($a0)
/* f073464: e49400c0 */ swc1 $f20,0xc0($a0)
/* f073468: e49400c4 */ swc1 $f20,0xc4($a0)
/* f07346c: e49400c8 */ swc1 $f20,0xc8($a0)
/* f073470: ac8000cc */ sw $zero,0xcc($a0)
/* f073474: e49400d0 */ swc1 $f20,0xd0($a0)
/* f073478: e49400d4 */ swc1 $f20,0xd4($a0)
/* f07347c: e49400d8 */ swc1 $f20,0xd8($a0)
/* f073480: e49400dc */ swc1 $f20,0xdc($a0)
/* f073484: ac980008 */ sw $t8,0x8($a0)
.PB0f073488:
/* f073488: 8fbf001c */ lw $ra,0x1c($sp)
.PB0f07348c:
/* f07348c: d7b40010 */ ldc1 $f20,0x10($sp)
/* f073490: 27bd0088 */ addiu $sp,$sp,0x88
/* f073494: 03e00008 */ jr $ra
/* f073498: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel hoverbikeUpdateMovement
.late_rodata
glabel var7f1aa324
.word 0x3d32b179
glabel var7f1aa328
.word 0x3d99999a
glabel var7f1aa32c
.word 0x3dcccccd
glabel var7f1aa330
.word 0x3e99999a
glabel var7f1aa334
.word 0x3dcccccd
glabel var7f1aa338
.word 0x3e99999a
glabel var7f1aa33c
.word 0x3f6e147b
glabel var7f1aa340
.word 0x3e99999a
glabel var7f1aa344
.word 0x3f333333
glabel var7f1aa348
.word 0x3e99999a
glabel var7f1aa34c
.word 0x3d23d70a
glabel var7f1aa350
.word 0x40c907a9
glabel var7f1aa354
.word 0x3dcccccd
glabel var7f1aa358
.word 0x3e99999a
glabel var7f1aa35c
.word 0x3dcccccd
glabel var7f1aa360
.word 0x3e99999a
glabel var7f1aa364
.word 0x3ecccccd
glabel var7f1aa368
.word 0x3e80a8be
glabel var7f1aa36c
.word 0x3f8a3d71
glabel var7f1aa370
.word 0x3f3851ec
glabel var7f1aa374
.word 0x3f8a3d71
glabel var7f1aa378
.word 0x3f3851ec
glabel var7f1aa37c
.word 0x3f7851ec
glabel var7f1aa380
.word 0x3d23d70a
glabel var7f1aa384
.word 0x3e19999a
glabel var7f1aa388
.word 0x3f7d70a4
glabel var7f1aa38c
.word 0x3f4ccccd
glabel var7f1aa390
.word 0xbdcccccd
glabel var7f1aa394
.word 0x459c4000
glabel var7f1aa398
.word 0x4a127c00
glabel var7f1aa39c
.word 0x3dcccccd
glabel var7f1aa3a0
.word 0x3dcccccd
glabel var7f1aa3a4
.word 0x3a83126f
glabel var7f1aa3a8
.word 0x3dcccccd
glabel var7f1aa3ac
.word 0xbdcccccd
glabel var7f1aa3b0
.word 0xbdcccccd
glabel var7f1aa3b4
.word 0xba83126f
glabel var7f1aa3b8
.word 0xbdcccccd
.text
/* f072adc: 27bdff78 */ addiu $sp,$sp,-136
/* f072ae0: f7b40010 */ sdc1 $f20,0x10($sp)
/* f072ae4: afa5008c */ sw $a1,0x8c($sp)
/* f072ae8: 4480a000 */ mtc1 $zero,$f20
/* f072aec: c7a6008c */ lwc1 $f6,0x8c($sp)
/* f072af0: 3c017f1b */ lui $at,%hi(var7f1aa324)
/* f072af4: 44877000 */ mtc1 $a3,$f14
/* f072af8: 4614303c */ c.lt.s $f6,$f20
/* f072afc: c424a324 */ lwc1 $f4,%lo(var7f1aa324)($at)
/* f072b00: afbf001c */ sw $ra,0x1c($sp)
/* f072b04: afa60090 */ sw $a2,0x90($sp)
/* f072b08: 46047302 */ mul.s $f12,$f14,$f4
/* f072b0c: 45000009 */ bc1f .L0f072b34
/* f072b10: 3c05800a */ lui $a1,%hi(g_Vars)
/* f072b14: 3c013f00 */ lui $at,0x3f00
/* f072b18: 44814000 */ mtc1 $at,$f8
/* f072b1c: 3c013f80 */ lui $at,0x3f80
/* f072b20: 44812000 */ mtc1 $at,$f4
/* f072b24: 46083282 */ mul.s $f10,$f6,$f8
/* f072b28: 460a2181 */ sub.s $f6,$f4,$f10
/* f072b2c: 46066302 */ mul.s $f12,$f12,$f6
/* f072b30: 00000000 */ nop
.L0f072b34:
/* f072b34: 3c013f00 */ lui $at,0x3f00
/* f072b38: 44812000 */ mtc1 $at,$f4
/* f072b3c: c7a8008c */ lwc1 $f8,0x8c($sp)
/* f072b40: 24a59fc0 */ addiu $a1,$a1,%lo(g_Vars)
/* f072b44: 8cae0038 */ lw $t6,0x38($a1)
/* f072b48: 46044382 */ mul.s $f14,$f8,$f4
/* f072b4c: 00001825 */ or $v1,$zero,$zero
/* f072b50: 19c0000d */ blez $t6,.L0f072b88
/* f072b54: 3c017f1b */ lui $at,%hi(var7f1aa328)
/* f072b58: c420a328 */ lwc1 $f0,%lo(var7f1aa328)($at)
/* f072b5c: c48200ac */ lwc1 $f2,0xac($a0)
.L0f072b60:
/* f072b60: 24630001 */ addiu $v1,$v1,0x1
/* f072b64: 46026281 */ sub.s $f10,$f12,$f2
/* f072b68: 46005182 */ mul.s $f6,$f10,$f0
/* f072b6c: 46061200 */ add.s $f8,$f2,$f6
/* f072b70: e48800ac */ swc1 $f8,0xac($a0)
/* f072b74: 8caf0038 */ lw $t7,0x38($a1)
/* f072b78: 006f082a */ slt $at,$v1,$t7
/* f072b7c: 5420fff8 */ bnezl $at,.L0f072b60
/* f072b80: c48200ac */ lwc1 $f2,0xac($a0)
/* f072b84: 00001825 */ or $v1,$zero,$zero
.L0f072b88:
/* f072b88: 3c014140 */ lui $at,0x4140
/* f072b8c: 44815000 */ mtc1 $at,$f10
/* f072b90: c48400ac */ lwc1 $f4,0xac($a0)
/* f072b94: e7ae0044 */ swc1 $f14,0x44($sp)
/* f072b98: afa40088 */ sw $a0,0x88($sp)
/* f072b9c: 460a2182 */ mul.s $f6,$f4,$f10
/* f072ba0: afa30064 */ sw $v1,0x64($sp)
/* f072ba4: 4606a200 */ add.s $f8,$f20,$f6
/* f072ba8: 0fc1c836 */ jal hoverpropGetTurnAngle
/* f072bac: e7a8006c */ swc1 $f8,0x6c($sp)
/* f072bb0: e7a00080 */ swc1 $f0,0x80($sp)
/* f072bb4: 0c0068f7 */ jal sinf
/* f072bb8: 46000306 */ mov.s $f12,$f0
/* f072bbc: e7a0007c */ swc1 $f0,0x7c($sp)
/* f072bc0: 0c0068f4 */ jal cosf
/* f072bc4: c7ac0080 */ lwc1 $f12,0x80($sp)
/* f072bc8: c7b0008c */ lwc1 $f16,0x8c($sp)
/* f072bcc: 3c05800a */ lui $a1,%hi(g_Vars)
/* f072bd0: 24a59fc0 */ addiu $a1,$a1,%lo(g_Vars)
/* f072bd4: 4610a03e */ c.le.s $f20,$f16
/* f072bd8: 8fa30064 */ lw $v1,0x64($sp)
/* f072bdc: 8fa40088 */ lw $a0,0x88($sp)
/* f072be0: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f072be4: 4500000c */ bc1f .L0f072c18
/* f072be8: 3c017f1b */ lui $at,%hi(var7f1aa32c)
/* f072bec: 3c017f1b */ lui $at,%hi(var7f1aa330)
/* f072bf0: c424a32c */ lwc1 $f4,%lo(var7f1aa32c)($at)
/* f072bf4: 3c017f1b */ lui $at,%hi(var7f1aa334)
/* f072bf8: c426a330 */ lwc1 $f6,%lo(var7f1aa330)($at)
/* f072bfc: 46048280 */ add.s $f10,$f16,$f4
/* f072c00: c4a4004c */ lwc1 $f4,0x4c($a1)
/* f072c04: 46065202 */ mul.s $f8,$f10,$f6
/* f072c08: 00000000 */ nop
/* f072c0c: 46044082 */ mul.s $f2,$f8,$f4
/* f072c10: 1000000a */ b .L0f072c3c
/* f072c14: 00000000 */ nop
.L0f072c18:
/* f072c18: c42aa334 */ lwc1 $f10,%lo(var7f1aa334)($at)
/* f072c1c: 3c017f1b */ lui $at,%hi(var7f1aa338)
/* f072c20: c428a338 */ lwc1 $f8,%lo(var7f1aa338)($at)
/* f072c24: 46105181 */ sub.s $f6,$f10,$f16
/* f072c28: c4aa004c */ lwc1 $f10,0x4c($a1)
/* f072c2c: 46083102 */ mul.s $f4,$f6,$f8
/* f072c30: 00000000 */ nop
/* f072c34: 460a2082 */ mul.s $f2,$f4,$f10
/* f072c38: 00000000 */ nop
.L0f072c3c:
/* f072c3c: c49200b4 */ lwc1 $f18,0xb4($a0)
/* f072c40: 3c013f80 */ lui $at,0x3f80
/* f072c44: 44816000 */ mtc1 $at,$f12
/* f072c48: 460e903c */ c.lt.s $f18,$f14
/* f072c4c: 3c017f1b */ lui $at,%hi(var7f1aa33c)
/* f072c50: 4502000b */ bc1fl .L0f072c80
/* f072c54: 46029101 */ sub.s $f4,$f18,$f2
/* f072c58: 46029180 */ add.s $f6,$f18,$f2
/* f072c5c: e48600b4 */ swc1 $f6,0xb4($a0)
/* f072c60: c48800b4 */ lwc1 $f8,0xb4($a0)
/* f072c64: 4608703c */ c.lt.s $f14,$f8
/* f072c68: 00000000 */ nop
/* f072c6c: 4502000c */ bc1fl .L0f072ca0
/* f072c70: c48600c8 */ lwc1 $f6,0xc8($a0)
/* f072c74: 10000009 */ b .L0f072c9c
/* f072c78: e48e00b4 */ swc1 $f14,0xb4($a0)
/* f072c7c: 46029101 */ sub.s $f4,$f18,$f2
.L0f072c80:
/* f072c80: e48400b4 */ swc1 $f4,0xb4($a0)
/* f072c84: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f072c88: 460e503c */ c.lt.s $f10,$f14
/* f072c8c: 00000000 */ nop
/* f072c90: 45020003 */ bc1fl .L0f072ca0
/* f072c94: c48600c8 */ lwc1 $f6,0xc8($a0)
/* f072c98: e48e00b4 */ swc1 $f14,0xb4($a0)
.L0f072c9c:
/* f072c9c: c48600c8 */ lwc1 $f6,0xc8($a0)
.L0f072ca0:
/* f072ca0: c428a33c */ lwc1 $f8,%lo(var7f1aa33c)($at)
/* f072ca4: 3c0140a0 */ lui $at,0x40a0
/* f072ca8: 46083102 */ mul.s $f4,$f6,$f8
/* f072cac: c48600c4 */ lwc1 $f6,0xc4($a0)
/* f072cb0: e49000c4 */ swc1 $f16,0xc4($a0)
/* f072cb4: 46068201 */ sub.s $f8,$f16,$f6
/* f072cb8: e48400c8 */ swc1 $f4,0xc8($a0)
/* f072cbc: c48a00c8 */ lwc1 $f10,0xc8($a0)
/* f072cc0: 46085100 */ add.s $f4,$f10,$f8
/* f072cc4: 44815000 */ mtc1 $at,$f10
/* f072cc8: 3c01bf80 */ lui $at,0xbf80
/* f072ccc: e48400c8 */ swc1 $f4,0xc8($a0)
/* f072cd0: c48600c8 */ lwc1 $f6,0xc8($a0)
/* f072cd4: 460a3082 */ mul.s $f2,$f6,$f10
/* f072cd8: 4602603c */ c.lt.s $f12,$f2
/* f072cdc: 00000000 */ nop
/* f072ce0: 45020004 */ bc1fl .L0f072cf4
/* f072ce4: 44816000 */ mtc1 $at,$f12
/* f072ce8: 10000008 */ b .L0f072d0c
/* f072cec: 46006086 */ mov.s $f2,$f12
/* f072cf0: 44816000 */ mtc1 $at,$f12
.L0f072cf4:
/* f072cf4: 00000000 */ nop
/* f072cf8: 460c103c */ c.lt.s $f2,$f12
/* f072cfc: 00000000 */ nop
/* f072d00: 45020003 */ bc1fl .L0f072d10
/* f072d04: 4610a03e */ c.le.s $f20,$f16
/* f072d08: 46006086 */ mov.s $f2,$f12
.L0f072d0c:
/* f072d0c: 4610a03e */ c.le.s $f20,$f16
.L0f072d10:
/* f072d10: 00000000 */ nop
/* f072d14: 45020015 */ bc1fl .L0f072d6c
/* f072d18: 4614103c */ c.lt.s $f2,$f20
/* f072d1c: 4602a03c */ c.lt.s $f20,$f2
/* f072d20: 3c017f1b */ lui $at,%hi(var7f1aa340)
/* f072d24: 4500000c */ bc1f .L0f072d58
/* f072d28: 00000000 */ nop
/* f072d2c: 3c017f1b */ lui $at,%hi(var7f1aa344)
/* f072d30: c428a340 */ lwc1 $f8,%lo(var7f1aa340)($at)
/* f072d34: 3c017f1b */ lui $at,%hi(var7f1aa348)
/* f072d38: c426a344 */ lwc1 $f6,%lo(var7f1aa344)($at)
/* f072d3c: 46088102 */ mul.s $f4,$f16,$f8
/* f072d40: 00000000 */ nop
/* f072d44: 46068282 */ mul.s $f10,$f16,$f6
/* f072d48: 00000000 */ nop
/* f072d4c: 46025202 */ mul.s $f8,$f10,$f2
/* f072d50: 1000000d */ b .L0f072d88
/* f072d54: 46082300 */ add.s $f12,$f4,$f8
.L0f072d58:
/* f072d58: c426a348 */ lwc1 $f6,%lo(var7f1aa348)($at)
/* f072d5c: 46068302 */ mul.s $f12,$f16,$f6
/* f072d60: 10000009 */ b .L0f072d88
/* f072d64: 00000000 */ nop
/* f072d68: 4614103c */ c.lt.s $f2,$f20
.L0f072d6c:
/* f072d6c: 00000000 */ nop
/* f072d70: 45020005 */ bc1fl .L0f072d88
/* f072d74: 46007306 */ mov.s $f12,$f14
/* f072d78: 46027282 */ mul.s $f10,$f14,$f2
/* f072d7c: 10000002 */ b .L0f072d88
/* f072d80: 460a7301 */ sub.s $f12,$f14,$f10
/* f072d84: 46007306 */ mov.s $f12,$f14
.L0f072d88:
/* f072d88: 3c017f1b */ lui $at,%hi(var7f1aa34c)
/* f072d8c: c424a34c */ lwc1 $f4,%lo(var7f1aa34c)($at)
/* f072d90: 3c017f1b */ lui $at,%hi(var7f1aa350)
/* f072d94: c426a350 */ lwc1 $f6,%lo(var7f1aa350)($at)
/* f072d98: 46046202 */ mul.s $f8,$f12,$f4
/* f072d9c: c7b20090 */ lwc1 $f18,0x90($sp)
/* f072da0: 3c017f1b */ lui $at,%hi(var7f1aa354)
/* f072da4: 4612a03e */ c.le.s $f20,$f18
/* f072da8: 46064282 */ mul.s $f10,$f8,$f6
/* f072dac: 460aa100 */ add.s $f4,$f20,$f10
/* f072db0: 4500000c */ bc1f .L0f072de4
/* f072db4: e7a40070 */ swc1 $f4,0x70($sp)
/* f072db8: 3c017f1b */ lui $at,%hi(var7f1aa358)
/* f072dbc: c428a354 */ lwc1 $f8,%lo(var7f1aa354)($at)
/* f072dc0: 3c017f1b */ lui $at,%hi(var7f1aa35c)
/* f072dc4: c42aa358 */ lwc1 $f10,%lo(var7f1aa358)($at)
/* f072dc8: 46089180 */ add.s $f6,$f18,$f8
/* f072dcc: c4a8004c */ lwc1 $f8,0x4c($a1)
/* f072dd0: 460a3102 */ mul.s $f4,$f6,$f10
/* f072dd4: 00000000 */ nop
/* f072dd8: 46082302 */ mul.s $f12,$f4,$f8
/* f072ddc: 1000000a */ b .L0f072e08
/* f072de0: 00000000 */ nop
.L0f072de4:
/* f072de4: c426a35c */ lwc1 $f6,%lo(var7f1aa35c)($at)
/* f072de8: 3c017f1b */ lui $at,%hi(var7f1aa360)
/* f072dec: c424a360 */ lwc1 $f4,%lo(var7f1aa360)($at)
/* f072df0: 46123281 */ sub.s $f10,$f6,$f18
/* f072df4: c4a6004c */ lwc1 $f6,0x4c($a1)
/* f072df8: 46045202 */ mul.s $f8,$f10,$f4
/* f072dfc: 00000000 */ nop
/* f072e00: 46064302 */ mul.s $f12,$f8,$f6
/* f072e04: 00000000 */ nop
.L0f072e08:
/* f072e08: 3c017f1b */ lui $at,%hi(var7f1aa364)
/* f072e0c: c42aa364 */ lwc1 $f10,%lo(var7f1aa364)($at)
/* f072e10: c48e00b0 */ lwc1 $f14,0xb0($a0)
/* f072e14: 3c017f1b */ lui $at,%hi(var7f1aa368)
/* f072e18: 46125082 */ mul.s $f2,$f10,$f18
/* f072e1c: 4602703c */ c.lt.s $f14,$f2
/* f072e20: 00000000 */ nop
/* f072e24: 4502000b */ bc1fl .L0f072e54
/* f072e28: 460c7181 */ sub.s $f6,$f14,$f12
/* f072e2c: 460c7100 */ add.s $f4,$f14,$f12
/* f072e30: e48400b0 */ swc1 $f4,0xb0($a0)
/* f072e34: c48800b0 */ lwc1 $f8,0xb0($a0)
/* f072e38: 4608103c */ c.lt.s $f2,$f8
/* f072e3c: 00000000 */ nop
/* f072e40: 4500000b */ bc1f .L0f072e70
/* f072e44: 00000000 */ nop
/* f072e48: 10000009 */ b .L0f072e70
/* f072e4c: e48200b0 */ swc1 $f2,0xb0($a0)
/* f072e50: 460c7181 */ sub.s $f6,$f14,$f12
.L0f072e54:
/* f072e54: e48600b0 */ swc1 $f6,0xb0($a0)
/* f072e58: c48a00b0 */ lwc1 $f10,0xb0($a0)
/* f072e5c: 4602503c */ c.lt.s $f10,$f2
/* f072e60: 00000000 */ nop
/* f072e64: 45000002 */ bc1f .L0f072e70
/* f072e68: 00000000 */ nop
/* f072e6c: e48200b0 */ swc1 $f2,0xb0($a0)
.L0f072e70:
/* f072e70: c424a368 */ lwc1 $f4,%lo(var7f1aa368)($at)
/* f072e74: 8ca20038 */ lw $v0,0x38($a1)
/* f072e78: 46049202 */ mul.s $f8,$f18,$f4
/* f072e7c: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f072e80: 4608a180 */ add.s $f6,$f20,$f8
/* f072e84: 18400032 */ blez $v0,.L0f072f50
/* f072e88: e7a60068 */ swc1 $f6,0x68($sp)
/* f072e8c: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f072e90: 3c017f1b */ lui $at,%hi(var7f1aa36c)
/* f072e94: c426a36c */ lwc1 $f6,%lo(var7f1aa36c)($at)
/* f072e98: 46045202 */ mul.s $f8,$f10,$f4
/* f072e9c: c48a00b0 */ lwc1 $f10,0xb0($a0)
/* f072ea0: 3c017f1b */ lui $at,%hi(var7f1aa370)
/* f072ea4: 46064302 */ mul.s $f12,$f8,$f6
/* f072ea8: c426a370 */ lwc1 $f6,%lo(var7f1aa370)($at)
/* f072eac: 3c017f1b */ lui $at,%hi(var7f1aa374)
/* f072eb0: 46045202 */ mul.s $f8,$f10,$f4
/* f072eb4: c48a00b4 */ lwc1 $f10,0xb4($a0)
/* f072eb8: 46064382 */ mul.s $f14,$f8,$f6
/* f072ebc: c428a374 */ lwc1 $f8,%lo(var7f1aa374)($at)
/* f072ec0: c48600b0 */ lwc1 $f6,0xb0($a0)
/* f072ec4: 46005102 */ mul.s $f4,$f10,$f0
/* f072ec8: 3c017f1b */ lui $at,%hi(var7f1aa378)
/* f072ecc: 46003287 */ neg.s $f10,$f6
/* f072ed0: 46082402 */ mul.s $f16,$f4,$f8
/* f072ed4: c428a378 */ lwc1 $f8,%lo(var7f1aa378)($at)
/* f072ed8: 3c017f1b */ lui $at,%hi(var7f1aa37c)
/* f072edc: 46005102 */ mul.s $f4,$f10,$f0
/* f072ee0: c422a37c */ lwc1 $f2,%lo(var7f1aa37c)($at)
/* f072ee4: 46082482 */ mul.s $f18,$f4,$f8
/* f072ee8: 00000000 */ nop
.L0f072eec:
/* f072eec: c48600d4 */ lwc1 $f6,0xd4($a0)
/* f072ef0: c48400d0 */ lwc1 $f4,0xd0($a0)
/* f072ef4: 24630001 */ addiu $v1,$v1,0x1
/* f072ef8: 46023282 */ mul.s $f10,$f6,$f2
/* f072efc: 00000000 */ nop
/* f072f00: 46022202 */ mul.s $f8,$f4,$f2
/* f072f04: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f072f08: c48600d4 */ lwc1 $f6,0xd4($a0)
/* f072f0c: e48800d0 */ swc1 $f8,0xd0($a0)
/* f072f10: c48400d0 */ lwc1 $f4,0xd0($a0)
/* f072f14: 46103280 */ add.s $f10,$f6,$f16
/* f072f18: 460c2200 */ add.s $f8,$f4,$f12
/* f072f1c: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f072f20: c48600d4 */ lwc1 $f6,0xd4($a0)
/* f072f24: e48800d0 */ swc1 $f8,0xd0($a0)
/* f072f28: c48400d0 */ lwc1 $f4,0xd0($a0)
/* f072f2c: 460e3280 */ add.s $f10,$f6,$f14
/* f072f30: 46122200 */ add.s $f8,$f4,$f18
/* f072f34: e48a00d4 */ swc1 $f10,0xd4($a0)
/* f072f38: e48800d0 */ swc1 $f8,0xd0($a0)
/* f072f3c: 8ca20038 */ lw $v0,0x38($a1)
/* f072f40: 0062082a */ slt $at,$v1,$v0
/* f072f44: 1420ffe9 */ bnez $at,.L0f072eec
/* f072f48: 00000000 */ nop
/* f072f4c: 00001825 */ or $v1,$zero,$zero
.L0f072f50:
/* f072f50: 1840001b */ blez $v0,.L0f072fc0
/* f072f54: 3c017f1b */ lui $at,%hi(var7f1aa380)
/* f072f58: c432a380 */ lwc1 $f18,%lo(var7f1aa380)($at)
/* f072f5c: 3c017f1b */ lui $at,%hi(var7f1aa384)
/* f072f60: c422a384 */ lwc1 $f2,%lo(var7f1aa384)($at)
/* f072f64: c48c00b8 */ lwc1 $f12,0xb8($a0)
.L0f072f68:
/* f072f68: c7a60070 */ lwc1 $f6,0x70($sp)
/* f072f6c: c48e00bc */ lwc1 $f14,0xbc($a0)
/* f072f70: c49000c0 */ lwc1 $f16,0xc0($a0)
/* f072f74: 460c3281 */ sub.s $f10,$f6,$f12
/* f072f78: 24630001 */ addiu $v1,$v1,0x1
/* f072f7c: 46125102 */ mul.s $f4,$f10,$f18
/* f072f80: 46046200 */ add.s $f8,$f12,$f4
/* f072f84: e48800b8 */ swc1 $f8,0xb8($a0)
/* f072f88: c7a6006c */ lwc1 $f6,0x6c($sp)
/* f072f8c: 460e3281 */ sub.s $f10,$f6,$f14
/* f072f90: 46025102 */ mul.s $f4,$f10,$f2
/* f072f94: 46047200 */ add.s $f8,$f14,$f4
/* f072f98: e48800bc */ swc1 $f8,0xbc($a0)
/* f072f9c: c7a60068 */ lwc1 $f6,0x68($sp)
/* f072fa0: 46103281 */ sub.s $f10,$f6,$f16
/* f072fa4: 46125102 */ mul.s $f4,$f10,$f18
/* f072fa8: 46048200 */ add.s $f8,$f16,$f4
/* f072fac: e48800c0 */ swc1 $f8,0xc0($a0)
/* f072fb0: 8cb80038 */ lw $t8,0x38($a1)
/* f072fb4: 0078082a */ slt $at,$v1,$t8
/* f072fb8: 5420ffeb */ bnezl $at,.L0f072f68
/* f072fbc: c48c00b8 */ lwc1 $f12,0xb8($a0)
.L0f072fc0:
/* f072fc0: 3c017f1b */ lui $at,%hi(var7f1aa388)
/* f072fc4: c7a2008c */ lwc1 $f2,0x8c($sp)
/* f072fc8: c426a388 */ lwc1 $f6,%lo(var7f1aa388)($at)
/* f072fcc: 4602303e */ c.le.s $f6,$f2
/* f072fd0: 00000000 */ nop
/* f072fd4: 4502000b */ bc1fl .L0f073004
/* f072fd8: 8c8200cc */ lw $v0,0xcc($a0)
/* f072fdc: 8c9900cc */ lw $t9,0xcc($a0)
/* f072fe0: 8ca80034 */ lw $t0,0x34($a1)
/* f072fe4: 03281021 */ addu $v0,$t9,$t0
/* f072fe8: 28410961 */ slti $at,$v0,0x961
/* f072fec: 1420001d */ bnez $at,.L0f073064
/* f072ff0: ac8200cc */ sw $v0,0xcc($a0)
/* f072ff4: 24020960 */ addiu $v0,$zero,0x960
/* f072ff8: 1000001a */ b .L0f073064
/* f072ffc: ac8200cc */ sw $v0,0xcc($a0)
/* f073000: 8c8200cc */ lw $v0,0xcc($a0)
.L0f073004:
/* f073004: 3c017f1b */ lui $at,%hi(var7f1aa38c)
/* f073008: 58400017 */ blezl $v0,.L0f073068
/* f07300c: 44824000 */ mtc1 $v0,$f8
/* f073010: c42aa38c */ lwc1 $f10,%lo(var7f1aa38c)($at)
/* f073014: 3c017f1b */ lui $at,%hi(var7f1aa390)
/* f073018: 4602503e */ c.le.s $f10,$f2
/* f07301c: 00000000 */ nop
/* f073020: 45030011 */ bc1tl .L0f073068
/* f073024: 44824000 */ mtc1 $v0,$f8
/* f073028: c424a390 */ lwc1 $f4,%lo(var7f1aa390)($at)
/* f07302c: 4602203e */ c.le.s $f4,$f2
/* f073030: 00000000 */ nop
/* f073034: 4502000a */ bc1fl .L0f073060
/* f073038: ac8000cc */ sw $zero,0xcc($a0)
/* f07303c: 8cab0034 */ lw $t3,0x34($a1)
/* f073040: 004b6023 */ subu $t4,$v0,$t3
/* f073044: ac8c00cc */ sw $t4,0xcc($a0)
/* f073048: 05810006 */ bgez $t4,.L0f073064
/* f07304c: 01801025 */ or $v0,$t4,$zero
/* f073050: ac8000cc */ sw $zero,0xcc($a0)
/* f073054: 10000003 */ b .L0f073064
/* f073058: 00001025 */ or $v0,$zero,$zero
/* f07305c: ac8000cc */ sw $zero,0xcc($a0)
.L0f073060:
/* f073060: 00001025 */ or $v0,$zero,$zero
.L0f073064:
/* f073064: 44824000 */ mtc1 $v0,$f8
.L0f073068:
/* f073068: 3c017f1b */ lui $at,%hi(var7f1aa394)
/* f07306c: c42aa394 */ lwc1 $f10,%lo(var7f1aa394)($at)
/* f073070: 468041a0 */ cvt.s.w $f6,$f8
/* f073074: 3c017f1b */ lui $at,%hi(var7f1aa398)
/* f073078: c428a398 */ lwc1 $f8,%lo(var7f1aa398)($at)
/* f07307c: c48c00d8 */ lwc1 $f12,0xd8($a0)
/* f073080: 8c8d0008 */ lw $t5,0x8($a0)
/* f073084: 460a3102 */ mul.s $f4,$f6,$f10
/* f073088: c48600d4 */ lwc1 $f6,0xd4($a0)
/* f07308c: 000d7040 */ sll $t6,$t5,0x1
/* f073090: 46082083 */ div.s $f2,$f4,$f8
/* f073094: 46001282 */ mul.s $f10,$f2,$f0
/* f073098: e48200dc */ swc1 $f2,0xdc($a0)
/* f07309c: c7a8007c */ lwc1 $f8,0x7c($sp)
/* f0730a0: 460a3100 */ add.s $f4,$f6,$f10
/* f0730a4: 46086182 */ mul.s $f6,$f12,$f8
/* f0730a8: c48800d0 */ lwc1 $f8,0xd0($a0)
/* f0730ac: 46043280 */ add.s $f10,$f6,$f4
/* f0730b0: e48a00a0 */ swc1 $f10,0xa0($a0)
/* f0730b4: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f0730b8: 46061102 */ mul.s $f4,$f2,$f6
/* f0730bc: 46044280 */ add.s $f10,$f8,$f4
/* f0730c0: 46006182 */ mul.s $f6,$f12,$f0
/* f0730c4: 46065201 */ sub.s $f8,$f10,$f6
/* f0730c8: 05c1007d */ bgez $t6,.L0f0732c0
/* f0730cc: e488009c */ swc1 $f8,0x9c($a0)
/* f0730d0: c484009c */ lwc1 $f4,0x9c($a0)
/* f0730d4: 3c017f1b */ lui $at,%hi(var7f1aa39c)
/* f0730d8: c42aa39c */ lwc1 $f10,%lo(var7f1aa39c)($at)
/* f0730dc: e7a40028 */ swc1 $f4,0x28($sp)
/* f0730e0: c7a60028 */ lwc1 $f6,0x28($sp)
/* f0730e4: 4606503c */ c.lt.s $f10,$f6
/* f0730e8: 00000000 */ nop
/* f0730ec: 45030075 */ bc1tl .L0f0732c4
/* f0730f0: 8fbf001c */ lw $ra,0x1c($sp)
/* f0730f4: c48800a0 */ lwc1 $f8,0xa0($a0)
/* f0730f8: 3c017f1b */ lui $at,%hi(var7f1aa3a0)
/* f0730fc: c424a3a0 */ lwc1 $f4,%lo(var7f1aa3a0)($at)
/* f073100: e7a80024 */ swc1 $f8,0x24($sp)
/* f073104: c7aa0024 */ lwc1 $f10,0x24($sp)
/* f073108: 3c017f1b */ lui $at,%hi(var7f1aa3a4)
/* f07310c: 460a203c */ c.lt.s $f4,$f10
/* f073110: 00000000 */ nop
/* f073114: 4503006b */ bc1tl .L0f0732c4
/* f073118: 8fbf001c */ lw $ra,0x1c($sp)
/* f07311c: c420a3a4 */ lwc1 $f0,%lo(var7f1aa3a4)($at)
/* f073120: c48200ac */ lwc1 $f2,0xac($a0)
/* f073124: 4602003c */ c.lt.s $f0,$f2
/* f073128: 00000000 */ nop
/* f07312c: 45030065 */ bc1tl .L0f0732c4
/* f073130: 8fbf001c */ lw $ra,0x1c($sp)
/* f073134: c49000b0 */ lwc1 $f16,0xb0($a0)
/* f073138: 4610003c */ c.lt.s $f0,$f16
/* f07313c: 00000000 */ nop
/* f073140: 45030060 */ bc1tl .L0f0732c4
/* f073144: 8fbf001c */ lw $ra,0x1c($sp)
/* f073148: c49200b4 */ lwc1 $f18,0xb4($a0)
/* f07314c: 4612003c */ c.lt.s $f0,$f18
/* f073150: 00000000 */ nop
/* f073154: 4503005b */ bc1tl .L0f0732c4
/* f073158: 8fbf001c */ lw $ra,0x1c($sp)
/* f07315c: c48c00b8 */ lwc1 $f12,0xb8($a0)
/* f073160: 460c003c */ c.lt.s $f0,$f12
/* f073164: 00000000 */ nop
/* f073168: 45030056 */ bc1tl .L0f0732c4
/* f07316c: 8fbf001c */ lw $ra,0x1c($sp)
/* f073170: c48e00bc */ lwc1 $f14,0xbc($a0)
/* f073174: e7b00038 */ swc1 $f16,0x38($sp)
/* f073178: 460e003c */ c.lt.s $f0,$f14
/* f07317c: 00000000 */ nop
/* f073180: 45030050 */ bc1tl .L0f0732c4
/* f073184: 8fbf001c */ lw $ra,0x1c($sp)
/* f073188: c49000c0 */ lwc1 $f16,0xc0($a0)
/* f07318c: 3c017f1b */ lui $at,%hi(var7f1aa3a8)
/* f073190: 4610003c */ c.lt.s $f0,$f16
/* f073194: 00000000 */ nop
/* f073198: 4503004a */ bc1tl .L0f0732c4
/* f07319c: 8fbf001c */ lw $ra,0x1c($sp)
/* f0731a0: c48000c8 */ lwc1 $f0,0xc8($a0)
/* f0731a4: c428a3a8 */ lwc1 $f8,%lo(var7f1aa3a8)($at)
/* f0731a8: 3c017f1b */ lui $at,%hi(var7f1aa3ac)
/* f0731ac: 4600403c */ c.lt.s $f8,$f0
/* f0731b0: 00000000 */ nop
/* f0731b4: 45030043 */ bc1tl .L0f0732c4
/* f0731b8: 8fbf001c */ lw $ra,0x1c($sp)
/* f0731bc: c424a3ac */ lwc1 $f4,%lo(var7f1aa3ac)($at)
/* f0731c0: 3c017f1b */ lui $at,%hi(var7f1aa3b0)
/* f0731c4: 4604303c */ c.lt.s $f6,$f4
/* f0731c8: 00000000 */ nop
/* f0731cc: 4503003d */ bc1tl .L0f0732c4
/* f0731d0: 8fbf001c */ lw $ra,0x1c($sp)
/* f0731d4: c428a3b0 */ lwc1 $f8,%lo(var7f1aa3b0)($at)
/* f0731d8: 3c017f1b */ lui $at,%hi(var7f1aa3b4)
/* f0731dc: e7a0003c */ swc1 $f0,0x3c($sp)
/* f0731e0: 4608503c */ c.lt.s $f10,$f8
/* f0731e4: 00000000 */ nop
/* f0731e8: 45030036 */ bc1tl .L0f0732c4
/* f0731ec: 8fbf001c */ lw $ra,0x1c($sp)
/* f0731f0: c420a3b4 */ lwc1 $f0,%lo(var7f1aa3b4)($at)
/* f0731f4: c7a60038 */ lwc1 $f6,0x38($sp)
/* f0731f8: 4600103c */ c.lt.s $f2,$f0
/* f0731fc: 00000000 */ nop
/* f073200: 45030030 */ bc1tl .L0f0732c4
/* f073204: 8fbf001c */ lw $ra,0x1c($sp)
/* f073208: 4600303c */ c.lt.s $f6,$f0
/* f07320c: 00000000 */ nop
/* f073210: 4503002c */ bc1tl .L0f0732c4
/* f073214: 8fbf001c */ lw $ra,0x1c($sp)
/* f073218: 4600903c */ c.lt.s $f18,$f0
/* f07321c: 00000000 */ nop
/* f073220: 45030028 */ bc1tl .L0f0732c4
/* f073224: 8fbf001c */ lw $ra,0x1c($sp)
/* f073228: 4600603c */ c.lt.s $f12,$f0
/* f07322c: 00000000 */ nop
/* f073230: 45030024 */ bc1tl .L0f0732c4
/* f073234: 8fbf001c */ lw $ra,0x1c($sp)
/* f073238: 4600703c */ c.lt.s $f14,$f0
/* f07323c: 00000000 */ nop
/* f073240: 45030020 */ bc1tl .L0f0732c4
/* f073244: 8fbf001c */ lw $ra,0x1c($sp)
/* f073248: 4600803c */ c.lt.s $f16,$f0
/* f07324c: c7a4003c */ lwc1 $f4,0x3c($sp)
/* f073250: 3c017f1b */ lui $at,%hi(var7f1aa3b8)
/* f073254: 4503001b */ bc1tl .L0f0732c4
/* f073258: 8fbf001c */ lw $ra,0x1c($sp)
/* f07325c: c42aa3b8 */ lwc1 $f10,%lo(var7f1aa3b8)($at)
/* f073260: 3c01bfff */ lui $at,0xbfff
/* f073264: 3421ffff */ ori $at,$at,0xffff
/* f073268: 460a203c */ c.lt.s $f4,$f10
/* f07326c: 00000000 */ nop
/* f073270: 45030014 */ bc1tl .L0f0732c4
/* f073274: 8fbf001c */ lw $ra,0x1c($sp)
/* f073278: 8c8f0008 */ lw $t7,0x8($a0)
/* f07327c: e494009c */ swc1 $f20,0x9c($a0)
/* f073280: e49400a0 */ swc1 $f20,0xa0($a0)
/* f073284: 01e1c024 */ and $t8,$t7,$at
/* f073288: e49400ac */ swc1 $f20,0xac($a0)
/* f07328c: e49400b0 */ swc1 $f20,0xb0($a0)
/* f073290: e49400b4 */ swc1 $f20,0xb4($a0)
/* f073294: e49400b8 */ swc1 $f20,0xb8($a0)
/* f073298: e49400bc */ swc1 $f20,0xbc($a0)
/* f07329c: e49400c0 */ swc1 $f20,0xc0($a0)
/* f0732a0: e49400c4 */ swc1 $f20,0xc4($a0)
/* f0732a4: e49400c8 */ swc1 $f20,0xc8($a0)
/* f0732a8: ac8000cc */ sw $zero,0xcc($a0)
/* f0732ac: e49400d0 */ swc1 $f20,0xd0($a0)
/* f0732b0: e49400d4 */ swc1 $f20,0xd4($a0)
/* f0732b4: e49400d8 */ swc1 $f20,0xd8($a0)
/* f0732b8: e49400dc */ swc1 $f20,0xdc($a0)
/* f0732bc: ac980008 */ sw $t8,0x8($a0)
.L0f0732c0:
/* f0732c0: 8fbf001c */ lw $ra,0x1c($sp)
.L0f0732c4:
/* f0732c4: d7b40010 */ ldc1 $f20,0x10($sp)
/* f0732c8: 27bd0088 */ addiu $sp,$sp,0x88
/* f0732cc: 03e00008 */ jr $ra
/* f0732d0: 00000000 */ nop
);
#endif
// Mismatches:
// Goal loads 1.0f earlier for use with leanmult
// Mine loads 1.0f twice for leanmult
// Mine loads speedfowards twice while goal keeps in f2 (near maxspeedtime240)
//void hoverbikeUpdateMovement(struct hoverbikeobj *bike, f32 speedforwards, f32 speedsideways, f32 speedtheta)
//{
// f32 fVar6;
// f32 angle; // 80
// f32 sinangle; // 7c
// f32 cosangle;
// f32 f2;
// f32 sp70 = 0;
// f32 sp6c = 0;
// f32 sp68 = 0;
// s32 i; // 64
// f32 leanmult;
// f32 fVar7;
// f32 fVar10;
// f32 prevleanspeed;
// u32 stack;
// f32 tmp;
// f32 sp44;
//
// tmp = speedtheta * 0.04362628236413f;
//
// if (speedforwards < 0) {
// tmp *= 1.0f - speedforwards * 0.5f;
// }
//
// for (i = 0; i < g_Vars.lvupdate240_60; i++) {
// bike->w += (tmp - bike->w) * 0.075f;
// }
//
// // b84
// sp6c += bike->w * 12;
// angle = hoverpropGetTurnAngle(&bike->base);
// sinangle = sinf(angle);
// cosangle = cosf(angle);
//
// if (speedforwards >= 0) {
// f2 = (0.1f + speedforwards) * 0.3f * g_Vars.lvupdate240freal;
// } else {
// f2 = (0.1f - speedforwards) * 0.3f * g_Vars.lvupdate240freal;
// }
//
// // c3c
// if (bike->rels[1] < speedforwards * 0.5f) {
// bike->rels[1] += f2;
//
// if (bike->rels[1] > speedforwards * 0.5f) {
// bike->rels[1] = speedforwards * 0.5f;
// }
// } else {
// bike->rels[1] -= f2;
//
// if (bike->rels[1] < speedforwards * 0.5f) {
// bike->rels[1] = speedforwards * 0.5f;
// }
// }
//
// prevleanspeed = bike->leanspeed;
// bike->leanspeed = speedforwards;
// bike->leandiff *= 0.93f;
// bike->leandiff += speedforwards - prevleanspeed;
//
// leanmult = bike->leandiff * 5;
//
// if (leanmult > 1.0f) {
// leanmult = 1.0f;
// } else if (leanmult < -1.0f) {
// leanmult = -1.0f;
// }
//
// // d14
// if (speedforwards >= 0) {
// if (leanmult > 0) {
// fVar7 = speedforwards * 0.3f + speedforwards * 0.7f * leanmult;
// } else {
// fVar7 = speedforwards * 0.3f;
// }
// } else {
// if (leanmult < 0) {
// fVar7 = speedforwards * 0.5f - speedforwards * 0.5f * leanmult;
// } else {
// fVar7 = speedforwards * 0.5f;
// }
// }
//
// // d84
// sp70 += fVar7 * 0.04f * M_BADTAU;
//
// if (speedsideways >= 0) {
// f2 = (0.1f + speedsideways) * 0.3f * g_Vars.lvupdate240freal;
// } else {
// f2 = (0.1f - speedsideways) * 0.3f * g_Vars.lvupdate240freal;
// }
//
// if (bike->rels[0] < speedsideways * 0.4f) {
// bike->rels[0] += f2;
//
// if (bike->rels[0] > speedsideways * 0.4f) {
// bike->rels[0] = speedsideways * 0.4f;
// }
// } else {
// bike->rels[0] -= f2;
//
// if (bike->rels[0] < speedsideways * 0.4f) {
// bike->rels[0] = speedsideways * 0.4f;
// }
// }
//
// sp68 += speedsideways * 0.2512874007225f;
//
// for (i = 0; i < g_Vars.lvupdate240_60; i++) {
// bike->speedabs[1] *= 0.97f;
// bike->speedabs[0] *= 0.97f;
// bike->speedabs[1] += bike->rels[1] * cosangle * 1.08f;
// bike->speedabs[0] += bike->rels[1] * sinangle * 1.08f;
// bike->speedabs[1] += bike->rels[0] * sinangle * 0.72f;
// bike->speedabs[0] += -bike->rels[0] * cosangle * 0.72f;
// }
//
// for (i = 0; i < g_Vars.lvupdate240_60; i++) {
// bike->exreal += (sp70 - bike->exreal) * 0.04f;
// bike->ezreal += (sp6c - bike->ezreal) * 0.15f;
// bike->ezreal2 += (sp68 - bike->ezreal2) * 0.04f;
// }
//
// if (speedforwards >= 0.99f) {
// bike->maxspeedtime240 += g_Vars.lvupdate240;
//
// if (bike->maxspeedtime240 > 2400) {
// bike->maxspeedtime240 = 2400;
// }
// } else if (bike->maxspeedtime240 > 0) {
// if (speedforwards >= 0.8f) {
// // empty
// } else if (speedforwards >= -0.1f) {
// bike->maxspeedtime240 -= g_Vars.lvupdate240;
//
// if (bike->maxspeedtime240 < 0) {
// bike->maxspeedtime240 = 0;
// }
// } else {
// bike->maxspeedtime240 = 0;
// }
// }
//
// bike->speedrel[1] = bike->maxspeedtime240 * 50000.0f / 2400000;
//
// bike->speed[1] = bike->speedabs[1] + bike->speedrel[0] * sinangle + bike->speedrel[1] * cosangle;
// bike->speed[0] = bike->speedabs[0] + bike->speedrel[1] * sinangle - bike->speedrel[0] * cosangle;
//
// if (bike->base.flags & OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY) {
// if (bike->speed[0] > 0.1f
// || bike->speed[1] > 0.1f
// || bike->w > 0.001f
// || bike->rels[0] > 0.001f
// || bike->rels[1] > 0.001f
// || bike->exreal > 0.001f
// || bike->ezreal > 0.001f
// || bike->ezreal2 > 0.001f
// || bike->leandiff > 0.1f
// || (bike->speed[0] < -0.1f)
// || (bike->speed[1] < -0.1f)
// || (bike->w < -0.001f)
// || (bike->rels[0] < -0.001f)
// || (bike->rels[1] < -0.001f)
// || (bike->exreal < -0.001f)
// || (bike->ezreal < -0.001f)
// || (bike->ezreal2 < -0.001f)
// || (bike->leandiff < -0.1f)) {
// // still moving
// } else {
// bike->speed[0] = 0;
// bike->speed[1] = 0;
// bike->w = 0;
// bike->rels[0] = 0;
// bike->rels[1] = 0;
// bike->exreal = 0;
// bike->ezreal = 0;
// bike->ezreal2 = 0;
// bike->leanspeed = 0;
// bike->leandiff = 0;
// bike->maxspeedtime240 = 0;
// bike->speedabs[0] = 0;
// bike->speedabs[1] = 0;
// bike->speedrel[0] = 0;
// bike->speedrel[1] = 0;
//
// if (1);
//
// bike->base.flags &= ~OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY;
// }
// }
//}
void platformDisplaceProps2(struct prop *platform, Mtxf *arg1)
{
struct prop *prop;
s16 *propnumptr;
s16 propnums[256];
u8 *sp9c;
u8 *sp98;
Mtxf sp58;
if (propUpdateGeometry(platform, &sp9c, &sp98)) {
roomGetProps(platform->rooms, propnums, 256);
propnumptr = propnums;
while (*propnumptr >= 0) {
prop = &g_Vars.props[*propnumptr];
if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_WEAPON) {
struct defaultobj *obj = prop->obj;
if (prop->pos.y > platform->pos.y
&& (obj->hidden & OBJHFLAG_00008000)
&& func000266a4(prop->pos.x, prop->pos.z, (struct geo *)sp9c)) {
mtx3ToMtx4(obj->realrot, &sp58);
mtx4SetTranslation(&prop->pos, &sp58);
mtx4MultMtx4InPlace(arg1, &sp58);
mtx4ToMtx3(&sp58, obj->realrot);
prop->pos.x = sp58.m[3][0];
prop->pos.y = sp58.m[3][1];
prop->pos.z = sp58.m[3][2];
propDeregisterRooms(prop);
func0f065e74(&platform->pos, platform->rooms, &prop->pos, prop->rooms);
func0f069c70(obj, true, true);
}
}
propnumptr++;
}
}
}
/**
* Tick a Slayer fly-by-wire rocket that's being controlled by a bot.
*/
bool rocketTickFbw(struct weaponobj *rocket)
{
bool cdresult;
f32 speed;
s32 i;
struct projectile *projectile = rocket->base.projectile;
struct prop *rocketprop = rocket->base.prop;
struct chrdata *ownerchr;
struct coord sp164;
struct coord sp158;
Mtxf sp118;
Mtxf spd8;
Mtxf sp98;
f32 xdist;
f32 ydist;
f32 zdist;
struct prop *targetprop;
f32 xrot;
f32 yrot;
struct coord newpos;
struct coord dir;
u32 stack[2];
s16 newrooms[8];
if (projectile->ownerprop && projectile->ownerprop->type == PROPTYPE_CHR) {
ownerchr = projectile->ownerprop->chr;
} else {
ownerchr = NULL;
}
// If close to the next step (ie. a waypoint)
// then advance to the one after that
xdist = projectile->nextsteppos.x - rocketprop->pos.x;
ydist = projectile->nextsteppos.y - rocketprop->pos.y;
zdist = projectile->nextsteppos.z - rocketprop->pos.z;
if (ownerchr && xdist * xdist + ydist * ydist + zdist * zdist < 100 * 100) {
projectile->step++;
if (projectile->numwaypads <= 0 || projectile->step >= projectile->numwaypads) {
targetprop = chrGetTargetProp(ownerchr);
if (!botactFindRocketRoute(ownerchr, &rocketprop->pos, &targetprop->pos, rocketprop->rooms, targetprop->rooms, projectile)) {
rocket->timer240 = 0;
}
} else {
botactGetRocketNextStepPos(projectile->waypads[projectile->step], &projectile->nextsteppos);
}
}
if (ownerchr) {
xrot = atan2f(xdist, zdist);
yrot = atan2f(ydist, sqrtf(xdist * xdist + zdist * zdist));
for (i = 0; i < g_Vars.lvupdate240; i++) {
projectile->unk018 = model0001afe8(projectile->unk018, xrot, PAL ? 0.02246f : 0.01875f);
projectile->unk014 = model0001afe8(projectile->unk014, yrot, PAL ? 0.02246f : 0.01875f);
}
mtx4LoadXRotation(M_BADTAU - projectile->unk014, &sp118);
mtx4LoadYRotation(projectile->unk018, &spd8);
mtx4MultMtx4(&spd8, &sp118, &sp98);
mtx00015f04(rocket->base.model->scale, &sp98);
mtx4ToMtx3(&sp98, rocket->base.realrot);
}
// Calculate new pos
dir.f[0] = sinf(projectile->unk018) * cosf(projectile->unk014);
dir.f[1] = sinf(projectile->unk014);
dir.f[2] = cosf(projectile->unk018) * cosf(projectile->unk014);
newpos.x = rocketprop->pos.x;
newpos.y = rocketprop->pos.y;
newpos.z = rocketprop->pos.z;
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
projectile->unk010 += PAL ? 0.0021600001f : 0.0018f;
speed = projectile->unk010;
if (ownerchr && ownerchr->target == -1) {
speed = PAL ? 0.120000004f : 0.10f;
}
newpos.x += dir.x * speed;
newpos.y += dir.y * speed;
newpos.z += dir.z * speed;
}
// Check if new pos would collide with anything
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, false);
}
cdresult = func0f06cd00(&rocket->base, &newpos, &sp164, &sp158);
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, true);
}
if (cdresult == CDRESULT_NOCOLLISION) {
func0f065e74(&rocketprop->pos, rocketprop->rooms, &newpos, newrooms);
rocketprop->pos.x = newpos.x;
rocketprop->pos.y = newpos.y;
rocketprop->pos.z = newpos.z;
propDeregisterRooms(rocketprop);
roomsCopy(newrooms, rocketprop->rooms);
func0f069c70(&rocket->base, true, true);
} else {
// Boom
rocket->timer240 = 0;
}
// Create smoke behind the rocket
if (projectile->smoketimer240 <= 0) {
projectile->smoketimer240 = TICKS(24);
smokeCreateSimple(&rocketprop->pos, rocketprop->rooms, SMOKETYPE_ROCKETTAIL);
} else {
projectile->smoketimer240 -= g_Vars.lvupdate240;
}
// Blow up rocket if it's gone too high
if (rocketprop->pos.y > 10000.0f) {
rocket->timer240 = 0;
}
// Check if close to an enemy
if (ownerchr && rocket->timer240) {
for (i = 0; i < g_MpNumChrs; i++) {
struct chrdata *chr = mpGetChrFromPlayerIndex(i);
if (chr != ownerchr
&& !chrIsDead(chr)
&& chrCompareTeams(ownerchr, chr, COMPARE_ENEMIES)
&& !botIsTargetInvisible(NULL, chr)) {
// Explode if within 250 units
xdist = rocketprop->pos.x - chr->prop->pos.x;
ydist = rocketprop->pos.y - chr->prop->pos.y;
zdist = rocketprop->pos.z - chr->prop->pos.z;
if (xdist * xdist + ydist * ydist + zdist * zdist < 250 * 250) {
rocket->timer240 = 0;
break;
}
// Check if rocket can fly directly to target
if (chrGetTargetProp(ownerchr) == chr->prop
&& mpPlayerGetIndex(ownerchr) == g_Vars.lvframenum % g_MpNumChrs
&& cdHasLineOfSight(&rocketprop->pos, rocketprop->rooms, &chr->prop->pos, chr->prop->rooms, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_BG | CDTYPE_AIOPAQUE, 8)) {
projectile->nextsteppos.x = chr->prop->pos.x;
projectile->nextsteppos.y = chr->prop->pos.y;
projectile->nextsteppos.z = chr->prop->pos.z;
projectile->numwaypads = 0;
}
}
}
}
// If target is lost for 8 seconds, explode
if (ownerchr && ownerchr->target == -1) {
projectile->numwaypads = 0;
projectile->losttimer240 += g_Vars.lvupdate240;
if (projectile->losttimer240 > 8 * TICKS(240)) {
rocket->timer240 = 0;
}
} else {
projectile->losttimer240 = 0;
}
// If bot is killed, rocket becomes uncontrolled
if (ownerchr && ((ownerchr->aibot && ownerchr->aibot->skrocket == NULL) || chrIsDead(ownerchr))) {
projectile->ownerprop = NULL;
}
return cdresult;
}
s32 projectileLaunch(struct defaultobj *obj, struct projectile *projectile, struct coord *arg2, struct coord *arg3)
{
s32 cdresult;
struct prop *prop = obj->prop;
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, false);
}
cdresult = func0f06cd00(obj, &projectile->nextsteppos, arg2, arg3);
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, true);
}
if (cdresult == CDRESULT_NOCOLLISION) {
s16 rooms[8];
func0f065e74(&prop->pos, prop->rooms, &projectile->nextsteppos, rooms);
prop->pos.x = projectile->nextsteppos.x;
prop->pos.y = projectile->nextsteppos.y;
prop->pos.z = projectile->nextsteppos.z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
} else if (cdresult != CDRESULT_NOCOLLISION && obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *)obj;
s16 rooms[8];
if (weapon->weaponnum == WEAPON_ROCKET || weapon->weaponnum == WEAPON_HOMINGROCKET) {
weapon->timer240 = 0;
func0f065e74(&prop->pos, prop->rooms, arg2, rooms);
prop->pos.x = arg2->x;
prop->pos.y = arg2->y;
prop->pos.z = arg2->z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
}
}
projectile->flags &= ~PROJECTILEFLAG_LAUNCHING;
return cdresult;
}
s32 projectileTick(struct defaultobj *obj, bool *embedded)
{
struct projectile *projectile = obj->projectile;
s32 cdresult;
struct coord sp5f4;
struct coord sp5e8;
struct coord sp5dc;
bool result = false;
struct prop *prop = obj->prop;
struct coord sp5c8;
s16 sp5b8[8];
struct coord sp5ac;
f32 sp5a8;
struct coord sp59c;
struct coord sp590;
f32 sp58c;
bool haslimitedarea;
f32 ground;
Mtxf sp544;
Mtxf sp504;
Mtxf sp4c4;
Mtxf sp484;
struct pad pad;
f32 dist;
f32 shield;
s32 i;
if (g_Vars.lvupdate240 > 0) {
if (obj->type == OBJTYPE_WEAPON && ((struct weaponobj *)obj)->weaponnum == WEAPON_SKROCKET) {
result = rocketTickFbw((struct weaponobj *) obj);
} else if (projectile->flags & PROJECTILEFLAG_00001000) {
result = (projectile->flags & PROJECTILEFLAG_00002000) != 0;
projectile->flags &= ~(PROJECTILEFLAG_00001000 | PROJECTILEFLAG_00002000);
} else {
obj->hidden &= ~OBJHFLAG_00020000;
if (projectile->flags & PROJECTILEFLAG_LAUNCHING) {
projectileLaunch(obj, projectile, &sp5e8, &sp5f4);
}
sp5dc.x = prop->pos.x;
sp5dc.y = prop->pos.y;
sp5dc.z = prop->pos.z;
if (projectile->pickuptimer240 > 0) {
projectile->pickuptimer240 -= g_Vars.lvupdate240;
}
if (projectile->flags & PROJECTILEFLAG_SLIDING) {
f32 x;
f32 innerdist;
f32 outerdist;
f32 z;
mtx3ToMtx4(obj->realrot, &sp504);
mtx4SetTranslation(&prop->pos, &sp504);
if (projectile->unk0dc > 0.0f) {
projectile->unk0dc -= projectile->unk0e0 * g_Vars.lvupdate240freal;
if (projectile->unk0dc < 0.0f) {
projectile->unk0dc = 0.0f;
} else if (projectile->unk0e4 < 1.0f) {
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
if (projectile->unk0dc > projectile->unk0ec) {
projectile->unk0dc = projectile->unk0ec + (projectile->unk0dc - projectile->unk0ec) * projectile->unk0e4;
}
}
}
} else if (projectile->unk0dc < 0.0f) {
projectile->unk0dc += projectile->unk0e0 * g_Vars.lvupdate240freal;
if (projectile->unk0dc > 0.0f) {
projectile->unk0dc = 0.0f;
} else if (projectile->unk0e4 < 1.0f) {
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
if (projectile->unk0dc < -projectile->unk0ec) {
projectile->unk0dc = -projectile->unk0ec + (projectile->unk0dc + projectile->unk0ec) * projectile->unk0e4;
}
}
}
}
if ((projectile->speed.f[0] != 0.0f || projectile->speed.f[2] != 0.0f) && projectile->unk098 > 0.0f) {
dist = sqrtf(projectile->speed.f[0] * projectile->speed.f[0] + projectile->speed.f[2] * projectile->speed.f[2]);
if (dist > 0.0f) {
f32 f12 = projectile->unk098 * g_Vars.lvupdate240freal / dist;
if (f12 >= 1.0f) {
projectile->speed.x = 0.0f;
projectile->speed.z = 0.0f;
} else {
projectile->speed.x -= projectile->speed.x * f12;
projectile->speed.z -= projectile->speed.z * f12;
if (projectile->unk0e4 < 1.0f) {
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
if (projectile->speed.x > projectile->unk0f0) {
projectile->speed.x = (projectile->speed.x - projectile->unk0f0) * projectile->unk0e4 + projectile->unk0f0;
} else if (projectile->speed.x < -projectile->unk0f0) {
projectile->speed.x = (projectile->speed.x + projectile->unk0f0) * projectile->unk0e4 + -projectile->unk0f0;
}
if (projectile->speed.z > projectile->unk0f0) {
projectile->speed.z = (projectile->speed.z - projectile->unk0f0) * projectile->unk0e4 + projectile->unk0f0;
} else if (projectile->speed.z < -projectile->unk0f0) {
projectile->speed.z = (projectile->speed.z + projectile->unk0f0) * projectile->unk0e4 + -projectile->unk0f0;
}
}
}
}
} else {
projectile->speed.x = 0.0f;
projectile->speed.z = 0.0f;
}
}
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, false);
}
// Objects become more difficult to push
// as you push them away from their pad
haslimitedarea = obj->pad >= 0 && (obj->flags3 & (OBJFLAG3_GRABBABLE | OBJFLAG3_PUSHFREELY)) == 0;
if (haslimitedarea) {
padUnpack(obj->pad, PADFIELD_POS, &pad);
innerdist = 200.0f;
outerdist = 300.0f;
if (obj->flags3 & OBJFLAG3_LONGPUSHRANGE) {
innerdist += 700.0f;
outerdist += 700.0f;
}
#if VERSION >= VERSION_PAL_BETA
if (obj->modelnum == MODEL_SKPUZZLEOBJECT) {
innerdist += 50.0f;
outerdist += 20.0f;
}
#elif VERSION >= VERSION_NTSC_1_0
if (obj->modelnum == MODEL_SKPUZZLEOBJECT) {
innerdist = 230.0f;
}
#endif
x = pad.pos.x - prop->pos.x;
z = pad.pos.z - prop->pos.z;
dist = sqrtf(x * x + z * z);
if (dist > outerdist) {
projectile->unk0dc = 0.0f;
} else if (dist > innerdist) {
projectile->unk0dc *= (outerdist - dist) * 0.01f;
}
}
sp5a8 = projectile->unk0dc * g_Vars.lvupdate240freal;
if (sp5a8 != 0.0f) {
struct coord sp404 = {0, 0, 0};
cdresult = func0f072144(obj, &sp404, sp5a8, true);
if (cdresult != CDRESULT_ERROR && cdresult == CDRESULT_COLLISION) {
projectile->unk0dc = -projectile->unk0dc * projectile->unk08c;
objCollide(obj, &sp404, sp5a8);
}
}
sp59c.x = projectile->speed.x * g_Vars.lvupdate240freal;
sp59c.y = 0.0f;
sp59c.z = projectile->speed.z * g_Vars.lvupdate240freal;
if (haslimitedarea) {
x = pad.pos.x - prop->pos.x - sp59c.x;
z = pad.pos.z - prop->pos.z - sp59c.z;
dist = sqrtf(x * x + z * z);
if (dist > outerdist) {
projectile->speed.f[0] = \
projectile->speed.f[2] = \
projectile->unk0dc = \
sp59c.f[0] = \
sp59c.f[2] = 0.0f;
} else if (dist > innerdist) {
projectile->speed.x *= (outerdist - dist) * 0.01f;
projectile->speed.z *= (outerdist - dist) * 0.01f;
sp59c.x *= (outerdist - dist) * 0.01f;
sp59c.z *= (outerdist - dist) * 0.01f;
}
}
cdresult = func0f072144(obj, &sp59c, 0.0f, true);
if (cdresult == CDRESULT_COLLISION) {
sp58c = objCollide(obj, &sp59c, 0.0f) * projectile->unk08c;
if (sp58c > 0.0f) {
f32 f0;
struct coord sp3f4;
struct coord sp3e8;
struct coord sp3dc;
struct coord sp3d0;
struct coord sp3c4;
struct coord sp3b8;
struct coord sp3ac;
f32 f0_2;
if (cd00025364(&sp3d0, &sp3c4)) {
sp3c4.x -= sp3d0.x;
sp3c4.y -= sp3d0.y;
sp3c4.z -= sp3d0.z;
} else {
#if VERSION >= VERSION_PAL_FINAL
cd00024e4c(&sp3d0, &sp3c4, 8360, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cd00024e4c(&sp3d0, &sp3c4, 8360, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cd00024e4c(&sp3d0, &sp3c4, 8339, "propobj.c");
#else
cd00024e4c(&sp3d0, &sp3c4, 8289, "propobj.c");
#endif
sp3d0.x -= sp3c4.x;
sp3d0.y -= sp3c4.y;
sp3d0.z -= sp3c4.z;
sp3c4.x = -sp3d0.z;
sp3c4.y = sp3d0.y;
sp3c4.z = sp3d0.x;
sp3d0.x = prop->pos.x;
sp3d0.y = prop->pos.y;
sp3d0.z = prop->pos.z;
}
func0f02e4f8(&sp3d0, &sp3c4, &sp3b8);
sp3ac.x = prop->pos.x - sp5dc.x;
sp3ac.y = 0.0f;
sp3ac.z = prop->pos.z - sp5dc.z;
sp3b8.x -= prop->pos.x;
sp3b8.z -= prop->pos.z;
f0 = (-sp3b8.f[0] * sp3ac.f[2] + sp3b8.f[2] * sp3ac.f[0]) * 0.0001f;
if (f0 > projectile->unk0ec) {
f0 = projectile->unk0ec;
} else if (f0 < -projectile->unk0ec) {
f0 = -projectile->unk0ec;
}
projectile->unk0dc += f0;
#if VERSION >= VERSION_PAL_FINAL
cd00024e4c(&sp3e8, &sp3dc, 8398, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cd00024e4c(&sp3e8, &sp3dc, 8398, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cd00024e4c(&sp3e8, &sp3dc, 8377, "propobj.c");
#else
cd00024e4c(&sp3e8, &sp3dc, 8327, "propobj.c");
#endif
sp3f4.x = sp3dc.z - sp3e8.z;
sp3f4.y = 0.0f;
sp3f4.z = sp3e8.x - sp3dc.x;
if (sp3f4.f[0] != 0.0f || sp3f4.f[2] != 0.0f) {
guNormalize(&sp3f4.x, &sp3f4.y, &sp3f4.z);
} else {
sp3f4.z = 1.0f;
}
f0_2 = projectile->speed.f[0] * sp3f4.f[0] + projectile->speed.f[2] * sp3f4.f[2];
f0_2 *= -(sp58c + 1.0f);
sp590.x = projectile->speed.x + sp3f4.f[0] * f0_2;
sp590.y = 0.0f;
sp590.z = projectile->speed.z + sp3f4.f[2] * f0_2;
sp59c.x = sp590.f[0] * g_Vars.lvupdate240freal;
sp59c.y = 0.0f;
sp59c.z = sp590.f[2] * g_Vars.lvupdate240freal;
if (haslimitedarea) {
x = pad.pos.x - prop->pos.x - sp59c.x;
z = pad.pos.z - prop->pos.z - sp59c.z;
dist = sqrtf(x * x + z * z);
if (dist > outerdist) {
projectile->speed.f[0] = \
projectile->speed.f[2] = \
projectile->unk0dc = \
sp59c.f[0] = \
sp59c.f[2] = 0.0f;
} else if (dist > innerdist) {
projectile->speed.x *= (outerdist - dist) * 0.01f;
projectile->speed.z *= (outerdist - dist) * 0.01f;
sp59c.x *= (outerdist - dist) * 0.01f;
sp59c.z *= (outerdist - dist) * 0.01f;
}
}
cdresult = func0f072144(obj, &sp59c, 0.0f, true);
if (cdresult == CDRESULT_COLLISION) {
sp58c = objCollide(obj, &sp59c, 0.0f) * projectile->unk08c;
sp590.x = -projectile->speed.f[0] * sp58c;
sp590.y = 0.0f;
sp590.z = -projectile->speed.f[2] * sp58c;
sp59c.x = sp590.f[0] * g_Vars.lvupdate240freal;
sp59c.y = 0.0f;
sp59c.z = sp590.f[2] * g_Vars.lvupdate240freal;
if (haslimitedarea) {
x = pad.pos.x - prop->pos.x - sp59c.x;
z = pad.pos.z - prop->pos.z - sp59c.z;
dist = sqrtf(x * x + z * z);
if (dist > outerdist) {
projectile->speed.f[0] = \
projectile->speed.f[2] = \
projectile->unk0dc = \
sp59c.f[0] = \
sp59c.f[2] = 0.0f;
} else if (dist > innerdist) {
projectile->speed.x *= (outerdist - dist) * 0.01f;
projectile->speed.z *= (outerdist - dist) * 0.01f;
sp59c.x *= (outerdist - dist) * 0.01f;
sp59c.z *= (outerdist - dist) * 0.01f;
}
}
cdresult = func0f072144(obj, &sp59c, 0.0f, true);
if (cdresult == CDRESULT_COLLISION) {
objCollide(obj, &sp59c, 0.0f);
if (sp3e8.f[0] != sp3dc.f[0] || sp3e8.f[2] != sp3dc.f[2]) {
f32 f12;
struct coord sp398;
f32 f14;
sp398.x = sp3dc.x - sp3e8.x;
sp398.z = sp3dc.z - sp3e8.z;
f12 = 1.0f / sqrtf(sp398.f[0] * sp398.f[0] + sp398.f[2] * sp398.f[2]);
sp398.x *= f12;
sp398.z *= f12;
f14 = projectile->speed.f[0] * sp398.f[0] + projectile->speed.f[2] * sp398.f[2];
sp590.x = sp398.f[0] * f14;
sp590.y = 0.0f;
sp590.z = sp398.f[2] * f14;
sp59c.x = sp590.f[0] * g_Vars.lvupdate240freal;
sp59c.y = 0.0f;
sp59c.z = sp590.f[2] * g_Vars.lvupdate240freal;
if (haslimitedarea) {
x = pad.pos.x - prop->pos.x - sp59c.x;
z = pad.pos.z - prop->pos.z - sp59c.z;
dist = sqrtf(x * x + z * z);
if (dist > outerdist) {
projectile->speed.f[0] = \
projectile->speed.f[2] = \
projectile->unk0dc = \
sp59c.f[0] = \
sp59c.f[2] = 0.0f;
} else if (dist > innerdist) {
projectile->speed.x *= (outerdist - dist) * 0.01f;
projectile->speed.z *= (outerdist - dist) * 0.01f;
sp59c.x *= (outerdist - dist) * 0.01f;
sp59c.z *= (outerdist - dist) * 0.01f;
}
}
cdresult = func0f072144(obj, &sp59c, 0.0f, true);
if (cdresult == CDRESULT_COLLISION) {
objCollide(obj, &sp59c, 0.0f);
}
}
}
}
if (cdresult == CDRESULT_NOCOLLISION) {
projectile->speed.x = sp590.x;
projectile->speed.y = sp590.y;
projectile->speed.z = sp590.z;
}
}
}
if (cdresult != CDRESULT_NOCOLLISION) {
projectile->unk0dc = 0.0f;
projectile->speed.z = 0.0f;
projectile->speed.x = 0.0f;
}
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, true);
}
if (projectile->speed.f[0] == 0.0f && projectile->speed.f[2] == 0.0f && projectile->unk0dc == 0.0f) {
objFreeProjectile(obj);
}
if (cdresult == CDRESULT_NOCOLLISION) {
ground = cdFindGroundYSimple(&prop->pos, 2, prop->rooms, &obj->floorcol, NULL);
if (ground > -30000.0f) {
prop->pos.y = ground + objGetHov04(obj);
}
}
func0f069c70(obj, false, true);
mtx3ToMtx4(obj->realrot, &sp484);
mtx4SetTranslation(&prop->pos, &sp484);
mtx000172f0(sp504.m, sp4c4.m);
mtx4MultMtx4(&sp484, &sp4c4, &sp544);
platformDisplaceProps2(prop, &sp544);
result = true;
} else if (projectile->flags & PROJECTILEFLAG_AIRBORNE) {
f32 sp390;
s16 roomnum;
struct coord sp380;
f32 sp37c;
f32 realrot[3][3];
bool sp354 = false;
bool sp350 = false;
bool handled = false;
Mtxf sp30c;
bool homingrocket;
u32 stack;
projectile->losttimer240 += g_Vars.lvupdate240;
if (((projectile->flags & PROJECTILEFLAG_NOTIMELIMIT) == 0 && projectile->losttimer240 > TICKS(9600))
|| prop->pos.y < -20000.0f || prop->pos.y > 32000.0f
|| prop->pos.x < -32000.0f || prop->pos.x > 32000.0f
|| prop->pos.z < -32000.0f || prop->pos.z > 32000.0f) {
obj->hidden |= OBJHFLAG_REAPABLE;
}
projectile->flighttime240 += g_Vars.lvupdate240;
mtx3Copy(obj->realrot, realrot);
if (projectile->flags & PROJECTILEFLAG_00000020) {
if (projectile->unk01c < (1.0f / 3.6f)) {
projectile->unk0ac += projectile->unk014 * g_Vars.lvupdate240freal;
projectile->unk0a8 += projectile->unk0ac * g_Vars.lvupdate240freal;
projectile->unk01c += (1.0f / 90.0f) * g_Vars.lvupdate240freal;
if (projectile->unk01c > (1.0f / 3.6f)) {
projectile->unk01c = (1.0f / 3.6f);
}
} else {
if (projectile->unk0a8 > sp5dc.y) {
projectile->unk0ac += projectile->unk014 * g_Vars.lvupdate240freal;
projectile->unk0a8 += projectile->unk0ac * g_Vars.lvupdate240freal;
sp5dc.y += 0.07f * (projectile->unk0a8 - sp5dc.y) * g_Vars.lvupdate240freal;
} else {
sp5dc.y = projectile->unk0a8;
projectile->flags &= ~PROJECTILEFLAG_00000020;
projectile->flags |= PROJECTILEFLAG_POWERED;
projectile->speed.y = projectile->unk0ac;
projectile->unk01c = 0.0f;
}
}
}
homingrocket = false;
if (obj->type == OBJTYPE_WEAPON && ((struct weaponobj *)obj)->weaponnum == WEAPON_HOMINGROCKET) {
homingrocket = true;
}
if (homingrocket) {
struct coord sp2f8 = {0, 0, 0};
struct coord sp2ec = {0, 0, 1};
struct coord sp2e0 = {0, 1, 0};
if (obj && obj->prop && projectile->targetprop) {
Mtxf mtx;
f32 sp29c = sqrtf(obj->realrot[0][0] * obj->realrot[0][0] + obj->realrot[1][0] * obj->realrot[1][0] + obj->realrot[2][0] * obj->realrot[2][0]);
struct coord sp290;
f32 sp28c;
mtx4LoadIdentity(&mtx);
mtx.m[0][0] = obj->realrot[0][0] / sp29c;
mtx.m[0][1] = obj->realrot[0][1] / sp29c;
mtx.m[0][2] = obj->realrot[0][2] / sp29c;
mtx.m[1][0] = obj->realrot[1][0] / sp29c;
mtx.m[1][1] = obj->realrot[1][1] / sp29c;
mtx.m[1][2] = obj->realrot[1][2] / sp29c;
mtx.m[2][0] = obj->realrot[2][0] / sp29c;
mtx.m[2][1] = obj->realrot[2][1] / sp29c;
mtx.m[2][2] = obj->realrot[2][2] / sp29c;
sp2f8.x = obj->prop->pos.x;
sp2f8.y = obj->prop->pos.y;
sp2f8.z = obj->prop->pos.z;
sp290.x = projectile->targetprop->pos.x - sp2f8.x;
sp290.y = projectile->targetprop->pos.y - sp2f8.y;
sp290.z = projectile->targetprop->pos.z - sp2f8.z;
guNormalize(&sp290.x, &sp290.y, &sp290.z);
sp2ec.x = projectile->speed.x;
sp2ec.y = projectile->speed.y;
sp2ec.z = projectile->speed.z;
guNormalize(&sp2ec.x, &sp2ec.y, &sp2ec.z);
sp28c = acosf(sp2ec.f[0] * sp290.f[0] + sp2ec.f[1] * sp290.f[1] + sp2ec.f[2] * sp290.f[2]);
if (sp28c > 0.001f || sp28c < -0.001f) {
struct coord sp280;
f32 sp270[4];
f32 sp260[4];
f32 sp250[4];
f32 angle;
Mtxf sp20c;
f32 tmp;
u32 stack[2];
static f32 var80069bc4 = 0;
static u32 kkg = 3;
static u32 kkd = 20;
static u32 kkp = 120;
mainOverrideVariable("kkg", &kkg);
mainOverrideVariable("kkd", &kkd);
mainOverrideVariable("kkp", &kkp);
tmp = ((kkd / 100.0f * var80069bc4 / LVUPDATE240FREAL()) + (kkp / 100.00f * sp28c * LVUPDATE240FREAL())) * (kkg / 100.000f);
var80069bc4 = sp28c;
sp280.x = sp2ec.f[1] * sp290.f[2] - sp2ec.f[2] * sp290.f[1];
sp280.y = -(sp2ec.f[0] * sp290.f[2] - sp2ec.f[2] * sp290.f[0]);
sp280.z = sp2ec.f[0] * sp290.f[1] - sp2ec.f[1] * sp290.f[0];
sp260[0] = cosf(tmp * 0.5f);
sp260[1] = sp280.f[0] * sinf(tmp * 0.5f);
sp260[2] = sp280.f[1] * sinf(tmp * 0.5f);
sp260[3] = sp280.f[2] * sinf(tmp * 0.5f);
quaternionToMtx(sp260, &sp20c);
projectile->unk018 = 0.0f;
projectile->unk014 = 0.0f;
projectile->unk010 = 0.0f;
mtx4RotateVecInPlace(&sp20c, &projectile->speed);
quaternion0f097044(&mtx, sp270);
quaternionMultQuaternion(sp270, sp260, sp250);
quaternionToMtx(sp250, &sp20c);
obj->realrot[0][0] = sp20c.m[0][0] * sp29c;
obj->realrot[0][1] = sp20c.m[0][1] * sp29c;
obj->realrot[0][2] = sp20c.m[0][2] * sp29c;
obj->realrot[1][0] = sp20c.m[1][0] * sp29c;
obj->realrot[1][1] = sp20c.m[1][1] * sp29c;
obj->realrot[1][2] = sp20c.m[1][2] * sp29c;
obj->realrot[2][0] = sp20c.m[2][0] * sp29c;
obj->realrot[2][1] = sp20c.m[2][1] * sp29c;
obj->realrot[2][2] = sp20c.m[2][2] * sp29c;
}
}
}
if ((projectile->flags & PROJECTILEFLAG_POWERED) == 0) {
// Apply gravity
f32 f0;
projectile->speed.y += (projectile->unk014 + projectile->unk01c) * g_Vars.lvupdate240freal;
if (projectile->flags & PROJECTILEFLAG_LIGHTWEIGHT) {
f0 = projectile->speed.y - (1.0f / 7.2f) * g_Vars.lvupdate240freal;
} else {
f0 = projectile->speed.y - (1.0f / 3.6f) * g_Vars.lvupdate240freal;
}
sp5dc.y += g_Vars.lvupdate240freal * (projectile->speed.y + f0) * 0.5f;
projectile->speed.y = f0;
} else {
projectile->speed.y += (projectile->unk014 + projectile->unk01c) * g_Vars.lvupdate240freal;
sp5dc.y += projectile->speed.y * g_Vars.lvupdate240freal;
}
projectile->speed.x += projectile->unk010 * g_Vars.lvupdate240freal;
projectile->speed.z += projectile->unk018 * g_Vars.lvupdate240freal;
sp5dc.x += projectile->speed.x * g_Vars.lvupdate240freal;
sp5dc.z += projectile->speed.z * g_Vars.lvupdate240freal;
mtx3ToMtx4(obj->realrot, &sp30c);
func0f096698(&sp30c, &projectile->mtx, g_Vars.lvupdate240);
mtx4ToMtx3(&sp30c, obj->realrot);
sp5c8.x = prop->pos.x;
sp5c8.y = prop->pos.y;
sp5c8.z = prop->pos.z;
roomsCopy(prop->rooms, sp5b8);
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, false);
}
if (projectile->flags & PROJECTILEFLAG_STICKY) {
cdresult = func0f06cd00(obj, &sp5dc, &sp5e8, &sp5f4);
} else {
cdresult = func0f06d37c(obj, &sp5dc, &sp5e8, &sp5f4);
}
if (projectile->ownerprop) {
propSetPerimEnabled(projectile->ownerprop, true);
}
result = true;
if (projectile->flags & PROJECTILEFLAG_STICKY) {
if (cdresult == CDRESULT_COLLISION) {
bool stick = false;
struct prop *hitprop = NULL;
struct weaponobj *weapon2;
struct weaponobj *weapon;
if (g_EmbedProp != NULL) {
hitprop = g_EmbedProp;
while (hitprop->parent) {
hitprop = hitprop->parent;
}
}
if (obj->type == OBJTYPE_AUTOGUN) {
// Thrown laptops can stick to the BG but not props
if (hitprop == NULL) {
stick = true;
}
} else if (obj->type == OBJTYPE_WEAPON) {
weapon2 = (struct weaponobj *) obj;
if (weapon2->weaponnum == WEAPON_REMOTEMINE
|| weapon2->weaponnum == WEAPON_TIMEDMINE
|| weapon2->weaponnum == WEAPON_PROXIMITYMINE
|| weapon2->weaponnum == WEAPON_COMMSRIDER
|| weapon2->weaponnum == WEAPON_TRACERBUG
|| weapon2->weaponnum == WEAPON_TARGETAMPLIFIER
|| weapon2->weaponnum == WEAPON_BOLT
|| weapon2->weaponnum == WEAPON_COMBATKNIFE
|| weapon2->weaponnum == WEAPON_ECMMINE
|| gsetHasFunctionFlags(&weapon2->gset, FUNCFLAG_STICKTOWALL)) {
stick = true;
if (weapon2->weaponnum == WEAPON_GRENADEROUND && weapon2->gunfunc == FUNC_SECONDARY) {
if (weapon2->timer240 == 1) {
stick = false;
weapon2->timer240 = 0;
} else {
weapon2->timer240 = TICKS(480);
}
}
}
}
if (stick) {
weapon = NULL;
if (obj->type == OBJTYPE_WEAPON) {
weapon = (struct weaponobj *) obj;
}
#if VERSION >= VERSION_NTSC_1_0
if (g_EmbedProp && (g_EmbedProp->type == PROPTYPE_OBJ || g_EmbedProp->type == PROPTYPE_WEAPON || g_EmbedProp->type == PROPTYPE_DOOR)) {
struct defaultobj *embedobj = g_EmbedProp->obj;
if (weapon
&& (weapon->weaponnum == WEAPON_BOLT || weapon->weaponnum == WEAPON_COMBATKNIFE)
&& embedobj->type == OBJTYPE_WEAPON) {
stick = false;
}
}
#endif
if (hitprop != NULL) {
if (hitprop->type == PROPTYPE_OBJ || hitprop->type == PROPTYPE_WEAPON || hitprop->type == PROPTYPE_DOOR) {
struct defaultobj *hitobj = hitprop->obj;
if ((hitobj->hidden & OBJHFLAG_PROJECTILE)
&& (hitobj->projectile->flags & PROJECTILEFLAG_SLIDING) == 0) {
stick = false;
}
if (var80069944 == 10000) {
stick = false;
}
if (weapon && (weapon->weaponnum == WEAPON_BOLT || weapon->weaponnum == WEAPON_COMBATKNIFE)) {
#if VERSION < VERSION_NTSC_1_0
if (hitobj->type == OBJTYPE_WEAPON) {
stick = false;
}
#endif
if (hitobj->type == OBJTYPE_GLASS || hitobj->type == OBJTYPE_TINTEDGLASS) {
bgunPlayGlassHitSound(&prop->pos, prop->rooms, -1);
if ((hitobj->flags2 & OBJFLAG2_IMMUNETOGUNFIRE) == 0) {
objTakeGunfire(hitobj, 100, &prop->pos, weapon->weaponnum, g_Vars.currentplayernum);
objDropRecursively(hitprop, false);
stick = false;
handled = true;
}
}
}
} else if ((hitprop->type == PROPTYPE_CHR || hitprop->type == PROPTYPE_PLAYER)
&& chrGetShield(hitprop->chr) > 0.0f) {
stick = false;
}
}
}
if (!handled && g_EmbedProp && obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
if (weapon->weaponnum == WEAPON_BOLT || weapon->weaponnum == WEAPON_COMBATKNIFE) {
if (hitprop->type == PROPTYPE_CHR || (hitprop->type == PROPTYPE_PLAYER && hitprop->chr)) {
struct chrdata *hitchr = hitprop->chr;
if ((obj->projectile->flags & PROJECTILEFLAG_AIRBORNE) && obj->projectile->bouncecount <= 0) {
f32 ownershield;
struct prop *ownerprop;
ownerprop = obj->projectile->ownerprop;
ownershield = chrGetShield(hitchr);
func0f0341dc(hitchr, gsetGetDamage(&weapon->gset), &var8009ce78, &weapon->gset, ownerprop,
g_EmbedHitPart, g_EmbedProp, g_EmbedNode, g_EmbedModel, g_EmbedSide, var8006993c);
if (ownershield <= 0.0f) {
chrEmitSparks(hitchr, g_EmbedProp, g_EmbedHitPart, &sp5e8, &sp5f4, ownerprop ? ownerprop->chr : NULL);
if (g_EmbedProp->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
if (g_EmbedModel && g_EmbedHitPart != HITPART_GUN && g_EmbedHitPart != HITPART_HAT) {
struct coord sp1c8;
Mtxf sp188;
Mtxf *sp184;
sp184 = model0001a5cc(g_EmbedModel, g_EmbedNode, 0);
mtx4TransformVec(camGetWorldToScreenMtxf(), &sp5e8, &sp1c8);
mtx0001719c(sp184->m, sp188.m);
mtx4TransformVecInPlace(&sp188, &sp1c8);
chr0f0260c4(g_EmbedModel, g_EmbedHitPart, g_EmbedNode, &sp1c8);
}
}
}
}
} else if (hitprop->type == PROPTYPE_OBJ) {
struct defaultobj *hitobj = hitprop->obj;
if (var80069944 == 10000) {
shield = (hitobj->flags3 & OBJFLAG3_SHOWSHIELD) ? 4 : 8;
shieldhitCreate(hitprop, shield, g_EmbedProp, g_EmbedNode, g_EmbedModel, g_EmbedSide, var8006993c);
}
if (hitobj->modelnum == MODEL_TARGET && var80069944 == TEXTURE_0B9E) {
frCalculateHit(hitobj, &sp5e8, 0.0f);
}
}
} else if (weapon->weaponnum == WEAPON_ROCKET || weapon->weaponnum == WEAPON_HOMINGROCKET) {
s32 ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
if (g_EmbedProp->type == PROPTYPE_CHR || (g_EmbedProp->type == PROPTYPE_PLAYER && g_EmbedProp->chr)) {
#if VERSION < VERSION_NTSC_1_0
s32 ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
#endif
struct prop *ownerprop2 = NULL;
if (g_Vars.normmplayerisrunning) {
struct chrdata *ownerchr = mpGetChrFromPlayerIndex(ownerplayernum);
if (ownerchr != NULL) {
ownerprop2 = ownerchr->prop;
}
}
func0f0341dc(g_EmbedProp->chr, 2.0f, &var8009ce78, &weapon->gset, ownerprop2,
g_EmbedHitPart, g_EmbedProp, g_EmbedNode, g_EmbedModel, g_EmbedSide, var8006993c);
} else if (g_EmbedProp->type == PROPTYPE_OBJ || g_EmbedProp->type == PROPTYPE_WEAPON) {
if (var80069944 == 10000) {
f32 shield = (g_EmbedProp->obj->flags3 & OBJFLAG3_SHOWSHIELD) ? 4 : 8;
shieldhitCreate(hitprop, shield, g_EmbedProp, g_EmbedNode, g_EmbedModel, g_EmbedSide, var8006993c);
}
objDamage(g_EmbedProp->obj, 100, &prop->pos, weapon->weaponnum, ownerplayernum);
}
handled = true;
func0f069c70(obj, true, true);
weapon->timer240 = 0;
} else {
if (hitprop->type == PROPTYPE_CHR || (hitprop->type == PROPTYPE_PLAYER && hitprop->chr)) {
struct chrdata *chr = hitprop->chr;
func0f034080(chr, g_EmbedNode, g_EmbedProp, g_EmbedModel, g_EmbedSide, var8006993c);
} else if ((hitprop->type == PROPTYPE_OBJ || hitprop->type == PROPTYPE_WEAPON) && var80069944 == 10000) {
shield = (hitprop->obj->flags3 & OBJFLAG3_SHOWSHIELD) ? 4 : 8;
shieldhitCreate(hitprop, shield, g_EmbedProp, g_EmbedNode, g_EmbedModel, g_EmbedSide, var8006993c);
}
}
}
if (!handled && stick) {
handled = true;
func0f069c70(obj, true, true);
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
if (weapon->weaponnum == WEAPON_BOLT || weapon->weaponnum == WEAPON_COMBATKNIFE) {
if (obj->projectile->ownerprop && obj->projectile->ownerprop->type == PROPTYPE_PLAYER) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(playermgrGetPlayerNumByProp(obj->projectile->ownerprop));
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_TOTAL);
if (g_EmbedProp != NULL) {
if (g_EmbedProp->type == PROPTYPE_OBJ) {
if (objIsHealthy(g_EmbedProp->obj)) {
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_OBJECT);
}
} else if (g_EmbedProp->type == PROPTYPE_CHR || g_EmbedProp->type == PROPTYPE_PLAYER) {
struct chrdata *embedchr = g_EmbedProp->chr;
bool dead = false;
if (embedchr && embedchr->actiontype == ACT_DEAD) {
dead = true;
}
if (g_EmbedProp->type == PROPTYPE_PLAYER && g_Vars.players[playermgrGetPlayerNumByProp(g_EmbedProp)]->isdead) {
dead = true;
}
if (!dead) {
switch (g_EmbedHitPart) {
case 0:
break;
case HITPART_HEAD:
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_HEAD);
break;
case HITPART_GUN:
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_GUN);
break;
case HITPART_HAT:
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_HAT);
break;
case HITPART_PELVIS:
case HITPART_TORSO:
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_BODY);
break;
default:
mpstatsIncrementPlayerShotCount(&weapon->gset, SHOTREGION_LIMB);
break;
}
}
}
}
setCurrentPlayerNum(prevplayernum);
}
if (hitprop == NULL || hitprop->type == PROPTYPE_OBJ || hitprop->type == PROPTYPE_WEAPON || hitprop->type == PROPTYPE_DOOR) {
struct coord dir;
struct prop *ownerprop = obj->projectile->ownerprop;
dir.x = projectile->speed.x;
dir.y = projectile->speed.y;
dir.z = projectile->speed.z;
guNormalize(&dir.x, &dir.y, &dir.z);
if (chrIsUsingPaintball(ownerprop ? ownerprop->chr : NULL)) {
sparksCreate(prop->rooms[0], prop, &sp5e8, &dir, &sp5f4, SPARKTYPE_PAINT);
} else {
sparksCreate(prop->rooms[0], prop, &sp5e8, &dir, &sp5f4, SPARKTYPE_PROJECTILE);
}
}
}
}
objLand(prop, &sp5e8, &sp5f4, embedded);
}
}
if (!handled) {
if (cdresult != CDRESULT_COLLISION) {
s16 rooms[8];
func0f065e74(&prop->pos, prop->rooms, &sp5dc, rooms);
prop->pos.x = sp5dc.x;
prop->pos.y = sp5dc.y;
prop->pos.z = sp5dc.z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
} else {
s16 rooms[8];
if (g_EmbedProp && (g_EmbedProp->type == PROPTYPE_CHR || g_EmbedProp->type == PROPTYPE_PLAYER)) {
sp5dc.x = prop->pos.x;
sp5dc.z = prop->pos.z;
} else {
sp5dc.x = sp5e8.x;
sp5dc.y = sp5e8.y;
sp5dc.z = sp5e8.z;
}
func0f065e74(&prop->pos, prop->rooms, &sp5dc, rooms);
prop->pos.x = sp5dc.x;
prop->pos.y = sp5dc.y;
prop->pos.z = sp5dc.z;
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
}
}
}
if (!handled) {
u16 geoflags;
sp37c = objGetRotatedLocalYMinByMtx3(objFindBboxRodata(obj), obj->realrot);
sp5ac.x = prop->pos.x;
sp5ac.y = prop->pos.y + sp37c;
sp5ac.z = prop->pos.z;
roomnum = cd0002a5e4(&sp5ac, prop->rooms, &sp390, &obj->floorcol, &geoflags, &sp380);
#if VERSION >= VERSION_NTSC_1_0
if (roomnum > 0 && prop->pos.y + sp37c < sp390 && !cd0002db98(&sp5c8, sp5b8, &sp5ac, CDTYPE_OBJS | CDTYPE_BG, 3))
#else
if (roomnum > 0 && prop->pos.y + sp37c < sp390 && !cd0002db98(&sp5c8, sp5b8, &sp5ac, CDTYPE_BG, 3))
#endif
{
sp354 = true;
sp5f4.x = sp380.x;
sp5f4.y = sp380.y;
sp5f4.z = sp380.z;
guNormalize(&sp5f4.x, &sp5f4.y, &sp5f4.z);
sp5e8.x = prop->pos.x;
sp5e8.y = sp390;
sp5e8.z = prop->pos.z;
cdresult = CDRESULT_COLLISION;
if (geoflags & GEOFLAG_DIE) {
obj->hidden |= OBJHFLAG_REAPABLE;
}
} else {
roomnum = cd0002a564(&prop->pos, prop->rooms, &sp390, &obj->floorcol, &sp380, NULL);
#if VERSION >= VERSION_NTSC_1_0
if (roomnum <= 0 && (projectile->flags & PROJECTILEFLAG_STICKY) == 0) {
if ((projectile->flags & PROJECTILEFLAG_00010000) == 0) {
projectile->flags |= PROJECTILEFLAG_00010000;
if (cdFindRoom(&sp5c8, sp5b8) > 0) {
projectile->flags |= PROJECTILEFLAG_INROOM;
}
}
if (projectile->flags & PROJECTILEFLAG_INROOM) {
prop->pos.x = sp5c8.x;
prop->pos.y = sp5c8.y;
prop->pos.z = sp5c8.z;
propDeregisterRooms(prop);
roomsCopy(sp5b8, prop->rooms);
roomnum = cd0002a440(&prop->pos, prop->rooms, &sp390, &obj->floorcol, NULL);
projectile->speed.x = 0.0f;
projectile->speed.z = 0.0f;
}
}
#endif
}
#if VERSION >= VERSION_NTSC_1_0
if (roomnum > 0) {
projectile->flags |= PROJECTILEFLAG_INROOM;
} else {
projectile->flags &= ~PROJECTILEFLAG_INROOM;
}
#endif
if (cdresult == CDRESULT_COLLISION) {
// Bouncing
if ((projectile->speed.y <= 0.0f && sp5c8.y <= prop->pos.y)
|| ((projectile->flags & PROJECTILEFLAG_STICKY) == 0 && sp354)) {
sp350 = true;
}
if (projectile->unk08c > 0.0f) {
f32 oldyspeed;
f32 f0 = projectile->speed.f[0] * sp5f4.f[0] + projectile->speed.f[1] * sp5f4.f[1] + projectile->speed.f[2] * sp5f4.f[2];
f0 *= -(projectile->unk08c + 1.0f);
oldyspeed = projectile->speed.y;
projectile->speed.x += f0 * sp5f4.x;
projectile->speed.y += f0 * sp5f4.y;
projectile->speed.z += f0 * sp5f4.z;
if (oldyspeed <= 0.0f && projectile->speed.y >= 0.0f) {
sp350 = true;
}
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
if (weapon->weaponnum == WEAPON_GRENADE && weapon->gunfunc == FUNC_SECONDARY) {
smokeCreateAtProp(prop, SMOKETYPE_PINBALL);
}
}
}
if (sp350) {
prop->pos.y = sp5e8.y - sp37c;
if (sp354) {
prop->pos.y += func0f06a620(obj);
}
}
if ((projectile->flags & PROJECTILEFLAG_00000100) == 0
&& (projectile->bounceframe < 0 || projectile->bounceframe < g_Vars.lvframe60 - TICKS(60))) {
mtxLoadRandomRotation(&projectile->mtx);
}
projectile->bouncecount++;
projectile->bounceframe = g_Vars.lvframe60;
if ((obj->hidden & OBJHFLAG_00010000) == 0) {
obj->hidden |= OBJHFLAG_00000100;
}
if (sp350) {
if ((projectile->flags & PROJECTILEFLAG_STICKY) == 0 && projectile->bouncecount >= 6) {
if (sp354) {
projectileFall(obj, realrot);
}
} else if (projectile->unk08c > 0.0f) {
if (projectile->speed.y >= 0.0f && projectile->speed.y < 2.2222223f) {
if ((projectile->flags & PROJECTILEFLAG_00000002) && projectile->bouncecount == 1) {
projectile->speed.y = 2.2222223f;
} else {
if (sp354) {
projectileFall(obj, realrot);
}
}
}
} else {
if (sp354) {
projectileFall(obj, realrot);
}
}
}
}
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
if (weapon->weaponnum == WEAPON_COMBATKNIFE && weapon->gunfunc == FUNC_SECONDARY) {
knifePlayWooshSound(obj);
} else if (weapon->weaponnum == WEAPON_ROCKET) {
if (cdresult == CDRESULT_COLLISION) {
weapon->timer240 = 0;
} else {
f32 tmp = projectile->speed.f[0] * projectile->speed.f[0]
+ projectile->speed.f[1] * projectile->speed.f[1]
+ projectile->speed.f[2] * projectile->speed.f[2];
if (tmp > 27777.773f) {
projectile->unk010 = 0.0f;
projectile->unk014 = 0.0f;
projectile->unk018 = 0.0f;
}
if (projectile->powerlimit240 >= 0 && projectile->flighttime240 > projectile->powerlimit240) {
projectile->unk01c = 0.0f;
projectile->flags &= ~(PROJECTILEFLAG_POWERED | PROJECTILEFLAG_00000020);
} else {
struct coord smokepos;
smokepos.x = projectile->speed.x;
smokepos.y = projectile->speed.y;
smokepos.z = projectile->speed.z;
guNormalize(&smokepos.x, &smokepos.y, &smokepos.z);
smokepos.x = prop->pos.x - smokepos.x * 20.0f;
smokepos.y = prop->pos.y - smokepos.y * 20.0f;
smokepos.z = prop->pos.z - smokepos.z * 20.0f;
smokeCreateSimple(&smokepos, prop->rooms, SMOKETYPE_ROCKETTAIL);
}
}
} else if (weapon->weaponnum == WEAPON_HOMINGROCKET) {
if (cdresult == CDRESULT_COLLISION) {
weapon->timer240 = 0;
} else {
smokeCreateSimple(&prop->pos, prop->rooms, SMOKETYPE_HOMINGTAIL);
}
} else if (weapon->weaponnum == WEAPON_GRENADEROUND
|| (weapon->weaponnum == WEAPON_NBOMB && weapon->gunfunc == FUNC_PRIMARY)) {
if (sp350
|| (projectile->flags & PROJECTILEFLAG_FALLING)
|| (projectile->speed.x < 0.1f && projectile->speed.x > -0.1f
&& projectile->speed.y < 0.1f && projectile->speed.y > -0.1f
&& projectile->speed.z < 0.1f && projectile->speed.z > -0.1f)
|| (prop->pos.x - sp5c8.x < 0.1f && prop->pos.x - sp5c8.x > -0.1f
&& prop->pos.y - sp5c8.y < 0.1f && prop->pos.y - sp5c8.y > -0.1f
&& prop->pos.z - sp5c8.z < 0.1f && prop->pos.z - sp5c8.z > -0.1f)) {
if (weapon->weaponnum != WEAPON_NBOMB || weapon->timer240 >= 0) {
weapon->timer240 = 0;
}
} else if (weapon->weaponnum != WEAPON_NBOMB) {
smokeCreateSimple(&prop->pos, prop->rooms, SMOKETYPE_GRENADETAIL);
}
}
if (cdresult == CDRESULT_COLLISION) {
if (projectile->unk0a4 < g_Vars.lvframenum - 2) {
if (weapon->weaponnum == WEAPON_COMBATKNIFE || weapon->weaponnum == WEAPON_COMBATKNIFE) {
propsnd0f0939f8(0, prop, SFX_808B, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
} else if (weapon->weaponnum == WEAPON_GRENADE && weapon->gunfunc == FUNC_SECONDARY) {
u16 sp100[] = {SFX_0027, SFX_0028, SFX_0029, SFX_002A};
propsnd0f0939f8(0, prop, sp100[random() % 4], -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
propsnd0f0939f8(0, prop, SFX_EYESPYHIT, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
} else {
propsnd0f0939f8(0, prop, SFX_EYESPYHIT, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
}
}
projectile->unk0a4 = g_Vars.lvframenum;
}
}
func0f069c70(obj, true, true);
}
} else if (projectile->flags & PROJECTILEFLAG_FALLING) {
// Some objects are placed in mid-air and then given this flag
// at level start, which causes them fall down to their resting
// position. Once stopped, the flag is removed.
bool stop = true;
f32 quaternion[4];
Mtxf spac;
if (projectile->unk060 < 1.0f) {
projectile->unk060 += projectile->unk064 * g_Vars.lvupdate240freal;
if (g_Vars.lvupdate240_60 > 0) {
projectile->unk064 *= 1.1f;
}
if (projectile->unk060 > 1.0f) {
projectile->unk060 = 1.0f;
}
quaternionSlerp(projectile->unk068, projectile->unk078, projectile->unk060, quaternion);
quaternionToMtx(quaternion, &spac);
mtx00015e24(projectile->unk0b8[0], &spac);
mtx00015e80(projectile->unk0b8[1], &spac);
mtx00015edc(projectile->unk0b8[2], &spac);
mtx4ToMtx3(&spac, obj->realrot);
stop = false;
}
if (projectile->speed.f[0] != 0.0f || projectile->speed.f[2] != 0.0f || projectile->unk060 < 1.0f) {
f32 f12;
f32 spa4;
s16 roomnum;
s32 i;
f32 sp98 = objGetRotatedLocalYMinByMtx3(objFindBboxRodata(obj), obj->realrot);
#if VERSION >= VERSION_NTSC_1_0
u16 geoflags;
#endif
stop = false;
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
sp5dc.x += PALUPF(projectile->speed.x);
sp5dc.z += PALUPF(projectile->speed.z);
if (projectile->unk060 >= 1.0f) {
if (projectile->unk098 > 0.0f) {
f32 dist = sqrtf(projectile->speed.f[0] * projectile->speed.f[0] + projectile->speed.f[2] * projectile->speed.f[2]);
if (dist > 0.0f) {
f12 = projectile->unk098 * g_Vars.lvupdate240freal / dist;
if (f12 >= 1.0f) {
projectile->speed.x = 0.0f;
projectile->speed.z = 0.0f;
} else {
projectile->speed.x -= projectile->speed.x * f12;
projectile->speed.z -= projectile->speed.z * f12;
}
} else {
projectile->speed.x = 0.0f;
projectile->speed.z = 0.0f;
}
} else {
projectile->speed.x *= 0.9f;
projectile->speed.z *= 0.9f;
}
}
}
sp5c8.x = prop->pos.x;
sp5c8.y = prop->pos.y;
sp5c8.z = prop->pos.z;
roomsCopy(prop->rooms, sp5b8);
func0f06d37c(obj, &sp5dc, &sp5e8, &sp5f4);
result = true;
sp5ac.x = prop->pos.x;
sp5ac.y = prop->pos.y + sp98;
sp5ac.z = prop->pos.z;
#if VERSION >= VERSION_NTSC_1_0
roomnum = cd0002a4d0(&sp5ac, prop->rooms, &spa4, &obj->floorcol, &geoflags);
if (roomnum <= 0 || cd0002db98(&sp5c8, sp5b8, &sp5ac, CDTYPE_OBJS | CDTYPE_BG, 3)) {
roomnum = cd0002a440(&prop->pos, prop->rooms, &spa4, &obj->floorcol, &geoflags);
}
#else
roomnum = cd0002a4d0(&sp5ac, prop->rooms, &spa4, &obj->floorcol);
if (roomnum <= 0 || cd0002db98(&sp5c8, sp5b8, &sp5ac, CDTYPE_BG, 3)) {
roomnum = cd0002a440(&prop->pos, prop->rooms, &spa4, &obj->floorcol);
}
#endif
if (roomnum <= 0) {
prop->pos.x = sp5c8.x;
prop->pos.z = sp5c8.z;
propDeregisterRooms(prop);
roomsCopy(sp5b8, prop->rooms);
#if VERSION >= VERSION_NTSC_1_0
roomnum = cd0002a440(&prop->pos, prop->rooms, &spa4, &obj->floorcol, &geoflags);
#else
roomnum = cd0002a440(&prop->pos, prop->rooms, &spa4, &obj->floorcol);
#endif
projectile->speed.x = 0.0f;
projectile->speed.z = 0.0f;
}
if (roomnum > 0) {
prop->pos.y = spa4 - sp98 + func0f06a620(obj);
#if VERSION >= VERSION_NTSC_1_0
if (geoflags & GEOFLAG_DIE) {
obj->hidden |= OBJHFLAG_REAPABLE;
}
#endif
} else {
prop->pos.y = sp5c8.y;
}
if (projectile->speed.x < 0.1f && projectile->speed.x > -0.1f
&& projectile->speed.z < 0.1f && projectile->speed.z > -0.1f) {
projectile->speed.z = 0.0f;
projectile->speed.x = 0.0f;
}
}
if (stop) {
objFreeProjectile(obj);
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *) obj;
objectiveCheckThrowInRoom(weapon->weaponnum, prop->rooms);
}
}
if (result) {
func0f069c70(obj, true, true);
}
}
}
}
return result;
}
void doorTick(struct prop *doorprop)
{
struct doorobj *door = (struct doorobj *)doorprop->obj;
struct model *model = door->base.model;
f32 prevfrac = door->frac;
u32 stack[2];
#if VERSION < VERSION_PAL_BETA
static u32 debugdoor = 0;
mainOverrideVariable("debugdoor", &debugdoor);
// If debugdoor is set to 1 or to the address of this door,
// print the distance to the door to console
if (debugdoor) {
u32 addr = (u32)doorprop;
if (debugdoor == 1 || debugdoor == addr) {
f32 xdiff = doorprop->pos.x - g_Vars.players[0]->cam_pos.x;
f32 zdiff = doorprop->pos.z - g_Vars.players[0]->cam_pos.z;
sqrtf(xdiff * xdiff + zdiff * zdiff);
}
}
#endif
// If door should autoclose this tick
if (door->lastopen60 > 0
&& door->mode == DOORMODE_IDLE
&& (door->base.flags & OBJFLAG_DOOR_KEEPOPEN) == 0
&& door->lastopen60 < g_Vars.lvframe60 - TICKS(door->autoclosetime)) {
// Check if any sibling is automatic
struct doorobj *loopdoor = door->sibling;
bool pass = door->doorflags & DOORFLAG_AUTOMATIC;
while (loopdoor && loopdoor != door && !pass) {
pass = loopdoor->doorflags & DOORFLAG_AUTOMATIC;
loopdoor = loopdoor->sibling;
}
if (!pass) {
// Not automatic
doorsRequestMode(door, DOORMODE_CLOSING);
} else if (door->doorflags & DOORFLAG_AUTOMATIC) {
// Check if any sibling has anything in range
pass = !doorIsRangeEmpty(door);
loopdoor = door->sibling;
while (loopdoor && loopdoor != door && !pass) {
pass = !doorIsRangeEmpty(loopdoor);
loopdoor = loopdoor->sibling;
}
if (pass) {
// Something is in range, so keep open
loopdoor = door->sibling;
door->lastopen60 = g_Vars.lvframe60;
while (loopdoor && loopdoor != door) {
loopdoor->lastopen60 = g_Vars.lvframe60;
loopdoor = loopdoor->sibling;
}
} else {
doorsRequestMode(door, DOORMODE_CLOSING);
}
}
}
// If waiting for sibling to close, check for that
if (door->mode == DOORMODE_WAITING) {
bool shouldopen = true;
struct doorobj *loopdoor = door->sibling;
while (loopdoor && loopdoor != door) {
if (loopdoor->mode != DOORMODE_IDLE || loopdoor->frac > 0) {
shouldopen = false;
}
loopdoor = loopdoor->sibling;
}
if (shouldopen) {
doorSetMode(door, DOORMODE_OPENING);
}
}
// Open fall-away doors if padlock free (GE only)
if (door->doortype == DOORTYPE_FALLAWAY && doorIsClosed(door) && doorIsPadlockFree(door)) {
doorsActivate(doorprop, false);
}
// Update frac
if (door->lastcalc60 < g_Vars.lvframe60 || g_Vars.lvupdate240 == 0) {
doorsCalcFrac(door);
}
// Consider playing a sound effect
if (model->filedata->skel == &g_Skel13) {
f32 soundpoint = door->maxfrac * 0.3f;
if (door->frac > soundpoint) {
if (prevfrac <= soundpoint) {
// frac increased past the soundpoint
propsnd0f0939f8(NULL, doorprop, SFX_DOOR_8014, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
}
} else {
if (prevfrac > soundpoint) {
// frac decreased past the soundpoint
propsnd0f0939f8(NULL, doorprop, SFX_DOOR_8015, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
}
}
}
}
struct escastepkeyframe g_EscaStepKeyframesX[] = {
{ 0, { -1535.98, -511, -5258.18 } },
{ 41, { -1535.98, -505.76, -5188.43 } },
{ 149, { -1535.98, -504.79, -5008.75 } },
{ 698, { -1535.98, -100.91, -4210.86 } },
{ 759, { -1535.98, -98.89, -4109.62 } },
{ 800, { -1535.98, -102, -4039.06 } },
{ -1, { 0, 0, 0 } },
};
struct escastepkeyframe g_EscaStepKeyframesZ[] = {
{ 0, { -1932.27, -102, -3824.58 } },
{ 41, { -2002.83, -98.89, -3824.58 } },
{ 102, { -2104.07, -100.91, -3824.58 } },
{ 651, { -2901.96, -504.79, -3824.58 } },
{ 759, { -3081.64, -505.76, -3824.58 } },
{ 800, { -3151.39, -511, -3824.58 } },
{ -1, { 0, 0, 0 } },
};
const char var7f1a9fe8[] = "************** RWI : Door Stuck Mate -> Sort it out\n";
void doorUpdatePortalIfWindowed(struct prop *doorprop, s32 playercount)
{
struct doorobj *doorobj = doorprop->door;
struct modelnode *node;
bool canhide = true;
struct model *model = doorprop->obj->model;
union modelrwdata *rwdata;
if (doorobj->doorflags & DOORFLAG_WINDOWED) {
doorobj->fadealpha = glassCalculateOpacity(&doorprop->pos, doorobj->xludist, doorobj->opadist, 0);
if (doorobj->fadealpha != 255 || doorobj->frac > 0) {
canhide = false;
}
if (model->filedata->skel == &g_SkelWindowedDoor) {
node = modelGetPart(model->filedata, MODELPART_WINDOWEDDOOR_0001);
rwdata = modelGetNodeRwData(model, node);
if (!rwdata->toggle.visible) {
canhide = false;
}
}
if (playercount >= 2) {
canhide = false;
}
if (canhide) {
doorDeactivatePortal(doorobj);
} else {
doorActivatePortal(doorobj);
}
}
}
GLOBAL_ASM(
glabel doorInitMatrices
.late_rodata
glabel var7f1aa440
.word 0x3c8ef461
glabel var7f1aa444
.word 0x40c907a9
glabel var7f1aa448
.word 0x3c8ef461
glabel var7f1aa44c
.word 0x3e99999a
.text
/* f077448: 27bdffb8 */ addiu $sp,$sp,-72
/* f07744c: afbf0044 */ sw $ra,0x44($sp)
/* f077450: afb70040 */ sw $s7,0x40($sp)
/* f077454: afb6003c */ sw $s6,0x3c($sp)
/* f077458: afb50038 */ sw $s5,0x38($sp)
/* f07745c: afb40034 */ sw $s4,0x34($sp)
/* f077460: afb30030 */ sw $s3,0x30($sp)
/* f077464: afb2002c */ sw $s2,0x2c($sp)
/* f077468: afb10028 */ sw $s1,0x28($sp)
/* f07746c: afb00024 */ sw $s0,0x24($sp)
/* f077470: f7b60018 */ sdc1 $f22,0x18($sp)
/* f077474: f7b40010 */ sdc1 $f20,0x10($sp)
/* f077478: 8c900004 */ lw $s0,0x4($a0)
/* f07747c: 8e160018 */ lw $s6,0x18($s0)
/* f077480: 02002025 */ or $a0,$s0,$zero
/* f077484: 8ed5000c */ lw $s5,0xc($s6)
/* f077488: 0fc23109 */ jal func0f08c424
/* f07748c: 02a02825 */ or $a1,$s5,$zero
/* f077490: 0fc2d5be */ jal camGetWorldToScreenMtxf
/* f077494: 00000000 */ nop
/* f077498: 00402025 */ or $a0,$v0,$zero
/* f07749c: 0c0056f8 */ jal mtx00015be0
/* f0774a0: 02a02825 */ or $a1,$s5,$zero
/* f0774a4: 8ec40008 */ lw $a0,0x8($s6)
/* f0774a8: 3c0e8008 */ lui $t6,%hi(g_Skel11)
/* f0774ac: 25ceae84 */ addiu $t6,$t6,%lo(g_Skel11)
/* f0774b0: 8c820004 */ lw $v0,0x4($a0)
/* f0774b4: 3c0f8008 */ lui $t7,%hi(g_Skel13)
/* f0774b8: 3c017f1b */ lui $at,%hi(var7f1aa440)
/* f0774bc: 15c20024 */ bne $t6,$v0,.L0f077550
/* f0774c0: 25efaea8 */ addiu $t7,$t7,%lo(g_Skel13)
/* f0774c4: c42ea440 */ lwc1 $f14,%lo(var7f1aa440)($at)
/* f0774c8: c604007c */ lwc1 $f4,0x7c($s0)
/* f0774cc: 3c017f1b */ lui $at,%hi(var7f1aa444)
/* f0774d0: c436a444 */ lwc1 $f22,%lo(var7f1aa444)($at)
/* f0774d4: 460e2182 */ mul.s $f6,$f4,$f14
/* f0774d8: 24050001 */ addiu $a1,$zero,0x1
/* f0774dc: 0c006a6f */ jal modelGetPartRodata
/* f0774e0: 4606b501 */ sub.s $f20,$f22,$f6
/* f0774e4: 26b10040 */ addiu $s1,$s5,0x40
/* f0774e8: 00408025 */ or $s0,$v0,$zero
/* f0774ec: 02202825 */ or $a1,$s1,$zero
/* f0774f0: 0c0058ba */ jal mtx4LoadXRotation
/* f0774f4: 4600a306 */ mov.s $f12,$f20
/* f0774f8: 02002025 */ or $a0,$s0,$zero
/* f0774fc: 0c005775 */ jal mtx4SetTranslation
/* f077500: 02202825 */ or $a1,$s1,$zero
/* f077504: 02a02025 */ or $a0,$s5,$zero
/* f077508: 0c00567f */ jal mtx4MultMtx4InPlace
/* f07750c: 02202825 */ or $a1,$s1,$zero
/* f077510: 8ec40008 */ lw $a0,0x8($s6)
/* f077514: 0c006a6f */ jal modelGetPartRodata
/* f077518: 24050002 */ addiu $a1,$zero,0x2
/* f07751c: 26b10080 */ addiu $s1,$s5,0x80
/* f077520: 00408025 */ or $s0,$v0,$zero
/* f077524: 02202825 */ or $a1,$s1,$zero
/* f077528: 0c0058ba */ jal mtx4LoadXRotation
/* f07752c: 4614b301 */ sub.s $f12,$f22,$f20
/* f077530: 02002025 */ or $a0,$s0,$zero
/* f077534: 0c005775 */ jal mtx4SetTranslation
/* f077538: 02202825 */ or $a1,$s1,$zero
/* f07753c: 02a02025 */ or $a0,$s5,$zero
/* f077540: 0c00567f */ jal mtx4MultMtx4InPlace
/* f077544: 02202825 */ or $a1,$s1,$zero
/* f077548: 1000003c */ b .L0f07763c
/* f07754c: 8fbf0044 */ lw $ra,0x44($sp)
.L0f077550:
/* f077550: 15e20039 */ bne $t7,$v0,.L0f077638
/* f077554: 3c017f1b */ lui $at,%hi(var7f1aa448)
/* f077558: c42ea448 */ lwc1 $f14,%lo(var7f1aa448)($at)
/* f07755c: c600007c */ lwc1 $f0,0x7c($s0)
/* f077560: 3c017f1b */ lui $at,%hi(var7f1aa44c)
/* f077564: c428a44c */ lwc1 $f8,%lo(var7f1aa44c)($at)
/* f077568: c60c005c */ lwc1 $f12,0x5c($s0)
/* f07756c: 460e0582 */ mul.s $f22,$f0,$f14
/* f077570: 4480a000 */ mtc1 $zero,$f20
/* f077574: 0000a025 */ or $s4,$zero,$zero
/* f077578: 46086082 */ mul.s $f2,$f12,$f8
/* f07757c: 24170006 */ addiu $s7,$zero,0x6
/* f077580: 4600103c */ c.lt.s $f2,$f0
/* f077584: 00000000 */ nop
/* f077588: 45000007 */ bc1f .L0f0775a8
/* f07758c: 00000000 */ nop
/* f077590: 46020281 */ sub.s $f10,$f0,$f2
/* f077594: 46026481 */ sub.s $f18,$f12,$f2
/* f077598: 460a6402 */ mul.s $f16,$f12,$f10
/* f07759c: 46128103 */ div.s $f4,$f16,$f18
/* f0775a0: 460e2502 */ mul.s $f20,$f4,$f14
/* f0775a4: 00000000 */ nop
.L0f0775a8:
/* f0775a8: 00148840 */ sll $s1,$s4,0x1
.L0f0775ac:
/* f0775ac: 26330001 */ addiu $s3,$s1,0x1
/* f0775b0: 02602825 */ or $a1,$s3,$zero
/* f0775b4: 0c006a6f */ jal modelGetPartRodata
/* f0775b8: 8ec40008 */ lw $a0,0x8($s6)
/* f0775bc: 0013c180 */ sll $t8,$s3,0x6
/* f0775c0: 02b89021 */ addu $s2,$s5,$t8
/* f0775c4: 00408025 */ or $s0,$v0,$zero
/* f0775c8: 02402825 */ or $a1,$s2,$zero
/* f0775cc: 0c005900 */ jal mtx4LoadZRotation
/* f0775d0: 4600a306 */ mov.s $f12,$f20
/* f0775d4: 02002025 */ or $a0,$s0,$zero
/* f0775d8: 0c005775 */ jal mtx4SetTranslation
/* f0775dc: 02402825 */ or $a1,$s2,$zero
/* f0775e0: 02a02025 */ or $a0,$s5,$zero
/* f0775e4: 0c00567f */ jal mtx4MultMtx4InPlace
/* f0775e8: 02402825 */ or $a1,$s2,$zero
/* f0775ec: 26330002 */ addiu $s3,$s1,0x2
/* f0775f0: 02602825 */ or $a1,$s3,$zero
/* f0775f4: 0c006a6f */ jal modelGetPartRodata
/* f0775f8: 8ec40008 */ lw $a0,0x8($s6)
/* f0775fc: 0013c980 */ sll $t9,$s3,0x6
/* f077600: 02b98821 */ addu $s1,$s5,$t9
/* f077604: 00408025 */ or $s0,$v0,$zero
/* f077608: 02202825 */ or $a1,$s1,$zero
/* f07760c: 0c005900 */ jal mtx4LoadZRotation
/* f077610: 4600b306 */ mov.s $f12,$f22
/* f077614: 02002025 */ or $a0,$s0,$zero
/* f077618: 0c005775 */ jal mtx4SetTranslation
/* f07761c: 02202825 */ or $a1,$s1,$zero
/* f077620: 02402025 */ or $a0,$s2,$zero
/* f077624: 0c00567f */ jal mtx4MultMtx4InPlace
/* f077628: 02202825 */ or $a1,$s1,$zero
/* f07762c: 26940001 */ addiu $s4,$s4,0x1
/* f077630: 5697ffde */ bnel $s4,$s7,.L0f0775ac
/* f077634: 00148840 */ sll $s1,$s4,0x1
.L0f077638:
/* f077638: 8fbf0044 */ lw $ra,0x44($sp)
.L0f07763c:
/* f07763c: d7b40010 */ ldc1 $f20,0x10($sp)
/* f077640: d7b60018 */ ldc1 $f22,0x18($sp)
/* f077644: 8fb00024 */ lw $s0,0x24($sp)
/* f077648: 8fb10028 */ lw $s1,0x28($sp)
/* f07764c: 8fb2002c */ lw $s2,0x2c($sp)
/* f077650: 8fb30030 */ lw $s3,0x30($sp)
/* f077654: 8fb40034 */ lw $s4,0x34($sp)
/* f077658: 8fb50038 */ lw $s5,0x38($sp)
/* f07765c: 8fb6003c */ lw $s6,0x3c($sp)
/* f077660: 8fb70040 */ lw $s7,0x40($sp)
/* f077664: 03e00008 */ jr $ra
/* f077668: 27bd0048 */ addiu $sp,$sp,0x48
);
// Mismatch: regalloc
//void doorInitMatrices(struct prop *prop)
//{
// struct doorobj *door = prop->door;
// struct model *model = door->base.model;
// Mtxf *matrices = model->matrices;
// union modelrodata *rodata;
//
// func0f08c424(door, matrices);
// mtx00015be0(camGetWorldToScreenMtxf(), matrices);
//
// if (model->filedata->type == &g_Skel11) {
// f32 xrot = M_BADTAU - door->frac * 0.017450513318181f;
//
// rodata = modelGetPartRodata(model->filedata, 1);
// mtx4LoadXRotation(xrot, &matrices[1]);
// mtx4SetTranslation(&rodata->position.pos, &matrices[1]);
// mtx4MultMtx4InPlace(matrices, &matrices[1]);
//
// rodata = modelGetPartRodata(model->filedata, 2);
// mtx4LoadXRotation(M_BADTAU - xrot, &matrices[2]);
// mtx4SetTranslation(&rodata->position.pos, &matrices[2]);
// mtx4MultMtx4InPlace(matrices, &matrices[2]);
// } else if (model->filedata->type == &g_Skel13) {
// f32 zrot1 = 0;
// f32 zrot2 = door->frac * 0.017450513318181f;
// f32 limit = door->maxfrac * 0.3f;
// s32 i;
//
// if (door->frac > limit) {
// zrot1 = ((door->maxfrac * (door->frac - limit)) / (door->maxfrac - limit)) * 0.017450513318181f;
// }
//
// for (i = 0; i < 6; i++) {
// s32 index = i << 1;
//
// rodata = modelGetPartRodata(model->filedata, index + 1);
// mtx4LoadZRotation(zrot1, &matrices[index + 1]);
// mtx4SetTranslation(&rodata->position.pos, &matrices[index + 1]);
// mtx4MultMtx4InPlace(matrices, &matrices[index + 1]);
//
// rodata = modelGetPartRodata(model->filedata, index + 2);
// mtx4LoadZRotation(zrot2, &matrices[index + 2]);
// mtx4SetTranslation(&rodata->position.pos, &matrices[index + 2]);
// mtx4MultMtx4InPlace(&matrices[index + 1], &matrices[index + 2]);
// }
// }
//}
void platformDisplaceProps(struct prop *platform, s16 *propnums, struct coord *prevpos, struct coord *newpos)
{
struct prop *prop;
s16 *propnumptr = propnums;
while (*propnumptr >= 0) {
prop = &g_Vars.props[*propnumptr];
if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_WEAPON) {
struct defaultobj *obj = prop->obj;
if ((obj->hidden & OBJHFLAG_00020000) == 0) {
if ((obj->hidden & OBJHFLAG_PROJECTILE) == 0
|| (obj->projectile->flags & (PROJECTILEFLAG_FALLING | PROJECTILEFLAG_SLIDING))) {
struct hov *hov = NULL;
if (obj->type == OBJTYPE_HOVERPROP) {
struct hoverpropobj *hoverobj = (struct hoverpropobj *)obj;
hov = &hoverobj->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
struct hoverbikeobj *bike = (struct hoverbikeobj *)obj;
hov = &bike->hov;
}
if (hov) {
hov->unk30 += newpos->y - prevpos->y;
hov->ground += newpos->y - prevpos->y;
}
prop->pos.x += newpos->x - prevpos->x;
prop->pos.y += newpos->y - prevpos->y;
prop->pos.z += newpos->z - prevpos->z;
propDeregisterRooms(prop);
func0f065e74(&platform->pos, platform->rooms, &prop->pos, prop->rooms);
func0f069c70(obj, true, true);
}
}
} else if (prop->type == PROPTYPE_CHR) {
struct chrdata *chr = prop->chr;
s32 nodetype;
if (chr->fallspeed.y == 0.0f) {
chr->ground += newpos->y - prevpos->y;
chr->manground += newpos->y - prevpos->y;
chr->sumground = chr->manground * (PAL ? 8.417509f : 9.999998f);
prop->pos.x += newpos->x - prevpos->x;
prop->pos.y += newpos->y - prevpos->y;
prop->pos.z += newpos->z - prevpos->z;
propDeregisterRooms(prop);
func0f065e74(&platform->pos, platform->rooms, &prop->pos, prop->rooms);
chr0f0220ac(chr);
modelSetRootPosition(chr->model, &prop->pos);
nodetype = chr->model->filedata->rootnode->type;
if ((nodetype & 0xff) == MODELNODETYPE_CHRINFO) {
struct modelrwdata_chrinfo *rwdata = modelGetNodeRwData(chr->model, chr->model->filedata->rootnode);
rwdata->ground += newpos->y - prevpos->y;
}
}
} else if (prop->type == PROPTYPE_PLAYER) {
struct defaultobj *platformobj = platform->obj;
struct coord sp8c;
s32 playernum = playermgrGetPlayerNumByProp(prop);
s32 prevplayernum;
if (platformobj->type == OBJTYPE_LIFT) {
#if VERSION >= VERSION_NTSC_1_0
if (g_Vars.players[playernum]->lift == platform && g_Vars.players[playernum]->bondmovemode == MOVEMODE_WALK) {
if (platformobj->flags & OBJFLAG_20000000) {
g_Vars.players[playernum]->bondextrapos.x += newpos->x - prevpos->x;
g_Vars.players[playernum]->bondextrapos.z += newpos->z - prevpos->z;
sp8c.x = newpos->x - prevpos->x;
sp8c.y = 0.0f;
sp8c.z = newpos->z - prevpos->z;
prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(playernum);
bwalk0f0c63bc(&sp8c, 1, CDTYPE_BG);
playerUpdatePerimInfo();
bmoveUpdateRooms(g_Vars.players[playernum]);
setCurrentPlayerNum(prevplayernum);
}
if (g_Vars.players[playernum]->inlift && !g_Vars.players[playernum]->onladder && !g_Vars.players[playernum]->isfalling) {
struct coord sp78;
s16 sp68[8];
f32 ydist = newpos->y - prevpos->y;
if (ydist != 0.0f) {
g_Vars.players[playernum]->bondextrapos.y += ydist;
prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(playernum);
g_Vars.players[playernum]->vv_ground += ydist;
if (ydist > 0.0f || (platformobj->flags & OBJFLAG_80000000) == 0) {
sp78.x = prop->pos.x;
sp78.y = prop->pos.y + ydist;
sp78.z = prop->pos.z;
func0f065e74(&prop->pos, prop->rooms, &sp78, sp68);
prop->pos.x = sp78.x;
prop->pos.y = sp78.y;
prop->pos.z = sp78.z;
propDeregisterRooms(prop);
roomsCopy(sp68, prop->rooms);
g_Vars.players[playernum]->vv_manground += ydist;
g_Vars.players[playernum]->sumground = g_Vars.players[playernum]->vv_manground / (PAL ? 0.054400026798248f : 0.045499980449677f);
} else if (bwalkTryMoveUpwards(ydist) == CDRESULT_NOCOLLISION) {
g_Vars.players[playernum]->vv_manground += ydist;
g_Vars.players[playernum]->sumground = g_Vars.players[playernum]->vv_manground / (PAL ? 0.054400026798248f : 0.045499980449677f);
}
playerUpdatePerimInfo();
bmoveUpdateRooms(g_Vars.players[playernum]);
setCurrentPlayerNum(prevplayernum);
if (g_Vars.players[playernum]->walkinitmove) {
g_Vars.players[playernum]->walkinitstart.y += ydist;
}
}
}
}
#else
if ((platformobj->flags & OBJFLAG_20000000)
&& g_Vars.players[playernum]->lift == platform
&& g_Vars.players[playernum]->bondmovemode == MOVEMODE_WALK) {
g_Vars.players[playernum]->bondextrapos.x += newpos->x - prevpos->x;
g_Vars.players[playernum]->bondextrapos.y += newpos->y - prevpos->y;
g_Vars.players[playernum]->bondextrapos.z += newpos->z - prevpos->z;
prevplayernum = g_Vars.currentplayernum;
sp8c.x = newpos->x - prevpos->x;
sp8c.y = 0.0f;
sp8c.z = newpos->z - prevpos->z;
setCurrentPlayerNum(playernum);
bwalk0f0c63bc(&sp8c, 1, CDTYPE_BG);
prop->pos.y += newpos->y - prevpos->y;
g_Vars.players[playernum]->vv_ground += newpos->y - prevpos->y;
g_Vars.players[playernum]->vv_manground += newpos->y - prevpos->y;
g_Vars.players[playernum]->sumground = g_Vars.players[playernum]->vv_manground / (PAL ? 0.054400026798248f : 0.045499980449677f);
playerUpdatePerimInfo();
bmoveUpdateRooms(g_Vars.players[playernum]);
setCurrentPlayerNum(prevplayernum);
}
#endif
}
}
propnumptr++;
}
}
void liftTick(struct prop *prop)
{
struct liftobj *lift = (struct liftobj *)prop->obj;
struct defaultobj *obj = prop->obj;
struct doorobj *door;
struct pad padcur;
struct pad padaim;
f32 segdist;
f32 xdiff;
f32 ydiff;
f32 zdiff;
struct coord curcentre;
f32 frac;
s32 move;
struct coord newpos;
s16 newrooms[8];
struct coord prevpos;
#if VERSION >= VERSION_NTSC_1_0
f32 prevdist;
#endif
s16 propnums[256];
s32 stop;
lift->prevpos.x = prop->pos.x;
lift->prevpos.y = prop->pos.y;
lift->prevpos.z = prop->pos.z;
if (lift->levelcur != lift->levelaim) {
// Lift is not at the desired level. So try to move, but not if the lift
// is disabled or if the door needs to be closed first.
move = true;
if (obj->flags & OBJFLAG_DEACTIVATED) {
move = false;
} else if (lift->doors[lift->levelcur] && !doorIsClosed(lift->doors[lift->levelcur])) {
doorsRequestMode(lift->doors[lift->levelcur], DOORMODE_CLOSING);
move = false;
}
if (move) {
prevpos.x = prop->pos.x;
prevpos.y = prop->pos.y;
prevpos.z = prop->pos.z;
cdGetPropsOnPlatform(prop, propnums, ARRAYCOUNT(propnums));
if (lift->dist == 0 && lift->speed == 0) {
doorPlayOpeningSound(lift->soundtype, lift->base.prop);
if (obj->flags & OBJFLAG_LIFT_TRIGGERDISABLE) {
obj->flags &= ~OBJFLAG_LIFT_TRIGGERDISABLE;
obj->flags |= OBJFLAG_DEACTIVATED;
}
}
padGetCentre(lift->pads[lift->levelcur], &curcentre);
padUnpack(lift->pads[lift->levelcur], PADFIELD_POS, &padcur);
padUnpack(lift->pads[lift->levelaim], PADFIELD_POS, &padaim);
xdiff = padaim.pos.f[0] - padcur.pos.f[0];
ydiff = padaim.pos.f[1] - padcur.pos.f[1];
zdiff = padaim.pos.f[2] - padcur.pos.f[2];
segdist = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
#if VERSION >= VERSION_NTSC_1_0
prevdist = lift->dist;
#endif
applySpeed(&lift->dist, segdist, &lift->speed, lift->accel, lift->accel, lift->maxspeed);
// If arriving at the destination, set the distance explicitly
if (lift->speed < 1 && lift->speed > -1) {
#if VERSION >= VERSION_NTSC_1_0
if (prevdist < segdist && lift->dist >= segdist) {
lift->dist = segdist;
} else if (prevdist > 0 && lift->dist <= 0) {
lift->dist = 0;
}
#else
if (lift->dist >= segdist) {
lift->dist = segdist;
} else if (lift->dist <= 0) {
lift->dist = 0;
}
#endif
}
frac = segdist == 0 ? 0 : lift->dist / segdist;
newpos.x = curcentre.f[0] + xdiff * frac;
newpos.y = curcentre.f[1] + ydiff * frac;
newpos.z = curcentre.f[2] + zdiff * frac;
if (segdist == lift->dist) {
lift->dist = 0;
lift->speed = 0;
lift->levelcur = lift->levelaim;
doorPlayOpenedSound(lift->soundtype, lift->base.prop);
if (obj->flags & OBJFLAG_LIFT_TRIGGERDISABLE) {
obj->flags &= ~OBJFLAG_LIFT_TRIGGERDISABLE;
obj->flags |= OBJFLAG_DEACTIVATED;
}
door = lift->doors[lift->levelcur];
if (door && door->keyflags == 0) {
doorsRequestMode(door, DOORMODE_OPENING);
}
}
func0f065e74(&prop->pos, prop->rooms, &newpos, newrooms);
prop->pos.x = newpos.x;
prop->pos.y = newpos.y;
prop->pos.z = newpos.z;
propDeregisterRooms(prop);
roomsCopy(newrooms, prop->rooms);
func0f069c70(obj, true, true);
liftUpdateTiles(lift, lift->levelcur == lift->levelaim);
platformDisplaceProps(prop, propnums, &prevpos, &prop->pos);
}
} else {
// Lift is at the aim stop
door = lift->doors[lift->levelcur];
if (!door || (doorIsClosed(door) && door->keyflags == 0)) {
// Find next stop
stop = lift->levelaim;
do {
stop = (stop + 1) % 4;
} while (lift->pads[stop] < 0);
liftGoToStop(lift, stop);
}
}
}
void escastepTick(struct prop *prop)
{
struct escalatorobj *step = (struct escalatorobj *)prop->obj;
struct defaultobj *obj = prop->obj;
struct coord newpos;
struct escastepkeyframe *keyframes;
s32 i;
f32 mult;
struct coord oldpos;
s16 propnums[256];
bool resetting;
resetting = false;
step->frame += g_Vars.lvupdate240_60;
keyframes = (obj->flags & OBJFLAG_ESCSTEP_ZALIGNED) ? g_EscaStepKeyframesZ : g_EscaStepKeyframesX;
for (i = 0; true; i++) {
if (keyframes[i + 1].frame == -1) {
step->frame -= keyframes[i].frame;
i = -1;
resetting = true;
} else if (step->frame < keyframes[i + 1].frame) {
mult = (f32)(step->frame - keyframes[i].frame) / (f32)(keyframes[i + 1].frame - keyframes[i].frame);
newpos.x = keyframes[i].pos.x + (keyframes[i + 1].pos.x - keyframes[i].pos.x) * mult;
newpos.y = keyframes[i].pos.y + (keyframes[i + 1].pos.y - keyframes[i].pos.y) * mult;
newpos.z = keyframes[i].pos.z + (keyframes[i + 1].pos.z - keyframes[i].pos.z) * mult;
break;
} else {
// empty
}
}
if (!resetting) {
oldpos.x = prop->pos.x;
oldpos.y = prop->pos.y;
oldpos.z = prop->pos.z;
cdGetPropsOnPlatform(prop, propnums, ARRAYCOUNT(propnums));
step->prevpos.x = prop->pos.x;
step->prevpos.y = prop->pos.y;
step->prevpos.z = prop->pos.z;
} else {
step->prevpos.x = newpos.f[0];
step->prevpos.y = newpos.f[1];
step->prevpos.z = newpos.f[2];
}
prop->pos.x = newpos.x;
prop->pos.y = newpos.y;
prop->pos.z = newpos.z;
if ((obj->flags & OBJFLAG_ILLUMINATED) == 0) {
cd0002a36c(&prop->pos, prop->rooms, &obj->floorcol, 0);
}
func0f069c70(obj, true, true);
if (!resetting) {
platformDisplaceProps(prop, propnums, &oldpos, &prop->pos);
}
}
void cctvTick(struct prop *camprop)
{
struct cctvobj *camera = (struct cctvobj *)camprop->obj;
struct defaultobj *obj = camprop->obj;
f32 yaw;
struct prop *playerprop;
f32 xdist;
f32 ydist;
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;
}
// Check distance
xdist = playerprop->pos.x - camprop->pos.x;
ydist = playerprop->pos.y - camprop->pos.y;
zdist = playerprop->pos.z - camprop->pos.z;
yaw = camera->toleft ? camera->yleft : camera->yright;
if (camera->maxdist > 0) {
if (xdist * xdist + ydist * ydist + zdist * zdist > camera->maxdist * camera->maxdist) {
canseeplayer = false;
}
}
if (g_Vars.bondvisible == false
|| (obj->flags & OBJFLAG_CAMERA_DISABLED)
|| (playerprop->chr->hidden & CHRHFLAG_CLOAKED)) {
canseeplayer = false;
}
// Check horizontal angle
if (canseeplayer) {
f32 angle = atan2f(xdist, zdist);
f32 yrot = camera->yrot;
f32 finalangle;
if (yrot < 0) {
yrot += M_BADTAU;
} else if (yrot >= M_BADTAU) {
yrot -= M_BADTAU;
}
yrot += camera->yzero;
if (yrot >= M_BADTAU) {
yrot -= M_BADTAU;
}
finalangle = angle - yrot;
if (angle < yrot) {
finalangle += M_BADTAU;
}
finalangle -= M_BADPI;
if (finalangle < 0) {
finalangle += M_BADTAU;
}
if (finalangle > M_BADPI) {
finalangle -= M_BADTAU;
}
if (finalangle > 0.7852731347084f || finalangle < -0.7852731347084f) {
canseeplayer = false;
}
}
// Check vertical angle
if (canseeplayer) {
f32 angle = atan2f(ydist, sqrtf(xdist * xdist + zdist * zdist));
f32 finalangle = angle - camera->xzero;
if (angle < camera->xzero) {
finalangle = angle - camera->xzero + M_BADTAU;
}
if (finalangle > M_BADTAU) {
finalangle -= M_BADTAU;
}
if (finalangle > M_BADPI) {
finalangle -= M_BADTAU;
}
if (finalangle);
if (finalangle > 0.7852731347084f || finalangle < -0.7852731347084f) {
canseeplayer = false;
}
}
// Check line of sight
if (canseeplayer) {
playerSetPerimEnabled(playerprop, false);
if (!cdHasLineOfSight(&camprop->pos, camprop->rooms, &playerprop->pos, playerprop->rooms, 315, 8)) {
canseeplayer = false;
}
playerSetPerimEnabled(playerprop, true);
}
if (canseeplayer) {
obj->flags |= OBJFLAG_CAMERA_BONDINVIEW;
camera->seebondtime60 += g_Vars.lvupdate240_60;
if (g_Vars.coopplayernum >= 0) {
camera->seebondtime60 += g_Vars.lvupdate240_60;
}
if (camera->seebondtime60 >= (s32)(TICKS(300) * g_CctvWaitScale)) {
alarmActivate();
camera->seebondtime60 = 0;
}
} else {
obj->flags &= ~OBJFLAG_CAMERA_BONDINVIEW;
}
// Update yaw
if (camera->yrot < yaw) {
f32 tmp = camera->yspeed * camera->yspeed * 764.06536865234f;
if (camera->yrot >= yaw - tmp) {
camera->yspeed -= 0.00065439427271485f * g_Vars.lvupdate240freal;
if (camera->yspeed < 0.00065439427271485f) {
camera->yspeed = 0.00065439427271485f;
}
} else if (camera->yspeed < camera->ymaxspeed) {
f32 newspeed = camera->yspeed + 0.00065439427271485f * g_Vars.lvupdate240freal;
if (newspeed > camera->ymaxspeed) {
newspeed = camera->ymaxspeed;
}
if (camera->yrot < yaw - newspeed * newspeed * 764.06536865234f) {
camera->yspeed = newspeed;
}
}
camera->yrot += camera->yspeed * g_Vars.lvupdate240freal;
if (camera->yrot >= yaw) {
camera->yrot = yaw;
camera->toleft = false;
camera->yspeed = 0;
}
} else {
f32 tmp = camera->yspeed * camera->yspeed * 764.06536865234f;
if (camera->yrot <= yaw + tmp) {
camera->yspeed -= 0.00065439427271485f * g_Vars.lvupdate240freal;
if (camera->yspeed < 0.00065439427271485f) {
camera->yspeed = 0.00065439427271485f;
}
} else if (camera->yspeed < camera->ymaxspeed) {
f32 newspeed = camera->yspeed + 0.00065439427271485f * g_Vars.lvupdate240freal;
if (newspeed > camera->ymaxspeed) {
newspeed = camera->ymaxspeed;
}
if (camera->yrot > yaw + newspeed * newspeed * 764.06536865234f) {
camera->yspeed = newspeed;
}
}
camera->yrot -= camera->yspeed * g_Vars.lvupdate240freal;
if (camera->yrot <= yaw) {
camera->yrot = yaw;
camera->toleft = true;
camera->yspeed = 0;
}
}
}
void cctvInitMatrices(struct prop *prop, Mtxf *mtx)
{
struct cctvobj *cctv = (struct cctvobj *)prop->obj;
struct model *model = cctv->base.model;
Mtxf *matrices = model->matrices;
union modelrodata *rodata = modelGetPartRodata(model->filedata, MODELPART_CCTV_CASING);
struct coord sp64;
Mtxf sp24;
f32 yrot = cctv->yrot;
if (yrot < 0) {
yrot += M_BADTAU;
} else if (yrot >= M_BADTAU) {
yrot -= M_BADTAU;
}
mtx4LoadYRotation(yrot, &sp24);
mtx4MultMtx4(&sp24, &cctv->camrotm, &matrices[1]);
sp64.x = rodata->position.pos.x;
sp64.y = rodata->position.pos.y;
sp64.z = rodata->position.pos.z;
mtx4TransformVecInPlace(mtx, &sp64);
mtx4SetTranslation(&sp64, &matrices[1]);
mtx00015be0(camGetWorldToScreenMtxf(), &matrices[1]);
}
void fanTick(struct prop *prop)
{
struct defaultobj *obj = (struct defaultobj *)prop->obj;
struct fanobj *fan = (struct fanobj *)prop->obj;
// If activated, toggle the power state
if (obj->hidden & (OBJHFLAG_ACTIVATED_BY_BOND | OBJHFLAG_ACTIVATED_BY_COOP)) {
if (fan->on == true) {
fan->on = false;
obj->hidden &= ~(OBJHFLAG_ACTIVATED_BY_BOND | OBJHFLAG_ACTIVATED_BY_COOP);
} else {
fan->on = true;
obj->hidden &= ~(OBJHFLAG_ACTIVATED_BY_BOND | OBJHFLAG_ACTIVATED_BY_COOP);
}
}
// Adjust fan speed
if (fan->on == true) {
// Accelerating
fan->yspeed += fan->yaccel * g_Vars.lvupdate240freal;
if (fan->yspeed > fan->ymaxspeed) {
fan->yspeed = fan->ymaxspeed;
}
} else if (fan->yspeed > 0) {
// Decelerating
s32 i;
for (i = 0; i < g_Vars.lvupdate240; i++) {
fan->yspeed -= fan->yaccel * 0.2f;
}
if (fan->yspeed <= fan->ymaxspeed * 0.01f) {
fan->yspeed = 0;
}
}
// Rotate
if (fan->yspeed > 0) {
fan->yrot += fan->yspeed * g_Vars.lvupdate240freal;
while (fan->yrot >= 1.5705462694168f) { // almost BADDEG2RAD(90)
fan->yrot -= 1.5705462694168f;
}
fan->yrotprev = fan->yrot;
}
}
void fanUpdateModel(struct prop *prop)
{
struct fanobj *fan = (struct fanobj *) prop->obj;
Mtxf sp6c;
f32 sp48[3][3];
f32 sp24[3][3];
f32 angle = fan->yspeed * g_Vars.lvupdate240freal;
while (angle >= M_BADTAU) {
angle -= M_BADTAU;
}
mtx4LoadYRotation(angle, &sp6c);
mtx4ToMtx3(&sp6c, sp48);
mtx00016140(fan->base.realrot, sp48, sp24);
mtx3Copy(sp24, fan->base.realrot);
}
#if PAL
GLOBAL_ASM(
glabel autogunTick
.late_rodata
glabel var7f1aa4c0
.word 0x3c8ef461
glabel var7f1aa4c4
.word 0x40c907a9
glabel var7f1aa4c8
.word 0x376a3783
glabel var7f1aa4cc
.word 0x3a5b940b
glabel var7f1aa4d0
.word 0x36ea3783
glabel var7f1aa4d4
.word 0x39db940b
glabel var7f1aa4d8
.word 0x40c907a9
glabel var7f1aa4dc
.word 0x376a3783
glabel var7f1aa4e0
.word 0x40c907a9
glabel var7f1aa4e4
.word 0x3a5b940b
glabel var7f1aa4e8
.word 0x36ea3783
glabel var7f1aa4ec
.word 0x40c907a9
glabel var7f1aa4f0
.word 0x39db940b
glabel var7f1aa4f4
.word 0x40c907a9
glabel var7f1aa4f8
.word 0x40c907a9
glabel var7f1aa4fc
.word 0x3ccddaca
glabel var7f1aa500
.word 0x358637bd
glabel var7f1aa504
.word 0x3c23606f
glabel var7f1aa508
.word 0x40c907a9
glabel var7f1aa50c
.word 0x40c907a9
glabel var7f1aa510
.word 0x40c907a9
glabel var7f1aa514
.word 0x404907a9
glabel var7f1aa518
.word 0x3f9c5b4b
glabel var7f1aa51c
.word 0xbf9c5b4b
glabel var7f1aa520
.word 0xc0490fdb
glabel var7f1aa524
.word 0x40490fdb
glabel var7f1aa528
.word 0x40c907a9
glabel var7f1aa52c
.word 0x40c907a9
glabel var7f1aa530
.word 0x40c907a9
glabel var7f1aa534
.word 0x40c907a9
glabel var7f1aa538
.word 0x40c907a9
glabel var7f1aa53c
.word 0x40c907a9
glabel var7f1aa540
.word 0x40c907a9
glabel var7f1aa544
.word 0x40c907a9
glabel var7f1aa548
.word 0x40c907a9
glabel var7f1aa54c
.word 0x3d80a8be
glabel var7f1aa550
.word 0x40c907a9
glabel var7f1aa554
.word 0x3f4ccccd
glabel var7f1aa558
.word 0xc0490fdb
glabel var7f1aa55c
.word 0x40490fdb
glabel var7f1aa560
.word 0x3a893c87
glabel var7f1aa564
.word 0x3a893c87
glabel var7f1aa568
.word 0x40c907a9
glabel var7f1aa56c
.word 0x40c907a9
glabel var7f1aa570
.word 0x404907a9
glabel var7f1aa574
.word 0x3f192a68
glabel var7f1aa578
.word 0x3c23606f
glabel var7f1aa57c
.word 0x3f7d70a4
glabel var7f1aa580
.word 0x38d1b717
.text
/* f078c78: 27bdff50 */ addiu $sp,$sp,-176
/* f078c7c: afbf001c */ sw $ra,0x1c($sp)
/* f078c80: afa400b0 */ sw $a0,0xb0($sp)
/* f078c84: 8c820004 */ lw $v0,0x4($a0)
/* f078c88: 44802000 */ mtc1 $zero,$f4
/* f078c8c: afa0007c */ sw $zero,0x7c($sp)
/* f078c90: afa00078 */ sw $zero,0x78($sp)
/* f078c94: afa00074 */ sw $zero,0x74($sp)
/* f078c98: afa200a8 */ sw $v0,0xa8($sp)
/* f078c9c: e7a40070 */ swc1 $f4,0x70($sp)
/* f078ca0: 8c4f000c */ lw $t7,0xc($v0)
/* f078ca4: 00001825 */ or $v1,$zero,$zero
/* f078ca8: 8fac00a8 */ lw $t4,0xa8($sp)
/* f078cac: 000fc000 */ sll $t8,$t7,0x0
/* f078cb0: 0701005a */ bgez $t8,.L0f078e1c
/* f078cb4: 00404025 */ or $t0,$v0,$zero
/* f078cb8: 000f5840 */ sll $t3,$t7,0x1
/* f078cbc: 05630008 */ bgezl $t3,.L0f078ce0
/* f078cc0: c5020060 */ lwc1 $f2,0x60($t0)
/* f078cc4: c448006c */ lwc1 $f8,0x6c($v0)
/* f078cc8: c4460078 */ lwc1 $f6,0x78($v0)
/* f078ccc: e4480060 */ swc1 $f8,0x60($v0)
/* f078cd0: c4420060 */ lwc1 $f2,0x60($v0)
/* f078cd4: 10000037 */ b .L0f078db4
/* f078cd8: e4460074 */ swc1 $f6,0x74($v0)
/* f078cdc: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078ce0:
/* f078ce0: c50a006c */ lwc1 $f10,0x6c($t0)
/* f078ce4: 460a1032 */ c.eq.s $f2,$f10
/* f078ce8: 00000000 */ nop
/* f078cec: 45000031 */ bc1f .L0f078db4
/* f078cf0: 00000000 */ nop
/* f078cf4: c5040074 */ lwc1 $f4,0x74($t0)
/* f078cf8: c5060078 */ lwc1 $f6,0x78($t0)
/* f078cfc: 46062032 */ c.eq.s $f4,$f6
/* f078d00: 00000000 */ nop
/* f078d04: 4500002b */ bc1f .L0f078db4
/* f078d08: 00000000 */ nop
/* f078d0c: 0c004b70 */ jal random
/* f078d10: afa800ac */ sw $t0,0xac($sp)
/* f078d14: 44824000 */ mtc1 $v0,$f8
/* f078d18: 8fa800ac */ lw $t0,0xac($sp)
/* f078d1c: 04410005 */ bgez $v0,.L0f078d34
/* f078d20: 468042a0 */ cvt.s.w $f10,$f8
/* f078d24: 3c014f80 */ lui $at,0x4f80
/* f078d28: 44812000 */ mtc1 $at,$f4
/* f078d2c: 00000000 */ nop
/* f078d30: 46045280 */ add.s $f10,$f10,$f4
.L0f078d34:
/* f078d34: 3c012f80 */ lui $at,0x2f80
/* f078d38: 44813000 */ mtc1 $at,$f6
/* f078d3c: 3c01421c */ lui $at,0x421c
/* f078d40: 44812000 */ mtc1 $at,$f4
/* f078d44: 46065202 */ mul.s $f8,$f10,$f6
/* f078d48: 3c013f80 */ lui $at,0x3f80
/* f078d4c: 44813000 */ mtc1 $at,$f6
/* f078d50: 3c017f1b */ lui $at,%hi(var7f1aa4c0)
/* f078d54: 46044282 */ mul.s $f10,$f8,$f4
/* f078d58: c424a4c0 */ lwc1 $f4,%lo(var7f1aa4c0)($at)
/* f078d5c: 46065200 */ add.s $f8,$f10,$f6
/* f078d60: 46044282 */ mul.s $f10,$f8,$f4
/* f078d64: 0c004b70 */ jal random
/* f078d68: e50a0074 */ swc1 $f10,0x74($t0)
/* f078d6c: 44823000 */ mtc1 $v0,$f6
/* f078d70: 3c017f1b */ lui $at,%hi(var7f1aa4c4)
/* f078d74: c430a4c4 */ lwc1 $f16,%lo(var7f1aa4c4)($at)
/* f078d78: 8fa800ac */ lw $t0,0xac($sp)
/* f078d7c: 04410005 */ bgez $v0,.L0f078d94
/* f078d80: 46803220 */ cvt.s.w $f8,$f6
/* f078d84: 3c014f80 */ lui $at,0x4f80
/* f078d88: 44812000 */ mtc1 $at,$f4
/* f078d8c: 00000000 */ nop
/* f078d90: 46044200 */ add.s $f8,$f8,$f4
.L0f078d94:
/* f078d94: 3c012f80 */ lui $at,0x2f80
/* f078d98: 44815000 */ mtc1 $at,$f10
/* f078d9c: 00000000 */ nop
/* f078da0: 460a4182 */ mul.s $f6,$f8,$f10
/* f078da4: 00000000 */ nop
/* f078da8: 46103102 */ mul.s $f4,$f6,$f16
/* f078dac: e5040060 */ swc1 $f4,0x60($t0)
/* f078db0: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078db4:
/* f078db4: 3c017f1b */ lui $at,%hi(var7f1aa4c8)
/* f078db8: c420a4c8 */ lwc1 $f0,%lo(var7f1aa4c8)($at)
/* f078dbc: 3c017f1b */ lui $at,%hi(var7f1aa4cc)
/* f078dc0: c428a4cc */ lwc1 $f8,%lo(var7f1aa4cc)($at)
/* f078dc4: 44051000 */ mfc1 $a1,$f2
/* f078dc8: 44070000 */ mfc1 $a3,$f0
/* f078dcc: 2504006c */ addiu $a0,$t0,0x6c
/* f078dd0: 25060070 */ addiu $a2,$t0,0x70
/* f078dd4: afa800ac */ sw $t0,0xac($sp)
/* f078dd8: e7a00010 */ swc1 $f0,0x10($sp)
/* f078ddc: 0fc1b6c0 */ jal applyRotation
/* f078de0: e7a80014 */ swc1 $f8,0x14($sp)
/* f078de4: 3c017f1b */ lui $at,%hi(var7f1aa4d0)
/* f078de8: c420a4d0 */ lwc1 $f0,%lo(var7f1aa4d0)($at)
/* f078dec: 8fa800ac */ lw $t0,0xac($sp)
/* f078df0: 3c017f1b */ lui $at,%hi(var7f1aa4d4)
/* f078df4: c42aa4d4 */ lwc1 $f10,%lo(var7f1aa4d4)($at)
/* f078df8: 44070000 */ mfc1 $a3,$f0
/* f078dfc: 8d050074 */ lw $a1,0x74($t0)
/* f078e00: e7a00010 */ swc1 $f0,0x10($sp)
/* f078e04: 25040078 */ addiu $a0,$t0,0x78
/* f078e08: 2506007c */ addiu $a2,$t0,0x7c
/* f078e0c: 0fc1b6c0 */ jal applyRotation
/* f078e10: e7aa0014 */ swc1 $f10,0x14($sp)
/* f078e14: 100003a0 */ b .L0f079c98
/* f078e18: 8fbf001c */ lw $ra,0x1c($sp)
.L0f078e1c:
/* f078e1c: 8d82000c */ lw $v0,0xc($t4)
/* f078e20: 00026880 */ sll $t5,$v0,0x2
/* f078e24: 05a10073 */ bgez $t5,.L0f078ff4
/* f078e28: 00027040 */ sll $t6,$v0,0x1
/* f078e2c: 05c30008 */ bgezl $t6,.L0f078e50
/* f078e30: c5020060 */ lwc1 $f2,0x60($t0)
/* f078e34: c504006c */ lwc1 $f4,0x6c($t0)
/* f078e38: c5060078 */ lwc1 $f6,0x78($t0)
/* f078e3c: e5040060 */ swc1 $f4,0x60($t0)
/* f078e40: c5020060 */ lwc1 $f2,0x60($t0)
/* f078e44: 1000001b */ b .L0f078eb4
/* f078e48: e5060074 */ swc1 $f6,0x74($t0)
/* f078e4c: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078e50:
/* f078e50: c508006c */ lwc1 $f8,0x6c($t0)
/* f078e54: 46081032 */ c.eq.s $f2,$f8
/* f078e58: 00000000 */ nop
/* f078e5c: 45000015 */ bc1f .L0f078eb4
/* f078e60: 00000000 */ nop
/* f078e64: 0c004b70 */ jal random
/* f078e68: afa800ac */ sw $t0,0xac($sp)
/* f078e6c: 44825000 */ mtc1 $v0,$f10
/* f078e70: 3c017f1b */ lui $at,%hi(var7f1aa4d8)
/* f078e74: c430a4d8 */ lwc1 $f16,%lo(var7f1aa4d8)($at)
/* f078e78: 8fa800ac */ lw $t0,0xac($sp)
/* f078e7c: 04410005 */ bgez $v0,.L0f078e94
/* f078e80: 468051a0 */ cvt.s.w $f6,$f10
/* f078e84: 3c014f80 */ lui $at,0x4f80
/* f078e88: 44812000 */ mtc1 $at,$f4
/* f078e8c: 00000000 */ nop
/* f078e90: 46043180 */ add.s $f6,$f6,$f4
.L0f078e94:
/* f078e94: 3c012f80 */ lui $at,0x2f80
/* f078e98: 44814000 */ mtc1 $at,$f8
/* f078e9c: 00000000 */ nop
/* f078ea0: 46083282 */ mul.s $f10,$f6,$f8
/* f078ea4: 00000000 */ nop
/* f078ea8: 46105102 */ mul.s $f4,$f10,$f16
/* f078eac: e5040060 */ swc1 $f4,0x60($t0)
/* f078eb0: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078eb4:
/* f078eb4: 3c017f1b */ lui $at,%hi(var7f1aa4dc)
/* f078eb8: c420a4dc */ lwc1 $f0,%lo(var7f1aa4dc)($at)
/* f078ebc: 3c017f1b */ lui $at,%hi(var7f1aa4e4)
/* f078ec0: c426a4e4 */ lwc1 $f6,%lo(var7f1aa4e4)($at)
/* f078ec4: 44051000 */ mfc1 $a1,$f2
/* f078ec8: 44070000 */ mfc1 $a3,$f0
/* f078ecc: 2504006c */ addiu $a0,$t0,0x6c
/* f078ed0: 25060070 */ addiu $a2,$t0,0x70
/* f078ed4: afa800ac */ sw $t0,0xac($sp)
/* f078ed8: e7a00010 */ swc1 $f0,0x10($sp)
/* f078edc: 0fc1b6c0 */ jal applyRotation
/* f078ee0: e7a60014 */ swc1 $f6,0x14($sp)
/* f078ee4: 3c017f1b */ lui $at,%hi(var7f1aa4e8)
/* f078ee8: c420a4e8 */ lwc1 $f0,%lo(var7f1aa4e8)($at)
/* f078eec: 8fa800ac */ lw $t0,0xac($sp)
/* f078ef0: 3c017f1b */ lui $at,%hi(var7f1aa4f0)
/* f078ef4: c428a4f0 */ lwc1 $f8,%lo(var7f1aa4f0)($at)
/* f078ef8: 44070000 */ mfc1 $a3,$f0
/* f078efc: 8d050074 */ lw $a1,0x74($t0)
/* f078f00: e7a00010 */ swc1 $f0,0x10($sp)
/* f078f04: 25040078 */ addiu $a0,$t0,0x78
/* f078f08: 2506007c */ addiu $a2,$t0,0x7c
/* f078f0c: 0fc1b6c0 */ jal applyRotation
/* f078f10: e7a80014 */ swc1 $f8,0x14($sp)
/* f078f14: 8fa800ac */ lw $t0,0xac($sp)
/* f078f18: 0c0068f4 */ jal cosf
/* f078f1c: c50c006c */ lwc1 $f12,0x6c($t0)
/* f078f20: 44807000 */ mtc1 $zero,$f14
/* f078f24: 3c017f1b */ lui $at,%hi(var7f1aa4f8)
/* f078f28: c430a4f8 */ lwc1 $f16,%lo(var7f1aa4f8)($at)
/* f078f2c: 4600703c */ c.lt.s $f14,$f0
/* f078f30: 3c09800a */ lui $t1,%hi(g_Vars)
/* f078f34: 8fa800ac */ lw $t0,0xac($sp)
/* f078f38: 3c017f1b */ lui $at,%hi(var7f1aa4fc)
/* f078f3c: 45000006 */ bc1f .L0f078f58
/* f078f40: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f078f44: 3c017f1b */ lui $at,%hi(var7f1aa500)
/* f078f48: c42aa4fc */ lwc1 $f10,%lo(var7f1aa4fc)($at)
/* f078f4c: 46005302 */ mul.s $f12,$f10,$f0
/* f078f50: 10000002 */ b .L0f078f5c
/* f078f54: 00000000 */ nop
.L0f078f58:
/* f078f58: c42ca500 */ lwc1 $f12,%lo(var7f1aa500)($at)
.L0f078f5c:
/* f078f5c: 3c017f1b */ lui $at,%hi(var7f1aa504)
/* f078f60: c424a504 */ lwc1 $f4,%lo(var7f1aa504)($at)
/* f078f64: c526004c */ lwc1 $f6,0x4c($t1)
/* f078f68: c50a0088 */ lwc1 $f10,0x88($t0)
/* f078f6c: 46062202 */ mul.s $f8,$f4,$f6
/* f078f70: 46085100 */ add.s $f4,$f10,$f8
/* f078f74: e5040088 */ swc1 $f4,0x88($t0)
/* f078f78: c5020088 */ lwc1 $f2,0x88($t0)
/* f078f7c: 4602603c */ c.lt.s $f12,$f2
/* f078f80: 00000000 */ nop
/* f078f84: 45020004 */ bc1fl .L0f078f98
/* f078f88: 4602703c */ c.lt.s $f14,$f2
/* f078f8c: e50c0088 */ swc1 $f12,0x88($t0)
/* f078f90: c5020088 */ lwc1 $f2,0x88($t0)
/* f078f94: 4602703c */ c.lt.s $f14,$f2
.L0f078f98:
/* f078f98: 3c09800a */ lui $t1,%hi(g_Vars)
/* f078f9c: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f078fa0: 4502033d */ bc1fl .L0f079c98
/* f078fa4: 8fbf001c */ lw $ra,0x1c($sp)
/* f078fa8: c52a004c */ lwc1 $f10,0x4c($t1)
/* f078fac: c506008c */ lwc1 $f6,0x8c($t0)
/* f078fb0: 460a1202 */ mul.s $f8,$f2,$f10
/* f078fb4: 46083100 */ add.s $f4,$f6,$f8
/* f078fb8: e504008c */ swc1 $f4,0x8c($t0)
/* f078fbc: c500008c */ lwc1 $f0,0x8c($t0)
/* f078fc0: 4600803e */ c.le.s $f16,$f0
/* f078fc4: 00000000 */ nop
/* f078fc8: 45020333 */ bc1fl .L0f079c98
/* f078fcc: 8fbf001c */ lw $ra,0x1c($sp)
/* f078fd0: 46100281 */ sub.s $f10,$f0,$f16
.L0f078fd4:
/* f078fd4: e50a008c */ swc1 $f10,0x8c($t0)
/* f078fd8: c500008c */ lwc1 $f0,0x8c($t0)
/* f078fdc: 4600803e */ c.le.s $f16,$f0
/* f078fe0: 00000000 */ nop
/* f078fe4: 4503fffb */ bc1tl .L0f078fd4
/* f078fe8: 46100281 */ sub.s $f10,$f0,$f16
/* f078fec: 1000032a */ b .L0f079c98
/* f078ff0: 8fbf001c */ lw $ra,0x1c($sp)
.L0f078ff4:
/* f078ff4: 910f00a9 */ lbu $t7,0xa9($t0)
/* f078ff8: 15e00004 */ bnez $t7,.L0f07900c
/* f078ffc: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079000: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079004: 10000096 */ b .L0f079260
/* f079008: afa3006c */ sw $v1,0x6c($sp)
.L0f07900c:
/* f07900c: 8d0200a4 */ lw $v0,0xa4($t0)
/* f079010: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079014: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079018: 50400004 */ beqzl $v0,.L0f07902c
/* f07901c: afa3006c */ sw $v1,0x6c($sp)
/* f079020: 1000008f */ b .L0f079260
/* f079024: afa2006c */ sw $v0,0x6c($sp)
/* f079028: afa3006c */ sw $v1,0x6c($sp)
.L0f07902c:
/* f07902c: 0fc6830c */ jal frIsInTraining
/* f079030: afa800ac */ sw $t0,0xac($sp)
/* f079034: 1040000a */ beqz $v0,.L0f079060
/* f079038: 8fa800ac */ lw $t0,0xac($sp)
/* f07903c: 8fa400b0 */ lw $a0,0xb0($sp)
/* f079040: afa800ac */ sw $t0,0xac($sp)
/* f079044: 0fc67ce7 */ jal frChooseAutogunTarget
/* f079048: 24840008 */ addiu $a0,$a0,0x8
/* f07904c: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079050: 8fa800ac */ lw $t0,0xac($sp)
/* f079054: afa2006c */ sw $v0,0x6c($sp)
/* f079058: 10000081 */ b .L0f079260
/* f07905c: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
.L0f079060:
/* f079060: 911800a8 */ lbu $t8,0xa8($t0)
/* f079064: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079068: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f07906c: 5300006b */ beqzl $t8,.L0f07921c
/* f079070: 8d2e0298 */ lw $t6,0x298($t1)
/* f079074: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079078: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f07907c: 8d390318 */ lw $t9,0x318($t1)
/* f079080: 3c05800b */ lui $a1,%hi(g_MpNumChrs)
/* f079084: 13200003 */ beqz $t9,.L0f079094
/* f079088: 00000000 */ nop
/* f07908c: 10000007 */ b .L0f0790ac
/* f079090: 8ca5c530 */ lw $a1,%lo(g_MpNumChrs)($a1)
.L0f079094:
/* f079094: 0fc07934 */ jal chrsGetNumSlots
/* f079098: afa800ac */ sw $t0,0xac($sp)
/* f07909c: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0790a0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0790a4: 8fa800ac */ lw $t0,0xac($sp)
/* f0790a8: 00402825 */ or $a1,$v0,$zero
.L0f0790ac:
/* f0790ac: 850300aa */ lh $v1,0xaa($t0)
.L0f0790b0:
/* f0790b0: 246a0001 */ addiu $t2,$v1,0x1
.L0f0790b4:
/* f0790b4: a50a00aa */ sh $t2,0xaa($t0)
/* f0790b8: 850300aa */ lh $v1,0xaa($t0)
/* f0790bc: 8fad00a8 */ lw $t5,0xa8($sp)
/* f0790c0: 3c198006 */ lui $t9,%hi(g_ChrSlots)
/* f0790c4: 0065082a */ slt $at,$v1,$a1
/* f0790c8: 14200004 */ bnez $at,.L0f0790dc
/* f0790cc: 0003c0c0 */ sll $t8,$v1,0x3
/* f0790d0: 240bffff */ addiu $t3,$zero,-1
/* f0790d4: 10000062 */ b .L0f079260
/* f0790d8: a50b00aa */ sh $t3,0xaa($t0)
.L0f0790dc:
/* f0790dc: 8d2c0318 */ lw $t4,0x318($t1)
/* f0790e0: 0303c023 */ subu $t8,$t8,$v1
/* f0790e4: 0018c080 */ sll $t8,$t8,0x2
/* f0790e8: 1180001c */ beqz $t4,.L0f07915c
/* f0790ec: 0303c023 */ subu $t8,$t8,$v1
/* f0790f0: 8da20040 */ lw $v0,0x40($t5)
/* f0790f4: 3c01f000 */ lui $at,0xf000
/* f0790f8: 0003c080 */ sll $t8,$v1,0x2
/* f0790fc: 00417024 */ and $t6,$v0,$at
/* f079100: 000e7f02 */ srl $t7,$t6,0x1c
/* f079104: 11e3ffea */ beq $t7,$v1,.L0f0790b0
/* f079108: 3c04800b */ lui $a0,%hi(g_MpAllChrPtrs)
/* f07910c: 00982021 */ addu $a0,$a0,$t8
/* f079110: 8c84c4d0 */ lw $a0,%lo(g_MpAllChrPtrs)($a0)
/* f079114: 8c99001c */ lw $t9,0x1c($a0)
/* f079118: 5320ffe6 */ beqzl $t9,.L0f0790b4
/* f07911c: 246a0001 */ addiu $t2,$v1,0x1
/* f079120: 8c8a0020 */ lw $t2,0x20($a0)
/* f079124: 3c0b800b */ lui $t3,%hi(g_MpSetup+0xc)
/* f079128: 5140ffe2 */ beqzl $t2,.L0f0790b4
/* f07912c: 246a0001 */ addiu $t2,$v1,0x1
/* f079130: 8d6bcb94 */ lw $t3,%lo(g_MpSetup+0xc)($t3)
/* f079134: 316c0002 */ andi $t4,$t3,0x2
/* f079138: 51800021 */ beqzl $t4,.L0f0791c0
/* f07913c: 8c990018 */ lw $t9,0x18($a0)
/* f079140: 908d0125 */ lbu $t5,0x125($a0)
/* f079144: 910e00a8 */ lbu $t6,0xa8($t0)
/* f079148: 01ae7824 */ and $t7,$t5,$t6
/* f07914c: 55e0001c */ bnezl $t7,.L0f0791c0
/* f079150: 8c990018 */ lw $t9,0x18($a0)
/* f079154: 1000ffd7 */ b .L0f0790b4
/* f079158: 246a0001 */ addiu $t2,$v1,0x1
.L0f07915c:
/* f07915c: 8f392988 */ lw $t9,%lo(g_ChrSlots)($t9)
/* f079160: 0018c080 */ sll $t8,$t8,0x2
/* f079164: 0303c021 */ addu $t8,$t8,$v1
/* f079168: 0018c0c0 */ sll $t8,$t8,0x3
/* f07916c: 03192021 */ addu $a0,$t8,$t9
/* f079170: 8c82001c */ lw $v0,0x1c($a0)
/* f079174: 5040ffcf */ beqzl $v0,.L0f0790b4
/* f079178: 246a0001 */ addiu $t2,$v1,0x1
/* f07917c: 908a0125 */ lbu $t2,0x125($a0)
/* f079180: 910b00a8 */ lbu $t3,0xa8($t0)
/* f079184: 014b6024 */ and $t4,$t2,$t3
/* f079188: 5180ffca */ beqzl $t4,.L0f0790b4
/* f07918c: 246a0001 */ addiu $t2,$v1,0x1
/* f079190: 8c8d0020 */ lw $t5,0x20($a0)
/* f079194: 51a00006 */ beqzl $t5,.L0f0791b0
/* f079198: 90580000 */ lbu $t8,0x0($v0)
/* f07919c: 904e0001 */ lbu $t6,0x1($v0)
/* f0791a0: 31cf0004 */ andi $t7,$t6,0x4
/* f0791a4: 55e00006 */ bnezl $t7,.L0f0791c0
/* f0791a8: 8c990018 */ lw $t9,0x18($a0)
/* f0791ac: 90580000 */ lbu $t8,0x0($v0)
.L0f0791b0:
/* f0791b0: 24010006 */ addiu $at,$zero,0x6
/* f0791b4: 5701ffbf */ bnel $t8,$at,.L0f0790b4
/* f0791b8: 246a0001 */ addiu $t2,$v1,0x1
/* f0791bc: 8c990018 */ lw $t9,0x18($a0)
.L0f0791c0:
/* f0791c0: 332a0400 */ andi $t2,$t9,0x400
/* f0791c4: 15400012 */ bnez $t2,.L0f079210
/* f0791c8: 00000000 */ nop
/* f0791cc: 8c8b0014 */ lw $t3,0x14($a0)
/* f0791d0: 000b6080 */ sll $t4,$t3,0x2
/* f0791d4: 0580000e */ bltz $t4,.L0f079210
/* f0791d8: 00000000 */ nop
/* f0791dc: afa40058 */ sw $a0,0x58($sp)
/* f0791e0: afa5005c */ sw $a1,0x5c($sp)
/* f0791e4: 0fc0e6a5 */ jal chrIsDead
/* f0791e8: afa800ac */ sw $t0,0xac($sp)
/* f0791ec: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0791f0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0791f4: 8fa40058 */ lw $a0,0x58($sp)
/* f0791f8: 8fa5005c */ lw $a1,0x5c($sp)
/* f0791fc: 14400004 */ bnez $v0,.L0f079210
/* f079200: 8fa800ac */ lw $t0,0xac($sp)
/* f079204: 8c8d001c */ lw $t5,0x1c($a0)
/* f079208: 10000015 */ b .L0f079260
/* f07920c: afad006c */ sw $t5,0x6c($sp)
.L0f079210:
/* f079210: 1000ffa7 */ b .L0f0790b0
/* f079214: 850300aa */ lh $v1,0xaa($t0)
/* f079218: 8d2e0298 */ lw $t6,0x298($t1)
.L0f07921c:
/* f07921c: 05c2000e */ bltzl $t6,.L0f079258
/* f079220: 8d2d02a0 */ lw $t5,0x2a0($t1)
/* f079224: 8d2f000c */ lw $t7,0xc($t1)
/* f079228: 31f80001 */ andi $t8,$t7,0x1
/* f07922c: 53000006 */ beqzl $t8,.L0f079248
/* f079230: 8d2b02a4 */ lw $t3,0x2a4($t1)
/* f079234: 8d3902a0 */ lw $t9,0x2a0($t1)
/* f079238: 8f2a00bc */ lw $t2,0xbc($t9)
/* f07923c: 10000008 */ b .L0f079260
/* f079240: afaa006c */ sw $t2,0x6c($sp)
/* f079244: 8d2b02a4 */ lw $t3,0x2a4($t1)
.L0f079248:
/* f079248: 8d6c00bc */ lw $t4,0xbc($t3)
/* f07924c: 10000004 */ b .L0f079260
/* f079250: afac006c */ sw $t4,0x6c($sp)
/* f079254: 8d2d02a0 */ lw $t5,0x2a0($t1)
.L0f079258:
/* f079258: 8dae00bc */ lw $t6,0xbc($t5)
/* f07925c: afae006c */ sw $t6,0x6c($sp)
.L0f079260:
/* f079260: 8fa3006c */ lw $v1,0x6c($sp)
/* f079264: 50600016 */ beqzl $v1,.L0f0792c0
/* f079268: 8fa3006c */ lw $v1,0x6c($sp)
/* f07926c: 8c6f0004 */ lw $t7,0x4($v1)
/* f079270: 55e00004 */ bnezl $t7,.L0f079284
/* f079274: 90620000 */ lbu $v0,0x0($v1)
/* f079278: 10000010 */ b .L0f0792bc
/* f07927c: afa0006c */ sw $zero,0x6c($sp)
/* f079280: 90620000 */ lbu $v0,0x0($v1)
.L0f079284:
/* f079284: 24010003 */ addiu $at,$zero,0x3
/* f079288: afa3006c */ sw $v1,0x6c($sp)
/* f07928c: 1041000b */ beq $v0,$at,.L0f0792bc
/* f079290: 24010006 */ addiu $at,$zero,0x6
/* f079294: 10410009 */ beq $v0,$at,.L0f0792bc
/* f079298: afa3006c */ sw $v1,0x6c($sp)
/* f07929c: afa3006c */ sw $v1,0x6c($sp)
/* f0792a0: 0fc6830c */ jal frIsInTraining
/* f0792a4: afa800ac */ sw $t0,0xac($sp)
/* f0792a8: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0792ac: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0792b0: 14400002 */ bnez $v0,.L0f0792bc
/* f0792b4: 8fa800ac */ lw $t0,0xac($sp)
/* f0792b8: afa0006c */ sw $zero,0x6c($sp)
.L0f0792bc:
/* f0792bc: 8fa3006c */ lw $v1,0x6c($sp)
.L0f0792c0:
/* f0792c0: c5060074 */ lwc1 $f6,0x74($t0)
/* f0792c4: c5120060 */ lwc1 $f18,0x60($t0)
/* f0792c8: 10600152 */ beqz $v1,.L0f079814
/* f0792cc: e7a600a0 */ swc1 $f6,0xa0($sp)
/* f0792d0: 8fb800b0 */ lw $t8,0xb0($sp)
/* f0792d4: c46e0008 */ lwc1 $f14,0x8($v1)
/* f0792d8: 90790000 */ lbu $t9,0x0($v1)
/* f0792dc: c70c0008 */ lwc1 $f12,0x8($t8)
/* f0792e0: c46a000c */ lwc1 $f10,0xc($v1)
/* f0792e4: c708000c */ lwc1 $f8,0xc($t8)
/* f0792e8: 460c7081 */ sub.s $f2,$f14,$f12
/* f0792ec: c46c0010 */ lwc1 $f12,0x10($v1)
/* f0792f0: c70e0010 */ lwc1 $f14,0x10($t8)
/* f0792f4: 46085001 */ sub.s $f0,$f10,$f8
/* f0792f8: 24010006 */ addiu $at,$zero,0x6
/* f0792fc: 17210005 */ bne $t9,$at,.L0f079314
/* f079300: 460e6401 */ sub.s $f16,$f12,$f14
/* f079304: 3c0141a0 */ lui $at,0x41a0
/* f079308: 44815000 */ mtc1 $at,$f10
/* f07930c: 00000000 */ nop
/* f079310: 460a0001 */ sub.s $f0,$f0,$f10
.L0f079314:
/* f079314: 46021182 */ mul.s $f6,$f2,$f2
/* f079318: afa3006c */ sw $v1,0x6c($sp)
/* f07931c: afa800ac */ sw $t0,0xac($sp)
/* f079320: 46108202 */ mul.s $f8,$f16,$f16
/* f079324: e7a00090 */ swc1 $f0,0x90($sp)
/* f079328: e7a20094 */ swc1 $f2,0x94($sp)
/* f07932c: e7b0008c */ swc1 $f16,0x8c($sp)
/* f079330: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079334: 46083300 */ add.s $f12,$f6,$f8
/* f079338: e7ac0088 */ swc1 $f12,0x88($sp)
/* f07933c: 0c012974 */ jal sqrtf
/* f079340: e7ac0024 */ swc1 $f12,0x24($sp)
/* f079344: 8faa00a8 */ lw $t2,0xa8($sp)
/* f079348: e7a00080 */ swc1 $f0,0x80($sp)
/* f07934c: 8fa800ac */ lw $t0,0xac($sp)
/* f079350: 8d4b0008 */ lw $t3,0x8($t2)
/* f079354: c7ae0024 */ lwc1 $f14,0x24($sp)
/* f079358: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f07935c: 000b6100 */ sll $t4,$t3,0x4
/* f079360: 0581000b */ bgez $t4,.L0f079390
/* f079364: 46000086 */ mov.s $f2,$f0
/* f079368: c7a00090 */ lwc1 $f0,0x90($sp)
/* f07936c: afa800ac */ sw $t0,0xac($sp)
/* f079370: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079374: 46000102 */ mul.s $f4,$f0,$f0
/* f079378: 46047300 */ add.s $f12,$f14,$f4
/* f07937c: 0c012974 */ jal sqrtf
/* f079380: e7ac0088 */ swc1 $f12,0x88($sp)
/* f079384: 8fa800ac */ lw $t0,0xac($sp)
/* f079388: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f07938c: 46000086 */ mov.s $f2,$f0
.L0f079390:
/* f079390: c7ac0088 */ lwc1 $f12,0x88($sp)
/* f079394: afa800ac */ sw $t0,0xac($sp)
/* f079398: e7a20084 */ swc1 $f2,0x84($sp)
/* f07939c: 0fc0fe84 */ jal chrGetAimLimitAngle
/* f0793a0: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0793a4: 8fa800ac */ lw $t0,0xac($sp)
/* f0793a8: e7a00070 */ swc1 $f0,0x70($sp)
/* f0793ac: c7a20084 */ lwc1 $f2,0x84($sp)
/* f0793b0: c50a0084 */ lwc1 $f10,0x84($t0)
/* f0793b4: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0793b8: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0793bc: 460a103e */ c.le.s $f2,$f10
/* f0793c0: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f0793c4: c7ac0094 */ lwc1 $f12,0x94($sp)
/* f0793c8: c7ae008c */ lwc1 $f14,0x8c($sp)
/* f0793cc: 45020112 */ bc1fl .L0f079818
/* f0793d0: 8fb8007c */ lw $t8,0x7c($sp)
/* f0793d4: afa800ac */ sw $t0,0xac($sp)
/* f0793d8: 0fc259d4 */ jal atan2f
/* f0793dc: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0793e0: e7a00050 */ swc1 $f0,0x50($sp)
/* f0793e4: c7ac0090 */ lwc1 $f12,0x90($sp)
/* f0793e8: 0fc259d4 */ jal atan2f
/* f0793ec: c7ae0080 */ lwc1 $f14,0x80($sp)
/* f0793f0: 8fae00a8 */ lw $t6,0xa8($sp)
/* f0793f4: e7a0004c */ swc1 $f0,0x4c($sp)
/* f0793f8: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0793fc: 8dc20008 */ lw $v0,0x8($t6)
/* f079400: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079404: 3c054000 */ lui $a1,0x4000
/* f079408: 00027840 */ sll $t7,$v0,0x1
/* f07940c: 8fa800ac */ lw $t0,0xac($sp)
/* f079410: 05e00004 */ bltz $t7,.L0f079424
/* f079414: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079418: 0002c080 */ sll $t8,$v0,0x2
/* f07941c: 07010006 */ bgez $t8,.L0f079438
/* f079420: c7a60050 */ lwc1 $f6,0x50($sp)
.L0f079424:
/* f079424: 24190001 */ addiu $t9,$zero,0x1
/* f079428: 3c017f1b */ lui $at,%hi(var7f1aa508)
/* f07942c: c430a508 */ lwc1 $f16,%lo(var7f1aa508)($at)
/* f079430: 10000029 */ b .L0f0794d8
/* f079434: afb9007c */ sw $t9,0x7c($sp)
.L0f079438:
/* f079438: c508006c */ lwc1 $f8,0x6c($t0)
/* f07943c: 44802000 */ mtc1 $zero,$f4
/* f079440: 3c017f1b */ lui $at,%hi(var7f1aa50c)
/* f079444: 46083301 */ sub.s $f12,$f6,$f8
/* f079448: 4604603c */ c.lt.s $f12,$f4
/* f07944c: 00000000 */ nop
/* f079450: 45000003 */ bc1f .L0f079460
/* f079454: 00000000 */ nop
/* f079458: c430a50c */ lwc1 $f16,%lo(var7f1aa50c)($at)
/* f07945c: 46106300 */ add.s $f12,$f12,$f16
.L0f079460:
/* f079460: 3c017f1b */ lui $at,%hi(var7f1aa510)
/* f079464: c430a510 */ lwc1 $f16,%lo(var7f1aa510)($at)
/* f079468: 3c017f1b */ lui $at,%hi(var7f1aa514)
/* f07946c: c42aa514 */ lwc1 $f10,%lo(var7f1aa514)($at)
/* f079470: 3c017f1b */ lui $at,%hi(var7f1aa518)
/* f079474: 460c503c */ c.lt.s $f10,$f12
/* f079478: 00000000 */ nop
/* f07947c: 45020003 */ bc1fl .L0f07948c
/* f079480: c5060078 */ lwc1 $f6,0x78($t0)
/* f079484: 46106301 */ sub.s $f12,$f12,$f16
/* f079488: c5060078 */ lwc1 $f6,0x78($t0)
.L0f07948c:
/* f07948c: 44804000 */ mtc1 $zero,$f8
/* f079490: 46060081 */ sub.s $f2,$f0,$f6
/* f079494: 4608103c */ c.lt.s $f2,$f8
/* f079498: 00000000 */ nop
/* f07949c: 45000001 */ bc1f .L0f0794a4
/* f0794a0: 00000000 */ nop
.L0f0794a4:
/* f0794a4: c424a518 */ lwc1 $f4,%lo(var7f1aa518)($at)
/* f0794a8: 3c017f1b */ lui $at,%hi(var7f1aa51c)
/* f0794ac: 4604603c */ c.lt.s $f12,$f4
/* f0794b0: 00000000 */ nop
/* f0794b4: 45020009 */ bc1fl .L0f0794dc
/* f0794b8: 8fab007c */ lw $t3,0x7c($sp)
/* f0794bc: c42aa51c */ lwc1 $f10,%lo(var7f1aa51c)($at)
/* f0794c0: 240a0001 */ addiu $t2,$zero,0x1
/* f0794c4: 460c503c */ c.lt.s $f10,$f12
/* f0794c8: 00000000 */ nop
/* f0794cc: 45020003 */ bc1fl .L0f0794dc
/* f0794d0: 8fab007c */ lw $t3,0x7c($sp)
/* f0794d4: afaa007c */ sw $t2,0x7c($sp)
.L0f0794d8:
/* f0794d8: 8fab007c */ lw $t3,0x7c($sp)
.L0f0794dc:
/* f0794dc: c7a60050 */ lwc1 $f6,0x50($sp)
/* f0794e0: 8fac006c */ lw $t4,0x6c($sp)
/* f0794e4: 516000cc */ beqzl $t3,.L0f079818
/* f0794e8: 8fb8007c */ lw $t8,0x7c($sp)
/* f0794ec: c5080060 */ lwc1 $f8,0x60($t0)
/* f0794f0: 3c017f1b */ lui $at,%hi(var7f1aa520)
/* f0794f4: c424a520 */ lwc1 $f4,%lo(var7f1aa520)($at)
/* f0794f8: 46083001 */ sub.s $f0,$f6,$f8
/* f0794fc: 24030001 */ addiu $v1,$zero,0x1
/* f079500: 3c017f1b */ lui $at,%hi(var7f1aa524)
/* f079504: 4604003c */ c.lt.s $f0,$f4
/* f079508: 00000000 */ nop
/* f07950c: 45000003 */ bc1f .L0f07951c
/* f079510: 00000000 */ nop
/* f079514: 10000007 */ b .L0f079534
/* f079518: 46100000 */ add.s $f0,$f0,$f16
.L0f07951c:
/* f07951c: c42aa524 */ lwc1 $f10,%lo(var7f1aa524)($at)
/* f079520: 4600503e */ c.le.s $f10,$f0
/* f079524: 00000000 */ nop
/* f079528: 45020003 */ bc1fl .L0f079538
/* f07952c: 91820000 */ lbu $v0,0x0($t4)
/* f079530: 46100001 */ sub.s $f0,$f0,$f16
.L0f079534:
/* f079534: 91820000 */ lbu $v0,0x0($t4)
.L0f079538:
/* f079538: 24010006 */ addiu $at,$zero,0x6
/* f07953c: 54410022 */ bnel $v0,$at,.L0f0795c8
/* f079540: 24010003 */ addiu $at,$zero,0x3
/* f079544: 8d2d0324 */ lw $t5,0x324($t1)
/* f079548: 01802025 */ or $a0,$t4,$zero
/* f07954c: 11a0001b */ beqz $t5,.L0f0795bc
/* f079550: 00000000 */ nop
/* f079554: afa30044 */ sw $v1,0x44($sp)
/* f079558: afa800ac */ sw $t0,0xac($sp)
/* f07955c: e7a00048 */ swc1 $f0,0x48($sp)
/* f079560: 0fc4a25f */ jal playermgrGetPlayerNumByProp
/* f079564: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079568: 3c09800a */ lui $t1,%hi(g_Vars)
/* f07956c: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079570: 00027080 */ sll $t6,$v0,0x2
/* f079574: 012e7821 */ addu $t7,$t1,$t6
/* f079578: 8df80064 */ lw $t8,0x64($t7)
/* f07957c: 8fa30044 */ lw $v1,0x44($sp)
/* f079580: 8fa800ac */ lw $t0,0xac($sp)
/* f079584: 8f1900d8 */ lw $t9,0xd8($t8)
/* f079588: c7a00048 */ lwc1 $f0,0x48($sp)
/* f07958c: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079590: 1720000a */ bnez $t9,.L0f0795bc
/* f079594: 8faa006c */ lw $t2,0x6c($sp)
/* f079598: 8d420004 */ lw $v0,0x4($t2)
/* f07959c: 8c4b0018 */ lw $t3,0x18($v0)
/* f0795a0: 316d0400 */ andi $t5,$t3,0x400
/* f0795a4: 15a00005 */ bnez $t5,.L0f0795bc
/* f0795a8: 00000000 */ nop
/* f0795ac: 8c4c0014 */ lw $t4,0x14($v0)
/* f0795b0: 000c7080 */ sll $t6,$t4,0x2
/* f0795b4: 05c30043 */ bgezl $t6,.L0f0796c4
/* f0795b8: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f0795bc:
/* f0795bc: 10000040 */ b .L0f0796c0
/* f0795c0: 00001825 */ or $v1,$zero,$zero
/* f0795c4: 24010003 */ addiu $at,$zero,0x3
.L0f0795c8:
/* f0795c8: 14410024 */ bne $v0,$at,.L0f07965c
/* f0795cc: 8faf006c */ lw $t7,0x6c($sp)
/* f0795d0: 8de40004 */ lw $a0,0x4($t7)
/* f0795d4: 1080001f */ beqz $a0,.L0f079654
/* f0795d8: 00000000 */ nop
/* f0795dc: 8c980018 */ lw $t8,0x18($a0)
/* f0795e0: 33190400 */ andi $t9,$t8,0x400
/* f0795e4: 1720001b */ bnez $t9,.L0f079654
/* f0795e8: 00000000 */ nop
/* f0795ec: 8c820014 */ lw $v0,0x14($a0)
/* f0795f0: 00025080 */ sll $t2,$v0,0x2
/* f0795f4: 05400017 */ bltz $t2,.L0f079654
/* f0795f8: 00455824 */ and $t3,$v0,$a1
/* f0795fc: 15600015 */ bnez $t3,.L0f079654
/* f079600: 00000000 */ nop
/* f079604: afa30044 */ sw $v1,0x44($sp)
/* f079608: afa40040 */ sw $a0,0x40($sp)
/* f07960c: afa800ac */ sw $t0,0xac($sp)
/* f079610: e7a00048 */ swc1 $f0,0x48($sp)
/* f079614: 0fc0e6a5 */ jal chrIsDead
/* f079618: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f07961c: 8fa30044 */ lw $v1,0x44($sp)
/* f079620: 8fa40040 */ lw $a0,0x40($sp)
/* f079624: 8fa800ac */ lw $t0,0xac($sp)
/* f079628: c7a00048 */ lwc1 $f0,0x48($sp)
/* f07962c: 14400009 */ bnez $v0,.L0f079654
/* f079630: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079634: 80820007 */ lb $v0,0x7($a0)
/* f079638: 24010020 */ addiu $at,$zero,0x20
/* f07963c: 10410005 */ beq $v0,$at,.L0f079654
/* f079640: 2401001e */ addiu $at,$zero,0x1e
/* f079644: 10410003 */ beq $v0,$at,.L0f079654
/* f079648: 2401001f */ addiu $at,$zero,0x1f
/* f07964c: 5441001d */ bnel $v0,$at,.L0f0796c4
/* f079650: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f079654:
/* f079654: 1000001a */ b .L0f0796c0
/* f079658: 00001825 */ or $v1,$zero,$zero
.L0f07965c:
/* f07965c: 24010001 */ addiu $at,$zero,0x1
/* f079660: 14410017 */ bne $v0,$at,.L0f0796c0
/* f079664: 8fad006c */ lw $t5,0x6c($sp)
/* f079668: 8da20004 */ lw $v0,0x4($t5)
/* f07966c: 50400014 */ beqzl $v0,.L0f0796c0
/* f079670: 00001825 */ or $v1,$zero,$zero
/* f079674: 844c0004 */ lh $t4,0x4($v0)
/* f079678: 2401014c */ addiu $at,$zero,0x14c
/* f07967c: 01a02025 */ or $a0,$t5,$zero
/* f079680: 1581000e */ bne $t4,$at,.L0f0796bc
/* f079684: 8fa500b0 */ lw $a1,0xb0($sp)
/* f079688: 24a50008 */ addiu $a1,$a1,0x8
/* f07968c: afa30044 */ sw $v1,0x44($sp)
/* f079690: afa800ac */ sw $t0,0xac($sp)
/* f079694: e7a00048 */ swc1 $f0,0x48($sp)
/* f079698: 0fc67cbb */ jal frIsTargetFacingPos
/* f07969c: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0796a0: 8fa30044 */ lw $v1,0x44($sp)
/* f0796a4: 8fa800ac */ lw $t0,0xac($sp)
/* f0796a8: c7a00048 */ lwc1 $f0,0x48($sp)
/* f0796ac: 14400004 */ bnez $v0,.L0f0796c0
/* f0796b0: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f0796b4: 10000002 */ b .L0f0796c0
/* f0796b8: 00001825 */ or $v1,$zero,$zero
.L0f0796bc:
/* f0796bc: 00001825 */ or $v1,$zero,$zero
.L0f0796c0:
/* f0796c0: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f0796c4:
/* f0796c4: 00002825 */ or $a1,$zero,$zero
/* f0796c8: afa30044 */ sw $v1,0x44($sp)
/* f0796cc: afa800ac */ sw $t0,0xac($sp)
/* f0796d0: e7a00048 */ swc1 $f0,0x48($sp)
/* f0796d4: 0fc1905e */ jal propSetPerimEnabled
/* f0796d8: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0796dc: 8fa4006c */ lw $a0,0x6c($sp)
/* f0796e0: 0fc1905e */ jal propSetPerimEnabled
/* f0796e4: 00002825 */ or $a1,$zero,$zero
/* f0796e8: 8fa800ac */ lw $t0,0xac($sp)
/* f0796ec: c7a00048 */ lwc1 $f0,0x48($sp)
/* f0796f0: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0796f4: c5060064 */ lwc1 $f6,0x64($t0)
/* f0796f8: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0796fc: 8fa30044 */ lw $v1,0x44($sp)
/* f079700: 4606003e */ c.le.s $f0,$f6
/* f079704: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079708: 4502002a */ bc1fl .L0f0797b4
/* f07970c: 8d020090 */ lw $v0,0x90($t0)
/* f079710: c5080068 */ lwc1 $f8,0x68($t0)
/* f079714: 4600403e */ c.le.s $f8,$f0
/* f079718: 00000000 */ nop
/* f07971c: 45020025 */ bc1fl .L0f0797b4
/* f079720: 8d020090 */ lw $v0,0x90($t0)
/* f079724: 10600022 */ beqz $v1,.L0f0797b0
/* f079728: 8fa200b0 */ lw $v0,0xb0($sp)
/* f07972c: 8fae006c */ lw $t6,0x6c($sp)
/* f079730: 240f003f */ addiu $t7,$zero,0x3f
/* f079734: 24180008 */ addiu $t8,$zero,0x8
/* f079738: afb80014 */ sw $t8,0x14($sp)
/* f07973c: afaf0010 */ sw $t7,0x10($sp)
/* f079740: 24440008 */ addiu $a0,$v0,0x8
/* f079744: 24450028 */ addiu $a1,$v0,0x28
/* f079748: afa800ac */ sw $t0,0xac($sp)
/* f07974c: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079750: 25c60008 */ addiu $a2,$t6,0x8
/* f079754: 0c00b70f */ jal cdHasLineOfSight
/* f079758: 25c70028 */ addiu $a3,$t6,0x28
/* f07975c: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079760: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079764: 8fa800ac */ lw $t0,0xac($sp)
/* f079768: 10400011 */ beqz $v0,.L0f0797b0
/* f07976c: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079770: 8fa200a8 */ lw $v0,0xa8($sp)
/* f079774: 3c012000 */ lui $at,0x2000
/* f079778: 240b0001 */ addiu $t3,$zero,0x1
/* f07977c: 8c590008 */ lw $t9,0x8($v0)
/* f079780: 03215025 */ or $t2,$t9,$at
/* f079784: ac4a0008 */ sw $t2,0x8($v0)
/* f079788: c7a4004c */ lwc1 $f4,0x4c($sp)
/* f07978c: afab0074 */ sw $t3,0x74($sp)
/* f079790: c7b20050 */ lwc1 $f18,0x50($sp)
/* f079794: e7a400a0 */ swc1 $f4,0xa0($sp)
/* f079798: 8d0c00a4 */ lw $t4,0xa4($t0)
/* f07979c: 8fad006c */ lw $t5,0x6c($sp)
/* f0797a0: 55800011 */ bnezl $t4,.L0f0797e8
/* f0797a4: 8fa400b0 */ lw $a0,0xb0($sp)
/* f0797a8: 1000000e */ b .L0f0797e4
/* f0797ac: ad0d00a4 */ sw $t5,0xa4($t0)
.L0f0797b0:
/* f0797b0: 8d020090 */ lw $v0,0x90($t0)
.L0f0797b4:
/* f0797b4: 0442000b */ bltzl $v0,.L0f0797e4
/* f0797b8: afa0007c */ sw $zero,0x7c($sp)
/* f0797bc: 8d2e0008 */ lw $t6,0x8($t1)
/* f0797c0: 25cfff88 */ addiu $t7,$t6,-100
/* f0797c4: 01e2082a */ slt $at,$t7,$v0
/* f0797c8: 50200006 */ beqzl $at,.L0f0797e4
/* f0797cc: afa0007c */ sw $zero,0x7c($sp)
/* f0797d0: c50a0078 */ lwc1 $f10,0x78($t0)
/* f0797d4: c512006c */ lwc1 $f18,0x6c($t0)
/* f0797d8: 10000002 */ b .L0f0797e4
/* f0797dc: e7aa00a0 */ swc1 $f10,0xa0($sp)
/* f0797e0: afa0007c */ sw $zero,0x7c($sp)
.L0f0797e4:
/* f0797e4: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f0797e8:
/* f0797e8: 24050001 */ addiu $a1,$zero,0x1
/* f0797ec: afa800ac */ sw $t0,0xac($sp)
/* f0797f0: 0fc1905e */ jal propSetPerimEnabled
/* f0797f4: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0797f8: 8fa4006c */ lw $a0,0x6c($sp)
/* f0797fc: 0fc1905e */ jal propSetPerimEnabled
/* f079800: 24050001 */ addiu $a1,$zero,0x1
/* f079804: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079808: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f07980c: 8fa800ac */ lw $t0,0xac($sp)
/* f079810: c7b200a4 */ lwc1 $f18,0xa4($sp)
.L0f079814:
/* f079814: 8fb8007c */ lw $t8,0x7c($sp)
.L0f079818:
/* f079818: 3c017f1b */ lui $at,%hi(var7f1aa548)
/* f07981c: c430a548 */ lwc1 $f16,%lo(var7f1aa548)($at)
/* f079820: 57000003 */ bnezl $t8,.L0f079830
/* f079824: 8119005e */ lb $t9,0x5e($t0)
/* f079828: ad0000a4 */ sw $zero,0xa4($t0)
/* f07982c: 8119005e */ lb $t9,0x5e($t0)
.L0f079830:
/* f079830: 53200024 */ beqzl $t9,.L0f0798c4
/* f079834: c5020060 */ lwc1 $f2,0x60($t0)
/* f079838: 8d2a0008 */ lw $t2,0x8($t1)
/* f07983c: 24010078 */ addiu $at,$zero,0x64
/* f079840: afa800ac */ sw $t0,0xac($sp)
/* f079844: 0141001a */ div $zero,$t2,$at
/* f079848: 00005810 */ mfhi $t3
/* f07984c: 448b3000 */ mtc1 $t3,$f6
/* f079850: 3c017f1b */ lui $at,%hi(var7f1aa54c)
/* f079854: c424a54c */ lwc1 $f4,%lo(var7f1aa54c)($at)
/* f079858: 46803220 */ cvt.s.w $f8,$f6
/* f07985c: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079860: 46044302 */ mul.s $f12,$f8,$f4
/* f079864: 0c0068f7 */ jal sinf
/* f079868: 00000000 */ nop
/* f07986c: 3c017f1b */ lui $at,%hi(var7f1aa550)
/* f079870: c430a550 */ lwc1 $f16,%lo(var7f1aa550)($at)
/* f079874: 3c017f1b */ lui $at,%hi(var7f1aa554)
/* f079878: c426a554 */ lwc1 $f6,%lo(var7f1aa554)($at)
/* f07987c: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f079880: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079884: 8fa800ac */ lw $t0,0xac($sp)
/* f079888: 46065202 */ mul.s $f8,$f10,$f6
/* f07988c: 44805000 */ mtc1 $zero,$f10
/* f079890: 46004102 */ mul.s $f4,$f8,$f0
/* f079894: 46049480 */ add.s $f18,$f18,$f4
/* f079898: 460a903c */ c.lt.s $f18,$f10
/* f07989c: 00000000 */ nop
/* f0798a0: 45020003 */ bc1fl .L0f0798b0
/* f0798a4: 4612803e */ c.le.s $f16,$f18
/* f0798a8: 46109480 */ add.s $f18,$f18,$f16
/* f0798ac: 4612803e */ c.le.s $f16,$f18
.L0f0798b0:
/* f0798b0: 00000000 */ nop
/* f0798b4: 45020003 */ bc1fl .L0f0798c4
/* f0798b8: c5020060 */ lwc1 $f2,0x60($t0)
/* f0798bc: 46109481 */ sub.s $f18,$f18,$f16
/* f0798c0: c5020060 */ lwc1 $f2,0x60($t0)
.L0f0798c4:
/* f0798c4: 3c017f1b */ lui $at,%hi(var7f1aa558)
/* f0798c8: c426a558 */ lwc1 $f6,%lo(var7f1aa558)($at)
/* f0798cc: 46029001 */ sub.s $f0,$f18,$f2
/* f0798d0: 44802000 */ mtc1 $zero,$f4
/* f0798d4: 2504006c */ addiu $a0,$t0,0x6c
/* f0798d8: 4606003c */ c.lt.s $f0,$f6
/* f0798dc: 00000000 */ nop
/* f0798e0: 45000003 */ bc1f .L0f0798f0
/* f0798e4: 00000000 */ nop
/* f0798e8: 10000008 */ b .L0f07990c
/* f0798ec: 46100000 */ add.s $f0,$f0,$f16
.L0f0798f0:
/* f0798f0: 3c017f1b */ lui $at,%hi(var7f1aa55c)
/* f0798f4: c428a55c */ lwc1 $f8,%lo(var7f1aa55c)($at)
/* f0798f8: 4600403e */ c.le.s $f8,$f0
/* f0798fc: 00000000 */ nop
/* f079900: 45020003 */ bc1fl .L0f079910
/* f079904: c50c0064 */ lwc1 $f12,0x64($t0)
/* f079908: 46100001 */ sub.s $f0,$f0,$f16
.L0f07990c:
/* f07990c: c50c0064 */ lwc1 $f12,0x64($t0)
.L0f079910:
/* f079910: 3c017f1b */ lui $at,%hi(var7f1aa560)
/* f079914: 4600603c */ c.lt.s $f12,$f0
/* f079918: 00000000 */ nop
/* f07991c: 45020004 */ bc1fl .L0f079930
/* f079920: c50c0068 */ lwc1 $f12,0x68($t0)
/* f079924: 10000007 */ b .L0f079944
/* f079928: 460c1480 */ add.s $f18,$f2,$f12
/* f07992c: c50c0068 */ lwc1 $f12,0x68($t0)
.L0f079930:
/* f079930: 460c003c */ c.lt.s $f0,$f12
/* f079934: 00000000 */ nop
/* f079938: 45020003 */ bc1fl .L0f079948
/* f07993c: 4604903c */ c.lt.s $f18,$f4
/* f079940: 460c1480 */ add.s $f18,$f2,$f12
.L0f079944:
/* f079944: 4604903c */ c.lt.s $f18,$f4
.L0f079948:
/* f079948: 00000000 */ nop
/* f07994c: 45020003 */ bc1fl .L0f07995c
/* f079950: 4612803e */ c.le.s $f16,$f18
/* f079954: 46109480 */ add.s $f18,$f18,$f16
/* f079958: 4612803e */ c.le.s $f16,$f18
.L0f07995c:
/* f07995c: 00000000 */ nop
/* f079960: 45000002 */ bc1f .L0f07996c
/* f079964: 00000000 */ nop
/* f079968: 46109481 */ sub.s $f18,$f18,$f16
.L0f07996c:
/* f07996c: c420a560 */ lwc1 $f0,%lo(var7f1aa560)($at)
/* f079970: 44059000 */ mfc1 $a1,$f18
/* f079974: 25060070 */ addiu $a2,$t0,0x70
/* f079978: e7a00010 */ swc1 $f0,0x10($sp)
/* f07997c: c50a0080 */ lwc1 $f10,0x80($t0)
/* f079980: 44070000 */ mfc1 $a3,$f0
/* f079984: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079988: afa800ac */ sw $t0,0xac($sp)
/* f07998c: 0fc1b6c0 */ jal applyRotation
/* f079990: e7aa0014 */ swc1 $f10,0x14($sp)
/* f079994: 3c017f1b */ lui $at,%hi(var7f1aa564)
/* f079998: c420a564 */ lwc1 $f0,%lo(var7f1aa564)($at)
/* f07999c: 8fa800ac */ lw $t0,0xac($sp)
/* f0799a0: 8fa500a0 */ lw $a1,0xa0($sp)
/* f0799a4: e7a00010 */ swc1 $f0,0x10($sp)
/* f0799a8: c5060080 */ lwc1 $f6,0x80($t0)
/* f0799ac: 44070000 */ mfc1 $a3,$f0
/* f0799b0: 25040078 */ addiu $a0,$t0,0x78
/* f0799b4: 2506007c */ addiu $a2,$t0,0x7c
/* f0799b8: 0fc1b6c0 */ jal applyRotation
/* f0799bc: e7a60014 */ swc1 $f6,0x14($sp)
/* f0799c0: 8fa800ac */ lw $t0,0xac($sp)
/* f0799c4: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f0799c8: 44802000 */ mtc1 $zero,$f4
/* f0799cc: c508006c */ lwc1 $f8,0x6c($t0)
/* f0799d0: 3c017f1b */ lui $at,%hi(var7f1aa56c)
/* f0799d4: c430a56c */ lwc1 $f16,%lo(var7f1aa56c)($at)
/* f0799d8: 46089301 */ sub.s $f12,$f18,$f8
/* f0799dc: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0799e0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0799e4: 3c017f1b */ lui $at,%hi(var7f1aa570)
/* f0799e8: 4604603c */ c.lt.s $f12,$f4
/* f0799ec: c7aa00a0 */ lwc1 $f10,0xa0($sp)
/* f0799f0: 45000002 */ bc1f .L0f0799fc
/* f0799f4: 00000000 */ nop
/* f0799f8: 46106300 */ add.s $f12,$f12,$f16
.L0f0799fc:
/* f0799fc: c420a570 */ lwc1 $f0,%lo(var7f1aa570)($at)
/* f079a00: 460c003c */ c.lt.s $f0,$f12
/* f079a04: 00000000 */ nop
/* f079a08: 45020003 */ bc1fl .L0f079a18
/* f079a0c: c5060078 */ lwc1 $f6,0x78($t0)
/* f079a10: 46106301 */ sub.s $f12,$f12,$f16
/* f079a14: c5060078 */ lwc1 $f6,0x78($t0)
.L0f079a18:
/* f079a18: 44804000 */ mtc1 $zero,$f8
/* f079a1c: 46065081 */ sub.s $f2,$f10,$f6
/* f079a20: 4608103c */ c.lt.s $f2,$f8
/* f079a24: 00000000 */ nop
/* f079a28: 45020003 */ bc1fl .L0f079a38
/* f079a2c: 4602003c */ c.lt.s $f0,$f2
/* f079a30: 46101080 */ add.s $f2,$f2,$f16
/* f079a34: 4602003c */ c.lt.s $f0,$f2
.L0f079a38:
/* f079a38: 00000000 */ nop
/* f079a3c: 45020003 */ bc1fl .L0f079a4c
/* f079a40: a100005e */ sb $zero,0x5e($t0)
/* f079a44: 46101081 */ sub.s $f2,$f2,$f16
/* f079a48: a100005e */ sb $zero,0x5e($t0)
.L0f079a4c:
/* f079a4c: 8fac007c */ lw $t4,0x7c($sp)
/* f079a50: c7a40070 */ lwc1 $f4,0x70($sp)
/* f079a54: 51800045 */ beqzl $t4,.L0f079b6c
/* f079a58: 8faa0078 */ lw $t2,0x78($sp)
/* f079a5c: 4604603c */ c.lt.s $f12,$f4
/* f079a60: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f079a64: 4502001a */ bc1fl .L0f079ad0
/* f079a68: 460a5000 */ add.s $f0,$f10,$f10
/* f079a6c: 46002007 */ neg.s $f0,$f4
/* f079a70: 460c003c */ c.lt.s $f0,$f12
/* f079a74: 00000000 */ nop
/* f079a78: 45020015 */ bc1fl .L0f079ad0
/* f079a7c: 460a5000 */ add.s $f0,$f10,$f10
/* f079a80: 4604103c */ c.lt.s $f2,$f4
/* f079a84: 00000000 */ nop
/* f079a88: 45020011 */ bc1fl .L0f079ad0
/* f079a8c: 460a5000 */ add.s $f0,$f10,$f10
/* f079a90: 4602003c */ c.lt.s $f0,$f2
/* f079a94: 240d0001 */ addiu $t5,$zero,0x1
/* f079a98: 4502000d */ bc1fl .L0f079ad0
/* f079a9c: 460a5000 */ add.s $f0,$f10,$f10
/* f079aa0: a10d005e */ sb $t5,0x5e($t0)
/* f079aa4: 8faf0074 */ lw $t7,0x74($sp)
/* f079aa8: 240e0001 */ addiu $t6,$zero,0x1
/* f079aac: afae0078 */ sw $t6,0x78($sp)
/* f079ab0: 51e0002e */ beqzl $t7,.L0f079b6c
/* f079ab4: 8faa0078 */ lw $t2,0x78($sp)
/* f079ab8: 8d380008 */ lw $t8,0x8($t1)
/* f079abc: ad180090 */ sw $t8,0x90($t0)
/* f079ac0: 8d390008 */ lw $t9,0x8($t1)
/* f079ac4: 10000028 */ b .L0f079b68
/* f079ac8: ad190094 */ sw $t9,0x94($t0)
/* f079acc: 460a5000 */ add.s $f0,$f10,$f10
.L0f079ad0:
/* f079ad0: 4600603c */ c.lt.s $f12,$f0
/* f079ad4: 00000000 */ nop
/* f079ad8: 45020018 */ bc1fl .L0f079b3c
/* f079adc: 8d020090 */ lw $v0,0x90($t0)
/* f079ae0: 46000387 */ neg.s $f14,$f0
/* f079ae4: 460c703c */ c.lt.s $f14,$f12
/* f079ae8: 00000000 */ nop
/* f079aec: 45020013 */ bc1fl .L0f079b3c
/* f079af0: 8d020090 */ lw $v0,0x90($t0)
/* f079af4: 4600103c */ c.lt.s $f2,$f0
/* f079af8: 00000000 */ nop
/* f079afc: 4502000f */ bc1fl .L0f079b3c
/* f079b00: 8d020090 */ lw $v0,0x90($t0)
/* f079b04: 4602703c */ c.lt.s $f14,$f2
/* f079b08: 240a0001 */ addiu $t2,$zero,0x1
/* f079b0c: 4502000b */ bc1fl .L0f079b3c
/* f079b10: 8d020090 */ lw $v0,0x90($t0)
/* f079b14: a10a005e */ sb $t2,0x5e($t0)
/* f079b18: 8fac0074 */ lw $t4,0x74($sp)
/* f079b1c: 240b0001 */ addiu $t3,$zero,0x1
/* f079b20: afab0078 */ sw $t3,0x78($sp)
/* f079b24: 51800011 */ beqzl $t4,.L0f079b6c
/* f079b28: 8faa0078 */ lw $t2,0x78($sp)
/* f079b2c: 8d2d0008 */ lw $t5,0x8($t1)
/* f079b30: 1000000d */ b .L0f079b68
/* f079b34: ad0d0090 */ sw $t5,0x90($t0)
/* f079b38: 8d020090 */ lw $v0,0x90($t0)
.L0f079b3c:
/* f079b3c: 0442000b */ bltzl $v0,.L0f079b6c
/* f079b40: 8faa0078 */ lw $t2,0x78($sp)
/* f079b44: 8d2e0008 */ lw $t6,0x8($t1)
/* f079b48: 24180001 */ addiu $t8,$zero,0x1
/* f079b4c: 24190001 */ addiu $t9,$zero,0x1
/* f079b50: 25cfff88 */ addiu $t7,$t6,-100
/* f079b54: 01e2082a */ slt $at,$t7,$v0
/* f079b58: 50200004 */ beqzl $at,.L0f079b6c
/* f079b5c: 8faa0078 */ lw $t2,0x78($sp)
/* f079b60: a118005e */ sb $t8,0x5e($t0)
/* f079b64: afb90078 */ sw $t9,0x78($sp)
.L0f079b68:
/* f079b68: 8faa0078 */ lw $t2,0x78($sp)
.L0f079b6c:
/* f079b6c: 3c017f1b */ lui $at,%hi(var7f1aa574)
/* f079b70: 51400012 */ beqzl $t2,.L0f079bbc
/* f079b74: c5020088 */ lwc1 $f2,0x88($t0)
/* f079b78: c420a574 */ lwc1 $f0,%lo(var7f1aa574)($at)
/* f079b7c: 3c017f1b */ lui $at,%hi(var7f1aa578)
/* f079b80: c426a578 */ lwc1 $f6,%lo(var7f1aa578)($at)
/* f079b84: c528004c */ lwc1 $f8,0x4c($t1)
/* f079b88: c50a0088 */ lwc1 $f10,0x88($t0)
/* f079b8c: 46083102 */ mul.s $f4,$f6,$f8
/* f079b90: 46045180 */ add.s $f6,$f10,$f4
/* f079b94: e5060088 */ swc1 $f6,0x88($t0)
/* f079b98: c5020088 */ lwc1 $f2,0x88($t0)
/* f079b9c: 4602003c */ c.lt.s $f0,$f2
/* f079ba0: 00000000 */ nop
/* f079ba4: 45020025 */ bc1fl .L0f079c3c
/* f079ba8: 44805000 */ mtc1 $zero,$f10
/* f079bac: e5000088 */ swc1 $f0,0x88($t0)
/* f079bb0: 10000021 */ b .L0f079c38
/* f079bb4: c5020088 */ lwc1 $f2,0x88($t0)
/* f079bb8: c5020088 */ lwc1 $f2,0x88($t0)
.L0f079bbc:
/* f079bbc: 44804000 */ mtc1 $zero,$f8
/* f079bc0: 00000000 */ nop
/* f079bc4: 4602403c */ c.lt.s $f8,$f2
/* f079bc8: 00000000 */ nop
/* f079bcc: 4502001b */ bc1fl .L0f079c3c
/* f079bd0: 44805000 */ mtc1 $zero,$f10
/* f079bd4: 8d2b0038 */ lw $t3,0x38($t1)
/* f079bd8: 00001025 */ or $v0,$zero,$zero
/* f079bdc: 3c017f1b */ lui $at,%hi(var7f1aa57c)
/* f079be0: 1960000b */ blez $t3,.L0f079c10
/* f079be4: 00000000 */ nop
/* f079be8: c420a57c */ lwc1 $f0,%lo(var7f1aa57c)($at)
/* f079bec: c50a0088 */ lwc1 $f10,0x88($t0)
.L0f079bf0:
/* f079bf0: 24420001 */ addiu $v0,$v0,0x1
/* f079bf4: 46005102 */ mul.s $f4,$f10,$f0
/* f079bf8: e5040088 */ swc1 $f4,0x88($t0)
/* f079bfc: 8d2c0038 */ lw $t4,0x38($t1)
/* f079c00: 004c082a */ slt $at,$v0,$t4
/* f079c04: 5420fffa */ bnezl $at,.L0f079bf0
/* f079c08: c50a0088 */ lwc1 $f10,0x88($t0)
/* f079c0c: c5020088 */ lwc1 $f2,0x88($t0)
.L0f079c10:
/* f079c10: 3c017f1b */ lui $at,%hi(var7f1aa580)
/* f079c14: c426a580 */ lwc1 $f6,%lo(var7f1aa580)($at)
/* f079c18: 4606103e */ c.le.s $f2,$f6
/* f079c1c: 00000000 */ nop
/* f079c20: 45020006 */ bc1fl .L0f079c3c
/* f079c24: 44805000 */ mtc1 $zero,$f10
/* f079c28: 44804000 */ mtc1 $zero,$f8
/* f079c2c: 00000000 */ nop
/* f079c30: e5080088 */ swc1 $f8,0x88($t0)
/* f079c34: c5020088 */ lwc1 $f2,0x88($t0)
.L0f079c38:
/* f079c38: 44805000 */ mtc1 $zero,$f10
.L0f079c3c:
/* f079c3c: 00000000 */ nop
/* f079c40: 4602503c */ c.lt.s $f10,$f2
/* f079c44: 00000000 */ nop
/* f079c48: 45020013 */ bc1fl .L0f079c98
/* f079c4c: 8fbf001c */ lw $ra,0x1c($sp)
/* f079c50: c526004c */ lwc1 $f6,0x4c($t1)
/* f079c54: c504008c */ lwc1 $f4,0x8c($t0)
/* f079c58: 46061202 */ mul.s $f8,$f2,$f6
/* f079c5c: 46082280 */ add.s $f10,$f4,$f8
/* f079c60: e50a008c */ swc1 $f10,0x8c($t0)
/* f079c64: c500008c */ lwc1 $f0,0x8c($t0)
/* f079c68: 4600803e */ c.le.s $f16,$f0
/* f079c6c: 00000000 */ nop
/* f079c70: 45020009 */ bc1fl .L0f079c98
/* f079c74: 8fbf001c */ lw $ra,0x1c($sp)
/* f079c78: 46100181 */ sub.s $f6,$f0,$f16
.L0f079c7c:
/* f079c7c: e506008c */ swc1 $f6,0x8c($t0)
/* f079c80: c500008c */ lwc1 $f0,0x8c($t0)
/* f079c84: 4600803e */ c.le.s $f16,$f0
/* f079c88: 00000000 */ nop
/* f079c8c: 4503fffb */ bc1tl .L0f079c7c
/* f079c90: 46100181 */ sub.s $f6,$f0,$f16
/* f079c94: 8fbf001c */ lw $ra,0x1c($sp)
.L0f079c98:
/* f079c98: 27bd00b0 */ addiu $sp,$sp,0xb0
/* f079c9c: 03e00008 */ jr $ra
/* f079ca0: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel autogunTick
.late_rodata
glabel var7f1aa4c0
.word 0x3c8ef461
glabel var7f1aa4c4
.word 0x40c907a9
glabel var7f1aa4c8
.word 0x37432e42
glabel var7f1aa4cc
.word 0x3a36fb5e
glabel var7f1aa4d0
.word 0x36c32e42
glabel var7f1aa4d4
.word 0x39b6fb5e
glabel var7f1aa4d8
.word 0x40c907a9
glabel var7f1aa4dc
.word 0x37432e42
glabel var7f1aa4e0
.word 0x40c907a9
glabel var7f1aa4e4
.word 0x3a36fb5e
glabel var7f1aa4e8
.word 0x36c32e42
glabel var7f1aa4ec
.word 0x40c907a9
glabel var7f1aa4f0
.word 0x39b6fb5e
glabel var7f1aa4f4
.word 0x40c907a9
glabel var7f1aa4f8
.word 0x40c907a9
glabel var7f1aa4fc
.word 0x3ccddaca
glabel var7f1aa500
.word 0x358637bd
glabel var7f1aa504
.word 0x3c23606f
glabel var7f1aa508
.word 0x40c907a9
glabel var7f1aa50c
.word 0x40c907a9
glabel var7f1aa510
.word 0x40c907a9
glabel var7f1aa514
.word 0x404907a9
glabel var7f1aa518
.word 0x3f9c5b4b
glabel var7f1aa51c
.word 0xbf9c5b4b
glabel var7f1aa520
.word 0xc0490fdb
glabel var7f1aa524
.word 0x40490fdb
glabel var7f1aa528
.word 0x40c907a9
glabel var7f1aa52c
.word 0x40c907a9
glabel var7f1aa530
.word 0x40c907a9
glabel var7f1aa534
.word 0x40c907a9
glabel var7f1aa538
.word 0x40c907a9
glabel var7f1aa53c
.word 0x40c907a9
glabel var7f1aa540
.word 0x40c907a9
glabel var7f1aa544
.word 0x40c907a9
glabel var7f1aa548
.word 0x40c907a9
glabel var7f1aa54c
.word 0x3d566e92
glabel var7f1aa550
.word 0x40c907a9
glabel var7f1aa554
.word 0x3f4ccccd
glabel var7f1aa558
.word 0xc0490fdb
glabel var7f1aa55c
.word 0x40490fdb
glabel var7f1aa560
.word 0x3a64ba35
glabel var7f1aa564
.word 0x3a64ba35
glabel var7f1aa568
.word 0x40c907a9
glabel var7f1aa56c
.word 0x40c907a9
glabel var7f1aa570
.word 0x404907a9
glabel var7f1aa574
.word 0x3f192a68
glabel var7f1aa578
.word 0x3c23606f
glabel var7f1aa57c
.word 0x3f7d70a4
glabel var7f1aa580
.word 0x38d1b717
.text
/* f078c78: 27bdff50 */ addiu $sp,$sp,-176
/* f078c7c: afbf001c */ sw $ra,0x1c($sp)
/* f078c80: afa400b0 */ sw $a0,0xb0($sp)
/* f078c84: 8c820004 */ lw $v0,0x4($a0)
/* f078c88: 44802000 */ mtc1 $zero,$f4
/* f078c8c: afa0007c */ sw $zero,0x7c($sp)
/* f078c90: afa00078 */ sw $zero,0x78($sp)
/* f078c94: afa00074 */ sw $zero,0x74($sp)
/* f078c98: afa200a8 */ sw $v0,0xa8($sp)
/* f078c9c: e7a40070 */ swc1 $f4,0x70($sp)
/* f078ca0: 8c4f000c */ lw $t7,0xc($v0)
/* f078ca4: 00001825 */ or $v1,$zero,$zero
/* f078ca8: 8fac00a8 */ lw $t4,0xa8($sp)
/* f078cac: 000fc000 */ sll $t8,$t7,0x0
/* f078cb0: 0701005a */ bgez $t8,.L0f078e1c
/* f078cb4: 00404025 */ or $t0,$v0,$zero
/* f078cb8: 000f5840 */ sll $t3,$t7,0x1
/* f078cbc: 05630008 */ bgezl $t3,.L0f078ce0
/* f078cc0: c5020060 */ lwc1 $f2,0x60($t0)
/* f078cc4: c448006c */ lwc1 $f8,0x6c($v0)
/* f078cc8: c4460078 */ lwc1 $f6,0x78($v0)
/* f078ccc: e4480060 */ swc1 $f8,0x60($v0)
/* f078cd0: c4420060 */ lwc1 $f2,0x60($v0)
/* f078cd4: 10000037 */ b .L0f078db4
/* f078cd8: e4460074 */ swc1 $f6,0x74($v0)
/* f078cdc: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078ce0:
/* f078ce0: c50a006c */ lwc1 $f10,0x6c($t0)
/* f078ce4: 460a1032 */ c.eq.s $f2,$f10
/* f078ce8: 00000000 */ nop
/* f078cec: 45000031 */ bc1f .L0f078db4
/* f078cf0: 00000000 */ nop
/* f078cf4: c5040074 */ lwc1 $f4,0x74($t0)
/* f078cf8: c5060078 */ lwc1 $f6,0x78($t0)
/* f078cfc: 46062032 */ c.eq.s $f4,$f6
/* f078d00: 00000000 */ nop
/* f078d04: 4500002b */ bc1f .L0f078db4
/* f078d08: 00000000 */ nop
/* f078d0c: 0c004b70 */ jal random
/* f078d10: afa800ac */ sw $t0,0xac($sp)
/* f078d14: 44824000 */ mtc1 $v0,$f8
/* f078d18: 8fa800ac */ lw $t0,0xac($sp)
/* f078d1c: 04410005 */ bgez $v0,.L0f078d34
/* f078d20: 468042a0 */ cvt.s.w $f10,$f8
/* f078d24: 3c014f80 */ lui $at,0x4f80
/* f078d28: 44812000 */ mtc1 $at,$f4
/* f078d2c: 00000000 */ nop
/* f078d30: 46045280 */ add.s $f10,$f10,$f4
.L0f078d34:
/* f078d34: 3c012f80 */ lui $at,0x2f80
/* f078d38: 44813000 */ mtc1 $at,$f6
/* f078d3c: 3c01421c */ lui $at,0x421c
/* f078d40: 44812000 */ mtc1 $at,$f4
/* f078d44: 46065202 */ mul.s $f8,$f10,$f6
/* f078d48: 3c013f80 */ lui $at,0x3f80
/* f078d4c: 44813000 */ mtc1 $at,$f6
/* f078d50: 3c017f1b */ lui $at,%hi(var7f1aa4c0)
/* f078d54: 46044282 */ mul.s $f10,$f8,$f4
/* f078d58: c424a4c0 */ lwc1 $f4,%lo(var7f1aa4c0)($at)
/* f078d5c: 46065200 */ add.s $f8,$f10,$f6
/* f078d60: 46044282 */ mul.s $f10,$f8,$f4
/* f078d64: 0c004b70 */ jal random
/* f078d68: e50a0074 */ swc1 $f10,0x74($t0)
/* f078d6c: 44823000 */ mtc1 $v0,$f6
/* f078d70: 3c017f1b */ lui $at,%hi(var7f1aa4c4)
/* f078d74: c430a4c4 */ lwc1 $f16,%lo(var7f1aa4c4)($at)
/* f078d78: 8fa800ac */ lw $t0,0xac($sp)
/* f078d7c: 04410005 */ bgez $v0,.L0f078d94
/* f078d80: 46803220 */ cvt.s.w $f8,$f6
/* f078d84: 3c014f80 */ lui $at,0x4f80
/* f078d88: 44812000 */ mtc1 $at,$f4
/* f078d8c: 00000000 */ nop
/* f078d90: 46044200 */ add.s $f8,$f8,$f4
.L0f078d94:
/* f078d94: 3c012f80 */ lui $at,0x2f80
/* f078d98: 44815000 */ mtc1 $at,$f10
/* f078d9c: 00000000 */ nop
/* f078da0: 460a4182 */ mul.s $f6,$f8,$f10
/* f078da4: 00000000 */ nop
/* f078da8: 46103102 */ mul.s $f4,$f6,$f16
/* f078dac: e5040060 */ swc1 $f4,0x60($t0)
/* f078db0: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078db4:
/* f078db4: 3c017f1b */ lui $at,%hi(var7f1aa4c8)
/* f078db8: c420a4c8 */ lwc1 $f0,%lo(var7f1aa4c8)($at)
/* f078dbc: 3c017f1b */ lui $at,%hi(var7f1aa4cc)
/* f078dc0: c428a4cc */ lwc1 $f8,%lo(var7f1aa4cc)($at)
/* f078dc4: 44051000 */ mfc1 $a1,$f2
/* f078dc8: 44070000 */ mfc1 $a3,$f0
/* f078dcc: 2504006c */ addiu $a0,$t0,0x6c
/* f078dd0: 25060070 */ addiu $a2,$t0,0x70
/* f078dd4: afa800ac */ sw $t0,0xac($sp)
/* f078dd8: e7a00010 */ swc1 $f0,0x10($sp)
/* f078ddc: 0fc1b6c0 */ jal applyRotation
/* f078de0: e7a80014 */ swc1 $f8,0x14($sp)
/* f078de4: 3c017f1b */ lui $at,%hi(var7f1aa4d0)
/* f078de8: c420a4d0 */ lwc1 $f0,%lo(var7f1aa4d0)($at)
/* f078dec: 8fa800ac */ lw $t0,0xac($sp)
/* f078df0: 3c017f1b */ lui $at,%hi(var7f1aa4d4)
/* f078df4: c42aa4d4 */ lwc1 $f10,%lo(var7f1aa4d4)($at)
/* f078df8: 44070000 */ mfc1 $a3,$f0
/* f078dfc: 8d050074 */ lw $a1,0x74($t0)
/* f078e00: e7a00010 */ swc1 $f0,0x10($sp)
/* f078e04: 25040078 */ addiu $a0,$t0,0x78
/* f078e08: 2506007c */ addiu $a2,$t0,0x7c
/* f078e0c: 0fc1b6c0 */ jal applyRotation
/* f078e10: e7aa0014 */ swc1 $f10,0x14($sp)
/* f078e14: 100003a0 */ b .L0f079c98
/* f078e18: 8fbf001c */ lw $ra,0x1c($sp)
.L0f078e1c:
/* f078e1c: 8d82000c */ lw $v0,0xc($t4)
/* f078e20: 00026880 */ sll $t5,$v0,0x2
/* f078e24: 05a10073 */ bgez $t5,.L0f078ff4
/* f078e28: 00027040 */ sll $t6,$v0,0x1
/* f078e2c: 05c30008 */ bgezl $t6,.L0f078e50
/* f078e30: c5020060 */ lwc1 $f2,0x60($t0)
/* f078e34: c504006c */ lwc1 $f4,0x6c($t0)
/* f078e38: c5060078 */ lwc1 $f6,0x78($t0)
/* f078e3c: e5040060 */ swc1 $f4,0x60($t0)
/* f078e40: c5020060 */ lwc1 $f2,0x60($t0)
/* f078e44: 1000001b */ b .L0f078eb4
/* f078e48: e5060074 */ swc1 $f6,0x74($t0)
/* f078e4c: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078e50:
/* f078e50: c508006c */ lwc1 $f8,0x6c($t0)
/* f078e54: 46081032 */ c.eq.s $f2,$f8
/* f078e58: 00000000 */ nop
/* f078e5c: 45000015 */ bc1f .L0f078eb4
/* f078e60: 00000000 */ nop
/* f078e64: 0c004b70 */ jal random
/* f078e68: afa800ac */ sw $t0,0xac($sp)
/* f078e6c: 44825000 */ mtc1 $v0,$f10
/* f078e70: 3c017f1b */ lui $at,%hi(var7f1aa4d8)
/* f078e74: c430a4d8 */ lwc1 $f16,%lo(var7f1aa4d8)($at)
/* f078e78: 8fa800ac */ lw $t0,0xac($sp)
/* f078e7c: 04410005 */ bgez $v0,.L0f078e94
/* f078e80: 468051a0 */ cvt.s.w $f6,$f10
/* f078e84: 3c014f80 */ lui $at,0x4f80
/* f078e88: 44812000 */ mtc1 $at,$f4
/* f078e8c: 00000000 */ nop
/* f078e90: 46043180 */ add.s $f6,$f6,$f4
.L0f078e94:
/* f078e94: 3c012f80 */ lui $at,0x2f80
/* f078e98: 44814000 */ mtc1 $at,$f8
/* f078e9c: 00000000 */ nop
/* f078ea0: 46083282 */ mul.s $f10,$f6,$f8
/* f078ea4: 00000000 */ nop
/* f078ea8: 46105102 */ mul.s $f4,$f10,$f16
/* f078eac: e5040060 */ swc1 $f4,0x60($t0)
/* f078eb0: c5020060 */ lwc1 $f2,0x60($t0)
.L0f078eb4:
/* f078eb4: 3c017f1b */ lui $at,%hi(var7f1aa4dc)
/* f078eb8: c420a4dc */ lwc1 $f0,%lo(var7f1aa4dc)($at)
/* f078ebc: 3c017f1b */ lui $at,%hi(var7f1aa4e4)
/* f078ec0: c426a4e4 */ lwc1 $f6,%lo(var7f1aa4e4)($at)
/* f078ec4: 44051000 */ mfc1 $a1,$f2
/* f078ec8: 44070000 */ mfc1 $a3,$f0
/* f078ecc: 2504006c */ addiu $a0,$t0,0x6c
/* f078ed0: 25060070 */ addiu $a2,$t0,0x70
/* f078ed4: afa800ac */ sw $t0,0xac($sp)
/* f078ed8: e7a00010 */ swc1 $f0,0x10($sp)
/* f078edc: 0fc1b6c0 */ jal applyRotation
/* f078ee0: e7a60014 */ swc1 $f6,0x14($sp)
/* f078ee4: 3c017f1b */ lui $at,%hi(var7f1aa4e8)
/* f078ee8: c420a4e8 */ lwc1 $f0,%lo(var7f1aa4e8)($at)
/* f078eec: 8fa800ac */ lw $t0,0xac($sp)
/* f078ef0: 3c017f1b */ lui $at,%hi(var7f1aa4f0)
/* f078ef4: c428a4f0 */ lwc1 $f8,%lo(var7f1aa4f0)($at)
/* f078ef8: 44070000 */ mfc1 $a3,$f0
/* f078efc: 8d050074 */ lw $a1,0x74($t0)
/* f078f00: e7a00010 */ swc1 $f0,0x10($sp)
/* f078f04: 25040078 */ addiu $a0,$t0,0x78
/* f078f08: 2506007c */ addiu $a2,$t0,0x7c
/* f078f0c: 0fc1b6c0 */ jal applyRotation
/* f078f10: e7a80014 */ swc1 $f8,0x14($sp)
/* f078f14: 8fa800ac */ lw $t0,0xac($sp)
/* f078f18: 0c0068f4 */ jal cosf
/* f078f1c: c50c006c */ lwc1 $f12,0x6c($t0)
/* f078f20: 44807000 */ mtc1 $zero,$f14
/* f078f24: 3c017f1b */ lui $at,%hi(var7f1aa4f8)
/* f078f28: c430a4f8 */ lwc1 $f16,%lo(var7f1aa4f8)($at)
/* f078f2c: 4600703c */ c.lt.s $f14,$f0
/* f078f30: 3c09800a */ lui $t1,%hi(g_Vars)
/* f078f34: 8fa800ac */ lw $t0,0xac($sp)
/* f078f38: 3c017f1b */ lui $at,%hi(var7f1aa4fc)
/* f078f3c: 45000006 */ bc1f .L0f078f58
/* f078f40: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f078f44: 3c017f1b */ lui $at,%hi(var7f1aa500)
/* f078f48: c42aa4fc */ lwc1 $f10,%lo(var7f1aa4fc)($at)
/* f078f4c: 46005302 */ mul.s $f12,$f10,$f0
/* f078f50: 10000002 */ b .L0f078f5c
/* f078f54: 00000000 */ nop
.L0f078f58:
/* f078f58: c42ca500 */ lwc1 $f12,%lo(var7f1aa500)($at)
.L0f078f5c:
/* f078f5c: 3c017f1b */ lui $at,%hi(var7f1aa504)
/* f078f60: c424a504 */ lwc1 $f4,%lo(var7f1aa504)($at)
/* f078f64: c526004c */ lwc1 $f6,0x4c($t1)
/* f078f68: c50a0088 */ lwc1 $f10,0x88($t0)
/* f078f6c: 46062202 */ mul.s $f8,$f4,$f6
/* f078f70: 46085100 */ add.s $f4,$f10,$f8
/* f078f74: e5040088 */ swc1 $f4,0x88($t0)
/* f078f78: c5020088 */ lwc1 $f2,0x88($t0)
/* f078f7c: 4602603c */ c.lt.s $f12,$f2
/* f078f80: 00000000 */ nop
/* f078f84: 45020004 */ bc1fl .L0f078f98
/* f078f88: 4602703c */ c.lt.s $f14,$f2
/* f078f8c: e50c0088 */ swc1 $f12,0x88($t0)
/* f078f90: c5020088 */ lwc1 $f2,0x88($t0)
/* f078f94: 4602703c */ c.lt.s $f14,$f2
.L0f078f98:
/* f078f98: 3c09800a */ lui $t1,%hi(g_Vars)
/* f078f9c: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f078fa0: 4502033d */ bc1fl .L0f079c98
/* f078fa4: 8fbf001c */ lw $ra,0x1c($sp)
/* f078fa8: c52a004c */ lwc1 $f10,0x4c($t1)
/* f078fac: c506008c */ lwc1 $f6,0x8c($t0)
/* f078fb0: 460a1202 */ mul.s $f8,$f2,$f10
/* f078fb4: 46083100 */ add.s $f4,$f6,$f8
/* f078fb8: e504008c */ swc1 $f4,0x8c($t0)
/* f078fbc: c500008c */ lwc1 $f0,0x8c($t0)
/* f078fc0: 4600803e */ c.le.s $f16,$f0
/* f078fc4: 00000000 */ nop
/* f078fc8: 45020333 */ bc1fl .L0f079c98
/* f078fcc: 8fbf001c */ lw $ra,0x1c($sp)
/* f078fd0: 46100281 */ sub.s $f10,$f0,$f16
.L0f078fd4:
/* f078fd4: e50a008c */ swc1 $f10,0x8c($t0)
/* f078fd8: c500008c */ lwc1 $f0,0x8c($t0)
/* f078fdc: 4600803e */ c.le.s $f16,$f0
/* f078fe0: 00000000 */ nop
/* f078fe4: 4503fffb */ bc1tl .L0f078fd4
/* f078fe8: 46100281 */ sub.s $f10,$f0,$f16
/* f078fec: 1000032a */ b .L0f079c98
/* f078ff0: 8fbf001c */ lw $ra,0x1c($sp)
.L0f078ff4:
/* f078ff4: 910f00a9 */ lbu $t7,0xa9($t0)
/* f078ff8: 15e00004 */ bnez $t7,.L0f07900c
/* f078ffc: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079000: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079004: 10000096 */ b .L0f079260
/* f079008: afa3006c */ sw $v1,0x6c($sp)
.L0f07900c:
/* f07900c: 8d0200a4 */ lw $v0,0xa4($t0)
/* f079010: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079014: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079018: 50400004 */ beqzl $v0,.L0f07902c
/* f07901c: afa3006c */ sw $v1,0x6c($sp)
/* f079020: 1000008f */ b .L0f079260
/* f079024: afa2006c */ sw $v0,0x6c($sp)
/* f079028: afa3006c */ sw $v1,0x6c($sp)
.L0f07902c:
/* f07902c: 0fc6830c */ jal frIsInTraining
/* f079030: afa800ac */ sw $t0,0xac($sp)
/* f079034: 1040000a */ beqz $v0,.L0f079060
/* f079038: 8fa800ac */ lw $t0,0xac($sp)
/* f07903c: 8fa400b0 */ lw $a0,0xb0($sp)
/* f079040: afa800ac */ sw $t0,0xac($sp)
/* f079044: 0fc67ce7 */ jal frChooseAutogunTarget
/* f079048: 24840008 */ addiu $a0,$a0,0x8
/* f07904c: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079050: 8fa800ac */ lw $t0,0xac($sp)
/* f079054: afa2006c */ sw $v0,0x6c($sp)
/* f079058: 10000081 */ b .L0f079260
/* f07905c: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
.L0f079060:
/* f079060: 911800a8 */ lbu $t8,0xa8($t0)
/* f079064: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079068: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f07906c: 5300006b */ beqzl $t8,.L0f07921c
/* f079070: 8d2e0298 */ lw $t6,0x298($t1)
/* f079074: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079078: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f07907c: 8d390318 */ lw $t9,0x318($t1)
/* f079080: 3c05800b */ lui $a1,%hi(g_MpNumChrs)
/* f079084: 13200003 */ beqz $t9,.L0f079094
/* f079088: 00000000 */ nop
/* f07908c: 10000007 */ b .L0f0790ac
/* f079090: 8ca5c530 */ lw $a1,%lo(g_MpNumChrs)($a1)
.L0f079094:
/* f079094: 0fc07934 */ jal chrsGetNumSlots
/* f079098: afa800ac */ sw $t0,0xac($sp)
/* f07909c: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0790a0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0790a4: 8fa800ac */ lw $t0,0xac($sp)
/* f0790a8: 00402825 */ or $a1,$v0,$zero
.L0f0790ac:
/* f0790ac: 850300aa */ lh $v1,0xaa($t0)
.L0f0790b0:
/* f0790b0: 246a0001 */ addiu $t2,$v1,0x1
.L0f0790b4:
/* f0790b4: a50a00aa */ sh $t2,0xaa($t0)
/* f0790b8: 850300aa */ lh $v1,0xaa($t0)
/* f0790bc: 8fad00a8 */ lw $t5,0xa8($sp)
/* f0790c0: 3c198006 */ lui $t9,%hi(g_ChrSlots)
/* f0790c4: 0065082a */ slt $at,$v1,$a1
/* f0790c8: 14200004 */ bnez $at,.L0f0790dc
/* f0790cc: 0003c0c0 */ sll $t8,$v1,0x3
/* f0790d0: 240bffff */ addiu $t3,$zero,-1
/* f0790d4: 10000062 */ b .L0f079260
/* f0790d8: a50b00aa */ sh $t3,0xaa($t0)
.L0f0790dc:
/* f0790dc: 8d2c0318 */ lw $t4,0x318($t1)
/* f0790e0: 0303c023 */ subu $t8,$t8,$v1
/* f0790e4: 0018c080 */ sll $t8,$t8,0x2
/* f0790e8: 1180001c */ beqz $t4,.L0f07915c
/* f0790ec: 0303c023 */ subu $t8,$t8,$v1
/* f0790f0: 8da20040 */ lw $v0,0x40($t5)
/* f0790f4: 3c01f000 */ lui $at,0xf000
/* f0790f8: 0003c080 */ sll $t8,$v1,0x2
/* f0790fc: 00417024 */ and $t6,$v0,$at
/* f079100: 000e7f02 */ srl $t7,$t6,0x1c
/* f079104: 11e3ffea */ beq $t7,$v1,.L0f0790b0
/* f079108: 3c04800b */ lui $a0,%hi(g_MpAllChrPtrs)
/* f07910c: 00982021 */ addu $a0,$a0,$t8
/* f079110: 8c84c4d0 */ lw $a0,%lo(g_MpAllChrPtrs)($a0)
/* f079114: 8c99001c */ lw $t9,0x1c($a0)
/* f079118: 5320ffe6 */ beqzl $t9,.L0f0790b4
/* f07911c: 246a0001 */ addiu $t2,$v1,0x1
/* f079120: 8c8a0020 */ lw $t2,0x20($a0)
/* f079124: 3c0b800b */ lui $t3,%hi(g_MpSetup+0xc)
/* f079128: 5140ffe2 */ beqzl $t2,.L0f0790b4
/* f07912c: 246a0001 */ addiu $t2,$v1,0x1
/* f079130: 8d6bcb94 */ lw $t3,%lo(g_MpSetup+0xc)($t3)
/* f079134: 316c0002 */ andi $t4,$t3,0x2
/* f079138: 51800021 */ beqzl $t4,.L0f0791c0
/* f07913c: 8c990018 */ lw $t9,0x18($a0)
/* f079140: 908d0125 */ lbu $t5,0x125($a0)
/* f079144: 910e00a8 */ lbu $t6,0xa8($t0)
/* f079148: 01ae7824 */ and $t7,$t5,$t6
/* f07914c: 55e0001c */ bnezl $t7,.L0f0791c0
/* f079150: 8c990018 */ lw $t9,0x18($a0)
/* f079154: 1000ffd7 */ b .L0f0790b4
/* f079158: 246a0001 */ addiu $t2,$v1,0x1
.L0f07915c:
/* f07915c: 8f392988 */ lw $t9,%lo(g_ChrSlots)($t9)
/* f079160: 0018c080 */ sll $t8,$t8,0x2
/* f079164: 0303c021 */ addu $t8,$t8,$v1
/* f079168: 0018c0c0 */ sll $t8,$t8,0x3
/* f07916c: 03192021 */ addu $a0,$t8,$t9
/* f079170: 8c82001c */ lw $v0,0x1c($a0)
/* f079174: 5040ffcf */ beqzl $v0,.L0f0790b4
/* f079178: 246a0001 */ addiu $t2,$v1,0x1
/* f07917c: 908a0125 */ lbu $t2,0x125($a0)
/* f079180: 910b00a8 */ lbu $t3,0xa8($t0)
/* f079184: 014b6024 */ and $t4,$t2,$t3
/* f079188: 5180ffca */ beqzl $t4,.L0f0790b4
/* f07918c: 246a0001 */ addiu $t2,$v1,0x1
/* f079190: 8c8d0020 */ lw $t5,0x20($a0)
/* f079194: 51a00006 */ beqzl $t5,.L0f0791b0
/* f079198: 90580000 */ lbu $t8,0x0($v0)
/* f07919c: 904e0001 */ lbu $t6,0x1($v0)
/* f0791a0: 31cf0004 */ andi $t7,$t6,0x4
/* f0791a4: 55e00006 */ bnezl $t7,.L0f0791c0
/* f0791a8: 8c990018 */ lw $t9,0x18($a0)
/* f0791ac: 90580000 */ lbu $t8,0x0($v0)
.L0f0791b0:
/* f0791b0: 24010006 */ addiu $at,$zero,0x6
/* f0791b4: 5701ffbf */ bnel $t8,$at,.L0f0790b4
/* f0791b8: 246a0001 */ addiu $t2,$v1,0x1
/* f0791bc: 8c990018 */ lw $t9,0x18($a0)
.L0f0791c0:
/* f0791c0: 332a0400 */ andi $t2,$t9,0x400
/* f0791c4: 15400012 */ bnez $t2,.L0f079210
/* f0791c8: 00000000 */ nop
/* f0791cc: 8c8b0014 */ lw $t3,0x14($a0)
/* f0791d0: 000b6080 */ sll $t4,$t3,0x2
/* f0791d4: 0580000e */ bltz $t4,.L0f079210
/* f0791d8: 00000000 */ nop
/* f0791dc: afa40058 */ sw $a0,0x58($sp)
/* f0791e0: afa5005c */ sw $a1,0x5c($sp)
/* f0791e4: 0fc0e6a5 */ jal chrIsDead
/* f0791e8: afa800ac */ sw $t0,0xac($sp)
/* f0791ec: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0791f0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0791f4: 8fa40058 */ lw $a0,0x58($sp)
/* f0791f8: 8fa5005c */ lw $a1,0x5c($sp)
/* f0791fc: 14400004 */ bnez $v0,.L0f079210
/* f079200: 8fa800ac */ lw $t0,0xac($sp)
/* f079204: 8c8d001c */ lw $t5,0x1c($a0)
/* f079208: 10000015 */ b .L0f079260
/* f07920c: afad006c */ sw $t5,0x6c($sp)
.L0f079210:
/* f079210: 1000ffa7 */ b .L0f0790b0
/* f079214: 850300aa */ lh $v1,0xaa($t0)
/* f079218: 8d2e0298 */ lw $t6,0x298($t1)
.L0f07921c:
/* f07921c: 05c2000e */ bltzl $t6,.L0f079258
/* f079220: 8d2d02a0 */ lw $t5,0x2a0($t1)
/* f079224: 8d2f000c */ lw $t7,0xc($t1)
/* f079228: 31f80001 */ andi $t8,$t7,0x1
/* f07922c: 53000006 */ beqzl $t8,.L0f079248
/* f079230: 8d2b02a4 */ lw $t3,0x2a4($t1)
/* f079234: 8d3902a0 */ lw $t9,0x2a0($t1)
/* f079238: 8f2a00bc */ lw $t2,0xbc($t9)
/* f07923c: 10000008 */ b .L0f079260
/* f079240: afaa006c */ sw $t2,0x6c($sp)
/* f079244: 8d2b02a4 */ lw $t3,0x2a4($t1)
.L0f079248:
/* f079248: 8d6c00bc */ lw $t4,0xbc($t3)
/* f07924c: 10000004 */ b .L0f079260
/* f079250: afac006c */ sw $t4,0x6c($sp)
/* f079254: 8d2d02a0 */ lw $t5,0x2a0($t1)
.L0f079258:
/* f079258: 8dae00bc */ lw $t6,0xbc($t5)
/* f07925c: afae006c */ sw $t6,0x6c($sp)
.L0f079260:
/* f079260: 8fa3006c */ lw $v1,0x6c($sp)
/* f079264: 50600016 */ beqzl $v1,.L0f0792c0
/* f079268: 8fa3006c */ lw $v1,0x6c($sp)
/* f07926c: 8c6f0004 */ lw $t7,0x4($v1)
/* f079270: 55e00004 */ bnezl $t7,.L0f079284
/* f079274: 90620000 */ lbu $v0,0x0($v1)
/* f079278: 10000010 */ b .L0f0792bc
/* f07927c: afa0006c */ sw $zero,0x6c($sp)
/* f079280: 90620000 */ lbu $v0,0x0($v1)
.L0f079284:
/* f079284: 24010003 */ addiu $at,$zero,0x3
/* f079288: afa3006c */ sw $v1,0x6c($sp)
/* f07928c: 1041000b */ beq $v0,$at,.L0f0792bc
/* f079290: 24010006 */ addiu $at,$zero,0x6
/* f079294: 10410009 */ beq $v0,$at,.L0f0792bc
/* f079298: afa3006c */ sw $v1,0x6c($sp)
/* f07929c: afa3006c */ sw $v1,0x6c($sp)
/* f0792a0: 0fc6830c */ jal frIsInTraining
/* f0792a4: afa800ac */ sw $t0,0xac($sp)
/* f0792a8: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0792ac: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0792b0: 14400002 */ bnez $v0,.L0f0792bc
/* f0792b4: 8fa800ac */ lw $t0,0xac($sp)
/* f0792b8: afa0006c */ sw $zero,0x6c($sp)
.L0f0792bc:
/* f0792bc: 8fa3006c */ lw $v1,0x6c($sp)
.L0f0792c0:
/* f0792c0: c5060074 */ lwc1 $f6,0x74($t0)
/* f0792c4: c5120060 */ lwc1 $f18,0x60($t0)
/* f0792c8: 10600152 */ beqz $v1,.L0f079814
/* f0792cc: e7a600a0 */ swc1 $f6,0xa0($sp)
/* f0792d0: 8fb800b0 */ lw $t8,0xb0($sp)
/* f0792d4: c46e0008 */ lwc1 $f14,0x8($v1)
/* f0792d8: 90790000 */ lbu $t9,0x0($v1)
/* f0792dc: c70c0008 */ lwc1 $f12,0x8($t8)
/* f0792e0: c46a000c */ lwc1 $f10,0xc($v1)
/* f0792e4: c708000c */ lwc1 $f8,0xc($t8)
/* f0792e8: 460c7081 */ sub.s $f2,$f14,$f12
/* f0792ec: c46c0010 */ lwc1 $f12,0x10($v1)
/* f0792f0: c70e0010 */ lwc1 $f14,0x10($t8)
/* f0792f4: 46085001 */ sub.s $f0,$f10,$f8
/* f0792f8: 24010006 */ addiu $at,$zero,0x6
/* f0792fc: 17210005 */ bne $t9,$at,.L0f079314
/* f079300: 460e6401 */ sub.s $f16,$f12,$f14
/* f079304: 3c0141a0 */ lui $at,0x41a0
/* f079308: 44815000 */ mtc1 $at,$f10
/* f07930c: 00000000 */ nop
/* f079310: 460a0001 */ sub.s $f0,$f0,$f10
.L0f079314:
/* f079314: 46021182 */ mul.s $f6,$f2,$f2
/* f079318: afa3006c */ sw $v1,0x6c($sp)
/* f07931c: afa800ac */ sw $t0,0xac($sp)
/* f079320: 46108202 */ mul.s $f8,$f16,$f16
/* f079324: e7a00090 */ swc1 $f0,0x90($sp)
/* f079328: e7a20094 */ swc1 $f2,0x94($sp)
/* f07932c: e7b0008c */ swc1 $f16,0x8c($sp)
/* f079330: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079334: 46083300 */ add.s $f12,$f6,$f8
/* f079338: e7ac0088 */ swc1 $f12,0x88($sp)
/* f07933c: 0c012974 */ jal sqrtf
/* f079340: e7ac0024 */ swc1 $f12,0x24($sp)
/* f079344: 8faa00a8 */ lw $t2,0xa8($sp)
/* f079348: e7a00080 */ swc1 $f0,0x80($sp)
/* f07934c: 8fa800ac */ lw $t0,0xac($sp)
/* f079350: 8d4b0008 */ lw $t3,0x8($t2)
/* f079354: c7ae0024 */ lwc1 $f14,0x24($sp)
/* f079358: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f07935c: 000b6100 */ sll $t4,$t3,0x4
/* f079360: 0581000b */ bgez $t4,.L0f079390
/* f079364: 46000086 */ mov.s $f2,$f0
/* f079368: c7a00090 */ lwc1 $f0,0x90($sp)
/* f07936c: afa800ac */ sw $t0,0xac($sp)
/* f079370: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079374: 46000102 */ mul.s $f4,$f0,$f0
/* f079378: 46047300 */ add.s $f12,$f14,$f4
/* f07937c: 0c012974 */ jal sqrtf
/* f079380: e7ac0088 */ swc1 $f12,0x88($sp)
/* f079384: 8fa800ac */ lw $t0,0xac($sp)
/* f079388: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f07938c: 46000086 */ mov.s $f2,$f0
.L0f079390:
/* f079390: c7ac0088 */ lwc1 $f12,0x88($sp)
/* f079394: afa800ac */ sw $t0,0xac($sp)
/* f079398: e7a20084 */ swc1 $f2,0x84($sp)
/* f07939c: 0fc0fe84 */ jal chrGetAimLimitAngle
/* f0793a0: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0793a4: 8fa800ac */ lw $t0,0xac($sp)
/* f0793a8: e7a00070 */ swc1 $f0,0x70($sp)
/* f0793ac: c7a20084 */ lwc1 $f2,0x84($sp)
/* f0793b0: c50a0084 */ lwc1 $f10,0x84($t0)
/* f0793b4: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0793b8: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0793bc: 460a103e */ c.le.s $f2,$f10
/* f0793c0: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f0793c4: c7ac0094 */ lwc1 $f12,0x94($sp)
/* f0793c8: c7ae008c */ lwc1 $f14,0x8c($sp)
/* f0793cc: 45020112 */ bc1fl .L0f079818
/* f0793d0: 8fb8007c */ lw $t8,0x7c($sp)
/* f0793d4: afa800ac */ sw $t0,0xac($sp)
/* f0793d8: 0fc259d4 */ jal atan2f
/* f0793dc: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0793e0: e7a00050 */ swc1 $f0,0x50($sp)
/* f0793e4: c7ac0090 */ lwc1 $f12,0x90($sp)
/* f0793e8: 0fc259d4 */ jal atan2f
/* f0793ec: c7ae0080 */ lwc1 $f14,0x80($sp)
/* f0793f0: 8fae00a8 */ lw $t6,0xa8($sp)
/* f0793f4: e7a0004c */ swc1 $f0,0x4c($sp)
/* f0793f8: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0793fc: 8dc20008 */ lw $v0,0x8($t6)
/* f079400: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079404: 3c054000 */ lui $a1,0x4000
/* f079408: 00027840 */ sll $t7,$v0,0x1
/* f07940c: 8fa800ac */ lw $t0,0xac($sp)
/* f079410: 05e00004 */ bltz $t7,.L0f079424
/* f079414: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079418: 0002c080 */ sll $t8,$v0,0x2
/* f07941c: 07010006 */ bgez $t8,.L0f079438
/* f079420: c7a60050 */ lwc1 $f6,0x50($sp)
.L0f079424:
/* f079424: 24190001 */ addiu $t9,$zero,0x1
/* f079428: 3c017f1b */ lui $at,%hi(var7f1aa508)
/* f07942c: c430a508 */ lwc1 $f16,%lo(var7f1aa508)($at)
/* f079430: 10000029 */ b .L0f0794d8
/* f079434: afb9007c */ sw $t9,0x7c($sp)
.L0f079438:
/* f079438: c508006c */ lwc1 $f8,0x6c($t0)
/* f07943c: 44802000 */ mtc1 $zero,$f4
/* f079440: 3c017f1b */ lui $at,%hi(var7f1aa50c)
/* f079444: 46083301 */ sub.s $f12,$f6,$f8
/* f079448: 4604603c */ c.lt.s $f12,$f4
/* f07944c: 00000000 */ nop
/* f079450: 45000003 */ bc1f .L0f079460
/* f079454: 00000000 */ nop
/* f079458: c430a50c */ lwc1 $f16,%lo(var7f1aa50c)($at)
/* f07945c: 46106300 */ add.s $f12,$f12,$f16
.L0f079460:
/* f079460: 3c017f1b */ lui $at,%hi(var7f1aa510)
/* f079464: c430a510 */ lwc1 $f16,%lo(var7f1aa510)($at)
/* f079468: 3c017f1b */ lui $at,%hi(var7f1aa514)
/* f07946c: c42aa514 */ lwc1 $f10,%lo(var7f1aa514)($at)
/* f079470: 3c017f1b */ lui $at,%hi(var7f1aa518)
/* f079474: 460c503c */ c.lt.s $f10,$f12
/* f079478: 00000000 */ nop
/* f07947c: 45020003 */ bc1fl .L0f07948c
/* f079480: c5060078 */ lwc1 $f6,0x78($t0)
/* f079484: 46106301 */ sub.s $f12,$f12,$f16
/* f079488: c5060078 */ lwc1 $f6,0x78($t0)
.L0f07948c:
/* f07948c: 44804000 */ mtc1 $zero,$f8
/* f079490: 46060081 */ sub.s $f2,$f0,$f6
/* f079494: 4608103c */ c.lt.s $f2,$f8
/* f079498: 00000000 */ nop
/* f07949c: 45000001 */ bc1f .L0f0794a4
/* f0794a0: 00000000 */ nop
.L0f0794a4:
/* f0794a4: c424a518 */ lwc1 $f4,%lo(var7f1aa518)($at)
/* f0794a8: 3c017f1b */ lui $at,%hi(var7f1aa51c)
/* f0794ac: 4604603c */ c.lt.s $f12,$f4
/* f0794b0: 00000000 */ nop
/* f0794b4: 45020009 */ bc1fl .L0f0794dc
/* f0794b8: 8fab007c */ lw $t3,0x7c($sp)
/* f0794bc: c42aa51c */ lwc1 $f10,%lo(var7f1aa51c)($at)
/* f0794c0: 240a0001 */ addiu $t2,$zero,0x1
/* f0794c4: 460c503c */ c.lt.s $f10,$f12
/* f0794c8: 00000000 */ nop
/* f0794cc: 45020003 */ bc1fl .L0f0794dc
/* f0794d0: 8fab007c */ lw $t3,0x7c($sp)
/* f0794d4: afaa007c */ sw $t2,0x7c($sp)
.L0f0794d8:
/* f0794d8: 8fab007c */ lw $t3,0x7c($sp)
.L0f0794dc:
/* f0794dc: c7a60050 */ lwc1 $f6,0x50($sp)
/* f0794e0: 8fac006c */ lw $t4,0x6c($sp)
/* f0794e4: 516000cc */ beqzl $t3,.L0f079818
/* f0794e8: 8fb8007c */ lw $t8,0x7c($sp)
/* f0794ec: c5080060 */ lwc1 $f8,0x60($t0)
/* f0794f0: 3c017f1b */ lui $at,%hi(var7f1aa520)
/* f0794f4: c424a520 */ lwc1 $f4,%lo(var7f1aa520)($at)
/* f0794f8: 46083001 */ sub.s $f0,$f6,$f8
/* f0794fc: 24030001 */ addiu $v1,$zero,0x1
/* f079500: 3c017f1b */ lui $at,%hi(var7f1aa524)
/* f079504: 4604003c */ c.lt.s $f0,$f4
/* f079508: 00000000 */ nop
/* f07950c: 45000003 */ bc1f .L0f07951c
/* f079510: 00000000 */ nop
/* f079514: 10000007 */ b .L0f079534
/* f079518: 46100000 */ add.s $f0,$f0,$f16
.L0f07951c:
/* f07951c: c42aa524 */ lwc1 $f10,%lo(var7f1aa524)($at)
/* f079520: 4600503e */ c.le.s $f10,$f0
/* f079524: 00000000 */ nop
/* f079528: 45020003 */ bc1fl .L0f079538
/* f07952c: 91820000 */ lbu $v0,0x0($t4)
/* f079530: 46100001 */ sub.s $f0,$f0,$f16
.L0f079534:
/* f079534: 91820000 */ lbu $v0,0x0($t4)
.L0f079538:
/* f079538: 24010006 */ addiu $at,$zero,0x6
/* f07953c: 54410022 */ bnel $v0,$at,.L0f0795c8
/* f079540: 24010003 */ addiu $at,$zero,0x3
/* f079544: 8d2d0324 */ lw $t5,0x324($t1)
/* f079548: 01802025 */ or $a0,$t4,$zero
/* f07954c: 11a0001b */ beqz $t5,.L0f0795bc
/* f079550: 00000000 */ nop
/* f079554: afa30044 */ sw $v1,0x44($sp)
/* f079558: afa800ac */ sw $t0,0xac($sp)
/* f07955c: e7a00048 */ swc1 $f0,0x48($sp)
/* f079560: 0fc4a25f */ jal playermgrGetPlayerNumByProp
/* f079564: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079568: 3c09800a */ lui $t1,%hi(g_Vars)
/* f07956c: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079570: 00027080 */ sll $t6,$v0,0x2
/* f079574: 012e7821 */ addu $t7,$t1,$t6
/* f079578: 8df80064 */ lw $t8,0x64($t7)
/* f07957c: 8fa30044 */ lw $v1,0x44($sp)
/* f079580: 8fa800ac */ lw $t0,0xac($sp)
/* f079584: 8f1900d8 */ lw $t9,0xd8($t8)
/* f079588: c7a00048 */ lwc1 $f0,0x48($sp)
/* f07958c: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079590: 1720000a */ bnez $t9,.L0f0795bc
/* f079594: 8faa006c */ lw $t2,0x6c($sp)
/* f079598: 8d420004 */ lw $v0,0x4($t2)
/* f07959c: 8c4b0018 */ lw $t3,0x18($v0)
/* f0795a0: 316d0400 */ andi $t5,$t3,0x400
/* f0795a4: 15a00005 */ bnez $t5,.L0f0795bc
/* f0795a8: 00000000 */ nop
/* f0795ac: 8c4c0014 */ lw $t4,0x14($v0)
/* f0795b0: 000c7080 */ sll $t6,$t4,0x2
/* f0795b4: 05c30043 */ bgezl $t6,.L0f0796c4
/* f0795b8: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f0795bc:
/* f0795bc: 10000040 */ b .L0f0796c0
/* f0795c0: 00001825 */ or $v1,$zero,$zero
/* f0795c4: 24010003 */ addiu $at,$zero,0x3
.L0f0795c8:
/* f0795c8: 14410024 */ bne $v0,$at,.L0f07965c
/* f0795cc: 8faf006c */ lw $t7,0x6c($sp)
/* f0795d0: 8de40004 */ lw $a0,0x4($t7)
/* f0795d4: 1080001f */ beqz $a0,.L0f079654
/* f0795d8: 00000000 */ nop
/* f0795dc: 8c980018 */ lw $t8,0x18($a0)
/* f0795e0: 33190400 */ andi $t9,$t8,0x400
/* f0795e4: 1720001b */ bnez $t9,.L0f079654
/* f0795e8: 00000000 */ nop
/* f0795ec: 8c820014 */ lw $v0,0x14($a0)
/* f0795f0: 00025080 */ sll $t2,$v0,0x2
/* f0795f4: 05400017 */ bltz $t2,.L0f079654
/* f0795f8: 00455824 */ and $t3,$v0,$a1
/* f0795fc: 15600015 */ bnez $t3,.L0f079654
/* f079600: 00000000 */ nop
/* f079604: afa30044 */ sw $v1,0x44($sp)
/* f079608: afa40040 */ sw $a0,0x40($sp)
/* f07960c: afa800ac */ sw $t0,0xac($sp)
/* f079610: e7a00048 */ swc1 $f0,0x48($sp)
/* f079614: 0fc0e6a5 */ jal chrIsDead
/* f079618: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f07961c: 8fa30044 */ lw $v1,0x44($sp)
/* f079620: 8fa40040 */ lw $a0,0x40($sp)
/* f079624: 8fa800ac */ lw $t0,0xac($sp)
/* f079628: c7a00048 */ lwc1 $f0,0x48($sp)
/* f07962c: 14400009 */ bnez $v0,.L0f079654
/* f079630: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079634: 80820007 */ lb $v0,0x7($a0)
/* f079638: 24010020 */ addiu $at,$zero,0x20
/* f07963c: 10410005 */ beq $v0,$at,.L0f079654
/* f079640: 2401001e */ addiu $at,$zero,0x1e
/* f079644: 10410003 */ beq $v0,$at,.L0f079654
/* f079648: 2401001f */ addiu $at,$zero,0x1f
/* f07964c: 5441001d */ bnel $v0,$at,.L0f0796c4
/* f079650: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f079654:
/* f079654: 1000001a */ b .L0f0796c0
/* f079658: 00001825 */ or $v1,$zero,$zero
.L0f07965c:
/* f07965c: 24010001 */ addiu $at,$zero,0x1
/* f079660: 14410017 */ bne $v0,$at,.L0f0796c0
/* f079664: 8fad006c */ lw $t5,0x6c($sp)
/* f079668: 8da20004 */ lw $v0,0x4($t5)
/* f07966c: 50400014 */ beqzl $v0,.L0f0796c0
/* f079670: 00001825 */ or $v1,$zero,$zero
/* f079674: 844c0004 */ lh $t4,0x4($v0)
/* f079678: 2401014c */ addiu $at,$zero,0x14c
/* f07967c: 01a02025 */ or $a0,$t5,$zero
/* f079680: 1581000e */ bne $t4,$at,.L0f0796bc
/* f079684: 8fa500b0 */ lw $a1,0xb0($sp)
/* f079688: 24a50008 */ addiu $a1,$a1,0x8
/* f07968c: afa30044 */ sw $v1,0x44($sp)
/* f079690: afa800ac */ sw $t0,0xac($sp)
/* f079694: e7a00048 */ swc1 $f0,0x48($sp)
/* f079698: 0fc67cbb */ jal frIsTargetFacingPos
/* f07969c: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0796a0: 8fa30044 */ lw $v1,0x44($sp)
/* f0796a4: 8fa800ac */ lw $t0,0xac($sp)
/* f0796a8: c7a00048 */ lwc1 $f0,0x48($sp)
/* f0796ac: 14400004 */ bnez $v0,.L0f0796c0
/* f0796b0: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f0796b4: 10000002 */ b .L0f0796c0
/* f0796b8: 00001825 */ or $v1,$zero,$zero
.L0f0796bc:
/* f0796bc: 00001825 */ or $v1,$zero,$zero
.L0f0796c0:
/* f0796c0: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f0796c4:
/* f0796c4: 00002825 */ or $a1,$zero,$zero
/* f0796c8: afa30044 */ sw $v1,0x44($sp)
/* f0796cc: afa800ac */ sw $t0,0xac($sp)
/* f0796d0: e7a00048 */ swc1 $f0,0x48($sp)
/* f0796d4: 0fc1905e */ jal propSetPerimEnabled
/* f0796d8: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0796dc: 8fa4006c */ lw $a0,0x6c($sp)
/* f0796e0: 0fc1905e */ jal propSetPerimEnabled
/* f0796e4: 00002825 */ or $a1,$zero,$zero
/* f0796e8: 8fa800ac */ lw $t0,0xac($sp)
/* f0796ec: c7a00048 */ lwc1 $f0,0x48($sp)
/* f0796f0: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0796f4: c5060064 */ lwc1 $f6,0x64($t0)
/* f0796f8: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0796fc: 8fa30044 */ lw $v1,0x44($sp)
/* f079700: 4606003e */ c.le.s $f0,$f6
/* f079704: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079708: 4502002a */ bc1fl .L0f0797b4
/* f07970c: 8d020090 */ lw $v0,0x90($t0)
/* f079710: c5080068 */ lwc1 $f8,0x68($t0)
/* f079714: 4600403e */ c.le.s $f8,$f0
/* f079718: 00000000 */ nop
/* f07971c: 45020025 */ bc1fl .L0f0797b4
/* f079720: 8d020090 */ lw $v0,0x90($t0)
/* f079724: 10600022 */ beqz $v1,.L0f0797b0
/* f079728: 8fa200b0 */ lw $v0,0xb0($sp)
/* f07972c: 8fae006c */ lw $t6,0x6c($sp)
/* f079730: 240f003f */ addiu $t7,$zero,0x3f
/* f079734: 24180008 */ addiu $t8,$zero,0x8
/* f079738: afb80014 */ sw $t8,0x14($sp)
/* f07973c: afaf0010 */ sw $t7,0x10($sp)
/* f079740: 24440008 */ addiu $a0,$v0,0x8
/* f079744: 24450028 */ addiu $a1,$v0,0x28
/* f079748: afa800ac */ sw $t0,0xac($sp)
/* f07974c: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079750: 25c60008 */ addiu $a2,$t6,0x8
/* f079754: 0c00b70f */ jal cdHasLineOfSight
/* f079758: 25c70028 */ addiu $a3,$t6,0x28
/* f07975c: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079760: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f079764: 8fa800ac */ lw $t0,0xac($sp)
/* f079768: 10400011 */ beqz $v0,.L0f0797b0
/* f07976c: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079770: 8fa200a8 */ lw $v0,0xa8($sp)
/* f079774: 3c012000 */ lui $at,0x2000
/* f079778: 240b0001 */ addiu $t3,$zero,0x1
/* f07977c: 8c590008 */ lw $t9,0x8($v0)
/* f079780: 03215025 */ or $t2,$t9,$at
/* f079784: ac4a0008 */ sw $t2,0x8($v0)
/* f079788: c7a4004c */ lwc1 $f4,0x4c($sp)
/* f07978c: afab0074 */ sw $t3,0x74($sp)
/* f079790: c7b20050 */ lwc1 $f18,0x50($sp)
/* f079794: e7a400a0 */ swc1 $f4,0xa0($sp)
/* f079798: 8d0c00a4 */ lw $t4,0xa4($t0)
/* f07979c: 8fad006c */ lw $t5,0x6c($sp)
/* f0797a0: 55800011 */ bnezl $t4,.L0f0797e8
/* f0797a4: 8fa400b0 */ lw $a0,0xb0($sp)
/* f0797a8: 1000000e */ b .L0f0797e4
/* f0797ac: ad0d00a4 */ sw $t5,0xa4($t0)
.L0f0797b0:
/* f0797b0: 8d020090 */ lw $v0,0x90($t0)
.L0f0797b4:
/* f0797b4: 0442000b */ bltzl $v0,.L0f0797e4
/* f0797b8: afa0007c */ sw $zero,0x7c($sp)
/* f0797bc: 8d2e0008 */ lw $t6,0x8($t1)
/* f0797c0: 25cfff88 */ addiu $t7,$t6,-120
/* f0797c4: 01e2082a */ slt $at,$t7,$v0
/* f0797c8: 50200006 */ beqzl $at,.L0f0797e4
/* f0797cc: afa0007c */ sw $zero,0x7c($sp)
/* f0797d0: c50a0078 */ lwc1 $f10,0x78($t0)
/* f0797d4: c512006c */ lwc1 $f18,0x6c($t0)
/* f0797d8: 10000002 */ b .L0f0797e4
/* f0797dc: e7aa00a0 */ swc1 $f10,0xa0($sp)
/* f0797e0: afa0007c */ sw $zero,0x7c($sp)
.L0f0797e4:
/* f0797e4: 8fa400b0 */ lw $a0,0xb0($sp)
.L0f0797e8:
/* f0797e8: 24050001 */ addiu $a1,$zero,0x1
/* f0797ec: afa800ac */ sw $t0,0xac($sp)
/* f0797f0: 0fc1905e */ jal propSetPerimEnabled
/* f0797f4: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f0797f8: 8fa4006c */ lw $a0,0x6c($sp)
/* f0797fc: 0fc1905e */ jal propSetPerimEnabled
/* f079800: 24050001 */ addiu $a1,$zero,0x1
/* f079804: 3c09800a */ lui $t1,%hi(g_Vars)
/* f079808: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f07980c: 8fa800ac */ lw $t0,0xac($sp)
/* f079810: c7b200a4 */ lwc1 $f18,0xa4($sp)
.L0f079814:
/* f079814: 8fb8007c */ lw $t8,0x7c($sp)
.L0f079818:
/* f079818: 3c017f1b */ lui $at,%hi(var7f1aa548)
/* f07981c: c430a548 */ lwc1 $f16,%lo(var7f1aa548)($at)
/* f079820: 57000003 */ bnezl $t8,.L0f079830
/* f079824: 8119005e */ lb $t9,0x5e($t0)
/* f079828: ad0000a4 */ sw $zero,0xa4($t0)
/* f07982c: 8119005e */ lb $t9,0x5e($t0)
.L0f079830:
/* f079830: 53200024 */ beqzl $t9,.L0f0798c4
/* f079834: c5020060 */ lwc1 $f2,0x60($t0)
/* f079838: 8d2a0008 */ lw $t2,0x8($t1)
/* f07983c: 24010078 */ addiu $at,$zero,0x78
/* f079840: afa800ac */ sw $t0,0xac($sp)
/* f079844: 0141001a */ div $zero,$t2,$at
/* f079848: 00005810 */ mfhi $t3
/* f07984c: 448b3000 */ mtc1 $t3,$f6
/* f079850: 3c017f1b */ lui $at,%hi(var7f1aa54c)
/* f079854: c424a54c */ lwc1 $f4,%lo(var7f1aa54c)($at)
/* f079858: 46803220 */ cvt.s.w $f8,$f6
/* f07985c: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079860: 46044302 */ mul.s $f12,$f8,$f4
/* f079864: 0c0068f7 */ jal sinf
/* f079868: 00000000 */ nop
/* f07986c: 3c017f1b */ lui $at,%hi(var7f1aa550)
/* f079870: c430a550 */ lwc1 $f16,%lo(var7f1aa550)($at)
/* f079874: 3c017f1b */ lui $at,%hi(var7f1aa554)
/* f079878: c426a554 */ lwc1 $f6,%lo(var7f1aa554)($at)
/* f07987c: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f079880: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f079884: 8fa800ac */ lw $t0,0xac($sp)
/* f079888: 46065202 */ mul.s $f8,$f10,$f6
/* f07988c: 44805000 */ mtc1 $zero,$f10
/* f079890: 46004102 */ mul.s $f4,$f8,$f0
/* f079894: 46049480 */ add.s $f18,$f18,$f4
/* f079898: 460a903c */ c.lt.s $f18,$f10
/* f07989c: 00000000 */ nop
/* f0798a0: 45020003 */ bc1fl .L0f0798b0
/* f0798a4: 4612803e */ c.le.s $f16,$f18
/* f0798a8: 46109480 */ add.s $f18,$f18,$f16
/* f0798ac: 4612803e */ c.le.s $f16,$f18
.L0f0798b0:
/* f0798b0: 00000000 */ nop
/* f0798b4: 45020003 */ bc1fl .L0f0798c4
/* f0798b8: c5020060 */ lwc1 $f2,0x60($t0)
/* f0798bc: 46109481 */ sub.s $f18,$f18,$f16
/* f0798c0: c5020060 */ lwc1 $f2,0x60($t0)
.L0f0798c4:
/* f0798c4: 3c017f1b */ lui $at,%hi(var7f1aa558)
/* f0798c8: c426a558 */ lwc1 $f6,%lo(var7f1aa558)($at)
/* f0798cc: 46029001 */ sub.s $f0,$f18,$f2
/* f0798d0: 44802000 */ mtc1 $zero,$f4
/* f0798d4: 2504006c */ addiu $a0,$t0,0x6c
/* f0798d8: 4606003c */ c.lt.s $f0,$f6
/* f0798dc: 00000000 */ nop
/* f0798e0: 45000003 */ bc1f .L0f0798f0
/* f0798e4: 00000000 */ nop
/* f0798e8: 10000008 */ b .L0f07990c
/* f0798ec: 46100000 */ add.s $f0,$f0,$f16
.L0f0798f0:
/* f0798f0: 3c017f1b */ lui $at,%hi(var7f1aa55c)
/* f0798f4: c428a55c */ lwc1 $f8,%lo(var7f1aa55c)($at)
/* f0798f8: 4600403e */ c.le.s $f8,$f0
/* f0798fc: 00000000 */ nop
/* f079900: 45020003 */ bc1fl .L0f079910
/* f079904: c50c0064 */ lwc1 $f12,0x64($t0)
/* f079908: 46100001 */ sub.s $f0,$f0,$f16
.L0f07990c:
/* f07990c: c50c0064 */ lwc1 $f12,0x64($t0)
.L0f079910:
/* f079910: 3c017f1b */ lui $at,%hi(var7f1aa560)
/* f079914: 4600603c */ c.lt.s $f12,$f0
/* f079918: 00000000 */ nop
/* f07991c: 45020004 */ bc1fl .L0f079930
/* f079920: c50c0068 */ lwc1 $f12,0x68($t0)
/* f079924: 10000007 */ b .L0f079944
/* f079928: 460c1480 */ add.s $f18,$f2,$f12
/* f07992c: c50c0068 */ lwc1 $f12,0x68($t0)
.L0f079930:
/* f079930: 460c003c */ c.lt.s $f0,$f12
/* f079934: 00000000 */ nop
/* f079938: 45020003 */ bc1fl .L0f079948
/* f07993c: 4604903c */ c.lt.s $f18,$f4
/* f079940: 460c1480 */ add.s $f18,$f2,$f12
.L0f079944:
/* f079944: 4604903c */ c.lt.s $f18,$f4
.L0f079948:
/* f079948: 00000000 */ nop
/* f07994c: 45020003 */ bc1fl .L0f07995c
/* f079950: 4612803e */ c.le.s $f16,$f18
/* f079954: 46109480 */ add.s $f18,$f18,$f16
/* f079958: 4612803e */ c.le.s $f16,$f18
.L0f07995c:
/* f07995c: 00000000 */ nop
/* f079960: 45000002 */ bc1f .L0f07996c
/* f079964: 00000000 */ nop
/* f079968: 46109481 */ sub.s $f18,$f18,$f16
.L0f07996c:
/* f07996c: c420a560 */ lwc1 $f0,%lo(var7f1aa560)($at)
/* f079970: 44059000 */ mfc1 $a1,$f18
/* f079974: 25060070 */ addiu $a2,$t0,0x70
/* f079978: e7a00010 */ swc1 $f0,0x10($sp)
/* f07997c: c50a0080 */ lwc1 $f10,0x80($t0)
/* f079980: 44070000 */ mfc1 $a3,$f0
/* f079984: e7b200a4 */ swc1 $f18,0xa4($sp)
/* f079988: afa800ac */ sw $t0,0xac($sp)
/* f07998c: 0fc1b6c0 */ jal applyRotation
/* f079990: e7aa0014 */ swc1 $f10,0x14($sp)
/* f079994: 3c017f1b */ lui $at,%hi(var7f1aa564)
/* f079998: c420a564 */ lwc1 $f0,%lo(var7f1aa564)($at)
/* f07999c: 8fa800ac */ lw $t0,0xac($sp)
/* f0799a0: 8fa500a0 */ lw $a1,0xa0($sp)
/* f0799a4: e7a00010 */ swc1 $f0,0x10($sp)
/* f0799a8: c5060080 */ lwc1 $f6,0x80($t0)
/* f0799ac: 44070000 */ mfc1 $a3,$f0
/* f0799b0: 25040078 */ addiu $a0,$t0,0x78
/* f0799b4: 2506007c */ addiu $a2,$t0,0x7c
/* f0799b8: 0fc1b6c0 */ jal applyRotation
/* f0799bc: e7a60014 */ swc1 $f6,0x14($sp)
/* f0799c0: 8fa800ac */ lw $t0,0xac($sp)
/* f0799c4: c7b200a4 */ lwc1 $f18,0xa4($sp)
/* f0799c8: 44802000 */ mtc1 $zero,$f4
/* f0799cc: c508006c */ lwc1 $f8,0x6c($t0)
/* f0799d0: 3c017f1b */ lui $at,%hi(var7f1aa56c)
/* f0799d4: c430a56c */ lwc1 $f16,%lo(var7f1aa56c)($at)
/* f0799d8: 46089301 */ sub.s $f12,$f18,$f8
/* f0799dc: 3c09800a */ lui $t1,%hi(g_Vars)
/* f0799e0: 25299fc0 */ addiu $t1,$t1,%lo(g_Vars)
/* f0799e4: 3c017f1b */ lui $at,%hi(var7f1aa570)
/* f0799e8: 4604603c */ c.lt.s $f12,$f4
/* f0799ec: c7aa00a0 */ lwc1 $f10,0xa0($sp)
/* f0799f0: 45000002 */ bc1f .L0f0799fc
/* f0799f4: 00000000 */ nop
/* f0799f8: 46106300 */ add.s $f12,$f12,$f16
.L0f0799fc:
/* f0799fc: c420a570 */ lwc1 $f0,%lo(var7f1aa570)($at)
/* f079a00: 460c003c */ c.lt.s $f0,$f12
/* f079a04: 00000000 */ nop
/* f079a08: 45020003 */ bc1fl .L0f079a18
/* f079a0c: c5060078 */ lwc1 $f6,0x78($t0)
/* f079a10: 46106301 */ sub.s $f12,$f12,$f16
/* f079a14: c5060078 */ lwc1 $f6,0x78($t0)
.L0f079a18:
/* f079a18: 44804000 */ mtc1 $zero,$f8
/* f079a1c: 46065081 */ sub.s $f2,$f10,$f6
/* f079a20: 4608103c */ c.lt.s $f2,$f8
/* f079a24: 00000000 */ nop
/* f079a28: 45020003 */ bc1fl .L0f079a38
/* f079a2c: 4602003c */ c.lt.s $f0,$f2
/* f079a30: 46101080 */ add.s $f2,$f2,$f16
/* f079a34: 4602003c */ c.lt.s $f0,$f2
.L0f079a38:
/* f079a38: 00000000 */ nop
/* f079a3c: 45020003 */ bc1fl .L0f079a4c
/* f079a40: a100005e */ sb $zero,0x5e($t0)
/* f079a44: 46101081 */ sub.s $f2,$f2,$f16
/* f079a48: a100005e */ sb $zero,0x5e($t0)
.L0f079a4c:
/* f079a4c: 8fac007c */ lw $t4,0x7c($sp)
/* f079a50: c7a40070 */ lwc1 $f4,0x70($sp)
/* f079a54: 51800045 */ beqzl $t4,.L0f079b6c
/* f079a58: 8faa0078 */ lw $t2,0x78($sp)
/* f079a5c: 4604603c */ c.lt.s $f12,$f4
/* f079a60: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f079a64: 4502001a */ bc1fl .L0f079ad0
/* f079a68: 460a5000 */ add.s $f0,$f10,$f10
/* f079a6c: 46002007 */ neg.s $f0,$f4
/* f079a70: 460c003c */ c.lt.s $f0,$f12
/* f079a74: 00000000 */ nop
/* f079a78: 45020015 */ bc1fl .L0f079ad0
/* f079a7c: 460a5000 */ add.s $f0,$f10,$f10
/* f079a80: 4604103c */ c.lt.s $f2,$f4
/* f079a84: 00000000 */ nop
/* f079a88: 45020011 */ bc1fl .L0f079ad0
/* f079a8c: 460a5000 */ add.s $f0,$f10,$f10
/* f079a90: 4602003c */ c.lt.s $f0,$f2
/* f079a94: 240d0001 */ addiu $t5,$zero,0x1
/* f079a98: 4502000d */ bc1fl .L0f079ad0
/* f079a9c: 460a5000 */ add.s $f0,$f10,$f10
/* f079aa0: a10d005e */ sb $t5,0x5e($t0)
/* f079aa4: 8faf0074 */ lw $t7,0x74($sp)
/* f079aa8: 240e0001 */ addiu $t6,$zero,0x1
/* f079aac: afae0078 */ sw $t6,0x78($sp)
/* f079ab0: 51e0002e */ beqzl $t7,.L0f079b6c
/* f079ab4: 8faa0078 */ lw $t2,0x78($sp)
/* f079ab8: 8d380008 */ lw $t8,0x8($t1)
/* f079abc: ad180090 */ sw $t8,0x90($t0)
/* f079ac0: 8d390008 */ lw $t9,0x8($t1)
/* f079ac4: 10000028 */ b .L0f079b68
/* f079ac8: ad190094 */ sw $t9,0x94($t0)
/* f079acc: 460a5000 */ add.s $f0,$f10,$f10
.L0f079ad0:
/* f079ad0: 4600603c */ c.lt.s $f12,$f0
/* f079ad4: 00000000 */ nop
/* f079ad8: 45020018 */ bc1fl .L0f079b3c
/* f079adc: 8d020090 */ lw $v0,0x90($t0)
/* f079ae0: 46000387 */ neg.s $f14,$f0
/* f079ae4: 460c703c */ c.lt.s $f14,$f12
/* f079ae8: 00000000 */ nop
/* f079aec: 45020013 */ bc1fl .L0f079b3c
/* f079af0: 8d020090 */ lw $v0,0x90($t0)
/* f079af4: 4600103c */ c.lt.s $f2,$f0
/* f079af8: 00000000 */ nop
/* f079afc: 4502000f */ bc1fl .L0f079b3c
/* f079b00: 8d020090 */ lw $v0,0x90($t0)
/* f079b04: 4602703c */ c.lt.s $f14,$f2
/* f079b08: 240a0001 */ addiu $t2,$zero,0x1
/* f079b0c: 4502000b */ bc1fl .L0f079b3c
/* f079b10: 8d020090 */ lw $v0,0x90($t0)
/* f079b14: a10a005e */ sb $t2,0x5e($t0)
/* f079b18: 8fac0074 */ lw $t4,0x74($sp)
/* f079b1c: 240b0001 */ addiu $t3,$zero,0x1
/* f079b20: afab0078 */ sw $t3,0x78($sp)
/* f079b24: 51800011 */ beqzl $t4,.L0f079b6c
/* f079b28: 8faa0078 */ lw $t2,0x78($sp)
/* f079b2c: 8d2d0008 */ lw $t5,0x8($t1)
/* f079b30: 1000000d */ b .L0f079b68
/* f079b34: ad0d0090 */ sw $t5,0x90($t0)
/* f079b38: 8d020090 */ lw $v0,0x90($t0)
.L0f079b3c:
/* f079b3c: 0442000b */ bltzl $v0,.L0f079b6c
/* f079b40: 8faa0078 */ lw $t2,0x78($sp)
/* f079b44: 8d2e0008 */ lw $t6,0x8($t1)
/* f079b48: 24180001 */ addiu $t8,$zero,0x1
/* f079b4c: 24190001 */ addiu $t9,$zero,0x1
/* f079b50: 25cfff88 */ addiu $t7,$t6,-120
/* f079b54: 01e2082a */ slt $at,$t7,$v0
/* f079b58: 50200004 */ beqzl $at,.L0f079b6c
/* f079b5c: 8faa0078 */ lw $t2,0x78($sp)
/* f079b60: a118005e */ sb $t8,0x5e($t0)
/* f079b64: afb90078 */ sw $t9,0x78($sp)
.L0f079b68:
/* f079b68: 8faa0078 */ lw $t2,0x78($sp)
.L0f079b6c:
/* f079b6c: 3c017f1b */ lui $at,%hi(var7f1aa574)
/* f079b70: 51400012 */ beqzl $t2,.L0f079bbc
/* f079b74: c5020088 */ lwc1 $f2,0x88($t0)
/* f079b78: c420a574 */ lwc1 $f0,%lo(var7f1aa574)($at)
/* f079b7c: 3c017f1b */ lui $at,%hi(var7f1aa578)
/* f079b80: c426a578 */ lwc1 $f6,%lo(var7f1aa578)($at)
/* f079b84: c528004c */ lwc1 $f8,0x4c($t1)
/* f079b88: c50a0088 */ lwc1 $f10,0x88($t0)
/* f079b8c: 46083102 */ mul.s $f4,$f6,$f8
/* f079b90: 46045180 */ add.s $f6,$f10,$f4
/* f079b94: e5060088 */ swc1 $f6,0x88($t0)
/* f079b98: c5020088 */ lwc1 $f2,0x88($t0)
/* f079b9c: 4602003c */ c.lt.s $f0,$f2
/* f079ba0: 00000000 */ nop
/* f079ba4: 45020025 */ bc1fl .L0f079c3c
/* f079ba8: 44805000 */ mtc1 $zero,$f10
/* f079bac: e5000088 */ swc1 $f0,0x88($t0)
/* f079bb0: 10000021 */ b .L0f079c38
/* f079bb4: c5020088 */ lwc1 $f2,0x88($t0)
/* f079bb8: c5020088 */ lwc1 $f2,0x88($t0)
.L0f079bbc:
/* f079bbc: 44804000 */ mtc1 $zero,$f8
/* f079bc0: 00000000 */ nop
/* f079bc4: 4602403c */ c.lt.s $f8,$f2
/* f079bc8: 00000000 */ nop
/* f079bcc: 4502001b */ bc1fl .L0f079c3c
/* f079bd0: 44805000 */ mtc1 $zero,$f10
/* f079bd4: 8d2b0038 */ lw $t3,0x38($t1)
/* f079bd8: 00001025 */ or $v0,$zero,$zero
/* f079bdc: 3c017f1b */ lui $at,%hi(var7f1aa57c)
/* f079be0: 1960000b */ blez $t3,.L0f079c10
/* f079be4: 00000000 */ nop
/* f079be8: c420a57c */ lwc1 $f0,%lo(var7f1aa57c)($at)
/* f079bec: c50a0088 */ lwc1 $f10,0x88($t0)
.L0f079bf0:
/* f079bf0: 24420001 */ addiu $v0,$v0,0x1
/* f079bf4: 46005102 */ mul.s $f4,$f10,$f0
/* f079bf8: e5040088 */ swc1 $f4,0x88($t0)
/* f079bfc: 8d2c0038 */ lw $t4,0x38($t1)
/* f079c00: 004c082a */ slt $at,$v0,$t4
/* f079c04: 5420fffa */ bnezl $at,.L0f079bf0
/* f079c08: c50a0088 */ lwc1 $f10,0x88($t0)
/* f079c0c: c5020088 */ lwc1 $f2,0x88($t0)
.L0f079c10:
/* f079c10: 3c017f1b */ lui $at,%hi(var7f1aa580)
/* f079c14: c426a580 */ lwc1 $f6,%lo(var7f1aa580)($at)
/* f079c18: 4606103e */ c.le.s $f2,$f6
/* f079c1c: 00000000 */ nop
/* f079c20: 45020006 */ bc1fl .L0f079c3c
/* f079c24: 44805000 */ mtc1 $zero,$f10
/* f079c28: 44804000 */ mtc1 $zero,$f8
/* f079c2c: 00000000 */ nop
/* f079c30: e5080088 */ swc1 $f8,0x88($t0)
/* f079c34: c5020088 */ lwc1 $f2,0x88($t0)
.L0f079c38:
/* f079c38: 44805000 */ mtc1 $zero,$f10
.L0f079c3c:
/* f079c3c: 00000000 */ nop
/* f079c40: 4602503c */ c.lt.s $f10,$f2
/* f079c44: 00000000 */ nop
/* f079c48: 45020013 */ bc1fl .L0f079c98
/* f079c4c: 8fbf001c */ lw $ra,0x1c($sp)
/* f079c50: c526004c */ lwc1 $f6,0x4c($t1)
/* f079c54: c504008c */ lwc1 $f4,0x8c($t0)
/* f079c58: 46061202 */ mul.s $f8,$f2,$f6
/* f079c5c: 46082280 */ add.s $f10,$f4,$f8
/* f079c60: e50a008c */ swc1 $f10,0x8c($t0)
/* f079c64: c500008c */ lwc1 $f0,0x8c($t0)
/* f079c68: 4600803e */ c.le.s $f16,$f0
/* f079c6c: 00000000 */ nop
/* f079c70: 45020009 */ bc1fl .L0f079c98
/* f079c74: 8fbf001c */ lw $ra,0x1c($sp)
/* f079c78: 46100181 */ sub.s $f6,$f0,$f16
.L0f079c7c:
/* f079c7c: e506008c */ swc1 $f6,0x8c($t0)
/* f079c80: c500008c */ lwc1 $f0,0x8c($t0)
/* f079c84: 4600803e */ c.le.s $f16,$f0
/* f079c88: 00000000 */ nop
/* f079c8c: 4503fffb */ bc1tl .L0f079c7c
/* f079c90: 46100181 */ sub.s $f6,$f0,$f16
/* f079c94: 8fbf001c */ lw $ra,0x1c($sp)
.L0f079c98:
/* f079c98: 27bd00b0 */ addiu $sp,$sp,0xb0
/* f079c9c: 03e00008 */ jr $ra
/* f079ca0: 00000000 */ nop
);
#endif
// Mismatch: Goal reloads &g_Vars into t1 unnecessarily
//void autogunTick(struct prop *prop)
//{
// struct autogunobj *autogun; // ac
// struct defaultobj *obj; // a8
// f32 goalyrot; // a4
// f32 goalxrot; // a0
// f32 f0;
// f32 maxspeed;
// f32 xdist; // 94
// f32 ydist; // 90
// f32 zdist; // 8c
// f32 sqdist; // 88
// f32 dist; // 84
// f32 horizdist; // 80
// bool awake; // 7c
// bool spinup; // 78
// bool insight; // 74
// f32 limitangle; // 70
// struct prop *target; // 6c
// s32 ownerplayernum;
// f32 f2;
// f32 f12;
// s32 numchrs; // 5c
// struct chrdata *chr; // 58
// s32 i;
// f32 targetangleh; // 50
// f32 targetanglev; // 4c
// f32 relangleh; // 48
// bool track; // 44
// u32 stack[2];
//
// autogun = (struct autogunobj *)prop->obj;
// obj = prop->obj;
// target = NULL;
// awake = false;
// spinup = false;
// insight = false;
// limitangle = 0.0f;
//
// // Malfunctioning mode 1: The gun looks around continuously in random
// // directions on both axis without spinning the barrel.
// if (obj->flags2 & OBJFLAG2_AUTOGUN_MALFUNCTIONING1) {
// if (obj->flags2 & OBJFLAG2_AUTOGUN_40000000) {
// autogun->xzero = autogun->xrot;
// autogun->yzero = autogun->yrot;
// } else if (autogun->yrot == autogun->yzero && autogun->xrot == autogun->xzero) {
// autogun->xzero = (RANDOMFRAC() * 39.0f + 1.0f) * 0.017450513f;
// autogun->yzero = RANDOMFRAC() * M_BADTAU;
// }
//
// applyRotation(&autogun->yrot, autogun->yzero, &autogun->yspeed, 0.00001163367596746f, 0.00001163367596746f, 0.000698f);
// applyRotation(&autogun->xrot, autogun->xzero, &autogun->xspeed, 0.0000058168379837298f, 0.0000058168379837298f, 0.000349f);
// return;
// }
//
// // Malfunctioning mode 2: The gun looks around left/right continuously
// // and spins the barrel based on its angle.
// if (obj->flags2 & OBJFLAG2_AUTOGUN_MALFUNCTIONING2) {
// if (obj->flags2 & OBJFLAG2_AUTOGUN_40000000) {
// autogun->xzero = autogun->xrot;
// autogun->yzero = autogun->yrot;
// } else if (autogun->yrot == autogun->yzero) {
// autogun->yzero = RANDOMFRAC() * M_BADTAU;
// }
//
// applyRotation(&autogun->yrot, autogun->yzero, &autogun->yspeed, 0.00001163367596746f, 0.00001163367596746f, 0.000698f);
// applyRotation(&autogun->xrot, autogun->xzero, &autogun->xspeed, 0.0000058168379837298f, 0.0000058168379837298f, 0.000349f);
//
// maxspeed = cosf(autogun->yrot);
//
// if (maxspeed > 0.0f) {
// maxspeed = 0.02512874f * maxspeed;
// } else {
// maxspeed = 0.000001f;
// }
//
// if (1) {
// autogun->barrelspeed += 0.009971722f * g_Vars.lvupdate240freal;
//
// if (autogun->barrelspeed > maxspeed) {
// autogun->barrelspeed = maxspeed;
// }
// }
//
// if (autogun->barrelspeed > 0.0f) {
// autogun->barrelrot += autogun->barrelspeed * g_Vars.lvupdate240freal;
//
// while (autogun->barrelrot >= M_BADTAU) {
// autogun->barrelrot -= M_BADTAU;
// }
// }
//
// return;
// }
//
// // Regular behaviour
// if (autogun->ammoquantity == 0) {
// // don't set target
// } else if (autogun->target) {
// target = autogun->target;
// } else {
// // Find new target
// if (frIsInTraining()) {
// // Laptop gun in firing range
// target = frChooseAutogunTarget(&prop->pos);
// if (1);
// } else if (autogun->targetteam != 0) {
// // Autogun (solo or MP) configured to attack specific teams
// if (g_Vars.normmplayerisrunning) {
// numchrs = g_MpNumChrs;
// } else {
// numchrs = chrsGetNumSlots();
// }
//
// while (true) {
// autogun->nextchrtest++;
//
// if (autogun->nextchrtest >= numchrs) {
// autogun->nextchrtest = -1;
// break;
// }
//
// if (g_Vars.normmplayerisrunning) {
// ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
//
// if (autogun->nextchrtest == ownerplayernum) {
// continue;
// }
//
// chr = g_MpAllChrPtrs[autogun->nextchrtest];
//
// if (!chr->prop) {
// continue;
// }
//
// if (!chr->model) {
// continue;
// }
//
// if ((g_MpSetup.options & MPOPTION_TEAMSENABLED) && (chr->team & autogun->targetteam) == 0) {
// continue;
// }
// } else {
// chr = &g_ChrSlots[autogun->nextchrtest];
//
// if (!chr->prop) {
// continue;
// }
//
// if ((chr->team & autogun->targetteam) == 0) {
// continue;
// }
//
// if ((!chr->model || (chr->prop->flags & PROPFLAG_ENABLED) == 0) && chr->prop->type != PROPTYPE_PLAYER) {
// continue;
// }
// }
//
// if ((chr->chrflags & CHRCFLAG_HIDDEN) == 0
// && (chr->hidden & CHRHFLAG_CLOAKED) == 0
// && !chrIsDead(chr)) {
// target = chr->prop;
// break;
// }
//
// if (1);
// }
// } else 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;
// }
// }
//
// if (target) {
// if (target->chr == NULL) {
// target = NULL;
// } else if (target->type != PROPTYPE_CHR && target->type != PROPTYPE_PLAYER && !frIsInTraining()) {
// target = NULL;
// }
// }
//
// goalyrot = autogun->yzero;
// goalxrot = autogun->xzero;
//
// if (target) {
// xdist = target->pos.f[0] - prop->pos.f[0];
// ydist = target->pos.f[1] - prop->pos.f[1];
// zdist = target->pos.f[2] - prop->pos.f[2];
//
// if (target->type == PROPTYPE_PLAYER) {
// ydist -= 20.0f;
// }
//
// sqdist = xdist * xdist + zdist * zdist;
// dist = sqrtf(sqdist);
// horizdist = dist;
//
// if (obj->flags & OBJFLAG_08000000) {
// sqdist += ydist * ydist;
// dist = sqrtf(sqdist);
// }
//
// limitangle = chrGetAimLimitAngle(sqdist);
//
// if (dist <= autogun->aimdist) {
// targetangleh = atan2f(xdist, zdist);
// targetanglev = atan2f(ydist, horizdist);
//
// if ((obj->flags & OBJFLAG_AUTOGUN_DAMAGED) || (obj->flags & OBJFLAG_AUTOGUN_SEENTARGET)) {
// awake = true;
// } else {
// f12 = targetangleh - autogun->yrot;
//
// if (f12 < 0.0f) {
// f12 += M_BADTAU;
// }
//
// if (f12 > M_PI) {
// f12 -= M_BADTAU;
// }
//
// f2 = targetanglev - autogun->xrot;
//
// if (f2 < 0.0f) {
// f2 += M_BADTAU;
// }
//
// if (f2 > M_PI) {
// f2 -= M_BADTAU;
// }
//
// if (f12 < 1.221536f && f12 > -1.221536f) {
// awake = true;
// }
// }
//
// if (awake) {
// relangleh = targetangleh - autogun->yzero;
// track = true;
//
// if (relangleh < -M_PI) {
// relangleh += M_BADTAU;
// } else if (relangleh >= M_PI) {
// relangleh -= M_BADTAU;
// }
//
// if (target->type == PROPTYPE_PLAYER) {
// if (!g_Vars.bondvisible
// || g_Vars.players[playermgrGetPlayerNumByProp(target)]->isdead
// || (target->chr->chrflags & CHRCFLAG_HIDDEN)
// || (target->chr->hidden & CHRHFLAG_CLOAKED)) {
// track = false;
// }
// } else if (target->type == PROPTYPE_CHR) {
// struct chrdata *chr = target->chr;
//
// if (chr == NULL
// || (chr->chrflags & CHRCFLAG_HIDDEN)
// || (chr->hidden & CHRHFLAG_CLOAKED)
// || (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE)
// || chrIsDead(chr)
// || chr->actiontype == ACT_DRUGGEDCOMINGUP
// || chr->actiontype == ACT_DRUGGEDDROP
// || chr->actiontype == ACT_DRUGGEDKO) {
// track = false;
// }
// } else if (target->type == PROPTYPE_OBJ) {
// struct defaultobj *obj = target->obj;
//
// if (obj && obj->modelnum == MODEL_TARGET && !frIsTargetFacingPos(target, &prop->pos)) {
// track = false;
// }
// } else {
// track = false;
// }
//
// propSetPerimEnabled(prop, false);
// propSetPerimEnabled(target, false);
//
// if (relangleh <= autogun->ymaxleft
// && relangleh >= autogun->ymaxright
// && track
// && cdHasLineOfSight(&prop->pos, prop->rooms, &target->pos, target->rooms, CDTYPE_ALL, 8)) {
// obj->flags |= OBJFLAG_AUTOGUN_SEENTARGET;
// insight = true;
// goalxrot = targetanglev;
// goalyrot = targetangleh;
//
// if (autogun->target == NULL) {
// autogun->target = target;
// }
// } else if (autogun->lastseebond60 >= 0 && autogun->lastseebond60 > g_Vars.lvframe60 - 120) {
// // Target recently lost
// goalyrot = autogun->yrot;
// goalxrot = autogun->xrot;
// } else {
// awake = false;
// }
//
// propSetPerimEnabled(prop, true);
// propSetPerimEnabled(target, true);
// }
// }
// }
//
// if (!awake) {
// autogun->target = NULL;
// }
//
// // The turret swivels left and right while firing
// if (autogun->firing) {
// goalyrot += limitangle * 0.8f * sinf((g_Vars.lvframe60 % 120) * 0.05235154f);
//
// if (goalyrot < 0.0f) {
// goalyrot += M_BADTAU;
// }
//
// if (goalyrot >= M_BADTAU) {
// goalyrot -= M_BADTAU;
// }
// }
//
// f0 = goalyrot - autogun->yzero;
//
// if (f0 < -M_PI) {
// f0 += M_BADTAU;
// } else if (f0 >= M_PI) {
// f0 -= M_BADTAU;
// }
//
// if (f0 > autogun->ymaxleft) {
// goalyrot = autogun->yzero + autogun->ymaxleft;
// } else if (f0 < autogun->ymaxright) {
// goalyrot = autogun->yzero + autogun->ymaxright;
// }
//
// if (goalyrot < 0.0f) {
// goalyrot += M_BADTAU;
// }
//
// if (goalyrot >= M_BADTAU) {
// goalyrot -= M_BADTAU;
// }
//
// applyRotation(&autogun->yrot, goalyrot, &autogun->yspeed, 0.00087252567755058f, 0.00087252567755058f, autogun->maxspeed);
// applyRotation(&autogun->xrot, goalxrot, &autogun->xspeed, 0.00087252567755058f, 0.00087252567755058f, autogun->maxspeed);
//
// f12 = goalyrot - autogun->yrot;
//
// if (f12 < 0.0f) {
// f12 += M_BADTAU;
// }
//
// if (f12 > M_BADPI) {
// f12 -= M_BADTAU;
// }
//
// f2 = goalxrot - autogun->xrot;
//
// if (f2 < 0.0f) {
// f2 += M_BADTAU;
// }
//
// if (f2 > M_BADPI) {
// f2 -= M_BADTAU;
// }
//
// autogun->firing = false;
//
// if (awake) {
// if (f12 < limitangle && -limitangle < f12 && f2 < limitangle && -limitangle < f2) {
// autogun->firing = true;
// spinup = true;
//
// if (insight) {
// autogun->lastseebond60 = g_Vars.lvframe60;
// autogun->lastaimbond60 = g_Vars.lvframe60;
// }
// } else {
// f32 f0 = 2.0f * limitangle;
//
// if (f12 < f0 && -f0 < f12 && f2 < f0 && -f0 < f2) {
// autogun->firing = true;
// spinup = true;
//
// if (insight) {
// autogun->lastseebond60 = g_Vars.lvframe60;
// }
// } else {
// if (autogun->lastseebond60 >= 0 && autogun->lastseebond60 > g_Vars.lvframe60 - 120) {
// autogun->firing = true;
// spinup = true;
// }
// }
// }
// }
//
// if (spinup) {
// autogun->barrelspeed += 0.009971722f * g_Vars.lvupdate240freal;
//
// if (autogun->barrelspeed > 0.5983033f) {
// autogun->barrelspeed = 0.5983033f;
// }
// } else if (autogun->barrelspeed > 0.0f) {
// for (i = 0; i < g_Vars.lvupdate240_60; i++) {
// autogun->barrelspeed *= 0.99f;
// }
//
// if (autogun->barrelspeed <= 0.0001f) {
// autogun->barrelspeed = 0.0f;
// }
// }
//
// if (autogun->barrelspeed > 0.0f) {
// autogun->barrelrot += autogun->barrelspeed * g_Vars.lvupdate240freal;
//
// while (autogun->barrelrot >= M_BADTAU) {
// autogun->barrelrot -= M_BADTAU;
// }
// }
//}
void autogunInitMatrices(struct prop *prop, Mtxf *mtx)
{
struct autogunobj *autogun = (struct autogunobj *)prop->obj;
struct model *model = autogun->base.model;
Mtxf *matrices = model->matrices;
union modelrodata *rodata;
struct coord sp4c;
f32 yrot = autogun->yrot + 1.5705462694168f;
f32 xrot = -autogun->xrot;
Mtxf *tmp;
struct modelnode *node2;
struct modelnode *node3;
struct modelnode *node4;
struct modelnode *node6;
if (yrot >= M_BADTAU) {
yrot -= M_BADTAU;
}
rodata = modelGetPartRodata(model->filedata, MODELPART_AUTOGUN_0001);
sp4c.x = rodata->position.pos.x;
sp4c.y = rodata->position.pos.y;
sp4c.z = rodata->position.pos.z;
mtx4TransformVecInPlace(mtx, &sp4c);
mtx4LoadYRotation(yrot, &matrices[1]);
mtx4SetTranslation(&sp4c, &matrices[1]);
mtx00015f04(autogun->base.model->scale, &matrices[1]);
mtx00015be0(camGetWorldToScreenMtxf(), &matrices[1]);
node2 = modelGetPart(model->filedata, MODELPART_AUTOGUN_0002);
rodata = node2->rodata;
mtx4LoadZRotation(xrot, &matrices[2]);
mtx4SetTranslation(&rodata->position.pos, &matrices[2]);
mtx00015be0(&matrices[1], &matrices[2]);
tmp = model0001a5cc(model, node2, 0x100);
if (tmp != NULL) {
mtx4LoadZRotation(xrot * 0.5f, tmp);
mtx4SetTranslation(&rodata->position.pos, tmp);
mtx00015be0(&matrices[1], tmp);
}
node3 = modelGetPart(model->filedata, MODELPART_AUTOGUN_0003);
if (node3 != NULL) {
tmp = model0001a5cc(model, node3, 0);
rodata = node3->rodata;
mtx4LoadXRotation(autogun->barrelrot, tmp);
mtx4SetTranslation(&rodata->position.pos, tmp);
mtx00015be0(&matrices[2], tmp);
}
node4 = modelGetPart(model->filedata, MODELPART_AUTOGUN_0004);
if (node4 != NULL) {
tmp = model0001a5cc(model, node4, 0);
rodata = node4->rodata;
mtx4LoadTranslation(&rodata->position.pos, tmp);
mtx00015be0(&matrices[2], tmp);
}
node6 = modelGetPart(model->filedata, MODELPART_AUTOGUN_0006);
if (node6 != NULL) {
tmp = model0001a5cc(model, node6, 0);
rodata = node6->rodata;
mtx4LoadXRotation(autogun->barrelrot, tmp);
mtx4SetTranslation(&rodata->position.pos, tmp);
mtx00015be0(&matrices[2], tmp);
}
}
void autogunTickShoot(struct prop *autogunprop)
{
if (!lvIsPaused()) {
struct autogunobj *autogun = (struct autogunobj *) autogunprop->obj;
struct defaultobj *obj = autogunprop->obj;
bool fireleft = false;
bool fireright = false;
struct model *model = obj->model;
struct modelnode *node1;
struct modelnode *node2;
struct prop *hitprop;
bool friendly = false;
if (autogun->firing && (obj->flags & OBJFLAG_DEACTIVATED) == 0) {
autogun->firecount++;
fireleft = (autogun->firecount % 2) == 0;
if (modelGetPart(model->filedata, MODELPART_AUTOGUN_FLASHLEFT)) {
fireright = (autogun->firecount % 2) == 1;
}
if (fireleft || fireright) {
struct coord gunpos;
s16 gunrooms[8];
struct coord dir;
bool missed = false;
struct coord hitpos;
s16 hitrooms[8];
bool makebeam = (autogun->firecount % 4) == 0;
struct prop *targetprop = autogun->target;
struct modelnode *flashnode;
struct modelnode *posnode = NULL;
struct gset gset = { WEAPON_RCP45, 0, 0, FUNC_PRIMARY };
struct prop *ownerprop = NULL;
struct chrdata *ownerchr = NULL;
s32 ownerplayernum = (obj->hidden & 0xf0000000) >> 28;
if (g_Vars.normmplayerisrunning) {
// Multiplayer - it must be a laptop gun
ownerchr = mpGetChrFromPlayerIndex(ownerplayernum);
if (ownerchr) {
ownerprop = ownerchr->prop;
}
}
if ((autogun->firecount & 7)
|| (flashnode = modelGetPart(model->filedata, MODELPART_AUTOGUN_FLASHRIGHT)) == NULL) {
flashnode = modelGetPart(model->filedata, MODELPART_AUTOGUN_FLASHLEFT);
}
if (flashnode == NULL) {
posnode = modelGetPart(model->filedata, MODELPART_AUTOGUN_0003);
}
propSetPerimEnabled(autogunprop, false);
if ((autogunprop->flags & PROPFLAG_ONTHISSCREENTHISTICK) && (flashnode || posnode)) {
Mtxf *sp108;
Mtxf spc8;
union modelrodata *rodata;
if (flashnode) {
sp108 = model0001a5cc(model, flashnode, 0);
rodata = flashnode->rodata;
gunpos.x = rodata->chrgunfire.pos.x;
gunpos.y = rodata->chrgunfire.pos.y;
gunpos.z = rodata->chrgunfire.pos.z;
} else {
sp108 = model0001a5cc(model, posnode, 0);
gunpos.x = 0.0f;
gunpos.y = 0.0f;
gunpos.z = 0.0f;
}
mtx00015be4(camGetProjectionMtxF(), sp108, &spc8);
mtx4TransformVecInPlace(&spc8, &gunpos);
if (cd0002de34(&autogunprop->pos, autogunprop->rooms, &gunpos, gunrooms, CDTYPE_BG, 0x10) == CDRESULT_COLLISION) {
gunpos.x = autogunprop->pos.x;
gunpos.y = autogunprop->pos.y;
gunpos.z = autogunprop->pos.z;
roomsCopy(autogunprop->rooms, gunrooms);
}
} else {
gunpos.x = autogunprop->pos.x;
gunpos.y = autogunprop->pos.y;
gunpos.z = autogunprop->pos.z;
roomsCopy(autogunprop->rooms, gunrooms);
}
dir.x = cosf(autogun->xrot) * sinf(autogun->yrot);
dir.y = sinf(autogun->xrot);
dir.z = cosf(autogun->xrot) * cosf(autogun->yrot);
hitpos.x = gunpos.x + dir.x * 65536.0f;
hitpos.y = gunpos.y + dir.y * 65536.0f;
hitpos.z = gunpos.z + dir.z * 65536.0f;
// 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 (cdTestAToB4(&gunpos, gunrooms, &hitpos, CDTYPE_ALL, 0x10) == 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
hitprop = cdGetObstacle();
// 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;
}
}
} else if (targetprop && targetprop->type == PROPTYPE_OBJ) {
// Laptop in firing range
struct prop *hitprop = NULL;
if (cdTestAToB4(&gunpos, gunrooms, &hitpos, CDTYPE_ALL & ~CDTYPE_PLAYERS, 0x10) == 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
hitprop = cdGetObstacle();
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;
frCalculateHit(hitobj, &hitpos, 0);
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 (cdTestAToB4(&gunpos, gunrooms, &hitpos, CDTYPE_DOORS | CDTYPE_BG, 0x10) == 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.lvupdate240freal * 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);
if (fireleft || fireright) {
if (autogun->ammoquantity > 0 && autogun->ammoquantity != 255) {
autogun->ammoquantity--;
}
}
if (missed) {
portal00018148(&gunpos, &hitpos, gunrooms, hitrooms, NULL, 0);
if (chrIsUsingPaintball(ownerchr)) {
sparksCreate(hitrooms[0], NULL, &hitpos, 0, 0, SPARKTYPE_PAINT);
} else {
sparksCreate(hitrooms[0], NULL, &hitpos, 0, 0, autogun->base.modelnum == MODEL_CETROOFGUN ? SPARKTYPE_BGHIT_GREEN : SPARKTYPE_DEFAULT);
}
bgunPlayBgHitSound(&gset, &hitpos, -1, hitrooms);
}
if (makebeam) {
f32 distance;
struct beam *beam = autogun->beam;
f32 sum;
struct coord dist;
dist.x = hitpos.x - gunpos.x;
dist.y = hitpos.y - gunpos.y;
dist.z = hitpos.z - gunpos.z;
sum = dist.f[0] * dist.f[0] + dist.f[1] * dist.f[1] + dist.f[2] * dist.f[2];
distance = sqrtf(sum);
if (distance > 0.0f) {
beam->from.x = gunpos.x;
beam->from.y = gunpos.y;
beam->from.z = gunpos.z;
beam->dir.x = dist.f[0];
beam->dir.y = dist.f[1];
beam->dir.z = dist.f[2];
beam->dir.x *= 1.0f / distance;
beam->dir.y *= 1.0f / distance;
beam->dir.z *= 1.0f / distance;
if (distance > 10000.0f) {
distance = 10000.0f;
}
beam->age = 0;
beam->weaponnum = autogun->base.modelnum == MODEL_CETROOFGUN ? WEAPON_CALLISTO : WEAPON_RCP45;
beam->maxdist = distance;
if (distance < 500.0f) {
distance = 500.0f;
}
if (beam->weaponnum == WEAPON_LASER) {
// Unreachable - weaponnum was assigned above
beam->speed = 0.25f * distance;
beam->mindist = 0.6f * distance;
if (beam->mindist > 3000.0f) {
beam->mindist = 3000.0f;
}
beam->dist = (-0.1f - RANDOMFRAC() * 0.3f) * distance;
} else {
beam->speed = 0.2f * distance;
beam->mindist = 0.2f * distance;
if (beam->mindist > 3000.0f) {
beam->mindist = 3000.0f;
}
beam->dist = (2.0f * RANDOMFRAC() - 1.0f) * beam->speed;
}
}
}
}
if (autogun->allowsoundframe < g_Vars.lvframe60) {
s32 soundgap = 2;
func0f0926bc(autogunprop, 1, 0xffff);
if (!friendly) {
s32 soundnum = SFX_806F;
if (autogun->base.modelnum == MODEL_CETROOFGUN) {
soundnum = SFX_MENU_ERROR;
}
if (autogun->base.modelnum == MODEL_CHRAUTOGUN) {
soundnum = SFX_8044;
soundgap = 4;
}
propsnd0f0939f8(NULL, autogunprop, soundnum, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
}
autogun->allowsoundframe = soundgap + g_Vars.lvframe60;
}
}
node1 = modelGetPart(model->filedata, MODELPART_AUTOGUN_FLASHLEFT);
if (node1) {
union modelrwdata *rwdata = modelGetNodeRwData(model, node1);
rwdata->chrgunfire.visible = fireleft;
}
node2 = modelGetPart(model->filedata, MODELPART_AUTOGUN_FLASHRIGHT);
if (node2) {
union modelrwdata *rwdata = modelGetNodeRwData(model, node2);
rwdata->chrgunfire.visible = fireright;
}
}
}
u32 var80069cc0 = 0x00000000;
void chopperInitMatrices(struct prop *prop)
{
struct chopperobj *chopper = (struct chopperobj *)prop->obj;
struct model *model = chopper->base.model;
Mtxf *matrices = model->matrices;
union modelrodata *rodata;
Mtxf spa8;
Mtxf sp68;
Mtxf sp28;
rodata = modelGetPartRodata(model->filedata, MODELPART_CHOPPER_0001);
mtx4LoadZRotation(M_BADTAU - chopper->gunrotx, &sp68);
mtx4LoadYRotation(chopper->gunroty + 1.5707963705063f, &sp28);
mtx00015be4(&sp28, &sp68, &spa8);
mtx4SetTranslation(&rodata->position.pos, &spa8);
mtx00015be4(matrices, &spa8, &matrices[1]);
rodata = modelGetPartRodata(model->filedata, MODELPART_CHOPPER_0002);
mtx4LoadXRotation(chopper->barrelrot, &spa8);
mtx4SetTranslation(&rodata->position.pos, &spa8);
mtx00015be4(&matrices[1], &spa8, &matrices[2]);
}
struct prop *chopperGetTargetProp(struct chopperobj *chopper)
{
if (chopper->target == -1) {
return g_Vars.currentplayer->prop;
}
return g_Vars.props + chopper->target;
}
struct chopperobj *chopperFromHovercar(struct chopperobj *chopper)
{
if (chopper->base.type == OBJTYPE_CHOPPER) {
return chopper;
}
return NULL;
}
bool chopperCheckTargetInFov(struct chopperobj *hovercar, u8 fov)
{
struct chopperobj *chopper = chopperFromHovercar(hovercar);
u8 visible = false;
if (chopper) {
f32 roty = chopper->roty;
struct prop *target = chopperGetTargetProp(chopper);
struct prop *prop = chopper->base.prop;
f32 angle = atan2f(prop->pos.x - target->pos.x, prop->pos.z - target->pos.z);
f32 anglediff = angle - roty;
if (angle < roty) {
anglediff += M_BADTAU;
}
visible = false;
// This logic looks wrong, but is actually correct. I think the fov is
// actually the not viewable area and starts at the back of the chopper,
// which makes sense because the chopper's windows go around the side.
if (!(anglediff < fov * 0.024539785459638f && anglediff < M_PI)
&& !(anglediff > M_BADTAU - fov * 0.024539785459638f && anglediff > M_PI)) {
visible = true;
}
chopper->targetvisible = visible;
}
return visible;
}
bool chopperCheckTargetInSight(struct chopperobj *obj)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
if (chopper) {
bool visible = false;
struct prop *target = chopperGetTargetProp(chopper);
if (target->type != PROPTYPE_PLAYER || g_Vars.bondvisible) {
visible = cdHasLineOfSight(&target->pos, target->rooms, &chopper->base.prop->pos, chopper->base.prop->rooms, 307, 16);
}
chopper->targetvisible = visible;
return visible;
}
return false;
}
void chopperSetTarget(struct chopperobj *obj, u32 chrnum)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
if (chopper) {
struct chrdata *chr = chrFindById(NULL, chrnum);
if (chr && chr->prop) {
chopper->target = chr->prop - g_Vars.props;
}
}
}
bool chopperAttack(struct chopperobj *obj)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
if (chopper) {
chopper->attackmode = CHOPPERMODE_COMBAT;
chopper->patroltimer60 = TICKS(240);
return true;
}
return false;
}
bool chopperStop(struct chopperobj *obj)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
if (chopper) {
chopper->attackmode = CHOPPERMODE_PATROL;
chopper->patroltimer60 = TICKS(120);
chopper->power = 0;
return true;
}
return false;
}
bool chopperSetArmed(struct chopperobj *obj, bool armed)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
if (chopper) {
chopper->weaponsarmed = armed;
return true;
}
return false;
}
void chopperRestartTimer(struct chopperobj *obj)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
if (chopper) {
chopper->timer60 = 0;
}
}
f32 chopperGetTimer(struct chopperobj *obj)
{
struct chopperobj *chopper = chopperFromHovercar(obj);
return chopper->timer60 * FRAMEDURATION;
}
void chopperSetMaxDamage(struct chopperobj *chopper, u16 health)
{
chopper->base.maxdamage = health;
}
f32 func0f07b164(struct coord *pos1, struct coord *pos2, struct coord *pos3, struct coord *result)
{
struct coord sp34;
struct coord sp28;
f32 tmp;
sp34.x = pos2->x - pos1->x;
sp34.y = pos2->y - pos1->y;
sp34.z = pos2->z - pos1->z;
sp28.x = pos3->x - pos1->x;
sp28.y = pos3->y - pos1->y;
sp28.z = pos3->z - pos1->z;
guNormalize(&sp34.x, &sp34.y, &sp34.z);
tmp = sp28.f[0] * sp34.f[0] + sp28.f[1] * sp34.f[1] + sp28.f[2] * sp34.f[2];
result->x = sp34.x * tmp + pos1->x;
result->y = sp34.y * tmp + pos1->y;
result->z = sp34.z * tmp + pos1->z;
return sp28.f[0] * sp28.f[0] + sp28.f[1] * sp28.f[1] + sp28.f[2] * sp28.f[2] - tmp * tmp;
}
void chopperFireRocket(struct chopperobj *chopper, bool side)
{
if (chopper->ontarget) {
struct coord direction;
struct coord pos;
struct prop *targetprop = chopperGetTargetProp(chopper);
struct prop *chopperprop = chopper->base.prop;
u32 stack;
Mtxf sp6c;
Mtxf sp2c;
pos.x = side ? -754 : 754;
pos.y = -400;
pos.z = -400;
mtx3ToMtx4(chopper->base.realrot, &sp2c);
mtx4LoadTranslation(&pos, &sp6c);
mtx4MultMtx4InPlace(&sp2c, &sp6c);
pos.x = sp6c.m[3][0] + chopperprop->pos.f[0];
pos.y = sp6c.m[3][1] + chopperprop->pos.f[1];
pos.z = sp6c.m[3][2] + chopperprop->pos.f[2];
direction.x = targetprop->pos.x - pos.x;
direction.y = targetprop->pos.y - pos.y + (s32)(random() % 100);
direction.z = targetprop->pos.z - pos.z;
guNormalize(&direction.x, &direction.y, &direction.z);
smokeCreateSimple(&pos, chopperprop->rooms, SMOKETYPE_3);
projectileCreate(chopperprop, 0, &pos, &direction, WEAPON_ROCKETLAUNCHER, targetprop);
}
}
void chopperIncrementBarrel(struct prop *chopperprop, bool firing)
{
struct defaultobj *obj = chopperprop->obj;
struct chopperobj *chopper = (struct chopperobj *)chopperprop->obj;
struct model *model = obj->model;
f32 angleh = 0.0f;
f32 anglev = 0.0f;
f32 speedmult = 1.0f;
struct coord rot;
struct coord gunpos;
f32 gunroty = chopper->gunroty;
f32 gunrotx = chopper->gunrotx;
f32 gunturnyspeed60 = chopper->gunturnyspeed60;
f32 gunturnxspeed60 = chopper->gunturnxspeed60;
struct prop *targetprop = chopperGetTargetProp(chopper);
struct modelnode *node;
struct modelrwdata_chrgunfire *rwdata = NULL;
struct modelrodata_position *rodata;
Mtxf sp90;
Mtxf sp50;
f32 gunaimy;
if (chopper->fireslotthing->unk00);
chopper->fireslotthing->unk01 = (chopper->fireslotthing->unk00 % 3) == 0;
if (firing) {
rodata = modelGetPartRodata(model->filedata, MODELPART_CHOPPER_0001);
gunaimy = targetprop->pos.y - 20.0f;
gunpos.x = random() * random() * 0 * 30.0f + rodata->pos.x;
gunpos.y = random() * 0 * 30.0f + (rodata->pos.y - 50.0f);
gunpos.z = rodata->pos.z + 250.0f;
if (obj->modelnum == MODEL_A51INTERCEPTOR) {
f32 scale = 0.1f / obj->model->scale;
gunpos.x *= scale;
gunpos.y *= scale;
gunpos.z *= scale;
}
mtx3ToMtx4(obj->realrot, &sp50);
mtx4LoadTranslation(&gunpos, &sp90);
mtx4MultMtx4InPlace(&sp50, &sp90);
gunpos.x = sp90.m[3][0] + chopperprop->pos.f[0];
gunpos.y = sp90.m[3][1] + chopperprop->pos.f[1];
gunpos.z = sp90.m[3][2] + chopperprop->pos.f[2];
angleh = atan2f(targetprop->pos.x - gunpos.x, targetprop->pos.z - gunpos.z);
if (angleh <= 0.0f) {
angleh += M_BADTAU;
}
if (angleh > M_BADTAU) {
angleh -= M_BADTAU;
}
angleh -= chopper->roty;
if (angleh > M_PI) {
angleh -= M_BADTAU;
}
if (angleh < -M_PI) {
angleh += M_BADTAU;
}
anglev = atan2f(gunaimy - gunpos.y, sqrtf((targetprop->pos.x - gunpos.x) * (targetprop->pos.x - gunpos.x) + (targetprop->pos.z - gunpos.z) * (targetprop->pos.z - gunpos.z))) - chopper->rotx + M_BADTAU;
if (anglev > M_PI) {
anglev -= M_BADTAU;
}
if (chopper->barrelrotspeed < 0.34906584f) {
chopper->barrelrotspeed += 0.017453292f * LVUPDATE240FREAL();
} else {
chopper->barrelrotspeed = 0.34906584f;
}
} else {
speedmult = 0.125f;
if (chopper->barrelrotspeed > 0.0f) {
chopper->barrelrotspeed -= 0.017453292f;
} else {
chopper->barrelrotspeed = 0.0f;
}
}
chopper->barrelrot += chopper->barrelrotspeed * LVUPDATE240FREAL();
#if PAL
applySpeed(&gunroty, angleh, &gunturnyspeed60, 0.0027920822612941f * speedmult, 0.0055841645225883f * speedmult, 0.16752494871616f * speedmult);
if (gunroty == angleh && gunturnyspeed60 <= 0.0055841645225883f * speedmult && -0.0055841645225883f * speedmult <= gunturnyspeed60) {
gunturnyspeed60 = 0.0f;
}
applySpeed(&gunrotx, anglev, &gunturnxspeed60, 0.0027920822612941f * speedmult, 0.0055841645225883f * speedmult, 0.16752494871616f * speedmult);
if (gunrotx == anglev && gunturnxspeed60 <= 0.0055841645225883f * speedmult && -0.0055841645225883f * speedmult <= gunturnxspeed60) {
gunturnxspeed60 = 0.0f;
}
#else
applySpeed(&gunroty, angleh, &gunturnyspeed60, 0.0023267353f * speedmult, 0.0046534706f * speedmult, 0.1396041f * speedmult);
if (gunroty == angleh && gunturnyspeed60 <= 0.0046534706f * speedmult && -0.0046534706f * speedmult <= gunturnyspeed60) {
gunturnyspeed60 = 0.0f;
}
applySpeed(&gunrotx, anglev, &gunturnxspeed60, 0.0023267353f * speedmult, 0.0046534706f * speedmult, 0.1396041f * speedmult);
if (gunrotx == anglev && gunturnxspeed60 <= 0.0046534706f * speedmult && -0.0046534706f * speedmult <= gunturnxspeed60) {
gunturnxspeed60 = 0.0f;
}
#endif
chopper->gunroty = gunroty;
chopper->gunrotx = gunrotx;
chopper->gunturnyspeed60 = gunturnyspeed60;
chopper->gunturnxspeed60 = gunturnxspeed60;
if (!(chopper->fireslotthing->unk00 % 2)) {
firing = false;
}
node = modelGetPart(model->filedata, MODELPART_CHOPPER_GUNFLASH);
if (node) {
rwdata = modelGetNodeRwData(model, node);
}
if (firing) {
f32 totalrotx = chopper->gunrotx + chopper->rotx;
f32 totalroty = chopper->gunroty + chopper->roty;
rot.x = sinf(totalroty) * cosf(totalrotx);
rot.y = sinf(totalrotx);
rot.z = cosf(totalroty) * cosf(totalrotx);
projectileCreate(chopperprop, chopper->fireslotthing, &gunpos, &rot, WEAPON_CHOPPERGUN, targetprop);
if (rwdata != NULL) {
rwdata->visible = true;
}
} else {
if (rwdata != NULL) {
rwdata->visible = false;
}
}
chopper->fireslotthing->unk00++;
}
void chopperIncrementMovement(struct prop *prop, f32 goalroty, f32 goalrotx, struct coord *dir, bool firing)
{
struct defaultobj *obj = prop->obj;
struct chopperobj *chopper = (struct chopperobj *)obj;
s16 newrooms[8];
struct coord newpos;
f32 curroty;
f32 currotx;
f32 currotz;
f32 turnyspeed;
f32 turnxspeed;
f32 rotmtx3[3][3];
f32 tmp;
f32 f2;
s32 i;
f32 speed;
s32 soundnum;
struct coord spfc;
Mtxf spbc;
Mtxf sp7c;
Mtxf sp3c;
f32 angle;
curroty = chopper->roty;
currotx = chopper->rotx;
currotz = chopper->rotz;
turnyspeed = chopper->turnyspeed60;
turnxspeed = chopper->turnxspeed60;
chopper->otx = dir->x;
chopper->oty = dir->y;
chopper->otz = dir->z;
dir->x *= chopper->power;
dir->y *= chopper->power;
dir->z *= chopper->power;
if (chopper->power < 3.7f) {
chopper->power += 0.030833334f * g_Vars.lvupdate240freal;
}
chopper->bob += 0.052359f;
if (chopper->bob > M_BADTAU) {
chopper->bob = 0.0f;
chopper->bobstrength = ((random() % 8) + 2) * 0.01f;
if (chopper->base.flags & OBJFLAG_CHOPPER_INACTIVE) {
chopper->bobstrength *= 0.15f;
}
}
dir->y += chopper->bobstrength * sinf(chopper->bob);
f2 = PAL ? 0.976f : 0.98f;
for (i = 1; i < g_Vars.lvupdate240_60; i++) {
f2 *= PAL ? 0.976f : 0.98f;
}
chopper->vx += dir->x;
chopper->vy += dir->y;
chopper->vz += dir->z;
chopper->vx *= f2;
chopper->vy *= f2;
chopper->vz *= f2;
if (chopper->attackmode != CHOPPERMODE_FALL) {
if (chopper->attackmode != CHOPPERMODE_PATROL || chopper->patroltimer60 > 0) {
speed = 5.0f;
} else {
speed = 8.0f;
}
tmp = chopper->vx * chopper->vx + chopper->vy * chopper->vy + chopper->vz * chopper->vz;
if (tmp > speed * speed) {
guNormalize(&chopper->vx, &chopper->vy, &chopper->vz);
chopper->vx *= speed;
chopper->vy *= speed;
chopper->vz *= speed;
}
}
if (goalrotx > M_PI && goalrotx < 5.8f) {
goalrotx = 5.8f;
}
#if PAL
applyRotation(&curroty, goalroty, &turnyspeed, 0.00026175772654824f, 0.00052351545309648f, 0.015705462545156f);
if (curroty == goalroty && turnyspeed <= 0.00052351545309648f && turnyspeed >= -0.00052351545309648f) {
turnyspeed = 0.0f;
}
applyRotation(&currotx, goalrotx, &turnxspeed, 0.00026175772654824, 0.00052351545309648f, 0.015705462545156f);
if (currotx == goalrotx && turnxspeed <= 0.00052351545309648f && turnxspeed >= -0.00052351545309648f) {
turnxspeed = 0.0f;
}
#else
applyRotation(&curroty, goalroty, &turnyspeed, 0.00021813141938765f, 0.00043626284f, 0.013087885f);
if (curroty == goalroty && turnyspeed <= 0.00043626284f && turnyspeed >= -0.00043626284f) {
turnyspeed = 0.0f;
}
applyRotation(&currotx, goalrotx, &turnxspeed, 0.00021813141938765f, 0.00043626284f, 0.013087885f);
if (currotx == goalrotx && turnxspeed <= 0.00043626284f && turnxspeed >= -0.00043626284f) {
turnxspeed = 0.0f;
}
#endif
currotz += (-turnyspeed * 40.0f - currotz) * 0.1f;
spfc.x = M_BADTAU - currotx;
spfc.y = curroty;
spfc.z = 0.0f;
if (currotz >= 0) {
mtx4LoadZRotation(currotz, &sp3c);
} else {
mtx4LoadZRotation(currotz + M_BADTAU, &sp3c);
}
mtx4LoadRotation(&spfc, &sp7c);
mtx00015f04(chopper->base.model->scale, &sp7c);
mtx4MultMtx4(&sp7c, &sp3c, &spbc);
mtx4ToMtx3(&spbc, rotmtx3);
mtx3Copy(rotmtx3, chopper->base.realrot);
if (chopper->power > 0.45f && !firing && (chopper->base.flags2 & OBJFLAG2_INVISIBLE) == 0 && objIsHealthy(&chopper->base)) {
soundnum = g_Vars.stagenum == STAGE_EXTRACTION ? SFX_810D : SFX_8110;
propsnd0f09294c(prop, soundnum, 6);
} else {
func0f0926bc(prop, 6, 0xffff);
}
chopper->roty = curroty;
chopper->rotx = currotx;
chopper->rotz = currotz;
chopper->turnyspeed60 = turnyspeed;
chopper->turnxspeed60 = turnxspeed;
if (goalroty < curroty) {
angle = curroty - goalroty;
} else {
angle = -(curroty - goalroty);
}
chopper->ontarget = angle < 0.1745f;
newpos.x = prop->pos.x + chopper->vx * g_Vars.lvupdate240freal;
newpos.y = prop->pos.y + chopper->vy * g_Vars.lvupdate240freal;
newpos.z = prop->pos.z + chopper->vz * g_Vars.lvupdate240freal;
func0f065e74(&prop->pos, prop->rooms, &newpos, newrooms);
prop->pos.x = newpos.x;
prop->pos.y = newpos.y;
prop->pos.z = newpos.z;
propDeregisterRooms(prop);
roomsCopy(newrooms, prop->rooms);
func0f069c70(&chopper->base, false, true);
chopperIncrementBarrel(prop, firing);
if ((chopper->base.flags2 & OBJFLAG2_INVISIBLE) == 0 && objIsHealthy(&chopper->base)) {
soundnum = g_Vars.stagenum == STAGE_EXTRACTION ? SFX_SHIP_HUM : SFX_810F;
propsnd0f09294c(prop, soundnum, 5);
} else {
func0f0926bc(prop, 5, 0xffff);
}
}
#if VERSION >= VERSION_PAL_FINAL
const char var7f1aa044[] = "prop/propobj.c";
#else
const char var7f1aa044[] = "propobj.c";
#endif
const char var7f1aa050[] = "HC: %x - visible\n";
#if VERSION >= VERSION_JPN_FINAL
GLOBAL_ASM(
glabel chopperTickFall
.late_rodata
glabel var7f1aa66c
.word 0xbf333333
glabel var7f1aa670
.word 0x3c1374bc
glabel var7f1aa674
.word 0xc6ea6000
glabel var7f1aa678
.word 0x40490fdb
glabel var7f1aa67c
.word 0xc0490fdb
glabel var7f1aa680
.word 0x3f7ae148
glabel var7f1aa684
.word 0x3d567664
glabel var7f1aa688
.word 0x40c907a9
glabel var7f1aa68c
.word 0x3c23d70a
glabel var7f1aa690
.word 0x3e19999a
glabel var7f1aa694
.word 0x40490fdb
glabel var7f1aa698
.word 0xc0490fdb
.text
/* f07c12c: 27bdfe80 */ addiu $sp,$sp,-384
/* f07c130: afbf0034 */ sw $ra,0x34($sp)
/* f07c134: afb10030 */ sw $s1,0x30($sp)
/* f07c138: afb0002c */ sw $s0,0x2c($sp)
/* f07c13c: 8c900004 */ lw $s0,0x4($a0)
/* f07c140: 24010002 */ addiu $at,$zero,0x2
/* f07c144: 00808825 */ or $s1,$a0,$zero
/* f07c148: 8e0300c0 */ lw $v1,0xc0($s0)
/* f07c14c: 3c0e800a */ lui $t6,%hi(g_Vars+0x38)
/* f07c150: 02002825 */ or $a1,$s0,$zero
/* f07c154: 14610078 */ bne $v1,$at,.L0f07c338
/* f07c158: 00000000 */ nop
/* f07c15c: 8dce9ff8 */ lw $t6,%lo(g_Vars+0x38)($t6)
/* f07c160: 8e080088 */ lw $t0,0x88($s0)
/* f07c164: 44801000 */ mtc1 $zero,$f2
/* f07c168: 44807000 */ mtc1 $zero,$f14
/* f07c16c: 006e7823 */ subu $t7,$v1,$t6
/* f07c170: 1100006a */ beqz $t0,.L0f07c31c
/* f07c174: ae0f00c0 */ sw $t7,0xc0($s0)
/* f07c178: 95070006 */ lhu $a3,0x6($t0)
/* f07c17c: 00001825 */ or $v1,$zero,$zero
/* f07c180: 58e0001c */ blezl $a3,.L0f07c1f4
/* f07c184: 920a0097 */ lbu $t2,0x97($s0)
/* f07c188: 92040097 */ lbu $a0,0x97($s0)
/* f07c18c: 8e06008c */ lw $a2,0x8c($s0)
.L0f07c190:
/* f07c190: 50800004 */ beqzl $a0,.L0f07c1a4
/* f07c194: 24780001 */ addiu $t8,$v1,0x1
/* f07c198: 1000000d */ b .L0f07c1d0
/* f07c19c: 00601025 */ or $v0,$v1,$zero
/* f07c1a0: 24780001 */ addiu $t8,$v1,0x1
.L0f07c1a4:
/* f07c1a4: 0307001a */ div $zero,$t8,$a3
/* f07c1a8: 00001010 */ mfhi $v0
/* f07c1ac: 14e00002 */ bnez $a3,.L0f07c1b8
/* f07c1b0: 00000000 */ nop
/* f07c1b4: 0007000d */ break 0x7
.L0f07c1b8:
/* f07c1b8: 2401ffff */ addiu $at,$zero,-1
/* f07c1bc: 14e10004 */ bne $a3,$at,.L0f07c1d0
/* f07c1c0: 3c018000 */ lui $at,0x8000
/* f07c1c4: 17010002 */ bne $t8,$at,.L0f07c1d0
/* f07c1c8: 00000000 */ nop
/* f07c1cc: 0006000d */ break 0x6
.L0f07c1d0:
/* f07c1d0: 50460008 */ beql $v0,$a2,.L0f07c1f4
/* f07c1d4: 920a0097 */ lbu $t2,0x97($s0)
/* f07c1d8: 8cb90088 */ lw $t9,0x88($a1)
/* f07c1dc: 24630001 */ addiu $v1,$v1,0x1
/* f07c1e0: 97290006 */ lhu $t1,0x6($t9)
/* f07c1e4: 0069082a */ slt $at,$v1,$t1
/* f07c1e8: 1420ffe9 */ bnez $at,.L0f07c190
/* f07c1ec: 00000000 */ nop
/* f07c1f0: 920a0097 */ lbu $t2,0x97($s0)
.L0f07c1f4:
/* f07c1f4: 24050002 */ addiu $a1,$zero,0x2
/* f07c1f8: 246b0001 */ addiu $t3,$v1,0x1
/* f07c1fc: 5140000f */ beqzl $t2,.L0f07c23c
/* f07c200: 00601025 */ or $v0,$v1,$zero
/* f07c204: 0167001a */ div $zero,$t3,$a3
/* f07c208: 00001010 */ mfhi $v0
/* f07c20c: 14e00002 */ bnez $a3,.L0f07c218
/* f07c210: 00000000 */ nop
/* f07c214: 0007000d */ break 0x7
.L0f07c218:
/* f07c218: 2401ffff */ addiu $at,$zero,-1
/* f07c21c: 14e10004 */ bne $a3,$at,.L0f07c230
/* f07c220: 3c018000 */ lui $at,0x8000
/* f07c224: 15610002 */ bne $t3,$at,.L0f07c230
/* f07c228: 00000000 */ nop
/* f07c22c: 0006000d */ break 0x6
.L0f07c230:
/* f07c230: 10000003 */ b .L0f07c240
/* f07c234: 8d0c0000 */ lw $t4,0x0($t0)
/* f07c238: 00601025 */ or $v0,$v1,$zero
.L0f07c23c:
/* f07c23c: 8d0c0000 */ lw $t4,0x0($t0)
.L0f07c240:
/* f07c240: 00026880 */ sll $t5,$v0,0x2
/* f07c244: 27a60104 */ addiu $a2,$sp,0x104
/* f07c248: 018d7021 */ addu $t6,$t4,$t5
/* f07c24c: 8dc40000 */ lw $a0,0x0($t6)
/* f07c250: 0fc456ac */ jal padUnpack
/* f07c254: afa30158 */ sw $v1,0x158($sp)
/* f07c258: 920f0097 */ lbu $t7,0x97($s0)
/* f07c25c: 8fa30158 */ lw $v1,0x158($sp)
/* f07c260: 24050002 */ addiu $a1,$zero,0x2
/* f07c264: 51e00005 */ beqzl $t7,.L0f07c27c
/* f07c268: 8e080088 */ lw $t0,0x88($s0)
/* f07c26c: 00601025 */ or $v0,$v1,$zero
/* f07c270: 1000000f */ b .L0f07c2b0
/* f07c274: 8e080088 */ lw $t0,0x88($s0)
/* f07c278: 8e080088 */ lw $t0,0x88($s0)
.L0f07c27c:
/* f07c27c: 24780001 */ addiu $t8,$v1,0x1
/* f07c280: 95190006 */ lhu $t9,0x6($t0)
/* f07c284: 0319001a */ div $zero,$t8,$t9
/* f07c288: 00001010 */ mfhi $v0
/* f07c28c: 17200002 */ bnez $t9,.L0f07c298
/* f07c290: 00000000 */ nop
/* f07c294: 0007000d */ break 0x7
.L0f07c298:
/* f07c298: 2401ffff */ addiu $at,$zero,-1
/* f07c29c: 17210004 */ bne $t9,$at,.L0f07c2b0
/* f07c2a0: 3c018000 */ lui $at,0x8000
/* f07c2a4: 17010002 */ bne $t8,$at,.L0f07c2b0
/* f07c2a8: 00000000 */ nop
/* f07c2ac: 0006000d */ break 0x6
.L0f07c2b0:
/* f07c2b0: 8d090000 */ lw $t1,0x0($t0)
/* f07c2b4: 00025080 */ sll $t2,$v0,0x2
/* f07c2b8: 27a600b0 */ addiu $a2,$sp,0xb0
/* f07c2bc: 012a5821 */ addu $t3,$t1,$t2
/* f07c2c0: 0fc456ac */ jal padUnpack
/* f07c2c4: 8d640000 */ lw $a0,0x0($t3)
/* f07c2c8: c7a40104 */ lwc1 $f4,0x104($sp)
/* f07c2cc: c7a600b0 */ lwc1 $f6,0xb0($sp)
/* f07c2d0: c7a8010c */ lwc1 $f8,0x10c($sp)
/* f07c2d4: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f07c2d8: 46062081 */ sub.s $f2,$f4,$f6
/* f07c2dc: 460a4381 */ sub.s $f14,$f8,$f10
/* f07c2e0: 46021402 */ mul.s $f16,$f2,$f2
/* f07c2e4: e7a200ac */ swc1 $f2,0xac($sp)
/* f07c2e8: 460e7482 */ mul.s $f18,$f14,$f14
/* f07c2ec: e7ae00a8 */ swc1 $f14,0xa8($sp)
/* f07c2f0: 0c012974 */ jal sqrtf
/* f07c2f4: 46128300 */ add.s $f12,$f16,$f18
/* f07c2f8: 3c013e80 */ lui $at,0x3e80
/* f07c2fc: 44812000 */ mtc1 $at,$f4
/* f07c300: c7a200ac */ lwc1 $f2,0xac($sp)
/* f07c304: c7ae00a8 */ lwc1 $f14,0xa8($sp)
/* f07c308: 46002303 */ div.s $f12,$f4,$f0
/* f07c30c: 460c1082 */ mul.s $f2,$f2,$f12
/* f07c310: 00000000 */ nop
/* f07c314: 460c7382 */ mul.s $f14,$f14,$f12
/* f07c318: 00000000 */ nop
.L0f07c31c:
/* f07c31c: 44804000 */ mtc1 $zero,$f8
/* f07c320: 46007187 */ neg.s $f6,$f14
/* f07c324: 26020068 */ addiu $v0,$s0,0x68
/* f07c328: e6060064 */ swc1 $f6,0x64($s0)
/* f07c32c: e4480000 */ swc1 $f8,0x0($v0)
/* f07c330: 10000017 */ b .L0f07c390
/* f07c334: e602006c */ swc1 $f2,0x6c($s0)
.L0f07c338:
/* f07c338: 04600007 */ bltz $v1,.L0f07c358
/* f07c33c: 26020068 */ addiu $v0,$s0,0x68
/* f07c340: 3c0c800a */ lui $t4,%hi(g_Vars+0x38)
/* f07c344: 8d8c9ff8 */ lw $t4,%lo(g_Vars+0x38)($t4)
/* f07c348: 26020068 */ addiu $v0,$s0,0x68
/* f07c34c: 006c6823 */ subu $t5,$v1,$t4
/* f07c350: 1000000f */ b .L0f07c390
/* f07c354: ae0d00c0 */ sw $t5,0xc0($s0)
.L0f07c358:
/* f07c358: 3c017f1b */ lui $at,%hi(var7f1aa66c)
/* f07c35c: c42aa66c */ lwc1 $f10,%lo(var7f1aa66c)($at)
/* f07c360: c4400000 */ lwc1 $f0,0x0($v0)
/* f07c364: 3c017f1b */ lui $at,%hi(var7f1aa670)
/* f07c368: 4600503c */ c.lt.s $f10,$f0
/* f07c36c: 00000000 */ nop
/* f07c370: 45020008 */ bc1fl .L0f07c394
/* f07c374: 26030064 */ addiu $v1,$s0,0x64
/* f07c378: c430a670 */ lwc1 $f16,%lo(var7f1aa670)($at)
/* f07c37c: 3c01800a */ lui $at,%hi(g_Vars+0x44)
/* f07c380: c432a004 */ lwc1 $f18,%lo(g_Vars+0x44)($at)
/* f07c384: 46128102 */ mul.s $f4,$f16,$f18
/* f07c388: 46040181 */ sub.s $f6,$f0,$f4
/* f07c38c: e4460000 */ swc1 $f6,0x0($v0)
.L0f07c390:
/* f07c390: 26030064 */ addiu $v1,$s0,0x64
.L0f07c394:
/* f07c394: c4680000 */ lwc1 $f8,0x0($v1)
/* f07c398: 2605006c */ addiu $a1,$s0,0x6c
/* f07c39c: 3c04800a */ lui $a0,%hi(g_Vars+0x4b4)
/* f07c3a0: e7a8015c */ swc1 $f8,0x15c($sp)
/* f07c3a4: c44a0000 */ lwc1 $f10,0x0($v0)
/* f07c3a8: 8c84a474 */ lw $a0,%lo(g_Vars+0x4b4)($a0)
/* f07c3ac: e7aa0160 */ swc1 $f10,0x160($sp)
/* f07c3b0: c4b00000 */ lwc1 $f16,0x0($a1)
/* f07c3b4: e7b00164 */ swc1 $f16,0x164($sp)
/* f07c3b8: c4640000 */ lwc1 $f4,0x0($v1)
/* f07c3bc: c612007c */ lwc1 $f18,0x7c($s0)
/* f07c3c0: c4a80000 */ lwc1 $f8,0x0($a1)
/* f07c3c4: 46049180 */ add.s $f6,$f18,$f4
/* f07c3c8: 46064280 */ add.s $f10,$f8,$f6
/* f07c3cc: 0fc59585 */ jal stageGetIndex
/* f07c3d0: e7aa0174 */ swc1 $f10,0x174($sp)
/* f07c3d4: 2401000e */ addiu $at,$zero,0xe
/* f07c3d8: 14410022 */ bne $v0,$at,.L0f07c464
/* f07c3dc: 3c03800a */ lui $v1,%hi(g_Vars+0x38)
/* f07c3e0: 3c017f1b */ lui $at,%hi(var7f1aa674)
/* f07c3e4: c432a674 */ lwc1 $f18,%lo(var7f1aa674)($at)
/* f07c3e8: c630000c */ lwc1 $f16,0xc($s1)
/* f07c3ec: 3406ffff */ dli $a2,0xffff
/* f07c3f0: 02202025 */ or $a0,$s1,$zero
/* f07c3f4: 4612803c */ c.lt.s $f16,$f18
/* f07c3f8: 8fa50174 */ lw $a1,0x174($sp)
/* f07c3fc: 27a7015c */ addiu $a3,$sp,0x15c
/* f07c400: 45020009 */ bc1fl .L0f07c428
/* f07c404: c6040080 */ lwc1 $f4,0x80($s0)
/* f07c408: 02202025 */ or $a0,$s1,$zero
/* f07c40c: 0fc249af */ jal func0f0926bc
/* f07c410: 24050001 */ addiu $a1,$zero,0x1
/* f07c414: 8e0e0040 */ lw $t6,0x40($s0)
/* f07c418: 35cf0004 */ ori $t7,$t6,0x4
/* f07c41c: 100000df */ b .L0f07c79c
/* f07c420: ae0f0040 */ sw $t7,0x40($s0)
/* f07c424: c6040080 */ lwc1 $f4,0x80($s0)
.L0f07c428:
/* f07c428: 44804000 */ mtc1 $zero,$f8
/* f07c42c: 3c017f1b */ lui $at,%hi(var7f1aa678)
/* f07c430: 4608203c */ c.lt.s $f4,$f8
/* f07c434: 00000000 */ nop
/* f07c438: 45000004 */ bc1f .L0f07c44c
/* f07c43c: 00000000 */ nop
/* f07c440: 3c017f1b */ lui $at,%hi(var7f1aa67c)
/* f07c444: 10000002 */ b .L0f07c450
/* f07c448: c420a678 */ lwc1 $f0,%lo(var7f1aa678)($at)
.L0f07c44c:
/* f07c44c: c420a67c */ lwc1 $f0,%lo(var7f1aa67c)($at)
.L0f07c450:
/* f07c450: 44060000 */ mfc1 $a2,$f0
/* f07c454: 0fc1ee8e */ jal chopperIncrementMovement
/* f07c458: afa00010 */ sw $zero,0x10($sp)
/* f07c45c: 100000d0 */ b .L0f07c7a0
/* f07c460: 8fbf0034 */ lw $ra,0x34($sp)
.L0f07c464:
/* f07c464: 8c639ff8 */ lw $v1,%lo(g_Vars+0x38)($v1)
/* f07c468: 3c017f1b */ lui $at,%hi(var7f1aa680)
/* f07c46c: c420a680 */ lwc1 $f0,%lo(var7f1aa680)($at)
/* f07c470: 28610002 */ slti $at,$v1,0x2
/* f07c474: 24020001 */ addiu $v0,$zero,0x1
/* f07c478: 14200006 */ bnez $at,.L0f07c494
/* f07c47c: 46000086 */ mov.s $f2,$f0
/* f07c480: 24420001 */ addiu $v0,$v0,0x1
.L0f07c484:
/* f07c484: 0043082a */ slt $at,$v0,$v1
/* f07c488: 46001082 */ mul.s $f2,$f2,$f0
/* f07c48c: 5420fffd */ bnezl $at,.L0f07c484
/* f07c490: 24420001 */ addiu $v0,$v0,0x1
.L0f07c494:
/* f07c494: 3c017f1b */ lui $at,%hi(var7f1aa684)
/* f07c498: c42aa684 */ lwc1 $f10,%lo(var7f1aa684)($at)
/* f07c49c: c60600b4 */ lwc1 $f6,0xb4($s0)
/* f07c4a0: 3c017f1b */ lui $at,%hi(var7f1aa688)
/* f07c4a4: c430a688 */ lwc1 $f16,%lo(var7f1aa688)($at)
/* f07c4a8: 460a3300 */ add.s $f12,$f6,$f10
/* f07c4ac: 460c803c */ c.lt.s $f16,$f12
/* f07c4b0: 00000000 */ nop
/* f07c4b4: 4500001c */ bc1f .L0f07c528
/* f07c4b8: 00000000 */ nop
/* f07c4bc: 44806000 */ mtc1 $zero,$f12
/* f07c4c0: e7a20088 */ swc1 $f2,0x88($sp)
/* f07c4c4: 0c004b70 */ jal random
/* f07c4c8: e7ac0084 */ swc1 $f12,0x84($sp)
/* f07c4cc: 30580007 */ andi $t8,$v0,0x7
/* f07c4d0: 27190002 */ addiu $t9,$t8,0x2
/* f07c4d4: 44999000 */ mtc1 $t9,$f18
/* f07c4d8: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07c4dc: c7ac0084 */ lwc1 $f12,0x84($sp)
/* f07c4e0: 07210005 */ bgez $t9,.L0f07c4f8
/* f07c4e4: 46809120 */ cvt.s.w $f4,$f18
/* f07c4e8: 3c014f80 */ lui $at,0x4f80
/* f07c4ec: 44814000 */ mtc1 $at,$f8
/* f07c4f0: 00000000 */ nop
/* f07c4f4: 46082100 */ add.s $f4,$f4,$f8
.L0f07c4f8:
/* f07c4f8: 3c017f1b */ lui $at,%hi(var7f1aa68c)
/* f07c4fc: c426a68c */ lwc1 $f6,%lo(var7f1aa68c)($at)
/* f07c500: 8e090008 */ lw $t1,0x8($s0)
/* f07c504: 3c017f1b */ lui $at,%hi(var7f1aa690)
/* f07c508: 46062282 */ mul.s $f10,$f4,$f6
/* f07c50c: 00095000 */ sll $t2,$t1,0x0
/* f07c510: 05410005 */ bgez $t2,.L0f07c528
/* f07c514: e60a00b8 */ swc1 $f10,0xb8($s0)
/* f07c518: c61000b8 */ lwc1 $f16,0xb8($s0)
/* f07c51c: c432a690 */ lwc1 $f18,%lo(var7f1aa690)($at)
/* f07c520: 46128202 */ mul.s $f8,$f16,$f18
/* f07c524: e60800b8 */ swc1 $f8,0xb8($s0)
.L0f07c528:
/* f07c528: 0c0068f7 */ jal sinf
/* f07c52c: e7a20088 */ swc1 $f2,0x88($sp)
/* f07c530: c60600b8 */ lwc1 $f6,0xb8($s0)
/* f07c534: c7a40160 */ lwc1 $f4,0x160($sp)
/* f07c538: c7b2015c */ lwc1 $f18,0x15c($sp)
/* f07c53c: 46003282 */ mul.s $f10,$f6,$f0
/* f07c540: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07c544: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07c548: c42ca00c */ lwc1 $f12,%lo(g_Vars+0x4c)($at)
/* f07c54c: 26240008 */ addiu $a0,$s1,0x8
/* f07c550: 26250028 */ addiu $a1,$s1,0x28
/* f07c554: 27a60098 */ addiu $a2,$sp,0x98
/* f07c558: 460a2400 */ add.s $f16,$f4,$f10
/* f07c55c: 24070020 */ addiu $a3,$zero,0x20
/* f07c560: e7b00160 */ swc1 $f16,0x160($sp)
/* f07c564: c60800a4 */ lwc1 $f8,0xa4($s0)
/* f07c568: c6040098 */ lwc1 $f4,0x98($s0)
/* f07c56c: 46089182 */ mul.s $f6,$f18,$f8
/* f07c570: 46043280 */ add.s $f10,$f6,$f4
/* f07c574: 46025482 */ mul.s $f18,$f10,$f2
/* f07c578: e7b2008c */ swc1 $f18,0x8c($sp)
/* f07c57c: c60800a4 */ lwc1 $f8,0xa4($s0)
/* f07c580: c604009c */ lwc1 $f4,0x9c($s0)
/* f07c584: 46088182 */ mul.s $f6,$f16,$f8
/* f07c588: c7a80164 */ lwc1 $f8,0x164($sp)
/* f07c58c: 46043280 */ add.s $f10,$f6,$f4
/* f07c590: 46025402 */ mul.s $f16,$f10,$f2
/* f07c594: e7b00090 */ swc1 $f16,0x90($sp)
/* f07c598: c60600a4 */ lwc1 $f6,0xa4($s0)
/* f07c59c: c60a00a0 */ lwc1 $f10,0xa0($s0)
/* f07c5a0: 46064102 */ mul.s $f4,$f8,$f6
/* f07c5a4: 460a2200 */ add.s $f8,$f4,$f10
/* f07c5a8: 46024182 */ mul.s $f6,$f8,$f2
/* f07c5ac: e7a60094 */ swc1 $f6,0x94($sp)
/* f07c5b0: 460c9102 */ mul.s $f4,$f18,$f12
/* f07c5b4: c62a0008 */ lwc1 $f10,0x8($s1)
/* f07c5b8: 460c8482 */ mul.s $f18,$f16,$f12
/* f07c5bc: 460a2200 */ add.s $f8,$f4,$f10
/* f07c5c0: e7a80098 */ swc1 $f8,0x98($sp)
/* f07c5c4: c624000c */ lwc1 $f4,0xc($s1)
/* f07c5c8: 460c3202 */ mul.s $f8,$f6,$f12
/* f07c5cc: 46049280 */ add.s $f10,$f18,$f4
/* f07c5d0: e7aa009c */ swc1 $f10,0x9c($sp)
/* f07c5d4: c6300010 */ lwc1 $f16,0x10($s1)
/* f07c5d8: afa50040 */ sw $a1,0x40($sp)
/* f07c5dc: afa40044 */ sw $a0,0x44($sp)
/* f07c5e0: 46104480 */ add.s $f18,$f8,$f16
/* f07c5e4: 0c00b784 */ jal cd0002de10
/* f07c5e8: e7b200a0 */ swc1 $f18,0xa0($sp)
/* f07c5ec: 14400058 */ bnez $v0,.L0f07c750
/* f07c5f0: 8fa40044 */ lw $a0,0x44($sp)
/* f07c5f4: 3c0142c8 */ lui $at,0x42c8
/* f07c5f8: 44815000 */ mtc1 $at,$f10
/* f07c5fc: c624000c */ lwc1 $f4,0xc($s1)
/* f07c600: 3c0540a0 */ lui $a1,0x40a0
/* f07c604: 00003825 */ or $a3,$zero,$zero
/* f07c608: 460a2180 */ add.s $f6,$f4,$f10
/* f07c60c: e626000c */ swc1 $f6,0xc($s1)
/* f07c610: afa00010 */ sw $zero,0x10($sp)
/* f07c614: 8fa60040 */ lw $a2,0x40($sp)
/* f07c618: 0c00a8cc */ jal cdFindGroundYSimple
/* f07c61c: 8fa40044 */ lw $a0,0x44($sp)
/* f07c620: e7a00060 */ swc1 $f0,0x60($sp)
/* f07c624: 3c0142c8 */ lui $at,0x42c8
/* f07c628: 44818000 */ mtc1 $at,$f16
/* f07c62c: c628000c */ lwc1 $f8,0xc($s1)
/* f07c630: 3c067f1b */ lui $a2,%hi(var7f1aa044)
/* f07c634: 24c6a044 */ addiu $a2,$a2,%lo(var7f1aa044)
/* f07c638: 46104481 */ sub.s $f18,$f8,$f16
/* f07c63c: 27a40064 */ addiu $a0,$sp,0x64
/* f07c640: 240530a1 */ addiu $a1,$zero,0x30bc
/* f07c644: 0c0093af */ jal cdGetPos
/* f07c648: e632000c */ swc1 $f18,0xc($s1)
/* f07c64c: 3c0141a0 */ lui $at,0x41a0
/* f07c650: 44813000 */ mtc1 $at,$f6
/* f07c654: c7aa0060 */ lwc1 $f10,0x60($sp)
/* f07c658: c7a40064 */ lwc1 $f4,0x64($sp)
/* f07c65c: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f07c660: 46065200 */ add.s $f8,$f10,$f6
/* f07c664: 8fa40044 */ lw $a0,0x44($sp)
/* f07c668: 8fa50040 */ lw $a1,0x40($sp)
/* f07c66c: 27a60098 */ addiu $a2,$sp,0x98
/* f07c670: e7a8009c */ swc1 $f8,0x9c($sp)
/* f07c674: 27a70050 */ addiu $a3,$sp,0x50
/* f07c678: e7a40098 */ swc1 $f4,0x98($sp)
/* f07c67c: 0fc1979d */ jal func0f065e74
/* f07c680: e7b000a0 */ swc1 $f16,0xa0($sp)
/* f07c684: c7b20098 */ lwc1 $f18,0x98($sp)
/* f07c688: 02202025 */ or $a0,$s1,$zero
/* f07c68c: e6320008 */ swc1 $f18,0x8($s1)
/* f07c690: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f07c694: e624000c */ swc1 $f4,0xc($s1)
/* f07c698: c7aa00a0 */ lwc1 $f10,0xa0($sp)
/* f07c69c: 0fc19711 */ jal propDeregisterRooms
/* f07c6a0: e62a0010 */ swc1 $f10,0x10($s1)
/* f07c6a4: 27a40050 */ addiu $a0,$sp,0x50
/* f07c6a8: 0fc195e9 */ jal roomsCopy
/* f07c6ac: 8fa50040 */ lw $a1,0x40($sp)
/* f07c6b0: 02002025 */ or $a0,$s0,$zero
/* f07c6b4: 00002825 */ or $a1,$zero,$zero
/* f07c6b8: 0fc1a71c */ jal func0f069c70
/* f07c6bc: 24060001 */ addiu $a2,$zero,0x1
/* f07c6c0: 920b0096 */ lbu $t3,0x96($s0)
/* f07c6c4: 02002025 */ or $a0,$s0,$zero
/* f07c6c8: 24050008 */ addiu $a1,$zero,0x8
/* f07c6cc: 256c0001 */ addiu $t4,$t3,0x1
/* f07c6d0: 0fc20733 */ jal objDeform
/* f07c6d4: a20c0096 */ sb $t4,0x96($s0)
/* f07c6d8: 862d0028 */ lh $t5,0x28($s1)
/* f07c6dc: 3c013f80 */ lui $at,0x3f80
/* f07c6e0: 44803000 */ mtc1 $zero,$f6
/* f07c6e4: 44814000 */ mtc1 $at,$f8
/* f07c6e8: 44808000 */ mtc1 $zero,$f16
/* f07c6ec: 02202025 */ or $a0,$s1,$zero
/* f07c6f0: 24050001 */ addiu $a1,$zero,0x1
/* f07c6f4: 3406ffff */ dli $a2,0xffff
/* f07c6f8: a7ad0072 */ sh $t5,0x72($sp)
/* f07c6fc: e7a60074 */ swc1 $f6,0x74($sp)
/* f07c700: e7a80078 */ swc1 $f8,0x78($sp)
/* f07c704: 0fc249af */ jal func0f0926bc
/* f07c708: e7b0007c */ swc1 $f16,0x7c($sp)
/* f07c70c: 87b80072 */ lh $t8,0x72($sp)
/* f07c710: 240e0001 */ addiu $t6,$zero,0x1
/* f07c714: 27af0098 */ addiu $t7,$sp,0x98
/* f07c718: 27b90074 */ addiu $t9,$sp,0x74
/* f07c71c: afb90020 */ sw $t9,0x20($sp)
/* f07c720: afaf0018 */ sw $t7,0x18($sp)
/* f07c724: afae0014 */ sw $t6,0x14($sp)
/* f07c728: 00002025 */ or $a0,$zero,$zero
/* f07c72c: 8fa50044 */ lw $a1,0x44($sp)
/* f07c730: 8fa60040 */ lw $a2,0x40($sp)
/* f07c734: 2407000d */ addiu $a3,$zero,0xd
/* f07c738: afa00010 */ sw $zero,0x10($sp)
/* f07c73c: 0fc4a7d5 */ jal explosionCreate
/* f07c740: afb8001c */ sw $t8,0x1c($sp)
/* f07c744: 24090001 */ addiu $t1,$zero,0x1
/* f07c748: 10000014 */ b .L0f07c79c
/* f07c74c: ae0900e4 */ sw $t1,0xe4($s0)
.L0f07c750:
/* f07c750: 8fa50040 */ lw $a1,0x40($sp)
/* f07c754: 0fc4ba08 */ jal smokeCreateSimple
/* f07c758: 24060003 */ addiu $a2,$zero,0x3
/* f07c75c: c6120080 */ lwc1 $f18,0x80($s0)
/* f07c760: 44802000 */ mtc1 $zero,$f4
/* f07c764: 02202025 */ or $a0,$s1,$zero
/* f07c768: 8fa50174 */ lw $a1,0x174($sp)
/* f07c76c: 4604903c */ c.lt.s $f18,$f4
/* f07c770: 27a7015c */ addiu $a3,$sp,0x15c
/* f07c774: 3c017f1b */ lui $at,%hi(var7f1aa694)
/* f07c778: 45000004 */ bc1f .L0f07c78c
/* f07c77c: 00000000 */ nop
/* f07c780: 3c017f1b */ lui $at,%hi(var7f1aa698)
/* f07c784: 10000002 */ b .L0f07c790
/* f07c788: c420a694 */ lwc1 $f0,%lo(var7f1aa694)($at)
.L0f07c78c:
/* f07c78c: c420a698 */ lwc1 $f0,%lo(var7f1aa698)($at)
.L0f07c790:
/* f07c790: 44060000 */ mfc1 $a2,$f0
/* f07c794: 0fc1ee8e */ jal chopperIncrementMovement
/* f07c798: afa00010 */ sw $zero,0x10($sp)
.L0f07c79c:
/* f07c79c: 8fbf0034 */ lw $ra,0x34($sp)
.L0f07c7a0:
/* f07c7a0: 8fb0002c */ lw $s0,0x2c($sp)
/* f07c7a4: 8fb10030 */ lw $s1,0x30($sp)
/* f07c7a8: 03e00008 */ jr $ra
/* f07c7ac: 27bd0180 */ addiu $sp,$sp,0x180
);
#elif PAL
GLOBAL_ASM(
glabel chopperTickFall
.late_rodata
glabel var7f1aa66c
.word 0xbf333333
glabel var7f1aa670
.word 0x3c1374bc
glabel var7f1aa674
.word 0xc6ea6000
glabel var7f1aa678
.word 0x40490fdb
glabel var7f1aa67c
.word 0xc0490fdb
glabel var7f1aa680
.word 0x3f79db23
glabel var7f1aa684
.word 0x3d567664
glabel var7f1aa688
.word 0x40c907a9
glabel var7f1aa68c
.word 0x3c23d70a
glabel var7f1aa690
.word 0x3e19999a
glabel var7f1aa694
.word 0x40490fdb
glabel var7f1aa698
.word 0xc0490fdb
.text
/* f07c12c: 27bdfe80 */ addiu $sp,$sp,-384
/* f07c130: afbf0034 */ sw $ra,0x34($sp)
/* f07c134: afb10030 */ sw $s1,0x30($sp)
/* f07c138: afb0002c */ sw $s0,0x2c($sp)
/* f07c13c: 8c900004 */ lw $s0,0x4($a0)
/* f07c140: 24010002 */ addiu $at,$zero,0x2
/* f07c144: 00808825 */ or $s1,$a0,$zero
/* f07c148: 8e0300c0 */ lw $v1,0xc0($s0)
/* f07c14c: 3c0e800a */ lui $t6,%hi(g_Vars+0x38)
/* f07c150: 02002825 */ or $a1,$s0,$zero
/* f07c154: 14610078 */ bne $v1,$at,.L0f07c338
/* f07c158: 00000000 */ nop
/* f07c15c: 8dce9ff8 */ lw $t6,%lo(g_Vars+0x38)($t6)
/* f07c160: 8e080088 */ lw $t0,0x88($s0)
/* f07c164: 44801000 */ mtc1 $zero,$f2
/* f07c168: 44807000 */ mtc1 $zero,$f14
/* f07c16c: 006e7823 */ subu $t7,$v1,$t6
/* f07c170: 1100006a */ beqz $t0,.L0f07c31c
/* f07c174: ae0f00c0 */ sw $t7,0xc0($s0)
/* f07c178: 95070006 */ lhu $a3,0x6($t0)
/* f07c17c: 00001825 */ or $v1,$zero,$zero
/* f07c180: 58e0001c */ blezl $a3,.L0f07c1f4
/* f07c184: 920a0097 */ lbu $t2,0x97($s0)
/* f07c188: 92040097 */ lbu $a0,0x97($s0)
/* f07c18c: 8e06008c */ lw $a2,0x8c($s0)
.L0f07c190:
/* f07c190: 50800004 */ beqzl $a0,.L0f07c1a4
/* f07c194: 24780001 */ addiu $t8,$v1,0x1
/* f07c198: 1000000d */ b .L0f07c1d0
/* f07c19c: 00601025 */ or $v0,$v1,$zero
/* f07c1a0: 24780001 */ addiu $t8,$v1,0x1
.L0f07c1a4:
/* f07c1a4: 0307001a */ div $zero,$t8,$a3
/* f07c1a8: 00001010 */ mfhi $v0
/* f07c1ac: 14e00002 */ bnez $a3,.L0f07c1b8
/* f07c1b0: 00000000 */ nop
/* f07c1b4: 0007000d */ break 0x7
.L0f07c1b8:
/* f07c1b8: 2401ffff */ addiu $at,$zero,-1
/* f07c1bc: 14e10004 */ bne $a3,$at,.L0f07c1d0
/* f07c1c0: 3c018000 */ lui $at,0x8000
/* f07c1c4: 17010002 */ bne $t8,$at,.L0f07c1d0
/* f07c1c8: 00000000 */ nop
/* f07c1cc: 0006000d */ break 0x6
.L0f07c1d0:
/* f07c1d0: 50460008 */ beql $v0,$a2,.L0f07c1f4
/* f07c1d4: 920a0097 */ lbu $t2,0x97($s0)
/* f07c1d8: 8cb90088 */ lw $t9,0x88($a1)
/* f07c1dc: 24630001 */ addiu $v1,$v1,0x1
/* f07c1e0: 97290006 */ lhu $t1,0x6($t9)
/* f07c1e4: 0069082a */ slt $at,$v1,$t1
/* f07c1e8: 1420ffe9 */ bnez $at,.L0f07c190
/* f07c1ec: 00000000 */ nop
/* f07c1f0: 920a0097 */ lbu $t2,0x97($s0)
.L0f07c1f4:
/* f07c1f4: 24050002 */ addiu $a1,$zero,0x2
/* f07c1f8: 246b0001 */ addiu $t3,$v1,0x1
/* f07c1fc: 5140000f */ beqzl $t2,.L0f07c23c
/* f07c200: 00601025 */ or $v0,$v1,$zero
/* f07c204: 0167001a */ div $zero,$t3,$a3
/* f07c208: 00001010 */ mfhi $v0
/* f07c20c: 14e00002 */ bnez $a3,.L0f07c218
/* f07c210: 00000000 */ nop
/* f07c214: 0007000d */ break 0x7
.L0f07c218:
/* f07c218: 2401ffff */ addiu $at,$zero,-1
/* f07c21c: 14e10004 */ bne $a3,$at,.L0f07c230
/* f07c220: 3c018000 */ lui $at,0x8000
/* f07c224: 15610002 */ bne $t3,$at,.L0f07c230
/* f07c228: 00000000 */ nop
/* f07c22c: 0006000d */ break 0x6
.L0f07c230:
/* f07c230: 10000003 */ b .L0f07c240
/* f07c234: 8d0c0000 */ lw $t4,0x0($t0)
/* f07c238: 00601025 */ or $v0,$v1,$zero
.L0f07c23c:
/* f07c23c: 8d0c0000 */ lw $t4,0x0($t0)
.L0f07c240:
/* f07c240: 00026880 */ sll $t5,$v0,0x2
/* f07c244: 27a60104 */ addiu $a2,$sp,0x104
/* f07c248: 018d7021 */ addu $t6,$t4,$t5
/* f07c24c: 8dc40000 */ lw $a0,0x0($t6)
/* f07c250: 0fc456ac */ jal padUnpack
/* f07c254: afa30158 */ sw $v1,0x158($sp)
/* f07c258: 920f0097 */ lbu $t7,0x97($s0)
/* f07c25c: 8fa30158 */ lw $v1,0x158($sp)
/* f07c260: 24050002 */ addiu $a1,$zero,0x2
/* f07c264: 51e00005 */ beqzl $t7,.L0f07c27c
/* f07c268: 8e080088 */ lw $t0,0x88($s0)
/* f07c26c: 00601025 */ or $v0,$v1,$zero
/* f07c270: 1000000f */ b .L0f07c2b0
/* f07c274: 8e080088 */ lw $t0,0x88($s0)
/* f07c278: 8e080088 */ lw $t0,0x88($s0)
.L0f07c27c:
/* f07c27c: 24780001 */ addiu $t8,$v1,0x1
/* f07c280: 95190006 */ lhu $t9,0x6($t0)
/* f07c284: 0319001a */ div $zero,$t8,$t9
/* f07c288: 00001010 */ mfhi $v0
/* f07c28c: 17200002 */ bnez $t9,.L0f07c298
/* f07c290: 00000000 */ nop
/* f07c294: 0007000d */ break 0x7
.L0f07c298:
/* f07c298: 2401ffff */ addiu $at,$zero,-1
/* f07c29c: 17210004 */ bne $t9,$at,.L0f07c2b0
/* f07c2a0: 3c018000 */ lui $at,0x8000
/* f07c2a4: 17010002 */ bne $t8,$at,.L0f07c2b0
/* f07c2a8: 00000000 */ nop
/* f07c2ac: 0006000d */ break 0x6
.L0f07c2b0:
/* f07c2b0: 8d090000 */ lw $t1,0x0($t0)
/* f07c2b4: 00025080 */ sll $t2,$v0,0x2
/* f07c2b8: 27a600b0 */ addiu $a2,$sp,0xb0
/* f07c2bc: 012a5821 */ addu $t3,$t1,$t2
/* f07c2c0: 0fc456ac */ jal padUnpack
/* f07c2c4: 8d640000 */ lw $a0,0x0($t3)
/* f07c2c8: c7a40104 */ lwc1 $f4,0x104($sp)
/* f07c2cc: c7a600b0 */ lwc1 $f6,0xb0($sp)
/* f07c2d0: c7a8010c */ lwc1 $f8,0x10c($sp)
/* f07c2d4: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f07c2d8: 46062081 */ sub.s $f2,$f4,$f6
/* f07c2dc: 460a4381 */ sub.s $f14,$f8,$f10
/* f07c2e0: 46021402 */ mul.s $f16,$f2,$f2
/* f07c2e4: e7a200ac */ swc1 $f2,0xac($sp)
/* f07c2e8: 460e7482 */ mul.s $f18,$f14,$f14
/* f07c2ec: e7ae00a8 */ swc1 $f14,0xa8($sp)
/* f07c2f0: 0c012974 */ jal sqrtf
/* f07c2f4: 46128300 */ add.s $f12,$f16,$f18
/* f07c2f8: 3c013e80 */ lui $at,0x3e80
/* f07c2fc: 44812000 */ mtc1 $at,$f4
/* f07c300: c7a200ac */ lwc1 $f2,0xac($sp)
/* f07c304: c7ae00a8 */ lwc1 $f14,0xa8($sp)
/* f07c308: 46002303 */ div.s $f12,$f4,$f0
/* f07c30c: 460c1082 */ mul.s $f2,$f2,$f12
/* f07c310: 00000000 */ nop
/* f07c314: 460c7382 */ mul.s $f14,$f14,$f12
/* f07c318: 00000000 */ nop
.L0f07c31c:
/* f07c31c: 44804000 */ mtc1 $zero,$f8
/* f07c320: 46007187 */ neg.s $f6,$f14
/* f07c324: 26020068 */ addiu $v0,$s0,0x68
/* f07c328: e6060064 */ swc1 $f6,0x64($s0)
/* f07c32c: e4480000 */ swc1 $f8,0x0($v0)
/* f07c330: 10000017 */ b .L0f07c390
/* f07c334: e602006c */ swc1 $f2,0x6c($s0)
.L0f07c338:
/* f07c338: 04600007 */ bltz $v1,.L0f07c358
/* f07c33c: 26020068 */ addiu $v0,$s0,0x68
/* f07c340: 3c0c800a */ lui $t4,%hi(g_Vars+0x38)
/* f07c344: 8d8c9ff8 */ lw $t4,%lo(g_Vars+0x38)($t4)
/* f07c348: 26020068 */ addiu $v0,$s0,0x68
/* f07c34c: 006c6823 */ subu $t5,$v1,$t4
/* f07c350: 1000000f */ b .L0f07c390
/* f07c354: ae0d00c0 */ sw $t5,0xc0($s0)
.L0f07c358:
/* f07c358: 3c017f1b */ lui $at,%hi(var7f1aa66c)
/* f07c35c: c42aa66c */ lwc1 $f10,%lo(var7f1aa66c)($at)
/* f07c360: c4400000 */ lwc1 $f0,0x0($v0)
/* f07c364: 3c017f1b */ lui $at,%hi(var7f1aa670)
/* f07c368: 4600503c */ c.lt.s $f10,$f0
/* f07c36c: 00000000 */ nop
/* f07c370: 45020008 */ bc1fl .L0f07c394
/* f07c374: 26030064 */ addiu $v1,$s0,0x64
/* f07c378: c430a670 */ lwc1 $f16,%lo(var7f1aa670)($at)
/* f07c37c: 3c01800a */ lui $at,%hi(g_Vars+0x44)
/* f07c380: c432a004 */ lwc1 $f18,%lo(g_Vars+0x44)($at)
/* f07c384: 46128102 */ mul.s $f4,$f16,$f18
/* f07c388: 46040181 */ sub.s $f6,$f0,$f4
/* f07c38c: e4460000 */ swc1 $f6,0x0($v0)
.L0f07c390:
/* f07c390: 26030064 */ addiu $v1,$s0,0x64
.L0f07c394:
/* f07c394: c4680000 */ lwc1 $f8,0x0($v1)
/* f07c398: 2605006c */ addiu $a1,$s0,0x6c
/* f07c39c: 3c04800a */ lui $a0,%hi(g_Vars+0x4b4)
/* f07c3a0: e7a8015c */ swc1 $f8,0x15c($sp)
/* f07c3a4: c44a0000 */ lwc1 $f10,0x0($v0)
/* f07c3a8: 8c84a474 */ lw $a0,%lo(g_Vars+0x4b4)($a0)
/* f07c3ac: e7aa0160 */ swc1 $f10,0x160($sp)
/* f07c3b0: c4b00000 */ lwc1 $f16,0x0($a1)
/* f07c3b4: e7b00164 */ swc1 $f16,0x164($sp)
/* f07c3b8: c4640000 */ lwc1 $f4,0x0($v1)
/* f07c3bc: c612007c */ lwc1 $f18,0x7c($s0)
/* f07c3c0: c4a80000 */ lwc1 $f8,0x0($a1)
/* f07c3c4: 46049180 */ add.s $f6,$f18,$f4
/* f07c3c8: 46064280 */ add.s $f10,$f8,$f6
/* f07c3cc: 0fc59585 */ jal stageGetIndex
/* f07c3d0: e7aa0174 */ swc1 $f10,0x174($sp)
/* f07c3d4: 2401000e */ addiu $at,$zero,0xe
/* f07c3d8: 14410022 */ bne $v0,$at,.L0f07c464
/* f07c3dc: 3c03800a */ lui $v1,%hi(g_Vars+0x38)
/* f07c3e0: 3c017f1b */ lui $at,%hi(var7f1aa674)
/* f07c3e4: c432a674 */ lwc1 $f18,%lo(var7f1aa674)($at)
/* f07c3e8: c630000c */ lwc1 $f16,0xc($s1)
/* f07c3ec: 3406ffff */ dli $a2,0xffff
/* f07c3f0: 02202025 */ or $a0,$s1,$zero
/* f07c3f4: 4612803c */ c.lt.s $f16,$f18
/* f07c3f8: 8fa50174 */ lw $a1,0x174($sp)
/* f07c3fc: 27a7015c */ addiu $a3,$sp,0x15c
/* f07c400: 45020009 */ bc1fl .L0f07c428
/* f07c404: c6040080 */ lwc1 $f4,0x80($s0)
/* f07c408: 02202025 */ or $a0,$s1,$zero
/* f07c40c: 0fc249af */ jal func0f0926bc
/* f07c410: 24050001 */ addiu $a1,$zero,0x1
/* f07c414: 8e0e0040 */ lw $t6,0x40($s0)
/* f07c418: 35cf0004 */ ori $t7,$t6,0x4
/* f07c41c: 100000df */ b .L0f07c79c
/* f07c420: ae0f0040 */ sw $t7,0x40($s0)
/* f07c424: c6040080 */ lwc1 $f4,0x80($s0)
.L0f07c428:
/* f07c428: 44804000 */ mtc1 $zero,$f8
/* f07c42c: 3c017f1b */ lui $at,%hi(var7f1aa678)
/* f07c430: 4608203c */ c.lt.s $f4,$f8
/* f07c434: 00000000 */ nop
/* f07c438: 45000004 */ bc1f .L0f07c44c
/* f07c43c: 00000000 */ nop
/* f07c440: 3c017f1b */ lui $at,%hi(var7f1aa67c)
/* f07c444: 10000002 */ b .L0f07c450
/* f07c448: c420a678 */ lwc1 $f0,%lo(var7f1aa678)($at)
.L0f07c44c:
/* f07c44c: c420a67c */ lwc1 $f0,%lo(var7f1aa67c)($at)
.L0f07c450:
/* f07c450: 44060000 */ mfc1 $a2,$f0
/* f07c454: 0fc1ee8e */ jal chopperIncrementMovement
/* f07c458: afa00010 */ sw $zero,0x10($sp)
/* f07c45c: 100000d0 */ b .L0f07c7a0
/* f07c460: 8fbf0034 */ lw $ra,0x34($sp)
.L0f07c464:
/* f07c464: 8c639ff8 */ lw $v1,%lo(g_Vars+0x38)($v1)
/* f07c468: 3c017f1b */ lui $at,%hi(var7f1aa680)
/* f07c46c: c420a680 */ lwc1 $f0,%lo(var7f1aa680)($at)
/* f07c470: 28610002 */ slti $at,$v1,0x2
/* f07c474: 24020001 */ addiu $v0,$zero,0x1
/* f07c478: 14200006 */ bnez $at,.L0f07c494
/* f07c47c: 46000086 */ mov.s $f2,$f0
/* f07c480: 24420001 */ addiu $v0,$v0,0x1
.L0f07c484:
/* f07c484: 0043082a */ slt $at,$v0,$v1
/* f07c488: 46001082 */ mul.s $f2,$f2,$f0
/* f07c48c: 5420fffd */ bnezl $at,.L0f07c484
/* f07c490: 24420001 */ addiu $v0,$v0,0x1
.L0f07c494:
/* f07c494: 3c017f1b */ lui $at,%hi(var7f1aa684)
/* f07c498: c42aa684 */ lwc1 $f10,%lo(var7f1aa684)($at)
/* f07c49c: c60600b4 */ lwc1 $f6,0xb4($s0)
/* f07c4a0: 3c017f1b */ lui $at,%hi(var7f1aa688)
/* f07c4a4: c430a688 */ lwc1 $f16,%lo(var7f1aa688)($at)
/* f07c4a8: 460a3300 */ add.s $f12,$f6,$f10
/* f07c4ac: 460c803c */ c.lt.s $f16,$f12
/* f07c4b0: 00000000 */ nop
/* f07c4b4: 4500001c */ bc1f .L0f07c528
/* f07c4b8: 00000000 */ nop
/* f07c4bc: 44806000 */ mtc1 $zero,$f12
/* f07c4c0: e7a20088 */ swc1 $f2,0x88($sp)
/* f07c4c4: 0c004b70 */ jal random
/* f07c4c8: e7ac0084 */ swc1 $f12,0x84($sp)
/* f07c4cc: 30580007 */ andi $t8,$v0,0x7
/* f07c4d0: 27190002 */ addiu $t9,$t8,0x2
/* f07c4d4: 44999000 */ mtc1 $t9,$f18
/* f07c4d8: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07c4dc: c7ac0084 */ lwc1 $f12,0x84($sp)
/* f07c4e0: 07210005 */ bgez $t9,.L0f07c4f8
/* f07c4e4: 46809120 */ cvt.s.w $f4,$f18
/* f07c4e8: 3c014f80 */ lui $at,0x4f80
/* f07c4ec: 44814000 */ mtc1 $at,$f8
/* f07c4f0: 00000000 */ nop
/* f07c4f4: 46082100 */ add.s $f4,$f4,$f8
.L0f07c4f8:
/* f07c4f8: 3c017f1b */ lui $at,%hi(var7f1aa68c)
/* f07c4fc: c426a68c */ lwc1 $f6,%lo(var7f1aa68c)($at)
/* f07c500: 8e090008 */ lw $t1,0x8($s0)
/* f07c504: 3c017f1b */ lui $at,%hi(var7f1aa690)
/* f07c508: 46062282 */ mul.s $f10,$f4,$f6
/* f07c50c: 00095000 */ sll $t2,$t1,0x0
/* f07c510: 05410005 */ bgez $t2,.L0f07c528
/* f07c514: e60a00b8 */ swc1 $f10,0xb8($s0)
/* f07c518: c61000b8 */ lwc1 $f16,0xb8($s0)
/* f07c51c: c432a690 */ lwc1 $f18,%lo(var7f1aa690)($at)
/* f07c520: 46128202 */ mul.s $f8,$f16,$f18
/* f07c524: e60800b8 */ swc1 $f8,0xb8($s0)
.L0f07c528:
/* f07c528: 0c0068f7 */ jal sinf
/* f07c52c: e7a20088 */ swc1 $f2,0x88($sp)
/* f07c530: c60600b8 */ lwc1 $f6,0xb8($s0)
/* f07c534: c7a40160 */ lwc1 $f4,0x160($sp)
/* f07c538: c7b2015c */ lwc1 $f18,0x15c($sp)
/* f07c53c: 46003282 */ mul.s $f10,$f6,$f0
/* f07c540: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07c544: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07c548: c42ca00c */ lwc1 $f12,%lo(g_Vars+0x4c)($at)
/* f07c54c: 26240008 */ addiu $a0,$s1,0x8
/* f07c550: 26250028 */ addiu $a1,$s1,0x28
/* f07c554: 27a60098 */ addiu $a2,$sp,0x98
/* f07c558: 460a2400 */ add.s $f16,$f4,$f10
/* f07c55c: 24070020 */ addiu $a3,$zero,0x20
/* f07c560: e7b00160 */ swc1 $f16,0x160($sp)
/* f07c564: c60800a4 */ lwc1 $f8,0xa4($s0)
/* f07c568: c6040098 */ lwc1 $f4,0x98($s0)
/* f07c56c: 46089182 */ mul.s $f6,$f18,$f8
/* f07c570: 46043280 */ add.s $f10,$f6,$f4
/* f07c574: 46025482 */ mul.s $f18,$f10,$f2
/* f07c578: e7b2008c */ swc1 $f18,0x8c($sp)
/* f07c57c: c60800a4 */ lwc1 $f8,0xa4($s0)
/* f07c580: c604009c */ lwc1 $f4,0x9c($s0)
/* f07c584: 46088182 */ mul.s $f6,$f16,$f8
/* f07c588: c7a80164 */ lwc1 $f8,0x164($sp)
/* f07c58c: 46043280 */ add.s $f10,$f6,$f4
/* f07c590: 46025402 */ mul.s $f16,$f10,$f2
/* f07c594: e7b00090 */ swc1 $f16,0x90($sp)
/* f07c598: c60600a4 */ lwc1 $f6,0xa4($s0)
/* f07c59c: c60a00a0 */ lwc1 $f10,0xa0($s0)
/* f07c5a0: 46064102 */ mul.s $f4,$f8,$f6
/* f07c5a4: 460a2200 */ add.s $f8,$f4,$f10
/* f07c5a8: 46024182 */ mul.s $f6,$f8,$f2
/* f07c5ac: e7a60094 */ swc1 $f6,0x94($sp)
/* f07c5b0: 460c9102 */ mul.s $f4,$f18,$f12
/* f07c5b4: c62a0008 */ lwc1 $f10,0x8($s1)
/* f07c5b8: 460c8482 */ mul.s $f18,$f16,$f12
/* f07c5bc: 460a2200 */ add.s $f8,$f4,$f10
/* f07c5c0: e7a80098 */ swc1 $f8,0x98($sp)
/* f07c5c4: c624000c */ lwc1 $f4,0xc($s1)
/* f07c5c8: 460c3202 */ mul.s $f8,$f6,$f12
/* f07c5cc: 46049280 */ add.s $f10,$f18,$f4
/* f07c5d0: e7aa009c */ swc1 $f10,0x9c($sp)
/* f07c5d4: c6300010 */ lwc1 $f16,0x10($s1)
/* f07c5d8: afa50040 */ sw $a1,0x40($sp)
/* f07c5dc: afa40044 */ sw $a0,0x44($sp)
/* f07c5e0: 46104480 */ add.s $f18,$f8,$f16
/* f07c5e4: 0c00b784 */ jal cd0002de10
/* f07c5e8: e7b200a0 */ swc1 $f18,0xa0($sp)
/* f07c5ec: 14400058 */ bnez $v0,.L0f07c750
/* f07c5f0: 8fa40044 */ lw $a0,0x44($sp)
/* f07c5f4: 3c0142c8 */ lui $at,0x42c8
/* f07c5f8: 44815000 */ mtc1 $at,$f10
/* f07c5fc: c624000c */ lwc1 $f4,0xc($s1)
/* f07c600: 3c0540a0 */ lui $a1,0x40a0
/* f07c604: 00003825 */ or $a3,$zero,$zero
/* f07c608: 460a2180 */ add.s $f6,$f4,$f10
/* f07c60c: e626000c */ swc1 $f6,0xc($s1)
/* f07c610: afa00010 */ sw $zero,0x10($sp)
/* f07c614: 8fa60040 */ lw $a2,0x40($sp)
/* f07c618: 0c00a8cc */ jal cdFindGroundYSimple
/* f07c61c: 8fa40044 */ lw $a0,0x44($sp)
/* f07c620: e7a00060 */ swc1 $f0,0x60($sp)
/* f07c624: 3c0142c8 */ lui $at,0x42c8
/* f07c628: 44818000 */ mtc1 $at,$f16
/* f07c62c: c628000c */ lwc1 $f8,0xc($s1)
/* f07c630: 3c067f1b */ lui $a2,%hi(var7f1aa044)
/* f07c634: 24c6a044 */ addiu $a2,$a2,%lo(var7f1aa044)
/* f07c638: 46104481 */ sub.s $f18,$f8,$f16
/* f07c63c: 27a40064 */ addiu $a0,$sp,0x64
/* f07c640: 240530a1 */ addiu $a1,$zero,0x30bc
/* f07c644: 0c0093af */ jal cdGetPos
/* f07c648: e632000c */ swc1 $f18,0xc($s1)
/* f07c64c: 3c0141a0 */ lui $at,0x41a0
/* f07c650: 44813000 */ mtc1 $at,$f6
/* f07c654: c7aa0060 */ lwc1 $f10,0x60($sp)
/* f07c658: c7a40064 */ lwc1 $f4,0x64($sp)
/* f07c65c: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f07c660: 46065200 */ add.s $f8,$f10,$f6
/* f07c664: 8fa40044 */ lw $a0,0x44($sp)
/* f07c668: 8fa50040 */ lw $a1,0x40($sp)
/* f07c66c: 27a60098 */ addiu $a2,$sp,0x98
/* f07c670: e7a8009c */ swc1 $f8,0x9c($sp)
/* f07c674: 27a70050 */ addiu $a3,$sp,0x50
/* f07c678: e7a40098 */ swc1 $f4,0x98($sp)
/* f07c67c: 0fc1979d */ jal func0f065e74
/* f07c680: e7b000a0 */ swc1 $f16,0xa0($sp)
/* f07c684: c7b20098 */ lwc1 $f18,0x98($sp)
/* f07c688: 02202025 */ or $a0,$s1,$zero
/* f07c68c: e6320008 */ swc1 $f18,0x8($s1)
/* f07c690: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f07c694: e624000c */ swc1 $f4,0xc($s1)
/* f07c698: c7aa00a0 */ lwc1 $f10,0xa0($sp)
/* f07c69c: 0fc19711 */ jal propDeregisterRooms
/* f07c6a0: e62a0010 */ swc1 $f10,0x10($s1)
/* f07c6a4: 27a40050 */ addiu $a0,$sp,0x50
/* f07c6a8: 0fc195e9 */ jal roomsCopy
/* f07c6ac: 8fa50040 */ lw $a1,0x40($sp)
/* f07c6b0: 02002025 */ or $a0,$s0,$zero
/* f07c6b4: 00002825 */ or $a1,$zero,$zero
/* f07c6b8: 0fc1a71c */ jal func0f069c70
/* f07c6bc: 24060001 */ addiu $a2,$zero,0x1
/* f07c6c0: 920b0096 */ lbu $t3,0x96($s0)
/* f07c6c4: 02002025 */ or $a0,$s0,$zero
/* f07c6c8: 24050008 */ addiu $a1,$zero,0x8
/* f07c6cc: 256c0001 */ addiu $t4,$t3,0x1
/* f07c6d0: 0fc20733 */ jal objDeform
/* f07c6d4: a20c0096 */ sb $t4,0x96($s0)
/* f07c6d8: 862d0028 */ lh $t5,0x28($s1)
/* f07c6dc: 3c013f80 */ lui $at,0x3f80
/* f07c6e0: 44803000 */ mtc1 $zero,$f6
/* f07c6e4: 44814000 */ mtc1 $at,$f8
/* f07c6e8: 44808000 */ mtc1 $zero,$f16
/* f07c6ec: 02202025 */ or $a0,$s1,$zero
/* f07c6f0: 24050001 */ addiu $a1,$zero,0x1
/* f07c6f4: 3406ffff */ dli $a2,0xffff
/* f07c6f8: a7ad0072 */ sh $t5,0x72($sp)
/* f07c6fc: e7a60074 */ swc1 $f6,0x74($sp)
/* f07c700: e7a80078 */ swc1 $f8,0x78($sp)
/* f07c704: 0fc249af */ jal func0f0926bc
/* f07c708: e7b0007c */ swc1 $f16,0x7c($sp)
/* f07c70c: 87b80072 */ lh $t8,0x72($sp)
/* f07c710: 240e0001 */ addiu $t6,$zero,0x1
/* f07c714: 27af0098 */ addiu $t7,$sp,0x98
/* f07c718: 27b90074 */ addiu $t9,$sp,0x74
/* f07c71c: afb90020 */ sw $t9,0x20($sp)
/* f07c720: afaf0018 */ sw $t7,0x18($sp)
/* f07c724: afae0014 */ sw $t6,0x14($sp)
/* f07c728: 00002025 */ or $a0,$zero,$zero
/* f07c72c: 8fa50044 */ lw $a1,0x44($sp)
/* f07c730: 8fa60040 */ lw $a2,0x40($sp)
/* f07c734: 2407000d */ addiu $a3,$zero,0xd
/* f07c738: afa00010 */ sw $zero,0x10($sp)
/* f07c73c: 0fc4a7d5 */ jal explosionCreate
/* f07c740: afb8001c */ sw $t8,0x1c($sp)
/* f07c744: 24090001 */ addiu $t1,$zero,0x1
/* f07c748: 10000014 */ b .L0f07c79c
/* f07c74c: ae0900e4 */ sw $t1,0xe4($s0)
.L0f07c750:
/* f07c750: 8fa50040 */ lw $a1,0x40($sp)
/* f07c754: 0fc4ba08 */ jal smokeCreateSimple
/* f07c758: 24060003 */ addiu $a2,$zero,0x3
/* f07c75c: c6120080 */ lwc1 $f18,0x80($s0)
/* f07c760: 44802000 */ mtc1 $zero,$f4
/* f07c764: 02202025 */ or $a0,$s1,$zero
/* f07c768: 8fa50174 */ lw $a1,0x174($sp)
/* f07c76c: 4604903c */ c.lt.s $f18,$f4
/* f07c770: 27a7015c */ addiu $a3,$sp,0x15c
/* f07c774: 3c017f1b */ lui $at,%hi(var7f1aa694)
/* f07c778: 45000004 */ bc1f .L0f07c78c
/* f07c77c: 00000000 */ nop
/* f07c780: 3c017f1b */ lui $at,%hi(var7f1aa698)
/* f07c784: 10000002 */ b .L0f07c790
/* f07c788: c420a694 */ lwc1 $f0,%lo(var7f1aa694)($at)
.L0f07c78c:
/* f07c78c: c420a698 */ lwc1 $f0,%lo(var7f1aa698)($at)
.L0f07c790:
/* f07c790: 44060000 */ mfc1 $a2,$f0
/* f07c794: 0fc1ee8e */ jal chopperIncrementMovement
/* f07c798: afa00010 */ sw $zero,0x10($sp)
.L0f07c79c:
/* f07c79c: 8fbf0034 */ lw $ra,0x34($sp)
.L0f07c7a0:
/* f07c7a0: 8fb0002c */ lw $s0,0x2c($sp)
/* f07c7a4: 8fb10030 */ lw $s1,0x30($sp)
/* f07c7a8: 03e00008 */ jr $ra
/* f07c7ac: 27bd0180 */ addiu $sp,$sp,0x180
);
#elif VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel chopperTickFall
.late_rodata
glabel var7f1aa66c
.word 0xbf333333
glabel var7f1aa670
.word 0x3c1374bc
glabel var7f1aa674
.word 0xc6ea6000
glabel var7f1aa678
.word 0x40490fdb
glabel var7f1aa67c
.word 0xc0490fdb
glabel var7f1aa680
.word 0x3f7ae148
glabel var7f1aa684
.word 0x3d567664
glabel var7f1aa688
.word 0x40c907a9
glabel var7f1aa68c
.word 0x3c23d70a
glabel var7f1aa690
.word 0x3e19999a
glabel var7f1aa694
.word 0x40490fdb
glabel var7f1aa698
.word 0xc0490fdb
.text
/* f07c12c: 27bdfe80 */ addiu $sp,$sp,-384
/* f07c130: afbf0034 */ sw $ra,0x34($sp)
/* f07c134: afb10030 */ sw $s1,0x30($sp)
/* f07c138: afb0002c */ sw $s0,0x2c($sp)
/* f07c13c: 8c900004 */ lw $s0,0x4($a0)
/* f07c140: 24010002 */ addiu $at,$zero,0x2
/* f07c144: 00808825 */ or $s1,$a0,$zero
/* f07c148: 8e0300c0 */ lw $v1,0xc0($s0)
/* f07c14c: 3c0e800a */ lui $t6,%hi(g_Vars+0x38)
/* f07c150: 02002825 */ or $a1,$s0,$zero
/* f07c154: 14610078 */ bne $v1,$at,.L0f07c338
/* f07c158: 00000000 */ nop
/* f07c15c: 8dce9ff8 */ lw $t6,%lo(g_Vars+0x38)($t6)
/* f07c160: 8e080088 */ lw $t0,0x88($s0)
/* f07c164: 44801000 */ mtc1 $zero,$f2
/* f07c168: 44807000 */ mtc1 $zero,$f14
/* f07c16c: 006e7823 */ subu $t7,$v1,$t6
/* f07c170: 1100006a */ beqz $t0,.L0f07c31c
/* f07c174: ae0f00c0 */ sw $t7,0xc0($s0)
/* f07c178: 95070006 */ lhu $a3,0x6($t0)
/* f07c17c: 00001825 */ or $v1,$zero,$zero
/* f07c180: 58e0001c */ blezl $a3,.L0f07c1f4
/* f07c184: 920a0097 */ lbu $t2,0x97($s0)
/* f07c188: 92040097 */ lbu $a0,0x97($s0)
/* f07c18c: 8e06008c */ lw $a2,0x8c($s0)
.L0f07c190:
/* f07c190: 50800004 */ beqzl $a0,.L0f07c1a4
/* f07c194: 24780001 */ addiu $t8,$v1,0x1
/* f07c198: 1000000d */ b .L0f07c1d0
/* f07c19c: 00601025 */ or $v0,$v1,$zero
/* f07c1a0: 24780001 */ addiu $t8,$v1,0x1
.L0f07c1a4:
/* f07c1a4: 0307001a */ div $zero,$t8,$a3
/* f07c1a8: 00001010 */ mfhi $v0
/* f07c1ac: 14e00002 */ bnez $a3,.L0f07c1b8
/* f07c1b0: 00000000 */ nop
/* f07c1b4: 0007000d */ break 0x7
.L0f07c1b8:
/* f07c1b8: 2401ffff */ addiu $at,$zero,-1
/* f07c1bc: 14e10004 */ bne $a3,$at,.L0f07c1d0
/* f07c1c0: 3c018000 */ lui $at,0x8000
/* f07c1c4: 17010002 */ bne $t8,$at,.L0f07c1d0
/* f07c1c8: 00000000 */ nop
/* f07c1cc: 0006000d */ break 0x6
.L0f07c1d0:
/* f07c1d0: 50460008 */ beql $v0,$a2,.L0f07c1f4
/* f07c1d4: 920a0097 */ lbu $t2,0x97($s0)
/* f07c1d8: 8cb90088 */ lw $t9,0x88($a1)
/* f07c1dc: 24630001 */ addiu $v1,$v1,0x1
/* f07c1e0: 97290006 */ lhu $t1,0x6($t9)
/* f07c1e4: 0069082a */ slt $at,$v1,$t1
/* f07c1e8: 1420ffe9 */ bnez $at,.L0f07c190
/* f07c1ec: 00000000 */ nop
/* f07c1f0: 920a0097 */ lbu $t2,0x97($s0)
.L0f07c1f4:
/* f07c1f4: 24050002 */ addiu $a1,$zero,0x2
/* f07c1f8: 246b0001 */ addiu $t3,$v1,0x1
/* f07c1fc: 5140000f */ beqzl $t2,.L0f07c23c
/* f07c200: 00601025 */ or $v0,$v1,$zero
/* f07c204: 0167001a */ div $zero,$t3,$a3
/* f07c208: 00001010 */ mfhi $v0
/* f07c20c: 14e00002 */ bnez $a3,.L0f07c218
/* f07c210: 00000000 */ nop
/* f07c214: 0007000d */ break 0x7
.L0f07c218:
/* f07c218: 2401ffff */ addiu $at,$zero,-1
/* f07c21c: 14e10004 */ bne $a3,$at,.L0f07c230
/* f07c220: 3c018000 */ lui $at,0x8000
/* f07c224: 15610002 */ bne $t3,$at,.L0f07c230
/* f07c228: 00000000 */ nop
/* f07c22c: 0006000d */ break 0x6
.L0f07c230:
/* f07c230: 10000003 */ b .L0f07c240
/* f07c234: 8d0c0000 */ lw $t4,0x0($t0)
/* f07c238: 00601025 */ or $v0,$v1,$zero
.L0f07c23c:
/* f07c23c: 8d0c0000 */ lw $t4,0x0($t0)
.L0f07c240:
/* f07c240: 00026880 */ sll $t5,$v0,0x2
/* f07c244: 27a60104 */ addiu $a2,$sp,0x104
/* f07c248: 018d7021 */ addu $t6,$t4,$t5
/* f07c24c: 8dc40000 */ lw $a0,0x0($t6)
/* f07c250: 0fc456ac */ jal padUnpack
/* f07c254: afa30158 */ sw $v1,0x158($sp)
/* f07c258: 920f0097 */ lbu $t7,0x97($s0)
/* f07c25c: 8fa30158 */ lw $v1,0x158($sp)
/* f07c260: 24050002 */ addiu $a1,$zero,0x2
/* f07c264: 51e00005 */ beqzl $t7,.L0f07c27c
/* f07c268: 8e080088 */ lw $t0,0x88($s0)
/* f07c26c: 00601025 */ or $v0,$v1,$zero
/* f07c270: 1000000f */ b .L0f07c2b0
/* f07c274: 8e080088 */ lw $t0,0x88($s0)
/* f07c278: 8e080088 */ lw $t0,0x88($s0)
.L0f07c27c:
/* f07c27c: 24780001 */ addiu $t8,$v1,0x1
/* f07c280: 95190006 */ lhu $t9,0x6($t0)
/* f07c284: 0319001a */ div $zero,$t8,$t9
/* f07c288: 00001010 */ mfhi $v0
/* f07c28c: 17200002 */ bnez $t9,.L0f07c298
/* f07c290: 00000000 */ nop
/* f07c294: 0007000d */ break 0x7
.L0f07c298:
/* f07c298: 2401ffff */ addiu $at,$zero,-1
/* f07c29c: 17210004 */ bne $t9,$at,.L0f07c2b0
/* f07c2a0: 3c018000 */ lui $at,0x8000
/* f07c2a4: 17010002 */ bne $t8,$at,.L0f07c2b0
/* f07c2a8: 00000000 */ nop
/* f07c2ac: 0006000d */ break 0x6
.L0f07c2b0:
/* f07c2b0: 8d090000 */ lw $t1,0x0($t0)
/* f07c2b4: 00025080 */ sll $t2,$v0,0x2
/* f07c2b8: 27a600b0 */ addiu $a2,$sp,0xb0
/* f07c2bc: 012a5821 */ addu $t3,$t1,$t2
/* f07c2c0: 0fc456ac */ jal padUnpack
/* f07c2c4: 8d640000 */ lw $a0,0x0($t3)
/* f07c2c8: c7a40104 */ lwc1 $f4,0x104($sp)
/* f07c2cc: c7a600b0 */ lwc1 $f6,0xb0($sp)
/* f07c2d0: c7a8010c */ lwc1 $f8,0x10c($sp)
/* f07c2d4: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f07c2d8: 46062081 */ sub.s $f2,$f4,$f6
/* f07c2dc: 460a4381 */ sub.s $f14,$f8,$f10
/* f07c2e0: 46021402 */ mul.s $f16,$f2,$f2
/* f07c2e4: e7a200ac */ swc1 $f2,0xac($sp)
/* f07c2e8: 460e7482 */ mul.s $f18,$f14,$f14
/* f07c2ec: e7ae00a8 */ swc1 $f14,0xa8($sp)
/* f07c2f0: 0c012974 */ jal sqrtf
/* f07c2f4: 46128300 */ add.s $f12,$f16,$f18
/* f07c2f8: 3c013e80 */ lui $at,0x3e80
/* f07c2fc: 44812000 */ mtc1 $at,$f4
/* f07c300: c7a200ac */ lwc1 $f2,0xac($sp)
/* f07c304: c7ae00a8 */ lwc1 $f14,0xa8($sp)
/* f07c308: 46002303 */ div.s $f12,$f4,$f0
/* f07c30c: 460c1082 */ mul.s $f2,$f2,$f12
/* f07c310: 00000000 */ nop
/* f07c314: 460c7382 */ mul.s $f14,$f14,$f12
/* f07c318: 00000000 */ nop
.L0f07c31c:
/* f07c31c: 44804000 */ mtc1 $zero,$f8
/* f07c320: 46007187 */ neg.s $f6,$f14
/* f07c324: 26020068 */ addiu $v0,$s0,0x68
/* f07c328: e6060064 */ swc1 $f6,0x64($s0)
/* f07c32c: e4480000 */ swc1 $f8,0x0($v0)
/* f07c330: 10000017 */ b .L0f07c390
/* f07c334: e602006c */ swc1 $f2,0x6c($s0)
.L0f07c338:
/* f07c338: 04600007 */ bltz $v1,.L0f07c358
/* f07c33c: 26020068 */ addiu $v0,$s0,0x68
/* f07c340: 3c0c800a */ lui $t4,%hi(g_Vars+0x38)
/* f07c344: 8d8c9ff8 */ lw $t4,%lo(g_Vars+0x38)($t4)
/* f07c348: 26020068 */ addiu $v0,$s0,0x68
/* f07c34c: 006c6823 */ subu $t5,$v1,$t4
/* f07c350: 1000000f */ b .L0f07c390
/* f07c354: ae0d00c0 */ sw $t5,0xc0($s0)
.L0f07c358:
/* f07c358: 3c017f1b */ lui $at,%hi(var7f1aa66c)
/* f07c35c: c42aa66c */ lwc1 $f10,%lo(var7f1aa66c)($at)
/* f07c360: c4400000 */ lwc1 $f0,0x0($v0)
/* f07c364: 3c017f1b */ lui $at,%hi(var7f1aa670)
/* f07c368: 4600503c */ c.lt.s $f10,$f0
/* f07c36c: 00000000 */ nop
/* f07c370: 45020008 */ bc1fl .L0f07c394
/* f07c374: 26030064 */ addiu $v1,$s0,0x64
/* f07c378: c430a670 */ lwc1 $f16,%lo(var7f1aa670)($at)
/* f07c37c: 3c01800a */ lui $at,%hi(g_Vars+0x44)
/* f07c380: c432a004 */ lwc1 $f18,%lo(g_Vars+0x44)($at)
/* f07c384: 46128102 */ mul.s $f4,$f16,$f18
/* f07c388: 46040181 */ sub.s $f6,$f0,$f4
/* f07c38c: e4460000 */ swc1 $f6,0x0($v0)
.L0f07c390:
/* f07c390: 26030064 */ addiu $v1,$s0,0x64
.L0f07c394:
/* f07c394: c4680000 */ lwc1 $f8,0x0($v1)
/* f07c398: 2605006c */ addiu $a1,$s0,0x6c
/* f07c39c: 3c04800a */ lui $a0,%hi(g_Vars+0x4b4)
/* f07c3a0: e7a8015c */ swc1 $f8,0x15c($sp)
/* f07c3a4: c44a0000 */ lwc1 $f10,0x0($v0)
/* f07c3a8: 8c84a474 */ lw $a0,%lo(g_Vars+0x4b4)($a0)
/* f07c3ac: e7aa0160 */ swc1 $f10,0x160($sp)
/* f07c3b0: c4b00000 */ lwc1 $f16,0x0($a1)
/* f07c3b4: e7b00164 */ swc1 $f16,0x164($sp)
/* f07c3b8: c4640000 */ lwc1 $f4,0x0($v1)
/* f07c3bc: c612007c */ lwc1 $f18,0x7c($s0)
/* f07c3c0: c4a80000 */ lwc1 $f8,0x0($a1)
/* f07c3c4: 46049180 */ add.s $f6,$f18,$f4
/* f07c3c8: 46064280 */ add.s $f10,$f8,$f6
/* f07c3cc: 0fc59585 */ jal stageGetIndex
/* f07c3d0: e7aa0174 */ swc1 $f10,0x174($sp)
/* f07c3d4: 2401000e */ addiu $at,$zero,0xe
/* f07c3d8: 14410022 */ bne $v0,$at,.L0f07c464
/* f07c3dc: 3c03800a */ lui $v1,%hi(g_Vars+0x38)
/* f07c3e0: 3c017f1b */ lui $at,%hi(var7f1aa674)
/* f07c3e4: c432a674 */ lwc1 $f18,%lo(var7f1aa674)($at)
/* f07c3e8: c630000c */ lwc1 $f16,0xc($s1)
/* f07c3ec: 3406ffff */ dli $a2,0xffff
/* f07c3f0: 02202025 */ or $a0,$s1,$zero
/* f07c3f4: 4612803c */ c.lt.s $f16,$f18
/* f07c3f8: 8fa50174 */ lw $a1,0x174($sp)
/* f07c3fc: 27a7015c */ addiu $a3,$sp,0x15c
/* f07c400: 45020009 */ bc1fl .L0f07c428
/* f07c404: c6040080 */ lwc1 $f4,0x80($s0)
/* f07c408: 02202025 */ or $a0,$s1,$zero
/* f07c40c: 0fc249af */ jal func0f0926bc
/* f07c410: 24050001 */ addiu $a1,$zero,0x1
/* f07c414: 8e0e0040 */ lw $t6,0x40($s0)
/* f07c418: 35cf0004 */ ori $t7,$t6,0x4
/* f07c41c: 100000df */ b .L0f07c79c
/* f07c420: ae0f0040 */ sw $t7,0x40($s0)
/* f07c424: c6040080 */ lwc1 $f4,0x80($s0)
.L0f07c428:
/* f07c428: 44804000 */ mtc1 $zero,$f8
/* f07c42c: 3c017f1b */ lui $at,%hi(var7f1aa678)
/* f07c430: 4608203c */ c.lt.s $f4,$f8
/* f07c434: 00000000 */ nop
/* f07c438: 45000004 */ bc1f .L0f07c44c
/* f07c43c: 00000000 */ nop
/* f07c440: 3c017f1b */ lui $at,%hi(var7f1aa67c)
/* f07c444: 10000002 */ b .L0f07c450
/* f07c448: c420a678 */ lwc1 $f0,%lo(var7f1aa678)($at)
.L0f07c44c:
/* f07c44c: c420a67c */ lwc1 $f0,%lo(var7f1aa67c)($at)
.L0f07c450:
/* f07c450: 44060000 */ mfc1 $a2,$f0
/* f07c454: 0fc1ee8e */ jal chopperIncrementMovement
/* f07c458: afa00010 */ sw $zero,0x10($sp)
/* f07c45c: 100000d0 */ b .L0f07c7a0
/* f07c460: 8fbf0034 */ lw $ra,0x34($sp)
.L0f07c464:
/* f07c464: 8c639ff8 */ lw $v1,%lo(g_Vars+0x38)($v1)
/* f07c468: 3c017f1b */ lui $at,%hi(var7f1aa680)
/* f07c46c: c420a680 */ lwc1 $f0,%lo(var7f1aa680)($at)
/* f07c470: 28610002 */ slti $at,$v1,0x2
/* f07c474: 24020001 */ addiu $v0,$zero,0x1
/* f07c478: 14200006 */ bnez $at,.L0f07c494
/* f07c47c: 46000086 */ mov.s $f2,$f0
/* f07c480: 24420001 */ addiu $v0,$v0,0x1
.L0f07c484:
/* f07c484: 0043082a */ slt $at,$v0,$v1
/* f07c488: 46001082 */ mul.s $f2,$f2,$f0
/* f07c48c: 5420fffd */ bnezl $at,.L0f07c484
/* f07c490: 24420001 */ addiu $v0,$v0,0x1
.L0f07c494:
/* f07c494: 3c017f1b */ lui $at,%hi(var7f1aa684)
/* f07c498: c42aa684 */ lwc1 $f10,%lo(var7f1aa684)($at)
/* f07c49c: c60600b4 */ lwc1 $f6,0xb4($s0)
/* f07c4a0: 3c017f1b */ lui $at,%hi(var7f1aa688)
/* f07c4a4: c430a688 */ lwc1 $f16,%lo(var7f1aa688)($at)
/* f07c4a8: 460a3300 */ add.s $f12,$f6,$f10
/* f07c4ac: 460c803c */ c.lt.s $f16,$f12
/* f07c4b0: 00000000 */ nop
/* f07c4b4: 4500001c */ bc1f .L0f07c528
/* f07c4b8: 00000000 */ nop
/* f07c4bc: 44806000 */ mtc1 $zero,$f12
/* f07c4c0: e7a20088 */ swc1 $f2,0x88($sp)
/* f07c4c4: 0c004b70 */ jal random
/* f07c4c8: e7ac0084 */ swc1 $f12,0x84($sp)
/* f07c4cc: 30580007 */ andi $t8,$v0,0x7
/* f07c4d0: 27190002 */ addiu $t9,$t8,0x2
/* f07c4d4: 44999000 */ mtc1 $t9,$f18
/* f07c4d8: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07c4dc: c7ac0084 */ lwc1 $f12,0x84($sp)
/* f07c4e0: 07210005 */ bgez $t9,.L0f07c4f8
/* f07c4e4: 46809120 */ cvt.s.w $f4,$f18
/* f07c4e8: 3c014f80 */ lui $at,0x4f80
/* f07c4ec: 44814000 */ mtc1 $at,$f8
/* f07c4f0: 00000000 */ nop
/* f07c4f4: 46082100 */ add.s $f4,$f4,$f8
.L0f07c4f8:
/* f07c4f8: 3c017f1b */ lui $at,%hi(var7f1aa68c)
/* f07c4fc: c426a68c */ lwc1 $f6,%lo(var7f1aa68c)($at)
/* f07c500: 8e090008 */ lw $t1,0x8($s0)
/* f07c504: 3c017f1b */ lui $at,%hi(var7f1aa690)
/* f07c508: 46062282 */ mul.s $f10,$f4,$f6
/* f07c50c: 00095000 */ sll $t2,$t1,0x0
/* f07c510: 05410005 */ bgez $t2,.L0f07c528
/* f07c514: e60a00b8 */ swc1 $f10,0xb8($s0)
/* f07c518: c61000b8 */ lwc1 $f16,0xb8($s0)
/* f07c51c: c432a690 */ lwc1 $f18,%lo(var7f1aa690)($at)
/* f07c520: 46128202 */ mul.s $f8,$f16,$f18
/* f07c524: e60800b8 */ swc1 $f8,0xb8($s0)
.L0f07c528:
/* f07c528: 0c0068f7 */ jal sinf
/* f07c52c: e7a20088 */ swc1 $f2,0x88($sp)
/* f07c530: c60600b8 */ lwc1 $f6,0xb8($s0)
/* f07c534: c7a40160 */ lwc1 $f4,0x160($sp)
/* f07c538: c7b2015c */ lwc1 $f18,0x15c($sp)
/* f07c53c: 46003282 */ mul.s $f10,$f6,$f0
/* f07c540: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07c544: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07c548: c42ca00c */ lwc1 $f12,%lo(g_Vars+0x4c)($at)
/* f07c54c: 26240008 */ addiu $a0,$s1,0x8
/* f07c550: 26250028 */ addiu $a1,$s1,0x28
/* f07c554: 27a60098 */ addiu $a2,$sp,0x98
/* f07c558: 460a2400 */ add.s $f16,$f4,$f10
/* f07c55c: 24070020 */ addiu $a3,$zero,0x20
/* f07c560: e7b00160 */ swc1 $f16,0x160($sp)
/* f07c564: c60800a4 */ lwc1 $f8,0xa4($s0)
/* f07c568: c6040098 */ lwc1 $f4,0x98($s0)
/* f07c56c: 46089182 */ mul.s $f6,$f18,$f8
/* f07c570: 46043280 */ add.s $f10,$f6,$f4
/* f07c574: 46025482 */ mul.s $f18,$f10,$f2
/* f07c578: e7b2008c */ swc1 $f18,0x8c($sp)
/* f07c57c: c60800a4 */ lwc1 $f8,0xa4($s0)
/* f07c580: c604009c */ lwc1 $f4,0x9c($s0)
/* f07c584: 46088182 */ mul.s $f6,$f16,$f8
/* f07c588: c7a80164 */ lwc1 $f8,0x164($sp)
/* f07c58c: 46043280 */ add.s $f10,$f6,$f4
/* f07c590: 46025402 */ mul.s $f16,$f10,$f2
/* f07c594: e7b00090 */ swc1 $f16,0x90($sp)
/* f07c598: c60600a4 */ lwc1 $f6,0xa4($s0)
/* f07c59c: c60a00a0 */ lwc1 $f10,0xa0($s0)
/* f07c5a0: 46064102 */ mul.s $f4,$f8,$f6
/* f07c5a4: 460a2200 */ add.s $f8,$f4,$f10
/* f07c5a8: 46024182 */ mul.s $f6,$f8,$f2
/* f07c5ac: e7a60094 */ swc1 $f6,0x94($sp)
/* f07c5b0: 460c9102 */ mul.s $f4,$f18,$f12
/* f07c5b4: c62a0008 */ lwc1 $f10,0x8($s1)
/* f07c5b8: 460c8482 */ mul.s $f18,$f16,$f12
/* f07c5bc: 460a2200 */ add.s $f8,$f4,$f10
/* f07c5c0: e7a80098 */ swc1 $f8,0x98($sp)
/* f07c5c4: c624000c */ lwc1 $f4,0xc($s1)
/* f07c5c8: 460c3202 */ mul.s $f8,$f6,$f12
/* f07c5cc: 46049280 */ add.s $f10,$f18,$f4
/* f07c5d0: e7aa009c */ swc1 $f10,0x9c($sp)
/* f07c5d4: c6300010 */ lwc1 $f16,0x10($s1)
/* f07c5d8: afa50040 */ sw $a1,0x40($sp)
/* f07c5dc: afa40044 */ sw $a0,0x44($sp)
/* f07c5e0: 46104480 */ add.s $f18,$f8,$f16
/* f07c5e4: 0c00b784 */ jal cd0002de10
/* f07c5e8: e7b200a0 */ swc1 $f18,0xa0($sp)
/* f07c5ec: 14400058 */ bnez $v0,.L0f07c750
/* f07c5f0: 8fa40044 */ lw $a0,0x44($sp)
/* f07c5f4: 3c0142c8 */ lui $at,0x42c8
/* f07c5f8: 44815000 */ mtc1 $at,$f10
/* f07c5fc: c624000c */ lwc1 $f4,0xc($s1)
/* f07c600: 3c0540a0 */ lui $a1,0x40a0
/* f07c604: 00003825 */ or $a3,$zero,$zero
/* f07c608: 460a2180 */ add.s $f6,$f4,$f10
/* f07c60c: e626000c */ swc1 $f6,0xc($s1)
/* f07c610: afa00010 */ sw $zero,0x10($sp)
/* f07c614: 8fa60040 */ lw $a2,0x40($sp)
/* f07c618: 0c00a8cc */ jal cdFindGroundYSimple
/* f07c61c: 8fa40044 */ lw $a0,0x44($sp)
/* f07c620: e7a00060 */ swc1 $f0,0x60($sp)
/* f07c624: 3c0142c8 */ lui $at,0x42c8
/* f07c628: 44818000 */ mtc1 $at,$f16
/* f07c62c: c628000c */ lwc1 $f8,0xc($s1)
/* f07c630: 3c067f1b */ lui $a2,%hi(var7f1aa044)
/* f07c634: 24c6a044 */ addiu $a2,$a2,%lo(var7f1aa044)
/* f07c638: 46104481 */ sub.s $f18,$f8,$f16
/* f07c63c: 27a40064 */ addiu $a0,$sp,0x64
/* f07c640: 240530a1 */ addiu $a1,$zero,0x30a1
/* f07c644: 0c0093af */ jal cdGetPos
/* f07c648: e632000c */ swc1 $f18,0xc($s1)
/* f07c64c: 3c0141a0 */ lui $at,0x41a0
/* f07c650: 44813000 */ mtc1 $at,$f6
/* f07c654: c7aa0060 */ lwc1 $f10,0x60($sp)
/* f07c658: c7a40064 */ lwc1 $f4,0x64($sp)
/* f07c65c: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f07c660: 46065200 */ add.s $f8,$f10,$f6
/* f07c664: 8fa40044 */ lw $a0,0x44($sp)
/* f07c668: 8fa50040 */ lw $a1,0x40($sp)
/* f07c66c: 27a60098 */ addiu $a2,$sp,0x98
/* f07c670: e7a8009c */ swc1 $f8,0x9c($sp)
/* f07c674: 27a70050 */ addiu $a3,$sp,0x50
/* f07c678: e7a40098 */ swc1 $f4,0x98($sp)
/* f07c67c: 0fc1979d */ jal func0f065e74
/* f07c680: e7b000a0 */ swc1 $f16,0xa0($sp)
/* f07c684: c7b20098 */ lwc1 $f18,0x98($sp)
/* f07c688: 02202025 */ or $a0,$s1,$zero
/* f07c68c: e6320008 */ swc1 $f18,0x8($s1)
/* f07c690: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f07c694: e624000c */ swc1 $f4,0xc($s1)
/* f07c698: c7aa00a0 */ lwc1 $f10,0xa0($sp)
/* f07c69c: 0fc19711 */ jal propDeregisterRooms
/* f07c6a0: e62a0010 */ swc1 $f10,0x10($s1)
/* f07c6a4: 27a40050 */ addiu $a0,$sp,0x50
/* f07c6a8: 0fc195e9 */ jal roomsCopy
/* f07c6ac: 8fa50040 */ lw $a1,0x40($sp)
/* f07c6b0: 02002025 */ or $a0,$s0,$zero
/* f07c6b4: 00002825 */ or $a1,$zero,$zero
/* f07c6b8: 0fc1a71c */ jal func0f069c70
/* f07c6bc: 24060001 */ addiu $a2,$zero,0x1
/* f07c6c0: 920b0096 */ lbu $t3,0x96($s0)
/* f07c6c4: 02002025 */ or $a0,$s0,$zero
/* f07c6c8: 24050008 */ addiu $a1,$zero,0x8
/* f07c6cc: 256c0001 */ addiu $t4,$t3,0x1
/* f07c6d0: 0fc20733 */ jal objDeform
/* f07c6d4: a20c0096 */ sb $t4,0x96($s0)
/* f07c6d8: 862d0028 */ lh $t5,0x28($s1)
/* f07c6dc: 3c013f80 */ lui $at,0x3f80
/* f07c6e0: 44803000 */ mtc1 $zero,$f6
/* f07c6e4: 44814000 */ mtc1 $at,$f8
/* f07c6e8: 44808000 */ mtc1 $zero,$f16
/* f07c6ec: 02202025 */ or $a0,$s1,$zero
/* f07c6f0: 24050001 */ addiu $a1,$zero,0x1
/* f07c6f4: 3406ffff */ dli $a2,0xffff
/* f07c6f8: a7ad0072 */ sh $t5,0x72($sp)
/* f07c6fc: e7a60074 */ swc1 $f6,0x74($sp)
/* f07c700: e7a80078 */ swc1 $f8,0x78($sp)
/* f07c704: 0fc249af */ jal func0f0926bc
/* f07c708: e7b0007c */ swc1 $f16,0x7c($sp)
/* f07c70c: 87b80072 */ lh $t8,0x72($sp)
/* f07c710: 240e0001 */ addiu $t6,$zero,0x1
/* f07c714: 27af0098 */ addiu $t7,$sp,0x98
/* f07c718: 27b90074 */ addiu $t9,$sp,0x74
/* f07c71c: afb90020 */ sw $t9,0x20($sp)
/* f07c720: afaf0018 */ sw $t7,0x18($sp)
/* f07c724: afae0014 */ sw $t6,0x14($sp)
/* f07c728: 00002025 */ or $a0,$zero,$zero
/* f07c72c: 8fa50044 */ lw $a1,0x44($sp)
/* f07c730: 8fa60040 */ lw $a2,0x40($sp)
/* f07c734: 2407000d */ addiu $a3,$zero,0xd
/* f07c738: afa00010 */ sw $zero,0x10($sp)
/* f07c73c: 0fc4a7d5 */ jal explosionCreate
/* f07c740: afb8001c */ sw $t8,0x1c($sp)
/* f07c744: 24090001 */ addiu $t1,$zero,0x1
/* f07c748: 10000014 */ b .L0f07c79c
/* f07c74c: ae0900e4 */ sw $t1,0xe4($s0)
.L0f07c750:
/* f07c750: 8fa50040 */ lw $a1,0x40($sp)
/* f07c754: 0fc4ba08 */ jal smokeCreateSimple
/* f07c758: 24060003 */ addiu $a2,$zero,0x3
/* f07c75c: c6120080 */ lwc1 $f18,0x80($s0)
/* f07c760: 44802000 */ mtc1 $zero,$f4
/* f07c764: 02202025 */ or $a0,$s1,$zero
/* f07c768: 8fa50174 */ lw $a1,0x174($sp)
/* f07c76c: 4604903c */ c.lt.s $f18,$f4
/* f07c770: 27a7015c */ addiu $a3,$sp,0x15c
/* f07c774: 3c017f1b */ lui $at,%hi(var7f1aa694)
/* f07c778: 45000004 */ bc1f .L0f07c78c
/* f07c77c: 00000000 */ nop
/* f07c780: 3c017f1b */ lui $at,%hi(var7f1aa698)
/* f07c784: 10000002 */ b .L0f07c790
/* f07c788: c420a694 */ lwc1 $f0,%lo(var7f1aa694)($at)
.L0f07c78c:
/* f07c78c: c420a698 */ lwc1 $f0,%lo(var7f1aa698)($at)
.L0f07c790:
/* f07c790: 44060000 */ mfc1 $a2,$f0
/* f07c794: 0fc1ee8e */ jal chopperIncrementMovement
/* f07c798: afa00010 */ sw $zero,0x10($sp)
.L0f07c79c:
/* f07c79c: 8fbf0034 */ lw $ra,0x34($sp)
.L0f07c7a0:
/* f07c7a0: 8fb0002c */ lw $s0,0x2c($sp)
/* f07c7a4: 8fb10030 */ lw $s1,0x30($sp)
/* f07c7a8: 03e00008 */ jr $ra
/* f07c7ac: 27bd0180 */ addiu $sp,$sp,0x180
);
#else
GLOBAL_ASM(
glabel chopperTickFall
.late_rodata
glabel var7f1aa66c
.word 0xbf333333
glabel var7f1aa670
.word 0x3c1374bc
glabel var7f1aa674
.word 0xc6ea6000
glabel var7f1aa678
.word 0x40490fdb
glabel var7f1aa67c
.word 0xc0490fdb
glabel var7f1aa680
.word 0x3f7ae148
glabel var7f1aa684
.word 0x3d567664
glabel var7f1aa688
.word 0x40c907a9
glabel var7f1aa68c
.word 0x3c23d70a
glabel var7f1aa690
.word 0x3e19999a
glabel var7f1aa694
.word 0x40490fdb
glabel var7f1aa698
.word 0xc0490fdb
.text
/* f07abdc: 27bdfe80 */ addiu $sp,$sp,-384
/* f07abe0: afbf0034 */ sw $ra,0x34($sp)
/* f07abe4: afb10030 */ sw $s1,0x30($sp)
/* f07abe8: afb0002c */ sw $s0,0x2c($sp)
/* f07abec: 8c900004 */ lw $s0,0x4($a0)
/* f07abf0: 24010002 */ addiu $at,$zero,0x2
/* f07abf4: 00808825 */ or $s1,$a0,$zero
/* f07abf8: 8e0200c0 */ lw $v0,0xc0($s0)
/* f07abfc: 3c0e800a */ lui $t6,0x800a
/* f07ac00: 02002825 */ or $a1,$s0,$zero
/* f07ac04: 14410077 */ bne $v0,$at,.NB0f07ade4
/* f07ac08: 00000000 */ sll $zero,$zero,0x0
/* f07ac0c: 8dcee6f8 */ lw $t6,-0x1908($t6)
/* f07ac10: 8e080088 */ lw $t0,0x88($s0)
/* f07ac14: 44801000 */ mtc1 $zero,$f2
/* f07ac18: 44807000 */ mtc1 $zero,$f14
/* f07ac1c: 004e7823 */ subu $t7,$v0,$t6
/* f07ac20: 1100006a */ beqz $t0,.NB0f07adcc
/* f07ac24: ae0f00c0 */ sw $t7,0xc0($s0)
/* f07ac28: 95070006 */ lhu $a3,0x6($t0)
/* f07ac2c: 00001825 */ or $v1,$zero,$zero
/* f07ac30: 58e0001c */ blezl $a3,.NB0f07aca4
/* f07ac34: 920a0097 */ lbu $t2,0x97($s0)
/* f07ac38: 92040097 */ lbu $a0,0x97($s0)
/* f07ac3c: 8e06008c */ lw $a2,0x8c($s0)
.NB0f07ac40:
/* f07ac40: 50800004 */ beqzl $a0,.NB0f07ac54
/* f07ac44: 24780001 */ addiu $t8,$v1,0x1
/* f07ac48: 1000000d */ beqz $zero,.NB0f07ac80
/* f07ac4c: 00601025 */ or $v0,$v1,$zero
/* f07ac50: 24780001 */ addiu $t8,$v1,0x1
.NB0f07ac54:
/* f07ac54: 0307001a */ div $zero,$t8,$a3
/* f07ac58: 00001010 */ mfhi $v0
/* f07ac5c: 14e00002 */ bnez $a3,.NB0f07ac68
/* f07ac60: 00000000 */ sll $zero,$zero,0x0
/* f07ac64: 0007000d */ break 0x7
.NB0f07ac68:
/* f07ac68: 2401ffff */ addiu $at,$zero,-1
/* f07ac6c: 14e10004 */ bne $a3,$at,.NB0f07ac80
/* f07ac70: 3c018000 */ lui $at,0x8000
/* f07ac74: 17010002 */ bne $t8,$at,.NB0f07ac80
/* f07ac78: 00000000 */ sll $zero,$zero,0x0
/* f07ac7c: 0006000d */ break 0x6
.NB0f07ac80:
/* f07ac80: 50460008 */ beql $v0,$a2,.NB0f07aca4
/* f07ac84: 920a0097 */ lbu $t2,0x97($s0)
/* f07ac88: 8cb90088 */ lw $t9,0x88($a1)
/* f07ac8c: 24630001 */ addiu $v1,$v1,0x1
/* f07ac90: 97290006 */ lhu $t1,0x6($t9)
/* f07ac94: 0069082a */ slt $at,$v1,$t1
/* f07ac98: 1420ffe9 */ bnez $at,.NB0f07ac40
/* f07ac9c: 00000000 */ sll $zero,$zero,0x0
/* f07aca0: 920a0097 */ lbu $t2,0x97($s0)
.NB0f07aca4:
/* f07aca4: 24050002 */ addiu $a1,$zero,0x2
/* f07aca8: 246b0001 */ addiu $t3,$v1,0x1
/* f07acac: 5140000f */ beqzl $t2,.NB0f07acec
/* f07acb0: 00601025 */ or $v0,$v1,$zero
/* f07acb4: 0167001a */ div $zero,$t3,$a3
/* f07acb8: 00001010 */ mfhi $v0
/* f07acbc: 14e00002 */ bnez $a3,.NB0f07acc8
/* f07acc0: 00000000 */ sll $zero,$zero,0x0
/* f07acc4: 0007000d */ break 0x7
.NB0f07acc8:
/* f07acc8: 2401ffff */ addiu $at,$zero,-1
/* f07accc: 14e10004 */ bne $a3,$at,.NB0f07ace0
/* f07acd0: 3c018000 */ lui $at,0x8000
/* f07acd4: 15610002 */ bne $t3,$at,.NB0f07ace0
/* f07acd8: 00000000 */ sll $zero,$zero,0x0
/* f07acdc: 0006000d */ break 0x6
.NB0f07ace0:
/* f07ace0: 10000003 */ beqz $zero,.NB0f07acf0
/* f07ace4: 8d0c0000 */ lw $t4,0x0($t0)
/* f07ace8: 00601025 */ or $v0,$v1,$zero
.NB0f07acec:
/* f07acec: 8d0c0000 */ lw $t4,0x0($t0)
.NB0f07acf0:
/* f07acf0: 00026880 */ sll $t5,$v0,0x2
/* f07acf4: 27a60104 */ addiu $a2,$sp,0x104
/* f07acf8: 018d7021 */ addu $t6,$t4,$t5
/* f07acfc: 8dc40000 */ lw $a0,0x0($t6)
/* f07ad00: 0fc43fc4 */ jal padUnpack
/* f07ad04: afa30158 */ sw $v1,0x158($sp)
/* f07ad08: 920f0097 */ lbu $t7,0x97($s0)
/* f07ad0c: 8fa30158 */ lw $v1,0x158($sp)
/* f07ad10: 24050002 */ addiu $a1,$zero,0x2
/* f07ad14: 51e00005 */ beqzl $t7,.NB0f07ad2c
/* f07ad18: 8e080088 */ lw $t0,0x88($s0)
/* f07ad1c: 00601025 */ or $v0,$v1,$zero
/* f07ad20: 1000000f */ beqz $zero,.NB0f07ad60
/* f07ad24: 8e080088 */ lw $t0,0x88($s0)
/* f07ad28: 8e080088 */ lw $t0,0x88($s0)
.NB0f07ad2c:
/* f07ad2c: 24780001 */ addiu $t8,$v1,0x1
/* f07ad30: 95190006 */ lhu $t9,0x6($t0)
/* f07ad34: 0319001a */ div $zero,$t8,$t9
/* f07ad38: 00001010 */ mfhi $v0
/* f07ad3c: 17200002 */ bnez $t9,.NB0f07ad48
/* f07ad40: 00000000 */ sll $zero,$zero,0x0
/* f07ad44: 0007000d */ break 0x7
.NB0f07ad48:
/* f07ad48: 2401ffff */ addiu $at,$zero,-1
/* f07ad4c: 17210004 */ bne $t9,$at,.NB0f07ad60
/* f07ad50: 3c018000 */ lui $at,0x8000
/* f07ad54: 17010002 */ bne $t8,$at,.NB0f07ad60
/* f07ad58: 00000000 */ sll $zero,$zero,0x0
/* f07ad5c: 0006000d */ break 0x6
.NB0f07ad60:
/* f07ad60: 8d090000 */ lw $t1,0x0($t0)
/* f07ad64: 00025080 */ sll $t2,$v0,0x2
/* f07ad68: 27a600b0 */ addiu $a2,$sp,0xb0
/* f07ad6c: 012a5821 */ addu $t3,$t1,$t2
/* f07ad70: 0fc43fc4 */ jal padUnpack
/* f07ad74: 8d640000 */ lw $a0,0x0($t3)
/* f07ad78: c7a40104 */ lwc1 $f4,0x104($sp)
/* f07ad7c: c7a600b0 */ lwc1 $f6,0xb0($sp)
/* f07ad80: c7a8010c */ lwc1 $f8,0x10c($sp)
/* f07ad84: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f07ad88: 46062081 */ sub.s $f2,$f4,$f6
/* f07ad8c: 460a4381 */ sub.s $f14,$f8,$f10
/* f07ad90: 46021402 */ mul.s $f16,$f2,$f2
/* f07ad94: e7a200ac */ swc1 $f2,0xac($sp)
/* f07ad98: 460e7482 */ mul.s $f18,$f14,$f14
/* f07ad9c: e7ae00a8 */ swc1 $f14,0xa8($sp)
/* f07ada0: 0c012e84 */ jal sqrtf
/* f07ada4: 46128300 */ add.s $f12,$f16,$f18
/* f07ada8: 3c013e80 */ lui $at,0x3e80
/* f07adac: 44812000 */ mtc1 $at,$f4
/* f07adb0: c7a200ac */ lwc1 $f2,0xac($sp)
/* f07adb4: c7ae00a8 */ lwc1 $f14,0xa8($sp)
/* f07adb8: 46002303 */ div.s $f12,$f4,$f0
/* f07adbc: 460c1082 */ mul.s $f2,$f2,$f12
/* f07adc0: 00000000 */ sll $zero,$zero,0x0
/* f07adc4: 460c7382 */ mul.s $f14,$f14,$f12
/* f07adc8: 00000000 */ sll $zero,$zero,0x0
.NB0f07adcc:
/* f07adcc: 44804000 */ mtc1 $zero,$f8
/* f07add0: 46007187 */ neg.s $f6,$f14
/* f07add4: e602006c */ swc1 $f2,0x6c($s0)
/* f07add8: e6060064 */ swc1 $f6,0x64($s0)
/* f07addc: 10000017 */ beqz $zero,.NB0f07ae3c
/* f07ade0: e6080068 */ swc1 $f8,0x68($s0)
.NB0f07ade4:
/* f07ade4: 04400006 */ bltz $v0,.NB0f07ae00
/* f07ade8: 3c017f1a */ lui $at,0x7f1a
/* f07adec: 3c0c800a */ lui $t4,0x800a
/* f07adf0: 8d8ce6f8 */ lw $t4,-0x1908($t4)
/* f07adf4: 004c6823 */ subu $t5,$v0,$t4
/* f07adf8: 10000010 */ beqz $zero,.NB0f07ae3c
/* f07adfc: ae0d00c0 */ sw $t5,0xc0($s0)
.NB0f07ae00:
/* f07ae00: c42a498c */ lwc1 $f10,0x498c($at)
/* f07ae04: c7b00160 */ lwc1 $f16,0x160($sp)
/* f07ae08: 3c017f1a */ lui $at,0x7f1a
/* f07ae0c: 4610503c */ c.lt.s $f10,$f16
/* f07ae10: 00000000 */ sll $zero,$zero,0x0
/* f07ae14: 4502000a */ bc1fl .NB0f07ae40
/* f07ae18: 26020064 */ addiu $v0,$s0,0x64
/* f07ae1c: c4324990 */ lwc1 $f18,0x4990($at)
/* f07ae20: 3c01800a */ lui $at,0x800a
/* f07ae24: c424e704 */ lwc1 $f4,-0x18fc($at)
/* f07ae28: 26020068 */ addiu $v0,$s0,0x68
/* f07ae2c: c4480000 */ lwc1 $f8,0x0($v0)
/* f07ae30: 46049182 */ mul.s $f6,$f18,$f4
/* f07ae34: 46064281 */ sub.s $f10,$f8,$f6
/* f07ae38: e44a0000 */ swc1 $f10,0x0($v0)
.NB0f07ae3c:
/* f07ae3c: 26020064 */ addiu $v0,$s0,0x64
.NB0f07ae40:
/* f07ae40: c4500000 */ lwc1 $f16,0x0($v0)
/* f07ae44: 2603006c */ addiu $v1,$s0,0x6c
/* f07ae48: 3c04800a */ lui $a0,0x800a
/* f07ae4c: e7b0015c */ swc1 $f16,0x15c($sp)
/* f07ae50: c6120068 */ lwc1 $f18,0x68($s0)
/* f07ae54: 8c84eb74 */ lw $a0,-0x148c($a0)
/* f07ae58: e7b20160 */ swc1 $f18,0x160($sp)
/* f07ae5c: c4640000 */ lwc1 $f4,0x0($v1)
/* f07ae60: e7a40164 */ swc1 $f4,0x164($sp)
/* f07ae64: c4460000 */ lwc1 $f6,0x0($v0)
/* f07ae68: c608007c */ lwc1 $f8,0x7c($s0)
/* f07ae6c: c4700000 */ lwc1 $f16,0x0($v1)
/* f07ae70: 46064280 */ add.s $f10,$f8,$f6
/* f07ae74: 460a8480 */ add.s $f18,$f16,$f10
/* f07ae78: 0fc57f85 */ jal stageGetIndex
/* f07ae7c: e7b20174 */ swc1 $f18,0x174($sp)
/* f07ae80: 2401000e */ addiu $at,$zero,0xe
/* f07ae84: 14410022 */ bne $v0,$at,.NB0f07af10
/* f07ae88: 3c03800a */ lui $v1,0x800a
/* f07ae8c: 3c017f1a */ lui $at,0x7f1a
/* f07ae90: c4284994 */ lwc1 $f8,0x4994($at)
/* f07ae94: c624000c */ lwc1 $f4,0xc($s1)
/* f07ae98: 3406ffff */ dli $a2,0xffff
/* f07ae9c: 02202025 */ or $a0,$s1,$zero
/* f07aea0: 4608203c */ c.lt.s $f4,$f8
/* f07aea4: 8fa50174 */ lw $a1,0x174($sp)
/* f07aea8: 27a7015c */ addiu $a3,$sp,0x15c
/* f07aeac: 45020009 */ bc1fl .NB0f07aed4
/* f07aeb0: c6060080 */ lwc1 $f6,0x80($s0)
/* f07aeb4: 02202025 */ or $a0,$s1,$zero
/* f07aeb8: 0fc2433d */ jal func0f0926bc
/* f07aebc: 24050001 */ addiu $a1,$zero,0x1
/* f07aec0: 8e0e0040 */ lw $t6,0x40($s0)
/* f07aec4: 35cf0004 */ ori $t7,$t6,0x4
/* f07aec8: 100000df */ beqz $zero,.NB0f07b248
/* f07aecc: ae0f0040 */ sw $t7,0x40($s0)
/* f07aed0: c6060080 */ lwc1 $f6,0x80($s0)
.NB0f07aed4:
/* f07aed4: 44808000 */ mtc1 $zero,$f16
/* f07aed8: 3c017f1a */ lui $at,0x7f1a
/* f07aedc: 4610303c */ c.lt.s $f6,$f16
/* f07aee0: 00000000 */ sll $zero,$zero,0x0
/* f07aee4: 45000004 */ bc1f .NB0f07aef8
/* f07aee8: 00000000 */ sll $zero,$zero,0x0
/* f07aeec: 3c017f1a */ lui $at,0x7f1a
/* f07aef0: 10000002 */ beqz $zero,.NB0f07aefc
/* f07aef4: c4204998 */ lwc1 $f0,0x4998($at)
.NB0f07aef8:
/* f07aef8: c420499c */ lwc1 $f0,0x499c($at)
.NB0f07aefc:
/* f07aefc: 44060000 */ mfc1 $a2,$f0
/* f07af00: 0fc1e93a */ jal chopperIncrementMovement
/* f07af04: afa00010 */ sw $zero,0x10($sp)
/* f07af08: 100000d0 */ beqz $zero,.NB0f07b24c
/* f07af0c: 8fbf0034 */ lw $ra,0x34($sp)
.NB0f07af10:
/* f07af10: 8c63e6f8 */ lw $v1,-0x1908($v1)
/* f07af14: 3c017f1a */ lui $at,0x7f1a
/* f07af18: c42049a0 */ lwc1 $f0,0x49a0($at)
/* f07af1c: 28610002 */ slti $at,$v1,0x2
/* f07af20: 24020001 */ addiu $v0,$zero,0x1
/* f07af24: 14200006 */ bnez $at,.NB0f07af40
/* f07af28: 46000086 */ mov.s $f2,$f0
/* f07af2c: 24420001 */ addiu $v0,$v0,0x1
.NB0f07af30:
/* f07af30: 0043082a */ slt $at,$v0,$v1
/* f07af34: 46001082 */ mul.s $f2,$f2,$f0
/* f07af38: 5420fffd */ bnezl $at,.NB0f07af30
/* f07af3c: 24420001 */ addiu $v0,$v0,0x1
.NB0f07af40:
/* f07af40: 3c017f1a */ lui $at,0x7f1a
/* f07af44: c43249a4 */ lwc1 $f18,0x49a4($at)
/* f07af48: c60a00b4 */ lwc1 $f10,0xb4($s0)
/* f07af4c: 3c017f1a */ lui $at,0x7f1a
/* f07af50: c42449a8 */ lwc1 $f4,0x49a8($at)
/* f07af54: 46125300 */ add.s $f12,$f10,$f18
/* f07af58: 460c203c */ c.lt.s $f4,$f12
/* f07af5c: 00000000 */ sll $zero,$zero,0x0
/* f07af60: 4500001c */ bc1f .NB0f07afd4
/* f07af64: 00000000 */ sll $zero,$zero,0x0
/* f07af68: 44806000 */ mtc1 $zero,$f12
/* f07af6c: e7a20088 */ swc1 $f2,0x88($sp)
/* f07af70: 0c004d84 */ jal random
/* f07af74: e7ac0084 */ swc1 $f12,0x84($sp)
/* f07af78: 30580007 */ andi $t8,$v0,0x7
/* f07af7c: 27190002 */ addiu $t9,$t8,0x2
/* f07af80: 44994000 */ mtc1 $t9,$f8
/* f07af84: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07af88: c7ac0084 */ lwc1 $f12,0x84($sp)
/* f07af8c: 07210005 */ bgez $t9,.NB0f07afa4
/* f07af90: 468041a0 */ cvt.s.w $f6,$f8
/* f07af94: 3c014f80 */ lui $at,0x4f80
/* f07af98: 44818000 */ mtc1 $at,$f16
/* f07af9c: 00000000 */ sll $zero,$zero,0x0
/* f07afa0: 46103180 */ add.s $f6,$f6,$f16
.NB0f07afa4:
/* f07afa4: 3c017f1a */ lui $at,0x7f1a
/* f07afa8: c42a49ac */ lwc1 $f10,0x49ac($at)
/* f07afac: 8e090008 */ lw $t1,0x8($s0)
/* f07afb0: 3c017f1a */ lui $at,0x7f1a
/* f07afb4: 460a3482 */ mul.s $f18,$f6,$f10
/* f07afb8: 00095000 */ sll $t2,$t1,0x0
/* f07afbc: 05410005 */ bgez $t2,.NB0f07afd4
/* f07afc0: e61200b8 */ swc1 $f18,0xb8($s0)
/* f07afc4: c60400b8 */ lwc1 $f4,0xb8($s0)
/* f07afc8: c42849b0 */ lwc1 $f8,0x49b0($at)
/* f07afcc: 46082402 */ mul.s $f16,$f4,$f8
/* f07afd0: e61000b8 */ swc1 $f16,0xb8($s0)
.NB0f07afd4:
/* f07afd4: 0c006d55 */ jal sinf
/* f07afd8: e7a20088 */ swc1 $f2,0x88($sp)
/* f07afdc: c60a00b8 */ lwc1 $f10,0xb8($s0)
/* f07afe0: c7a60160 */ lwc1 $f6,0x160($sp)
/* f07afe4: c7a8015c */ lwc1 $f8,0x15c($sp)
/* f07afe8: 46005482 */ mul.s $f18,$f10,$f0
/* f07afec: c7a20088 */ lwc1 $f2,0x88($sp)
/* f07aff0: 3c01800a */ lui $at,0x800a
/* f07aff4: c42ce70c */ lwc1 $f12,-0x18f4($at)
/* f07aff8: 26240008 */ addiu $a0,$s1,0x8
/* f07affc: 26250028 */ addiu $a1,$s1,0x28
/* f07b000: 27a60098 */ addiu $a2,$sp,0x98
/* f07b004: 46123100 */ add.s $f4,$f6,$f18
/* f07b008: 24070020 */ addiu $a3,$zero,0x20
/* f07b00c: e7a40160 */ swc1 $f4,0x160($sp)
/* f07b010: c61000a4 */ lwc1 $f16,0xa4($s0)
/* f07b014: c6060098 */ lwc1 $f6,0x98($s0)
/* f07b018: 46104282 */ mul.s $f10,$f8,$f16
/* f07b01c: 46065480 */ add.s $f18,$f10,$f6
/* f07b020: 46029202 */ mul.s $f8,$f18,$f2
/* f07b024: e7a8008c */ swc1 $f8,0x8c($sp)
/* f07b028: c61000a4 */ lwc1 $f16,0xa4($s0)
/* f07b02c: c606009c */ lwc1 $f6,0x9c($s0)
/* f07b030: 46102282 */ mul.s $f10,$f4,$f16
/* f07b034: c7b00164 */ lwc1 $f16,0x164($sp)
/* f07b038: 46065480 */ add.s $f18,$f10,$f6
/* f07b03c: 46029102 */ mul.s $f4,$f18,$f2
/* f07b040: e7a40090 */ swc1 $f4,0x90($sp)
/* f07b044: c60a00a4 */ lwc1 $f10,0xa4($s0)
/* f07b048: c61200a0 */ lwc1 $f18,0xa0($s0)
/* f07b04c: 460a8182 */ mul.s $f6,$f16,$f10
/* f07b050: 46123400 */ add.s $f16,$f6,$f18
/* f07b054: 46028282 */ mul.s $f10,$f16,$f2
/* f07b058: e7aa0094 */ swc1 $f10,0x94($sp)
/* f07b05c: 460c4182 */ mul.s $f6,$f8,$f12
/* f07b060: c6320008 */ lwc1 $f18,0x8($s1)
/* f07b064: 460c2202 */ mul.s $f8,$f4,$f12
/* f07b068: 46123400 */ add.s $f16,$f6,$f18
/* f07b06c: e7b00098 */ swc1 $f16,0x98($sp)
/* f07b070: c626000c */ lwc1 $f6,0xc($s1)
/* f07b074: 460c5402 */ mul.s $f16,$f10,$f12
/* f07b078: 46064480 */ add.s $f18,$f8,$f6
/* f07b07c: e7b2009c */ swc1 $f18,0x9c($sp)
/* f07b080: c6240010 */ lwc1 $f4,0x10($s1)
/* f07b084: afa50040 */ sw $a1,0x40($sp)
/* f07b088: afa40044 */ sw $a0,0x44($sp)
/* f07b08c: 46048200 */ add.s $f8,$f16,$f4
/* f07b090: 0c00bc86 */ jal cd0002de10
/* f07b094: e7a800a0 */ swc1 $f8,0xa0($sp)
/* f07b098: 14400058 */ bnez $v0,.NB0f07b1fc
/* f07b09c: 8fa40044 */ lw $a0,0x44($sp)
/* f07b0a0: 3c0142c8 */ lui $at,0x42c8
/* f07b0a4: 44819000 */ mtc1 $at,$f18
/* f07b0a8: c626000c */ lwc1 $f6,0xc($s1)
/* f07b0ac: 3c0540a0 */ lui $a1,0x40a0
/* f07b0b0: 00003825 */ or $a3,$zero,$zero
/* f07b0b4: 46123280 */ add.s $f10,$f6,$f18
/* f07b0b8: e62a000c */ swc1 $f10,0xc($s1)
/* f07b0bc: afa00010 */ sw $zero,0x10($sp)
/* f07b0c0: 8fa60040 */ lw $a2,0x40($sp)
/* f07b0c4: 0c00adde */ jal cdFindGroundYSimple
/* f07b0c8: 8fa40044 */ lw $a0,0x44($sp)
/* f07b0cc: e7a00060 */ swc1 $f0,0x60($sp)
/* f07b0d0: 3c0142c8 */ lui $at,0x42c8
/* f07b0d4: 44812000 */ mtc1 $at,$f4
/* f07b0d8: c630000c */ lwc1 $f16,0xc($s1)
/* f07b0dc: 3c067f1a */ lui $a2,0x7f1a
/* f07b0e0: 24c64364 */ addiu $a2,$a2,0x4364
/* f07b0e4: 46048201 */ sub.s $f8,$f16,$f4
/* f07b0e8: 27a40064 */ addiu $a0,$sp,0x64
/* f07b0ec: 24052ffe */ addiu $a1,$zero,0x2ffe
/* f07b0f0: 0c0098a7 */ jal cdGetPos
/* f07b0f4: e628000c */ swc1 $f8,0xc($s1)
/* f07b0f8: 3c0141a0 */ lui $at,0x41a0
/* f07b0fc: 44815000 */ mtc1 $at,$f10
/* f07b100: c7b20060 */ lwc1 $f18,0x60($sp)
/* f07b104: c7a60064 */ lwc1 $f6,0x64($sp)
/* f07b108: c7a4006c */ lwc1 $f4,0x6c($sp)
/* f07b10c: 460a9400 */ add.s $f16,$f18,$f10
/* f07b110: 8fa40044 */ lw $a0,0x44($sp)
/* f07b114: 8fa50040 */ lw $a1,0x40($sp)
/* f07b118: 27a60098 */ addiu $a2,$sp,0x98
/* f07b11c: e7b0009c */ swc1 $f16,0x9c($sp)
/* f07b120: 27a70050 */ addiu $a3,$sp,0x50
/* f07b124: e7a60098 */ swc1 $f6,0x98($sp)
/* f07b128: 0fc19437 */ jal func0f065e74
/* f07b12c: e7a400a0 */ swc1 $f4,0xa0($sp)
/* f07b130: c7a80098 */ lwc1 $f8,0x98($sp)
/* f07b134: 02202025 */ or $a0,$s1,$zero
/* f07b138: e6280008 */ swc1 $f8,0x8($s1)
/* f07b13c: c7a6009c */ lwc1 $f6,0x9c($sp)
/* f07b140: e626000c */ swc1 $f6,0xc($s1)
/* f07b144: c7b200a0 */ lwc1 $f18,0xa0($sp)
/* f07b148: 0fc193ab */ jal propDeregisterRooms
/* f07b14c: e6320010 */ swc1 $f18,0x10($s1)
/* f07b150: 27a40050 */ addiu $a0,$sp,0x50
/* f07b154: 0fc19283 */ jal roomsCopy
/* f07b158: 8fa50040 */ lw $a1,0x40($sp)
/* f07b15c: 02002025 */ or $a0,$s0,$zero
/* f07b160: 00002825 */ or $a1,$zero,$zero
/* f07b164: 0fc1a3b7 */ jal func0f069c70
/* f07b168: 24060001 */ addiu $a2,$zero,0x1
/* f07b16c: 920b0096 */ lbu $t3,0x96($s0)
/* f07b170: 02002025 */ or $a0,$s0,$zero
/* f07b174: 24050008 */ addiu $a1,$zero,0x8
/* f07b178: 256c0001 */ addiu $t4,$t3,0x1
/* f07b17c: 0fc201d0 */ jal objDeform
/* f07b180: a20c0096 */ sb $t4,0x96($s0)
/* f07b184: 862d0028 */ lh $t5,0x28($s1)
/* f07b188: 3c013f80 */ lui $at,0x3f80
/* f07b18c: 44805000 */ mtc1 $zero,$f10
/* f07b190: 44818000 */ mtc1 $at,$f16
/* f07b194: 44802000 */ mtc1 $zero,$f4
/* f07b198: 02202025 */ or $a0,$s1,$zero
/* f07b19c: 24050001 */ addiu $a1,$zero,0x1
/* f07b1a0: 3406ffff */ dli $a2,0xffff
/* f07b1a4: a7ad0072 */ sh $t5,0x72($sp)
/* f07b1a8: e7aa0074 */ swc1 $f10,0x74($sp)
/* f07b1ac: e7b00078 */ swc1 $f16,0x78($sp)
/* f07b1b0: 0fc2433d */ jal func0f0926bc
/* f07b1b4: e7a4007c */ swc1 $f4,0x7c($sp)
/* f07b1b8: 87b80072 */ lh $t8,0x72($sp)
/* f07b1bc: 240e0001 */ addiu $t6,$zero,0x1
/* f07b1c0: 27af0098 */ addiu $t7,$sp,0x98
/* f07b1c4: 27b90074 */ addiu $t9,$sp,0x74
/* f07b1c8: afb90020 */ sw $t9,0x20($sp)
/* f07b1cc: afaf0018 */ sw $t7,0x18($sp)
/* f07b1d0: afae0014 */ sw $t6,0x14($sp)
/* f07b1d4: 00002025 */ or $a0,$zero,$zero
/* f07b1d8: 8fa50044 */ lw $a1,0x44($sp)
/* f07b1dc: 8fa60040 */ lw $a2,0x40($sp)
/* f07b1e0: 2407000d */ addiu $a3,$zero,0xd
/* f07b1e4: afa00010 */ sw $zero,0x10($sp)
/* f07b1e8: 0fc492bc */ jal explosionCreate
/* f07b1ec: afb8001c */ sw $t8,0x1c($sp)
/* f07b1f0: 24090001 */ addiu $t1,$zero,0x1
/* f07b1f4: 10000014 */ beqz $zero,.NB0f07b248
/* f07b1f8: ae0900e4 */ sw $t1,0xe4($s0)
.NB0f07b1fc:
/* f07b1fc: 8fa50040 */ lw $a1,0x40($sp)
/* f07b200: 0fc4a4ec */ jal smokeCreateSimple
/* f07b204: 24060003 */ addiu $a2,$zero,0x3
/* f07b208: c6080080 */ lwc1 $f8,0x80($s0)
/* f07b20c: 44803000 */ mtc1 $zero,$f6
/* f07b210: 02202025 */ or $a0,$s1,$zero
/* f07b214: 8fa50174 */ lw $a1,0x174($sp)
/* f07b218: 4606403c */ c.lt.s $f8,$f6
/* f07b21c: 27a7015c */ addiu $a3,$sp,0x15c
/* f07b220: 3c017f1a */ lui $at,0x7f1a
/* f07b224: 45000004 */ bc1f .NB0f07b238
/* f07b228: 00000000 */ sll $zero,$zero,0x0
/* f07b22c: 3c017f1a */ lui $at,0x7f1a
/* f07b230: 10000002 */ beqz $zero,.NB0f07b23c
/* f07b234: c42049b4 */ lwc1 $f0,0x49b4($at)
.NB0f07b238:
/* f07b238: c42049b8 */ lwc1 $f0,0x49b8($at)
.NB0f07b23c:
/* f07b23c: 44060000 */ mfc1 $a2,$f0
/* f07b240: 0fc1e93a */ jal chopperIncrementMovement
/* f07b244: afa00010 */ sw $zero,0x10($sp)
.NB0f07b248:
/* f07b248: 8fbf0034 */ lw $ra,0x34($sp)
.NB0f07b24c:
/* f07b24c: 8fb0002c */ lw $s0,0x2c($sp)
/* f07b250: 8fb10030 */ lw $s1,0x30($sp)
/* f07b254: 03e00008 */ jr $ra
/* f07b258: 27bd0180 */ addiu $sp,$sp,0x180
);
#endif
// Mismatch: Something weird with the chopper->fall property.
// Might be the start of a new struct using a union
//void chopperTickFall(struct prop *chopperprop)
//{
// struct defaultobj *obj = chopperprop->obj;
// struct chopperobj *chopper = (struct chopperobj *) obj;
// f32 sp174;
// f32 sp164;
// f32 sp160;
// struct coord sp15c;
// struct pad nextpad;
// struct pad prevpad;
// s32 i;
// struct coord sp98;
// struct coord sp8c;
//
// // I guess the timer is set explicitly to 2 when the chopper is destroyed,
// // otherwise there's no guarantee that the timer will land on this value
// // when ticking down normally. So this code is run once when entering
// // fall mode.
// if (chopper->timer60 == 2) {
// // Figure out what direction to fall in
// f32 spac = 0;
// f32 spa8 = 0;
// s32 nextstep;
// f32 tmp;
//
// chopper->timer60 -= g_Vars.lvupdate240_60;
//
// if (chopper->path) {
// for (i = 0; i < chopper->path->len; i++) {
// if (chopper->cw) {
// nextstep = i;
// } else {
// nextstep = (i + 1) % chopper->path->len;
// }
//
// if (nextstep == chopper->nextstep) {
// break;
// }
// }
//
// if (chopper->cw) {
// nextstep = (i + 1) % chopper->path->len;
// } else {
// nextstep = i;
// }
//
// padUnpack(chopper->path->pads[nextstep], PADFIELD_POS, &nextpad);
//
// if (chopper->cw) {
// nextstep = i;
// } else {
// nextstep = (i + 1) % chopper->path->len;
// }
//
// padUnpack(chopper->path->pads[nextstep], PADFIELD_POS, &prevpad);
//
// spac = nextpad.pos.x - prevpad.pos.x;
// spa8 = nextpad.pos.z - prevpad.pos.z;
//
// tmp = 0.25f / sqrtf(spac * spac + spa8 * spa8);
//
// spac *= tmp;
// spa8 *= tmp;
// }
//
// chopper->fall.f[0] = -spa8;
// chopper->fall.f[1] = 0;
// chopper->fall.f[2] = spac;
// } else if (chopper->timer60 >= 0) {
// // Haven't started falling yet
// chopper->timer60 -= g_Vars.lvupdate240_60;
// } else if (chopper->fall.f[1] > -0.7f) {
// // Increase fall speed
// chopper->fall.f[1] -= 0.009f * g_Vars.lvupdate240f;
// }
//
// sp15c.x = chopper->fall.f[0];
// sp15c.y = chopper->fall.f[1];
// sp15c.z = chopper->fall.f[2];
// sp174 = chopper->roty + sp15c.x + sp15c.z;
//
// if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_EXTRACTION) {
// // The Extraction chopper falls without any collision checks and is
// // reaped once it reaches the lower barrier
// if (chopperprop->pos.y < -30000) {
// func0f0926bc(chopperprop, 1, 0xffff);
// obj->hidden |= OBJHFLAG_REAPABLE;
// } else {
// chopperIncrementMovement(chopperprop, sp174, chopper->rotx < 0 ? M_PI : -M_PI, &sp15c, false);
// }
// } else {
// // Area 51 interceptors do collision checks
// // and explode once they hit the ground.
// f32 mult = 0.98f;
// f32 bob;
// s32 i;
//
// for (i = 1; i < g_Vars.lvupdate240_60; i++) {
// mult *= 0.98f;
// }
//
// bob = chopper->bob + 0.052358999848366f;
//
// if (bob > M_BADTAU) {
// bob = 0;
//
// chopper->bobstrength = (random() % 8 + 2) * 0.01f;
//
// if (obj->flags & OBJFLAG_80000000) {
// chopper->bobstrength *= 0.15f;
// }
// }
//
// sp160 += chopper->bobstrength * sinf(bob);
//
// sp8c.f[0] = mult * (sp15c.f[0] * chopper->power + chopper->vx);
// sp8c.f[1] = mult * (sp15c.f[1] * chopper->power + chopper->vy);
// sp8c.f[2] = mult * (sp15c.f[2] * chopper->power + chopper->vz);
//
// sp98.f[0] = sp8c.f[0] * g_Vars.lvupdate240freal + chopperprop->pos.x;
// sp98.f[1] = sp8c.f[1] * g_Vars.lvupdate240freal + chopperprop->pos.y;
// sp98.f[2] = sp8c.f[2] * g_Vars.lvupdate240freal + chopperprop->pos.z;
//
// if (cd0002de10(&chopperprop->pos, chopperprop->rooms, &sp98, CDTYPE_BG) == CDRESULT_COLLISION) {
// struct coord sp74;
// s16 room;
// struct coord sp64;
// f32 sp60;
// s16 sp50[8];
//
// chopperprop->pos.y += 100;
// sp60 = cdFindGroundYSimple(&chopperprop->pos, 5, chopperprop->rooms, NULL, NULL);
// chopperprop->pos.y -= 100;
//
//#if VERSION >= VERSION_PAL_FINAL
// cdGetPos(&sp64, 12449, "prop/propobj.c");
//#else
// cdGetPos(&sp64, 12449, "propobj.c");
//#endif
//
// sp98.x = sp64.x;
// sp98.y = sp60 + 20;
// sp98.z = sp64.z;
//
// func0f065e74(&chopperprop->pos, chopperprop->rooms, &sp98, sp50);
//
// chopperprop->pos.x = sp98.x;
// chopperprop->pos.y = sp98.y;
// chopperprop->pos.z = sp98.z;
//
// propDeregisterRooms(chopperprop);
// roomsCopy(sp50, chopperprop->rooms);
// func0f069c70(obj, false, true);
//
// // Move to CHOPPERMODE_DEAD
// chopper->attackmode++;
//
// objDeform(chopper, 8);
//
// room = chopperprop->rooms[0];
// sp74.x = 0;
// sp74.y = 1;
// sp74.z = 0;
//
// func0f0926bc(chopperprop, 1, 0xffff);
//
// explosionCreate(NULL, &chopperprop->pos, chopperprop->rooms, EXPLOSIONTYPE_ROCKET,
// 0, true, &sp98, room, &sp74);
//
// chopper->dead = true;
// } else {
// smokeCreateSimple(&chopperprop->pos, chopperprop->rooms, SMOKETYPE_3);
// chopperIncrementMovement(chopperprop, sp174, chopper->rotx < 0 ? M_PI : -M_PI, &sp15c, false);
// }
// }
//}
void chopperTickIdle(struct prop *prop)
{
struct chopperobj *chopper = (struct chopperobj *)prop->obj;
u32 stack;
f32 roty = chopper->roty;
f32 rotx = chopper->rotx;
struct coord coord;
chraiExecute(chopper, PROPTYPE_OBJ);
chopper->timer60 += g_Vars.lvupdate240_60;
coord.x = 0;
coord.y = 0;
coord.z = 0;
chopperIncrementMovement(prop, roty, rotx, &coord, false);
}
void chopperTickPatrol(struct prop *chopperprop)
{
struct chopperobj *chopper = (struct chopperobj *)chopperprop->obj;
f32 xdiff;
f32 roty = chopper->roty;
f32 rotx = chopper->rotx;
struct coord vector;
struct pad pad;
f32 mult;
f32 zdiff;
chraiExecute(chopper, PROPTYPE_OBJ);
chopper->timer60 += g_Vars.lvupdate240_60;
if (chopper->patroltimer60 > 0) {
chopper->patroltimer60 -= g_Vars.lvupdate240_60;
}
if (chopper->path) {
padUnpack(chopper->path->pads[chopper->nextstep], PADFIELD_POS, &pad);
pad.pos.y += -250;
if (posIsArrivingLaterallyAtPos(&chopperprop->pos, &chopperprop->pos, &pad.pos, 350)) {
chopper->nextstep = ((chopper->cw ? -1 : 1) + chopper->nextstep + chopper->path->len) % chopper->path->len;
padUnpack(chopper->path->pads[chopper->nextstep], PADFIELD_POS, &pad);
pad.pos.y += -250;
}
roty = atan2f(pad.pos.x - chopperprop->pos.x, pad.pos.z - chopperprop->pos.z);
xdiff = pad.pos.x - chopperprop->pos.x;
zdiff = pad.pos.z - chopperprop->pos.z;
rotx = atan2f(pad.pos.y - chopperprop->pos.y, sqrtf(xdiff * xdiff + zdiff * zdiff));
}
if (chopper->base.flags & OBJFLAG_20000000) {
chopper->roty = roty;
chopper->rotx = rotx;
if (1);
chopper->base.flags &= ~OBJFLAG_20000000;
}
if (chopper->patroltimer60 > 0) {
vector.x = pad.pos.x - chopperprop->pos.x;
vector.y = pad.pos.y - chopperprop->pos.y;
vector.z = pad.pos.z - chopperprop->pos.z;
guNormalize(&vector.x, &vector.y, &vector.z);
} else {
mult = cosf(chopper->rotx);
vector.x = sinf(chopper->roty) * mult;
vector.y = sinf(chopper->rotx);
vector.z = cosf(chopper->roty) * mult;
}
chopperIncrementMovement(chopperprop, roty, rotx, &vector, false);
}
/**
* Tick the chopper when it's in combat mode (ie. knows where the player is).
*
* The actual firing logic is in the chopper's AI scripting. Same with choosing
* to return to patrol when the player is out of sight for a few seconds.
*
* This function is only directly responsible for the chopper's movement during
* combat.
*/
void chopperTickCombat(struct prop *chopperprop)
{
struct defaultobj *obj = chopperprop->obj;
struct chopperobj *chopper = (struct chopperobj *)obj;
s32 i;
f32 f0;
struct prop *targetprop = chopperGetTargetProp(chopper);
f32 dist;
struct coord goalpos;
struct coord dir;
struct pad pad;
struct pad nextpad;
f32 f20;
s32 sp90;
s32 sp8c;
bool reverse;
s8 numsteps;
s8 tmp;
struct coord sp78;
struct coord sp6c;
dist = coordGetSquaredDistanceToCoord(&targetprop->pos, &chopperprop->pos);
chraiExecute(chopper, PROPTYPE_OBJ);
chopper->timer60 += g_Vars.lvupdate240_60;
if ((chopper->targetvisible && dist < 2000000.0f) || chopper->path == NULL) {
// Stay put
goalpos.x = chopperprop->pos.x;
goalpos.y = chopperprop->pos.y;
goalpos.z = chopperprop->pos.z;
} else {
f20 = 2.6843546e8f;
for (i = 0; i < chopper->path->len; i++) {
padUnpack(chopper->path->pads[i], PADFIELD_POS, &pad);
padUnpack(chopper->path->pads[(i + 1) % chopper->path->len], PADFIELD_POS, &nextpad);
pad.pos.y += -250.0f;
nextpad.pos.y += -250.0f;
f0 = func0f07b164(&pad.pos, &nextpad.pos, &targetprop->pos, &sp78);
if (f0 < f20) {
f20 = f0;
sp90 = i;
goalpos.x = sp78.x;
goalpos.y = sp78.y;
goalpos.z = sp78.z;
}
if ((chopper->cw ? i : (i + 1) % chopper->path->len) == chopper->nextstep) {
sp8c = i;
sp6c.x = sp78.x;
sp6c.y = sp78.y;
sp6c.z = sp78.z;
}
}
if (sp8c != sp90) {
if (dist > 400000.0f) {
reverse = false;
numsteps = sp8c - sp90;
if (numsteps < 0) {
numsteps *= -1;
reverse = true;
}
tmp = chopper->path->len - numsteps;
chopper->cw = numsteps < tmp;
if (reverse) {
chopper->cw = !chopper->cw;
}
chopper->nextstep = chopper->cw ? sp8c : (sp8c + 1) % chopper->path->len;
padUnpack(chopper->path->pads[chopper->nextstep], PADFIELD_POS, &pad);
pad.pos.y += -250.0f;
if (coordGetSquaredDistanceToCoord(&pad.pos, &chopperprop->pos) < 10000.0f) {
chopper->power = 0.0f;
chopper->nextstep = (chopper->nextstep + (chopper->cw ? -1 : 1) + chopper->path->len) % chopper->path->len;
padUnpack(chopper->path->pads[chopper->nextstep], PADFIELD_POS, &pad);
pad.pos.y += -250.0f;
}
goalpos.x = pad.pos.x;
goalpos.y = pad.pos.y;
goalpos.z = pad.pos.z;
} else {
goalpos.x = sp6c.x;
goalpos.y = sp6c.y;
goalpos.z = sp6c.z;
}
} else if (cd0002db98(&targetprop->pos, targetprop->rooms, &goalpos, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_BG | CDTYPE_AIOPAQUE, 0x10) == 0) {
padUnpack(chopper->path->pads[chopper->cw ? (sp8c + 1) % chopper->path->len : sp8c], PADFIELD_POS, &pad);
pad.pos.y += -250.0f;
sp78.x = pad.pos.x - goalpos.x;
sp78.y = pad.pos.y - goalpos.y;
sp78.z = pad.pos.z - goalpos.z;
guNormalize(&sp78.x, &sp78.y, &sp78.z);
goalpos.x += sp78.x * 400.0f;
goalpos.y += sp78.y * 400.0f;
goalpos.z += sp78.z * 400.0f;
}
}
if (coordGetSquaredDistanceToCoord(&goalpos, &chopperprop->pos) < 2500.0f) {
// Close to the goal pos - power off
chopper->power = 0.0f;
dir.x = 0.0f;
dir.y = 0.0f;
dir.z = 0.0f;
} else {
// Check if chopper has overshot the goal pos?
dir.x = goalpos.x - chopperprop->pos.x;
dir.y = goalpos.y - chopperprop->pos.y;
dir.z = goalpos.z - chopperprop->pos.z;
guNormalize(&dir.x, &dir.y, &dir.z);
if (dir.f[0] * chopper->otx + dir.f[1] * chopper->oty + dir.f[2] * chopper->otz < 0.0f) {
chopper->power = 0.0f;
}
}
{
f32 roty;
f32 rotx;
roty = atan2f(targetprop->pos.x - chopperprop->pos.x, targetprop->pos.z - chopperprop->pos.z);
dist = sqrtf((targetprop->pos.x - chopperprop->pos.x) * (targetprop->pos.x - chopperprop->pos.x) + (targetprop->pos.z - chopperprop->pos.z) * (targetprop->pos.z - chopperprop->pos.z));
rotx = atan2f(targetprop->pos.y - chopperprop->pos.y, dist);
chopperIncrementMovement(chopperprop, roty, rotx, &dir, chopper->targetvisible && chopper->weaponsarmed);
}
}
#if VERSION >= VERSION_JPN_FINAL
GLOBAL_ASM(
glabel hovercarTick
.late_rodata
glabel var7f1aa6ac
.word 0x471c4000
glabel var7f1aa6b0
.word 0x47148900
glabel var7f1aa6b4
.word 0x3d2aaaab
glabel var7f1aa6b8
.word 0x3dcccccd
glabel var7f1aa6bc
.word 0x3d2aaaab
glabel var7f1aa6c0
.word 0x3e555555
glabel var7f1aa6c4
.word 0x3964ba35
glabel var7f1aa6c8
.word 0x3c566e92
glabel var7f1aa6cc
.word 0x3964ba35
glabel var7f1aa6d0
.word 0x3c566e92
glabel var7f1aa6d4
.word 0x3964ba35
glabel var7f1aa6d8
.word 0x3dcccccd
glabel var7f1aa6dc
.word 0x40c907a9
glabel var7f1aa6e0
.word 0x40c907a9
glabel var7f1aa6e4
.word 0xc7c35000
.text
/* f07e29c: 27bdfd88 */ addiu $sp,$sp,-632
/* f07e2a0: afbf004c */ sw $ra,0x4c($sp)
/* f07e2a4: afb00048 */ sw $s0,0x48($sp)
/* f07e2a8: afa40278 */ sw $a0,0x278($sp)
/* f07e2ac: 8c900004 */ lw $s0,0x4($a0)
/* f07e2b0: 3c018000 */ lui $at,0x8000
/* f07e2b4: c604007c */ lwc1 $f4,0x7c($s0)
/* f07e2b8: e7a40200 */ swc1 $f4,0x200($sp)
/* f07e2bc: c6060080 */ lwc1 $f6,0x80($s0)
/* f07e2c0: e7a601fc */ swc1 $f6,0x1fc($sp)
/* f07e2c4: 8e020008 */ lw $v0,0x8($s0)
/* f07e2c8: 00417824 */ and $t7,$v0,$at
/* f07e2cc: 11e00005 */ beqz $t7,.JF0f07e2e4
/* f07e2d0: 01e01025 */ move $v0,$t7
/* f07e2d4: 3c0140a0 */ lui $at,0x40a0
/* f07e2d8: 44814000 */ mtc1 $at,$f8
/* f07e2dc: 10000005 */ b .JF0f07e2f4
/* f07e2e0: e7a801f4 */ swc1 $f8,0x1f4($sp)
.JF0f07e2e4:
/* f07e2e4: 3c014120 */ lui $at,0x4120
/* f07e2e8: 44815000 */ mtc1 $at,$f10
/* f07e2ec: 00000000 */ nop
/* f07e2f0: e7aa01f4 */ swc1 $f10,0x1f4($sp)
.JF0f07e2f4:
/* f07e2f4: 10400038 */ beqz $v0,.JF0f07e3d8
/* f07e2f8: afa001f0 */ sw $zero,0x1f0($sp)
/* f07e2fc: 86180094 */ lh $t8,0x94($s0)
/* f07e300: 07030036 */ bgezl $t8,.JF0f07e3dc
/* f07e304: 860f0092 */ lh $t7,0x92($s0)
/* f07e308: 0fc1a6f2 */ jal modelFindBboxRodata
/* f07e30c: 8e040018 */ lw $a0,0x18($s0)
/* f07e310: 0fc19e37 */ jal objGetLocalYMin
/* f07e314: 00402025 */ move $a0,$v0
/* f07e318: 8fa40278 */ lw $a0,0x278($sp)
/* f07e31c: 24050001 */ li $a1,0x1
/* f07e320: 3406ffff */ li $a2,0xffff
/* f07e324: 84990028 */ lh $t9,0x28($a0)
/* f07e328: a7b901d6 */ sh $t9,0x1d6($sp)
/* f07e32c: c6040028 */ lwc1 $f4,0x28($s0)
/* f07e330: e7a401d8 */ swc1 $f4,0x1d8($sp)
/* f07e334: c606002c */ lwc1 $f6,0x2c($s0)
/* f07e338: e7a601dc */ swc1 $f6,0x1dc($sp)
/* f07e33c: c6080030 */ lwc1 $f8,0x30($s0)
/* f07e340: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f07e344: c60a0028 */ lwc1 $f10,0x28($s0)
/* f07e348: c4860008 */ lwc1 $f6,0x8($a0)
/* f07e34c: 46005102 */ mul.s $f4,$f10,$f0
/* f07e350: 46062200 */ add.s $f8,$f4,$f6
/* f07e354: e7a801e4 */ swc1 $f8,0x1e4($sp)
/* f07e358: c60a002c */ lwc1 $f10,0x2c($s0)
/* f07e35c: c486000c */ lwc1 $f6,0xc($a0)
/* f07e360: 46005102 */ mul.s $f4,$f10,$f0
/* f07e364: 46062200 */ add.s $f8,$f4,$f6
/* f07e368: e7a801e8 */ swc1 $f8,0x1e8($sp)
/* f07e36c: c60a0030 */ lwc1 $f10,0x30($s0)
/* f07e370: c4860010 */ lwc1 $f6,0x10($a0)
/* f07e374: 46005102 */ mul.s $f4,$f10,$f0
/* f07e378: 46062200 */ add.s $f8,$f4,$f6
/* f07e37c: 0fc24d13 */ jal func0f0926bc
/* f07e380: e7a801ec */ swc1 $f8,0x1ec($sp)
/* f07e384: 8fa20278 */ lw $v0,0x278($sp)
/* f07e388: 3c08800a */ lui $t0,0x800a
/* f07e38c: 8d08a8bc */ lw $t0,-0x5744($t0)
/* f07e390: 87ab01d6 */ lh $t3,0x1d6($sp)
/* f07e394: 24090001 */ li $t1,0x1
/* f07e398: 27aa01e4 */ addiu $t2,$sp,0x1e4
/* f07e39c: 27ac01d8 */ addiu $t4,$sp,0x1d8
/* f07e3a0: afac0020 */ sw $t4,0x20($sp)
/* f07e3a4: afaa0018 */ sw $t2,0x18($sp)
/* f07e3a8: afa90014 */ sw $t1,0x14($sp)
/* f07e3ac: 00002025 */ move $a0,$zero
/* f07e3b0: 24070007 */ li $a3,0x7
/* f07e3b4: 24450008 */ addiu $a1,$v0,0x8
/* f07e3b8: 24460028 */ addiu $a2,$v0,0x28
/* f07e3bc: afa80010 */ sw $t0,0x10($sp)
/* f07e3c0: 0fc4a8d5 */ jal explosionCreate
/* f07e3c4: afab001c */ sw $t3,0x1c($sp)
/* f07e3c8: 8e0d0040 */ lw $t5,0x40($s0)
/* f07e3cc: 35ae0004 */ ori $t6,$t5,0x4
/* f07e3d0: 10000311 */ b .JF0f07f018
/* f07e3d4: ae0e0040 */ sw $t6,0x40($s0)
.JF0f07e3d8:
/* f07e3d8: 860f0092 */ lh $t7,0x92($s0)
.JF0f07e3dc:
/* f07e3dc: 02002025 */ move $a0,$s0
/* f07e3e0: 24050001 */ li $a1,0x1
/* f07e3e4: 11e00063 */ beqz $t7,.JF0f07e574
/* f07e3e8: 00000000 */ nop
/* f07e3ec: 1040002c */ beqz $v0,.JF0f07e4a0
/* f07e3f0: 3c02800a */ lui $v0,0x800a
/* f07e3f4: 2442a630 */ addiu $v0,$v0,-22992
/* f07e3f8: 8c590038 */ lw $t9,0x38($v0)
/* f07e3fc: 86180094 */ lh $t8,0x94($s0)
/* f07e400: 86090096 */ lh $t1,0x96($s0)
/* f07e404: 3c01bf80 */ lui $at,0xbf80
/* f07e408: 03194023 */ subu $t0,$t8,$t9
/* f07e40c: a6080094 */ sh $t0,0x94($s0)
/* f07e410: 8c4a0038 */ lw $t2,0x38($v0)
/* f07e414: 240d0032 */ li $t5,0x32
/* f07e418: 00002025 */ move $a0,$zero
/* f07e41c: 012a5823 */ subu $t3,$t1,$t2
/* f07e420: a60b0096 */ sh $t3,0x96($s0)
/* f07e424: 860c0096 */ lh $t4,0x96($s0)
/* f07e428: 24060064 */ li $a2,0x64
/* f07e42c: 2407ffff */ li $a3,-1
/* f07e430: 058102f9 */ bgez $t4,.JF0f07f018
/* f07e434: 240effff */ li $t6,-1
/* f07e438: a60d0096 */ sh $t5,0x96($s0)
/* f07e43c: 44810000 */ mtc1 $at,$f0
/* f07e440: 240f0400 */ li $t7,0x400
/* f07e444: 2418ffff */ li $t8,-1
/* f07e448: afb8002c */ sw $t8,0x2c($sp)
/* f07e44c: afaf0014 */ sw $t7,0x14($sp)
/* f07e450: afa00028 */ sw $zero,0x28($sp)
/* f07e454: afa00020 */ sw $zero,0x20($sp)
/* f07e458: afa0001c */ sw $zero,0x1c($sp)
/* f07e45c: afa00018 */ sw $zero,0x18($sp)
/* f07e460: afae0010 */ sw $t6,0x10($sp)
/* f07e464: 8fa50278 */ lw $a1,0x278($sp)
/* f07e468: e7a00024 */ swc1 $f0,0x24($sp)
/* f07e46c: e7a00030 */ swc1 $f0,0x30($sp)
/* f07e470: e7a00034 */ swc1 $f0,0x34($sp)
/* f07e474: 0fc251de */ jal propsnd0f0939f8
/* f07e478: e7a00038 */ swc1 $f0,0x38($sp)
/* f07e47c: 8fa50278 */ lw $a1,0x278($sp)
/* f07e480: 00003825 */ move $a3,$zero
/* f07e484: 84a40028 */ lh $a0,0x28($a1)
/* f07e488: afa00014 */ sw $zero,0x14($sp)
/* f07e48c: afa00010 */ sw $zero,0x10($sp)
/* f07e490: 0fc4bf7c */ jal sparksCreate
/* f07e494: 24a60008 */ addiu $a2,$a1,0x8
/* f07e498: 100002e0 */ b .JF0f07f01c
/* f07e49c: 8fbf004c */ lw $ra,0x4c($sp)
.JF0f07e4a0:
/* f07e4a0: 44805000 */ mtc1 $zero,$f10
/* f07e4a4: c604006c */ lwc1 $f4,0x6c($s0)
/* f07e4a8: 3c0140c0 */ lui $at,0x40c0
/* f07e4ac: 46045032 */ c.eq.s $f10,$f4
/* f07e4b0: 00000000 */ nop
/* f07e4b4: 450202d9 */ bc1fl .JF0f07f01c
/* f07e4b8: 8fbf004c */ lw $ra,0x4c($sp)
/* f07e4bc: c6060064 */ lwc1 $f6,0x64($s0)
/* f07e4c0: 44814000 */ mtc1 $at,$f8
/* f07e4c4: 3c013f80 */ lui $at,0x3f80
/* f07e4c8: 46083280 */ add.s $f10,$f6,$f8
/* f07e4cc: e60a0064 */ swc1 $f10,0x64($s0)
/* f07e4d0: 8fb90278 */ lw $t9,0x278($sp)
/* f07e4d4: c7240008 */ lwc1 $f4,0x8($t9)
/* f07e4d8: e7a401c0 */ swc1 $f4,0x1c0($sp)
/* f07e4dc: c6080064 */ lwc1 $f8,0x64($s0)
/* f07e4e0: c726000c */ lwc1 $f6,0xc($t9)
/* f07e4e4: 46083281 */ sub.s $f10,$f6,$f8
/* f07e4e8: e7aa01c4 */ swc1 $f10,0x1c4($sp)
/* f07e4ec: c7240010 */ lwc1 $f4,0x10($t9)
/* f07e4f0: e7a401c8 */ swc1 $f4,0x1c8($sp)
/* f07e4f4: c6020068 */ lwc1 $f2,0x68($s0)
/* f07e4f8: 4602503c */ c.lt.s $f10,$f2
/* f07e4fc: 00000000 */ nop
/* f07e500: 45020005 */ bc1fl .JF0f07e518
/* f07e504: 8fa80278 */ lw $t0,0x278($sp)
/* f07e508: 44813000 */ mtc1 $at,$f6
/* f07e50c: e7a201c4 */ swc1 $f2,0x1c4($sp)
/* f07e510: e606006c */ swc1 $f6,0x6c($s0)
/* f07e514: 8fa80278 */ lw $t0,0x278($sp)
.JF0f07e518:
/* f07e518: 27a601c0 */ addiu $a2,$sp,0x1c0
/* f07e51c: 27a701b0 */ addiu $a3,$sp,0x1b0
/* f07e520: 25050028 */ addiu $a1,$t0,0x28
/* f07e524: afa50054 */ sw $a1,0x54($sp)
/* f07e528: 0fc19be5 */ jal func0f065e74
/* f07e52c: 25040008 */ addiu $a0,$t0,0x8
/* f07e530: 8fa40278 */ lw $a0,0x278($sp)
/* f07e534: c7a801c0 */ lwc1 $f8,0x1c0($sp)
/* f07e538: e4880008 */ swc1 $f8,0x8($a0)
/* f07e53c: c7a401c4 */ lwc1 $f4,0x1c4($sp)
/* f07e540: e484000c */ swc1 $f4,0xc($a0)
/* f07e544: c7aa01c8 */ lwc1 $f10,0x1c8($sp)
/* f07e548: 0fc19b59 */ jal propDeregisterRooms
/* f07e54c: e48a0010 */ swc1 $f10,0x10($a0)
/* f07e550: 27a401b0 */ addiu $a0,$sp,0x1b0
/* f07e554: 0fc19a31 */ jal roomsCopy
/* f07e558: 8fa50054 */ lw $a1,0x54($sp)
/* f07e55c: 02002025 */ move $a0,$s0
/* f07e560: 00002825 */ move $a1,$zero
/* f07e564: 0fc1ab62 */ jal func0f069c70
/* f07e568: 24060001 */ li $a2,0x1
/* f07e56c: 100002ab */ b .JF0f07f01c
/* f07e570: 8fbf004c */ lw $ra,0x4c($sp)
.JF0f07e574:
/* f07e574: 0fc139d5 */ jal chraiExecute
/* f07e578: afa201f8 */ sw $v0,0x1f8($sp)
/* f07e57c: afa00274 */ sw $zero,0x274($sp)
/* f07e580: 8e020088 */ lw $v0,0x88($s0)
/* f07e584: 24050042 */ li $a1,0x42
/* f07e588: 5040009f */ beqzl $v0,.JF0f07e808
/* f07e58c: 8e090008 */ lw $t1,0x8($s0)
/* f07e590: 8e0a008c */ lw $t2,0x8c($s0)
/* f07e594: 8c490000 */ lw $t1,0x0($v0)
/* f07e598: 27a60220 */ addiu $a2,$sp,0x220
/* f07e59c: 000a5880 */ sll $t3,$t2,0x2
/* f07e5a0: 012b1821 */ addu $v1,$t1,$t3
/* f07e5a4: 0fc45798 */ jal padUnpack
/* f07e5a8: 8c640000 */ lw $a0,0x0($v1)
/* f07e5ac: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07e5b0: c7a60220 */ lwc1 $f6,0x220($sp)
/* f07e5b4: c7aa0224 */ lwc1 $f10,0x224($sp)
/* f07e5b8: 11800011 */ beqz $t4,.JF0f07e600
/* f07e5bc: e7a60214 */ swc1 $f6,0x214($sp)
/* f07e5c0: 8fad0268 */ lw $t5,0x268($sp)
/* f07e5c4: 240effff */ li $t6,-1
/* f07e5c8: a7ae0212 */ sh $t6,0x212($sp)
/* f07e5cc: 27a40220 */ addiu $a0,$sp,0x220
/* f07e5d0: 3c0540a0 */ lui $a1,0x40a0
/* f07e5d4: 27a60210 */ addiu $a2,$sp,0x210
/* f07e5d8: 00003825 */ move $a3,$zero
/* f07e5dc: afa00010 */ sw $zero,0x10($sp)
/* f07e5e0: 0c00a790 */ jal cdFindGroundYSimple
/* f07e5e4: a7ad0210 */ sh $t5,0x210($sp)
/* f07e5e8: 3c01420c */ lui $at,0x420c
/* f07e5ec: 44814000 */ mtc1 $at,$f8
/* f07e5f0: 00000000 */ nop
/* f07e5f4: 46080100 */ add.s $f4,$f0,$f8
/* f07e5f8: 10000002 */ b .JF0f07e604
/* f07e5fc: e7a40218 */ swc1 $f4,0x218($sp)
.JF0f07e600:
/* f07e600: e7aa0218 */ swc1 $f10,0x218($sp)
.JF0f07e604:
/* f07e604: c7a60228 */ lwc1 $f6,0x228($sp)
/* f07e608: 8fa40278 */ lw $a0,0x278($sp)
/* f07e60c: 27a60214 */ addiu $a2,$sp,0x214
/* f07e610: e7a6021c */ swc1 $f6,0x21c($sp)
/* f07e614: 8e0f0008 */ lw $t7,0x8($s0)
/* f07e618: 24840008 */ addiu $a0,$a0,0x8
/* f07e61c: 00802825 */ move $a1,$a0
/* f07e620: 000fc080 */ sll $t8,$t7,0x2
/* f07e624: 07030011 */ bgezl $t8,.JF0f07e66c
/* f07e628: 8fa20278 */ lw $v0,0x278($sp)
/* f07e62c: 0fc11645 */ jal posIsArrivingLaterallyAtPos
/* f07e630: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07e634: 5040000d */ beqzl $v0,.JF0f07e66c
/* f07e638: 8fa20278 */ lw $v0,0x278($sp)
/* f07e63c: 0fc1ce23 */ jal hovercarIncrementStep
/* f07e640: 02002025 */ move $a0,$s0
/* f07e644: 8e190088 */ lw $t9,0x88($s0)
/* f07e648: 8e0a008c */ lw $t2,0x8c($s0)
/* f07e64c: 24050002 */ li $a1,0x2
/* f07e650: 8f280000 */ lw $t0,0x0($t9)
/* f07e654: 000a4880 */ sll $t1,$t2,0x2
/* f07e658: 27a60220 */ addiu $a2,$sp,0x220
/* f07e65c: 01091821 */ addu $v1,$t0,$t1
/* f07e660: 0fc45798 */ jal padUnpack
/* f07e664: 8c640000 */ lw $a0,0x0($v1)
/* f07e668: 8fa20278 */ lw $v0,0x278($sp)
.JF0f07e66c:
/* f07e66c: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07e670: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07e674: c4440008 */ lwc1 $f4,0x8($v0)
/* f07e678: c4460010 */ lwc1 $f6,0x10($v0)
/* f07e67c: 46044301 */ sub.s $f12,$f8,$f4
/* f07e680: 0fc25d3c */ jal atan2f
/* f07e684: 46065381 */ sub.s $f14,$f10,$f6
/* f07e688: 8fa20278 */ lw $v0,0x278($sp)
/* f07e68c: e7a00200 */ swc1 $f0,0x200($sp)
/* f07e690: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07e694: c4440008 */ lwc1 $f4,0x8($v0)
/* f07e698: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07e69c: c4460010 */ lwc1 $f6,0x10($v0)
/* f07e6a0: 46044081 */ sub.s $f2,$f8,$f4
/* f07e6a4: 46065381 */ sub.s $f14,$f10,$f6
/* f07e6a8: 46021202 */ mul.s $f8,$f2,$f2
/* f07e6ac: 00000000 */ nop
/* f07e6b0: 460e7102 */ mul.s $f4,$f14,$f14
/* f07e6b4: 0c012838 */ jal sqrtf
/* f07e6b8: 46044300 */ add.s $f12,$f8,$f4
/* f07e6bc: 8fab0278 */ lw $t3,0x278($sp)
/* f07e6c0: c7aa0218 */ lwc1 $f10,0x218($sp)
/* f07e6c4: 46000386 */ mov.s $f14,$f0
/* f07e6c8: c566000c */ lwc1 $f6,0xc($t3)
/* f07e6cc: 0fc25d3c */ jal atan2f
/* f07e6d0: 46065301 */ sub.s $f12,$f10,$f6
/* f07e6d4: e7a001fc */ swc1 $f0,0x1fc($sp)
/* f07e6d8: 8e0c0008 */ lw $t4,0x8($s0)
/* f07e6dc: 3c01dfff */ lui $at,0xdfff
/* f07e6e0: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07e6e4: 000c6880 */ sll $t5,$t4,0x2
/* f07e6e8: 05a1000c */ bgez $t5,.JF0f07e71c
/* f07e6ec: 3421ffff */ ori $at,$at,0xffff
/* f07e6f0: 8e0e0008 */ lw $t6,0x8($s0)
/* f07e6f4: e608007c */ swc1 $f8,0x7c($s0)
/* f07e6f8: e6000080 */ swc1 $f0,0x80($s0)
/* f07e6fc: 01c17824 */ and $t7,$t6,$at
/* f07e700: ae0f0008 */ sw $t7,0x8($s0)
/* f07e704: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07e708: 8fa30278 */ lw $v1,0x278($sp)
/* f07e70c: c7a40218 */ lwc1 $f4,0x218($sp)
/* f07e710: 53000003 */ beqzl $t8,.JF0f07e720
/* f07e714: 8fb901f8 */ lw $t9,0x1f8($sp)
/* f07e718: e464000c */ swc1 $f4,0xc($v1)
.JF0f07e71c:
/* f07e71c: 8fb901f8 */ lw $t9,0x1f8($sp)
.JF0f07e720:
/* f07e720: 8fa30278 */ lw $v1,0x278($sp)
/* f07e724: 27a60214 */ addiu $a2,$sp,0x214
/* f07e728: 13200034 */ beqz $t9,.JF0f07e7fc
/* f07e72c: 24640008 */ addiu $a0,$v1,0x8
/* f07e730: 44800000 */ mtc1 $zero,$f0
/* f07e734: 24650028 */ addiu $a1,$v1,0x28
/* f07e738: 24075000 */ li $a3,0x5000
/* f07e73c: afa00010 */ sw $zero,0x10($sp)
/* f07e740: e7a00014 */ swc1 $f0,0x14($sp)
/* f07e744: 0c00b4b4 */ jal cd0002d7c0
/* f07e748: e7a00018 */ swc1 $f0,0x18($sp)
/* f07e74c: 54400005 */ bnezl $v0,.JF0f07e764
/* f07e750: 8fa301f0 */ lw $v1,0x1f0($sp)
/* f07e754: 0c009270 */ jal cdGetObstacle
/* f07e758: 00000000 */ nop
/* f07e75c: afa201f0 */ sw $v0,0x1f0($sp)
/* f07e760: 8fa301f0 */ lw $v1,0x1f0($sp)
.JF0f07e764:
/* f07e764: 10600025 */ beqz $v1,.JF0f07e7fc
/* f07e768: 00000000 */ nop
/* f07e76c: 8c6a0004 */ lw $t2,0x4($v1)
/* f07e770: 8fa60278 */ lw $a2,0x278($sp)
/* f07e774: 3c017f1b */ lui $at,0x7f1b
/* f07e778: afaa01a0 */ sw $t2,0x1a0($sp)
/* f07e77c: c46a0008 */ lwc1 $f10,0x8($v1)
/* f07e780: c4c60008 */ lwc1 $f6,0x8($a2)
/* f07e784: c4680010 */ lwc1 $f8,0x10($v1)
/* f07e788: c4c40010 */ lwc1 $f4,0x10($a2)
/* f07e78c: 46065001 */ sub.s $f0,$f10,$f6
/* f07e790: 01402825 */ move $a1,$t2
/* f07e794: 00c02025 */ move $a0,$a2
/* f07e798: 46044081 */ sub.s $f2,$f8,$f4
/* f07e79c: 46000282 */ mul.s $f10,$f0,$f0
/* f07e7a0: c428b3e8 */ lwc1 $f8,-0x4c18($at)
/* f07e7a4: 46021182 */ mul.s $f6,$f2,$f2
/* f07e7a8: 46065300 */ add.s $f12,$f10,$f6
/* f07e7ac: 4608603c */ c.lt.s $f12,$f8
/* f07e7b0: 00000000 */ nop
/* f07e7b4: 45000007 */ bc1f .JF0f07e7d4
/* f07e7b8: 00000000 */ nop
/* f07e7bc: 0fc24391 */ jal doorsChooseSwingDirection
/* f07e7c0: e7ac0058 */ swc1 $f12,0x58($sp)
/* f07e7c4: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07e7c8: 0fc23c83 */ jal doorsRequestMode
/* f07e7cc: 24050001 */ li $a1,0x1
/* f07e7d0: c7ac0058 */ lwc1 $f12,0x58($sp)
.JF0f07e7d4:
/* f07e7d4: 3c017f1b */ lui $at,0x7f1b
/* f07e7d8: c424b3ec */ lwc1 $f4,-0x4c14($at)
/* f07e7dc: 4604603c */ c.lt.s $f12,$f4
/* f07e7e0: 00000000 */ nop
/* f07e7e4: 45000005 */ bc1f .JF0f07e7fc
/* f07e7e8: 00000000 */ nop
/* f07e7ec: 0fc23cba */ jal doorIsOpen
/* f07e7f0: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07e7f4: 2c480001 */ sltiu $t0,$v0,0x1
/* f07e7f8: afa80274 */ sw $t0,0x274($sp)
.JF0f07e7fc:
/* f07e7fc: 1000001a */ b .JF0f07e868
/* f07e800: 44807000 */ mtc1 $zero,$f14
/* f07e804: 8e090008 */ lw $t1,0x8($s0)
.JF0f07e808:
/* f07e808: 00095880 */ sll $t3,$t1,0x2
/* f07e80c: 05630016 */ bgezl $t3,.JF0f07e868
/* f07e810: 44807000 */ mtc1 $zero,$f14
/* f07e814: c60c0034 */ lwc1 $f12,0x34($s0)
/* f07e818: 0fc25d3c */ jal atan2f
/* f07e81c: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07e820: c6020034 */ lwc1 $f2,0x34($s0)
/* f07e824: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07e828: e600007c */ swc1 $f0,0x7c($s0)
/* f07e82c: 46021282 */ mul.s $f10,$f2,$f2
/* f07e830: 00000000 */ nop
/* f07e834: 460e7182 */ mul.s $f6,$f14,$f14
/* f07e838: 0c012838 */ jal sqrtf
/* f07e83c: 46065300 */ add.s $f12,$f10,$f6
/* f07e840: c60c0038 */ lwc1 $f12,0x38($s0)
/* f07e844: 0fc25d3c */ jal atan2f
/* f07e848: 46000386 */ mov.s $f14,$f0
/* f07e84c: 8e0c0008 */ lw $t4,0x8($s0)
/* f07e850: 3c01dfff */ lui $at,0xdfff
/* f07e854: 3421ffff */ ori $at,$at,0xffff
/* f07e858: 01816824 */ and $t5,$t4,$at
/* f07e85c: e6000080 */ swc1 $f0,0x80($s0)
/* f07e860: ae0d0008 */ sw $t5,0x8($s0)
/* f07e864: 44807000 */ mtc1 $zero,$f14
.JF0f07e868:
/* f07e868: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07e86c: 3c02800a */ lui $v0,0x800a
/* f07e870: 8fa30278 */ lw $v1,0x278($sp)
/* f07e874: 460c703e */ c.le.s $f14,$f12
/* f07e878: 2442a630 */ addiu $v0,$v0,-22992
/* f07e87c: 45020015 */ bc1fl .JF0f07e8d4
/* f07e880: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07e884: c442004c */ lwc1 $f2,0x4c($v0)
/* f07e888: 4602603e */ c.le.s $f12,$f2
/* f07e88c: 00000000 */ nop
/* f07e890: 45020006 */ bc1fl .JF0f07e8ac
/* f07e894: c6000064 */ lwc1 $f0,0x64($s0)
/* f07e898: c6080068 */ lwc1 $f8,0x68($s0)
/* f07e89c: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07e8a0: 10000008 */ b .JF0f07e8c4
/* f07e8a4: e6080064 */ swc1 $f8,0x64($s0)
/* f07e8a8: c6000064 */ lwc1 $f0,0x64($s0)
.JF0f07e8ac:
/* f07e8ac: c6040068 */ lwc1 $f4,0x68($s0)
/* f07e8b0: 46002281 */ sub.s $f10,$f4,$f0
/* f07e8b4: 46025182 */ mul.s $f6,$f10,$f2
/* f07e8b8: 460c3203 */ div.s $f8,$f6,$f12
/* f07e8bc: 46080100 */ add.s $f4,$f0,$f8
/* f07e8c0: e6040064 */ swc1 $f4,0x64($s0)
.JF0f07e8c4:
/* f07e8c4: c44a004c */ lwc1 $f10,0x4c($v0)
/* f07e8c8: 460a6181 */ sub.s $f6,$f12,$f10
/* f07e8cc: e606006c */ swc1 $f6,0x6c($s0)
/* f07e8d0: 8fae01f8 */ lw $t6,0x1f8($sp)
.JF0f07e8d4:
/* f07e8d4: 3c02800a */ lui $v0,0x800a
/* f07e8d8: 2442a630 */ addiu $v0,$v0,-22992
/* f07e8dc: 51c00037 */ beqzl $t6,.JF0f07e9bc
/* f07e8e0: c6040064 */ lwc1 $f4,0x64($s0)
/* f07e8e4: c6080070 */ lwc1 $f8,0x70($s0)
/* f07e8e8: 3c017f1b */ lui $at,0x7f1b
/* f07e8ec: 4608703c */ c.lt.s $f14,$f8
/* f07e8f0: 00000000 */ nop
/* f07e8f4: 45020013 */ bc1fl .JF0f07e944
/* f07e8f8: c6000064 */ lwc1 $f0,0x64($s0)
/* f07e8fc: c6040068 */ lwc1 $f4,0x68($s0)
/* f07e900: c42ab3f0 */ lwc1 $f10,-0x4c10($at)
/* f07e904: c448004c */ lwc1 $f8,0x4c($v0)
/* f07e908: 3c017f1b */ lui $at,0x7f1b
/* f07e90c: 460a2182 */ mul.s $f6,$f4,$f10
/* f07e910: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07e914: 46083102 */ mul.s $f4,$f6,$f8
/* f07e918: 46045181 */ sub.s $f6,$f10,$f4
/* f07e91c: e6060064 */ swc1 $f6,0x64($s0)
/* f07e920: c6080064 */ lwc1 $f8,0x64($s0)
/* f07e924: 460e403c */ c.lt.s $f8,$f14
/* f07e928: 00000000 */ nop
/* f07e92c: 45020013 */ bc1fl .JF0f07e97c
/* f07e930: 8faf0274 */ lw $t7,0x274($sp)
/* f07e934: c42ab3f4 */ lwc1 $f10,-0x4c0c($at)
/* f07e938: 1000000f */ b .JF0f07e978
/* f07e93c: e60a0064 */ swc1 $f10,0x64($s0)
/* f07e940: c6000064 */ lwc1 $f0,0x64($s0)
.JF0f07e944:
/* f07e944: c6020068 */ lwc1 $f2,0x68($s0)
/* f07e948: 3c017f1b */ lui $at,0x7f1b
/* f07e94c: 4602003c */ c.lt.s $f0,$f2
/* f07e950: 00000000 */ nop
/* f07e954: 45020009 */ bc1fl .JF0f07e97c
/* f07e958: 8faf0274 */ lw $t7,0x274($sp)
/* f07e95c: c424b3f8 */ lwc1 $f4,-0x4c08($at)
/* f07e960: c448004c */ lwc1 $f8,0x4c($v0)
/* f07e964: 46041182 */ mul.s $f6,$f2,$f4
/* f07e968: 00000000 */ nop
/* f07e96c: 46083282 */ mul.s $f10,$f6,$f8
/* f07e970: 460a0100 */ add.s $f4,$f0,$f10
/* f07e974: e6040064 */ swc1 $f4,0x64($s0)
.JF0f07e978:
/* f07e978: 8faf0274 */ lw $t7,0x274($sp)
.JF0f07e97c:
/* f07e97c: 3c017f1b */ lui $at,0x7f1b
/* f07e980: 51e0000e */ beqzl $t7,.JF0f07e9bc
/* f07e984: c6040064 */ lwc1 $f4,0x64($s0)
/* f07e988: c426b3fc */ lwc1 $f6,-0x4c04($at)
/* f07e98c: c448004c */ lwc1 $f8,0x4c($v0)
/* f07e990: c6040064 */ lwc1 $f4,0x64($s0)
/* f07e994: 46083282 */ mul.s $f10,$f6,$f8
/* f07e998: 460a2181 */ sub.s $f6,$f4,$f10
/* f07e99c: e6060064 */ swc1 $f6,0x64($s0)
/* f07e9a0: c6080064 */ lwc1 $f8,0x64($s0)
/* f07e9a4: 460e403c */ c.lt.s $f8,$f14
/* f07e9a8: 00000000 */ nop
/* f07e9ac: 45020003 */ bc1fl .JF0f07e9bc
/* f07e9b0: c6040064 */ lwc1 $f4,0x64($s0)
/* f07e9b4: e60e0064 */ swc1 $f14,0x64($s0)
/* f07e9b8: c6040064 */ lwc1 $f4,0x64($s0)
.JF0f07e9bc:
/* f07e9bc: 4604703c */ c.lt.s $f14,$f4
/* f07e9c0: 00000000 */ nop
/* f07e9c4: 45020195 */ bc1fl .JF0f07f01c
/* f07e9c8: 8fbf004c */ lw $ra,0x4c($sp)
/* f07e9cc: c60a007c */ lwc1 $f10,0x7c($s0)
/* f07e9d0: 24780008 */ addiu $t8,$v1,0x8
/* f07e9d4: 24790028 */ addiu $t9,$v1,0x28
/* f07e9d8: e7aa0190 */ swc1 $f10,0x190($sp)
/* f07e9dc: c6060080 */ lwc1 $f6,0x80($s0)
/* f07e9e0: e7a6018c */ swc1 $f6,0x18c($sp)
/* f07e9e4: c6080084 */ lwc1 $f8,0x84($s0)
/* f07e9e8: e7a80188 */ swc1 $f8,0x188($sp)
/* f07e9ec: c6040070 */ lwc1 $f4,0x70($s0)
/* f07e9f0: e7a40184 */ swc1 $f4,0x184($sp)
/* f07e9f4: c60a0074 */ lwc1 $f10,0x74($s0)
/* f07e9f8: e7aa0180 */ swc1 $f10,0x180($sp)
/* f07e9fc: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07ea00: afb90054 */ sw $t9,0x54($sp)
/* f07ea04: 0c0068df */ jal sinf
/* f07ea08: afb80058 */ sw $t8,0x58($sp)
/* f07ea0c: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07ea10: 0c0068dc */ jal cosf
/* f07ea14: e7a00068 */ swc1 $f0,0x68($sp)
/* f07ea18: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07ea1c: 46020182 */ mul.s $f6,$f0,$f2
/* f07ea20: e7a60194 */ swc1 $f6,0x194($sp)
/* f07ea24: 0c0068df */ jal sinf
/* f07ea28: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07ea2c: e7a00198 */ swc1 $f0,0x198($sp)
/* f07ea30: 0c0068dc */ jal cosf
/* f07ea34: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07ea38: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07ea3c: 0c0068dc */ jal cosf
/* f07ea40: e7a00068 */ swc1 $f0,0x68($sp)
/* f07ea44: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07ea48: 8fa40058 */ lw $a0,0x58($sp)
/* f07ea4c: 27a50194 */ addiu $a1,$sp,0x194
/* f07ea50: 46020202 */ mul.s $f8,$f0,$f2
/* f07ea54: 27a60214 */ addiu $a2,$sp,0x214
/* f07ea58: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07ea5c: 0fc115fe */ jal posIsMovingTowardsPosOrStoppedInRange
/* f07ea60: e7a8019c */ swc1 $f8,0x19c($sp)
/* f07ea64: 50400006 */ beqzl $v0,.JF0f07ea80
/* f07ea68: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07ea6c: c604007c */ lwc1 $f4,0x7c($s0)
/* f07ea70: e7a40200 */ swc1 $f4,0x200($sp)
/* f07ea74: c60a0080 */ lwc1 $f10,0x80($s0)
/* f07ea78: e7aa01fc */ swc1 $f10,0x1fc($sp)
/* f07ea7c: 8fa201f8 */ lw $v0,0x1f8($sp)
.JF0f07ea80:
/* f07ea80: 10400004 */ beqz $v0,.JF0f07ea94
/* f07ea84: 3c014170 */ lui $at,0x4170
/* f07ea88: 44818000 */ mtc1 $at,$f16
/* f07ea8c: 10000006 */ b .JF0f07eaa8
/* f07ea90: 46008386 */ mov.s $f14,$f16
.JF0f07ea94:
/* f07ea94: 3c0140a0 */ lui $at,0x40a0
/* f07ea98: 44817000 */ mtc1 $at,$f14
/* f07ea9c: 3c014170 */ lui $at,0x4170
/* f07eaa0: 44818000 */ mtc1 $at,$f16
/* f07eaa4: 00000000 */ nop
.JF0f07eaa8:
/* f07eaa8: 50400004 */ beqzl $v0,.JF0f07eabc
/* f07eaac: 3c0140a0 */ lui $at,0x40a0
/* f07eab0: 10000004 */ b .JF0f07eac4
/* f07eab4: 46008306 */ mov.s $f12,$f16
/* f07eab8: 3c0140a0 */ lui $at,0x40a0
.JF0f07eabc:
/* f07eabc: 44816000 */ mtc1 $at,$f12
/* f07eac0: 00000000 */ nop
.JF0f07eac4:
/* f07eac4: 50400004 */ beqzl $v0,.JF0f07ead8
/* f07eac8: 3c0140a0 */ lui $at,0x40a0
/* f07eacc: 10000004 */ b .JF0f07eae0
/* f07ead0: 46008086 */ mov.s $f2,$f16
/* f07ead4: 3c0140a0 */ lui $at,0x40a0
.JF0f07ead8:
/* f07ead8: 44811000 */ mtc1 $at,$f2
/* f07eadc: 00000000 */ nop
.JF0f07eae0:
/* f07eae0: 3c017f1b */ lui $at,0x7f1b
/* f07eae4: c432b400 */ lwc1 $f18,-0x4c00($at)
/* f07eae8: 3c017f1b */ lui $at,0x7f1b
/* f07eaec: c424b404 */ lwc1 $f4,-0x4bfc($at)
/* f07eaf0: 46127182 */ mul.s $f6,$f14,$f18
/* f07eaf4: 27a40190 */ addiu $a0,$sp,0x190
/* f07eaf8: 8fa50200 */ lw $a1,0x200($sp)
/* f07eafc: 46126002 */ mul.s $f0,$f12,$f18
/* f07eb00: 27a60184 */ addiu $a2,$sp,0x184
/* f07eb04: 46041282 */ mul.s $f10,$f2,$f4
/* f07eb08: 44073000 */ mfc1 $a3,$f6
/* f07eb0c: 46000200 */ add.s $f8,$f0,$f0
/* f07eb10: e7aa0014 */ swc1 $f10,0x14($sp)
/* f07eb14: 0fc1bb06 */ jal applyRotation
/* f07eb18: e7a80010 */ swc1 $f8,0x10($sp)
/* f07eb1c: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07eb20: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07eb24: 3c014170 */ lui $at,0x4170
/* f07eb28: 44818000 */ mtc1 $at,$f16
/* f07eb2c: 46083032 */ c.eq.s $f6,$f8
/* f07eb30: 3c017f1b */ lui $at,0x7f1b
/* f07eb34: c432b408 */ lwc1 $f18,-0x4bf8($at)
/* f07eb38: 45020021 */ bc1fl .JF0f07ebc0
/* f07eb3c: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07eb40: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07eb44: 3c0140a0 */ lui $at,0x40a0
/* f07eb48: 50400004 */ beqzl $v0,.JF0f07eb5c
/* f07eb4c: 44811000 */ mtc1 $at,$f2
/* f07eb50: 10000003 */ b .JF0f07eb60
/* f07eb54: 46008086 */ mov.s $f2,$f16
/* f07eb58: 44811000 */ mtc1 $at,$f2
.JF0f07eb5c:
/* f07eb5c: 00000000 */ nop
.JF0f07eb60:
/* f07eb60: 46121002 */ mul.s $f0,$f2,$f18
/* f07eb64: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07eb68: 46000100 */ add.s $f4,$f0,$f0
/* f07eb6c: 4604703e */ c.le.s $f14,$f4
/* f07eb70: 00000000 */ nop
/* f07eb74: 45020012 */ bc1fl .JF0f07ebc0
/* f07eb78: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07eb7c: 10400003 */ beqz $v0,.JF0f07eb8c
/* f07eb80: 3c0140a0 */ lui $at,0x40a0
/* f07eb84: 10000003 */ b .JF0f07eb94
/* f07eb88: 46008306 */ mov.s $f12,$f16
.JF0f07eb8c:
/* f07eb8c: 44816000 */ mtc1 $at,$f12
/* f07eb90: 00000000 */ nop
.JF0f07eb94:
/* f07eb94: 46126002 */ mul.s $f0,$f12,$f18
/* f07eb98: 46000007 */ neg.s $f0,$f0
/* f07eb9c: 46000280 */ add.s $f10,$f0,$f0
/* f07eba0: 460e503e */ c.le.s $f10,$f14
/* f07eba4: 00000000 */ nop
/* f07eba8: 45020005 */ bc1fl .JF0f07ebc0
/* f07ebac: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07ebb0: 44807000 */ mtc1 $zero,$f14
/* f07ebb4: 00000000 */ nop
/* f07ebb8: e7ae0184 */ swc1 $f14,0x184($sp)
/* f07ebbc: 8fa201f8 */ lw $v0,0x1f8($sp)
.JF0f07ebc0:
/* f07ebc0: 50400004 */ beqzl $v0,.JF0f07ebd4
/* f07ebc4: 3c0140a0 */ lui $at,0x40a0
/* f07ebc8: 10000004 */ b .JF0f07ebdc
/* f07ebcc: 46008386 */ mov.s $f14,$f16
/* f07ebd0: 3c0140a0 */ lui $at,0x40a0
.JF0f07ebd4:
/* f07ebd4: 44817000 */ mtc1 $at,$f14
/* f07ebd8: 00000000 */ nop
.JF0f07ebdc:
/* f07ebdc: 46127182 */ mul.s $f6,$f14,$f18
/* f07ebe0: 50400004 */ beqzl $v0,.JF0f07ebf4
/* f07ebe4: 3c0140a0 */ lui $at,0x40a0
/* f07ebe8: 10000004 */ b .JF0f07ebfc
/* f07ebec: 46008306 */ mov.s $f12,$f16
/* f07ebf0: 3c0140a0 */ lui $at,0x40a0
.JF0f07ebf4:
/* f07ebf4: 44816000 */ mtc1 $at,$f12
/* f07ebf8: 00000000 */ nop
.JF0f07ebfc:
/* f07ebfc: 46126002 */ mul.s $f0,$f12,$f18
/* f07ec00: 50400004 */ beqzl $v0,.JF0f07ec14
/* f07ec04: 3c0140a0 */ lui $at,0x40a0
/* f07ec08: 10000004 */ b .JF0f07ec1c
/* f07ec0c: 46008086 */ mov.s $f2,$f16
/* f07ec10: 3c0140a0 */ lui $at,0x40a0
.JF0f07ec14:
/* f07ec14: 44811000 */ mtc1 $at,$f2
/* f07ec18: 00000000 */ nop
.JF0f07ec1c:
/* f07ec1c: 3c017f1b */ lui $at,0x7f1b
/* f07ec20: c424b40c */ lwc1 $f4,-0x4bf4($at)
/* f07ec24: 46000200 */ add.s $f8,$f0,$f0
/* f07ec28: 44073000 */ mfc1 $a3,$f6
/* f07ec2c: 46041282 */ mul.s $f10,$f2,$f4
/* f07ec30: 27a4018c */ addiu $a0,$sp,0x18c
/* f07ec34: e7a80010 */ swc1 $f8,0x10($sp)
/* f07ec38: 8fa501fc */ lw $a1,0x1fc($sp)
/* f07ec3c: 27a60180 */ addiu $a2,$sp,0x180
/* f07ec40: 0fc1bb06 */ jal applyRotation
/* f07ec44: e7aa0014 */ swc1 $f10,0x14($sp)
/* f07ec48: c7a6018c */ lwc1 $f6,0x18c($sp)
/* f07ec4c: c7a801fc */ lwc1 $f8,0x1fc($sp)
/* f07ec50: 3c014170 */ lui $at,0x4170
/* f07ec54: 44818000 */ mtc1 $at,$f16
/* f07ec58: 46083032 */ c.eq.s $f6,$f8
/* f07ec5c: 3c017f1b */ lui $at,0x7f1b
/* f07ec60: c432b410 */ lwc1 $f18,-0x4bf0($at)
/* f07ec64: 45020022 */ bc1fl .JF0f07ecf0
/* f07ec68: 8e090008 */ lw $t1,0x8($s0)
/* f07ec6c: 8faa01f8 */ lw $t2,0x1f8($sp)
/* f07ec70: 3c0140a0 */ lui $at,0x40a0
/* f07ec74: 8fa801f8 */ lw $t0,0x1f8($sp)
/* f07ec78: 51400004 */ beqzl $t2,.JF0f07ec8c
/* f07ec7c: 44811000 */ mtc1 $at,$f2
/* f07ec80: 10000003 */ b .JF0f07ec90
/* f07ec84: 46008086 */ mov.s $f2,$f16
/* f07ec88: 44811000 */ mtc1 $at,$f2
.JF0f07ec8c:
/* f07ec8c: 00000000 */ nop
.JF0f07ec90:
/* f07ec90: 46121002 */ mul.s $f0,$f2,$f18
/* f07ec94: c7ae0180 */ lwc1 $f14,0x180($sp)
/* f07ec98: 46000100 */ add.s $f4,$f0,$f0
/* f07ec9c: 4604703e */ c.le.s $f14,$f4
/* f07eca0: 00000000 */ nop
/* f07eca4: 45020012 */ bc1fl .JF0f07ecf0
/* f07eca8: 8e090008 */ lw $t1,0x8($s0)
/* f07ecac: 11000003 */ beqz $t0,.JF0f07ecbc
/* f07ecb0: 3c0140a0 */ lui $at,0x40a0
/* f07ecb4: 10000003 */ b .JF0f07ecc4
/* f07ecb8: 46008306 */ mov.s $f12,$f16
.JF0f07ecbc:
/* f07ecbc: 44816000 */ mtc1 $at,$f12
/* f07ecc0: 00000000 */ nop
.JF0f07ecc4:
/* f07ecc4: 46126002 */ mul.s $f0,$f12,$f18
/* f07ecc8: 46000007 */ neg.s $f0,$f0
/* f07eccc: 46000280 */ add.s $f10,$f0,$f0
/* f07ecd0: 460e503e */ c.le.s $f10,$f14
/* f07ecd4: 00000000 */ nop
/* f07ecd8: 45020005 */ bc1fl .JF0f07ecf0
/* f07ecdc: 8e090008 */ lw $t1,0x8($s0)
/* f07ece0: 44807000 */ mtc1 $zero,$f14
/* f07ece4: 00000000 */ nop
/* f07ece8: e7ae0180 */ swc1 $f14,0x180($sp)
/* f07ecec: 8e090008 */ lw $t1,0x8($s0)
.JF0f07ecf0:
/* f07ecf0: 44800000 */ mtc1 $zero,$f0
/* f07ecf4: 00095800 */ sll $t3,$t1,0x0
/* f07ecf8: 05630004 */ bgezl $t3,.JF0f07ed0c
/* f07ecfc: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07ed00: 1000000d */ b .JF0f07ed38
/* f07ed04: e7a00188 */ swc1 $f0,0x188($sp)
/* f07ed08: c7ae0184 */ lwc1 $f14,0x184($sp)
.JF0f07ed0c:
/* f07ed0c: 3c0142f0 */ lui $at,0x42f0
/* f07ed10: 44814000 */ mtc1 $at,$f8
/* f07ed14: 46007187 */ neg.s $f6,$f14
/* f07ed18: c7aa0188 */ lwc1 $f10,0x188($sp)
/* f07ed1c: 46083102 */ mul.s $f4,$f6,$f8
/* f07ed20: 3c017f1b */ lui $at,0x7f1b
/* f07ed24: c428b414 */ lwc1 $f8,-0x4bec($at)
/* f07ed28: 460a2181 */ sub.s $f6,$f4,$f10
/* f07ed2c: 46083102 */ mul.s $f4,$f6,$f8
/* f07ed30: 46045180 */ add.s $f6,$f10,$f4
/* f07ed34: e7a60188 */ swc1 $f6,0x188($sp)
.JF0f07ed38:
/* f07ed38: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07ed3c: 11800006 */ beqz $t4,.JF0f07ed58
/* f07ed40: 3c017f1b */ lui $at,0x7f1b
/* f07ed44: c428b418 */ lwc1 $f8,-0x4be8($at)
/* f07ed48: c7aa018c */ lwc1 $f10,0x18c($sp)
/* f07ed4c: 460a4101 */ sub.s $f4,$f8,$f10
/* f07ed50: 10000002 */ b .JF0f07ed5c
/* f07ed54: e7a4012c */ swc1 $f4,0x12c($sp)
.JF0f07ed58:
/* f07ed58: e7a0012c */ swc1 $f0,0x12c($sp)
.JF0f07ed5c:
/* f07ed5c: c7a80188 */ lwc1 $f8,0x188($sp)
/* f07ed60: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07ed64: e7a00134 */ swc1 $f0,0x134($sp)
/* f07ed68: 4608003e */ c.le.s $f0,$f8
/* f07ed6c: e7a60130 */ swc1 $f6,0x130($sp)
/* f07ed70: 45000006 */ bc1f .JF0f07ed8c
/* f07ed74: 00000000 */ nop
/* f07ed78: 46004306 */ mov.s $f12,$f8
/* f07ed7c: 0c0058e8 */ jal mtx4LoadZRotation
/* f07ed80: 27a5006c */ addiu $a1,$sp,0x6c
/* f07ed84: 10000008 */ b .JF0f07eda8
/* f07ed88: 27a4012c */ addiu $a0,$sp,0x12c
.JF0f07ed8c:
/* f07ed8c: 3c017f1b */ lui $at,0x7f1b
/* f07ed90: c424b41c */ lwc1 $f4,-0x4be4($at)
/* f07ed94: c7aa0188 */ lwc1 $f10,0x188($sp)
/* f07ed98: 27a5006c */ addiu $a1,$sp,0x6c
/* f07ed9c: 0c0058e8 */ jal mtx4LoadZRotation
/* f07eda0: 46045300 */ add.s $f12,$f10,$f4
/* f07eda4: 27a4012c */ addiu $a0,$sp,0x12c
.JF0f07eda8:
/* f07eda8: 0c00590b */ jal mtx4LoadRotation
/* f07edac: 27a500ac */ addiu $a1,$sp,0xac
/* f07edb0: 8e0d0018 */ lw $t5,0x18($s0)
/* f07edb4: 27a500ac */ addiu $a1,$sp,0xac
/* f07edb8: 0c0057a9 */ jal mtx00015f04
/* f07edbc: c5ac0014 */ lwc1 $f12,0x14($t5)
/* f07edc0: 27a400ac */ addiu $a0,$sp,0xac
/* f07edc4: 27a5006c */ addiu $a1,$sp,0x6c
/* f07edc8: 0c005668 */ jal mtx4MultMtx4
/* f07edcc: 27a600ec */ addiu $a2,$sp,0xec
/* f07edd0: 27a400ec */ addiu $a0,$sp,0xec
/* f07edd4: 0c005750 */ jal mtx4ToMtx3
/* f07edd8: 27a5015c */ addiu $a1,$sp,0x15c
/* f07eddc: 27a4015c */ addiu $a0,$sp,0x15c
/* f07ede0: 0c00571e */ jal mtx3Copy
/* f07ede4: 2605001c */ addiu $a1,$s0,0x1c
/* f07ede8: 0c0068dc */ jal cosf
/* f07edec: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07edf0: e7a00138 */ swc1 $f0,0x138($sp)
/* f07edf4: 0c0068df */ jal sinf
/* f07edf8: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07edfc: c7a60138 */ lwc1 $f6,0x138($sp)
/* f07ee00: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07ee04: 46060202 */ mul.s $f8,$f0,$f6
/* f07ee08: 11c00005 */ beqz $t6,.JF0f07ee20
/* f07ee0c: e7a80194 */ swc1 $f8,0x194($sp)
/* f07ee10: 0c0068df */ jal sinf
/* f07ee14: c7ac01fc */ lwc1 $f12,0x1fc($sp)
/* f07ee18: 10000004 */ b .JF0f07ee2c
/* f07ee1c: e7a00198 */ swc1 $f0,0x198($sp)
.JF0f07ee20:
/* f07ee20: 0c0068df */ jal sinf
/* f07ee24: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07ee28: e7a00198 */ swc1 $f0,0x198($sp)
.JF0f07ee2c:
/* f07ee2c: 0c0068dc */ jal cosf
/* f07ee30: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07ee34: c7aa0138 */ lwc1 $f10,0x138($sp)
/* f07ee38: 3c01800a */ lui $at,0x800a
/* f07ee3c: c422a67c */ lwc1 $f2,-0x5984($at)
/* f07ee40: 460a0102 */ mul.s $f4,$f0,$f10
/* f07ee44: c7a60194 */ lwc1 $f6,0x194($sp)
/* f07ee48: 8faf0278 */ lw $t7,0x278($sp)
/* f07ee4c: 8fa40058 */ lw $a0,0x58($sp)
/* f07ee50: 8fa50054 */ lw $a1,0x54($sp)
/* f07ee54: 27a60150 */ addiu $a2,$sp,0x150
/* f07ee58: 27a70140 */ addiu $a3,$sp,0x140
/* f07ee5c: e7a4019c */ swc1 $f4,0x19c($sp)
/* f07ee60: c6080064 */ lwc1 $f8,0x64($s0)
/* f07ee64: 46024282 */ mul.s $f10,$f8,$f2
/* f07ee68: c5e80008 */ lwc1 $f8,0x8($t7)
/* f07ee6c: 460a3102 */ mul.s $f4,$f6,$f10
/* f07ee70: c7aa0198 */ lwc1 $f10,0x198($sp)
/* f07ee74: 46082180 */ add.s $f6,$f4,$f8
/* f07ee78: e7a60150 */ swc1 $f6,0x150($sp)
/* f07ee7c: c6040064 */ lwc1 $f4,0x64($s0)
/* f07ee80: 46022202 */ mul.s $f8,$f4,$f2
/* f07ee84: c5e4000c */ lwc1 $f4,0xc($t7)
/* f07ee88: 46085182 */ mul.s $f6,$f10,$f8
/* f07ee8c: c7a8019c */ lwc1 $f8,0x19c($sp)
/* f07ee90: 46043280 */ add.s $f10,$f6,$f4
/* f07ee94: e7aa0154 */ swc1 $f10,0x154($sp)
/* f07ee98: c6060064 */ lwc1 $f6,0x64($s0)
/* f07ee9c: 46023102 */ mul.s $f4,$f6,$f2
/* f07eea0: c5e60010 */ lwc1 $f6,0x10($t7)
/* f07eea4: 46044282 */ mul.s $f10,$f8,$f4
/* f07eea8: 46065200 */ add.s $f8,$f10,$f6
/* f07eeac: 0fc19be5 */ jal func0f065e74
/* f07eeb0: e7a80158 */ swc1 $f8,0x158($sp)
/* f07eeb4: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07eeb8: 27a40150 */ addiu $a0,$sp,0x150
/* f07eebc: 3c0540a0 */ lui $a1,0x40a0
/* f07eec0: 13000017 */ beqz $t8,.JF0f07ef20
/* f07eec4: 27a60140 */ addiu $a2,$sp,0x140
/* f07eec8: 00003825 */ move $a3,$zero
/* f07eecc: 0c00a790 */ jal cdFindGroundYSimple
/* f07eed0: afa00010 */ sw $zero,0x10($sp)
/* f07eed4: 3c01420c */ lui $at,0x420c
/* f07eed8: 44812000 */ mtc1 $at,$f4
/* f07eedc: 3c017f1b */ lui $at,0x7f1b
/* f07eee0: c42ab420 */ lwc1 $f10,-0x4be0($at)
/* f07eee4: 46040080 */ add.s $f2,$f0,$f4
/* f07eee8: 3c01800a */ lui $at,0x800a
/* f07eeec: 460a103c */ c.lt.s $f2,$f10
/* f07eef0: e7a20154 */ swc1 $f2,0x154($sp)
/* f07eef4: 4502000b */ bc1fl .JF0f07ef24
/* f07eef8: c7a40150 */ lwc1 $f4,0x150($sp)
/* f07eefc: c6060064 */ lwc1 $f6,0x64($s0)
/* f07ef00: c428a67c */ lwc1 $f8,-0x5984($at)
/* f07ef04: c7aa0198 */ lwc1 $f10,0x198($sp)
/* f07ef08: 8fb90278 */ lw $t9,0x278($sp)
/* f07ef0c: 46083102 */ mul.s $f4,$f6,$f8
/* f07ef10: c728000c */ lwc1 $f8,0xc($t9)
/* f07ef14: 46045182 */ mul.s $f6,$f10,$f4
/* f07ef18: 46083280 */ add.s $f10,$f6,$f8
/* f07ef1c: e7aa0154 */ swc1 $f10,0x154($sp)
.JF0f07ef20:
/* f07ef20: c7a40150 */ lwc1 $f4,0x150($sp)
.JF0f07ef24:
/* f07ef24: 8fa40278 */ lw $a0,0x278($sp)
/* f07ef28: e4840008 */ swc1 $f4,0x8($a0)
/* f07ef2c: c7a60154 */ lwc1 $f6,0x154($sp)
/* f07ef30: e486000c */ swc1 $f6,0xc($a0)
/* f07ef34: c7a80158 */ lwc1 $f8,0x158($sp)
/* f07ef38: 0fc19b59 */ jal propDeregisterRooms
/* f07ef3c: e4880010 */ swc1 $f8,0x10($a0)
/* f07ef40: 27a40140 */ addiu $a0,$sp,0x140
/* f07ef44: 0fc19a31 */ jal roomsCopy
/* f07ef48: 8fa50054 */ lw $a1,0x54($sp)
/* f07ef4c: c7aa0190 */ lwc1 $f10,0x190($sp)
/* f07ef50: 8e020088 */ lw $v0,0x88($s0)
/* f07ef54: e60a007c */ swc1 $f10,0x7c($s0)
/* f07ef58: c7a4018c */ lwc1 $f4,0x18c($sp)
/* f07ef5c: e6040080 */ swc1 $f4,0x80($s0)
/* f07ef60: c7a60188 */ lwc1 $f6,0x188($sp)
/* f07ef64: e6060084 */ swc1 $f6,0x84($s0)
/* f07ef68: c7a80184 */ lwc1 $f8,0x184($sp)
/* f07ef6c: e6080070 */ swc1 $f8,0x70($s0)
/* f07ef70: c7aa0180 */ lwc1 $f10,0x180($sp)
/* f07ef74: 10400024 */ beqz $v0,.JF0f07f008
/* f07ef78: e60a0074 */ swc1 $f10,0x74($s0)
/* f07ef7c: 8e09008c */ lw $t1,0x8c($s0)
/* f07ef80: 8c480000 */ lw $t0,0x0($v0)
/* f07ef84: c7a601f4 */ lwc1 $f6,0x1f4($sp)
/* f07ef88: 00095880 */ sll $t3,$t1,0x2
/* f07ef8c: 010b6021 */ addu $t4,$t0,$t3
/* f07ef90: 8d8d0004 */ lw $t5,0x4($t4)
/* f07ef94: c7a401f4 */ lwc1 $f4,0x1f4($sp)
/* f07ef98: 05a20010 */ bltzl $t5,.JF0f07efdc
/* f07ef9c: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07efa0: c6040064 */ lwc1 $f4,0x64($s0)
/* f07efa4: 8fa40058 */ lw $a0,0x58($sp)
/* f07efa8: 27a50150 */ addiu $a1,$sp,0x150
/* f07efac: 46062202 */ mul.s $f8,$f4,$f6
/* f07efb0: 27a60214 */ addiu $a2,$sp,0x214
/* f07efb4: 44074000 */ mfc1 $a3,$f8
/* f07efb8: 0fc11645 */ jal posIsArrivingLaterallyAtPos
/* f07efbc: 00000000 */ nop
/* f07efc0: 50400012 */ beqzl $v0,.JF0f07f00c
/* f07efc4: 02002025 */ move $a0,$s0
/* f07efc8: 0fc1ce23 */ jal hovercarIncrementStep
/* f07efcc: 02002025 */ move $a0,$s0
/* f07efd0: 1000000e */ b .JF0f07f00c
/* f07efd4: 02002025 */ move $a0,$s0
/* f07efd8: c60a0064 */ lwc1 $f10,0x64($s0)
.JF0f07efdc:
/* f07efdc: 8fa40058 */ lw $a0,0x58($sp)
/* f07efe0: 27a50150 */ addiu $a1,$sp,0x150
/* f07efe4: 46045182 */ mul.s $f6,$f10,$f4
/* f07efe8: 27a60214 */ addiu $a2,$sp,0x214
/* f07efec: 44073000 */ mfc1 $a3,$f6
/* f07eff0: 0fc11645 */ jal posIsArrivingLaterallyAtPos
/* f07eff4: 00000000 */ nop
/* f07eff8: 50400004 */ beqzl $v0,.JF0f07f00c
/* f07effc: 02002025 */ move $a0,$s0
/* f07f000: 0fc1ce23 */ jal hovercarIncrementStep
/* f07f004: 02002025 */ move $a0,$s0
.JF0f07f008:
/* f07f008: 02002025 */ move $a0,$s0
.JF0f07f00c:
/* f07f00c: 00002825 */ move $a1,$zero
/* f07f010: 0fc1ab62 */ jal func0f069c70
/* f07f014: 24060001 */ li $a2,0x1
.JF0f07f018:
/* f07f018: 8fbf004c */ lw $ra,0x4c($sp)
.JF0f07f01c:
/* f07f01c: 8fb00048 */ lw $s0,0x48($sp)
/* f07f020: 27bd0278 */ addiu $sp,$sp,0x278
/* f07f024: 03e00008 */ jr $ra
/* f07f028: 00000000 */ nop
);
#elif PAL
GLOBAL_ASM(
glabel hovercarTick
.late_rodata
glabel var7f1aa6ac
.word 0x471c4000
glabel var7f1aa6b0
.word 0x47148900
glabel var7f1aa6b4
.word 0x3d2aaaab
glabel var7f1aa6b8
.word 0x3dcccccd
glabel var7f1aa6bc
.word 0x3d2aaaab
glabel var7f1aa6c0
.word 0x3e555555
glabel var7f1aa6c4
.word 0x39893c87
glabel var7f1aa6c8
.word 0x3c80a8be
glabel var7f1aa6cc
.word 0x39893c87
glabel var7f1aa6d0
.word 0x3c80a8be
glabel var7f1aa6d4
.word 0x39893c87
glabel var7f1aa6d8
.word 0x3dcccccd
glabel var7f1aa6dc
.word 0x40c907a9
glabel var7f1aa6e0
.word 0x40c907a9
glabel var7f1aa6e4
.word 0xc7c35000
.text
/* f07d1e4: 27bdfd88 */ addiu $sp,$sp,-632
/* f07d1e8: afbf004c */ sw $ra,0x4c($sp)
/* f07d1ec: afb00048 */ sw $s0,0x48($sp)
/* f07d1f0: afa40278 */ sw $a0,0x278($sp)
/* f07d1f4: 8c900004 */ lw $s0,0x4($a0)
/* f07d1f8: 3c018000 */ lui $at,0x8000
/* f07d1fc: c604007c */ lwc1 $f4,0x7c($s0)
/* f07d200: e7a40200 */ swc1 $f4,0x200($sp)
/* f07d204: c6060080 */ lwc1 $f6,0x80($s0)
/* f07d208: e7a601fc */ swc1 $f6,0x1fc($sp)
/* f07d20c: 8e020008 */ lw $v0,0x8($s0)
/* f07d210: 00417824 */ and $t7,$v0,$at
/* f07d214: 11e00005 */ beqz $t7,.L0f07d22c
/* f07d218: 01e01025 */ or $v0,$t7,$zero
/* f07d21c: 3c0140a0 */ lui $at,0x40a0
/* f07d220: 44814000 */ mtc1 $at,$f8
/* f07d224: 10000005 */ b .L0f07d23c
/* f07d228: e7a801f4 */ swc1 $f8,0x1f4($sp)
.L0f07d22c:
/* f07d22c: 3c014120 */ lui $at,0x4120
/* f07d230: 44815000 */ mtc1 $at,$f10
/* f07d234: 00000000 */ nop
/* f07d238: e7aa01f4 */ swc1 $f10,0x1f4($sp)
.L0f07d23c:
/* f07d23c: 10400038 */ beqz $v0,.L0f07d320
/* f07d240: afa001f0 */ sw $zero,0x1f0($sp)
/* f07d244: 86180094 */ lh $t8,0x94($s0)
/* f07d248: 07030036 */ bgezl $t8,.L0f07d324
/* f07d24c: 860f0092 */ lh $t7,0x92($s0)
/* f07d250: 0fc1a2aa */ jal modelFindBboxRodata
/* f07d254: 8e040018 */ lw $a0,0x18($s0)
/* f07d258: 0fc199ef */ jal objGetLocalYMin
/* f07d25c: 00402025 */ or $a0,$v0,$zero
/* f07d260: 8fa40278 */ lw $a0,0x278($sp)
/* f07d264: 24050001 */ addiu $a1,$zero,0x1
/* f07d268: 3406ffff */ dli $a2,0xffff
/* f07d26c: 84990028 */ lh $t9,0x28($a0)
/* f07d270: a7b901d6 */ sh $t9,0x1d6($sp)
/* f07d274: c6040028 */ lwc1 $f4,0x28($s0)
/* f07d278: e7a401d8 */ swc1 $f4,0x1d8($sp)
/* f07d27c: c606002c */ lwc1 $f6,0x2c($s0)
/* f07d280: e7a601dc */ swc1 $f6,0x1dc($sp)
/* f07d284: c6080030 */ lwc1 $f8,0x30($s0)
/* f07d288: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f07d28c: c60a0028 */ lwc1 $f10,0x28($s0)
/* f07d290: c4860008 */ lwc1 $f6,0x8($a0)
/* f07d294: 46005102 */ mul.s $f4,$f10,$f0
/* f07d298: 46062200 */ add.s $f8,$f4,$f6
/* f07d29c: e7a801e4 */ swc1 $f8,0x1e4($sp)
/* f07d2a0: c60a002c */ lwc1 $f10,0x2c($s0)
/* f07d2a4: c486000c */ lwc1 $f6,0xc($a0)
/* f07d2a8: 46005102 */ mul.s $f4,$f10,$f0
/* f07d2ac: 46062200 */ add.s $f8,$f4,$f6
/* f07d2b0: e7a801e8 */ swc1 $f8,0x1e8($sp)
/* f07d2b4: c60a0030 */ lwc1 $f10,0x30($s0)
/* f07d2b8: c4860010 */ lwc1 $f6,0x10($a0)
/* f07d2bc: 46005102 */ mul.s $f4,$f10,$f0
/* f07d2c0: 46062200 */ add.s $f8,$f4,$f6
/* f07d2c4: 0fc249af */ jal func0f0926bc
/* f07d2c8: e7a801ec */ swc1 $f8,0x1ec($sp)
/* f07d2cc: 8fa20278 */ lw $v0,0x278($sp)
/* f07d2d0: 3c08800a */ lui $t0,%hi(g_Vars+0x28c)
/* f07d2d4: 8d08a24c */ lw $t0,%lo(g_Vars+0x28c)($t0)
/* f07d2d8: 87ab01d6 */ lh $t3,0x1d6($sp)
/* f07d2dc: 24090001 */ addiu $t1,$zero,0x1
/* f07d2e0: 27aa01e4 */ addiu $t2,$sp,0x1e4
/* f07d2e4: 27ac01d8 */ addiu $t4,$sp,0x1d8
/* f07d2e8: afac0020 */ sw $t4,0x20($sp)
/* f07d2ec: afaa0018 */ sw $t2,0x18($sp)
/* f07d2f0: afa90014 */ sw $t1,0x14($sp)
/* f07d2f4: 00002025 */ or $a0,$zero,$zero
/* f07d2f8: 24070007 */ addiu $a3,$zero,0x7
/* f07d2fc: 24450008 */ addiu $a1,$v0,0x8
/* f07d300: 24460028 */ addiu $a2,$v0,0x28
/* f07d304: afa80010 */ sw $t0,0x10($sp)
/* f07d308: 0fc4a7d5 */ jal explosionCreate
/* f07d30c: afab001c */ sw $t3,0x1c($sp)
/* f07d310: 8e0d0040 */ lw $t5,0x40($s0)
/* f07d314: 35ae0004 */ ori $t6,$t5,0x4
/* f07d318: 10000311 */ b .L0f07df60
/* f07d31c: ae0e0040 */ sw $t6,0x40($s0)
.L0f07d320:
/* f07d320: 860f0092 */ lh $t7,0x92($s0)
.L0f07d324:
/* f07d324: 02002025 */ or $a0,$s0,$zero
/* f07d328: 24050001 */ addiu $a1,$zero,0x1
/* f07d32c: 11e00063 */ beqz $t7,.L0f07d4bc
/* f07d330: 00000000 */ nop
/* f07d334: 1040002c */ beqz $v0,.L0f07d3e8
/* f07d338: 3c02800a */ lui $v0,%hi(g_Vars)
/* f07d33c: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f07d340: 8c590038 */ lw $t9,0x38($v0)
/* f07d344: 86180094 */ lh $t8,0x94($s0)
/* f07d348: 86090096 */ lh $t1,0x96($s0)
/* f07d34c: 3c01bf80 */ lui $at,0xbf80
/* f07d350: 03194023 */ subu $t0,$t8,$t9
/* f07d354: a6080094 */ sh $t0,0x94($s0)
/* f07d358: 8c4a0038 */ lw $t2,0x38($v0)
/* f07d35c: 240d0032 */ addiu $t5,$zero,0x29
/* f07d360: 00002025 */ or $a0,$zero,$zero
/* f07d364: 012a5823 */ subu $t3,$t1,$t2
/* f07d368: a60b0096 */ sh $t3,0x96($s0)
/* f07d36c: 860c0096 */ lh $t4,0x96($s0)
/* f07d370: 24060064 */ addiu $a2,$zero,0x64
/* f07d374: 2407ffff */ addiu $a3,$zero,-1
/* f07d378: 058102f9 */ bgez $t4,.L0f07df60
/* f07d37c: 240effff */ addiu $t6,$zero,-1
/* f07d380: a60d0096 */ sh $t5,0x96($s0)
/* f07d384: 44810000 */ mtc1 $at,$f0
/* f07d388: 240f0400 */ addiu $t7,$zero,0x400
/* f07d38c: 2418ffff */ addiu $t8,$zero,-1
/* f07d390: afb8002c */ sw $t8,0x2c($sp)
/* f07d394: afaf0014 */ sw $t7,0x14($sp)
/* f07d398: afa00028 */ sw $zero,0x28($sp)
/* f07d39c: afa00020 */ sw $zero,0x20($sp)
/* f07d3a0: afa0001c */ sw $zero,0x1c($sp)
/* f07d3a4: afa00018 */ sw $zero,0x18($sp)
/* f07d3a8: afae0010 */ sw $t6,0x10($sp)
/* f07d3ac: 8fa50278 */ lw $a1,0x278($sp)
/* f07d3b0: e7a00024 */ swc1 $f0,0x24($sp)
/* f07d3b4: e7a00030 */ swc1 $f0,0x30($sp)
/* f07d3b8: e7a00034 */ swc1 $f0,0x34($sp)
/* f07d3bc: 0fc24e7e */ jal propsnd0f0939f8
/* f07d3c0: e7a00038 */ swc1 $f0,0x38($sp)
/* f07d3c4: 8fa50278 */ lw $a1,0x278($sp)
/* f07d3c8: 00003825 */ or $a3,$zero,$zero
/* f07d3cc: 84a40028 */ lh $a0,0x28($a1)
/* f07d3d0: afa00014 */ sw $zero,0x14($sp)
/* f07d3d4: afa00010 */ sw $zero,0x10($sp)
/* f07d3d8: 0fc4be7c */ jal sparksCreate
/* f07d3dc: 24a60008 */ addiu $a2,$a1,0x8
/* f07d3e0: 100002e0 */ b .L0f07df64
/* f07d3e4: 8fbf004c */ lw $ra,0x4c($sp)
.L0f07d3e8:
/* f07d3e8: 44805000 */ mtc1 $zero,$f10
/* f07d3ec: c604006c */ lwc1 $f4,0x6c($s0)
/* f07d3f0: 3c0140c0 */ lui $at,0x40c0
/* f07d3f4: 46045032 */ c.eq.s $f10,$f4
/* f07d3f8: 00000000 */ nop
/* f07d3fc: 450202d9 */ bc1fl .L0f07df64
/* f07d400: 8fbf004c */ lw $ra,0x4c($sp)
/* f07d404: c6060064 */ lwc1 $f6,0x64($s0)
/* f07d408: 44814000 */ mtc1 $at,$f8
/* f07d40c: 3c013f80 */ lui $at,0x3f80
/* f07d410: 46083280 */ add.s $f10,$f6,$f8
/* f07d414: e60a0064 */ swc1 $f10,0x64($s0)
/* f07d418: 8fb90278 */ lw $t9,0x278($sp)
/* f07d41c: c7240008 */ lwc1 $f4,0x8($t9)
/* f07d420: e7a401c0 */ swc1 $f4,0x1c0($sp)
/* f07d424: c6080064 */ lwc1 $f8,0x64($s0)
/* f07d428: c726000c */ lwc1 $f6,0xc($t9)
/* f07d42c: 46083281 */ sub.s $f10,$f6,$f8
/* f07d430: e7aa01c4 */ swc1 $f10,0x1c4($sp)
/* f07d434: c7240010 */ lwc1 $f4,0x10($t9)
/* f07d438: e7a401c8 */ swc1 $f4,0x1c8($sp)
/* f07d43c: c6020068 */ lwc1 $f2,0x68($s0)
/* f07d440: 4602503c */ c.lt.s $f10,$f2
/* f07d444: 00000000 */ nop
/* f07d448: 45020005 */ bc1fl .L0f07d460
/* f07d44c: 8fa80278 */ lw $t0,0x278($sp)
/* f07d450: 44813000 */ mtc1 $at,$f6
/* f07d454: e7a201c4 */ swc1 $f2,0x1c4($sp)
/* f07d458: e606006c */ swc1 $f6,0x6c($s0)
/* f07d45c: 8fa80278 */ lw $t0,0x278($sp)
.L0f07d460:
/* f07d460: 27a601c0 */ addiu $a2,$sp,0x1c0
/* f07d464: 27a701b0 */ addiu $a3,$sp,0x1b0
/* f07d468: 25050028 */ addiu $a1,$t0,0x28
/* f07d46c: afa50054 */ sw $a1,0x54($sp)
/* f07d470: 0fc1979d */ jal func0f065e74
/* f07d474: 25040008 */ addiu $a0,$t0,0x8
/* f07d478: 8fa40278 */ lw $a0,0x278($sp)
/* f07d47c: c7a801c0 */ lwc1 $f8,0x1c0($sp)
/* f07d480: e4880008 */ swc1 $f8,0x8($a0)
/* f07d484: c7a401c4 */ lwc1 $f4,0x1c4($sp)
/* f07d488: e484000c */ swc1 $f4,0xc($a0)
/* f07d48c: c7aa01c8 */ lwc1 $f10,0x1c8($sp)
/* f07d490: 0fc19711 */ jal propDeregisterRooms
/* f07d494: e48a0010 */ swc1 $f10,0x10($a0)
/* f07d498: 27a401b0 */ addiu $a0,$sp,0x1b0
/* f07d49c: 0fc195e9 */ jal roomsCopy
/* f07d4a0: 8fa50054 */ lw $a1,0x54($sp)
/* f07d4a4: 02002025 */ or $a0,$s0,$zero
/* f07d4a8: 00002825 */ or $a1,$zero,$zero
/* f07d4ac: 0fc1a71c */ jal func0f069c70
/* f07d4b0: 24060001 */ addiu $a2,$zero,0x1
/* f07d4b4: 100002ab */ b .L0f07df64
/* f07d4b8: 8fbf004c */ lw $ra,0x4c($sp)
.L0f07d4bc:
/* f07d4bc: 0fc135ad */ jal chraiExecute
/* f07d4c0: afa201f8 */ sw $v0,0x1f8($sp)
/* f07d4c4: afa00274 */ sw $zero,0x274($sp)
/* f07d4c8: 8e020088 */ lw $v0,0x88($s0)
/* f07d4cc: 24050042 */ addiu $a1,$zero,0x42
/* f07d4d0: 5040009f */ beqzl $v0,.L0f07d750
/* f07d4d4: 8e090008 */ lw $t1,0x8($s0)
/* f07d4d8: 8e0a008c */ lw $t2,0x8c($s0)
/* f07d4dc: 8c490000 */ lw $t1,0x0($v0)
/* f07d4e0: 27a60220 */ addiu $a2,$sp,0x220
/* f07d4e4: 000a5880 */ sll $t3,$t2,0x2
/* f07d4e8: 012b1821 */ addu $v1,$t1,$t3
/* f07d4ec: 0fc456ac */ jal padUnpack
/* f07d4f0: 8c640000 */ lw $a0,0x0($v1)
/* f07d4f4: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07d4f8: c7a60220 */ lwc1 $f6,0x220($sp)
/* f07d4fc: c7aa0224 */ lwc1 $f10,0x224($sp)
/* f07d500: 11800011 */ beqz $t4,.L0f07d548
/* f07d504: e7a60214 */ swc1 $f6,0x214($sp)
/* f07d508: 8fad0268 */ lw $t5,0x268($sp)
/* f07d50c: 240effff */ addiu $t6,$zero,-1
/* f07d510: a7ae0212 */ sh $t6,0x212($sp)
/* f07d514: 27a40220 */ addiu $a0,$sp,0x220
/* f07d518: 3c0540a0 */ lui $a1,0x40a0
/* f07d51c: 27a60210 */ addiu $a2,$sp,0x210
/* f07d520: 00003825 */ or $a3,$zero,$zero
/* f07d524: afa00010 */ sw $zero,0x10($sp)
/* f07d528: 0c00a8cc */ jal cdFindGroundYSimple
/* f07d52c: a7ad0210 */ sh $t5,0x210($sp)
/* f07d530: 3c01420c */ lui $at,0x420c
/* f07d534: 44814000 */ mtc1 $at,$f8
/* f07d538: 00000000 */ nop
/* f07d53c: 46080100 */ add.s $f4,$f0,$f8
/* f07d540: 10000002 */ b .L0f07d54c
/* f07d544: e7a40218 */ swc1 $f4,0x218($sp)
.L0f07d548:
/* f07d548: e7aa0218 */ swc1 $f10,0x218($sp)
.L0f07d54c:
/* f07d54c: c7a60228 */ lwc1 $f6,0x228($sp)
/* f07d550: 8fa40278 */ lw $a0,0x278($sp)
/* f07d554: 27a60214 */ addiu $a2,$sp,0x214
/* f07d558: e7a6021c */ swc1 $f6,0x21c($sp)
/* f07d55c: 8e0f0008 */ lw $t7,0x8($s0)
/* f07d560: 24840008 */ addiu $a0,$a0,0x8
/* f07d564: 00802825 */ or $a1,$a0,$zero
/* f07d568: 000fc080 */ sll $t8,$t7,0x2
/* f07d56c: 07030011 */ bgezl $t8,.L0f07d5b4
/* f07d570: 8fa20278 */ lw $v0,0x278($sp)
/* f07d574: 0fc111b8 */ jal posIsArrivingLaterallyAtPos
/* f07d578: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07d57c: 5040000d */ beqzl $v0,.L0f07d5b4
/* f07d580: 8fa20278 */ lw $v0,0x278($sp)
/* f07d584: 0fc1c9dd */ jal hovercarIncrementStep
/* f07d588: 02002025 */ or $a0,$s0,$zero
/* f07d58c: 8e190088 */ lw $t9,0x88($s0)
/* f07d590: 8e0a008c */ lw $t2,0x8c($s0)
/* f07d594: 24050002 */ addiu $a1,$zero,0x2
/* f07d598: 8f280000 */ lw $t0,0x0($t9)
/* f07d59c: 000a4880 */ sll $t1,$t2,0x2
/* f07d5a0: 27a60220 */ addiu $a2,$sp,0x220
/* f07d5a4: 01091821 */ addu $v1,$t0,$t1
/* f07d5a8: 0fc456ac */ jal padUnpack
/* f07d5ac: 8c640000 */ lw $a0,0x0($v1)
/* f07d5b0: 8fa20278 */ lw $v0,0x278($sp)
.L0f07d5b4:
/* f07d5b4: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07d5b8: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07d5bc: c4440008 */ lwc1 $f4,0x8($v0)
/* f07d5c0: c4460010 */ lwc1 $f6,0x10($v0)
/* f07d5c4: 46044301 */ sub.s $f12,$f8,$f4
/* f07d5c8: 0fc259d4 */ jal atan2f
/* f07d5cc: 46065381 */ sub.s $f14,$f10,$f6
/* f07d5d0: 8fa20278 */ lw $v0,0x278($sp)
/* f07d5d4: e7a00200 */ swc1 $f0,0x200($sp)
/* f07d5d8: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07d5dc: c4440008 */ lwc1 $f4,0x8($v0)
/* f07d5e0: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07d5e4: c4460010 */ lwc1 $f6,0x10($v0)
/* f07d5e8: 46044081 */ sub.s $f2,$f8,$f4
/* f07d5ec: 46065381 */ sub.s $f14,$f10,$f6
/* f07d5f0: 46021202 */ mul.s $f8,$f2,$f2
/* f07d5f4: 00000000 */ nop
/* f07d5f8: 460e7102 */ mul.s $f4,$f14,$f14
/* f07d5fc: 0c012974 */ jal sqrtf
/* f07d600: 46044300 */ add.s $f12,$f8,$f4
/* f07d604: 8fab0278 */ lw $t3,0x278($sp)
/* f07d608: c7aa0218 */ lwc1 $f10,0x218($sp)
/* f07d60c: 46000386 */ mov.s $f14,$f0
/* f07d610: c566000c */ lwc1 $f6,0xc($t3)
/* f07d614: 0fc259d4 */ jal atan2f
/* f07d618: 46065301 */ sub.s $f12,$f10,$f6
/* f07d61c: e7a001fc */ swc1 $f0,0x1fc($sp)
/* f07d620: 8e0c0008 */ lw $t4,0x8($s0)
/* f07d624: 3c01dfff */ lui $at,0xdfff
/* f07d628: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07d62c: 000c6880 */ sll $t5,$t4,0x2
/* f07d630: 05a1000c */ bgez $t5,.L0f07d664
/* f07d634: 3421ffff */ ori $at,$at,0xffff
/* f07d638: 8e0e0008 */ lw $t6,0x8($s0)
/* f07d63c: e608007c */ swc1 $f8,0x7c($s0)
/* f07d640: e6000080 */ swc1 $f0,0x80($s0)
/* f07d644: 01c17824 */ and $t7,$t6,$at
/* f07d648: ae0f0008 */ sw $t7,0x8($s0)
/* f07d64c: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07d650: 8fa30278 */ lw $v1,0x278($sp)
/* f07d654: c7a40218 */ lwc1 $f4,0x218($sp)
/* f07d658: 53000003 */ beqzl $t8,.L0f07d668
/* f07d65c: 8fb901f8 */ lw $t9,0x1f8($sp)
/* f07d660: e464000c */ swc1 $f4,0xc($v1)
.L0f07d664:
/* f07d664: 8fb901f8 */ lw $t9,0x1f8($sp)
.L0f07d668:
/* f07d668: 8fa30278 */ lw $v1,0x278($sp)
/* f07d66c: 27a60214 */ addiu $a2,$sp,0x214
/* f07d670: 13200034 */ beqz $t9,.L0f07d744
/* f07d674: 24640008 */ addiu $a0,$v1,0x8
/* f07d678: 44800000 */ mtc1 $zero,$f0
/* f07d67c: 24650028 */ addiu $a1,$v1,0x28
/* f07d680: 24075000 */ addiu $a3,$zero,0x5000
/* f07d684: afa00010 */ sw $zero,0x10($sp)
/* f07d688: e7a00014 */ swc1 $f0,0x14($sp)
/* f07d68c: 0c00b5f0 */ jal cd0002d7c0
/* f07d690: e7a00018 */ swc1 $f0,0x18($sp)
/* f07d694: 54400005 */ bnezl $v0,.L0f07d6ac
/* f07d698: 8fa301f0 */ lw $v1,0x1f0($sp)
/* f07d69c: 0c0093ac */ jal cdGetObstacle
/* f07d6a0: 00000000 */ nop
/* f07d6a4: afa201f0 */ sw $v0,0x1f0($sp)
/* f07d6a8: 8fa301f0 */ lw $v1,0x1f0($sp)
.L0f07d6ac:
/* f07d6ac: 10600025 */ beqz $v1,.L0f07d744
/* f07d6b0: 00000000 */ nop
/* f07d6b4: 8c6a0004 */ lw $t2,0x4($v1)
/* f07d6b8: 8fa60278 */ lw $a2,0x278($sp)
/* f07d6bc: 3c017f1b */ lui $at,%hi(var7f1aa6ac)
/* f07d6c0: afaa01a0 */ sw $t2,0x1a0($sp)
/* f07d6c4: c46a0008 */ lwc1 $f10,0x8($v1)
/* f07d6c8: c4c60008 */ lwc1 $f6,0x8($a2)
/* f07d6cc: c4680010 */ lwc1 $f8,0x10($v1)
/* f07d6d0: c4c40010 */ lwc1 $f4,0x10($a2)
/* f07d6d4: 46065001 */ sub.s $f0,$f10,$f6
/* f07d6d8: 01402825 */ or $a1,$t2,$zero
/* f07d6dc: 00c02025 */ or $a0,$a2,$zero
/* f07d6e0: 46044081 */ sub.s $f2,$f8,$f4
/* f07d6e4: 46000282 */ mul.s $f10,$f0,$f0
/* f07d6e8: c428a6ac */ lwc1 $f8,%lo(var7f1aa6ac)($at)
/* f07d6ec: 46021182 */ mul.s $f6,$f2,$f2
/* f07d6f0: 46065300 */ add.s $f12,$f10,$f6
/* f07d6f4: 4608603c */ c.lt.s $f12,$f8
/* f07d6f8: 00000000 */ nop
/* f07d6fc: 45000007 */ bc1f .L0f07d71c
/* f07d700: 00000000 */ nop
/* f07d704: 0fc24030 */ jal doorsChooseSwingDirection
/* f07d708: e7ac0058 */ swc1 $f12,0x58($sp)
/* f07d70c: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07d710: 0fc23922 */ jal doorsRequestMode
/* f07d714: 24050001 */ addiu $a1,$zero,0x1
/* f07d718: c7ac0058 */ lwc1 $f12,0x58($sp)
.L0f07d71c:
/* f07d71c: 3c017f1b */ lui $at,%hi(var7f1aa6b0)
/* f07d720: c424a6b0 */ lwc1 $f4,%lo(var7f1aa6b0)($at)
/* f07d724: 4604603c */ c.lt.s $f12,$f4
/* f07d728: 00000000 */ nop
/* f07d72c: 45000005 */ bc1f .L0f07d744
/* f07d730: 00000000 */ nop
/* f07d734: 0fc23959 */ jal doorIsOpen
/* f07d738: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07d73c: 2c480001 */ sltiu $t0,$v0,0x1
/* f07d740: afa80274 */ sw $t0,0x274($sp)
.L0f07d744:
/* f07d744: 1000001a */ b .L0f07d7b0
/* f07d748: 44807000 */ mtc1 $zero,$f14
/* f07d74c: 8e090008 */ lw $t1,0x8($s0)
.L0f07d750:
/* f07d750: 00095880 */ sll $t3,$t1,0x2
/* f07d754: 05630016 */ bgezl $t3,.L0f07d7b0
/* f07d758: 44807000 */ mtc1 $zero,$f14
/* f07d75c: c60c0034 */ lwc1 $f12,0x34($s0)
/* f07d760: 0fc259d4 */ jal atan2f
/* f07d764: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07d768: c6020034 */ lwc1 $f2,0x34($s0)
/* f07d76c: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07d770: e600007c */ swc1 $f0,0x7c($s0)
/* f07d774: 46021282 */ mul.s $f10,$f2,$f2
/* f07d778: 00000000 */ nop
/* f07d77c: 460e7182 */ mul.s $f6,$f14,$f14
/* f07d780: 0c012974 */ jal sqrtf
/* f07d784: 46065300 */ add.s $f12,$f10,$f6
/* f07d788: c60c0038 */ lwc1 $f12,0x38($s0)
/* f07d78c: 0fc259d4 */ jal atan2f
/* f07d790: 46000386 */ mov.s $f14,$f0
/* f07d794: 8e0c0008 */ lw $t4,0x8($s0)
/* f07d798: 3c01dfff */ lui $at,0xdfff
/* f07d79c: 3421ffff */ ori $at,$at,0xffff
/* f07d7a0: 01816824 */ and $t5,$t4,$at
/* f07d7a4: e6000080 */ swc1 $f0,0x80($s0)
/* f07d7a8: ae0d0008 */ sw $t5,0x8($s0)
/* f07d7ac: 44807000 */ mtc1 $zero,$f14
.L0f07d7b0:
/* f07d7b0: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07d7b4: 3c02800a */ lui $v0,%hi(g_Vars)
/* f07d7b8: 8fa30278 */ lw $v1,0x278($sp)
/* f07d7bc: 460c703e */ c.le.s $f14,$f12
/* f07d7c0: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f07d7c4: 45020015 */ bc1fl .L0f07d81c
/* f07d7c8: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07d7cc: c442004c */ lwc1 $f2,0x4c($v0)
/* f07d7d0: 4602603e */ c.le.s $f12,$f2
/* f07d7d4: 00000000 */ nop
/* f07d7d8: 45020006 */ bc1fl .L0f07d7f4
/* f07d7dc: c6000064 */ lwc1 $f0,0x64($s0)
/* f07d7e0: c6080068 */ lwc1 $f8,0x68($s0)
/* f07d7e4: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07d7e8: 10000008 */ b .L0f07d80c
/* f07d7ec: e6080064 */ swc1 $f8,0x64($s0)
/* f07d7f0: c6000064 */ lwc1 $f0,0x64($s0)
.L0f07d7f4:
/* f07d7f4: c6040068 */ lwc1 $f4,0x68($s0)
/* f07d7f8: 46002281 */ sub.s $f10,$f4,$f0
/* f07d7fc: 46025182 */ mul.s $f6,$f10,$f2
/* f07d800: 460c3203 */ div.s $f8,$f6,$f12
/* f07d804: 46080100 */ add.s $f4,$f0,$f8
/* f07d808: e6040064 */ swc1 $f4,0x64($s0)
.L0f07d80c:
/* f07d80c: c44a004c */ lwc1 $f10,0x4c($v0)
/* f07d810: 460a6181 */ sub.s $f6,$f12,$f10
/* f07d814: e606006c */ swc1 $f6,0x6c($s0)
/* f07d818: 8fae01f8 */ lw $t6,0x1f8($sp)
.L0f07d81c:
/* f07d81c: 3c02800a */ lui $v0,%hi(g_Vars)
/* f07d820: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f07d824: 51c00037 */ beqzl $t6,.L0f07d904
/* f07d828: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d82c: c6080070 */ lwc1 $f8,0x70($s0)
/* f07d830: 3c017f1b */ lui $at,%hi(var7f1aa6b4)
/* f07d834: 4608703c */ c.lt.s $f14,$f8
/* f07d838: 00000000 */ nop
/* f07d83c: 45020013 */ bc1fl .L0f07d88c
/* f07d840: c6000064 */ lwc1 $f0,0x64($s0)
/* f07d844: c6040068 */ lwc1 $f4,0x68($s0)
/* f07d848: c42aa6b4 */ lwc1 $f10,%lo(var7f1aa6b4)($at)
/* f07d84c: c4480044 */ lwc1 $f8,0x4c($v0)
/* f07d850: 3c017f1b */ lui $at,%hi(var7f1aa6b8)
/* f07d854: 460a2182 */ mul.s $f6,$f4,$f10
/* f07d858: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07d85c: 46083102 */ mul.s $f4,$f6,$f8
/* f07d860: 46045181 */ sub.s $f6,$f10,$f4
/* f07d864: e6060064 */ swc1 $f6,0x64($s0)
/* f07d868: c6080064 */ lwc1 $f8,0x64($s0)
/* f07d86c: 460e403c */ c.lt.s $f8,$f14
/* f07d870: 00000000 */ nop
/* f07d874: 45020013 */ bc1fl .L0f07d8c4
/* f07d878: 8faf0274 */ lw $t7,0x274($sp)
/* f07d87c: c42aa6b8 */ lwc1 $f10,%lo(var7f1aa6b8)($at)
/* f07d880: 1000000f */ b .L0f07d8c0
/* f07d884: e60a0064 */ swc1 $f10,0x64($s0)
/* f07d888: c6000064 */ lwc1 $f0,0x64($s0)
.L0f07d88c:
/* f07d88c: c6020068 */ lwc1 $f2,0x68($s0)
/* f07d890: 3c017f1b */ lui $at,%hi(var7f1aa6bc)
/* f07d894: 4602003c */ c.lt.s $f0,$f2
/* f07d898: 00000000 */ nop
/* f07d89c: 45020009 */ bc1fl .L0f07d8c4
/* f07d8a0: 8faf0274 */ lw $t7,0x274($sp)
/* f07d8a4: c424a6bc */ lwc1 $f4,%lo(var7f1aa6bc)($at)
/* f07d8a8: c4480044 */ lwc1 $f8,0x4c($v0)
/* f07d8ac: 46041182 */ mul.s $f6,$f2,$f4
/* f07d8b0: 00000000 */ nop
/* f07d8b4: 46083282 */ mul.s $f10,$f6,$f8
/* f07d8b8: 460a0100 */ add.s $f4,$f0,$f10
/* f07d8bc: e6040064 */ swc1 $f4,0x64($s0)
.L0f07d8c0:
/* f07d8c0: 8faf0274 */ lw $t7,0x274($sp)
.L0f07d8c4:
/* f07d8c4: 3c017f1b */ lui $at,%hi(var7f1aa6c0)
/* f07d8c8: 51e0000e */ beqzl $t7,.L0f07d904
/* f07d8cc: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d8d0: c426a6c0 */ lwc1 $f6,%lo(var7f1aa6c0)($at)
/* f07d8d4: c4480044 */ lwc1 $f8,0x4c($v0)
/* f07d8d8: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d8dc: 46083282 */ mul.s $f10,$f6,$f8
/* f07d8e0: 460a2181 */ sub.s $f6,$f4,$f10
/* f07d8e4: e6060064 */ swc1 $f6,0x64($s0)
/* f07d8e8: c6080064 */ lwc1 $f8,0x64($s0)
/* f07d8ec: 460e403c */ c.lt.s $f8,$f14
/* f07d8f0: 00000000 */ nop
/* f07d8f4: 45020003 */ bc1fl .L0f07d904
/* f07d8f8: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d8fc: e60e0064 */ swc1 $f14,0x64($s0)
/* f07d900: c6040064 */ lwc1 $f4,0x64($s0)
.L0f07d904:
/* f07d904: 4604703c */ c.lt.s $f14,$f4
/* f07d908: 00000000 */ nop
/* f07d90c: 45020195 */ bc1fl .L0f07df64
/* f07d910: 8fbf004c */ lw $ra,0x4c($sp)
/* f07d914: c60a007c */ lwc1 $f10,0x7c($s0)
/* f07d918: 24780008 */ addiu $t8,$v1,0x8
/* f07d91c: 24790028 */ addiu $t9,$v1,0x28
/* f07d920: e7aa0190 */ swc1 $f10,0x190($sp)
/* f07d924: c6060080 */ lwc1 $f6,0x80($s0)
/* f07d928: e7a6018c */ swc1 $f6,0x18c($sp)
/* f07d92c: c6080084 */ lwc1 $f8,0x84($s0)
/* f07d930: e7a80188 */ swc1 $f8,0x188($sp)
/* f07d934: c6040070 */ lwc1 $f4,0x70($s0)
/* f07d938: e7a40184 */ swc1 $f4,0x184($sp)
/* f07d93c: c60a0074 */ lwc1 $f10,0x74($s0)
/* f07d940: e7aa0180 */ swc1 $f10,0x180($sp)
/* f07d944: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07d948: afb90054 */ sw $t9,0x54($sp)
/* f07d94c: 0c0068f7 */ jal sinf
/* f07d950: afb80058 */ sw $t8,0x58($sp)
/* f07d954: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07d958: 0c0068f4 */ jal cosf
/* f07d95c: e7a00068 */ swc1 $f0,0x68($sp)
/* f07d960: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07d964: 46020182 */ mul.s $f6,$f0,$f2
/* f07d968: e7a60194 */ swc1 $f6,0x194($sp)
/* f07d96c: 0c0068f7 */ jal sinf
/* f07d970: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07d974: e7a00198 */ swc1 $f0,0x198($sp)
/* f07d978: 0c0068f4 */ jal cosf
/* f07d97c: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07d980: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07d984: 0c0068f4 */ jal cosf
/* f07d988: e7a00068 */ swc1 $f0,0x68($sp)
/* f07d98c: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07d990: 8fa40058 */ lw $a0,0x58($sp)
/* f07d994: 27a50194 */ addiu $a1,$sp,0x194
/* f07d998: 46020202 */ mul.s $f8,$f0,$f2
/* f07d99c: 27a60214 */ addiu $a2,$sp,0x214
/* f07d9a0: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07d9a4: 0fc11171 */ jal posIsMovingTowardsPosOrStoppedInRange
/* f07d9a8: e7a8019c */ swc1 $f8,0x19c($sp)
/* f07d9ac: 50400006 */ beqzl $v0,.L0f07d9c8
/* f07d9b0: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07d9b4: c604007c */ lwc1 $f4,0x7c($s0)
/* f07d9b8: e7a40200 */ swc1 $f4,0x200($sp)
/* f07d9bc: c60a0080 */ lwc1 $f10,0x80($s0)
/* f07d9c0: e7aa01fc */ swc1 $f10,0x1fc($sp)
/* f07d9c4: 8fa201f8 */ lw $v0,0x1f8($sp)
.L0f07d9c8:
/* f07d9c8: 10400004 */ beqz $v0,.L0f07d9dc
/* f07d9cc: 3c014170 */ lui $at,0x4170
/* f07d9d0: 44818000 */ mtc1 $at,$f16
/* f07d9d4: 10000006 */ b .L0f07d9f0
/* f07d9d8: 46008386 */ mov.s $f14,$f16
.L0f07d9dc:
/* f07d9dc: 3c0140a0 */ lui $at,0x40a0
/* f07d9e0: 44817000 */ mtc1 $at,$f14
/* f07d9e4: 3c014170 */ lui $at,0x4170
/* f07d9e8: 44818000 */ mtc1 $at,$f16
/* f07d9ec: 00000000 */ nop
.L0f07d9f0:
/* f07d9f0: 50400004 */ beqzl $v0,.L0f07da04
/* f07d9f4: 3c0140a0 */ lui $at,0x40a0
/* f07d9f8: 10000004 */ b .L0f07da0c
/* f07d9fc: 46008306 */ mov.s $f12,$f16
/* f07da00: 3c0140a0 */ lui $at,0x40a0
.L0f07da04:
/* f07da04: 44816000 */ mtc1 $at,$f12
/* f07da08: 00000000 */ nop
.L0f07da0c:
/* f07da0c: 50400004 */ beqzl $v0,.L0f07da20
/* f07da10: 3c0140a0 */ lui $at,0x40a0
/* f07da14: 10000004 */ b .L0f07da28
/* f07da18: 46008086 */ mov.s $f2,$f16
/* f07da1c: 3c0140a0 */ lui $at,0x40a0
.L0f07da20:
/* f07da20: 44811000 */ mtc1 $at,$f2
/* f07da24: 00000000 */ nop
.L0f07da28:
/* f07da28: 3c017f1b */ lui $at,%hi(var7f1aa6c4)
/* f07da2c: c432a6c4 */ lwc1 $f18,%lo(var7f1aa6c4)($at)
/* f07da30: 3c017f1b */ lui $at,%hi(var7f1aa6c8)
/* f07da34: c424a6c8 */ lwc1 $f4,%lo(var7f1aa6c8)($at)
/* f07da38: 46127182 */ mul.s $f6,$f14,$f18
/* f07da3c: 27a40190 */ addiu $a0,$sp,0x190
/* f07da40: 8fa50200 */ lw $a1,0x200($sp)
/* f07da44: 46126002 */ mul.s $f0,$f12,$f18
/* f07da48: 27a60184 */ addiu $a2,$sp,0x184
/* f07da4c: 46041282 */ mul.s $f10,$f2,$f4
/* f07da50: 44073000 */ mfc1 $a3,$f6
/* f07da54: 46000200 */ add.s $f8,$f0,$f0
/* f07da58: e7aa0014 */ swc1 $f10,0x14($sp)
/* f07da5c: 0fc1b6c0 */ jal applyRotation
/* f07da60: e7a80010 */ swc1 $f8,0x10($sp)
/* f07da64: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07da68: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07da6c: 3c014170 */ lui $at,0x4170
/* f07da70: 44818000 */ mtc1 $at,$f16
/* f07da74: 46083032 */ c.eq.s $f6,$f8
/* f07da78: 3c017f1b */ lui $at,%hi(var7f1aa6cc)
/* f07da7c: c432a6cc */ lwc1 $f18,%lo(var7f1aa6cc)($at)
/* f07da80: 45020021 */ bc1fl .L0f07db08
/* f07da84: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07da88: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07da8c: 3c0140a0 */ lui $at,0x40a0
/* f07da90: 50400004 */ beqzl $v0,.L0f07daa4
/* f07da94: 44811000 */ mtc1 $at,$f2
/* f07da98: 10000003 */ b .L0f07daa8
/* f07da9c: 46008086 */ mov.s $f2,$f16
/* f07daa0: 44811000 */ mtc1 $at,$f2
.L0f07daa4:
/* f07daa4: 00000000 */ nop
.L0f07daa8:
/* f07daa8: 46121002 */ mul.s $f0,$f2,$f18
/* f07daac: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07dab0: 46000100 */ add.s $f4,$f0,$f0
/* f07dab4: 4604703e */ c.le.s $f14,$f4
/* f07dab8: 00000000 */ nop
/* f07dabc: 45020012 */ bc1fl .L0f07db08
/* f07dac0: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07dac4: 10400003 */ beqz $v0,.L0f07dad4
/* f07dac8: 3c0140a0 */ lui $at,0x40a0
/* f07dacc: 10000003 */ b .L0f07dadc
/* f07dad0: 46008306 */ mov.s $f12,$f16
.L0f07dad4:
/* f07dad4: 44816000 */ mtc1 $at,$f12
/* f07dad8: 00000000 */ nop
.L0f07dadc:
/* f07dadc: 46126002 */ mul.s $f0,$f12,$f18
/* f07dae0: 46000007 */ neg.s $f0,$f0
/* f07dae4: 46000280 */ add.s $f10,$f0,$f0
/* f07dae8: 460e503e */ c.le.s $f10,$f14
/* f07daec: 00000000 */ nop
/* f07daf0: 45020005 */ bc1fl .L0f07db08
/* f07daf4: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07daf8: 44807000 */ mtc1 $zero,$f14
/* f07dafc: 00000000 */ nop
/* f07db00: e7ae0184 */ swc1 $f14,0x184($sp)
/* f07db04: 8fa201f8 */ lw $v0,0x1f8($sp)
.L0f07db08:
/* f07db08: 50400004 */ beqzl $v0,.L0f07db1c
/* f07db0c: 3c0140a0 */ lui $at,0x40a0
/* f07db10: 10000004 */ b .L0f07db24
/* f07db14: 46008386 */ mov.s $f14,$f16
/* f07db18: 3c0140a0 */ lui $at,0x40a0
.L0f07db1c:
/* f07db1c: 44817000 */ mtc1 $at,$f14
/* f07db20: 00000000 */ nop
.L0f07db24:
/* f07db24: 46127182 */ mul.s $f6,$f14,$f18
/* f07db28: 50400004 */ beqzl $v0,.L0f07db3c
/* f07db2c: 3c0140a0 */ lui $at,0x40a0
/* f07db30: 10000004 */ b .L0f07db44
/* f07db34: 46008306 */ mov.s $f12,$f16
/* f07db38: 3c0140a0 */ lui $at,0x40a0
.L0f07db3c:
/* f07db3c: 44816000 */ mtc1 $at,$f12
/* f07db40: 00000000 */ nop
.L0f07db44:
/* f07db44: 46126002 */ mul.s $f0,$f12,$f18
/* f07db48: 50400004 */ beqzl $v0,.L0f07db5c
/* f07db4c: 3c0140a0 */ lui $at,0x40a0
/* f07db50: 10000004 */ b .L0f07db64
/* f07db54: 46008086 */ mov.s $f2,$f16
/* f07db58: 3c0140a0 */ lui $at,0x40a0
.L0f07db5c:
/* f07db5c: 44811000 */ mtc1 $at,$f2
/* f07db60: 00000000 */ nop
.L0f07db64:
/* f07db64: 3c017f1b */ lui $at,%hi(var7f1aa6d0)
/* f07db68: c424a6d0 */ lwc1 $f4,%lo(var7f1aa6d0)($at)
/* f07db6c: 46000200 */ add.s $f8,$f0,$f0
/* f07db70: 44073000 */ mfc1 $a3,$f6
/* f07db74: 46041282 */ mul.s $f10,$f2,$f4
/* f07db78: 27a4018c */ addiu $a0,$sp,0x18c
/* f07db7c: e7a80010 */ swc1 $f8,0x10($sp)
/* f07db80: 8fa501fc */ lw $a1,0x1fc($sp)
/* f07db84: 27a60180 */ addiu $a2,$sp,0x180
/* f07db88: 0fc1b6c0 */ jal applyRotation
/* f07db8c: e7aa0014 */ swc1 $f10,0x14($sp)
/* f07db90: c7a6018c */ lwc1 $f6,0x18c($sp)
/* f07db94: c7a801fc */ lwc1 $f8,0x1fc($sp)
/* f07db98: 3c014170 */ lui $at,0x4170
/* f07db9c: 44818000 */ mtc1 $at,$f16
/* f07dba0: 46083032 */ c.eq.s $f6,$f8
/* f07dba4: 3c017f1b */ lui $at,%hi(var7f1aa6d4)
/* f07dba8: c432a6d4 */ lwc1 $f18,%lo(var7f1aa6d4)($at)
/* f07dbac: 45020022 */ bc1fl .L0f07dc38
/* f07dbb0: 8e090008 */ lw $t1,0x8($s0)
/* f07dbb4: 8faa01f8 */ lw $t2,0x1f8($sp)
/* f07dbb8: 3c0140a0 */ lui $at,0x40a0
/* f07dbbc: 8fa801f8 */ lw $t0,0x1f8($sp)
/* f07dbc0: 51400004 */ beqzl $t2,.L0f07dbd4
/* f07dbc4: 44811000 */ mtc1 $at,$f2
/* f07dbc8: 10000003 */ b .L0f07dbd8
/* f07dbcc: 46008086 */ mov.s $f2,$f16
/* f07dbd0: 44811000 */ mtc1 $at,$f2
.L0f07dbd4:
/* f07dbd4: 00000000 */ nop
.L0f07dbd8:
/* f07dbd8: 46121002 */ mul.s $f0,$f2,$f18
/* f07dbdc: c7ae0180 */ lwc1 $f14,0x180($sp)
/* f07dbe0: 46000100 */ add.s $f4,$f0,$f0
/* f07dbe4: 4604703e */ c.le.s $f14,$f4
/* f07dbe8: 00000000 */ nop
/* f07dbec: 45020012 */ bc1fl .L0f07dc38
/* f07dbf0: 8e090008 */ lw $t1,0x8($s0)
/* f07dbf4: 11000003 */ beqz $t0,.L0f07dc04
/* f07dbf8: 3c0140a0 */ lui $at,0x40a0
/* f07dbfc: 10000003 */ b .L0f07dc0c
/* f07dc00: 46008306 */ mov.s $f12,$f16
.L0f07dc04:
/* f07dc04: 44816000 */ mtc1 $at,$f12
/* f07dc08: 00000000 */ nop
.L0f07dc0c:
/* f07dc0c: 46126002 */ mul.s $f0,$f12,$f18
/* f07dc10: 46000007 */ neg.s $f0,$f0
/* f07dc14: 46000280 */ add.s $f10,$f0,$f0
/* f07dc18: 460e503e */ c.le.s $f10,$f14
/* f07dc1c: 00000000 */ nop
/* f07dc20: 45020005 */ bc1fl .L0f07dc38
/* f07dc24: 8e090008 */ lw $t1,0x8($s0)
/* f07dc28: 44807000 */ mtc1 $zero,$f14
/* f07dc2c: 00000000 */ nop
/* f07dc30: e7ae0180 */ swc1 $f14,0x180($sp)
/* f07dc34: 8e090008 */ lw $t1,0x8($s0)
.L0f07dc38:
/* f07dc38: 44800000 */ mtc1 $zero,$f0
/* f07dc3c: 00095800 */ sll $t3,$t1,0x0
/* f07dc40: 05630004 */ bgezl $t3,.L0f07dc54
/* f07dc44: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07dc48: 1000000d */ b .L0f07dc80
/* f07dc4c: e7a00188 */ swc1 $f0,0x188($sp)
/* f07dc50: c7ae0184 */ lwc1 $f14,0x184($sp)
.L0f07dc54:
/* f07dc54: 3c0142f0 */ lui $at,0x42f0
/* f07dc58: 44814000 */ mtc1 $at,$f8
/* f07dc5c: 46007187 */ neg.s $f6,$f14
/* f07dc60: c7aa0188 */ lwc1 $f10,0x188($sp)
/* f07dc64: 46083102 */ mul.s $f4,$f6,$f8
/* f07dc68: 3c017f1b */ lui $at,%hi(var7f1aa6d8)
/* f07dc6c: c428a6d8 */ lwc1 $f8,%lo(var7f1aa6d8)($at)
/* f07dc70: 460a2181 */ sub.s $f6,$f4,$f10
/* f07dc74: 46083102 */ mul.s $f4,$f6,$f8
/* f07dc78: 46045180 */ add.s $f6,$f10,$f4
/* f07dc7c: e7a60188 */ swc1 $f6,0x188($sp)
.L0f07dc80:
/* f07dc80: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07dc84: 11800006 */ beqz $t4,.L0f07dca0
/* f07dc88: 3c017f1b */ lui $at,%hi(var7f1aa6dc)
/* f07dc8c: c428a6dc */ lwc1 $f8,%lo(var7f1aa6dc)($at)
/* f07dc90: c7aa018c */ lwc1 $f10,0x18c($sp)
/* f07dc94: 460a4101 */ sub.s $f4,$f8,$f10
/* f07dc98: 10000002 */ b .L0f07dca4
/* f07dc9c: e7a4012c */ swc1 $f4,0x12c($sp)
.L0f07dca0:
/* f07dca0: e7a0012c */ swc1 $f0,0x12c($sp)
.L0f07dca4:
/* f07dca4: c7a80188 */ lwc1 $f8,0x188($sp)
/* f07dca8: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07dcac: e7a00134 */ swc1 $f0,0x134($sp)
/* f07dcb0: 4608003e */ c.le.s $f0,$f8
/* f07dcb4: e7a60130 */ swc1 $f6,0x130($sp)
/* f07dcb8: 45000006 */ bc1f .L0f07dcd4
/* f07dcbc: 00000000 */ nop
/* f07dcc0: 46004306 */ mov.s $f12,$f8
/* f07dcc4: 0c005900 */ jal mtx4LoadZRotation
/* f07dcc8: 27a5006c */ addiu $a1,$sp,0x6c
/* f07dccc: 10000008 */ b .L0f07dcf0
/* f07dcd0: 27a4012c */ addiu $a0,$sp,0x12c
.L0f07dcd4:
/* f07dcd4: 3c017f1b */ lui $at,%hi(var7f1aa6e0)
/* f07dcd8: c424a6e0 */ lwc1 $f4,%lo(var7f1aa6e0)($at)
/* f07dcdc: c7aa0188 */ lwc1 $f10,0x188($sp)
/* f07dce0: 27a5006c */ addiu $a1,$sp,0x6c
/* f07dce4: 0c005900 */ jal mtx4LoadZRotation
/* f07dce8: 46045300 */ add.s $f12,$f10,$f4
/* f07dcec: 27a4012c */ addiu $a0,$sp,0x12c
.L0f07dcf0:
/* f07dcf0: 0c005923 */ jal mtx4LoadRotation
/* f07dcf4: 27a500ac */ addiu $a1,$sp,0xac
/* f07dcf8: 8e0d0018 */ lw $t5,0x18($s0)
/* f07dcfc: 27a500ac */ addiu $a1,$sp,0xac
/* f07dd00: 0c0057c1 */ jal mtx00015f04
/* f07dd04: c5ac0014 */ lwc1 $f12,0x14($t5)
/* f07dd08: 27a400ac */ addiu $a0,$sp,0xac
/* f07dd0c: 27a5006c */ addiu $a1,$sp,0x6c
/* f07dd10: 0c005680 */ jal mtx4MultMtx4
/* f07dd14: 27a600ec */ addiu $a2,$sp,0xec
/* f07dd18: 27a400ec */ addiu $a0,$sp,0xec
/* f07dd1c: 0c005768 */ jal mtx4ToMtx3
/* f07dd20: 27a5015c */ addiu $a1,$sp,0x15c
/* f07dd24: 27a4015c */ addiu $a0,$sp,0x15c
/* f07dd28: 0c005736 */ jal mtx3Copy
/* f07dd2c: 2605001c */ addiu $a1,$s0,0x1c
/* f07dd30: 0c0068f4 */ jal cosf
/* f07dd34: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07dd38: e7a00138 */ swc1 $f0,0x138($sp)
/* f07dd3c: 0c0068f7 */ jal sinf
/* f07dd40: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07dd44: c7a60138 */ lwc1 $f6,0x138($sp)
/* f07dd48: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07dd4c: 46060202 */ mul.s $f8,$f0,$f6
/* f07dd50: 11c00005 */ beqz $t6,.L0f07dd68
/* f07dd54: e7a80194 */ swc1 $f8,0x194($sp)
/* f07dd58: 0c0068f7 */ jal sinf
/* f07dd5c: c7ac01fc */ lwc1 $f12,0x1fc($sp)
/* f07dd60: 10000004 */ b .L0f07dd74
/* f07dd64: e7a00198 */ swc1 $f0,0x198($sp)
.L0f07dd68:
/* f07dd68: 0c0068f7 */ jal sinf
/* f07dd6c: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07dd70: e7a00198 */ swc1 $f0,0x198($sp)
.L0f07dd74:
/* f07dd74: 0c0068f4 */ jal cosf
/* f07dd78: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07dd7c: c7aa0138 */ lwc1 $f10,0x138($sp)
/* f07dd80: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07dd84: c422a00c */ lwc1 $f2,%lo(g_Vars+0x4c)($at)
/* f07dd88: 460a0102 */ mul.s $f4,$f0,$f10
/* f07dd8c: c7a60194 */ lwc1 $f6,0x194($sp)
/* f07dd90: 8faf0278 */ lw $t7,0x278($sp)
/* f07dd94: 8fa40058 */ lw $a0,0x58($sp)
/* f07dd98: 8fa50054 */ lw $a1,0x54($sp)
/* f07dd9c: 27a60150 */ addiu $a2,$sp,0x150
/* f07dda0: 27a70140 */ addiu $a3,$sp,0x140
/* f07dda4: e7a4019c */ swc1 $f4,0x19c($sp)
/* f07dda8: c6080064 */ lwc1 $f8,0x64($s0)
/* f07ddac: 46024282 */ mul.s $f10,$f8,$f2
/* f07ddb0: c5e80008 */ lwc1 $f8,0x8($t7)
/* f07ddb4: 460a3102 */ mul.s $f4,$f6,$f10
/* f07ddb8: c7aa0198 */ lwc1 $f10,0x198($sp)
/* f07ddbc: 46082180 */ add.s $f6,$f4,$f8
/* f07ddc0: e7a60150 */ swc1 $f6,0x150($sp)
/* f07ddc4: c6040064 */ lwc1 $f4,0x64($s0)
/* f07ddc8: 46022202 */ mul.s $f8,$f4,$f2
/* f07ddcc: c5e4000c */ lwc1 $f4,0xc($t7)
/* f07ddd0: 46085182 */ mul.s $f6,$f10,$f8
/* f07ddd4: c7a8019c */ lwc1 $f8,0x19c($sp)
/* f07ddd8: 46043280 */ add.s $f10,$f6,$f4
/* f07dddc: e7aa0154 */ swc1 $f10,0x154($sp)
/* f07dde0: c6060064 */ lwc1 $f6,0x64($s0)
/* f07dde4: 46023102 */ mul.s $f4,$f6,$f2
/* f07dde8: c5e60010 */ lwc1 $f6,0x10($t7)
/* f07ddec: 46044282 */ mul.s $f10,$f8,$f4
/* f07ddf0: 46065200 */ add.s $f8,$f10,$f6
/* f07ddf4: 0fc1979d */ jal func0f065e74
/* f07ddf8: e7a80158 */ swc1 $f8,0x158($sp)
/* f07ddfc: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07de00: 27a40150 */ addiu $a0,$sp,0x150
/* f07de04: 3c0540a0 */ lui $a1,0x40a0
/* f07de08: 13000017 */ beqz $t8,.L0f07de68
/* f07de0c: 27a60140 */ addiu $a2,$sp,0x140
/* f07de10: 00003825 */ or $a3,$zero,$zero
/* f07de14: 0c00a8cc */ jal cdFindGroundYSimple
/* f07de18: afa00010 */ sw $zero,0x10($sp)
/* f07de1c: 3c01420c */ lui $at,0x420c
/* f07de20: 44812000 */ mtc1 $at,$f4
/* f07de24: 3c017f1b */ lui $at,%hi(var7f1aa6e4)
/* f07de28: c42aa6e4 */ lwc1 $f10,%lo(var7f1aa6e4)($at)
/* f07de2c: 46040080 */ add.s $f2,$f0,$f4
/* f07de30: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07de34: 460a103c */ c.lt.s $f2,$f10
/* f07de38: e7a20154 */ swc1 $f2,0x154($sp)
/* f07de3c: 4502000b */ bc1fl .L0f07de6c
/* f07de40: c7a40150 */ lwc1 $f4,0x150($sp)
/* f07de44: c6060064 */ lwc1 $f6,0x64($s0)
/* f07de48: c428a00c */ lwc1 $f8,%lo(g_Vars+0x4c)($at)
/* f07de4c: c7aa0198 */ lwc1 $f10,0x198($sp)
/* f07de50: 8fb90278 */ lw $t9,0x278($sp)
/* f07de54: 46083102 */ mul.s $f4,$f6,$f8
/* f07de58: c728000c */ lwc1 $f8,0xc($t9)
/* f07de5c: 46045182 */ mul.s $f6,$f10,$f4
/* f07de60: 46083280 */ add.s $f10,$f6,$f8
/* f07de64: e7aa0154 */ swc1 $f10,0x154($sp)
.L0f07de68:
/* f07de68: c7a40150 */ lwc1 $f4,0x150($sp)
.L0f07de6c:
/* f07de6c: 8fa40278 */ lw $a0,0x278($sp)
/* f07de70: e4840008 */ swc1 $f4,0x8($a0)
/* f07de74: c7a60154 */ lwc1 $f6,0x154($sp)
/* f07de78: e486000c */ swc1 $f6,0xc($a0)
/* f07de7c: c7a80158 */ lwc1 $f8,0x158($sp)
/* f07de80: 0fc19711 */ jal propDeregisterRooms
/* f07de84: e4880010 */ swc1 $f8,0x10($a0)
/* f07de88: 27a40140 */ addiu $a0,$sp,0x140
/* f07de8c: 0fc195e9 */ jal roomsCopy
/* f07de90: 8fa50054 */ lw $a1,0x54($sp)
/* f07de94: c7aa0190 */ lwc1 $f10,0x190($sp)
/* f07de98: 8e020088 */ lw $v0,0x88($s0)
/* f07de9c: e60a007c */ swc1 $f10,0x7c($s0)
/* f07dea0: c7a4018c */ lwc1 $f4,0x18c($sp)
/* f07dea4: e6040080 */ swc1 $f4,0x80($s0)
/* f07dea8: c7a60188 */ lwc1 $f6,0x188($sp)
/* f07deac: e6060084 */ swc1 $f6,0x84($s0)
/* f07deb0: c7a80184 */ lwc1 $f8,0x184($sp)
/* f07deb4: e6080070 */ swc1 $f8,0x70($s0)
/* f07deb8: c7aa0180 */ lwc1 $f10,0x180($sp)
/* f07debc: 10400024 */ beqz $v0,.L0f07df50
/* f07dec0: e60a0074 */ swc1 $f10,0x74($s0)
/* f07dec4: 8e09008c */ lw $t1,0x8c($s0)
/* f07dec8: 8c480000 */ lw $t0,0x0($v0)
/* f07decc: c7a601f4 */ lwc1 $f6,0x1f4($sp)
/* f07ded0: 00095880 */ sll $t3,$t1,0x2
/* f07ded4: 010b6021 */ addu $t4,$t0,$t3
/* f07ded8: 8d8d0004 */ lw $t5,0x4($t4)
/* f07dedc: c7a401f4 */ lwc1 $f4,0x1f4($sp)
/* f07dee0: 05a20010 */ bltzl $t5,.L0f07df24
/* f07dee4: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07dee8: c6040064 */ lwc1 $f4,0x64($s0)
/* f07deec: 8fa40058 */ lw $a0,0x58($sp)
/* f07def0: 27a50150 */ addiu $a1,$sp,0x150
/* f07def4: 46062202 */ mul.s $f8,$f4,$f6
/* f07def8: 27a60214 */ addiu $a2,$sp,0x214
/* f07defc: 44074000 */ mfc1 $a3,$f8
/* f07df00: 0fc111b8 */ jal posIsArrivingLaterallyAtPos
/* f07df04: 00000000 */ nop
/* f07df08: 50400012 */ beqzl $v0,.L0f07df54
/* f07df0c: 02002025 */ or $a0,$s0,$zero
/* f07df10: 0fc1c9dd */ jal hovercarIncrementStep
/* f07df14: 02002025 */ or $a0,$s0,$zero
/* f07df18: 1000000e */ b .L0f07df54
/* f07df1c: 02002025 */ or $a0,$s0,$zero
/* f07df20: c60a0064 */ lwc1 $f10,0x64($s0)
.L0f07df24:
/* f07df24: 8fa40058 */ lw $a0,0x58($sp)
/* f07df28: 27a50150 */ addiu $a1,$sp,0x150
/* f07df2c: 46045182 */ mul.s $f6,$f10,$f4
/* f07df30: 27a60214 */ addiu $a2,$sp,0x214
/* f07df34: 44073000 */ mfc1 $a3,$f6
/* f07df38: 0fc111b8 */ jal posIsArrivingLaterallyAtPos
/* f07df3c: 00000000 */ nop
/* f07df40: 50400004 */ beqzl $v0,.L0f07df54
/* f07df44: 02002025 */ or $a0,$s0,$zero
/* f07df48: 0fc1c9dd */ jal hovercarIncrementStep
/* f07df4c: 02002025 */ or $a0,$s0,$zero
.L0f07df50:
/* f07df50: 02002025 */ or $a0,$s0,$zero
.L0f07df54:
/* f07df54: 00002825 */ or $a1,$zero,$zero
/* f07df58: 0fc1a71c */ jal func0f069c70
/* f07df5c: 24060001 */ addiu $a2,$zero,0x1
.L0f07df60:
/* f07df60: 8fbf004c */ lw $ra,0x4c($sp)
.L0f07df64:
/* f07df64: 8fb00048 */ lw $s0,0x48($sp)
/* f07df68: 27bd0278 */ addiu $sp,$sp,0x278
/* f07df6c: 03e00008 */ jr $ra
/* f07df70: 00000000 */ nop
);
#elif VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel hovercarTick
.late_rodata
glabel var7f1aa6ac
.word 0x471c4000
glabel var7f1aa6b0
.word 0x47148900
glabel var7f1aa6b4
.word 0x3d2aaaab
glabel var7f1aa6b8
.word 0x3dcccccd
glabel var7f1aa6bc
.word 0x3d2aaaab
glabel var7f1aa6c0
.word 0x3e555555
glabel var7f1aa6c4
.word 0x3964ba35
glabel var7f1aa6c8
.word 0x3c566e92
glabel var7f1aa6cc
.word 0x3964ba35
glabel var7f1aa6d0
.word 0x3c566e92
glabel var7f1aa6d4
.word 0x3964ba35
glabel var7f1aa6d8
.word 0x3dcccccd
glabel var7f1aa6dc
.word 0x40c907a9
glabel var7f1aa6e0
.word 0x40c907a9
glabel var7f1aa6e4
.word 0xc7c35000
.text
/* f07d1e4: 27bdfd88 */ addiu $sp,$sp,-632
/* f07d1e8: afbf004c */ sw $ra,0x4c($sp)
/* f07d1ec: afb00048 */ sw $s0,0x48($sp)
/* f07d1f0: afa40278 */ sw $a0,0x278($sp)
/* f07d1f4: 8c900004 */ lw $s0,0x4($a0)
/* f07d1f8: 3c018000 */ lui $at,0x8000
/* f07d1fc: c604007c */ lwc1 $f4,0x7c($s0)
/* f07d200: e7a40200 */ swc1 $f4,0x200($sp)
/* f07d204: c6060080 */ lwc1 $f6,0x80($s0)
/* f07d208: e7a601fc */ swc1 $f6,0x1fc($sp)
/* f07d20c: 8e020008 */ lw $v0,0x8($s0)
/* f07d210: 00417824 */ and $t7,$v0,$at
/* f07d214: 11e00005 */ beqz $t7,.L0f07d22c
/* f07d218: 01e01025 */ or $v0,$t7,$zero
/* f07d21c: 3c0140a0 */ lui $at,0x40a0
/* f07d220: 44814000 */ mtc1 $at,$f8
/* f07d224: 10000005 */ b .L0f07d23c
/* f07d228: e7a801f4 */ swc1 $f8,0x1f4($sp)
.L0f07d22c:
/* f07d22c: 3c014120 */ lui $at,0x4120
/* f07d230: 44815000 */ mtc1 $at,$f10
/* f07d234: 00000000 */ nop
/* f07d238: e7aa01f4 */ swc1 $f10,0x1f4($sp)
.L0f07d23c:
/* f07d23c: 10400038 */ beqz $v0,.L0f07d320
/* f07d240: afa001f0 */ sw $zero,0x1f0($sp)
/* f07d244: 86180094 */ lh $t8,0x94($s0)
/* f07d248: 07030036 */ bgezl $t8,.L0f07d324
/* f07d24c: 860f0092 */ lh $t7,0x92($s0)
/* f07d250: 0fc1a2aa */ jal modelFindBboxRodata
/* f07d254: 8e040018 */ lw $a0,0x18($s0)
/* f07d258: 0fc199ef */ jal objGetLocalYMin
/* f07d25c: 00402025 */ or $a0,$v0,$zero
/* f07d260: 8fa40278 */ lw $a0,0x278($sp)
/* f07d264: 24050001 */ addiu $a1,$zero,0x1
/* f07d268: 3406ffff */ dli $a2,0xffff
/* f07d26c: 84990028 */ lh $t9,0x28($a0)
/* f07d270: a7b901d6 */ sh $t9,0x1d6($sp)
/* f07d274: c6040028 */ lwc1 $f4,0x28($s0)
/* f07d278: e7a401d8 */ swc1 $f4,0x1d8($sp)
/* f07d27c: c606002c */ lwc1 $f6,0x2c($s0)
/* f07d280: e7a601dc */ swc1 $f6,0x1dc($sp)
/* f07d284: c6080030 */ lwc1 $f8,0x30($s0)
/* f07d288: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f07d28c: c60a0028 */ lwc1 $f10,0x28($s0)
/* f07d290: c4860008 */ lwc1 $f6,0x8($a0)
/* f07d294: 46005102 */ mul.s $f4,$f10,$f0
/* f07d298: 46062200 */ add.s $f8,$f4,$f6
/* f07d29c: e7a801e4 */ swc1 $f8,0x1e4($sp)
/* f07d2a0: c60a002c */ lwc1 $f10,0x2c($s0)
/* f07d2a4: c486000c */ lwc1 $f6,0xc($a0)
/* f07d2a8: 46005102 */ mul.s $f4,$f10,$f0
/* f07d2ac: 46062200 */ add.s $f8,$f4,$f6
/* f07d2b0: e7a801e8 */ swc1 $f8,0x1e8($sp)
/* f07d2b4: c60a0030 */ lwc1 $f10,0x30($s0)
/* f07d2b8: c4860010 */ lwc1 $f6,0x10($a0)
/* f07d2bc: 46005102 */ mul.s $f4,$f10,$f0
/* f07d2c0: 46062200 */ add.s $f8,$f4,$f6
/* f07d2c4: 0fc249af */ jal func0f0926bc
/* f07d2c8: e7a801ec */ swc1 $f8,0x1ec($sp)
/* f07d2cc: 8fa20278 */ lw $v0,0x278($sp)
/* f07d2d0: 3c08800a */ lui $t0,%hi(g_Vars+0x28c)
/* f07d2d4: 8d08a24c */ lw $t0,%lo(g_Vars+0x28c)($t0)
/* f07d2d8: 87ab01d6 */ lh $t3,0x1d6($sp)
/* f07d2dc: 24090001 */ addiu $t1,$zero,0x1
/* f07d2e0: 27aa01e4 */ addiu $t2,$sp,0x1e4
/* f07d2e4: 27ac01d8 */ addiu $t4,$sp,0x1d8
/* f07d2e8: afac0020 */ sw $t4,0x20($sp)
/* f07d2ec: afaa0018 */ sw $t2,0x18($sp)
/* f07d2f0: afa90014 */ sw $t1,0x14($sp)
/* f07d2f4: 00002025 */ or $a0,$zero,$zero
/* f07d2f8: 24070007 */ addiu $a3,$zero,0x7
/* f07d2fc: 24450008 */ addiu $a1,$v0,0x8
/* f07d300: 24460028 */ addiu $a2,$v0,0x28
/* f07d304: afa80010 */ sw $t0,0x10($sp)
/* f07d308: 0fc4a7d5 */ jal explosionCreate
/* f07d30c: afab001c */ sw $t3,0x1c($sp)
/* f07d310: 8e0d0040 */ lw $t5,0x40($s0)
/* f07d314: 35ae0004 */ ori $t6,$t5,0x4
/* f07d318: 10000311 */ b .L0f07df60
/* f07d31c: ae0e0040 */ sw $t6,0x40($s0)
.L0f07d320:
/* f07d320: 860f0092 */ lh $t7,0x92($s0)
.L0f07d324:
/* f07d324: 02002025 */ or $a0,$s0,$zero
/* f07d328: 24050001 */ addiu $a1,$zero,0x1
/* f07d32c: 11e00063 */ beqz $t7,.L0f07d4bc
/* f07d330: 00000000 */ nop
/* f07d334: 1040002c */ beqz $v0,.L0f07d3e8
/* f07d338: 3c02800a */ lui $v0,%hi(g_Vars)
/* f07d33c: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f07d340: 8c590038 */ lw $t9,0x38($v0)
/* f07d344: 86180094 */ lh $t8,0x94($s0)
/* f07d348: 86090096 */ lh $t1,0x96($s0)
/* f07d34c: 3c01bf80 */ lui $at,0xbf80
/* f07d350: 03194023 */ subu $t0,$t8,$t9
/* f07d354: a6080094 */ sh $t0,0x94($s0)
/* f07d358: 8c4a0038 */ lw $t2,0x38($v0)
/* f07d35c: 240d0032 */ addiu $t5,$zero,0x32
/* f07d360: 00002025 */ or $a0,$zero,$zero
/* f07d364: 012a5823 */ subu $t3,$t1,$t2
/* f07d368: a60b0096 */ sh $t3,0x96($s0)
/* f07d36c: 860c0096 */ lh $t4,0x96($s0)
/* f07d370: 24060064 */ addiu $a2,$zero,0x64
/* f07d374: 2407ffff */ addiu $a3,$zero,-1
/* f07d378: 058102f9 */ bgez $t4,.L0f07df60
/* f07d37c: 240effff */ addiu $t6,$zero,-1
/* f07d380: a60d0096 */ sh $t5,0x96($s0)
/* f07d384: 44810000 */ mtc1 $at,$f0
/* f07d388: 240f0400 */ addiu $t7,$zero,0x400
/* f07d38c: 2418ffff */ addiu $t8,$zero,-1
/* f07d390: afb8002c */ sw $t8,0x2c($sp)
/* f07d394: afaf0014 */ sw $t7,0x14($sp)
/* f07d398: afa00028 */ sw $zero,0x28($sp)
/* f07d39c: afa00020 */ sw $zero,0x20($sp)
/* f07d3a0: afa0001c */ sw $zero,0x1c($sp)
/* f07d3a4: afa00018 */ sw $zero,0x18($sp)
/* f07d3a8: afae0010 */ sw $t6,0x10($sp)
/* f07d3ac: 8fa50278 */ lw $a1,0x278($sp)
/* f07d3b0: e7a00024 */ swc1 $f0,0x24($sp)
/* f07d3b4: e7a00030 */ swc1 $f0,0x30($sp)
/* f07d3b8: e7a00034 */ swc1 $f0,0x34($sp)
/* f07d3bc: 0fc24e7e */ jal propsnd0f0939f8
/* f07d3c0: e7a00038 */ swc1 $f0,0x38($sp)
/* f07d3c4: 8fa50278 */ lw $a1,0x278($sp)
/* f07d3c8: 00003825 */ or $a3,$zero,$zero
/* f07d3cc: 84a40028 */ lh $a0,0x28($a1)
/* f07d3d0: afa00014 */ sw $zero,0x14($sp)
/* f07d3d4: afa00010 */ sw $zero,0x10($sp)
/* f07d3d8: 0fc4be7c */ jal sparksCreate
/* f07d3dc: 24a60008 */ addiu $a2,$a1,0x8
/* f07d3e0: 100002e0 */ b .L0f07df64
/* f07d3e4: 8fbf004c */ lw $ra,0x4c($sp)
.L0f07d3e8:
/* f07d3e8: 44805000 */ mtc1 $zero,$f10
/* f07d3ec: c604006c */ lwc1 $f4,0x6c($s0)
/* f07d3f0: 3c0140c0 */ lui $at,0x40c0
/* f07d3f4: 46045032 */ c.eq.s $f10,$f4
/* f07d3f8: 00000000 */ nop
/* f07d3fc: 450202d9 */ bc1fl .L0f07df64
/* f07d400: 8fbf004c */ lw $ra,0x4c($sp)
/* f07d404: c6060064 */ lwc1 $f6,0x64($s0)
/* f07d408: 44814000 */ mtc1 $at,$f8
/* f07d40c: 3c013f80 */ lui $at,0x3f80
/* f07d410: 46083280 */ add.s $f10,$f6,$f8
/* f07d414: e60a0064 */ swc1 $f10,0x64($s0)
/* f07d418: 8fb90278 */ lw $t9,0x278($sp)
/* f07d41c: c7240008 */ lwc1 $f4,0x8($t9)
/* f07d420: e7a401c0 */ swc1 $f4,0x1c0($sp)
/* f07d424: c6080064 */ lwc1 $f8,0x64($s0)
/* f07d428: c726000c */ lwc1 $f6,0xc($t9)
/* f07d42c: 46083281 */ sub.s $f10,$f6,$f8
/* f07d430: e7aa01c4 */ swc1 $f10,0x1c4($sp)
/* f07d434: c7240010 */ lwc1 $f4,0x10($t9)
/* f07d438: e7a401c8 */ swc1 $f4,0x1c8($sp)
/* f07d43c: c6020068 */ lwc1 $f2,0x68($s0)
/* f07d440: 4602503c */ c.lt.s $f10,$f2
/* f07d444: 00000000 */ nop
/* f07d448: 45020005 */ bc1fl .L0f07d460
/* f07d44c: 8fa80278 */ lw $t0,0x278($sp)
/* f07d450: 44813000 */ mtc1 $at,$f6
/* f07d454: e7a201c4 */ swc1 $f2,0x1c4($sp)
/* f07d458: e606006c */ swc1 $f6,0x6c($s0)
/* f07d45c: 8fa80278 */ lw $t0,0x278($sp)
.L0f07d460:
/* f07d460: 27a601c0 */ addiu $a2,$sp,0x1c0
/* f07d464: 27a701b0 */ addiu $a3,$sp,0x1b0
/* f07d468: 25050028 */ addiu $a1,$t0,0x28
/* f07d46c: afa50054 */ sw $a1,0x54($sp)
/* f07d470: 0fc1979d */ jal func0f065e74
/* f07d474: 25040008 */ addiu $a0,$t0,0x8
/* f07d478: 8fa40278 */ lw $a0,0x278($sp)
/* f07d47c: c7a801c0 */ lwc1 $f8,0x1c0($sp)
/* f07d480: e4880008 */ swc1 $f8,0x8($a0)
/* f07d484: c7a401c4 */ lwc1 $f4,0x1c4($sp)
/* f07d488: e484000c */ swc1 $f4,0xc($a0)
/* f07d48c: c7aa01c8 */ lwc1 $f10,0x1c8($sp)
/* f07d490: 0fc19711 */ jal propDeregisterRooms
/* f07d494: e48a0010 */ swc1 $f10,0x10($a0)
/* f07d498: 27a401b0 */ addiu $a0,$sp,0x1b0
/* f07d49c: 0fc195e9 */ jal roomsCopy
/* f07d4a0: 8fa50054 */ lw $a1,0x54($sp)
/* f07d4a4: 02002025 */ or $a0,$s0,$zero
/* f07d4a8: 00002825 */ or $a1,$zero,$zero
/* f07d4ac: 0fc1a71c */ jal func0f069c70
/* f07d4b0: 24060001 */ addiu $a2,$zero,0x1
/* f07d4b4: 100002ab */ b .L0f07df64
/* f07d4b8: 8fbf004c */ lw $ra,0x4c($sp)
.L0f07d4bc:
/* f07d4bc: 0fc135ad */ jal chraiExecute
/* f07d4c0: afa201f8 */ sw $v0,0x1f8($sp)
/* f07d4c4: afa00274 */ sw $zero,0x274($sp)
/* f07d4c8: 8e020088 */ lw $v0,0x88($s0)
/* f07d4cc: 24050042 */ addiu $a1,$zero,0x42
/* f07d4d0: 5040009f */ beqzl $v0,.L0f07d750
/* f07d4d4: 8e090008 */ lw $t1,0x8($s0)
/* f07d4d8: 8e0a008c */ lw $t2,0x8c($s0)
/* f07d4dc: 8c490000 */ lw $t1,0x0($v0)
/* f07d4e0: 27a60220 */ addiu $a2,$sp,0x220
/* f07d4e4: 000a5880 */ sll $t3,$t2,0x2
/* f07d4e8: 012b1821 */ addu $v1,$t1,$t3
/* f07d4ec: 0fc456ac */ jal padUnpack
/* f07d4f0: 8c640000 */ lw $a0,0x0($v1)
/* f07d4f4: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07d4f8: c7a60220 */ lwc1 $f6,0x220($sp)
/* f07d4fc: c7aa0224 */ lwc1 $f10,0x224($sp)
/* f07d500: 11800011 */ beqz $t4,.L0f07d548
/* f07d504: e7a60214 */ swc1 $f6,0x214($sp)
/* f07d508: 8fad0268 */ lw $t5,0x268($sp)
/* f07d50c: 240effff */ addiu $t6,$zero,-1
/* f07d510: a7ae0212 */ sh $t6,0x212($sp)
/* f07d514: 27a40220 */ addiu $a0,$sp,0x220
/* f07d518: 3c0540a0 */ lui $a1,0x40a0
/* f07d51c: 27a60210 */ addiu $a2,$sp,0x210
/* f07d520: 00003825 */ or $a3,$zero,$zero
/* f07d524: afa00010 */ sw $zero,0x10($sp)
/* f07d528: 0c00a8cc */ jal cdFindGroundYSimple
/* f07d52c: a7ad0210 */ sh $t5,0x210($sp)
/* f07d530: 3c01420c */ lui $at,0x420c
/* f07d534: 44814000 */ mtc1 $at,$f8
/* f07d538: 00000000 */ nop
/* f07d53c: 46080100 */ add.s $f4,$f0,$f8
/* f07d540: 10000002 */ b .L0f07d54c
/* f07d544: e7a40218 */ swc1 $f4,0x218($sp)
.L0f07d548:
/* f07d548: e7aa0218 */ swc1 $f10,0x218($sp)
.L0f07d54c:
/* f07d54c: c7a60228 */ lwc1 $f6,0x228($sp)
/* f07d550: 8fa40278 */ lw $a0,0x278($sp)
/* f07d554: 27a60214 */ addiu $a2,$sp,0x214
/* f07d558: e7a6021c */ swc1 $f6,0x21c($sp)
/* f07d55c: 8e0f0008 */ lw $t7,0x8($s0)
/* f07d560: 24840008 */ addiu $a0,$a0,0x8
/* f07d564: 00802825 */ or $a1,$a0,$zero
/* f07d568: 000fc080 */ sll $t8,$t7,0x2
/* f07d56c: 07030011 */ bgezl $t8,.L0f07d5b4
/* f07d570: 8fa20278 */ lw $v0,0x278($sp)
/* f07d574: 0fc111b8 */ jal posIsArrivingLaterallyAtPos
/* f07d578: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07d57c: 5040000d */ beqzl $v0,.L0f07d5b4
/* f07d580: 8fa20278 */ lw $v0,0x278($sp)
/* f07d584: 0fc1c9dd */ jal hovercarIncrementStep
/* f07d588: 02002025 */ or $a0,$s0,$zero
/* f07d58c: 8e190088 */ lw $t9,0x88($s0)
/* f07d590: 8e0a008c */ lw $t2,0x8c($s0)
/* f07d594: 24050002 */ addiu $a1,$zero,0x2
/* f07d598: 8f280000 */ lw $t0,0x0($t9)
/* f07d59c: 000a4880 */ sll $t1,$t2,0x2
/* f07d5a0: 27a60220 */ addiu $a2,$sp,0x220
/* f07d5a4: 01091821 */ addu $v1,$t0,$t1
/* f07d5a8: 0fc456ac */ jal padUnpack
/* f07d5ac: 8c640000 */ lw $a0,0x0($v1)
/* f07d5b0: 8fa20278 */ lw $v0,0x278($sp)
.L0f07d5b4:
/* f07d5b4: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07d5b8: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07d5bc: c4440008 */ lwc1 $f4,0x8($v0)
/* f07d5c0: c4460010 */ lwc1 $f6,0x10($v0)
/* f07d5c4: 46044301 */ sub.s $f12,$f8,$f4
/* f07d5c8: 0fc259d4 */ jal atan2f
/* f07d5cc: 46065381 */ sub.s $f14,$f10,$f6
/* f07d5d0: 8fa20278 */ lw $v0,0x278($sp)
/* f07d5d4: e7a00200 */ swc1 $f0,0x200($sp)
/* f07d5d8: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07d5dc: c4440008 */ lwc1 $f4,0x8($v0)
/* f07d5e0: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07d5e4: c4460010 */ lwc1 $f6,0x10($v0)
/* f07d5e8: 46044081 */ sub.s $f2,$f8,$f4
/* f07d5ec: 46065381 */ sub.s $f14,$f10,$f6
/* f07d5f0: 46021202 */ mul.s $f8,$f2,$f2
/* f07d5f4: 00000000 */ nop
/* f07d5f8: 460e7102 */ mul.s $f4,$f14,$f14
/* f07d5fc: 0c012974 */ jal sqrtf
/* f07d600: 46044300 */ add.s $f12,$f8,$f4
/* f07d604: 8fab0278 */ lw $t3,0x278($sp)
/* f07d608: c7aa0218 */ lwc1 $f10,0x218($sp)
/* f07d60c: 46000386 */ mov.s $f14,$f0
/* f07d610: c566000c */ lwc1 $f6,0xc($t3)
/* f07d614: 0fc259d4 */ jal atan2f
/* f07d618: 46065301 */ sub.s $f12,$f10,$f6
/* f07d61c: e7a001fc */ swc1 $f0,0x1fc($sp)
/* f07d620: 8e0c0008 */ lw $t4,0x8($s0)
/* f07d624: 3c01dfff */ lui $at,0xdfff
/* f07d628: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07d62c: 000c6880 */ sll $t5,$t4,0x2
/* f07d630: 05a1000c */ bgez $t5,.L0f07d664
/* f07d634: 3421ffff */ ori $at,$at,0xffff
/* f07d638: 8e0e0008 */ lw $t6,0x8($s0)
/* f07d63c: e608007c */ swc1 $f8,0x7c($s0)
/* f07d640: e6000080 */ swc1 $f0,0x80($s0)
/* f07d644: 01c17824 */ and $t7,$t6,$at
/* f07d648: ae0f0008 */ sw $t7,0x8($s0)
/* f07d64c: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07d650: 8fa30278 */ lw $v1,0x278($sp)
/* f07d654: c7a40218 */ lwc1 $f4,0x218($sp)
/* f07d658: 53000003 */ beqzl $t8,.L0f07d668
/* f07d65c: 8fb901f8 */ lw $t9,0x1f8($sp)
/* f07d660: e464000c */ swc1 $f4,0xc($v1)
.L0f07d664:
/* f07d664: 8fb901f8 */ lw $t9,0x1f8($sp)
.L0f07d668:
/* f07d668: 8fa30278 */ lw $v1,0x278($sp)
/* f07d66c: 27a60214 */ addiu $a2,$sp,0x214
/* f07d670: 13200034 */ beqz $t9,.L0f07d744
/* f07d674: 24640008 */ addiu $a0,$v1,0x8
/* f07d678: 44800000 */ mtc1 $zero,$f0
/* f07d67c: 24650028 */ addiu $a1,$v1,0x28
/* f07d680: 24075000 */ addiu $a3,$zero,0x5000
/* f07d684: afa00010 */ sw $zero,0x10($sp)
/* f07d688: e7a00014 */ swc1 $f0,0x14($sp)
/* f07d68c: 0c00b5f0 */ jal cd0002d7c0
/* f07d690: e7a00018 */ swc1 $f0,0x18($sp)
/* f07d694: 54400005 */ bnezl $v0,.L0f07d6ac
/* f07d698: 8fa301f0 */ lw $v1,0x1f0($sp)
/* f07d69c: 0c0093ac */ jal cdGetObstacle
/* f07d6a0: 00000000 */ nop
/* f07d6a4: afa201f0 */ sw $v0,0x1f0($sp)
/* f07d6a8: 8fa301f0 */ lw $v1,0x1f0($sp)
.L0f07d6ac:
/* f07d6ac: 10600025 */ beqz $v1,.L0f07d744
/* f07d6b0: 00000000 */ nop
/* f07d6b4: 8c6a0004 */ lw $t2,0x4($v1)
/* f07d6b8: 8fa60278 */ lw $a2,0x278($sp)
/* f07d6bc: 3c017f1b */ lui $at,%hi(var7f1aa6ac)
/* f07d6c0: afaa01a0 */ sw $t2,0x1a0($sp)
/* f07d6c4: c46a0008 */ lwc1 $f10,0x8($v1)
/* f07d6c8: c4c60008 */ lwc1 $f6,0x8($a2)
/* f07d6cc: c4680010 */ lwc1 $f8,0x10($v1)
/* f07d6d0: c4c40010 */ lwc1 $f4,0x10($a2)
/* f07d6d4: 46065001 */ sub.s $f0,$f10,$f6
/* f07d6d8: 01402825 */ or $a1,$t2,$zero
/* f07d6dc: 00c02025 */ or $a0,$a2,$zero
/* f07d6e0: 46044081 */ sub.s $f2,$f8,$f4
/* f07d6e4: 46000282 */ mul.s $f10,$f0,$f0
/* f07d6e8: c428a6ac */ lwc1 $f8,%lo(var7f1aa6ac)($at)
/* f07d6ec: 46021182 */ mul.s $f6,$f2,$f2
/* f07d6f0: 46065300 */ add.s $f12,$f10,$f6
/* f07d6f4: 4608603c */ c.lt.s $f12,$f8
/* f07d6f8: 00000000 */ nop
/* f07d6fc: 45000007 */ bc1f .L0f07d71c
/* f07d700: 00000000 */ nop
/* f07d704: 0fc24030 */ jal doorsChooseSwingDirection
/* f07d708: e7ac0058 */ swc1 $f12,0x58($sp)
/* f07d70c: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07d710: 0fc23922 */ jal doorsRequestMode
/* f07d714: 24050001 */ addiu $a1,$zero,0x1
/* f07d718: c7ac0058 */ lwc1 $f12,0x58($sp)
.L0f07d71c:
/* f07d71c: 3c017f1b */ lui $at,%hi(var7f1aa6b0)
/* f07d720: c424a6b0 */ lwc1 $f4,%lo(var7f1aa6b0)($at)
/* f07d724: 4604603c */ c.lt.s $f12,$f4
/* f07d728: 00000000 */ nop
/* f07d72c: 45000005 */ bc1f .L0f07d744
/* f07d730: 00000000 */ nop
/* f07d734: 0fc23959 */ jal doorIsOpen
/* f07d738: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07d73c: 2c480001 */ sltiu $t0,$v0,0x1
/* f07d740: afa80274 */ sw $t0,0x274($sp)
.L0f07d744:
/* f07d744: 1000001a */ b .L0f07d7b0
/* f07d748: 44807000 */ mtc1 $zero,$f14
/* f07d74c: 8e090008 */ lw $t1,0x8($s0)
.L0f07d750:
/* f07d750: 00095880 */ sll $t3,$t1,0x2
/* f07d754: 05630016 */ bgezl $t3,.L0f07d7b0
/* f07d758: 44807000 */ mtc1 $zero,$f14
/* f07d75c: c60c0034 */ lwc1 $f12,0x34($s0)
/* f07d760: 0fc259d4 */ jal atan2f
/* f07d764: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07d768: c6020034 */ lwc1 $f2,0x34($s0)
/* f07d76c: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07d770: e600007c */ swc1 $f0,0x7c($s0)
/* f07d774: 46021282 */ mul.s $f10,$f2,$f2
/* f07d778: 00000000 */ nop
/* f07d77c: 460e7182 */ mul.s $f6,$f14,$f14
/* f07d780: 0c012974 */ jal sqrtf
/* f07d784: 46065300 */ add.s $f12,$f10,$f6
/* f07d788: c60c0038 */ lwc1 $f12,0x38($s0)
/* f07d78c: 0fc259d4 */ jal atan2f
/* f07d790: 46000386 */ mov.s $f14,$f0
/* f07d794: 8e0c0008 */ lw $t4,0x8($s0)
/* f07d798: 3c01dfff */ lui $at,0xdfff
/* f07d79c: 3421ffff */ ori $at,$at,0xffff
/* f07d7a0: 01816824 */ and $t5,$t4,$at
/* f07d7a4: e6000080 */ swc1 $f0,0x80($s0)
/* f07d7a8: ae0d0008 */ sw $t5,0x8($s0)
/* f07d7ac: 44807000 */ mtc1 $zero,$f14
.L0f07d7b0:
/* f07d7b0: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07d7b4: 3c02800a */ lui $v0,%hi(g_Vars)
/* f07d7b8: 8fa30278 */ lw $v1,0x278($sp)
/* f07d7bc: 460c703e */ c.le.s $f14,$f12
/* f07d7c0: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f07d7c4: 45020015 */ bc1fl .L0f07d81c
/* f07d7c8: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07d7cc: c442004c */ lwc1 $f2,0x4c($v0)
/* f07d7d0: 4602603e */ c.le.s $f12,$f2
/* f07d7d4: 00000000 */ nop
/* f07d7d8: 45020006 */ bc1fl .L0f07d7f4
/* f07d7dc: c6000064 */ lwc1 $f0,0x64($s0)
/* f07d7e0: c6080068 */ lwc1 $f8,0x68($s0)
/* f07d7e4: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07d7e8: 10000008 */ b .L0f07d80c
/* f07d7ec: e6080064 */ swc1 $f8,0x64($s0)
/* f07d7f0: c6000064 */ lwc1 $f0,0x64($s0)
.L0f07d7f4:
/* f07d7f4: c6040068 */ lwc1 $f4,0x68($s0)
/* f07d7f8: 46002281 */ sub.s $f10,$f4,$f0
/* f07d7fc: 46025182 */ mul.s $f6,$f10,$f2
/* f07d800: 460c3203 */ div.s $f8,$f6,$f12
/* f07d804: 46080100 */ add.s $f4,$f0,$f8
/* f07d808: e6040064 */ swc1 $f4,0x64($s0)
.L0f07d80c:
/* f07d80c: c44a004c */ lwc1 $f10,0x4c($v0)
/* f07d810: 460a6181 */ sub.s $f6,$f12,$f10
/* f07d814: e606006c */ swc1 $f6,0x6c($s0)
/* f07d818: 8fae01f8 */ lw $t6,0x1f8($sp)
.L0f07d81c:
/* f07d81c: 3c02800a */ lui $v0,%hi(g_Vars)
/* f07d820: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f07d824: 51c00037 */ beqzl $t6,.L0f07d904
/* f07d828: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d82c: c6080070 */ lwc1 $f8,0x70($s0)
/* f07d830: 3c017f1b */ lui $at,%hi(var7f1aa6b4)
/* f07d834: 4608703c */ c.lt.s $f14,$f8
/* f07d838: 00000000 */ nop
/* f07d83c: 45020013 */ bc1fl .L0f07d88c
/* f07d840: c6000064 */ lwc1 $f0,0x64($s0)
/* f07d844: c6040068 */ lwc1 $f4,0x68($s0)
/* f07d848: c42aa6b4 */ lwc1 $f10,%lo(var7f1aa6b4)($at)
/* f07d84c: c4480044 */ lwc1 $f8,0x44($v0)
/* f07d850: 3c017f1b */ lui $at,%hi(var7f1aa6b8)
/* f07d854: 460a2182 */ mul.s $f6,$f4,$f10
/* f07d858: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07d85c: 46083102 */ mul.s $f4,$f6,$f8
/* f07d860: 46045181 */ sub.s $f6,$f10,$f4
/* f07d864: e6060064 */ swc1 $f6,0x64($s0)
/* f07d868: c6080064 */ lwc1 $f8,0x64($s0)
/* f07d86c: 460e403c */ c.lt.s $f8,$f14
/* f07d870: 00000000 */ nop
/* f07d874: 45020013 */ bc1fl .L0f07d8c4
/* f07d878: 8faf0274 */ lw $t7,0x274($sp)
/* f07d87c: c42aa6b8 */ lwc1 $f10,%lo(var7f1aa6b8)($at)
/* f07d880: 1000000f */ b .L0f07d8c0
/* f07d884: e60a0064 */ swc1 $f10,0x64($s0)
/* f07d888: c6000064 */ lwc1 $f0,0x64($s0)
.L0f07d88c:
/* f07d88c: c6020068 */ lwc1 $f2,0x68($s0)
/* f07d890: 3c017f1b */ lui $at,%hi(var7f1aa6bc)
/* f07d894: 4602003c */ c.lt.s $f0,$f2
/* f07d898: 00000000 */ nop
/* f07d89c: 45020009 */ bc1fl .L0f07d8c4
/* f07d8a0: 8faf0274 */ lw $t7,0x274($sp)
/* f07d8a4: c424a6bc */ lwc1 $f4,%lo(var7f1aa6bc)($at)
/* f07d8a8: c4480044 */ lwc1 $f8,0x44($v0)
/* f07d8ac: 46041182 */ mul.s $f6,$f2,$f4
/* f07d8b0: 00000000 */ nop
/* f07d8b4: 46083282 */ mul.s $f10,$f6,$f8
/* f07d8b8: 460a0100 */ add.s $f4,$f0,$f10
/* f07d8bc: e6040064 */ swc1 $f4,0x64($s0)
.L0f07d8c0:
/* f07d8c0: 8faf0274 */ lw $t7,0x274($sp)
.L0f07d8c4:
/* f07d8c4: 3c017f1b */ lui $at,%hi(var7f1aa6c0)
/* f07d8c8: 51e0000e */ beqzl $t7,.L0f07d904
/* f07d8cc: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d8d0: c426a6c0 */ lwc1 $f6,%lo(var7f1aa6c0)($at)
/* f07d8d4: c4480044 */ lwc1 $f8,0x44($v0)
/* f07d8d8: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d8dc: 46083282 */ mul.s $f10,$f6,$f8
/* f07d8e0: 460a2181 */ sub.s $f6,$f4,$f10
/* f07d8e4: e6060064 */ swc1 $f6,0x64($s0)
/* f07d8e8: c6080064 */ lwc1 $f8,0x64($s0)
/* f07d8ec: 460e403c */ c.lt.s $f8,$f14
/* f07d8f0: 00000000 */ nop
/* f07d8f4: 45020003 */ bc1fl .L0f07d904
/* f07d8f8: c6040064 */ lwc1 $f4,0x64($s0)
/* f07d8fc: e60e0064 */ swc1 $f14,0x64($s0)
/* f07d900: c6040064 */ lwc1 $f4,0x64($s0)
.L0f07d904:
/* f07d904: 4604703c */ c.lt.s $f14,$f4
/* f07d908: 00000000 */ nop
/* f07d90c: 45020195 */ bc1fl .L0f07df64
/* f07d910: 8fbf004c */ lw $ra,0x4c($sp)
/* f07d914: c60a007c */ lwc1 $f10,0x7c($s0)
/* f07d918: 24780008 */ addiu $t8,$v1,0x8
/* f07d91c: 24790028 */ addiu $t9,$v1,0x28
/* f07d920: e7aa0190 */ swc1 $f10,0x190($sp)
/* f07d924: c6060080 */ lwc1 $f6,0x80($s0)
/* f07d928: e7a6018c */ swc1 $f6,0x18c($sp)
/* f07d92c: c6080084 */ lwc1 $f8,0x84($s0)
/* f07d930: e7a80188 */ swc1 $f8,0x188($sp)
/* f07d934: c6040070 */ lwc1 $f4,0x70($s0)
/* f07d938: e7a40184 */ swc1 $f4,0x184($sp)
/* f07d93c: c60a0074 */ lwc1 $f10,0x74($s0)
/* f07d940: e7aa0180 */ swc1 $f10,0x180($sp)
/* f07d944: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07d948: afb90054 */ sw $t9,0x54($sp)
/* f07d94c: 0c0068f7 */ jal sinf
/* f07d950: afb80058 */ sw $t8,0x58($sp)
/* f07d954: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07d958: 0c0068f4 */ jal cosf
/* f07d95c: e7a00068 */ swc1 $f0,0x68($sp)
/* f07d960: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07d964: 46020182 */ mul.s $f6,$f0,$f2
/* f07d968: e7a60194 */ swc1 $f6,0x194($sp)
/* f07d96c: 0c0068f7 */ jal sinf
/* f07d970: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07d974: e7a00198 */ swc1 $f0,0x198($sp)
/* f07d978: 0c0068f4 */ jal cosf
/* f07d97c: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07d980: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07d984: 0c0068f4 */ jal cosf
/* f07d988: e7a00068 */ swc1 $f0,0x68($sp)
/* f07d98c: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07d990: 8fa40058 */ lw $a0,0x58($sp)
/* f07d994: 27a50194 */ addiu $a1,$sp,0x194
/* f07d998: 46020202 */ mul.s $f8,$f0,$f2
/* f07d99c: 27a60214 */ addiu $a2,$sp,0x214
/* f07d9a0: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07d9a4: 0fc11171 */ jal posIsMovingTowardsPosOrStoppedInRange
/* f07d9a8: e7a8019c */ swc1 $f8,0x19c($sp)
/* f07d9ac: 50400006 */ beqzl $v0,.L0f07d9c8
/* f07d9b0: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07d9b4: c604007c */ lwc1 $f4,0x7c($s0)
/* f07d9b8: e7a40200 */ swc1 $f4,0x200($sp)
/* f07d9bc: c60a0080 */ lwc1 $f10,0x80($s0)
/* f07d9c0: e7aa01fc */ swc1 $f10,0x1fc($sp)
/* f07d9c4: 8fa201f8 */ lw $v0,0x1f8($sp)
.L0f07d9c8:
/* f07d9c8: 10400004 */ beqz $v0,.L0f07d9dc
/* f07d9cc: 3c014170 */ lui $at,0x4170
/* f07d9d0: 44818000 */ mtc1 $at,$f16
/* f07d9d4: 10000006 */ b .L0f07d9f0
/* f07d9d8: 46008386 */ mov.s $f14,$f16
.L0f07d9dc:
/* f07d9dc: 3c0140a0 */ lui $at,0x40a0
/* f07d9e0: 44817000 */ mtc1 $at,$f14
/* f07d9e4: 3c014170 */ lui $at,0x4170
/* f07d9e8: 44818000 */ mtc1 $at,$f16
/* f07d9ec: 00000000 */ nop
.L0f07d9f0:
/* f07d9f0: 50400004 */ beqzl $v0,.L0f07da04
/* f07d9f4: 3c0140a0 */ lui $at,0x40a0
/* f07d9f8: 10000004 */ b .L0f07da0c
/* f07d9fc: 46008306 */ mov.s $f12,$f16
/* f07da00: 3c0140a0 */ lui $at,0x40a0
.L0f07da04:
/* f07da04: 44816000 */ mtc1 $at,$f12
/* f07da08: 00000000 */ nop
.L0f07da0c:
/* f07da0c: 50400004 */ beqzl $v0,.L0f07da20
/* f07da10: 3c0140a0 */ lui $at,0x40a0
/* f07da14: 10000004 */ b .L0f07da28
/* f07da18: 46008086 */ mov.s $f2,$f16
/* f07da1c: 3c0140a0 */ lui $at,0x40a0
.L0f07da20:
/* f07da20: 44811000 */ mtc1 $at,$f2
/* f07da24: 00000000 */ nop
.L0f07da28:
/* f07da28: 3c017f1b */ lui $at,%hi(var7f1aa6c4)
/* f07da2c: c432a6c4 */ lwc1 $f18,%lo(var7f1aa6c4)($at)
/* f07da30: 3c017f1b */ lui $at,%hi(var7f1aa6c8)
/* f07da34: c424a6c8 */ lwc1 $f4,%lo(var7f1aa6c8)($at)
/* f07da38: 46127182 */ mul.s $f6,$f14,$f18
/* f07da3c: 27a40190 */ addiu $a0,$sp,0x190
/* f07da40: 8fa50200 */ lw $a1,0x200($sp)
/* f07da44: 46126002 */ mul.s $f0,$f12,$f18
/* f07da48: 27a60184 */ addiu $a2,$sp,0x184
/* f07da4c: 46041282 */ mul.s $f10,$f2,$f4
/* f07da50: 44073000 */ mfc1 $a3,$f6
/* f07da54: 46000200 */ add.s $f8,$f0,$f0
/* f07da58: e7aa0014 */ swc1 $f10,0x14($sp)
/* f07da5c: 0fc1b6c0 */ jal applyRotation
/* f07da60: e7a80010 */ swc1 $f8,0x10($sp)
/* f07da64: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07da68: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07da6c: 3c014170 */ lui $at,0x4170
/* f07da70: 44818000 */ mtc1 $at,$f16
/* f07da74: 46083032 */ c.eq.s $f6,$f8
/* f07da78: 3c017f1b */ lui $at,%hi(var7f1aa6cc)
/* f07da7c: c432a6cc */ lwc1 $f18,%lo(var7f1aa6cc)($at)
/* f07da80: 45020021 */ bc1fl .L0f07db08
/* f07da84: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07da88: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07da8c: 3c0140a0 */ lui $at,0x40a0
/* f07da90: 50400004 */ beqzl $v0,.L0f07daa4
/* f07da94: 44811000 */ mtc1 $at,$f2
/* f07da98: 10000003 */ b .L0f07daa8
/* f07da9c: 46008086 */ mov.s $f2,$f16
/* f07daa0: 44811000 */ mtc1 $at,$f2
.L0f07daa4:
/* f07daa4: 00000000 */ nop
.L0f07daa8:
/* f07daa8: 46121002 */ mul.s $f0,$f2,$f18
/* f07daac: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07dab0: 46000100 */ add.s $f4,$f0,$f0
/* f07dab4: 4604703e */ c.le.s $f14,$f4
/* f07dab8: 00000000 */ nop
/* f07dabc: 45020012 */ bc1fl .L0f07db08
/* f07dac0: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07dac4: 10400003 */ beqz $v0,.L0f07dad4
/* f07dac8: 3c0140a0 */ lui $at,0x40a0
/* f07dacc: 10000003 */ b .L0f07dadc
/* f07dad0: 46008306 */ mov.s $f12,$f16
.L0f07dad4:
/* f07dad4: 44816000 */ mtc1 $at,$f12
/* f07dad8: 00000000 */ nop
.L0f07dadc:
/* f07dadc: 46126002 */ mul.s $f0,$f12,$f18
/* f07dae0: 46000007 */ neg.s $f0,$f0
/* f07dae4: 46000280 */ add.s $f10,$f0,$f0
/* f07dae8: 460e503e */ c.le.s $f10,$f14
/* f07daec: 00000000 */ nop
/* f07daf0: 45020005 */ bc1fl .L0f07db08
/* f07daf4: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07daf8: 44807000 */ mtc1 $zero,$f14
/* f07dafc: 00000000 */ nop
/* f07db00: e7ae0184 */ swc1 $f14,0x184($sp)
/* f07db04: 8fa201f8 */ lw $v0,0x1f8($sp)
.L0f07db08:
/* f07db08: 50400004 */ beqzl $v0,.L0f07db1c
/* f07db0c: 3c0140a0 */ lui $at,0x40a0
/* f07db10: 10000004 */ b .L0f07db24
/* f07db14: 46008386 */ mov.s $f14,$f16
/* f07db18: 3c0140a0 */ lui $at,0x40a0
.L0f07db1c:
/* f07db1c: 44817000 */ mtc1 $at,$f14
/* f07db20: 00000000 */ nop
.L0f07db24:
/* f07db24: 46127182 */ mul.s $f6,$f14,$f18
/* f07db28: 50400004 */ beqzl $v0,.L0f07db3c
/* f07db2c: 3c0140a0 */ lui $at,0x40a0
/* f07db30: 10000004 */ b .L0f07db44
/* f07db34: 46008306 */ mov.s $f12,$f16
/* f07db38: 3c0140a0 */ lui $at,0x40a0
.L0f07db3c:
/* f07db3c: 44816000 */ mtc1 $at,$f12
/* f07db40: 00000000 */ nop
.L0f07db44:
/* f07db44: 46126002 */ mul.s $f0,$f12,$f18
/* f07db48: 50400004 */ beqzl $v0,.L0f07db5c
/* f07db4c: 3c0140a0 */ lui $at,0x40a0
/* f07db50: 10000004 */ b .L0f07db64
/* f07db54: 46008086 */ mov.s $f2,$f16
/* f07db58: 3c0140a0 */ lui $at,0x40a0
.L0f07db5c:
/* f07db5c: 44811000 */ mtc1 $at,$f2
/* f07db60: 00000000 */ nop
.L0f07db64:
/* f07db64: 3c017f1b */ lui $at,%hi(var7f1aa6d0)
/* f07db68: c424a6d0 */ lwc1 $f4,%lo(var7f1aa6d0)($at)
/* f07db6c: 46000200 */ add.s $f8,$f0,$f0
/* f07db70: 44073000 */ mfc1 $a3,$f6
/* f07db74: 46041282 */ mul.s $f10,$f2,$f4
/* f07db78: 27a4018c */ addiu $a0,$sp,0x18c
/* f07db7c: e7a80010 */ swc1 $f8,0x10($sp)
/* f07db80: 8fa501fc */ lw $a1,0x1fc($sp)
/* f07db84: 27a60180 */ addiu $a2,$sp,0x180
/* f07db88: 0fc1b6c0 */ jal applyRotation
/* f07db8c: e7aa0014 */ swc1 $f10,0x14($sp)
/* f07db90: c7a6018c */ lwc1 $f6,0x18c($sp)
/* f07db94: c7a801fc */ lwc1 $f8,0x1fc($sp)
/* f07db98: 3c014170 */ lui $at,0x4170
/* f07db9c: 44818000 */ mtc1 $at,$f16
/* f07dba0: 46083032 */ c.eq.s $f6,$f8
/* f07dba4: 3c017f1b */ lui $at,%hi(var7f1aa6d4)
/* f07dba8: c432a6d4 */ lwc1 $f18,%lo(var7f1aa6d4)($at)
/* f07dbac: 45020022 */ bc1fl .L0f07dc38
/* f07dbb0: 8e090008 */ lw $t1,0x8($s0)
/* f07dbb4: 8faa01f8 */ lw $t2,0x1f8($sp)
/* f07dbb8: 3c0140a0 */ lui $at,0x40a0
/* f07dbbc: 8fa801f8 */ lw $t0,0x1f8($sp)
/* f07dbc0: 51400004 */ beqzl $t2,.L0f07dbd4
/* f07dbc4: 44811000 */ mtc1 $at,$f2
/* f07dbc8: 10000003 */ b .L0f07dbd8
/* f07dbcc: 46008086 */ mov.s $f2,$f16
/* f07dbd0: 44811000 */ mtc1 $at,$f2
.L0f07dbd4:
/* f07dbd4: 00000000 */ nop
.L0f07dbd8:
/* f07dbd8: 46121002 */ mul.s $f0,$f2,$f18
/* f07dbdc: c7ae0180 */ lwc1 $f14,0x180($sp)
/* f07dbe0: 46000100 */ add.s $f4,$f0,$f0
/* f07dbe4: 4604703e */ c.le.s $f14,$f4
/* f07dbe8: 00000000 */ nop
/* f07dbec: 45020012 */ bc1fl .L0f07dc38
/* f07dbf0: 8e090008 */ lw $t1,0x8($s0)
/* f07dbf4: 11000003 */ beqz $t0,.L0f07dc04
/* f07dbf8: 3c0140a0 */ lui $at,0x40a0
/* f07dbfc: 10000003 */ b .L0f07dc0c
/* f07dc00: 46008306 */ mov.s $f12,$f16
.L0f07dc04:
/* f07dc04: 44816000 */ mtc1 $at,$f12
/* f07dc08: 00000000 */ nop
.L0f07dc0c:
/* f07dc0c: 46126002 */ mul.s $f0,$f12,$f18
/* f07dc10: 46000007 */ neg.s $f0,$f0
/* f07dc14: 46000280 */ add.s $f10,$f0,$f0
/* f07dc18: 460e503e */ c.le.s $f10,$f14
/* f07dc1c: 00000000 */ nop
/* f07dc20: 45020005 */ bc1fl .L0f07dc38
/* f07dc24: 8e090008 */ lw $t1,0x8($s0)
/* f07dc28: 44807000 */ mtc1 $zero,$f14
/* f07dc2c: 00000000 */ nop
/* f07dc30: e7ae0180 */ swc1 $f14,0x180($sp)
/* f07dc34: 8e090008 */ lw $t1,0x8($s0)
.L0f07dc38:
/* f07dc38: 44800000 */ mtc1 $zero,$f0
/* f07dc3c: 00095800 */ sll $t3,$t1,0x0
/* f07dc40: 05630004 */ bgezl $t3,.L0f07dc54
/* f07dc44: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07dc48: 1000000d */ b .L0f07dc80
/* f07dc4c: e7a00188 */ swc1 $f0,0x188($sp)
/* f07dc50: c7ae0184 */ lwc1 $f14,0x184($sp)
.L0f07dc54:
/* f07dc54: 3c0142f0 */ lui $at,0x42f0
/* f07dc58: 44814000 */ mtc1 $at,$f8
/* f07dc5c: 46007187 */ neg.s $f6,$f14
/* f07dc60: c7aa0188 */ lwc1 $f10,0x188($sp)
/* f07dc64: 46083102 */ mul.s $f4,$f6,$f8
/* f07dc68: 3c017f1b */ lui $at,%hi(var7f1aa6d8)
/* f07dc6c: c428a6d8 */ lwc1 $f8,%lo(var7f1aa6d8)($at)
/* f07dc70: 460a2181 */ sub.s $f6,$f4,$f10
/* f07dc74: 46083102 */ mul.s $f4,$f6,$f8
/* f07dc78: 46045180 */ add.s $f6,$f10,$f4
/* f07dc7c: e7a60188 */ swc1 $f6,0x188($sp)
.L0f07dc80:
/* f07dc80: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07dc84: 11800006 */ beqz $t4,.L0f07dca0
/* f07dc88: 3c017f1b */ lui $at,%hi(var7f1aa6dc)
/* f07dc8c: c428a6dc */ lwc1 $f8,%lo(var7f1aa6dc)($at)
/* f07dc90: c7aa018c */ lwc1 $f10,0x18c($sp)
/* f07dc94: 460a4101 */ sub.s $f4,$f8,$f10
/* f07dc98: 10000002 */ b .L0f07dca4
/* f07dc9c: e7a4012c */ swc1 $f4,0x12c($sp)
.L0f07dca0:
/* f07dca0: e7a0012c */ swc1 $f0,0x12c($sp)
.L0f07dca4:
/* f07dca4: c7a80188 */ lwc1 $f8,0x188($sp)
/* f07dca8: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07dcac: e7a00134 */ swc1 $f0,0x134($sp)
/* f07dcb0: 4608003e */ c.le.s $f0,$f8
/* f07dcb4: e7a60130 */ swc1 $f6,0x130($sp)
/* f07dcb8: 45000006 */ bc1f .L0f07dcd4
/* f07dcbc: 00000000 */ nop
/* f07dcc0: 46004306 */ mov.s $f12,$f8
/* f07dcc4: 0c005900 */ jal mtx4LoadZRotation
/* f07dcc8: 27a5006c */ addiu $a1,$sp,0x6c
/* f07dccc: 10000008 */ b .L0f07dcf0
/* f07dcd0: 27a4012c */ addiu $a0,$sp,0x12c
.L0f07dcd4:
/* f07dcd4: 3c017f1b */ lui $at,%hi(var7f1aa6e0)
/* f07dcd8: c424a6e0 */ lwc1 $f4,%lo(var7f1aa6e0)($at)
/* f07dcdc: c7aa0188 */ lwc1 $f10,0x188($sp)
/* f07dce0: 27a5006c */ addiu $a1,$sp,0x6c
/* f07dce4: 0c005900 */ jal mtx4LoadZRotation
/* f07dce8: 46045300 */ add.s $f12,$f10,$f4
/* f07dcec: 27a4012c */ addiu $a0,$sp,0x12c
.L0f07dcf0:
/* f07dcf0: 0c005923 */ jal mtx4LoadRotation
/* f07dcf4: 27a500ac */ addiu $a1,$sp,0xac
/* f07dcf8: 8e0d0018 */ lw $t5,0x18($s0)
/* f07dcfc: 27a500ac */ addiu $a1,$sp,0xac
/* f07dd00: 0c0057c1 */ jal mtx00015f04
/* f07dd04: c5ac0014 */ lwc1 $f12,0x14($t5)
/* f07dd08: 27a400ac */ addiu $a0,$sp,0xac
/* f07dd0c: 27a5006c */ addiu $a1,$sp,0x6c
/* f07dd10: 0c005680 */ jal mtx4MultMtx4
/* f07dd14: 27a600ec */ addiu $a2,$sp,0xec
/* f07dd18: 27a400ec */ addiu $a0,$sp,0xec
/* f07dd1c: 0c005768 */ jal mtx4ToMtx3
/* f07dd20: 27a5015c */ addiu $a1,$sp,0x15c
/* f07dd24: 27a4015c */ addiu $a0,$sp,0x15c
/* f07dd28: 0c005736 */ jal mtx3Copy
/* f07dd2c: 2605001c */ addiu $a1,$s0,0x1c
/* f07dd30: 0c0068f4 */ jal cosf
/* f07dd34: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07dd38: e7a00138 */ swc1 $f0,0x138($sp)
/* f07dd3c: 0c0068f7 */ jal sinf
/* f07dd40: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07dd44: c7a60138 */ lwc1 $f6,0x138($sp)
/* f07dd48: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07dd4c: 46060202 */ mul.s $f8,$f0,$f6
/* f07dd50: 11c00005 */ beqz $t6,.L0f07dd68
/* f07dd54: e7a80194 */ swc1 $f8,0x194($sp)
/* f07dd58: 0c0068f7 */ jal sinf
/* f07dd5c: c7ac01fc */ lwc1 $f12,0x1fc($sp)
/* f07dd60: 10000004 */ b .L0f07dd74
/* f07dd64: e7a00198 */ swc1 $f0,0x198($sp)
.L0f07dd68:
/* f07dd68: 0c0068f7 */ jal sinf
/* f07dd6c: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07dd70: e7a00198 */ swc1 $f0,0x198($sp)
.L0f07dd74:
/* f07dd74: 0c0068f4 */ jal cosf
/* f07dd78: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07dd7c: c7aa0138 */ lwc1 $f10,0x138($sp)
/* f07dd80: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07dd84: c422a00c */ lwc1 $f2,%lo(g_Vars+0x4c)($at)
/* f07dd88: 460a0102 */ mul.s $f4,$f0,$f10
/* f07dd8c: c7a60194 */ lwc1 $f6,0x194($sp)
/* f07dd90: 8faf0278 */ lw $t7,0x278($sp)
/* f07dd94: 8fa40058 */ lw $a0,0x58($sp)
/* f07dd98: 8fa50054 */ lw $a1,0x54($sp)
/* f07dd9c: 27a60150 */ addiu $a2,$sp,0x150
/* f07dda0: 27a70140 */ addiu $a3,$sp,0x140
/* f07dda4: e7a4019c */ swc1 $f4,0x19c($sp)
/* f07dda8: c6080064 */ lwc1 $f8,0x64($s0)
/* f07ddac: 46024282 */ mul.s $f10,$f8,$f2
/* f07ddb0: c5e80008 */ lwc1 $f8,0x8($t7)
/* f07ddb4: 460a3102 */ mul.s $f4,$f6,$f10
/* f07ddb8: c7aa0198 */ lwc1 $f10,0x198($sp)
/* f07ddbc: 46082180 */ add.s $f6,$f4,$f8
/* f07ddc0: e7a60150 */ swc1 $f6,0x150($sp)
/* f07ddc4: c6040064 */ lwc1 $f4,0x64($s0)
/* f07ddc8: 46022202 */ mul.s $f8,$f4,$f2
/* f07ddcc: c5e4000c */ lwc1 $f4,0xc($t7)
/* f07ddd0: 46085182 */ mul.s $f6,$f10,$f8
/* f07ddd4: c7a8019c */ lwc1 $f8,0x19c($sp)
/* f07ddd8: 46043280 */ add.s $f10,$f6,$f4
/* f07dddc: e7aa0154 */ swc1 $f10,0x154($sp)
/* f07dde0: c6060064 */ lwc1 $f6,0x64($s0)
/* f07dde4: 46023102 */ mul.s $f4,$f6,$f2
/* f07dde8: c5e60010 */ lwc1 $f6,0x10($t7)
/* f07ddec: 46044282 */ mul.s $f10,$f8,$f4
/* f07ddf0: 46065200 */ add.s $f8,$f10,$f6
/* f07ddf4: 0fc1979d */ jal func0f065e74
/* f07ddf8: e7a80158 */ swc1 $f8,0x158($sp)
/* f07ddfc: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07de00: 27a40150 */ addiu $a0,$sp,0x150
/* f07de04: 3c0540a0 */ lui $a1,0x40a0
/* f07de08: 13000017 */ beqz $t8,.L0f07de68
/* f07de0c: 27a60140 */ addiu $a2,$sp,0x140
/* f07de10: 00003825 */ or $a3,$zero,$zero
/* f07de14: 0c00a8cc */ jal cdFindGroundYSimple
/* f07de18: afa00010 */ sw $zero,0x10($sp)
/* f07de1c: 3c01420c */ lui $at,0x420c
/* f07de20: 44812000 */ mtc1 $at,$f4
/* f07de24: 3c017f1b */ lui $at,%hi(var7f1aa6e4)
/* f07de28: c42aa6e4 */ lwc1 $f10,%lo(var7f1aa6e4)($at)
/* f07de2c: 46040080 */ add.s $f2,$f0,$f4
/* f07de30: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f07de34: 460a103c */ c.lt.s $f2,$f10
/* f07de38: e7a20154 */ swc1 $f2,0x154($sp)
/* f07de3c: 4502000b */ bc1fl .L0f07de6c
/* f07de40: c7a40150 */ lwc1 $f4,0x150($sp)
/* f07de44: c6060064 */ lwc1 $f6,0x64($s0)
/* f07de48: c428a00c */ lwc1 $f8,%lo(g_Vars+0x4c)($at)
/* f07de4c: c7aa0198 */ lwc1 $f10,0x198($sp)
/* f07de50: 8fb90278 */ lw $t9,0x278($sp)
/* f07de54: 46083102 */ mul.s $f4,$f6,$f8
/* f07de58: c728000c */ lwc1 $f8,0xc($t9)
/* f07de5c: 46045182 */ mul.s $f6,$f10,$f4
/* f07de60: 46083280 */ add.s $f10,$f6,$f8
/* f07de64: e7aa0154 */ swc1 $f10,0x154($sp)
.L0f07de68:
/* f07de68: c7a40150 */ lwc1 $f4,0x150($sp)
.L0f07de6c:
/* f07de6c: 8fa40278 */ lw $a0,0x278($sp)
/* f07de70: e4840008 */ swc1 $f4,0x8($a0)
/* f07de74: c7a60154 */ lwc1 $f6,0x154($sp)
/* f07de78: e486000c */ swc1 $f6,0xc($a0)
/* f07de7c: c7a80158 */ lwc1 $f8,0x158($sp)
/* f07de80: 0fc19711 */ jal propDeregisterRooms
/* f07de84: e4880010 */ swc1 $f8,0x10($a0)
/* f07de88: 27a40140 */ addiu $a0,$sp,0x140
/* f07de8c: 0fc195e9 */ jal roomsCopy
/* f07de90: 8fa50054 */ lw $a1,0x54($sp)
/* f07de94: c7aa0190 */ lwc1 $f10,0x190($sp)
/* f07de98: 8e020088 */ lw $v0,0x88($s0)
/* f07de9c: e60a007c */ swc1 $f10,0x7c($s0)
/* f07dea0: c7a4018c */ lwc1 $f4,0x18c($sp)
/* f07dea4: e6040080 */ swc1 $f4,0x80($s0)
/* f07dea8: c7a60188 */ lwc1 $f6,0x188($sp)
/* f07deac: e6060084 */ swc1 $f6,0x84($s0)
/* f07deb0: c7a80184 */ lwc1 $f8,0x184($sp)
/* f07deb4: e6080070 */ swc1 $f8,0x70($s0)
/* f07deb8: c7aa0180 */ lwc1 $f10,0x180($sp)
/* f07debc: 10400024 */ beqz $v0,.L0f07df50
/* f07dec0: e60a0074 */ swc1 $f10,0x74($s0)
/* f07dec4: 8e09008c */ lw $t1,0x8c($s0)
/* f07dec8: 8c480000 */ lw $t0,0x0($v0)
/* f07decc: c7a601f4 */ lwc1 $f6,0x1f4($sp)
/* f07ded0: 00095880 */ sll $t3,$t1,0x2
/* f07ded4: 010b6021 */ addu $t4,$t0,$t3
/* f07ded8: 8d8d0004 */ lw $t5,0x4($t4)
/* f07dedc: c7a401f4 */ lwc1 $f4,0x1f4($sp)
/* f07dee0: 05a20010 */ bltzl $t5,.L0f07df24
/* f07dee4: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07dee8: c6040064 */ lwc1 $f4,0x64($s0)
/* f07deec: 8fa40058 */ lw $a0,0x58($sp)
/* f07def0: 27a50150 */ addiu $a1,$sp,0x150
/* f07def4: 46062202 */ mul.s $f8,$f4,$f6
/* f07def8: 27a60214 */ addiu $a2,$sp,0x214
/* f07defc: 44074000 */ mfc1 $a3,$f8
/* f07df00: 0fc111b8 */ jal posIsArrivingLaterallyAtPos
/* f07df04: 00000000 */ nop
/* f07df08: 50400012 */ beqzl $v0,.L0f07df54
/* f07df0c: 02002025 */ or $a0,$s0,$zero
/* f07df10: 0fc1c9dd */ jal hovercarIncrementStep
/* f07df14: 02002025 */ or $a0,$s0,$zero
/* f07df18: 1000000e */ b .L0f07df54
/* f07df1c: 02002025 */ or $a0,$s0,$zero
/* f07df20: c60a0064 */ lwc1 $f10,0x64($s0)
.L0f07df24:
/* f07df24: 8fa40058 */ lw $a0,0x58($sp)
/* f07df28: 27a50150 */ addiu $a1,$sp,0x150
/* f07df2c: 46045182 */ mul.s $f6,$f10,$f4
/* f07df30: 27a60214 */ addiu $a2,$sp,0x214
/* f07df34: 44073000 */ mfc1 $a3,$f6
/* f07df38: 0fc111b8 */ jal posIsArrivingLaterallyAtPos
/* f07df3c: 00000000 */ nop
/* f07df40: 50400004 */ beqzl $v0,.L0f07df54
/* f07df44: 02002025 */ or $a0,$s0,$zero
/* f07df48: 0fc1c9dd */ jal hovercarIncrementStep
/* f07df4c: 02002025 */ or $a0,$s0,$zero
.L0f07df50:
/* f07df50: 02002025 */ or $a0,$s0,$zero
.L0f07df54:
/* f07df54: 00002825 */ or $a1,$zero,$zero
/* f07df58: 0fc1a71c */ jal func0f069c70
/* f07df5c: 24060001 */ addiu $a2,$zero,0x1
.L0f07df60:
/* f07df60: 8fbf004c */ lw $ra,0x4c($sp)
.L0f07df64:
/* f07df64: 8fb00048 */ lw $s0,0x48($sp)
/* f07df68: 27bd0278 */ addiu $sp,$sp,0x278
/* f07df6c: 03e00008 */ jr $ra
/* f07df70: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel hovercarTick
.late_rodata
glabel var7f1aa6ac
.word 0x471c4000
glabel var7f1aa6b0
.word 0x47148900
glabel var7f1aa6b4
.word 0x3d2aaaab
glabel var7f1aa6b8
.word 0x3dcccccd
glabel var7f1aa6bc
.word 0x3d2aaaab
glabel var7f1aa6c0
.word 0x3e555555
glabel var7f1aa6c4
.word 0x3964ba35
glabel var7f1aa6c8
.word 0x3c566e92
glabel var7f1aa6cc
.word 0x3964ba35
glabel var7f1aa6d0
.word 0x3c566e92
glabel var7f1aa6d4
.word 0x3964ba35
glabel var7f1aa6d8
.word 0x3dcccccd
glabel var7f1aa6dc
.word 0x40c907a9
glabel var7f1aa6e0
.word 0x40c907a9
.text
/* f07bc90: 27bdfd88 */ addiu $sp,$sp,-632
/* f07bc94: afbf004c */ sw $ra,0x4c($sp)
/* f07bc98: afb00048 */ sw $s0,0x48($sp)
/* f07bc9c: afa40278 */ sw $a0,0x278($sp)
/* f07bca0: 8c900004 */ lw $s0,0x4($a0)
/* f07bca4: 3c018000 */ lui $at,0x8000
/* f07bca8: c604007c */ lwc1 $f4,0x7c($s0)
/* f07bcac: e7a40200 */ swc1 $f4,0x200($sp)
/* f07bcb0: c6060080 */ lwc1 $f6,0x80($s0)
/* f07bcb4: e7a601fc */ swc1 $f6,0x1fc($sp)
/* f07bcb8: 8e020008 */ lw $v0,0x8($s0)
/* f07bcbc: 00417824 */ and $t7,$v0,$at
/* f07bcc0: 11e00005 */ beqz $t7,.NB0f07bcd8
/* f07bcc4: 01e01025 */ or $v0,$t7,$zero
/* f07bcc8: 3c0140a0 */ lui $at,0x40a0
/* f07bccc: 44814000 */ mtc1 $at,$f8
/* f07bcd0: 10000005 */ beqz $zero,.NB0f07bce8
/* f07bcd4: e7a801f4 */ swc1 $f8,0x1f4($sp)
.NB0f07bcd8:
/* f07bcd8: 3c014120 */ lui $at,0x4120
/* f07bcdc: 44815000 */ mtc1 $at,$f10
/* f07bce0: 00000000 */ sll $zero,$zero,0x0
/* f07bce4: e7aa01f4 */ swc1 $f10,0x1f4($sp)
.NB0f07bce8:
/* f07bce8: 10400038 */ beqz $v0,.NB0f07bdcc
/* f07bcec: afa001f0 */ sw $zero,0x1f0($sp)
/* f07bcf0: 86180094 */ lh $t8,0x94($s0)
/* f07bcf4: 07030036 */ bgezl $t8,.NB0f07bdd0
/* f07bcf8: 860f0092 */ lh $t7,0x92($s0)
/* f07bcfc: 0fc19f4a */ jal modelFindBboxRodata
/* f07bd00: 8e040018 */ lw $a0,0x18($s0)
/* f07bd04: 0fc1968f */ jal objGetLocalYMin
/* f07bd08: 00402025 */ or $a0,$v0,$zero
/* f07bd0c: 8fa40278 */ lw $a0,0x278($sp)
/* f07bd10: 24050001 */ addiu $a1,$zero,0x1
/* f07bd14: 3406ffff */ dli $a2,0xffff
/* f07bd18: 84990028 */ lh $t9,0x28($a0)
/* f07bd1c: a7b901d6 */ sh $t9,0x1d6($sp)
/* f07bd20: c6040028 */ lwc1 $f4,0x28($s0)
/* f07bd24: e7a401d8 */ swc1 $f4,0x1d8($sp)
/* f07bd28: c606002c */ lwc1 $f6,0x2c($s0)
/* f07bd2c: e7a601dc */ swc1 $f6,0x1dc($sp)
/* f07bd30: c6080030 */ lwc1 $f8,0x30($s0)
/* f07bd34: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f07bd38: c60a0028 */ lwc1 $f10,0x28($s0)
/* f07bd3c: c4860008 */ lwc1 $f6,0x8($a0)
/* f07bd40: 46005102 */ mul.s $f4,$f10,$f0
/* f07bd44: 46062200 */ add.s $f8,$f4,$f6
/* f07bd48: e7a801e4 */ swc1 $f8,0x1e4($sp)
/* f07bd4c: c60a002c */ lwc1 $f10,0x2c($s0)
/* f07bd50: c486000c */ lwc1 $f6,0xc($a0)
/* f07bd54: 46005102 */ mul.s $f4,$f10,$f0
/* f07bd58: 46062200 */ add.s $f8,$f4,$f6
/* f07bd5c: e7a801e8 */ swc1 $f8,0x1e8($sp)
/* f07bd60: c60a0030 */ lwc1 $f10,0x30($s0)
/* f07bd64: c4860010 */ lwc1 $f6,0x10($a0)
/* f07bd68: 46005102 */ mul.s $f4,$f10,$f0
/* f07bd6c: 46062200 */ add.s $f8,$f4,$f6
/* f07bd70: 0fc2433d */ jal func0f0926bc
/* f07bd74: e7a801ec */ swc1 $f8,0x1ec($sp)
/* f07bd78: 8fa20278 */ lw $v0,0x278($sp)
/* f07bd7c: 3c08800a */ lui $t0,0x800a
/* f07bd80: 8d08e94c */ lw $t0,-0x16b4($t0)
/* f07bd84: 87ab01d6 */ lh $t3,0x1d6($sp)
/* f07bd88: 24090001 */ addiu $t1,$zero,0x1
/* f07bd8c: 27aa01e4 */ addiu $t2,$sp,0x1e4
/* f07bd90: 27ac01d8 */ addiu $t4,$sp,0x1d8
/* f07bd94: afac0020 */ sw $t4,0x20($sp)
/* f07bd98: afaa0018 */ sw $t2,0x18($sp)
/* f07bd9c: afa90014 */ sw $t1,0x14($sp)
/* f07bda0: 00002025 */ or $a0,$zero,$zero
/* f07bda4: 24070007 */ addiu $a3,$zero,0x7
/* f07bda8: 24450008 */ addiu $a1,$v0,0x8
/* f07bdac: 24460028 */ addiu $a2,$v0,0x28
/* f07bdb0: afa80010 */ sw $t0,0x10($sp)
/* f07bdb4: 0fc492bc */ jal explosionCreate
/* f07bdb8: afab001c */ sw $t3,0x1c($sp)
/* f07bdbc: 8e0d0040 */ lw $t5,0x40($s0)
/* f07bdc0: 35ae0004 */ ori $t6,$t5,0x4
/* f07bdc4: 10000304 */ beqz $zero,.NB0f07c9d8
/* f07bdc8: ae0e0040 */ sw $t6,0x40($s0)
.NB0f07bdcc:
/* f07bdcc: 860f0092 */ lh $t7,0x92($s0)
.NB0f07bdd0:
/* f07bdd0: 02002025 */ or $a0,$s0,$zero
/* f07bdd4: 24050001 */ addiu $a1,$zero,0x1
/* f07bdd8: 11e00063 */ beqz $t7,.NB0f07bf68
/* f07bddc: 00000000 */ sll $zero,$zero,0x0
/* f07bde0: 1040002c */ beqz $v0,.NB0f07be94
/* f07bde4: 3c02800a */ lui $v0,0x800a
/* f07bde8: 2442e6c0 */ addiu $v0,$v0,-6464
/* f07bdec: 8c590038 */ lw $t9,0x38($v0)
/* f07bdf0: 86180094 */ lh $t8,0x94($s0)
/* f07bdf4: 86090096 */ lh $t1,0x96($s0)
/* f07bdf8: 3c01bf80 */ lui $at,0xbf80
/* f07bdfc: 03194023 */ subu $t0,$t8,$t9
/* f07be00: a6080094 */ sh $t0,0x94($s0)
/* f07be04: 8c4a0038 */ lw $t2,0x38($v0)
/* f07be08: 240d0032 */ addiu $t5,$zero,0x32
/* f07be0c: 00002025 */ or $a0,$zero,$zero
/* f07be10: 012a5823 */ subu $t3,$t1,$t2
/* f07be14: a60b0096 */ sh $t3,0x96($s0)
/* f07be18: 860c0096 */ lh $t4,0x96($s0)
/* f07be1c: 24060064 */ addiu $a2,$zero,0x64
/* f07be20: 2407ffff */ addiu $a3,$zero,-1
/* f07be24: 058102ec */ bgez $t4,.NB0f07c9d8
/* f07be28: 240effff */ addiu $t6,$zero,-1
/* f07be2c: a60d0096 */ sh $t5,0x96($s0)
/* f07be30: 44810000 */ mtc1 $at,$f0
/* f07be34: 240f0400 */ addiu $t7,$zero,0x400
/* f07be38: 2418ffff */ addiu $t8,$zero,-1
/* f07be3c: afb8002c */ sw $t8,0x2c($sp)
/* f07be40: afaf0014 */ sw $t7,0x14($sp)
/* f07be44: afa00028 */ sw $zero,0x28($sp)
/* f07be48: afa00020 */ sw $zero,0x20($sp)
/* f07be4c: afa0001c */ sw $zero,0x1c($sp)
/* f07be50: afa00018 */ sw $zero,0x18($sp)
/* f07be54: afae0010 */ sw $t6,0x10($sp)
/* f07be58: 8fa50278 */ lw $a1,0x278($sp)
/* f07be5c: e7a00024 */ swc1 $f0,0x24($sp)
/* f07be60: e7a00030 */ swc1 $f0,0x30($sp)
/* f07be64: e7a00034 */ swc1 $f0,0x34($sp)
/* f07be68: 0fc24762 */ jal propsnd0f0939f8
/* f07be6c: e7a00038 */ swc1 $f0,0x38($sp)
/* f07be70: 8fa50278 */ lw $a1,0x278($sp)
/* f07be74: 00003825 */ or $a3,$zero,$zero
/* f07be78: 84a40028 */ lh $a0,0x28($a1)
/* f07be7c: afa00014 */ sw $zero,0x14($sp)
/* f07be80: afa00010 */ sw $zero,0x10($sp)
/* f07be84: 0fc4a960 */ jal sparksCreate
/* f07be88: 24a60008 */ addiu $a2,$a1,0x8
/* f07be8c: 100002d3 */ beqz $zero,.NB0f07c9dc
/* f07be90: 8fbf004c */ lw $ra,0x4c($sp)
.NB0f07be94:
/* f07be94: 44805000 */ mtc1 $zero,$f10
/* f07be98: c604006c */ lwc1 $f4,0x6c($s0)
/* f07be9c: 3c0140c0 */ lui $at,0x40c0
/* f07bea0: 46045032 */ c.eq.s $f10,$f4
/* f07bea4: 00000000 */ sll $zero,$zero,0x0
/* f07bea8: 450202cc */ bc1fl .NB0f07c9dc
/* f07beac: 8fbf004c */ lw $ra,0x4c($sp)
/* f07beb0: c6060064 */ lwc1 $f6,0x64($s0)
/* f07beb4: 44814000 */ mtc1 $at,$f8
/* f07beb8: 3c013f80 */ lui $at,0x3f80
/* f07bebc: 46083280 */ add.s $f10,$f6,$f8
/* f07bec0: e60a0064 */ swc1 $f10,0x64($s0)
/* f07bec4: 8fb90278 */ lw $t9,0x278($sp)
/* f07bec8: c7240008 */ lwc1 $f4,0x8($t9)
/* f07becc: e7a401c0 */ swc1 $f4,0x1c0($sp)
/* f07bed0: c6080064 */ lwc1 $f8,0x64($s0)
/* f07bed4: c726000c */ lwc1 $f6,0xc($t9)
/* f07bed8: 46083281 */ sub.s $f10,$f6,$f8
/* f07bedc: e7aa01c4 */ swc1 $f10,0x1c4($sp)
/* f07bee0: c7240010 */ lwc1 $f4,0x10($t9)
/* f07bee4: e7a401c8 */ swc1 $f4,0x1c8($sp)
/* f07bee8: c6020068 */ lwc1 $f2,0x68($s0)
/* f07beec: 4602503c */ c.lt.s $f10,$f2
/* f07bef0: 00000000 */ sll $zero,$zero,0x0
/* f07bef4: 45020005 */ bc1fl .NB0f07bf0c
/* f07bef8: 8fa80278 */ lw $t0,0x278($sp)
/* f07befc: 44813000 */ mtc1 $at,$f6
/* f07bf00: e7a201c4 */ swc1 $f2,0x1c4($sp)
/* f07bf04: e606006c */ swc1 $f6,0x6c($s0)
/* f07bf08: 8fa80278 */ lw $t0,0x278($sp)
.NB0f07bf0c:
/* f07bf0c: 27a601c0 */ addiu $a2,$sp,0x1c0
/* f07bf10: 27a701b0 */ addiu $a3,$sp,0x1b0
/* f07bf14: 25050028 */ addiu $a1,$t0,0x28
/* f07bf18: afa50054 */ sw $a1,0x54($sp)
/* f07bf1c: 0fc19437 */ jal func0f065e74
/* f07bf20: 25040008 */ addiu $a0,$t0,0x8
/* f07bf24: 8fa40278 */ lw $a0,0x278($sp)
/* f07bf28: c7a801c0 */ lwc1 $f8,0x1c0($sp)
/* f07bf2c: e4880008 */ swc1 $f8,0x8($a0)
/* f07bf30: c7a401c4 */ lwc1 $f4,0x1c4($sp)
/* f07bf34: e484000c */ swc1 $f4,0xc($a0)
/* f07bf38: c7aa01c8 */ lwc1 $f10,0x1c8($sp)
/* f07bf3c: 0fc193ab */ jal propDeregisterRooms
/* f07bf40: e48a0010 */ swc1 $f10,0x10($a0)
/* f07bf44: 27a401b0 */ addiu $a0,$sp,0x1b0
/* f07bf48: 0fc19283 */ jal roomsCopy
/* f07bf4c: 8fa50054 */ lw $a1,0x54($sp)
/* f07bf50: 02002025 */ or $a0,$s0,$zero
/* f07bf54: 00002825 */ or $a1,$zero,$zero
/* f07bf58: 0fc1a3b7 */ jal func0f069c70
/* f07bf5c: 24060001 */ addiu $a2,$zero,0x1
/* f07bf60: 1000029e */ beqz $zero,.NB0f07c9dc
/* f07bf64: 8fbf004c */ lw $ra,0x4c($sp)
.NB0f07bf68:
/* f07bf68: 0fc13321 */ jal chraiExecute
/* f07bf6c: afa201f8 */ sw $v0,0x1f8($sp)
/* f07bf70: afa00274 */ sw $zero,0x274($sp)
/* f07bf74: 8e020088 */ lw $v0,0x88($s0)
/* f07bf78: 24050042 */ addiu $a1,$zero,0x42
/* f07bf7c: 5040009f */ beqzl $v0,.NB0f07c1fc
/* f07bf80: 8e090008 */ lw $t1,0x8($s0)
/* f07bf84: 8e0a008c */ lw $t2,0x8c($s0)
/* f07bf88: 8c490000 */ lw $t1,0x0($v0)
/* f07bf8c: 27a60220 */ addiu $a2,$sp,0x220
/* f07bf90: 000a5880 */ sll $t3,$t2,0x2
/* f07bf94: 012b1821 */ addu $v1,$t1,$t3
/* f07bf98: 0fc43fc4 */ jal padUnpack
/* f07bf9c: 8c640000 */ lw $a0,0x0($v1)
/* f07bfa0: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07bfa4: c7a60220 */ lwc1 $f6,0x220($sp)
/* f07bfa8: c7aa0224 */ lwc1 $f10,0x224($sp)
/* f07bfac: 11800011 */ beqz $t4,.NB0f07bff4
/* f07bfb0: e7a60214 */ swc1 $f6,0x214($sp)
/* f07bfb4: 8fad0268 */ lw $t5,0x268($sp)
/* f07bfb8: 240effff */ addiu $t6,$zero,-1
/* f07bfbc: a7ae0212 */ sh $t6,0x212($sp)
/* f07bfc0: 27a40220 */ addiu $a0,$sp,0x220
/* f07bfc4: 3c0540a0 */ lui $a1,0x40a0
/* f07bfc8: 27a60210 */ addiu $a2,$sp,0x210
/* f07bfcc: 00003825 */ or $a3,$zero,$zero
/* f07bfd0: afa00010 */ sw $zero,0x10($sp)
/* f07bfd4: 0c00adde */ jal cdFindGroundYSimple
/* f07bfd8: a7ad0210 */ sh $t5,0x210($sp)
/* f07bfdc: 3c01420c */ lui $at,0x420c
/* f07bfe0: 44814000 */ mtc1 $at,$f8
/* f07bfe4: 00000000 */ sll $zero,$zero,0x0
/* f07bfe8: 46080100 */ add.s $f4,$f0,$f8
/* f07bfec: 10000002 */ beqz $zero,.NB0f07bff8
/* f07bff0: e7a40218 */ swc1 $f4,0x218($sp)
.NB0f07bff4:
/* f07bff4: e7aa0218 */ swc1 $f10,0x218($sp)
.NB0f07bff8:
/* f07bff8: c7a60228 */ lwc1 $f6,0x228($sp)
/* f07bffc: 8fa40278 */ lw $a0,0x278($sp)
/* f07c000: 27a60214 */ addiu $a2,$sp,0x214
/* f07c004: e7a6021c */ swc1 $f6,0x21c($sp)
/* f07c008: 8e0f0008 */ lw $t7,0x8($s0)
/* f07c00c: 24840008 */ addiu $a0,$a0,0x8
/* f07c010: 00802825 */ or $a1,$a0,$zero
/* f07c014: 000fc080 */ sll $t8,$t7,0x2
/* f07c018: 07030011 */ bgezl $t8,.NB0f07c060
/* f07c01c: 8fa20278 */ lw $v0,0x278($sp)
/* f07c020: 0fc10fab */ jal posIsArrivingLaterallyAtPos
/* f07c024: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07c028: 5040000d */ beqzl $v0,.NB0f07c060
/* f07c02c: 8fa20278 */ lw $v0,0x278($sp)
/* f07c030: 0fc1c542 */ jal hovercarIncrementStep
/* f07c034: 02002025 */ or $a0,$s0,$zero
/* f07c038: 8e190088 */ lw $t9,0x88($s0)
/* f07c03c: 8e0a008c */ lw $t2,0x8c($s0)
/* f07c040: 24050002 */ addiu $a1,$zero,0x2
/* f07c044: 8f280000 */ lw $t0,0x0($t9)
/* f07c048: 000a4880 */ sll $t1,$t2,0x2
/* f07c04c: 27a60220 */ addiu $a2,$sp,0x220
/* f07c050: 01091821 */ addu $v1,$t0,$t1
/* f07c054: 0fc43fc4 */ jal padUnpack
/* f07c058: 8c640000 */ lw $a0,0x0($v1)
/* f07c05c: 8fa20278 */ lw $v0,0x278($sp)
.NB0f07c060:
/* f07c060: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07c064: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07c068: c4440008 */ lwc1 $f4,0x8($v0)
/* f07c06c: c4460010 */ lwc1 $f6,0x10($v0)
/* f07c070: 46044301 */ sub.s $f12,$f8,$f4
/* f07c074: 0fc251b8 */ jal atan2f
/* f07c078: 46065381 */ sub.s $f14,$f10,$f6
/* f07c07c: 8fa20278 */ lw $v0,0x278($sp)
/* f07c080: e7a00200 */ swc1 $f0,0x200($sp)
/* f07c084: c7a80214 */ lwc1 $f8,0x214($sp)
/* f07c088: c4440008 */ lwc1 $f4,0x8($v0)
/* f07c08c: c7aa021c */ lwc1 $f10,0x21c($sp)
/* f07c090: c4460010 */ lwc1 $f6,0x10($v0)
/* f07c094: 46044081 */ sub.s $f2,$f8,$f4
/* f07c098: 46065381 */ sub.s $f14,$f10,$f6
/* f07c09c: 46021202 */ mul.s $f8,$f2,$f2
/* f07c0a0: 00000000 */ sll $zero,$zero,0x0
/* f07c0a4: 460e7102 */ mul.s $f4,$f14,$f14
/* f07c0a8: 0c012e84 */ jal sqrtf
/* f07c0ac: 46044300 */ add.s $f12,$f8,$f4
/* f07c0b0: 8fab0278 */ lw $t3,0x278($sp)
/* f07c0b4: c7aa0218 */ lwc1 $f10,0x218($sp)
/* f07c0b8: 46000386 */ mov.s $f14,$f0
/* f07c0bc: c566000c */ lwc1 $f6,0xc($t3)
/* f07c0c0: 0fc251b8 */ jal atan2f
/* f07c0c4: 46065301 */ sub.s $f12,$f10,$f6
/* f07c0c8: e7a001fc */ swc1 $f0,0x1fc($sp)
/* f07c0cc: 8e0c0008 */ lw $t4,0x8($s0)
/* f07c0d0: 3c01dfff */ lui $at,0xdfff
/* f07c0d4: c7a80200 */ lwc1 $f8,0x200($sp)
/* f07c0d8: 000c6880 */ sll $t5,$t4,0x2
/* f07c0dc: 05a1000c */ bgez $t5,.NB0f07c110
/* f07c0e0: 3421ffff */ ori $at,$at,0xffff
/* f07c0e4: 8e0e0008 */ lw $t6,0x8($s0)
/* f07c0e8: e608007c */ swc1 $f8,0x7c($s0)
/* f07c0ec: e6000080 */ swc1 $f0,0x80($s0)
/* f07c0f0: 01c17824 */ and $t7,$t6,$at
/* f07c0f4: ae0f0008 */ sw $t7,0x8($s0)
/* f07c0f8: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07c0fc: 8fa30278 */ lw $v1,0x278($sp)
/* f07c100: c7a40218 */ lwc1 $f4,0x218($sp)
/* f07c104: 53000003 */ beqzl $t8,.NB0f07c114
/* f07c108: 8fb901f8 */ lw $t9,0x1f8($sp)
/* f07c10c: e464000c */ swc1 $f4,0xc($v1)
.NB0f07c110:
/* f07c110: 8fb901f8 */ lw $t9,0x1f8($sp)
.NB0f07c114:
/* f07c114: 8fa30278 */ lw $v1,0x278($sp)
/* f07c118: 27a60214 */ addiu $a2,$sp,0x214
/* f07c11c: 13200034 */ beqz $t9,.NB0f07c1f0
/* f07c120: 24640008 */ addiu $a0,$v1,0x8
/* f07c124: 44800000 */ mtc1 $zero,$f0
/* f07c128: 24650028 */ addiu $a1,$v1,0x28
/* f07c12c: 24075000 */ addiu $a3,$zero,0x5000
/* f07c130: afa00010 */ sw $zero,0x10($sp)
/* f07c134: e7a00014 */ swc1 $f0,0x14($sp)
/* f07c138: 0c00baf2 */ jal cd0002d7c0
/* f07c13c: e7a00018 */ swc1 $f0,0x18($sp)
/* f07c140: 54400005 */ bnezl $v0,.NB0f07c158
/* f07c144: 8fa301f0 */ lw $v1,0x1f0($sp)
/* f07c148: 0c0098a4 */ jal cdGetObstacle
/* f07c14c: 00000000 */ sll $zero,$zero,0x0
/* f07c150: afa201f0 */ sw $v0,0x1f0($sp)
/* f07c154: 8fa301f0 */ lw $v1,0x1f0($sp)
.NB0f07c158:
/* f07c158: 10600025 */ beqz $v1,.NB0f07c1f0
/* f07c15c: 00000000 */ sll $zero,$zero,0x0
/* f07c160: 8c6a0004 */ lw $t2,0x4($v1)
/* f07c164: 8fa60278 */ lw $a2,0x278($sp)
/* f07c168: 3c017f1a */ lui $at,0x7f1a
/* f07c16c: afaa01a0 */ sw $t2,0x1a0($sp)
/* f07c170: c46a0008 */ lwc1 $f10,0x8($v1)
/* f07c174: c4c60008 */ lwc1 $f6,0x8($a2)
/* f07c178: c4680010 */ lwc1 $f8,0x10($v1)
/* f07c17c: c4c40010 */ lwc1 $f4,0x10($a2)
/* f07c180: 46065001 */ sub.s $f0,$f10,$f6
/* f07c184: 01402825 */ or $a1,$t2,$zero
/* f07c188: 00c02025 */ or $a0,$a2,$zero
/* f07c18c: 46044081 */ sub.s $f2,$f8,$f4
/* f07c190: 46000282 */ mul.s $f10,$f0,$f0
/* f07c194: c42849cc */ lwc1 $f8,0x49cc($at)
/* f07c198: 46021182 */ mul.s $f6,$f2,$f2
/* f07c19c: 46065300 */ add.s $f12,$f10,$f6
/* f07c1a0: 4608603c */ c.lt.s $f12,$f8
/* f07c1a4: 00000000 */ sll $zero,$zero,0x0
/* f07c1a8: 45000007 */ bc1f .NB0f07c1c8
/* f07c1ac: 00000000 */ sll $zero,$zero,0x0
/* f07c1b0: 0fc239d6 */ jal doorsChooseSwingDirection
/* f07c1b4: e7ac0058 */ swc1 $f12,0x58($sp)
/* f07c1b8: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07c1bc: 0fc23312 */ jal doorsRequestMode
/* f07c1c0: 24050001 */ addiu $a1,$zero,0x1
/* f07c1c4: c7ac0058 */ lwc1 $f12,0x58($sp)
.NB0f07c1c8:
/* f07c1c8: 3c017f1a */ lui $at,0x7f1a
/* f07c1cc: c42449d0 */ lwc1 $f4,0x49d0($at)
/* f07c1d0: 4604603c */ c.lt.s $f12,$f4
/* f07c1d4: 00000000 */ sll $zero,$zero,0x0
/* f07c1d8: 45000005 */ bc1f .NB0f07c1f0
/* f07c1dc: 00000000 */ sll $zero,$zero,0x0
/* f07c1e0: 0fc23349 */ jal doorIsOpen
/* f07c1e4: 8fa401a0 */ lw $a0,0x1a0($sp)
/* f07c1e8: 2c480001 */ sltiu $t0,$v0,0x1
/* f07c1ec: afa80274 */ sw $t0,0x274($sp)
.NB0f07c1f0:
/* f07c1f0: 1000001a */ beqz $zero,.NB0f07c25c
/* f07c1f4: 44807000 */ mtc1 $zero,$f14
/* f07c1f8: 8e090008 */ lw $t1,0x8($s0)
.NB0f07c1fc:
/* f07c1fc: 00095880 */ sll $t3,$t1,0x2
/* f07c200: 05630016 */ bgezl $t3,.NB0f07c25c
/* f07c204: 44807000 */ mtc1 $zero,$f14
/* f07c208: c60c0034 */ lwc1 $f12,0x34($s0)
/* f07c20c: 0fc251b8 */ jal atan2f
/* f07c210: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07c214: c6020034 */ lwc1 $f2,0x34($s0)
/* f07c218: c60e003c */ lwc1 $f14,0x3c($s0)
/* f07c21c: e600007c */ swc1 $f0,0x7c($s0)
/* f07c220: 46021282 */ mul.s $f10,$f2,$f2
/* f07c224: 00000000 */ sll $zero,$zero,0x0
/* f07c228: 460e7182 */ mul.s $f6,$f14,$f14
/* f07c22c: 0c012e84 */ jal sqrtf
/* f07c230: 46065300 */ add.s $f12,$f10,$f6
/* f07c234: c60c0038 */ lwc1 $f12,0x38($s0)
/* f07c238: 0fc251b8 */ jal atan2f
/* f07c23c: 46000386 */ mov.s $f14,$f0
/* f07c240: 8e0c0008 */ lw $t4,0x8($s0)
/* f07c244: 3c01dfff */ lui $at,0xdfff
/* f07c248: 3421ffff */ ori $at,$at,0xffff
/* f07c24c: 01816824 */ and $t5,$t4,$at
/* f07c250: e6000080 */ swc1 $f0,0x80($s0)
/* f07c254: ae0d0008 */ sw $t5,0x8($s0)
/* f07c258: 44807000 */ mtc1 $zero,$f14
.NB0f07c25c:
/* f07c25c: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07c260: 3c02800a */ lui $v0,0x800a
/* f07c264: 8fa30278 */ lw $v1,0x278($sp)
/* f07c268: 460c703e */ c.le.s $f14,$f12
/* f07c26c: 2442e6c0 */ addiu $v0,$v0,-6464
/* f07c270: 45020015 */ bc1fl .NB0f07c2c8
/* f07c274: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07c278: c442004c */ lwc1 $f2,0x4c($v0)
/* f07c27c: 4602603e */ c.le.s $f12,$f2
/* f07c280: 00000000 */ sll $zero,$zero,0x0
/* f07c284: 45020006 */ bc1fl .NB0f07c2a0
/* f07c288: c6000064 */ lwc1 $f0,0x64($s0)
/* f07c28c: c6080068 */ lwc1 $f8,0x68($s0)
/* f07c290: c60c006c */ lwc1 $f12,0x6c($s0)
/* f07c294: 10000008 */ beqz $zero,.NB0f07c2b8
/* f07c298: e6080064 */ swc1 $f8,0x64($s0)
/* f07c29c: c6000064 */ lwc1 $f0,0x64($s0)
.NB0f07c2a0:
/* f07c2a0: c6040068 */ lwc1 $f4,0x68($s0)
/* f07c2a4: 46002281 */ sub.s $f10,$f4,$f0
/* f07c2a8: 46025182 */ mul.s $f6,$f10,$f2
/* f07c2ac: 460c3203 */ div.s $f8,$f6,$f12
/* f07c2b0: 46080100 */ add.s $f4,$f0,$f8
/* f07c2b4: e6040064 */ swc1 $f4,0x64($s0)
.NB0f07c2b8:
/* f07c2b8: c44a004c */ lwc1 $f10,0x4c($v0)
/* f07c2bc: 460a6181 */ sub.s $f6,$f12,$f10
/* f07c2c0: e606006c */ swc1 $f6,0x6c($s0)
/* f07c2c4: 8fae01f8 */ lw $t6,0x1f8($sp)
.NB0f07c2c8:
/* f07c2c8: 3c02800a */ lui $v0,0x800a
/* f07c2cc: 2442e6c0 */ addiu $v0,$v0,-6464
/* f07c2d0: 51c00037 */ beqzl $t6,.NB0f07c3b0
/* f07c2d4: 44802000 */ mtc1 $zero,$f4
/* f07c2d8: c6080070 */ lwc1 $f8,0x70($s0)
/* f07c2dc: 3c017f1a */ lui $at,0x7f1a
/* f07c2e0: 4608703c */ c.lt.s $f14,$f8
/* f07c2e4: 00000000 */ sll $zero,$zero,0x0
/* f07c2e8: 45020013 */ bc1fl .NB0f07c338
/* f07c2ec: c6000064 */ lwc1 $f0,0x64($s0)
/* f07c2f0: c6040068 */ lwc1 $f4,0x68($s0)
/* f07c2f4: c42a49d4 */ lwc1 $f10,0x49d4($at)
/* f07c2f8: c4480044 */ lwc1 $f8,0x44($v0)
/* f07c2fc: 3c017f1a */ lui $at,0x7f1a
/* f07c300: 460a2182 */ mul.s $f6,$f4,$f10
/* f07c304: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07c308: 46083102 */ mul.s $f4,$f6,$f8
/* f07c30c: 46045181 */ sub.s $f6,$f10,$f4
/* f07c310: e6060064 */ swc1 $f6,0x64($s0)
/* f07c314: c6080064 */ lwc1 $f8,0x64($s0)
/* f07c318: 460e403c */ c.lt.s $f8,$f14
/* f07c31c: 00000000 */ sll $zero,$zero,0x0
/* f07c320: 45020013 */ bc1fl .NB0f07c370
/* f07c324: 8faf0274 */ lw $t7,0x274($sp)
/* f07c328: c42a49d8 */ lwc1 $f10,0x49d8($at)
/* f07c32c: 1000000f */ beqz $zero,.NB0f07c36c
/* f07c330: e60a0064 */ swc1 $f10,0x64($s0)
/* f07c334: c6000064 */ lwc1 $f0,0x64($s0)
.NB0f07c338:
/* f07c338: c6020068 */ lwc1 $f2,0x68($s0)
/* f07c33c: 3c017f1a */ lui $at,0x7f1a
/* f07c340: 4602003c */ c.lt.s $f0,$f2
/* f07c344: 00000000 */ sll $zero,$zero,0x0
/* f07c348: 45020009 */ bc1fl .NB0f07c370
/* f07c34c: 8faf0274 */ lw $t7,0x274($sp)
/* f07c350: c42449dc */ lwc1 $f4,0x49dc($at)
/* f07c354: c4480044 */ lwc1 $f8,0x44($v0)
/* f07c358: 46041182 */ mul.s $f6,$f2,$f4
/* f07c35c: 00000000 */ sll $zero,$zero,0x0
/* f07c360: 46083282 */ mul.s $f10,$f6,$f8
/* f07c364: 460a0100 */ add.s $f4,$f0,$f10
/* f07c368: e6040064 */ swc1 $f4,0x64($s0)
.NB0f07c36c:
/* f07c36c: 8faf0274 */ lw $t7,0x274($sp)
.NB0f07c370:
/* f07c370: 3c017f1a */ lui $at,0x7f1a
/* f07c374: 51e0000e */ beqzl $t7,.NB0f07c3b0
/* f07c378: 44802000 */ mtc1 $zero,$f4
/* f07c37c: c42649e0 */ lwc1 $f6,0x49e0($at)
/* f07c380: c4480044 */ lwc1 $f8,0x44($v0)
/* f07c384: c6040064 */ lwc1 $f4,0x64($s0)
/* f07c388: 46083282 */ mul.s $f10,$f6,$f8
/* f07c38c: 460a2181 */ sub.s $f6,$f4,$f10
/* f07c390: e6060064 */ swc1 $f6,0x64($s0)
/* f07c394: c6080064 */ lwc1 $f8,0x64($s0)
/* f07c398: 460e403c */ c.lt.s $f8,$f14
/* f07c39c: 00000000 */ sll $zero,$zero,0x0
/* f07c3a0: 45020003 */ bc1fl .NB0f07c3b0
/* f07c3a4: 44802000 */ mtc1 $zero,$f4
/* f07c3a8: e60e0064 */ swc1 $f14,0x64($s0)
/* f07c3ac: 44802000 */ mtc1 $zero,$f4
.NB0f07c3b0:
/* f07c3b0: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07c3b4: 460a2032 */ c.eq.s $f4,$f10
/* f07c3b8: 00000000 */ sll $zero,$zero,0x0
/* f07c3bc: 45030187 */ bc1tl .NB0f07c9dc
/* f07c3c0: 8fbf004c */ lw $ra,0x4c($sp)
/* f07c3c4: c606007c */ lwc1 $f6,0x7c($s0)
/* f07c3c8: 24780008 */ addiu $t8,$v1,0x8
/* f07c3cc: 24790028 */ addiu $t9,$v1,0x28
/* f07c3d0: e7a60190 */ swc1 $f6,0x190($sp)
/* f07c3d4: c6080080 */ lwc1 $f8,0x80($s0)
/* f07c3d8: e7a8018c */ swc1 $f8,0x18c($sp)
/* f07c3dc: c6040084 */ lwc1 $f4,0x84($s0)
/* f07c3e0: e7a40188 */ swc1 $f4,0x188($sp)
/* f07c3e4: c60a0070 */ lwc1 $f10,0x70($s0)
/* f07c3e8: e7aa0184 */ swc1 $f10,0x184($sp)
/* f07c3ec: c6060074 */ lwc1 $f6,0x74($s0)
/* f07c3f0: e7a60180 */ swc1 $f6,0x180($sp)
/* f07c3f4: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07c3f8: afb90054 */ sw $t9,0x54($sp)
/* f07c3fc: 0c006d55 */ jal sinf
/* f07c400: afb80058 */ sw $t8,0x58($sp)
/* f07c404: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07c408: 0c006d52 */ jal cosf
/* f07c40c: e7a00068 */ swc1 $f0,0x68($sp)
/* f07c410: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07c414: 46020202 */ mul.s $f8,$f0,$f2
/* f07c418: e7a80194 */ swc1 $f8,0x194($sp)
/* f07c41c: 0c006d55 */ jal sinf
/* f07c420: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07c424: e7a00198 */ swc1 $f0,0x198($sp)
/* f07c428: 0c006d52 */ jal cosf
/* f07c42c: c60c007c */ lwc1 $f12,0x7c($s0)
/* f07c430: c60c0080 */ lwc1 $f12,0x80($s0)
/* f07c434: 0c006d52 */ jal cosf
/* f07c438: e7a00068 */ swc1 $f0,0x68($sp)
/* f07c43c: c7a20068 */ lwc1 $f2,0x68($sp)
/* f07c440: 8fa40058 */ lw $a0,0x58($sp)
/* f07c444: 27a50194 */ addiu $a1,$sp,0x194
/* f07c448: 46020102 */ mul.s $f4,$f0,$f2
/* f07c44c: 27a60214 */ addiu $a2,$sp,0x214
/* f07c450: 8fa701f4 */ lw $a3,0x1f4($sp)
/* f07c454: 0fc10f64 */ jal posIsMovingTowardsPosOrStoppedInRange
/* f07c458: e7a4019c */ swc1 $f4,0x19c($sp)
/* f07c45c: 50400006 */ beqzl $v0,.NB0f07c478
/* f07c460: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07c464: c60a007c */ lwc1 $f10,0x7c($s0)
/* f07c468: e7aa0200 */ swc1 $f10,0x200($sp)
/* f07c46c: c6060080 */ lwc1 $f6,0x80($s0)
/* f07c470: e7a601fc */ swc1 $f6,0x1fc($sp)
/* f07c474: 8fa201f8 */ lw $v0,0x1f8($sp)
.NB0f07c478:
/* f07c478: 10400004 */ beqz $v0,.NB0f07c48c
/* f07c47c: 3c014170 */ lui $at,0x4170
/* f07c480: 44818000 */ mtc1 $at,$f16
/* f07c484: 10000006 */ beqz $zero,.NB0f07c4a0
/* f07c488: 46008386 */ mov.s $f14,$f16
.NB0f07c48c:
/* f07c48c: 3c0140a0 */ lui $at,0x40a0
/* f07c490: 44817000 */ mtc1 $at,$f14
/* f07c494: 3c014170 */ lui $at,0x4170
/* f07c498: 44818000 */ mtc1 $at,$f16
/* f07c49c: 00000000 */ sll $zero,$zero,0x0
.NB0f07c4a0:
/* f07c4a0: 50400004 */ beqzl $v0,.NB0f07c4b4
/* f07c4a4: 3c0140a0 */ lui $at,0x40a0
/* f07c4a8: 10000004 */ beqz $zero,.NB0f07c4bc
/* f07c4ac: 46008306 */ mov.s $f12,$f16
/* f07c4b0: 3c0140a0 */ lui $at,0x40a0
.NB0f07c4b4:
/* f07c4b4: 44816000 */ mtc1 $at,$f12
/* f07c4b8: 00000000 */ sll $zero,$zero,0x0
.NB0f07c4bc:
/* f07c4bc: 50400004 */ beqzl $v0,.NB0f07c4d0
/* f07c4c0: 3c0140a0 */ lui $at,0x40a0
/* f07c4c4: 10000004 */ beqz $zero,.NB0f07c4d8
/* f07c4c8: 46008086 */ mov.s $f2,$f16
/* f07c4cc: 3c0140a0 */ lui $at,0x40a0
.NB0f07c4d0:
/* f07c4d0: 44811000 */ mtc1 $at,$f2
/* f07c4d4: 00000000 */ sll $zero,$zero,0x0
.NB0f07c4d8:
/* f07c4d8: 3c017f1a */ lui $at,0x7f1a
/* f07c4dc: c43249e4 */ lwc1 $f18,0x49e4($at)
/* f07c4e0: 3c017f1a */ lui $at,0x7f1a
/* f07c4e4: c42a49e8 */ lwc1 $f10,0x49e8($at)
/* f07c4e8: 46127202 */ mul.s $f8,$f14,$f18
/* f07c4ec: 27a40190 */ addiu $a0,$sp,0x190
/* f07c4f0: 8fa50200 */ lw $a1,0x200($sp)
/* f07c4f4: 46126002 */ mul.s $f0,$f12,$f18
/* f07c4f8: 27a60184 */ addiu $a2,$sp,0x184
/* f07c4fc: 460a1182 */ mul.s $f6,$f2,$f10
/* f07c500: 44074000 */ mfc1 $a3,$f8
/* f07c504: 46000100 */ add.s $f4,$f0,$f0
/* f07c508: e7a60014 */ swc1 $f6,0x14($sp)
/* f07c50c: 0fc1b359 */ jal applyRotation
/* f07c510: e7a40010 */ swc1 $f4,0x10($sp)
/* f07c514: c7a80190 */ lwc1 $f8,0x190($sp)
/* f07c518: c7a40200 */ lwc1 $f4,0x200($sp)
/* f07c51c: 3c014170 */ lui $at,0x4170
/* f07c520: 44818000 */ mtc1 $at,$f16
/* f07c524: 46044032 */ c.eq.s $f8,$f4
/* f07c528: 3c017f1a */ lui $at,0x7f1a
/* f07c52c: c43249ec */ lwc1 $f18,0x49ec($at)
/* f07c530: 45020021 */ bc1fl .NB0f07c5b8
/* f07c534: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07c538: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07c53c: 3c0140a0 */ lui $at,0x40a0
/* f07c540: 50400004 */ beqzl $v0,.NB0f07c554
/* f07c544: 44811000 */ mtc1 $at,$f2
/* f07c548: 10000003 */ beqz $zero,.NB0f07c558
/* f07c54c: 46008086 */ mov.s $f2,$f16
/* f07c550: 44811000 */ mtc1 $at,$f2
.NB0f07c554:
/* f07c554: 00000000 */ sll $zero,$zero,0x0
.NB0f07c558:
/* f07c558: 46121002 */ mul.s $f0,$f2,$f18
/* f07c55c: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07c560: 46000280 */ add.s $f10,$f0,$f0
/* f07c564: 460a703e */ c.le.s $f14,$f10
/* f07c568: 00000000 */ sll $zero,$zero,0x0
/* f07c56c: 45020012 */ bc1fl .NB0f07c5b8
/* f07c570: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07c574: 10400003 */ beqz $v0,.NB0f07c584
/* f07c578: 3c0140a0 */ lui $at,0x40a0
/* f07c57c: 10000003 */ beqz $zero,.NB0f07c58c
/* f07c580: 46008306 */ mov.s $f12,$f16
.NB0f07c584:
/* f07c584: 44816000 */ mtc1 $at,$f12
/* f07c588: 00000000 */ sll $zero,$zero,0x0
.NB0f07c58c:
/* f07c58c: 46126002 */ mul.s $f0,$f12,$f18
/* f07c590: 46000007 */ neg.s $f0,$f0
/* f07c594: 46000180 */ add.s $f6,$f0,$f0
/* f07c598: 460e303e */ c.le.s $f6,$f14
/* f07c59c: 00000000 */ sll $zero,$zero,0x0
/* f07c5a0: 45020005 */ bc1fl .NB0f07c5b8
/* f07c5a4: 8fa201f8 */ lw $v0,0x1f8($sp)
/* f07c5a8: 44807000 */ mtc1 $zero,$f14
/* f07c5ac: 00000000 */ sll $zero,$zero,0x0
/* f07c5b0: e7ae0184 */ swc1 $f14,0x184($sp)
/* f07c5b4: 8fa201f8 */ lw $v0,0x1f8($sp)
.NB0f07c5b8:
/* f07c5b8: 50400004 */ beqzl $v0,.NB0f07c5cc
/* f07c5bc: 3c0140a0 */ lui $at,0x40a0
/* f07c5c0: 10000004 */ beqz $zero,.NB0f07c5d4
/* f07c5c4: 46008386 */ mov.s $f14,$f16
/* f07c5c8: 3c0140a0 */ lui $at,0x40a0
.NB0f07c5cc:
/* f07c5cc: 44817000 */ mtc1 $at,$f14
/* f07c5d0: 00000000 */ sll $zero,$zero,0x0
.NB0f07c5d4:
/* f07c5d4: 46127202 */ mul.s $f8,$f14,$f18
/* f07c5d8: 50400004 */ beqzl $v0,.NB0f07c5ec
/* f07c5dc: 3c0140a0 */ lui $at,0x40a0
/* f07c5e0: 10000004 */ beqz $zero,.NB0f07c5f4
/* f07c5e4: 46008306 */ mov.s $f12,$f16
/* f07c5e8: 3c0140a0 */ lui $at,0x40a0
.NB0f07c5ec:
/* f07c5ec: 44816000 */ mtc1 $at,$f12
/* f07c5f0: 00000000 */ sll $zero,$zero,0x0
.NB0f07c5f4:
/* f07c5f4: 46126002 */ mul.s $f0,$f12,$f18
/* f07c5f8: 50400004 */ beqzl $v0,.NB0f07c60c
/* f07c5fc: 3c0140a0 */ lui $at,0x40a0
/* f07c600: 10000004 */ beqz $zero,.NB0f07c614
/* f07c604: 46008086 */ mov.s $f2,$f16
/* f07c608: 3c0140a0 */ lui $at,0x40a0
.NB0f07c60c:
/* f07c60c: 44811000 */ mtc1 $at,$f2
/* f07c610: 00000000 */ sll $zero,$zero,0x0
.NB0f07c614:
/* f07c614: 3c017f1a */ lui $at,0x7f1a
/* f07c618: c42a49f0 */ lwc1 $f10,0x49f0($at)
/* f07c61c: 46000100 */ add.s $f4,$f0,$f0
/* f07c620: 44074000 */ mfc1 $a3,$f8
/* f07c624: 460a1182 */ mul.s $f6,$f2,$f10
/* f07c628: 27a4018c */ addiu $a0,$sp,0x18c
/* f07c62c: e7a40010 */ swc1 $f4,0x10($sp)
/* f07c630: 8fa501fc */ lw $a1,0x1fc($sp)
/* f07c634: 27a60180 */ addiu $a2,$sp,0x180
/* f07c638: 0fc1b359 */ jal applyRotation
/* f07c63c: e7a60014 */ swc1 $f6,0x14($sp)
/* f07c640: c7a8018c */ lwc1 $f8,0x18c($sp)
/* f07c644: c7a401fc */ lwc1 $f4,0x1fc($sp)
/* f07c648: 3c014170 */ lui $at,0x4170
/* f07c64c: 44818000 */ mtc1 $at,$f16
/* f07c650: 46044032 */ c.eq.s $f8,$f4
/* f07c654: 3c017f1a */ lui $at,0x7f1a
/* f07c658: c43249f4 */ lwc1 $f18,0x49f4($at)
/* f07c65c: 45020022 */ bc1fl .NB0f07c6e8
/* f07c660: 8e090008 */ lw $t1,0x8($s0)
/* f07c664: 8faa01f8 */ lw $t2,0x1f8($sp)
/* f07c668: 3c0140a0 */ lui $at,0x40a0
/* f07c66c: 8fa801f8 */ lw $t0,0x1f8($sp)
/* f07c670: 51400004 */ beqzl $t2,.NB0f07c684
/* f07c674: 44811000 */ mtc1 $at,$f2
/* f07c678: 10000003 */ beqz $zero,.NB0f07c688
/* f07c67c: 46008086 */ mov.s $f2,$f16
/* f07c680: 44811000 */ mtc1 $at,$f2
.NB0f07c684:
/* f07c684: 00000000 */ sll $zero,$zero,0x0
.NB0f07c688:
/* f07c688: 46121002 */ mul.s $f0,$f2,$f18
/* f07c68c: c7ae0180 */ lwc1 $f14,0x180($sp)
/* f07c690: 46000280 */ add.s $f10,$f0,$f0
/* f07c694: 460a703e */ c.le.s $f14,$f10
/* f07c698: 00000000 */ sll $zero,$zero,0x0
/* f07c69c: 45020012 */ bc1fl .NB0f07c6e8
/* f07c6a0: 8e090008 */ lw $t1,0x8($s0)
/* f07c6a4: 11000003 */ beqz $t0,.NB0f07c6b4
/* f07c6a8: 3c0140a0 */ lui $at,0x40a0
/* f07c6ac: 10000003 */ beqz $zero,.NB0f07c6bc
/* f07c6b0: 46008306 */ mov.s $f12,$f16
.NB0f07c6b4:
/* f07c6b4: 44816000 */ mtc1 $at,$f12
/* f07c6b8: 00000000 */ sll $zero,$zero,0x0
.NB0f07c6bc:
/* f07c6bc: 46126002 */ mul.s $f0,$f12,$f18
/* f07c6c0: 46000007 */ neg.s $f0,$f0
/* f07c6c4: 46000180 */ add.s $f6,$f0,$f0
/* f07c6c8: 460e303e */ c.le.s $f6,$f14
/* f07c6cc: 00000000 */ sll $zero,$zero,0x0
/* f07c6d0: 45020005 */ bc1fl .NB0f07c6e8
/* f07c6d4: 8e090008 */ lw $t1,0x8($s0)
/* f07c6d8: 44807000 */ mtc1 $zero,$f14
/* f07c6dc: 00000000 */ sll $zero,$zero,0x0
/* f07c6e0: e7ae0180 */ swc1 $f14,0x180($sp)
/* f07c6e4: 8e090008 */ lw $t1,0x8($s0)
.NB0f07c6e8:
/* f07c6e8: 44800000 */ mtc1 $zero,$f0
/* f07c6ec: 00095800 */ sll $t3,$t1,0x0
/* f07c6f0: 05630004 */ bgezl $t3,.NB0f07c704
/* f07c6f4: c7ae0184 */ lwc1 $f14,0x184($sp)
/* f07c6f8: 1000000d */ beqz $zero,.NB0f07c730
/* f07c6fc: e7a00188 */ swc1 $f0,0x188($sp)
/* f07c700: c7ae0184 */ lwc1 $f14,0x184($sp)
.NB0f07c704:
/* f07c704: 3c0142f0 */ lui $at,0x42f0
/* f07c708: 44812000 */ mtc1 $at,$f4
/* f07c70c: 46007207 */ neg.s $f8,$f14
/* f07c710: c7a60188 */ lwc1 $f6,0x188($sp)
/* f07c714: 46044282 */ mul.s $f10,$f8,$f4
/* f07c718: 3c017f1a */ lui $at,0x7f1a
/* f07c71c: c42449f8 */ lwc1 $f4,0x49f8($at)
/* f07c720: 46065201 */ sub.s $f8,$f10,$f6
/* f07c724: 46044282 */ mul.s $f10,$f8,$f4
/* f07c728: 460a3200 */ add.s $f8,$f6,$f10
/* f07c72c: e7a80188 */ swc1 $f8,0x188($sp)
.NB0f07c730:
/* f07c730: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f07c734: 11800006 */ beqz $t4,.NB0f07c750
/* f07c738: 3c017f1a */ lui $at,0x7f1a
/* f07c73c: c42449fc */ lwc1 $f4,0x49fc($at)
/* f07c740: c7a6018c */ lwc1 $f6,0x18c($sp)
/* f07c744: 46062281 */ sub.s $f10,$f4,$f6
/* f07c748: 10000002 */ beqz $zero,.NB0f07c754
/* f07c74c: e7aa012c */ swc1 $f10,0x12c($sp)
.NB0f07c750:
/* f07c750: e7a0012c */ swc1 $f0,0x12c($sp)
.NB0f07c754:
/* f07c754: c7a40188 */ lwc1 $f4,0x188($sp)
/* f07c758: c7a80190 */ lwc1 $f8,0x190($sp)
/* f07c75c: e7a00134 */ swc1 $f0,0x134($sp)
/* f07c760: 4604003e */ c.le.s $f0,$f4
/* f07c764: e7a80130 */ swc1 $f8,0x130($sp)
/* f07c768: 45000006 */ bc1f .NB0f07c784
/* f07c76c: 00000000 */ sll $zero,$zero,0x0
/* f07c770: 46002306 */ mov.s $f12,$f4
/* f07c774: 0c005ce4 */ jal mtx4LoadZRotation
/* f07c778: 27a5006c */ addiu $a1,$sp,0x6c
/* f07c77c: 10000008 */ beqz $zero,.NB0f07c7a0
/* f07c780: 27a4012c */ addiu $a0,$sp,0x12c
.NB0f07c784:
/* f07c784: 3c017f1a */ lui $at,0x7f1a
/* f07c788: c42a4a00 */ lwc1 $f10,0x4a00($at)
/* f07c78c: c7a60188 */ lwc1 $f6,0x188($sp)
/* f07c790: 27a5006c */ addiu $a1,$sp,0x6c
/* f07c794: 0c005ce4 */ jal mtx4LoadZRotation
/* f07c798: 460a3300 */ add.s $f12,$f6,$f10
/* f07c79c: 27a4012c */ addiu $a0,$sp,0x12c
.NB0f07c7a0:
/* f07c7a0: 0c005d07 */ jal mtx4LoadRotation
/* f07c7a4: 27a500ac */ addiu $a1,$sp,0xac
/* f07c7a8: 8e0d0018 */ lw $t5,0x18($s0)
/* f07c7ac: 27a500ac */ addiu $a1,$sp,0xac
/* f07c7b0: 0c005b7d */ jal mtx00015f04
/* f07c7b4: c5ac0014 */ lwc1 $f12,0x14($t5)
/* f07c7b8: 27a400ac */ addiu $a0,$sp,0xac
/* f07c7bc: 27a5006c */ addiu $a1,$sp,0x6c
/* f07c7c0: 0c005a3c */ jal mtx4MultMtx4
/* f07c7c4: 27a600ec */ addiu $a2,$sp,0xec
/* f07c7c8: 27a400ec */ addiu $a0,$sp,0xec
/* f07c7cc: 0c005b24 */ jal mtx4ToMtx3
/* f07c7d0: 27a5015c */ addiu $a1,$sp,0x15c
/* f07c7d4: 27a4015c */ addiu $a0,$sp,0x15c
/* f07c7d8: 0c005af2 */ jal mtx3Copy
/* f07c7dc: 2605001c */ addiu $a1,$s0,0x1c
/* f07c7e0: 0c006d52 */ jal cosf
/* f07c7e4: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07c7e8: e7a00138 */ swc1 $f0,0x138($sp)
/* f07c7ec: 0c006d55 */ jal sinf
/* f07c7f0: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07c7f4: c7a80138 */ lwc1 $f8,0x138($sp)
/* f07c7f8: 8fae01f8 */ lw $t6,0x1f8($sp)
/* f07c7fc: 46080102 */ mul.s $f4,$f0,$f8
/* f07c800: 11c00005 */ beqz $t6,.NB0f07c818
/* f07c804: e7a40194 */ swc1 $f4,0x194($sp)
/* f07c808: 0c006d55 */ jal sinf
/* f07c80c: c7ac01fc */ lwc1 $f12,0x1fc($sp)
/* f07c810: 10000004 */ beqz $zero,.NB0f07c824
/* f07c814: e7a00198 */ swc1 $f0,0x198($sp)
.NB0f07c818:
/* f07c818: 0c006d55 */ jal sinf
/* f07c81c: c7ac018c */ lwc1 $f12,0x18c($sp)
/* f07c820: e7a00198 */ swc1 $f0,0x198($sp)
.NB0f07c824:
/* f07c824: 0c006d52 */ jal cosf
/* f07c828: c7ac0190 */ lwc1 $f12,0x190($sp)
/* f07c82c: c7a60138 */ lwc1 $f6,0x138($sp)
/* f07c830: 3c01800a */ lui $at,0x800a
/* f07c834: c422e70c */ lwc1 $f2,-0x18f4($at)
/* f07c838: 46060282 */ mul.s $f10,$f0,$f6
/* f07c83c: c7a80194 */ lwc1 $f8,0x194($sp)
/* f07c840: 8faf0278 */ lw $t7,0x278($sp)
/* f07c844: 8fa40058 */ lw $a0,0x58($sp)
/* f07c848: 8fa50054 */ lw $a1,0x54($sp)
/* f07c84c: 27a60150 */ addiu $a2,$sp,0x150
/* f07c850: 27a70140 */ addiu $a3,$sp,0x140
/* f07c854: e7aa019c */ swc1 $f10,0x19c($sp)
/* f07c858: c6040064 */ lwc1 $f4,0x64($s0)
/* f07c85c: 46022182 */ mul.s $f6,$f4,$f2
/* f07c860: c5e40008 */ lwc1 $f4,0x8($t7)
/* f07c864: 46064282 */ mul.s $f10,$f8,$f6
/* f07c868: c7a60198 */ lwc1 $f6,0x198($sp)
/* f07c86c: 46045200 */ add.s $f8,$f10,$f4
/* f07c870: e7a80150 */ swc1 $f8,0x150($sp)
/* f07c874: c60a0064 */ lwc1 $f10,0x64($s0)
/* f07c878: 46025102 */ mul.s $f4,$f10,$f2
/* f07c87c: c5ea000c */ lwc1 $f10,0xc($t7)
/* f07c880: 46043202 */ mul.s $f8,$f6,$f4
/* f07c884: c7a4019c */ lwc1 $f4,0x19c($sp)
/* f07c888: 460a4180 */ add.s $f6,$f8,$f10
/* f07c88c: e7a60154 */ swc1 $f6,0x154($sp)
/* f07c890: c6080064 */ lwc1 $f8,0x64($s0)
/* f07c894: 46024282 */ mul.s $f10,$f8,$f2
/* f07c898: c5e80010 */ lwc1 $f8,0x10($t7)
/* f07c89c: 460a2182 */ mul.s $f6,$f4,$f10
/* f07c8a0: 46083100 */ add.s $f4,$f6,$f8
/* f07c8a4: 0fc19437 */ jal func0f065e74
/* f07c8a8: e7a40158 */ swc1 $f4,0x158($sp)
/* f07c8ac: 8fb801f8 */ lw $t8,0x1f8($sp)
/* f07c8b0: 27a40150 */ addiu $a0,$sp,0x150
/* f07c8b4: 3c0540a0 */ lui $a1,0x40a0
/* f07c8b8: 13000009 */ beqz $t8,.NB0f07c8e0
/* f07c8bc: 27a60140 */ addiu $a2,$sp,0x140
/* f07c8c0: 00003825 */ or $a3,$zero,$zero
/* f07c8c4: 0c00adde */ jal cdFindGroundYSimple
/* f07c8c8: afa00010 */ sw $zero,0x10($sp)
/* f07c8cc: 3c01420c */ lui $at,0x420c
/* f07c8d0: 44815000 */ mtc1 $at,$f10
/* f07c8d4: 00000000 */ sll $zero,$zero,0x0
/* f07c8d8: 460a0180 */ add.s $f6,$f0,$f10
/* f07c8dc: e7a60154 */ swc1 $f6,0x154($sp)
.NB0f07c8e0:
/* f07c8e0: c7a80150 */ lwc1 $f8,0x150($sp)
/* f07c8e4: 8fa40278 */ lw $a0,0x278($sp)
/* f07c8e8: e4880008 */ swc1 $f8,0x8($a0)
/* f07c8ec: c7a40154 */ lwc1 $f4,0x154($sp)
/* f07c8f0: e484000c */ swc1 $f4,0xc($a0)
/* f07c8f4: c7aa0158 */ lwc1 $f10,0x158($sp)
/* f07c8f8: 0fc193ab */ jal propDeregisterRooms
/* f07c8fc: e48a0010 */ swc1 $f10,0x10($a0)
/* f07c900: 27a40140 */ addiu $a0,$sp,0x140
/* f07c904: 0fc19283 */ jal roomsCopy
/* f07c908: 8fa50054 */ lw $a1,0x54($sp)
/* f07c90c: c7a60190 */ lwc1 $f6,0x190($sp)
/* f07c910: 8e020088 */ lw $v0,0x88($s0)
/* f07c914: e606007c */ swc1 $f6,0x7c($s0)
/* f07c918: c7a8018c */ lwc1 $f8,0x18c($sp)
/* f07c91c: e6080080 */ swc1 $f8,0x80($s0)
/* f07c920: c7a40188 */ lwc1 $f4,0x188($sp)
/* f07c924: e6040084 */ swc1 $f4,0x84($s0)
/* f07c928: c7aa0184 */ lwc1 $f10,0x184($sp)
/* f07c92c: e60a0070 */ swc1 $f10,0x70($s0)
/* f07c930: c7a60180 */ lwc1 $f6,0x180($sp)
/* f07c934: 10400024 */ beqz $v0,.NB0f07c9c8
/* f07c938: e6060074 */ swc1 $f6,0x74($s0)
/* f07c93c: 8e08008c */ lw $t0,0x8c($s0)
/* f07c940: 8c4a0000 */ lw $t2,0x0($v0)
/* f07c944: c7a401f4 */ lwc1 $f4,0x1f4($sp)
/* f07c948: 00084880 */ sll $t1,$t0,0x2
/* f07c94c: 01495821 */ addu $t3,$t2,$t1
/* f07c950: 8d6c0004 */ lw $t4,0x4($t3)
/* f07c954: c7a801f4 */ lwc1 $f8,0x1f4($sp)
/* f07c958: 05820010 */ bltzl $t4,.NB0f07c99c
/* f07c95c: c6060064 */ lwc1 $f6,0x64($s0)
/* f07c960: c6080064 */ lwc1 $f8,0x64($s0)
/* f07c964: 8fa40058 */ lw $a0,0x58($sp)
/* f07c968: 27a50150 */ addiu $a1,$sp,0x150
/* f07c96c: 46044282 */ mul.s $f10,$f8,$f4
/* f07c970: 27a60214 */ addiu $a2,$sp,0x214
/* f07c974: 44075000 */ mfc1 $a3,$f10
/* f07c978: 0fc10fab */ jal posIsArrivingLaterallyAtPos
/* f07c97c: 00000000 */ sll $zero,$zero,0x0
/* f07c980: 50400012 */ beqzl $v0,.NB0f07c9cc
/* f07c984: 02002025 */ or $a0,$s0,$zero
/* f07c988: 0fc1c542 */ jal hovercarIncrementStep
/* f07c98c: 02002025 */ or $a0,$s0,$zero
/* f07c990: 1000000e */ beqz $zero,.NB0f07c9cc
/* f07c994: 02002025 */ or $a0,$s0,$zero
/* f07c998: c6060064 */ lwc1 $f6,0x64($s0)
.NB0f07c99c:
/* f07c99c: 8fa40058 */ lw $a0,0x58($sp)
/* f07c9a0: 27a50150 */ addiu $a1,$sp,0x150
/* f07c9a4: 46083102 */ mul.s $f4,$f6,$f8
/* f07c9a8: 27a60214 */ addiu $a2,$sp,0x214
/* f07c9ac: 44072000 */ mfc1 $a3,$f4
/* f07c9b0: 0fc10fab */ jal posIsArrivingLaterallyAtPos
/* f07c9b4: 00000000 */ sll $zero,$zero,0x0
/* f07c9b8: 50400004 */ beqzl $v0,.NB0f07c9cc
/* f07c9bc: 02002025 */ or $a0,$s0,$zero
/* f07c9c0: 0fc1c542 */ jal hovercarIncrementStep
/* f07c9c4: 02002025 */ or $a0,$s0,$zero
.NB0f07c9c8:
/* f07c9c8: 02002025 */ or $a0,$s0,$zero
.NB0f07c9cc:
/* f07c9cc: 00002825 */ or $a1,$zero,$zero
/* f07c9d0: 0fc1a3b7 */ jal func0f069c70
/* f07c9d4: 24060001 */ addiu $a2,$zero,0x1
.NB0f07c9d8:
/* f07c9d8: 8fbf004c */ lw $ra,0x4c($sp)
.NB0f07c9dc:
/* f07c9dc: 8fb00048 */ lw $s0,0x48($sp)
/* f07c9e0: 27bd0278 */ addiu $sp,$sp,0x278
/* f07c9e4: 03e00008 */ jr $ra
/* f07c9e8: 00000000 */ sll $zero,$zero,0x0
);
#endif
//#define HOVVALUE() (active ? 15.0f : 5.0f)
// Mismatch: float regalloc
//void hovercarTick(struct prop *prop)
//{
// s32 stopping; // 274
// struct pad pad; // 220
// struct coord sp214;
// s16 sp210[2];
// struct hovercarobj *hovercar = (struct hovercarobj *)prop->obj;
// struct defaultobj *obj = &hovercar->base;
// u32 stack;
// f32 sp200 = hovercar->roty;
// f32 sp1fc = hovercar->rotx;
// u32 active = obj->flags & OBJFLAG_80000000; // 1f8
// f32 sp1f4 = active ? 5 : 10;
// struct prop *doorprop; // 1f0
// struct coord sp1e4;
// struct coord sp1d8;
// s16 sp1d6;
// u32 stack2;
// u32 stack3;
// struct coord sp1c0; // 1c0
// s16 sp1b0[8]; // 1b0
// f32 tmp2;
// f32 tmp3;
// f32 tmp4;
// struct doorobj *door; // 1a0
// struct coord sp194;
// f32 sp190;
// f32 sp18c;
// f32 sp188;
// f32 sp184;
// f32 sp180;
// f32 sp15c[9];
// struct coord sp150;
// s16 sp140[8];
// f32 tmp;
// f32 sp138;
// struct coord sp12c;
// Mtxf spec;
// Mtxf spac;
// Mtxf sp6c;
// f32 dist;
// s32 *padnum;
//
// doorprop = NULL;
//
// // 23c
// if (active && hovercar->deadtimer60 < 0) {
// // Exploding
// tmp = objGetLocalYMin(modelFindBboxRodata(hovercar->base.model));
// sp1d6 = prop->rooms[0];
//
// sp1d8.x = hovercar->base.realrot[3];
// sp1d8.y = hovercar->base.realrot[4];
// sp1d8.z = hovercar->base.realrot[5];
//
// sp1e4.x = hovercar->base.realrot[3] * tmp + prop->pos.x;
// sp1e4.y = hovercar->base.realrot[4] * tmp + prop->pos.y;
// sp1e4.z = hovercar->base.realrot[5] * tmp + prop->pos.z;
//
// func0f0926bc(prop, 1, 0xffff);
// explosionCreate(NULL, &prop->pos, prop->rooms, EXPLOSIONTYPE_7, g_Vars.currentplayernum, true, &sp1e4, sp1d6, &sp1d8);
// hovercar->base.hidden |= OBJHFLAG_REAPABLE;
// return;
// }
//
// // 320
// if (hovercar->dead) {
// // 334
// if (active) {
// hovercar->deadtimer60 -= g_Vars.lvupdate240_60;
// hovercar->sparkstimer60 -= g_Vars.lvupdate240_60;
//
// if (hovercar->sparkstimer60 < 0) {
// hovercar->sparkstimer60 = 50;
//
// // Play damage sound
// propsnd0f0939f8(NULL, prop, SFX_SHIELD_DAMAGE, -1,
// -1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1);
//
// // Create sparks
// sparksCreate(prop->rooms[0], prop, &prop->pos, NULL, 0, SPARKTYPE_DEFAULT);
// }
// } else {
// // 3e8
// if (hovercar->speedtime60 == 0) {
// // 404
// hovercar->speed += 6;
//
// sp1c0.x = prop->pos.x;
// sp1c0.y = prop->pos.y - hovercar->speed;
// sp1c0.z = prop->pos.z;
//
// if (sp1c0.y < hovercar->speedaim) {
// sp1c0.y = hovercar->speedaim;
// hovercar->speedtime60 = 1;
// }
//
// func0f065e74(&prop->pos, prop->rooms, &sp1c0, sp1b0);
//
// prop->pos.x = sp1c0.x;
// prop->pos.y = sp1c0.y;
// prop->pos.z = sp1c0.z;
//
// propDeregisterRooms(prop);
// roomsCopy(sp1b0, prop->rooms);
// func0f069c70(&hovercar->base, false, true);
// }
// }
//
// return;
// }
//
// // 4bc
// chraiExecute(obj, PROPTYPE_OBJ);
// stopping = false;
//
// if (hovercar->path) {
// padnum = &hovercar->path->pads[hovercar->nextstep];
// padUnpack(*padnum, PADFIELD_POS | PADFIELD_ROOM, &pad);
//
// sp214.x = pad.pos.x;
//
// if (active) {
// sp210[0] = pad.room;
// sp210[1] = -1;
//
// sp214.y = cdFindGroundYSimple(&pad.pos, 5, sp210, NULL, NULL) + 35;
// } else {
// sp214.y = pad.pos.y;
// }
//
// sp214.z = pad.pos.z;
//
// if ((hovercar->base.flags & OBJFLAG_20000000)
// && posIsArrivingLaterallyAtPos(&prop->pos, &prop->pos, &sp214, sp1f4)) {
// hovercarIncrementStep(hovercar);
// padnum = &hovercar->path->pads[hovercar->nextstep];
// padUnpack(*padnum, PADFIELD_POS, &pad);
// }
//
// sp200 = atan2f(sp214.x - prop->pos.x, sp214.z - prop->pos.z);
// sp1fc = atan2f(sp214.y - prop->pos.y,
// sqrtf((sp214.x - prop->pos.x) * (sp214.x - prop->pos.x) + (sp214.z - prop->pos.z) * (sp214.z - prop->pos.z)));
//
// // 630
// if (hovercar->base.flags & OBJFLAG_20000000) {
// hovercar->roty = sp200;
// hovercar->rotx = sp1fc;
// obj->flags &= ~OBJFLAG_20000000;
//
// if (active) {
// prop->pos.y = sp214.y;
// }
// }
//
// if (active) {
// if (cd0002d7c0(&prop->pos, prop->rooms, &sp214, 0x5000, 0, 0, 0) == 0) {
// doorprop = cdGetObstacle();
// }
//
// if (doorprop) {
// door = (struct doorobj *)doorprop->obj;
// dist = (doorprop->pos.x - prop->pos.x) * (doorprop->pos.x - prop->pos.x)
// + (doorprop->pos.z - prop->pos.z) * (doorprop->pos.z - prop->pos.z);
//
// if (dist < 200 * 200) {
// doorsChooseSwingDirection(prop, door);
// doorsRequestMode(door, DOORMODE_OPENING);
// }
//
// if (dist < 195 * 195) {
// stopping = !doorIsOpen(door);
// }
// }
// }
// } else {
// // 750
// if (hovercar->base.flags & OBJFLAG_20000000) {
// hovercar->roty = atan2f(hovercar->base.realrot[6], hovercar->base.realrot[8]);
// hovercar->rotx = atan2f(hovercar->base.realrot[7], sqrtf(hovercar->base.realrot[8] * hovercar->base.realrot[8] + hovercar->base.realrot[6] * hovercar->base.realrot[6]));
// hovercar->base.flags &= ~OBJFLAG_20000000;
// }
// }
//
// // 7ac
// // @bug: To calculate the speed correctly, the code needs to iterate the
// // lvupdate multiplier, then adjust the speed and test for reaching the
// // speedaim within each iteration. Or at least test for exceeding the
// // speedaim after updating it. With the below implementation, a lag frame
// // during acceleration can cause the hovercar to exceed its max speed.
// if (hovercar->speedtime60 >= 0) {
// if (hovercar->speedtime60 <= g_Vars.lvupdate240freal) {
// hovercar->speed = hovercar->speedaim;
// } else {
// hovercar->speed += (hovercar->speedaim - hovercar->speed) * g_Vars.lvupdate240freal / hovercar->speedtime60;
// }
//
// hovercar->speedtime60 -= g_Vars.lvupdate240freal;
// }
//
// // 818
// if (active) {
// if (hovercar->turnyspeed60 > 0) {
// hovercar->speed -= hovercar->speedaim * (1.0f / 24.0f) * g_Vars.lvupdate240f;
//
// if (hovercar->speed < 0) {
// hovercar->speed = 0.1f;
// }
// } else {
// if (hovercar->speed < hovercar->speedaim) {
// hovercar->speed += hovercar->speedaim * (1.0f / 24.0f) * g_Vars.lvupdate240f;
// }
// }
//
// if (stopping) {
// hovercar->speed -= 50.0f / 240.f * g_Vars.lvupdate240f;
//
// if (hovercar->speed < 0) {
// hovercar->speed = 0;
// }
// }
// }
//
// // 900
// if (hovercar->speed > 0) {
// sp190 = hovercar->roty;
// sp18c = hovercar->rotx;
// sp188 = hovercar->rotz;
//
// sp184 = hovercar->turnyspeed60;
// sp180 = hovercar->turnxspeed60;
//
// // 94c
// sp194.x = sinf(hovercar->roty) * cosf(hovercar->rotx);
// sp194.y = sinf(hovercar->rotx);
// sp194.z = cosf(hovercar->rotx) * cosf(hovercar->roty);
//
// if (posIsMovingTowardsPosOrStoppedInRange(&prop->pos, &sp194, &sp214, sp1f4)) {
// sp200 = hovercar->roty;
// sp1fc = hovercar->rotx;
// }
//
// // 9c8
// // The multipliers below:
// // val * 0.013087885454297f = val * M_BADPI / 240
// // val * 0.00021813141938765f = val * M_BADPI / 240 / 60
// tmp2 = HOVVALUE();
// tmp3 = HOVVALUE();
// tmp4 = HOVVALUE();
// applyRotation(&sp190, sp200, &sp184,
// tmp2 * 0.00021813141938765f,
// tmp3 * 0.00021813141938765f + tmp3 * 0.00021813141938765f,
// tmp4 * 0.013087885454297f);
//
// // a64
// if (sp190 == sp200) {
// tmp2 = HOVVALUE() * 0.00021813141938765f;
// if (tmp2 + tmp2 >= sp184) {
// tmp2 = -(HOVVALUE() * 0.00021813141938765f);
// if (tmp2 + tmp2 <= sp184) {
// sp184 = 0;
// }
// }
// }
//
// // b04
// tmp2 = HOVVALUE();
// tmp3 = HOVVALUE();
// tmp4 = HOVVALUE();
// applyRotation(&sp18c, sp1fc, &sp180,
// tmp2 * 0.00021813141938765f,
// tmp3 * 0.00021813141938765f + tmp3 * 0.00021813141938765f,
// tmp4 * 0.013087885454297f);
//
// // b90
// if (sp18c == sp1fc) {
// tmp2 = HOVVALUE() * 0.00021813141938765f;
// if (tmp2 + tmp2 >= sp180) {
// tmp2 = -(HOVVALUE() * 0.00021813141938765f);
// if (tmp2 + tmp2 <= sp180) {
// sp180 = 0;
// }
// }
// }
//
// // c34
// if (hovercar->base.flags & OBJFLAG_80000000) {
// sp188 = 0;
// } else {
// sp188 += (-sp184 * 120 - sp188) * 0.1f;
// }
//
// // c84
// sp12c.x = active ? M_BADTAU - sp18c : 0;
// sp12c.y = sp190;
// sp12c.z = 0;
//
// // cb4
// if (sp188 >= 0) {
// mtx4LoadZRotation(sp188, &sp6c);
// } else {
// mtx4LoadZRotation(sp188 + M_BADTAU, &sp6c);
// }
//
// // cf0
// mtx4LoadRotation(&sp12c, &spac);
// mtx00015f04(hovercar->base.model->scale, &spac);
// mtx4MultMtx4(&spac, &sp6c, &spec);
// mtx4ToMtx3(&spec, sp15c);
// mtx3Copy(sp15c, hovercar->base.realrot);
//
// sp138 = cosf(sp18c);
//
// // d50
// sp194.x = sinf(sp190) * sp138;
// sp194.y = active ? sinf(sp1fc) : sinf(sp18c);
// sp194.z = cosf(sp190) * sp138;
//
// sp150.x = prop->pos.f[0] + sp194.f[0] * (hovercar->speed * g_Vars.lvupdate240freal);
// sp150.y = prop->pos.f[1] + sp194.f[1] * (hovercar->speed * g_Vars.lvupdate240freal);
// sp150.z = prop->pos.f[2] + sp194.f[2] * (hovercar->speed * g_Vars.lvupdate240freal);
//
// func0f065e74(&prop->pos, prop->rooms, &sp150, sp140);
//
// // e08
// if (active) {
// sp150.y = cdFindGroundYSimple(&sp150, 5, sp140, NULL, NULL) + 35;
//
// if (sp150.y < -100000) {
// sp150.y = prop->pos.f[1] + sp194.f[1] * (hovercar->speed * g_Vars.lvupdate240freal);
// }
// }
//
// // e68
// prop->pos.x = sp150.x;
// prop->pos.y = sp150.y;
// prop->pos.z = sp150.z;
//
// propDeregisterRooms(prop);
// roomsCopy(sp140, prop->rooms);
//
// hovercar->roty = sp190;
// hovercar->rotx = sp18c;
// hovercar->rotz = sp188;
// hovercar->turnyspeed60 = sp184;
// hovercar->turnxspeed60 = sp180;
//
// if (hovercar->path) {
// if (hovercar->path->pads[hovercar->nextstep + 1] >= 0) {
// if (posIsArrivingLaterallyAtPos(&prop->pos, &sp150, &sp214, hovercar->speed * sp1f4)) {
// hovercarIncrementStep(hovercar);
// }
// } else {
// if (posIsArrivingLaterallyAtPos(&prop->pos, &sp150, &sp214, hovercar->speed * sp1f4)) {
// hovercarIncrementStep(hovercar);
// }
// }
// }
//
// func0f069c70(&hovercar->base, false, true);
// }
//}
void hoverpropTick(struct prop *prop, bool arg1)
{
struct hoverpropobj *obj = (struct hoverpropobj *)prop->obj;
if ((obj->base.hidden & OBJHFLAG_GRABBED) == 0
&& (arg1 || (prop->flags & PROPFLAG_ONANYSCREENPREVTICK) || (obj->base.flags & OBJFLAG_CHOPPER_INACTIVE))) {
hovTick(&obj->base, &obj->hov);
}
}
void hoverbikeTick(struct prop *prop, bool arg1)
{
struct hoverbikeobj *obj = (struct hoverbikeobj *)prop->obj;
if ((obj->base.hidden & OBJHFLAG_MOUNTED) == 0) {
if ((obj->base.hidden & OBJHFLAG_GRABBED) == 0
&& (arg1 || (prop->flags & PROPFLAG_ONANYSCREENPREVTICK))) {
hovTick(&obj->base, &obj->hov);
}
if (obj->base.flags & OBJFLAG_HOVERBIKE_MOVINGWHILEEMPTY) {
hoverbikeUpdateMovement(obj, 0, 0, 0);
}
}
}
/**
* Show or hide the CI dropship's interior features depending on whether the
* dropship object's deactivated flag is set.
*/
void dropshipUpdateInterior(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
struct modelnode *node = modelGetPart(model->filedata, MODELPART_DROPSHIP_INTERIOR);
if (node) {
union modelrwdata *data = modelGetNodeRwData(model, node);
u32 flags = obj->flags;
data->toggle.visible = (flags & OBJFLAG_DEACTIVATED) == 0;
}
}
void glassUpdatePortal(struct prop *prop, s32 playercount, bool *arg2)
{
struct tintedglassobj *glass = (struct tintedglassobj *) prop->obj;
if (g_TintedGlassEnabled) {
glass->opacity = 255;
} else {
glass->opacity = glassCalculateOpacity(&prop->pos, glass->xludist, glass->opadist, glass->unk64);
}
if (glass->portalnum >= 0 && playercount == 1) {
if (glass->opacity == 255) {
portalSetOpen(glass->portalnum, false);
} else {
portalSetOpen(glass->portalnum, true);
}
}
*arg2 = false;
}
void weaponInitMatrices(struct prop *prop)
{
struct weaponobj *weapon = prop->weapon;
struct model *model = weapon->base.model;
s32 i = 1;
Mtxf *mtxes = model->matrices;
Mtxf *ptr = &mtxes[i];
for (; i < model->filedata->nummatrices; i++) {
mtx4LoadIdentity(ptr);
ptr++;
}
}
/**
* This function relates to hanging monitor objects, but PD has none of these.
* There is no hanging monitor model in the ROM either, so it's impossible to
* know which model node types the below part numbers refer to. The only clue is
* that the rodata starts with a coordinate. There's at least 3 node types that
* fit this criteria.
*
* An assumption has been made these are position node types.
*/
void hangingmonitorInitMatrices(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
Mtxf *matrices = model->matrices;
union modelrodata *rodata;
rodata = modelGetPartRodata(model->filedata, MODELPART_0000);
mtx4LoadTranslation(&rodata->position.pos, &matrices[1]);
mtx00015be0(matrices, &matrices[1]);
rodata = modelGetPartRodata(model->filedata, MODELPART_0001);
mtx4LoadTranslation(&rodata->position.pos, &matrices[2]);
mtx00015be0(matrices, &matrices[2]);
rodata = modelGetPartRodata(model->filedata, MODELPART_0002);
mtx4LoadTranslation(&rodata->position.pos, &matrices[3]);
mtx00015be0(matrices, &matrices[3]);
rodata = modelGetPartRodata(model->filedata, MODELPART_0003);
mtx4LoadTranslation(&rodata->position.pos, &matrices[4]);
mtx00015be0(matrices, &matrices[4]);
}
void objInitMatrices(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
Mtxf mtx;
if (obj->type == OBJTYPE_DOOR) {
doorInitMatrices(prop);
} else {
mtx3ToMtx4(obj->realrot, &mtx);
mtx4SetTranslation(&prop->pos, &mtx);
mtx00015be4(camGetWorldToScreenMtxf(), &mtx, obj->model->matrices);
if (obj->type == OBJTYPE_CCTV) {
cctvInitMatrices(prop, &mtx);
} else if (obj->type == OBJTYPE_AUTOGUN) {
autogunInitMatrices(prop, &mtx);
} else if (obj->type == OBJTYPE_CHOPPER) {
chopperInitMatrices(prop);
} else if (obj->type == OBJTYPE_WEAPON) {
weaponInitMatrices(prop);
} else if (obj->type == OBJTYPE_HANGINGMONITORS) {
hangingmonitorInitMatrices(prop);
} else {
if (obj->model->filedata->nummatrices >= 2) {
struct modelrenderdata thing = {NULL, 1, 3};
u32 stack;
Mtxf sp28;
mtx4Copy(obj->model->matrices, &sp28);
thing.unk10 = obj->model->matrices;
thing.unk00 = &sp28;
model0001ce64(&thing, obj->model);
}
}
}
}
bool propCanRegen(struct prop *prop)
{
return true;
}
u32 objTick(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
bool silent = false;
bool regenning;
u32 cmdindex;
u32 padnum;
struct defaultobj *newparent;
if (prop->timetoregen > 0) {
// Prop is taken/unavailable
regenning = true;
if (prop->timetoregen >= TICKS(60)) {
regenning = false;
}
prop->timetoregen -= g_Vars.lvupdate240_60;
// If ready to start fading in but propCanRegen returns false, wait
// another second and try again. In practice propCanRegen will always
// return true so this condition will never pass.
if (prop->timetoregen < TICKS(60) && !regenning && !propCanRegen(prop)) {
prop->timetoregen += TICKS(60);
}
if (prop->timetoregen <= 0) {
// Prop has finished fading in
prop->timetoregen = 0;
if (obj->hidden2 & OBJH2FLAG_10) {
obj->hidden |= OBJHFLAG_00001000;
} else {
obj->hidden &= ~OBJHFLAG_00001000;
}
} else if (prop->timetoregen < TICKS(60) && !regenning) {
// 1 second left - time to start fading in
if (obj->damage == 0 && (obj->hidden2 & OBJH2FLAG_DESTROYED) == 0) {
if (obj->flags & OBJFLAG_INSIDEANOTHEROBJ) {
propDeregisterRooms(prop);
propDelist(prop);
obj->hidden &= ~OBJHFLAG_00000800;
cmdindex = setupGetCmdIndexByProp(prop);
// Find the parent obj (pad is repurposed here)
padnum = obj->pad;
newparent = setupGetObjByCmdIndex(cmdindex + padnum);
if (newparent && newparent->prop) {
modelSetScale(obj->model, obj->model->scale);
propReparent(obj->prop, newparent->prop);
silent = true;
}
} else {
propEnable(prop);
setup0f0923d4(obj);
obj->hidden &= ~OBJHFLAG_00000800;
}
} else {
// Object was previously damaged. Maybe glass?
if (obj->hidden2 & OBJH2FLAG_08) {
obj->flags |= OBJFLAG_00000100;
} else {
obj->flags &= ~OBJFLAG_00000100;
}
obj->damage = 0;
obj->hidden2 &= ~OBJH2FLAG_DESTROYED;
modelFreeVertices(1, obj->model);
}
if (obj->type == OBJTYPE_SHIELD) {
struct shieldobj *shield = (struct shieldobj *)obj;
shield->amount = shield->initialamount;
}
if (!silent) {
// Play respawn sound
propsnd0f0939f8(NULL, prop, SFX_REGEN, -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
}
}
}
if (obj->type == OBJTYPE_AUTOGUN) {
struct autogunobj *autogun = (struct autogunobj *)prop->obj;
if (autogun->beam) {
beamTick(autogun->beam);
}
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *)prop->obj;
beamTick(chopper->fireslotthing->beam);
} else if (obj->type == OBJTYPE_LIFT) {
liftTick(prop);
} else if (obj->type == OBJTYPE_ESCASTEP) {
escastepTick(prop);
}
return TICKOP_NONE;
}
/**
* Tick the given object.
*
* This function is called once per player per frame. The first time it is
* called per frame a "fulltick" is done. On consecutive calls for this tick
* much of the logic is skipped, and only the logic specific to the current
* player is executed.
*/
s32 objTickPlayer(struct prop *prop)
{
bool pass;
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
bool sp592 = false;
bool pass2;
struct prop *child;
struct prop *next;
s32 result = TICKOP_NONE;
bool fulltick = false;
u32 playercount = PLAYERCOUNT();
bool sp564 = true;
bool embedded = false;
bool sp556 = false;
bool sp552 = false;
if (obj->hidden & OBJHFLAG_ISRETICK) {
obj->hidden &= ~OBJHFLAG_ISRETICK;
} else if ((obj->hidden & OBJHFLAG_PROJECTILE) && (obj->projectile->flags & PROJECTILEFLAG_SLIDING) == 0) {
prop->flags &= ~PROPFLAG_ONTHISSCREENTHISTICK;
obj->hidden |= OBJHFLAG_ISRETICK;
return TICKOP_RETICK;
}
if (obj->hidden & OBJHFLAG_REAPABLE) {
pass = false;
if (obj->type == OBJTYPE_TINTEDGLASS) {
struct tintedglassobj *glass = (struct tintedglassobj *)obj;
if (glass->portalnum >= 0) {
pass = PORTAL_IS_CLOSED(glass->portalnum);
g_BgPortals[glass->portalnum].flags |= PORTALFLAG_FORCEOPEN;
}
} else if (obj->type == OBJTYPE_DOOR) {
struct doorobj *door = (struct doorobj *)obj;
if (door->portalnum >= 0) {
pass = PORTAL_IS_CLOSED(door->portalnum);
g_BgPortals[door->portalnum].flags |= PORTALFLAG_FORCEOPEN;
}
}
if (!pass) {
objDropRecursively(prop, true);
objFree(obj, false, obj->hidden2 & OBJH2FLAG_CANREGEN);
return TICKOP_FREE;
}
}
if (prop->flags & PROPFLAG_NOTYETTICKED) {
fulltick = true;
prop->flags &= ~PROPFLAG_NOTYETTICKED;
}
if (obj->hidden & OBJHFLAG_PROJECTILE) {
struct projectile *projectile = obj->projectile;
if (projectile->ownerprop && playermgrGetPlayerNumByProp(projectile->ownerprop) >= 0) {
fulltick = (projectile->ownerprop == g_Vars.currentplayer->prop);
}
}
if (model->anim) {
if (g_Anims[model->anim->animnum].flags & 0x02) {
if (g_Vars.tickmode != TICKMODE_CUTSCENE
&& modelGetCurAnimFrame(model) >= modelGetNumAnimFrames(model) - 1) {
animTurnOff(model->anim);
model->anim = NULL;
} else {
// In cutscene
struct modelrenderdata sp476 = {0, 1, 3};
Mtxf sp412;
struct coord sp400;
s16 sp384[8];
struct hov *hov = NULL;
if (fulltick) {
s32 iVar10 = g_Vars.lvupdate240;
if (g_Vars.tickmode == TICKMODE_CUTSCENE && iVar10 > 0 && g_Vars.cutsceneskip60ths > 0) {
iVar10 += g_Vars.cutsceneskip60ths * 4;
}
model0001ee18(model, iVar10, true);
}
anim00023d38(model->anim->animnum);
if ((g_Anims[model->anim->animnum].flags & 0x04)
&& anim0002384c(model->anim->animnum, model->anim->framea) < 0) {
sp552 = true;
} else {
if (fulltick) {
model0001b3bc(model);
}
sp556 = true;
sp476.unk10 = gfxAllocate(model->filedata->nummatrices * sizeof(Mtxf));
sp476.unk00 = camGetWorldToScreenMtxf();
model0001cebc(&sp476, model);
if (fulltick) {
mtx00015be4(camGetProjectionMtxF(), model->matrices, &sp412);
mtx4ToMtx3(&sp412, obj->realrot);
sp400.x = sp412.m[3][0];
sp400.y = sp412.m[3][1];
sp400.z = sp412.m[3][2];
if (obj->flags3 & OBJFLAG3_00000010) {
func0f065e98(&prop->pos, prop->rooms, &sp400, sp384);
} else {
func0f065e74(&prop->pos, prop->rooms, &sp400, sp384);
}
prop->pos.x = sp400.x;
prop->pos.y = sp400.y;
prop->pos.z = sp400.z;
propDeregisterRooms(prop);
roomsCopy(sp384, prop->rooms);
if (obj->type == OBJTYPE_HOVERPROP) {
hov = &((struct hoverpropobj *)obj)->hov;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
hov = &((struct hoverbikeobj *)obj)->hov;
}
if (hov) {
hovUpdateGround(obj, hov, &prop->pos, prop->rooms, obj->realrot);
hoverpropSetTurnAngle(obj, atan2f(sp412.m[2][0], sp412.m[2][2]));
hov->unk14 = 0;
hov->unk1c = 0;
hov->unk20 = 0;
hov->unk28 = 0;
hov->unk30 = hov->ground;
hov->unk04 = prop->pos.y - hov->ground;
hov->unk0c = 0;
}
if ((obj->flags & OBJFLAG_ILLUMINATED) == 0) {
cd0002a36c(&prop->pos, prop->rooms, &obj->floorcol, 0);
}
func0f069c70(obj, true, true);
if (obj->type == OBJTYPE_LIFT) {
liftUpdateTiles((struct liftobj *)obj, false);
}
sp592 = true;
}
}
}
} else {
struct modelrenderdata sp312 = {0, 1, 3};
Mtxf sp248;
struct coord sp236;
s16 sp220[8];
s32 numchrs;
Mtxf sp152;
s32 sp148;
s32 sp144;
s32 i;
struct coord sp128;
struct coord sp116 = {0, 0, 0};
f32 sp112;
s32 tagnum;
struct geo *geos[2];
u8 *end;
f32 damage;
if (fulltick) {
sp148 = floorf(model->anim->frame);
sp148++;
model0001ee18(model, g_Vars.lvupdate240, 1);
sp144 = floorf(model->anim->frame);
for (i = sp148; i <= sp144; i++) {
anim00024b64(0, 0, model->filedata->skel, model->anim->animnum, i, &sp128, 0);
sp116.x += sp128.x * 0.1f;
sp112 = sp128.y * 0.1f;
sp116.z += sp128.z * 0.1f;
}
mtx00016208(obj->realrot, &sp116);
}
mtx3ToMtx4(obj->realrot, &sp248);
mtx4SetTranslation(&prop->pos, &sp248);
mtx4MultMtx4(camGetWorldToScreenMtxf(), &sp248, &sp152);
sp556 = true;
sp312.unk10 = gfxAllocate(model->filedata->nummatrices * sizeof(Mtxf));
sp312.unk00 = &sp152;
model0001cebc(&sp312, model);
if (fulltick) {
sp236.x = (f32)sp116.x + prop->pos.x;
sp236.y = prop->pos.y;
sp236.z = (f32)sp116.z + prop->pos.z;
if (obj->flags3 & OBJFLAG3_00000010) {
func0f065e98(&prop->pos, prop->rooms, &sp236, sp220);
} else {
func0f065e74(&prop->pos, prop->rooms, &sp236, sp220);
}
if (modelGetCurAnimFrame(model) >= modelGetNumAnimFrames(model) - 1) {
animTurnOff(model->anim);
model->anim = NULL;
mtx00015be4(camGetProjectionMtxF(), model->matrices, &sp248);
mtx4ToMtx3(&sp248, obj->realrot);
tagnum = objGetTagNum(obj);
if (tagnum >= 0) {
numchrs = chrsGetNumSlots();
for (i = 0; i < numchrs; i++) {
if (g_ChrSlots[i].myspecial == tagnum) {
g_ChrSlots[i].myspecial = -1;
}
}
}
}
prop->pos.x = sp236.x;
prop->pos.z = sp236.z;
propDeregisterRooms(prop);
roomsCopy(sp220, prop->rooms);
if (sp148 <= sp144) {
prop->pos.y = cdFindGroundYSimple(&prop->pos, 5, prop->rooms, &obj->floorcol, NULL)
+ func0f06a620(obj) + sp112;
}
func0f069c70(obj, true, true);
sp592 = true;
if (objUpdateGeometry(prop, (u8 **)geos, &end)
&& geos[0]->type == GEOTYPE_BLOCK
&& cd0002e4c4((struct geoblock *) geos[0], prop->rooms, 4) == 0) {
damage = ((obj->maxdamage - obj->damage) + 1) / 250.0f;
obj->flags &= ~OBJFLAG_INVINCIBLE;
objDamage(obj, damage, &prop->pos, WEAPON_REMOTEMINE, -1);
}
}
}
}
if (fulltick) {
if (model->anim == NULL && (obj->hidden & OBJHFLAG_PROJECTILE)) {
sp592 = projectileTick(obj, &embedded);
if (embedded) {
result = TICKOP_5;
}
}
if (obj->type == OBJTYPE_DOOR) {
doorTick(prop);
} else if (obj->type == OBJTYPE_CCTV && (obj->flags & OBJFLAG_DEACTIVATED) == 0) {
cctvTick(prop);
} else if (obj->type == OBJTYPE_FAN) {
fanTick(prop);
} else if (obj->type == OBJTYPE_AUTOGUN && (obj->flags & OBJFLAG_DEACTIVATED) == 0) {
autogunTick(prop);
} else if (obj->type == OBJTYPE_HOVERCAR) {
hovercarTick(prop);
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *)obj;
if (!chopper->dead) {
if (!lvIsPaused()) {
if (chopper->attackmode == CHOPPERMODE_DEAD) {
// empty
} else if (chopper->attackmode == CHOPPERMODE_FALL) {
if (obj->flags & OBJFLAG_CHOPPER_INACTIVE) {
chopper->dead = true;
} else {
chopperTickFall(prop);
}
} else if (obj->flags & OBJFLAG_CHOPPER_INACTIVE) {
chopperTickIdle(prop);
} else if (chopper->attackmode == CHOPPERMODE_PATROL) {
chopperTickPatrol(prop);
} else if (chopper->attackmode == CHOPPERMODE_COMBAT) {
chopperTickCombat(prop);
}
}
} else {
func0f0926bc(prop, 1, 0xffff);
}
} else if (obj->type == OBJTYPE_HOVERPROP) {
hoverpropTick(prop, sp592);
} else if (obj->type == OBJTYPE_HOVERBIKE) {
hoverbikeTick(prop, sp592);
}
}
if (obj->type == OBJTYPE_TINTEDGLASS) {
glassUpdatePortal(prop, playercount, &sp564);
} else if (obj->type == OBJTYPE_DOOR) {
doorUpdatePortalIfWindowed(prop, playercount);
}
if (sp552) {
pass2 = false;
} else if (prop == bmoveGetHoverbike() || prop == bmoveGetGrabbedProp()) {
pass2 = posIsInDrawDistance(&prop->pos);
} else if (obj->flags2 & OBJFLAG2_04000000) {
pass2 = posIsInDrawDistance(&prop->pos);
} else if ((obj->hidden & OBJHFLAG_00000800) == 0 && (obj->flags2 & OBJFLAG2_INVISIBLE) == 0) {
pass2 = func0f08e8ac(prop, &prop->pos, model0001af80(model), sp564);
} else {
pass2 = false;
}
if (pass2) {
if (sp592 == false) {
func0f069630(prop, obj->nextcol, obj->floorcol);
}
if (fulltick) {
if (prop->flags & PROPFLAG_ONANYSCREENPREVTICK) {
colourTween(obj->shadecol, obj->nextcol);
} else {
obj->shadecol[0] = obj->nextcol[0];
obj->shadecol[1] = obj->nextcol[1];
obj->shadecol[2] = obj->nextcol[2];
obj->shadecol[3] = obj->nextcol[3];
}
}
prop->flags |= PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONTHISSCREENTHISTICK;
if (obj->type == OBJTYPE_FAN) {
fanUpdateModel(prop);
} else if (obj->model->filedata->skel == &g_SkelDropship) {
dropshipUpdateInterior(prop);
}
if (sp556 == false) {
model->matrices = gfxAllocate(model->filedata->nummatrices * sizeof(Mtxf));
objInitMatrices(prop);
model0001cb0c(model, model->filedata->rootnode);
}
prop->z = -model->matrices[0].m[3][2];
func0f07063c(prop, fulltick);
child = prop->child;
while (child) {
next = child->next;
func0f07079c(child, fulltick);
child = next;
}
} else {
prop->flags &= ~PROPFLAG_ONTHISSCREENTHISTICK;
func0f07063c(prop, fulltick);
child = prop->child;
while (child) {
next = child->next;
func0f0706f8(child, fulltick);
child = next;
}
}
if (obj->hidden & OBJHFLAG_00000100) {
obj->hidden &= ~OBJHFLAG_00000100;
objDamage(obj, RANDOMFRAC() * 4.0f + 2.0f, &prop->pos, WEAPON_NONE, (obj->hidden & 0xf0000000) >> 28);
}
if (fulltick) {
if (obj->type == OBJTYPE_AUTOGUN) {
autogunTickShoot(prop);
}
objDropRecursively(prop, false);
}
return result;
}
Gfx *propsRenderBeams(Gfx *gdl)
{
struct prop *prop = g_Vars.activeprops;
while (prop) {
if (prop->type == PROPTYPE_CHR) {
struct chrdata *chr = prop->chr;
if (CHRRACE(chr) == RACE_ROBOT) {
gdl = beamRender(gdl, chr->unk348[0]->beam, true, true);
gdl = beamRender(gdl, chr->unk348[1]->beam, true, true);
} else {
if (chr->fireslots[0] >= 0) {
gdl = beamRender(gdl, &g_Fireslots[chr->fireslots[0]].beam, true, false);
}
if (chr->fireslots[1] >= 0) {
gdl = beamRender(gdl, &g_Fireslots[chr->fireslots[1]].beam, true, false);
}
}
} else if (prop->type == PROPTYPE_OBJ) {
struct defaultobj *obj = prop->obj;
if (obj->type == OBJTYPE_AUTOGUN) {
struct autogunobj *autogun = (struct autogunobj *)prop->obj;
gdl = beamRender(gdl, autogun->beam, true, false);
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *)prop->obj;
gdl = beamRender(gdl, chopper->fireslotthing->beam, true, true);
}
} else if (prop->type == PROPTYPE_PLAYER) {
if (prop->chr && playermgrGetPlayerNumByProp(prop) != g_Vars.currentplayernum) {
struct chrdata *chr = prop->chr;
if (chr->fireslots[0] >= 0) {
gdl = beamRender(gdl, &g_Fireslots[chr->fireslots[0]].beam, true, false);
}
if (chr->fireslots[1] >= 0) {
gdl = beamRender(gdl, &g_Fireslots[chr->fireslots[1]].beam, true, false);
}
}
}
prop = prop->next;
}
return gdl;
}
void tvscreenSetCmdlist(struct tvscreen *screen, u32 *cmdlist)
{
screen->cmdlist = cmdlist;
screen->offset = 0;
}
u32 g_TvCmdlist00[] = {
tvcmd_settexture(29),
tvcmd_setcolour(0x008000ff, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(-256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(-128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(-512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(-64, 30),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist01[] = {
tvcmd_setcolour(0x202020ff, 1),
tvcmd_settexture(28),
tvcmd_scrollrelx(2048, 120),
tvcmd_pause(120),
tvcmd_scaleabsx(256, 1),
tvcmd_scaleabsy(512, 60),
tvcmd_scrollrelx(-8192, 120),
tvcmd_pause(120),
tvcmd_scaleabsx(1024, 1),
tvcmd_scaleabsy(1024, 60),
tvcmd_scaleabsy(1024, 60),
tvcmd_scrollrelx(2048, 120),
tvcmd_pause(120),
tvcmd_scaleabsx(128, 1),
tvcmd_scaleabsy(2048, 60),
tvcmd_scaleabsy(1024, 120),
tvcmd_scrollrely(1024, 60),
tvcmd_scrollrelx(512, 120),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist02[] = {
tvcmd_setcolour(0x202020ff, 1),
tvcmd_settexture(28),
tvcmd_scaleabsx(128, 1),
tvcmd_scaleabsy(2048, 60),
tvcmd_scaleabsy(1024, 120),
tvcmd_scrollrely(1024, 10),
tvcmd_scrollrelx(512, 40),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist03[] = {
tvcmd_settexture(29),
tvcmd_setcolour(0x008000ff, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(-256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(-128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(-512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(-64, 30),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist15[] = {
tvcmd_settexture(50),
tvcmd_setcolour(0x008000fe, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(-256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(-128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(-512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(-64, 30),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist04[] = {
tvcmd_settexture(29),
tvcmd_setcolour(0x280000ff, 1),
tvcmd_scrollrely(512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(64, 30),
tvcmd_pause(120),
tvcmd_scrollrely(256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(128, 10),
tvcmd_restart(),
};
u32 g_TvCmdlist05[] = {
tvcmd_settexture(29),
tvcmd_setcolour(0x003c00ff, 1),
tvcmd_scrollrely(512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(64, 30),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist06[] = {
tvcmd_settexture(30),
tvcmd_setcolour(0x404000ff, 1),
tvcmd_scrollrelx(640, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist07[] = {
tvcmd_settexture(30),
tvcmd_setcolour(0x004040ff, 1),
tvcmd_scrollrelx(640, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist08[] = {
tvcmd_settexture(30),
tvcmd_setcolour(0x008000ff, 1),
tvcmd_scrollrelx(-640, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist0F[] = {
tvcmd_settexture(49),
tvcmd_scaleabsx(512, 0),
tvcmd_scaleabsy(512, 0),
tvcmd_setcolour(0xdc2828ff, 60),
tvcmd_pause(60),
tvcmd_setcolour(0x323232ff, 10),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist10[] = {
tvcmd_settexture(49),
tvcmd_scaleabsx(512, 0),
tvcmd_scaleabsy(512, 0),
tvcmd_setcolour(0x32c832ff, 60),
tvcmd_pause(60),
tvcmd_setcolour(0x323232ff, 10),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist11[] = {
tvcmd_settexture(49),
tvcmd_scaleabsx(512, 0),
tvcmd_scaleabsy(512, 0),
tvcmd_setcolour(0x323232ff, 10),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist12[] = {
tvcmd_settexture(49),
tvcmd_scaleabsx(512, 0),
tvcmd_scaleabsy(512, 0),
tvcmd_setcolour(0xdc2828ff, 10),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist13[] = {
tvcmd_settexture(49),
tvcmd_scaleabsx(512, 0),
tvcmd_scaleabsy(512, 0),
tvcmd_setcolour(0x32c832ff, 10),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist16[] = {
tvcmd_settexture(51),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist17[] = {
tvcmd_settexture(72),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist18[] = {
tvcmd_settexture(73),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist19[] = {
tvcmd_settexture(74),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist1A[] = {
tvcmd_settexture(75),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist1B[] = {
tvcmd_settexture(76),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist1C[] = {
tvcmd_settexture(77),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist24[] = {
tvcmd_setcolour(0x000000ff, 1),
tvcmd_settexture(75),
tvcmd_pause(1),
tvcmd_setcolour(0xffffffff, 180),
tvcmd_pause(360),
tvcmd_setcolour(0x000000ff, 30),
tvcmd_pause(30),
tvcmd_settexture(76),
tvcmd_pause(1),
tvcmd_setcolour(0xffffffff, 180),
tvcmd_pause(360),
tvcmd_setcolour(0x000000ff, 30),
tvcmd_pause(30),
tvcmd_settexture(77),
tvcmd_pause(1),
tvcmd_setcolour(0xffffffff, 180),
tvcmd_pause(360),
tvcmd_setcolour(0x000000ff, 29),
tvcmd_pause(29),
tvcmd_restart(),
};
u32 g_TvCmdlist1D[] = {
tvcmd_settexture(78),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 var8006a4dc[] = {
tvcmd_settexture(52),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(5),
tvcmd_settexture(53),
tvcmd_pause(5),
tvcmd_settexture(54),
tvcmd_pause(5),
tvcmd_settexture(55),
tvcmd_pause(5),
tvcmd_restart(),
};
u32 var8006a52c[] = {
tvcmd_settexture(79),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(5),
tvcmd_settexture(80),
tvcmd_pause(5),
tvcmd_settexture(81),
tvcmd_pause(5),
tvcmd_settexture(82),
tvcmd_pause(5),
tvcmd_restart(),
};
u32 var8006a57c[] = {
tvcmd_settexture(56),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_settexture(57),
tvcmd_pause(10),
tvcmd_settexture(58),
tvcmd_pause(10),
tvcmd_settexture(59),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 var8006a5cc[] = {
tvcmd_settexture(60),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(15),
tvcmd_settexture(61),
tvcmd_pause(15),
tvcmd_restart(),
};
u32 var8006a5fc[] = {
tvcmd_settexture(62),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_settexture(63),
tvcmd_pause(10),
tvcmd_settexture(64),
tvcmd_pause(10),
tvcmd_settexture(65),
tvcmd_pause(10),
tvcmd_settexture(66),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 var8006a65c[] = {
tvcmd_settexture(67),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_settexture(68),
tvcmd_pause(10),
tvcmd_settexture(69),
tvcmd_pause(10),
tvcmd_settexture(70),
tvcmd_pause(10),
tvcmd_settexture(71),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist25[] = {
tvcmd_settexture(83),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist26[] = {
tvcmd_settexture(84),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist27[] = {
tvcmd_settexture(85),
tvcmd_setcolour(0x008000ff, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(80),
tvcmd_restart(),
};
u32 g_TvCmdlist28[] = {
tvcmd_settexture(85),
tvcmd_setcolour(0x0032c8ff, 1),
tvcmd_scrollrely(512, 80),
tvcmd_pause(80),
tvcmd_restart(),
};
u32 g_TvCmdlist29[] = {
tvcmd_settexture(86),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist2A[] = {
tvcmd_settexture(86),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(80),
tvcmd_restart(),
};
u32 g_TvCmdlist2B[] = {
tvcmd_settexture(87),
tvcmd_setcolour(0x008000ff, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(80),
tvcmd_restart(),
};
u32 g_TvCmdlist2C[] = {
tvcmd_settexture(87),
tvcmd_setcolour(0x0032c8ff, 1),
tvcmd_scrollrely(512, 80),
tvcmd_pause(80),
tvcmd_restart(),
};
u32 g_TvCmdlist2D[] = {
tvcmd_settexture(88),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist2E[] = {
tvcmd_settexture(89),
tvcmd_setcolour(0x007f00ff, 1),
tvcmd_scrollrely(-512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(-256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(-128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(-512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(-64, 30),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist2F[] = {
tvcmd_settexture(89),
tvcmd_setcolour(0xff7f00ff, 1),
tvcmd_scrollrely(512, 80),
tvcmd_pause(120),
tvcmd_scrollrely(256, 20),
tvcmd_pause(120),
tvcmd_scrollrely(128, 10),
tvcmd_pause(40),
tvcmd_scrollrely(512, 40),
tvcmd_pause(60),
tvcmd_scrollrely(64, 30),
tvcmd_pause(120),
tvcmd_restart(),
};
u32 g_TvCmdlist30[] = {
tvcmd_settexture(90),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist31[] = {
tvcmd_settexture(91),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist32[] = {
tvcmd_settexture(92),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist33[] = {
tvcmd_setcolour(0x000000ff, 1),
tvcmd_settexture(90),
tvcmd_pause(1),
tvcmd_setcolour(0xffffffff, 180),
tvcmd_pause(360),
tvcmd_setcolour(0x000000ff, 30),
tvcmd_pause(30),
tvcmd_settexture(91),
tvcmd_pause(1),
tvcmd_setcolour(0xffffffff, 180),
tvcmd_pause(360),
tvcmd_setcolour(0x000000ff, 30),
tvcmd_pause(30),
tvcmd_settexture(92),
tvcmd_pause(1),
tvcmd_setcolour(0xffffffff, 180),
tvcmd_pause(360),
tvcmd_setcolour(0x000000ff, 29),
tvcmd_pause(29),
tvcmd_restart(),
};
u32 g_TvCmdlist34[] = {
tvcmd_settexture(93),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist35[] = {
tvcmd_settexture(94),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist36[] = {
tvcmd_settexture(95),
tvcmd_setcolour(0xffffffff, 1),
tvcmd_pause(10),
tvcmd_restart(),
};
u32 g_TvCmdlist14[] = {
tvcmd_settexture(0),
tvcmd_setcolour(0x000000ff, 0),
tvcmd_yield(),
// flow on to next cmdlist
};
u32 var8006aaa0[] = {
tvcmd_scaleabsx(1024, 0),
tvcmd_scaleabsy(1024, 0),
tvcmd_pause(1),
tvcmd_scaleabsx(4096, 20),
tvcmd_scaleabsy(4096, 20),
tvcmd_pause(20),
tvcmd_restart(),
};
u32 var8006aae4[] = {
tvcmd_settexture(0),
tvcmd_scrollrelx(1024, 20),
tvcmd_pause(20),
tvcmd_scrollrely(1024, 20),
tvcmd_setcolour(0x000000ff, 20),
tvcmd_pause(20),
tvcmd_scaleabsx(512, 20),
tvcmd_scaleabsy(512, 20),
tvcmd_setcolour(0xffffffff, 20),
tvcmd_pause(20),
tvcmd_scaleabsx(1024, 20),
tvcmd_scaleabsy(1024, 20),
tvcmd_pause(20),
tvcmd_restart(),
};
void tvscreenSetImageByNum(struct tvscreen *screen, s32 imagenum)
{
u32 *image = g_TvCmdlist00;
switch (imagenum) {
case TVCMDLIST_01: image = g_TvCmdlist01; break;
case TVCMDLIST_02: image = g_TvCmdlist02; break;
case TVCMDLIST_03: image = g_TvCmdlist03; break;
case TVCMDLIST_04: image = g_TvCmdlist04; break;
case TVCMDLIST_05: image = g_TvCmdlist05; break;
case TVCMDLIST_06: image = g_TvCmdlist06; break;
case TVCMDLIST_07: image = g_TvCmdlist07; break;
case TVCMDLIST_08: image = g_TvCmdlist08; break;
case TVCMDLIST_09: image = g_TvCmdlist03; break;
case TVCMDLIST_0A: image = g_TvCmdlist03; break;
case TVCMDLIST_0B: image = g_TvCmdlist03; break;
case TVCMDLIST_0C: image = g_TvCmdlist03; break;
case TVCMDLIST_0D: image = g_TvCmdlist03; break;
case TVCMDLIST_0E: image = g_TvCmdlist03; break;
case TVCMDLIST_0F: image = g_TvCmdlist0F; break;
case TVCMDLIST_10: image = g_TvCmdlist10; break;
case TVCMDLIST_11: image = g_TvCmdlist11; break;
case TVCMDLIST_12: image = g_TvCmdlist12; break;
case TVCMDLIST_13: image = g_TvCmdlist13; break;
case TVCMDLIST_14: image = g_TvCmdlist14; break;
case TVCMDLIST_15: image = g_TvCmdlist15; break;
case TVCMDLIST_16: image = g_TvCmdlist16; break;
case TVCMDLIST_17: image = g_TvCmdlist17; break;
case TVCMDLIST_18: image = g_TvCmdlist18; break;
case TVCMDLIST_19: image = g_TvCmdlist19; break;
case TVCMDLIST_1A: image = g_TvCmdlist1A; break;
case TVCMDLIST_1B: image = g_TvCmdlist1B; break;
case TVCMDLIST_1C: image = g_TvCmdlist1C; break;
case TVCMDLIST_1D: image = g_TvCmdlist1D; break;
case TVCMDLIST_24: image = g_TvCmdlist24; break;
case TVCMDLIST_1E: image = g_TvCmdlist08; break;
case TVCMDLIST_1F: image = g_TvCmdlist08; break;
case TVCMDLIST_20: image = g_TvCmdlist08; break;
case TVCMDLIST_21: image = g_TvCmdlist08; break;
case TVCMDLIST_22: image = g_TvCmdlist08; break;
case TVCMDLIST_23: image = g_TvCmdlist08; break;
case TVCMDLIST_25: image = g_TvCmdlist25; break;
case TVCMDLIST_26: image = g_TvCmdlist26; break;
case TVCMDLIST_27: image = g_TvCmdlist27; break;
case TVCMDLIST_28: image = g_TvCmdlist28; break;
case TVCMDLIST_29: image = g_TvCmdlist29; break;
case TVCMDLIST_2A: image = g_TvCmdlist2A; break;
case TVCMDLIST_2B: image = g_TvCmdlist2B; break;
case TVCMDLIST_2C: image = g_TvCmdlist2C; break;
case TVCMDLIST_2D: image = g_TvCmdlist2D; break;
case TVCMDLIST_2E: image = g_TvCmdlist2E; break;
case TVCMDLIST_2F: image = g_TvCmdlist2F; break;
case TVCMDLIST_30: image = g_TvCmdlist30; break;
case TVCMDLIST_31: image = g_TvCmdlist31; break;
case TVCMDLIST_32: image = g_TvCmdlist32; break;
case TVCMDLIST_33: image = g_TvCmdlist33; break;
case TVCMDLIST_34: image = g_TvCmdlist34; break;
case TVCMDLIST_35: image = g_TvCmdlist35; break;
case TVCMDLIST_36: image = g_TvCmdlist36; break;
case TVCMDLIST_00:
break;
}
tvscreenSetCmdlist(screen, image);
}
void tvscreenSetTexture(struct tvscreen *screen, s32 texturenum)
{
screen->tconfig = (struct textureconfig *)texturenum;
}
GLOBAL_ASM(
glabel tvscreenRender
.late_rodata
glabel var7f1aa7cc
.word 0x40c907a9
glabel var7f1aa7d0
.word 0x38c907a9
glabel var7f1aa7d4
.word tvscreenRender+0xec # f07fce4
glabel var7f1aa7d8
.word tvscreenRender+0x100 # f07fcf8
glabel var7f1aa7dc
.word tvscreenRender+0x170 # f07fd68
glabel var7f1aa7e0
.word tvscreenRender+0x1e0 # f07fdd8
glabel var7f1aa7e4
.word tvscreenRender+0x24c # f07fe44
glabel var7f1aa7e8
.word tvscreenRender+0x2b8 # f07feb0
glabel var7f1aa7ec
.word tvscreenRender+0x324 # f07ff1c
glabel var7f1aa7f0
.word tvscreenRender+0x390 # f07ff88
glabel var7f1aa7f4
.word tvscreenRender+0x3bc # f07ffb4
glabel var7f1aa7f8
.word tvscreenRender+0x408 # f080000
glabel var7f1aa7fc
.word tvscreenRender+0x428 # f080020
glabel var7f1aa800
.word tvscreenRender+0x47c # f080074
glabel var7f1aa804
.word tvscreenRender+0x484 # f08007c
glabel var7f1aa808
.word tvscreenRender+0x48c # f080084
glabel var7f1aa80c
.word tvscreenRender+0x524 # f08011c
glabel var7f1aa810
.word tvscreenRender+0x548 # f080140
glabel var7f1aa814
.word 0x38c907a9
glabel var7f1aa818
.word 0x38c907a9
glabel var7f1aa81c
.word 0x38c907a9
glabel var7f1aa820
.word 0x3fc907a9
glabel var7f1aa824
.word 0x3fb50481
.text
/* f07fbf8: 27bdff48 */ addiu $sp,$sp,-184
/* f07fbfc: afb10048 */ sw $s1,0x48($sp)
/* f07fc00: afb00044 */ sw $s0,0x44($sp)
/* f07fc04: 00c08025 */ or $s0,$a2,$zero
/* f07fc08: 00a08825 */ or $s1,$a1,$zero
/* f07fc0c: afbf004c */ sw $ra,0x4c($sp)
/* f07fc10: f7ba0038 */ sdc1 $f26,0x38($sp)
/* f07fc14: f7b80030 */ sdc1 $f24,0x30($sp)
/* f07fc18: f7b60028 */ sdc1 $f22,0x28($sp)
/* f07fc1c: f7b40020 */ sdc1 $f20,0x20($sp)
/* f07fc20: afa400b8 */ sw $a0,0xb8($sp)
/* f07fc24: 10a0035d */ beqz $a1,.L0f08099c
/* f07fc28: afa700c4 */ sw $a3,0xc4($sp)
/* f07fc2c: 94ae0000 */ lhu $t6,0x0($a1)
/* f07fc30: 24010018 */ addiu $at,$zero,0x18
/* f07fc34: 31cf00ff */ andi $t7,$t6,0xff
/* f07fc38: 55e10359 */ bnel $t7,$at,.L0f0809a0
/* f07fc3c: 8fbf004c */ lw $ra,0x4c($sp)
/* f07fc40: 0fc59e59 */ jal gfxAllocateVertices
/* f07fc44: 24040004 */ addiu $a0,$zero,0x4
/* f07fc48: afa200b4 */ sw $v0,0xb4($sp)
/* f07fc4c: 0fc59e73 */ jal gfxAllocateColours
/* f07fc50: 24040001 */ addiu $a0,$zero,0x1
/* f07fc54: 8fb800c4 */ lw $t8,0xc4($sp)
/* f07fc58: afa200b0 */ sw $v0,0xb0($sp)
/* f07fc5c: 8fa400b8 */ lw $a0,0xb8($sp)
/* f07fc60: 27190008 */ addiu $t9,$t8,0x8
/* f07fc64: afb900c4 */ sw $t9,0xc4($sp)
/* f07fc68: afb800ac */ sw $t8,0xac($sp)
/* f07fc6c: 8e290004 */ lw $t1,0x4($s1)
/* f07fc70: 02202825 */ or $a1,$s1,$zero
/* f07fc74: 0c006a87 */ jal modelGetNodeRwData
/* f07fc78: afa900a8 */ sw $t1,0xa8($sp)
/* f07fc7c: 3c017f1b */ lui $at,%hi(var7f1aa7cc)
/* f07fc80: c43aa7cc */ lwc1 $f26,%lo(var7f1aa7cc)($at)
/* f07fc84: 3c013a80 */ lui $at,0x3a80
/* f07fc88: 4481c000 */ mtc1 $at,$f24
/* f07fc8c: 3c013f80 */ lui $at,0x3f80
/* f07fc90: 4481a000 */ mtc1 $at,$f20
/* f07fc94: 3c017f1b */ lui $at,%hi(var7f1aa7d0)
/* f07fc98: 3c06800a */ lui $a2,%hi(g_Vars)
/* f07fc9c: 4480b000 */ mtc1 $zero,$f22
/* f07fca0: afa200a4 */ sw $v0,0xa4($sp)
/* f07fca4: 00008825 */ or $s1,$zero,$zero
/* f07fca8: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars)
/* f07fcac: c422a7d0 */ lwc1 $f2,%lo(var7f1aa7d0)($at)
/* f07fcb0: 96020004 */ lhu $v0,0x4($s0)
.L0f07fcb4:
/* f07fcb4: 8e0a0000 */ lw $t2,0x0($s0)
/* f07fcb8: 00025880 */ sll $t3,$v0,0x2
/* f07fcbc: 014b1821 */ addu $v1,$t2,$t3
/* f07fcc0: 8c6c0000 */ lw $t4,0x0($v1)
/* f07fcc4: 2d810010 */ sltiu $at,$t4,0x10
/* f07fcc8: 10200139 */ beqz $at,.L0f0801b0
/* f07fccc: 000c6080 */ sll $t4,$t4,0x2
/* f07fcd0: 3c017f1b */ lui $at,%hi(var7f1aa7d4)
/* f07fcd4: 002c0821 */ addu $at,$at,$t4
/* f07fcd8: 8c2ca7d4 */ lw $t4,%lo(var7f1aa7d4)($at)
/* f07fcdc: 01800008 */ jr $t4
/* f07fce0: 00000000 */ nop
/* f07fce4: 244d0001 */ addiu $t5,$v0,0x1
/* f07fce8: e6160040 */ swc1 $f22,0x40($s0)
/* f07fcec: e6160054 */ swc1 $f22,0x54($s0)
/* f07fcf0: 1000012f */ b .L0f0801b0
/* f07fcf4: a60d0004 */ sh $t5,0x4($s0)
/* f07fcf8: e616003c */ swc1 $f22,0x3c($s0)
/* f07fcfc: 8c620008 */ lw $v0,0x8($v1)
/* f07fd00: 54400004 */ bnezl $v0,.L0f07fd14
/* f07fd04: 44822000 */ mtc1 $v0,$f4
/* f07fd08: 1000000a */ b .L0f07fd34
/* f07fd0c: e6140040 */ swc1 $f20,0x40($s0)
/* f07fd10: 44822000 */ mtc1 $v0,$f4
.L0f07fd14:
/* f07fd14: 3c014f80 */ lui $at,0x4f80
/* f07fd18: 04410004 */ bgez $v0,.L0f07fd2c
/* f07fd1c: 468021a0 */ cvt.s.w $f6,$f4
/* f07fd20: 44814000 */ mtc1 $at,$f8
/* f07fd24: 00000000 */ nop
/* f07fd28: 46083180 */ add.s $f6,$f6,$f8
.L0f07fd2c:
/* f07fd2c: 4606a283 */ div.s $f10,$f20,$f6
/* f07fd30: e60a0040 */ swc1 $f10,0x40($s0)
.L0f07fd34:
/* f07fd34: c6000038 */ lwc1 $f0,0x38($s0)
/* f07fd38: 960f0004 */ lhu $t7,0x4($s0)
/* f07fd3c: e6000044 */ swc1 $f0,0x44($s0)
/* f07fd40: 8c6e0004 */ lw $t6,0x4($v1)
/* f07fd44: 25f80003 */ addiu $t8,$t7,0x3
/* f07fd48: a6180004 */ sh $t8,0x4($s0)
/* f07fd4c: 448e9000 */ mtc1 $t6,$f18
/* f07fd50: 00000000 */ nop
/* f07fd54: 46809120 */ cvt.s.w $f4,$f18
/* f07fd58: 46182202 */ mul.s $f8,$f4,$f24
/* f07fd5c: 46080180 */ add.s $f6,$f0,$f8
/* f07fd60: 10000113 */ b .L0f0801b0
/* f07fd64: e6060048 */ swc1 $f6,0x48($s0)
/* f07fd68: e6160050 */ swc1 $f22,0x50($s0)
/* f07fd6c: 8c620008 */ lw $v0,0x8($v1)
/* f07fd70: 54400004 */ bnezl $v0,.L0f07fd84
/* f07fd74: 44825000 */ mtc1 $v0,$f10
/* f07fd78: 1000000a */ b .L0f07fda4
/* f07fd7c: e6140054 */ swc1 $f20,0x54($s0)
/* f07fd80: 44825000 */ mtc1 $v0,$f10
.L0f07fd84:
/* f07fd84: 3c014f80 */ lui $at,0x4f80
/* f07fd88: 04410004 */ bgez $v0,.L0f07fd9c
/* f07fd8c: 468054a0 */ cvt.s.w $f18,$f10
/* f07fd90: 44812000 */ mtc1 $at,$f4
/* f07fd94: 00000000 */ nop
/* f07fd98: 46049480 */ add.s $f18,$f18,$f4
.L0f07fd9c:
/* f07fd9c: 4612a203 */ div.s $f8,$f20,$f18
/* f07fda0: e6080054 */ swc1 $f8,0x54($s0)
.L0f07fda4:
/* f07fda4: c600004c */ lwc1 $f0,0x4c($s0)
/* f07fda8: 96090004 */ lhu $t1,0x4($s0)
/* f07fdac: e6000058 */ swc1 $f0,0x58($s0)
/* f07fdb0: 8c790004 */ lw $t9,0x4($v1)
/* f07fdb4: 252a0003 */ addiu $t2,$t1,0x3
/* f07fdb8: a60a0004 */ sh $t2,0x4($s0)
/* f07fdbc: 44993000 */ mtc1 $t9,$f6
/* f07fdc0: 00000000 */ nop
/* f07fdc4: 468032a0 */ cvt.s.w $f10,$f6
/* f07fdc8: 46185102 */ mul.s $f4,$f10,$f24
/* f07fdcc: 46040480 */ add.s $f18,$f0,$f4
/* f07fdd0: 100000f7 */ b .L0f0801b0
/* f07fdd4: e612005c */ swc1 $f18,0x5c($s0)
/* f07fdd8: e616003c */ swc1 $f22,0x3c($s0)
/* f07fddc: 8c620008 */ lw $v0,0x8($v1)
/* f07fde0: 54400004 */ bnezl $v0,.L0f07fdf4
/* f07fde4: 44824000 */ mtc1 $v0,$f8
/* f07fde8: 1000000a */ b .L0f07fe14
/* f07fdec: e6140040 */ swc1 $f20,0x40($s0)
/* f07fdf0: 44824000 */ mtc1 $v0,$f8
.L0f07fdf4:
/* f07fdf4: 3c014f80 */ lui $at,0x4f80
/* f07fdf8: 04410004 */ bgez $v0,.L0f07fe0c
/* f07fdfc: 468041a0 */ cvt.s.w $f6,$f8
/* f07fe00: 44815000 */ mtc1 $at,$f10
/* f07fe04: 00000000 */ nop
/* f07fe08: 460a3180 */ add.s $f6,$f6,$f10
.L0f07fe0c:
/* f07fe0c: 4606a103 */ div.s $f4,$f20,$f6
/* f07fe10: e6040040 */ swc1 $f4,0x40($s0)
.L0f07fe14:
/* f07fe14: c6120038 */ lwc1 $f18,0x38($s0)
/* f07fe18: 960c0004 */ lhu $t4,0x4($s0)
/* f07fe1c: e6120044 */ swc1 $f18,0x44($s0)
/* f07fe20: 8c6b0004 */ lw $t3,0x4($v1)
/* f07fe24: 258d0003 */ addiu $t5,$t4,0x3
/* f07fe28: a60d0004 */ sh $t5,0x4($s0)
/* f07fe2c: 448b4000 */ mtc1 $t3,$f8
/* f07fe30: 00000000 */ nop
/* f07fe34: 468042a0 */ cvt.s.w $f10,$f8
/* f07fe38: 46185182 */ mul.s $f6,$f10,$f24
/* f07fe3c: 100000dc */ b .L0f0801b0
/* f07fe40: e6060048 */ swc1 $f6,0x48($s0)
/* f07fe44: e6160050 */ swc1 $f22,0x50($s0)
/* f07fe48: 8c620008 */ lw $v0,0x8($v1)
/* f07fe4c: 54400004 */ bnezl $v0,.L0f07fe60
/* f07fe50: 44822000 */ mtc1 $v0,$f4
/* f07fe54: 1000000a */ b .L0f07fe80
/* f07fe58: e6140054 */ swc1 $f20,0x54($s0)
/* f07fe5c: 44822000 */ mtc1 $v0,$f4
.L0f07fe60:
/* f07fe60: 3c014f80 */ lui $at,0x4f80
/* f07fe64: 04410004 */ bgez $v0,.L0f07fe78
/* f07fe68: 468024a0 */ cvt.s.w $f18,$f4
/* f07fe6c: 44814000 */ mtc1 $at,$f8
/* f07fe70: 00000000 */ nop
/* f07fe74: 46089480 */ add.s $f18,$f18,$f8
.L0f07fe78:
/* f07fe78: 4612a283 */ div.s $f10,$f20,$f18
/* f07fe7c: e60a0054 */ swc1 $f10,0x54($s0)
.L0f07fe80:
/* f07fe80: c606004c */ lwc1 $f6,0x4c($s0)
/* f07fe84: 960f0004 */ lhu $t7,0x4($s0)
/* f07fe88: e6060058 */ swc1 $f6,0x58($s0)
/* f07fe8c: 8c6e0004 */ lw $t6,0x4($v1)
/* f07fe90: 25f80003 */ addiu $t8,$t7,0x3
/* f07fe94: a6180004 */ sh $t8,0x4($s0)
/* f07fe98: 448e2000 */ mtc1 $t6,$f4
/* f07fe9c: 00000000 */ nop
/* f07fea0: 46802220 */ cvt.s.w $f8,$f4
/* f07fea4: 46184482 */ mul.s $f18,$f8,$f24
/* f07fea8: 100000c1 */ b .L0f0801b0
/* f07feac: e612005c */ swc1 $f18,0x5c($s0)
/* f07feb0: e6160014 */ swc1 $f22,0x14($s0)
/* f07feb4: 8c620008 */ lw $v0,0x8($v1)
/* f07feb8: 54400004 */ bnezl $v0,.L0f07fecc
/* f07febc: 44825000 */ mtc1 $v0,$f10
/* f07fec0: 1000000a */ b .L0f07feec
/* f07fec4: e6140018 */ swc1 $f20,0x18($s0)
/* f07fec8: 44825000 */ mtc1 $v0,$f10
.L0f07fecc:
/* f07fecc: 3c014f80 */ lui $at,0x4f80
/* f07fed0: 04410004 */ bgez $v0,.L0f07fee4
/* f07fed4: 468051a0 */ cvt.s.w $f6,$f10
/* f07fed8: 44812000 */ mtc1 $at,$f4
/* f07fedc: 00000000 */ nop
/* f07fee0: 46043180 */ add.s $f6,$f6,$f4
.L0f07fee4:
/* f07fee4: 4606a203 */ div.s $f8,$f20,$f6
/* f07fee8: e6080018 */ swc1 $f8,0x18($s0)
.L0f07feec:
/* f07feec: c6120010 */ lwc1 $f18,0x10($s0)
/* f07fef0: 96090004 */ lhu $t1,0x4($s0)
/* f07fef4: e612001c */ swc1 $f18,0x1c($s0)
/* f07fef8: 8c790004 */ lw $t9,0x4($v1)
/* f07fefc: 252a0003 */ addiu $t2,$t1,0x3
/* f07ff00: a60a0004 */ sh $t2,0x4($s0)
/* f07ff04: 44995000 */ mtc1 $t9,$f10
/* f07ff08: 00000000 */ nop
/* f07ff0c: 46805120 */ cvt.s.w $f4,$f10
/* f07ff10: 46182182 */ mul.s $f6,$f4,$f24
/* f07ff14: 100000a6 */ b .L0f0801b0
/* f07ff18: e6060020 */ swc1 $f6,0x20($s0)
/* f07ff1c: e6160028 */ swc1 $f22,0x28($s0)
/* f07ff20: 8c620008 */ lw $v0,0x8($v1)
/* f07ff24: 54400004 */ bnezl $v0,.L0f07ff38
/* f07ff28: 44824000 */ mtc1 $v0,$f8
/* f07ff2c: 1000000a */ b .L0f07ff58
/* f07ff30: e614002c */ swc1 $f20,0x2c($s0)
/* f07ff34: 44824000 */ mtc1 $v0,$f8
.L0f07ff38:
/* f07ff38: 3c014f80 */ lui $at,0x4f80
/* f07ff3c: 04410004 */ bgez $v0,.L0f07ff50
/* f07ff40: 468044a0 */ cvt.s.w $f18,$f8
/* f07ff44: 44815000 */ mtc1 $at,$f10
/* f07ff48: 00000000 */ nop
/* f07ff4c: 460a9480 */ add.s $f18,$f18,$f10
.L0f07ff50:
/* f07ff50: 4612a103 */ div.s $f4,$f20,$f18
/* f07ff54: e604002c */ swc1 $f4,0x2c($s0)
.L0f07ff58:
/* f07ff58: c6060024 */ lwc1 $f6,0x24($s0)
/* f07ff5c: 960c0004 */ lhu $t4,0x4($s0)
/* f07ff60: e6060030 */ swc1 $f6,0x30($s0)
/* f07ff64: 8c6b0004 */ lw $t3,0x4($v1)
/* f07ff68: 258d0003 */ addiu $t5,$t4,0x3
/* f07ff6c: a60d0004 */ sh $t5,0x4($s0)
/* f07ff70: 448b4000 */ mtc1 $t3,$f8
/* f07ff74: 00000000 */ nop
/* f07ff78: 468042a0 */ cvt.s.w $f10,$f8
/* f07ff7c: 46185482 */ mul.s $f18,$f10,$f24
/* f07ff80: 1000008b */ b .L0f0801b0
/* f07ff84: e6120034 */ swc1 $f18,0x34($s0)
/* f07ff88: 02002025 */ or $a0,$s0,$zero
/* f07ff8c: 0fc1fefc */ jal tvscreenSetTexture
/* f07ff90: 8c650004 */ lw $a1,0x4($v1)
/* f07ff94: 960e0004 */ lhu $t6,0x4($s0)
/* f07ff98: 3c017f1b */ lui $at,%hi(var7f1aa814)
/* f07ff9c: 3c06800a */ lui $a2,%hi(g_Vars)
/* f07ffa0: 25cf0002 */ addiu $t7,$t6,0x2
/* f07ffa4: a60f0004 */ sh $t7,0x4($s0)
/* f07ffa8: c422a814 */ lwc1 $f2,%lo(var7f1aa814)($at)
/* f07ffac: 10000080 */ b .L0f0801b0
/* f07ffb0: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars)
/* f07ffb4: 86020006 */ lh $v0,0x6($s0)
/* f07ffb8: 0442000e */ bltzl $v0,.L0f07fff4
/* f07ffbc: 8c6c0004 */ lw $t4,0x4($v1)
/* f07ffc0: 8cd80038 */ lw $t8,0x38($a2)
/* f07ffc4: 0058c823 */ subu $t9,$v0,$t8
/* f07ffc8: a6190006 */ sh $t9,0x6($s0)
/* f07ffcc: 86090006 */ lh $t1,0x6($s0)
/* f07ffd0: 05220004 */ bltzl $t1,.L0f07ffe4
/* f07ffd4: 960a0004 */ lhu $t2,0x4($s0)
/* f07ffd8: 10000075 */ b .L0f0801b0
/* f07ffdc: 24110001 */ addiu $s1,$zero,0x1
/* f07ffe0: 960a0004 */ lhu $t2,0x4($s0)
.L0f07ffe4:
/* f07ffe4: 254b0002 */ addiu $t3,$t2,0x2
/* f07ffe8: 10000071 */ b .L0f0801b0
/* f07ffec: a60b0004 */ sh $t3,0x4($s0)
/* f07fff0: 8c6c0004 */ lw $t4,0x4($v1)
.L0f07fff4:
/* f07fff4: 24110001 */ addiu $s1,$zero,0x1
/* f07fff8: 1000006d */ b .L0f0801b0
/* f07fffc: a60c0006 */ sh $t4,0x6($s0)
/* f080000: 02002025 */ or $a0,$s0,$zero
/* f080004: 0fc1fe46 */ jal tvscreenSetCmdlist
/* f080008: 8c650004 */ lw $a1,0x4($v1)
/* f08000c: 3c017f1b */ lui $at,%hi(var7f1aa818)
/* f080010: 3c06800a */ lui $a2,%hi(g_Vars)
/* f080014: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars)
/* f080018: 10000065 */ b .L0f0801b0
/* f08001c: c422a818 */ lwc1 $f2,%lo(var7f1aa818)($at)
/* f080020: 0c004b70 */ jal random
/* f080024: afa30098 */ sw $v1,0x98($sp)
/* f080028: 8fa30098 */ lw $v1,0x98($sp)
/* f08002c: 00026c02 */ srl $t5,$v0,0x10
/* f080030: 02002025 */ or $a0,$s0,$zero
/* f080034: 8c6e0008 */ lw $t6,0x8($v1)
/* f080038: 01ae082b */ sltu $at,$t5,$t6
/* f08003c: 50200006 */ beqzl $at,.L0f080058
/* f080040: 960f0004 */ lhu $t7,0x4($s0)
/* f080044: 0fc1fe46 */ jal tvscreenSetCmdlist
/* f080048: 8c650004 */ lw $a1,0x4($v1)
/* f08004c: 10000004 */ b .L0f080060
/* f080050: 00000000 */ nop
/* f080054: 960f0004 */ lhu $t7,0x4($s0)
.L0f080058:
/* f080058: 25f80003 */ addiu $t8,$t7,0x3
/* f08005c: a6180004 */ sh $t8,0x4($s0)
.L0f080060:
/* f080060: 3c017f1b */ lui $at,%hi(var7f1aa81c)
/* f080064: 3c06800a */ lui $a2,%hi(g_Vars)
/* f080068: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars)
/* f08006c: 10000050 */ b .L0f0801b0
/* f080070: c422a81c */ lwc1 $f2,%lo(var7f1aa81c)($at)
/* f080074: 1000004e */ b .L0f0801b0
/* f080078: a6000004 */ sh $zero,0x4($s0)
/* f08007c: 1000004c */ b .L0f0801b0
/* f080080: 24110001 */ addiu $s1,$zero,0x1
/* f080084: e616006c */ swc1 $f22,0x6c($s0)
/* f080088: 8c620008 */ lw $v0,0x8($v1)
/* f08008c: 54400004 */ bnezl $v0,.L0f0800a0
/* f080090: 44822000 */ mtc1 $v0,$f4
/* f080094: 1000000a */ b .L0f0800c0
/* f080098: e6140070 */ swc1 $f20,0x70($s0)
/* f08009c: 44822000 */ mtc1 $v0,$f4
.L0f0800a0:
/* f0800a0: 3c014f80 */ lui $at,0x4f80
/* f0800a4: 04410004 */ bgez $v0,.L0f0800b8
/* f0800a8: 468021a0 */ cvt.s.w $f6,$f4
/* f0800ac: 44814000 */ mtc1 $at,$f8
/* f0800b0: 00000000 */ nop
/* f0800b4: 46083180 */ add.s $f6,$f6,$f8
.L0f0800b8:
/* f0800b8: 4606a283 */ div.s $f10,$f20,$f6
/* f0800bc: e60a0070 */ swc1 $f10,0x70($s0)
.L0f0800c0:
/* f0800c0: 92190060 */ lbu $t9,0x60($s0)
/* f0800c4: 920c0063 */ lbu $t4,0x63($s0)
/* f0800c8: 92180066 */ lbu $t8,0x66($s0)
/* f0800cc: a2190061 */ sb $t9,0x61($s0)
/* f0800d0: 8c690004 */ lw $t1,0x4($v1)
/* f0800d4: a20c0064 */ sb $t4,0x64($s0)
/* f0800d8: 960e0004 */ lhu $t6,0x4($s0)
/* f0800dc: 00095e02 */ srl $t3,$t1,0x18
/* f0800e0: a20b0062 */ sb $t3,0x62($s0)
/* f0800e4: 8c6d0004 */ lw $t5,0x4($v1)
/* f0800e8: a2180067 */ sb $t8,0x67($s0)
/* f0800ec: 920b0069 */ lbu $t3,0x69($s0)
/* f0800f0: 000d7c02 */ srl $t7,$t5,0x10
/* f0800f4: a20f0065 */ sb $t7,0x65($s0)
/* f0800f8: 8c790004 */ lw $t9,0x4($v1)
/* f0800fc: a20b006a */ sb $t3,0x6a($s0)
/* f080100: 25cf0003 */ addiu $t7,$t6,0x3
/* f080104: 00195202 */ srl $t2,$t9,0x8
/* f080108: a20a0068 */ sb $t2,0x68($s0)
/* f08010c: 8c6d0004 */ lw $t5,0x4($v1)
/* f080110: a60f0004 */ sh $t7,0x4($s0)
/* f080114: 10000026 */ b .L0f0801b0
/* f080118: a20d006b */ sb $t5,0x6b($s0)
/* f08011c: 8c780004 */ lw $t8,0x4($v1)
/* f080120: 24590002 */ addiu $t9,$v0,0x2
/* f080124: a6190004 */ sh $t9,0x4($s0)
/* f080128: 44989000 */ mtc1 $t8,$f18
/* f08012c: 00000000 */ nop
/* f080130: 46809120 */ cvt.s.w $f4,$f18
/* f080134: 46022202 */ mul.s $f8,$f4,$f2
/* f080138: 1000001d */ b .L0f0801b0
/* f08013c: e608000c */ swc1 $f8,0xc($s0)
/* f080140: 8c690004 */ lw $t1,0x4($v1)
/* f080144: c4c60044 */ lwc1 $f6,0x44($a2)
/* f080148: 44895000 */ mtc1 $t1,$f10
/* f08014c: 00000000 */ nop
/* f080150: 468054a0 */ cvt.s.w $f18,$f10
/* f080154: c60a000c */ lwc1 $f10,0xc($s0)
/* f080158: 46123102 */ mul.s $f4,$f6,$f18
/* f08015c: 00000000 */ nop
/* f080160: 46022202 */ mul.s $f8,$f4,$f2
/* f080164: 46085180 */ add.s $f6,$f10,$f8
/* f080168: e606000c */ swc1 $f6,0xc($s0)
/* f08016c: c60c000c */ lwc1 $f12,0xc($s0)
/* f080170: 460cd03e */ c.le.s $f26,$f12
/* f080174: 00000000 */ nop
/* f080178: 45000004 */ bc1f .L0f08018c
/* f08017c: 00000000 */ nop
/* f080180: 461a6481 */ sub.s $f18,$f12,$f26
/* f080184: e612000c */ swc1 $f18,0xc($s0)
/* f080188: c60c000c */ lwc1 $f12,0xc($s0)
.L0f08018c:
/* f08018c: 4616603c */ c.lt.s $f12,$f22
/* f080190: 00000000 */ nop
/* f080194: 45020004 */ bc1fl .L0f0801a8
/* f080198: 960a0004 */ lhu $t2,0x4($s0)
/* f08019c: 461a6100 */ add.s $f4,$f12,$f26
/* f0801a0: e604000c */ swc1 $f4,0xc($s0)
/* f0801a4: 960a0004 */ lhu $t2,0x4($s0)
.L0f0801a8:
/* f0801a8: 254b0002 */ addiu $t3,$t2,0x2
/* f0801ac: a60b0004 */ sh $t3,0x4($s0)
.L0f0801b0:
/* f0801b0: 5220fec0 */ beqzl $s1,.L0f07fcb4
/* f0801b4: 96020004 */ lhu $v0,0x4($s0)
/* f0801b8: c6000018 */ lwc1 $f0,0x18($s0)
/* f0801bc: 4600b03c */ c.lt.s $f22,$f0
/* f0801c0: 00000000 */ nop
/* f0801c4: 45000017 */ bc1f .L0f080224
/* f0801c8: 3c02800a */ lui $v0,%hi(g_Vars)
/* f0801cc: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f0801d0: c4480044 */ lwc1 $f8,0x44($v0)
/* f0801d4: c60a0014 */ lwc1 $f10,0x14($s0)
/* f0801d8: 46080182 */ mul.s $f6,$f0,$f8
/* f0801dc: 46065480 */ add.s $f18,$f10,$f6
/* f0801e0: e6120014 */ swc1 $f18,0x14($s0)
/* f0801e4: c6020014 */ lwc1 $f2,0x14($s0)
/* f0801e8: 4614103c */ c.lt.s $f2,$f20
/* f0801ec: 00000000 */ nop
/* f0801f0: 45020009 */ bc1fl .L0f080218
/* f0801f4: c6120020 */ lwc1 $f18,0x20($s0)
/* f0801f8: c600001c */ lwc1 $f0,0x1c($s0)
/* f0801fc: c6040020 */ lwc1 $f4,0x20($s0)
/* f080200: 46002201 */ sub.s $f8,$f4,$f0
/* f080204: 46024282 */ mul.s $f10,$f8,$f2
/* f080208: 460a0180 */ add.s $f6,$f0,$f10
/* f08020c: 10000005 */ b .L0f080224
/* f080210: e6060010 */ swc1 $f6,0x10($s0)
/* f080214: c6120020 */ lwc1 $f18,0x20($s0)
.L0f080218:
/* f080218: e6140014 */ swc1 $f20,0x14($s0)
/* f08021c: e6160018 */ swc1 $f22,0x18($s0)
/* f080220: e6120010 */ swc1 $f18,0x10($s0)
.L0f080224:
/* f080224: c600002c */ lwc1 $f0,0x2c($s0)
/* f080228: 3c02800a */ lui $v0,%hi(g_Vars)
/* f08022c: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f080230: 4600b03c */ c.lt.s $f22,$f0
/* f080234: 00000000 */ nop
/* f080238: 45020017 */ bc1fl .L0f080298
/* f08023c: c6000040 */ lwc1 $f0,0x40($s0)
/* f080240: c4480044 */ lwc1 $f8,0x44($v0)
/* f080244: c6040028 */ lwc1 $f4,0x28($s0)
/* f080248: 46080282 */ mul.s $f10,$f0,$f8
/* f08024c: 460a2180 */ add.s $f6,$f4,$f10
/* f080250: e6060028 */ swc1 $f6,0x28($s0)
/* f080254: c6020028 */ lwc1 $f2,0x28($s0)
/* f080258: 4614103c */ c.lt.s $f2,$f20
/* f08025c: 00000000 */ nop
/* f080260: 45020009 */ bc1fl .L0f080288
/* f080264: c6060034 */ lwc1 $f6,0x34($s0)
/* f080268: c6000030 */ lwc1 $f0,0x30($s0)
/* f08026c: c6120034 */ lwc1 $f18,0x34($s0)
/* f080270: 46009201 */ sub.s $f8,$f18,$f0
/* f080274: 46024102 */ mul.s $f4,$f8,$f2
/* f080278: 46040280 */ add.s $f10,$f0,$f4
/* f08027c: 10000005 */ b .L0f080294
/* f080280: e60a0024 */ swc1 $f10,0x24($s0)
/* f080284: c6060034 */ lwc1 $f6,0x34($s0)
.L0f080288:
/* f080288: e6140028 */ swc1 $f20,0x28($s0)
/* f08028c: e616002c */ swc1 $f22,0x2c($s0)
/* f080290: e6060024 */ swc1 $f6,0x24($s0)
.L0f080294:
/* f080294: c6000040 */ lwc1 $f0,0x40($s0)
.L0f080298:
/* f080298: 4600b03c */ c.lt.s $f22,$f0
/* f08029c: 00000000 */ nop
/* f0802a0: 45020017 */ bc1fl .L0f080300
/* f0802a4: c6000054 */ lwc1 $f0,0x54($s0)
/* f0802a8: c4480044 */ lwc1 $f8,0x44($v0)
/* f0802ac: c612003c */ lwc1 $f18,0x3c($s0)
/* f0802b0: 46080102 */ mul.s $f4,$f0,$f8
/* f0802b4: 46049280 */ add.s $f10,$f18,$f4
/* f0802b8: e60a003c */ swc1 $f10,0x3c($s0)
/* f0802bc: c602003c */ lwc1 $f2,0x3c($s0)
/* f0802c0: 4614103c */ c.lt.s $f2,$f20
/* f0802c4: 00000000 */ nop
/* f0802c8: 45020009 */ bc1fl .L0f0802f0
/* f0802cc: c60a0048 */ lwc1 $f10,0x48($s0)
/* f0802d0: c6000044 */ lwc1 $f0,0x44($s0)
/* f0802d4: c6060048 */ lwc1 $f6,0x48($s0)
/* f0802d8: 46003201 */ sub.s $f8,$f6,$f0
/* f0802dc: 46024482 */ mul.s $f18,$f8,$f2
/* f0802e0: 46120100 */ add.s $f4,$f0,$f18
/* f0802e4: 10000005 */ b .L0f0802fc
/* f0802e8: e6040038 */ swc1 $f4,0x38($s0)
/* f0802ec: c60a0048 */ lwc1 $f10,0x48($s0)
.L0f0802f0:
/* f0802f0: e614003c */ swc1 $f20,0x3c($s0)
/* f0802f4: e6160040 */ swc1 $f22,0x40($s0)
/* f0802f8: e60a0038 */ swc1 $f10,0x38($s0)
.L0f0802fc:
/* f0802fc: c6000054 */ lwc1 $f0,0x54($s0)
.L0f080300:
/* f080300: 4600b03c */ c.lt.s $f22,$f0
/* f080304: 00000000 */ nop
/* f080308: 45020017 */ bc1fl .L0f080368
/* f08030c: c6020070 */ lwc1 $f2,0x70($s0)
/* f080310: c4480044 */ lwc1 $f8,0x44($v0)
/* f080314: c6060050 */ lwc1 $f6,0x50($s0)
/* f080318: 46080482 */ mul.s $f18,$f0,$f8
/* f08031c: 46123100 */ add.s $f4,$f6,$f18
/* f080320: e6040050 */ swc1 $f4,0x50($s0)
/* f080324: c6020050 */ lwc1 $f2,0x50($s0)
/* f080328: 4614103c */ c.lt.s $f2,$f20
/* f08032c: 00000000 */ nop
/* f080330: 45020009 */ bc1fl .L0f080358
/* f080334: c604005c */ lwc1 $f4,0x5c($s0)
/* f080338: c6000058 */ lwc1 $f0,0x58($s0)
/* f08033c: c60a005c */ lwc1 $f10,0x5c($s0)
/* f080340: 46005201 */ sub.s $f8,$f10,$f0
/* f080344: 46024182 */ mul.s $f6,$f8,$f2
/* f080348: 46060480 */ add.s $f18,$f0,$f6
/* f08034c: 10000005 */ b .L0f080364
/* f080350: e612004c */ swc1 $f18,0x4c($s0)
/* f080354: c604005c */ lwc1 $f4,0x5c($s0)
.L0f080358:
/* f080358: e6140050 */ swc1 $f20,0x50($s0)
/* f08035c: e6160054 */ swc1 $f22,0x54($s0)
/* f080360: e604004c */ swc1 $f4,0x4c($s0)
.L0f080364:
/* f080364: c6020070 */ lwc1 $f2,0x70($s0)
.L0f080368:
/* f080368: 4602b03c */ c.lt.s $f22,$f2
/* f08036c: 00000000 */ nop
/* f080370: 4502003f */ bc1fl .L0f080470
/* f080374: 8faa00a4 */ lw $t2,0xa4($sp)
/* f080378: c4480044 */ lwc1 $f8,0x44($v0)
/* f08037c: c60a006c */ lwc1 $f10,0x6c($s0)
/* f080380: 46081182 */ mul.s $f6,$f2,$f8
/* f080384: 46065480 */ add.s $f18,$f10,$f6
/* f080388: e612006c */ swc1 $f18,0x6c($s0)
/* f08038c: c600006c */ lwc1 $f0,0x6c($s0)
/* f080390: 4614003c */ c.lt.s $f0,$f20
/* f080394: 00000000 */ nop
/* f080398: 4502002b */ bc1fl .L0f080448
/* f08039c: 920e0062 */ lbu $t6,0x62($s0)
/* f0803a0: 92020061 */ lbu $v0,0x61($s0)
/* f0803a4: 920c0062 */ lbu $t4,0x62($s0)
/* f0803a8: 92030064 */ lbu $v1,0x64($s0)
/* f0803ac: 92190065 */ lbu $t9,0x65($s0)
/* f0803b0: 01826823 */ subu $t5,$t4,$v0
/* f0803b4: 448d2000 */ mtc1 $t5,$f4
/* f0803b8: 03234823 */ subu $t1,$t9,$v1
/* f0803bc: 44899000 */ mtc1 $t1,$f18
/* f0803c0: 46802220 */ cvt.s.w $f8,$f4
/* f0803c4: 920d0068 */ lbu $t5,0x68($s0)
/* f0803c8: 92040067 */ lbu $a0,0x67($s0)
/* f0803cc: 9209006b */ lbu $t1,0x6b($s0)
/* f0803d0: 9205006a */ lbu $a1,0x6a($s0)
/* f0803d4: 46809120 */ cvt.s.w $f4,$f18
/* f0803d8: 46004282 */ mul.s $f10,$f8,$f0
/* f0803dc: 01a47023 */ subu $t6,$t5,$a0
/* f0803e0: 01255023 */ subu $t2,$t1,$a1
/* f0803e4: 46002202 */ mul.s $f8,$f4,$f0
/* f0803e8: 4600518d */ trunc.w.s $f6,$f10
/* f0803ec: 4600428d */ trunc.w.s $f10,$f8
/* f0803f0: 440f3000 */ mfc1 $t7,$f6
/* f0803f4: 448e3000 */ mtc1 $t6,$f6
/* f0803f8: 440b5000 */ mfc1 $t3,$f10
/* f0803fc: 468034a0 */ cvt.s.w $f18,$f6
/* f080400: 448a5000 */ mtc1 $t2,$f10
/* f080404: 004fc021 */ addu $t8,$v0,$t7
/* f080408: 006b6021 */ addu $t4,$v1,$t3
/* f08040c: a2180060 */ sb $t8,0x60($s0)
/* f080410: 468051a0 */ cvt.s.w $f6,$f10
/* f080414: 46009102 */ mul.s $f4,$f18,$f0
/* f080418: a20c0063 */ sb $t4,0x63($s0)
/* f08041c: 46003482 */ mul.s $f18,$f6,$f0
/* f080420: 4600220d */ trunc.w.s $f8,$f4
/* f080424: 4600910d */ trunc.w.s $f4,$f18
/* f080428: 44184000 */ mfc1 $t8,$f8
/* f08042c: 440c2000 */ mfc1 $t4,$f4
/* f080430: 0098c821 */ addu $t9,$a0,$t8
/* f080434: a2190066 */ sb $t9,0x66($s0)
/* f080438: 00ac6821 */ addu $t5,$a1,$t4
/* f08043c: 1000000b */ b .L0f08046c
/* f080440: a20d0069 */ sb $t5,0x69($s0)
/* f080444: 920e0062 */ lbu $t6,0x62($s0)
.L0f080448:
/* f080448: 920f0065 */ lbu $t7,0x65($s0)
/* f08044c: 92180068 */ lbu $t8,0x68($s0)
/* f080450: 9219006b */ lbu $t9,0x6b($s0)
/* f080454: e614006c */ swc1 $f20,0x6c($s0)
/* f080458: e6160070 */ swc1 $f22,0x70($s0)
/* f08045c: a20e0060 */ sb $t6,0x60($s0)
/* f080460: a20f0063 */ sb $t7,0x63($s0)
/* f080464: a2180066 */ sb $t8,0x66($s0)
/* f080468: a2190069 */ sb $t9,0x69($s0)
.L0f08046c:
/* f08046c: 8faa00a4 */ lw $t2,0xa4($sp)
.L0f080470:
/* f080470: 8fa400a8 */ lw $a0,0xa8($sp)
/* f080474: 8fa300b4 */ lw $v1,0xb4($sp)
/* f080478: 8fa800b0 */ lw $t0,0xb0($sp)
/* f08047c: 8fa900c4 */ lw $t1,0xc4($sp)
/* f080480: ad430000 */ sw $v1,0x0($t2)
/* f080484: ad480008 */ sw $t0,0x8($t2)
/* f080488: ad490004 */ sw $t1,0x4($t2)
/* f08048c: 8c8b000c */ lw $t3,0xc($a0)
/* f080490: 89610000 */ lwl $at,0x0($t3)
/* f080494: 99610003 */ lwr $at,0x3($t3)
/* f080498: a8610000 */ swl $at,0x0($v1)
/* f08049c: b8610003 */ swr $at,0x3($v1)
/* f0804a0: 896d0004 */ lwl $t5,0x4($t3)
/* f0804a4: 996d0007 */ lwr $t5,0x7($t3)
/* f0804a8: a86d0004 */ swl $t5,0x4($v1)
/* f0804ac: b86d0007 */ swr $t5,0x7($v1)
/* f0804b0: 89610008 */ lwl $at,0x8($t3)
/* f0804b4: 9961000b */ lwr $at,0xb($t3)
/* f0804b8: a8610008 */ swl $at,0x8($v1)
/* f0804bc: b861000b */ swr $at,0xb($v1)
/* f0804c0: 8c8e000c */ lw $t6,0xc($a0)
/* f0804c4: 89c1000c */ lwl $at,0xc($t6)
/* f0804c8: 99c1000f */ lwr $at,0xf($t6)
/* f0804cc: a861000c */ swl $at,0xc($v1)
/* f0804d0: b861000f */ swr $at,0xf($v1)
/* f0804d4: 89d80010 */ lwl $t8,0x10($t6)
/* f0804d8: 99d80013 */ lwr $t8,0x13($t6)
/* f0804dc: a8780010 */ swl $t8,0x10($v1)
/* f0804e0: b8780013 */ swr $t8,0x13($v1)
/* f0804e4: 89c10014 */ lwl $at,0x14($t6)
/* f0804e8: 99c10017 */ lwr $at,0x17($t6)
/* f0804ec: 3c0e800b */ lui $t6,%hi(g_TexScreenConfigs)
/* f0804f0: a8610014 */ swl $at,0x14($v1)
/* f0804f4: b8610017 */ swr $at,0x17($v1)
/* f0804f8: 8c99000c */ lw $t9,0xc($a0)
/* f0804fc: 8b210018 */ lwl $at,0x18($t9)
/* f080500: 9b21001b */ lwr $at,0x1b($t9)
/* f080504: a8610018 */ swl $at,0x18($v1)
/* f080508: b861001b */ swr $at,0x1b($v1)
/* f08050c: 8b2a001c */ lwl $t2,0x1c($t9)
/* f080510: 9b2a001f */ lwr $t2,0x1f($t9)
/* f080514: a86a001c */ swl $t2,0x1c($v1)
/* f080518: b86a001f */ swr $t2,0x1f($v1)
/* f08051c: 8b210020 */ lwl $at,0x20($t9)
/* f080520: 9b210023 */ lwr $at,0x23($t9)
/* f080524: a8610020 */ swl $at,0x20($v1)
/* f080528: b8610023 */ swr $at,0x23($v1)
/* f08052c: 8c8c000c */ lw $t4,0xc($a0)
/* f080530: 89810024 */ lwl $at,0x24($t4)
/* f080534: 99810027 */ lwr $at,0x27($t4)
/* f080538: a8610024 */ swl $at,0x24($v1)
/* f08053c: b8610027 */ swr $at,0x27($v1)
/* f080540: 898d0028 */ lwl $t5,0x28($t4)
/* f080544: 998d002b */ lwr $t5,0x2b($t4)
/* f080548: a86d0028 */ swl $t5,0x28($v1)
/* f08054c: b86d002b */ swr $t5,0x2b($v1)
/* f080550: 8981002c */ lwl $at,0x2c($t4)
/* f080554: 9981002f */ lwr $at,0x2f($t4)
/* f080558: a861002c */ swl $at,0x2c($v1)
/* f08055c: b861002f */ swr $at,0x2f($v1)
/* f080560: 8e020008 */ lw $v0,0x8($s0)
/* f080564: 2c410064 */ sltiu $at,$v0,0x64
/* f080568: 10200007 */ beqz $at,.L0f080588
/* f08056c: 00408825 */ or $s1,$v0,$zero
/* f080570: 00027880 */ sll $t7,$v0,0x2
/* f080574: 8dceb594 */ lw $t6,%lo(g_TexScreenConfigs)($t6)
/* f080578: 01e27823 */ subu $t7,$t7,$v0
/* f08057c: 000f7880 */ sll $t7,$t7,0x2
/* f080580: 10000001 */ b .L0f080588
/* f080584: 01ee8821 */ addu $s1,$t7,$t6
.L0f080588:
/* f080588: 122000aa */ beqz $s1,.L0f080834
/* f08058c: 3c013f00 */ lui $at,0x3f00
/* f080590: 44810000 */ mtc1 $at,$f0
/* f080594: c6080010 */ lwc1 $f8,0x10($s0)
/* f080598: c60a0024 */ lwc1 $f10,0x24($s0)
/* f08059c: c60c000c */ lwc1 $f12,0xc($s0)
/* f0805a0: 46004502 */ mul.s $f20,$f8,$f0
/* f0805a4: 460cb032 */ c.eq.s $f22,$f12
/* f0805a8: 46005602 */ mul.s $f24,$f10,$f0
/* f0805ac: 4600a386 */ mov.s $f14,$f20
/* f0805b0: 45010016 */ bc1t .L0f08060c
/* f0805b4: 4600c406 */ mov.s $f16,$f24
/* f0805b8: e7ae0058 */ swc1 $f14,0x58($sp)
/* f0805bc: 0c0068f4 */ jal cosf
/* f0805c0: e7b00054 */ swc1 $f16,0x54($sp)
/* f0805c4: 3c017f1b */ lui $at,%hi(var7f1aa824)
/* f0805c8: c43aa824 */ lwc1 $f26,%lo(var7f1aa824)($at)
/* f0805cc: c60c000c */ lwc1 $f12,0xc($s0)
/* f0805d0: 461a0582 */ mul.s $f22,$f0,$f26
/* f0805d4: 0c0068f7 */ jal sinf
/* f0805d8: 00000000 */ nop
/* f0805dc: 4616a502 */ mul.s $f20,$f20,$f22
/* f0805e0: c7ae0058 */ lwc1 $f14,0x58($sp)
/* f0805e4: c7b00054 */ lwc1 $f16,0x54($sp)
/* f0805e8: 461a0082 */ mul.s $f2,$f0,$f26
/* f0805ec: 8fa800b0 */ lw $t0,0xb0($sp)
/* f0805f0: 8fa300b4 */ lw $v1,0xb4($sp)
/* f0805f4: 4602c602 */ mul.s $f24,$f24,$f2
/* f0805f8: 00000000 */ nop
/* f0805fc: 46027382 */ mul.s $f14,$f14,$f2
/* f080600: 00000000 */ nop
/* f080604: 46168402 */ mul.s $f16,$f16,$f22
/* f080608: 00000000 */ nop
.L0f08060c:
/* f08060c: 92380004 */ lbu $t8,0x4($s1)
/* f080610: 3c014200 */ lui $at,0x4200
/* f080614: 44810000 */ mtc1 $at,$f0
/* f080618: 44989000 */ mtc1 $t8,$f18
/* f08061c: 3c014f80 */ lui $at,0x4f80
/* f080620: 07010004 */ bgez $t8,.L0f080634
/* f080624: 46809120 */ cvt.s.w $f4,$f18
/* f080628: 44814000 */ mtc1 $at,$f8
/* f08062c: 00000000 */ nop
/* f080630: 46082100 */ add.s $f4,$f4,$f8
.L0f080634:
/* f080634: c60a0038 */ lwc1 $f10,0x38($s0)
/* f080638: 3c014f80 */ lui $at,0x4f80
/* f08063c: 46145180 */ add.s $f6,$f10,$f20
/* f080640: 46062482 */ mul.s $f18,$f4,$f6
/* f080644: 00000000 */ nop
/* f080648: 46009202 */ mul.s $f8,$f18,$f0
/* f08064c: 4600428d */ trunc.w.s $f10,$f8
/* f080650: 44195000 */ mfc1 $t9,$f10
/* f080654: 00000000 */ nop
/* f080658: a4790008 */ sh $t9,0x8($v1)
/* f08065c: 922a0005 */ lbu $t2,0x5($s1)
/* f080660: 448a2000 */ mtc1 $t2,$f4
/* f080664: 05410004 */ bgez $t2,.L0f080678
/* f080668: 468021a0 */ cvt.s.w $f6,$f4
/* f08066c: 44819000 */ mtc1 $at,$f18
/* f080670: 00000000 */ nop
/* f080674: 46123180 */ add.s $f6,$f6,$f18
.L0f080678:
/* f080678: c608004c */ lwc1 $f8,0x4c($s0)
/* f08067c: 3c014f80 */ lui $at,0x4f80
/* f080680: 46184280 */ add.s $f10,$f8,$f24
/* f080684: 460a3102 */ mul.s $f4,$f6,$f10
/* f080688: 00000000 */ nop
/* f08068c: 46002482 */ mul.s $f18,$f4,$f0
/* f080690: 4600920d */ trunc.w.s $f8,$f18
/* f080694: 440c4000 */ mfc1 $t4,$f8
/* f080698: 00000000 */ nop
/* f08069c: a46c000a */ sh $t4,0xa($v1)
/* f0806a0: 922d0004 */ lbu $t5,0x4($s1)
/* f0806a4: 448d3000 */ mtc1 $t5,$f6
/* f0806a8: 05a10004 */ bgez $t5,.L0f0806bc
/* f0806ac: 468032a0 */ cvt.s.w $f10,$f6
/* f0806b0: 44812000 */ mtc1 $at,$f4
/* f0806b4: 00000000 */ nop
/* f0806b8: 46045280 */ add.s $f10,$f10,$f4
.L0f0806bc:
/* f0806bc: c6120038 */ lwc1 $f18,0x38($s0)
/* f0806c0: 3c014f80 */ lui $at,0x4f80
/* f0806c4: 460e9201 */ sub.s $f8,$f18,$f14
/* f0806c8: 46085182 */ mul.s $f6,$f10,$f8
/* f0806cc: 00000000 */ nop
/* f0806d0: 46003102 */ mul.s $f4,$f6,$f0
/* f0806d4: 4600248d */ trunc.w.s $f18,$f4
/* f0806d8: 440e9000 */ mfc1 $t6,$f18
/* f0806dc: 00000000 */ nop
/* f0806e0: a46e0014 */ sh $t6,0x14($v1)
/* f0806e4: 92380005 */ lbu $t8,0x5($s1)
/* f0806e8: 44985000 */ mtc1 $t8,$f10
/* f0806ec: 07010004 */ bgez $t8,.L0f080700
/* f0806f0: 46805220 */ cvt.s.w $f8,$f10
/* f0806f4: 44813000 */ mtc1 $at,$f6
/* f0806f8: 00000000 */ nop
/* f0806fc: 46064200 */ add.s $f8,$f8,$f6
.L0f080700:
/* f080700: c604004c */ lwc1 $f4,0x4c($s0)
/* f080704: 3c014f80 */ lui $at,0x4f80
/* f080708: 46102480 */ add.s $f18,$f4,$f16
/* f08070c: 46124282 */ mul.s $f10,$f8,$f18
/* f080710: 00000000 */ nop
/* f080714: 46005182 */ mul.s $f6,$f10,$f0
/* f080718: 4600310d */ trunc.w.s $f4,$f6
/* f08071c: 44192000 */ mfc1 $t9,$f4
/* f080720: 00000000 */ nop
/* f080724: a4790016 */ sh $t9,0x16($v1)
/* f080728: 922a0004 */ lbu $t2,0x4($s1)
/* f08072c: 448a4000 */ mtc1 $t2,$f8
/* f080730: 05410004 */ bgez $t2,.L0f080744
/* f080734: 468044a0 */ cvt.s.w $f18,$f8
/* f080738: 44815000 */ mtc1 $at,$f10
/* f08073c: 00000000 */ nop
/* f080740: 460a9480 */ add.s $f18,$f18,$f10
.L0f080744:
/* f080744: c6060038 */ lwc1 $f6,0x38($s0)
/* f080748: 3c014f80 */ lui $at,0x4f80
/* f08074c: 46143101 */ sub.s $f4,$f6,$f20
/* f080750: 46049202 */ mul.s $f8,$f18,$f4
/* f080754: 00000000 */ nop
/* f080758: 46004282 */ mul.s $f10,$f8,$f0
/* f08075c: 4600518d */ trunc.w.s $f6,$f10
/* f080760: 440c3000 */ mfc1 $t4,$f6
/* f080764: 00000000 */ nop
/* f080768: a46c0020 */ sh $t4,0x20($v1)
/* f08076c: 922d0005 */ lbu $t5,0x5($s1)
/* f080770: 448d9000 */ mtc1 $t5,$f18
/* f080774: 05a10004 */ bgez $t5,.L0f080788
/* f080778: 46809120 */ cvt.s.w $f4,$f18
/* f08077c: 44814000 */ mtc1 $at,$f8
/* f080780: 00000000 */ nop
/* f080784: 46082100 */ add.s $f4,$f4,$f8
.L0f080788:
/* f080788: c60a004c */ lwc1 $f10,0x4c($s0)
/* f08078c: 3c014f80 */ lui $at,0x4f80
/* f080790: 46185181 */ sub.s $f6,$f10,$f24
/* f080794: 46062482 */ mul.s $f18,$f4,$f6
/* f080798: 00000000 */ nop
/* f08079c: 46009202 */ mul.s $f8,$f18,$f0
/* f0807a0: 4600428d */ trunc.w.s $f10,$f8
/* f0807a4: 440e5000 */ mfc1 $t6,$f10
/* f0807a8: 00000000 */ nop
/* f0807ac: a46e0022 */ sh $t6,0x22($v1)
/* f0807b0: 92380004 */ lbu $t8,0x4($s1)
/* f0807b4: 44982000 */ mtc1 $t8,$f4
/* f0807b8: 07010004 */ bgez $t8,.L0f0807cc
/* f0807bc: 468021a0 */ cvt.s.w $f6,$f4
/* f0807c0: 44819000 */ mtc1 $at,$f18
/* f0807c4: 00000000 */ nop
/* f0807c8: 46123180 */ add.s $f6,$f6,$f18
.L0f0807cc:
/* f0807cc: c6080038 */ lwc1 $f8,0x38($s0)
/* f0807d0: 3c014f80 */ lui $at,0x4f80
/* f0807d4: 460e4280 */ add.s $f10,$f8,$f14
/* f0807d8: 460a3102 */ mul.s $f4,$f6,$f10
/* f0807dc: 00000000 */ nop
/* f0807e0: 46002482 */ mul.s $f18,$f4,$f0
/* f0807e4: 4600920d */ trunc.w.s $f8,$f18
/* f0807e8: 44194000 */ mfc1 $t9,$f8
/* f0807ec: 00000000 */ nop
/* f0807f0: a479002c */ sh $t9,0x2c($v1)
/* f0807f4: 922a0005 */ lbu $t2,0x5($s1)
/* f0807f8: 448a3000 */ mtc1 $t2,$f6
/* f0807fc: 05410004 */ bgez $t2,.L0f080810
/* f080800: 468032a0 */ cvt.s.w $f10,$f6
/* f080804: 44812000 */ mtc1 $at,$f4
/* f080808: 00000000 */ nop
/* f08080c: 46045280 */ add.s $f10,$f10,$f4
.L0f080810:
/* f080810: c612004c */ lwc1 $f18,0x4c($s0)
/* f080814: 46109201 */ sub.s $f8,$f18,$f16
/* f080818: 46085182 */ mul.s $f6,$f10,$f8
/* f08081c: 00000000 */ nop
/* f080820: 46003102 */ mul.s $f4,$f6,$f0
/* f080824: 4600248d */ trunc.w.s $f18,$f4
/* f080828: 440c9000 */ mfc1 $t4,$f18
/* f08082c: 00000000 */ nop
/* f080830: a46c002e */ sh $t4,0x2e($v1)
.L0f080834:
/* f080834: 920d0060 */ lbu $t5,0x60($s0)
/* f080838: 24190002 */ addiu $t9,$zero,0x2
/* f08083c: 3c0cb700 */ lui $t4,0xb700
/* f080840: a10d0000 */ sb $t5,0x0($t0)
/* f080844: 920f0063 */ lbu $t7,0x63($s0)
/* f080848: 240d2000 */ addiu $t5,$zero,0x2000
/* f08084c: 27a400c4 */ addiu $a0,$sp,0xc4
/* f080850: a10f0001 */ sb $t7,0x1($t0)
/* f080854: 920e0066 */ lbu $t6,0x66($s0)
/* f080858: 02202825 */ or $a1,$s1,$zero
/* f08085c: a10e0002 */ sb $t6,0x2($t0)
/* f080860: 92180069 */ lbu $t8,0x69($s0)
/* f080864: a1180003 */ sb $t8,0x3($t0)
/* f080868: a0600007 */ sb $zero,0x7($v1)
/* f08086c: a0600013 */ sb $zero,0x13($v1)
/* f080870: a060001f */ sb $zero,0x1f($v1)
/* f080874: a060002b */ sb $zero,0x2b($v1)
/* f080878: 92090069 */ lbu $t1,0x69($s0)
/* f08087c: 292100ff */ slti $at,$t1,0xff
/* f080880: 50200003 */ beqzl $at,.L0f080890
/* f080884: 8faa00c4 */ lw $t2,0xc4($sp)
/* f080888: afb900cc */ sw $t9,0xcc($sp)
/* f08088c: 8faa00c4 */ lw $t2,0xc4($sp)
.L0f080890:
/* f080890: 240f0002 */ addiu $t7,$zero,0x2
/* f080894: 240e0001 */ addiu $t6,$zero,0x1
/* f080898: 254b0008 */ addiu $t3,$t2,0x8
/* f08089c: afab00c4 */ sw $t3,0xc4($sp)
/* f0808a0: ad4d0004 */ sw $t5,0x4($t2)
/* f0808a4: ad4c0000 */ sw $t4,0x0($t2)
/* f0808a8: afa00018 */ sw $zero,0x18($sp)
/* f0808ac: afae0014 */ sw $t6,0x14($sp)
/* f0808b0: afaf0010 */ sw $t7,0x10($sp)
/* f0808b4: 8fa700c8 */ lw $a3,0xc8($sp)
/* f0808b8: 0fc2ce70 */ jal texSelect
/* f0808bc: 8fa600cc */ lw $a2,0xcc($sp)
/* f0808c0: 8fb000c4 */ lw $s0,0xc4($sp)
/* f0808c4: 3c190102 */ lui $t9,0x102
/* f0808c8: 37390040 */ ori $t9,$t9,0x40
/* f0808cc: 26090008 */ addiu $t1,$s0,0x8
/* f0808d0: afa900c4 */ sw $t1,0xc4($sp)
/* f0808d4: ae190000 */ sw $t9,0x0($s0)
/* f0808d8: 8faa00b8 */ lw $t2,0xb8($sp)
/* f0808dc: 0c012d20 */ jal osVirtualToPhysical
/* f0808e0: 8d44000c */ lw $a0,0xc($t2)
/* f0808e4: ae020004 */ sw $v0,0x4($s0)
/* f0808e8: 8fb100c4 */ lw $s1,0xc4($sp)
/* f0808ec: 3c0dbc00 */ lui $t5,0xbc00
/* f0808f0: 35ad1006 */ ori $t5,$t5,0x1006
/* f0808f4: 262c0008 */ addiu $t4,$s1,0x8
/* f0808f8: afac00c4 */ sw $t4,0xc4($sp)
/* f0808fc: ae2d0000 */ sw $t5,0x0($s1)
/* f080900: 0c012d20 */ jal osVirtualToPhysical
/* f080904: 8fa400b4 */ lw $a0,0xb4($sp)
/* f080908: ae220004 */ sw $v0,0x4($s1)
/* f08090c: 8fb000c4 */ lw $s0,0xc4($sp)
/* f080910: 3c180700 */ lui $t8,0x700
/* f080914: 37180004 */ ori $t8,$t8,0x4
/* f080918: 260e0008 */ addiu $t6,$s0,0x8
/* f08091c: afae00c4 */ sw $t6,0xc4($sp)
/* f080920: ae180000 */ sw $t8,0x0($s0)
/* f080924: 0c012d20 */ jal osVirtualToPhysical
/* f080928: 8fa400b0 */ lw $a0,0xb0($sp)
/* f08092c: ae020004 */ sw $v0,0x4($s0)
/* f080930: 8fa900c4 */ lw $t1,0xc4($sp)
/* f080934: 3c0a0430 */ lui $t2,0x430
/* f080938: 354a0030 */ ori $t2,$t2,0x30
/* f08093c: 25390008 */ addiu $t9,$t1,0x8
/* f080940: afb900c4 */ sw $t9,0xc4($sp)
/* f080944: 3c0b0400 */ lui $t3,0x400
/* f080948: ad2b0004 */ sw $t3,0x4($t1)
/* f08094c: ad2a0000 */ sw $t2,0x0($t1)
/* f080950: 8fac00c4 */ lw $t4,0xc4($sp)
/* f080954: 3c0fb100 */ lui $t7,0xb100
/* f080958: 35ef0032 */ ori $t7,$t7,0x32
/* f08095c: 258d0008 */ addiu $t5,$t4,0x8
/* f080960: afad00c4 */ sw $t5,0xc4($sp)
/* f080964: 240e2010 */ addiu $t6,$zero,0x2010
/* f080968: ad8e0004 */ sw $t6,0x4($t4)
/* f08096c: ad8f0000 */ sw $t7,0x0($t4)
/* f080970: 8fb800c4 */ lw $t8,0xc4($sp)
/* f080974: 3c19b800 */ lui $t9,0xb800
/* f080978: 3c0a0601 */ lui $t2,0x601
/* f08097c: 27090008 */ addiu $t1,$t8,0x8
/* f080980: afa900c4 */ sw $t1,0xc4($sp)
/* f080984: af000004 */ sw $zero,0x4($t8)
/* f080988: af190000 */ sw $t9,0x0($t8)
/* f08098c: 8fa600ac */ lw $a2,0xac($sp)
/* f080990: acca0000 */ sw $t2,0x0($a2)
/* f080994: 8fab00c4 */ lw $t3,0xc4($sp)
/* f080998: accb0004 */ sw $t3,0x4($a2)
.L0f08099c:
/* f08099c: 8fbf004c */ lw $ra,0x4c($sp)
.L0f0809a0:
/* f0809a0: 8fa200c4 */ lw $v0,0xc4($sp)
/* f0809a4: d7b40020 */ ldc1 $f20,0x20($sp)
/* f0809a8: d7b60028 */ ldc1 $f22,0x28($sp)
/* f0809ac: d7b80030 */ ldc1 $f24,0x30($sp)
/* f0809b0: d7ba0038 */ ldc1 $f26,0x38($sp)
/* f0809b4: 8fb00044 */ lw $s0,0x44($sp)
/* f0809b8: 8fb10048 */ lw $s1,0x48($sp)
/* f0809bc: 03e00008 */ jr $ra
/* f0809c0: 27bd00b8 */ addiu $sp,$sp,0xb8
);
// Mismatch: Several issues, but main one is the float variables near the cosf
// and sinf calls. Appears to be functionally identical.
//Gfx *tvscreenRender(struct model *model, struct modelnode *node, struct tvscreen *screen, Gfx *gdl, s32 arg4, s32 arg5)
//{
// struct textureconfig *tconfig;
//
// if (node && (node->type & 0xff) == MODELNODETYPE_DL) {
// struct gfxvtx *vertices = gfxAllocateVertices(4); // b4
// u8 *colours = gfxAllocateColours(1); // b0
// Gfx *savedgdl = gdl++; // ac
// union modelrodata *rodata = node->rodata; // a8
// union modelrwdata *rwdata = modelGetNodeRwData(model, node); // a4
// bool yielding = false;
//
// while (!yielding) {
// u32 *cmd = &screen->cmdlist[screen->offset];
//
// switch (cmd[0]) {
// case TVCMD_STOPSCROLL: // f07fce4
// screen->xmidinc = 0;
// screen->ymidinc = 0;
// screen->offset++;
// break;
// case TVCMD_SCROLLRELX: // f07fcf8
// screen->xmidfrac = 0;
// screen->xmidinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
// screen->xmidold = screen->xmid;
// screen->xmidnew = screen->xmid + (s32)cmd[1] * (1.0f / 1024.0f);
// screen->offset += 3;
// break;
// case TVCMD_SCROLLRELY: // f07fd68
// screen->ymidfrac = 0;
// screen->ymidinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
// screen->ymidold = screen->ymid;
// screen->ymidnew = screen->ymid + (s32)cmd[1] * (1.0f / 1024.0f);
// screen->offset += 3;
// break;
// case TVCMD_SCROLLABSX: // f07fdd8
// screen->xmidfrac = 0;
// screen->xmidinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
// screen->xmidold = screen->xmid;
// screen->xmidnew = (s32)cmd[1] * (1.0f / 1024.0f);
// screen->offset += 3;
// break;
// case TVCMD_SCROLLABSY: // f07fe44
// screen->ymidfrac = 0;
// screen->ymidinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
// screen->ymidold = screen->ymid;
// screen->ymidnew = (s32)cmd[1] * (1.0f / 1024.0f);
// screen->offset += 3;
// break;
// case TVCMD_SCALEABSX: // f07feb0
// screen->xscalefrac = 0;
// screen->xscaleinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
// screen->xscaleold = screen->xscale;
// screen->xscalenew = (s32)cmd[1] * (1.0f / 1024.0f);
// screen->offset += 3;
// break;
// case TVCMD_SCALEABSY: // f07ff1c
// screen->yscalefrac = 0;
// screen->yscaleinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
// screen->yscaleold = screen->yscale;
// screen->yscalenew = (s32)cmd[1] * (1.0f / 1024.0f);
// screen->offset += 3;
// break;
// case TVCMD_SETTEXTURE: // f07ff88
// tvscreenSetTexture(screen, cmd[1]);
// screen->offset += 2;
// break;
// case TVCMD_PAUSE: // f07ffb4
// if (screen->pause60 >= 0) {
// screen->pause60 -= g_Vars.lvupdate240_60;
//
// if (screen->pause60 >= 0) {
// yielding = true;
// } else {
// screen->offset += 2;
// }
// } else {
// yielding = true;
// screen->pause60 = cmd[1];
// }
// break;
// case TVCMD_SETCMDLIST: // f080000
// tvscreenSetCmdlist(screen, (u32 *) cmd[1]);
// break;
// case TVCMD_RANDSETCMDLIST: // f080020
// if ((random() >> 16) < cmd[2]) {
// tvscreenSetCmdlist(screen, (u32 *) cmd[1]);
// } else {
// screen->offset += 3;
// }
// break;
// case TVCMD_RESTART: // f080074
// screen->offset = 0;
// break;
// case TVCMD_YIELD: // f08007c
// yielding = true;
// break;
// case TVCMD_SETCOLOUR: // f080084
// screen->colfrac = 0;
// screen->colinc = cmd[2] == 0 ? 1.0f : 1.0f / cmd[2];
//
// screen->redold = screen->red;
// screen->rednew = (cmd[1] >> 24);
//
// screen->greenold = screen->green;
// screen->greennew = (cmd[1] >> 16);
//
// screen->blueold = screen->blue;
// screen->bluenew = (cmd[1] >> 8);
//
// screen->alphaold = screen->alpha;
// screen->alphanew = cmd[1];
//
// screen->offset += 3;
// break;
// case TVCMD_ROTATEABS: // f08011c
// screen->rot = (s32)cmd[1] * (M_BADTAU / 65536.0f);
// screen->offset += 2;
// break;
// case TVCMD_ROTATEREL: // f080140
// screen->rot += g_Vars.lvupdate240f * (s32)cmd[1] * (M_BADTAU / 65536.0f);
//
// if (screen->rot >= M_BADTAU) {
// screen->rot -= M_BADTAU;
// }
//
// if (screen->rot < 0) {
// screen->rot += M_BADTAU;
// }
//
// screen->offset += 2;
// break;
// }
// }
//
// // Increment X scale
// if (screen->xscaleinc > 0) {
// screen->xscalefrac += screen->xscaleinc * g_Vars.lvupdate240f;
//
// if (screen->xscalefrac < 1.0f) {
// screen->xscale = screen->xscaleold + (screen->xscalenew - screen->xscaleold) * screen->xscalefrac;
// } else {
// screen->xscalefrac = 1.0f;
// screen->xscaleinc = 0;
// screen->xscale = screen->xscalenew;
// }
// }
//
// // Increment Y scale
// if (screen->yscaleinc > 0) {
// screen->yscalefrac += screen->yscaleinc * g_Vars.lvupdate240f;
//
// if (screen->yscalefrac < 1.0f) {
// screen->yscale = screen->yscaleold + (screen->yscalenew - screen->yscaleold) * screen->yscalefrac;
// } else {
// screen->yscalefrac = 1.0f;
// screen->yscaleinc = 0;
// screen->yscale = screen->yscalenew;
// }
// }
//
// // Increment X scroll
// if (screen->xmidinc > 0) {
// screen->xmidfrac += screen->xmidinc * g_Vars.lvupdate240f;
//
// if (screen->xmidfrac < 1.0f) {
// screen->xmid = screen->xmidold + (screen->xmidnew - screen->xmidold) * screen->xmidfrac;
// } else {
// screen->xmidfrac = 1.0f;
// screen->xmidinc = 0;
// screen->xmid = screen->xmidnew;
// }
// }
//
// // Increment Y scroll
// if (screen->ymidinc > 0) {
// screen->ymidfrac += screen->ymidinc * g_Vars.lvupdate240f;
//
// if (screen->ymidfrac < 1.0f) {
// screen->ymid = screen->ymidold + (screen->ymidnew - screen->ymidold) * screen->ymidfrac;
// } else {
// screen->ymidfrac = 1.0f;
// screen->ymidinc = 0;
// screen->ymid = screen->ymidnew;
// }
// }
//
// // Increment colour change
// // 370
// if (screen->colinc > 0) {
// screen->colfrac += screen->colinc * g_Vars.lvupdate240f;
//
// // 398
// if (screen->colfrac < 1.0f) {
// s32 r;
// s32 g;
// s32 b;
// s32 a;
// r = screen->colfrac * (screen->rednew - screen->redold);
// g = screen->colfrac * (screen->greennew - screen->greenold);
// screen->red = r + screen->redold;
// screen->green = g + screen->greenold;
// b = screen->colfrac * (screen->bluenew - screen->blueold);
// a = screen->colfrac * (screen->alphanew - screen->alphaold);
// screen->blue = b + screen->blueold;
// screen->alpha = a + screen->alphaold;
// } else {
// screen->colfrac = 1.0f;
// screen->colinc = 0;
// screen->red = screen->rednew;
// screen->green = screen->greennew;
// screen->blue = screen->bluenew;
// screen->alpha = screen->alphanew;
// }
// }
//
// // Set up everything for rendering
// rwdata->dl.vertices = vertices;
// rwdata->dl.unk08 = (u32 *) colours;
// rwdata->dl.gdl = gdl;
//
// vertices[0] = rodata->dl.vertices[0];
// vertices[1] = rodata->dl.vertices[1];
// vertices[2] = rodata->dl.vertices[2];
// vertices[3] = rodata->dl.vertices[3];
//
// if ((u32)screen->tconfig < 100) {
// tconfig = &g_TexScreenConfigs[(u32)screen->tconfig];
// } else {
// tconfig = screen->tconfig;
// }
//
// if (tconfig != NULL) {
// f32 f20 = screen->xscale * 0.5f;
// f32 f24 = screen->yscale * 0.5f;
// f32 f14 = f20;
// f32 f16 = f24;
//
// if (screen->rot != 0) {
// f32 f22 = cosf(screen->rot) * 1.4141999483109f;
// f32 f2 = sinf(screen->rot) * 1.4141999483109f;
//
// f20 *= f22;
// f24 *= f2;
// f14 *= f2;
// f16 *= f22;
// }
//
// vertices[0].s = tconfig->width * (screen->xmid + f20) * 32;
// vertices[0].t = tconfig->height * (screen->ymid + f24) * 32;
// vertices[1].s = tconfig->width * (screen->xmid - f14) * 32;
// vertices[1].t = tconfig->height * (screen->ymid + f16) * 32;
// vertices[2].s = tconfig->width * (screen->xmid - f20) * 32;
// vertices[2].t = tconfig->height * (screen->ymid - f24) * 32;
// vertices[3].s = tconfig->width * (screen->xmid + f14) * 32;
// vertices[3].t = tconfig->height * (screen->ymid - f16) * 32;
// }
//
// if (tconfig);
//
// colours[0] = screen->red;
// colours[1] = screen->green;
// colours[2] = screen->blue;
// colours[3] = screen->alpha;
//
// vertices[0].colour = 0;
// vertices[1].colour = 0;
// vertices[2].colour = 0;
// vertices[3].colour = 0;
//
// if (screen->alpha < 255) {
// arg5 = 2;
// }
//
// // Render the image
// gSPSetGeometryMode(gdl++, G_CULL_BACK);
//
// texSelect(&gdl, tconfig, arg5, arg4, 2, 1, NULL);
//
// gSPMatrix(gdl++, osVirtualToPhysical(model->matrices), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
//
// gMoveWd(gdl++, 1, 6, osVirtualToPhysical(vertices));
// gDPSetColorArray(gdl++, osVirtualToPhysical(colours), 1);
// gDPSetVerticeArray(gdl++, 0x04000000, 4);
//
// gDPTri2(gdl++, 0, 1, 2, 0, 2, 3);
// gSPEndDisplayList(gdl++);
//
// gSPBranchList(savedgdl++, gdl);
// }
//
// return gdl;
//}
void objRenderProp(struct prop *prop, struct modelrenderdata *renderdata, bool xlupass)
{
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
bool sp6c;
struct prop *child;
Gfx *gdl;
s32 sp60;
sp6c = 0;
sp6c += (obj->flags & OBJFLAG_00000200) && camGetOrthogonalMtxL();
gdl = renderdata->gdl;
if (obj->type == OBJTYPE_SINGLEMONITOR) {
if (renderdata->flags & 1) {
struct singlemonitorobj *monitor = (struct singlemonitorobj *) prop->obj;
if (obj->flags2 & OBJFLAG2_DRAWONTOP) {
sp60 = 0;
} else if (obj->flags & OBJFLAG_DEACTIVATED) {
sp60 = wallhit0f140750(&prop->pos);
} else {
sp60 = 1;
}
gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0000), &monitor->screen, gdl, sp60, 1);
}
} else if (obj->type == OBJTYPE_MULTIMONITOR) {
if (renderdata->flags & 1) {
struct multimonitorobj *monitor = (struct multimonitorobj *) prop->obj;
if (obj->flags2 & OBJFLAG2_DRAWONTOP) {
sp60 = 0;
} else if (obj->flags & OBJFLAG_DEACTIVATED) {
sp60 = wallhit0f140750(&prop->pos);
} else {
sp60 = 1;
}
gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0000), &monitor->screens[0], gdl, sp60, 1);
if (obj->flags2 & OBJFLAG2_DRAWONTOP) {
sp60 = 0;
} else if (obj->flags & (OBJFLAG_DEACTIVATED | OBJFLAG_20000000)) {
sp60 = wallhit0f140750(&prop->pos);
} else {
sp60 = 1;
}
gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0001), &monitor->screens[1], gdl, sp60, 1);
gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0002), &monitor->screens[2], gdl, sp60, 1);
gdl = tvscreenRender(model, modelGetPart(model->filedata, MODELPART_0003), &monitor->screens[3], gdl, sp60, 1);
}
}
if (obj->type == OBJTYPE_DOOR) {
struct doorobj *door = prop->door;
gSPClearGeometryMode(gdl++, G_CULL_BOTH);
if (door->doorflags & DOORFLAG_FLIP) {
renderdata->cullmode = CULLMODE_FRONT;
} else {
renderdata->cullmode = CULLMODE_BACK;
}
if (renderdata->unk30 == 9) {
renderdata->envcolour &= 0xffffff00;
}
} else if ((obj->hidden2 & OBJH2FLAG_80) == 0) {
renderdata->cullmode = CULLMODE_BACK;
if (renderdata->unk30 == 9) {
renderdata->envcolour &= 0xffffff00;
}
} else {
s32 level = objGetDestroyedLevel(obj);
renderdata->cullmode = CULLMODE_NONE;
if (renderdata->unk30 == 9) {
s32 alpha = 100 + level * 50;
if (alpha > 255) {
alpha = 255;
}
renderdata->envcolour &= 0xffffff00;
renderdata->envcolour |= alpha;
} else if (level > 0) {
renderdata->envcolour |= 0x0000ff00;
}
}
if (sp6c) {
gSPMatrix(gdl++, camGetOrthogonalMtxL(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
}
renderdata->gdl = gdl;
modelRender(renderdata, model);
gdl = renderdata->gdl;
if (obj->type == OBJTYPE_DOOR) {
gSPClearGeometryMode(gdl++, G_CULL_BOTH);
}
if (obj->hidden2 & (OBJH2FLAG_HASOPA << xlupass)) {
gdl = wallhitRenderPropHits(gdl, prop, xlupass);
}
if (sp6c) {
gSPMatrix(gdl++, camGetPerspectiveMtxL(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
}
renderdata->gdl = gdl;
child = prop->child;
while (child) {
objRenderProp(child, renderdata, xlupass);
child = child->next;
}
if (xlupass) {
if (sp6c) {
player0f0c3320(model->matrices, model->filedata->nummatrices);
} else {
func0f0c33f0(model->matrices, model->filedata->nummatrices);
}
if ((obj->flags3 & (OBJFLAG3_SHOWSHIELD | OBJFLAG3_SHIELDHIT)) && objIsHealthy(obj)) {
gSPSetGeometryMode(renderdata->gdl++, G_CULL_BACK);
renderdata->gdl = shieldhitRender(renderdata->gdl, prop, prop, 0xff, 0, 0, 1, 2, 3);
}
}
}
}
Gfx *gfxRenderRadialShadow(Gfx *gdl, f32 x, f32 y, f32 z, f32 angle, f32 radius, u32 colour)
{
Mtxf spc0;
Mtxf sp80;
Mtxf *mtx;
struct gfxvtx *vertices;
u32 *colours;
struct coord pos;
struct textureconfig *tconfig;
s32 i;
f32 base1 = 0.0f;
f32 base2 = 0.0f;
f32 base3 = 0.0f;
f32 base4 = 0.0f;
if (radius);
vertices = gfxAllocateVertices(4);
colours = gfxAllocateColours(1);
tconfig = &g_TexShadowConfigs[0];
colours[0] = colour;
pos.x = x;
pos.y = y + 2.0f;
pos.z = z;
mtx = gfxAllocateMatrix();
mtx4LoadYRotationWithTranslation(&pos, angle, &spc0);
mtx4MultMtx4(camGetWorldToScreenMtxf(), &spc0, &sp80);
mtx00016054(&sp80, mtx);
for (i = 0; i < 4; i++) {
vertices[i].y = 0;
vertices[i].colour = 0;
}
vertices[0].x = base1 - radius;
vertices[0].z = base3 - radius;
vertices[1].x = base1 - radius;
vertices[1].z = base4 + radius;
vertices[2].x = base2 + radius;
vertices[2].z = base4 + radius;
vertices[3].x = base2 + radius;
vertices[3].z = base3 - radius;
if (tconfig) {
vertices[0].s = 0;
vertices[0].t = 0;
vertices[1].s = tconfig->width * 32 - 1;
vertices[1].t = 0;
vertices[2].s = tconfig->width * 32 - 1;
vertices[2].t = tconfig->height * 32 - 1;
vertices[3].s = 0;
vertices[3].t = tconfig->height * 32 - 1;
texSelect(&gdl, tconfig, 4, 1, 2, 1, NULL);
} else {
texSelect(&gdl, NULL, 1, 1, 2, 1, NULL);
}
gSPSetGeometryMode(gdl++, G_CULL_BACK);
gSPMatrix(gdl++, osVirtualToPhysical(mtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetColorArray(gdl++, osVirtualToPhysical(colours), 1);
gDPSetVerticeArray(gdl++, osVirtualToPhysical(vertices), 4);
gDPTri2(gdl++, 0, 1, 2, 2, 3, 0);
return gdl;
}
Gfx *objRenderShadow(struct defaultobj *obj, Gfx *gdl)
{
f32 angle;
f32 y;
#if VERSION >= VERSION_NTSC_1_0
s32 value = cd0002a440(&obj->prop->pos, obj->prop->rooms, &y, NULL, NULL);
#else
s32 value = cd0002a440(&obj->prop->pos, obj->prop->rooms, &y, NULL);
#endif
if (value > 0 && (obj->modelnum == MODEL_HOOVERBOT || obj->modelnum == MODEL_TESTERBOT)) {
angle = hoverpropGetTurnAngle(obj);
gdl = gfxRenderRadialShadow(gdl, obj->prop->pos.x, y, obj->prop->pos.z, angle, 20, 0xffffff78);
} else if (value > 0) {
angle = hoverpropGetTurnAngle(obj);
gdl = gfxRenderRadialShadow(gdl, obj->prop->pos.x, y, obj->prop->pos.z, angle, 30, 0xffffff78);
}
return gdl;
}
Gfx *objRender(struct prop *prop, Gfx *gdl, bool xlupass)
{
u32 stack;
u32 stack2;
struct defaultobj *obj = prop->obj;
f32 spe8;
s32 spe4;
s32 i;
struct modelrenderdata renderdata = {NULL, true, 3};
struct screenbox screenbox;
s32 colour[4];
s32 sp84;
s32 healththing;
s32 alpha = 0xff;
f32 xrayalphafrac;
s32 mult;
struct weaponobj *weapon;
struct doorobj *door;
f32 frac;
struct modelnode *node;
struct modelrodata_dl *dldata1;
struct modelrwdata_dl *dldata2;
f32 fadedist;
struct colour *oldcolours;
struct colour *newcolours;
f32 objdist;
spe4 = env0f1667f4(prop, &spe8);
if (spe4 == 0) {
return gdl;
}
if (obj->type != OBJTYPE_TINTEDGLASS) {
frac = func0f08e6bc(prop, model0001af80(obj->model));
if (prop->timetoregen > 0 && prop->timetoregen < TICKS(60)) {
frac *= (TICKS(60.0f) - prop->timetoregen) * (PAL ? 0.019999999552965f : 0.016666667535901f);
}
alpha = frac * 255.0f;
if (alpha <= 0) {
return gdl;
}
}
if (g_Vars.currentplayer->visionmode == VISIONMODE_NORMAL) {
// empty
} else if (g_Vars.currentplayer->visionmode == VISIONMODE_SLAYERROCKET) {
if (g_Vars.currentplayer->slayerrocket
&& g_Vars.currentplayer->slayerrocket->base.prop
&& g_Vars.currentplayer->slayerrocket->base.prop == prop) {
return gdl;
}
} else if (g_Vars.currentplayer->visionmode == VISIONMODE_XRAY) {
fadedist;
objdist = sqrtf(ERASERSQDIST(prop->pos.f));
if (objdist > g_Vars.currentplayer->eraserpropdist) {
return gdl;
}
alpha = 128;
fadedist = g_Vars.currentplayer->eraserpropdist - 150.0f;
if (objdist > fadedist) {
alpha = (1.0f - (objdist - fadedist) / 150.0f) * 128;
}
xrayalphafrac = objdist / g_Vars.currentplayer->eraserpropdist;
if (xrayalphafrac > 1.0f) {
xrayalphafrac = 1.0f;
}
}
if (g_Vars.lvmpbotlevel && obj->type == OBJTYPE_WEAPON) {
if (obj->flags3 & OBJFLAG3_HARDFREEING) {
weapon = (struct weaponobj *)obj;
alpha = ((f32)alpha * (f32)weapon->fadeouttimer60) * (PAL ? 0.019999999552965f : 0.016666667535901f);
if (alpha < 0) {
alpha = 0;
} else if (alpha > 0xff) {
alpha = 0xff;
}
}
}
if (alpha < 0xff || (obj->flags2 & OBJFLAG2_DRAWONTOP)) {
if (!xlupass) {
return gdl;
}
sp84 = 3;
} else {
if (!xlupass) {
sp84 = 1;
} else {
sp84 = 2;
}
}
if (obj->type == OBJTYPE_DOOR) {
door = (struct doorobj *)obj;
if (door->doortype == DOORTYPE_LASER) {
node = func0f0687e4(obj->model);
dldata1 = &node->rodata->dl;
dldata2 = (struct modelrwdata_dl *)modelGetNodeRwData(obj->model, node);
oldcolours = (struct colour *)(((u32)&dldata1->vertices[dldata1->numvertices] + 7 | 7) ^ 7);
newcolours = (struct colour *)gfxAllocateColours(dldata1->numcolours);
for (i = 0; i < dldata1->numcolours; i++) {
newcolours[i] = oldcolours[i];
newcolours[i].a = door->laserfade;
}
dldata2->colours = newcolours;
}
}
if ((obj->flags2 & OBJFLAG2_04000000) == 0 && func0f08e5a8(prop->rooms, &screenbox) > 0) {
gdl = currentPlayerScissorWithinViewport(gdl, screenbox.xmin, screenbox.ymin, screenbox.xmax, screenbox.ymax);
} else {
gdl = currentPlayerScissorToViewport(gdl);
}
renderdata.flags = sp84;
renderdata.zbufferenabled = (obj->flags2 & OBJFLAG2_DRAWONTOP) == 0;
renderdata.gdl = gdl;
if (alpha < 0xff) {
renderdata.unk30 = 5;
renderdata.envcolour = alpha;
} else {
renderdata.unk30 = 9;
if (obj->type == OBJTYPE_TINTEDGLASS) {
struct tintedglassobj *glass = (struct tintedglassobj *)obj;
renderdata.envcolour = glass->opacity << 8;
} else {
if (obj->type == OBJTYPE_DOOR && ((struct doorobj *)obj)->doorflags & DOORFLAG_WINDOWED) {
renderdata.envcolour = ((struct doorobj *)obj)->fadealpha << 8;
} else {
renderdata.envcolour = 0;
}
}
}
if (prop->type == PROPTYPE_DOOR
&& (g_Vars.coopplayernum >= 0 || g_Vars.antiplayernum >= 0)) {
struct doorobj *door = prop->door;
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);
}
if (g_Vars.currentplayer->visionmode == VISIONMODE_XRAY) {
colour[g_Vars.currentplayer->epcol_0] = xrayalphafrac * 255.0f;
colour[g_Vars.currentplayer->epcol_1] = (1.0f - xrayalphafrac) * 255.0f;
colour[g_Vars.currentplayer->epcol_2] = 0;
colour[3] = 0xff;
} else {
colour[3] -= func0f068fc8(obj->prop, true);
if (colour[3]);
if (colour[3] > 0xff) {
colour[3] = 0xff;
}
if (colour[3] < 0) {
colour[3] = 0;
}
}
healththing = objGetShotsTaken(obj);
mult = 0xff - (healththing * 21);
if (mult < 0) {
mult = 0;
}
colour[0] = (colour[0] * mult) >> 8;
colour[1] = (colour[1] * mult) >> 8;
colour[2] = (colour[2] * mult) >> 8;
colour[3] += healththing * 15;
if (colour[3] > 0xff) {
colour[3] = 0xff;
}
func0f069750(colour, spe4, &spe8);
if (USINGDEVICE(DEVICE_NIGHTVISION)) {
if ((obj->flags & OBJFLAG_PATHBLOCKER) == 0) {
colour[0] = var8009caed;
colour[1] = var8009caed;
colour[2] = var8009caed;
colour[3] = var8009caee;
}
} else if (USINGDEVICE(DEVICE_IRSCANNER)) {
if ((obj->hidden & OBJHFLAG_CONDITIONALSCENERY) || (obj->flags3 & OBJFLAG3_INFRARED)) {
colour[0] = 0xff;
colour[1] = 0xff;
colour[2] = 0xff;
colour[3] = 0x46;
}
}
renderdata.fogcolour = colour[0] << 24 | colour[1] << 16 | colour[2] << 8 | colour[3];
objRenderProp(prop, &renderdata, xlupass);
gdl = renderdata.gdl;
if (xlupass) {
if (obj->type == OBJTYPE_HOVERPROP
|| obj->type == OBJTYPE_HOVERBIKE
|| obj->modelnum == MODEL_HOOVERBOT
|| obj->modelnum == MODEL_TESTERBOT) {
gdl = objRenderShadow(obj, gdl);
}
if (obj->modelnum == MODEL_A51INTERCEPTOR && (obj->flags & OBJFLAG_80000000)) {
gdl = objRenderShadow(obj, gdl);
}
}
return gdl;
}
bool modelIsNodeNotTvscreen(struct modelfiledata *filedata, struct modelnode *node)
{
if (filedata->skel == &g_SkelTerminal) {
if (modelGetPart(filedata, MODELPART_TERMINAL_0000) == node) {
return false;
}
}
if (filedata->skel == &g_SkelCiHub) {
if (modelGetPart(filedata, MODELPART_CIHUB_0000) == node
|| modelGetPart(filedata, MODELPART_CIHUB_0001) == node
|| modelGetPart(filedata, MODELPART_CIHUB_0002) == node
|| modelGetPart(filedata, MODELPART_CIHUB_0003) == node) {
return false;
}
}
return true;
}
/**
* Deform an object due to it being destroyed.
*/
void objDeform(struct defaultobj *obj, s32 level)
{
f32 min;
f32 max;
f32 average;
f32 f2;
f32 spbc = 0.0f;
f32 spb0[3];
s32 i;
struct modelrodata_bbox *parentbbox;
struct modelrodata_bbox *bbox;
struct modelnode *node;
struct modelnode *parent;
struct model *model = obj->model;
struct modelfiledata *modeldef = model->filedata;
volatile s32 salt;
bool ok = true;
f32 mult;
#if VERSION < VERSION_NTSC_1_0
s32 uninitialisedvariable;
#endif
bool swap;
s32 axis;
s32 chance;
func0f0926bc(obj->prop, 15, 0xffff);
salt = 0;
if (debugIsObjDeformDebugEnabled());
if (debugIsObjDeformDebugEnabled());
salt = random();
if (debugIsObjDeformDebugEnabled()) {
salt &= 0xffff;
}
wallhitsFreeByProp(obj->prop, 1);
swap = false;
axis = 1;
for (i = 0; i < 3; i++) {
bool swapthis = false;
spb0[i] = sqrtf(obj->realrot[i][0] * obj->realrot[i][0] + obj->realrot[i][1] * obj->realrot[i][1] + obj->realrot[i][2] * obj->realrot[i][2]);
f2 = obj->realrot[i][1] / spb0[i];
if (f2 < 0.0f) {
swapthis = true;
f2 = -f2;
}
if (spbc < f2) {
spbc = f2;
axis = i;
swap = swapthis;
}
}
min = 99999.0f;
max = -99999.0f;
bbox = modelFindBboxRodata(model);
if (axis == 0) {
min = objGetLocalXMin(bbox);
max = objGetLocalXMax(bbox);
} else if (axis == 1) {
min = objGetLocalYMin(bbox);
max = objGetLocalYMax(bbox);
} else if (axis == 2) {
min = objGetLocalZMin(bbox);
max = objGetLocalZMax(bbox);
}
if (swap) {
f32 tmp = max;
max = min;
min = tmp;
}
if (min < max) {
average = (min + max) * 0.5f;
} else {
average = 0.0f;
min = 0.0f;
max = 0.0f;
}
if (level == 3 && average - min > 4.0f) {
average = min + 6.0f - 2.0f;
}
if (max - min > 6.0f) {
if (level < 3) {
mult = 0.9f;
} else {
mult = (max - min - 6.0f) / (max - min);
}
} else {
mult = 1.0f;
}
obj->realrot[1][0] *= mult;
obj->realrot[1][1] *= mult;
obj->realrot[1][2] *= mult;
obj->prop->pos.f[axis] += (1.0f - mult) * min;
node = modeldef->rootnode;
while (node) {
u32 type = node->type & 0xff;
switch (type) {
case MODELNODETYPE_DL:
parentbbox = NULL;
parent = node;
while (parent) {
if ((parent->type & 0xff) == MODELNODETYPE_BBOX) {
parentbbox = &parent->rodata->bbox;
break;
}
parent = parent->parent;
}
if (modelIsNodeNotTvscreen(modeldef, node) && parentbbox == bbox) {
struct modelrodata_dl *rodata = &node->rodata->dl;
struct modelrwdata_dl *rwdata = (struct modelrwdata_dl *)&model->rwdatas[rodata->rwdataindex];
struct gfxvtx *vertices = vtxstoreAllocate(rodata->numvertices, VTXSTORETYPE_OBJVTX, node, objGetDestroyedLevel(obj));
if (vertices) {
if (rwdata->vertices != rodata->vertices) {
// Replacing modified vertices with a new set
for (i = 0; i < rodata->numvertices; i++) {
vertices[i] = rwdata->vertices[i];
}
vtxstoreFree(VTXSTORETYPE_OBJVTX, rwdata->vertices);
} else {
// Replacing original vertices with modified vertices
for (i = 0; i < rodata->numvertices; i++) {
vertices[i] = rodata->vertices[i];
}
}
rwdata->vertices = vertices;
} else {
ok = false;
}
if ((u32)rwdata->colours == ALIGN8((u32)&rodata->vertices[rodata->numvertices])) {
struct colour *colours = vtxstoreAllocate(rodata->numcolours, VTXSTORETYPE_OBJCOL, NULL, 0);
if (colours) {
for (i = 0; i < rodata->numcolours; i++) {
colours[i] = rwdata->colours[i];
}
rwdata->colours = colours;
} else {
ok = false;
}
}
if (ok) {
for (i = 0; i < rodata->numcolours; i++) {
if (i > 0) {
rwdata->colours[i].a = 0;
}
}
for (i = 0; i < rodata->numvertices; i++) {
s16 tmp = average;
rng2SetSeed(rodata->vertices[i].x + rodata->vertices[i].y + rodata->vertices[i].z + salt);
#if VERSION < VERSION_NTSC_1_0
if (uninitialisedvariable)
#endif
{
if (swap) {
if (rwdata->vertices[i].v[axis] >= tmp) {
chance = 20;
} else {
chance = 90;
}
} else {
if (rwdata->vertices[i].v[axis] <= tmp) {
chance = 20;
} else {
chance = 90;
}
}
if ((s32)(random2() % 100) < chance) {
rwdata->vertices[i].colour = 0;
}
}
rwdata->vertices[i].x += (s32)(((s32)(random2() % 20) - 10) * spb0[0]);
rwdata->vertices[i].y += (s32)(((s32)(random2() % 20) - 10) * spb0[1]);
rwdata->vertices[i].z += (s32)(((s32)(random2() % 20) - 10) * spb0[2]);
if (parentbbox != NULL) {
if (rwdata->vertices[i].x < (s16)parentbbox->xmin) {
rwdata->vertices[i].x = (s16)parentbbox->xmin;
}
if (rwdata->vertices[i].x > (s16)parentbbox->xmax) {
rwdata->vertices[i].x = (s16)parentbbox->xmax;
}
if (rwdata->vertices[i].y < (s16)parentbbox->ymin) {
rwdata->vertices[i].y = (s16)parentbbox->ymin;
}
if (rwdata->vertices[i].y > (s16)parentbbox->ymax) {
rwdata->vertices[i].y = (s16)parentbbox->ymax;
}
if (rwdata->vertices[i].z < (s16)parentbbox->zmin) {
rwdata->vertices[i].z = (s16)parentbbox->zmin;
}
if (rwdata->vertices[i].z > (s16)parentbbox->zmax) {
rwdata->vertices[i].z = (s16)parentbbox->zmax;
}
}
}
}
}
break;
case MODELNODETYPE_DISTANCE:
model0001c784(obj->model, node);
break;
case MODELNODETYPE_TOGGLE:
model0001c7d0(obj->model, node);
break;
case MODELNODETYPE_HEADSPOT:
modelAttachHead(obj->model, node);
break;
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
if ((obj->hidden2 & OBJH2FLAG_80) == 0) {
if (!ok) {
modelFreeVertices(VTXSTORETYPE_OBJVTX, model);
} else {
obj->hidden2 |= OBJH2FLAG_80;
}
}
}
/**
* Bounce an object, such as a hoverbot when it's destroyed.
*/
void objBounce(struct defaultobj *obj, struct coord *arg1)
{
struct coord dir;
struct coord rot = {0, 0, 0};
struct projectile *projectile = NULL;
func0f0685e4(obj->prop);
if (obj->hidden & OBJHFLAG_EMBEDDED) {
projectile = obj->embedment->projectile;
} else if (obj->hidden & OBJHFLAG_PROJECTILE) {
projectile = obj->projectile;
}
if (projectile) {
projectile->speed.x = (RANDOMFRAC() * 6.6666665f) - 3.3333333f;
projectile->speed.y = (RANDOMFRAC() * 3.3333333f) + 3.3333333f;
projectile->speed.z = (RANDOMFRAC() * 6.6666665f) - 3.3333333f;
#if PAL
rot.x = RANDOMFRAC() * 0.029447744f - 0.014723872f;
rot.y = RANDOMFRAC() * 0.029447744f - 0.014723872f;
rot.z = RANDOMFRAC() * 0.029447744f - 0.014723872f;
#else
rot.x = RANDOMFRAC() * 0.024539785f - 0.012269893f;
rot.y = RANDOMFRAC() * 0.024539785f - 0.012269893f;
rot.z = RANDOMFRAC() * 0.024539785f - 0.012269893f;
#endif
mtx4LoadRotation(&rot, &projectile->mtx);
projectile->flags |= PROJECTILEFLAG_AIRBORNE;
dir.x = arg1->x;
dir.y = arg1->y;
dir.z = arg1->z;
mtx4RotateVecInPlace(camGetProjectionMtxF(), &dir);
projectile->speed.x += 3.3333333f * dir.x;
projectile->speed.z += 3.3333333f * dir.z;
projectile->ownerprop = g_Vars.currentplayer->prop;
projectile->bouncecount = 1;
}
}
void objSetDropped(struct prop *prop, u32 droptype)
{
struct prop *parent = prop->parent;
if (parent) {
struct defaultobj *obj = prop->obj;
func0f0685e4(prop);
if ((obj->hidden & OBJHFLAG_EMBEDDED) && obj->embedment->projectile) {
obj->embedment->projectile->droptype = droptype;
} else if (obj->hidden & OBJHFLAG_PROJECTILE) {
obj->projectile->droptype = droptype;
}
if (g_Vars.lvmpbotlevel
&& obj->type == OBJTYPE_WEAPON
&& obj->modelnum != MODEL_CHRBRIEFCASE
&& obj->modelnum != MODEL_CHRDATATHIEF) {
obj->flags3 |= OBJFLAG3_CANHARDFREE;
}
}
}
void objApplyMomentum(struct defaultobj *obj, struct coord *speed, f32 rotation, bool addspeed, bool addrotation)
{
struct projectile *projectile = NULL;
struct modelrodata_bbox *bbox;
f32 sp24;
f32 sp20;
func0f0685e4(obj->prop);
if (obj->hidden & OBJHFLAG_EMBEDDED) {
projectile = obj->embedment->projectile;
} else if (obj->hidden & OBJHFLAG_PROJECTILE) {
projectile = obj->projectile;
}
if (projectile) {
projectile->flags |= PROJECTILEFLAG_SLIDING;
if (addspeed) {
projectile->speed.x += speed->x;
projectile->speed.y += speed->y;
projectile->speed.z += speed->z;
} else {
projectile->speed.x = speed->x;
projectile->speed.y = speed->y;
projectile->speed.z = speed->z;
}
if (addrotation) {
projectile->unk0dc += rotation;
} else {
projectile->unk0dc = rotation;
}
if (obj->type == OBJTYPE_HOVERPROP || obj->type == OBJTYPE_HOVERBIKE) {
if (obj->flags & OBJFLAG_20000000) {
projectile->unk08c = 0.8f;
projectile->unk098 = 0.0027777778f;
projectile->unk0e0 = 0.000041881234f;
projectile->unk0e4 = PAL ? 0.969f : 0.974f;
projectile->unk0ec = 0.07852732f;
projectile->unk0f0 = 6.6666665f;
} else {
projectile->unk08c = 0.5f;
projectile->unk098 = 0.013888889f;
projectile->unk0e0 = 0.00020940616f;
projectile->unk0e4 = PAL ? 0.953f : 0.961f;
projectile->unk0ec = 0.07852732f;
projectile->unk0f0 = 6.6666665f;
}
return;
}
bbox = objFindBboxRodata(obj);
sp24 = objGetRotatedLocalXMaxByMtx3(bbox, obj->realrot) - objGetRotatedLocalXMinByMtx3(bbox, obj->realrot);
sp20 = objGetRotatedLocalZMaxByMtx3(bbox, obj->realrot) - objGetRotatedLocalZMinByMtx3(bbox, obj->realrot);
if (sp24 > 150.0f || sp20 > 150.0f) {
projectile->unk08c = 0.1f;
projectile->unk098 = 0.055555556f;
projectile->unk0e0 = 0.00083762466f;
projectile->unk0e4 = PAL ? 0.953f : 0.961f;
projectile->unk0ec = 0.009815915f;
projectile->unk0f0 = 0.8333333f;
} else if (sp24 > 75.0f || sp20 > 75.0f) {
projectile->unk08c = 0.1f;
projectile->unk098 = 0.055555556f;
projectile->unk0e0 = 0.00083762466f;
projectile->unk0e4 = PAL ? 0.953f : 0.961f;
projectile->unk0ec = 0.01963183f;
projectile->unk0f0 = 0.8333333f;
} else {
projectile->unk08c = 0.1f;
projectile->unk098 = 0.055555556f;
projectile->unk0e0 = 0.00041881233f;
projectile->unk0e4 = PAL ? 0.953f : 0.961f;
projectile->unk0ec = 0.07852732f;
projectile->unk0f0 = 1.6666666f;
}
}
}
#if PIRACYCHECKS
extern u8 _blankSegmentRomStart;
/**
* This function is called whenever a player exits a lift as well as on tick
* whenever a player is running at max speed. Each time it is called, it
* attempts to DMA a payload from the ROM into a location in RAM. However, in
* all versions of the game the payload list is empty so it effectively does
* nothing.
*
* It is likely that this function would have been used to restore piracy checks
* in the event that a player had disabled them using memory editing or a hacked
* ROM. The feature may have been abandoned because it would have revealed where
* all the piracy checks are, or perhaps they never got around to implementing
* the generation of the payload list into their build system.
*
* The segment being read is expected to start with a table of word-pairs for
* the destination RAM address and copy length. 0x40 bytes are reserved for the
* table but it can be terminated early with a zero RAM address.
*
* From 0x40 onwards are the payloads in order. To calculate the read offset for
* a particular payload, the function must sum the lengths of the payloads
* before it.
*/
void piracyRestore(void)
{
s32 i;
u32 writeaddr;
s32 copylen;
s32 readoffset;
u32 *ptr;
u32 *tmp;
u8 buffer[0x4c];
static s8 index = 0;
ptr = (u32 *)buffer;
// Align ptr to an 8 byte boundary
while ((u32)ptr % 8) {
ptr++;
}
// Copy the writeaddr/copylen pairs from ROM to the buffer
dmaExec(ptr, (u32) &_blankSegmentRomStart, 0x40);
// Calculate what needs to be copied and where
i = 0;
readoffset = 0x40;
copylen = 0;
while (i <= index) {
tmp = ptr;
tmp += i << 1;
readoffset += copylen;
writeaddr = tmp[0];
copylen = tmp[1];
i++;
}
// Copy it
if (copylen != 0) {
dmaExec((void *) writeaddr, (u32) &_blankSegmentRomStart + readoffset, copylen);
}
// Increment the index, so the next time the function is called
// it copies the next payload. To do this, calculate the number
// of payloads so it can wrap.
for (i = 0; i < 8 && ptr[i * 2]; i++);
index++;
if (index >= i) {
index = 0;
}
}
#endif
void func0f082e84(struct defaultobj *obj, struct coord *pos, struct coord *dir, struct coord *tween, bool addrotation)
{
struct coord speed = {0, 0, 0};
f32 a = tween->f[0] * dir->f[0] + tween->f[2] * dir->f[2];
f32 b = pos->f[0] - obj->prop->pos.f[0];
f32 c = pos->f[2] - obj->prop->pos.f[2];
f32 d = -b * dir->f[2] + c * dir->f[0];
speed.f[0] += a * dir->f[0] * 0.2f;
speed.f[2] += a * dir->f[2] * 0.2f;
objApplyMomentum(obj, &speed, a * d * 0.0001f, true, addrotation);
}
void objDetach(struct prop *prop)
{
struct prop *parent = prop->parent;
if (parent) {
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
propDetach(prop);
model->attachedtomodel = NULL;
model->attachedtonode = NULL;
obj->hidden &= ~OBJHFLAG_HASOWNER;
if (parent->type == PROPTYPE_CHR || parent->type == PROPTYPE_PLAYER) {
struct chrdata *chr = parent->chr;
if (chr) {
if (prop == chr->weapons_held[2]) {
chr->weapons_held[2] = NULL;
}
if (prop == chr->weapons_held[HAND_RIGHT]) {
chrSetFiring(chr, HAND_RIGHT, false);
chr->weapons_held[HAND_RIGHT] = NULL;
}
if (prop == chr->weapons_held[HAND_LEFT]) {
chrSetFiring(chr, HAND_LEFT, false);
chr->weapons_held[HAND_LEFT] = NULL;
}
}
}
}
}
bool objDrop(struct prop *prop, bool lazy)
{
struct prop *parent = prop->parent;
struct defaultobj *obj = prop->obj;
struct prop *root;
struct model *model;
Mtxf spf0;
struct coord spe4;
s16 rooms[8];
if ((obj->hidden & OBJHFLAG_EMBEDDED) && obj->embedment->projectile) {
struct projectile *projectile2 = obj->embedment->projectile;
embedmentFree(obj->embedment);
obj->projectile = projectile2;
obj->hidden &= ~OBJHFLAG_EMBEDDED;
obj->hidden |= OBJHFLAG_PROJECTILE;
}
if (parent && (obj->hidden & OBJHFLAG_PROJECTILE)) {
struct projectile *projectile;
model = obj->model;
projectile = obj->projectile;
root = parent;
while (root->parent) {
root = root->parent;
}
projectile->ownerprop = parent;
projectile->flags |= PROJECTILEFLAG_AIRBORNE;
if (projectile->droptype == DROPTYPE_5) {
struct defaultobj *rootobj = root->obj;
struct modelnode *node1;
struct coord spb8;
struct modelnode *node2;
struct coord spa8;
f32 spa4;
f32 spa0;
node1 = objFindBboxNode(obj);
modelNodeGetPosition(obj->model, model0001a740(node1), &spb8);
node2 = objFindBboxNode(rootobj);
modelNodeGetPosition(rootobj->model, model0001a740(node2), &spa8);
spe4.x = spb8.x - spa8.x;
spe4.y = spb8.y - spa8.y;
spe4.z = spb8.z - spa8.z;
mtx00016208(rootobj->realrot, &spe4);
spa4 = RANDOMFRAC() * 13.333333015442f;
spa0 = atan2f(spe4.x, spe4.z);
spa0 += RANDOMFRAC() * 0.7852731347084f - 0.3926365673542f;
if (spa0 >= M_BADTAU) {
spa0 -= M_BADTAU;
} else if (spa0 < 0.0f) {
spa0 += M_BADTAU;
}
projectile->speed.x += spa4 * sinf(spa0);
projectile->speed.z += spa4 * cosf(spa0);
mtx3ToMtx4(rootobj->realrot, &spf0);
spe4.x += root->pos.x;
spe4.y += root->pos.y;
spe4.z += root->pos.z;
mtx4SetTranslation(&spe4, &spf0);
func0f065e74(&root->pos, root->rooms, &spe4, rooms);
} else {
if (projectile->droptype == DROPTYPE_SURRENDER && parent->type == PROPTYPE_CHR) {
struct chrdata *chr = parent->chr;
struct coord rot = {0, 0, 0};
f32 angle = chrGetInverseTheta(chr);
projectile->speed.x = sinf(angle) * 1.6666666269302f;
projectile->speed.y = -RANDOMFRAC() * 0.83333331346512f;
projectile->speed.z = cosf(angle) * 1.6666666269302f;
rot.x = RANDOMFRAC() * PALUPF(0.012269892729819f) - PALUPF(0.0061349463649094f);
rot.y = RANDOMFRAC() * PALUPF(0.012269892729819f) - PALUPF(0.0061349463649094f);
rot.z = RANDOMFRAC() * PALUPF(0.012269892729819f) - PALUPF(0.0061349463649094f);
mtx4LoadRotation(&rot, (Mtxf *)&projectile->mtx);
} else if (projectile->droptype == DROPTYPE_THROWGRENADE && parent->type == PROPTYPE_CHR) {
struct chrdata *chr = parent->chr;
struct coord rot = {0, 0, 0};
f32 angle = chrGetInverseTheta(chr);
f32 dist;
if (chr->aibot) {
dist = chrGetDistanceToTarget(chr);
} else {
dist = chrGetAttackEntityDistance(chr, chr->act_throwgrenade.flags, chr->act_throwgrenade.entityid);
}
if (chr->aibot == NULL && dist < 300) {
dist = 300;
}
projectile->speed.x = sinf(angle) * 13.333333015442f * (dist / 1000);
projectile->speed.y = (((dist >= 1200) * ((dist - 1200) / 1200)) + 1) * 6.6666665077209f;
projectile->speed.z = cosf(angle) * 13.333333015442f * (dist / 1000);
rot.x = RANDOMFRAC() * PALUPF(0.012269892729819f) - PALUPF(0.0061349463649094f);
rot.y = RANDOMFRAC() * PALUPF(0.012269892729819f) - PALUPF(0.0061349463649094f);
rot.z = RANDOMFRAC() * PALUPF(0.012269892729819f) - PALUPF(0.0061349463649094f);
mtx4LoadRotation(&rot, (Mtxf *)&projectile->mtx);
projectileSetSticky(prop);
} else if (projectile->droptype == DROPTYPE_HAT) {
struct coord rot = {0, 0, 0};
struct prop *playerprop = g_Vars.currentplayer->prop;
f32 x = parent->pos.x - playerprop->pos.x;
f32 z = parent->pos.z - playerprop->pos.z;
f32 angle = atan2f(x, z);
projectile->speed.x = (RANDOMFRAC() * 3.3333332538605f + 3.3333332538605f) * sinf(angle);
projectile->speed.y = RANDOMFRAC() * 3.3333332538605f;
projectile->speed.z = (RANDOMFRAC() * 3.3333332538605f + 3.3333332538605f) * cosf(angle);
rot.x = RANDOMFRAC() * PALUPF(0.049079570919275f) - PALUPF(0.024539785459638f);
rot.y = RANDOMFRAC() * PALUPF(0.049079570919275f) - PALUPF(0.024539785459638f);
rot.z = RANDOMFRAC() * PALUPF(0.049079570919275f) - PALUPF(0.024539785459638f);
mtx4LoadRotation(&rot, (Mtxf *)&projectile->mtx);
} else if (projectile->droptype == DROPTYPE_OWNERREAP) {
struct coord rot = {0, 0, 0};
projectile->speed.x = (0.5f - RANDOMFRAC()) * 1.6666666269302f;
projectile->speed.y = 0.0f;
projectile->speed.z = (0.5f - RANDOMFRAC()) * 1.6666666269302f;
rot.x = RANDOMFRAC() * PALUPF(0.049079570919275f) - PALUPF(0.024539785459638f);
rot.y = RANDOMFRAC() * PALUPF(0.049079570919275f) - PALUPF(0.024539785459638f);
rot.z = RANDOMFRAC() * PALUPF(0.049079570919275f) - PALUPF(0.024539785459638f);
mtx4LoadRotation(&rot, (Mtxf *)&projectile->mtx);
} else {
// DROPTYPE_OWNERREAP
func0f0964b4(&projectile->speed, (Mtxf *)&projectile->mtx);
}
if (!lazy && (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)) {
// Do collision checks
Mtxf *sp48 = model0001a60c(model);
mtx00015be4(camGetProjectionMtxF(), sp48, &spf0);
propSetPerimEnabled(root, false);
spe4.x = spf0.m[3][0];
spe4.y = spf0.m[3][1];
spe4.z = spf0.m[3][2];
if (cd0002de34(&root->pos, root->rooms, &spe4, rooms, CDTYPE_ALL, 7) == CDRESULT_COLLISION
|| (projectile->flags & PROJECTILEFLAG_STICKY) == 0) {
if (cdTestVolume(&spe4, objGetWidth(obj), rooms, CDTYPE_ALL, 0, 0.0f, 0) == CDRESULT_COLLISION) {
spf0.m[3][0] = root->pos.x;
spf0.m[3][2] = root->pos.z;
}
}
propSetPerimEnabled(root, true);
prop->z = -sp48->m[3][2];
} else {
// No collision checks
mtx4LoadIdentity(&spf0);
mtx00015f04(model->scale, &spf0);
mtx4SetTranslation(&root->pos, &spf0);
roomsCopy(root->rooms, rooms);
}
}
objDetach(prop);
propActivate(prop);
propEnable(prop);
prop->pos.x = spf0.m[3][0];
prop->pos.y = spf0.m[3][1];
prop->pos.z = spf0.m[3][2];
propDeregisterRooms(prop);
roomsCopy(rooms, prop->rooms);
spf0.m[3][0] = 0;
spf0.m[3][1] = 0;
spf0.m[3][2] = 0;
mtx4ToMtx3(&spf0, obj->realrot);
func0f069c70(obj, true, true);
obj->shadecol[0] = obj->nextcol[0];
obj->shadecol[1] = obj->nextcol[1];
obj->shadecol[2] = obj->nextcol[2];
obj->shadecol[3] = obj->nextcol[3];
obj->hidden |= OBJHFLAG_SUSPICIOUS;
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *)obj;
if (weapon->weaponnum == WEAPON_GRENADE && weapon->timer240 >= 0) {
propSetDangerous(prop);
}
}
return true;
}
return false;
}
/**
* Make an object fall. Eg. due to it sitting on a table which is now destroyed,
* or because it was a chopper that is now destroyed.
*/
void objFall(struct defaultobj *obj, s32 playernum)
{
#if VERSION >= VERSION_NTSC_1_0
if (obj->type == OBJTYPE_AUTOGUN && g_Vars.normmplayerisrunning) {
// Don't set owner playernum
} else {
obj->hidden &= 0x0fffffff;
obj->hidden |= (playernum << 28) & 0xf0000000;
}
#else
obj->hidden &= 0x0fffffff;
obj->hidden |= (playernum << 28) & 0xf0000000;
#endif
if ((obj->flags2 & OBJFLAG2_00000100) == 0
&& (obj->flags3 & OBJFLAG3_10000000) == 0
&& (obj->flags & (OBJFLAG_00000001 | OBJFLAG_00000008))
&& (obj->hidden & (OBJHFLAG_EMBEDDED | OBJHFLAG_PROJECTILE)) == 0) {
struct coord rot = {0, 0, 0};
struct projectile *projectile = NULL;
func0f0685e4(obj->prop);
if (obj->hidden & OBJHFLAG_PROJECTILE) {
projectile = obj->projectile;
}
if (projectile) {
projectile->speed.x = RANDOMFRAC() * 1.6666666f - 0.8333333f;
projectile->speed.y = RANDOMFRAC() * 3.3333333f + 1.6666666f;
projectile->speed.z = RANDOMFRAC() * 1.6666666f - 0.8333333f;
if ((obj->flags2 & OBJFLAG2_00000200) == 0) {
#if PAL
rot.x = RANDOMFRAC() * 0.0058895489f - 0.0029447745f;
rot.y = RANDOMFRAC() * 0.0058895489f - 0.0029447745f;
rot.z = RANDOMFRAC() * 0.0058895489f - 0.0029447745f;
#else
rot.x = RANDOMFRAC() * 0.0049079573f - 0.0024539786f;
rot.y = RANDOMFRAC() * 0.0049079573f - 0.0024539786f;
rot.z = RANDOMFRAC() * 0.0049079573f - 0.0024539786f;
#endif
}
mtx4LoadRotation(&rot, &projectile->mtx);
projectile->flags |= PROJECTILEFLAG_AIRBORNE;
obj->flags &= ~OBJFLAG_00000100;
obj->hidden &= ~OBJHFLAG_00008000;
}
}
}
/**
* Destroy the objects that the given prop is supporting.
*
* For example, destroying a table will also destroy all the props that are
* sitting on that table.
*/
void objDestroySupportedObjects(struct prop *tableprop, s32 playernum)
{
struct prop *prop;
s16 *propnumptr;
s16 propnums[256];
u8 *start;
u8 *end;
if (propUpdateGeometry(tableprop, &start, &end)) {
roomGetProps(tableprop->rooms, propnums, 256);
propnumptr = propnums;
while (*propnumptr >= 0) {
prop = &g_Vars.props[*propnumptr];
if (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_WEAPON) {
struct defaultobj *obj = prop->obj;
#if VERSION >= VERSION_NTSC_1_0
if (obj)
#endif
{
if (prop->pos.y > tableprop->pos.y
&& (obj->hidden & OBJHFLAG_00008000)
&& func000266a4(prop->pos.x, prop->pos.z, (struct geo *)start)) {
objFall(obj, playernum);
}
}
}
propnumptr++;
}
}
}
void objCheckDestroyed(struct defaultobj *obj, struct coord *pos, s32 playernum)
{
if (obj->damage > obj->maxdamage || objGetDestroyedLevel(obj)) {
struct prop *prop = obj->prop;
struct prop *rootprop = prop;
s16 exptype = g_PropExplosionTypes[8 + obj->modelnum];
s16 rooms[8];
// If in Deep Sea outro
if (g_Vars.tickmode == TICKMODE_CUTSCENE && g_CutsceneAnimNum == ANIM_CUT_PAM_OUTRO_CAM) {
exptype = EXPLOSIONTYPE_24;
}
while (rootprop->parent) {
rootprop = rootprop->parent;
}
if (objGetDestroyedLevel(obj) == 0) {
// Obj is now destroyed
obj->damage = 0;
obj->hidden2 |= OBJH2FLAG_DESTROYED;
func0f065e74(&rootprop->pos, rootprop->rooms, pos, rooms);
explosionCreateComplex(prop, pos, rooms, exptype, playernum);
if (obj->flags2 & OBJFLAG2_REMOVEWHENDESTROYED) {
obj->hidden |= OBJHFLAG_REAPABLE;
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *)obj;
objFall(obj, playernum);
chopper->attackmode = CHOPPERMODE_FALL;
chopper->timer60 = (obj->flags & OBJFLAG_CHOPPER_INACTIVE) ? 0 : 2;
obj->flags &= ~OBJFLAG_CHOPPER_INACTIVE;
} else if (obj->type == OBJTYPE_HOVERCAR) {
struct hovercarobj *hovercar = (struct hovercarobj *)obj;
struct coord sp40;
struct coord sp34;
if (obj->flags & OBJFLAG_HOVERCAR_ISHOVERBOT) {
// Hoverbots bounce and spark when dead
hovercar->dead = true;
hovercar->deadtimer60 = TICKS(250);
hovercar->sparkstimer60 = TICKS(50);
bgunCalculatePlayerShotSpread(&sp40, &sp34, HAND_RIGHT, false);
objBounce(obj, &sp34);
} else if (obj->modelnum == MODEL_TAXICAB || obj->modelnum == MODEL_POLICECAR) {
// Taxi and police car (limo) fall to the ground and retain collision
objDeform(obj, 10);
hovercar->dead = true;
hovercar->speed = 0.0f;
hovercar->speedtime60 = 0.0f;
hovercar->speedaim += 10.0f;
} else {
// Cars in Defection "explode" but actually warp to their next path
explosionCreateSimple(prop, &prop->pos, prop->rooms, exptype, playernum);
hovercarStartNextPath(hovercar);
}
} else {
// Other objects
objDeform(obj, 1);
if (rootprop == prop) {
objDestroySupportedObjects(prop, playernum);
if ((obj->hidden & OBJHFLAG_00008000) == 0) {
obj->hidden |= OBJHFLAG_00010000;
objFall(obj, playernum);
}
}
}
} else {
s32 shotstaken = objGetShotsTaken(obj);
if ((shotstaken % 4) == 0) {
if (obj->type != OBJTYPE_CHOPPER && obj->type != OBJTYPE_HOVERCAR) {
objDeform(obj, (shotstaken >> 2) + 1);
}
func0f065e74(&rootprop->pos, rootprop->rooms, pos, rooms);
if (exptype != EXPLOSIONTYPE_NONE) {
explosionCreateSimple(prop, pos, rooms, EXPLOSIONTYPE_6, playernum);
}
}
if (objGetDestroyedLevel(obj) > 0) {
if (obj->hidden2 & OBJH2FLAG_CANREGEN) {
if (obj->hidden & OBJHFLAG_00001000) {
obj->hidden2 |= OBJH2FLAG_10;
} else {
obj->hidden2 &= ~OBJH2FLAG_10;
}
prop->timetoregen = TICKS(1200);
}
}
if (shotstaken >= 12) {
obj->hidden |= OBJHFLAG_00001000;
if ((obj->flags3 & OBJFLAG3_10000000) == 0) {
obj->flags &= ~OBJFLAG_00000100;
}
}
}
}
}
bool func0f084594(struct model *model, struct modelnode *node, struct coord *arg2, struct coord *arg3, struct hitthing *hitthing, s32 *mtxindexptr, struct modelnode **nodeptr)
{
s32 i;
s32 mtxindex;
bool ok;
bool reset;
s32 maxindex;
struct modelrodata_bbox *rodata;
s8 spc4[3];
struct coord spb8;
struct coord spac;
struct coord min;
struct coord max;
struct coord sp88;
struct coord sp7c;
Mtxf mtx;
rodata = &node->rodata->bbox;
mtxindex = model0001a524(node, 0);
mtx000172f0(model->matrices[mtxindex].m, mtx.m);
spb8.x = arg2->x;
spb8.y = arg2->y;
spb8.z = arg2->z;
mtx4TransformVecInPlace(&mtx, &spb8);
spac.x = arg3->x;
spac.y = arg3->y;
spac.z = arg3->z;
mtx4RotateVecInPlace(&mtx, &spac);
if (var8005efc0 != 0.0f) {
min.x = rodata->xmin - var8005efc0;
min.y = rodata->ymin - var8005efc0;
min.z = rodata->zmin - var8005efc0;
max.x = rodata->xmax + var8005efc0;
max.y = rodata->ymax + var8005efc0;
max.z = rodata->zmax + var8005efc0;
} else {
min.x = rodata->xmin;
min.y = rodata->ymin;
min.z = rodata->zmin;
max.x = rodata->xmax;
max.y = rodata->ymax;
max.z = rodata->zmax;
}
ok = true;
reset = true;
hitthing->unk28 = 0;
for (i = 0; i < 3; i++) {
if (spb8.f[i] < min.f[i]) {
spc4[i] = 1;
sp88.f[i] = min.f[i];
reset = false;
} else if (spb8.f[i] > max.f[i]) {
spc4[i] = 0;
sp88.f[i] = max.f[i];
reset = false;
} else {
spc4[i] = 2;
}
}
if (reset) {
for (i = 0; i < 3; i++) {
hitthing->unk00.f[i] = spb8.f[i];
}
hitthing->unk0c.x = 0.0f;
hitthing->unk0c.y = 1.0f;
hitthing->unk0c.z = 0.0f;
hitthing->unk28 = 2;
} else {
for (i = 0; i < 3; i++) {
if (spc4[i] != 2 && spac.f[i] != 0.0f) {
sp7c.f[i] = (sp88.f[i] - spb8.f[i]) / spac.f[i];
} else {
sp7c.f[i] = -1.0f;
}
}
maxindex = 0;
for (i = 1; i < 3; i++) {
if (sp7c.f[i] > sp7c.f[maxindex]) {
maxindex = i;
}
}
if (sp7c.f[maxindex] < 0.0f) {
ok = false;
} else {
for (i = 0; i < 3; i++) {
if (maxindex != i) {
hitthing->unk00.f[i] = spb8.f[i] + sp7c.f[maxindex] * spac.f[i];
if (hitthing->unk00.f[i] < min.f[i] || hitthing->unk00.f[i] > max.f[i]) {
ok = false;
}
} else {
hitthing->unk00.f[i] = sp88.f[i];
}
}
if (ok) {
hitthing->unk28 = maxindex * 2;
if (spc4[maxindex] == 0) {
hitthing->unk28 = (maxindex << 2) + 2;
for (i = 0; i < 3; i++) {
hitthing->unk0c.f[i] = (i != maxindex ? 0.0f : 1.0f);
}
} else {
hitthing->unk28 = maxindex << 2;
for (i = 0; i < 3; i++) {
hitthing->unk0c.f[i] = (i != maxindex ? 0.0f : -1.0f);
}
}
}
}
}
if (ok) {
*mtxindexptr = mtxindex;
*nodeptr = node;
}
return ok;
}
bool func0f0849dc(struct model *model, struct modelnode *nodearg, struct coord *arg2, struct coord *arg3, struct hitthing *hitthing, s32 *dstmtxindex, struct modelnode **dstnode)
{
struct coord spec;
struct coord spe0;
struct coord spd4;
Mtxf *spd0 = NULL;
bool done = false;
struct modelnode *node = nodearg;
struct gfxvtx *vertices = NULL;
while (node && !done) {
u32 type = node->type & 0xff;
Gfx *s3 = NULL;
void *s5 = NULL;
switch (type) {
case MODELNODETYPE_DL:
{
struct modelrodata_dl *rodata = &node->rodata->dl;
struct modelrwdata_dl *rwdata = modelGetNodeRwData(model, node);
if (rwdata->gdl != NULL) {
if (rwdata->gdl == rodata->primary) {
s3 = (Gfx *)((u32)rodata->colourtable + ((u32)rodata->primary & 0xffffff));
} else {
s3 = rwdata->gdl;
}
if (rodata->secondary != NULL) {
s5 = (void *)((u32)rodata->colourtable + ((u32)rodata->secondary & 0xffffff));
}
vertices = rwdata->vertices;
}
}
break;
case MODELNODETYPE_GUNDL:
{
struct modelrodata_gundl *rodata = &node->rodata->gundl;
if (rodata->primary != NULL) {
s3 = (Gfx *)((u32)rodata->baseaddr + ((u32)rodata->primary & 0xffffff));
if (rodata->secondary != NULL) {
s5 = (Gfx *)((u32)rodata->baseaddr + ((u32)rodata->secondary & 0xffffff));
}
vertices = (void *)(u32)rodata->baseaddr;
}
}
break;
case MODELNODETYPE_DISTANCE:
model0001c784(model, node);
break;
case MODELNODETYPE_TOGGLE:
model0001c7d0(model, node);
break;
case MODELNODETYPE_HEADSPOT:
modelAttachHead(model, node);
break;
}
if (s3 != NULL) {
s32 mtxindex = model0001a524(node, 0);
Mtxf *mtx = NULL;
Mtxf sp64;
if (mtxindex >= 0) {
mtx = &model->matrices[mtxindex];
}
if (mtx && mtx != spd0) {
spd0 = mtx;
mtx000172f0(mtx->m, sp64.m);
spec.x = arg2->x;
spec.y = arg2->y;
spec.z = arg2->z;
mtx4TransformVecInPlace(&sp64, &spec);
spd4.x = arg3->x;
spd4.y = arg3->y;
spd4.z = arg3->z;
mtx4RotateVecInPlace(&sp64, &spd4);
spe0.x = spd4.x * 32767.0f + spec.x;
spe0.y = spd4.y * 32767.0f + spec.y;
spe0.z = spd4.z * 32767.0f + spec.z;
}
if (func0f15f560(&spec, &spe0, &spd4, s3, s5, vertices, hitthing)) {
*dstmtxindex = mtxindex;
*dstnode = node;
done = true;
}
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node == nodearg) {
node = NULL;
break;
}
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
return done;
}
#if PIRACYCHECKS
u32 add43214321(u32 value)
{
return value + 0x43214321;
}
#endif
void glassDestroy(struct defaultobj *obj)
{
struct prop *prop = obj->prop;
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
wallhitsFreeByProp(prop, 0);
wallhitsFreeByProp(prop, 1);
if (obj->modelnum == MODEL_AIVILLABOT1
|| obj->modelnum == MODEL_AIVILLABOT2
|| obj->modelnum == MODEL_AIVILLABOT3) {
shardsCreate(&prop->pos, &obj->realrot[0][0], &obj->realrot[1][0], &obj->realrot[2][0],
bbox->xmin, bbox->xmax, bbox->ymin, bbox->ymax, SHARDTYPE_BOTTLE, prop);
} else {
shardsCreate(&prop->pos, &obj->realrot[0][0], &obj->realrot[1][0], &obj->realrot[2][0],
bbox->xmin, bbox->xmax, bbox->ymin, bbox->ymax, SHARDTYPE_GLASS, prop);
}
#if PIRACYCHECKS
{
/**
* Check two words at 0xdc0 in the ROM. If they're not right, set the
* audio frequency high so everyone sounds like chipmunks.
*/
u8 buffer[0x20];
u32 *ptr;
u32 romaddr = add43214321(0x00000dc0 - 0x43214321);
ptr = (u32 *) ALIGN16((u32)buffer);
dmaExec(ptr, romaddr, 0x10);
if (ptr[1] + ptr[0] != add43214321(0x10a78f00e - 0x43214321)) {
osAiSetFrequency(80000);
}
}
#endif
obj->damage = 0;
obj->hidden |= OBJHFLAG_REAPABLE;
obj->hidden2 |= OBJH2FLAG_DESTROYED;
}
void doorDestroyGlass(struct doorobj *door)
{
struct modelnode *node;
bool closed;
struct prop *prop = door->base.prop;
struct model *model = door->base.model;
union modelrodata *rodata;
union modelrwdata *rwdata;
Mtxf matrix;
rodata = modelGetPartRodata(model->filedata, 2);
if (door->portalnum >= 0) {
// @bug: Firing three shots at door glass is supposed to destroy it,
// and this function is called when the third shot happens, but if it's
// shot from a long distance (such that the glass is opaque) then this
// function returns early and the glass remains in place, despite
// setting the portal as unblocked. On the fourth shot
// PORTALFLAG_FORCEOPEN is already set, so closed is false and the
// glass is destroyed.
closed = PORTAL_IS_CLOSED(door->portalnum);
g_BgPortals[door->portalnum].flags |= PORTALFLAG_FORCEOPEN;
if (closed) {
return;
}
}
func0f08c424(door, &matrix);
shardsCreate((struct coord *) &matrix.m[3][0], &matrix.m[0][0], &matrix.m[1][0], &matrix.m[2][0],
rodata->bbox.xmin, rodata->bbox.xmax, rodata->bbox.ymin, rodata->bbox.ymax,
SHARDTYPE_GLASS, prop);
wallhitsFreeByProp(prop, 1);
node = modelGetPart(model->filedata, 1);
rwdata = modelGetNodeRwData(model, node);
rwdata->toggle.visible = false;
}
void cctvHandleLensShot(struct defaultobj *obj)
{
struct prop *prop = obj->prop;
struct model *model = obj->model;
union modelrodata *rodata;
union modelrwdata *rwdata;
Mtxf *sp7c;
Mtxf matrix;
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
rodata = modelGetPartRodata(model->filedata, MODELPART_CCTV_0002);
sp7c = model0001a5cc(model, modelGetPart(model->filedata, MODELPART_CCTV_LENS), 0);
mtx00015be4(camGetProjectionMtxF(), sp7c, &matrix);
shardsCreate((struct coord *) matrix.m[3], matrix.m[0], matrix.m[1], matrix.m[2],
rodata->bbox.xmin, rodata->bbox.xmax, rodata->bbox.ymin, rodata->bbox.ymax,
SHARDTYPE_GLASS, prop);
}
wallhitsFreeByProp(prop, 1);
rwdata = modelGetNodeRwData(model, modelGetPart(model->filedata, MODELPART_CCTV_0003));
rwdata->toggle.visible = false;
}
void func0f085050(struct prop *prop, f32 damage, struct coord *pos, s32 arg3, s32 playernum)
{
struct defaultobj *obj = prop->obj;
#if VERSION >= VERSION_NTSC_1_0
if (obj->type == OBJTYPE_AUTOGUN && g_Vars.normmplayerisrunning) {
// do nothing
} else {
obj->hidden &= 0x0fffffff;
obj->hidden |= (playernum << 28) & 0xf0000000;
}
#else
obj->hidden &= 0x0fffffff;
obj->hidden |= (playernum << 28) & 0xf0000000;
#endif
if ((obj->hidden & OBJHFLAG_HASOWNER) == 0) {
struct prop *child = prop->child;
while (child) {
struct prop *next = child->next;
func0f085050(child, damage, pos, arg3, playernum);
child = next;
}
objDamage(prop->obj, damage, pos, arg3, playernum);
}
}
bool func0f085158(struct defaultobj *obj)
{
switch (obj->type) {
case OBJTYPE_DOOR:
case OBJTYPE_BASIC:
case OBJTYPE_ALARM:
case OBJTYPE_CCTV:
case OBJTYPE_SINGLEMONITOR:
case OBJTYPE_MULTIMONITOR:
case OBJTYPE_HANGINGMONITORS:
case OBJTYPE_AUTOGUN:
case OBJTYPE_DEBRIS:
case OBJTYPE_GASBOTTLE:
case OBJTYPE_29:
case OBJTYPE_GLASS:
case OBJTYPE_SAFE:
case OBJTYPE_TINTEDGLASS:
case OBJTYPE_LIFT:
case OBJTYPE_HOVERBIKE:
case OBJTYPE_HOVERPROP:
case OBJTYPE_FAN:
case OBJTYPE_HOVERCAR:
case OBJTYPE_CHOPPER:
return true;
}
return false;
}
bool func0f085194(struct defaultobj *obj)
{
switch (obj->type) {
case OBJTYPE_KEY:
case OBJTYPE_AMMOCRATE:
case OBJTYPE_WEAPON:
case OBJTYPE_HAT:
case OBJTYPE_MULTIAMMOCRATE:
case OBJTYPE_SHIELD:
case OBJTYPE_ESCASTEP:
return true;
}
return false;
}
bool objIsMortal(struct defaultobj *obj)
{
if (obj->type == OBJTYPE_DOOR) {
return false;
}
if (func0f085194(obj) && obj->type != OBJTYPE_SHIELD) {
if ((obj->flags & OBJFLAG_00010000) == 0) {
return false;
}
} else if (obj->flags & OBJFLAG_INVINCIBLE) {
return false;
}
return true;
}
void objTakeGunfire(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weaponnum, s32 playernum)
{
if ((obj->flags2 & OBJFLAG2_IMMUNETOGUNFIRE) == 0) {
objDamage(obj, damage, pos, weaponnum, playernum);
}
}
void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weaponnum, s32 playernum)
{
// Store the attacker playernum into the object's "hidden" field
#if VERSION >= VERSION_NTSC_1_0
// ...but not for deployed laptop guns in multiplayer, because those bits
// likely designate the owner of the gun
if (obj->type != OBJTYPE_AUTOGUN || !g_Vars.normmplayerisrunning) {
obj->hidden &= 0x0fffffff;
obj->hidden |= (playernum << 28) & 0xf0000000;
}
#else
obj->hidden &= 0x0fffffff;
obj->hidden |= (playernum << 28) & 0xf0000000;
#endif
if (obj->type == OBJTYPE_GASBOTTLE && objGetDestroyedLevel(obj) == 1) {
return;
}
if (weaponnum == WEAPON_NONE) {
if (func0f085194(obj)) {
return;
}
if (obj->flags & OBJFLAG_01000000) {
return;
}
} else {
if (obj->flags & OBJFLAG_INVINCIBLE) {
return;
}
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon;
if (obj->flags2 & OBJFLAG2_AICANNOTUSE) {
propExplode(obj->prop, EXPLOSIONTYPE_12);
obj->hidden |= OBJHFLAG_REAPABLE;
}
// If damaging an explosive item, make it explode immediately by
// zeroing its timer
weapon = (struct weaponobj *) obj;
if (weapon->weaponnum == WEAPON_GRENADE
|| weapon->weaponnum == WEAPON_TIMEDMINE
|| weapon->weaponnum == WEAPON_REMOTEMINE
|| weapon->weaponnum == WEAPON_PROXIMITYMINE
|| weapon->weaponnum == WEAPON_ROCKET
|| weapon->weaponnum == WEAPON_HOMINGROCKET
|| weapon->weaponnum == WEAPON_GRENADEROUND
|| (weapon->weaponnum == WEAPON_DRAGON && weapon->gunfunc == FUNC_SECONDARY)) {
// Homing rockets are immune to remote mines? Or maybe they just
// don't explode because the mine is exploding anyway
if (weapon->weaponnum != WEAPON_HOMINGROCKET || weaponnum != WEAPON_REMOTEMINE) {
weapon->timer240 = 0;
}
}
return;
}
if (obj->type == OBJTYPE_AMMOCRATE || obj->type == OBJTYPE_MULTIAMMOCRATE) {
// @bug: It's not safe to cast a multiammocrateobj to an ammocrateobj.
// For multiammocrateobjs, this is reading the first model/qty pair
// as a single word... this turns out to not have any bad effects.
struct ammocrateobj *crate = (struct ammocrateobj *) obj;
if (crate->ammotype == AMMOTYPE_GRENADE
|| crate->ammotype == AMMOTYPE_ROCKET
|| crate->ammotype == AMMOTYPE_HOMINGROCKET
|| crate->ammotype == AMMOTYPE_REMOTE_MINE
|| crate->ammotype == AMMOTYPE_PROXY_MINE
|| crate->ammotype == AMMOTYPE_TIMED_MINE
|| crate->ammotype == AMMOTYPE_DEVASTATOR) {
obj->flags |= OBJFLAG_AMMOCRATE_EXPLODENOW;
}
return;
}
if (!objIsMortal(obj)) {
return;
}
}
// Tweak damage and apply it
if (obj->type == OBJTYPE_CHOPPER) {
damage *= 0.25f;
}
if (objGetDestroyedLevel(obj) == 0) {
// Not destroyed
damage *= 250;
if (damage < 1) {
damage = 1;
}
} else {
// Figure out how much to go within this destroyed level and cap it there
f32 max = 4 - (objGetShotsTaken(obj) % 4);
if (damage > max) {
damage = max;
} else if (damage < 1) {
damage = 1;
}
}
damage = obj->damage + damage;
if (damage >= 32767) {
obj->damage = 32767;
} else {
obj->damage = damage;
}
// Handle objects that do things when damaged
if (obj->modelnum == MODEL_TARGET) {
// empty
} else {
if (obj->type == OBJTYPE_GLASS || obj->type == OBJTYPE_TINTEDGLASS) {
if (obj->damage >= obj->maxdamage) {
glassDestroy(obj);
}
} else {
objSetDropped(obj->prop, DROPTYPE_DEFAULT);
objCheckDestroyed(obj, pos, playernum);
}
// This code appears to be unused...
// It appears to handle spawning a weapon when the ammo crate is shot.
if (obj->type == OBJTYPE_MULTIAMMOCRATE) {
if (objGetDestroyedLevel(obj) == 1) {
u32 stack;
struct multiammocrateobj *crate = (struct multiammocrateobj *) obj;
s32 startindex = random() % ARRAYCOUNT(crate->slots);
s32 i = startindex;
do {
if (crate->slots[i].quantity > 0 && crate->slots[i].modelnum != 0xffff) {
struct ammocrateobj *newcrate = ammocrateAllocate();
if (newcrate) {
s32 modelnum = crate->slots[i].modelnum;
struct defaultobj tmp = {
256, // extrascale
0, // hidden2
OBJTYPE_AMMOCRATE, // type
0, // modelnum
-1, // pad
OBJFLAG_00000001, // flags
0, // flags2
0, // flags3
NULL, // prop
NULL, // model
1, 0, 0, // realrot
0, 1, 0,
0, 0, 1,
0, // hidden
NULL, // geo
NULL, // projectile
0, // damage
1000, // maxdamage
0xff, 0xff, 0xff, 0x00, // shadecol
0xff, 0xff, 0xff, 0x00, // nextcol
0x0fff, // floorcol
0, // tiles
};
newcrate->base = tmp;
newcrate->base.modelnum = modelnum;
newcrate->ammotype = i + 1;
if (objInitWithModelDef(&newcrate->base, g_ModelStates[modelnum].filedata)) {
propReparent(newcrate->base.prop, obj->prop);
}
break;
}
}
i = (i + 1) % ARRAYCOUNT(crate->slots);
} while (i != startindex);
}
} else if (obj->type == OBJTYPE_CHOPPER) {
struct chopperobj *chopper = (struct chopperobj *) obj;
if (chopper->attackmode != CHOPPERMODE_FALL) {
chopper->attackmode = CHOPPERMODE_COMBAT;
}
} else if (obj->type == OBJTYPE_AUTOGUN) {
obj->flags |= OBJFLAG_AUTOGUN_DAMAGED;
if (objGetDestroyedLevel(obj) == 1) {
obj->flags |= OBJFLAG_DEACTIVATED;
}
} else if (obj->type == OBJTYPE_CCTV) {
if (objGetDestroyedLevel(obj) == 1) {
obj->flags |= OBJFLAG_DEACTIVATED;
}
} else if (obj->type == OBJTYPE_SINGLEMONITOR) {
struct singlemonitorobj *monitor = (struct singlemonitorobj *) obj;
if (objGetDestroyedLevel(obj) == 1) {
tvscreenSetCmdlist(&monitor->screen, g_TvCmdlist14);
}
} else if (obj->type == OBJTYPE_MULTIMONITOR) {
struct multimonitorobj *monitor = (struct multimonitorobj *) obj;
if (objGetDestroyedLevel(obj) == 1) {
tvscreenSetCmdlist(&monitor->screens[0], g_TvCmdlist14);
tvscreenSetCmdlist(&monitor->screens[1], g_TvCmdlist14);
tvscreenSetCmdlist(&monitor->screens[2], g_TvCmdlist14);
tvscreenSetCmdlist(&monitor->screens[3], g_TvCmdlist14);
}
} else if (obj->type == OBJTYPE_GASBOTTLE) {
if (objGetDestroyedLevel(obj) == 1) {
gasReleaseFromPos(&obj->prop->pos);
}
} else if (obj->type == OBJTYPE_SHIELD) {
struct shieldobj *shield = (struct shieldobj *) obj;
if (objGetDestroyedLevel(obj) == 0) {
shield->amount = shield->initialamount * (f32)(obj->maxdamage - obj->damage) / (f32)obj->maxdamage;
} else {
shield->amount = 0;
}
}
if (objGetDestroyedLevel(obj) == 1) {
struct prop *child = obj->prop->child;
while (child) {
struct prop *next = child->next;
objSetDropped(child, DROPTYPE_DEFAULT);
child = next;
}
}
}
}
void func0f0859a0(struct prop *prop, struct shotdata *shotdata)
{
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
struct prop *child;
struct modelnode *node1 = NULL;
struct hitthing hitthing1;
s32 spe4;
struct coord spd8;
f32 spd4;
struct modelnode *node2;
s32 lVar3;
bool isnotglass;
struct modelnode *node3;
struct hitthing hitthing2;
s32 sp90;
struct modelnode *node4;
struct prop *next;
struct coord sp7c;
struct coord sp70;
if (obj->hidden & OBJHFLAG_00001000) {
return;
}
if ((prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) == 0) {
return;
}
child = prop->child;
while (child) {
next = child->next;
func0f0859a0(child, shotdata);
child = next;
}
if (var8005efc0 > 0.0f) {
lVar3 = model000225d4(model, &shotdata->unk00, &shotdata->unk0c, &node1);
while (lVar3 > 0) {
if (func0f084594(model, node1, &shotdata->unk00, &shotdata->unk0c, &hitthing1, &spe4, &node2)) {
break;
}
lVar3 = model000225d4(model, &shotdata->unk00, &shotdata->unk0c, &node1);
}
} else {
do {
lVar3 = model000225d4(model, &shotdata->unk00, &shotdata->unk0c, &node1);
if (lVar3 > 0 && func0f0849dc(model, node1, &shotdata->unk00, &shotdata->unk0c, &hitthing1, &spe4, &node2)) {
break;
}
} while (lVar3 > 0);
}
if (obj->flags3 & OBJFLAG3_HOVERBEDSHIELD) {
node3 = modelGetPart(model->filedata, MODELPART_0067);
if (node3 && func0f084594(model, node3, &shotdata->unk00, &shotdata->unk0c, &hitthing2, &sp90, &node4)) {
if (lVar3 <= 0 ||
model->matrices[sp90].m[0][2] * hitthing2.unk00.f[0] + model->matrices[sp90].m[1][2] * hitthing2.unk00.f[1] + model->matrices[sp90].m[2][2] * hitthing2.unk00.f[2] >
model->matrices[spe4].m[0][2] * hitthing1.unk00.f[0] + model->matrices[spe4].m[1][2] * hitthing1.unk00.f[1] + model->matrices[spe4].m[2][2] * hitthing1.unk00.f[2]) {
lVar3 = 1;
hitthing1 = hitthing2;
node1 = node3;
spe4 = sp90;
node2 = node4;
hitthing1.texturenum = 10000;
}
}
}
if (lVar3 > 0) {
mtx4TransformVec(&model->matrices[spe4], &hitthing1.unk00, &spd8);
spd4 = -spd8.f[2];
if (spd4 <= shotdata->unk34) {
isnotglass = true;
if ((obj->flags & OBJFLAG_INVINCIBLE) == 0) {
if (obj->type == OBJTYPE_GLASS || obj->type == OBJTYPE_TINTEDGLASS) {
isnotglass = false;
} else if (obj->model->filedata->skel == &g_SkelWindowedDoor
&& modelGetPart(obj->model->filedata, MODELPART_WINDOWEDDOOR_0003) == node2) {
isnotglass = false;
}
}
mtx4TransformVec(camGetProjectionMtxF(), &spd8, &sp7c);
mtx4RotateVec(&model->matrices[spe4], &hitthing1.unk0c, &sp70);
mtx4RotateVecInPlace(camGetProjectionMtxF(), &sp70);
func0f061fa8(shotdata, prop, spd4, lVar3,
node1, &hitthing1, spe4, node2,
model, isnotglass && shotdata->gset.weaponnum != WEAPON_FARSIGHT,
(obj->flags2 & OBJFLAG2_BULLETPROOF)
&& shotdata->gset.weaponnum != WEAPON_DY357MAGNUM
&& shotdata->gset.weaponnum != WEAPON_FARSIGHT,
&sp7c, &sp70);
}
}
}
void func0f085e00(struct prop *prop, struct shotdata *shotdata)
{
f32 tmp;
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
if ((prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)
&& (obj->hidden & OBJHFLAG_00001000) == 0
&& (obj->flags2 & OBJFLAG2_SHOOTTHROUGH) == 0) {
tmp = -(model->matrices[0].m[3][2] + objGetRotatedLocalZMaxByMtx4(bbox, model->matrices));
if (tmp <= shotdata->unk34) {
func0f0859a0(prop, shotdata);
}
}
}
void objHit(struct shotdata *shotdata, struct hit *hit)
{
struct defaultobj *obj;
struct coord sp110;
struct prop *prop;
u8 isclosefunc = false;
s32 i;
bool explosiveshells = false;
bool spfc = hit->unk4c;
struct weaponfunc *func = gsetGetWeaponFunction(&shotdata->gset);
struct coord spec;
f32 tmp;
struct prop *spe4;
s16 textureindex;
s16 spdc[3];
if (func != NULL) {
if ((func->type & 0xff) == INVENTORYFUNCTYPE_CLOSE) {
isclosefunc = true;
}
if (func->flags & FUNCFLAG_EXPLOSIVESHELLS) {
explosiveshells = true;
}
}
prop = hit->prop;
while (prop->parent) {
prop = prop->parent;
}
obj = hit->prop->obj;
sp110.x = shotdata->unk00.x - hit->distance * shotdata->unk0c.x / shotdata->unk0c.z;
sp110.y = shotdata->unk00.y - hit->distance * shotdata->unk0c.y / shotdata->unk0c.z;
sp110.z = shotdata->unk00.z - hit->distance;
mtx4TransformVecInPlace(camGetProjectionMtxF(), &sp110);
if (!spfc && chrIsUsingPaintball(g_Vars.currentplayer->prop->chr)) {
spfc = true;
}
if (hit->unk4c) {
bgunSetHitPos(&sp110);
}
if (obj->modelnum == MODEL_TARGET) {
if (hit->hitthing.texturenum == TEXTURE_0B9E) {
frCalculateHit(obj, &sp110, shotdata->gset.unk063a);
} else if ((shotdata->gset.weaponnum != WEAPON_CALLISTO || shotdata->gset.weaponfunc != FUNC_SECONDARY)
#if VERSION >= VERSION_NTSC_1_0
&& shotdata->gset.weaponnum != WEAPON_FARSIGHT
#endif
) {
// For some penetrating weapons, unset hits beyond the shot distance?
spe4 = hit->prop;
mtx4TransformVec(obj->model->matrices, &sp110, &spec);
tmp = -spec.z;
for (i = 0; i < 10; i++) {
if (shotdata->hits[i].prop && shotdata->hits[i].prop != spe4 && shotdata->hits[i].distance > tmp) {
shotdata->hits[i].prop = NULL;
}
}
shotdata->unk34 = tmp;
}
}
// Create sparks
if (!isclosefunc) {
if (chrIsUsingPaintball(g_Vars.currentplayer->prop->chr)) {
sparksCreate(prop->rooms[0], prop, &sp110, 0, 0, SPARKTYPE_PAINT);
} else {
sparksCreate(prop->rooms[0], prop, &sp110, 0, 0, SPARKTYPE_DEFAULT);
}
}
// Create shield hit if object is shielded
if (hit->hitthing.texturenum == 10000) {
spdc[0] = hit->hitthing.unk00.x;
spdc[1] = hit->hitthing.unk00.y;
spdc[2] = hit->hitthing.unk00.z;
shieldhitCreate(prop, (obj->flags3 & OBJFLAG3_SHOWSHIELD) ? 4.0f : 8.0f, hit->prop, hit->node, hit->model, hit->hitthing.unk28 / 2, spdc);
}
// Increment object hit count
if (objIsHealthy(obj) && objIsMortal(obj) && hit->unk4c) {
mpstatsIncrementPlayerShotCount2(&shotdata->gset, SHOTREGION_OBJECT);
}
// Play hit sound
if (!spfc) {
bgunPlayGlassHitSound(&hit->prop->pos, hit->prop->rooms, hit->hitthing.texturenum);
} else if (!isclosefunc) {
bgunPlayPropHitSound(&shotdata->gset, hit->prop, hit->hitthing.texturenum);
}
// Create wall hit (bullet hole)
if (!isclosefunc
&& hit->hitthing.texturenum != 10000
&& shotdata->gset.weaponnum != WEAPON_UNARMED
&& shotdata->gset.weaponnum != WEAPON_LASER
&& shotdata->gset.weaponnum != WEAPON_TRANQUILIZER
&& shotdata->gset.weaponnum != WEAPON_FARSIGHT) {
if (hit->unk4c == 0) {
struct prop *hitprop = hit->prop;
s8 iswindoweddoor = obj->model->filedata->skel == &g_SkelWindowedDoor ? true : false;
textureindex = WALLHITTEX_GLASS1 + (random() % 3);
if ((obj->type == OBJTYPE_DOOR && !iswindoweddoor)
|| (obj->flags & OBJFLAG_INVINCIBLE)
|| (obj->flags2 & OBJFLAG2_IMMUNETOGUNFIRE)) {
// Use a bulletproof glass texture
textureindex += 10;
}
wallhitCreate(&hit->hitthing.unk00, &hit->hitthing.unk0c, &shotdata->gunpos, 0,
0, textureindex, 1, hitprop, hit->mtxindex, iswindoweddoor, g_Vars.currentplayer->prop->chr, true);
} else {
s16 textureindex;
struct surfacetype *surfacetype;
s32 spcc;
s8 spcb = false;
bool spc4;
if (hit->hitthing.texturenum < 0 || hit->hitthing.texturenum >= NUM_TEXTURES) {
surfacetype = g_SurfaceTypes[0];
} else if (g_Textures[hit->hitthing.texturenum].surfacetype < 15) {
surfacetype = g_SurfaceTypes[g_Textures[hit->hitthing.texturenum].surfacetype];
} else {
surfacetype = g_SurfaceTypes[0];
}
if (surfacetype->numwallhittexes > 0) {
spc4 = false;
spcc = random() % surfacetype->numwallhittexes;
if ((obj->model->filedata->skel == &g_SkelWindowedDoor && hit->unk44 == modelGetPart(obj->model->filedata, MODELPART_WINDOWEDDOOR_0003))
|| (obj->model->filedata->skel == &g_SkelCctv && hit->unk44 == modelGetPart(obj->model->filedata, MODELPART_CCTV_LENS))) {
spcb = true;
}
textureindex = surfacetype->wallhittexes[spcc];
if (textureindex >= WALLHITTEX_GLASS1 && textureindex <= WALLHITTEX_GLASS3) {
if (obj->type == OBJTYPE_DOOR
|| (obj->flags & OBJFLAG_INVINCIBLE)
|| (obj->flags2 & OBJFLAG2_IMMUNETOGUNFIRE)) {
// Use a bulletproof glass texture
textureindex += 10;
}
spc4 = true;
}
wallhitCreate(&hit->hitthing.unk00, &hit->hitthing.unk0c, &shotdata->gunpos, 0,
0, textureindex, 1, hit->prop, hit->mtxindex, spcb, g_Vars.currentplayer->prop->chr, spc4);
}
}
}
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 (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) {
damage *= 100.0f;
} else {
damage *= 5.0f;
}
}
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);
}
}
}
objDropRecursively(hit->prop, false);
// 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;
spb0.x = shotdata->dir.x * 3.0f;
spb0.y = shotdata->dir.y * 3.0f;
spb0.z = shotdata->dir.z * 3.0f;
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_LINKEDTOSAFE) {
bounce = false;
}
if (bounce) {
objBounce(obj, &shotdata->unk0c);
}
}
}
}
}
u32 propobjGetCiTagId(struct prop *prop)
{
if (prop && g_Vars.stagenum == STAGE_CITRAINING) {
u8 tags[8] = { 0x0e, 0x0f, 0x10, 0x47, 0x46, 0x45, 0x1b, 0x7f };
struct defaultobj *obj = prop->obj;
u32 i;
for (i = 0; i != 8; i++) {
struct defaultobj *taggedobj = objFindByTagId(tags[i]);
if (obj == taggedobj) {
return tags[i];
}
}
}
return 0;
}
bool objIsHealthy(struct defaultobj *obj)
{
return objGetDestroyedLevel(obj) == 0;
}
bool objTestForInteract(struct prop *prop)
{
u32 stack;
struct defaultobj *obj = prop->obj;
bool maybe = false;
if (propobjGetCiTagId(prop)) {
maybe = true;
} else if (obj->type == OBJTYPE_ALARM
|| (obj->flags & OBJFLAG_THROWNLAPTOP)
|| (obj->flags3 & (OBJFLAG3_HTMTERMINAL | OBJFLAG3_INTERACTABLE))
|| (obj->hidden & (OBJHFLAG_LIFTDOOR | OBJHFLAG_00000002))) {
maybe = true;
} else if (obj->type == OBJTYPE_HOVERBIKE) {
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
maybe = true;
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK
&& bmoveGetCrouchPos() == CROUCHPOS_STAND
&& g_Vars.currentplayer->crouchoffset == 0.0f) {
maybe = true;
}
} else if ((obj->flags3 & OBJFLAG3_GRABBABLE)
&& g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK
&& bmoveGetCrouchPos() == CROUCHPOS_STAND
&& g_Vars.currentplayer->crouchoffset == 0.0f) {
maybe = true;
}
if (maybe && (obj->hidden & OBJHFLAG_MOUNTED) && prop == bmoveGetHoverbike()) {
maybe = false;
}
if (maybe
&& (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)
&& objIsHealthy(obj)
&& (obj->flags & OBJFLAG_CANNOT_ACTIVATE) == 0) {
struct prop *playerprop = g_Vars.currentplayer->prop;
f32 x = prop->pos.x - playerprop->pos.x;
f32 y = prop->pos.y - playerprop->pos.y;
f32 z = prop->pos.z - playerprop->pos.z;
f32 range;
if (obj->modelnum == MODEL_SK_SHUTTLE) {
range = 500;
} else if (obj->modelnum == MODEL_TAXICAB) {
range = 300;
} else if (obj->modelnum == MODEL_PRESCAPSULE) {
range = 280;
} else if (obj->flags3 & OBJFLAG3_INTERACTSHORTRANGE) {
range = 100;
} else {
range = 200;
}
if (x * x + z * z < range * range && y < range && y > -range) {
f32 angle = atan2f(x, z) - (360.0f - g_Vars.currentplayer->vv_theta) * M_BADTAU / 360.0f;
if (angle < 0.0f) {
angle += M_BADTAU;
}
if (angle > M_BADPI) {
angle = M_BADTAU - angle;
}
if (angle <= 0.3926365673542f) {
if ((obj->flags2 & OBJFLAG2_INTERACTCHECKLOS) == 0 || cd0002dcd0(&playerprop->pos, playerprop->rooms, &prop->pos, prop->rooms, 0x20)) {
g_InteractProp = prop;
}
}
}
}
return true;
}
bool currentPlayerTryMountHoverbike(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
bool mount = false;
u32 stack[2];
if (obj->type == OBJTYPE_HOVERBIKE
&& g_Vars.lvframe60 - g_Vars.currentplayer->activatetimelast < TICKS(30)
&& (obj->hidden & OBJHFLAG_MOUNTED) == 0) {
if (obj->hidden & OBJHFLAG_GRABBED) {
if (bmoveGetGrabbedProp() == prop) {
mount = true;
} else {
mount = false;
}
} else {
mount = true;
}
}
if (mount && g_Vars.currentplayer->bondmovemode != MOVEMODE_GRAB) {
if (g_Vars.currentplayer->bondmovemode != MOVEMODE_WALK
|| bmoveGetCrouchPos() != CROUCHPOS_STAND
|| g_Vars.currentplayer->crouchoffset != 0) {
mount = false;
}
}
if (mount) {
f32 angle = atan2f(
prop->pos.x - g_Vars.currentplayer->prop->pos.x,
prop->pos.z - g_Vars.currentplayer->prop->pos.z);
angle -= hoverpropGetTurnAngle(obj);
if (angle < 0) {
angle += M_BADTAU;
}
if ((angle > 0.3926365673542f && angle < 2.3558194637299f)
|| (angle < 5.8895483016968f && angle > 3.9263656139374f)) {
g_Vars.currentplayer->hoverbike = prop;
bmoveSetMode(MOVEMODE_BIKE);
return true;
}
}
return false;
}
bool propobjInteract(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
bool result = false;
u32 tag_id = propobjGetCiTagId(prop);
if (tag_id) {
// CI object - terminals etc
u8 handled = false;
if (ciIsTourDone()) {
if (tag_id == 0x10) {
struct trainingdata *data = dtGetData();
handled = true;
if (data->intraining) {
func0f0f85e0(&g_DtDetailsMenuDialog, MENUROOT_TRAINING);
} else {
func0f0f85e0(&g_DtListMenuDialog, MENUROOT_TRAINING);
}
} else if (tag_id == 0x45) {
struct trainingdata *data = getHoloTrainingData();
handled = true;
if (data->intraining) {
func0f0f85e0(&g_HtDetailsMenuDialog, MENUROOT_TRAINING);
} else {
func0f0f85e0(&g_HtListMenuDialog, MENUROOT_TRAINING);
}
} else if (tag_id == 0x7f) {
handled = true;
if (frIsInTraining()) {
func0f0f85e0(&g_FrTrainingInfoInGameMenuDialog, MENUROOT_TRAINING);
} else {
func0f0f85e0(&g_FrWeaponListMenuDialog, MENUROOT_TRAINING);
}
}
}
if (!handled) {
if (tag_id == 0x0e) {
handled = true;
func0f0f85e0(&g_BioListMenuDialog, MENUROOT_TRAINING);
} else if (tag_id == 0x0f) {
handled = true;
func0f0f85e0(&g_CheatsMenuDialog, MENUROOT_TRAINING);
} else if (tag_id == 0x1b) {
handled = true;
func0f0f85e0(&g_FrWeaponsAvailableMenuDialog, MENUROOT_TRAINING);
} else if (tag_id == 0x47) {
handled = true;
func0f0f85e0(&g_CiMenuViaPcMenuDialog, MENUROOT_MAINMENU);
} else if (tag_id == 0x46) {
handled = true;
func0f0f85e0(&g_HangarListMenuDialog, MENUROOT_TRAINING);
}
}
if (handled) {
// Typing sound
sndStart(var80095200, SFX_TYPING_8118, NULL, -1, -1, -1, -1, -1);
}
func0f0fd494(&prop->pos);
} else if (obj->type == OBJTYPE_ALARM) {
// Button press sound
sndStart(var80095200, SFX_PRESS_SWITCH, NULL, -1, -1, -1, -1, -1);
if (alarmIsActive()) {
alarmDeactivate();
} else {
alarmActivate();
}
} else if (obj->flags & OBJFLAG_THROWNLAPTOP) {
// Thrown laptop
if (obj->type == OBJTYPE_AUTOGUN) {
struct autogunobj *laptop = (struct autogunobj *)obj;
s32 playernum;
if (g_Vars.normmplayerisrunning) {
playernum = mpPlayerGetIndex(g_Vars.currentplayer->prop->chr);
} else {
playernum = g_Vars.currentplayernum;
}
if (playernum >= 0 && laptop == &g_ThrownLaptops[playernum]) {
obj->hidden |= OBJHFLAG_REAPABLE;
invGiveSingleWeapon(WEAPON_LAPTOPGUN);
currentPlayerQueuePickupWeaponHudmsg(WEAPON_LAPTOPGUN, false);
weaponPlayPickupSound(WEAPON_LAPTOPGUN);
if (laptop->ammoquantity > 0 && laptop->ammoquantity != 255) {
s32 newqty = bgunGetAmmoQtyForWeapon(WEAPON_LAPTOPGUN, FUNC_PRIMARY) + laptop->ammoquantity;
bgunSetAmmoQtyForWeapon(WEAPON_LAPTOPGUN, FUNC_PRIMARY, newqty);
}
}
} else {
result = propPickupByPlayer(prop, 1);
}
} else if (currentPlayerTryMountHoverbike(prop) == false
&& (obj->flags3 & OBJFLAG3_GRABBABLE)
&& g_Vars.currentplayer->bondmovemode == MOVEMODE_WALK
&& bmoveGetCrouchPos() == CROUCHPOS_STAND
&& g_Vars.currentplayer->crouchoffset == 0
&& g_Vars.currentplayer->onladder == false) {
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;
}
}
doorCallLift(prop, false);
return result;
}
void objSetPerimEnabled(struct prop *prop, bool enable)
{
struct defaultobj *obj = prop->obj;
if (enable) {
obj->hidden &= ~OBJHFLAG_PERIMDISABLED;
} else {
obj->hidden |= OBJHFLAG_PERIMDISABLED;
}
}
bool objUpdateGeometry(struct prop *prop, u8 **start, u8 **end)
{
struct defaultobj *obj = prop->obj;
if (obj->unkgeo && (obj->flags3 & OBJFLAG3_WALKTHROUGH) == 0) {
if ((obj->hidden2 & OBJH2FLAG_08)) {
s32 len = (obj->flags3 & OBJFLAG3_GEOCYL) ? sizeof(struct geocyl) : sizeof(struct geoblock);
if (obj->flags & OBJFLAG_00000100) {
if ((obj->hidden & (OBJHFLAG_PERIMDISABLED | OBJHFLAG_DOORPERIMDISABLED)) == 0) {
*start = (void *) obj->unkgeo;
*end = (void *)((u32)obj->unkgeo + len);
if (obj->geocount >= 2) {
*end += obj->geocount * 0x40 - 0x40;
}
return true;
}
}
if (obj->geocount >= 2) {
*start = (void *)((u32)obj->unkgeo + len);
*end = (void *)(*start + obj->geocount * 0x40 - 0x40);
return true;
}
*end = NULL;
*start = NULL;
return false;
}
*start = (void *) obj->unkgeo;
*end = (void *) ((u32)obj->unkgeo + obj->geocount * 0x40);
return true;
}
*end = NULL;
*start = NULL;
return false;
}
void objGetBbox(struct prop *prop, f32 *radius, f32 *ymax, f32 *ymin)
{
struct defaultobj *obj = prop->obj;
if (obj->unkgeo && obj->hidden2 & OBJH2FLAG_08) {
if (obj->flags3 & OBJFLAG3_GEOCYL) {
*radius = obj->geocyl->radius;
*ymin = obj->geocyl->ymin;
*ymax = obj->geocyl->ymax;
} else {
*radius = model0001af80(obj->model);
*ymin = obj->geoblock->ymin;
*ymax = obj->geoblock->ymax;
}
} else {
*radius = 1;
*ymin = 0;
*ymax = 0;
}
}
#if VERSION < VERSION_PAL_BETA
void ammotypeGetPickedUpText(char *dst)
{
strcat(dst, langGet(L_PROPOBJ_000)); // "Picked up"
}
#endif
#if VERSION >= VERSION_PAL_BETA
struct nameinfo {
s32 id;
u16 singulartext;
u16 pluraltext;
u8 unk08[5];
};
struct nameinfo *func0f087888pf(s32 id, struct nameinfo *info)
{
if (info) {
while (info->id) {
if (info->id == id) {
return info;
}
info++;
}
}
return NULL;
}
#endif
#if VERSION >= VERSION_PAL_BETA
#define DETERMINER_A 1
#define DETERMINER_AN 2
#define DETERMINER_THE 3
#define DETERMINER_4 4
#define DETERMINER_SOME5 5
#define DETERMINER_SOME6 6
#define DETERMINER_SOME7 7
#define DETERMINER_8 8
#define DETERMINER_YOUR 9
struct nameinfo var8006a944pf[] = {
#if VERSION >= VERSION_PAL_FINAL
{ 999, L_PROPOBJ_009, L_PROPOBJ_070, { DETERMINER_A, DETERMINER_A, DETERMINER_SOME6, 0, DETERMINER_SOME7 } },
#else
{ 999, L_PROPOBJ_009, L_PROPOBJ_070, { DETERMINER_A, DETERMINER_A, DETERMINER_SOME6, 0, DETERMINER_SOME6 } },
#endif
{ AMMOTYPE_KNIFE, L_PROPOBJ_020, L_PROPOBJ_021, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ AMMOTYPE_CROSSBOW, L_PROPOBJ_042, L_PROPOBJ_065, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A } },
{ AMMOTYPE_SHOTGUN, L_PROPOBJ_010, L_PROPOBJ_071, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ AMMOTYPE_FARSIGHT, L_PROPOBJ_043, L_PROPOBJ_066, { DETERMINER_AN, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_A } },
{ AMMOTYPE_GRENADE, L_PROPOBJ_013, L_PROPOBJ_074, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ AMMOTYPE_ROCKET, L_PROPOBJ_015, L_PROPOBJ_076, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_A } },
{ AMMOTYPE_MAGNUM, L_PROPOBJ_011, L_PROPOBJ_072, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ AMMOTYPE_DEVASTATOR, L_PROPOBJ_014, L_PROPOBJ_075, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ AMMOTYPE_REMOTE_MINE, L_PROPOBJ_017, L_PROPOBJ_078, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ AMMOTYPE_PROXY_MINE, L_PROPOBJ_018, L_PROPOBJ_079, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ AMMOTYPE_TIMED_MINE, L_PROPOBJ_019, L_PROPOBJ_080, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
#if VERSION >= VERSION_PAL_FINAL
{ AMMOTYPE_REAPER, L_PROPOBJ_044, L_PROPOBJ_067, { DETERMINER_A, DETERMINER_A, DETERMINER_SOME6, 0, DETERMINER_SOME7 } },
#else
{ AMMOTYPE_REAPER, L_PROPOBJ_044, L_PROPOBJ_067, { DETERMINER_A, DETERMINER_A, DETERMINER_SOME6, 0, 0 } },
#endif
{ AMMOTYPE_HOMINGROCKET, L_PROPOBJ_016, L_PROPOBJ_077, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_A } },
{ AMMOTYPE_DART, L_PROPOBJ_022, L_PROPOBJ_081, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ AMMOTYPE_NBOMB, L_PROPOBJ_023, L_PROPOBJ_082, { DETERMINER_AN, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ AMMOTYPE_SEDATIVE, L_PROPOBJ_024, L_PROPOBJ_083, { DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_A, DETERMINER_SOME5, DETERMINER_SOME5 } },
{ AMMOTYPE_PSYCHOSIS, L_PROPOBJ_024, L_PROPOBJ_083, { DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_A, DETERMINER_SOME5, DETERMINER_SOME5 } },
{ AMMOTYPE_CLOAK, L_PROPOBJ_045, L_PROPOBJ_068, { DETERMINER_A | 0x80, DETERMINER_A, DETERMINER_A | 0x80, DETERMINER_A | 0x80, DETERMINER_A | 0x80 } },
{ AMMOTYPE_BOOST, L_PROPOBJ_046, L_PROPOBJ_069, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ 0 },
};
struct nameinfo var8006aa94pf[] = {
{ WEAPON_FALCON2, L_GUN_007, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_FALCON2_SILENCER, L_GUN_008, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_FALCON2_SCOPE, L_GUN_009, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_MAGSEC4, L_GUN_010, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_MAULER, L_GUN_011, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_PHOENIX, L_GUN_014, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_DY357MAGNUM, L_GUN_012, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_DY357LX, L_GUN_013, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_CMP150, L_GUN_015, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_CYCLONE, L_GUN_020, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_CALLISTO, L_GUN_023, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_RCP120, L_GUN_022, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_LAPTOPGUN, L_GUN_024, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_DRAGON, L_GUN_017, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_K7AVENGER, L_GUN_019, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_AR34, L_GUN_016, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_THE } },
{ WEAPON_SUPERDRAGON, L_GUN_018, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_SHOTGUN, L_GUN_025, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_REAPER, L_GUN_026, 0, { DETERMINER_THE, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A } },
{ WEAPON_SNIPERRIFLE, L_GUN_032, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_FARSIGHT, L_GUN_031, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_DEVASTATOR, L_GUN_028, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_ROCKETLAUNCHER, L_GUN_027, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_SLAYER, L_GUN_029, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_COMBATKNIFE, L_GUN_035, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_CROSSBOW, L_GUN_033, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_TRANQUILIZER, L_GUN_034, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_LASER, L_GUN_047, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_GRENADE, L_GUN_036, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_NBOMB, L_GUN_037, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_TIMEDMINE, L_GUN_038, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_PROXIMITYMINE, L_GUN_039, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_REMOTEMINE, L_GUN_040, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_COMBATBOOST, L_GUN_074, L_GUN_242, { DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_SOME5 } },
{ WEAPON_PP9I, L_GUN_050, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_CC13, L_GUN_051, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_KL01313, L_GUN_052, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_KF7SPECIAL, L_GUN_053, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_ZZT, L_GUN_054, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_DMC, L_GUN_055, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_AR53, L_GUN_056, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_THE } },
{ WEAPON_RCP45, L_GUN_057, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_PSYCHOSISGUN, L_GUN_049, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_NIGHTVISION, L_GUN_059, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, 0, 0 } },
{ WEAPON_EYESPY, L_GUN_060, 0, { DETERMINER_YOUR, DETERMINER_A, DETERMINER_YOUR, DETERMINER_YOUR, DETERMINER_YOUR } },
{ 998, L_GUN_061, 0, { DETERMINER_YOUR, DETERMINER_A, DETERMINER_YOUR, DETERMINER_YOUR, DETERMINER_YOUR } },
{ 997, L_GUN_062, 0, { DETERMINER_YOUR, DETERMINER_A, DETERMINER_YOUR, DETERMINER_YOUR, DETERMINER_YOUR } },
{ WEAPON_XRAYSCANNER, L_GUN_065, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_4 } },
{ WEAPON_IRSCANNER, L_GUN_069, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_4 } },
{ WEAPON_CLOAKINGDEVICE, L_GUN_073, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_HORIZONSCANNER, L_GUN_076, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_ECMMINE, L_GUN_041, 0, { DETERMINER_AN, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_DATAUPLINK, L_GUN_075, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_RTRACKER, L_GUN_070, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_PRESIDENTSCANNER, L_GUN_219, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_DOORDECODER, L_GUN_063, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_AUTOSURGEON, L_GUN_220, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, DETERMINER_A } },
{ WEAPON_EXPLOSIVES, L_GUN_064, 0, { DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_SOME5, DETERMINER_THE, 0 } },
{ WEAPON_SKEDARBOMB, L_GUN_221, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_COMMSRIDER, L_GUN_222, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_TRACERBUG, L_GUN_223, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_TARGETAMPLIFIER, L_GUN_224, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_DISGUISE40, L_GUN_043, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_DISGUISE41, L_GUN_043, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_A } },
{ WEAPON_FLIGHTPLANS, L_GUN_225, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_RESEARCHTAPE, L_GUN_226, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_BACKUPDISK, L_GUN_227, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD45, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD46, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD47, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD48, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD49, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD4A, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD4B, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_KEYCARD4C, L_GUN_228, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_SUITCASE, L_GUN_067, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_BRIEFCASE, L_GUN_229, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_SHIELDTECHITEM, L_GUN_240, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_SOME5, 0, 0 } },
{ WEAPON_NECKLACE, L_GUN_230, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, 0, 0 } },
{ WEAPON_SUICIDEPILL, L_GUN_072, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_AN, DETERMINER_AN } },
{ WEAPON_ROCKET, L_GUN_044, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_A } },
{ WEAPON_HOMINGROCKET, L_GUN_045, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_A } },
{ WEAPON_GRENADEROUND, L_GUN_046, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_BOLT, L_GUN_048, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A } },
{ WEAPON_BRIEFCASE2, L_GUN_071, 0, { DETERMINER_THE, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ WEAPON_SKROCKET, L_GUN_044, 0, { DETERMINER_A, DETERMINER_A, DETERMINER_AN, DETERMINER_A, DETERMINER_AN } },
{ 0 },
};
#if VERSION >= VERSION_JPN_FINAL
GLOBAL_ASM(
glabel func0f0878c8pf
.late_rodata
glabel var7f1ab890jf
.word 0x7f08881c
.word 0x7f08881c
.word 0x7f08881c
.word 0x7f08881c
.word 0x7f088824
.word 0x7f0888c4
.word 0x7f0888dc
.word 0x7f0888f8
.word 0x7f088914
.word 0x7f088930
.word 0x7f08894c
.word 0x7f088968
.word 0x7f088984
.word 0x7f0889a0
.text
/* f088730: 3c0b8008 */ lui $t3,0x8008
/* f088734: 8d6b4780 */ lw $t3,0x4780($t3)
/* f088738: 27bdff58 */ addiu $sp,$sp,-168
/* f08873c: afbf0014 */ sw $ra,0x14($sp)
/* f088740: 29610005 */ slti $at,$t3,0x5
/* f088744: afa400a8 */ sw $a0,0xa8($sp)
/* f088748: afa500ac */ sw $a1,0xac($sp)
/* f08874c: afa700b4 */ sw $a3,0xb4($sp)
/* f088750: 00004025 */ move $t0,$zero
/* f088754: 14200002 */ bnez $at,.JF0f088760
/* f088758: 00004825 */ move $t1,$zero
/* f08875c: 00005825 */ move $t3,$zero
.JF0f088760:
/* f088760: 3c0e8008 */ lui $t6,0x8008
/* f088764: 8dce4770 */ lw $t6,0x4770($t6)
/* f088768: 8faf00a8 */ lw $t7,0xa8($sp)
/* f08876c: 51c00003 */ beqzl $t6,.JF0f08877c
/* f088770: a1e00000 */ sb $zero,0x0($t7)
/* f088774: 00005825 */ move $t3,$zero
/* f088778: a1e00000 */ sb $zero,0x0($t7)
.JF0f08877c:
/* f08877c: afab009c */ sw $t3,0x9c($sp)
/* f088780: afa90094 */ sw $t1,0x94($sp)
/* f088784: a7a80098 */ sh $t0,0x98($sp)
/* f088788: afa600b0 */ sw $a2,0xb0($sp)
/* f08878c: 8fa500bc */ lw $a1,0xbc($sp)
/* f088790: 0fc221bc */ jal func0f087888pf
/* f088794: 8fa400ac */ lw $a0,0xac($sp)
/* f088798: 8fa600b0 */ lw $a2,0xb0($sp)
/* f08879c: 97a80098 */ lhu $t0,0x98($sp)
/* f0887a0: 8fa90094 */ lw $t1,0x94($sp)
/* f0887a4: 8faa00b4 */ lw $t2,0xb4($sp)
/* f0887a8: 104000cf */ beqz $v0,.JF0f088ae8
/* f0887ac: 8fab009c */ lw $t3,0x9c($sp)
/* f0887b0: 004bc021 */ addu $t8,$v0,$t3
/* f0887b4: 93040008 */ lbu $a0,0x8($t8)
/* f0887b8: 24010005 */ li $at,0x5
/* f0887bc: 00803825 */ move $a3,$a0
/* f0887c0: 30f9007f */ andi $t9,$a3,0x7f
/* f0887c4: 03203825 */ move $a3,$t9
/* f0887c8: 13210008 */ beq $t9,$at,.JF0f0887ec
/* f0887cc: 03201825 */ move $v1,$t9
/* f0887d0: 24010006 */ li $at,0x6
/* f0887d4: 13210005 */ beq $t9,$at,.JF0f0887ec
/* f0887d8: 24010007 */ li $at,0x7
/* f0887dc: 13210003 */ beq $t9,$at,.JF0f0887ec
/* f0887e0: 24010008 */ li $at,0x8
/* f0887e4: 57210003 */ bnel $t9,$at,.JF0f0887f4
/* f0887e8: 308c0080 */ andi $t4,$a0,0x80
.JF0f0887ec:
/* f0887ec: 24060001 */ li $a2,0x1
/* f0887f0: 308c0080 */ andi $t4,$a0,0x80
.JF0f0887f4:
/* f0887f4: 1180000c */ beqz $t4,.JF0f088828
/* f0887f8: 246dffff */ addiu $t5,$v1,-1
/* f0887fc: 2da10005 */ sltiu $at,$t5,0x5
/* f088800: 10200009 */ beqz $at,.JF0f088828
/* f088804: 000d6880 */ sll $t5,$t5,0x2
/* f088808: 3c017f1b */ lui $at,0x7f1b
/* f08880c: 002d0821 */ addu $at,$at,$t5
/* f088810: 8c2db890 */ lw $t5,-0x4770($at)
/* f088814: 01a00008 */ jr $t5
/* f088818: 00000000 */ nop
/* f08881c: 10000002 */ b .JF0f088828
/* f088820: 00003025 */ move $a2,$zero
/* f088824: 24060001 */ li $a2,0x1
.JF0f088828:
/* f088828: 50c0001b */ beqzl $a2,.JF0f088898
/* f08882c: 94450004 */ lhu $a1,0x4($v0)
/* f088830: 94440006 */ lhu $a0,0x6($v0)
/* f088834: 24010001 */ li $at,0x1
/* f088838: 10800014 */ beqz $a0,.JF0f08888c
/* f08883c: 00000000 */ nop
/* f088840: 1061000a */ beq $v1,$at,.JF0f08886c
/* f088844: 3085ffff */ andi $a1,$a0,0xffff
/* f088848: 24010002 */ li $at,0x2
/* f08884c: 10610009 */ beq $v1,$at,.JF0f088874
/* f088850: 24010003 */ li $at,0x3
/* f088854: 10610009 */ beq $v1,$at,.JF0f08887c
/* f088858: 24010004 */ li $at,0x4
/* f08885c: 10610009 */ beq $v1,$at,.JF0f088884
/* f088860: 00000000 */ nop
/* f088864: 1000000c */ b .JF0f088898
/* f088868: 00000000 */ nop
.JF0f08886c:
/* f08886c: 1000000a */ b .JF0f088898
/* f088870: 24070005 */ li $a3,0x5
.JF0f088874:
/* f088874: 10000008 */ b .JF0f088898
/* f088878: 24070006 */ li $a3,0x6
.JF0f08887c:
/* f08887c: 10000006 */ b .JF0f088898
/* f088880: 24070007 */ li $a3,0x7
.JF0f088884:
/* f088884: 10000004 */ b .JF0f088898
/* f088888: 24070008 */ li $a3,0x8
.JF0f08888c:
/* f08888c: 10000002 */ b .JF0f088898
/* f088890: 94450004 */ lhu $a1,0x4($v0)
/* f088894: 94450004 */ lhu $a1,0x4($v0)
.JF0f088898:
/* f088898: 10a00093 */ beqz $a1,.JF0f088ae8
/* f08889c: 00a03025 */ move $a2,$a1
/* f0888a0: 24eeffff */ addiu $t6,$a3,-1
/* f0888a4: 2dc10009 */ sltiu $at,$t6,0x9
/* f0888a8: 10200042 */ beqz $at,.JF0f0889b4
/* f0888ac: 000e7080 */ sll $t6,$t6,0x2
/* f0888b0: 3c017f1b */ lui $at,0x7f1b
/* f0888b4: 002e0821 */ addu $at,$at,$t6
/* f0888b8: 8c2eb8a4 */ lw $t6,-0x475c($at)
/* f0888bc: 01c00008 */ jr $t6
/* f0888c0: 00000000 */ nop
/* f0888c4: 11400003 */ beqz $t2,.JF0f0888d4
/* f0888c8: 00000000 */ nop
/* f0888cc: 10000039 */ b .JF0f0889b4
/* f0888d0: 2408523a */ li $t0,0x523a
.JF0f0888d4:
/* f0888d4: 10000037 */ b .JF0f0889b4
/* f0888d8: 24085239 */ li $t0,0x5239
/* f0888dc: 11400004 */ beqz $t2,.JF0f0888f0
/* f0888e0: 2408523b */ li $t0,0x523b
/* f0888e4: 2408523c */ li $t0,0x523c
/* f0888e8: 10000032 */ b .JF0f0889b4
/* f0888ec: 24090001 */ li $t1,0x1
.JF0f0888f0:
/* f0888f0: 10000030 */ b .JF0f0889b4
/* f0888f4: 24090001 */ li $t1,0x1
/* f0888f8: 11400004 */ beqz $t2,.JF0f08890c
/* f0888fc: 2408523d */ li $t0,0x523d
/* f088900: 2408523e */ li $t0,0x523e
/* f088904: 1000002b */ b .JF0f0889b4
/* f088908: 24090002 */ li $t1,0x2
.JF0f08890c:
/* f08890c: 10000029 */ b .JF0f0889b4
/* f088910: 24090002 */ li $t1,0x2
/* f088914: 11400004 */ beqz $t2,.JF0f088928
/* f088918: 2408523f */ li $t0,0x523f
/* f08891c: 24085240 */ li $t0,0x5240
/* f088920: 10000024 */ b .JF0f0889b4
/* f088924: 24090003 */ li $t1,0x3
.JF0f088928:
/* f088928: 10000022 */ b .JF0f0889b4
/* f08892c: 24090003 */ li $t1,0x3
/* f088930: 11400004 */ beqz $t2,.JF0f088944
/* f088934: 24085231 */ li $t0,0x5231
/* f088938: 24085232 */ li $t0,0x5232
/* f08893c: 1000001d */ b .JF0f0889b4
/* f088940: 24090004 */ li $t1,0x4
.JF0f088944:
/* f088944: 1000001b */ b .JF0f0889b4
/* f088948: 24090004 */ li $t1,0x4
/* f08894c: 11400004 */ beqz $t2,.JF0f088960
/* f088950: 24085233 */ li $t0,0x5233
/* f088954: 24085234 */ li $t0,0x5234
/* f088958: 10000016 */ b .JF0f0889b4
/* f08895c: 24090005 */ li $t1,0x5
.JF0f088960:
/* f088960: 10000014 */ b .JF0f0889b4
/* f088964: 24090005 */ li $t1,0x5
/* f088968: 11400004 */ beqz $t2,.JF0f08897c
/* f08896c: 24085235 */ li $t0,0x5235
/* f088970: 24085236 */ li $t0,0x5236
/* f088974: 1000000f */ b .JF0f0889b4
/* f088978: 24090006 */ li $t1,0x6
.JF0f08897c:
/* f08897c: 1000000d */ b .JF0f0889b4
/* f088980: 24090006 */ li $t1,0x6
/* f088984: 11400004 */ beqz $t2,.JF0f088998
/* f088988: 24085237 */ li $t0,0x5237
/* f08898c: 24085238 */ li $t0,0x5238
/* f088990: 10000008 */ b .JF0f0889b4
/* f088994: 24090007 */ li $t1,0x7
.JF0f088998:
/* f088998: 10000006 */ b .JF0f0889b4
/* f08899c: 24090007 */ li $t1,0x7
/* f0889a0: 11400003 */ beqz $t2,.JF0f0889b0
/* f0889a4: 24090001 */ li $t1,0x1
/* f0889a8: 10000002 */ b .JF0f0889b4
/* f0889ac: 24085230 */ li $t0,0x5230
.JF0f0889b0:
/* f0889b0: 2408522f */ li $t0,0x522f
.JF0f0889b4:
/* f0889b4: 15400005 */ bnez $t2,.JF0f0889cc
/* f0889b8: 8faf00b8 */ lw $t7,0xb8($sp)
/* f0889bc: 24010002 */ li $at,0x2
/* f0889c0: 15610002 */ bne $t3,$at,.JF0f0889cc
/* f0889c4: 00000000 */ nop
/* f0889c8: 00004025 */ move $t0,$zero
.JF0f0889cc:
/* f0889cc: 11e00002 */ beqz $t7,.JF0f0889d8
/* f0889d0: 00c02025 */ move $a0,$a2
/* f0889d4: 00004025 */ move $t0,$zero
.JF0f0889d8:
/* f0889d8: 11000011 */ beqz $t0,.JF0f088a20
/* f0889dc: 00000000 */ nop
/* f0889e0: 01002025 */ move $a0,$t0
/* f0889e4: afa60020 */ sw $a2,0x20($sp)
/* f0889e8: 0fc5baa5 */ jal langGet
/* f0889ec: afa90094 */ sw $t1,0x94($sp)
/* f0889f0: 8fa40020 */ lw $a0,0x20($sp)
/* f0889f4: 0fc5baa5 */ jal langGet
/* f0889f8: afa20024 */ sw $v0,0x24($sp)
/* f0889fc: 3c057f1b */ lui $a1,0x7f1b
/* f088a00: 24a5ad98 */ addiu $a1,$a1,-21096
/* f088a04: 27a4002c */ addiu $a0,$sp,0x2c
/* f088a08: 8fa60024 */ lw $a2,0x24($sp)
/* f088a0c: 0c004d95 */ jal sprintf
/* f088a10: 00403825 */ move $a3,$v0
/* f088a14: 8fa90094 */ lw $t1,0x94($sp)
/* f088a18: 1000000a */ b .JF0f088a44
/* f088a1c: 8faa00b4 */ lw $t2,0xb4($sp)
.JF0f088a20:
/* f088a20: 0fc5baa5 */ jal langGet
/* f088a24: afa90094 */ sw $t1,0x94($sp)
/* f088a28: 3c057f1b */ lui $a1,0x7f1b
/* f088a2c: 24a5ada0 */ addiu $a1,$a1,-21088
/* f088a30: 27a4002c */ addiu $a0,$sp,0x2c
/* f088a34: 0c004d95 */ jal sprintf
/* f088a38: 00403025 */ move $a2,$v0
/* f088a3c: 8fa90094 */ lw $t1,0x94($sp)
/* f088a40: 8faa00b4 */ lw $t2,0xb4($sp)
.JF0f088a44:
/* f088a44: 93b8002c */ lbu $t8,0x2c($sp)
/* f088a48: 27a6002c */ addiu $a2,$sp,0x2c
/* f088a4c: 00c01825 */ move $v1,$a2
/* f088a50: 1300000b */ beqz $t8,.JF0f088a80
/* f088a54: 27b9002c */ addiu $t9,$sp,0x2c
/* f088a58: 93220000 */ lbu $v0,0x0($t9)
/* f088a5c: 2404000a */ li $a0,0xa
.JF0f088a60:
/* f088a60: 54820004 */ bnel $a0,$v0,.JF0f088a74
/* f088a64: 24630001 */ addiu $v1,$v1,0x1
/* f088a68: 10000002 */ b .JF0f088a74
/* f088a6c: a0600000 */ sb $zero,0x0($v1)
/* f088a70: 24630001 */ addiu $v1,$v1,0x1
.JF0f088a74:
/* f088a74: 90620000 */ lbu $v0,0x0($v1)
/* f088a78: 1440fff9 */ bnez $v0,.JF0f088a60
/* f088a7c: 00000000 */ nop
.JF0f088a80:
/* f088a80: 8fac00b8 */ lw $t4,0xb8($sp)
/* f088a84: 1180000b */ beqz $t4,.JF0f088ab4
/* f088a88: 00000000 */ nop
/* f088a8c: 0fc5baa5 */ jal langGet
/* f088a90: 24045208 */ li $a0,0x5208
/* f088a94: 3c057f1b */ lui $a1,0x7f1b
/* f088a98: 24a5ada4 */ addiu $a1,$a1,-21084
/* f088a9c: 8fa400a8 */ lw $a0,0xa8($sp)
/* f088aa0: 00403025 */ move $a2,$v0
/* f088aa4: 0c004d95 */ jal sprintf
/* f088aa8: 27a7002c */ addiu $a3,$sp,0x2c
/* f088aac: 1000000f */ b .JF0f088aec
/* f088ab0: 8fbf0014 */ lw $ra,0x14($sp)
.JF0f088ab4:
/* f088ab4: 15400009 */ bnez $t2,.JF0f088adc
/* f088ab8: 8fa400a8 */ lw $a0,0xa8($sp)
/* f088abc: 0fc5baa5 */ jal langGet
/* f088ac0: 25245200 */ addiu $a0,$t1,0x5200
/* f088ac4: 8fa400a8 */ lw $a0,0xa8($sp)
/* f088ac8: 00402825 */ move $a1,$v0
/* f088acc: 0c004d95 */ jal sprintf
/* f088ad0: 27a6002c */ addiu $a2,$sp,0x2c
/* f088ad4: 10000005 */ b .JF0f088aec
/* f088ad8: 8fbf0014 */ lw $ra,0x14($sp)
.JF0f088adc:
/* f088adc: 3c057f1b */ lui $a1,0x7f1b
/* f088ae0: 0c004d95 */ jal sprintf
/* f088ae4: 24a5adac */ addiu $a1,$a1,-21076
.JF0f088ae8:
/* f088ae8: 8fbf0014 */ lw $ra,0x14($sp)
.JF0f088aec:
/* f088aec: 27bd00a8 */ addiu $sp,$sp,0xa8
/* f088af0: 03e00008 */ jr $ra
/* f088af4: 00000000 */ nop
);
#elif VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f0878c8pf
.late_rodata
glabel var7f1abdf8pf
.word 0x7f0879a0
glabel var7f1abdfcpf
.word 0x7f0879a0
glabel var7f1abe00pf
.word 0x7f0879a0
glabel var7f1abe04pf
.word 0x7f0879a0
glabel var7f1abe08pf
.word 0x7f0879a8
glabel var7f1abe0cpf
.word 0x7f087a48
glabel var7f1abe10pf
.word 0x7f087a60
glabel var7f1abe14pf
.word 0x7f087a7c
glabel var7f1abe18pf
.word 0x7f087a98
glabel var7f1abe1cpf
.word 0x7f087ab4
glabel var7f1abe20pf
.word 0x7f087ad0
glabel var7f1abe24pf
.word 0x7f087aec
glabel var7f1abe28pf
.word 0x7f087b08
glabel var7f1abe2cpf
.word 0x7f087b24
.text
/* f0878c8: 3c0b8008 */ lui $t3,0x8008
/* f0878cc: 8d6b4670 */ lw $t3,0x4670($t3)
/* f0878d0: 27bdff58 */ addiu $sp,$sp,-168
/* f0878d4: afbf0014 */ sw $ra,0x14($sp)
/* f0878d8: 29610005 */ slti $at,$t3,0x5
/* f0878dc: afa400a8 */ sw $a0,0xa8($sp)
/* f0878e0: afa500ac */ sw $a1,0xac($sp)
/* f0878e4: afa700b4 */ sw $a3,0xb4($sp)
/* f0878e8: 00004025 */ move $t0,$zero
/* f0878ec: 14200002 */ bnez $at,.PF0f0878f8
/* f0878f0: 00004825 */ move $t1,$zero
/* f0878f4: 00005825 */ move $t3,$zero
.PF0f0878f8:
/* f0878f8: 8fae00a8 */ lw $t6,0xa8($sp)
/* f0878fc: a1c00000 */ sb $zero,0x0($t6)
/* f087900: afab009c */ sw $t3,0x9c($sp)
/* f087904: afa90094 */ sw $t1,0x94($sp)
/* f087908: a7a80098 */ sh $t0,0x98($sp)
/* f08790c: afa600b0 */ sw $a2,0xb0($sp)
/* f087910: 8fa500bc */ lw $a1,0xbc($sp)
/* f087914: 0fc21e22 */ jal func0f087888pf
/* f087918: 8fa400ac */ lw $a0,0xac($sp)
/* f08791c: 8fa600b0 */ lw $a2,0xb0($sp)
/* f087920: 97a80098 */ lhu $t0,0x98($sp)
/* f087924: 8fa90094 */ lw $t1,0x94($sp)
/* f087928: 8faa00b4 */ lw $t2,0xb4($sp)
/* f08792c: 104000cf */ beqz $v0,.PF0f087c6c
/* f087930: 8fab009c */ lw $t3,0x9c($sp)
/* f087934: 004b7821 */ addu $t7,$v0,$t3
/* f087938: 91e40008 */ lbu $a0,0x8($t7)
/* f08793c: 24010005 */ li $at,0x5
/* f087940: 00803825 */ move $a3,$a0
/* f087944: 30f8007f */ andi $t8,$a3,0x7f
/* f087948: 03003825 */ move $a3,$t8
/* f08794c: 13010008 */ beq $t8,$at,.PF0f087970
/* f087950: 03001825 */ move $v1,$t8
/* f087954: 24010006 */ li $at,0x6
/* f087958: 13010005 */ beq $t8,$at,.PF0f087970
/* f08795c: 24010007 */ li $at,0x7
/* f087960: 13010003 */ beq $t8,$at,.PF0f087970
/* f087964: 24010008 */ li $at,0x8
/* f087968: 57010003 */ bnel $t8,$at,.PF0f087978
/* f08796c: 30990080 */ andi $t9,$a0,0x80
.PF0f087970:
/* f087970: 24060001 */ li $a2,0x1
/* f087974: 30990080 */ andi $t9,$a0,0x80
.PF0f087978:
/* f087978: 1320000c */ beqz $t9,.PF0f0879ac
/* f08797c: 246cffff */ addiu $t4,$v1,-1
/* f087980: 2d810005 */ sltiu $at,$t4,0x5
/* f087984: 10200009 */ beqz $at,.PF0f0879ac
/* f087988: 000c6080 */ sll $t4,$t4,0x2
/* f08798c: 3c017f1b */ lui $at,0x7f1b
/* f087990: 002c0821 */ addu $at,$at,$t4
/* f087994: 8c2cbdf8 */ lw $t4,-0x4208($at)
/* f087998: 01800008 */ jr $t4
/* f08799c: 00000000 */ nop
/* f0879a0: 10000002 */ b .PF0f0879ac
/* f0879a4: 00003025 */ move $a2,$zero
/* f0879a8: 24060001 */ li $a2,0x1
.PF0f0879ac:
/* f0879ac: 50c0001b */ beqzl $a2,.PF0f087a1c
/* f0879b0: 94450004 */ lhu $a1,0x4($v0)
/* f0879b4: 94440006 */ lhu $a0,0x6($v0)
/* f0879b8: 24010001 */ li $at,0x1
/* f0879bc: 10800014 */ beqz $a0,.PF0f087a10
/* f0879c0: 00000000 */ nop
/* f0879c4: 1061000a */ beq $v1,$at,.PF0f0879f0
/* f0879c8: 3085ffff */ andi $a1,$a0,0xffff
/* f0879cc: 24010002 */ li $at,0x2
/* f0879d0: 10610009 */ beq $v1,$at,.PF0f0879f8
/* f0879d4: 24010003 */ li $at,0x3
/* f0879d8: 10610009 */ beq $v1,$at,.PF0f087a00
/* f0879dc: 24010004 */ li $at,0x4
/* f0879e0: 10610009 */ beq $v1,$at,.PF0f087a08
/* f0879e4: 00000000 */ nop
/* f0879e8: 1000000c */ b .PF0f087a1c
/* f0879ec: 00000000 */ nop
.PF0f0879f0:
/* f0879f0: 1000000a */ b .PF0f087a1c
/* f0879f4: 24070005 */ li $a3,0x5
.PF0f0879f8:
/* f0879f8: 10000008 */ b .PF0f087a1c
/* f0879fc: 24070006 */ li $a3,0x6
.PF0f087a00:
/* f087a00: 10000006 */ b .PF0f087a1c
/* f087a04: 24070007 */ li $a3,0x7
.PF0f087a08:
/* f087a08: 10000004 */ b .PF0f087a1c
/* f087a0c: 24070008 */ li $a3,0x8
.PF0f087a10:
/* f087a10: 10000002 */ b .PF0f087a1c
/* f087a14: 94450004 */ lhu $a1,0x4($v0)
/* f087a18: 94450004 */ lhu $a1,0x4($v0)
.PF0f087a1c:
/* f087a1c: 10a00093 */ beqz $a1,.PF0f087c6c
/* f087a20: 00a03025 */ move $a2,$a1
/* f087a24: 24edffff */ addiu $t5,$a3,-1
/* f087a28: 2da10009 */ sltiu $at,$t5,0x9
/* f087a2c: 10200042 */ beqz $at,.PF0f087b38
/* f087a30: 000d6880 */ sll $t5,$t5,0x2
/* f087a34: 3c017f1b */ lui $at,0x7f1b
/* f087a38: 002d0821 */ addu $at,$at,$t5
/* f087a3c: 8c2dbe0c */ lw $t5,-0x41f4($at)
/* f087a40: 01a00008 */ jr $t5
/* f087a44: 00000000 */ nop
/* f087a48: 11400003 */ beqz $t2,.PF0f087a58
/* f087a4c: 00000000 */ nop
/* f087a50: 10000039 */ b .PF0f087b38
/* f087a54: 2408523a */ li $t0,0x523a
.PF0f087a58:
/* f087a58: 10000037 */ b .PF0f087b38
/* f087a5c: 24085239 */ li $t0,0x5239
/* f087a60: 11400004 */ beqz $t2,.PF0f087a74
/* f087a64: 2408523b */ li $t0,0x523b
/* f087a68: 2408523c */ li $t0,0x523c
/* f087a6c: 10000032 */ b .PF0f087b38
/* f087a70: 24090001 */ li $t1,0x1
.PF0f087a74:
/* f087a74: 10000030 */ b .PF0f087b38
/* f087a78: 24090001 */ li $t1,0x1
/* f087a7c: 11400004 */ beqz $t2,.PF0f087a90
/* f087a80: 2408523d */ li $t0,0x523d
/* f087a84: 2408523e */ li $t0,0x523e
/* f087a88: 1000002b */ b .PF0f087b38
/* f087a8c: 24090002 */ li $t1,0x2
.PF0f087a90:
/* f087a90: 10000029 */ b .PF0f087b38
/* f087a94: 24090002 */ li $t1,0x2
/* f087a98: 11400004 */ beqz $t2,.PF0f087aac
/* f087a9c: 2408523f */ li $t0,0x523f
/* f087aa0: 24085240 */ li $t0,0x5240
/* f087aa4: 10000024 */ b .PF0f087b38
/* f087aa8: 24090003 */ li $t1,0x3
.PF0f087aac:
/* f087aac: 10000022 */ b .PF0f087b38
/* f087ab0: 24090003 */ li $t1,0x3
/* f087ab4: 11400004 */ beqz $t2,.PF0f087ac8
/* f087ab8: 24085231 */ li $t0,0x5231
/* f087abc: 24085232 */ li $t0,0x5232
/* f087ac0: 1000001d */ b .PF0f087b38
/* f087ac4: 24090004 */ li $t1,0x4
.PF0f087ac8:
/* f087ac8: 1000001b */ b .PF0f087b38
/* f087acc: 24090004 */ li $t1,0x4
/* f087ad0: 11400004 */ beqz $t2,.PF0f087ae4
/* f087ad4: 24085233 */ li $t0,0x5233
/* f087ad8: 24085234 */ li $t0,0x5234
/* f087adc: 10000016 */ b .PF0f087b38
/* f087ae0: 24090005 */ li $t1,0x5
.PF0f087ae4:
/* f087ae4: 10000014 */ b .PF0f087b38
/* f087ae8: 24090005 */ li $t1,0x5
/* f087aec: 11400004 */ beqz $t2,.PF0f087b00
/* f087af0: 24085235 */ li $t0,0x5235
/* f087af4: 24085236 */ li $t0,0x5236
/* f087af8: 1000000f */ b .PF0f087b38
/* f087afc: 24090006 */ li $t1,0x6
.PF0f087b00:
/* f087b00: 1000000d */ b .PF0f087b38
/* f087b04: 24090006 */ li $t1,0x6
/* f087b08: 11400004 */ beqz $t2,.PF0f087b1c
/* f087b0c: 24085237 */ li $t0,0x5237
/* f087b10: 24085238 */ li $t0,0x5238
/* f087b14: 10000008 */ b .PF0f087b38
/* f087b18: 24090007 */ li $t1,0x7
.PF0f087b1c:
/* f087b1c: 10000006 */ b .PF0f087b38
/* f087b20: 24090007 */ li $t1,0x7
/* f087b24: 11400003 */ beqz $t2,.PF0f087b34
/* f087b28: 24090001 */ li $t1,0x1
/* f087b2c: 10000002 */ b .PF0f087b38
/* f087b30: 24085230 */ li $t0,0x5230
.PF0f087b34:
/* f087b34: 2408522f */ li $t0,0x522f
.PF0f087b38:
/* f087b38: 15400005 */ bnez $t2,.PF0f087b50
/* f087b3c: 8fae00b8 */ lw $t6,0xb8($sp)
/* f087b40: 24010002 */ li $at,0x2
/* f087b44: 15610002 */ bne $t3,$at,.PF0f087b50
/* f087b48: 00000000 */ nop
/* f087b4c: 00004025 */ move $t0,$zero
.PF0f087b50:
/* f087b50: 11c00002 */ beqz $t6,.PF0f087b5c
/* f087b54: 00c02025 */ move $a0,$a2
/* f087b58: 00004025 */ move $t0,$zero
.PF0f087b5c:
/* f087b5c: 11000011 */ beqz $t0,.PF0f087ba4
/* f087b60: 00000000 */ nop
/* f087b64: 01002025 */ move $a0,$t0
/* f087b68: afa60020 */ sw $a2,0x20($sp)
/* f087b6c: 0fc5bdaa */ jal langGet
/* f087b70: afa90094 */ sw $t1,0x94($sp)
/* f087b74: 8fa40020 */ lw $a0,0x20($sp)
/* f087b78: 0fc5bdaa */ jal langGet
/* f087b7c: afa20024 */ sw $v0,0x24($sp)
/* f087b80: 3c057f1b */ lui $a1,0x7f1b
/* f087b84: 24a5b2f8 */ addiu $a1,$a1,-19720
/* f087b88: 27a4002c */ addiu $a0,$sp,0x2c
/* f087b8c: 8fa60024 */ lw $a2,0x24($sp)
/* f087b90: 0c004d11 */ jal sprintf
/* f087b94: 00403825 */ move $a3,$v0
/* f087b98: 8fa90094 */ lw $t1,0x94($sp)
/* f087b9c: 1000000a */ b .PF0f087bc8
/* f087ba0: 8faa00b4 */ lw $t2,0xb4($sp)
.PF0f087ba4:
/* f087ba4: 0fc5bdaa */ jal langGet
/* f087ba8: afa90094 */ sw $t1,0x94($sp)
/* f087bac: 3c057f1b */ lui $a1,0x7f1b
/* f087bb0: 24a5b300 */ addiu $a1,$a1,-19712
/* f087bb4: 27a4002c */ addiu $a0,$sp,0x2c
/* f087bb8: 0c004d11 */ jal sprintf
/* f087bbc: 00403025 */ move $a2,$v0
/* f087bc0: 8fa90094 */ lw $t1,0x94($sp)
/* f087bc4: 8faa00b4 */ lw $t2,0xb4($sp)
.PF0f087bc8:
/* f087bc8: 93af002c */ lbu $t7,0x2c($sp)
/* f087bcc: 27a6002c */ addiu $a2,$sp,0x2c
/* f087bd0: 00c01825 */ move $v1,$a2
/* f087bd4: 11e0000b */ beqz $t7,.PF0f087c04
/* f087bd8: 27b8002c */ addiu $t8,$sp,0x2c
/* f087bdc: 93020000 */ lbu $v0,0x0($t8)
/* f087be0: 2404000a */ li $a0,0xa
.PF0f087be4:
/* f087be4: 54820004 */ bnel $a0,$v0,.PF0f087bf8
/* f087be8: 24630001 */ addiu $v1,$v1,0x1
/* f087bec: 10000002 */ b .PF0f087bf8
/* f087bf0: a0600000 */ sb $zero,0x0($v1)
/* f087bf4: 24630001 */ addiu $v1,$v1,0x1
.PF0f087bf8:
/* f087bf8: 90620000 */ lbu $v0,0x0($v1)
/* f087bfc: 1440fff9 */ bnez $v0,.PF0f087be4
/* f087c00: 00000000 */ nop
.PF0f087c04:
/* f087c04: 8fb900b8 */ lw $t9,0xb8($sp)
/* f087c08: 1320000b */ beqz $t9,.PF0f087c38
/* f087c0c: 00000000 */ nop
/* f087c10: 0fc5bdaa */ jal langGet
/* f087c14: 24045208 */ li $a0,0x5208
/* f087c18: 3c057f1b */ lui $a1,0x7f1b
/* f087c1c: 24a5b304 */ addiu $a1,$a1,-19708
/* f087c20: 8fa400a8 */ lw $a0,0xa8($sp)
/* f087c24: 00403025 */ move $a2,$v0
/* f087c28: 0c004d11 */ jal sprintf
/* f087c2c: 27a7002c */ addiu $a3,$sp,0x2c
/* f087c30: 1000000f */ b .PF0f087c70
/* f087c34: 8fbf0014 */ lw $ra,0x14($sp)
.PF0f087c38:
/* f087c38: 15400009 */ bnez $t2,.PF0f087c60
/* f087c3c: 8fa400a8 */ lw $a0,0xa8($sp)
/* f087c40: 0fc5bdaa */ jal langGet
/* f087c44: 25245200 */ addiu $a0,$t1,0x5200
/* f087c48: 8fa400a8 */ lw $a0,0xa8($sp)
/* f087c4c: 00402825 */ move $a1,$v0
/* f087c50: 0c004d11 */ jal sprintf
/* f087c54: 27a6002c */ addiu $a2,$sp,0x2c
/* f087c58: 10000005 */ b .PF0f087c70
/* f087c5c: 8fbf0014 */ lw $ra,0x14($sp)
.PF0f087c60:
/* f087c60: 3c057f1b */ lui $a1,0x7f1b
/* f087c64: 0c004d11 */ jal sprintf
/* f087c68: 24a5b30c */ addiu $a1,$a1,-19700
.PF0f087c6c:
/* f087c6c: 8fbf0014 */ lw $ra,0x14($sp)
.PF0f087c70:
/* f087c70: 27bd00a8 */ addiu $sp,$sp,0xa8
/* f087c74: 03e00008 */ jr $ra
/* f087c78: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f0878c8pf
.late_rodata
glabel var7f1abdf8pf
.word 0x7f0878f0
.word 0x7f0878f0
.word 0x7f0878f0
.word 0x7f0878f0
.word 0x7f0878f8
.word 0x7f087998
.word 0x7f0879b0
.word 0x7f0879cc
.word 0x7f0879e8
.word 0x7f087a04
.word 0x7f087a20
.word 0x7f087a3c
.word 0x7f087a58
.word 0x7f087a74
.text
/* f087818: 3c0b8008 */ lui $t3,0x8008
/* f08781c: 8d6b6600 */ lw $t3,0x6600($t3)
/* f087820: 27bdff58 */ addiu $sp,$sp,-168
/* f087824: afbf0014 */ sw $ra,0x14($sp)
/* f087828: 29610005 */ slti $at,$t3,0x5
/* f08782c: afa400a8 */ sw $a0,0xa8($sp)
/* f087830: afa500ac */ sw $a1,0xac($sp)
/* f087834: afa700b4 */ sw $a3,0xb4($sp)
/* f087838: 00004025 */ move $t0,$zero
/* f08783c: 14200002 */ bnez $at,.PB0f087848
/* f087840: 00004825 */ move $t1,$zero
/* f087844: 00005825 */ move $t3,$zero
.PB0f087848:
/* f087848: 8fae00a8 */ lw $t6,0xa8($sp)
/* f08784c: a1c00000 */ sb $zero,0x0($t6)
/* f087850: afab009c */ sw $t3,0x9c($sp)
/* f087854: afa90094 */ sw $t1,0x94($sp)
/* f087858: a7a80098 */ sh $t0,0x98($sp)
/* f08785c: afa600b0 */ sw $a2,0xb0($sp)
/* f087860: 8fa500bc */ lw $a1,0xbc($sp)
/* f087864: 0fc21df6 */ jal func0f087888pf
/* f087868: 8fa400ac */ lw $a0,0xac($sp)
/* f08786c: 8fa600b0 */ lw $a2,0xb0($sp)
/* f087870: 97a80098 */ lhu $t0,0x98($sp)
/* f087874: 8fa90094 */ lw $t1,0x94($sp)
/* f087878: 8faa00b4 */ lw $t2,0xb4($sp)
/* f08787c: 104000cf */ beqz $v0,.PB0f087bbc
/* f087880: 8fab009c */ lw $t3,0x9c($sp)
/* f087884: 004b7821 */ addu $t7,$v0,$t3
/* f087888: 91e40008 */ lbu $a0,0x8($t7)
/* f08788c: 24010005 */ li $at,0x5
/* f087890: 00803825 */ move $a3,$a0
/* f087894: 30f8007f */ andi $t8,$a3,0x7f
/* f087898: 03003825 */ move $a3,$t8
/* f08789c: 13010008 */ beq $t8,$at,.PB0f0878c0
/* f0878a0: 03001825 */ move $v1,$t8
/* f0878a4: 24010006 */ li $at,0x6
/* f0878a8: 13010005 */ beq $t8,$at,.PB0f0878c0
/* f0878ac: 24010007 */ li $at,0x7
/* f0878b0: 13010003 */ beq $t8,$at,.PB0f0878c0
/* f0878b4: 24010008 */ li $at,0x8
/* f0878b8: 57010003 */ bnel $t8,$at,.PB0f0878c8
/* f0878bc: 30990080 */ andi $t9,$a0,0x80
.PB0f0878c0:
/* f0878c0: 24060001 */ li $a2,0x1
/* f0878c4: 30990080 */ andi $t9,$a0,0x80
.PB0f0878c8:
/* f0878c8: 1320000c */ beqz $t9,.PB0f0878fc
/* f0878cc: 246cffff */ addiu $t4,$v1,-1
/* f0878d0: 2d810005 */ sltiu $at,$t4,0x5
/* f0878d4: 10200009 */ beqz $at,.PB0f0878fc
/* f0878d8: 000c6080 */ sll $t4,$t4,0x2
/* f0878dc: 3c017f1b */ lui $at,0x7f1b
/* f0878e0: 002c0821 */ addu $at,$at,$t4
/* f0878e4: 8c2cc848 */ lw $t4,-0x37b8($at)
/* f0878e8: 01800008 */ jr $t4
/* f0878ec: 00000000 */ nop
/* f0878f0: 10000002 */ b .PB0f0878fc
/* f0878f4: 00003025 */ move $a2,$zero
/* f0878f8: 24060001 */ li $a2,0x1
.PB0f0878fc:
/* f0878fc: 50c0001b */ beqzl $a2,.PB0f08796c
/* f087900: 94450004 */ lhu $a1,0x4($v0)
/* f087904: 94440006 */ lhu $a0,0x6($v0)
/* f087908: 24010001 */ li $at,0x1
/* f08790c: 10800014 */ beqz $a0,.PB0f087960
/* f087910: 00000000 */ nop
/* f087914: 1061000a */ beq $v1,$at,.PB0f087940
/* f087918: 3085ffff */ andi $a1,$a0,0xffff
/* f08791c: 24010002 */ li $at,0x2
/* f087920: 10610009 */ beq $v1,$at,.PB0f087948
/* f087924: 24010003 */ li $at,0x3
/* f087928: 10610009 */ beq $v1,$at,.PB0f087950
/* f08792c: 24010004 */ li $at,0x4
/* f087930: 10610009 */ beq $v1,$at,.PB0f087958
/* f087934: 00000000 */ nop
/* f087938: 1000000c */ b .PB0f08796c
/* f08793c: 00000000 */ nop
.PB0f087940:
/* f087940: 1000000a */ b .PB0f08796c
/* f087944: 24070005 */ li $a3,0x5
.PB0f087948:
/* f087948: 10000008 */ b .PB0f08796c
/* f08794c: 24070006 */ li $a3,0x6
.PB0f087950:
/* f087950: 10000006 */ b .PB0f08796c
/* f087954: 24070007 */ li $a3,0x7
.PB0f087958:
/* f087958: 10000004 */ b .PB0f08796c
/* f08795c: 24070008 */ li $a3,0x8
.PB0f087960:
/* f087960: 10000002 */ b .PB0f08796c
/* f087964: 94450004 */ lhu $a1,0x4($v0)
/* f087968: 94450004 */ lhu $a1,0x4($v0)
.PB0f08796c:
/* f08796c: 10a00093 */ beqz $a1,.PB0f087bbc
/* f087970: 00a03025 */ move $a2,$a1
/* f087974: 24edffff */ addiu $t5,$a3,-1
/* f087978: 2da10009 */ sltiu $at,$t5,0x9
/* f08797c: 10200042 */ beqz $at,.PB0f087a88
/* f087980: 000d6880 */ sll $t5,$t5,0x2
/* f087984: 3c017f1b */ lui $at,0x7f1b
/* f087988: 002d0821 */ addu $at,$at,$t5
/* f08798c: 8c2dc85c */ lw $t5,-0x37a4($at)
/* f087990: 01a00008 */ jr $t5
/* f087994: 00000000 */ nop
/* f087998: 11400003 */ beqz $t2,.PB0f0879a8
/* f08799c: 00000000 */ nop
/* f0879a0: 10000039 */ b .PB0f087a88
/* f0879a4: 2408523a */ li $t0,0x523a
.PB0f0879a8:
/* f0879a8: 10000037 */ b .PB0f087a88
/* f0879ac: 24085239 */ li $t0,0x5239
/* f0879b0: 11400004 */ beqz $t2,.PB0f0879c4
/* f0879b4: 2408523b */ li $t0,0x523b
/* f0879b8: 2408523c */ li $t0,0x523c
/* f0879bc: 10000032 */ b .PB0f087a88
/* f0879c0: 24090001 */ li $t1,0x1
.PB0f0879c4:
/* f0879c4: 10000030 */ b .PB0f087a88
/* f0879c8: 24090001 */ li $t1,0x1
/* f0879cc: 11400004 */ beqz $t2,.PB0f0879e0
/* f0879d0: 2408523d */ li $t0,0x523d
/* f0879d4: 2408523e */ li $t0,0x523e
/* f0879d8: 1000002b */ b .PB0f087a88
/* f0879dc: 24090002 */ li $t1,0x2
.PB0f0879e0:
/* f0879e0: 10000029 */ b .PB0f087a88
/* f0879e4: 24090002 */ li $t1,0x2
/* f0879e8: 11400004 */ beqz $t2,.PB0f0879fc
/* f0879ec: 2408523f */ li $t0,0x523f
/* f0879f0: 24085240 */ li $t0,0x5240
/* f0879f4: 10000024 */ b .PB0f087a88
/* f0879f8: 24090003 */ li $t1,0x3
.PB0f0879fc:
/* f0879fc: 10000022 */ b .PB0f087a88
/* f087a00: 24090003 */ li $t1,0x3
/* f087a04: 11400004 */ beqz $t2,.PB0f087a18
/* f087a08: 24085231 */ li $t0,0x5231
/* f087a0c: 24085232 */ li $t0,0x5232
/* f087a10: 1000001d */ b .PB0f087a88
/* f087a14: 24090004 */ li $t1,0x4
.PB0f087a18:
/* f087a18: 1000001b */ b .PB0f087a88
/* f087a1c: 24090004 */ li $t1,0x4
/* f087a20: 11400004 */ beqz $t2,.PB0f087a34
/* f087a24: 24085233 */ li $t0,0x5233
/* f087a28: 24085234 */ li $t0,0x5234
/* f087a2c: 10000016 */ b .PB0f087a88
/* f087a30: 24090005 */ li $t1,0x5
.PB0f087a34:
/* f087a34: 10000014 */ b .PB0f087a88
/* f087a38: 24090005 */ li $t1,0x5
/* f087a3c: 11400004 */ beqz $t2,.PB0f087a50
/* f087a40: 24085235 */ li $t0,0x5235
/* f087a44: 24085236 */ li $t0,0x5236
/* f087a48: 1000000f */ b .PB0f087a88
/* f087a4c: 24090006 */ li $t1,0x6
.PB0f087a50:
/* f087a50: 1000000d */ b .PB0f087a88
/* f087a54: 24090006 */ li $t1,0x6
/* f087a58: 11400004 */ beqz $t2,.PB0f087a6c
/* f087a5c: 24085237 */ li $t0,0x5237
/* f087a60: 24085238 */ li $t0,0x5238
/* f087a64: 10000008 */ b .PB0f087a88
/* f087a68: 24090007 */ li $t1,0x7
.PB0f087a6c:
/* f087a6c: 10000006 */ b .PB0f087a88
/* f087a70: 24090007 */ li $t1,0x7
/* f087a74: 11400003 */ beqz $t2,.PB0f087a84
/* f087a78: 24090001 */ li $t1,0x1
/* f087a7c: 10000002 */ b .PB0f087a88
/* f087a80: 24085230 */ li $t0,0x5230
.PB0f087a84:
/* f087a84: 2408522f */ li $t0,0x522f
.PB0f087a88:
/* f087a88: 15400005 */ bnez $t2,.PB0f087aa0
/* f087a8c: 8fae00b8 */ lw $t6,0xb8($sp)
/* f087a90: 24010002 */ li $at,0x2
/* f087a94: 15610002 */ bne $t3,$at,.PB0f087aa0
/* f087a98: 00000000 */ nop
/* f087a9c: 00004025 */ move $t0,$zero
.PB0f087aa0:
/* f087aa0: 11c00002 */ beqz $t6,.PB0f087aac
/* f087aa4: 00c02025 */ move $a0,$a2
/* f087aa8: 00004025 */ move $t0,$zero
.PB0f087aac:
/* f087aac: 11000011 */ beqz $t0,.PB0f087af4
/* f087ab0: 00000000 */ nop
/* f087ab4: 01002025 */ move $a0,$t0
/* f087ab8: afa60020 */ sw $a2,0x20($sp)
/* f087abc: 0fc5c06a */ jal langGet
/* f087ac0: afa90094 */ sw $t1,0x94($sp)
/* f087ac4: 8fa40020 */ lw $a0,0x20($sp)
/* f087ac8: 0fc5c06a */ jal langGet
/* f087acc: afa20024 */ sw $v0,0x24($sp)
/* f087ad0: 3c057f1b */ lui $a1,0x7f1b
/* f087ad4: 24a5bd4c */ addiu $a1,$a1,-17076
/* f087ad8: 27a4002c */ addiu $a0,$sp,0x2c
/* f087adc: 8fa60024 */ lw $a2,0x24($sp)
/* f087ae0: 0c004e1d */ jal sprintf
/* f087ae4: 00403825 */ move $a3,$v0
/* f087ae8: 8fa90094 */ lw $t1,0x94($sp)
/* f087aec: 1000000a */ b .PB0f087b18
/* f087af0: 8faa00b4 */ lw $t2,0xb4($sp)
.PB0f087af4:
/* f087af4: 0fc5c06a */ jal langGet
/* f087af8: afa90094 */ sw $t1,0x94($sp)
/* f087afc: 3c057f1b */ lui $a1,0x7f1b
/* f087b00: 24a5bd54 */ addiu $a1,$a1,-17068
/* f087b04: 27a4002c */ addiu $a0,$sp,0x2c
/* f087b08: 0c004e1d */ jal sprintf
/* f087b0c: 00403025 */ move $a2,$v0
/* f087b10: 8fa90094 */ lw $t1,0x94($sp)
/* f087b14: 8faa00b4 */ lw $t2,0xb4($sp)
.PB0f087b18:
/* f087b18: 93af002c */ lbu $t7,0x2c($sp)
/* f087b1c: 27a6002c */ addiu $a2,$sp,0x2c
/* f087b20: 00c01825 */ move $v1,$a2
/* f087b24: 11e0000b */ beqz $t7,.PB0f087b54
/* f087b28: 27b8002c */ addiu $t8,$sp,0x2c
/* f087b2c: 93020000 */ lbu $v0,0x0($t8)
/* f087b30: 2404000a */ li $a0,0xa
.PB0f087b34:
/* f087b34: 54820004 */ bnel $a0,$v0,.PB0f087b48
/* f087b38: 24630001 */ addiu $v1,$v1,0x1
/* f087b3c: 10000002 */ b .PB0f087b48
/* f087b40: a0600000 */ sb $zero,0x0($v1)
/* f087b44: 24630001 */ addiu $v1,$v1,0x1
.PB0f087b48:
/* f087b48: 90620000 */ lbu $v0,0x0($v1)
/* f087b4c: 1440fff9 */ bnez $v0,.PB0f087b34
/* f087b50: 00000000 */ nop
.PB0f087b54:
/* f087b54: 8fb900b8 */ lw $t9,0xb8($sp)
/* f087b58: 1320000b */ beqz $t9,.PB0f087b88
/* f087b5c: 00000000 */ nop
/* f087b60: 0fc5c06a */ jal langGet
/* f087b64: 24045208 */ li $a0,0x5208
/* f087b68: 3c057f1b */ lui $a1,0x7f1b
/* f087b6c: 24a5bd58 */ addiu $a1,$a1,-17064
/* f087b70: 8fa400a8 */ lw $a0,0xa8($sp)
/* f087b74: 00403025 */ move $a2,$v0
/* f087b78: 0c004e1d */ jal sprintf
/* f087b7c: 27a7002c */ addiu $a3,$sp,0x2c
/* f087b80: 1000000f */ b .PB0f087bc0
/* f087b84: 8fbf0014 */ lw $ra,0x14($sp)
.PB0f087b88:
/* f087b88: 15400009 */ bnez $t2,.PB0f087bb0
/* f087b8c: 8fa400a8 */ lw $a0,0xa8($sp)
/* f087b90: 0fc5c06a */ jal langGet
/* f087b94: 25245200 */ addiu $a0,$t1,0x5200
/* f087b98: 8fa400a8 */ lw $a0,0xa8($sp)
/* f087b9c: 00402825 */ move $a1,$v0
/* f087ba0: 0c004e1d */ jal sprintf
/* f087ba4: 27a6002c */ addiu $a2,$sp,0x2c
/* f087ba8: 10000005 */ b .PB0f087bc0
/* f087bac: 8fbf0014 */ lw $ra,0x14($sp)
.PB0f087bb0:
/* f087bb0: 3c057f1b */ lui $a1,0x7f1b
/* f087bb4: 0c004e1d */ jal sprintf
/* f087bb8: 24a5bd60 */ addiu $a1,$a1,-17056
.PB0f087bbc:
/* f087bbc: 8fbf0014 */ lw $ra,0x14($sp)
.PB0f087bc0:
/* f087bc0: 27bd00a8 */ addiu $sp,$sp,0xa8
/* f087bc4: 03e00008 */ jr $ra
/* f087bc8: 00000000 */ nop
);
#endif
const char varf71ab2f8pf[] = "%s%s";
const char varf71ab300pf[] = "%s";
#if VERSION >= VERSION_JPN_FINAL
const char varf71ab304pf[] = "%s%s\n";
const char varf71ab30cpf[] = "%s\n";
#else
const char varf71ab304pf[] = "%s%s.\n";
const char varf71ab30cpf[] = "%s.\n";
#endif
// Mismatch: determiner needs to be copied into t8 for the first switch
//void func0f0878c8pf(char *dst, s32 id, bool plural, bool full, bool dual, struct nameinfo *table)
//{
// struct nameinfo *info;
// u8 *ptr;
// s32 languageid = g_LanguageId;
// u16 nametextid = 0;
// u16 determinertextid = 0;
// s32 index = 0;
// u8 buffer[100];
//
// if (languageid > LANGUAGE_PAL_ES) {
// languageid = LANGUAGE_PAL_EN;
// }
//
// *dst = '\0';
//
// info = func0f087888pf(id, table);
//
// if (info != NULL) {
// s32 determiner = info->unk08[languageid] & 0x7f;
//
// switch (info->unk08[languageid] & 0x7f) {
// case DETERMINER_SOME5:
// case DETERMINER_SOME6:
// case DETERMINER_SOME7:
// case DETERMINER_8:
// plural = true;
// break;
// }
//
// if (info->unk08[languageid] & 0x80) {
// switch (info->unk08[languageid] & 0x7f) {
// case DETERMINER_A:
// case DETERMINER_AN:
// case DETERMINER_THE:
// case DETERMINER_4:
// plural = false;
// break;
// case DETERMINER_SOME5:
// plural = true;
// break;
// }
// }
//
// if (plural) {
// if (info->pluraltext) {
// nametextid = info->pluraltext;
//
// switch (info->unk08[languageid] & 0x7f) {
// case DETERMINER_A:
// determiner = DETERMINER_SOME5;
// break;
// case DETERMINER_AN:
// determiner = DETERMINER_SOME6;
// break;
// case DETERMINER_THE:
// determiner = DETERMINER_SOME7;
// break;
// case DETERMINER_4:
// determiner = DETERMINER_8;
// break;
// }
// } else {
// nametextid = info->singulartext;
// }
// } else {
// nametextid = info->singulartext;
// }
//
// if (nametextid != 0) {
// switch (determiner) {
// case DETERMINER_A:
// determinertextid = full ? L_PROPOBJ_058 : L_PROPOBJ_057; // "A", "a"
// break;
// case DETERMINER_AN:
// determinertextid = full ? L_PROPOBJ_060 : L_PROPOBJ_059; // "An", "an"
// index = 1;
// break;
// case DETERMINER_THE:
// determinertextid = full ? L_PROPOBJ_062 : L_PROPOBJ_061; // "The", "the"
// index = 2;
// break;
// case DETERMINER_4:
// determinertextid = full ? L_PROPOBJ_064 : L_PROPOBJ_063; // "", ""
// index = 3;
// break;
// case DETERMINER_SOME5:
// determinertextid = full ? L_PROPOBJ_050 : L_PROPOBJ_049; // "Some", "some"
// index = 4;
// break;
// case DETERMINER_SOME6:
// determinertextid = full ? L_PROPOBJ_052 : L_PROPOBJ_051; // "Some", "some"
// index = 5;
// break;
// case DETERMINER_SOME7:
// determinertextid = full ? L_PROPOBJ_054 : L_PROPOBJ_053; // "Some", "some"
// index = 6;
// break;
// case DETERMINER_8:
// determinertextid = full ? L_PROPOBJ_056 : L_PROPOBJ_055; // "", ""
// index = 7;
// break;
// case DETERMINER_YOUR:
// determinertextid = full ? L_PROPOBJ_048 : L_PROPOBJ_047; // "Your", "your"
// index = 1;
// break;
// }
//
// if (!full && languageid == LANGUAGE_PAL_DE) {
// determinertextid = 0;
// }
//
// if (dual) {
// determinertextid = 0;
// }
//
// if (determinertextid) {
// sprintf(buffer, "%s%s", langGet(determinertextid), langGet(nametextid));
// } else {
// sprintf(buffer, "%s", langGet(nametextid));
// }
//
// ptr = buffer;
//
// while (*ptr != '\0') {
// if (*ptr == '\n') {
// *ptr = '\0';
// } else {
// ptr++;
// }
// }
//
// if (dual) {
// sprintf(dst, "%s%s.\n", langGet(L_PROPOBJ_008), buffer); // "Double"
// } else if (!full) {
// sprintf(dst, langGet(L_PROPOBJ_000 + index), buffer); // "Picked up %s.\n"
// } else {
// sprintf(dst, "%s.\n", buffer);
// }
// }
// }
//}
#endif
#if VERSION < VERSION_PAL_BETA
void ammotypeGetDeterminer(char *dst, s32 ammotype, s32 qty)
{
bool determiner_a = false;
bool determiner_an = false;
bool determiner_some = false;
bool determiner_the = false;
s32 playercount = PLAYERCOUNT();
s32 full = playercount <= 2
&& !(playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()));
switch (ammotype) {
case AMMOTYPE_CLOAK:
determiner_a = true;
break;
case AMMOTYPE_PISTOL:
case AMMOTYPE_SMG:
case AMMOTYPE_RIFLE:
case AMMOTYPE_SEDATIVE:
case AMMOTYPE_PSYCHOSIS:
case AMMOTYPE_PLASTIQUE:
determiner_some = true;
break;
case AMMOTYPE_CROSSBOW:
case AMMOTYPE_SHOTGUN:
case AMMOTYPE_GRENADE:
case AMMOTYPE_ROCKET:
case AMMOTYPE_KNIFE:
case AMMOTYPE_MAGNUM:
case AMMOTYPE_DEVASTATOR:
case AMMOTYPE_REMOTE_MINE:
case AMMOTYPE_PROXY_MINE:
case AMMOTYPE_TIMED_MINE:
case AMMOTYPE_REAPER:
case AMMOTYPE_HOMINGROCKET:
case AMMOTYPE_DART:
case AMMOTYPE_BOOST:
case AMMOTYPE_BUG:
case AMMOTYPE_MICROCAMERA:
if (qty == 1) {
determiner_a = true;
} else {
determiner_some = true;
}
break;
case AMMOTYPE_FARSIGHT:
case AMMOTYPE_NBOMB:
case AMMOTYPE_ECM_MINE:
if (qty == 1) {
determiner_an = true;
} else {
determiner_some = true;
}
break;
case AMMOTYPE_TOKEN:
if (qty == 1) {
determiner_the = true;
} else {
determiner_some = true;
}
break;
}
if (determiner_a) {
if (full) {
strcat(dst, langGet(L_PROPOBJ_004)); // "a"
} else {
strcat(dst, langGet(L_PROPOBJ_005)); // "A"
}
}
if (determiner_an) {
if (full) {
strcat(dst, langGet(L_PROPOBJ_006)); // "an"
} else {
strcat(dst, langGet(L_PROPOBJ_007)); // "An"
}
}
if (determiner_some) {
if (full) {
strcat(dst, langGet(L_PROPOBJ_002)); // "some"
} else {
strcat(dst, langGet(L_PROPOBJ_003)); // "Some"
}
}
if (determiner_the) {
if (full) {
strcat(dst, langGet(L_PROPOBJ_008)); // "the"
} else {
strcat(dst, langGet(L_PROPOBJ_009)); // "The"
}
}
}
#endif
#if VERSION < VERSION_PAL_BETA
void ammotypeGetPickupName(char *dst, s32 ammotype2, s32 qty)
{
s32 ammotype = ammotype2;
if (ammotype == AMMOTYPE_PISTOL || ammotype == AMMOTYPE_SMG || ammotype == AMMOTYPE_RIFLE) {
strcat(dst, langGet(L_PROPOBJ_010)); // "ammo"
} else if (ammotype == AMMOTYPE_KNIFE) {
strcat(dst, langGet(L_PROPOBJ_021)); // "combat"
if (qty == 1) {
strcat(dst, langGet(L_PROPOBJ_022)); // "knife"
} else {
strcat(dst, langGet(L_PROPOBJ_023)); // "knives"
}
} else {
s32 textnum = -1;
switch (ammotype) {
case AMMOTYPE_CROSSBOW: textnum = L_PROPOBJ_045; break; // "bolt"
case AMMOTYPE_SHOTGUN: textnum = L_PROPOBJ_011; break; // "cartridge"
case AMMOTYPE_FARSIGHT: textnum = L_PROPOBJ_046; break; // "orb"
case AMMOTYPE_GRENADE: textnum = L_PROPOBJ_014; break; // "grenade"
case AMMOTYPE_ROCKET: textnum = L_PROPOBJ_016; break; // "rocket"
case AMMOTYPE_MAGNUM: textnum = L_PROPOBJ_012; break; // "magnum bullet"
case AMMOTYPE_DEVASTATOR: textnum = L_PROPOBJ_015; break; // "grenade round"
case AMMOTYPE_REMOTE_MINE: textnum = L_PROPOBJ_018; break; // "remote mine"
case AMMOTYPE_PROXY_MINE: textnum = L_PROPOBJ_019; break; // "proximity mine"
case AMMOTYPE_TIMED_MINE: textnum = L_PROPOBJ_020; break; // "timed mine"
case AMMOTYPE_REAPER: textnum = L_PROPOBJ_047; break; // "Reaper ammo"
case AMMOTYPE_HOMINGROCKET: textnum = L_PROPOBJ_017; break; // "homing rocket"
case AMMOTYPE_DART: textnum = L_PROPOBJ_025; break; // "dart"
case AMMOTYPE_NBOMB: textnum = L_PROPOBJ_026; break; // "N-Bomb"
case AMMOTYPE_SEDATIVE: textnum = L_PROPOBJ_027; break; // "sedatives"
case AMMOTYPE_PSYCHOSIS: textnum = L_PROPOBJ_027; break; // "sedatives"
case AMMOTYPE_BUG: textnum = L_PROPOBJ_035; break; // "bug"
case AMMOTYPE_MICROCAMERA: textnum = L_PROPOBJ_036; break; // "micro camera"
case AMMOTYPE_TOKEN: textnum = L_PROPOBJ_038; break; // "token"
case AMMOTYPE_PLASTIQUE: textnum = L_PROPOBJ_039; break; // "plastique"
case AMMOTYPE_CLOAK: textnum = L_PROPOBJ_048; break; // "cloaking device"
case AMMOTYPE_BOOST: textnum = L_PROPOBJ_049; break; // "boost pill"
}
if (textnum >= 0) {
strcat(dst, langGet(textnum));
}
if (qty >= 2 && ammotype != AMMOTYPE_REAPER && ammotype != AMMOTYPE_SEDATIVE && ammotype != AMMOTYPE_CLOAK) {
strcat(dst, langGet(L_PROPOBJ_024)); // "s"
}
}
}
#endif
void ammotypePlayPickupSound(u32 ammotype)
{
switch (ammotype) {
case AMMOTYPE_PISTOL:
case AMMOTYPE_SMG:
case AMMOTYPE_RIFLE:
case AMMOTYPE_SHOTGUN:
case AMMOTYPE_GRENADE:
case AMMOTYPE_ROCKET:
case AMMOTYPE_MAGNUM:
case AMMOTYPE_DEVASTATOR:
case AMMOTYPE_REAPER:
case AMMOTYPE_HOMINGROCKET:
case AMMOTYPE_DART:
case AMMOTYPE_NBOMB:
case AMMOTYPE_SEDATIVE:
case AMMOTYPE_CLOAK:
case AMMOTYPE_BOOST:
case AMMOTYPE_TOKEN:
sndStart(var80095200, SFX_PICKUP_AMMO, NULL, -1, -1, -1, -1, -1);
break;
case AMMOTYPE_REMOTE_MINE:
case AMMOTYPE_PROXY_MINE:
case AMMOTYPE_TIMED_MINE:
case AMMOTYPE_BUG:
case AMMOTYPE_MICROCAMERA:
case AMMOTYPE_PLASTIQUE:
case AMMOTYPE_ECM_MINE:
sndStart(var80095200, SFX_PICKUP_MINE, NULL, -1, -1, -1, -1, -1);
break;
case AMMOTYPE_KNIFE:
sndStart(var80095200, SFX_PICKUP_KNIFE, NULL, -1, -1, -1, -1, -1);
break;
}
}
s32 propPlayPickupSound(struct prop *prop, s32 weapon)
{
s16 sound;
if (weapon == WEAPON_COMBATKNIFE || weapon == WEAPON_COMBATKNIFE) {
sound = SFX_PICKUP_KNIFE;
} else if (weapon == WEAPON_REMOTEMINE
|| weapon == WEAPON_PROXIMITYMINE
|| weapon == WEAPON_TIMEDMINE
|| weapon == WEAPON_COMMSRIDER
|| weapon == WEAPON_TRACERBUG
|| weapon == WEAPON_TARGETAMPLIFIER
|| weapon == WEAPON_ECMMINE) {
sound = SFX_PICKUP_MINE;
} else if (weapon == WEAPON_GRENADE
|| weapon == WEAPON_GRENADEROUND
|| weapon == WEAPON_ROCKET
|| weapon == WEAPON_HOMINGROCKET) {
sound = SFX_PICKUP_AMMO;
} else if (weapon == WEAPON_LASER) {
sound = SFX_PICKUP_LASER;
} else {
sound = SFX_PICKUP_GUN;
}
return propsnd0f0939f8(NULL, prop, sound, -1,
-1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1);
}
void weaponPlayPickupSound(s32 weaponnum)
{
s32 sound;
if (weaponnum == WEAPON_COMBATKNIFE || weaponnum == WEAPON_COMBATKNIFE) {
sound = SFX_PICKUP_KNIFE;
} else if (weaponnum == WEAPON_REMOTEMINE
|| weaponnum == WEAPON_PROXIMITYMINE
|| weaponnum == WEAPON_TIMEDMINE
|| weaponnum == WEAPON_TRACERBUG
|| weaponnum == WEAPON_TARGETAMPLIFIER
|| weaponnum == WEAPON_COMMSRIDER
|| weaponnum == WEAPON_ECMMINE) {
sound = SFX_PICKUP_MINE;
} else if (weaponnum == WEAPON_GRENADE
|| weaponnum == WEAPON_GRENADEROUND
|| weaponnum == WEAPON_ROCKET
|| weaponnum == WEAPON_HOMINGROCKET) {
sound = SFX_PICKUP_AMMO;
} else if (weaponnum == WEAPON_LASER) {
sound = SFX_PICKUP_LASER;
} else if (weaponnum == WEAPON_BOLT) {
sound = SFX_PICKUP_GUN;
} else if (weaponnum == WEAPON_EYESPY) {
sound = SFX_PICKUP_KEYCARD;
} else if (weaponnum > WEAPON_PSYCHOSISGUN) {
sound = SFX_PICKUP_KEYCARD;
} else {
sound = SFX_PICKUP_GUN;
}
sndStart(var80095200, sound, NULL, -1, -1, -1, -1, -1);
}
void ammotypeGetPickupMessage(char *dst, s32 ammotype, s32 qty)
{
s32 playercount = PLAYERCOUNT();
s32 full = playercount <= 2
&& !(playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()));
*dst = '\0';
#if VERSION >= VERSION_JPN_FINAL
if (ammotype == AMMOTYPE_PISTOL || ammotype == AMMOTYPE_SMG || ammotype == AMMOTYPE_RIFLE) {
ammotype = 999;
}
func0f0878c8pf(dst, ammotype, qty > 1, !full, 0, var8006a944pf);
#elif VERSION >= VERSION_PAL_BETA
if (g_Jpn) {
strcat(dst, "\n");
} else {
if (ammotype == AMMOTYPE_PISTOL || ammotype == AMMOTYPE_SMG || ammotype == AMMOTYPE_RIFLE) {
ammotype = 999;
}
func0f0878c8pf(dst, ammotype, qty > 1, !full, 0, var8006a944pf);
}
#else
if (g_Jpn) {
ammotypeGetPickupName(dst, ammotype, qty);
if (full) {
ammotypeGetPickedUpText(dst);
}
strcat(dst, "\n");
} else {
if (full) {
ammotypeGetPickedUpText(dst); // "Picked up"
}
ammotypeGetDeterminer(dst, ammotype, qty); // "a", "an", "some" or "the"
ammotypeGetPickupName(dst, ammotype, qty); // name of ammo type
strcat(dst, ".\n");
}
#endif
}
void currentPlayerQueuePickupAmmoHudmsg(s32 ammotype, s32 pickupqty)
{
char buffer[100] = "";
ammotypeGetPickupMessage(buffer, ammotype, pickupqty);
hudmsgCreateWithFlags(buffer, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE);
}
void ammoHandlePickup(s32 ammotype, s32 quantity, bool withsound, bool withhudmsg)
{
s32 weapon;
if (quantity > 0) {
if (bgunGetReservedAmmoCount(ammotype) < bgunGetCapacityByAmmotype(ammotype)) {
bgunSetAmmoQuantity(ammotype, bgunGetReservedAmmoCount(ammotype) + quantity);
if (withhudmsg) {
currentPlayerQueuePickupAmmoHudmsg(ammotype, quantity);
}
}
if (withsound) {
ammotypePlayPickupSound(ammotype);
}
if (ammotype == AMMOTYPE_GRENADE) {
weapon = WEAPON_GRENADE;
} else if (ammotype == AMMOTYPE_REMOTE_MINE) {
weapon = WEAPON_REMOTEMINE;
} else if (ammotype == AMMOTYPE_PROXY_MINE) {
weapon = WEAPON_PROXIMITYMINE;
} else if (ammotype == AMMOTYPE_TIMED_MINE) {
weapon = WEAPON_TIMEDMINE;
} else if (ammotype == AMMOTYPE_NBOMB) {
weapon = WEAPON_NBOMB;
} else if (ammotype == AMMOTYPE_KNIFE) {
weapon = WEAPON_COMBATKNIFE;
} else if (ammotype == AMMOTYPE_ECM_MINE) {
weapon = WEAPON_ECMMINE;
} else if (ammotype == AMMOTYPE_TOKEN) {
weapon = WEAPON_BRIEFCASE2;
} else if (ammotype == AMMOTYPE_CLOAK) {
weapon = WEAPON_CLOAKINGDEVICE;
} else if (ammotype == AMMOTYPE_BOOST) {
weapon = WEAPON_COMBATBOOST;
} else {
weapon = -1;
}
if (weapon >= 0) {
invGiveSingleWeapon(weapon);
}
}
}
s32 ammocrateGetPickupAmmoQty(struct ammocrateobj *crate)
{
s32 qty = 1;
switch (crate->ammotype) {
case AMMOTYPE_PISTOL : qty = 10; break;
case AMMOTYPE_SMG : qty = 10; break;
case AMMOTYPE_CROSSBOW : qty = 10; break;
case AMMOTYPE_RIFLE : qty = 10; break;
case AMMOTYPE_SHOTGUN : qty = 5; break;
case AMMOTYPE_MAGNUM : qty = 5; break;
case AMMOTYPE_REAPER : qty = 200; break;
case AMMOTYPE_DART : qty = 4; break;
case AMMOTYPE_CLOAK : qty = TICKS(1200); break;
case AMMOTYPE_SEDATIVE : qty = 16; break;
case AMMOTYPE_BOOST : qty = 1; break;
}
if (qty > 1 && !g_Vars.normmplayerisrunning) {
qty *= g_AmmoQuantityScale;
}
return qty;
}
s32 weaponGetPickupAmmoQty(struct weaponobj *weapon)
{
s32 ammotype;
s32 qty = 1;
if (!weapon) {
return 20;
}
ammotype = bgunGetAmmoTypeForWeapon(weapon->weaponnum, 0);
if (weapon->weaponnum == WEAPON_COMBATKNIFE || weapon->weaponnum == WEAPON_BOLT) {
return 1;
}
if (weapon->base.flags & OBJFLAG_WEAPON_40000000) {
return 0;
}
if (g_Vars.normmplayerisrunning) {
switch (ammotype) {
case AMMOTYPE_PISTOL: qty = 10; break;
case AMMOTYPE_SMG: qty = 20; break;
case AMMOTYPE_CROSSBOW: qty = 5; break;
case AMMOTYPE_RIFLE: qty = 20; break;
case AMMOTYPE_SHOTGUN: qty = 10; break;
case AMMOTYPE_FARSIGHT: qty = 4; break;
case AMMOTYPE_MAGNUM: qty = 10; break;
case AMMOTYPE_DEVASTATOR: qty = 3; break;
case AMMOTYPE_REAPER: qty = 200; break;
case AMMOTYPE_DART: qty = 10; break;
case AMMOTYPE_CLOAK: qty = TICKS(1200); break;
case AMMOTYPE_SEDATIVE: qty = 16; break;
case AMMOTYPE_BOOST: qty = 1; break;
}
} else {
switch (ammotype) {
case AMMOTYPE_PISTOL: qty = 10; break;
case AMMOTYPE_SMG: qty = 10; break;
case AMMOTYPE_CROSSBOW: qty = 5; break;
case AMMOTYPE_RIFLE: qty = 10; break;
case AMMOTYPE_SHOTGUN: qty = 5; break;
case AMMOTYPE_FARSIGHT: qty = 4; break;
case AMMOTYPE_MAGNUM: qty = 5; break;
case AMMOTYPE_DEVASTATOR: qty = 3; break;
case AMMOTYPE_REAPER: qty = 100; break;
case AMMOTYPE_DART: qty = 4; break;
case AMMOTYPE_CLOAK: qty = TICKS(1200); break;
case AMMOTYPE_BOOST: qty = 2; break;
case AMMOTYPE_SEDATIVE: qty = 16; break;
}
if (qty > 1) {
qty *= g_AmmoQuantityScale;
}
}
return qty;
}
void weaponGetPickupText(char *buffer, s32 weaponnum, bool dual)
{
#if VERSION >= VERSION_PAL_BETA
// PAL changes the implementation of this function to use a lookup table,
// with some fake weaponnums for the different eyespy types.
s32 playercount = PLAYERCOUNT();
s32 full = playercount <= 2
&& !(playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()));
if (weaponnum == WEAPON_EYESPY) {
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_AIRBASE) {
weaponnum = 998;
} else if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR
|| stageGetIndex(g_Vars.stagenum) == STAGEINDEX_CHICAGO) {
weaponnum = 997;
}
}
func0f0878c8pf(buffer, weaponnum, 0, !full, dual, var8006aa94pf);
#else
s32 playercount = PLAYERCOUNT();
s32 full = playercount <= 2
&& !(playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()));
s32 textid;
bool plural = false;
if (dual) {
strcat(buffer, langGet(L_PROPOBJ_001)); // "Double"
} else {
if (!g_Jpn) {
if (full) {
strcat(buffer, langGet(L_PROPOBJ_000)); // "Picked up"
if (weaponnum == WEAPON_EYESPY && g_Vars.currentplayer->eyespy) {
textid = L_PROPOBJ_050; // "your"
} else if (weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_F_SOME)) {
textid = L_PROPOBJ_002; // "some"
} else if (weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_F_AN)) {
textid = L_PROPOBJ_006; // "an"
} else if (weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_F_THE)) {
textid = L_PROPOBJ_008; // "the"
} else {
textid = L_PROPOBJ_004; // "a"
}
strcat(buffer, langGet(textid));
} else {
if (weaponnum == WEAPON_EYESPY && g_Vars.currentplayer->eyespy) {
textid = L_PROPOBJ_051; // "Your"
} else if (weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_S_SOME)) {
textid = L_PROPOBJ_003; // "Some"
} else if (weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_S_AN)) {
textid = L_PROPOBJ_007; // "An"
} else if (weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_S_THE)) {
textid = L_PROPOBJ_009; // "The"
} else {
textid = L_PROPOBJ_005; // "A"
}
strcat(buffer, langGet(textid));
}
}
}
if (full) {
strcat(buffer, bgunGetName(weaponnum));
plural = weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_F_SOME);
} else {
strcat(buffer, bgunGetShortName(weaponnum));
plural = weaponHasFlag(weaponnum, WEAPONFLAG_DETERMINER_S_SOME);
}
// Note that weapon names have a line break on the end which is undesirable
// here. The code below removes them conditionally, then ends up removing
// them unconditionally anyway which is a bit wasteful.
if (plural) {
if (buffer[strlen(buffer) - 1] == '\n') {
buffer[strlen(buffer) - 1] = '\0';
}
strcat(buffer, "s");
}
// For JPN, their translation of "picked up" comes after the weapon name
if (g_Jpn && full) {
if (buffer[strlen(buffer) - 1] == '\n') {
buffer[strlen(buffer) - 1] = '\0';
}
strcat(buffer, langGet(L_PROPOBJ_000)); // "Picked up"
strcat(buffer, "\n"); // This just gets removed immediately below
}
if (buffer[strlen(buffer) - 1] == '\n') {
buffer[strlen(buffer) - 1] = '\0';
}
strcat(buffer, ".\n");
#endif
}
void currentPlayerQueuePickupWeaponHudmsg(u32 weaponnum, bool dual)
{
char buffer[100] = "";
weaponGetPickupText(buffer, weaponnum, dual);
hudmsgCreateWithFlags(buffer, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE | HUDMSGFLAG_ALLOWDUPES);
}
const char var7f1aa140[] = "autodoorcanclose: blocking door\n\n";
#if VERSION >= VERSION_PAL_BETA
GLOBAL_ASM(
glabel propPickupByPlayer
.late_rodata
glabel var7f1aadc0
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadc4
.word propPickupByPlayer+0x74 # f0888b4
glabel var7f1aadc8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadcc
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadd0
.word propPickupByPlayer+0xf4 # f088934
glabel var7f1aadd4
.word propPickupByPlayer+0x1f4 # f088a34
glabel var7f1aadd8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aaddc
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aade0
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aade4
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aade8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadec
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadf0
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadf4
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadf8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadfc
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae00
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae04
.word propPickupByPlayer+0x134 # f088974
glabel var7f1aae08
.word propPickupByPlayer+0x590 # f088dd0
glabel var7f1aae0c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae10
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae14
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae18
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae1c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae20
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae24
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae28
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae2c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae30
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae34
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae38
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae3c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae40
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae44
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae48
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae4c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae50
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae54
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae58
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae5c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae60
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae64
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae68
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae6c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae70
.word propPickupByPlayer+0x6e0 # f088f20
.text
/* f088840: 27bdff60 */ addiu $sp,$sp,-160
/* f088844: afbf0024 */ sw $ra,0x24($sp)
/* f088848: afa400a0 */ sw $a0,0xa0($sp)
/* f08884c: afa500a4 */ sw $a1,0xa4($sp)
/* f088850: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088854: 8c860004 */ lw $a2,0x4($a0)
/* f088858: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f08885c: 8d020284 */ lw $v0,0x284($t0)
/* f088860: afa00094 */ sw $zero,0x94($sp)
/* f088864: afa6009c */ sw $a2,0x9c($sp)
/* f088868: 8c4f00d8 */ lw $t7,0xd8($v0)
/* f08886c: 15e00005 */ bnez $t7,.L0f088884
/* f088870: 00000000 */ nop
/* f088874: 8d180034 */ lw $t8,0x34($t0)
/* f088878: 8fb9009c */ lw $t9,0x9c($sp)
/* f08887c: 57000004 */ bnezl $t8,.L0f088890
/* f088880: 93290003 */ lbu $t1,0x3($t9)
.L0f088884:
/* f088884: 100001df */ b .L0f089004
/* f088888: 00001025 */ or $v0,$zero,$zero
/* f08888c: 93290003 */ lbu $t1,0x3($t9)
.L0f088890:
/* f088890: 252afffd */ addiu $t2,$t1,-3
/* f088894: 2d41002d */ sltiu $at,$t2,0x2d
/* f088898: 102001a1 */ beqz $at,.L0f088f20
/* f08889c: 000a5080 */ sll $t2,$t2,0x2
/* f0888a0: 3c017f1b */ lui $at,%hi(var7f1aadc0)
/* f0888a4: 002a0821 */ addu $at,$at,$t2
/* f0888a8: 8c2aadc0 */ lw $t2,%lo(var7f1aadc0)($at)
/* f0888ac: 01400008 */ jr $t2
/* f0888b0: 00000000 */ nop
/* f0888b4: 8d0b04cc */ lw $t3,0x4cc($t0)
/* f0888b8: 3c048009 */ lui $a0,%hi(var80095200)
/* f0888bc: 240500e5 */ addiu $a1,$zero,0xe5
/* f0888c0: 1560000d */ bnez $t3,.L0f0888f8
/* f0888c4: 00003025 */ or $a2,$zero,$zero
/* f0888c8: 3c01bf80 */ lui $at,0xbf80
/* f0888cc: 44812000 */ mtc1 $at,$f4
/* f0888d0: 240cffff */ addiu $t4,$zero,-1
/* f0888d4: 240dffff */ addiu $t5,$zero,-1
/* f0888d8: 240effff */ addiu $t6,$zero,-1
/* f0888dc: afae001c */ sw $t6,0x1c($sp)
/* f0888e0: afad0018 */ sw $t5,0x18($sp)
/* f0888e4: afac0010 */ sw $t4,0x10($sp)
/* f0888e8: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f0888ec: 2407ffff */ addiu $a3,$zero,-1
/* f0888f0: 0c004241 */ jal sndStart
/* f0888f4: e7a40014 */ swc1 $f4,0x14($sp)
.L0f0888f8:
/* f0888f8: 8faf00a4 */ lw $t7,0xa4($sp)
/* f0888fc: 11e0000b */ beqz $t7,.L0f08892c
/* f088900: 00000000 */ nop
/* f088904: 0fc44bfb */ jal invGetPickupTextByObj
/* f088908: 8fa4009c */ lw $a0,0x9c($sp)
/* f08890c: 14400004 */ bnez $v0,.L0f088920
/* f088910: 00402025 */ or $a0,$v0,$zero
/* f088914: 0fc5b9f1 */ jal langGet
/* f088918: 24045228 */ addiu $a0,$zero,0x5225
/* f08891c: 00402025 */ or $a0,$v0,$zero
.L0f088920:
/* f088920: 00002825 */ or $a1,$zero,$zero
/* f088924: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088928: 24060009 */ addiu $a2,$zero,0x9
.L0f08892c:
/* f08892c: 1000019d */ b .L0f088fa4
/* f088930: 24020004 */ addiu $v0,$zero,0x4
/* f088934: 00c02025 */ or $a0,$a2,$zero
/* f088938: 0fc22067 */ jal ammocrateGetPickupAmmoQty
/* f08893c: afa6008c */ sw $a2,0x8c($sp)
/* f088940: 3c06800a */ lui $a2,%hi(g_Vars+0x4cc)
/* f088944: 8cc6a48c */ lw $a2,%lo(g_Vars+0x4cc)($a2)
/* f088948: 8fb9008c */ lw $t9,0x8c($sp)
/* f08894c: 00402825 */ or $a1,$v0,$zero
/* f088950: 2cd80001 */ sltiu $t8,$a2,0x1
/* f088954: 03003025 */ or $a2,$t8,$zero
/* f088958: 8fa700a4 */ lw $a3,0xa4($sp)
/* f08895c: 0fc2200a */ jal ammoHandlePickup
/* f088960: 8f24005c */ lw $a0,0x5c($t9)
/* f088964: 24090001 */ addiu $t1,$zero,0x1
/* f088968: afa90098 */ sw $t1,0x98($sp)
/* f08896c: 1000018d */ b .L0f088fa4
/* f088970: 24020001 */ addiu $v0,$zero,0x1
/* f088974: 00001025 */ or $v0,$zero,$zero
/* f088978: 00c01825 */ or $v1,$a2,$zero
.L0f08897c:
/* f08897c: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088980: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f088984: 8d0a0318 */ lw $t2,0x318($t0)
/* f088988: 9465005e */ lhu $a1,0x5e($v1)
/* f08898c: 24440001 */ addiu $a0,$v0,0x1
/* f088990: 15400009 */ bnez $t2,.L0f0889b8
/* f088994: 00003025 */ or $a2,$zero,$zero
/* f088998: 44853000 */ mtc1 $a1,$f6
/* f08899c: 3c018007 */ lui $at,%hi(g_AmmoQuantityScale)
/* f0889a0: c42a995c */ lwc1 $f10,%lo(g_AmmoQuantityScale)($at)
/* f0889a4: 46803220 */ cvt.s.w $f8,$f6
/* f0889a8: 460a4402 */ mul.s $f16,$f8,$f10
/* f0889ac: 4600848d */ trunc.w.s $f18,$f16
/* f0889b0: 44059000 */ mfc1 $a1,$f18
/* f0889b4: 00000000 */ nop
.L0f0889b8:
/* f0889b8: 8fa700a4 */ lw $a3,0xa4($sp)
/* f0889bc: afa30028 */ sw $v1,0x28($sp)
/* f0889c0: 0fc2200a */ jal ammoHandlePickup
/* f0889c4: afa4002c */ sw $a0,0x2c($sp)
/* f0889c8: 8fa2002c */ lw $v0,0x2c($sp)
/* f0889cc: 8fa30028 */ lw $v1,0x28($sp)
/* f0889d0: 24010013 */ addiu $at,$zero,0x13
/* f0889d4: 1441ffe9 */ bne $v0,$at,.L0f08897c
/* f0889d8: 24630004 */ addiu $v1,$v1,0x4
/* f0889dc: 3c0c800a */ lui $t4,%hi(g_Vars+0x4cc)
/* f0889e0: 8d8ca48c */ lw $t4,%lo(g_Vars+0x4cc)($t4)
/* f0889e4: 3c048009 */ lui $a0,%hi(var80095200)
/* f0889e8: 240500ea */ addiu $a1,$zero,0xea
/* f0889ec: 1580000d */ bnez $t4,.L0f088a24
/* f0889f0: 00003025 */ or $a2,$zero,$zero
/* f0889f4: 3c01bf80 */ lui $at,0xbf80
/* f0889f8: 44812000 */ mtc1 $at,$f4
/* f0889fc: 240dffff */ addiu $t5,$zero,-1
/* f088a00: 240effff */ addiu $t6,$zero,-1
/* f088a04: 240fffff */ addiu $t7,$zero,-1
/* f088a08: afaf001c */ sw $t7,0x1c($sp)
/* f088a0c: afae0018 */ sw $t6,0x18($sp)
/* f088a10: afad0010 */ sw $t5,0x10($sp)
/* f088a14: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088a18: 2407ffff */ addiu $a3,$zero,-1
/* f088a1c: 0c004241 */ jal sndStart
/* f088a20: e7a40014 */ swc1 $f4,0x14($sp)
.L0f088a24:
/* f088a24: 24180001 */ addiu $t8,$zero,0x1
/* f088a28: afb80098 */ sw $t8,0x98($sp)
/* f088a2c: 1000015d */ b .L0f088fa4
/* f088a30: 24020001 */ addiu $v0,$zero,0x1
/* f088a34: 8d190318 */ lw $t9,0x318($t0)
/* f088a38: afa60074 */ sw $a2,0x74($sp)
/* f088a3c: afa00070 */ sw $zero,0x70($sp)
/* f088a40: 13200022 */ beqz $t9,.L0f088acc
/* f088a44: afa00068 */ sw $zero,0x68($sp)
/* f088a48: 90c5005c */ lbu $a1,0x5c($a2)
/* f088a4c: 24010057 */ addiu $at,$zero,0x57
/* f088a50: 54a1000f */ bnel $a1,$at,.L0f088a90
/* f088a54: 24010036 */ addiu $at,$zero,0x36
/* f088a58: 8c4a00bc */ lw $t2,0xbc($v0)
/* f088a5c: 8fa500a0 */ lw $a1,0xa0($sp)
/* f088a60: 0fc61a26 */ jal scenarioPickUpBriefcase
/* f088a64: 8d440004 */ lw $a0,0x4($t2)
/* f088a68: 10400006 */ beqz $v0,.L0f088a84
/* f088a6c: 00401825 */ or $v1,$v0,$zero
/* f088a70: 8fab0074 */ lw $t3,0x74($sp)
/* f088a74: 9164005c */ lbu $a0,0x5c($t3)
/* f088a78: 0fc21f44 */ jal weaponPlayPickupSound
/* f088a7c: afa20064 */ sw $v0,0x64($sp)
/* f088a80: 8fa30064 */ lw $v1,0x64($sp)
.L0f088a84:
/* f088a84: 1000015f */ b .L0f089004
/* f088a88: 00601025 */ or $v0,$v1,$zero
/* f088a8c: 24010036 */ addiu $at,$zero,0x36
.L0f088a90:
/* f088a90: 54a1000f */ bnel $a1,$at,.L0f088ad0
/* f088a94: 8d0f04cc */ lw $t7,0x4cc($t0)
/* f088a98: 8c4c00bc */ lw $t4,0xbc($v0)
/* f088a9c: 8fa500a0 */ lw $a1,0xa0($sp)
/* f088aa0: 0fc61d04 */ jal scenarioPickUpUplink
/* f088aa4: 8d840004 */ lw $a0,0x4($t4)
/* f088aa8: 10400006 */ beqz $v0,.L0f088ac4
/* f088aac: 00401825 */ or $v1,$v0,$zero
/* f088ab0: 8fad0074 */ lw $t5,0x74($sp)
/* f088ab4: 91a4005c */ lbu $a0,0x5c($t5)
/* f088ab8: 0fc21f44 */ jal weaponPlayPickupSound
/* f088abc: afa20064 */ sw $v0,0x64($sp)
/* f088ac0: 8fa30064 */ lw $v1,0x64($sp)
.L0f088ac4:
/* f088ac4: 1000014f */ b .L0f089004
/* f088ac8: 00601025 */ or $v0,$v1,$zero
.L0f088acc:
/* f088acc: 8d0f04cc */ lw $t7,0x4cc($t0)
.L0f088ad0:
/* f088ad0: 8fae0074 */ lw $t6,0x74($sp)
/* f088ad4: 15e00007 */ bnez $t7,.L0f088af4
/* f088ad8: 91c5005c */ lbu $a1,0x5c($t6)
/* f088adc: 0fc21f44 */ jal weaponPlayPickupSound
/* f088ae0: 00a02025 */ or $a0,$a1,$zero
/* f088ae4: 8fb80074 */ lw $t8,0x74($sp)
/* f088ae8: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088aec: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f088af0: 9305005c */ lbu $a1,0x5c($t8)
.L0f088af4:
/* f088af4: 8fb9009c */ lw $t9,0x9c($sp)
/* f088af8: 24010056 */ addiu $at,$zero,0x56
/* f088afc: 8f290040 */ lw $t1,0x40($t9)
/* f088b00: 312a0400 */ andi $t2,$t1,0x400
/* f088b04: 11400020 */ beqz $t2,.L0f088b88
/* f088b08: 00000000 */ nop
/* f088b0c: 28a1002d */ slti $at,$a1,0x2d
/* f088b10: 50200007 */ beqzl $at,.L0f088b30
/* f088b14: 8fac00a4 */ lw $t4,0xa4($sp)
/* f088b18: 0fc4483c */ jal invGiveWeaponsByProp
/* f088b1c: 8fa400a0 */ lw $a0,0xa0($sp)
/* f088b20: 240b0001 */ addiu $t3,$zero,0x1
/* f088b24: afa20068 */ sw $v0,0x68($sp)
/* f088b28: afab0094 */ sw $t3,0x94($sp)
/* f088b2c: 8fac00a4 */ lw $t4,0xa4($sp)
.L0f088b30:
/* f088b30: 51800013 */ beqzl $t4,.L0f088b80
/* f088b34: 24180004 */ addiu $t8,$zero,0x4
/* f088b38: 0fc44bfb */ jal invGetPickupTextByObj
/* f088b3c: 8fa4009c */ lw $a0,0x9c($sp)
/* f088b40: 10400006 */ beqz $v0,.L0f088b5c
/* f088b44: 00402025 */ or $a0,$v0,$zero
/* f088b48: 00002825 */ or $a1,$zero,$zero
/* f088b4c: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088b50: 24060009 */ addiu $a2,$zero,0x9
/* f088b54: 10000008 */ b .L0f088b78
/* f088b58: 240f0001 */ addiu $t7,$zero,0x1
.L0f088b5c:
/* f088b5c: 8fa50068 */ lw $a1,0x68($sp)
/* f088b60: 8fad0074 */ lw $t5,0x74($sp)
/* f088b64: 38ae0002 */ xori $t6,$a1,0x2
/* f088b68: 2dc50001 */ sltiu $a1,$t6,0x1
/* f088b6c: 0fc221f2 */ jal currentPlayerQueuePickupWeaponHudmsg
/* f088b70: 91a4005c */ lbu $a0,0x5c($t5)
/* f088b74: 240f0001 */ addiu $t7,$zero,0x1
.L0f088b78:
/* f088b78: afaf0070 */ sw $t7,0x70($sp)
/* f088b7c: 24180004 */ addiu $t8,$zero,0x4
.L0f088b80:
/* f088b80: 10000033 */ b .L0f088c50
/* f088b84: afb80098 */ sw $t8,0x98($sp)
.L0f088b88:
/* f088b88: 14a10011 */ bne $a1,$at,.L0f088bd0
/* f088b8c: 24190001 */ addiu $t9,$zero,0x1
/* f088b90: 8d0604cc */ lw $a2,0x4cc($t0)
/* f088b94: 24090001 */ addiu $t1,$zero,0x1
/* f088b98: afb90068 */ sw $t9,0x68($sp)
/* f088b9c: 2cca0001 */ sltiu $t2,$a2,0x1
/* f088ba0: afa90094 */ sw $t1,0x94($sp)
/* f088ba4: 01403025 */ or $a2,$t2,$zero
/* f088ba8: 24040003 */ addiu $a0,$zero,0x3
/* f088bac: 24050001 */ addiu $a1,$zero,0x1
/* f088bb0: 0fc2200a */ jal ammoHandlePickup
/* f088bb4: 24070001 */ addiu $a3,$zero,0x1
/* f088bb8: 240b0001 */ addiu $t3,$zero,0x1
/* f088bbc: 240c0001 */ addiu $t4,$zero,0x1
/* f088bc0: afab0098 */ sw $t3,0x98($sp)
/* f088bc4: afa000a4 */ sw $zero,0xa4($sp)
/* f088bc8: 10000021 */ b .L0f088c50
/* f088bcc: afac0070 */ sw $t4,0x70($sp)
.L0f088bd0:
/* f088bd0: 0fc4483c */ jal invGiveWeaponsByProp
/* f088bd4: 8fa400a0 */ lw $a0,0xa0($sp)
/* f088bd8: 10400003 */ beqz $v0,.L0f088be8
/* f088bdc: afa20068 */ sw $v0,0x68($sp)
/* f088be0: 240d0001 */ addiu $t5,$zero,0x1
/* f088be4: afad0070 */ sw $t5,0x70($sp)
.L0f088be8:
/* f088be8: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088bec: 240e0001 */ addiu $t6,$zero,0x1
/* f088bf0: afae0094 */ sw $t6,0x94($sp)
/* f088bf4: 11e00014 */ beqz $t7,.L0f088c48
/* f088bf8: 8fb80074 */ lw $t8,0x74($sp)
/* f088bfc: 0fc44c0d */ jal invGetPickupTextByWeaponNum
/* f088c00: 9304005c */ lbu $a0,0x5c($t8)
/* f088c04: 10400008 */ beqz $v0,.L0f088c28
/* f088c08: 00402025 */ or $a0,$v0,$zero
/* f088c0c: 24190001 */ addiu $t9,$zero,0x1
/* f088c10: afb90070 */ sw $t9,0x70($sp)
/* f088c14: 00002825 */ or $a1,$zero,$zero
/* f088c18: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088c1c: 24060009 */ addiu $a2,$zero,0x9
/* f088c20: 1000000a */ b .L0f088c4c
/* f088c24: 240c0001 */ addiu $t4,$zero,0x1
.L0f088c28:
/* f088c28: 8fa90070 */ lw $t1,0x70($sp)
/* f088c2c: 8fa50068 */ lw $a1,0x68($sp)
/* f088c30: 8faa0074 */ lw $t2,0x74($sp)
/* f088c34: 11200004 */ beqz $t1,.L0f088c48
/* f088c38: 38ab0002 */ xori $t3,$a1,0x2
/* f088c3c: 9144005c */ lbu $a0,0x5c($t2)
/* f088c40: 0fc221f2 */ jal currentPlayerQueuePickupWeaponHudmsg
/* f088c44: 2d650001 */ sltiu $a1,$t3,0x1
.L0f088c48:
/* f088c48: 240c0001 */ addiu $t4,$zero,0x1
.L0f088c4c:
/* f088c4c: afac0098 */ sw $t4,0x98($sp)
.L0f088c50:
/* f088c50: 8fad0068 */ lw $t5,0x68($sp)
/* f088c54: 24010002 */ addiu $at,$zero,0x2
/* f088c58: 55a10010 */ bnel $t5,$at,.L0f088c9c
/* f088c5c: 8fb90074 */ lw $t9,0x74($sp)
/* f088c60: 0fc2866a */ jal bgunGetWeaponNum
/* f088c64: 00002025 */ or $a0,$zero,$zero
/* f088c68: 8fae0074 */ lw $t6,0x74($sp)
/* f088c6c: 91cf005c */ lbu $t7,0x5c($t6)
/* f088c70: 544f000a */ bnel $v0,$t7,.L0f088c9c
/* f088c74: 8fb90074 */ lw $t9,0x74($sp)
/* f088c78: 0fc2866a */ jal bgunGetWeaponNum
/* f088c7c: 24040001 */ addiu $a0,$zero,0x1
/* f088c80: 8fb80074 */ lw $t8,0x74($sp)
/* f088c84: 9305005c */ lbu $a1,0x5c($t8)
/* f088c88: 50450004 */ beql $v0,$a1,.L0f088c9c
/* f088c8c: 8fb90074 */ lw $t9,0x74($sp)
/* f088c90: 0fc28824 */ jal bgunEquipWeapon2
/* f088c94: 24040001 */ addiu $a0,$zero,0x1
/* f088c98: 8fb90074 */ lw $t9,0x74($sp)
.L0f088c9c:
/* f088c9c: 00002825 */ or $a1,$zero,$zero
/* f088ca0: 0fc2a685 */ jal bgunGetAmmoTypeForWeapon
/* f088ca4: 9324005c */ lbu $a0,0x5c($t9)
/* f088ca8: 1040001d */ beqz $v0,.L0f088d20
/* f088cac: afa2006c */ sw $v0,0x6c($sp)
/* f088cb0: 0fc22095 */ jal weaponGetPickupAmmoQty
/* f088cb4: 8fa40074 */ lw $a0,0x74($sp)
/* f088cb8: 18400019 */ blez $v0,.L0f088d20
/* f088cbc: afa20058 */ sw $v0,0x58($sp)
/* f088cc0: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088cc4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cc8: 8fa4006c */ lw $a0,0x6c($sp)
/* f088ccc: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088cd0: afa20054 */ sw $v0,0x54($sp)
/* f088cd4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cd8: 0fc2a63d */ jal bgunGetCapacityByAmmotype
/* f088cdc: afa2003c */ sw $v0,0x3c($sp)
/* f088ce0: 8fa6003c */ lw $a2,0x3c($sp)
/* f088ce4: 8fa50054 */ lw $a1,0x54($sp)
/* f088ce8: 8fa90058 */ lw $t1,0x58($sp)
/* f088cec: 00c2082a */ slt $at,$a2,$v0
/* f088cf0: 1020000b */ beqz $at,.L0f088d20
/* f088cf4: 00a92821 */ addu $a1,$a1,$t1
/* f088cf8: 0fc2a58a */ jal bgunSetAmmoQuantity
/* f088cfc: 8fa4006c */ lw $a0,0x6c($sp)
/* f088d00: 8faa0070 */ lw $t2,0x70($sp)
/* f088d04: 8fab00a4 */ lw $t3,0xa4($sp)
/* f088d08: 55400006 */ bnezl $t2,.L0f088d24
/* f088d0c: 8fac0074 */ lw $t4,0x74($sp)
/* f088d10: 11600003 */ beqz $t3,.L0f088d20
/* f088d14: 8fa4006c */ lw $a0,0x6c($sp)
/* f088d18: 0fc21fec */ jal currentPlayerQueuePickupAmmoHudmsg
/* f088d1c: 8fa50058 */ lw $a1,0x58($sp)
.L0f088d20:
/* f088d20: 8fac0074 */ lw $t4,0x74($sp)
.L0f088d24:
/* f088d24: 24010012 */ addiu $at,$zero,0x12
/* f088d28: 918d005c */ lbu $t5,0x5c($t4)
/* f088d2c: 55a1001b */ bnel $t5,$at,.L0f088d9c
/* f088d30: 8fb80074 */ lw $t8,0x74($sp)
/* f088d34: 0fc22095 */ jal weaponGetPickupAmmoQty
/* f088d38: 01802025 */ or $a0,$t4,$zero
/* f088d3c: afa20050 */ sw $v0,0x50($sp)
/* f088d40: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088d44: 2404000b */ addiu $a0,$zero,0xb
/* f088d48: 2404000b */ addiu $a0,$zero,0xb
/* f088d4c: 0fc2a63d */ jal bgunGetCapacityByAmmotype
/* f088d50: afa2003c */ sw $v0,0x3c($sp)
/* f088d54: 8fa6003c */ lw $a2,0x3c($sp)
/* f088d58: 00c2082a */ slt $at,$a2,$v0
/* f088d5c: 5020000f */ beqzl $at,.L0f088d9c
/* f088d60: 8fb80074 */ lw $t8,0x74($sp)
/* f088d64: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088d68: 2404000b */ addiu $a0,$zero,0xb
/* f088d6c: 2404000b */ addiu $a0,$zero,0xb
/* f088d70: 0fc2a58a */ jal bgunSetAmmoQuantity
/* f088d74: 24450005 */ addiu $a1,$v0,0x5
/* f088d78: 8fae0070 */ lw $t6,0x70($sp)
/* f088d7c: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088d80: 55c00006 */ bnezl $t6,.L0f088d9c
/* f088d84: 8fb80074 */ lw $t8,0x74($sp)
/* f088d88: 11e00003 */ beqz $t7,.L0f088d98
/* f088d8c: 2404000b */ addiu $a0,$zero,0xb
/* f088d90: 0fc21fec */ jal currentPlayerQueuePickupAmmoHudmsg
/* f088d94: 8fa50050 */ lw $a1,0x50($sp)
.L0f088d98:
/* f088d98: 8fb80074 */ lw $t8,0x74($sp)
.L0f088d9c:
/* f088d9c: 2401002e */ addiu $at,$zero,0x2e
/* f088da0: 3c09800a */ lui $t1,%hi(g_Vars+0x284)
/* f088da4: 9319005c */ lbu $t9,0x5c($t8)
/* f088da8: 17210007 */ bne $t9,$at,.L0f088dc8
/* f088dac: 00000000 */ nop
/* f088db0: 8d29a244 */ lw $t1,%lo(g_Vars+0x284)($t1)
/* f088db4: 8d2a0480 */ lw $t2,0x480($t1)
/* f088db8: 15400003 */ bnez $t2,.L0f088dc8
/* f088dbc: 00000000 */ nop
/* f088dc0: 0fc0458c */ jal playerInitEyespy
/* f088dc4: 00000000 */ nop
.L0f088dc8:
/* f088dc8: 10000076 */ b .L0f088fa4
/* f088dcc: 8fa20098 */ lw $v0,0x98($sp)
/* f088dd0: 0fc30884 */ jal playerSetShieldFrac
/* f088dd4: c4cc0060 */ lwc1 $f12,0x60($a2)
/* f088dd8: 3c0b800a */ lui $t3,%hi(g_Vars+0x4cc)
/* f088ddc: 8d6ba48c */ lw $t3,%lo(g_Vars+0x4cc)($t3)
/* f088de0: 3c048009 */ lui $a0,%hi(var80095200)
/* f088de4: 240501cd */ addiu $a1,$zero,0x1cd
/* f088de8: 1560000d */ bnez $t3,.L0f088e20
/* f088dec: 00003025 */ or $a2,$zero,$zero
/* f088df0: 3c01bf80 */ lui $at,0xbf80
/* f088df4: 44813000 */ mtc1 $at,$f6
/* f088df8: 240dffff */ addiu $t5,$zero,-1
/* f088dfc: 240cffff */ addiu $t4,$zero,-1
/* f088e00: 240effff */ addiu $t6,$zero,-1
/* f088e04: afae001c */ sw $t6,0x1c($sp)
/* f088e08: afac0018 */ sw $t4,0x18($sp)
/* f088e0c: afad0010 */ sw $t5,0x10($sp)
/* f088e10: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088e14: 2407ffff */ addiu $a3,$zero,-1
/* f088e18: 0c004241 */ jal sndStart
/* f088e1c: e7a60014 */ swc1 $f6,0x14($sp)
.L0f088e20:
/* f088e20: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088e24: 51e0003b */ beqzl $t7,.L0f088f14
/* f088e28: 240e0001 */ addiu $t6,$zero,0x1
/* f088e2c: 0fc44bfb */ jal invGetPickupTextByObj
/* f088e30: 8fa4009c */ lw $a0,0x9c($sp)
/* f088e34: 14400033 */ bnez $v0,.L0f088f04
/* f088e38: 00402025 */ or $a0,$v0,$zero
/* f088e3c: 3c18800a */ lui $t8,%hi(g_Vars+0x6c)
/* f088e40: 8f18a02c */ lw $t8,%lo(g_Vars+0x6c)($t8)
/* f088e44: 3c19800a */ lui $t9,%hi(g_Vars+0x68)
/* f088e48: 3c09800a */ lui $t1,%hi(g_Vars+0x64)
/* f088e4c: 13000003 */ beqz $t8,.L0f088e5c
/* f088e50: 3c0a800a */ lui $t2,%hi(g_Vars+0x70)
/* f088e54: 10000002 */ b .L0f088e60
/* f088e58: 24050001 */ addiu $a1,$zero,0x1
.L0f088e5c:
/* f088e5c: 00002825 */ or $a1,$zero,$zero
.L0f088e60:
/* f088e60: 8f39a028 */ lw $t9,%lo(g_Vars+0x68)($t9)
/* f088e64: 00001825 */ or $v1,$zero,$zero
/* f088e68: 00002025 */ or $a0,$zero,$zero
/* f088e6c: 13200003 */ beqz $t9,.L0f088e7c
/* f088e70: 00003025 */ or $a2,$zero,$zero
/* f088e74: 10000001 */ b .L0f088e7c
/* f088e78: 24030001 */ addiu $v1,$zero,0x1
.L0f088e7c:
/* f088e7c: 8d29a024 */ lw $t1,%lo(g_Vars+0x64)($t1)
/* f088e80: 11200003 */ beqz $t1,.L0f088e90
/* f088e84: 00000000 */ nop
/* f088e88: 10000001 */ b .L0f088e90
/* f088e8c: 24040001 */ addiu $a0,$zero,0x1
.L0f088e90:
/* f088e90: 8d4aa030 */ lw $t2,%lo(g_Vars+0x70)($t2)
/* f088e94: 11400003 */ beqz $t2,.L0f088ea4
/* f088e98: 00000000 */ nop
/* f088e9c: 10000001 */ b .L0f088ea4
/* f088ea0: 24060001 */ addiu $a2,$zero,0x1
.L0f088ea4:
/* f088ea4: 00c45821 */ addu $t3,$a2,$a0
/* f088ea8: 01636821 */ addu $t5,$t3,$v1
/* f088eac: 01a51021 */ addu $v0,$t5,$a1
/* f088eb0: 28410003 */ slti $at,$v0,0x3
/* f088eb4: 10200010 */ beqz $at,.L0f088ef8
/* f088eb8: 24010002 */ addiu $at,$zero,0x2
/* f088ebc: 1441000a */ bne $v0,$at,.L0f088ee8
/* f088ec0: 00000000 */ nop
/* f088ec4: 0fc54bcd */ jal optionsGetScreenSplit
/* f088ec8: 00000000 */ nop
/* f088ecc: 24010001 */ addiu $at,$zero,0x1
/* f088ed0: 10410009 */ beq $v0,$at,.L0f088ef8
/* f088ed4: 3c0c8009 */ lui $t4,%hi(g_Is4Mb)
/* f088ed8: 918c0af0 */ lbu $t4,%lo(g_Is4Mb)($t4)
/* f088edc: 24010001 */ addiu $at,$zero,0x1
/* f088ee0: 11810005 */ beq $t4,$at,.L0f088ef8
/* f088ee4: 00000000 */ nop
.L0f088ee8:
/* f088ee8: 0fc5b9f1 */ jal langGet
/* f088eec: 24045229 */ addiu $a0,$zero,0x5226
/* f088ef0: 10000004 */ b .L0f088f04
/* f088ef4: 00402025 */ or $a0,$v0,$zero
.L0f088ef8:
/* f088ef8: 0fc5b9f1 */ jal langGet
/* f088efc: 2404522a */ addiu $a0,$zero,0x5227
/* f088f00: 00402025 */ or $a0,$v0,$zero
.L0f088f04:
/* f088f04: 00002825 */ or $a1,$zero,$zero
/* f088f08: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088f0c: 24060001 */ addiu $a2,$zero,0x1
/* f088f10: 240e0001 */ addiu $t6,$zero,0x1
.L0f088f14:
/* f088f14: afae0098 */ sw $t6,0x98($sp)
/* f088f18: 10000022 */ b .L0f088fa4
/* f088f1c: 24020001 */ addiu $v0,$zero,0x1
.L0f088f20:
/* f088f20: 8d0f04cc */ lw $t7,0x4cc($t0)
/* f088f24: 3c048009 */ lui $a0,%hi(var80095200)
/* f088f28: 240500e5 */ addiu $a1,$zero,0xe5
/* f088f2c: 15e0000d */ bnez $t7,.L0f088f64
/* f088f30: 00003025 */ or $a2,$zero,$zero
/* f088f34: 3c01bf80 */ lui $at,0xbf80
/* f088f38: 44814000 */ mtc1 $at,$f8
/* f088f3c: 2418ffff */ addiu $t8,$zero,-1
/* f088f40: 2419ffff */ addiu $t9,$zero,-1
/* f088f44: 2409ffff */ addiu $t1,$zero,-1
/* f088f48: afa9001c */ sw $t1,0x1c($sp)
/* f088f4c: afb90018 */ sw $t9,0x18($sp)
/* f088f50: afb80010 */ sw $t8,0x10($sp)
/* f088f54: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088f58: 2407ffff */ addiu $a3,$zero,-1
/* f088f5c: 0c004241 */ jal sndStart
/* f088f60: e7a80014 */ swc1 $f8,0x14($sp)
.L0f088f64:
/* f088f64: 8faa00a4 */ lw $t2,0xa4($sp)
/* f088f68: 5140000c */ beqzl $t2,.L0f088f9c
/* f088f6c: 240b0004 */ addiu $t3,$zero,0x4
/* f088f70: 0fc44bfb */ jal invGetPickupTextByObj
/* f088f74: 8fa4009c */ lw $a0,0x9c($sp)
/* f088f78: 14400004 */ bnez $v0,.L0f088f8c
/* f088f7c: 00402025 */ or $a0,$v0,$zero
/* f088f80: 0fc5b9f1 */ jal langGet
/* f088f84: 2404522b */ addiu $a0,$zero,0x5228
/* f088f88: 00402025 */ or $a0,$v0,$zero
.L0f088f8c:
/* f088f8c: 00002825 */ or $a1,$zero,$zero
/* f088f90: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088f94: 24060009 */ addiu $a2,$zero,0x9
/* f088f98: 240b0004 */ addiu $t3,$zero,0x4
.L0f088f9c:
/* f088f9c: afab0098 */ sw $t3,0x98($sp)
/* f088fa0: 24020004 */ addiu $v0,$zero,0x4
.L0f088fa4:
/* f088fa4: 24010001 */ addiu $at,$zero,0x1
/* f088fa8: 1441000d */ bne $v0,$at,.L0f088fe0
/* f088fac: 8fad009c */ lw $t5,0x9c($sp)
/* f088fb0: 8dac0040 */ lw $t4,0x40($t5)
/* f088fb4: 318e0010 */ andi $t6,$t4,0x10
/* f088fb8: 15c00009 */ bnez $t6,.L0f088fe0
/* f088fbc: 00000000 */ nop
/* f088fc0: 91a60002 */ lbu $a2,0x2($t5)
/* f088fc4: 01a02025 */ or $a0,$t5,$zero
/* f088fc8: 00002825 */ or $a1,$zero,$zero
/* f088fcc: 30cf0004 */ andi $t7,$a2,0x4
/* f088fd0: 0fc1ab4b */ jal objFree
/* f088fd4: 01e03025 */ or $a2,$t7,$zero
/* f088fd8: 1000000a */ b .L0f089004
/* f088fdc: 24020001 */ addiu $v0,$zero,0x1
.L0f088fe0:
/* f088fe0: 10400007 */ beqz $v0,.L0f089000
/* f088fe4: 8fb80094 */ lw $t8,0x94($sp)
/* f088fe8: 17000003 */ bnez $t8,.L0f088ff8
/* f088fec: 00000000 */ nop
/* f088ff0: 0fc447f3 */ jal invGiveProp
/* f088ff4: 8fa400a0 */ lw $a0,0xa0($sp)
.L0f088ff8:
/* f088ff8: 10000002 */ b .L0f089004
/* f088ffc: 24020004 */ addiu $v0,$zero,0x4
.L0f089000:
/* f089000: 00001025 */ or $v0,$zero,$zero
.L0f089004:
/* f089004: 8fbf0024 */ lw $ra,0x24($sp)
/* f089008: 27bd00a0 */ addiu $sp,$sp,0xa0
/* f08900c: 03e00008 */ jr $ra
/* f089010: 00000000 */ nop
);
#elif VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel propPickupByPlayer
.late_rodata
glabel jtbl_var7f1aadc0
.word .L0f088f20
.word .L0f0888b4
.word .L0f088f20
.word .L0f088f20
.word .L0f088934
.word .L0f088a34
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088974
.word .L0f088dd0
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.word .L0f088f20
.text
/* f088840: 27bdff60 */ addiu $sp,$sp,-160
/* f088844: afbf0024 */ sw $ra,0x24($sp)
/* f088848: afa400a0 */ sw $a0,0xa0($sp)
/* f08884c: afa500a4 */ sw $a1,0xa4($sp)
/* f088850: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088854: 8c860004 */ lw $a2,0x4($a0)
/* f088858: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f08885c: 8d020284 */ lw $v0,0x284($t0)
/* f088860: afa00094 */ sw $zero,0x94($sp)
/* f088864: afa6009c */ sw $a2,0x9c($sp)
/* f088868: 8c4f00d8 */ lw $t7,0xd8($v0)
/* f08886c: 15e00005 */ bnez $t7,.L0f088884
/* f088870: 00000000 */ nop
/* f088874: 8d180034 */ lw $t8,0x34($t0)
/* f088878: 8fb9009c */ lw $t9,0x9c($sp)
/* f08887c: 57000004 */ bnezl $t8,.L0f088890
/* f088880: 93290003 */ lbu $t1,0x3($t9)
.L0f088884:
/* f088884: 100001df */ b .L0f089004
/* f088888: 00001025 */ or $v0,$zero,$zero
/* f08888c: 93290003 */ lbu $t1,0x3($t9)
.L0f088890:
/* f088890: 252afffd */ addiu $t2,$t1,-3
/* f088894: 2d41002d */ sltiu $at,$t2,0x2d
/* f088898: 102001a1 */ beqz $at,.L0f088f20
/* f08889c: 000a5080 */ sll $t2,$t2,0x2
/* f0888a0: 3c017f1b */ lui $at,%hi(jtbl_var7f1aadc0)
/* f0888a4: 002a0821 */ addu $at,$at,$t2
/* f0888a8: 8c2aadc0 */ lw $t2,%lo(jtbl_var7f1aadc0)($at)
/* f0888ac: 01400008 */ jr $t2
/* f0888b0: 00000000 */ nop
.L0f0888b4:
/* f0888b4: 8d0b04cc */ lw $t3,0x4cc($t0)
/* f0888b8: 3c048009 */ lui $a0,%hi(var80095200)
/* f0888bc: 240500e5 */ addiu $a1,$zero,0xe5
/* f0888c0: 1560000d */ bnez $t3,.L0f0888f8
/* f0888c4: 00003025 */ or $a2,$zero,$zero
/* f0888c8: 3c01bf80 */ lui $at,0xbf80
/* f0888cc: 44812000 */ mtc1 $at,$f4
/* f0888d0: 240cffff */ addiu $t4,$zero,-1
/* f0888d4: 240dffff */ addiu $t5,$zero,-1
/* f0888d8: 240effff */ addiu $t6,$zero,-1
/* f0888dc: afae001c */ sw $t6,0x1c($sp)
/* f0888e0: afad0018 */ sw $t5,0x18($sp)
/* f0888e4: afac0010 */ sw $t4,0x10($sp)
/* f0888e8: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f0888ec: 2407ffff */ addiu $a3,$zero,-1
/* f0888f0: 0c004241 */ jal sndStart
/* f0888f4: e7a40014 */ swc1 $f4,0x14($sp)
.L0f0888f8:
/* f0888f8: 8faf00a4 */ lw $t7,0xa4($sp)
/* f0888fc: 11e0000b */ beqz $t7,.L0f08892c
/* f088900: 00000000 */ nop
/* f088904: 0fc44bfb */ jal invGetPickupTextByObj
/* f088908: 8fa4009c */ lw $a0,0x9c($sp)
/* f08890c: 14400004 */ bnez $v0,.L0f088920
/* f088910: 00402025 */ or $a0,$v0,$zero
/* f088914: 0fc5b9f1 */ jal langGet
/* f088918: 24045228 */ addiu $a0,$zero,0x5228
/* f08891c: 00402025 */ or $a0,$v0,$zero
.L0f088920:
/* f088920: 00002825 */ or $a1,$zero,$zero
/* f088924: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088928: 24060009 */ addiu $a2,$zero,0x9
.L0f08892c:
/* f08892c: 1000019d */ b .L0f088fa4
/* f088930: 24020004 */ addiu $v0,$zero,0x4
.L0f088934:
/* f088934: 00c02025 */ or $a0,$a2,$zero
/* f088938: 0fc22067 */ jal ammocrateGetPickupAmmoQty
/* f08893c: afa6008c */ sw $a2,0x8c($sp)
/* f088940: 3c06800a */ lui $a2,%hi(g_Vars+0x4cc)
/* f088944: 8cc6a48c */ lw $a2,%lo(g_Vars+0x4cc)($a2)
/* f088948: 8fb9008c */ lw $t9,0x8c($sp)
/* f08894c: 00402825 */ or $a1,$v0,$zero
/* f088950: 2cd80001 */ sltiu $t8,$a2,0x1
/* f088954: 03003025 */ or $a2,$t8,$zero
/* f088958: 8fa700a4 */ lw $a3,0xa4($sp)
/* f08895c: 0fc2200a */ jal ammoHandlePickup
/* f088960: 8f24005c */ lw $a0,0x5c($t9)
/* f088964: 24090001 */ addiu $t1,$zero,0x1
/* f088968: afa90098 */ sw $t1,0x98($sp)
/* f08896c: 1000018d */ b .L0f088fa4
/* f088970: 24020001 */ addiu $v0,$zero,0x1
.L0f088974:
/* f088974: 00001025 */ or $v0,$zero,$zero
/* f088978: 00c01825 */ or $v1,$a2,$zero
.L0f08897c:
/* f08897c: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088980: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f088984: 8d0a0318 */ lw $t2,0x318($t0)
/* f088988: 9465005e */ lhu $a1,0x5e($v1)
/* f08898c: 24440001 */ addiu $a0,$v0,0x1
/* f088990: 15400009 */ bnez $t2,.L0f0889b8
/* f088994: 00003025 */ or $a2,$zero,$zero
/* f088998: 44853000 */ mtc1 $a1,$f6
/* f08899c: 3c018007 */ lui $at,%hi(g_AmmoQuantityScale)
/* f0889a0: c42a995c */ lwc1 $f10,%lo(g_AmmoQuantityScale)($at)
/* f0889a4: 46803220 */ cvt.s.w $f8,$f6
/* f0889a8: 460a4402 */ mul.s $f16,$f8,$f10
/* f0889ac: 4600848d */ trunc.w.s $f18,$f16
/* f0889b0: 44059000 */ mfc1 $a1,$f18
/* f0889b4: 00000000 */ nop
.L0f0889b8:
/* f0889b8: 8fa700a4 */ lw $a3,0xa4($sp)
/* f0889bc: afa30028 */ sw $v1,0x28($sp)
/* f0889c0: 0fc2200a */ jal ammoHandlePickup
/* f0889c4: afa4002c */ sw $a0,0x2c($sp)
/* f0889c8: 8fa2002c */ lw $v0,0x2c($sp)
/* f0889cc: 8fa30028 */ lw $v1,0x28($sp)
/* f0889d0: 24010013 */ addiu $at,$zero,0x13
/* f0889d4: 1441ffe9 */ bne $v0,$at,.L0f08897c
/* f0889d8: 24630004 */ addiu $v1,$v1,0x4
/* f0889dc: 3c0c800a */ lui $t4,%hi(g_Vars+0x4cc)
/* f0889e0: 8d8ca48c */ lw $t4,%lo(g_Vars+0x4cc)($t4)
/* f0889e4: 3c048009 */ lui $a0,%hi(var80095200)
/* f0889e8: 240500ea */ addiu $a1,$zero,0xea
/* f0889ec: 1580000d */ bnez $t4,.L0f088a24
/* f0889f0: 00003025 */ or $a2,$zero,$zero
/* f0889f4: 3c01bf80 */ lui $at,0xbf80
/* f0889f8: 44812000 */ mtc1 $at,$f4
/* f0889fc: 240dffff */ addiu $t5,$zero,-1
/* f088a00: 240effff */ addiu $t6,$zero,-1
/* f088a04: 240fffff */ addiu $t7,$zero,-1
/* f088a08: afaf001c */ sw $t7,0x1c($sp)
/* f088a0c: afae0018 */ sw $t6,0x18($sp)
/* f088a10: afad0010 */ sw $t5,0x10($sp)
/* f088a14: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088a18: 2407ffff */ addiu $a3,$zero,-1
/* f088a1c: 0c004241 */ jal sndStart
/* f088a20: e7a40014 */ swc1 $f4,0x14($sp)
.L0f088a24:
/* f088a24: 24180001 */ addiu $t8,$zero,0x1
/* f088a28: afb80098 */ sw $t8,0x98($sp)
/* f088a2c: 1000015d */ b .L0f088fa4
/* f088a30: 24020001 */ addiu $v0,$zero,0x1
.L0f088a34:
/* f088a34: 8d190318 */ lw $t9,0x318($t0)
/* f088a38: afa60074 */ sw $a2,0x74($sp)
/* f088a3c: afa00070 */ sw $zero,0x70($sp)
/* f088a40: 13200022 */ beqz $t9,.L0f088acc
/* f088a44: afa00068 */ sw $zero,0x68($sp)
/* f088a48: 90c5005c */ lbu $a1,0x5c($a2)
/* f088a4c: 24010057 */ addiu $at,$zero,0x57
/* f088a50: 54a1000f */ bnel $a1,$at,.L0f088a90
/* f088a54: 24010036 */ addiu $at,$zero,0x36
/* f088a58: 8c4a00bc */ lw $t2,0xbc($v0)
/* f088a5c: 8fa500a0 */ lw $a1,0xa0($sp)
/* f088a60: 0fc61a26 */ jal scenarioPickUpBriefcase
/* f088a64: 8d440004 */ lw $a0,0x4($t2)
/* f088a68: 10400006 */ beqz $v0,.L0f088a84
/* f088a6c: 00401825 */ or $v1,$v0,$zero
/* f088a70: 8fab0074 */ lw $t3,0x74($sp)
/* f088a74: 9164005c */ lbu $a0,0x5c($t3)
/* f088a78: 0fc21f44 */ jal weaponPlayPickupSound
/* f088a7c: afa20064 */ sw $v0,0x64($sp)
/* f088a80: 8fa30064 */ lw $v1,0x64($sp)
.L0f088a84:
/* f088a84: 1000015f */ b .L0f089004
/* f088a88: 00601025 */ or $v0,$v1,$zero
/* f088a8c: 24010036 */ addiu $at,$zero,0x36
.L0f088a90:
/* f088a90: 54a1000f */ bnel $a1,$at,.L0f088ad0
/* f088a94: 8d0f04cc */ lw $t7,0x4cc($t0)
/* f088a98: 8c4c00bc */ lw $t4,0xbc($v0)
/* f088a9c: 8fa500a0 */ lw $a1,0xa0($sp)
/* f088aa0: 0fc61d04 */ jal scenarioPickUpUplink
/* f088aa4: 8d840004 */ lw $a0,0x4($t4)
/* f088aa8: 10400006 */ beqz $v0,.L0f088ac4
/* f088aac: 00401825 */ or $v1,$v0,$zero
/* f088ab0: 8fad0074 */ lw $t5,0x74($sp)
/* f088ab4: 91a4005c */ lbu $a0,0x5c($t5)
/* f088ab8: 0fc21f44 */ jal weaponPlayPickupSound
/* f088abc: afa20064 */ sw $v0,0x64($sp)
/* f088ac0: 8fa30064 */ lw $v1,0x64($sp)
.L0f088ac4:
/* f088ac4: 1000014f */ b .L0f089004
/* f088ac8: 00601025 */ or $v0,$v1,$zero
.L0f088acc:
/* f088acc: 8d0f04cc */ lw $t7,0x4cc($t0)
.L0f088ad0:
/* f088ad0: 8fae0074 */ lw $t6,0x74($sp)
/* f088ad4: 15e00007 */ bnez $t7,.L0f088af4
/* f088ad8: 91c5005c */ lbu $a1,0x5c($t6)
/* f088adc: 0fc21f44 */ jal weaponPlayPickupSound
/* f088ae0: 00a02025 */ or $a0,$a1,$zero
/* f088ae4: 8fb80074 */ lw $t8,0x74($sp)
/* f088ae8: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088aec: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f088af0: 9305005c */ lbu $a1,0x5c($t8)
.L0f088af4:
/* f088af4: 8fb9009c */ lw $t9,0x9c($sp)
/* f088af8: 24010056 */ addiu $at,$zero,0x56
/* f088afc: 8f290040 */ lw $t1,0x40($t9)
/* f088b00: 312a0400 */ andi $t2,$t1,0x400
/* f088b04: 11400020 */ beqz $t2,.L0f088b88
/* f088b08: 00000000 */ nop
/* f088b0c: 28a1002d */ slti $at,$a1,0x2d
/* f088b10: 50200007 */ beqzl $at,.L0f088b30
/* f088b14: 8fac00a4 */ lw $t4,0xa4($sp)
/* f088b18: 0fc4483c */ jal invGiveWeaponsByProp
/* f088b1c: 8fa400a0 */ lw $a0,0xa0($sp)
/* f088b20: 240b0001 */ addiu $t3,$zero,0x1
/* f088b24: afa20068 */ sw $v0,0x68($sp)
/* f088b28: afab0094 */ sw $t3,0x94($sp)
/* f088b2c: 8fac00a4 */ lw $t4,0xa4($sp)
.L0f088b30:
/* f088b30: 51800013 */ beqzl $t4,.L0f088b80
/* f088b34: 24180004 */ addiu $t8,$zero,0x4
/* f088b38: 0fc44bfb */ jal invGetPickupTextByObj
/* f088b3c: 8fa4009c */ lw $a0,0x9c($sp)
/* f088b40: 10400006 */ beqz $v0,.L0f088b5c
/* f088b44: 00402025 */ or $a0,$v0,$zero
/* f088b48: 00002825 */ or $a1,$zero,$zero
/* f088b4c: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088b50: 24060009 */ addiu $a2,$zero,0x9
/* f088b54: 10000008 */ b .L0f088b78
/* f088b58: 240f0001 */ addiu $t7,$zero,0x1
.L0f088b5c:
/* f088b5c: 8fa50068 */ lw $a1,0x68($sp)
/* f088b60: 8fad0074 */ lw $t5,0x74($sp)
/* f088b64: 38ae0002 */ xori $t6,$a1,0x2
/* f088b68: 2dc50001 */ sltiu $a1,$t6,0x1
/* f088b6c: 0fc221f2 */ jal currentPlayerQueuePickupWeaponHudmsg
/* f088b70: 91a4005c */ lbu $a0,0x5c($t5)
/* f088b74: 240f0001 */ addiu $t7,$zero,0x1
.L0f088b78:
/* f088b78: afaf0070 */ sw $t7,0x70($sp)
/* f088b7c: 24180004 */ addiu $t8,$zero,0x4
.L0f088b80:
/* f088b80: 10000033 */ b .L0f088c50
/* f088b84: afb80098 */ sw $t8,0x98($sp)
.L0f088b88:
/* f088b88: 14a10011 */ bne $a1,$at,.L0f088bd0
/* f088b8c: 24190001 */ addiu $t9,$zero,0x1
/* f088b90: 8d0604cc */ lw $a2,0x4cc($t0)
/* f088b94: 24090001 */ addiu $t1,$zero,0x1
/* f088b98: afb90068 */ sw $t9,0x68($sp)
/* f088b9c: 2cca0001 */ sltiu $t2,$a2,0x1
/* f088ba0: afa90094 */ sw $t1,0x94($sp)
/* f088ba4: 01403025 */ or $a2,$t2,$zero
/* f088ba8: 24040003 */ addiu $a0,$zero,0x3
/* f088bac: 24050001 */ addiu $a1,$zero,0x1
/* f088bb0: 0fc2200a */ jal ammoHandlePickup
/* f088bb4: 24070001 */ addiu $a3,$zero,0x1
/* f088bb8: 240b0001 */ addiu $t3,$zero,0x1
/* f088bbc: 240c0001 */ addiu $t4,$zero,0x1
/* f088bc0: afab0098 */ sw $t3,0x98($sp)
/* f088bc4: afa000a4 */ sw $zero,0xa4($sp)
/* f088bc8: 10000021 */ b .L0f088c50
/* f088bcc: afac0070 */ sw $t4,0x70($sp)
.L0f088bd0:
/* f088bd0: 0fc4483c */ jal invGiveWeaponsByProp
/* f088bd4: 8fa400a0 */ lw $a0,0xa0($sp)
/* f088bd8: 10400003 */ beqz $v0,.L0f088be8
/* f088bdc: afa20068 */ sw $v0,0x68($sp)
/* f088be0: 240d0001 */ addiu $t5,$zero,0x1
/* f088be4: afad0070 */ sw $t5,0x70($sp)
.L0f088be8:
/* f088be8: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088bec: 240e0001 */ addiu $t6,$zero,0x1
/* f088bf0: afae0094 */ sw $t6,0x94($sp)
/* f088bf4: 11e00014 */ beqz $t7,.L0f088c48
/* f088bf8: 8fb80074 */ lw $t8,0x74($sp)
/* f088bfc: 0fc44c0d */ jal invGetPickupTextByWeaponNum
/* f088c00: 9304005c */ lbu $a0,0x5c($t8)
/* f088c04: 10400008 */ beqz $v0,.L0f088c28
/* f088c08: 00402025 */ or $a0,$v0,$zero
/* f088c0c: 24190001 */ addiu $t9,$zero,0x1
/* f088c10: afb90070 */ sw $t9,0x70($sp)
/* f088c14: 00002825 */ or $a1,$zero,$zero
/* f088c18: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088c1c: 24060009 */ addiu $a2,$zero,0x9
/* f088c20: 1000000a */ b .L0f088c4c
/* f088c24: 240c0001 */ addiu $t4,$zero,0x1
.L0f088c28:
/* f088c28: 8fa90070 */ lw $t1,0x70($sp)
/* f088c2c: 8fa50068 */ lw $a1,0x68($sp)
/* f088c30: 8faa0074 */ lw $t2,0x74($sp)
/* f088c34: 11200004 */ beqz $t1,.L0f088c48
/* f088c38: 38ab0002 */ xori $t3,$a1,0x2
/* f088c3c: 9144005c */ lbu $a0,0x5c($t2)
/* f088c40: 0fc221f2 */ jal currentPlayerQueuePickupWeaponHudmsg
/* f088c44: 2d650001 */ sltiu $a1,$t3,0x1
.L0f088c48:
/* f088c48: 240c0001 */ addiu $t4,$zero,0x1
.L0f088c4c:
/* f088c4c: afac0098 */ sw $t4,0x98($sp)
.L0f088c50:
/* f088c50: 8fad0068 */ lw $t5,0x68($sp)
/* f088c54: 24010002 */ addiu $at,$zero,0x2
/* f088c58: 55a10010 */ bnel $t5,$at,.L0f088c9c
/* f088c5c: 8fb90074 */ lw $t9,0x74($sp)
/* f088c60: 0fc2866a */ jal bgunGetWeaponNum
/* f088c64: 00002025 */ or $a0,$zero,$zero
/* f088c68: 8fae0074 */ lw $t6,0x74($sp)
/* f088c6c: 91cf005c */ lbu $t7,0x5c($t6)
/* f088c70: 544f000a */ bnel $v0,$t7,.L0f088c9c
/* f088c74: 8fb90074 */ lw $t9,0x74($sp)
/* f088c78: 0fc2866a */ jal bgunGetWeaponNum
/* f088c7c: 24040001 */ addiu $a0,$zero,0x1
/* f088c80: 8fb80074 */ lw $t8,0x74($sp)
/* f088c84: 9305005c */ lbu $a1,0x5c($t8)
/* f088c88: 50450004 */ beql $v0,$a1,.L0f088c9c
/* f088c8c: 8fb90074 */ lw $t9,0x74($sp)
/* f088c90: 0fc28824 */ jal bgunEquipWeapon2
/* f088c94: 24040001 */ addiu $a0,$zero,0x1
/* f088c98: 8fb90074 */ lw $t9,0x74($sp)
.L0f088c9c:
/* f088c9c: 00002825 */ or $a1,$zero,$zero
/* f088ca0: 0fc2a685 */ jal bgunGetAmmoTypeForWeapon
/* f088ca4: 9324005c */ lbu $a0,0x5c($t9)
/* f088ca8: 1040001d */ beqz $v0,.L0f088d20
/* f088cac: afa2006c */ sw $v0,0x6c($sp)
/* f088cb0: 0fc22095 */ jal weaponGetPickupAmmoQty
/* f088cb4: 8fa40074 */ lw $a0,0x74($sp)
/* f088cb8: 18400019 */ blez $v0,.L0f088d20
/* f088cbc: afa20058 */ sw $v0,0x58($sp)
/* f088cc0: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088cc4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cc8: 8fa4006c */ lw $a0,0x6c($sp)
/* f088ccc: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088cd0: afa20054 */ sw $v0,0x54($sp)
/* f088cd4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cd8: 0fc2a63d */ jal bgunGetCapacityByAmmotype
/* f088cdc: afa2003c */ sw $v0,0x3c($sp)
/* f088ce0: 8fa6003c */ lw $a2,0x3c($sp)
/* f088ce4: 8fa50054 */ lw $a1,0x54($sp)
/* f088ce8: 8fa90058 */ lw $t1,0x58($sp)
/* f088cec: 00c2082a */ slt $at,$a2,$v0
/* f088cf0: 1020000b */ beqz $at,.L0f088d20
/* f088cf4: 00a92821 */ addu $a1,$a1,$t1
/* f088cf8: 0fc2a58a */ jal bgunSetAmmoQuantity
/* f088cfc: 8fa4006c */ lw $a0,0x6c($sp)
/* f088d00: 8faa0070 */ lw $t2,0x70($sp)
/* f088d04: 8fab00a4 */ lw $t3,0xa4($sp)
/* f088d08: 55400006 */ bnezl $t2,.L0f088d24
/* f088d0c: 8fac0074 */ lw $t4,0x74($sp)
/* f088d10: 11600003 */ beqz $t3,.L0f088d20
/* f088d14: 8fa4006c */ lw $a0,0x6c($sp)
/* f088d18: 0fc21fec */ jal currentPlayerQueuePickupAmmoHudmsg
/* f088d1c: 8fa50058 */ lw $a1,0x58($sp)
.L0f088d20:
/* f088d20: 8fac0074 */ lw $t4,0x74($sp)
.L0f088d24:
/* f088d24: 24010012 */ addiu $at,$zero,0x12
/* f088d28: 918d005c */ lbu $t5,0x5c($t4)
/* f088d2c: 55a1001b */ bnel $t5,$at,.L0f088d9c
/* f088d30: 8fb80074 */ lw $t8,0x74($sp)
/* f088d34: 0fc22095 */ jal weaponGetPickupAmmoQty
/* f088d38: 01802025 */ or $a0,$t4,$zero
/* f088d3c: afa20050 */ sw $v0,0x50($sp)
/* f088d40: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088d44: 2404000b */ addiu $a0,$zero,0xb
/* f088d48: 2404000b */ addiu $a0,$zero,0xb
/* f088d4c: 0fc2a63d */ jal bgunGetCapacityByAmmotype
/* f088d50: afa2003c */ sw $v0,0x3c($sp)
/* f088d54: 8fa6003c */ lw $a2,0x3c($sp)
/* f088d58: 00c2082a */ slt $at,$a2,$v0
/* f088d5c: 5020000f */ beqzl $at,.L0f088d9c
/* f088d60: 8fb80074 */ lw $t8,0x74($sp)
/* f088d64: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088d68: 2404000b */ addiu $a0,$zero,0xb
/* f088d6c: 2404000b */ addiu $a0,$zero,0xb
/* f088d70: 0fc2a58a */ jal bgunSetAmmoQuantity
/* f088d74: 24450005 */ addiu $a1,$v0,0x5
/* f088d78: 8fae0070 */ lw $t6,0x70($sp)
/* f088d7c: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088d80: 55c00006 */ bnezl $t6,.L0f088d9c
/* f088d84: 8fb80074 */ lw $t8,0x74($sp)
/* f088d88: 11e00003 */ beqz $t7,.L0f088d98
/* f088d8c: 2404000b */ addiu $a0,$zero,0xb
/* f088d90: 0fc21fec */ jal currentPlayerQueuePickupAmmoHudmsg
/* f088d94: 8fa50050 */ lw $a1,0x50($sp)
.L0f088d98:
/* f088d98: 8fb80074 */ lw $t8,0x74($sp)
.L0f088d9c:
/* f088d9c: 2401002e */ addiu $at,$zero,0x2e
/* f088da0: 3c09800a */ lui $t1,%hi(g_Vars+0x284)
/* f088da4: 9319005c */ lbu $t9,0x5c($t8)
/* f088da8: 17210007 */ bne $t9,$at,.L0f088dc8
/* f088dac: 00000000 */ nop
/* f088db0: 8d29a244 */ lw $t1,%lo(g_Vars+0x284)($t1)
/* f088db4: 8d2a0480 */ lw $t2,0x480($t1)
/* f088db8: 15400003 */ bnez $t2,.L0f088dc8
/* f088dbc: 00000000 */ nop
/* f088dc0: 0fc0458c */ jal playerInitEyespy
/* f088dc4: 00000000 */ nop
.L0f088dc8:
/* f088dc8: 10000076 */ b .L0f088fa4
/* f088dcc: 8fa20098 */ lw $v0,0x98($sp)
.L0f088dd0:
/* f088dd0: 0fc30884 */ jal playerSetShieldFrac
/* f088dd4: c4cc0060 */ lwc1 $f12,0x60($a2)
/* f088dd8: 3c0b800a */ lui $t3,%hi(g_Vars+0x4cc)
/* f088ddc: 8d6ba48c */ lw $t3,%lo(g_Vars+0x4cc)($t3)
/* f088de0: 3c048009 */ lui $a0,%hi(var80095200)
/* f088de4: 240501cd */ addiu $a1,$zero,0x1cd
/* f088de8: 1560000d */ bnez $t3,.L0f088e20
/* f088dec: 00003025 */ or $a2,$zero,$zero
/* f088df0: 3c01bf80 */ lui $at,0xbf80
/* f088df4: 44813000 */ mtc1 $at,$f6
/* f088df8: 240dffff */ addiu $t5,$zero,-1
/* f088dfc: 240cffff */ addiu $t4,$zero,-1
/* f088e00: 240effff */ addiu $t6,$zero,-1
/* f088e04: afae001c */ sw $t6,0x1c($sp)
/* f088e08: afac0018 */ sw $t4,0x18($sp)
/* f088e0c: afad0010 */ sw $t5,0x10($sp)
/* f088e10: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088e14: 2407ffff */ addiu $a3,$zero,-1
/* f088e18: 0c004241 */ jal sndStart
/* f088e1c: e7a60014 */ swc1 $f6,0x14($sp)
.L0f088e20:
/* f088e20: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088e24: 51e0003b */ beqzl $t7,.L0f088f14
/* f088e28: 240e0001 */ addiu $t6,$zero,0x1
/* f088e2c: 0fc44bfb */ jal invGetPickupTextByObj
/* f088e30: 8fa4009c */ lw $a0,0x9c($sp)
/* f088e34: 14400033 */ bnez $v0,.L0f088f04
/* f088e38: 00402025 */ or $a0,$v0,$zero
/* f088e3c: 3c18800a */ lui $t8,%hi(g_Vars+0x6c)
/* f088e40: 8f18a02c */ lw $t8,%lo(g_Vars+0x6c)($t8)
/* f088e44: 3c19800a */ lui $t9,%hi(g_Vars+0x68)
/* f088e48: 3c09800a */ lui $t1,%hi(g_Vars+0x64)
/* f088e4c: 13000003 */ beqz $t8,.L0f088e5c
/* f088e50: 3c0a800a */ lui $t2,%hi(g_Vars+0x70)
/* f088e54: 10000002 */ b .L0f088e60
/* f088e58: 24050001 */ addiu $a1,$zero,0x1
.L0f088e5c:
/* f088e5c: 00002825 */ or $a1,$zero,$zero
.L0f088e60:
/* f088e60: 8f39a028 */ lw $t9,%lo(g_Vars+0x68)($t9)
/* f088e64: 00001825 */ or $v1,$zero,$zero
/* f088e68: 00002025 */ or $a0,$zero,$zero
/* f088e6c: 13200003 */ beqz $t9,.L0f088e7c
/* f088e70: 00003025 */ or $a2,$zero,$zero
/* f088e74: 10000001 */ b .L0f088e7c
/* f088e78: 24030001 */ addiu $v1,$zero,0x1
.L0f088e7c:
/* f088e7c: 8d29a024 */ lw $t1,%lo(g_Vars+0x64)($t1)
/* f088e80: 11200003 */ beqz $t1,.L0f088e90
/* f088e84: 00000000 */ nop
/* f088e88: 10000001 */ b .L0f088e90
/* f088e8c: 24040001 */ addiu $a0,$zero,0x1
.L0f088e90:
/* f088e90: 8d4aa030 */ lw $t2,%lo(g_Vars+0x70)($t2)
/* f088e94: 11400003 */ beqz $t2,.L0f088ea4
/* f088e98: 00000000 */ nop
/* f088e9c: 10000001 */ b .L0f088ea4
/* f088ea0: 24060001 */ addiu $a2,$zero,0x1
.L0f088ea4:
/* f088ea4: 00c45821 */ addu $t3,$a2,$a0
/* f088ea8: 01636821 */ addu $t5,$t3,$v1
/* f088eac: 01a51021 */ addu $v0,$t5,$a1
/* f088eb0: 28410003 */ slti $at,$v0,0x3
/* f088eb4: 10200010 */ beqz $at,.L0f088ef8
/* f088eb8: 24010002 */ addiu $at,$zero,0x2
/* f088ebc: 1441000a */ bne $v0,$at,.L0f088ee8
/* f088ec0: 00000000 */ nop
/* f088ec4: 0fc54bcd */ jal optionsGetScreenSplit
/* f088ec8: 00000000 */ nop
/* f088ecc: 24010001 */ addiu $at,$zero,0x1
/* f088ed0: 10410009 */ beq $v0,$at,.L0f088ef8
/* f088ed4: 3c0c8009 */ lui $t4,%hi(g_Is4Mb)
/* f088ed8: 918c0af0 */ lbu $t4,%lo(g_Is4Mb)($t4)
/* f088edc: 24010001 */ addiu $at,$zero,0x1
/* f088ee0: 11810005 */ beq $t4,$at,.L0f088ef8
/* f088ee4: 00000000 */ nop
.L0f088ee8:
/* f088ee8: 0fc5b9f1 */ jal langGet
/* f088eec: 24045229 */ addiu $a0,$zero,0x5229
/* f088ef0: 10000004 */ b .L0f088f04
/* f088ef4: 00402025 */ or $a0,$v0,$zero
.L0f088ef8:
/* f088ef8: 0fc5b9f1 */ jal langGet
/* f088efc: 2404522a */ addiu $a0,$zero,0x522a
/* f088f00: 00402025 */ or $a0,$v0,$zero
.L0f088f04:
/* f088f04: 00002825 */ or $a1,$zero,$zero
/* f088f08: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088f0c: 24060001 */ addiu $a2,$zero,0x1
/* f088f10: 240e0001 */ addiu $t6,$zero,0x1
.L0f088f14:
/* f088f14: afae0098 */ sw $t6,0x98($sp)
/* f088f18: 10000022 */ b .L0f088fa4
/* f088f1c: 24020001 */ addiu $v0,$zero,0x1
.L0f088f20:
/* f088f20: 8d0f04cc */ lw $t7,0x4cc($t0)
/* f088f24: 3c048009 */ lui $a0,%hi(var80095200)
/* f088f28: 240500e5 */ addiu $a1,$zero,0xe5
/* f088f2c: 15e0000d */ bnez $t7,.L0f088f64
/* f088f30: 00003025 */ or $a2,$zero,$zero
/* f088f34: 3c01bf80 */ lui $at,0xbf80
/* f088f38: 44814000 */ mtc1 $at,$f8
/* f088f3c: 2418ffff */ addiu $t8,$zero,-1
/* f088f40: 2419ffff */ addiu $t9,$zero,-1
/* f088f44: 2409ffff */ addiu $t1,$zero,-1
/* f088f48: afa9001c */ sw $t1,0x1c($sp)
/* f088f4c: afb90018 */ sw $t9,0x18($sp)
/* f088f50: afb80010 */ sw $t8,0x10($sp)
/* f088f54: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088f58: 2407ffff */ addiu $a3,$zero,-1
/* f088f5c: 0c004241 */ jal sndStart
/* f088f60: e7a80014 */ swc1 $f8,0x14($sp)
.L0f088f64:
/* f088f64: 8faa00a4 */ lw $t2,0xa4($sp)
/* f088f68: 5140000c */ beqzl $t2,.L0f088f9c
/* f088f6c: 240b0004 */ addiu $t3,$zero,0x4
/* f088f70: 0fc44bfb */ jal invGetPickupTextByObj
/* f088f74: 8fa4009c */ lw $a0,0x9c($sp)
/* f088f78: 14400004 */ bnez $v0,.L0f088f8c
/* f088f7c: 00402025 */ or $a0,$v0,$zero
/* f088f80: 0fc5b9f1 */ jal langGet
/* f088f84: 2404522b */ addiu $a0,$zero,0x522b
/* f088f88: 00402025 */ or $a0,$v0,$zero
.L0f088f8c:
/* f088f8c: 00002825 */ or $a1,$zero,$zero
/* f088f90: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088f94: 24060009 */ addiu $a2,$zero,0x9
/* f088f98: 240b0004 */ addiu $t3,$zero,0x4
.L0f088f9c:
/* f088f9c: afab0098 */ sw $t3,0x98($sp)
/* f088fa0: 24020004 */ addiu $v0,$zero,0x4
.L0f088fa4:
/* f088fa4: 24010001 */ addiu $at,$zero,0x1
/* f088fa8: 1441000d */ bne $v0,$at,.L0f088fe0
/* f088fac: 8fad009c */ lw $t5,0x9c($sp)
/* f088fb0: 8dac0040 */ lw $t4,0x40($t5)
/* f088fb4: 318e0010 */ andi $t6,$t4,0x10
/* f088fb8: 15c00009 */ bnez $t6,.L0f088fe0
/* f088fbc: 00000000 */ nop
/* f088fc0: 91a60002 */ lbu $a2,0x2($t5)
/* f088fc4: 01a02025 */ or $a0,$t5,$zero
/* f088fc8: 00002825 */ or $a1,$zero,$zero
/* f088fcc: 30cf0004 */ andi $t7,$a2,0x4
/* f088fd0: 0fc1ab4b */ jal objFree
/* f088fd4: 01e03025 */ or $a2,$t7,$zero
/* f088fd8: 1000000a */ b .L0f089004
/* f088fdc: 24020001 */ addiu $v0,$zero,0x1
.L0f088fe0:
/* f088fe0: 10400007 */ beqz $v0,.L0f089000
/* f088fe4: 8fb80094 */ lw $t8,0x94($sp)
/* f088fe8: 17000003 */ bnez $t8,.L0f088ff8
/* f088fec: 00000000 */ nop
/* f088ff0: 0fc447f3 */ jal invGiveProp
/* f088ff4: 8fa400a0 */ lw $a0,0xa0($sp)
.L0f088ff8:
/* f088ff8: 10000002 */ b .L0f089004
/* f088ffc: 24020004 */ addiu $v0,$zero,0x4
.L0f089000:
/* f089000: 00001025 */ or $v0,$zero,$zero
.L0f089004:
/* f089004: 8fbf0024 */ lw $ra,0x24($sp)
/* f089008: 27bd00a0 */ addiu $sp,$sp,0xa0
/* f08900c: 03e00008 */ jr $ra
/* f089010: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel propPickupByPlayer
.late_rodata
glabel var7f1aadc0
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadc4
.word propPickupByPlayer+0x74 # f0888b4
glabel var7f1aadc8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadcc
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadd0
.word propPickupByPlayer+0xf4 # f088934
glabel var7f1aadd4
.word propPickupByPlayer+0x1f4 # f088a34
glabel var7f1aadd8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aaddc
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aade0
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aade4
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aade8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadec
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadf0
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadf4
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadf8
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aadfc
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae00
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae04
.word propPickupByPlayer+0x134 # f088974
glabel var7f1aae08
.word propPickupByPlayer+0x590 # f088dd0
glabel var7f1aae0c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae10
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae14
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae18
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae1c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae20
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae24
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae28
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae2c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae30
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae34
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae38
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae3c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae40
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae44
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae48
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae4c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae50
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae54
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae58
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae5c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae60
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae64
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae68
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae6c
.word propPickupByPlayer+0x6e0 # f088f20
glabel var7f1aae70
.word propPickupByPlayer+0x6e0 # f088f20
.text
/* f088840: 27bdff60 */ addiu $sp,$sp,-160
/* f088844: afbf0024 */ sw $ra,0x24($sp)
/* f088848: afa400a0 */ sw $a0,0xa0($sp)
/* f08884c: afa500a4 */ sw $a1,0xa4($sp)
/* f088850: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088854: 8c860004 */ lw $a2,0x4($a0)
/* f088858: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f08885c: 8d020284 */ lw $v0,0x284($t0)
/* f088860: afa00094 */ sw $zero,0x94($sp)
/* f088864: afa6009c */ sw $a2,0x9c($sp)
/* f088868: 8c4f00d8 */ lw $t7,0xd8($v0)
/* f08886c: 15e00005 */ bnez $t7,.L0f088884
/* f088870: 00000000 */ nop
/* f088874: 8d180034 */ lw $t8,0x34($t0)
/* f088878: 8fb9009c */ lw $t9,0x9c($sp)
/* f08887c: 57000004 */ bnezl $t8,.L0f088890
/* f088880: 93290003 */ lbu $t1,0x3($t9)
.L0f088884:
/* f088884: 100001df */ b .L0f089004
/* f088888: 00001025 */ or $v0,$zero,$zero
/* f08888c: 93290003 */ lbu $t1,0x3($t9)
.L0f088890:
/* f088890: 252afffd */ addiu $t2,$t1,-3
/* f088894: 2d41002d */ sltiu $at,$t2,0x2d
/* f088898: 102001a1 */ beqz $at,.L0f088f20
/* f08889c: 000a5080 */ sll $t2,$t2,0x2
/* f0888a0: 3c017f1b */ lui $at,%hi(var7f1aadc0)
/* f0888a4: 002a0821 */ addu $at,$at,$t2
/* f0888a8: 8c2aadc0 */ lw $t2,%lo(var7f1aadc0)($at)
/* f0888ac: 01400008 */ jr $t2
/* f0888b0: 00000000 */ nop
/* f0888b4: 8d0b04cc */ lw $t3,0x4cc($t0)
/* f0888b8: 3c048009 */ lui $a0,%hi(var80095200)
/* f0888bc: 240500e5 */ addiu $a1,$zero,0xe5
/* f0888c0: 1560000d */ bnez $t3,.L0f0888f8
/* f0888c4: 00003025 */ or $a2,$zero,$zero
/* f0888c8: 3c01bf80 */ lui $at,0xbf80
/* f0888cc: 44812000 */ mtc1 $at,$f4
/* f0888d0: 240cffff */ addiu $t4,$zero,-1
/* f0888d4: 240dffff */ addiu $t5,$zero,-1
/* f0888d8: 240effff */ addiu $t6,$zero,-1
/* f0888dc: afae001c */ sw $t6,0x1c($sp)
/* f0888e0: afad0018 */ sw $t5,0x18($sp)
/* f0888e4: afac0010 */ sw $t4,0x10($sp)
/* f0888e8: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f0888ec: 2407ffff */ addiu $a3,$zero,-1
/* f0888f0: 0c004241 */ jal sndStart
/* f0888f4: e7a40014 */ swc1 $f4,0x14($sp)
.L0f0888f8:
/* f0888f8: 8faf00a4 */ lw $t7,0xa4($sp)
/* f0888fc: 11e0000b */ beqz $t7,.L0f08892c
/* f088900: 00000000 */ nop
/* f088904: 0fc44bfb */ jal invGetPickupTextByObj
/* f088908: 8fa4009c */ lw $a0,0x9c($sp)
/* f08890c: 14400004 */ bnez $v0,.L0f088920
/* f088910: 00402025 */ or $a0,$v0,$zero
/* f088914: 0fc5b9f1 */ jal langGet
/* f088918: 24045228 */ addiu $a0,$zero,0x5228
/* f08891c: 00402025 */ or $a0,$v0,$zero
.L0f088920:
/* f088920: 00002825 */ or $a1,$zero,$zero
/* f088924: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088928: 24060009 */ addiu $a2,$zero,0x9
.L0f08892c:
/* f08892c: 1000019d */ b .L0f088fa4
/* f088930: 24020004 */ addiu $v0,$zero,0x4
/* f088934: 00c02025 */ or $a0,$a2,$zero
/* f088938: 0fc22067 */ jal ammocrateGetPickupAmmoQty
/* f08893c: afa6008c */ sw $a2,0x8c($sp)
/* f088940: 3c06800a */ lui $a2,%hi(g_Vars+0x4cc)
/* f088944: 8cc6a48c */ lw $a2,%lo(g_Vars+0x4cc)($a2)
/* f088948: 8fb9008c */ lw $t9,0x8c($sp)
/* f08894c: 00402825 */ or $a1,$v0,$zero
/* f088950: 2cd80001 */ sltiu $t8,$a2,0x1
/* f088954: 03003025 */ or $a2,$t8,$zero
/* f088958: 8fa700a4 */ lw $a3,0xa4($sp)
/* f08895c: 0fc2200a */ jal ammoHandlePickup
/* f088960: 8f24005c */ lw $a0,0x5c($t9)
/* f088964: 24090001 */ addiu $t1,$zero,0x1
/* f088968: afa90098 */ sw $t1,0x98($sp)
/* f08896c: 1000018d */ b .L0f088fa4
/* f088970: 24020001 */ addiu $v0,$zero,0x1
/* f088974: 00001025 */ or $v0,$zero,$zero
/* f088978: 00c01825 */ or $v1,$a2,$zero
.L0f08897c:
/* f08897c: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088980: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f088984: 8d0a0318 */ lw $t2,0x318($t0)
/* f088988: 9465005e */ lhu $a1,0x5e($v1)
/* f08898c: 24440001 */ addiu $a0,$v0,0x1
/* f088990: 15400009 */ bnez $t2,.L0f0889b8
/* f088994: 00003025 */ or $a2,$zero,$zero
/* f088998: 44853000 */ mtc1 $a1,$f6
/* f08899c: 3c018007 */ lui $at,%hi(g_AmmoQuantityScale)
/* f0889a0: c42a995c */ lwc1 $f10,%lo(g_AmmoQuantityScale)($at)
/* f0889a4: 46803220 */ cvt.s.w $f8,$f6
/* f0889a8: 460a4402 */ mul.s $f16,$f8,$f10
/* f0889ac: 4600848d */ trunc.w.s $f18,$f16
/* f0889b0: 44059000 */ mfc1 $a1,$f18
/* f0889b4: 00000000 */ nop
.L0f0889b8:
/* f0889b8: 8fa700a4 */ lw $a3,0xa4($sp)
/* f0889bc: afa30028 */ sw $v1,0x28($sp)
/* f0889c0: 0fc2200a */ jal ammoHandlePickup
/* f0889c4: afa4002c */ sw $a0,0x2c($sp)
/* f0889c8: 8fa2002c */ lw $v0,0x2c($sp)
/* f0889cc: 8fa30028 */ lw $v1,0x28($sp)
/* f0889d0: 24010013 */ addiu $at,$zero,0x13
/* f0889d4: 1441ffe9 */ bne $v0,$at,.L0f08897c
/* f0889d8: 24630004 */ addiu $v1,$v1,0x4
/* f0889dc: 3c0c800a */ lui $t4,%hi(g_Vars+0x4cc)
/* f0889e0: 8d8ca48c */ lw $t4,%lo(g_Vars+0x4cc)($t4)
/* f0889e4: 3c048009 */ lui $a0,%hi(var80095200)
/* f0889e8: 240500ea */ addiu $a1,$zero,0xea
/* f0889ec: 1580000d */ bnez $t4,.L0f088a24
/* f0889f0: 00003025 */ or $a2,$zero,$zero
/* f0889f4: 3c01bf80 */ lui $at,0xbf80
/* f0889f8: 44812000 */ mtc1 $at,$f4
/* f0889fc: 240dffff */ addiu $t5,$zero,-1
/* f088a00: 240effff */ addiu $t6,$zero,-1
/* f088a04: 240fffff */ addiu $t7,$zero,-1
/* f088a08: afaf001c */ sw $t7,0x1c($sp)
/* f088a0c: afae0018 */ sw $t6,0x18($sp)
/* f088a10: afad0010 */ sw $t5,0x10($sp)
/* f088a14: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088a18: 2407ffff */ addiu $a3,$zero,-1
/* f088a1c: 0c004241 */ jal sndStart
/* f088a20: e7a40014 */ swc1 $f4,0x14($sp)
.L0f088a24:
/* f088a24: 24180001 */ addiu $t8,$zero,0x1
/* f088a28: afb80098 */ sw $t8,0x98($sp)
/* f088a2c: 1000015d */ b .L0f088fa4
/* f088a30: 24020001 */ addiu $v0,$zero,0x1
/* f088a34: 8d190318 */ lw $t9,0x318($t0)
/* f088a38: afa60074 */ sw $a2,0x74($sp)
/* f088a3c: afa00070 */ sw $zero,0x70($sp)
/* f088a40: 13200022 */ beqz $t9,.L0f088acc
/* f088a44: afa00068 */ sw $zero,0x68($sp)
/* f088a48: 90c5005c */ lbu $a1,0x5c($a2)
/* f088a4c: 24010057 */ addiu $at,$zero,0x56
/* f088a50: 54a1000f */ bnel $a1,$at,.L0f088a90
/* f088a54: 24010036 */ addiu $at,$zero,0x36
/* f088a58: 8c4a00bc */ lw $t2,0xbc($v0)
/* f088a5c: 8fa500a0 */ lw $a1,0xa0($sp)
/* f088a60: 0fc61a26 */ jal scenarioPickUpBriefcase
/* f088a64: 8d440004 */ lw $a0,0x4($t2)
/* f088a68: 10400006 */ beqz $v0,.L0f088a84
/* f088a6c: 00401825 */ or $v1,$v0,$zero
/* f088a70: 8fab0074 */ lw $t3,0x74($sp)
/* f088a74: 9164005c */ lbu $a0,0x5c($t3)
/* f088a78: 0fc21f44 */ jal weaponPlayPickupSound
/* f088a7c: afa20064 */ sw $v0,0x64($sp)
/* f088a80: 8fa30064 */ lw $v1,0x64($sp)
.L0f088a84:
/* f088a84: 1000015f */ b .L0f089004
/* f088a88: 00601025 */ or $v0,$v1,$zero
/* f088a8c: 24010036 */ addiu $at,$zero,0x36
.L0f088a90:
/* f088a90: 54a1000f */ bnel $a1,$at,.L0f088ad0
/* f088a94: 8d0f04cc */ lw $t7,0x4cc($t0)
/* f088a98: 8c4c00bc */ lw $t4,0xbc($v0)
/* f088a9c: 8fa500a0 */ lw $a1,0xa0($sp)
/* f088aa0: 0fc61d04 */ jal scenarioPickUpUplink
/* f088aa4: 8d840004 */ lw $a0,0x4($t4)
/* f088aa8: 10400006 */ beqz $v0,.L0f088ac4
/* f088aac: 00401825 */ or $v1,$v0,$zero
/* f088ab0: 8fad0074 */ lw $t5,0x74($sp)
/* f088ab4: 91a4005c */ lbu $a0,0x5c($t5)
/* f088ab8: 0fc21f44 */ jal weaponPlayPickupSound
/* f088abc: afa20064 */ sw $v0,0x64($sp)
/* f088ac0: 8fa30064 */ lw $v1,0x64($sp)
.L0f088ac4:
/* f088ac4: 1000014f */ b .L0f089004
/* f088ac8: 00601025 */ or $v0,$v1,$zero
.L0f088acc:
/* f088acc: 8d0f04cc */ lw $t7,0x4cc($t0)
.L0f088ad0:
/* f088ad0: 8fae0074 */ lw $t6,0x74($sp)
/* f088ad4: 15e00007 */ bnez $t7,.L0f088af4
/* f088ad8: 91c5005c */ lbu $a1,0x5c($t6)
/* f088adc: 0fc21f44 */ jal weaponPlayPickupSound
/* f088ae0: 00a02025 */ or $a0,$a1,$zero
/* f088ae4: 8fb80074 */ lw $t8,0x74($sp)
/* f088ae8: 3c08800a */ lui $t0,%hi(g_Vars)
/* f088aec: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars)
/* f088af0: 9305005c */ lbu $a1,0x5c($t8)
.L0f088af4:
/* f088af4: 8fb9009c */ lw $t9,0x9c($sp)
/* f088af8: 24010056 */ addiu $at,$zero,0x55
/* f088afc: 8f290040 */ lw $t1,0x40($t9)
/* f088b00: 312a0400 */ andi $t2,$t1,0x400
/* f088b04: 11400020 */ beqz $t2,.L0f088b88
/* f088b08: 00000000 */ nop
/* f088b0c: 28a1002d */ slti $at,$a1,0x2d
/* f088b10: 50200007 */ beqzl $at,.L0f088b30
/* f088b14: 8fac00a4 */ lw $t4,0xa4($sp)
/* f088b18: 0fc4483c */ jal invGiveWeaponsByProp
/* f088b1c: 8fa400a0 */ lw $a0,0xa0($sp)
/* f088b20: 240b0001 */ addiu $t3,$zero,0x1
/* f088b24: afa20068 */ sw $v0,0x68($sp)
/* f088b28: afab0094 */ sw $t3,0x94($sp)
/* f088b2c: 8fac00a4 */ lw $t4,0xa4($sp)
.L0f088b30:
/* f088b30: 51800013 */ beqzl $t4,.L0f088b80
/* f088b34: 24180004 */ addiu $t8,$zero,0x4
/* f088b38: 0fc44bfb */ jal invGetPickupTextByObj
/* f088b3c: 8fa4009c */ lw $a0,0x9c($sp)
/* f088b40: 10400006 */ beqz $v0,.L0f088b5c
/* f088b44: 00402025 */ or $a0,$v0,$zero
/* f088b48: 00002825 */ or $a1,$zero,$zero
/* f088b4c: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088b50: 24060009 */ addiu $a2,$zero,0x9
/* f088b54: 10000008 */ b .L0f088b78
/* f088b58: 240f0001 */ addiu $t7,$zero,0x1
.L0f088b5c:
/* f088b5c: 8fa50068 */ lw $a1,0x68($sp)
/* f088b60: 8fad0074 */ lw $t5,0x74($sp)
/* f088b64: 38ae0002 */ xori $t6,$a1,0x2
/* f088b68: 2dc50001 */ sltiu $a1,$t6,0x1
/* f088b6c: 0fc221f2 */ jal currentPlayerQueuePickupWeaponHudmsg
/* f088b70: 91a4005c */ lbu $a0,0x5c($t5)
/* f088b74: 240f0001 */ addiu $t7,$zero,0x1
.L0f088b78:
/* f088b78: afaf0070 */ sw $t7,0x70($sp)
/* f088b7c: 24180004 */ addiu $t8,$zero,0x4
.L0f088b80:
/* f088b80: 10000033 */ b .L0f088c50
/* f088b84: afb80098 */ sw $t8,0x98($sp)
.L0f088b88:
/* f088b88: 14a10011 */ bne $a1,$at,.L0f088bd0
/* f088b8c: 24190001 */ addiu $t9,$zero,0x1
/* f088b90: 8d0604cc */ lw $a2,0x4cc($t0)
/* f088b94: 24090001 */ addiu $t1,$zero,0x1
/* f088b98: afb90068 */ sw $t9,0x68($sp)
/* f088b9c: 2cca0001 */ sltiu $t2,$a2,0x1
/* f088ba0: afa90094 */ sw $t1,0x94($sp)
/* f088ba4: 01403025 */ or $a2,$t2,$zero
/* f088ba8: 24040003 */ addiu $a0,$zero,0x3
/* f088bac: 24050001 */ addiu $a1,$zero,0x1
/* f088bb0: 0fc2200a */ jal ammoHandlePickup
/* f088bb4: 24070001 */ addiu $a3,$zero,0x1
/* f088bb8: 240b0001 */ addiu $t3,$zero,0x1
/* f088bbc: 240c0001 */ addiu $t4,$zero,0x1
/* f088bc0: afab0098 */ sw $t3,0x98($sp)
/* f088bc4: afa000a4 */ sw $zero,0xa4($sp)
/* f088bc8: 10000021 */ b .L0f088c50
/* f088bcc: afac0070 */ sw $t4,0x70($sp)
.L0f088bd0:
/* f088bd0: 0fc4483c */ jal invGiveWeaponsByProp
/* f088bd4: 8fa400a0 */ lw $a0,0xa0($sp)
/* f088bd8: 10400003 */ beqz $v0,.L0f088be8
/* f088bdc: afa20068 */ sw $v0,0x68($sp)
/* f088be0: 240d0001 */ addiu $t5,$zero,0x1
/* f088be4: afad0070 */ sw $t5,0x70($sp)
.L0f088be8:
/* f088be8: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088bec: 240e0001 */ addiu $t6,$zero,0x1
/* f088bf0: afae0094 */ sw $t6,0x94($sp)
/* f088bf4: 11e00014 */ beqz $t7,.L0f088c48
/* f088bf8: 8fb80074 */ lw $t8,0x74($sp)
/* f088bfc: 0fc44c0d */ jal invGetPickupTextByWeaponNum
/* f088c00: 9304005c */ lbu $a0,0x5c($t8)
/* f088c04: 10400008 */ beqz $v0,.L0f088c28
/* f088c08: 00402025 */ or $a0,$v0,$zero
/* f088c0c: 24190001 */ addiu $t9,$zero,0x1
/* f088c10: afb90070 */ sw $t9,0x70($sp)
/* f088c14: 00002825 */ or $a1,$zero,$zero
/* f088c18: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088c1c: 24060009 */ addiu $a2,$zero,0x9
/* f088c20: 1000000a */ b .L0f088c4c
/* f088c24: 240c0001 */ addiu $t4,$zero,0x1
.L0f088c28:
/* f088c28: 8fa90070 */ lw $t1,0x70($sp)
/* f088c2c: 8fa50068 */ lw $a1,0x68($sp)
/* f088c30: 8faa0074 */ lw $t2,0x74($sp)
/* f088c34: 11200004 */ beqz $t1,.L0f088c48
/* f088c38: 38ab0002 */ xori $t3,$a1,0x2
/* f088c3c: 9144005c */ lbu $a0,0x5c($t2)
/* f088c40: 0fc221f2 */ jal currentPlayerQueuePickupWeaponHudmsg
/* f088c44: 2d650001 */ sltiu $a1,$t3,0x1
.L0f088c48:
/* f088c48: 240c0001 */ addiu $t4,$zero,0x1
.L0f088c4c:
/* f088c4c: afac0098 */ sw $t4,0x98($sp)
.L0f088c50:
/* f088c50: 8fad0068 */ lw $t5,0x68($sp)
/* f088c54: 24010002 */ addiu $at,$zero,0x2
/* f088c58: 55a10010 */ bnel $t5,$at,.L0f088c9c
/* f088c5c: 8fb90074 */ lw $t9,0x74($sp)
/* f088c60: 0fc2866a */ jal bgunGetWeaponNum
/* f088c64: 00002025 */ or $a0,$zero,$zero
/* f088c68: 8fae0074 */ lw $t6,0x74($sp)
/* f088c6c: 91cf005c */ lbu $t7,0x5c($t6)
/* f088c70: 544f000a */ bnel $v0,$t7,.L0f088c9c
/* f088c74: 8fb90074 */ lw $t9,0x74($sp)
/* f088c78: 0fc2866a */ jal bgunGetWeaponNum
/* f088c7c: 24040001 */ addiu $a0,$zero,0x1
/* f088c80: 8fb80074 */ lw $t8,0x74($sp)
/* f088c84: 9305005c */ lbu $a1,0x5c($t8)
/* f088c88: 50450004 */ beql $v0,$a1,.L0f088c9c
/* f088c8c: 8fb90074 */ lw $t9,0x74($sp)
/* f088c90: 0fc28824 */ jal bgunEquipWeapon2
/* f088c94: 24040001 */ addiu $a0,$zero,0x1
/* f088c98: 8fb90074 */ lw $t9,0x74($sp)
.L0f088c9c:
/* f088c9c: 00002825 */ or $a1,$zero,$zero
/* f088ca0: 0fc2a685 */ jal bgunGetAmmoTypeForWeapon
/* f088ca4: 9324005c */ lbu $a0,0x5c($t9)
/* f088ca8: 1040001d */ beqz $v0,.L0f088d20
/* f088cac: afa2006c */ sw $v0,0x6c($sp)
/* f088cb0: 0fc22095 */ jal weaponGetPickupAmmoQty
/* f088cb4: 8fa40074 */ lw $a0,0x74($sp)
/* f088cb8: 18400019 */ blez $v0,.L0f088d20
/* f088cbc: afa20058 */ sw $v0,0x58($sp)
/* f088cc0: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088cc4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cc8: 8fa4006c */ lw $a0,0x6c($sp)
/* f088ccc: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088cd0: afa20054 */ sw $v0,0x54($sp)
/* f088cd4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cd8: 0fc2a63d */ jal bgunGetCapacityByAmmotype
/* f088cdc: afa2003c */ sw $v0,0x3c($sp)
/* f088ce0: 8fa6003c */ lw $a2,0x3c($sp)
/* f088ce4: 8fa50054 */ lw $a1,0x54($sp)
/* f088ce8: 8fa90058 */ lw $t1,0x58($sp)
/* f088cec: 00c2082a */ slt $at,$a2,$v0
/* f088cf0: 1020000b */ beqz $at,.L0f088d20
/* f088cf4: 00a92821 */ addu $a1,$a1,$t1
/* f088cf8: 0fc2a58a */ jal bgunSetAmmoQuantity
/* f088cfc: 8fa4006c */ lw $a0,0x6c($sp)
/* f088d00: 8faa0070 */ lw $t2,0x70($sp)
/* f088d04: 8fab00a4 */ lw $t3,0xa4($sp)
/* f088d08: 55400006 */ bnezl $t2,.L0f088d24
/* f088d0c: 8fac0074 */ lw $t4,0x74($sp)
/* f088d10: 11600003 */ beqz $t3,.L0f088d20
/* f088d14: 8fa4006c */ lw $a0,0x6c($sp)
/* f088d18: 0fc21fec */ jal currentPlayerQueuePickupAmmoHudmsg
/* f088d1c: 8fa50058 */ lw $a1,0x58($sp)
.L0f088d20:
/* f088d20: 8fac0074 */ lw $t4,0x74($sp)
.L0f088d24:
/* f088d24: 24010012 */ addiu $at,$zero,0x12
/* f088d28: 918d005c */ lbu $t5,0x5c($t4)
/* f088d2c: 55a1001b */ bnel $t5,$at,.L0f088d9c
/* f088d30: 8fb80074 */ lw $t8,0x74($sp)
/* f088d34: 0fc22095 */ jal weaponGetPickupAmmoQty
/* f088d38: 01802025 */ or $a0,$t4,$zero
/* f088d3c: afa20050 */ sw $v0,0x50($sp)
/* f088d40: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088d44: 2404000b */ addiu $a0,$zero,0xb
/* f088d48: 2404000b */ addiu $a0,$zero,0xb
/* f088d4c: 0fc2a63d */ jal bgunGetCapacityByAmmotype
/* f088d50: afa2003c */ sw $v0,0x3c($sp)
/* f088d54: 8fa6003c */ lw $a2,0x3c($sp)
/* f088d58: 00c2082a */ slt $at,$a2,$v0
/* f088d5c: 5020000f */ beqzl $at,.L0f088d9c
/* f088d60: 8fb80074 */ lw $t8,0x74($sp)
/* f088d64: 0fc2a5dc */ jal bgunGetReservedAmmoCount
/* f088d68: 2404000b */ addiu $a0,$zero,0xb
/* f088d6c: 2404000b */ addiu $a0,$zero,0xb
/* f088d70: 0fc2a58a */ jal bgunSetAmmoQuantity
/* f088d74: 24450005 */ addiu $a1,$v0,0x5
/* f088d78: 8fae0070 */ lw $t6,0x70($sp)
/* f088d7c: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088d80: 55c00006 */ bnezl $t6,.L0f088d9c
/* f088d84: 8fb80074 */ lw $t8,0x74($sp)
/* f088d88: 11e00003 */ beqz $t7,.L0f088d98
/* f088d8c: 2404000b */ addiu $a0,$zero,0xb
/* f088d90: 0fc21fec */ jal currentPlayerQueuePickupAmmoHudmsg
/* f088d94: 8fa50050 */ lw $a1,0x50($sp)
.L0f088d98:
/* f088d98: 8fb80074 */ lw $t8,0x74($sp)
.L0f088d9c:
/* f088d9c: 2401002e */ addiu $at,$zero,0x2e
/* f088da0: 3c09800a */ lui $t1,%hi(g_Vars+0x284)
/* f088da4: 9319005c */ lbu $t9,0x5c($t8)
/* f088da8: 17210007 */ bne $t9,$at,.L0f088dc8
/* f088dac: 00000000 */ nop
/* f088db0: 8d29a244 */ lw $t1,%lo(g_Vars+0x284)($t1)
/* f088db4: 8d2a0480 */ lw $t2,0x480($t1)
/* f088db8: 15400003 */ bnez $t2,.L0f088dc8
/* f088dbc: 00000000 */ nop
/* f088dc0: 0fc0458c */ jal playerInitEyespy
/* f088dc4: 00000000 */ nop
.L0f088dc8:
/* f088dc8: 10000076 */ b .L0f088fa4
/* f088dcc: 8fa20098 */ lw $v0,0x98($sp)
/* f088dd0: 0fc30884 */ jal playerSetShieldFrac
/* f088dd4: c4cc0060 */ lwc1 $f12,0x60($a2)
/* f088dd8: 3c0b800a */ lui $t3,%hi(g_Vars+0x4cc)
/* f088ddc: 8d6ba48c */ lw $t3,%lo(g_Vars+0x4cc)($t3)
/* f088de0: 3c048009 */ lui $a0,%hi(var80095200)
/* f088de4: 240501cd */ addiu $a1,$zero,0x1cd
/* f088de8: 1560000d */ bnez $t3,.L0f088e20
/* f088dec: 00003025 */ or $a2,$zero,$zero
/* f088df0: 3c01bf80 */ lui $at,0xbf80
/* f088df4: 44813000 */ mtc1 $at,$f6
/* f088df8: 240dffff */ addiu $t5,$zero,-1
/* f088dfc: 240cffff */ addiu $t4,$zero,-1
/* f088e00: 240effff */ addiu $t6,$zero,-1
/* f088e04: afae001c */ sw $t6,0x1c($sp)
/* f088e08: afac0018 */ sw $t4,0x18($sp)
/* f088e0c: afad0010 */ sw $t5,0x10($sp)
/* f088e10: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088e14: 2407ffff */ addiu $a3,$zero,-1
/* f088e18: 0c004241 */ jal sndStart
/* f088e1c: e7a60014 */ swc1 $f6,0x14($sp)
.L0f088e20:
/* f088e20: 8faf00a4 */ lw $t7,0xa4($sp)
/* f088e24: 51e0003b */ beqzl $t7,.L0f088f14
/* f088e28: 240e0001 */ addiu $t6,$zero,0x1
/* f088e2c: 0fc44bfb */ jal invGetPickupTextByObj
/* f088e30: 8fa4009c */ lw $a0,0x9c($sp)
/* f088e34: 14400033 */ bnez $v0,.L0f088f04
/* f088e38: 00402025 */ or $a0,$v0,$zero
/* f088e3c: 3c18800a */ lui $t8,%hi(g_Vars+0x6c)
/* f088e40: 8f18a02c */ lw $t8,%lo(g_Vars+0x6c)($t8)
/* f088e44: 3c19800a */ lui $t9,%hi(g_Vars+0x68)
/* f088e48: 3c09800a */ lui $t1,%hi(g_Vars+0x64)
/* f088e4c: 13000003 */ beqz $t8,.L0f088e5c
/* f088e50: 3c0a800a */ lui $t2,%hi(g_Vars+0x70)
/* f088e54: 10000002 */ b .L0f088e60
/* f088e58: 24050001 */ addiu $a1,$zero,0x1
.L0f088e5c:
/* f088e5c: 00002825 */ or $a1,$zero,$zero
.L0f088e60:
/* f088e60: 8f39a028 */ lw $t9,%lo(g_Vars+0x68)($t9)
/* f088e64: 00001825 */ or $v1,$zero,$zero
/* f088e68: 00002025 */ or $a0,$zero,$zero
/* f088e6c: 13200003 */ beqz $t9,.L0f088e7c
/* f088e70: 00003025 */ or $a2,$zero,$zero
/* f088e74: 10000001 */ b .L0f088e7c
/* f088e78: 24030001 */ addiu $v1,$zero,0x1
.L0f088e7c:
/* f088e7c: 8d29a024 */ lw $t1,%lo(g_Vars+0x64)($t1)
/* f088e80: 11200003 */ beqz $t1,.L0f088e90
/* f088e84: 00000000 */ nop
/* f088e88: 10000001 */ b .L0f088e90
/* f088e8c: 24040001 */ addiu $a0,$zero,0x1
.L0f088e90:
/* f088e90: 8d4aa030 */ lw $t2,%lo(g_Vars+0x70)($t2)
/* f088e94: 11400003 */ beqz $t2,.L0f088ea4
/* f088e98: 00000000 */ nop
/* f088e9c: 10000001 */ b .L0f088ea4
/* f088ea0: 24060001 */ addiu $a2,$zero,0x1
.L0f088ea4:
/* f088ea4: 00c45821 */ addu $t3,$a2,$a0
/* f088ea8: 01636821 */ addu $t5,$t3,$v1
/* f088eac: 01a51021 */ addu $v0,$t5,$a1
/* f088eb0: 28410003 */ slti $at,$v0,0x3
/* f088eb4: 10200010 */ beqz $at,.L0f088ef8
/* f088eb8: 24010002 */ addiu $at,$zero,0x2
/* f088ebc: 1441000a */ bne $v0,$at,.L0f088ee8
/* f088ec0: 00000000 */ nop
/* f088ec4: 0fc54bcd */ jal optionsGetScreenSplit
/* f088ec8: 00000000 */ nop
/* f088ecc: 24010001 */ addiu $at,$zero,0x1
/* f088ed0: 10410009 */ beq $v0,$at,.L0f088ef8
/* f088ed4: 3c0c8009 */ lui $t4,%hi(g_Is4Mb)
/* f088ed8: 918c0af0 */ lbu $t4,%lo(g_Is4Mb)($t4)
/* f088edc: 24010001 */ addiu $at,$zero,0x1
/* f088ee0: 11810005 */ beq $t4,$at,.L0f088ef8
/* f088ee4: 00000000 */ nop
.L0f088ee8:
/* f088ee8: 0fc5b9f1 */ jal langGet
/* f088eec: 24045229 */ addiu $a0,$zero,0x5229
/* f088ef0: 10000004 */ b .L0f088f04
/* f088ef4: 00402025 */ or $a0,$v0,$zero
.L0f088ef8:
/* f088ef8: 0fc5b9f1 */ jal langGet
/* f088efc: 2404522a */ addiu $a0,$zero,0x522a
/* f088f00: 00402025 */ or $a0,$v0,$zero
.L0f088f04:
/* f088f04: 00002825 */ or $a1,$zero,$zero
/* f088f08: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088f0c: 24060001 */ addiu $a2,$zero,0x1
/* f088f10: 240e0001 */ addiu $t6,$zero,0x1
.L0f088f14:
/* f088f14: afae0098 */ sw $t6,0x98($sp)
/* f088f18: 10000022 */ b .L0f088fa4
/* f088f1c: 24020001 */ addiu $v0,$zero,0x1
.L0f088f20:
/* f088f20: 8d0f04cc */ lw $t7,0x4cc($t0)
/* f088f24: 3c048009 */ lui $a0,%hi(var80095200)
/* f088f28: 240500e5 */ addiu $a1,$zero,0xe5
/* f088f2c: 15e0000d */ bnez $t7,.L0f088f64
/* f088f30: 00003025 */ or $a2,$zero,$zero
/* f088f34: 3c01bf80 */ lui $at,0xbf80
/* f088f38: 44814000 */ mtc1 $at,$f8
/* f088f3c: 2418ffff */ addiu $t8,$zero,-1
/* f088f40: 2419ffff */ addiu $t9,$zero,-1
/* f088f44: 2409ffff */ addiu $t1,$zero,-1
/* f088f48: afa9001c */ sw $t1,0x1c($sp)
/* f088f4c: afb90018 */ sw $t9,0x18($sp)
/* f088f50: afb80010 */ sw $t8,0x10($sp)
/* f088f54: 8c845200 */ lw $a0,%lo(var80095200)($a0)
/* f088f58: 2407ffff */ addiu $a3,$zero,-1
/* f088f5c: 0c004241 */ jal sndStart
/* f088f60: e7a80014 */ swc1 $f8,0x14($sp)
.L0f088f64:
/* f088f64: 8faa00a4 */ lw $t2,0xa4($sp)
/* f088f68: 5140000c */ beqzl $t2,.L0f088f9c
/* f088f6c: 240b0004 */ addiu $t3,$zero,0x4
/* f088f70: 0fc44bfb */ jal invGetPickupTextByObj
/* f088f74: 8fa4009c */ lw $a0,0x9c($sp)
/* f088f78: 14400004 */ bnez $v0,.L0f088f8c
/* f088f7c: 00402025 */ or $a0,$v0,$zero
/* f088f80: 0fc5b9f1 */ jal langGet
/* f088f84: 2404522b */ addiu $a0,$zero,0x522b
/* f088f88: 00402025 */ or $a0,$v0,$zero
.L0f088f8c:
/* f088f8c: 00002825 */ or $a1,$zero,$zero
/* f088f90: 0fc377e9 */ jal hudmsgCreateWithFlags
/* f088f94: 24060009 */ addiu $a2,$zero,0x9
/* f088f98: 240b0004 */ addiu $t3,$zero,0x4
.L0f088f9c:
/* f088f9c: afab0098 */ sw $t3,0x98($sp)
/* f088fa0: 24020004 */ addiu $v0,$zero,0x4
.L0f088fa4:
/* f088fa4: 24010001 */ addiu $at,$zero,0x1
/* f088fa8: 1441000d */ bne $v0,$at,.L0f088fe0
/* f088fac: 8fad009c */ lw $t5,0x9c($sp)
/* f088fb0: 8dac0040 */ lw $t4,0x40($t5)
/* f088fb4: 318e0010 */ andi $t6,$t4,0x10
/* f088fb8: 15c00009 */ bnez $t6,.L0f088fe0
/* f088fbc: 00000000 */ nop
/* f088fc0: 91a60002 */ lbu $a2,0x2($t5)
/* f088fc4: 01a02025 */ or $a0,$t5,$zero
/* f088fc8: 00002825 */ or $a1,$zero,$zero
/* f088fcc: 30cf0004 */ andi $t7,$a2,0x4
/* f088fd0: 0fc1ab4b */ jal objFree
/* f088fd4: 01e03025 */ or $a2,$t7,$zero
/* f088fd8: 1000000a */ b .L0f089004
/* f088fdc: 24020001 */ addiu $v0,$zero,0x1
.L0f088fe0:
/* f088fe0: 10400007 */ beqz $v0,.L0f089000
/* f088fe4: 8fb80094 */ lw $t8,0x94($sp)
/* f088fe8: 17000003 */ bnez $t8,.L0f088ff8
/* f088fec: 00000000 */ nop
/* f088ff0: 0fc447f3 */ jal invGiveProp
/* f088ff4: 8fa400a0 */ lw $a0,0xa0($sp)
.L0f088ff8:
/* f088ff8: 10000002 */ b .L0f089004
/* f088ffc: 24020004 */ addiu $v0,$zero,0x4
.L0f089000:
/* f089000: 00001025 */ or $v0,$zero,$zero
.L0f089004:
/* f089004: 8fbf0024 */ lw $ra,0x24($sp)
/* f089008: 27bd00a0 */ addiu $sp,$sp,0xa0
/* f08900c: 03e00008 */ jr $ra
/* f089010: 00000000 */ nop
);
#endif
// Mismatch: Register swap in PLAYERCOUNT() macro
//s32 propPickupByPlayer(struct prop *prop, bool showhudmsg)
//{
// struct defaultobj *obj = prop->obj; // 9c
// s32 result; // 98
// bool given = false; // 94
//
// if (g_Vars.currentplayer->isdead || g_Vars.lvupdate240 == 0) {
// return TICKOP_NONE;
// }
//
// // 88c
// switch (obj->type) {
// case OBJTYPE_KEY: // f0888b4 - key
// if (g_Vars.in_cutscene == false) {
// sndStart(var80095200, SFX_PICKUP_KEYCARD, NULL, -1, -1, -1, -1, -1);
// }
//
// if (showhudmsg) {
// char *text = invGetPickupTextByObj(obj);
//
// if (text == NULL) {
// text = langGet(L_PROPOBJ_040); // "Picked up a key."
// }
//
// hudmsgCreateWithFlags(text, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE | HUDMSGFLAG_ALLOWDUPES);
// }
//
// result = TICKOP_GIVETOPLAYER;
// break;
// case OBJTYPE_AMMOCRATE: // f088934 - ammocrate
// {
// struct ammocrateobj *crate = (struct ammocrateobj *)prop->obj; // 8c
// ammoHandlePickup(crate->ammotype, ammocrateGetPickupAmmoQty(crate), !g_Vars.in_cutscene, showhudmsg);
// result = TICKOP_FREE;
// }
// break;
// case OBJTYPE_MULTIAMMOCRATE: // f088974 - multiammocrate
// {
// struct multiammocrateobj *crate = (struct multiammocrateobj *)prop->obj;
// u32 stack[2];
// s32 i;
//
// for (i = 0; i != 19; i++) {
// s32 qty = crate->slots[i].quantity;
//
// if (!g_Vars.normmplayerisrunning) {
// qty *= g_AmmoQuantityScale;
// }
//
// ammoHandlePickup(i + 1, qty, false, showhudmsg);
// }
//
// if (g_Vars.in_cutscene == false) {
// sndStart(var80095200, SFX_PICKUP_AMMO, NULL, -1, -1, -1, -1, -1);
// }
//
// result = TICKOP_FREE;
// }
// break;
// case OBJTYPE_WEAPON: // f088a34 - weapon
// {
// struct weaponobj *weapon = (struct weaponobj *)prop->obj; // 74
// bool sp70 = false;
// s32 ammotype; // 6c
// s32 count = 0; // 68
// s32 sp64;
//
// if (g_Vars.normmplayerisrunning) {
// if (weapon->weaponnum == WEAPON_BRIEFCASE2) {
// sp64 = scenarioPickUpBriefcase(g_Vars.currentplayer->prop->chr, prop);
//
// if (sp64) {
// weaponPlayPickupSound(weapon->weaponnum);
// }
//
// return sp64;
// }
//
// if (weapon->weaponnum == WEAPON_DATAUPLINK) {
// sp64 = scenarioPickUpUplink(g_Vars.currentplayer->prop->chr, prop);
//
// if (sp64) {
// weaponPlayPickupSound(weapon->weaponnum);
// }
//
// return sp64;
// }
// }
//
// // acc
// if (g_Vars.in_cutscene == false) {
// weaponPlayPickupSound(weapon->weaponnum);
// }
//
// // af4
// if (obj->hidden & OBJHFLAG_HASTEXTOVERRIDE) {
// if (weapon->weaponnum <= WEAPON_PSYCHOSISGUN) {
// count = invGiveWeaponsByProp(prop);
// given = true;
// }
//
// if (showhudmsg) {
// char *text = invGetPickupTextByObj(obj);
//
// if (text) {
// hudmsgCreateWithFlags(text, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE | HUDMSGFLAG_ALLOWDUPES);
// } else {
// currentPlayerQueuePickupWeaponHudmsg(weapon->weaponnum, count == 2);
// }
//
// sp70 = true;
// }
//
// result = TICKOP_GIVETOPLAYER;
// } else {
// // b88
// if (weapon->weaponnum == WEAPON_BOLT) {
// count = 1; // sp68
// given = true;
// ammoHandlePickup(AMMOTYPE_CROSSBOW, 1, !g_Vars.in_cutscene, true);
// result = TICKOP_FREE;
// showhudmsg = false;
// sp70 = true;
// } else {
// // bd0
// count = invGiveWeaponsByProp(prop);
//
// if (count) {
// sp70 = true;
// }
//
// given = true;
//
// if (showhudmsg) {
// char *text = invGetPickupTextByWeaponNum(weapon->weaponnum);
//
// if (text) {
// sp70 = true;
// hudmsgCreateWithFlags(text, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE | HUDMSGFLAG_ALLOWDUPES);
// } else {
// if (sp70) {
// currentPlayerQueuePickupWeaponHudmsg(weapon->weaponnum, count == 2);
// }
// }
// }
//
// result = TICKOP_FREE;
// }
// }
//
// // c50
// if (count == 2
// && bgunGetWeaponNum(HAND_RIGHT) == weapon->weaponnum
// && bgunGetWeaponNum(HAND_LEFT) != weapon->weaponnum) {
// bgunEquipWeapon2(HAND_LEFT, weapon->weaponnum);
// }
//
// // c9c
// ammotype = bgunGetAmmoTypeForWeapon(weapon->weaponnum, FUNC_PRIMARY);
//
// if (ammotype) {
// s32 pickupqty = weaponGetPickupAmmoQty(weapon); // 58
//
// if (pickupqty > 0) {
// s32 heldqty = bgunGetReservedAmmoCount(ammotype); // 54
//
// if (bgunGetReservedAmmoCount(ammotype) < bgunGetCapacityByAmmotype(ammotype)) {
// heldqty += pickupqty;
//
// bgunSetAmmoQuantity(ammotype, heldqty);
//
// if (!sp70 && showhudmsg) {
// currentPlayerQueuePickupAmmoHudmsg(ammotype, pickupqty);
// }
// }
// }
// }
//
// // d20
// if (weapon->weaponnum == WEAPON_SUPERDRAGON) {
// s32 pickupqty = weaponGetPickupAmmoQty(weapon); // 50
//
// if (bgunGetReservedAmmoCount(AMMOTYPE_DEVASTATOR) < bgunGetCapacityByAmmotype(AMMOTYPE_DEVASTATOR)) {
// bgunSetAmmoQuantity(AMMOTYPE_DEVASTATOR, bgunGetReservedAmmoCount(AMMOTYPE_DEVASTATOR) + 5);
//
// if (!sp70 && showhudmsg) {
// currentPlayerQueuePickupAmmoHudmsg(AMMOTYPE_DEVASTATOR, pickupqty);
// }
// }
// }
//
// if (weapon->weaponnum == WEAPON_EYESPY && g_Vars.currentplayer->eyespy == NULL) {
// playerInitEyespy();
// }
// }
// break;
// case OBJTYPE_SHIELD: // f088dd0 - shield
// {
// playerSetShieldFrac(((struct shieldobj *)prop->obj)->amount);
//
// if (!g_Vars.in_cutscene) {
// sndStart(var80095200, SFX_PICKUP_SHIELD, NULL, -1, -1, -1, -1, -1);
// }
//
// if (showhudmsg) {
// char *text = invGetPickupTextByObj(obj);
//
// if (text == NULL) {
// s32 playercount = PLAYERCOUNT();
//
// if (playercount <= 2 && !(playercount == 2 && (optionsGetScreenSplit() == SCREENSPLIT_VERTICAL || IS4MB()))) {
// text = langGet(L_PROPOBJ_041); // "Picked up a shield."
// } else {
// text = langGet(L_PROPOBJ_042); // "A shield."
// }
// }
//
// hudmsgCreateWithFlags(text, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE);
// }
//
// result = TICKOP_FREE;
// }
// break;
// case 0x03:
// case 0x05:
// case 0x06:
// case 0x09:
// case 0x0a:
// case 0x0b:
// case 0x0c:
// case 0x0d:
// case 0x0e:
// case 0x0f:
// case 0x10:
// case 0x11:
// case 0x12:
// case 0x13:
// case 0x16:
// case 0x17:
// case 0x18:
// case 0x19:
// case 0x1a:
// case 0x1b:
// case 0x1c:
// case 0x1d:
// case 0x1e:
// case 0x1f:
// case 0x20:
// case 0x21:
// case 0x22:
// case 0x23:
// case 0x24:
// case 0x25:
// case 0x26:
// case 0x27:
// case 0x28:
// case 0x29:
// case 0x2a:
// case 0x2b:
// case 0x2c:
// case 0x2d:
// case 0x2e:
// case 0x2f:
// default: // f088f20
// if (g_Vars.in_cutscene == false) {
// sndStart(var80095200, SFX_PICKUP_KEYCARD, NULL, -1, -1, -1, -1, -1);
// }
//
// if (showhudmsg) {
// char *text = invGetPickupTextByObj(obj);
//
// if (text == NULL) {
// text = langGet(L_PROPOBJ_043); // "Picked up something."
// }
//
// hudmsgCreateWithFlags(text, HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE | HUDMSGFLAG_ALLOWDUPES);
// }
//
// result = TICKOP_GIVETOPLAYER;
// break;
// }
//
// // fa4
// if (result == TICKOP_FREE && (obj->hidden & OBJHFLAG_TAGGED) == 0) {
// objFree(obj, false, obj->hidden2 & OBJH2FLAG_CANREGEN);
// return TICKOP_FREE;
// }
//
// // fe0
// if (result != TICKOP_NONE) {
// if (!given) {
// invGiveProp(prop);
// }
//
// return TICKOP_GIVETOPLAYER;
// }
//
// return TICKOP_NONE;
//}
s32 objTestForPickup(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
if (obj->hidden & OBJHFLAG_REAPABLE) {
return TICKOP_NONE;
}
if (func0f085194(obj) && obj->type != OBJTYPE_HAT) {
if (obj->flags & OBJFLAG_UNCOLLECTABLE) {
return TICKOP_NONE;
}
} else {
if ((obj->flags & OBJFLAG_COLLECTABLE) == 0) {
return TICKOP_NONE;
}
}
if (obj->flags & OBJFLAG_THROWNLAPTOP) {
return TICKOP_NONE;
}
// For disarmed weapons that are falling, picktimer timer is 1 second and
// pickupby is set to the chr who disarmed. This makes it so only the
// disarmer can pick up the weapon within the first second.
// For thrown projectiles, the pickup timer is also 1 second but there is no
// pickupby. This prevents the thrower from picking up their own projectile
// within the first second, unless it's immediately bounced or landed.
if ((obj->hidden & OBJHFLAG_PROJECTILE) && obj->projectile->pickuptimer240 > 0) {
if (obj->projectile->pickupby == NULL) {
if (obj->projectile->bouncecount == 0) {
return TICKOP_NONE;
}
} else {
if (obj->projectile->pickupby != g_Vars.currentplayer->prop) {
return TICKOP_NONE;
}
}
}
if (!objCanPickupFromSafe(obj)) {
return TICKOP_NONE;
}
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = prop->weapon;
bool maybe = true;
s32 leftweaponnum;
s32 rightweaponnum;
if (weapon->weaponnum == WEAPON_GRENADE
|| weapon->weaponnum == WEAPON_GRENADEROUND
|| weapon->weaponnum == WEAPON_NBOMB
|| weapon->weaponnum == WEAPON_SKROCKET) {
if (weapon->timer240 >= 0 || (obj->hidden & OBJHFLAG_REAPABLE)) {
return TICKOP_NONE;
}
}
if (weapon->weaponnum == WEAPON_REMOTEMINE
|| weapon->weaponnum == WEAPON_PROXIMITYMINE
|| weapon->weaponnum == WEAPON_TIMEDMINE
|| (weapon->weaponnum == WEAPON_DRAGON && weapon->gunfunc == FUNC_SECONDARY)
|| weapon->weaponnum == WEAPON_TRACERBUG
|| weapon->weaponnum == WEAPON_TARGETAMPLIFIER
|| weapon->weaponnum == WEAPON_COMMSRIDER
|| weapon->weaponnum == WEAPON_ECMMINE) {
if (weapon->timer240 >= 0 || (obj->hidden & OBJHFLAG_REAPABLE)) {
return TICKOP_NONE;
}
}
if (weapon->weaponnum == WEAPON_ROCKET
|| weapon->weaponnum == WEAPON_HOMINGROCKET
|| weapon->weaponnum == WEAPON_BOLT
|| weapon->weaponnum == WEAPON_COMBATKNIFE) {
if (obj->hidden & OBJHFLAG_PROJECTILE) {
return TICKOP_NONE;
}
}
if (invHasSingleWeaponExcAllGuns(weapon->weaponnum) && bgunGetAmmoTypeForWeapon(weapon->weaponnum, FUNC_PRIMARY)) {
if (cheatIsActive(CHEAT_UNLIMITEDAMMO) || cheatIsActive(CHEAT_UNLIMITEDAMMONORELOADS)) {
maybe = false;
} else {
maybe = bgunGetAmmoQtyForWeapon(weapon->weaponnum, FUNC_PRIMARY) >= bgunGetAmmoCapacityForWeapon(weapon->weaponnum, FUNC_PRIMARY);
}
if (weapon->weaponnum == WEAPON_SUPERDRAGON) {
if (bgunGetAmmoQtyForWeapon(weapon->weaponnum, FUNC_SECONDARY) < bgunGetAmmoCapacityForWeapon(weapon->weaponnum, FUNC_SECONDARY)) {
maybe = false;
}
}
if (maybe) {
if (weapon->dualweapon || weapon->dualweaponnum >= 0) {
if (weapon->dualweapon) {
leftweaponnum = rightweaponnum = weapon->dualweapon->weaponnum;
} else {
leftweaponnum = rightweaponnum = weapon->dualweaponnum;
}
if ((weapon->base.flags & OBJFLAG_DEACTIVATED)) {
rightweaponnum = weapon->weaponnum;
} else {
leftweaponnum = weapon->weaponnum;
}
if (invHasDoubleWeaponExcAllGuns(leftweaponnum, rightweaponnum)) {
return TICKOP_NONE;
}
} else {
if (g_Vars.normmplayerisrunning
&& weaponHasFlag(weapon->weaponnum, WEAPONFLAG_DUALWIELD)
&& !invHasDoubleWeaponExcAllGuns(weapon->weaponnum, weapon->weaponnum)) {
struct invitem *item = invFindSingleWeapon(weapon->weaponnum);
if ((item && item->type_weap.pickuppad == weapon->base.pad) || weapon->base.pad < 0) {
return TICKOP_NONE;
}
} else {
return TICKOP_NONE;
}
}
}
}
} else if (obj->type == OBJTYPE_AMMOCRATE) {
struct ammocrateobj *crate = (struct ammocrateobj *) prop->obj;
if (bgunGetReservedAmmoCount(crate->ammotype) >= bgunGetCapacityByAmmotype(crate->ammotype)) {
if ((crate->ammotype != AMMOTYPE_GRENADE || invHasSingleWeaponExcAllGuns(WEAPON_GRENADE))
&& (crate->ammotype != AMMOTYPE_CLOAK || invHasSingleWeaponExcAllGuns(WEAPON_CLOAKINGDEVICE))
&& (crate->ammotype != AMMOTYPE_BOOST || invHasSingleWeaponExcAllGuns(WEAPON_COMBATBOOST))
&& (crate->ammotype != AMMOTYPE_NBOMB || invHasSingleWeaponExcAllGuns(WEAPON_NBOMB))
&& (crate->ammotype != AMMOTYPE_REMOTE_MINE || invHasSingleWeaponExcAllGuns(WEAPON_REMOTEMINE))
&& (crate->ammotype != AMMOTYPE_PROXY_MINE || invHasSingleWeaponExcAllGuns(WEAPON_PROXIMITYMINE))
&& (crate->ammotype != AMMOTYPE_TIMED_MINE || invHasSingleWeaponExcAllGuns(WEAPON_TIMEDMINE))
&& (crate->ammotype != AMMOTYPE_KNIFE || invHasSingleWeaponExcAllGuns(WEAPON_COMBATKNIFE))) {
return TICKOP_NONE;
}
}
} else if (obj->type == OBJTYPE_MULTIAMMOCRATE) {
struct multiammocrateobj *crate = (struct multiammocrateobj *) prop->obj;
bool ignore = true;
s32 i;
if (objGetDestroyedLevel(obj)) {
return TICKOP_NONE;
}
for (i = 0; i <= AMMOTYPE_NBOMB; i++) {
s32 ammotype = i + 1;
if (crate->slots[i].quantity > 0) {
if (bgunGetReservedAmmoCount(ammotype) < bgunGetCapacityByAmmotype(ammotype)) {
ignore = false;
break;
}
if ((ammotype == AMMOTYPE_GRENADE && !invHasSingleWeaponExcAllGuns(WEAPON_GRENADE))
|| (ammotype == AMMOTYPE_CLOAK && !invHasSingleWeaponExcAllGuns(WEAPON_CLOAKINGDEVICE))
|| (ammotype == AMMOTYPE_BOOST && !invHasSingleWeaponExcAllGuns(WEAPON_COMBATBOOST))
|| (ammotype == AMMOTYPE_NBOMB && !invHasSingleWeaponExcAllGuns(WEAPON_NBOMB))
|| (ammotype == AMMOTYPE_REMOTE_MINE && !invHasSingleWeaponExcAllGuns(WEAPON_REMOTEMINE))
|| (ammotype == AMMOTYPE_PROXY_MINE && !invHasSingleWeaponExcAllGuns(WEAPON_PROXIMITYMINE))
|| (ammotype == AMMOTYPE_TIMED_MINE && !invHasSingleWeaponExcAllGuns(WEAPON_TIMEDMINE))
|| (ammotype == AMMOTYPE_KNIFE && !invHasSingleWeaponExcAllGuns(WEAPON_COMBATKNIFE))) {
ignore = false;
break;
}
}
}
if (ignore) {
return TICKOP_NONE;
}
} else if (obj->type == OBJTYPE_SHIELD) {
struct shieldobj *shield = (struct shieldobj *) prop->obj;
bool ignore = false;
if (shield->amount <= playerGetShieldFrac()) {
ignore = true;
} else if (g_Vars.normmplayerisrunning
&& g_MpSetup.scenario == MPSCENARIO_HOLDTHEBRIEFCASE
&& invHasBriefcase()) {
ignore = true;
}
if (ignore) {
return TICKOP_NONE;
}
}
if (g_Vars.currentplayer->vv_verta * M_BADTAU / 360.0f < -0.7852731347084f) {
if (g_Vars.currentplayer->magnetattracttime < 0) {
return TICKOP_NONE;
}
}
{
struct prop *playerprop = g_Vars.currentplayer->prop;
f32 xdiff = prop->pos.x - playerprop->pos.x;
f32 ydiff = prop->pos.y - playerprop->pos.y;
f32 zdiff = prop->pos.z - playerprop->pos.z;
f32 range;
bool usebigrange;
bool pickup;
u32 stack;
usebigrange = (obj->flags3 & OBJFLAG3_ONSHELF)
&& (cheatIsActive(CHEAT_SMALLJO) || cheatIsActive(CHEAT_PLAYASELVIS));
if (g_Vars.currentplayer->magnetattracttime >= 60) {
pickup = xdiff * xdiff + zdiff * zdiff <= 350 * 350 && ydiff >= -500 && ydiff <= 500;
} else {
if (usebigrange) {
range = 200 * 200;
} else {
range = 100 * 100;
}
pickup = xdiff * xdiff + zdiff * zdiff <= range && ydiff >= -200 && ydiff <= 200;
}
if (pickup
&& (obj->flags2 & OBJFLAG2_PICKUPWITHOUTLOS) == 0
&& !usebigrange
&& cdHasLineOfSight(&playerprop->pos, playerprop->rooms, &prop->pos, prop->rooms, 0x22, 0x1c) == 0) {
pickup = false;
}
if (pickup) {
return propPickupByPlayer(prop, true);
}
}
return TICKOP_NONE;
}
bool func0f0899dc(struct prop *prop, struct coord *arg1, f32 *arg2, f32 *arg3)
{
if (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK) {
struct defaultobj *obj = prop->obj;
Mtxf *matrix = model0001a60c(obj->model);
arg1->z = matrix->m[3][2];
if (arg1->z < 0) {
arg1->x = matrix->m[3][0];
arg1->y = matrix->m[3][1];
arg3[0] = 0;
arg3[1] = 0;
arg2[0] = 0;
arg2[1] = 0;
func0f067d88(obj->model, &arg2[1], &arg2[0], &arg3[1], &arg3[0]);
return true;
}
}
return false;
}
void modelFreeVertices(s32 vtxstoretype, struct model *model)
{
struct modelfiledata *modeldef = model->filedata;
struct modelnode *node = modeldef->rootnode;
while (node) {
u32 type = node->type & 0xff;
union modelrodata *rodata;
union modelrwdata *rwdata;
s32 newtype;
switch (type) {
case MODELNODETYPE_DL:
rodata = node->rodata;
rwdata = modelGetNodeRwData(model, node);
if (modelIsNodeNotTvscreen(modeldef, node)) {
if (rwdata->dl.vertices != rodata->dl.vertices) {
vtxstoreFree(vtxstoretype, rwdata->dl.vertices);
rwdata->dl.vertices = rodata->dl.vertices;
}
if ((u32)rwdata->dl.colours != ALIGN8((u32)rodata->dl.vertices + rodata->dl.numvertices * sizeof(struct gfxvtx))) {
if (vtxstoretype == VTXSTORETYPE_OBJVTX) {
newtype = VTXSTORETYPE_OBJCOL;
} else {
newtype = VTXSTORETYPE_CHRCOL;
}
vtxstoreFree(newtype, rwdata->dl.colours);
rwdata->dl.colours = (struct colour *)ALIGN8((u32)rodata->dl.vertices + rodata->dl.numvertices * sizeof(struct gfxvtx));
}
}
break;
case MODELNODETYPE_DISTANCE:
model0001c784(model, node);
break;
case MODELNODETYPE_TOGGLE:
model0001c7d0(model, node);
break;
case MODELNODETYPE_HEADSPOT:
modelAttachHead(model, node);
break;
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
}
struct prop *hatApplyToChr(struct hatobj *hat, struct chrdata *chr, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
if (chr->model->filedata->skel == &g_SkelChr) {
prop = objInit(&hat->base, filedata, prop, model);
if (prop && hat->base.model) {
f32 scale = hat->base.extrascale * (1.0f / 256.0f);
modelSetScale(hat->base.model, scale * hat->base.model->scale);
hat->base.model->attachedtomodel = chr->model;
hat->base.model->attachedtonode = modelGetPart(chr->model->filedata, MODELPART_CHR_0006);
propReparent(prop, chr->prop);
chr->weapons_held[2] = prop;
}
}
if (hat);
return prop;
}
void hatLoadAndApplyToChr(struct hatobj *hat, struct chrdata *chr)
{
u32 stack;
s32 modelnum = hat->base.modelnum;
setupLoadModeldef(modelnum);
hatApplyToChr(hat, chr, g_ModelStates[modelnum].filedata, NULL, NULL);
}
void hatAssignToChr(struct hatobj *hat, struct chrdata *chr)
{
hatLoadAndApplyToChr(hat, chr);
}
struct prop *hatCreateForChr(struct chrdata *chr, s32 modelnum, u32 flags)
{
struct modelfiledata *filedata;
struct prop *prop;
struct model *model;
struct hatobj *obj;
setupLoadModeldef(modelnum);
filedata = g_ModelStates[modelnum].filedata;
prop = propAllocate();
model = modelInstantiateWithoutAnim(filedata);
obj = hatCreate(prop == NULL, model == NULL, filedata);
if (prop == NULL) {
prop = propAllocate();
}
if (model == NULL) {
model = modelInstantiateWithoutAnim(filedata);
}
if (obj && prop && model) {
struct hatobj tmp = {
256, // extrascale
0, // hidden2
OBJTYPE_HAT, // type
0, // modelnum
0, // pad
OBJFLAG_ASSIGNEDTOCHR, // flags
0, // flags2
0, // flags3
NULL, // prop
NULL, // model
1, 0, 0, // realrot
0, 1, 0,
0, 0, 1,
0, // hidden
NULL, // geo
NULL, // projectile
0, // damage
1000, // maxdamage
0xff, 0xff, 0xff, 0x00, // shadecol
0xff, 0xff, 0xff, 0x00, // nextcol
0x0fff, // floorcol
0, // tiles
};
*obj = tmp;
obj->base.modelnum = modelnum;
obj->base.flags = flags | OBJFLAG_ASSIGNEDTOCHR;
obj->base.pad = chr->chrnum;
prop = hatApplyToChr(obj, chr, filedata, prop, model);
} else {
if (model) {
modelFree(model);
}
if (prop) {
propFree(prop);
prop = NULL;
}
if (obj) {
obj->base.prop = NULL;
obj->base.model = NULL;
}
}
return prop;
}
struct weaponobj *weaponCreate(bool musthaveprop, bool musthavemodel, struct modelfiledata *filedata)
{
s32 i;
struct weaponobj *tmp;
struct weaponobj *sp4c = NULL;
struct weaponobj *sp48 = NULL;
s32 sp44 = -1;
s32 sp40 = -1;
s32 sp3c = -1;
for (i = g_NextWeaponSlot; true; ) {
bool usable = false;
if (g_WeaponSlots[i].base.prop == NULL) {
if (!musthaveprop && !musthavemodel) {
sp44 = i;
break;
}
} else {
#if VERSION >= VERSION_NTSC_1_0
if ((g_WeaponSlots[i].base.hidden & OBJHFLAG_PROJECTILE) == 0
&& (g_WeaponSlots[i].base.hidden2 & OBJH2FLAG_CANREGEN) == 0
&& (g_WeaponSlots[i].base.flags & OBJFLAG_00800000) == 0)
#else
if ((g_WeaponSlots[i].base.hidden & OBJHFLAG_PROJECTILE) == 0
&& (g_WeaponSlots[i].base.hidden2 & OBJH2FLAG_CANREGEN) == 0)
#endif
{
if (g_WeaponSlots[i].base.prop->parent) {
if (g_WeaponSlots[i].base.hidden & OBJHFLAG_EMBEDDED) {
usable = true;
}
} else {
usable = true;
}
}
}
if (usable) {
if (!musthavemodel || func0f0b28d0(g_WeaponSlots[i].base.model, filedata)) {
if ((g_WeaponSlots[i].base.prop->flags & (PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONANYSCREENPREVTICK)) == 0 && sp40 < 0) {
sp40 = i;
}
if (sp3c < 0) {
sp3c = i;
}
}
}
i = (i + 1) % g_MaxWeaponSlots;
if (i == g_NextWeaponSlot) {
break;
}
}
if (sp44 >= 0) {
g_NextWeaponSlot = (sp44 + 1) % g_MaxWeaponSlots;
return &g_WeaponSlots[sp44];
}
tmp = (struct weaponobj *)setupFindObjForReuse(OBJTYPE_WEAPON, (struct defaultobj **)&sp4c, (struct defaultobj **)&sp48, musthaveprop, musthavemodel, filedata);
if (tmp) {
return tmp;
}
if (sp40 >= 0) {
if (g_WeaponSlots[sp40].base.prop) {
objFreePermanently(&g_WeaponSlots[sp40].base, true);
}
g_NextWeaponSlot = (sp40 + 1) % g_MaxWeaponSlots;
return &g_WeaponSlots[sp40];
}
if (sp4c) {
if (sp4c->base.prop) {
objFreePermanently(&sp4c->base, true);
}
return sp4c;
}
if (sp3c >= 0) {
if (g_WeaponSlots[sp3c].base.prop) {
objFreePermanently(&g_WeaponSlots[sp3c].base, true);
}
g_NextWeaponSlot = (sp3c + 1) % g_MaxWeaponSlots;
return &g_WeaponSlots[sp3c];
}
if (sp48) {
if (sp48->base.prop) {
objFreePermanently(&sp48->base, true);
}
return sp48;
}
return NULL;
}
struct weaponobj *func0f08a364(void)
{
return weaponCreate(false, false, NULL);
}
struct hatobj *hatCreate(bool musthaveprop, bool musthavemodel, struct modelfiledata *filedata)
{
s32 i;
struct hatobj *tmp;
struct hatobj *sp4c = NULL;
struct hatobj *sp48 = NULL;
s32 sp44 = -1;
s32 sp40 = -1;
s32 sp3c = -1;
for (i = g_NextHatSlot; true; ) {
if (g_HatSlots[i].base.prop == NULL) {
if (!musthaveprop && !musthavemodel) {
sp44 = i;
break;
}
} else if ((g_HatSlots[i].base.hidden & OBJHFLAG_PROJECTILE) == 0
&& g_HatSlots[i].base.prop->parent == NULL
&& (!musthavemodel || func0f0b28d0(g_HatSlots[i].base.model, filedata))) {
if ((g_HatSlots[i].base.prop->flags & (PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONANYSCREENPREVTICK)) == 0 && sp40 < 0) {
sp40 = i;
}
if (sp3c < 0) {
sp3c = i;
}
}
i = (i + 1) % g_MaxHatSlots;
if (i == g_NextHatSlot) {
break;
}
}
if (sp44 >= 0) {
g_NextHatSlot = (sp44 + 1) % g_MaxHatSlots;
return &g_HatSlots[sp44];
}
tmp = (struct hatobj *)setupFindObjForReuse(OBJTYPE_HAT, (struct defaultobj **)&sp4c, (struct defaultobj **)&sp48, musthaveprop, musthavemodel, filedata);
if (tmp) {
return tmp;
}
if (sp40 >= 0) {
if (g_HatSlots[sp40].base.prop) {
objFreePermanently(&g_HatSlots[sp40].base, true);
}
g_NextHatSlot = (sp40 + 1) % g_MaxHatSlots;
return &g_HatSlots[sp40];
}
if (sp4c) {
if (sp4c->base.prop) {
objFreePermanently(&sp4c->base, true);
}
return sp4c;
}
if (sp3c >= 0) {
if (g_HatSlots[sp3c].base.prop) {
objFreePermanently(&g_HatSlots[sp3c].base, true);
}
g_NextHatSlot = (sp3c + 1) % g_MaxHatSlots;
return &g_HatSlots[sp3c];
}
if (sp48) {
if (sp48->base.prop) {
objFreePermanently(&sp48->base, true);
}
return sp48;
}
return NULL;
}
struct hatobj *func0f08a6fc(void)
{
return hatCreate(false, false, NULL);
}
struct ammocrateobj *ammocrateAllocate(void)
{
s32 i;
// Try to find a free one
for (i = 0; i < g_MaxAmmoCrates; i++) {
if (g_AmmoCrates[i].base.prop == NULL) {
return &g_AmmoCrates[i];
}
}
// Find one that can be freed off-screen
for (i = 0; i < g_MaxAmmoCrates; i++) {
if ((g_AmmoCrates[i].base.hidden & OBJHFLAG_PROJECTILE) == 0
&& (g_AmmoCrates[i].base.hidden2 & OBJH2FLAG_CANREGEN) == 0
&& g_AmmoCrates[i].base.prop->parent == NULL
&& (g_AmmoCrates[i].base.prop->flags & (PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONANYSCREENPREVTICK)) == 0) {
objFreePermanently(&g_AmmoCrates[i].base, true);
return &g_AmmoCrates[i];
}
}
// Find one that can be freed on-screen
for (i = 0; i < g_MaxAmmoCrates; i++) {
if ((g_AmmoCrates[i].base.hidden & OBJHFLAG_PROJECTILE) == 0
&& (g_AmmoCrates[i].base.hidden2 & OBJH2FLAG_CANREGEN) == 0
&& g_AmmoCrates[i].base.prop->parent == NULL) {
objFreePermanently(&g_AmmoCrates[i].base, true);
return &g_AmmoCrates[i];
}
}
return NULL;
}
struct defaultobj *debrisAllocate(void)
{
s32 i;
// Try to find an unused slot
for (i = 0; i < g_MaxDebrisSlots; i++) {
if (g_DebrisSlots[i].prop == NULL) {
return &g_DebrisSlots[i];
}
}
// Try to find one that's landed and offscreen
for (i = 0; i < g_MaxDebrisSlots; i++) {
if ((g_DebrisSlots[i].hidden & OBJHFLAG_PROJECTILE) == 0
&& (g_DebrisSlots[i].hidden2 & OBJH2FLAG_CANREGEN) == 0
&& g_DebrisSlots[i].prop->parent == NULL
&& (g_DebrisSlots[i].prop->flags & (PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONANYSCREENPREVTICK)) == 0) {
objFreePermanently(&g_DebrisSlots[i], true);
return &g_DebrisSlots[i];
}
}
// Same as above but onscreen
for (i = 0; i < g_MaxDebrisSlots; i++) {
if ((g_DebrisSlots[i].hidden & OBJHFLAG_PROJECTILE) == 0
&& (g_DebrisSlots[i].hidden2 & OBJH2FLAG_CANREGEN) == 0
&& g_DebrisSlots[i].prop->parent == NULL) {
objFreePermanently(&g_DebrisSlots[i], true);
return &g_DebrisSlots[i];
}
}
return NULL;
}
void playerActivateRemoteMineDetonator(s32 playernum)
{
g_PlayersDetonatingMines |= 1 << playernum;
sndStart(var80095200, SFX_DETONATE, 0, -1, -1, -1, -1, -1);
bgunStartDetonateAnimation(playernum);
}
struct weaponobj *weaponFindChildByWeaponNum(s32 weaponnum, struct prop *prop)
{
struct weaponobj *weapon;
struct prop *child;
if (prop->type == PROPTYPE_WEAPON && weaponnum == prop->weapon->weaponnum) {
return prop->weapon;
}
child = prop->child;
while (child) {
weapon = weaponFindChildByWeaponNum(weaponnum, child);
if (weapon) {
return weapon;
}
child = child->next;
}
return NULL;
}
struct weaponobj *weaponFindLanded(s32 weaponnum)
{
struct prop *prop = g_Vars.activeprops;
while (prop) {
struct weaponobj *weapon = weaponFindChildByWeaponNum(weaponnum, prop);
if (weapon && (weapon->base.hidden & OBJHFLAG_PROJECTILE) == 0) {
return weapon;
}
prop = prop->next;
}
return NULL;
}
void weaponRegisterProxy(struct weaponobj *weapon)
{
s32 i;
for (i = 0; i < ARRAYCOUNT(g_Proxies); i++) {
if (g_Proxies[i] == NULL) {
g_Proxies[i] = weapon;
return;
}
}
}
void weaponUnregisterProxy(struct weaponobj *weapon)
{
s32 i;
for (i = 0; i < ARRAYCOUNT(g_Proxies); i++) {
if (g_Proxies[i] == weapon) {
g_Proxies[i] = NULL;
return;
}
}
}
void coordTriggerProxies(struct coord *pos, bool arg1)
{
s32 i;
for (i = 0; i < ARRAYCOUNT(g_Proxies); i++) {
struct weaponobj *weapon = g_Proxies[i];
if (weapon && weapon->timer240 == 1) {
f32 xdiff;
f32 ydiff;
f32 zdiff;
f32 range = 250 * 250;
if (weapon->weaponnum == WEAPON_DRAGON) {
range += range;
}
xdiff = pos->x - weapon->base.prop->pos.x;
ydiff = pos->y - weapon->base.prop->pos.y;
zdiff = pos->z - weapon->base.prop->pos.z;
if (xdiff * xdiff + ydiff * ydiff + zdiff * zdiff < range) {
if (weapon->weaponnum != WEAPON_GRENADE || arg1 == true) {
weapon->timer240 = 0;
}
}
}
}
}
void chrsTriggerProxies(void)
{
s32 numchrs = chrsGetNumSlots();
s32 i;
for (i = 0; i < numchrs; i++) {
struct chrdata *chr = &g_ChrSlots[i];
struct coord pos;
if (chr->model
#if VERSION >= VERSION_NTSC_1_0
&& (chr->hidden2 & CHRH2FLAG_0040)
&& (chr->chrflags & CHRCFLAG_HIDDEN) == 0
#else
&& (chr->hidden & CHRHFLAG_00000200)
#endif
&& chr->prop
&& (chr->prop->flags & PROPFLAG_ENABLED)
&& !chrIsDead(chr)) {
chrCalculatePosition(chr, &pos);
coordTriggerProxies(&pos, true);
}
if (chr);
}
}
void propweaponSetDual(struct weaponobj *weapon1, struct weaponobj *weapon2)
{
weapon1->dualweaponnum = weapon2->weaponnum;
weapon1->dualweapon = weapon2;
weapon2->dualweaponnum = weapon1->weaponnum;
weapon2->dualweapon = weapon1;
}
struct prop *func0f08adc8(struct weaponobj *weapon, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
prop = objInit(&weapon->base, filedata, prop, model);
if (prop) {
prop->type = PROPTYPE_WEAPON;
weaponSetGunfireVisible(prop, false, -1);
}
return prop;
}
struct prop *func0f08ae0c(struct weaponobj *weapon, struct modelfiledata *filedata)
{
struct prop *prop = objInitWithModelDef(&weapon->base, filedata);
if (prop) {
prop->type = PROPTYPE_WEAPON;
weaponSetGunfireVisible(prop, false, -1);
}
return prop;
}
bool chrEquipWeapon(struct weaponobj *weapon, struct chrdata *chr)
{
u32 stack1;
s32 handnum = (weapon->base.flags & OBJFLAG_WEAPON_LEFTHANDED) ? HAND_LEFT : HAND_RIGHT;
u32 stack2[2];
if (weapon->base.prop && weapon->base.model) {
if (g_Vars.mplayerisrunning) {
s32 playernum = mpPlayerGetIndex(chr);
weapon->base.hidden &= 0x0fffffff;
weapon->base.hidden |= (playernum << 28) & 0xf0000000;
}
if ((weapon->base.flags & OBJFLAG_WEAPON_AICANNOTUSE) == 0) {
if (chr->weapons_held[handnum]) {
if (chr->aibot) {
chr->weapons_held[handnum]->weapon->base.hidden |= OBJHFLAG_REAPABLE;
chr->weapons_held[handnum] = NULL;
} else {
return false;
}
}
if (!chr->weapons_held[handnum]) {
if (chr->model->filedata->skel == &g_SkelChr) {
weapon->base.model->attachedtomodel = chr->model;
if (handnum == HAND_RIGHT) {
weapon->base.model->attachedtonode = modelGetPart(chr->model->filedata, MODELPART_CHR_RIGHTHAND);
} else {
weapon->base.model->attachedtonode = modelGetPart(chr->model->filedata, MODELPART_CHR_LEFTHAND);
}
chr->weapons_held[handnum] = weapon->base.prop;
if ((weapon->base.flags & OBJFLAG_80000000) && chr->weapons_held[1 - handnum]) {
propweaponSetDual(weapon, chr->weapons_held[1 - handnum]->weapon);
}
} else if (chr->model->filedata->skel == &g_SkelSkedar) {
weapon->base.model->attachedtomodel = chr->model;
if (handnum == HAND_RIGHT) {
weapon->base.model->attachedtonode = modelGetPart(chr->model->filedata, MODELPART_SKEDAR_RIGHTHAND);
} else {
weapon->base.model->attachedtonode = modelGetPart(chr->model->filedata, MODELPART_SKEDAR_LEFTHAND);
}
chr->weapons_held[handnum] = weapon->base.prop;
if ((weapon->base.flags & OBJFLAG_80000000) && chr->weapons_held[1 - handnum]) {
propweaponSetDual(weapon, chr->weapons_held[1 - handnum]->weapon);
}
} else {
return false;
}
}
}
propReparent(weapon->base.prop, chr->prop);
} else {
return false;
}
return true;
}
struct prop *func0f08b108(struct weaponobj *weapon, struct chrdata *chr, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
prop = func0f08adc8(weapon, filedata, prop, model);
if (prop && weapon->base.model) {
f32 scale = weapon->base.extrascale * (1.0f / 256.0f);
modelSetScale(weapon->base.model, weapon->base.model->scale * scale);
if (!chrEquipWeapon(weapon, chr)) {
propFree(prop);
prop = NULL;
weapon->base.prop = NULL;
modelFree(weapon->base.model);
weapon->base.model = NULL;
}
} else {
if (prop) {
propFree(prop);
prop = NULL;
weapon->base.prop = NULL;
}
if (weapon->base.model) {
modelFree(weapon->base.model);
weapon->base.model = NULL;
}
}
return prop;
}
void func0f08b208(struct weaponobj *weapon, struct chrdata *chr)
{
u32 stack;
s32 modelnum = weapon->base.modelnum;
setupLoadModeldef(modelnum);
func0f08b108(weapon, chr, g_ModelStates[modelnum].filedata, 0, 0);
}
void func0f08b25c(struct weaponobj *weapon, struct chrdata *chr)
{
func0f08b208(weapon, chr);
}
struct autogunobj *laptopDeploy(s32 modelnum, struct gset *gset, struct chrdata *chr)
{
struct modelfiledata *filedata;
struct prop *prop;
struct model *model;
struct autogunobj *laptop = NULL;
s32 index;
if (g_Vars.normmplayerisrunning) {
index = mpPlayerGetIndex(chr);
} else {
index = playermgrGetPlayerNumByProp(chr->prop);
}
if (index >= 0 && index < g_MaxThrownLaptops) {
setupLoadModeldef(modelnum);
filedata = g_ModelStates[modelnum].filedata;
laptop = &g_ThrownLaptops[index];
if (laptop->base.prop) {
#if VERSION >= VERSION_NTSC_1_0
explosionCreateSimple(NULL, &laptop->base.prop->pos, laptop->base.prop->rooms, EXPLOSIONTYPE_LAPTOP, index);
#else
explosionCreateSimple(NULL, &laptop->base.prop->pos, laptop->base.prop->rooms, EXPLOSIONTYPE_LAPTOP, 0);
#endif
objFreePermanently(&laptop->base, true);
}
prop = propAllocate();
model = modelInstantiateWithoutAnim(filedata);
if (prop == NULL) {
prop = propAllocate();
}
if (model == NULL) {
model = modelInstantiateWithoutAnim(filedata);
}
if (laptop && prop && model) {
struct defaultobj tmp = {
256, // extrascale
0, // hidden2
OBJTYPE_AUTOGUN, // type
0, // modelnum
1, // pad
0, // flags
0, // flags2
0, // flags3
NULL, // prop
NULL, // model
1, 0, 0, // realrot
0, 1, 0,
0, 0, 1,
0, // hidden
NULL, // geo
NULL, // projectile
0, // damage
1000, // maxdamage
0xff, 0xff, 0xff, 0x00, // shadecol
0xff, 0xff, 0xff, 0x00, // nextcol
0x0fff, // floorcol
0, // tiles
};
laptop->base = tmp;
laptop->base.modelnum = modelnum;
prop = objInit(&laptop->base, filedata, prop, model);
laptop->targetpad = -1;
laptop->aimdist = 5000;
laptop->target = NULL;
laptop->targetteam = ~chr->team & 0xff;
laptop->nextchrtest = 0;
laptop->firecount = 0;
laptop->lastseebond60 = -1;
laptop->lastaimbond60 = -1;
laptop->allowsoundframe = -1;
laptop->firing = false;
laptop->yspeed = 0;
laptop->xspeed = 0;
laptop->barrelspeed = 0;
laptop->barrelrot = 0;
laptop->shotbondsum = 0;
if (chr->aibot) {
laptop->ammoquantity = botactTryRemoveAmmoFromReserve(chr->aibot, WEAPON_LAPTOPGUN, FUNC_PRIMARY, 200);
} else if (chr->prop->type == PROPTYPE_PLAYER) {
s32 qty;
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(playermgrGetPlayerNumByProp(chr->prop));
qty = bgunGetAmmoQtyForWeapon(WEAPON_LAPTOPGUN, FUNC_PRIMARY);
if (qty >= 200) {
laptop->ammoquantity = 200;
} else {
laptop->ammoquantity = qty;
}
if (cheatIsActive(CHEAT_UNLIMITEDAMMOLAPTOP)) {
laptop->ammoquantity = 255;
} else {
qty -= laptop->ammoquantity;
}
bgunSetAmmoQtyForWeapon(WEAPON_LAPTOPGUN, FUNC_PRIMARY, qty);
setCurrentPlayerNum(prevplayernum);
} else {
laptop->ammoquantity = 255;
}
laptop->beam = &g_ThrownLaptopBeams[index];
laptop->beam->age = -1;
laptop->yzero = 0;
laptop->xzero = 0;
laptop->yrot = 0;
laptop->xrot = 0;
laptop->ymaxleft = 12.56f;
laptop->ymaxright = -12.56f;
laptop->maxspeed = PALUPF(0.0697f);
prop->forcetick = true;
laptop->base.hidden |= OBJHFLAG_TAGGED;
laptop->base.flags |= OBJFLAG_THROWNLAPTOP | OBJFLAG_01000000 | OBJFLAG_20000000;
laptop->base.flags3 |= OBJFLAG3_INTERACTABLE | OBJFLAG3_08000000;
} else {
if (model) {
modelFree(model);
}
if (prop) {
propFree(prop);
}
laptop = NULL;
}
}
return laptop;
}
struct weaponobj *weaponCreateProjectileFromGset(s32 modelnum, struct gset *gset, struct chrdata *chr)
{
struct modelfiledata *modeldef;
struct prop *prop;
struct model *model;
struct weaponobj *weapon;
setupLoadModeldef(modelnum);
modeldef = g_ModelStates[modelnum].filedata;
prop = propAllocate();
model = modelInstantiateWithoutAnim(modeldef);
weapon = weaponCreate(prop == NULL, model == NULL, modeldef);
if (prop == NULL) {
prop = propAllocate();
}
if (model == NULL) {
model = modelInstantiateWithoutAnim(modeldef);
}
if (weapon && prop && model) {
struct weaponobj tmp = {
256, // extrascale
0, // hidden2
OBJTYPE_WEAPON, // type
0, // modelnum
-1, // pad
OBJFLAG_00000001, // flags
0, // flags2
0, // flags3
NULL, // prop
NULL, // model
1, 0, 0, // realrot
0, 1, 0,
0, 0, 1,
0, // hidden
NULL, // geo
NULL, // projectile
0, // damage
1000, // maxdamage
0xff, 0xff, 0xff, 0x00, // shadecol
0xff, 0xff, 0xff, 0x00, // nextcol
0x0fff, // floorcol
0, // tiles
0, // weaponnum
0, // unk5d
0, // unk5e
0, // gunfunc
0, // fadeouttimer60
-1, // dualweaponnum
-1, // timer240
NULL, // dualweapon
};
*weapon = tmp;
weapon->weaponnum = gset->weaponnum;
weapon->unk5d = gset->unk0639;
weapon->unk5e = gset->unk063a;
weapon->gunfunc = gset->weaponfunc;
// This switch is useless because everything uses the same case
switch (gset->weaponnum) {
case WEAPON_SUPERDRAGON:
case WEAPON_DEVASTATOR:
case WEAPON_ROCKETLAUNCHER:
case WEAPON_SLAYER:
case WEAPON_COMBATKNIFE:
case WEAPON_CROSSBOW:
case WEAPON_GRENADE:
case WEAPON_NBOMB:
case WEAPON_TIMEDMINE:
case WEAPON_PROXIMITYMINE:
case WEAPON_REMOTEMINE:
case WEAPON_ROCKETLAUNCHER_34:
default:
weapon->base.modelnum = modelnum;
prop = func0f08adc8(weapon, modeldef, prop, model);
if (g_Vars.mplayerisrunning) {
s32 index = mpPlayerGetIndex(chr);
weapon->base.hidden &= 0x0fffffff;
weapon->base.hidden |= ((index << 28) & 0xf0000000);
}
prop->forcetick = true;
break;
}
} else {
#if VERSION >= VERSION_NTSC_1_0
if (weapon) {
weapon->base.prop = NULL;
weapon->base.model = NULL;
}
#endif
weapon = NULL;
if (model) {
modelFree(model);
}
if (prop) {
propFree(prop);
}
}
return weapon;
}
struct weaponobj *weaponCreateProjectileFromWeaponNum(s32 modelnum, s32 weaponnum, struct chrdata *chr)
{
struct gset gset = {0};
gset.weaponnum = weaponnum;
return weaponCreateProjectileFromGset(modelnum, &gset, chr);
}
void weaponDeleteFromChr(struct chrdata *chr, s32 hand)
{
if (chr && chr->weapons_held[hand]) {
struct defaultobj *obj = chr->weapons_held[hand]->obj;
obj->hidden |= OBJHFLAG_REAPABLE;
}
}
struct prop *weaponCreateForChr(struct chrdata *chr, s32 modelnum, s32 weaponnum, u32 flags, struct weaponobj *obj, struct modelfiledata *filedata)
{
struct prop *prop;
struct model *model;
if (filedata == NULL) {
setupLoadModeldef(modelnum);
filedata = g_ModelStates[modelnum].filedata;
}
prop = propAllocate();
model = modelInstantiateWithoutAnim(filedata);
if (obj == NULL) {
obj = weaponCreate(prop == NULL, model == NULL, filedata);
}
if (prop == NULL) {
prop = propAllocate();
}
if (model == NULL) {
model = modelInstantiateWithoutAnim(filedata);
}
if (obj && prop && model) {
struct weaponobj tmp = {
256, // extrascale
0, // hidden2
OBJTYPE_WEAPON, // type
0, // modelnum
0, // pad
OBJFLAG_00000001 | OBJFLAG_ASSIGNEDTOCHR, // flags
0, // flags2
0, // flags3
NULL, // prop
NULL, // model
1, 0, 0, // realrot
0, 1, 0,
0, 0, 1,
0, // hidden
NULL, // geo
NULL, // projectile
0, // damage
1000, // maxdamage
0xff, 0xff, 0xff, 0x00, // shadecol
0xff, 0xff, 0xff, 0x00, // nextcol
0x0fff, // floorcol
0, // tiles
0, // weaponnum
0, // unk5d
0, // unk5e
0, // gunfunc
0, // fadeouttimer60
-1, // dualweaponnum
-1, // timer240
NULL, // dualweapon
};
*obj = tmp;
obj->weaponnum = weaponnum;
obj->gunfunc = FUNC_PRIMARY;
obj->unk5e = 0;
obj->unk5d = 0;
obj->base.modelnum = modelnum;
obj->base.flags = flags | OBJFLAG_ASSIGNEDTOCHR;
obj->base.pad = chr->chrnum;
prop = func0f08b108(obj, chr, filedata, prop, model);
} else {
if (model) {
modelFree(model);
}
if (prop) {
propFree(prop);
prop = NULL;
}
if (obj) {
obj->base.prop = NULL;
obj->base.model = NULL;
}
}
return prop;
}
struct prop *chrGiveWeapon(struct chrdata *chr, s32 model, s32 weaponnum, u32 flags)
{
return weaponCreateForChr(chr, model, weaponnum, flags, NULL, NULL);
}
struct prop *chrGiveWeaponWithAutoModel(struct chrdata *chr, s32 weaponnum, u32 flags)
{
return weaponCreateForChr(chr, playermgrGetModelOfWeapon(weaponnum), weaponnum, flags, NULL, NULL);
}
s32 weaponTestForPickup(struct prop *prop)
{
return objTestForPickup(prop);
}
void weaponSetGunfireVisible(struct prop *prop, bool visible, s16 room)
{
u32 stack[4];
bool flash = false;
struct defaultobj *obj = prop->obj;
struct modelnode *node1;
struct modelnode *node2;
union modelrwdata *rwdata1;
union modelrwdata *rwdata2;
if (obj && obj->type == OBJTYPE_WEAPON) {
struct model *model = obj->model;
if (model && model->filedata->skel == &g_SkelChrGun) {
node1 = modelGetPart(model->filedata, MODELPART_CHRGUN_GUNFIRE);
if (node1) {
rwdata1 = modelGetNodeRwData(model, node1);
rwdata1->chrgunfire.visible = visible;
if (visible) {
flash = true;
}
}
node2 = modelGetPart(model->filedata, MODELPART_CHRGUN_0002);
if (node2) {
rwdata2 = modelGetNodeRwData(model, node2);
rwdata2->toggle.visible = visible;
if (visible) {
flash = true;
}
}
}
}
if (flash && room != -1) {
roomAdjustLighting(room, 48, 128);
}
}
bool weaponIsGunfireVisible(struct prop *prop)
{
struct defaultobj *obj = prop->obj;
struct model *model = obj->model;
struct modelnode *node;
if (model && model->filedata->skel == &g_SkelChrGun) {
node = modelGetPart(model->filedata, MODELPART_CHRGUN_GUNFIRE);
if (node) {
struct modelrwdata_chrgunfire *rwdata = modelGetNodeRwData(model, node);
return rwdata->visible;
}
node = modelGetPart(model->filedata, MODELPART_CHRGUN_0002);
if (node) {
struct modelrwdata_toggle *rwdata = modelGetNodeRwData(model, node);
return rwdata->visible;
}
}
return false;
}
s32 hatGetType(struct prop *prop)
{
return -1;
}
bool doorIsUnlocked(struct prop *playerprop, struct prop *doorprop)
{
struct doorobj *door = doorprop->door;
bool canopen = false;
if (door->keyflags == 0) {
canopen = true;
} else if (invHasKeyFlags(door->keyflags)) {
canopen = true;
} else {
if (posIsInFrontOfDoor(&playerprop->pos, door)) {
if ((door->base.flags2 & OBJFLAG2_LOCKEDBACK)
&& (door->base.flags2 & OBJFLAG2_LOCKEDFRONT) == 0) {
canopen = true;
}
} else {
if ((door->base.flags2 & OBJFLAG2_LOCKEDBACK) == 0
&& (door->base.flags2 & OBJFLAG2_LOCKEDFRONT)) {
canopen = true;
}
}
}
if (!doorIsPadlockFree(door)) {
canopen = false;
}
return canopen;
}
bool doorIsPosInRange(struct doorobj *door, struct coord *pos, f32 distance, bool isbike)
{
struct coord range;
if ((door->doorflags & DOORFLAG_LONGRANGE) || isbike) {
distance += 400;
} else {
distance += 200;
}
range.x = distance;
range.y = 0;
range.z = 0;
if (door->doortype == DOORTYPE_VERTICAL
|| door->doortype == DOORTYPE_SLIDING
|| door->doortype == DOORTYPE_SWINGING) {
if (func0f0678f8(pos, &range, door->base.pad)) {
return true;
}
}
return false;
}
bool doorIsObjInRange(struct doorobj *door, struct defaultobj *obj, bool isbike)
{
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
f32 scale = 0;
if (scale < bbox->xmin) {
scale = bbox->xmin;
}
if (scale < -bbox->xmax) {
scale = -bbox->xmax;
}
if (scale < bbox->ymin) {
scale = bbox->ymin;
}
if (scale < -bbox->ymax) {
scale = -bbox->ymax;
}
if (scale < bbox->zmin) {
scale = bbox->zmin;
}
if (scale < -bbox->zmax) {
scale = -bbox->zmax;
}
scale *= obj->model->scale;
return doorIsPosInRange(door, &obj->prop->pos, scale, isbike);
}
/**
* @bug: result should be an integer. Its value can only be 0.0f or 1.0f.
* Nothing bad comes from this, but it uses unnecessary float conversions.
*/
bool vectorIsInFrontOfDoor(struct doorobj *door, struct coord *vector)
{
f32 result;
struct pad pad;
padUnpack(door->base.pad, PADFIELD_NORMAL, &pad);
result = vector->f[0] * pad.normal.f[0] + vector->f[1] * pad.normal.f[1] + vector->f[2] * pad.normal.f[2] >= 0.0f;
if (door->doorflags & DOORFLAG_FLIP) {
result = !result;
}
return result;
}
/**
* Return true if there are no chrs or grabbed/mounted objects within opening
* range of the door (for automatic doors).
*/
bool doorIsRangeEmpty(struct doorobj *door)
{
u32 stack;
s16 *propnumptr;
s16 propnums[256];
roomGetProps(door->base.prop->rooms, propnums, 256);
propnumptr = propnums;
while (*propnumptr >= 0) {
struct prop *prop = &g_Vars.props[*propnumptr];
if (prop->type == PROPTYPE_CHR || prop->type == PROPTYPE_PLAYER) {
if (doorIsPosInRange(door, &prop->pos, 0, false)) {
return false;
}
} else if (prop->type == PROPTYPE_OBJ) {
if (prop->obj->hidden & (OBJHFLAG_MOUNTED | OBJHFLAG_GRABBED)
&& doorIsObjInRange(door, prop->obj, (prop->obj->hidden & OBJHFLAG_MOUNTED) != 0)) {
return false;
}
}
propnumptr++;
}
return true;
}
/**
* Find automatic doors and open them if the player is close to them.
*/
void doorsCheckAutomatic(void)
{
struct prop *doorprop;
s16 *propnumptr;
s16 propnums[256];
roomGetProps(g_Vars.currentplayer->prop->rooms, propnums, 256);
propnumptr = propnums;
while (*propnumptr >= 0) {
doorprop = &g_Vars.props[*propnumptr];
if (doorprop->type == PROPTYPE_DOOR) {
struct doorobj *door = doorprop->door;
if ((door->doorflags & DOORFLAG_AUTOMATIC)
&& doorIsUnlocked(g_Vars.currentplayer->prop, doorprop)
&& (door->mode == DOORMODE_CLOSING || (door->mode == DOORMODE_IDLE && door->frac <= 0))) {
bool canopen = false;
struct defaultobj *obj = NULL;
bool isbike = false;
struct doorobj *sibling;
if (g_Vars.currentplayer->bondmovemode == MOVEMODE_GRAB) {
obj = bmoveGetGrabbedProp()->obj;
} else if (g_Vars.currentplayer->bondmovemode == MOVEMODE_BIKE) {
obj = bmoveGetHoverbike()->obj;
isbike = true;
}
if ((posIsInFrontOfDoor(&g_Vars.currentplayer->prop->pos, door) != vectorIsInFrontOfDoor(door, &g_Vars.currentplayer->bond2.unk00)) != 0) {
canopen = doorIsPosInRange(door, &g_Vars.currentplayer->prop->pos, 0, isbike);
if (!canopen && obj) {
canopen = doorIsObjInRange(door, obj, isbike);
}
}
sibling = door->sibling;
while (sibling && sibling != door && !canopen) {
if ((posIsInFrontOfDoor(&g_Vars.currentplayer->prop->pos, sibling) != vectorIsInFrontOfDoor(sibling, &g_Vars.currentplayer->bond2.unk00)) != 0) {
canopen = doorIsPosInRange(sibling, &g_Vars.currentplayer->prop->pos, 0, isbike);
if (!canopen && obj) {
canopen = doorIsObjInRange(door, obj, isbike);
}
}
sibling = sibling->sibling;
}
if (canopen) {
doorsRequestMode(door, DOORMODE_OPENING);
}
}
}
propnumptr++;
}
}
void func0f08c424(struct doorobj *door, Mtxf *matrix)
{
mtx3ToMtx4(door->base.realrot, matrix);
mtx4SetTranslation(&door->base.prop->pos, matrix);
if (door->doorflags & DOORFLAG_FLIP) {
mtx00015edc(-1, matrix);
}
}
void doorGetBbox(struct doorobj *door, struct modelrodata_bbox *dst)
{
struct modelrodata_bbox *bbox = modelFindBboxRodata(door->base.model);
*dst = *bbox;
if (door->doorflags & DOORFLAG_0004) {
if (door->doortype == DOORTYPE_VERTICAL) {
dst->ymax = bbox->ymax + (bbox->ymin - bbox->ymax) * door->frac;
} else {
dst->xmin = bbox->xmin + (bbox->xmax - bbox->xmin) * door->frac;
}
}
}
void doorUpdateTiles(struct doorobj *door)
{
struct modelrodata_bbox bbox;
Mtxf spdc;
struct geoblock *geo;
Mtxf sp98;
struct coord sp8c;
struct coord sp80;
struct pad pad;
if (door->doorflags & DOORFLAG_0080) {
door->base.prop->pos.x = door->unk98.x * door->frac + door->startpos.x;
door->base.prop->pos.y = door->unk98.y * door->frac + door->startpos.y;
door->base.prop->pos.z = door->unk98.z * door->frac + door->startpos.z;
} else if (door->doortype == DOORTYPE_SWINGING
|| door->doortype == DOORTYPE_AZTECCHAIR
|| door->doortype == DOORTYPE_HULL) {
// @bug: LOOK is not loaded but is used below
// It doesn't appear to make any difference though
padUnpack(door->base.pad, PADFIELD_POS | PADFIELD_UP | PADFIELD_NORMAL | PADFIELD_BBOX, &pad);
sp8c.x = pad.pos.x + pad.up.x * pad.bbox.ymin;
sp8c.y = pad.pos.y + pad.up.y * pad.bbox.ymin;
sp8c.z = pad.pos.z + pad.up.z * pad.bbox.ymin;
if (door->doortype == DOORTYPE_AZTECCHAIR) {
sp8c.x += pad.normal.x * pad.bbox.xmax;
sp8c.y += pad.normal.y * pad.bbox.xmax;
sp8c.z += pad.normal.z * pad.bbox.xmax;
} else if (door->doortype == DOORTYPE_HULL) {
sp8c.x += pad.look.x * pad.bbox.zmin;
sp8c.y += pad.look.y * pad.bbox.zmin;
sp8c.z += pad.look.z * pad.bbox.zmin;
} else {
if (door->base.flags & OBJFLAG_DOOR_OPENTOFRONT) {
sp8c.x += pad.normal.x * pad.bbox.xmax;
sp8c.y += pad.normal.y * pad.bbox.xmax;
sp8c.z += pad.normal.z * pad.bbox.xmax;
} else {
sp8c.x += pad.normal.x * pad.bbox.xmin;
sp8c.y += pad.normal.y * pad.bbox.xmin;
sp8c.z += pad.normal.z * pad.bbox.xmin;
}
}
sp80.x = door->startpos.x - sp8c.x;
sp80.y = door->startpos.y - sp8c.y;
sp80.z = door->startpos.z - sp8c.z;
mtx3ToMtx4(door->mtx98, &spdc);
mtx4LoadTranslation(&sp80, &sp98);
mtx4MultMtx4InPlace(&sp98, &spdc);
if (door->doortype == DOORTYPE_AZTECCHAIR) {
if (door->base.flags & OBJFLAG_DOOR_OPENTOFRONT) {
mtx4LoadZRotation(M_BADTAU - door->frac * 0.017450513318181f, &sp98);
} else {
mtx4LoadZRotation(door->frac * 0.017450513318181f, &sp98);
}
} else if (door->doortype == DOORTYPE_HULL) {
if (door->base.flags & OBJFLAG_DOOR_OPENTOFRONT) {
guRotateF(sp98.m, 360 - door->frac, pad.normal.x, pad.normal.y, pad.normal.z);
} else {
guRotateF(sp98.m, door->frac, pad.normal.x, pad.normal.y, pad.normal.z);
}
} else {
if (door->base.flags & OBJFLAG_DOOR_OPENTOFRONT) {
mtx4LoadYRotation(M_BADTAU - door->frac * 0.017450513318181f, &sp98);
} else {
mtx4LoadYRotation(door->frac * 0.017450513318181f, &sp98);
}
}
mtx4MultMtx4InPlace(&sp98, &spdc);
mtx4LoadTranslation(&sp8c, &sp98);
mtx4MultMtx4InPlace(&sp98, &spdc);
mtx4ToMtx3(&spdc, door->base.realrot);
door->base.prop->pos.x = spdc.m[3][0];
door->base.prop->pos.y = spdc.m[3][1];
door->base.prop->pos.z = spdc.m[3][2];
}
doorGetBbox(door, &bbox);
if (door->frac >= door->perimfrac) {
door->base.hidden |= OBJHFLAG_DOORPERIMDISABLED;
return;
}
geo = door->base.geoblock;
door->base.hidden &= ~OBJHFLAG_DOORPERIMDISABLED;
if ((door->doorflags & DOORFLAG_0020) == 0) {
func0f08c424(door, &spdc);
objCalculateGeoBlockFromBboxAndMtx(&bbox, &spdc, geo);
if (door->doortype == DOORTYPE_VERTICAL) {
door->doorflags |= DOORFLAG_0020;
}
}
if (door->doortype == DOORTYPE_VERTICAL) {
geo->ymin = door->startpos.y + objGetRotatedLocalYMinByMtx3(&bbox, door->base.realrot);
} else if (door->doortype == DOORTYPE_FALLAWAY) {
geo->ymin = door->base.prop->pos.y - 10000;
} else if (door->doorflags & DOORFLAG_0001) {
geo->ymin -= 1000;
}
if ((door->doortype == DOORTYPE_EYE && door->frac > 0.4f * door->maxfrac)
|| (door->doortype == DOORTYPE_IRIS && door->frac > 0.4f * door->maxfrac)) {
geo->ymax = geo->ymin + 50;
} else if (door->doortype == DOORTYPE_FALLAWAY) {
geo->ymax = door->base.prop->pos.y + 1000;
} else if (door->doorflags & DOORFLAG_0001) {
geo->ymax += 1000;
}
}
#define NEXT1() (j + 1) % 4
#define NEXT2() (j + 2) % 4
#define NEXT3() (j + 3) % 4
void door0f08cb20(struct doorobj *door, struct gfxvtx *src, struct gfxvtx *dst, s32 numvertices)
{
s32 i;
s32 j;
s16 ref;
struct modelrodata_bbox bbox;
s32 stack[5];
doorGetBbox(door, &bbox);
if (door->doortype == DOORTYPE_VERTICAL) {
ref = ceilf(bbox.ymax);
} else {
ref = floorf(bbox.xmin);
}
for (i = 0; i < numvertices / 4; i++) {
struct gfxvtx *psrc = &src[i * 4];
struct gfxvtx *pdst = &dst[i * 4];
for (j = 0; j < 4; j++) {
if (j == 0) {
pdst[j] = psrc[j];
pdst[NEXT1()] = psrc[NEXT1()];
pdst[NEXT2()] = psrc[NEXT2()];
pdst[NEXT3()] = psrc[NEXT3()];
if (1);
}
if (door->doortype == DOORTYPE_VERTICAL) {
if (psrc[j].y >= ref) {
if (psrc[NEXT1()].x == psrc[j].x && psrc[NEXT1()].z == psrc[j].z && psrc[NEXT1()].y != psrc[j].y) {
pdst[j].s = psrc[j].s + (psrc[j].y - ref) * (psrc[NEXT1()].s - psrc[j].s) / (psrc[j].y - psrc[NEXT1()].y);
pdst[j].t = psrc[j].t + (psrc[j].y - ref) * (psrc[NEXT1()].t - psrc[j].t) / (psrc[j].y - psrc[NEXT1()].y);
} else if (psrc[NEXT2()].x == psrc[j].x && psrc[NEXT2()].z == psrc[j].z && psrc[NEXT2()].y != psrc[j].y) {
pdst[j].s = psrc[j].s + (psrc[j].y - ref) * (psrc[NEXT2()].s - psrc[j].s) / (psrc[j].y - psrc[NEXT2()].y);
pdst[j].t = psrc[j].t + (psrc[j].y - ref) * (psrc[NEXT2()].t - psrc[j].t) / (psrc[j].y - psrc[NEXT2()].y);
} else if (psrc[NEXT3()].x == psrc[j].x && psrc[NEXT3()].z == psrc[j].z && psrc[NEXT3()].y != psrc[j].y) {
pdst[j].s = psrc[j].s + (psrc[j].y - ref) * (psrc[NEXT3()].s - psrc[j].s) / (psrc[j].y - psrc[NEXT3()].y);
pdst[j].t = psrc[j].t + (psrc[j].y - ref) * (psrc[NEXT3()].t - psrc[j].t) / (psrc[j].y - psrc[NEXT3()].y);
}
pdst[j].y = ref;
}
} else {
if (psrc[j].x <= ref) {
if (psrc[NEXT1()].y == psrc[j].y && psrc[NEXT1()].z == psrc[j].z && psrc[NEXT1()].x != psrc[j].x) {
pdst[j].s = psrc[j].s + (ref - psrc[j].x) * (psrc[NEXT1()].s - psrc[j].s) / (psrc[NEXT1()].x - psrc[j].x);
pdst[j].t = psrc[j].t + (ref - psrc[j].x) * (psrc[NEXT1()].t - psrc[j].t) / (psrc[NEXT1()].x - psrc[j].x);
} else if (psrc[NEXT2()].y == psrc[j].y && psrc[NEXT2()].z == psrc[j].z && psrc[NEXT2()].x != psrc[j].x) {
pdst[j].s = psrc[j].s + (ref - psrc[j].x) * (psrc[NEXT2()].s - psrc[j].s) / (psrc[NEXT2()].x - psrc[j].x);
pdst[j].t = psrc[j].t + (ref - psrc[j].x) * (psrc[NEXT2()].t - psrc[j].t) / (psrc[NEXT2()].x - psrc[j].x);
} else if (psrc[NEXT3()].y == psrc[j].y && psrc[NEXT3()].z == psrc[j].z && psrc[NEXT3()].x != psrc[j].x) {
pdst[j].s = psrc[j].s + (ref - psrc[j].x) * (psrc[NEXT3()].s - psrc[j].s) / (psrc[NEXT3()].x - psrc[j].x);
pdst[j].t = psrc[j].t + (ref - psrc[j].x) * (psrc[NEXT3()].t - psrc[j].t) / (psrc[NEXT3()].x - psrc[j].x);
}
pdst[j].x = ref;
}
}
}
}
}
void func0f08d3dc(struct doorobj *door)
{
func0f069b4c(&door->base);
if (door->doorflags & DOORFLAG_0004) {
struct modelnode *node = func0f0687e4(door->base.model);
union modelrodata *rodata = node->rodata;
union modelrwdata *rwdata = modelGetNodeRwData(door->base.model, node);
rwdata->dl.vertices = gfxAllocateVertices(rodata->dl.numvertices);
door0f08cb20(door, rodata->dl.vertices, rwdata->dl.vertices, rodata->dl.numvertices);
}
}
void func0f08d460(struct doorobj *door)
{
if ((door->doorflags & (DOORFLAG_0004 | DOORFLAG_0080)) == (DOORFLAG_0004 | DOORFLAG_0080)) {
struct modelnode *node = func0f0687e4(door->base.model);
union modelrodata *rodata = node->rodata;
union modelrwdata *rwdata = modelGetNodeRwData(door->base.model, node);
if (rwdata->dl.vertices != door->unka4) {
door0f08cb20(door, rodata->dl.vertices, door->unka4, rodata->dl.numvertices);
}
rwdata->dl.vertices = door->unka4;
}
}
void doorActivatePortal(struct doorobj *door)
{
if (door->portalnum >= 0) {
portalSetOpen(door->portalnum, true);
}
}
void doorDeactivatePortal(struct doorobj *door)
{
if (door->portalnum >= 0) {
portalSetOpen(door->portalnum, false);
}
}
struct prop *doorInit(struct doorobj *door, struct coord *pos, Mtxf *mtx, s16 *rooms, struct coord *coord, struct coord *centre)
{
struct prop *prop;
union modelrodata *rodata;
Mtxf sp38;
s16 sp28[8];
door->base.flags |= OBJFLAG_00000100;
prop = objInitWithAutoModel(&door->base);
if (prop != NULL) {
switch (door->doortype) {
case DOORTYPE_SLIDING:
case DOORTYPE_FLEXI1:
case DOORTYPE_FLEXI2:
case DOORTYPE_FLEXI3:
case DOORTYPE_VERTICAL:
case DOORTYPE_FALLAWAY:
case DOORTYPE_LASER:
door->doorflags |= DOORFLAG_0080;
break;
}
mtx4Copy(mtx, &sp38);
mtx00015f04(g_ModelStates[door->base.modelnum].scale * (1.0f / 4096.0f), &sp38);
mtx4ToMtx3(&sp38, door->base.realrot);
door->frac = (door->base.flags & OBJFLAG_DOOR_KEEPOPEN) ? door->maxfrac : 0;
door->fracspeed = 0;
door->mode = DOORMODE_IDLE;
door->glasshits = 0;
door->portalnum = -1;
door->startpos.x = centre->x;
door->startpos.y = centre->y;
door->startpos.z = centre->z;
if (door->doorflags & DOORFLAG_0080) {
door->unk98.x = coord->x;
door->unk98.y = coord->y;
door->unk98.z = coord->z;
if (door->doorflags & DOORFLAG_0004) {
struct modelnode *node = func0f0687e4(door->base.model);
rodata = node->rodata;
door->unka4 = mempAlloc(ALIGN16(rodata->dl.numvertices * sizeof(struct gfxvtx)), MEMPOOL_STAGE);
} else {
door->unka4 = NULL;
}
} else {
mtx4ToMtx3(&sp38, door->mtx98);
}
func0f065e74(pos, rooms, centre, sp28);
prop->type = PROPTYPE_DOOR;
prop->door = door;
prop->pos.x = centre->x;
prop->pos.y = centre->y;
prop->pos.z = centre->z;
propDeregisterRooms(prop);
roomsCopy(sp28, prop->rooms);
doorUpdateTiles(door);
func0f069c70(&door->base, false, true);
func0f08d3dc(door);
door->base.shadecol[0] = door->base.nextcol[0];
door->base.shadecol[1] = door->base.nextcol[1];
door->base.shadecol[2] = door->base.nextcol[2];
door->base.shadecol[3] = door->base.nextcol[3];
}
if (door);
if (door);
return prop;
}
void doorPlayOpeningSound(s32 soundtype, struct prop *prop)
{
s32 sound1 = 0;
s32 sound2 = 0;
s32 sound3 = 0;
func0f0926bc(prop, 12, 0xffff);
if (g_Vars.in_cutscene
&& (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_DOOR)
&& (prop->obj->flags3 & OBJFLAG3_AUTOCUTSCENESOUNDS) == 0) {
return;
}
switch (soundtype) {
case 28: sound1 = SFX_DOOR_8007; break;
case 1: sound1 = SFX_DOOR_801A; sound2 = SFX_DOOR_801B; break;
case 29: sound1 = SFX_DOOR_8015; sound2 = SFX_DOOR_801D; break;
case 2: sound1 = SFX_DOOR_801A; sound2 = SFX_DOOR_801C; break;
case 3: sound1 = SFX_DOOR_8014; sound2 = SFX_DOOR_8016; break;
case 4: sound1 = SFX_DOOR_801E; sound2 = SFX_DOOR_8020; break;
case 5: sound1 = SFX_DOOR_8001; break;
case 6: sound1 = SFX_DOOR_8004; break;
case 7: sound1 = SFX_DOOR_8005; break;
case 8: sound1 = SFX_DOOR_800A; sound2 = SFX_DOOR_8008; break;
case 9: sound1 = SFX_DOOR_8004; sound2 = SFX_DOOR_800B; break;
case 10: sound1 = SFX_DOOR_800C; break;
case 11: sound1 = SFX_DOOR_800E; break;
case 12: sound1 = SFX_DOOR_8010; break;
case 13: sound1 = SFX_DOOR_8012; break;
case 30: sound1 = SFX_DOOR_816B; sound2 = SFX_DOOR_81AA; break;
case 14: sound1 = SFX_DOOR_8017; sound2 = SFX_DOOR_8019; break;
case 15: sound1 = SFX_DOOR_8022; break;
case 25: sound1 = SFX_DOOR_81B8; break;
case 16: sound1 = SFX_DOOR_8026; break;
case 17: sound1 = SFX_DOOR_801E; break;
case 18:
sound1 = SFX_DOOR_81B0;
sound2 = SFX_DOOR_8014;
sound3 = SFX_DOOR_8016;
break;
case 19: sound1 = SFX_DOOR_81AE; sound2 = SFX_DOOR_81B3; break;
case 26: sound1 = SFX_DOOR_042C; sound2 = SFX_DOOR_042B; break;
case 20: sound1 = SFX_DOOR_81B1; sound2 = SFX_DOOR_81B6; break;
case 21: sound1 = SFX_DOOR_81A8; sound2 = SFX_DOOR_81AA; break;
case 32: sound1 = SFX_DOOR_81AB; sound2 = SFX_DOOR_81AD; break;
case 31: sound1 = SFX_DOOR_81AB; sound2 = SFX_DOOR_81B4; break;
case 22: sound1 = SFX_DOOR_81AE; sound2 = SFX_DOOR_81B5; break;
case 23: sound1 = SFX_DOOR_80AC; sound2 = SFX_DOOR_80AE; break;
case 24: sound1 = SFX_DOOR_816B; sound2 = SFX_DOOR_816C; break;
case 27: sound1 = SFX_DOOR_8014; sound2 = SFX_DOOR_042B; break;
}
if (sound1) {
#if VERSION >= VERSION_NTSC_1_0
propsnd0f0939f8(NULL, prop, sound1, -1,
-1, 1024, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#else
propsnd0f0939f8(NULL, prop, sound1, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#endif
}
if (sound2) {
propsnd0f0939f8(NULL, prop, sound2, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
}
if (sound3) {
propsnd0f0939f8(NULL, prop, sound3, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
}
}
/**
* This is identical to the function above but with less cases.
*/
void doorPlayClosingSound(s32 soundtype, struct prop *prop)
{
s32 sound1 = 0;
s32 sound2 = 0;
s32 sound3 = 0;
func0f0926bc(prop, 12, 0xffff);
if (g_Vars.in_cutscene
&& (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_DOOR)
&& (prop->obj->flags3 & OBJFLAG3_AUTOCUTSCENESOUNDS) == 0) {
return;
}
switch (soundtype) {
case 28: sound1 = SFX_DOOR_8007; break;
case 1: sound1 = SFX_DOOR_801A; sound2 = SFX_DOOR_801B; break;
case 29: sound1 = SFX_DOOR_8015; sound2 = SFX_DOOR_801D; break;
case 2: sound1 = SFX_DOOR_801A; sound2 = SFX_DOOR_801C; break;
case 3: sound1 = SFX_DOOR_8014; sound2 = SFX_DOOR_8016; break;
case 4: sound1 = SFX_DOOR_801E; sound2 = SFX_DOOR_8020; break;
case 5: sound1 = SFX_DOOR_8001; break;
case 8: sound1 = SFX_DOOR_800A; sound2 = SFX_DOOR_8008; break;
case 9: sound1 = SFX_DOOR_8004; sound2 = SFX_DOOR_800B; break;
case 10: sound1 = SFX_DOOR_800C; break;
case 30: sound1 = SFX_DOOR_816B; sound2 = SFX_DOOR_81AA; break;
case 14: sound1 = SFX_DOOR_8017; sound2 = SFX_DOOR_8019; break;
case 15: sound1 = SFX_DOOR_8022; break;
case 25: sound1 = SFX_DOOR_81B8; break;
case 16: sound1 = SFX_DOOR_8026; break;
case 17: sound1 = SFX_DOOR_801E; break;
case 18:
sound1 = SFX_DOOR_81B0;
sound2 = SFX_DOOR_8014;
sound3 = SFX_DOOR_8016;
break;
case 23: sound1 = SFX_DOOR_80AC; sound2 = SFX_DOOR_80AE; break;
case 24: sound1 = SFX_DOOR_816B; sound2 = SFX_DOOR_816C; break;
}
if (sound1) {
#if VERSION >= VERSION_NTSC_1_0
propsnd0f0939f8(NULL, prop, sound1, -1,
-1, 1024, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#else
propsnd0f0939f8(NULL, prop, sound1, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#endif
}
if (sound2) {
propsnd0f0939f8(NULL, prop, sound2, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
}
if (sound3) {
propsnd0f0939f8(NULL, prop, sound3, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
}
}
void doorPlayOpenedSound(s32 soundtype, struct prop *prop)
{
s32 sound = 0;
func0f0926bc(prop, 12, 0xffff);
if (g_Vars.in_cutscene
&& (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_DOOR)
&& (prop->obj->flags3 & OBJFLAG3_AUTOCUTSCENESOUNDS) == 0) {
return;
}
switch (soundtype) {
case 28: sound = SFX_DOOR_801A; break;
case 1: sound = SFX_DOOR_801A; break;
case 29: sound = SFX_DOOR_8015; break;
case 2: sound = SFX_DOOR_801A; break;
case 3: sound = SFX_DOOR_8015; break;
case 4: sound = SFX_DOOR_801F; break;
case 5: sound = SFX_DOOR_8002; break;
case 8: sound = SFX_DOOR_801A; break;
case 9: sound = SFX_DOOR_8003; break;
case 10: sound = SFX_DOOR_800D; break;
case 30: sound = SFX_DOOR_816D; break;
case 14: sound = SFX_DOOR_816D; break;
case 15: sound = SFX_DOOR_8021; break;
case 25: sound = SFX_DOOR_81B7; break;
case 16: sound = SFX_DOOR_8027; break;
case 17: sound = SFX_DOOR_801F; break;
case 18: sound = SFX_DOOR_8015; break;
case 26: sound = SFX_DOOR_042C; break;
case 19: sound = SFX_DOOR_81AF; break;
case 20: sound = SFX_DOOR_81B2; break;
case 21: sound = SFX_DOOR_81A8; break;
case 32: sound = SFX_DOOR_81AB; break;
case 31: sound = SFX_DOOR_81AB; break;
case 22: sound = SFX_DOOR_81AF; break;
case 23: sound = SFX_DOOR_80AD; break;
case 24: sound = SFX_DOOR_816D; break;
case 27: sound = SFX_DOOR_8015; break;
}
if (sound) {
#if VERSION >= VERSION_NTSC_1_0
propsnd0f0939f8(NULL, prop, sound, -1,
-1, 1024, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#else
propsnd0f0939f8(NULL, prop, sound, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#endif
}
}
void doorPlayClosedSound(s32 soundtype, struct prop *prop)
{
s32 sound = 0;
func0f0926bc(prop, 12, 0xffff);
if (g_Vars.in_cutscene
&& (prop->type == PROPTYPE_OBJ || prop->type == PROPTYPE_DOOR)
&& (prop->obj->flags3 & OBJFLAG3_AUTOCUTSCENESOUNDS) == 0) {
return;
}
switch (soundtype) {
case 28: sound = SFX_DOOR_801A; break;
case 1: sound = SFX_DOOR_801A; break;
case 29: sound = SFX_DOOR_8015; break;
case 2: sound = SFX_DOOR_801A; break;
case 3: sound = SFX_DOOR_8015; break;
case 4: sound = SFX_DOOR_801F; break;
case 5: sound = SFX_DOOR_8002; break;
case 6: sound = SFX_DOOR_8003; break;
case 7: sound = SFX_DOOR_8006; break;
case 8: sound = SFX_DOOR_801A; break;
case 9: sound = SFX_DOOR_8003; break;
case 10: sound = SFX_DOOR_800D; break;
case 11: sound = SFX_DOOR_800F; break;
case 12: sound = SFX_DOOR_8011; break;
case 13: sound = SFX_DOOR_8013; break;
case 30: sound = SFX_DOOR_816D; break;
case 14: sound = SFX_DOOR_8018; break;
case 15: sound = SFX_DOOR_8021; break;
case 25: sound = SFX_DOOR_81B7; break;
case 16: sound = SFX_DOOR_8027; break;
case 17: sound = SFX_DOOR_801F; break;
case 18: sound = SFX_DOOR_8015; break;
case 23: sound = SFX_DOOR_80AD; break;
case 24: sound = SFX_DOOR_816D; break;
}
if (sound) {
#if VERSION >= VERSION_NTSC_1_0
propsnd0f0939f8(NULL, prop, sound, -1,
-1, 1024, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#else
propsnd0f0939f8(NULL, prop, sound, -1,
-1, 0, 0, 12, 0, -1, 0, -1, -1, -1, -1);
#endif
}
}
/**
* Play the door open sound, activate the door's portal,
* and configure the laser fade properties if it's a laser.
*/
void doorStartOpen(struct doorobj *door)
{
door->base.flags &= ~OBJFLAG_DOOR_KEEPOPEN;
door->base.hidden |= OBJHFLAG_00000200;
doorPlayOpeningSound(door->soundtype, door->base.prop);
doorActivatePortal(door);
if (door->doortype == DOORTYPE_FALLAWAY) {
struct geocyl *cyl = door->base.geocyl;
door->base.flags |= OBJFLAG_CANNOT_ACTIVATE;
door->perimfrac = 0;
if (cyl && (door->base.flags & OBJFLAG_00000100)) {
cyl->header.numvertices = 0;
door->base.flags &= ~OBJFLAG_00000100;
}
}
door->fadetime60 = door->doortype == DOORTYPE_LASER ? TICKS(60) : 0;
if (door->doortype == DOORTYPE_LASER) {
door->laserfade = 255;
}
}
/**
* Play the door close sound and configure the
* laser fade properties if it's a laser.
*/
void doorStartClose(struct doorobj *door)
{
door->base.flags &= ~OBJFLAG_DOOR_KEEPOPEN;
doorPlayClosingSound(door->soundtype, door->base.prop);
door->fadetime60 = door->doortype == DOORTYPE_LASER ? TICKS(60) : 0;
if (door->doortype == DOORTYPE_LASER) {
door->laserfade = 0;
}
}
#if PIRACYCHECKS
u32 decodeXorAaaaaaaa(u32 value)
{
return value ^ (PAL ? 0x18743082 : 0xaaaaaaaa);
}
#endif
void doorFinishOpen(struct doorobj *door)
{
doorPlayOpenedSound(door->soundtype, door->base.prop);
if (door->doortype == DOORTYPE_FALLAWAY) {
func0f0685e4(door->base.prop);
if (door->base.hidden & OBJHFLAG_PROJECTILE) {
door->base.projectile->flags |= PROJECTILEFLAG_AIRBORNE;
mtx4LoadIdentity((Mtxf *)&door->base.projectile->mtx);
}
}
if (door->doortype == DOORTYPE_LASER) {
door->laserfade = 0;
}
}
extern s32 osCicId;
void doorFinishClose(struct doorobj *door)
{
bool pass = true;
struct doorobj *loopdoor;
doorPlayClosedSound(door->soundtype, door->base.prop);
loopdoor = door;
while (loopdoor) {
if (loopdoor->frac > 0 && loopdoor->portalnum == door->portalnum) {
pass = false;
}
loopdoor = loopdoor->sibling;
if (loopdoor == door) {
break;
}
}
if (pass) {
doorDeactivatePortal(door);
}
#if VERSION >= VERSION_NTSC_1_0
if (door->doortype == DOORTYPE_LASER && door->fadetime60 == 0) {
door->laserfade = 255;
}
#else
if (door->doortype == DOORTYPE_LASER) {
door->laserfade = 0;
}
#endif
#if PIRACYCHECKS
if (osCicId != decodeXorAaaaaaaa(PAL ? (6105 ^ 0x18743082) : (6105 ^ 0xaaaaaaaa))) {
u32 *ptr = (u32 *)func0f08f968;
ptr[0] = 0x00001025; // li v0, 0
ptr[1] = 0x03e00008; // jr ra
ptr[2] = 0x00000000; // nop
}
#endif
}
/**
* Apply the given mode to an individual door (not its siblings).
*
* Handles playing door open/close sounds and activating the portal if opening.
*/
void doorSetMode(struct doorobj *door, s32 newmode)
{
if (newmode == DOORMODE_OPENING) {
if (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) {
doorStartOpen(door);
}
door->mode = newmode;
} else if (newmode == DOORMODE_CLOSING) {
if (door->mode == DOORMODE_IDLE && door->frac > 0) {
doorStartClose(door);
}
if ((door->mode != DOORMODE_IDLE && door->mode != DOORMODE_WAITING) || door->frac > 0) {
door->mode = newmode;
} else if (door->mode == DOORMODE_WAITING) {
door->mode = DOORMODE_IDLE;
}
} else {
door->mode = newmode;
}
}
/**
* Request that the door and its siblings be applied the given mode
* (opening or closing).
*
* When opening an airlock-style door (eg. GE Dam gate), the requested mode is
* modified so that the sibling begins closing instead, and the main door waits
* for the sibling before it opens.
*/
void doorsRequestMode(struct doorobj *door, s32 newmode)
{
struct doorobj *sibling;
s32 siblingmode = newmode;
if ((door->base.flags2 & OBJFLAG2_AIRLOCKDOOR) && newmode == DOORMODE_OPENING) {
siblingmode = DOORMODE_CLOSING;
if (door->mode == DOORMODE_IDLE) {
newmode = DOORMODE_WAITING;
}
}
doorSetMode(door, newmode);
sibling = door->sibling;
while (sibling && sibling != door) {
doorSetMode(sibling, siblingmode);
sibling = sibling->sibling;
}
}
s32 doorIsClosed(struct doorobj *door)
{
return (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) && door->frac <= 0;
}
s32 doorIsOpen(struct doorobj *door)
{
return (door->mode == DOORMODE_IDLE || door->mode == DOORMODE_WAITING) && door->frac >= door->maxfrac;
}
s32 func0f08e5a8(s16 *rooms2, struct screenbox *box)
{
bool result = false;
s16 *rooms = rooms2;
s32 roomnum = *rooms;
while (roomnum != -1) {
struct var800a4640_00 *thing = func0f158140(roomnum);
if (thing != var8007fc24) {
if (result) {
if (box->xmin > thing->box.xmin) {
box->xmin = thing->box.xmin;
}
if (box->ymin > thing->box.ymin) {
box->ymin = thing->box.ymin;
}
if (box->xmax < thing->box.xmax) {
box->xmax = thing->box.xmax;
}
if (box->ymax < thing->box.ymax) {
box->ymax = thing->box.ymax;
}
} else {
box->xmin = thing->box.xmin;
box->ymin = thing->box.ymin;
box->xmax = thing->box.xmax;
box->ymax = thing->box.ymax;
}
result = true;
}
rooms++;
roomnum = *rooms;
}
return result;
}
f32 func0f08e6bc(struct prop *prop, f32 arg1)
{
f32 result = 1;
struct coord *coord = env0f1667e8();
if (coord != NULL && coord->z < prop->z) {
f32 scalez = camGetLodScaleZ();
f32 value = ((prop->z - coord->z) * 100.0f / arg1 + coord->z) * scalez;
if (value >= coord->y) {
result = 0;
} else if (value > coord->x) {
result = (coord->y - value) / (coord->y - coord->x);
}
}
return result;
}
bool func0f08e794(struct coord *coord, f32 arg1)
{
bool result = true;
struct coord *ptr = env0f1667e8();
struct coord tmp;
f32 sp20;
if (ptr != NULL) {
struct coord *campos = &g_Vars.currentplayer->cam_pos;
Mtxf *mtx = camGetWorldToScreenMtxf();
tmp.x = coord->x - campos->x;
tmp.y = coord->y - campos->y;
tmp.z = coord->z - campos->z;
sp20 = tmp.f[0] * mtx->m[0][0] + tmp.f[1] * mtx->m[0][1] + tmp.f[2] * mtx->m[0][2];
if (sp20 > ptr->z) {
f32 scalez = camGetLodScaleZ();
sp20 = ((sp20 - ptr->z) * 100 / arg1 + ptr->z) * scalez;
if (sp20 >= ptr->y) {
result = false;
}
}
}
return result;
}
bool func0f08e8ac(struct prop *prop, struct coord *pos, f32 arg2, bool arg3)
{
s16 *rooms;
s32 roomnum;
bool result = false;
u32 stack;
rooms = prop->rooms;
roomnum = *rooms;
while (roomnum != -1) {
if (g_Rooms[roomnum].flags & ROOMFLAG_ONSCREEN) {
if (env0f1666f8(pos, arg2) && (!arg3 || func0f08e794(pos, arg2))) {
result = camIsPosInFovAndVisibleRoom(prop->rooms, pos, arg2);
if (result) {
struct coord *campos = &g_Vars.currentplayer->cam_pos;
f32 xdiff = pos->x - campos->x;
f32 ydiff = pos->y - campos->y;
f32 zdiff = pos->z - campos->z;
if (xdiff * xdiff + ydiff * ydiff + zdiff * zdiff > 32000 * 32000) {
result = false;
}
}
}
break;
}
rooms++;
roomnum = *rooms;
result = false;
}
return result;
}
bool posIsInDrawDistance(struct coord *pos)
{
struct coord *campos = &g_Vars.currentplayer->cam_pos;
f32 x = pos->x - campos->x;
f32 y = pos->y - campos->y;
f32 z = pos->z - campos->z;
f32 aggregate = x * x + y * y + z * z;
bool result = true;
if (aggregate > 1024000000) {
result = false;
}
return result;
}
void doorCreateSparks(struct doorobj *door)
{
struct pad pad;
struct coord sp88;
struct coord sp7c;
struct coord sp70;
s32 i;
padUnpack(door->base.pad, PADFIELD_POS | PADFIELD_UP | PADFIELD_NORMAL | PADFIELD_BBOX, &pad);
sp88.x = sp7c.f[0] = pad.pos.f[0] + pad.up.f[0] * (pad.bbox.ymin + (1 - door->frac) * (pad.bbox.ymax - pad.bbox.ymin));
sp88.y = sp7c.f[1] = pad.pos.f[1] + pad.up.f[1] * (pad.bbox.ymin + (1 - door->frac) * (pad.bbox.ymax - pad.bbox.ymin));
sp88.z = sp7c.f[2] = pad.pos.f[2] + pad.up.f[2] * (pad.bbox.ymin + (1 - door->frac) * (pad.bbox.ymax - pad.bbox.ymin));
sp88.x += pad.look.f[0] * pad.bbox.zmax;
sp88.y += pad.look.f[1] * pad.bbox.zmax;
sp88.z += pad.look.f[2] * pad.bbox.zmax;
sp7c.x += pad.look.f[0] * pad.bbox.zmin;
sp7c.y += pad.look.f[1] * pad.bbox.zmin;
sp7c.z += pad.look.f[2] * pad.bbox.zmin;
sp70.x = -pad.up.x;
sp70.y = -pad.up.y;
sp70.z = -pad.up.z;
sparksCreate(door->base.prop->rooms[0], door->base.prop, &sp88, &sp70, &pad.up, SPARKTYPE_ENVIRONMENTAL1);
sparksCreate(door->base.prop->rooms[0], door->base.prop, &sp7c, &sp70, &pad.up, SPARKTYPE_ENVIRONMENTAL1);
if (random() % 2) {
sparksCreate(door->base.prop->rooms[0], door->base.prop, &sp88, &sp70, &pad.up, SPARKTYPE_ENVIRONMENTAL4);
} else {
sparksCreate(door->base.prop->rooms[0], door->base.prop, &sp88, &sp70, &pad.up, SPARKTYPE_ENVIRONMENTAL5);
}
propsnd0f0939f8(NULL, door->base.prop, propsndGetRandomSparkSound(), -1,
-1, 0, 0, 0, &sp88, -1, door->base.prop->rooms, -1, -1, -1, -1);
propsnd0f0939f8(NULL, door->base.prop, propsndGetRandomSparkSound(), -1,
-1, 0, 0, 0, &sp7c, -1, door->base.prop->rooms, -1, -1, -1, -1);
for (i = 0; door->base.prop->rooms[i] != -1; i++) {
roomAdjustLighting(door->base.prop->rooms[i], 128, 200);
}
}
/**
* Calculate/tick a door's frac (the amount it's open) without any consideration
* for props which might be blocking the door. The new frac is written to the
* door's frac property.
*
* Return true if collision checks should be considered.
*
* Also handles sticky doors such as the ones in Skedar Ruins.
*/
bool doorCalcIntendedFrac(struct doorobj *door)
{
bool checkcollision = false;
if (door->doortype == DOORTYPE_LASER && door->fadetime60 != 0) {
door->fadetime60 -= g_Vars.lvupdate240_60;
if (door->fadetime60 < 0) {
door->fadetime60 = 0;
}
if (door->mode == DOORMODE_OPENING) {
door->laserfade = (u32)((door->fadetime60 * 255.0f) / TICKS(60.0f));
return false;
}
door->laserfade = (u32)(((TICKS(60.0f) - door->fadetime60) * 255.0f) / TICKS(60.0f));
}
if (door->mode == DOORMODE_OPENING || door->mode == DOORMODE_CLOSING) {
f32 end = door->mode == DOORMODE_OPENING ? door->maxfrac : 0;
// Skedar Ruins random door stuckage
if (door->base.flags3 & OBJFLAG3_DOOR_STICKY) {
s32 value = (random() % 64) + 30;
if ((g_Vars.lvframenum % value) == 0) {
bool dothething = false;
struct doorobj *loopdoor;
door->fracspeed = 0.0f;
doorCreateSparks(door);
if (random() % 2) {
dothething = true;
func0f0926bc(door->base.prop, 12, 0xffff);
door->mode = DOORMODE_IDLE;
door->lastopen60 = g_Vars.lvframe60;
}
loopdoor = door;
while (loopdoor) {
if (random() % 2 && loopdoor->mode != DOORMODE_IDLE) {
loopdoor->fracspeed = 0.0f;
doorCreateSparks(loopdoor);
if (dothething) {
func0f0926bc(loopdoor->base.prop, 12, 0xffff);
loopdoor->mode = DOORMODE_IDLE;
loopdoor->lastopen60 = g_Vars.lvframe60;
}
}
loopdoor = loopdoor->sibling;
if (loopdoor == door) {
break;
}
}
doorPlayClosedSound(door->soundtype, door->base.prop);
}
}
applySpeed(&door->frac, end, &door->fracspeed, door->accel, door->decel, door->maxspeed);
if (door->frac >= door->maxfrac) {
door->frac = door->maxfrac;
} else if (door->frac <= 0.0f) {
door->frac = 0.0f;
}
checkcollision = true;
}
return checkcollision;
}
/**
* Calculate the frac of a door and its siblings, taking into consideration
* objects which may be blocking the door.
*
* For each sibling, the original frac is backed up into the sibling's
* lastcalc60 field. The desired frac is then calculated and set in the
* sibling's frac property. Then collision checks are done, and the original
* frac is restored if any sibling is blocked.
*
* Chrs who are blocking a lift door may be warped out of the way.
*/
void doorsCalcFrac(struct doorobj *door)
{
bool checkcollision = false;
s32 cdresult = CDRESULT_NOCOLLISION;
struct doorobj *loopdoor;
struct doorobj *loopdoor2;
f32 frac;
s32 numsameportal;
// For each sibling door, save their previous frac
// then calculate the new desired frac
loopdoor = door;
while (loopdoor) {
*(f32 *)&loopdoor->lastcalc60 = loopdoor->frac;
if (doorCalcIntendedFrac(loopdoor)) {
checkcollision = true;
}
loopdoor = loopdoor->sibling;
if (loopdoor == door) {
break;
}
}
// Do collision checks
if (checkcollision) {
loopdoor = door;
while (loopdoor) {
struct prop *loopprop;
doorUpdateTiles(loopdoor);
setup0f0923d4(&loopdoor->base);
loopprop = loopdoor->base.prop;
#if VERSION >= VERSION_NTSC_1_0
if ((door->doorflags & DOORFLAG_UNBLOCKABLEOPEN) == 0 || loopdoor->mode == DOORMODE_CLOSING)
#else
if ((door->doorflags & DOORFLAG_UNBLOCKABLEOPEN) == 0)
#endif
{
propSetPerimEnabled(loopprop, false);
cdresult = cd0002e4c4(loopdoor->base.geoblock, loopprop->rooms,
CDTYPE_OBJS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSNOTSAFEORHELI);
propSetPerimEnabled(loopprop, true);
if (cdresult == CDRESULT_COLLISION) {
struct prop *blockerprop = cdGetObstacle();
if (blockerprop && blockerprop->type == PROPTYPE_CHR) {
struct chrdata *chr = blockerprop->chr;
chr->hidden |= CHRHFLAG_BLOCKINGDOOR;
#if VERSION >= VERSION_NTSC_1_0
// Consider warping the chr past the lift door
if (!g_Vars.normmplayerisrunning && (chr->hidden & CHRHFLAG_00400000)) {
bool isliftdoor = false;
loopdoor2 = loopdoor;
while (loopdoor2) {
if (loopdoor2->base.hidden & OBJHFLAG_LIFTDOOR) {
isliftdoor = true;
break;
}
loopdoor2 = loopdoor2->sibling;
if (loopdoor2 == loopdoor) {
break;
}
}
if (isliftdoor) {
if (chr->actiontype == ACT_STAND
|| (chr->actiontype == ACT_ATTACK && (chr->act_attack.flags & ATTACKFLAG_DONTTURN))
|| (chr->actiontype == ACT_GOPOS && func0f02e064(chr))) {
struct prop *target = chrGetTargetProp(chr);
if (chrGoToPos(chr, &target->pos, target->rooms, 0)) {
chr->goposforce = TICKS(600);
}
} else if (chr->actiontype == ACT_GOPOS) {
if (chr->goposforce >= 0 || chr->lastmoveok60 < g_Vars.lvframe60 - TICKS(60)) {
chr->goposforce = TICKS(600);
}
}
}
}
#endif
}
break;
}
}
loopdoor = loopdoor->sibling;
if (loopdoor == door) {
break;
}
}
}
// Finalise the frac
loopdoor = door;
while (loopdoor) {
if (checkcollision) {
if (cdresult != CDRESULT_COLLISION) {
// No collision - handle door becoming fully open or closed
if (loopdoor->mode == DOORMODE_OPENING) {
if (loopdoor->frac >= loopdoor->maxfrac) {
loopdoor->mode = DOORMODE_IDLE;
loopdoor->fracspeed = 0;
loopdoor->lastopen60 = g_Vars.lvframe60;
doorFinishOpen(loopdoor);
}
} else {
if (loopdoor->mode == DOORMODE_CLOSING && loopdoor->frac <= 0) {
loopdoor->mode = DOORMODE_IDLE;
loopdoor->fracspeed = 0;
loopdoor->lastopen60 = 0;
doorFinishClose(loopdoor);
}
}
func0f069c70(&loopdoor->base, false, false);
func0f08d3dc(loopdoor);
} else {
// Door is blocked - restore the original frac
loopdoor->fracspeed = 0;
loopdoor->frac = *(f32 *)&loopdoor->lastcalc60;
doorUpdateTiles(loopdoor);
setup0f0923d4(&loopdoor->base);
func0f08d460(loopdoor);
}
} else {
func0f08d460(loopdoor);
}
loopdoor->lastcalc60 = g_Vars.lvframe60;
loopdoor = loopdoor->sibling;
if (loopdoor == door) {
break;
}
}
// Update portal visibility
frac = 0;
numsameportal = 0;
if (checkcollision) {
loopdoor = door;
while (loopdoor) {
if (loopdoor->portalnum == door->portalnum) {
numsameportal++;
if (loopdoor->doortype == DOORTYPE_SWINGING || loopdoor->doortype == DOORTYPE_SWINGING) {
frac += loopdoor->frac / loopdoor->maxfrac;
} else {
frac += loopdoor->frac / loopdoor->maxfrac;
}
}
loopdoor = loopdoor->sibling;
if (loopdoor == door) {
break;
}
}
portalSetXluFrac(door->portalnum, frac / numsameportal);
portalSetXluFrac2(door->portalnum, frac / numsameportal);
}
}
f32 func0f08f538(f32 x, f32 y)
{
f32 angle = atan2f(x, y);
if (g_Vars.currentplayer->eyespy
&& g_Vars.currentplayer->eyespy->active
&& g_Vars.currentplayer->eyespy->prop
&& g_Vars.currentplayer->eyespy->prop->chr) {
angle -= chrGetInverseTheta(g_Vars.currentplayer->eyespy->prop->chr);
} else {
angle -= (360.0f - g_Vars.currentplayer->vv_theta) * M_BADTAU / 360.0f;
}
if (angle < 0) {
angle += M_BADTAU;
}
if (angle > M_BADPI) {
angle -= M_BADTAU;
}
return angle;
}
GLOBAL_ASM(
glabel func0f08f604
.late_rodata
glabel var7f1ab180
.word 0x3c8ef461
glabel var7f1ab184
.word 0x40c907a9
.text
/* f08f604: 27bdff18 */ addiu $sp,$sp,-232
/* f08f608: 3c08800a */ lui $t0,%hi(g_Vars+0x284)
/* f08f60c: 8d08a244 */ lw $t0,%lo(g_Vars+0x284)($t0)
/* f08f610: afbf0014 */ sw $ra,0x14($sp)
/* f08f614: afa400e8 */ sw $a0,0xe8($sp)
/* f08f618: afa500ec */ sw $a1,0xec($sp)
/* f08f61c: afa600f0 */ sw $a2,0xf0($sp)
/* f08f620: afa700f4 */ sw $a3,0xf4($sp)
/* f08f624: 8d030480 */ lw $v1,0x480($t0)
/* f08f628: 27a60044 */ addiu $a2,$sp,0x44
/* f08f62c: 2405002e */ addiu $a1,$zero,0x2e
/* f08f630: 10600006 */ beqz $v1,.L0f08f64c
/* f08f634: 8faf00e8 */ lw $t7,0xe8($sp)
/* f08f638: 806e0037 */ lb $t6,0x37($v1)
/* f08f63c: 51c00004 */ beqzl $t6,.L0f08f650
/* f08f640: 8d0200bc */ lw $v0,0xbc($t0)
/* f08f644: 10000002 */ b .L0f08f650
/* f08f648: 8c620000 */ lw $v0,0x0($v1)
.L0f08f64c:
/* f08f64c: 8d0200bc */ lw $v0,0xbc($t0)
.L0f08f650:
/* f08f650: 85e40006 */ lh $a0,0x6($t7)
/* f08f654: 0fc456ac */ jal padUnpack
/* f08f658: afa200b4 */ sw $v0,0xb4($sp)
/* f08f65c: 8fa200b4 */ lw $v0,0xb4($sp)
/* f08f660: 8fb800fc */ lw $t8,0xfc($sp)
/* f08f664: c7a00060 */ lwc1 $f0,0x60($sp)
/* f08f668: c4440008 */ lwc1 $f4,0x8($v0)
/* f08f66c: c7a20054 */ lwc1 $f2,0x54($sp)
/* f08f670: c7aa007c */ lwc1 $f10,0x7c($sp)
/* f08f674: e7a40098 */ swc1 $f4,0x98($sp)
/* f08f678: c446000c */ lwc1 $f6,0xc($v0)
/* f08f67c: e7a6009c */ swc1 $f6,0x9c($sp)
/* f08f680: c4480010 */ lwc1 $f8,0x10($v0)
/* f08f684: 13000012 */ beqz $t8,.L0f08f6d0
/* f08f688: e7a800a0 */ swc1 $f8,0xa0($sp)
/* f08f68c: c7a40058 */ lwc1 $f4,0x58($sp)
/* f08f690: c7aa0078 */ lwc1 $f10,0x78($sp)
/* f08f694: c7a80064 */ lwc1 $f8,0x64($sp)
/* f08f698: 46040182 */ mul.s $f6,$f0,$f4
/* f08f69c: e7aa00a4 */ swc1 $f10,0xa4($sp)
/* f08f6a0: c7b00074 */ lwc1 $f16,0x74($sp)
/* f08f6a4: 46081282 */ mul.s $f10,$f2,$f8
/* f08f6a8: c7a8005c */ lwc1 $f8,0x5c($sp)
/* f08f6ac: e7b000a8 */ swc1 $f16,0xa8($sp)
/* f08f6b0: 460a3101 */ sub.s $f4,$f6,$f10
/* f08f6b4: 46024182 */ mul.s $f6,$f8,$f2
/* f08f6b8: c7aa0050 */ lwc1 $f10,0x50($sp)
/* f08f6bc: e7a400b0 */ swc1 $f4,0xb0($sp)
/* f08f6c0: 46005102 */ mul.s $f4,$f10,$f0
/* f08f6c4: 46043201 */ sub.s $f8,$f6,$f4
/* f08f6c8: 10000008 */ b .L0f08f6ec
/* f08f6cc: e7a800ac */ swc1 $f8,0xac($sp)
.L0f08f6d0:
/* f08f6d0: c7a60080 */ lwc1 $f6,0x80($sp)
/* f08f6d4: c7a4005c */ lwc1 $f4,0x5c($sp)
/* f08f6d8: c7a80064 */ lwc1 $f8,0x64($sp)
/* f08f6dc: e7aa00a8 */ swc1 $f10,0xa8($sp)
/* f08f6e0: e7a600a4 */ swc1 $f6,0xa4($sp)
/* f08f6e4: e7a400b0 */ swc1 $f4,0xb0($sp)
/* f08f6e8: e7a800ac */ swc1 $f8,0xac($sp)
.L0f08f6ec:
/* f08f6ec: c7b000a8 */ lwc1 $f16,0xa8($sp)
/* f08f6f0: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f08f6f4: c7a60044 */ lwc1 $f6,0x44($sp)
/* f08f6f8: c7a80098 */ lwc1 $f8,0x98($sp)
/* f08f6fc: 46105002 */ mul.s $f0,$f10,$f16
/* f08f700: c7aa00ac */ lwc1 $f10,0xac($sp)
/* f08f704: 46105082 */ mul.s $f2,$f10,$f16
/* f08f708: e7a0002c */ swc1 $f0,0x2c($sp)
/* f08f70c: 46003100 */ add.s $f4,$f6,$f0
/* f08f710: c7a6004c */ lwc1 $f6,0x4c($sp)
/* f08f714: e7a20028 */ swc1 $f2,0x28($sp)
/* f08f718: 46082301 */ sub.s $f12,$f4,$f8
/* f08f71c: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f08f720: 46023100 */ add.s $f4,$f6,$f2
/* f08f724: e7ac00d4 */ swc1 $f12,0xd4($sp)
/* f08f728: 46082381 */ sub.s $f14,$f4,$f8
/* f08f72c: 0fc23d4e */ jal func0f08f538
/* f08f730: e7ae00d0 */ swc1 $f14,0xd0($sp)
/* f08f734: c7a200a4 */ lwc1 $f2,0xa4($sp)
/* f08f738: c7a600b0 */ lwc1 $f6,0xb0($sp)
/* f08f73c: c7aa0044 */ lwc1 $f10,0x44($sp)
/* f08f740: e7a000e4 */ swc1 $f0,0xe4($sp)
/* f08f744: 46023102 */ mul.s $f4,$f6,$f2
/* f08f748: c7a60098 */ lwc1 $f6,0x98($sp)
/* f08f74c: 46045200 */ add.s $f8,$f10,$f4
/* f08f750: c7a400ac */ lwc1 $f4,0xac($sp)
/* f08f754: c7aa004c */ lwc1 $f10,0x4c($sp)
/* f08f758: 46064301 */ sub.s $f12,$f8,$f6
/* f08f75c: 46022202 */ mul.s $f8,$f4,$f2
/* f08f760: c7a400a0 */ lwc1 $f4,0xa0($sp)
/* f08f764: e7ac00cc */ swc1 $f12,0xcc($sp)
/* f08f768: 46085180 */ add.s $f6,$f10,$f8
/* f08f76c: 46043381 */ sub.s $f14,$f6,$f4
/* f08f770: 0fc23d4e */ jal func0f08f538
/* f08f774: e7ae00c8 */ swc1 $f14,0xc8($sp)
/* f08f778: c7b000e4 */ lwc1 $f16,0xe4($sp)
/* f08f77c: 8fa300e8 */ lw $v1,0xe8($sp)
/* f08f780: 8fb900ec */ lw $t9,0xec($sp)
/* f08f784: 4600803c */ c.lt.s $f16,$f0
/* f08f788: 8faa00ec */ lw $t2,0xec($sp)
/* f08f78c: 45020006 */ bc1fl .L0f08f7a8
/* f08f790: e5400000 */ swc1 $f0,0x0($t2)
/* f08f794: e7300000 */ swc1 $f16,0x0($t9)
/* f08f798: 8fa900f0 */ lw $t1,0xf0($sp)
/* f08f79c: 10000004 */ b .L0f08f7b0
/* f08f7a0: e5200000 */ swc1 $f0,0x0($t1)
/* f08f7a4: e5400000 */ swc1 $f0,0x0($t2)
.L0f08f7a8:
/* f08f7a8: 8fab00f0 */ lw $t3,0xf0($sp)
/* f08f7ac: e5700000 */ swc1 $f16,0x0($t3)
.L0f08f7b0:
/* f08f7b0: 8fa500f4 */ lw $a1,0xf4($sp)
/* f08f7b4: 8fa400f8 */ lw $a0,0xf8($sp)
/* f08f7b8: 50a00068 */ beqzl $a1,.L0f08f95c
/* f08f7bc: 8fbf0014 */ lw $ra,0x14($sp)
/* f08f7c0: 50800066 */ beqzl $a0,.L0f08f95c
/* f08f7c4: 8fbf0014 */ lw $ra,0x14($sp)
/* f08f7c8: 94620072 */ lhu $v0,0x72($v1)
/* f08f7cc: 24010005 */ addiu $at,$zero,0x5
/* f08f7d0: 14410035 */ bne $v0,$at,.L0f08f8a8
/* f08f7d4: 3c017f1b */ lui $at,%hi(var7f1ab180)
/* f08f7d8: c428b180 */ lwc1 $f8,%lo(var7f1ab180)($at)
/* f08f7dc: c46a007c */ lwc1 $f10,0x7c($v1)
/* f08f7e0: 8c6c0008 */ lw $t4,0x8($v1)
/* f08f7e4: 46008486 */ mov.s $f18,$f16
/* f08f7e8: 46085302 */ mul.s $f12,$f10,$f8
/* f08f7ec: 000c6880 */ sll $t5,$t4,0x2
/* f08f7f0: 05a10003 */ bgez $t5,.L0f08f800
/* f08f7f4: 3c017f1b */ lui $at,%hi(var7f1ab184)
/* f08f7f8: c426b184 */ lwc1 $f6,%lo(var7f1ab184)($at)
/* f08f7fc: 460c3301 */ sub.s $f12,$f6,$f12
.L0f08f800:
/* f08f800: e7ac0038 */ swc1 $f12,0x38($sp)
/* f08f804: 0c0068f4 */ jal cosf
/* f08f808: e7b200dc */ swc1 $f18,0xdc($sp)
/* f08f80c: c7ac0038 */ lwc1 $f12,0x38($sp)
/* f08f810: 0c0068f7 */ jal sinf
/* f08f814: e7a00034 */ swc1 $f0,0x34($sp)
/* f08f818: c7a400a4 */ lwc1 $f4,0xa4($sp)
/* f08f81c: c7aa00a8 */ lwc1 $f10,0xa8($sp)
/* f08f820: c7a80044 */ lwc1 $f8,0x44($sp)
/* f08f824: c7a6002c */ lwc1 $f6,0x2c($sp)
/* f08f828: 460a2081 */ sub.s $f2,$f4,$f10
/* f08f82c: c7aa0098 */ lwc1 $f10,0x98($sp)
/* f08f830: c7b00034 */ lwc1 $f16,0x34($sp)
/* f08f834: 46064100 */ add.s $f4,$f8,$f6
/* f08f838: c7a600b0 */ lwc1 $f6,0xb0($sp)
/* f08f83c: 460a2201 */ sub.s $f8,$f4,$f10
/* f08f840: 46103102 */ mul.s $f4,$f6,$f16
/* f08f844: c7aa00ac */ lwc1 $f10,0xac($sp)
/* f08f848: e7a80018 */ swc1 $f8,0x18($sp)
/* f08f84c: 46005202 */ mul.s $f8,$f10,$f0
/* f08f850: 46082100 */ add.s $f4,$f4,$f8
/* f08f854: 46041202 */ mul.s $f8,$f2,$f4
/* f08f858: c7a40018 */ lwc1 $f4,0x18($sp)
/* f08f85c: 46082300 */ add.s $f12,$f4,$f8
/* f08f860: c7a80028 */ lwc1 $f8,0x28($sp)
/* f08f864: c7a4004c */ lwc1 $f4,0x4c($sp)
/* f08f868: 46082100 */ add.s $f4,$f4,$f8
/* f08f86c: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f08f870: 46082101 */ sub.s $f4,$f4,$f8
/* f08f874: 46003207 */ neg.s $f8,$f6
/* f08f878: 46004182 */ mul.s $f6,$f8,$f0
/* f08f87c: 00000000 */ nop
/* f08f880: 46105202 */ mul.s $f8,$f10,$f16
/* f08f884: 46083280 */ add.s $f10,$f6,$f8
/* f08f888: 460a1182 */ mul.s $f6,$f2,$f10
/* f08f88c: 0fc23d4e */ jal func0f08f538
/* f08f890: 46062380 */ add.s $f14,$f4,$f6
/* f08f894: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f08f898: 46000086 */ mov.s $f2,$f0
/* f08f89c: 8fa500f4 */ lw $a1,0xf4($sp)
/* f08f8a0: 10000024 */ b .L0f08f934
/* f08f8a4: 8fa400f8 */ lw $a0,0xf8($sp)
.L0f08f8a8:
/* f08f8a8: 10400007 */ beqz $v0,.L0f08f8c8
/* f08f8ac: 24010001 */ addiu $at,$zero,0x1
/* f08f8b0: 10410005 */ beq $v0,$at,.L0f08f8c8
/* f08f8b4: 24010002 */ addiu $at,$zero,0x2
/* f08f8b8: 10410003 */ beq $v0,$at,.L0f08f8c8
/* f08f8bc: 24010003 */ addiu $at,$zero,0x3
/* f08f8c0: 5441001b */ bnel $v0,$at,.L0f08f930
/* f08f8c4: 46008486 */ mov.s $f18,$f16
.L0f08f8c8:
/* f08f8c8: c460007c */ lwc1 $f0,0x7c($v1)
/* f08f8cc: c4680098 */ lwc1 $f8,0x98($v1)
/* f08f8d0: c46a00a0 */ lwc1 $f10,0xa0($v1)
/* f08f8d4: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f08f8d8: 46004082 */ mul.s $f2,$f8,$f0
/* f08f8dc: c7a600d0 */ lwc1 $f6,0xd0($sp)
/* f08f8e0: 46005402 */ mul.s $f16,$f10,$f0
/* f08f8e4: e7a20040 */ swc1 $f2,0x40($sp)
/* f08f8e8: 46022300 */ add.s $f12,$f4,$f2
/* f08f8ec: e7b0003c */ swc1 $f16,0x3c($sp)
/* f08f8f0: 0fc23d4e */ jal func0f08f538
/* f08f8f4: 46103380 */ add.s $f14,$f6,$f16
/* f08f8f8: c7a20040 */ lwc1 $f2,0x40($sp)
/* f08f8fc: c7b0003c */ lwc1 $f16,0x3c($sp)
/* f08f900: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f08f904: c7aa00c8 */ lwc1 $f10,0xc8($sp)
/* f08f908: e7a000dc */ swc1 $f0,0xdc($sp)
/* f08f90c: 46024300 */ add.s $f12,$f8,$f2
/* f08f910: 0fc23d4e */ jal func0f08f538
/* f08f914: 46105380 */ add.s $f14,$f10,$f16
/* f08f918: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f08f91c: 46000086 */ mov.s $f2,$f0
/* f08f920: 8fa500f4 */ lw $a1,0xf4($sp)
/* f08f924: 10000003 */ b .L0f08f934
/* f08f928: 8fa400f8 */ lw $a0,0xf8($sp)
/* f08f92c: 46008486 */ mov.s $f18,$f16
.L0f08f930:
/* f08f930: 46000086 */ mov.s $f2,$f0
.L0f08f934:
/* f08f934: 4602903c */ c.lt.s $f18,$f2
/* f08f938: 00000000 */ nop
/* f08f93c: 45020005 */ bc1fl .L0f08f954
/* f08f940: e4a20000 */ swc1 $f2,0x0($a1)
/* f08f944: e4b20000 */ swc1 $f18,0x0($a1)
/* f08f948: 10000003 */ b .L0f08f958
/* f08f94c: e4820000 */ swc1 $f2,0x0($a0)
/* f08f950: e4a20000 */ swc1 $f2,0x0($a1)
.L0f08f954:
/* f08f954: e4920000 */ swc1 $f18,0x0($a0)
.L0f08f958:
/* f08f958: 8fbf0014 */ lw $ra,0x14($sp)
.L0f08f95c:
/* f08f95c: 27bd00e8 */ addiu $sp,$sp,0xe8
/* f08f960: 03e00008 */ jr $ra
/* f08f964: 00000000 */ nop
);
/**
* Get some coordinates/distances related to activating doors.
*/
// Mismatch: Float instructions are in a different order
//void func0f08f604(struct doorobj *door, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4, bool arg5)
//{
// f32 spe4;
// f32 spe0;
// f32 spdc;
// f32 tmp;
// f32 spd4;
// f32 spd0;
// f32 spcc;
// f32 spc8;
// u32 stack[4];
// struct prop *playerprop; // b4
// f32 spb0;
// f32 spac;
// f32 spa8;
// f32 spa4;
// volatile struct coord playerpos; // 98
// struct pad pad; // 44
// f32 sp40;
// f32 sp3c;
// f32 sp38;
// f32 sp34;
// f32 sp30;
// f32 sp2c;
// f32 sp28;
//
// if (g_Vars.currentplayer->eyespy && g_Vars.currentplayer->eyespy->active) {
// playerprop = g_Vars.currentplayer->eyespy->prop;
// } else {
// playerprop = g_Vars.currentplayer->prop;
// }
//
// padUnpack(door->base.pad, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_UP | PADFIELD_BBOX, &pad);
//
// playerpos.x = playerprop->pos.x;
// playerpos.y = playerprop->pos.y;
// playerpos.z = playerprop->pos.z;
//
// if (arg5) {
// spa8 = pad.bbox.xmin;
// spa4 = pad.bbox.xmax;
// spb0 = pad.up.y * pad.look.z - pad.look.y * pad.up.z;
// spac = pad.up.x * pad.look.y - pad.look.x * pad.up.y;
// } else {
// spa8 = pad.bbox.ymin;
// spa4 = pad.bbox.ymax;
// spb0 = pad.up.x;
// spac = pad.up.z;
// }
//
// spd4 = pad.pos.x + spb0 * spa8 - playerpos.x;
// spd0 = pad.pos.z + spac * spa8 - playerpos.z;
// spe4 = func0f08f538(spd4, spd0);
// spcc = pad.pos.x + spb0 * spa4 - playerpos.x;
// spc8 = pad.pos.z + spac * spa4 - playerpos.z;
// spe0 = func0f08f538(spcc, spc8);
//
// if (spe4 < spe0) {
// *arg1 = spe4;
// *arg2 = spe0;
// } else {
// *arg1 = spe0;
// *arg2 = spe4;
// }
//
// if (arg3 != NULL && arg4 != NULL) {
// if (door->doortype == DOORTYPE_SWINGING) {
// sp38 = door->frac * 0.017450513318181f;
//
// if (door->base.flags & OBJFLAG_DOOR_OPENTOFRONT) {
// sp38 = M_BADTAU - sp38;
// }
//
// spdc = spe4;
// sp34 = cosf(sp38);
// sp30 = sinf(sp38);
// tmp = func0f08f538(
// (pad.pos.x + spb0 * spa8 - playerpos.x) + (spa4 - spa8) * (spb0 * sp34 + spac * sp30),
// (pad.pos.z + spac * spa8 - playerpos.z) + (spa4 - spa8) * (-spb0 * sp30 + spac * sp34));
// } else if (door->doortype == DOORTYPE_SLIDING
// || door->doortype == DOORTYPE_FLEXI1
// || door->doortype == DOORTYPE_FLEXI2
// || door->doortype == DOORTYPE_FLEXI3) {
// sp40 = door->unk98.x * door->frac;
// sp3c = door->unk98.z * door->frac;
// spdc = func0f08f538(spd4 + sp40, spd0 + sp3c);
// tmp = func0f08f538(spcc + sp40, spc8 + sp3c);
// } else {
// spdc = spe4;
// }
//
// if (spdc < tmp) {
// *arg3 = spdc;
// *arg4 = tmp;
// } else {
// *arg3 = tmp;
// *arg4 = spdc;
// }
// }
//}
bool func0f08f968(struct doorobj *door, bool arg1)
{
bool checkmore = true;
f32 sp58;
f32 sp54;
f32 sp50;
f32 sp4c;
bool maybe;
struct prop *playerprop;
f32 limit = 0.34901028871536f;
if (g_InteractProp == NULL) {
maybe = false;
if (g_Vars.currentplayer->eyespy && g_Vars.currentplayer->eyespy->active) {
playerprop = g_Vars.currentplayer->eyespy->prop;
} else {
playerprop = g_Vars.currentplayer->prop;
}
if ((door->doorflags & (DOORFLAG_0080 | DOORFLAG_0100)) != DOORFLAG_0080) {
maybe = true;
} else if (func0f06797c(&playerprop->pos, 30, door->base.pad)) {
maybe = true;
}
if (maybe) {
func0f08f604(door, &sp58, &sp54, &sp50, &sp4c, arg1);
} else {
func0f08f604(door, &sp58, &sp54, NULL, NULL, arg1);
}
if (maybe && ((sp50 >= -limit && sp50 <= limit && sp4c >= -limit && sp4c <= limit)
|| (sp4c - sp50 < M_BADPI && sp50 < 0.0f && sp4c > 0.0f))) {
g_InteractProp = door->base.prop;
checkmore = false;
} else if (sp58 >= -limit && sp58 <= limit && sp54 >= -limit && sp54 <= limit) {
g_InteractProp = door->base.prop;
checkmore = false;
} else {
struct doorobj *sibling = door->sibling;
f32 sp38;
f32 sp34;
while (sibling != NULL && sibling != door && (sp58 >= 0.0f || sp54 < 0.0f)) {
func0f08f604(sibling, &sp38, &sp34, NULL, NULL, arg1);
if (sp58 >= 0.0f && sp38 < sp58) {
sp58 = sp38;
}
if (sp54 <= 0.0f && sp54 < sp34) {
sp54 = sp34;
}
sibling = sibling->sibling;
}
if (sp54 - sp58 < M_BADPI && sp58 < 0.0f && sp54 > 0.0f) {
g_InteractProp = door->base.prop;
checkmore = false;
}
}
}
return checkmore;
}
/**
* This function is used to help find the door that should be opened when
* interacting. The argument given is a door to be tested.
*
* A pointer to the best candidate is stored at g_InteractProp. This function
* doesn't write to it directly so it must be done by one of the called
* functions.
*
* This function should return true if more doors and objects should be tested,
* or false if the prop at g_InteractProp is certain to be final.
*/
bool doorTestForInteract(struct prop *prop)
{
bool checkmore = true;
struct doorobj *door = prop->door;
if ((door->base.flags & OBJFLAG_CANNOT_ACTIVATE) == 0
&& door->maxfrac > 0
&& (prop->flags & PROPFLAG_ONTHISSCREENTHISTICK)) {
bool maybe = false;
bool usingeyespy = g_Vars.currentplayer->eyespy && g_Vars.currentplayer->eyespy->active;
struct prop *playerprop = usingeyespy ? g_Vars.currentplayer->eyespy->prop : g_Vars.currentplayer->prop;
f32 xdiff = door->startpos.x - playerprop->pos.x;
f32 ydiff = door->startpos.y - playerprop->pos.y;
f32 zdiff = door->startpos.z - playerprop->pos.z;
if (xdiff * xdiff + zdiff * zdiff < 40000 && ydiff < 200 && ydiff > -200) {
maybe = true;
} else if (arrayIntersects(prop->rooms, playerprop->rooms)) {
if (func0f06797c(&playerprop->pos, 150, door->base.pad)) {
maybe = true;
} else if ((door->doorflags & (DOORFLAG_0080 | DOORFLAG_0100)) != DOORFLAG_0080) {
u32 stack;
struct modelrodata_bbox bbox;
Mtxf matrix;
doorGetBbox(door, &bbox);
func0f08c424(door, &matrix);
if (func0f0675c8(&playerprop->pos, 150, &bbox, &matrix)) {
maybe = true;
}
}
}
if (maybe) {
if ((door->base.flags2 & OBJFLAG2_INTERACTCHECKLOS) == 0
|| cd0002dcd0(&playerprop->pos, playerprop->rooms, &prop->pos, prop->rooms, 0x20)) {
checkmore = func0f08f968(door, false);
if (checkmore && (door->base.flags2 & OBJFLAG2_80000000)) {
checkmore = func0f08f968(door, true);
}
}
}
}
return checkmore;
}
/**
* Activate the doors by calling the lift or requesting the new door mode
* (opening/closing) for the given door and its siblings.
*
* Assumes any lock checks have already been done and have passed.
*
* The allowliftclose argument determines whether the door should be closed if
* it's a lift door and the lift is at the door. This is typically true when the
* player has activated the door, and false when NPCs have activated the door.
*/
void doorsActivate(struct prop *doorprop, bool allowliftclose)
{
struct doorobj *door = doorprop->door;
if (!doorCallLift(doorprop, allowliftclose)) {
if (door->mode == DOORMODE_OPENING || door->mode == DOORMODE_WAITING) {
doorsRequestMode(door, DOORMODE_CLOSING);
} else if (door->mode == DOORMODE_CLOSING) {
doorsRequestMode(door, DOORMODE_OPENING);
} else if (door->mode == DOORMODE_IDLE) {
if (door->frac > 0.5f * door->maxfrac) {
doorsRequestMode(door, DOORMODE_CLOSING);
} else {
doorsRequestMode(door, DOORMODE_OPENING);
}
}
}
if (g_Vars.currentplayernum == g_Vars.coopplayernum) {
door->base.hidden |= OBJHFLAG_ACTIVATED_BY_COOP;
} else if (g_Vars.currentplayernum == g_Vars.bondplayernum) {
door->base.hidden |= OBJHFLAG_ACTIVATED_BY_BOND;
}
door->base.flags2 &= ~OBJFLAG2_00000008;
}
bool posIsInFrontOfDoor(struct coord *pos, struct doorobj *door)
{
f32 x;
f32 y;
f32 z;
f32 value;
struct pad pad;
padUnpack(door->base.pad, PADFIELD_POS | PADFIELD_NORMAL, &pad);
x = pos->x - pad.pos.x;
y = pos->y - pad.pos.y;
z = pos->z - pad.pos.z;
value = x * pad.normal.f[0] + y * pad.normal.f[1] + z * pad.normal.f[2];
if (door->doorflags & DOORFLAG_FLIP) {
value = -value;
}
if (value < 0) {
return false;
}
if (value > 0) {
return true;
}
return true;
}
void doorsChooseSwingDirection(struct prop *chrprop, struct doorobj *door)
{
if ((door->base.flags & OBJFLAG_DOOR_TWOWAY) && door->mode == DOORMODE_IDLE && door->frac == 0) {
bool infront = posIsInFrontOfDoor(&chrprop->pos, door);
u32 wantflag = 0;
if ((door->doorflags & DOORFLAG_FLIP) == 0) {
if (!infront) {
wantflag = OBJFLAG_DOOR_OPENTOFRONT;
}
} else {
if (infront) {
wantflag = OBJFLAG_DOOR_OPENTOFRONT;
}
}
// If flags are different
if ((s32)((door->base.flags ^ wantflag) << 2) < 0) {
// Toggle direction on door and siblings
struct doorobj *sibling = door;
do {
sibling->base.flags ^= OBJFLAG_DOOR_OPENTOFRONT;
sibling = sibling->sibling;
} while (sibling && sibling != door);
}
}
}
bool propdoorInteract(struct prop *doorprop)
{
struct doorobj *door = doorprop->door;
bool usingeyespy = g_Vars.currentplayer->eyespy && g_Vars.currentplayer->eyespy->active;
struct prop *playerprop = usingeyespy ? g_Vars.currentplayer->eyespy->prop : g_Vars.currentplayer->prop;
if (doorIsUnlocked(playerprop, doorprop)) {
doorsChooseSwingDirection(playerprop, door);
doorsActivate(doorprop, true);
} else if (door->mode == DOORMODE_IDLE && door->frac < 0.5f * door->maxfrac) {
if ((door->base.flags2 & OBJFLAG2_SKIPDOORLOCKEDMSG) == 0) {
struct textoverride *override = invGetTextOverrideForObj(&door->base);
u8 intraining = false;
if (g_Vars.stagenum == STAGE_CITRAINING) {
struct trainingdata *devdata = dtGetData();
struct trainingdata *holodata = getHoloTrainingData();
intraining = (devdata && devdata->intraining)
|| (holodata && holodata->intraining)
|| g_Vars.currentplayer->prop->rooms[0] == 0x0a;
}
if (override && override->pickuptext) {
hudmsgCreateWithFlags(langGet(override->pickuptext), HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE);
} else if (intraining) {
hudmsgCreateWithFlags(langGet(L_DISH_080), HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE); // "Cannot exit while training is in progress."
} else {
hudmsgCreateWithFlags(langGet(VERSION >= VERSION_PAL_BETA ? L_PROPOBJ_041 : L_PROPOBJ_044), HUDMSGTYPE_DEFAULT, HUDMSGFLAG_ONLYIFALIVE); // "This door is locked."
}
}
if (g_Vars.currentplayernum == g_Vars.coopplayernum) {
door->base.hidden |= OBJHFLAG_ACTIVATED_BY_COOP;
} else if (g_Vars.currentplayernum == g_Vars.bondplayernum) {
door->base.hidden |= OBJHFLAG_ACTIVATED_BY_BOND;
}
door->base.flags2 |= OBJFLAG2_00000008;
}
return TICKOP_NONE;
}
void alarmActivate(void)
{
if (g_AlarmTimer < 1) {
g_AlarmTimer = 1;
}
}
void alarmStopAudio(void)
{
if (g_AlarmAudioHandle && sndGetState(g_AlarmAudioHandle) != AL_STOPPED) {
audioStop(g_AlarmAudioHandle);
}
}
void alarmDeactivate(void)
{
g_AlarmTimer = 0;
alarmStopAudio();
}
bool alarmIsActive(void)
{
return g_AlarmTimer > 0;
}
void gasReleaseFromPos(struct coord *pos)
{
g_GasReleasing = true;
g_GasSoundTimer240 = 0;
g_GasPos.x = pos->x;
g_GasPos.y = pos->y;
g_GasPos.z = pos->z;
// Gas objects don't exist in PD, so this stage number was likely carried
// over from GoldenEye. It maps to GE's Egypt stage, which uses gas for a
// visual effect only.
if (mainGetStageNum() == STAGE_MP_G5BUILDING) {
g_GasReleaseTimerMax240 = 120;
g_GasEnableDamage = false;
} else {
g_GasReleaseTimerMax240 = 3600;
g_GasEnableDamage = true;
}
}
void gasStopAudio(void)
{
if (g_GasAudioHandle && sndGetState(g_GasAudioHandle)) {
audioStop(g_GasAudioHandle);
}
}
bool gasIsActive(void)
{
return g_GasReleaseTimer240 > 0;
}
void gasTick(void)
{
u32 stack;
if (g_GasReleasing) {
g_GasReleaseTimer240 += g_Vars.lvupdate240freal;
if (g_GasReleaseTimer240 >= g_GasReleaseTimerMax240) {
g_GasReleaseTimer240 = g_GasReleaseTimerMax240;
g_GasReleasing = false;
}
}
if (g_GasReleaseTimer240 > 0 && !g_PlayerInvincible) {
envApplyTransitionFrac(g_GasReleaseTimer240 / g_GasReleaseTimerMax240);
if (g_GasEnableDamage) {
if (g_GasLastCough60 < g_Vars.lvframe60 - TICKS(225)) {
g_GasLastCough60 = g_Vars.lvframe60;
if (g_GasReleaseTimer240 >= 600) {
sndStart(var80095200, SFX_0037, 0, -1, -1, -1, -1, -1);
}
if (g_GasReleaseTimer240 >= 1800) {
struct coord dir = {0, 0, 0};
chrDamageByMisc(g_Vars.currentplayer->prop->chr, 0.125f, &dir, NULL, NULL);
}
}
if (g_GasSoundTimer240 < g_GasReleaseTimerMax240) {
s16 soundnum = -1;
g_GasSoundTimer240 += g_Vars.lvupdate240freal;
if (!g_GasAudioHandle && !lvIsPaused()) {
soundnum = SFX_0037;
sndStart(var80095200, soundnum, &g_GasAudioHandle, -1, -1, -1, -1, -1);
}
if (g_GasAudioHandle) {
func0f09505c(g_GasAudioHandle, &g_GasPos, 400, 2500, 3000, g_Vars.currentplayer->prop->rooms, soundnum, 0x7fff, 0);
}
} else if (g_GasAudioHandle && sndGetState(g_GasAudioHandle)) {
audioStop(g_GasAudioHandle);
}
}
}
}
void countdownTimerSetVisible(u32 reason, bool visible)
{
if (visible) {
g_CountdownTimerOff &= ~reason;
} else {
g_CountdownTimerOff |= reason;
}
}
bool countdownTimerIsVisible(void)
{
return !g_CountdownTimerOff;
}
void countdownTimerSetValue60(f32 value)
{
g_CountdownTimerValue60 = value;
}
f32 countdownTimerGetValue60(void)
{
return g_CountdownTimerValue60;
}
void countdownTimerSetRunning(bool running)
{
g_CountdownTimerRunning = running;
}
bool countdownTimerIsRunning(void)
{
return g_CountdownTimerRunning;
}
void countdownTimerTick(void)
{
if (g_CountdownTimerRunning) {
g_CountdownTimerValue60 -= g_Vars.lvupdate240freal;
}
}
Gfx *countdownTimerRender(Gfx *gdl)
{
s32 mins;
s32 secs;
s32 ms;
s32 y;
if (!g_CountdownTimerOff) {
f32 value60 = g_CountdownTimerValue60;
u32 stack;
s32 viewright = viGetViewLeft() + (viGetViewWidth() >> 1);
s32 y = viGetViewTop() + viGetViewHeight() - 18;
s32 playercount = PLAYERCOUNT();
char *fmt = ":\n";
if (playercount == 2) {
if (IS4MB() || (optionsGetScreenSplit() != SCREENSPLIT_VERTICAL && g_Vars.currentplayernum == 0)) {
y += 10;
} else {
y += 2;
}
} else if (playercount >= 3) {
if (g_Vars.currentplayernum <= 1) {
y += 10;
} else {
y += 2;
}
} else {
if (optionsGetEffectiveScreenSize() != SCREENSIZE_FULL) {
y += 8;
}
}
#if !PAL
if (g_ViRes == VIRES_HI) {
viewright = viewright / 2;
}
#endif
if (value60 < 0) {
value60 = -value60;
}
mins = floorf(value60 * (1.0f / 3600.0f));
secs = (s32)floorf(value60 * (1.0f / 60.0f)) - mins * 60;
ms = (s32)floorf(value60 * 1.6666666269302f) - mins * 6000 - secs * 100;
gdl = text0f153628(gdl);
gdl = bgunRenderHudInteger(gdl, (mins % 100) / 10, viewright - 18, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudInteger(gdl, mins % 10, viewright - 14, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudString(gdl, fmt, viewright - 8, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudInteger(gdl, (secs % 60) / 10, viewright - 2, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudInteger(gdl, secs % 10, viewright + 2, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudString(gdl, fmt, viewright + 8, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudInteger(gdl, (ms % 100) / 10, viewright + 14, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = bgunRenderHudInteger(gdl, ms % 10, viewright + 18, HUDHALIGN_MIDDLE, y, HUDVALIGN_MIDDLE, 0x00ff00a0);
gdl = text0f153780(gdl);
}
return gdl;
}
#if VERSION >= VERSION_NTSC_1_0
void projectilesDebug(void)
{
s32 i;
for (i = 0; i < g_MaxProjectiles; i++) {
if (g_Projectiles[i].flags) {
// empty
}
}
for (i = 0; i < g_MaxWeaponSlots; i++) {
if (g_WeaponSlots[i].weaponnum) {
// empty
}
}
}
#endif
const char var7f1aa16c[] = "ALARM : PAN 1 = %d (%s%f)";
const char var7f1aa188[] = "";
const char var7f1aa18c[] = "ALARM : DIR 1 = %d";
const char var7f1aa1a0[] = "ALARM : ADD 1 = %d (%s%f)";
const char var7f1aa1bc[] = "";
void alarmTick(void)
{
if (alarmIsActive()) {
s16 sound;
// These sounds are alarm sounds.
// They go for a fraction of a second and are repeated by this function.
switch (g_Vars.stagenum) {
case STAGE_CHICAGO: sound = SFX_ALARM_CHICAGO; break;
case STAGE_G5BUILDING: sound = SFX_ALARM_2; break;
case STAGE_AIRBASE: sound = SFX_ALARM_AIRBASE; break;
case STAGE_PELAGIC: sound = SFX_ALARM_2; break;
case STAGE_ATTACKSHIP: sound = SFX_ALARM_ATTACKSHIP; break;
case STAGE_INFILTRATION: sound = SFX_ALARM_INFILTRATION; break;
default: sound = SFX_ALARM_DEFAULT; break;
}
if (!lvIsPaused()) {
if (g_AlarmAudioHandle) {
// The sound is currently playing. Cycle between the left/right
// speaker for stereo or headphone mode.
f32 increment = g_Vars.lvupdate240 / 15.0f;
if (increment > 10) {
increment = 10;
}
g_AlarmSpeakerWeight += g_AlarmSpeakerDirection * increment;
if (g_AlarmSpeakerWeight < 30) {
g_AlarmSpeakerWeight = 30;
g_AlarmSpeakerDirection *= -1;
} else if (g_AlarmSpeakerWeight > 98) {
g_AlarmSpeakerWeight = 98;
g_AlarmSpeakerDirection *= -1;
}
sndAdjust(&g_AlarmAudioHandle, 0, 0x7fff, g_AlarmSpeakerWeight, -1, -1, 0, -1, 1);
} else {
// The alarm finished, or this is the first one.
// Start the sound again.
sndStart(var80095200, sound, &g_AlarmAudioHandle, -1, -1, -1, -1, -1);
}
}
g_AlarmTimer += g_Vars.lvupdate240_60;
}
// For G5, stop alarm after 55 seconds.
// For all other levels, stop alarm after 30 seconds.
if ((g_AlarmTimer > TICKS(1800) && mainGetStageNum() != STAGE_G5BUILDING)
|| (g_AlarmTimer > TICKS(3300) && mainGetStageNum() == STAGE_G5BUILDING)) {
alarmDeactivate();
}
gasTick();
countdownTimerTick();
chrsTriggerProxies();
g_PlayersDetonatingMines = 0;
}
void func0f091030(void)
{
struct prop *prop = g_Vars.activeprops;
while (prop) {
if (prop->type == PROPTYPE_OBJ
&& (prop->flags & (PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK | PROPFLAG_ONANYSCREENPREVTICK)) == 0
&& (prop->obj->hidden2 & OBJH2FLAG_DESTROYED)
&& (prop->obj->hidden2 & OBJH2FLAG_80)) {
objFreePermanently(prop->obj, true);
return;
}
prop = prop->next;
}
}
void currentPlayerDropAllItems(void)
{
struct chrdata *chr = g_Vars.currentplayer->prop->chr;
s32 i;
weaponDeleteFromChr(chr, HAND_RIGHT);
weaponDeleteFromChr(chr, HAND_LEFT);
for (i = WEAPON_UNARMED; i <= WEAPON_SUICIDEPILL; i++) {
if (playermgrGetModelOfWeapon(i) >= 0 && invHasSingleWeaponExcAllGuns(i)) {
if (!weaponHasFlag(i, WEAPONFLAG_08000000)
|| (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
}
}
}
}
void weaponCreateForPlayerDrop(s32 weaponnum)
{
u32 stack;
struct prop *prop;
struct chrdata *chr;
u32 stack2;
chr = g_Vars.currentplayer->prop->chr;
prop = weaponCreateForChr(chr, playermgrGetModelOfWeapon(weaponnum), weaponnum, OBJFLAG_WEAPON_AICANNOTUSE, NULL, NULL);
if (prop) {
objSetDropped(prop, DROPTYPE_DEFAULT);
objDrop(prop, true);
if (weaponnum == WEAPON_BRIEFCASE2) {
scenarioHandleDroppedToken(chr, prop);
}
}
}
void projectileCreate(struct prop *fromprop, struct fireslotthing *arg1, struct coord *pos, struct coord *dir, u8 weaponnum, struct prop *targetprop)
{
if (!lvIsPaused()) {
bool blocked = false;
struct coord endpos;
u32 stack;
f32 x;
f32 y;
f32 z;
f32 sqdist;
struct prop *obstacle = NULL;
s16 sp1c8[8];
u8 forcebeam = false;
struct beam beam;
struct coord frompos;
u32 stack2;
u8 drug = false;
u32 stack3;
frompos.x = pos->x;
frompos.y = pos->y;
frompos.z = pos->z;
if (weaponnum == WEAPON_TRANQUILIZER) {
forcebeam = true;
beam.age = -1;
drug = true;
frompos.y -= 40.0f;
}
if (arg1 && arg1->unk08 < g_Vars.lvframe60) {
switch (weaponnum) {
case WEAPON_CHOPPERGUN:
func0f0926bc(fromprop, 7, 0xffff);
propsnd0f0939f8(0, fromprop, SFX_810E, -1, -1, 0, 0, 7, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
arg1->unk08 = g_Vars.lvframe60 + 4;
break;
case WEAPON_RCP45:
func0f0926bc(fromprop, 1, 0xffff);
propsnd0f0939f8(0, fromprop, SFX_805A, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
arg1->unk08 = g_Vars.lvframe60 + 2;
break;
case WEAPON_WATCHLASER:
func0f0926bc(fromprop, 1, 0xffff);
propsnd0f0939f8(0, fromprop, SFX_8043, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
arg1->unk08 = g_Vars.lvframe60 + 8;
break;
default:
func0f0926bc(fromprop, 1, 0xffff);
propsnd0f0939f8(0, fromprop, SFX_8045, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
arg1->unk08 = g_Vars.lvframe60 + 2;
break;
}
}
if (targetprop) {
x = targetprop->pos.f[0] - pos->f[0] - dir->f[0] * 15.0f;
y = targetprop->pos.f[1] - pos->f[1] - dir->f[1] * 15.0f;
z = targetprop->pos.f[2] - pos->f[2] - dir->f[2] * 15.0f;
sqdist = x * x + y * y + z * z;
} else {
sqdist = 0x20000000;
}
if (weaponnum == WEAPON_ROCKETLAUNCHER) {
struct weaponobj *rocket;
Mtxf sp13c;
struct coord sp130;
struct chopperobj *chopper = chopperFromHovercar((struct chopperobj *)fromprop->obj);
if (chopper && sqdist > 400.0f * 400.0f) {
struct coord sp120;
Mtxf spe0;
Mtxf spa0;
f32 rotx = chopper->rotx;
f32 roty = chopper->roty;
rocket = weaponCreateProjectileFromWeaponNum(MODEL_CHRDYROCKETMIS, WEAPON_ROCKET, NULL);
if (rocket) {
mtx4LoadIdentity(&sp13c);
mtx4LoadXRotation(rotx, &spe0);
mtx4LoadYRotation(roty, &spa0);
mtx00015be0(&spa0, &spe0);
sp120.x = dir->x * 0.27777776f;
sp120.y = dir->y * 0.27777776f;
sp120.z = dir->z * 0.27777776f;
sp130.x = sp120.f[0] * g_Vars.lvupdate240freal;
sp130.y = sp120.f[1] * g_Vars.lvupdate240freal;
sp130.z = sp120.f[2] * g_Vars.lvupdate240freal;
bgun0f09ebcc(&rocket->base, pos, fromprop->rooms, &spe0, &sp130, &sp13c, fromprop, pos);
if (rocket->base.hidden & OBJHFLAG_PROJECTILE) {
rocket->timer240 = -1;
rocket->base.projectile->flags |= PROJECTILEFLAG_POWERED;
rocket->base.projectile->unk010 = sp120.x;
rocket->base.projectile->unk014 = sp120.y;
rocket->base.projectile->unk018 = sp120.z;
propsnd0f0939f8(NULL, rocket->base.prop, SFX_LAUNCH_ROCKET_8053, -1, -1, 0, 0, 0, 0, -1.0f, 0, -1, -1.0f, -1.0f, -1.0f);
}
}
}
} else {
struct gset gset = {0};
gset.weaponnum = weaponnum;
endpos.x = pos->x + dir->f[0] * 65536.0f;
endpos.y = pos->y + dir->f[1] * 65536.0f;
endpos.z = pos->z + dir->f[2] * 65536.0f;
propSetPerimEnabled(fromprop, false);
if (cdTestAToB4(pos, fromprop->rooms, &endpos, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER| CDTYPE_BG, 0x10) == CDRESULT_COLLISION) {
blocked = true;
#if VERSION >= VERSION_JPN_FINAL
cdGetPos(&endpos, 24883, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_FINAL
cdGetPos(&endpos, 24873, "prop/propobj.c");
#elif VERSION >= VERSION_PAL_BETA
cdGetPos(&endpos, 24873, "propobj.c");
#elif VERSION >= VERSION_NTSC_1_0
cdGetPos(&endpos, 24482, "propobj.c");
#else
cdGetPos(&endpos, 24137, "propobj.c");
#endif
obstacle = cdGetObstacle();
}
propSetPerimEnabled(fromprop, true);
x = endpos.x - pos->x;
y = endpos.y - pos->y;
z = endpos.z - pos->z;
if (targetprop && sqdist <= x * x + y * y + z * z) {
f32 dist = sqrtf(sqdist);
struct coord aimpos;
aimpos.x = targetprop->pos.x;
aimpos.y = targetprop->pos.y - 20.0f;
aimpos.z = targetprop->pos.z;
if (func0f06b39c(pos, dir, &aimpos, 30)) {
f32 f0 = 0.16f * g_Vars.lvupdate240freal * arg1->unk0c;
if (dist > 200.0f) {
f0 *= 200.0f / dist;
}
arg1->unk14 += f0;
if (arg1->unk14 >= 1.0f) {
blocked = false;
endpos.x = targetprop->pos.x;
endpos.y = targetprop->pos.y;
endpos.z = targetprop->pos.z;
if (random() % 2) {
endpos.y += (random() % 10) + 2;
} else {
endpos.y -= (random() % 10) + 2;
}
bgunPlayPropHitSound(&gset, targetprop, -1);
chrDamageByImpact(targetprop->chr, gsetGetDamage(&gset) * arg1->unk10, dir, &gset, 0, 200);
arg1->unk14 = 0.0f;
}
}
}
if (blocked) {
if (obstacle) {
if (obstacle->type == PROPTYPE_CHR || obstacle->type == PROPTYPE_PLAYER) {
struct modelnode *node = NULL;
struct model *model = NULL;
s32 side = -1;
s32 hitpart = HITPART_GENERAL;
struct chrdata *chr = obstacle->chr;
if (weaponnum != WEAPON_CHOPPERGUN) {
bgunPlayPropHitSound(&gset, obstacle, -1);
}
if (chr->model) {
chrCalculateShieldHit(chr, &endpos, dir, &node, &hitpart, &model, &side);
}
chrEmitSparks(chr, obstacle, hitpart, &endpos, dir, NULL);
if (drug) {
chr->blurdrugamount = TICKS(5000);
}
func0f0341dc(chr, gsetGetDamage(&gset), dir, &gset, 0, hitpart, obstacle, node, model, side, NULL);
} else if (obstacle->type == PROPTYPE_OBJ || obstacle->type == PROPTYPE_WEAPON || obstacle->type == PROPTYPE_DOOR) {
struct defaultobj *obj = obstacle->obj;
if (weaponnum != WEAPON_CHOPPERGUN) {
bgunPlayPropHitSound(&gset, obstacle, -1);
}
func0f065e74(pos, fromprop->rooms, &endpos, sp1c8);
sparksCreate(sp1c8[0], obstacle, &endpos, NULL, NULL, SPARKTYPE_DEFAULT);
objTakeGunfire(obstacle->obj, gsetGetDamage(&gset), &endpos, weaponnum, -1);
if (obj->type == OBJTYPE_WEAPON) {
struct weaponobj *weapon = (struct weaponobj *)obj;
if (weapon->weaponnum == WEAPON_DRAGON && weapon->gunfunc == FUNC_SECONDARY) {
weapon->timer240 = 0;
}
}
}
} else {
func0f065e74(pos, fromprop->rooms, &endpos, sp1c8);
if (weaponnum != WEAPON_CHOPPERGUN) {
bgunPlayBgHitSound(&gset, &endpos, -1, sp1c8);
}
sparksCreate(sp1c8[0], NULL, &endpos, NULL, NULL, SPARKTYPE_DEFAULT);
}
}
if (forcebeam || (arg1 && arg1->unk01)) {
struct beam *beamptr;
if (forcebeam) {
beamptr = &beam;
} else {
beamptr = arg1->beam;
}
beamCreate(beamptr, forcebeam ? WEAPON_FALCON2 : weaponnum, &frompos, &endpos);
}
}
}
}
void objSetModelPartVisible(struct defaultobj *obj, s32 partnum, bool visible)
{
if (obj && obj->model && obj->model->filedata) {
struct modelnode *node = modelGetPart(obj->model->filedata, partnum);
if (node) {
union modelrwdata *rwdata = modelGetNodeRwData(obj->model, node);
if (rwdata) {
if (visible) {
visible = true;
} else {
visible = false;
}
rwdata->toggle.visible = visible;
}
}
}
}
Gfx *func0f091e04(Gfx *gdl, u32 arg1)
{
return gdl;
}