Files
perfect_dark/src/game/chr/chraction.c
T
2021-05-22 22:22:02 +10:00

32951 lines
1.1 MiB
Plaintext

#include <ultra64.h>
#include "constants.h"
#include "game/chr/chraction.h"
#include "game/chr/chrai.h"
#include "game/debug.h"
#include "game/dlights.h"
#include "game/game_006900.h"
#include "game/game_01b0a0.h"
#include "game/chr/chr.h"
#include "game/game_02cde0.h"
#include "game/prop.h"
#include "game/game_092610.h"
#include "game/game_095320.h"
#include "game/atan2f.h"
#include "game/game_0969d0.h"
#include "game/game_097ba0.h"
#include "game/game_0abe70.h"
#include "game/game_0b0fd0.h"
#include "game/game_0b28d0.h"
#include "game/game_0b3350.h"
#include "game/game_0b4950.h"
#include "game/game_0b69d0.h"
#include "game/inventory/inventory.h"
#include "game/game_127910.h"
#include "game/explosions/explosions.h"
#include "game/sparks/sparks.h"
#include "game/bg.h"
#include "game/game_1655c0.h"
#include "game/game_165670.h"
#include "game/game_1657c0.h"
#include "game/lv.h"
#include "game/game_190260.h"
#include "game/game_197600.h"
#include "game/game_1999b0.h"
#include "game/mplayer/mplayer.h"
#include "game/pad.h"
#include "game/padhalllv.h"
#include "game/pak/pak.h"
#include "game/propobj.h"
#include "game/wallhit.h"
#include "game/mpstats.h"
#include "bss.h"
#include "lib/joy.h"
#include "lib/main.h"
#include "lib/model.h"
#include "lib/snd.h"
#include "lib/rng.h"
#include "lib/lib_159b0.h"
#include "lib/lib_16110.h"
#include "lib/lib_184d0.h"
#include "lib/lib_233c0.h"
#include "lib/lib_24e40.h"
#include "data.h"
#include "types.h"
#if VERSION < VERSION_NTSC_1_0
const char *g_ChrActionNames[] = {
"ACT_INIT",
"ACT_STAND",
"ACT_KNEEL",
"ACT_ANIM",
"ACT_DIE",
"ACT_DEAD",
"ACT_ARGH",
"ACT_PREARGH",
"ACT_ATTACK",
"ACT_ATTACKWALK",
"ACT_ATTACKROLL",
"ACT_SIDESTEP",
"ACT_JUMPOUT",
"ACT_RUNPOS",
"ACT_PATROL",
"ACT_GOPOS",
"ACT_SURRENDER",
"ACT_LOOKATTARGET",
"ACT_SURPRISED",
"ACT_STARTALARM",
"ACT_THROWGRENADE",
"ACT_TURNDIR",
"ACT_TEST",
"ACT_BONDINTRO",
"ACT_BONDDIE",
"ACT_BONDMULTI",
"ACT_NULL",
"ACT_BOT_ATTACKSTAND",
"ACT_BOT_ATTACKKNEEL",
"ACT_BOT_ATTACKSTRAFE",
"ACT_DRUGGEDDROP",
"ACT_DRUGGEDKO",
"ACT_DRUGGEDCOMINGUP",
"ACT_ATTACKAMOUNT",
"ACT_ROBOTATTACK",
"ACT_SKJUMP",
"ACT_PUNCH",
"ACT_CUTFIRE",
};
const char *g_ChrMyActionNames[] = {
"NONE",
"NORMAL",
"COVERWAIT",
"GRENADEWAIT",
"WAITING",
"COVERGOTO",
"COVERBREAK",
"COVERSEEN",
"FLANKLEFT",
"FLANKRIGHT",
"DODGE",
"GRENADE",
"WAITSEEN",
"WITHDRAW",
"SHOOTING",
"SYNCSHOOT",
"WAITTIMEOUT",
"COVERTIMEOUT",
"TRACKING",
"RETREAT",
"SURRENDER",
"TALKING",
"LISTENING",
"GOTOALARM",
"BOTFRIENDFOLLOW",
"BOTHIDE",
"BOTPATH",
"BOTINJURED",
"BOTNORMAL",
"BOTSHOOTING",
"DRUGGED",
"PANIC",
"RUNFROMGRENADE",
"UNARMEDATTACK",
"MA_SKJUMP_START",
"MA_SKJUMP_AIR",
"MA_SKJUMP_LAND",
"MA_SKJUMP_LANDLOOP",
"MA_SKJUMP_SHOT",
"AIBOTDEADLIST",
"AIBOTINIT",
"AIBOTMAINLOOP",
"AIBOTGETITEM",
"AIBOTGOTOPOS",
"AIBOTGOTOPROP",
"AIBOTRUNAWAY",
"AIBOTDOWNLOAD",
"AIBOTATTACK",
"unused1",
"unused2",
"AIBOTFOLLOW",
"AIBOTDEFEND",
"FLANKBEST",
"FACING",
"PUNCHING",
};
const char *g_ChrActionNames2[] = {
"ACT_INIT",
"ACT_STAND",
"ACT_KNEEL",
"ACT_ANIM",
"ACT_DIE",
"ACT_DEAD",
"ACT_ARGH",
"ACT_PREARGH",
"ACT_ATTACK",
"ACT_ATTACKWALK",
"ACT_ATTACKROLL",
"ACT_SIDESTEP",
"ACT_JUMPOUT",
"ACT_RUNPOS",
"ACT_PATROL",
"ACT_GOPOS",
"ACT_SURRENDER",
"ACT_LOOKATTARGET",
"ACT_SURPRISED",
"ACT_STARTALARM",
"ACT_THROWGRENADE",
"ACT_TURNDIR",
"ACT_TEST",
"ACT_BONDINTRO",
"ACT_BONDDIE",
"ACT_BONDMULTI",
"ACT_NULL",
"ACT_BOT_ATTACKSTAND",
"ACT_BOT_ATTACKKNEEL",
"ACT_BOT_ATTACKSTRAFE",
"ACT_DRUGGEDDROP",
"ACT_DRUGGEDKO",
"ACT_DRUGGEDCOMINGUP",
"ACT_ATTACKAMOUNT",
"ACT_ROBOTATTACK",
"ACT_SKJUMP",
};
const char *g_ChrLiftActionNames[] = {
"NOTUSINGLIFT",
"WAITINGFORLIFT",
"ONLIFT",
"WAITINGONLIFT",
};
#endif
s32 g_RecentQuipsPlayed[5];
u32 var8009cd84;
u32 var8009cd88;
u32 var8009cd8c;
u32 var8009cd90;
u32 var8009cd94;
u8 g_RecentQuipsIndex;
f32 g_EnemyAccuracyScale = 1;
f32 g_DamageReceivedScale = 1;
f32 g_DamageDealtScale = 1;
f32 var80062cac = 1;
u32 var80062cb0 = 0x00000000;
u32 var80062cb4 = 0x00000000;
u32 var80062cb8 = 0x00000000;
s32 var80062cbc = 0;
struct animtablerow g_DeathAnimsHumanLfoot[] = {
{ 0x0020, 0, -1, 0.5, 0, 26, -1 },
{ 0, 0, 0, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanLshin[] = {
{ 0x0020, 0, -1, 0.5, 0, 26, -1 },
{ 0, 0, 0, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanLthigh[] = {
{ 0x0020, 0, -1, 0.5, 1, 26, -1 },
{ 0x0039, 1, -1, 0.5, 0, -1, -1 },
{ 0x0092, 1, -1, 0.4, 0, 42, 103 },
{ 0x0258, 1, -1, 0.5, 0, 43, 100 },
{ 0, 0, 0, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanRfoot[] = {
{ 0x0020, 1, -1, 0.5, 0, 26, -1 },
{ 0, 0, 0, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanRshin[] = {
{ 0x0020, 1, -1, 0.5, 0, 26, -1 },
{ 0, 0, 0, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanRthigh[] = {
{ 0x0020, 1, -1, 0.5, 1, 26, -1 },
{ 0x0039, 0, -1, 0.5, 0, -1, -1 },
{ 0x0092, 0, -1, 0.4, 0, 42, 103 },
{ 0x0258, 0, -1, 0.5, 0, 43, 100 },
{ 0, 0, 0, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanPelvis[] = {
{ 0x001a, 0, -1, 0.5, 0, 55, 39 },
{ 0x001a, 1, -1, 0.5, 0, 55, 39 },
{ 0x001c, 0, -1, 0.5, 1, 29, -1 },
{ 0x001c, 1, -1, 0.5, 1, 29, -1 },
{ 0x0021, 0, -1, 0.5, 0, 97, 64 },
{ 0x0021, 1, -1, 0.5, 0, 97, 64 },
{ 0x0023, 0, -1, 0.5, 0, 31, -1 },
{ 0x0023, 1, -1, 0.5, 0, 31, -1 },
{ 0x0024, 0, -1, 0.5, 0, 36, -1 },
{ 0x0024, 1, -1, 0.5, 0, 36, -1 },
{ 0x0025, 0, -1, 0.5, 0, 28, -1 },
{ 0x0025, 1, -1, 0.5, 0, 28, -1 },
{ 0x0090, 0, -1, 0.6, 0, 157, 234 },
{ 0x0090, 1, -1, 0.6, 0, 157, 234 },
{ 0x0091, 0, -1, 0.6, 0, 75, 265 },
{ 0x0091, 1, -1, 0.6, 0, 75, 265 },
{ 0x0250, 0, -1, 0.5, 0, 65, 105 },
{ 0x0250, 1, -1, 0.5, 0, 65, 105 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanHead[] = {
{ 0x001a, 0, -1, 0.5, 0, 55, 39 },
{ 0x001a, 1, -1, 0.5, 0, 55, 39 },
{ 0x001c, 0, -1, 0.5, 1, 29, -1 },
{ 0x001c, 1, -1, 0.5, 1, 29, -1 },
{ 0x0020, 0, -1, 0.5, 1, 26, -1 },
{ 0x0020, 1, -1, 0.5, 1, 26, -1 },
{ 0x0021, 0, -1, 0.5, 0, 97, 64 },
{ 0x0021, 1, -1, 0.5, 0, 97, 64 },
{ 0x0022, 0, -1, 0.5, 0, 94, 66 },
{ 0x0022, 1, -1, 0.5, 0, 94, 66 },
{ 0x0023, 0, -1, 0.5, 0, 31, -1 },
{ 0x0023, 1, -1, 0.5, 0, 31, -1 },
{ 0x0024, 0, -1, 0.5, 0, 36, -1 },
{ 0x0024, 1, -1, 0.5, 0, 36, -1 },
{ 0x0025, 0, -1, 0.5, 0, 28, -1 },
{ 0x0025, 1, -1, 0.5, 0, 28, -1 },
{ 0x0038, 0, -1, 0.5, 0, -1, -1 },
{ 0x0038, 1, -1, 0.5, 0, -1, -1 },
{ 0x0251, 0, -1, 0.5, 0, 132, 201 },
{ 0x0251, 1, -1, 0.5, 0, 132, 201 },
{ 0x0252, 0, -1, 0.5, 0, 83, 150 },
{ 0x0252, 1, -1, 0.5, 0, 83, 150 },
{ 0x0256, 0, -1, 0.5, 0, 63, -1 },
{ 0x0256, 1, -1, 0.5, 0, 63, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanLhand[] = {
{ 0x0020, 0, -1, 0.5, 0, 26, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanForearm[] = {
{ 0x0020, 0, -1, 0.5, 0, 26, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanLbicep[] = {
{ 0x0020, 0, -1, 0.5, 1, 26, -1 },
{ 0x008f, 1, -1, 0.45, 1, 52, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanRhand[] = {
{ 0x0020, 1, -1, 0.5, 0, 26, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanRforearm[] = {
{ 0x0020, 1, -1, 0.5, 0, 26, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanRbicep[] = {
{ 0x0020, 1, -1, 0.5, 1, 26, -1 },
{ 0x008f, 0, -1, 0.45, 1, 52, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanTorso[] = {
{ 0x001a, 0, -1, 0.5, 0, 55, 39 },
{ 0x001a, 1, -1, 0.5, 0, 55, 39 },
{ 0x001c, 0, -1, 0.5, 1, 29, -1 },
{ 0x001c, 1, -1, 0.5, 1, 29, -1 },
{ 0x0020, 0, -1, 0.5, 1, 26, -1 },
{ 0x0020, 1, -1, 0.5, 1, 26, -1 },
{ 0x0021, 0, -1, 0.5, 0, 97, 64 },
{ 0x0021, 1, -1, 0.5, 0, 97, 64 },
{ 0x0022, 0, -1, 0.5, 0, 94, 66 },
{ 0x0022, 1, -1, 0.5, 0, 94, 66 },
{ 0x0023, 0, -1, 0.5, 0, 31, -1 },
{ 0x0023, 1, -1, 0.5, 0, 31, -1 },
{ 0x0024, 0, -1, 0.5, 0, 36, -1 },
{ 0x0024, 1, -1, 0.5, 0, 36, -1 },
{ 0x0025, 0, -1, 0.5, 0, 28, -1 },
{ 0x0025, 1, -1, 0.5, 0, 28, -1 },
{ 0x024e, 0, -1, 0.4, 0, 60, -1 },
{ 0x024e, 1, -1, 0.4, 0, 60, -1 },
{ 0x024f, 0, -1, 0.5, 0, 49, 80 },
{ 0x024f, 1, -1, 0.5, 0, 49, 80 },
{ 0x0253, 0, -1, 0.5, 1, 22, -1 },
{ 0x0253, 1, -1, 0.5, 1, 22, -1 },
{ 0x0254, 0, -1, 0.5, 0, 52, 75 },
{ 0x0254, 1, -1, 0.5, 0, 52, 75 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsHumanGun[] = {
{ 0x001a, 0, -1, 0.5, 0, 55, 39 },
{ 0x001a, 1, -1, 0.5, 0, 55, 39 },
{ 0x001c, 0, -1, 0.5, 1, 29, -1 },
{ 0x001c, 1, -1, 0.5, 1, 29, -1 },
{ 0x0021, 0, -1, 0.5, 0, 97, 64 },
{ 0x0021, 1, -1, 0.5, 0, 97, 64 },
{ 0x0022, 0, -1, 0.5, 0, 94, 66 },
{ 0x0022, 1, -1, 0.5, 0, 94, 66 },
{ 0x0023, 0, -1, 0.5, 0, 31, -1 },
{ 0x0023, 1, -1, 0.5, 0, 31, -1 },
{ 0x0024, 0, -1, 0.5, 0, 36, -1 },
{ 0x0024, 1, -1, 0.5, 0, 36, -1 },
{ 0x0025, 0, -1, 0.5, 0, 28, -1 },
{ 0x0025, 1, -1, 0.5, 0, 28, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_AnimTableHumanSlumped[] = {
{ 0x0019, 0, -1, 0.5, 0, 67, 54 },
{ 0x0019, 1, -1, 0.5, 0, 67, 54 },
{ 0x0257, 0, -1, 0.5, 0, 15, 80 },
{ 0x0257, 1, -1, 0.5, 0, 15, 80 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanLfoot[] = {
{ 0x0014, 0, -1, 0.5, 0, -1, -1 },
{ 0x0015, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanLshin[] = {
{ 0x0014, 0, -1, 0.5, 0, -1, -1 },
{ 0x0015, 1, -1, 0.5, 0, -1, -1 },
{ 0x00bc, 0, -1, 0.5, 0, -1, -1 },
{ 0x00bd, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanLthigh[] = {
{ 0x0014, 0, -1, 0.5, 0, -1, -1 },
{ 0x0015, 1, -1, 0.5, 0, -1, -1 },
{ 0x0039, 1, 20, 0.4, 0, -1, -1 },
{ 0x00ba, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanRfoot[] = {
{ 0x0015, 0, -1, 0.5, 0, -1, -1 },
{ 0x0014, 1, -1, 0.5, 0, -1, -1 },
{ 0x0236, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanRshin[] = {
{ 0x0015, 0, -1, 0.5, 0, -1, -1 },
{ 0x0014, 1, -1, 0.5, 0, -1, -1 },
{ 0x00be, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanRthigh[] = {
{ 0x0015, 0, -1, 0.5, 0, -1, -1 },
{ 0x0014, 1, -1, 0.5, 0, -1, -1 },
{ 0x0039, 0, 20, 0.4, 0, -1, -1 },
{ 0x00bf, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanPelvis[] = {
{ 0x0022, 0, 20, 0.5, 0, -1, -1 },
{ 0x0022, 1, 20, 0.5, 0, -1, -1 },
{ 0x001a, 0, 15, 0.5, 0, -1, -1 },
{ 0x001a, 1, 15, 0.5, 0, -1, -1 },
{ 0x0023, 0, 10, 0.25, 0, -1, -1 },
{ 0x0023, 1, 10, 0.25, 0, -1, -1 },
{ 0x00da, 0, -1, 0.5, 0, -1, -1 },
{ 0x00f4, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanHead[] = {
{ 0x0022, 0, 20, 0.5, 0, -1, -1 },
{ 0x0022, 1, 20, 0.5, 0, -1, -1 },
{ 0x001a, 0, 15, 0.5, 0, -1, -1 },
{ 0x001a, 1, 15, 0.5, 0, -1, -1 },
{ 0x00f8, 0, -1, 0.5, 0, -1, -1 },
{ 0x00fb, 0, -1, 0.5, 0, -1, -1 },
{ 0x0101, 0, -1, 0.5, 0, -1, -1 },
{ 0x0113, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanLhand[] = {
{ 0x0012, 0, -1, 0.5, 0, -1, -1 },
{ 0x0013, 1, -1, 0.5, 0, -1, -1 },
{ 0x00b8, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanForearm[] = {
{ 0x0010, 0, -1, 0.5, 0, -1, -1 },
{ 0x0011, 1, -1, 0.5, 0, -1, -1 },
{ 0x00b4, 0, -1, 0.5, 0, -1, -1 },
{ 0x021b, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanLbicep[] = {
{ 0x000e, 0, -1, 0.5, 0, -1, -1 },
{ 0x000f, 1, -1, 0.5, 0, -1, -1 },
{ 0x0022, 0, 20, 0.5, 0, -1, -1 },
{ 0x00b0, 0, -1, 0.5, 0, -1, -1 },
{ 0x00b1, 0, -1, 0.5, 0, -1, -1 },
{ 0x021c, 0, -1, 0.5, 0, -1, -1 },
{ 0x00b5, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanRhand[] = {
{ 0x0013, 0, -1, 0.5, 0, -1, -1 },
{ 0x0012, 1, -1, 0.5, 0, -1, -1 },
{ 0x00b9, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanRforearm[] = {
{ 0x0011, 0, -1, 0.5, 0, -1, -1 },
{ 0x0010, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanRbicep[] = {
{ 0x000f, 0, -1, 0.5, 0, -1, -1 },
{ 0x000e, 1, -1, 0.5, 0, -1, -1 },
{ 0x0022, 1, 20, 0.5, 0, -1, -1 },
{ 0x0190, 0, -1, 0.5, 0, -1, -1 },
{ 0x00b2, 0, -1, 0.5, 0, -1, -1 },
{ 0x00b3, 0, -1, 0.5, 0, -1, -1 },
{ 0x00b6, 0, -1, 0.5, 0, -1, -1 },
{ 0x00b7, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanTorso[] = {
{ 0x0022, 0, 20, 0.5, 0, -1, -1 },
{ 0x0022, 1, 20, 0.5, 0, -1, -1 },
{ 0x001a, 0, 15, 0.5, 0, -1, -1 },
{ 0x001a, 1, 15, 0.5, 0, -1, -1 },
{ 0x0114, 1, -1, 0.5, 0, -1, -1 },
{ 0x0130, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsHumanGun[] = {
{ 0x0022, 0, 20, 0.5, 0, -1, -1 },
{ 0x0022, 1, 20, 0.5, 0, -1, -1 },
{ 0x001a, 0, 15, 0.5, 0, -1, -1 },
{ 0x001a, 1, 15, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarLfoot[] = {
{ 0x0337, 1, -1, 0.5, 0, -1, -1 },
{ 0x033c, 1, -1, 0.5, 0, -1, -1 },
{ 0x033b, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarLshin[] = {
{ 0x0337, 1, -1, 0.5, 0, -1, -1 },
{ 0x033c, 1, -1, 0.5, 0, -1, -1 },
{ 0x033b, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarLthigh[] = {
{ 0x0337, 1, -1, 0.5, 0, -1, -1 },
{ 0x033c, 1, -1, 0.5, 0, -1, -1 },
{ 0x033b, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarRfoot[] = {
{ 0x0337, 0, -1, 0.5, 0, -1, -1 },
{ 0x033c, 0, -1, 0.5, 0, -1, -1 },
{ 0x033b, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarRshin[] = {
{ 0x0337, 0, -1, 0.5, 0, -1, -1 },
{ 0x033c, 0, -1, 0.5, 0, -1, -1 },
{ 0x033b, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarRthigh[] = {
{ 0x0337, 0, -1, 0.5, 0, -1, -1 },
{ 0x033c, 0, -1, 0.5, 0, -1, -1 },
{ 0x033b, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarPelvis[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarHead[] = {
{ 0x0339, 0, -1, 0.5, 0, -1, -1 },
{ 0x0338, 0, -1, 0.5, 0, -1, -1 },
{ 0x033a, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarLhand[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarLforearm[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarLbicep[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarRhand[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarRforearm[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarRbicep[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarTorso[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarGun[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_DeathAnimsSkedarTail[] = {
{ 0x0336, 0, -1, 0.5, 0, -1, -1 },
{ 0x033d, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarLfoot[] = {
{ 0x038e, 0, -1, 1, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarLshin[] = {
{ 0x0390, 0, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarLthigh[] = {
{ 0x0390, 0, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarRfoot[] = {
{ 0x038e, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarRshin[] = {
{ 0x0390, 1, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarRthigh[] = {
{ 0x0390, 1, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarPelvis[] = {
{ 0x038c, 0, -1, 0.9, 0, -1, -1 },
{ 0x038c, 1, -1, 0.9, 0, -1, -1 },
{ 0x0341, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarHead[] = {
{ 0x0341, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarLhand[] = {
{ 0x0343, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarLforearm[] = {
{ 0x038b, 0, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarLbicep[] = {
{ 0x038b, 0, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarRhand[] = {
{ 0x0343, 1, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarRforearm[] = {
{ 0x038b, 1, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarRbicep[] = {
{ 0x038b, 1, -1, 0.9, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarTorso[] = {
{ 0x038c, 0, -1, 0.9, 0, -1, -1 },
{ 0x038c, 1, -1, 0.9, 0, -1, -1 },
{ 0x0341, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarGun[] = {
{ 0x0343, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_InjuryAnimsSkedarTail[] = {
{ 0x0341, 0, -1, 0.5, 0, -1, -1 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtablerow g_SpecialDieAnims[] = {
{ ANIM_SPECIALDIE_FALLBACK, 0, -1, 0.5, 0, 149, 175 },
{ ANIM_SPECIALDIE_ROLL1, 0, -1, 0.5, 0, 115, 152 },
{ ANIM_SPECIALDIE_ROLL2, 0, -1, 0.5, 0, 115, 152 },
{ ANIM_SPECIALDIE_ROLL3, 0, -1, 0.5, 0, 115, 152 },
{ ANIM_SPECIALDIE_OVERRAILING, 0, -1, 0.5, 0, 83, 99 },
{ 0x022b, 0, -1, 0.5, 0, 0, 0 },
{ 0x022c, 0, -1, 0.5, 0, 0, 0 },
{ 0x022d, 0, -1, 0.5, 0, 0, 0 },
{ 0x022e, 0, -1, 0.5, 0, 0, 0 },
{ 0, 0, -1, 0.5, 0, -1, -1 },
};
struct animtable g_AnimTablesHuman[] = {
{ 0, NULL, NULL, 0, 0 },
{ IBH_LFOOT, g_DeathAnimsHumanLfoot, g_InjuryAnimsHumanLfoot, 0, 0 },
{ IBH_LSHIN, g_DeathAnimsHumanLshin, g_InjuryAnimsHumanLshin, 0, 0 },
{ IBH_LTHIGH, g_DeathAnimsHumanLthigh, g_InjuryAnimsHumanLthigh, 0, 0 },
{ IBH_RFOOT, g_DeathAnimsHumanRfoot, g_InjuryAnimsHumanRfoot, 0, 0 },
{ IBH_RSHIN, g_DeathAnimsHumanRshin, g_InjuryAnimsHumanRshin, 0, 0 },
{ IBH_RTHIGH, g_DeathAnimsHumanRthigh, g_InjuryAnimsHumanRthigh, 0, 0 },
{ IBH_PELVIS, g_DeathAnimsHumanPelvis, g_InjuryAnimsHumanPelvis, 0, 0 },
{ IBH_HEAD, g_DeathAnimsHumanHead, g_InjuryAnimsHumanHead, 0, 0 },
{ IBH_LHAND, g_DeathAnimsHumanLhand, g_InjuryAnimsHumanLhand, 0, 0 },
{ IBH_LFOREARM, g_DeathAnimsHumanForearm, g_InjuryAnimsHumanForearm, 0, 0 },
{ IBH_LBICEP, g_DeathAnimsHumanLbicep, g_InjuryAnimsHumanLbicep, 0, 0 },
{ IBH_RHAND, g_DeathAnimsHumanRhand, g_InjuryAnimsHumanRhand, 0, 0 },
{ IBH_RFOREARM, g_DeathAnimsHumanRforearm, g_InjuryAnimsHumanRforearm, 0, 0 },
{ IBH_RBICEP, g_DeathAnimsHumanRbicep, g_InjuryAnimsHumanRbicep, 0, 0 },
{ IBH_TORSO, g_DeathAnimsHumanTorso, g_InjuryAnimsHumanTorso, 0, 0 },
{ IBH_GUN, g_DeathAnimsHumanGun, g_InjuryAnimsHumanGun, 0, 0 },
{ IBH_HAT, NULL, NULL, 0, 0 },
{ -1, NULL, NULL, 0, 0 },
};
struct animtable g_AnimTablesSkedar[] = {
{ 0, NULL, NULL, 0, 0 },
{ IBH_LFOOT, g_DeathAnimsSkedarLfoot, g_InjuryAnimsSkedarLfoot, 0, 0 },
{ IBH_LSHIN, g_DeathAnimsSkedarLshin, g_InjuryAnimsSkedarLshin, 0, 0 },
{ IBH_LTHIGH, g_DeathAnimsSkedarLthigh, g_InjuryAnimsSkedarLthigh, 0, 0 },
{ IBH_RFOOT, g_DeathAnimsSkedarRfoot, g_InjuryAnimsSkedarRfoot, 0, 0 },
{ IBH_RSHIN, g_DeathAnimsSkedarRshin, g_InjuryAnimsSkedarRshin, 0, 0 },
{ IBH_RTHIGH, g_DeathAnimsSkedarRthigh, g_InjuryAnimsSkedarRthigh, 0, 0 },
{ IBH_PELVIS, g_DeathAnimsSkedarPelvis, g_InjuryAnimsSkedarPelvis, 0, 0 },
{ IBH_HEAD, g_DeathAnimsSkedarHead, g_InjuryAnimsSkedarHead, 0, 0 },
{ IBH_LHAND, g_DeathAnimsSkedarLhand, g_InjuryAnimsSkedarLhand, 0, 0 },
{ IBH_LFOREARM, g_DeathAnimsSkedarLforearm, g_InjuryAnimsSkedarLforearm, 0, 0 },
{ IBH_LBICEP, g_DeathAnimsSkedarLbicep, g_InjuryAnimsSkedarLbicep, 0, 0 },
{ IBH_RHAND, g_DeathAnimsSkedarRhand, g_InjuryAnimsSkedarRhand, 0, 0 },
{ IBH_RFOREARM, g_DeathAnimsSkedarRforearm, g_InjuryAnimsSkedarRforearm, 0, 0 },
{ IBH_RBICEP, g_DeathAnimsSkedarRbicep, g_InjuryAnimsSkedarRbicep, 0, 0 },
{ IBH_TORSO, g_DeathAnimsSkedarTorso, g_InjuryAnimsSkedarTorso, 0, 0 },
{ IBH_GUN, g_DeathAnimsSkedarGun, g_InjuryAnimsSkedarGun, 0, 0 },
{ IBH_HAT, g_DeathAnimsSkedarHead, g_InjuryAnimsSkedarHead, 0, 0 },
{ IBH_TAIL, g_DeathAnimsSkedarTail, g_InjuryAnimsSkedarTail, 0, 0 },
{ -1, NULL, NULL, 0, 0 },
};
struct animtable g_AnimTablesDrCaroll[] = {
{ 0, NULL, NULL, 0, 0 },
{ -1, NULL, NULL, 0, 0 },
};
struct animtable g_AnimTablesEyespy[] = {
{ 0, NULL, NULL, 0, 0 },
{ -1, NULL, NULL, 0, 0 },
};
struct animtable g_AnimTablesRobot[] = {
{ 0, NULL, NULL, 0, 0 },
{ -1, NULL, NULL, 0, 0 },
};
struct animtable *g_AnimTablesByRace[] = {
g_AnimTablesHuman,
g_AnimTablesSkedar,
g_AnimTablesDrCaroll,
g_AnimTablesEyespy,
g_AnimTablesRobot,
};
/**
* A yeet anim is an animation config for a chr being launched by an explosion.
*/
struct yeetanim {
s16 animnum;
bool flip;
f32 speed;
f32 startframe;
f32 thudframe;
f32 endframe;
};
struct yeetanim g_YeetAnimsHuman[] = {
/* 0*/ { 0x0082, 0, 0.5, 9, 29, -1 },
/* 1*/ { 0x0082, 1, 0.5, 9, 29, -1 },
/* 2*/ { 0x008a, 0, 0.5, 11, 31, -1 },
/* 3*/ { 0x008a, 1, 0.5, 11, 31, -1 },
/* 4*/ { 0x0089, 0, 0.5, 6, 27, -1 },
/* 5*/ { 0x0089, 1, 0.5, 6, 27, -1 },
/* 6*/ { 0x008c, 0, 0.5, 29, 48, -1 },
/* 7*/ { 0x008c, 1, 0.5, 29, 48, -1 },
/* 8*/ { 0x008d, 0, 0.5, 29, 49, -1 },
/* 9*/ { 0x008d, 1, 0.5, 29, 49, -1 },
/*10*/ { 0x008e, 0, 0.5, 19, 42, -1 },
/*11*/ { 0x008e, 1, 0.5, 19, 42, -1 },
/*12*/ { 0x0086, 0, 0.5, 0, 60, -1 },
/*13*/ { 0x0086, 1, 0.5, 0, 60, -1 },
/*14*/ { 0x0087, 0, 0.5, 6, 29, -1 },
/*15*/ { 0x0087, 1, 0.5, 6, 29, -1 },
/*16*/ { 0x0084, 0, 0.5, 8, 25, -1 },
/*17*/ { 0x0084, 1, 0.5, 8, 25, -1 },
/*18*/ { 0x0085, 0, 0.5, 8, 25, -1 },
/*19*/ { 0x0085, 1, 0.5, 8, 25, -1 },
/*20*/ { 0x0088, 0, 0.5, 12, 29, -1 },
/*21*/ { 0x0088, 1, 0.5, 12, 29, -1 },
/*22*/ { 0x008b, 0, 0.5, 22, 41, -1 },
/*23*/ { 0x008b, 1, 0.5, 22, 41, -1 },
/*24*/ { 0x0000, 0, 0.5, 0, 0, -1 },
};
s8 g_YeetAnimIndexesHumanAngle0[] = { 0, 1, 2, 3, 4, 5 };
s8 g_YeetAnimIndexesHumanAngle1[] = { 7, 9, 11 };
s8 g_YeetAnimIndexesHumanAngle2[] = { 6, 8, 10 };
s8 g_YeetAnimIndexesHumanAngle3[] = { 12, 15, 0 };
s8 g_YeetAnimIndexesHumanAngle4[] = { 13, 14, 0 };
s8 g_YeetAnimIndexesHumanAngle5[] = { 18, 19, 20, 21 };
s8 g_YeetAnimIndexesHumanAngle6[] = { 16, 22 };
s8 g_YeetAnimIndexesHumanAngle7[] = { 17, 23 };
struct yeetanim g_YeetAnimsSkedar[] = {
/* 0*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 1*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 2*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 3*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 4*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 5*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 6*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 7*/ { 0x033f, 0, 0.5, 0, -1, -1 },
/* 8*/ { 0x0000, 0, 0.5, 0, 0, -1 },
};
s8 g_YeetAnimIndexesSkedarAngle0[] = { 0 };
s8 g_YeetAnimIndexesSkedarAngle1[] = { 1 };
s8 g_YeetAnimIndexesSkedarAngle2[] = { 2 };
s8 g_YeetAnimIndexesSkedarAngle3[] = { 3 };
s8 g_YeetAnimIndexesSkedarAngle4[] = { 4 };
s8 g_YeetAnimIndexesSkedarAngle5[] = { 7 };
s8 g_YeetAnimIndexesSkedarAngle6[] = { 5 };
s8 g_YeetAnimIndexesSkedarAngle7[] = { 6 };
struct yeetanimindexlist {
s8 *indexes;
s32 count;
};
struct yeetanimindexlist g_YeetAnimIndexesByRaceAngle[][8] = {
{
{ g_YeetAnimIndexesHumanAngle0, 6 },
{ g_YeetAnimIndexesHumanAngle1, 3 },
{ g_YeetAnimIndexesHumanAngle3, 3 },
{ g_YeetAnimIndexesHumanAngle6, 2 },
{ g_YeetAnimIndexesHumanAngle5, 4 },
{ g_YeetAnimIndexesHumanAngle7, 2 },
{ g_YeetAnimIndexesHumanAngle4, 3 },
{ g_YeetAnimIndexesHumanAngle2, 3 },
}, {
{ g_YeetAnimIndexesSkedarAngle0, 1 },
{ g_YeetAnimIndexesSkedarAngle1, 1 },
{ g_YeetAnimIndexesSkedarAngle3, 1 },
{ g_YeetAnimIndexesSkedarAngle6, 1 },
{ g_YeetAnimIndexesSkedarAngle5, 1 },
{ g_YeetAnimIndexesSkedarAngle7, 1 },
{ g_YeetAnimIndexesSkedarAngle4, 1 },
{ g_YeetAnimIndexesSkedarAngle2, 1 },
},
};
struct animfloats var800656c0[] = {
{ 0x0002, 28, 0, 0, 0, -1, 23, 54, -1, -1, 18, 54, 0.87252569198608, -0.52351540327072, 1.0470308065414, -0.34901028871536, 1.6000000238419, 1.7999999523163 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065750 = { var800656c0, 0xffffffff };
struct animfloats var80065758[] = {
{ 0x0032, 37, 0, 0, 0, -1, 30, 81, -1, -1, 25, 81, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 1.6000000238419, 1.75 },
{ 0x0003, 27, 0, 0, 0, -1, 22, 61, -1, -1, 17, 61, 0.87252569198608, -0.26175770163536, 0.69802057743073, -0.69802057743073, 2, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065830 = { var80065758, 0xffffffff };
struct animfloats var80065838[] = {
{ 0x0032, 37, 0, 0, 0, -1, 30, 81, -1, -1, 25, 81, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 1.6000000238419, 1.75 },
{ 0x0003, 27, 0, 0, 0, -1, 22, 61, -1, -1, 17, 61, 0.87252569198608, -0.26175770163536, 0.69802057743073, -0.69802057743073, 2, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065910 = { var80065838, 0xffffffff };
struct animfloats var80065918[] = {
{ 0x0004, 19, 0, 1.5707963705063, 0, -1, 19, 61, -1, -1, 14, 61, 0.87252569198608, -0.34901028871536, 0.43626284599304, -1.0470308065414, 2.5, 2.5 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800659a8 = { var80065918, 0xffffffff };
struct animfloats var800659b0[] = {
{ 0x0006, 27, 0, 0, 0, -1, 39, 74, -1, -1, 34, 74, 0.87252569198608, -0.69802057743073, 0.7852731347084, -0.69802057743073, 1.5, 1.5 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065a40 = { var800659b0, 0xffffffff };
struct animfloats var80065a48[] = {
{ 0x034a, 20, 0, 0, 0, -1, 25, 50, -1, -1, 10, 50, 0.34901028871536, -0.34901028871536, 0.52351540327072, -0.52351540327072, 1, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065ad8 = { var80065a48, 0xffffffff };
struct var80065750 *var80065ae0[][32] = {
{
// RACE_HUMAN
&var80065750, &var80065830, &var80065830, &var80065830,
&var80065830, &var80065830, &var80065830, &var80065830,
&var80065830, &var80065830, &var800659a8, &var800659a8,
&var800659a8, &var800659a8, &var800659a8, &var800659a8,
&var80065a40, &var80065a40, &var80065a40, &var80065a40,
&var80065a40, &var80065a40, &var80065910, &var80065910,
&var80065910, &var80065910, &var80065910, &var80065910,
&var80065910, &var80065910, &var80065910, &var80065750,
}, {
// RACE_SKEDAR
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
&var80065ad8, &var80065ad8, &var80065ad8, &var80065ad8,
},
};
struct animfloats var80065be0[] = {
{ 0x0041, 26, 0, 0, 12, 140, 58, 92, 60, 79, 20, 120, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 },
{ 0x0044, 0, 0, 0, 17, 100, 25, 87, 30, 55, 20, 93, 0.87252569198608, -0.69802057743073, 0.69802057743073, -1.0470308065414, 0, 0 },
{ 0x0045, 0, 0, 0, 12, 64, 19, 51, 24, 46, 14, 58, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 0, 0 },
{ 0x0046, 22, 0, 0, 4, 69, 22, 49, 22, 33, 8, 58, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.7852731347084, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065d48 = { var80065be0, 0xffffffff };
struct animfloats var80065d50[] = {
{ 0x0041, 26, 0, 0, 12, 140, 58, 92, 60, 79, 20, 120, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 },
{ 0x0046, 22, 0, 0, 4, 69, 22, 49, 22, 33, 8, 58, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.7852731347084, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065e28 = { var80065d50, 0xffffffff };
struct animfloats var80065e30[] = {
{ 0x0041, 26, 0, 0, 12, 140, 58, 92, 60, 79, 20, 120, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 },
{ 0x0046, 22, 0, 0, 4, 69, 22, 49, 22, 33, 8, 58, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.7852731347084, 0, 0 },
{ 0x0049, 0, 0, 1.5707963705063, 7, 130, 45, 93, 56, 73, 26, 107, 0.87252569198608, -0.69802057743073, 0.34901028871536, -0.52351540327072, 0, 0 },
{ 0x004a, 15, 0, 1.5707963705063, 5, 76, 20, 31, 31, 38, 15, 49, 0.87252569198608, -0.69802057743073, 0.52351540327072, -1.0470308065414, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80065f98 = { var80065e30, 0xffffffff };
struct animfloats var80065fa0[] = {
{ 0x0041, 26, 0, 0, 12, 140, 58, 92, 60, 79, 20, 120, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 },
{ 0x0046, 22, 0, 0, 4, 69, 22, 49, 22, 33, 8, 58, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.7852731347084, 0, 0 },
{ 0x0047, 0, 0, 4.7123889923096, 7, 139, 54, 105, 61, 88, 26, 120, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.61076802015305, 0, 0 },
{ 0x0048, 19, 0, 4.7123889923096, 4, 79, 21, 50, 26, 42, 10, 64, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.61076802015305, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066108 = { var80065fa0, 0xffffffff };
struct animfloats var80066110[] = {
{ 0x004a, 19, 0, 1.5707963705063, 5, 76, 20, 31, 31, 38, 15, 49, 0.87252569198608, -0.69802057743073, 0.52351540327072, -1.0470308065414, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800661a0 = { var80066110, 0xffffffff };
struct animfloats var800661a8[] = {
{ 0x0048, 19, 0, 4.7123889923096, 4, 79, 21, 50, 26, 42, 10, 64, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.61076802015305, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066238 = { var800661a8, 0xffffffff };
struct animfloats var80066240[] = {
{ 0x034a, 20, 0, 0, 0, -1, 25, 50, -1, -1, 10, 50, 0.34901028871536, -0.34901028871536, 0.52351540327072, -0.52351540327072, 1, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800662d0 = { var80066240, 0xffffffff };
struct var80065750 *var800662d8[][32] = {
{
// RACE_HUMAN
&var80065d48, &var80065d48, &var80065e28, &var80065e28,
&var80065e28, &var80065f98, &var80065f98, &var80065f98,
&var80065f98, &var80065f98, &var800661a0, &var800661a0,
&var800661a0, &var800661a0, &var800661a0, &var800661a0,
&var80066238, &var80066238, &var80066238, &var80066238,
&var80066238, &var80066238, &var80066108, &var80066108,
&var80066108, &var80066108, &var80066108, &var80065e28,
&var80065e28, &var80065e28, &var80065d48, &var80065d48,
}, {
// RACE_SKEDAR
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
&var800662d0, &var800662d0, &var800662d0, &var800662d0,
},
};
struct animfloats var800663d8[] = {
{ 0x007a, 26, 0, 0, 7, 92, 28, 68, -1, -1, 11, 73, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066468 = { var800663d8, 0xffffffff };
struct animfloats var80066470[] = {
{ 0x007b, 26, 0, 1.5707963705063, 9, 112, 38, 87, -1, -1, 19, 98, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.43626284599304, 0, 0 },
{ 0x007d, 25, 0, 1.5707963705063, 10, 112, 32, 86, -1, -1, 19, 97, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.43626284599304, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066548 = { var80066470, 0xffffffff };
struct animfloats var80066550[] = {
{ 0x007c, 39, 0, 4.7123889923096, 22, 127, 44, 102, -1, -1, 28, 112, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.43626284599304, 0, 0 },
{ 0x007e, 39, 0, 4.7123889923096, 23, 130, 46, 100, -1, -1, 30, 110, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.43626284599304, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066628 = { var80066550, 0xffffffff };
struct animfloats var80066630[] = {
{ 0x034a, 20, 0, 0, 0, -1, 25, 50, -1, -1, 10, 50, 0.34901028871536, -0.34901028871536, 0.52351540327072, -0.52351540327072, 1, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800666c0 = { var80066630, 0xffffffff };
u32 var800666c8 = (u32) &var80066468;
u32 var800666cc = (u32) &var80066468;
u32 var800666d0 = (u32) &var80066468;
u32 var800666d4 = (u32) &var80066468;
u32 var800666d8 = (u32) &var80066468;
u32 var800666dc = (u32) &var80066548;
u32 var800666e0 = (u32) &var80066548;
u32 var800666e4 = (u32) &var80066548;
u32 var800666e8 = (u32) &var80066548;
u32 var800666ec = (u32) &var80066548;
u32 var800666f0 = (u32) &var80066548;
u32 var800666f4 = (u32) &var80066548;
u32 var800666f8 = (u32) &var80066548;
u32 var800666fc = (u32) &var80066548;
u32 var80066700 = (u32) &var80066548;
u32 var80066704 = (u32) &var80066548;
u32 var80066708 = (u32) &var80066628;
u32 var8006670c = (u32) &var80066628;
u32 var80066710 = (u32) &var80066628;
u32 var80066714 = (u32) &var80066628;
u32 var80066718 = (u32) &var80066628;
u32 var8006671c = (u32) &var80066628;
u32 var80066720 = (u32) &var80066628;
u32 var80066724 = (u32) &var80066628;
u32 var80066728 = (u32) &var80066628;
u32 var8006672c = (u32) &var80066628;
u32 var80066730 = (u32) &var80066628;
u32 var80066734 = (u32) &var80066468;
u32 var80066738 = (u32) &var80066468;
u32 var8006673c = (u32) &var80066468;
u32 var80066740 = (u32) &var80066468;
u32 var80066744 = (u32) &var80066468;
u32 var80066748 = (u32) &var800666c0;
u32 var8006674c = (u32) &var800666c0;
u32 var80066750 = (u32) &var800666c0;
u32 var80066754 = (u32) &var800666c0;
u32 var80066758 = (u32) &var800666c0;
u32 var8006675c = (u32) &var800666c0;
u32 var80066760 = (u32) &var800666c0;
u32 var80066764 = (u32) &var800666c0;
u32 var80066768 = (u32) &var800666c0;
u32 var8006676c = (u32) &var800666c0;
u32 var80066770 = (u32) &var800666c0;
u32 var80066774 = (u32) &var800666c0;
u32 var80066778 = (u32) &var800666c0;
u32 var8006677c = (u32) &var800666c0;
u32 var80066780 = (u32) &var800666c0;
u32 var80066784 = (u32) &var800666c0;
u32 var80066788 = (u32) &var800666c0;
u32 var8006678c = (u32) &var800666c0;
u32 var80066790 = (u32) &var800666c0;
u32 var80066794 = (u32) &var800666c0;
u32 var80066798 = (u32) &var800666c0;
u32 var8006679c = (u32) &var800666c0;
u32 var800667a0 = (u32) &var800666c0;
u32 var800667a4 = (u32) &var800666c0;
u32 var800667a8 = (u32) &var800666c0;
u32 var800667ac = (u32) &var800666c0;
u32 var800667b0 = (u32) &var800666c0;
u32 var800667b4 = (u32) &var800666c0;
u32 var800667b8 = (u32) &var800666c0;
u32 var800667bc = (u32) &var800666c0;
u32 var800667c0 = (u32) &var800666c0;
u32 var800667c4 = (u32) &var800666c0;
struct animfloats var800667c8[] = {
{ 0x0007, 27, 0, 0, 0, -1, 35, 75, -1, -1, 31, 75, 0.87252569198608, -0.69802057743073, 0.90742671489716, -0.69802057743073, 1.5, 1.5 },
{ 0x0008, 24, 0, 0, 0, -1, 46, 98, -1, -1, 41, 98, 0.87252569198608, -0.52351540327072, 1.1342834234238, -0.69802057743073, 1.6000000238419, 1.6000000238419 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800668a0 = { var800667c8, 0xffffffff };
struct animfloats var800668a8[] = {
{ 0x0009, 26, 0, 0, 0, -1, 34, 87, -1, -1, 29, 87, 0.87252569198608, -0.52351540327072, 0.69802057743073, -0.95977824926376, 1.6000000238419, 2 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066938 = { var800668a8, 0xffffffff };
struct animfloats var80066940[] = {
{ 0x000a, 28, 0, 0, 0, -1, 36, 88, -1, -1, 31, 88, 0.87252569198608, -0.69802057743073, 0.87252569198608, -0.43626284599304, 1.6000000238419, 1.5 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800669d0 = { var80066940, 0xffffffff };
struct animfloats var800669d8[] = {
{ 0x034a, 20, 0, 0, 0, -1, 25, 50, -1, -1, 10, 50, 0.34901028871536, -0.34901028871536, 0.52351540327072, -0.52351540327072, 1, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066a68 = { var800669d8, 0xffffffff };
struct var80065750 *var80066a70[][32] = {
{
&var800668a0, &var800668a0, &var800668a0, &var800668a0,
&var800668a0, &var800668a0, &var800668a0, &var800668a0,
&var800668a0, &var800668a0, &var80066938, &var80066938,
&var80066938, &var80066938, &var80066938, &var80066938,
&var800669d0, &var800669d0, &var800669d0, &var800669d0,
&var800669d0, &var800669d0, &var800668a0, &var800668a0,
&var800668a0, &var800668a0, &var800668a0, &var800668a0,
&var800668a0, &var800668a0, &var800668a0, &var800668a0,
}, {
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
&var80066a68, &var80066a68, &var80066a68, &var80066a68,
},
};
struct animfloats var80066b70[] = {
{ 0x004b, 25, 0, 0, 12, 132, 55, 87, 67, 87, 26, 111, 0.87252569198608, -0.69802057743073, 0.61076802015305, -0.7852731347084, 0, 0 },
{ 0x004c, 26, 0, 0, 8, 89, 31, 63, 41, 51, 21, 80, 0.87252569198608, -0.69802057743073, 0.34901028871536, -1.1342834234238, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066c48 = { var80066b70, 0xffffffff };
struct animfloats var80066c50[] = {
{ 0x004f, 47, 0, 1.5707963705063, 7, 128, 33, 86, 47, 74, 23, 106, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.7852731347084, 0, 0 },
{ 0x0050, 18, 0, 1.5707963705063, 7, 78, 28, 52, 35, 45, 15, 66, 0.87252569198608, -0.087252572178841, 0.69802057743073, -0.7852731347084, 1.5, 1 },
{ 0x0051, 20, 0, 1.5707963705063, 13, 92, 37, 67, 42, 55, 25, 84, 0.87252569198608, -0.52351540327072, 0.34901028871536, -0.69802057743073, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066d70 = { var80066c50, 0xffffffff };
struct animfloats var80066d78[] = {
{ 0x004d, 28, 0, 4.7123889923096, 15, 124, 38, 97, 60, 84, 20, 106, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.87252569198608, 0, 0 },
{ 0x004e, 23, 0, 4.7123889923096, 0, 85, 32, 38, 38, 60, 14, 71, 0.87252569198608, -0.69802057743073, 0.61076802015305, -0.95977824926376, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066e50 = { var80066d78, 0xffffffff };
struct animfloats var80066e58[] = {
{ 0x034a, 20, 0, 0, 0, -1, 25, 50, -1, -1, 10, 50, 0.34901028871536, -0.34901028871536, 0.52351540327072, -0.52351540327072, 1, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80066ee8 = { var80066e58, 0xffffffff };
struct var80065750 *var80066ef0[][32] = {
{
&var80066c48, &var80066c48, &var80066c48, &var80066c48,
&var80066c48, &var80066c48, &var80066c48, &var80066c48,
&var80066c48, &var80066c48, &var80066d70, &var80066d70,
&var80066d70, &var80066d70, &var80066d70, &var80066d70,
&var80066e50, &var80066e50, &var80066e50, &var80066e50,
&var80066e50, &var80066e50, &var80066c48, &var80066c48,
&var80066c48, &var80066c48, &var80066c48, &var80066c48,
&var80066c48, &var80066c48, &var80066c48, &var80066c48,
}, {
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
&var80066ee8, &var80066ee8, &var80066ee8, &var80066ee8,
},
};
struct animfloats var80066ff0[] = {
{ 0x0074, 22, 0, 0, 10, 111, 34, 87, -1, -1, 17, 104, 0.87252569198608, -0.69802057743073, 0.61076802015305, -0.7852731347084, 0, 0 },
{ 0x0077, 25, 0, 0, 9, 92, 33, 62, -1, -1, 18, 69, 0.87252569198608, -0.69802057743073, 0.61076802015305, -0.7852731347084, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800670c8 = { var80066ff0, 0xffffffff };
struct animfloats var800670d0[] = {
{ 0x0075, 28, 0, 1.5707963705063, 15, 108, 34, 73, -1, -1, 17, 93, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 0, 0 },
{ 0x0078, 19, 0, 1.5707963705063, 3, 95, 30, 64, -1, -1, 14, 71, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 1.5, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var800671a8 = { var800670d0, 0xffffffff };
struct animfloats var800671b0[] = {
{ 0x0076, 31, 0, 4.7123889923096, 14, 111, 40, 83, -1, -1, 21, 94, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 0, 0 },
{ 0x0079, 26, 0, 4.7123889923096, 7, 89, 34, 60, -1, -1, 20, 68, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80067288 = { var800671b0, 0xffffffff };
struct animfloats var80067290[] = {
{ 0x034a, 20, 0, 0, 0, -1, 25, 50, -1, -1, 10, 50, 0.34901028871536, -0.34901028871536, 0.52351540327072, -0.52351540327072, 1, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80067320 = { var80067290, 0xffffffff };
struct var80065750 *var80067328[][32] = {
{
&var800670c8, &var800670c8, &var800670c8, &var800670c8,
&var800670c8, &var800670c8, &var800670c8, &var800670c8,
&var800670c8, &var800670c8, &var800671a8, &var800671a8,
&var800671a8, &var800671a8, &var800671a8, &var800671a8,
&var80067288, &var80067288, &var80067288, &var80067288,
&var80067288, &var80067288, &var800670c8, &var800670c8,
&var800670c8, &var800670c8, &var800670c8, &var800670c8,
&var800670c8, &var800670c8, &var800670c8, &var800670c8,
}, {
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
&var80067320, &var80067320, &var80067320, &var80067320,
},
};
struct animfloats var80067428 = { 0x000b, 76, 0, 0, 20, -1, 98, 161, -1, -1, 93, 161, 0.87252569198608, -0.52351540327072, 0.69802057743073, -0.69802057743073, 1.7000000476837, 2 };
struct animfloats var80067470 = { 0x000c, 58, 0, 0, 10, -1, 77, 104, -1, -1, 72, 104, 0.87252569198608, -0.34901028871536, 0.61076802015305, -0.69802057743073, 1.5499999523163, 1.5 };
struct animfloats var800674b8 = { 0x000d, 61, 0, 0, 10, -1, 83, 128, -1, -1, 78, 128, 0.87252569198608, -0.52351540327072, 0.87252569198608, -0.52351540327072, 1.2000000476837, 1.2999999523163 };
struct animfloats var80067500 = { 0x0027, 63, 0, 0, 10, -1, 73, 114, -1, -1, 68, 114, 0.87252569198608, -0.52351540327072, 0.61076802015305, -0.61076802015305, 1.6499999761581, 1.5 };
struct animfloats var80067548 = { 0x000b, 76, 0, 0, 20, 76, 98, 161, -1, -1, 93, 161, 0.87252569198608, -0.52351540327072, 0.69802057743073, -0.69802057743073, 1.7000000476837, 2 };
struct animfloats var80067590 = { 0x000c, 58, 0, 0, 10, 63, 77, 104, -1, -1, 72, 104, 0.87252569198608, -0.34901028871536, 0.61076802015305, -0.69802057743073, 1.5499999523163, 1.5 };
struct animfloats var800675d8 = { 0x000d, 61, 0, 0, 10, 56, 83, 128, -1, -1, 78, 128, 0.87252569198608, -0.52351540327072, 0.87252569198608, -0.52351540327072, 1.2000000476837, 1.2999999523163 };
struct animfloats var80067620 = { 0x0027, 63, 0, 0, 10, 50, 73, 114, -1, -1, 68, 114, 0.87252569198608, -0.52351540327072, 0.61076802015305, -0.61076802015305, 1.6499999761581, 1.5 };
struct animfloats var80067668 = { 0x0045, 0, 0, 0, 7, 64, 19, 51, 24, 46, 14, 58, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 0, 0 };
struct animfloats var800676b0 = { 0x004a, 0, 0, 1.5707963705063, 14, 76, 26, 31, 31, 38, 15, 49, 0.87252569198608, -0.69802057743073, 0.52351540327072, -1.0470308065414, 0, 0 };
struct animfloats var800676f8 = { 0x004c, 26, 0, 0, 25, 89, 41, 63, 41, 51, 21, 80, 0.87252569198608, -0.69802057743073, 0.34901028871536, -1.1342834234238, 0, 0 };
struct animfloats var80067740 = { 0x0050, 18, 0, 1.5707963705063, 11, 78, 33, 52, 35, 45, 15, 66, 0.87252569198608, -0.087252572178841, 0.69802057743073, -0.7852731347084, 1.5, 1 };
struct animfloats var80067788 = { 0x007a, 26, 0, 0, 7, 92, 28, 68, -1, -1, 11, 73, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 };
struct animfloats var800677d0 = { 0x007b, 26, 0, 1.5707963705063, 9, 112, 38, 87, -1, -1, 19, 98, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.43626284599304, 0, 0 };
struct animfloats var80067818 = { 0x0074, 22, 0, 0, 10, 11, 34, 87, -1, -1, 17, 104, 0.87252569198608, -0.69802057743073, 0.61076802015305, -0.7852731347084, 0, 0 };
struct animfloats var80067860 = { 0x0075, 28, 0, 1.5707963705063, 15, 108, 34, 73, -1, -1, 17, 93, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 0, 0 };
struct animfloats var800678a8 = { 0x007a, 26, 0, 0, 7, 92, 28, 68, -1, -1, 11, 73, 0.87252569198608, -0.69802057743073, 0.69802057743073, -0.69802057743073, 0, 0 };
struct animfloats var800678f0 = { 0x007d, 25, 0, 1.5707963705063, 10, 112, 32, 86, -1, -1, 19, 97, 0.87252569198608, -0.69802057743073, 0.43626284599304, -0.43626284599304, 0, 0 };
struct animfloats var80067938 = { 0x0077, 25, 0, 0, 9, 92, 33, 62, -1, -1, 18, 69, 0.87252569198608, -0.69802057743073, 0.61076802015305, -0.7852731347084, 0, 0 };
struct animfloats var80067980[] = {
{ 0x0078, 19, 0, 1.5707963705063, 3, 95, 30, 64, -1, -1, 14, 71, 0.87252569198608, -0.69802057743073, 0.52351540327072, -0.7852731347084, 1.5, 1 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct animfloats var80067a10 = { 0x0030, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 1.3999999761581, 1.2999999523163 };
struct animfloats var80067a58 = { 0x0031, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 1.1000000238419, 1.2000000476837 };
struct animfloats var80067aa0 = { 0x0052, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 };
struct animfloats var80067ae8 = { 0x0055, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 };
struct animfloats var80067b30 = { 0x006c, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 };
struct animfloats var80067b78 = { 0x006e, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 };
struct animfloats var80067bc0 = { 0x006d, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 };
struct animfloats var80067c08[] = {
{ 0x006f, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 },
{ 0x0057, 0, 0, 1.5707963705063, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 },
{ 0x0056, 0, 0, 4.7123889923096, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct animfloats var80067d28[] = { 0x0269, 0, 0, 0, 0, 236, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 };
struct animfloats var80067d70[] = {
{ 0x026a, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 },
{ 0x026b, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 },
{ 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
};
struct var80065750 var80067e48 = { var80067d28, 0xffffffff };
u32 var80067e50 = (u32) &var80067e48;
u32 g_StageFlags = 0;
struct chrdata *g_BgChrs = NULL;
s16 *g_BgChrnums = NULL;
s32 g_NumBgChrs = 0;
s16 *g_TeamList = NULL;
s16 *g_SquadronList = NULL;
struct var80067e6c var80067e6c[] = {
{ 0x0028, 0 },
{ 0x002a, 0 },
{ 0x0029, 0 },
{ 0x006b, 0 },
{ 0x0059, 0 },
{ 0x005a, 0 },
{ 0x0072, 0 },
{ 0x0073, 0 },
{ 0x005a, 0 },
{ 0x006c, 0 },
{ 0x0030, 0 },
{ 0x0031, 0 },
{ 0x0052, 0 },
{ 0x0055, 0 },
{ 0x006e, 0 },
{ 0x006f, 0 },
{ 0x0057, 0 },
{ 0x0056, 0 },
{ 0x006d, 0 },
{ 0x0059, 0 },
{ 0x020a, 0 },
{ 0x020d, 0 },
{ 0x01f9, 0 },
{ 0x01f8, 0 },
{ 0x021d, 0 },
{ 0x0016, 0 },
{ 0x0018, 0 },
{ 0x001b, 0 },
{ 0x001d, 0 },
{ 0x001e, 0 },
{ 0x005c, 0 },
{ 0x005d, 0 },
{ 0x005e, 0 },
{ 0x005f, 0 },
{ -1 },
};
struct var80067e6c var80067f84[] = {
{ 0x0392, 0 },
{ 0x0393, 0 },
{ 0x0394, 0 },
{ -1 },
};
struct var80067e6c var80067fa4[] = {
{ 0x015f, 0 },
{ 0x0160, 0 },
{ -1 },
};
struct var80067e6c var80067fbc[] = {
{ 0x015f, 0 },
{ -1 },
};
struct var80067e6c var80067fcc[] = {
{ 0x0238, 0 },
{ -1 },
};
struct var80067e6c *var80067fdc[] = {
var80067e6c,
var80067f84,
var80067fa4,
var80067fbc,
var80067fcc,
};
// These are animation numbers
s16 var80067ff0[] = { 0x0001, 0x006a, -1 };
s16 var80067ff8[] = { 0x00c0, -1 };
s16 var80067ffc[] = { 0x013e, -1 };
s16 var80068000[] = { 0x013e, -1 };
s16 var80068004[] = { 0x0237, -1 };
s16 *var80068008[] = {
var80067ff0,
var80067ff8,
var80067ffc,
var80068000,
var80068004,
};
u32 var8006801c = 0x00000000;
u32 var80068020 = 0x00000000;
u32 var80068024 = 0x00000000;
u32 var80068028 = 0x00000000;
f32 func0f02dff0(s16 animnum)
{
s32 i;
for (i = 0; i < ARRAYCOUNT(var80067fdc); i++) {
s32 j = 0;
s16 thisanimnum = var80067fdc[i][j].animnum;
while (thisanimnum >= 0) {
if (thisanimnum == animnum) {
return var80067fdc[i][j].value;
}
j++;
thisanimnum = var80067fdc[i][j].animnum;
}
}
return 1;
}
bool func0f02e064(struct chrdata *chr)
{
if (chr->aibot) {
if (chr->actiontype == ACT_STAND
|| (chr->actiontype == ACT_GOPOS && (chr->act_gopos.flags & 0x20))) {
return true;
}
} else {
s16 animnum = modelGetAnimNum(chr->model);
s32 i;
for (i = 0; i < ARRAYCOUNT(var80068008); i++) {
s16 thisanimnum;
s32 j;
for (j = 0; (thisanimnum = var80068008[i][j]) >= 0; j++) {
if (thisanimnum == animnum) {
return true;
}
}
}
}
return false;
}
bool weaponIsOneHanded(struct prop *prop)
{
if (prop) {
struct weaponobj *weapon = prop->weapon;
return weaponHasFlag(weapon->weaponnum, WEAPONFLAG_ONEHANDED);
}
return false;
}
/**
* Returns a value between min and max based on the chr's speedrating property.
*
* chr->speedrating is between 0 and 100. The result is scaled between min and
* max accordingly.
*
* This function also applies the PD mode reaction speed, but the PD mode
* reaction speed is always zero because PD doesn't have it in the settings.
* It was used in GE but disabled in PD.
*/
f32 chrGetRangedSpeed(struct chrdata *chr, f32 min, f32 max)
{
f32 speedrating = chr->speedrating;
speedrating = pdmodeGetEnemyReactionSpeed() * (100.0f - speedrating) + speedrating;
return (max - min) * speedrating * 0.01f + min;
}
/**
* Calculates a percentage of how slow the chr is.
*
* percentage is expected to be between 0 and 100.
* chr->speedrating is between 0 and 100.
*
* This function takes the difference between the speedrating and the max (100),
* then multiplies that amount by the given percentage and returns it.
*
* For example, if the chr's speedrating is 10 (out of 100) and the given
* percentage is 50, the result will be 45.
*/
s32 chrGetPercentageOfSlowness(struct chrdata *chr, s32 percentage)
{
s32 speedrating = chr->speedrating;
s32 extra = pdmodeGetEnemyReactionSpeed() * (100 - speedrating);
speedrating = extra + speedrating;
return (100 - speedrating) * percentage / 100;
}
f32 chrGetRangedArghSpeed(struct chrdata *chr, f32 min, f32 max)
{
f32 arghrating = chr->arghrating;
arghrating = pdmodeGetEnemyReactionSpeed() * (100.0f - arghrating) + arghrating;
return (max - min) * arghrating * 0.01f + min;
}
GLOBAL_ASM(
glabel func0f02e2d0
.late_rodata
glabel var7f1a8cf8
.word 0x38c907a9
glabel var7f1a8cfc
.word 0x40c907a9
.text
/* f02e2d0: 27bdffb8 */ addiu $sp,$sp,-72
/* f02e2d4: 30ae0002 */ andi $t6,$a1,0x2
/* f02e2d8: 11c00004 */ beqz $t6,.L0f02e2ec
/* f02e2dc: afbf001c */ sw $ra,0x1c($sp)
/* f02e2e0: 44800000 */ mtc1 $zero,$f0
/* f02e2e4: 1000001f */ b .L0f02e364
/* f02e2e8: 8fbf001c */ lw $ra,0x1c($sp)
.L0f02e2ec:
/* f02e2ec: 30af0010 */ andi $t7,$a1,0x10
/* f02e2f0: 11e00014 */ beqz $t7,.L0f02e344
/* f02e2f4: 27a70038 */ addiu $a3,$sp,0x38
/* f02e2f8: 44862000 */ mtc1 $a2,$f4
/* f02e2fc: 3c017f1b */ lui $at,%hi(var7f1a8cf8)
/* f02e300: c4288cf8 */ lwc1 $f8,%lo(var7f1a8cf8)($at)
/* f02e304: 468021a0 */ cvt.s.w $f6,$f4
/* f02e308: 46083302 */ mul.s $f12,$f6,$f8
/* f02e30c: 0fc0f917 */ jal chrGetInverseTheta
/* f02e310: e7ac0020 */ swc1 $f12,0x20($sp)
/* f02e314: c7ac0020 */ lwc1 $f12,0x20($sp)
/* f02e318: 44805000 */ mtc1 $zero,$f10
/* f02e31c: 3c017f1b */ lui $at,%hi(var7f1a8cfc)
/* f02e320: 46006081 */ sub.s $f2,$f12,$f0
/* f02e324: 460a103c */ c.lt.s $f2,$f10
/* f02e328: 00000000 */ nop
/* f02e32c: 45000003 */ bc1f .L0f02e33c
/* f02e330: 00000000 */ nop
/* f02e334: c4308cfc */ lwc1 $f16,%lo(var7f1a8cfc)($at)
/* f02e338: 46101080 */ add.s $f2,$f2,$f16
.L0f02e33c:
/* f02e33c: 10000008 */ b .L0f02e360
/* f02e340: 46001006 */ mov.s $f0,$f2
.L0f02e344:
/* f02e344: 27b80028 */ addiu $t8,$sp,0x28
/* f02e348: afb80010 */ sw $t8,0x10($sp)
/* f02e34c: 0fc122de */ jal func0f048b78
/* f02e350: afa40048 */ sw $a0,0x48($sp)
/* f02e354: 8fa40048 */ lw $a0,0x48($sp)
/* f02e358: 0fc122a1 */ jal chrGetAngleToPos
/* f02e35c: 27a50038 */ addiu $a1,$sp,0x38
.L0f02e360:
/* f02e360: 8fbf001c */ lw $ra,0x1c($sp)
.L0f02e364:
/* f02e364: 27bd0048 */ addiu $sp,$sp,0x48
/* f02e368: 03e00008 */ jr $ra
/* f02e36c: 00000000 */ nop
);
f32 chrGetDistanceToEntity(struct chrdata *chr, u32 entitytype, s32 entityid)
{
if (entitytype & ENTITYTYPE_TARGET) {
return chrGetDistanceToTarget(chr);
}
if (entitytype & ENTITYTYPE_CHR) {
return chrGetDistanceToChr(chr, entityid);
}
if (entitytype & ENTITYTYPE_PAD) {
return chrGetDistanceToPad(chr, entityid);
}
return 0;
}
void func0f02e3dc(struct coord *a, struct coord *b,struct coord *c, struct coord *d, struct coord *dst)
{
f32 value = d->z * (b->x - a->x) - (b->z - a->z) * d->x;
if (value != 0) {
f32 tmp = ((b->z - a->z) * (c->x - a->x) + (a->z - c->z) * (b->x - a->x)) / value;
dst->x = d->x * tmp + c->x;
dst->y = d->y * tmp + c->y;
dst->z = d->z * tmp + c->z;
} else if (d->x == 0 && d->z == 0) {
dst->x = c->x;
dst->y = c->y;
dst->z = c->z;
} else {
dst->x = a->x;
dst->y = a->y;
dst->z = a->z;
}
}
void func0f02e4f8(struct coord *arg0, struct coord *arg1, struct coord *dst)
{
struct coord sp2c;
struct coord sp20;
#if VERSION >= VERSION_PAL_FINAL
func00024e4c(&sp2c, &sp20, 2298, "chr/chraction.c");
#else
func00024e4c(&sp2c, &sp20, 2298, "chraction.c");
#endif
func0f02e3dc(&sp2c, &sp20, arg0, arg1, dst);
}
#if VERSION >= VERSION_PAL_FINAL
const char var7f1a8acc[] = "chr/chraction.c";
#else
const char var7f1a8acc[] = "chraction.c";
#endif
GLOBAL_ASM(
glabel func0f02e550
/* f02e550: 27bdff98 */ addiu $sp,$sp,-104
/* f02e554: afbf002c */ sw $ra,0x2c($sp)
/* f02e558: afb00028 */ sw $s0,0x28($sp)
/* f02e55c: afa5006c */ sw $a1,0x6c($sp)
/* f02e560: afa60070 */ sw $a2,0x70($sp)
/* f02e564: afa70074 */ sw $a3,0x74($sp)
/* f02e568: 8c8e0004 */ lw $t6,0x4($a0)
/* f02e56c: 00808025 */ or $s0,$a0,$zero
/* f02e570: c7ac006c */ lwc1 $f12,0x6c($sp)
/* f02e574: 0c0068f7 */ jal sinf
/* f02e578: afae004c */ sw $t6,0x4c($sp)
/* f02e57c: 44802000 */ mtc1 $zero,$f4
/* f02e580: e7a0005c */ swc1 $f0,0x5c($sp)
/* f02e584: c7ac006c */ lwc1 $f12,0x6c($sp)
/* f02e588: 0c0068f4 */ jal cosf
/* f02e58c: e7a40060 */ swc1 $f4,0x60($sp)
/* f02e590: c7a20070 */ lwc1 $f2,0x70($sp)
/* f02e594: c7a6005c */ lwc1 $f6,0x5c($sp)
/* f02e598: e7a00064 */ swc1 $f0,0x64($sp)
/* f02e59c: c60a0008 */ lwc1 $f10,0x8($s0)
/* f02e5a0: 46023202 */ mul.s $f8,$f6,$f2
/* f02e5a4: c7a40064 */ lwc1 $f4,0x64($sp)
/* f02e5a8: 8fa4004c */ lw $a0,0x4c($sp)
/* f02e5ac: 00002825 */ or $a1,$zero,$zero
/* f02e5b0: 46022182 */ mul.s $f6,$f4,$f2
/* f02e5b4: 460a4400 */ add.s $f16,$f8,$f10
/* f02e5b8: e7b00050 */ swc1 $f16,0x50($sp)
/* f02e5bc: c612000c */ lwc1 $f18,0xc($s0)
/* f02e5c0: e7b20054 */ swc1 $f18,0x54($sp)
/* f02e5c4: c6080010 */ lwc1 $f8,0x10($s0)
/* f02e5c8: 46083280 */ add.s $f10,$f6,$f8
/* f02e5cc: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f02e5d0: e7aa0058 */ swc1 $f10,0x58($sp)
/* f02e5d4: 240f0001 */ addiu $t7,$zero,0x1
/* f02e5d8: afaf0010 */ sw $t7,0x10($sp)
/* f02e5dc: c600000c */ lwc1 $f0,0xc($s0)
/* f02e5e0: c7b00078 */ lwc1 $f16,0x78($sp)
/* f02e5e4: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f02e5e8: 26040008 */ addiu $a0,$s0,0x8
/* f02e5ec: 46008481 */ sub.s $f18,$f16,$f0
/* f02e5f0: 26050028 */ addiu $a1,$s0,0x28
/* f02e5f4: 27a60050 */ addiu $a2,$sp,0x50
/* f02e5f8: 46002181 */ sub.s $f6,$f4,$f0
/* f02e5fc: e7b20014 */ swc1 $f18,0x14($sp)
/* f02e600: 8fa70074 */ lw $a3,0x74($sp)
/* f02e604: 0c00b5f0 */ jal func0002d7c0
/* f02e608: e7a60018 */ swc1 $f6,0x18($sp)
/* f02e60c: 10400003 */ beqz $v0,.L0f02e61c
/* f02e610: 27a4003c */ addiu $a0,$sp,0x3c
/* f02e614: 10000011 */ b .L0f02e65c
/* f02e618: c7a20070 */ lwc1 $f2,0x70($sp)
.L0f02e61c:
/* f02e61c: 3c067f1b */ lui $a2,%hi(var7f1a8acc)
/* f02e620: 24c68acc */ addiu $a2,$a2,%lo(var7f1a8acc)
/* f02e624: 0c0093af */ jal cdGetPos
/* f02e628: 24050949 */ addiu $a1,$zero,0x949
/* f02e62c: c7a8003c */ lwc1 $f8,0x3c($sp)
/* f02e630: c60a0008 */ lwc1 $f10,0x8($s0)
/* f02e634: c7b00044 */ lwc1 $f16,0x44($sp)
/* f02e638: c6120010 */ lwc1 $f18,0x10($s0)
/* f02e63c: 460a4001 */ sub.s $f0,$f8,$f10
/* f02e640: 46128081 */ sub.s $f2,$f16,$f18
/* f02e644: 46000102 */ mul.s $f4,$f0,$f0
/* f02e648: 00000000 */ nop
/* f02e64c: 46021182 */ mul.s $f6,$f2,$f2
/* f02e650: 0c012974 */ jal sqrtf
/* f02e654: 46062300 */ add.s $f12,$f4,$f6
/* f02e658: 46000086 */ mov.s $f2,$f0
.L0f02e65c:
/* f02e65c: 8fa4004c */ lw $a0,0x4c($sp)
/* f02e660: 24050001 */ addiu $a1,$zero,0x1
/* f02e664: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f02e668: e7a20048 */ swc1 $f2,0x48($sp)
/* f02e66c: 8fbf002c */ lw $ra,0x2c($sp)
/* f02e670: c7a20048 */ lwc1 $f2,0x48($sp)
/* f02e674: 8fb00028 */ lw $s0,0x28($sp)
/* f02e678: 27bd0068 */ addiu $sp,$sp,0x68
/* f02e67c: 03e00008 */ jr $ra
/* f02e680: 46001006 */ mov.s $f0,$f2
);
f32 func0f02e684(struct prop *prop, f32 arg1, f32 arg2)
{
f32 ymax;
f32 ymin;
f32 width;
propChrGetBbox(prop, &width, &ymax, &ymin);
return func0f02e550(prop, arg1, arg2, CDTYPE_ALL, ymax, ymin);
}
void chrStandChooseAnimation(struct chrdata *chr, f32 arg1)
{
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
s32 race = CHRRACE(chr);
s32 prevanimnum = modelGetAnimNum(chr->model);
if (chr->actiontype == ACT_GOPOS) {
chr->act_gopos.flags |= GOPOSFLAG_20;
}
if (chr->aibot) {
return;
}
if (race == RACE_EYESPY) {
modelSetAnimation(chr->model, 0x13e, 0, 0, 0, arg1);
} else if (race == RACE_HUMAN) {
if (prevanimnum == ANIM_SNIPING_0269
|| prevanimnum == ANIM_SNIPING_026B
|| prevanimnum == ANIM_SNIPING_026A) {
modelSetAnimation(chr->model, ANIM_SNIPING_026B, chr->model->anim->flip, -1, chrGetRangedSpeed(chr, 0.5, 0.8), 16);
} else if ((gun1 && gun2) || (!gun1 && !gun2)
|| weaponIsOneHanded(gun1)
|| weaponIsOneHanded(gun2)) {
modelSetAnimation(chr->model, 0x6a, random() % 2, 0, 0.25, arg1);
modelSetAnimLooping(chr->model, 0, 16);
} else if (gun2 || gun1) {
modelSetAnimation(chr->model, 0x01, gun1 != NULL, 0, 0.25, arg1);
modelSetAnimLooping(chr->model, 0, 16);
modelSetAnimEndFrame(chr->model, 120);
}
} else if (race == RACE_SKEDAR) {
modelSetAnimation(chr->model, 0xc0, random() % 2, 0, 0.5, arg1);
} else if (race == RACE_DRCAROLL) {
modelSetAnimation(chr->model, 0x13e, 0, 0, 0.5, arg1);
} else if (race == RACE_ROBOT) {
modelSetAnimation(chr->model, 0x237, 0, 0, 0.5, arg1);
}
}
void func0f02e9a0(struct chrdata *chr, f32 arg1)
{
f32 limit = 127;
f32 fsleep;
chrStopFiring(chr);
chr->actiontype = ACT_STAND;
chr->act_stand.unk02c = 0;
chr->act_stand.face_entitytype = 0;
chr->act_stand.face_entityid = 0;
chr->act_stand.unk038 = 0;
chr->act_stand.unk03c = 2;
chr->act_stand.unk040 = 0;
chr->act_stand.unk044 = random() % 120 + 180; // 180 to 299
chr->act_stand.unk048 = arg1;
chr->act_stand.face_target = false;
fsleep = arg1;
if (chr->model->anim->playspeed != PALUPF(1.0f)) {
fsleep *= PALUPF(1.0f) / chr->model->anim->playspeed;
}
if (fsleep > limit) {
fsleep = limit;
}
chr->sleep = fsleep;
if (modelIsAnimMerging(chr->model) && !chr->aibot) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrStandChooseAnimation(chr, arg1);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrStand(struct chrdata *chr)
{
s32 race = CHRRACE(chr);
f32 result;
if (race != RACE_EYESPY) {
chrStopFiring(chr);
if (race == RACE_HUMAN && chr->actiontype == ACT_KNEEL) {
chrStopFiring(chr);
chr->actiontype = ACT_STAND;
chr->act_stand.unk02c = 1;
chr->act_stand.face_entitytype = 0;
chr->act_stand.face_entityid = 0;
chr->act_stand.unk038 = 0;
chr->act_stand.unk03c = 2;
chr->act_stand.unk040 = 0;
chr->act_stand.unk044 = random() % 120 + 180;
chr->sleep = 0;
chr->act_stand.face_target = false;
if (chr->aibot == NULL) {
if (modelGetAnimNum(chr->model) == ANIM_KNEEL_SHOOT_RIGHT_HAND) {
result = chrGetRangedSpeed(chr, 0.5, 0.8);
modelSetAnimation(chr->model, ANIM_KNEEL_SHOOT_RIGHT_HAND,
chr->model->anim->flip, 109, result, 16);
modelSetAnimEndFrame(chr->model, 140);
} else {
result = chrGetRangedSpeed(chr, 0.5, 0.8);
modelSetAnimation(chr->model, ANIM_KNEEL_TWO_HANDED_GUN,
chr->model->anim->flip, 120, result, 16);
modelSetAnimEndFrame(chr->model, 151);
}
}
} else if (race == RACE_DRCAROLL || race == RACE_ROBOT) {
chr->actiontype = ACT_STAND;
chr->act_stand.unk02c = 1;
chr->act_stand.face_entitytype = 0;
chr->act_stand.face_entityid = 0;
chr->act_stand.unk038 = 0;
chr->act_stand.unk03c = 2;
chr->act_stand.unk040 = 0;
chr->act_stand.unk044 = random() % 120 + 180;
chr->sleep = 0;
chr->act_stand.face_target = false;
func0f02e9a0(chr, 16);
} else {
func0f02e9a0(chr, 16);
}
}
}
bool chrFaceCover(struct chrdata *chr)
{
struct cover cover;
if (!coverUnpack(chr->cover, &cover)) {
return false;
}
chrStand(chr);
chr->act_stand.unk038 = 0;
chr->act_stand.face_entitytype = ENTITYTYPE_DIRECTION;
chr->act_stand.unk03c = 1;
//chr->act_stand.face_entityid = atan2f(-cover.look->x, -cover.look->z) * (0x4000 / BADDEG2RAD(90));
chr->act_stand.face_entityid = atan2f(-cover.look->x, -cover.look->z) * 10432.039f;
return true;
}
void func0f02ed28(struct chrdata *chr, f32 arg1)
{
func0f02e9a0(chr, arg1);
chr->act_stand.unk040 = 1;
}
void chrStop(struct chrdata *chr)
{
chrStand(chr);
chr->act_stand.unk040 = 1;
}
void chrKneelChooseAnimation(struct chrdata *chr)
{
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
if (chr->aibot == NULL) {
if ((gun1 && gun2)
|| (!gun1 && !gun2)
|| weaponIsOneHanded(gun1)
|| weaponIsOneHanded(gun2)) {
bool flip = random() % 2;
modelSetAnimation(chr->model, 0x4b, flip, 0, chrGetRangedSpeed(chr, 0.5, 0.8), 16);
modelSetAnimEndFrame(chr->model, 28);
} else if (gun2 || gun1) {
modelSetAnimation(chr->model, 0x08, gun1 != NULL, 0, chrGetRangedSpeed(chr, 0.5, 0.8), 16);
modelSetAnimEndFrame(chr->model, 27);
}
}
}
void chrKneel(struct chrdata *chr)
{
chrStopFiring(chr);
chr->actiontype = ACT_KNEEL;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrKneelChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrStartAlarmChooseAnimation(struct chrdata *chr)
{
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
bool flip = false;
if (gun1 && !gun2) {
flip = true;
} else if ((gun1 && gun2) || (!gun1 && !gun2)) {
flip = random() % 2;
}
modelSetAnimation(chr->model, 0x3d, flip, 40, 1, 16);
modelSetAnimEndFrame(chr->model, 82);
}
void chrStartAlarm(struct chrdata *chr)
{
chrStopFiring(chr);
chr->actiontype = ACT_STARTALARM;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrStartAlarmChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrThrowGrenadeChooseAnimation(struct chrdata *chr)
{
u32 rand = random();
if (chr->act_throwgrenade.needsequip) {
if (rand % 3 == 0) {
modelSetAnimation(chr->model, 0x244, chr->act_throwgrenade.hand != 0, 0, chrGetRangedSpeed(chr, 0.5, 1.2), 16);
} else if (rand % 3 == 1) {
modelSetAnimation(chr->model, 0x242, chr->act_throwgrenade.hand != 0, 0, chrGetRangedSpeed(chr, 0.5, 1.2), 16);
} else {
modelSetAnimation(chr->model, 0x3e, chr->act_throwgrenade.hand != 0, 0, chrGetRangedSpeed(chr, 0.5, 1.2), 16);
}
} else {
if (rand % 3 == 0) {
modelSetAnimation(chr->model, 0x244, chr->act_throwgrenade.hand != 0, 5, chrGetRangedSpeed(chr, 0.5, 1.2), 16);
} else if (rand % 3 == 1) {
modelSetAnimation(chr->model, 0x242, chr->act_throwgrenade.hand != 0, 6, chrGetRangedSpeed(chr, 0.5, 1.2), 16);
} else {
modelSetAnimation(chr->model, 0x3e, chr->act_throwgrenade.hand != 0, 84, chrGetRangedSpeed(chr, 0.5, 1.2), 16);
}
}
modelSetAnimEndFrame(chr->model, -1);
}
void chrThrowGrenade(struct chrdata *chr, s32 hand, s32 needsequip)
{
chrStopFiring(chr);
chr->actiontype = ACT_THROWGRENADE;
chr->act_throwgrenade.hand = hand;
chr->act_throwgrenade.needsequip = needsequip;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrThrowGrenadeChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrSurprisedChooseAnimation(struct chrdata *chr)
{
if (chr->act_surprised.type == 1) {
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun0 = chrGetEquippedWeaponProp(chr, 0);
s32 flip = 0;
if (gun1 != NULL && gun0 == NULL) {
flip = 1;
} else if ((gun1 != NULL && gun0 != NULL) || (gun1 == NULL && gun0 == NULL)) {
flip = random() & 1;
}
modelSetAnimation(chr->model, 0x3f, flip, 10, chrGetRangedSpeed(chr, 0.6f, 0.96000003f), 16);
modelSetAnimEndFrame(chr->model, 52);
} else if (chr->act_surprised.type == 2) {
modelSetAnimation(chr->model, ANIM_SURRENDER_002E, random() & 1, 0, chrGetRangedSpeed(chr, 0.35f, 0.56f), 16);
modelSetAnimEndFrame(chr->model, 7);
} else {
u32 part = random() % 3;
modelSetAnimation(chr->model, 0x40, random() & 1, 17, 0.6f, 16);
if (part == 0) {
modelSetAnimEndFrame(chr->model, chrGetRangedSpeed(chr, 38, 8));
} else if (part == 1) {
modelSetAnimEndFrame(chr->model, chrGetRangedSpeed(chr, 66, 8));
} else {
modelSetAnimEndFrame(chr->model, chrGetRangedSpeed(chr, 96, 8));
}
}
}
void chrDoSurprisedOneHand(struct chrdata *chr)
{
struct prop *prop = chrGetTargetProp(chr);
f32 angle = chrGetAngleToPos(chr, &prop->pos);
// BADDEG2RAD(10) doesn't match due to float precision :(
if (angle < 0.17450514435768f || angle > BADDEG2RAD(350)) {
chrStopFiring(chr);
chr->actiontype = ACT_SURPRISED;
chr->act_surprised.type = 1;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrSurprisedChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
} else if (!chrIsStopped(chr)) {
chrStand(chr);
}
}
void chrDoSurprisedSurrender(struct chrdata *chr)
{
chrStopFiring(chr);
chr->actiontype = ACT_SURPRISED;
chr->act_surprised.type = 2;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrSurprisedChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrDoSurprisedLookAround(struct chrdata *chr)
{
chrStopFiring(chr);
chr->actiontype = ACT_SURPRISED;
chr->act_surprised.type = 3;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrSurprisedChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrSurrenderChooseAnimation(struct chrdata *chr)
{
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun0 = chrGetEquippedWeaponProp(chr, 0);
if (gun0 || gun1) {
modelSetAnimation(chr->model, ANIM_SURRENDER_002F, random() & 1, 0, 0.5, 16);
modelSetAnimLooping(chr->model, 40, 16);
if (gun1) {
propobjSetDropped(gun1, DROPREASON_2);
}
if (gun0) {
propobjSetDropped(gun0, DROPREASON_2);
}
chr->hidden |= CHRHFLAG_00000001;
} else {
modelSetAnimation(chr->model, ANIM_SURRENDER_002E, random() & 1, 0, 0.5, 16);
modelSetAnimLooping(chr->model, 30, 16);
}
chrDropItems(chr);
}
void chrSurrender(struct chrdata *chr)
{
u32 action = ACT_SURRENDER;
if (chr->actiontype != action) {
chrStopFiring(chr);
chr->actiontype = action;
chr->sleep = action;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrSurrenderChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
}
void chrSidestepChooseAnimation(struct chrdata *chr)
{
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
bool flip = false;
bool allowflip = false;
u32 race = CHRRACE(chr);
if (gun1 && gun2) {
flip = random() % 2;
allowflip = random() % 2;
} else {
if (weaponIsOneHanded(gun1) == false
&& weaponIsOneHanded(gun2) == false
&& (gun1 || gun2)) {
flip = (gun1 != 0);
allowflip = random() % 2;
}
}
if (race == RACE_HUMAN) {
if (allowflip == false) {
if (chr->act_sidestep.side) {
modelSetAnimation(chr->model, 0x68, true, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 36);
} else {
modelSetAnimation(chr->model, 0x68, false, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 36);
}
} else {
if ((chr->act_sidestep.side && !flip) || (chr->act_sidestep.side == 0 && flip)) {
modelSetAnimation(chr->model, 0x3b, flip, 5, chrGetRangedSpeed(chr, 0.7, 1.12), 16);
modelSetAnimEndFrame(chr->model, 34);
} else {
modelSetAnimation(chr->model, 0x3a, flip, 5, chrGetRangedSpeed(chr, 0.7, 1.12), 16);
modelSetAnimEndFrame(chr->model, 32);
}
}
} else if (race == RACE_SKEDAR) {
if (chr->act_sidestep.side) {
modelSetAnimation(chr->model, 0x328, false, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 27);
} else {
modelSetAnimation(chr->model, 0x328, true, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 27);
}
}
}
void chrSidestep(struct chrdata *chr, bool side)
{
chrStopFiring(chr);
chr->actiontype = ACT_SIDESTEP;
chr->act_sidestep.side = side;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrSidestepChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrJumpOutChooseAnimation(struct chrdata *chr)
{
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
bool flip = false;
if (gun1 && !gun2) {
flip = true;
} else if ((gun1 && gun2) || (!gun1 && !gun2)
|| weaponIsOneHanded(gun1) || weaponIsOneHanded(gun2)) {
flip = random() % 2;
}
if ((chr->act_jumpout.side && !flip) || (chr->act_jumpout.side == 0 && flip)) {
modelSetAnimation(chr->model, 0x68, true, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 36);
} else {
modelSetAnimation(chr->model, 0x68, false, 5, chrGetRangedSpeed(chr, 0.55, 0.88000005), 16);
modelSetAnimEndFrame(chr->model, 36);
}
}
void chrJumpOut(struct chrdata *chr, bool side)
{
chrStopFiring(chr);
chr->actiontype = ACT_JUMPOUT;
chr->act_jumpout.side = side;
chr->sleep = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrJumpOutChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrRunPosChooseAnimation(struct chrdata *chr)
{
f32 xdiff = chr->prop->pos.x - chr->act_runpos.pos.x;
f32 ydiff = chr->prop->pos.y - chr->act_runpos.pos.y;
f32 zdiff = chr->prop->pos.z - chr->act_runpos.pos.z;
f32 distance = sqrtf(xdiff * xdiff + zdiff * zdiff);
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
bool heavy = true;
bool flip;
s32 race = CHRRACE(chr);
if ((gun1 && gun2) || (!gun1 && !gun2)) {
heavy = false;
flip = random() % 2;
} else if (weaponIsOneHanded(gun1) || weaponIsOneHanded(gun2)) {
heavy = false;
flip = (bool)gun1 != false;
} else {
flip = (bool)gun1 != false;
}
if (race == RACE_HUMAN) {
if (heavy) {
f32 mult = 0.5;
#if PAL
chr->act_runpos.unk03c = 1.0f / (func0f02dff0(0x2a) * mult) * distance * 0.83333331346512f;
#else
chr->act_runpos.unk03c = 1.0f / (func0f02dff0(0x2a) * mult) * distance;
#endif
modelSetAnimation(chr->model, 0x2a, flip, 0, mult, 16);
} else {
f32 mult = 0.5;
#if PAL
chr->act_runpos.unk03c = 1.0f / (func0f02dff0(0x59) * mult) * distance * 0.83333331346512f;
#else
chr->act_runpos.unk03c = 1.0f / (func0f02dff0(0x59) * mult) * distance;
#endif
modelSetAnimation(chr->model, 0x59, flip, 0, mult, 16);
}
} else if (race == RACE_SKEDAR) {
f32 mult = 0.5;
#if PAL
chr->act_runpos.unk03c = 1.0f / (func0f02dff0(0x394) * mult) * distance * 0.83333331346512f;
#else
chr->act_runpos.unk03c = 1.0f / (func0f02dff0(0x394) * mult) * distance;
#endif
modelSetAnimation(chr->model, 0x394, flip, 0, mult, 16);
}
}
void chrRunToPos(struct chrdata *chr, struct coord *pos)
{
chrStopFiring(chr);
chr->actiontype = ACT_RUNPOS;
chr->act_runpos.pos.x = pos->x;
chr->act_runpos.pos.y = pos->y;
chr->act_runpos.pos.z = pos->z;
chr->sleep = 0;
chr->act_runpos.unk038 = 30; // float
chr->act_runpos.unk040 = 0;
if (modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
chrRunPosChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
GLOBAL_ASM(
glabel chrAttackStand
/* f030120: 27bdffa8 */ addiu $sp,$sp,-88
/* f030124: afbf0024 */ sw $ra,0x24($sp)
/* f030128: afa5005c */ sw $a1,0x5c($sp)
/* f03012c: afa40058 */ sw $a0,0x58($sp)
/* f030130: afa60060 */ sw $a2,0x60($sp)
/* f030134: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030138: 24050001 */ addiu $a1,$zero,0x1
/* f03013c: afa20054 */ sw $v0,0x54($sp)
/* f030140: 8fa40058 */ lw $a0,0x58($sp)
/* f030144: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030148: 00002825 */ or $a1,$zero,$zero
/* f03014c: 3c0f8007 */ lui $t7,%hi(var8006801c)
/* f030150: 25ef801c */ addiu $t7,$t7,%lo(var8006801c)
/* f030154: 8fa60058 */ lw $a2,0x58($sp)
/* f030158: 8de10000 */ lw $at,0x0($t7)
/* f03015c: 8de80004 */ lw $t0,0x4($t7)
/* f030160: 27ae0040 */ addiu $t6,$sp,0x40
/* f030164: 00402825 */ or $a1,$v0,$zero
/* f030168: adc10000 */ sw $at,0x0($t6)
/* f03016c: 10c00003 */ beqz $a2,.L0f03017c
/* f030170: adc80004 */ sw $t0,0x4($t6)
/* f030174: 10000002 */ b .L0f030180
/* f030178: 90c702fe */ lbu $a3,0x2fe($a2)
.L0f03017c:
/* f03017c: 00003825 */ or $a3,$zero,$zero
.L0f030180:
/* f030180: 8fa40054 */ lw $a0,0x54($sp)
/* f030184: 50800036 */ beqzl $a0,.L0f030260
/* f030188: afa50050 */ sw $a1,0x50($sp)
/* f03018c: 50400034 */ beqzl $v0,.L0f030260
/* f030190: afa50050 */ sw $a1,0x50($sp)
/* f030194: 00c02025 */ or $a0,$a2,$zero
/* f030198: 24050001 */ addiu $a1,$zero,0x1
/* f03019c: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f0301a0: afa7003c */ sw $a3,0x3c($sp)
/* f0301a4: afa20038 */ sw $v0,0x38($sp)
/* f0301a8: 8fa40058 */ lw $a0,0x58($sp)
/* f0301ac: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f0301b0: 00002825 */ or $a1,$zero,$zero
/* f0301b4: 8fa90038 */ lw $t1,0x38($sp)
/* f0301b8: 8fa7003c */ lw $a3,0x3c($sp)
/* f0301bc: 2c460001 */ sltiu $a2,$v0,0x1
/* f0301c0: 1120001f */ beqz $t1,.L0f030240
/* f0301c4: 000741c0 */ sll $t0,$a3,0x7
/* f0301c8: 1040001d */ beqz $v0,.L0f030240
/* f0301cc: 00000000 */ nop
/* f0301d0: 0c004b70 */ jal random
/* f0301d4: afa7003c */ sw $a3,0x3c($sp)
/* f0301d8: 30460001 */ andi $a2,$v0,0x1
/* f0301dc: 0c004b70 */ jal random
/* f0301e0: afa6004c */ sw $a2,0x4c($sp)
/* f0301e4: 24010003 */ addiu $at,$zero,0x3
/* f0301e8: 0041001b */ divu $zero,$v0,$at
/* f0301ec: 00005010 */ mfhi $t2
/* f0301f0: 8fa6004c */ lw $a2,0x4c($sp)
/* f0301f4: 15400009 */ bnez $t2,.L0f03021c
/* f0301f8: 8fa7003c */ lw $a3,0x3c($sp)
/* f0301fc: 3c0c8006 */ lui $t4,%hi(var800662d8)
/* f030200: 258c62d8 */ addiu $t4,$t4,%lo(var800662d8)
/* f030204: 000759c0 */ sll $t3,$a3,0x7
/* f030208: 2ccd0001 */ sltiu $t5,$a2,0x1
/* f03020c: 016c2821 */ addu $a1,$t3,$t4
/* f030210: afa60044 */ sw $a2,0x44($sp)
/* f030214: 1000002f */ b .L0f0302d4
/* f030218: afad0040 */ sw $t5,0x40($sp)
.L0f03021c:
/* f03021c: 3c188006 */ lui $t8,%hi(var800666c8)
/* f030220: 271866c8 */ addiu $t8,$t8,%lo(var800666c8)
/* f030224: 0007c9c0 */ sll $t9,$a3,0x7
/* f030228: 240e0001 */ addiu $t6,$zero,0x1
/* f03022c: 240f0001 */ addiu $t7,$zero,0x1
/* f030230: 03382821 */ addu $a1,$t9,$t8
/* f030234: afae0044 */ sw $t6,0x44($sp)
/* f030238: 10000026 */ b .L0f0302d4
/* f03023c: afaf0040 */ sw $t7,0x40($sp)
.L0f030240:
/* f030240: 3c098006 */ lui $t1,%hi(var800662d8)
/* f030244: 252962d8 */ addiu $t1,$t1,%lo(var800662d8)
/* f030248: 2cca0001 */ sltiu $t2,$a2,0x1
/* f03024c: 01092821 */ addu $a1,$t0,$t1
/* f030250: afa60044 */ sw $a2,0x44($sp)
/* f030254: 1000001f */ b .L0f0302d4
/* f030258: afaa0040 */ sw $t2,0x40($sp)
/* f03025c: afa50050 */ sw $a1,0x50($sp)
.L0f030260:
/* f030260: 0fc0b849 */ jal weaponIsOneHanded
/* f030264: afa7003c */ sw $a3,0x3c($sp)
/* f030268: 8fa50050 */ lw $a1,0x50($sp)
/* f03026c: 14400006 */ bnez $v0,.L0f030288
/* f030270: 8fa7003c */ lw $a3,0x3c($sp)
/* f030274: 00a02025 */ or $a0,$a1,$zero
/* f030278: 0fc0b849 */ jal weaponIsOneHanded
/* f03027c: afa7003c */ sw $a3,0x3c($sp)
/* f030280: 1040000b */ beqz $v0,.L0f0302b0
/* f030284: 8fa7003c */ lw $a3,0x3c($sp)
.L0f030288:
/* f030288: 8fa20054 */ lw $v0,0x54($sp)
/* f03028c: 3c0d8006 */ lui $t5,%hi(var800662d8)
/* f030290: 25ad62d8 */ addiu $t5,$t5,%lo(var800662d8)
/* f030294: 0002302b */ sltu $a2,$zero,$v0
/* f030298: 000761c0 */ sll $t4,$a3,0x7
/* f03029c: 2cd90001 */ sltiu $t9,$a2,0x1
/* f0302a0: 018d2821 */ addu $a1,$t4,$t5
/* f0302a4: afa60044 */ sw $a2,0x44($sp)
/* f0302a8: 1000000a */ b .L0f0302d4
/* f0302ac: afb90040 */ sw $t9,0x40($sp)
.L0f0302b0:
/* f0302b0: 8fa20054 */ lw $v0,0x54($sp)
/* f0302b4: 3c0f8006 */ lui $t7,%hi(var80065ae0)
/* f0302b8: 25ef5ae0 */ addiu $t7,$t7,%lo(var80065ae0)
/* f0302bc: 0002302b */ sltu $a2,$zero,$v0
/* f0302c0: 000771c0 */ sll $t6,$a3,0x7
/* f0302c4: 2cc80001 */ sltiu $t0,$a2,0x1
/* f0302c8: 01cf2821 */ addu $a1,$t6,$t7
/* f0302cc: afa60044 */ sw $a2,0x44($sp)
/* f0302d0: afa80040 */ sw $t0,0x40($sp)
.L0f0302d4:
/* f0302d4: 8fa9005c */ lw $t1,0x5c($sp)
/* f0302d8: 8faa0060 */ lw $t2,0x60($sp)
/* f0302dc: 240b0001 */ addiu $t3,$zero,0x1
/* f0302e0: afab0018 */ sw $t3,0x18($sp)
/* f0302e4: 8fa40058 */ lw $a0,0x58($sp)
/* f0302e8: 27a70040 */ addiu $a3,$sp,0x40
/* f0302ec: afa90010 */ sw $t1,0x10($sp)
/* f0302f0: 0fc0c4e1 */ jal func0f031384
/* f0302f4: afaa0014 */ sw $t2,0x14($sp)
/* f0302f8: 8fbf0024 */ lw $ra,0x24($sp)
/* f0302fc: 27bd0058 */ addiu $sp,$sp,0x58
/* f030300: 03e00008 */ jr $ra
/* f030304: 00000000 */ nop
);
GLOBAL_ASM(
glabel chrAttackLie
/* f030308: 27bdffb8 */ addiu $sp,$sp,-72
/* f03030c: afbf0024 */ sw $ra,0x24($sp)
/* f030310: afa5004c */ sw $a1,0x4c($sp)
/* f030314: afa60050 */ sw $a2,0x50($sp)
/* f030318: 00002825 */ or $a1,$zero,$zero
/* f03031c: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030320: afa40048 */ sw $a0,0x48($sp)
/* f030324: 3c0e8007 */ lui $t6,%hi(var80068024)
/* f030328: 25ce8024 */ addiu $t6,$t6,%lo(var80068024)
/* f03032c: 8dc10000 */ lw $at,0x0($t6)
/* f030330: 8fa9004c */ lw $t1,0x4c($sp)
/* f030334: 8fa40048 */ lw $a0,0x48($sp)
/* f030338: 27a70034 */ addiu $a3,$sp,0x34
/* f03033c: ace10000 */ sw $at,0x0($a3)
/* f030340: 8dd90004 */ lw $t9,0x4($t6)
/* f030344: 312a0020 */ andi $t2,$t1,0x20
/* f030348: 00404025 */ or $t0,$v0,$zero
/* f03034c: 11400004 */ beqz $t2,.L0f030360
/* f030350: acf90004 */ sw $t9,0x4($a3)
/* f030354: afa00038 */ sw $zero,0x38($sp)
/* f030358: 10000005 */ b .L0f030370
/* f03035c: afa00034 */ sw $zero,0x34($sp)
.L0f030360:
/* f030360: 2c430001 */ sltiu $v1,$v0,0x1
/* f030364: 2c6b0001 */ sltiu $t3,$v1,0x1
/* f030368: afa30038 */ sw $v1,0x38($sp)
/* f03036c: afab0034 */ sw $t3,0x34($sp)
.L0f030370:
/* f030370: 8fac0050 */ lw $t4,0x50($sp)
/* f030374: 3c058006 */ lui $a1,%hi(var80067e50)
/* f030378: 24a57e50 */ addiu $a1,$a1,%lo(var80067e50)
/* f03037c: 2d060001 */ sltiu $a2,$t0,0x1
/* f030380: afa90010 */ sw $t1,0x10($sp)
/* f030384: afa00018 */ sw $zero,0x18($sp)
/* f030388: 0fc0c4e1 */ jal func0f031384
/* f03038c: afac0014 */ sw $t4,0x14($sp)
/* f030390: 8fbf0024 */ lw $ra,0x24($sp)
/* f030394: 27bd0048 */ addiu $sp,$sp,0x48
/* f030398: 03e00008 */ jr $ra
/* f03039c: 00000000 */ nop
);
// Mismatch because some instructions are swapped
//void chrAttackLie(struct chrdata *chr, s32 entitytype, s32 entityid)
//{
// u32 stack1[2];
// struct prop *gun = chrGetEquippedWeaponProp(chr, 0);
// s32 firing[2] = {false, false};
// u32 stack2[2];
//
// if (entitytype & 0x20) {
// firing[1] = false;
// firing[0] = false;
// } else {
// firing[1] = gun == NULL;
// firing[0] = !firing[1];
// }
//
// func0f031384(chr, &var80067e50, gun == NULL, firing, entitytype, entityid, 0);
//}
GLOBAL_ASM(
glabel chrAttackKneel
/* f0303a0: 27bdffa8 */ addiu $sp,$sp,-88
/* f0303a4: afbf0024 */ sw $ra,0x24($sp)
/* f0303a8: afa5005c */ sw $a1,0x5c($sp)
/* f0303ac: afa40058 */ sw $a0,0x58($sp)
/* f0303b0: afa60060 */ sw $a2,0x60($sp)
/* f0303b4: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f0303b8: 24050001 */ addiu $a1,$zero,0x1
/* f0303bc: afa20054 */ sw $v0,0x54($sp)
/* f0303c0: 8fa40058 */ lw $a0,0x58($sp)
/* f0303c4: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f0303c8: 00002825 */ or $a1,$zero,$zero
/* f0303cc: 3c0f8007 */ lui $t7,%hi(var8006802c)
/* f0303d0: 25ef802c */ addiu $t7,$t7,%lo(var8006802c)
/* f0303d4: 8fa60058 */ lw $a2,0x58($sp)
/* f0303d8: 8de10000 */ lw $at,0x0($t7)
/* f0303dc: 8de80004 */ lw $t0,0x4($t7)
/* f0303e0: 27ae0040 */ addiu $t6,$sp,0x40
/* f0303e4: 00402825 */ or $a1,$v0,$zero
/* f0303e8: adc10000 */ sw $at,0x0($t6)
/* f0303ec: 10c00003 */ beqz $a2,.L0f0303fc
/* f0303f0: adc80004 */ sw $t0,0x4($t6)
/* f0303f4: 10000002 */ b .L0f030400
/* f0303f8: 90c702fe */ lbu $a3,0x2fe($a2)
.L0f0303fc:
/* f0303fc: 00003825 */ or $a3,$zero,$zero
.L0f030400:
/* f030400: 8fa40054 */ lw $a0,0x54($sp)
/* f030404: 50800036 */ beqzl $a0,.L0f0304e0
/* f030408: afa50050 */ sw $a1,0x50($sp)
/* f03040c: 50400034 */ beqzl $v0,.L0f0304e0
/* f030410: afa50050 */ sw $a1,0x50($sp)
/* f030414: 00c02025 */ or $a0,$a2,$zero
/* f030418: 24050001 */ addiu $a1,$zero,0x1
/* f03041c: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f030420: afa7003c */ sw $a3,0x3c($sp)
/* f030424: afa20038 */ sw $v0,0x38($sp)
/* f030428: 8fa40058 */ lw $a0,0x58($sp)
/* f03042c: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f030430: 00002825 */ or $a1,$zero,$zero
/* f030434: 8fa90038 */ lw $t1,0x38($sp)
/* f030438: 8fa7003c */ lw $a3,0x3c($sp)
/* f03043c: 2c460001 */ sltiu $a2,$v0,0x1
/* f030440: 1120001f */ beqz $t1,.L0f0304c0
/* f030444: 000741c0 */ sll $t0,$a3,0x7
/* f030448: 1040001d */ beqz $v0,.L0f0304c0
/* f03044c: 00000000 */ nop
/* f030450: 0c004b70 */ jal random
/* f030454: afa7003c */ sw $a3,0x3c($sp)
/* f030458: 30460001 */ andi $a2,$v0,0x1
/* f03045c: 0c004b70 */ jal random
/* f030460: afa6004c */ sw $a2,0x4c($sp)
/* f030464: 24010003 */ addiu $at,$zero,0x3
/* f030468: 0041001b */ divu $zero,$v0,$at
/* f03046c: 00005010 */ mfhi $t2
/* f030470: 8fa6004c */ lw $a2,0x4c($sp)
/* f030474: 15400009 */ bnez $t2,.L0f03049c
/* f030478: 8fa7003c */ lw $a3,0x3c($sp)
/* f03047c: 3c0c8006 */ lui $t4,%hi(var80066ef0)
/* f030480: 258c6ef0 */ addiu $t4,$t4,%lo(var80066ef0)
/* f030484: 000759c0 */ sll $t3,$a3,0x7
/* f030488: 2ccd0001 */ sltiu $t5,$a2,0x1
/* f03048c: 016c2821 */ addu $a1,$t3,$t4
/* f030490: afa60044 */ sw $a2,0x44($sp)
/* f030494: 1000002f */ b .L0f030554
/* f030498: afad0040 */ sw $t5,0x40($sp)
.L0f03049c:
/* f03049c: 3c188006 */ lui $t8,%hi(var80067328)
/* f0304a0: 27187328 */ addiu $t8,$t8,%lo(var80067328)
/* f0304a4: 0007c9c0 */ sll $t9,$a3,0x7
/* f0304a8: 240e0001 */ addiu $t6,$zero,0x1
/* f0304ac: 240f0001 */ addiu $t7,$zero,0x1
/* f0304b0: 03382821 */ addu $a1,$t9,$t8
/* f0304b4: afae0044 */ sw $t6,0x44($sp)
/* f0304b8: 10000026 */ b .L0f030554
/* f0304bc: afaf0040 */ sw $t7,0x40($sp)
.L0f0304c0:
/* f0304c0: 3c098006 */ lui $t1,%hi(var80066ef0)
/* f0304c4: 25296ef0 */ addiu $t1,$t1,%lo(var80066ef0)
/* f0304c8: 2cca0001 */ sltiu $t2,$a2,0x1
/* f0304cc: 01092821 */ addu $a1,$t0,$t1
/* f0304d0: afa60044 */ sw $a2,0x44($sp)
/* f0304d4: 1000001f */ b .L0f030554
/* f0304d8: afaa0040 */ sw $t2,0x40($sp)
/* f0304dc: afa50050 */ sw $a1,0x50($sp)
.L0f0304e0:
/* f0304e0: 0fc0b849 */ jal weaponIsOneHanded
/* f0304e4: afa7003c */ sw $a3,0x3c($sp)
/* f0304e8: 8fa50050 */ lw $a1,0x50($sp)
/* f0304ec: 14400006 */ bnez $v0,.L0f030508
/* f0304f0: 8fa7003c */ lw $a3,0x3c($sp)
/* f0304f4: 00a02025 */ or $a0,$a1,$zero
/* f0304f8: 0fc0b849 */ jal weaponIsOneHanded
/* f0304fc: afa7003c */ sw $a3,0x3c($sp)
/* f030500: 1040000b */ beqz $v0,.L0f030530
/* f030504: 8fa7003c */ lw $a3,0x3c($sp)
.L0f030508:
/* f030508: 8fa20054 */ lw $v0,0x54($sp)
/* f03050c: 3c0d8006 */ lui $t5,%hi(var80066ef0)
/* f030510: 25ad6ef0 */ addiu $t5,$t5,%lo(var80066ef0)
/* f030514: 0002302b */ sltu $a2,$zero,$v0
/* f030518: 000761c0 */ sll $t4,$a3,0x7
/* f03051c: 2cd90001 */ sltiu $t9,$a2,0x1
/* f030520: 018d2821 */ addu $a1,$t4,$t5
/* f030524: afa60044 */ sw $a2,0x44($sp)
/* f030528: 1000000a */ b .L0f030554
/* f03052c: afb90040 */ sw $t9,0x40($sp)
.L0f030530:
/* f030530: 8fa20054 */ lw $v0,0x54($sp)
/* f030534: 3c0f8006 */ lui $t7,%hi(var80066a70)
/* f030538: 25ef6a70 */ addiu $t7,$t7,%lo(var80066a70)
/* f03053c: 0002302b */ sltu $a2,$zero,$v0
/* f030540: 000771c0 */ sll $t6,$a3,0x7
/* f030544: 2cc80001 */ sltiu $t0,$a2,0x1
/* f030548: 01cf2821 */ addu $a1,$t6,$t7
/* f03054c: afa60044 */ sw $a2,0x44($sp)
/* f030550: afa80040 */ sw $t0,0x40($sp)
.L0f030554:
/* f030554: 8fa9005c */ lw $t1,0x5c($sp)
/* f030558: 8faa0060 */ lw $t2,0x60($sp)
/* f03055c: 8fa40058 */ lw $a0,0x58($sp)
/* f030560: 27a70040 */ addiu $a3,$sp,0x40
/* f030564: afa00018 */ sw $zero,0x18($sp)
/* f030568: afa90010 */ sw $t1,0x10($sp)
/* f03056c: 0fc0c4e1 */ jal func0f031384
/* f030570: afaa0014 */ sw $t2,0x14($sp)
/* f030574: 8fbf0024 */ lw $ra,0x24($sp)
/* f030578: 27bd0058 */ addiu $sp,$sp,0x58
/* f03057c: 03e00008 */ jr $ra
/* f030580: 00000000 */ nop
);
//void chrAttackKneel(struct chrdata *chr, s32 entitytype, s32 entityid)
//{
// struct prop *leftprop = chrGetEquippedWeaponProp(chr, HAND_LEFT); // 54
// struct prop *rightprop = chrGetEquippedWeaponProp(chr, HAND_RIGHT); // 50
// s32 sp4c;
// s32 sp48;
// bool firing[2] = {false, false}; // 40, 44 (var8006802c and var80068030)
// s32 race = CHRRACE(chr); // 3c
// struct prop *leftprop2; // 38
// struct prop *rightprop2;
// struct var80065750 **iVar5;
//
// if (leftprop && rightprop) {
// // Holding two items
// leftprop2 = chrGetEquippedWeaponPropWithCheck(chr, HAND_LEFT);
// rightprop2 = chrGetEquippedWeaponPropWithCheck(chr, HAND_RIGHT);
//
// if (leftprop2 && rightprop2) {
// // And both are capable of firing
// sp48 = random() % 2;
//
// if (random() % 3 == 0) {
// // 1 in 4 chance of firing just one of them (50/50 as to which)
// iVar5 = var80066ef0[race];
// firing[HAND_LEFT] = sp48;
// firing[HAND_RIGHT] = !firing[HAND_LEFT];
// } else {
// // 3 in 4 chance of firing both
// iVar5 = var80067328[race];
// firing[HAND_LEFT] = true;
// firing[HAND_RIGHT] = true;
// }
// } else {
// // Fire whichever one is capable
// sp48 = !rightprop2;
// iVar5 = var80066ef0[race];
// firing[HAND_LEFT] = !rightprop2;
// firing[HAND_RIGHT] = !firing[HAND_LEFT];
// }
// } else {
// if (weaponIsOneHanded(leftprop) || weaponIsOneHanded(rightprop)) {
// // Light weight weapon
// iVar5 = var80066ef0[race];
// sp48 = (bool)leftprop;
// } else {
// // Heavy weapon
// iVar5 = var80066a70[race];
// sp48 = (bool)leftprop;
// }
//
// firing[HAND_LEFT] = (bool)leftprop;
// firing[HAND_RIGHT] = !firing[HAND_LEFT];
// }
//
// func0f031384(chr, iVar5, sp48, firing, entitytype, entityid, 0);
//}
void chrAttackWalkChooseAnimation(struct chrdata *chr)
{
if (chr->aibot == NULL) {
modelSetAnimation(chr->model, chr->act_attackwalk.animfloats->animnum,
chr->act_attackwalk.flip, chr->act_attackwalk.animfloats->unk10, 0.5, 16);
}
}
u32 var8006802c = 0x00000000;
u32 var80068030 = 0x00000000;
u32 var80068034 = 0x00000000;
u32 var80068038 = 0x00000000;
u32 var8006803c = 0x00000000;
u32 var80068040 = 0x00000000;
u32 var80068044 = 0x00000000;
u32 var80068048 = 0x00000000;
u32 var8006804c = 0x00000000;
u32 var80068050 = 0x00000000;
u32 var80068054 = 0x00000000;
u32 var80068058 = 0x00000000;
u32 var8006805c = 0x00000000;
u32 var80068060 = 0x00000000;
u32 var80068064 = 0x00000000;
u32 var80068068 = 0x00000000;
u32 var8006806c = 0x00000000;
u32 var80068070 = 0x00000000;
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel chrAttackWalk
.late_rodata
glabel var7f1a9f70pf
.word 0x43a6aaaa
.text
/* f030724: 27bdff88 */ addiu $sp,$sp,-120
/* f030728: afbf001c */ sw $ra,0x1c($sp)
/* f03072c: afb10018 */ sw $s1,0x18($sp)
/* f030730: afa5007c */ sw $a1,0x7c($sp)
/* f030734: 00808825 */ move $s1,$a0
/* f030738: afb00014 */ sw $s0,0x14($sp)
/* f03073c: 0fc0a252 */ jal chrGetEquippedWeaponProp
/* f030740: 24050001 */ li $a1,0x1
/* f030744: 00408025 */ move $s0,$v0
/* f030748: 02202025 */ move $a0,$s1
/* f03074c: 0fc0a252 */ jal chrGetEquippedWeaponProp
/* f030750: 00002825 */ move $a1,$zero
/* f030754: 3c0f8006 */ lui $t7,0x8006
/* f030758: 25ef7d14 */ addiu $t7,$t7,0x7d14
/* f03075c: 8de10000 */ lw $at,0x0($t7)
/* f030760: 8de80004 */ lw $t0,0x4($t7)
/* f030764: 27ae0060 */ addiu $t6,$sp,0x60
/* f030768: 3c0a8006 */ lui $t2,0x8006
/* f03076c: 254a7d1c */ addiu $t2,$t2,0x7d1c
/* f030770: adc10000 */ sw $at,0x0($t6)
/* f030774: adc80004 */ sw $t0,0x4($t6)
/* f030778: 8d4d0004 */ lw $t5,0x4($t2)
/* f03077c: 8d410000 */ lw $at,0x0($t2)
/* f030780: 27a90058 */ addiu $t1,$sp,0x58
/* f030784: 3c188006 */ lui $t8,0x8006
/* f030788: 27187d24 */ addiu $t8,$t8,0x7d24
/* f03078c: ad2d0004 */ sw $t5,0x4($t1)
/* f030790: ad210000 */ sw $at,0x0($t1)
/* f030794: 8f080004 */ lw $t0,0x4($t8)
/* f030798: 8f010000 */ lw $at,0x0($t8)
/* f03079c: 27b90050 */ addiu $t9,$sp,0x50
/* f0307a0: 00402825 */ move $a1,$v0
/* f0307a4: af280004 */ sw $t0,0x4($t9)
/* f0307a8: 12000048 */ beqz $s0,.PF0f0308cc
/* f0307ac: af210000 */ sw $at,0x0($t9)
/* f0307b0: 10400046 */ beqz $v0,.PF0f0308cc
/* f0307b4: 02202025 */ move $a0,$s1
/* f0307b8: 0fc0a256 */ jal chrGetEquippedWeaponPropWithCheck
/* f0307bc: 24050001 */ li $a1,0x1
/* f0307c0: 00408025 */ move $s0,$v0
/* f0307c4: 02202025 */ move $a0,$s1
/* f0307c8: 0fc0a256 */ jal chrGetEquippedWeaponPropWithCheck
/* f0307cc: 00002825 */ move $a1,$zero
/* f0307d0: 1200000d */ beqz $s0,.PF0f030808
/* f0307d4: 00001825 */ move $v1,$zero
/* f0307d8: 5040000c */ beqzl $v0,.PF0f03080c
/* f0307dc: 2c4b0001 */ sltiu $t3,$v0,0x1
/* f0307e0: 0c004ad4 */ jal random
/* f0307e4: 00000000 */ nop
/* f0307e8: 304c0001 */ andi $t4,$v0,0x1
/* f0307ec: 0c004ad4 */ jal random
/* f0307f0: afac0068 */ sw $t4,0x68($sp)
/* f0307f4: 24010003 */ li $at,0x3
/* f0307f8: 0041001b */ divu $zero,$v0,$at
/* f0307fc: 00001810 */ mfhi $v1
/* f030800: 10000003 */ b .PF0f030810
/* f030804: 00000000 */ nop
.PF0f030808:
/* f030808: 2c4b0001 */ sltiu $t3,$v0,0x1
.PF0f03080c:
/* f03080c: afab0068 */ sw $t3,0x68($sp)
.PF0f030810:
/* f030810: 14600013 */ bnez $v1,.PF0f030860
/* f030814: 24010001 */ li $at,0x1
/* f030818: 8fa9007c */ lw $t1,0x7c($sp)
/* f03081c: 3c0d8006 */ lui $t5,0x8006
/* f030820: 3c0a8006 */ lui $t2,0x8006
/* f030824: 11200004 */ beqz $t1,.PF0f030838
/* f030828: 25ad7780 */ addiu $t5,$t5,0x7780
/* f03082c: 254a77c8 */ addiu $t2,$t2,0x77c8
/* f030830: 10000002 */ b .PF0f03083c
/* f030834: afaa0074 */ sw $t2,0x74($sp)
.PF0f030838:
/* f030838: afad0074 */ sw $t5,0x74($sp)
.PF0f03083c:
/* f03083c: 8faf0068 */ lw $t7,0x68($sp)
/* f030840: 240e0001 */ li $t6,0x1
/* f030844: 24020001 */ li $v0,0x1
/* f030848: 11e00003 */ beqz $t7,.PF0f030858
/* f03084c: 00000000 */ nop
/* f030850: 1000004a */ b .PF0f03097c
/* f030854: afae0064 */ sw $t6,0x64($sp)
.PF0f030858:
/* f030858: 10000048 */ b .PF0f03097c
/* f03085c: afa20060 */ sw $v0,0x60($sp)
.PF0f030860:
/* f030860: 1461000e */ bne $v1,$at,.PF0f03089c
/* f030864: 8fac007c */ lw $t4,0x7c($sp)
/* f030868: 8fb9007c */ lw $t9,0x7c($sp)
/* f03086c: 3c088006 */ lui $t0,0x8006
/* f030870: 25087810 */ addiu $t0,$t0,0x7810
/* f030874: 13200005 */ beqz $t9,.PF0f03088c
/* f030878: 24020001 */ li $v0,0x1
/* f03087c: 3c188006 */ lui $t8,0x8006
/* f030880: 27187858 */ addiu $t8,$t8,0x7858
/* f030884: 10000002 */ b .PF0f030890
/* f030888: afb80074 */ sw $t8,0x74($sp)
.PF0f03088c:
/* f03088c: afa80074 */ sw $t0,0x74($sp)
.PF0f030890:
/* f030890: afa20064 */ sw $v0,0x64($sp)
/* f030894: 10000039 */ b .PF0f03097c
/* f030898: afa20060 */ sw $v0,0x60($sp)
.PF0f03089c:
/* f03089c: 11800005 */ beqz $t4,.PF0f0308b4
/* f0308a0: 24020001 */ li $v0,0x1
/* f0308a4: 3c0b8006 */ lui $t3,0x8006
/* f0308a8: 256b78e8 */ addiu $t3,$t3,0x78e8
/* f0308ac: 10000004 */ b .PF0f0308c0
/* f0308b0: afab0074 */ sw $t3,0x74($sp)
.PF0f0308b4:
/* f0308b4: 3c098006 */ lui $t1,0x8006
/* f0308b8: 252978a0 */ addiu $t1,$t1,0x78a0
/* f0308bc: afa90074 */ sw $t1,0x74($sp)
.PF0f0308c0:
/* f0308c0: afa20064 */ sw $v0,0x64($sp)
/* f0308c4: 1000002d */ b .PF0f03097c
/* f0308c8: afa20060 */ sw $v0,0x60($sp)
.PF0f0308cc:
/* f0308cc: 02002025 */ move $a0,$s0
/* f0308d0: 0fc0b891 */ jal weaponIsOneHanded
/* f0308d4: afa5006c */ sw $a1,0x6c($sp)
/* f0308d8: 14400005 */ bnez $v0,.PF0f0308f0
/* f0308dc: 8fa5006c */ lw $a1,0x6c($sp)
/* f0308e0: 0fc0b891 */ jal weaponIsOneHanded
/* f0308e4: 00a02025 */ move $a0,$a1
/* f0308e8: 50400014 */ beqzl $v0,.PF0f03093c
/* f0308ec: 8fb9007c */ lw $t9,0x7c($sp)
.PF0f0308f0:
/* f0308f0: 8faa007c */ lw $t2,0x7c($sp)
/* f0308f4: 0010102b */ sltu $v0,$zero,$s0
/* f0308f8: afa20068 */ sw $v0,0x68($sp)
/* f0308fc: 11400005 */ beqz $t2,.PF0f030914
/* f030900: 3c0f8006 */ lui $t7,0x8006
/* f030904: 3c0d8006 */ lui $t5,0x8006
/* f030908: 25ad77c8 */ addiu $t5,$t5,0x77c8
/* f03090c: 10000003 */ b .PF0f03091c
/* f030910: afad0074 */ sw $t5,0x74($sp)
.PF0f030914:
/* f030914: 25ef7780 */ addiu $t7,$t7,0x7780
/* f030918: afaf0074 */ sw $t7,0x74($sp)
.PF0f03091c:
/* f03091c: 10400003 */ beqz $v0,.PF0f03092c
/* f030920: 240e0001 */ li $t6,0x1
/* f030924: 10000015 */ b .PF0f03097c
/* f030928: afae0064 */ sw $t6,0x64($sp)
.PF0f03092c:
/* f03092c: 24020001 */ li $v0,0x1
/* f030930: 10000012 */ b .PF0f03097c
/* f030934: afa20060 */ sw $v0,0x60($sp)
/* f030938: 8fb9007c */ lw $t9,0x7c($sp)
.PF0f03093c:
/* f03093c: 0010102b */ sltu $v0,$zero,$s0
/* f030940: afa20068 */ sw $v0,0x68($sp)
/* f030944: 13200005 */ beqz $t9,.PF0f03095c
/* f030948: 3c088006 */ lui $t0,0x8006
/* f03094c: 3c188006 */ lui $t8,0x8006
/* f030950: 27187738 */ addiu $t8,$t8,0x7738
/* f030954: 10000003 */ b .PF0f030964
/* f030958: afb80074 */ sw $t8,0x74($sp)
.PF0f03095c:
/* f03095c: 250876f0 */ addiu $t0,$t0,0x76f0
/* f030960: afa80074 */ sw $t0,0x74($sp)
.PF0f030964:
/* f030964: 10400003 */ beqz $v0,.PF0f030974
/* f030968: 240c0001 */ li $t4,0x1
/* f03096c: 10000003 */ b .PF0f03097c
/* f030970: afac0064 */ sw $t4,0x64($sp)
.PF0f030974:
/* f030974: 24020001 */ li $v0,0x1
/* f030978: afa20060 */ sw $v0,0x60($sp)
.PF0f03097c:
/* f03097c: 00008025 */ move $s0,$zero
/* f030980: 00003025 */ move $a2,$zero
/* f030984: 27a70060 */ addiu $a3,$sp,0x60
.PF0f030988:
/* f030988: 8ceb0000 */ lw $t3,0x0($a3)
/* f03098c: 02202025 */ move $a0,$s1
/* f030990: 02002825 */ move $a1,$s0
/* f030994: 51600032 */ beqzl $t3,.PF0f030a60
/* f030998: 26100001 */ addiu $s0,$s0,0x1
/* f03099c: afa60034 */ sw $a2,0x34($sp)
/* f0309a0: 0fc0a252 */ jal chrGetEquippedWeaponProp
/* f0309a4: afa70030 */ sw $a3,0x30($sp)
/* f0309a8: 8c430004 */ lw $v1,0x4($v0)
/* f0309ac: 9064005c */ lbu $a0,0x5c($v1)
/* f0309b0: 9065005f */ lbu $a1,0x5f($v1)
/* f0309b4: 0fc2c8f8 */ jal weaponGetNumTicksPerShot
/* f0309b8: afa30044 */ sw $v1,0x44($sp)
/* f0309bc: 8fa30044 */ lw $v1,0x44($sp)
/* f0309c0: 8fa60034 */ lw $a2,0x34($sp)
/* f0309c4: 1c400004 */ bgtz $v0,.PF0f0309d8
/* f0309c8: 8fa70030 */ lw $a3,0x30($sp)
/* f0309cc: 24090001 */ li $t1,0x1
/* f0309d0: 03a65021 */ addu $t2,$sp,$a2
/* f0309d4: ad490058 */ sw $t1,0x58($t2)
.PF0f0309d8:
/* f0309d8: 9062005c */ lbu $v0,0x5c($v1)
/* f0309dc: 24010018 */ li $at,0x18
/* f0309e0: 240d0001 */ li $t5,0x1
/* f0309e4: 1041001c */ beq $v0,$at,.PF0f030a58
/* f0309e8: 03a67821 */ addu $t7,$sp,$a2
/* f0309ec: 24010034 */ li $at,0x34
/* f0309f0: 10410019 */ beq $v0,$at,.PF0f030a58
/* f0309f4: 24010019 */ li $at,0x19
/* f0309f8: 10410017 */ beq $v0,$at,.PF0f030a58
/* f0309fc: 24010017 */ li $at,0x17
/* f030a00: 10410015 */ beq $v0,$at,.PF0f030a58
/* f030a04: 3c04800a */ lui $a0,0x800a
/* f030a08: 8c84a828 */ lw $a0,-0x57d8($a0)
/* f030a0c: 24010008 */ li $at,0x8
/* f030a10: 14800009 */ bnez $a0,.PF0f030a38
/* f030a14: 00000000 */ nop
/* f030a18: 14410007 */ bne $v0,$at,.PF0f030a38
/* f030a1c: 00000000 */ nop
/* f030a20: 82230006 */ lb $v1,0x6($s1)
/* f030a24: 24010028 */ li $at,0x28
/* f030a28: 10610003 */ beq $v1,$at,.PF0f030a38
/* f030a2c: 24010013 */ li $at,0x13
/* f030a30: 5461000a */ bnel $v1,$at,.PF0f030a5c
/* f030a34: aded0050 */ sw $t5,0x50($t7)
.PF0f030a38:
/* f030a38: 14800003 */ bnez $a0,.PF0f030a48
/* f030a3c: 24010009 */ li $at,0x9
/* f030a40: 50410006 */ beql $v0,$at,.PF0f030a5c
/* f030a44: aded0050 */ sw $t5,0x50($t7)
.PF0f030a48:
/* f030a48: 14800004 */ bnez $a0,.PF0f030a5c
/* f030a4c: 24010013 */ li $at,0x13
/* f030a50: 54410003 */ bnel $v0,$at,.PF0f030a60
/* f030a54: 26100001 */ addiu $s0,$s0,0x1
.PF0f030a58:
/* f030a58: aded0050 */ sw $t5,0x50($t7)
.PF0f030a5c:
/* f030a5c: 26100001 */ addiu $s0,$s0,0x1
.PF0f030a60:
/* f030a60: 24010002 */ li $at,0x2
/* f030a64: 24c60004 */ addiu $a2,$a2,0x4
/* f030a68: 1601ffc7 */ bne $s0,$at,.PF0f030988
/* f030a6c: 24e70004 */ addiu $a3,$a3,0x4
/* f030a70: 240e0009 */ li $t6,0x9
/* f030a74: a22e0007 */ sb $t6,0x7($s1)
/* f030a78: 0c004ad4 */ jal random
/* f030a7c: ae200030 */ sw $zero,0x30($s1)
/* f030a80: 3c017f1b */ lui $at,0x7f1b
/* f030a84: c4249f70 */ lwc1 $f4,-0x6090($at)
/* f030a88: 3c018006 */ lui $at,0x8006
/* f030a8c: c426298c */ lwc1 $f6,0x298c($at)
/* f030a90: ae200038 */ sw $zero,0x38($s1)
/* f030a94: 46062202 */ mul.s $f8,$f4,$f6
/* f030a98: 4600428d */ trunc.w.s $f10,$f8
/* f030a9c: 44185000 */ mfc1 $t8,$f10
/* f030aa0: 00000000 */ nop
/* f030aa4: 0058001b */ divu $zero,$v0,$t8
/* f030aa8: 00004010 */ mfhi $t0
/* f030aac: 250c0064 */ addiu $t4,$t0,0x64
/* f030ab0: ae2c0034 */ sw $t4,0x34($s1)
/* f030ab4: 8fab0074 */ lw $t3,0x74($sp)
/* f030ab8: 17000002 */ bnez $t8,.PF0f030ac4
/* f030abc: 00000000 */ nop
/* f030ac0: 0007000d */ break 0x7
.PF0f030ac4:
/* f030ac4: ae200040 */ sw $zero,0x40($s1)
/* f030ac8: 0c004ad4 */ jal random
/* f030acc: ae2b003c */ sw $t3,0x3c($s1)
/* f030ad0: 30490001 */ andi $t1,$v0,0x1
/* f030ad4: ae290044 */ sw $t1,0x44($s1)
/* f030ad8: 8faa0064 */ lw $t2,0x64($sp)
/* f030adc: 44808000 */ mtc1 $zero,$f16
/* f030ae0: 8e2c0018 */ lw $t4,0x18($s1)
/* f030ae4: a22a0049 */ sb $t2,0x49($s1)
/* f030ae8: 8fad0060 */ lw $t5,0x60($sp)
/* f030aec: 3c017fff */ lui $at,0x7fff
/* f030af0: 3421ffff */ ori $at,$at,0xffff
/* f030af4: a22d0048 */ sb $t5,0x48($s1)
/* f030af8: 8faf005c */ lw $t7,0x5c($sp)
/* f030afc: 01815824 */ and $t3,$t4,$at
/* f030b00: 8e240020 */ lw $a0,0x20($s1)
/* f030b04: a22f004b */ sb $t7,0x4b($s1)
/* f030b08: 8fae0058 */ lw $t6,0x58($sp)
/* f030b0c: a22e004a */ sb $t6,0x4a($s1)
/* f030b10: 8fb90054 */ lw $t9,0x54($sp)
/* f030b14: a239004d */ sb $t9,0x4d($s1)
/* f030b18: 8fb80050 */ lw $t8,0x50($sp)
/* f030b1c: e6300054 */ swc1 $f16,0x54($s1)
/* f030b20: a238004c */ sb $t8,0x4c($s1)
/* f030b24: 8fa80068 */ lw $t0,0x68($sp)
/* f030b28: a2200008 */ sb $zero,0x8($s1)
/* f030b2c: ae2b0018 */ sw $t3,0x18($s1)
/* f030b30: 0c007659 */ jal modelIsAnimMerging
/* f030b34: a228004e */ sb $t0,0x4e($s1)
/* f030b38: 10400006 */ beqz $v0,.PF0f030b54
/* f030b3c: 00000000 */ nop
/* f030b40: 8e290014 */ lw $t1,0x14($s1)
/* f030b44: 3c010020 */ lui $at,0x20
/* f030b48: 01215025 */ or $t2,$t1,$at
/* f030b4c: 10000008 */ b .PF0f030b70
/* f030b50: ae2a0014 */ sw $t2,0x14($s1)
.PF0f030b54:
/* f030b54: 0fc0c1b2 */ jal chrAttackWalkChooseAnimation
/* f030b58: 02202025 */ move $a0,$s1
/* f030b5c: 8e2d0014 */ lw $t5,0x14($s1)
/* f030b60: 3c01ffdf */ lui $at,0xffdf
/* f030b64: 3421ffff */ ori $at,$at,0xffff
/* f030b68: 01a17824 */ and $t7,$t5,$at
/* f030b6c: ae2f0014 */ sw $t7,0x14($s1)
.PF0f030b70:
/* f030b70: 8fbf001c */ lw $ra,0x1c($sp)
/* f030b74: 8fb00014 */ lw $s0,0x14($sp)
/* f030b78: 8fb10018 */ lw $s1,0x18($sp)
/* f030b7c: 03e00008 */ jr $ra
/* f030b80: 27bd0078 */ addiu $sp,$sp,0x78
);
#else
GLOBAL_ASM(
glabel chrAttackWalk
/* f0305e0: 27bdff88 */ addiu $sp,$sp,-120
/* f0305e4: afbf001c */ sw $ra,0x1c($sp)
/* f0305e8: afb10018 */ sw $s1,0x18($sp)
/* f0305ec: afa5007c */ sw $a1,0x7c($sp)
/* f0305f0: 00808825 */ or $s1,$a0,$zero
/* f0305f4: afb00014 */ sw $s0,0x14($sp)
/* f0305f8: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f0305fc: 24050001 */ addiu $a1,$zero,0x1
/* f030600: 00408025 */ or $s0,$v0,$zero
/* f030604: 02202025 */ or $a0,$s1,$zero
/* f030608: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f03060c: 00002825 */ or $a1,$zero,$zero
/* f030610: 3c0f8007 */ lui $t7,%hi(var80068034)
/* f030614: 25ef8034 */ addiu $t7,$t7,%lo(var80068034)
/* f030618: 8de10000 */ lw $at,0x0($t7)
/* f03061c: 8de80004 */ lw $t0,0x4($t7)
/* f030620: 27ae0060 */ addiu $t6,$sp,0x60
/* f030624: 3c0a8007 */ lui $t2,%hi(var8006803c)
/* f030628: 254a803c */ addiu $t2,$t2,%lo(var8006803c)
/* f03062c: adc10000 */ sw $at,0x0($t6)
/* f030630: adc80004 */ sw $t0,0x4($t6)
/* f030634: 8d4d0004 */ lw $t5,0x4($t2)
/* f030638: 8d410000 */ lw $at,0x0($t2)
/* f03063c: 27a90058 */ addiu $t1,$sp,0x58
/* f030640: 3c188007 */ lui $t8,%hi(var80068044)
/* f030644: 27188044 */ addiu $t8,$t8,%lo(var80068044)
/* f030648: ad2d0004 */ sw $t5,0x4($t1)
/* f03064c: ad210000 */ sw $at,0x0($t1)
/* f030650: 8f080004 */ lw $t0,0x4($t8)
/* f030654: 8f010000 */ lw $at,0x0($t8)
/* f030658: 27b90050 */ addiu $t9,$sp,0x50
/* f03065c: 00402825 */ or $a1,$v0,$zero
/* f030660: af280004 */ sw $t0,0x4($t9)
/* f030664: 12000048 */ beqz $s0,.L0f030788
/* f030668: af210000 */ sw $at,0x0($t9)
/* f03066c: 10400046 */ beqz $v0,.L0f030788
/* f030670: 02202025 */ or $a0,$s1,$zero
/* f030674: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f030678: 24050001 */ addiu $a1,$zero,0x1
/* f03067c: 00408025 */ or $s0,$v0,$zero
/* f030680: 02202025 */ or $a0,$s1,$zero
/* f030684: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f030688: 00002825 */ or $a1,$zero,$zero
/* f03068c: 1200000d */ beqz $s0,.L0f0306c4
/* f030690: 00001825 */ or $v1,$zero,$zero
/* f030694: 5040000c */ beqzl $v0,.L0f0306c8
/* f030698: 2c4b0001 */ sltiu $t3,$v0,0x1
/* f03069c: 0c004b70 */ jal random
/* f0306a0: 00000000 */ nop
/* f0306a4: 304c0001 */ andi $t4,$v0,0x1
/* f0306a8: 0c004b70 */ jal random
/* f0306ac: afac0068 */ sw $t4,0x68($sp)
/* f0306b0: 24010003 */ addiu $at,$zero,0x3
/* f0306b4: 0041001b */ divu $zero,$v0,$at
/* f0306b8: 00001810 */ mfhi $v1
/* f0306bc: 10000003 */ b .L0f0306cc
/* f0306c0: 00000000 */ nop
.L0f0306c4:
/* f0306c4: 2c4b0001 */ sltiu $t3,$v0,0x1
.L0f0306c8:
/* f0306c8: afab0068 */ sw $t3,0x68($sp)
.L0f0306cc:
/* f0306cc: 14600013 */ bnez $v1,.L0f03071c
/* f0306d0: 24010001 */ addiu $at,$zero,0x1
/* f0306d4: 8fa9007c */ lw $t1,0x7c($sp)
/* f0306d8: 3c0d8006 */ lui $t5,%hi(var80067aa0)
/* f0306dc: 3c0a8006 */ lui $t2,%hi(var80067ae8)
/* f0306e0: 11200004 */ beqz $t1,.L0f0306f4
/* f0306e4: 25ad7aa0 */ addiu $t5,$t5,%lo(var80067aa0)
/* f0306e8: 254a7ae8 */ addiu $t2,$t2,%lo(var80067ae8)
/* f0306ec: 10000002 */ b .L0f0306f8
/* f0306f0: afaa0074 */ sw $t2,0x74($sp)
.L0f0306f4:
/* f0306f4: afad0074 */ sw $t5,0x74($sp)
.L0f0306f8:
/* f0306f8: 8faf0068 */ lw $t7,0x68($sp)
/* f0306fc: 240e0001 */ addiu $t6,$zero,0x1
/* f030700: 24020001 */ addiu $v0,$zero,0x1
/* f030704: 11e00003 */ beqz $t7,.L0f030714
/* f030708: 00000000 */ nop
/* f03070c: 1000004a */ b .L0f030838
/* f030710: afae0064 */ sw $t6,0x64($sp)
.L0f030714:
/* f030714: 10000048 */ b .L0f030838
/* f030718: afa20060 */ sw $v0,0x60($sp)
.L0f03071c:
/* f03071c: 1461000e */ bne $v1,$at,.L0f030758
/* f030720: 8fac007c */ lw $t4,0x7c($sp)
/* f030724: 8fb9007c */ lw $t9,0x7c($sp)
/* f030728: 3c088006 */ lui $t0,%hi(var80067b30)
/* f03072c: 25087b30 */ addiu $t0,$t0,%lo(var80067b30)
/* f030730: 13200005 */ beqz $t9,.L0f030748
/* f030734: 24020001 */ addiu $v0,$zero,0x1
/* f030738: 3c188006 */ lui $t8,%hi(var80067b78)
/* f03073c: 27187b78 */ addiu $t8,$t8,%lo(var80067b78)
/* f030740: 10000002 */ b .L0f03074c
/* f030744: afb80074 */ sw $t8,0x74($sp)
.L0f030748:
/* f030748: afa80074 */ sw $t0,0x74($sp)
.L0f03074c:
/* f03074c: afa20064 */ sw $v0,0x64($sp)
/* f030750: 10000039 */ b .L0f030838
/* f030754: afa20060 */ sw $v0,0x60($sp)
.L0f030758:
/* f030758: 11800005 */ beqz $t4,.L0f030770
/* f03075c: 24020001 */ addiu $v0,$zero,0x1
/* f030760: 3c0b8006 */ lui $t3,%hi(var80067c08)
/* f030764: 256b7c08 */ addiu $t3,$t3,%lo(var80067c08)
/* f030768: 10000004 */ b .L0f03077c
/* f03076c: afab0074 */ sw $t3,0x74($sp)
.L0f030770:
/* f030770: 3c098006 */ lui $t1,%hi(var80067bc0)
/* f030774: 25297bc0 */ addiu $t1,$t1,%lo(var80067bc0)
/* f030778: afa90074 */ sw $t1,0x74($sp)
.L0f03077c:
/* f03077c: afa20064 */ sw $v0,0x64($sp)
/* f030780: 1000002d */ b .L0f030838
/* f030784: afa20060 */ sw $v0,0x60($sp)
.L0f030788:
/* f030788: 02002025 */ or $a0,$s0,$zero
/* f03078c: 0fc0b849 */ jal weaponIsOneHanded
/* f030790: afa5006c */ sw $a1,0x6c($sp)
/* f030794: 14400005 */ bnez $v0,.L0f0307ac
/* f030798: 8fa5006c */ lw $a1,0x6c($sp)
/* f03079c: 0fc0b849 */ jal weaponIsOneHanded
/* f0307a0: 00a02025 */ or $a0,$a1,$zero
/* f0307a4: 50400014 */ beqzl $v0,.L0f0307f8
/* f0307a8: 8fb9007c */ lw $t9,0x7c($sp)
.L0f0307ac:
/* f0307ac: 8faa007c */ lw $t2,0x7c($sp)
/* f0307b0: 0010102b */ sltu $v0,$zero,$s0
/* f0307b4: afa20068 */ sw $v0,0x68($sp)
/* f0307b8: 11400005 */ beqz $t2,.L0f0307d0
/* f0307bc: 3c0f8006 */ lui $t7,%hi(var80067aa0)
/* f0307c0: 3c0d8006 */ lui $t5,%hi(var80067ae8)
/* f0307c4: 25ad7ae8 */ addiu $t5,$t5,%lo(var80067ae8)
/* f0307c8: 10000003 */ b .L0f0307d8
/* f0307cc: afad0074 */ sw $t5,0x74($sp)
.L0f0307d0:
/* f0307d0: 25ef7aa0 */ addiu $t7,$t7,%lo(var80067aa0)
/* f0307d4: afaf0074 */ sw $t7,0x74($sp)
.L0f0307d8:
/* f0307d8: 10400003 */ beqz $v0,.L0f0307e8
/* f0307dc: 240e0001 */ addiu $t6,$zero,0x1
/* f0307e0: 10000015 */ b .L0f030838
/* f0307e4: afae0064 */ sw $t6,0x64($sp)
.L0f0307e8:
/* f0307e8: 24020001 */ addiu $v0,$zero,0x1
/* f0307ec: 10000012 */ b .L0f030838
/* f0307f0: afa20060 */ sw $v0,0x60($sp)
/* f0307f4: 8fb9007c */ lw $t9,0x7c($sp)
.L0f0307f8:
/* f0307f8: 0010102b */ sltu $v0,$zero,$s0
/* f0307fc: afa20068 */ sw $v0,0x68($sp)
/* f030800: 13200005 */ beqz $t9,.L0f030818
/* f030804: 3c088006 */ lui $t0,%hi(var80067a10)
/* f030808: 3c188006 */ lui $t8,%hi(var80067a58)
/* f03080c: 27187a58 */ addiu $t8,$t8,%lo(var80067a58)
/* f030810: 10000003 */ b .L0f030820
/* f030814: afb80074 */ sw $t8,0x74($sp)
.L0f030818:
/* f030818: 25087a10 */ addiu $t0,$t0,%lo(var80067a10)
/* f03081c: afa80074 */ sw $t0,0x74($sp)
.L0f030820:
/* f030820: 10400003 */ beqz $v0,.L0f030830
/* f030824: 240c0001 */ addiu $t4,$zero,0x1
/* f030828: 10000003 */ b .L0f030838
/* f03082c: afac0064 */ sw $t4,0x64($sp)
.L0f030830:
/* f030830: 24020001 */ addiu $v0,$zero,0x1
/* f030834: afa20060 */ sw $v0,0x60($sp)
.L0f030838:
/* f030838: 00008025 */ or $s0,$zero,$zero
/* f03083c: 00003025 */ or $a2,$zero,$zero
/* f030840: 27a70060 */ addiu $a3,$sp,0x60
.L0f030844:
/* f030844: 8ceb0000 */ lw $t3,0x0($a3)
/* f030848: 02202025 */ or $a0,$s1,$zero
/* f03084c: 02002825 */ or $a1,$s0,$zero
/* f030850: 51600032 */ beqzl $t3,.L0f03091c
/* f030854: 26100001 */ addiu $s0,$s0,0x1
/* f030858: afa60034 */ sw $a2,0x34($sp)
/* f03085c: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030860: afa70030 */ sw $a3,0x30($sp)
/* f030864: 8c430004 */ lw $v1,0x4($v0)
/* f030868: 9064005c */ lbu $a0,0x5c($v1)
/* f03086c: 9065005f */ lbu $a1,0x5f($v1)
/* f030870: 0fc2c7ba */ jal weaponGetNumTicksPerShot
/* f030874: afa30044 */ sw $v1,0x44($sp)
/* f030878: 8fa30044 */ lw $v1,0x44($sp)
/* f03087c: 8fa60034 */ lw $a2,0x34($sp)
/* f030880: 1c400004 */ bgtz $v0,.L0f030894
/* f030884: 8fa70030 */ lw $a3,0x30($sp)
/* f030888: 24090001 */ addiu $t1,$zero,0x1
/* f03088c: 03a65021 */ addu $t2,$sp,$a2
/* f030890: ad490058 */ sw $t1,0x58($t2)
.L0f030894:
/* f030894: 9062005c */ lbu $v0,0x5c($v1)
/* f030898: 24010018 */ addiu $at,$zero,0x18
/* f03089c: 240d0001 */ addiu $t5,$zero,0x1
/* f0308a0: 1041001c */ beq $v0,$at,.L0f030914
/* f0308a4: 03a67821 */ addu $t7,$sp,$a2
/* f0308a8: 24010034 */ addiu $at,$zero,0x34
/* f0308ac: 10410019 */ beq $v0,$at,.L0f030914
/* f0308b0: 24010019 */ addiu $at,$zero,0x19
/* f0308b4: 10410017 */ beq $v0,$at,.L0f030914
/* f0308b8: 24010017 */ addiu $at,$zero,0x17
/* f0308bc: 10410015 */ beq $v0,$at,.L0f030914
/* f0308c0: 3c04800a */ lui $a0,%hi(g_Vars+0x318)
/* f0308c4: 8c84a2d8 */ lw $a0,%lo(g_Vars+0x318)($a0)
/* f0308c8: 24010008 */ addiu $at,$zero,0x8
/* f0308cc: 14800009 */ bnez $a0,.L0f0308f4
/* f0308d0: 00000000 */ nop
/* f0308d4: 14410007 */ bne $v0,$at,.L0f0308f4
/* f0308d8: 00000000 */ nop
/* f0308dc: 82230006 */ lb $v1,0x6($s1)
/* f0308e0: 24010028 */ addiu $at,$zero,0x28
/* f0308e4: 10610003 */ beq $v1,$at,.L0f0308f4
/* f0308e8: 24010013 */ addiu $at,$zero,0x13
/* f0308ec: 5461000a */ bnel $v1,$at,.L0f030918
/* f0308f0: aded0050 */ sw $t5,0x50($t7)
.L0f0308f4:
/* f0308f4: 14800003 */ bnez $a0,.L0f030904
/* f0308f8: 24010009 */ addiu $at,$zero,0x9
/* f0308fc: 50410006 */ beql $v0,$at,.L0f030918
/* f030900: aded0050 */ sw $t5,0x50($t7)
.L0f030904:
/* f030904: 14800004 */ bnez $a0,.L0f030918
/* f030908: 24010013 */ addiu $at,$zero,0x13
/* f03090c: 54410003 */ bnel $v0,$at,.L0f03091c
/* f030910: 26100001 */ addiu $s0,$s0,0x1
.L0f030914:
/* f030914: aded0050 */ sw $t5,0x50($t7)
.L0f030918:
/* f030918: 26100001 */ addiu $s0,$s0,0x1
.L0f03091c:
/* f03091c: 24010002 */ addiu $at,$zero,0x2
/* f030920: 24c60004 */ addiu $a2,$a2,0x4
/* f030924: 1601ffc7 */ bne $s0,$at,.L0f030844
/* f030928: 24e70004 */ addiu $a3,$a3,0x4
/* f03092c: 240e0009 */ addiu $t6,$zero,0x9
/* f030930: a22e0007 */ sb $t6,0x7($s1)
/* f030934: 0c004b70 */ jal random
/* f030938: ae200030 */ sw $zero,0x30($s1)
/* f03093c: 3c0143c8 */ lui $at,0x43c8
/* f030940: 44812000 */ mtc1 $at,$f4
/* f030944: 3c018006 */ lui $at,%hi(var80062cac)
/* f030948: c4262cac */ lwc1 $f6,%lo(var80062cac)($at)
/* f03094c: ae200038 */ sw $zero,0x38($s1)
/* f030950: 46062202 */ mul.s $f8,$f4,$f6
/* f030954: 4600428d */ trunc.w.s $f10,$f8
/* f030958: 44185000 */ mfc1 $t8,$f10
/* f03095c: 00000000 */ nop
/* f030960: 0058001b */ divu $zero,$v0,$t8
/* f030964: 00004010 */ mfhi $t0
/* f030968: 250c0078 */ addiu $t4,$t0,0x78
/* f03096c: ae2c0034 */ sw $t4,0x34($s1)
/* f030970: 8fab0074 */ lw $t3,0x74($sp)
/* f030974: 17000002 */ bnez $t8,.L0f030980
/* f030978: 00000000 */ nop
/* f03097c: 0007000d */ break 0x7
.L0f030980:
/* f030980: ae200040 */ sw $zero,0x40($s1)
/* f030984: 0c004b70 */ jal random
/* f030988: ae2b003c */ sw $t3,0x3c($s1)
/* f03098c: 30490001 */ andi $t1,$v0,0x1
/* f030990: ae290044 */ sw $t1,0x44($s1)
/* f030994: 8faa0064 */ lw $t2,0x64($sp)
/* f030998: 44808000 */ mtc1 $zero,$f16
/* f03099c: 8e2c0018 */ lw $t4,0x18($s1)
/* f0309a0: a22a0049 */ sb $t2,0x49($s1)
/* f0309a4: 8fad0060 */ lw $t5,0x60($sp)
/* f0309a8: 3c017fff */ lui $at,0x7fff
/* f0309ac: 3421ffff */ ori $at,$at,0xffff
/* f0309b0: a22d0048 */ sb $t5,0x48($s1)
/* f0309b4: 8faf005c */ lw $t7,0x5c($sp)
/* f0309b8: 01815824 */ and $t3,$t4,$at
/* f0309bc: 8e240020 */ lw $a0,0x20($s1)
/* f0309c0: a22f004b */ sb $t7,0x4b($s1)
/* f0309c4: 8fae0058 */ lw $t6,0x58($sp)
/* f0309c8: a22e004a */ sb $t6,0x4a($s1)
/* f0309cc: 8fb90054 */ lw $t9,0x54($sp)
/* f0309d0: a239004d */ sb $t9,0x4d($s1)
/* f0309d4: 8fb80050 */ lw $t8,0x50($sp)
/* f0309d8: e6300054 */ swc1 $f16,0x54($s1)
/* f0309dc: a238004c */ sb $t8,0x4c($s1)
/* f0309e0: 8fa80068 */ lw $t0,0x68($sp)
/* f0309e4: a2200008 */ sb $zero,0x8($s1)
/* f0309e8: ae2b0018 */ sw $t3,0x18($s1)
/* f0309ec: 0c0076e5 */ jal modelIsAnimMerging
/* f0309f0: a228004e */ sb $t0,0x4e($s1)
/* f0309f4: 10400006 */ beqz $v0,.L0f030a10
/* f0309f8: 00000000 */ nop
/* f0309fc: 8e290014 */ lw $t1,0x14($s1)
/* f030a00: 3c010020 */ lui $at,0x20
/* f030a04: 01215025 */ or $t2,$t1,$at
/* f030a08: 10000008 */ b .L0f030a2c
/* f030a0c: ae2a0014 */ sw $t2,0x14($s1)
.L0f030a10:
/* f030a10: 0fc0c161 */ jal chrAttackWalkChooseAnimation
/* f030a14: 02202025 */ or $a0,$s1,$zero
/* f030a18: 8e2d0014 */ lw $t5,0x14($s1)
/* f030a1c: 3c01ffdf */ lui $at,0xffdf
/* f030a20: 3421ffff */ ori $at,$at,0xffff
/* f030a24: 01a17824 */ and $t7,$t5,$at
/* f030a28: ae2f0014 */ sw $t7,0x14($s1)
.L0f030a2c:
/* f030a2c: 8fbf001c */ lw $ra,0x1c($sp)
/* f030a30: 8fb00014 */ lw $s0,0x14($sp)
/* f030a34: 8fb10018 */ lw $s1,0x18($sp)
/* f030a38: 03e00008 */ jr $ra
/* f030a3c: 27bd0078 */ addiu $sp,$sp,0x78
);
#endif
void chrAttackRollChooseAnimation(struct chrdata *chr)
{
modelSetAnimation(chr->model, chr->act_attack.animfloats->animnum, chr->act_attack.flip,
chr->act_attack.animfloats->unk10, chrGetRangedSpeed(chr, 0.5, 0.8), 16);
if (chr->act_attack.unk035 == 0) {
if (chr->act_attack.unk036) {
if (chr->act_attack.animfloats->unk24 >= 0) {
modelSetAnimEndFrame(chr->model, chr->act_attack.animfloats->unk24);
} else {
modelSetAnimEndFrame(chr->model, chr->act_attack.animfloats->unk1c);
}
} else {
if (chr->act_attack.animfloats->unk20 >= 0) {
modelSetAnimEndFrame(chr->model, chr->act_attack.animfloats->unk20);
} else if (chr->act_attack.animfloats->unk14 >= 0) {
modelSetAnimEndFrame(chr->model, chr->act_attack.animfloats->unk14);
}
}
}
}
GLOBAL_ASM(
glabel chrAttackRoll
/* f030b48: 27bdff78 */ addiu $sp,$sp,-136
/* f030b4c: afbf0024 */ sw $ra,0x24($sp)
/* f030b50: afb10018 */ sw $s1,0x18($sp)
/* f030b54: afa5008c */ sw $a1,0x8c($sp)
/* f030b58: 00808825 */ or $s1,$a0,$zero
/* f030b5c: afb30020 */ sw $s3,0x20($sp)
/* f030b60: afb2001c */ sw $s2,0x1c($sp)
/* f030b64: afb00014 */ sw $s0,0x14($sp)
/* f030b68: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030b6c: 24050001 */ addiu $a1,$zero,0x1
/* f030b70: 00408025 */ or $s0,$v0,$zero
/* f030b74: 02202025 */ or $a0,$s1,$zero
/* f030b78: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030b7c: 00002825 */ or $a1,$zero,$zero
/* f030b80: 3c0f8007 */ lui $t7,%hi(var8006804c)
/* f030b84: afa00074 */ sw $zero,0x74($sp)
/* f030b88: 25ef804c */ addiu $t7,$t7,%lo(var8006804c)
/* f030b8c: 8de10000 */ lw $at,0x0($t7)
/* f030b90: 8de80004 */ lw $t0,0x4($t7)
/* f030b94: 27ae0060 */ addiu $t6,$sp,0x60
/* f030b98: 3c0a8007 */ lui $t2,%hi(var80068054)
/* f030b9c: adc10000 */ sw $at,0x0($t6)
/* f030ba0: adc80004 */ sw $t0,0x4($t6)
/* f030ba4: afa00058 */ sw $zero,0x58($sp)
/* f030ba8: 254a8054 */ addiu $t2,$t2,%lo(var80068054)
/* f030bac: 8d410000 */ lw $at,0x0($t2)
/* f030bb0: 8d4d0004 */ lw $t5,0x4($t2)
/* f030bb4: 27a90050 */ addiu $t1,$sp,0x50
/* f030bb8: 3c188007 */ lui $t8,%hi(var8006805c)
/* f030bbc: 2718805c */ addiu $t8,$t8,%lo(var8006805c)
/* f030bc0: ad210000 */ sw $at,0x0($t1)
/* f030bc4: ad2d0004 */ sw $t5,0x4($t1)
/* f030bc8: 8f080004 */ lw $t0,0x4($t8)
/* f030bcc: 8f010000 */ lw $at,0x0($t8)
/* f030bd0: 27b90048 */ addiu $t9,$sp,0x48
/* f030bd4: 00409025 */ or $s2,$v0,$zero
/* f030bd8: 24130001 */ addiu $s3,$zero,0x1
/* f030bdc: af280004 */ sw $t0,0x4($t9)
/* f030be0: 12000029 */ beqz $s0,.L0f030c88
/* f030be4: af210000 */ sw $at,0x0($t9)
/* f030be8: 10400027 */ beqz $v0,.L0f030c88
/* f030bec: 02202025 */ or $a0,$s1,$zero
/* f030bf0: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f030bf4: 24050001 */ addiu $a1,$zero,0x1
/* f030bf8: 00408025 */ or $s0,$v0,$zero
/* f030bfc: 02202025 */ or $a0,$s1,$zero
/* f030c00: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f030c04: 00002825 */ or $a1,$zero,$zero
/* f030c08: 12000018 */ beqz $s0,.L0f030c6c
/* f030c0c: 2c430001 */ sltiu $v1,$v0,0x1
/* f030c10: 50400017 */ beqzl $v0,.L0f030c70
/* f030c14: 24190001 */ addiu $t9,$zero,0x1
/* f030c18: 0c004b70 */ jal random
/* f030c1c: 00000000 */ nop
/* f030c20: 304c0001 */ andi $t4,$v0,0x1
/* f030c24: 240b0001 */ addiu $t3,$zero,0x1
/* f030c28: afac0078 */ sw $t4,0x78($sp)
/* f030c2c: 0c004b70 */ jal random
/* f030c30: afab0074 */ sw $t3,0x74($sp)
/* f030c34: 24010003 */ addiu $at,$zero,0x3
/* f030c38: 0041001b */ divu $zero,$v0,$at
/* f030c3c: 00004810 */ mfhi $t1
/* f030c40: 240f0001 */ addiu $t7,$zero,0x1
/* f030c44: 15200006 */ bnez $t1,.L0f030c60
/* f030c48: 240e0001 */ addiu $t6,$zero,0x1
/* f030c4c: 8faa0078 */ lw $t2,0x78($sp)
/* f030c50: 2d4d0001 */ sltiu $t5,$t2,0x1
/* f030c54: afad0060 */ sw $t5,0x60($sp)
/* f030c58: 1000001f */ b .L0f030cd8
/* f030c5c: afaa0064 */ sw $t2,0x64($sp)
.L0f030c60:
/* f030c60: afaf0064 */ sw $t7,0x64($sp)
/* f030c64: 1000001c */ b .L0f030cd8
/* f030c68: afae0060 */ sw $t6,0x60($sp)
.L0f030c6c:
/* f030c6c: 24190001 */ addiu $t9,$zero,0x1
.L0f030c70:
/* f030c70: 2c780001 */ sltiu $t8,$v1,0x1
/* f030c74: afa30078 */ sw $v1,0x78($sp)
/* f030c78: afb90074 */ sw $t9,0x74($sp)
/* f030c7c: afa30064 */ sw $v1,0x64($sp)
/* f030c80: 10000015 */ b .L0f030cd8
/* f030c84: afb80060 */ sw $t8,0x60($sp)
.L0f030c88:
/* f030c88: 0fc0b849 */ jal weaponIsOneHanded
/* f030c8c: 02002025 */ or $a0,$s0,$zero
/* f030c90: 54400005 */ bnezl $v0,.L0f030ca8
/* f030c94: 0010102b */ sltu $v0,$zero,$s0
/* f030c98: 0fc0b849 */ jal weaponIsOneHanded
/* f030c9c: 02402025 */ or $a0,$s2,$zero
/* f030ca0: 10400008 */ beqz $v0,.L0f030cc4
/* f030ca4: 0010102b */ sltu $v0,$zero,$s0
.L0f030ca8:
/* f030ca8: 24080001 */ addiu $t0,$zero,0x1
/* f030cac: 2c4c0001 */ sltiu $t4,$v0,0x1
/* f030cb0: afa20078 */ sw $v0,0x78($sp)
/* f030cb4: afa80074 */ sw $t0,0x74($sp)
/* f030cb8: afa20064 */ sw $v0,0x64($sp)
/* f030cbc: 10000006 */ b .L0f030cd8
/* f030cc0: afac0060 */ sw $t4,0x60($sp)
.L0f030cc4:
/* f030cc4: 0010102b */ sltu $v0,$zero,$s0
/* f030cc8: 2c4b0001 */ sltiu $t3,$v0,0x1
/* f030ccc: afa20078 */ sw $v0,0x78($sp)
/* f030cd0: afa20064 */ sw $v0,0x64($sp)
/* f030cd4: afab0060 */ sw $t3,0x60($sp)
.L0f030cd8:
/* f030cd8: 8fa2008c */ lw $v0,0x8c($sp)
/* f030cdc: 8fa90078 */ lw $t1,0x78($sp)
/* f030ce0: 10400003 */ beqz $v0,.L0f030cf0
/* f030ce4: 00000000 */ nop
/* f030ce8: 11200005 */ beqz $t1,.L0f030d00
/* f030cec: 00000000 */ nop
.L0f030cf0:
/* f030cf0: 1440000f */ bnez $v0,.L0f030d30
/* f030cf4: 8faa0078 */ lw $t2,0x78($sp)
/* f030cf8: 1140000d */ beqz $t2,.L0f030d30
/* f030cfc: 00000000 */ nop
.L0f030d00:
/* f030d00: 0c004b70 */ jal random
/* f030d04: 00000000 */ nop
/* f030d08: 304d0001 */ andi $t5,$v0,0x1
/* f030d0c: 11a00005 */ beqz $t5,.L0f030d24
/* f030d10: 3c0e8006 */ lui $t6,%hi(var800674b8)
/* f030d14: 3c0f8006 */ lui $t7,%hi(var80067428)
/* f030d18: 25ef7428 */ addiu $t7,$t7,%lo(var80067428)
/* f030d1c: 1000000f */ b .L0f030d5c
/* f030d20: afaf0084 */ sw $t7,0x84($sp)
.L0f030d24:
/* f030d24: 25ce74b8 */ addiu $t6,$t6,%lo(var800674b8)
/* f030d28: 1000000c */ b .L0f030d5c
/* f030d2c: afae0084 */ sw $t6,0x84($sp)
.L0f030d30:
/* f030d30: 0c004b70 */ jal random
/* f030d34: 00000000 */ nop
/* f030d38: 30590001 */ andi $t9,$v0,0x1
/* f030d3c: 13200005 */ beqz $t9,.L0f030d54
/* f030d40: 3c088006 */ lui $t0,%hi(var80067500)
/* f030d44: 3c188006 */ lui $t8,%hi(var80067470)
/* f030d48: 27187470 */ addiu $t8,$t8,%lo(var80067470)
/* f030d4c: 10000003 */ b .L0f030d5c
/* f030d50: afb80084 */ sw $t8,0x84($sp)
.L0f030d54:
/* f030d54: 25087500 */ addiu $t0,$t0,%lo(var80067500)
/* f030d58: afa80084 */ sw $t0,0x84($sp)
.L0f030d5c:
/* f030d5c: 8fac0074 */ lw $t4,0x74($sp)
/* f030d60: 00008025 */ or $s0,$zero,$zero
/* f030d64: 00003025 */ or $a2,$zero,$zero
/* f030d68: 11800004 */ beqz $t4,.L0f030d7c
/* f030d6c: 27a70060 */ addiu $a3,$sp,0x60
/* f030d70: 8fab0084 */ lw $t3,0x84($sp)
/* f030d74: 25690120 */ addiu $t1,$t3,0x120
/* f030d78: afa90084 */ sw $t1,0x84($sp)
.L0f030d7c:
/* f030d7c: 24120001 */ addiu $s2,$zero,0x1
.L0f030d80:
/* f030d80: 8cea0000 */ lw $t2,0x0($a3)
/* f030d84: 02202025 */ or $a0,$s1,$zero
/* f030d88: 02002825 */ or $a1,$s0,$zero
/* f030d8c: 51400038 */ beqzl $t2,.L0f030e70
/* f030d90: 26100001 */ addiu $s0,$s0,0x1
/* f030d94: afa60038 */ sw $a2,0x38($sp)
/* f030d98: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030d9c: afa70034 */ sw $a3,0x34($sp)
/* f030da0: 8c430004 */ lw $v1,0x4($v0)
/* f030da4: 9064005c */ lbu $a0,0x5c($v1)
/* f030da8: 9065005f */ lbu $a1,0x5f($v1)
/* f030dac: 0fc2c7ba */ jal weaponGetNumTicksPerShot
/* f030db0: afa3006c */ sw $v1,0x6c($sp)
/* f030db4: 8fa3006c */ lw $v1,0x6c($sp)
/* f030db8: 8fa60038 */ lw $a2,0x38($sp)
/* f030dbc: 1c400009 */ bgtz $v0,.L0f030de4
/* f030dc0: 8fa70034 */ lw $a3,0x34($sp)
/* f030dc4: 03a66821 */ addu $t5,$sp,$a2
/* f030dc8: adb20050 */ sw $s2,0x50($t5)
/* f030dcc: 9062005c */ lbu $v0,0x5c($v1)
/* f030dd0: 2401001d */ addiu $at,$zero,0x1d
/* f030dd4: 54410007 */ bnel $v0,$at,.L0f030df4
/* f030dd8: 24010018 */ addiu $at,$zero,0x18
/* f030ddc: 10000004 */ b .L0f030df0
/* f030de0: 00009825 */ or $s3,$zero,$zero
.L0f030de4:
/* f030de4: afb20058 */ sw $s2,0x58($sp)
/* f030de8: 00009825 */ or $s3,$zero,$zero
/* f030dec: 9062005c */ lbu $v0,0x5c($v1)
.L0f030df0:
/* f030df0: 24010018 */ addiu $at,$zero,0x18
.L0f030df4:
/* f030df4: 1041001c */ beq $v0,$at,.L0f030e68
/* f030df8: 03a67821 */ addu $t7,$sp,$a2
/* f030dfc: 24010034 */ addiu $at,$zero,0x34
/* f030e00: 10410019 */ beq $v0,$at,.L0f030e68
/* f030e04: 24010019 */ addiu $at,$zero,0x19
/* f030e08: 10410017 */ beq $v0,$at,.L0f030e68
/* f030e0c: 24010017 */ addiu $at,$zero,0x17
/* f030e10: 10410015 */ beq $v0,$at,.L0f030e68
/* f030e14: 3c04800a */ lui $a0,%hi(g_Vars+0x318)
/* f030e18: 8c84a2d8 */ lw $a0,%lo(g_Vars+0x318)($a0)
/* f030e1c: 24010008 */ addiu $at,$zero,0x8
/* f030e20: 14800009 */ bnez $a0,.L0f030e48
/* f030e24: 00000000 */ nop
/* f030e28: 14410007 */ bne $v0,$at,.L0f030e48
/* f030e2c: 00000000 */ nop
/* f030e30: 82230006 */ lb $v1,0x6($s1)
/* f030e34: 24010028 */ addiu $at,$zero,0x28
/* f030e38: 10610003 */ beq $v1,$at,.L0f030e48
/* f030e3c: 24010013 */ addiu $at,$zero,0x13
/* f030e40: 5461000a */ bnel $v1,$at,.L0f030e6c
/* f030e44: adf20048 */ sw $s2,0x48($t7)
.L0f030e48:
/* f030e48: 14800003 */ bnez $a0,.L0f030e58
/* f030e4c: 24010009 */ addiu $at,$zero,0x9
/* f030e50: 50410006 */ beql $v0,$at,.L0f030e6c
/* f030e54: adf20048 */ sw $s2,0x48($t7)
.L0f030e58:
/* f030e58: 14800004 */ bnez $a0,.L0f030e6c
/* f030e5c: 24010013 */ addiu $at,$zero,0x13
/* f030e60: 54410003 */ bnel $v0,$at,.L0f030e70
/* f030e64: 26100001 */ addiu $s0,$s0,0x1
.L0f030e68:
/* f030e68: adf20048 */ sw $s2,0x48($t7)
.L0f030e6c:
/* f030e6c: 26100001 */ addiu $s0,$s0,0x1
.L0f030e70:
/* f030e70: 24010002 */ addiu $at,$zero,0x2
/* f030e74: 24c60004 */ addiu $a2,$a2,0x4
/* f030e78: 1601ffc1 */ bne $s0,$at,.L0f030d80
/* f030e7c: 24e70004 */ addiu $a3,$a3,0x4
/* f030e80: 240e000a */ addiu $t6,$zero,0xa
/* f030e84: a22e0007 */ sb $t6,0x7($s1)
/* f030e88: 8fb90084 */ lw $t9,0x84($sp)
/* f030e8c: a2200031 */ sb $zero,0x31($s1)
/* f030e90: 0c004b70 */ jal random
/* f030e94: ae39002c */ sw $t9,0x2c($s1)
/* f030e98: 30580001 */ andi $t8,$v0,0x1
/* f030e9c: a2380032 */ sb $t8,0x32($s1)
/* f030ea0: 8fa80064 */ lw $t0,0x64($sp)
/* f030ea4: a2280039 */ sb $t0,0x39($s1)
/* f030ea8: 8fac0060 */ lw $t4,0x60($sp)
/* f030eac: a22c0038 */ sb $t4,0x38($s1)
/* f030eb0: 8fab0054 */ lw $t3,0x54($sp)
/* f030eb4: a22b003b */ sb $t3,0x3b($s1)
/* f030eb8: 8fa90050 */ lw $t1,0x50($sp)
/* f030ebc: a229003a */ sb $t1,0x3a($s1)
/* f030ec0: 8faa004c */ lw $t2,0x4c($sp)
/* f030ec4: a22a003d */ sb $t2,0x3d($s1)
/* f030ec8: 8fad0048 */ lw $t5,0x48($sp)
/* f030ecc: a2330036 */ sb $s3,0x36($s1)
/* f030ed0: a22d003c */ sb $t5,0x3c($s1)
/* f030ed4: 8faf0058 */ lw $t7,0x58($sp)
/* f030ed8: a22f0037 */ sb $t7,0x37($s1)
/* f030edc: 8fae0074 */ lw $t6,0x74($sp)
/* f030ee0: ae200040 */ sw $zero,0x40($s1)
/* f030ee4: a2200033 */ sb $zero,0x33($s1)
/* f030ee8: a2320030 */ sb $s2,0x30($s1)
/* f030eec: a22e0035 */ sb $t6,0x35($s1)
/* f030ef0: 8fb9004c */ lw $t9,0x4c($sp)
/* f030ef4: 8fb80048 */ lw $t8,0x48($sp)
/* f030ef8: 8fa8004c */ lw $t0,0x4c($sp)
/* f030efc: 17200003 */ bnez $t9,.L0f030f0c
/* f030f00: 00000000 */ nop
/* f030f04: 13000009 */ beqz $t8,.L0f030f2c
/* f030f08: 00000000 */ nop
.L0f030f0c:
/* f030f0c: 11000005 */ beqz $t0,.L0f030f24
/* f030f10: 8fac0048 */ lw $t4,0x48($sp)
/* f030f14: 11800003 */ beqz $t4,.L0f030f24
/* f030f18: 240b0002 */ addiu $t3,$zero,0x2
/* f030f1c: 10000015 */ b .L0f030f74
/* f030f20: a22b0034 */ sb $t3,0x34($s1)
.L0f030f24:
/* f030f24: 10000013 */ b .L0f030f74
/* f030f28: a2320034 */ sb $s2,0x34($s1)
.L0f030f2c:
/* f030f2c: 0c004b70 */ jal random
/* f030f30: 00000000 */ nop
/* f030f34: 30490003 */ andi $t1,$v0,0x3
/* f030f38: 252a0002 */ addiu $t2,$t1,0x2
/* f030f3c: a22a0034 */ sb $t2,0x34($s1)
/* f030f40: 8fad0060 */ lw $t5,0x60($sp)
/* f030f44: 8faf0064 */ lw $t7,0x64($sp)
/* f030f48: 51a0000b */ beqzl $t5,.L0f030f78
/* f030f4c: 240c0200 */ addiu $t4,$zero,0x200
/* f030f50: 51e00009 */ beqzl $t7,.L0f030f78
/* f030f54: 240c0200 */ addiu $t4,$zero,0x200
/* f030f58: 0c004b70 */ jal random
/* f030f5c: 00000000 */ nop
/* f030f60: 822e0034 */ lb $t6,0x34($s1)
/* f030f64: 30590003 */ andi $t9,$v0,0x3
/* f030f68: 01d9c021 */ addu $t8,$t6,$t9
/* f030f6c: 27080002 */ addiu $t0,$t8,0x2
/* f030f70: a2280034 */ sb $t0,0x34($s1)
.L0f030f74:
/* f030f74: 240c0200 */ addiu $t4,$zero,0x200
.L0f030f78:
/* f030f78: ae2c004c */ sw $t4,0x4c($s1)
/* f030f7c: ae200050 */ sw $zero,0x50($s1)
/* f030f80: ae320054 */ sw $s2,0x54($s1)
/* f030f84: ae200058 */ sw $zero,0x58($s1)
/* f030f88: ae200044 */ sw $zero,0x44($s1)
/* f030f8c: ae200048 */ sw $zero,0x48($s1)
/* f030f90: 8fab0078 */ lw $t3,0x78($sp)
/* f030f94: a2200008 */ sb $zero,0x8($s1)
/* f030f98: 8e240020 */ lw $a0,0x20($s1)
/* f030f9c: 0c0076e5 */ jal modelIsAnimMerging
/* f030fa0: a22b003e */ sb $t3,0x3e($s1)
/* f030fa4: 10400006 */ beqz $v0,.L0f030fc0
/* f030fa8: 00000000 */ nop
/* f030fac: 8e290014 */ lw $t1,0x14($s1)
/* f030fb0: 3c010020 */ lui $at,0x20
/* f030fb4: 01215025 */ or $t2,$t1,$at
/* f030fb8: 10000008 */ b .L0f030fdc
/* f030fbc: ae2a0014 */ sw $t2,0x14($s1)
.L0f030fc0:
/* f030fc0: 0fc0c290 */ jal chrAttackRollChooseAnimation
/* f030fc4: 02202025 */ or $a0,$s1,$zero
/* f030fc8: 8e2d0014 */ lw $t5,0x14($s1)
/* f030fcc: 3c01ffdf */ lui $at,0xffdf
/* f030fd0: 3421ffff */ ori $at,$at,0xffff
/* f030fd4: 01a17824 */ and $t7,$t5,$at
/* f030fd8: ae2f0014 */ sw $t7,0x14($s1)
.L0f030fdc:
/* f030fdc: 8fbf0024 */ lw $ra,0x24($sp)
/* f030fe0: 8fb00014 */ lw $s0,0x14($sp)
/* f030fe4: 8fb10018 */ lw $s1,0x18($sp)
/* f030fe8: 8fb2001c */ lw $s2,0x1c($sp)
/* f030fec: 8fb30020 */ lw $s3,0x20($sp)
/* f030ff0: 03e00008 */ jr $ra
/* f030ff4: 27bd0088 */ addiu $sp,$sp,0x88
);
void chrStartAnim(struct chrdata *chr, s32 animnum, f32 startframe, f32 endframe, u8 flags, s32 arg5, f32 speed)
{
u32 stack;
if (chr && chr->model) {
if (flags & CHRANIMFLAG_80) {
speed = -speed;
}
if (CHRRACE(chr) != RACE_DRCAROLL) {
chrStopFiring(chr);
}
chr->actiontype = ACT_ANIM;
chr->act_anim.unk02c = (flags & CHRANIMFLAG_02) != 0;
chr->act_anim.holdlastframe = (flags & CHRANIMFLAG_HOLDLASTFRAME) != 0;
chr->act_anim.unk034 = (flags & CHRANIMFLAG_08) != 0;
chr->act_anim.unk038 = (flags & CHRANIMFLAG_10) != 0;
chr->act_anim.unk03c = (flags & CHRANIMFLAG_40) != 0;
chr->act_anim.unk040 = 0;
chr->act_anim.animnum = animnum;
chr->act_anim.flip = (flags & CHRANIMFLAG_FLIP) != 0;
chr->act_anim.startframe = startframe;
chr->act_anim.endframe = endframe;
chr->act_anim.speed = speed;
chr->act_anim.unk058 = arg5;
chr->sleep = chr->act_anim.unk038 ? arg5 : 0;
if (arg5 > 0 && modelIsAnimMerging(chr->model)) {
chr->hidden |= CHRHFLAG_NEEDANIM;
} else {
modelSetAnimation(chr->model, animnum, (flags & CHRANIMFLAG_FLIP) != 0, startframe, speed, arg5);
if (endframe >= 0) {
modelSetAnimEndFrame(chr->model, endframe);
}
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
}
void chrBeginDead(struct chrdata *chr)
{
if (chr->actiontype != ACT_DEAD) {
chrStopFiring(chr);
if (chr->cover != -1) {
coverSetInUse(chr->cover, false);
chr->cover = -1;
}
chr->actiontype = ACT_DEAD;
chr->act_dead.fadetimer = chr->aibot ? 0 : -1;
chr->act_dead.allowfade = false;
chr->act_dead.allowreap = false;
chr->act_dead.reaptimer = 0;
chr->act_dead.notifychrindex = 0;
chr->sleep = 0;
if (chr->race == RACE_DRCAROLL) {
chr->drcarollimage_left = DRCAROLLIMAGE_STATIC;
chr->drcarollimage_right = DRCAROLLIMAGE_STATIC;
}
}
}
void func0f031254(struct chrdata *chr)
{
struct model *model = chr->model;
struct animfloats *floats = chr->act_attack.animfloats;
if (chr->act_attack.entitytype & ENTITYTYPE_AIMONLY) {
if (floats->unk20 >= 0 && floats->unk20 < floats->unk18) {
modelSetAnimEndFrame(model, floats->unk20);
} else {
modelSetAnimEndFrame(model, floats->unk18);
}
} else if (chr->act_attack.unk036) {
if (floats->unk20 >= 0) {
modelSetAnimEndFrame(model, floats->unk20);
} else {
modelSetAnimEndFrame(model, floats->unk18);
}
} else {
if (floats->unk20 >= 0) {
modelSetAnimEndFrame(model, floats->unk20);
} else if (floats->unk14 >= 0) {
modelSetAnimEndFrame(model, floats->unk14);
} else {
modelSetAnimEndFrame(model, -1);
}
}
}
GLOBAL_ASM(
glabel func0f031384
.late_rodata
glabel var7f1a8d10
.word 0x40c907a9
glabel var7f1a8d14
.word 0x40a30028
glabel var7f1a8d18
.word 0x40a30028
.text
/* f031384: 27bdff70 */ addiu $sp,$sp,-144
/* f031388: afbf002c */ sw $ra,0x2c($sp)
/* f03138c: afb30028 */ sw $s3,0x28($sp)
/* f031390: afb20024 */ sw $s2,0x24($sp)
/* f031394: afb10020 */ sw $s1,0x20($sp)
/* f031398: afb0001c */ sw $s0,0x1c($sp)
/* f03139c: afa60098 */ sw $a2,0x98($sp)
/* f0313a0: afa7009c */ sw $a3,0x9c($sp)
/* f0313a4: 8c8e0020 */ lw $t6,0x20($a0)
/* f0313a8: 3c188007 */ lui $t8,%hi(var80068064)
/* f0313ac: afa00070 */ sw $zero,0x70($sp)
/* f0313b0: 27188064 */ addiu $t8,$t8,%lo(var80068064)
/* f0313b4: afae008c */ sw $t6,0x8c($sp)
/* f0313b8: 8f0a0004 */ lw $t2,0x4($t8)
/* f0313bc: 8f010000 */ lw $at,0x0($t8)
/* f0313c0: 27af0064 */ addiu $t7,$sp,0x64
/* f0313c4: 3c0c8007 */ lui $t4,%hi(var8006806c)
/* f0313c8: 258c806c */ addiu $t4,$t4,%lo(var8006806c)
/* f0313cc: adea0004 */ sw $t2,0x4($t7)
/* f0313d0: ade10000 */ sw $at,0x0($t7)
/* f0313d4: 8d890004 */ lw $t1,0x4($t4)
/* f0313d8: 8d810000 */ lw $at,0x0($t4)
/* f0313dc: 27ab005c */ addiu $t3,$sp,0x5c
/* f0313e0: 00808825 */ or $s1,$a0,$zero
/* f0313e4: 00a09025 */ or $s2,$a1,$zero
/* f0313e8: 24130001 */ addiu $s3,$zero,0x1
/* f0313ec: ad690004 */ sw $t1,0x4($t3)
/* f0313f0: 10800003 */ beqz $a0,.L0f031400
/* f0313f4: ad610000 */ sw $at,0x0($t3)
/* f0313f8: 10000002 */ b .L0f031404
/* f0313fc: 908202fe */ lbu $v0,0x2fe($a0)
.L0f031400:
/* f031400: 00001025 */ or $v0,$zero,$zero
.L0f031404:
/* f031404: 24010002 */ addiu $at,$zero,0x2
/* f031408: 10410124 */ beq $v0,$at,.L0f03189c
/* f03140c: a3a00053 */ sb $zero,0x53($sp)
/* f031410: 24010003 */ addiu $at,$zero,0x3
/* f031414: 10410121 */ beq $v0,$at,.L0f03189c
/* f031418: 24010004 */ addiu $at,$zero,0x4
/* f03141c: 1041011f */ beq $v0,$at,.L0f03189c
/* f031420: 24190008 */ addiu $t9,$zero,0x8
/* f031424: 3c0f8006 */ lui $t7,%hi(var80067e50)
/* f031428: 25ef7e50 */ addiu $t7,$t7,%lo(var80067e50)
/* f03142c: 164f0023 */ bne $s2,$t7,.L0f0314bc
/* f031430: a2390007 */ sb $t9,0x7($s1)
/* f031434: 24180001 */ addiu $t8,$zero,0x1
/* f031438: a3b80053 */ sb $t8,0x53($sp)
/* f03143c: 0c00744f */ jal modelGetAnimNum
/* f031440: 8e240020 */ lw $a0,0x20($s1)
/* f031444: 2401026a */ addiu $at,$zero,0x26a
/* f031448: 10410019 */ beq $v0,$at,.L0f0314b0
/* f03144c: 3c0e8006 */ lui $t6,%hi(var80067d70)
/* f031450: 3c0a8006 */ lui $t2,%hi(var80067d28)
/* f031454: 254a7d28 */ addiu $t2,$t2,%lo(var80067d28)
/* f031458: 3c063f4c */ lui $a2,0x3f4c
/* f03145c: afaa0080 */ sw $t2,0x80($sp)
/* f031460: 34c6cccd */ ori $a2,$a2,0xcccd
/* f031464: 02202025 */ or $a0,$s1,$zero
/* f031468: 0fc0b857 */ jal chrGetRangedSpeed
/* f03146c: 3c053f00 */ lui $a1,0x3f00
/* f031470: 3c014180 */ lui $at,0x4180
/* f031474: 44812000 */ mtc1 $at,$f4
/* f031478: 3c058006 */ lui $a1,%hi(var80067d28)
/* f03147c: 3c078006 */ lui $a3,%hi(var80067d28+0x10)
/* f031480: 8ce77d38 */ lw $a3,%lo(var80067d28+0x10)($a3)
/* f031484: 84a57d28 */ lh $a1,%lo(var80067d28)($a1)
/* f031488: 8fa4008c */ lw $a0,0x8c($sp)
/* f03148c: 8fa60098 */ lw $a2,0x98($sp)
/* f031490: e7a00010 */ swc1 $f0,0x10($sp)
/* f031494: 0c007733 */ jal modelSetAnimation
/* f031498: e7a40014 */ swc1 $f4,0x14($sp)
/* f03149c: 8fa4008c */ lw $a0,0x8c($sp)
/* f0314a0: 0c007787 */ jal modelSetAnimEndFrame
/* f0314a4: 3c05436c */ lui $a1,0x436c
/* f0314a8: 10000038 */ b .L0f03158c
/* f0314ac: 00008025 */ or $s0,$zero,$zero
.L0f0314b0:
/* f0314b0: 25ce7d70 */ addiu $t6,$t6,%lo(var80067d70)
/* f0314b4: 10000034 */ b .L0f031588
/* f0314b8: afae0080 */ sw $t6,0x80($sp)
.L0f0314bc:
/* f0314bc: 02202025 */ or $a0,$s1,$zero
/* f0314c0: 8fa500a0 */ lw $a1,0xa0($sp)
/* f0314c4: 0fc0b8b4 */ jal func0f02e2d0
/* f0314c8: 8fa600a4 */ lw $a2,0xa4($sp)
/* f0314cc: 8fad0098 */ lw $t5,0x98($sp)
/* f0314d0: 3c017f1b */ lui $at,%hi(var7f1a8d10)
/* f0314d4: 11a0000e */ beqz $t5,.L0f031510
/* f0314d8: 00000000 */ nop
/* f0314dc: 3c017f1b */ lui $at,%hi(var7f1a8d14)
/* f0314e0: c4268d10 */ lwc1 $f6,%lo(var7f1a8d10)($at)
/* f0314e4: 3c017f1b */ lui $at,%hi(var7f1a8d18)
/* f0314e8: c42a8d14 */ lwc1 $f10,%lo(var7f1a8d14)($at)
/* f0314ec: 46003201 */ sub.s $f8,$f6,$f0
/* f0314f0: 3c013f00 */ lui $at,0x3f00
/* f0314f4: 44819000 */ mtc1 $at,$f18
/* f0314f8: 460a4402 */ mul.s $f16,$f8,$f10
/* f0314fc: 46128100 */ add.s $f4,$f16,$f18
/* f031500: 4600218d */ trunc.w.s $f6,$f4
/* f031504: 44103000 */ mfc1 $s0,$f6
/* f031508: 10000009 */ b .L0f031530
/* f03150c: 00000000 */ nop
.L0f031510:
/* f031510: c4288d18 */ lwc1 $f8,%lo(var7f1a8d18)($at)
/* f031514: 3c013f00 */ lui $at,0x3f00
/* f031518: 44818000 */ mtc1 $at,$f16
/* f03151c: 46080282 */ mul.s $f10,$f0,$f8
/* f031520: 46105480 */ add.s $f18,$f10,$f16
/* f031524: 4600910d */ trunc.w.s $f4,$f18
/* f031528: 44102000 */ mfc1 $s0,$f4
/* f03152c: 00000000 */ nop
.L0f031530:
/* f031530: 06000003 */ bltz $s0,.L0f031540
/* f031534: 2a010020 */ slti $at,$s0,0x20
/* f031538: 14200002 */ bnez $at,.L0f031544
/* f03153c: 00000000 */ nop
.L0f031540:
/* f031540: 00008025 */ or $s0,$zero,$zero
.L0f031544:
/* f031544: 0c004b70 */ jal random
/* f031548: 00000000 */ nop
/* f03154c: 00104880 */ sll $t1,$s0,0x2
/* f031550: 0249c821 */ addu $t9,$s2,$t1
/* f031554: 8f230000 */ lw $v1,0x0($t9)
/* f031558: 8c6f0004 */ lw $t7,0x4($v1)
/* f03155c: 8c780000 */ lw $t8,0x0($v1)
/* f031560: 004f001b */ divu $zero,$v0,$t7
/* f031564: 00002010 */ mfhi $a0
/* f031568: 000450c0 */ sll $t2,$a0,0x3
/* f03156c: 01445021 */ addu $t2,$t2,$a0
/* f031570: 000a50c0 */ sll $t2,$t2,0x3
/* f031574: 030a7021 */ addu $t6,$t8,$t2
/* f031578: afae0080 */ sw $t6,0x80($sp)
/* f03157c: 15e00002 */ bnez $t7,.L0f031588
/* f031580: 00000000 */ nop
/* f031584: 0007000d */ break 0x7
.L0f031588:
/* f031588: 00008025 */ or $s0,$zero,$zero
.L0f03158c:
/* f03158c: 00003825 */ or $a3,$zero,$zero
/* f031590: 8fa8009c */ lw $t0,0x9c($sp)
/* f031594: 24120001 */ addiu $s2,$zero,0x1
.L0f031598:
/* f031598: 8d0d0000 */ lw $t5,0x0($t0)
/* f03159c: 02202025 */ or $a0,$s1,$zero
/* f0315a0: 02002825 */ or $a1,$s0,$zero
/* f0315a4: 51a00043 */ beqzl $t5,.L0f0316b4
/* f0315a8: 26100001 */ addiu $s0,$s0,0x1
/* f0315ac: afa70044 */ sw $a3,0x44($sp)
/* f0315b0: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f0315b4: afa80040 */ sw $t0,0x40($sp)
/* f0315b8: 8fa70044 */ lw $a3,0x44($sp)
/* f0315bc: 8fa80040 */ lw $t0,0x40($sp)
/* f0315c0: 14400006 */ bnez $v0,.L0f0315dc
/* f0315c4: 00403025 */ or $a2,$v0,$zero
/* f0315c8: 02202025 */ or $a0,$s1,$zero
/* f0315cc: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f0315d0: 3c054180 */ lui $a1,0x4180
/* f0315d4: 100000b2 */ b .L0f0318a0
/* f0315d8: 8fbf002c */ lw $ra,0x2c($sp)
.L0f0315dc:
/* f0315dc: 8cc30004 */ lw $v1,0x4($a2)
/* f0315e0: 9064005c */ lbu $a0,0x5c($v1)
/* f0315e4: 9065005f */ lbu $a1,0x5f($v1)
/* f0315e8: afa80040 */ sw $t0,0x40($sp)
/* f0315ec: afa70044 */ sw $a3,0x44($sp)
/* f0315f0: 0fc2c7ba */ jal weaponGetNumTicksPerShot
/* f0315f4: afa30078 */ sw $v1,0x78($sp)
/* f0315f8: 8fa30078 */ lw $v1,0x78($sp)
/* f0315fc: 8fa70044 */ lw $a3,0x44($sp)
/* f031600: 1c400009 */ bgtz $v0,.L0f031628
/* f031604: 8fa80040 */ lw $t0,0x40($sp)
/* f031608: 03a75821 */ addu $t3,$sp,$a3
/* f03160c: ad720064 */ sw $s2,0x64($t3)
/* f031610: 9062005c */ lbu $v0,0x5c($v1)
/* f031614: 2401001d */ addiu $at,$zero,0x1d
/* f031618: 54410007 */ bnel $v0,$at,.L0f031638
/* f03161c: 24010018 */ addiu $at,$zero,0x18
/* f031620: 10000004 */ b .L0f031634
/* f031624: 00009825 */ or $s3,$zero,$zero
.L0f031628:
/* f031628: afb20070 */ sw $s2,0x70($sp)
/* f03162c: 00009825 */ or $s3,$zero,$zero
/* f031630: 9062005c */ lbu $v0,0x5c($v1)
.L0f031634:
/* f031634: 24010018 */ addiu $at,$zero,0x18
.L0f031638:
/* f031638: 1041001c */ beq $v0,$at,.L0f0316ac
/* f03163c: 03a76021 */ addu $t4,$sp,$a3
/* f031640: 24010034 */ addiu $at,$zero,0x34
/* f031644: 10410019 */ beq $v0,$at,.L0f0316ac
/* f031648: 24010019 */ addiu $at,$zero,0x19
/* f03164c: 10410017 */ beq $v0,$at,.L0f0316ac
/* f031650: 24010017 */ addiu $at,$zero,0x17
/* f031654: 10410015 */ beq $v0,$at,.L0f0316ac
/* f031658: 3c04800a */ lui $a0,%hi(g_Vars+0x318)
/* f03165c: 8c84a2d8 */ lw $a0,%lo(g_Vars+0x318)($a0)
/* f031660: 24010008 */ addiu $at,$zero,0x8
/* f031664: 14800009 */ bnez $a0,.L0f03168c
/* f031668: 00000000 */ nop
/* f03166c: 14410007 */ bne $v0,$at,.L0f03168c
/* f031670: 00000000 */ nop
/* f031674: 82230006 */ lb $v1,0x6($s1)
/* f031678: 24010028 */ addiu $at,$zero,0x28
/* f03167c: 10610003 */ beq $v1,$at,.L0f03168c
/* f031680: 24010013 */ addiu $at,$zero,0x13
/* f031684: 5461000a */ bnel $v1,$at,.L0f0316b0
/* f031688: ad92005c */ sw $s2,0x5c($t4)
.L0f03168c:
/* f03168c: 14800003 */ bnez $a0,.L0f03169c
/* f031690: 24010009 */ addiu $at,$zero,0x9
/* f031694: 50410006 */ beql $v0,$at,.L0f0316b0
/* f031698: ad92005c */ sw $s2,0x5c($t4)
.L0f03169c:
/* f03169c: 14800004 */ bnez $a0,.L0f0316b0
/* f0316a0: 24010013 */ addiu $at,$zero,0x13
/* f0316a4: 54410003 */ bnel $v0,$at,.L0f0316b4
/* f0316a8: 26100001 */ addiu $s0,$s0,0x1
.L0f0316ac:
/* f0316ac: ad92005c */ sw $s2,0x5c($t4)
.L0f0316b0:
/* f0316b0: 26100001 */ addiu $s0,$s0,0x1
.L0f0316b4:
/* f0316b4: 24010002 */ addiu $at,$zero,0x2
/* f0316b8: 24e70004 */ addiu $a3,$a3,4
/* f0316bc: 1601ffb6 */ bne $s0,$at,.L0f031598
/* f0316c0: 25080004 */ addiu $t0,$t0,0x4
/* f0316c4: a2320030 */ sb $s2,0x30($s1)
/* f0316c8: 8fa90080 */ lw $t1,0x80($sp)
/* f0316cc: a2200031 */ sb $zero,0x31($s1)
/* f0316d0: 0c004b70 */ jal random
/* f0316d4: ae29002c */ sw $t1,0x2c($s1)
/* f0316d8: 30590001 */ andi $t9,$v0,0x1
/* f0316dc: a2390032 */ sb $t9,0x32($s1)
/* f0316e0: 8faf009c */ lw $t7,0x9c($sp)
/* f0316e4: 8df80004 */ lw $t8,0x4($t7)
/* f0316e8: a2380039 */ sb $t8,0x39($s1)
/* f0316ec: 8faa009c */ lw $t2,0x9c($sp)
/* f0316f0: 8d4e0000 */ lw $t6,0x0($t2)
/* f0316f4: a22e0038 */ sb $t6,0x38($s1)
/* f0316f8: 8fad0068 */ lw $t5,0x68($sp)
/* f0316fc: a22d003b */ sb $t5,0x3b($s1)
/* f031700: 8fab0064 */ lw $t3,0x64($sp)
/* f031704: a22b003a */ sb $t3,0x3a($s1)
/* f031708: 8fac0060 */ lw $t4,0x60($sp)
/* f03170c: a22c003d */ sb $t4,0x3d($s1)
/* f031710: 8fa9005c */ lw $t1,0x5c($sp)
/* f031714: a2330036 */ sb $s3,0x36($s1)
/* f031718: a229003c */ sb $t1,0x3c($s1)
/* f03171c: 8fb90070 */ lw $t9,0x70($sp)
/* f031720: ae200040 */ sw $zero,0x40($s1)
/* f031724: a2200033 */ sb $zero,0x33($s1)
/* f031728: a2390037 */ sb $t9,0x37($s1)
/* f03172c: 8faf0060 */ lw $t7,0x60($sp)
/* f031730: 8fb8005c */ lw $t8,0x5c($sp)
/* f031734: 8faa0060 */ lw $t2,0x60($sp)
/* f031738: 15e00003 */ bnez $t7,.L0f031748
/* f03173c: 00000000 */ nop
/* f031740: 13000009 */ beqz $t8,.L0f031768
/* f031744: 8fab00a0 */ lw $t3,0xa0($sp)
.L0f031748:
/* f031748: 11400005 */ beqz $t2,.L0f031760
/* f03174c: 8fae005c */ lw $t6,0x5c($sp)
/* f031750: 11c00003 */ beqz $t6,.L0f031760
/* f031754: 240d0002 */ addiu $t5,$zero,0x2
/* f031758: 1000001b */ b .L0f0317c8
/* f03175c: a22d0034 */ sb $t5,0x34($s1)
.L0f031760:
/* f031760: 10000019 */ b .L0f0317c8
/* f031764: a2320034 */ sb $s2,0x34($s1)
.L0f031768:
/* f031768: 316c0080 */ andi $t4,$t3,0x80
/* f03176c: 11800003 */ beqz $t4,.L0f03177c
/* f031770: 00000000 */ nop
/* f031774: 10000006 */ b .L0f031790
/* f031778: a2320034 */ sb $s2,0x34($s1)
.L0f03177c:
/* f03177c: 0c004b70 */ jal random
/* f031780: 00000000 */ nop
/* f031784: 30490003 */ andi $t1,$v0,0x3
/* f031788: 25390002 */ addiu $t9,$t1,0x2
/* f03178c: a2390034 */ sb $t9,0x34($s1)
.L0f031790:
/* f031790: 8faf009c */ lw $t7,0x9c($sp)
/* f031794: 8df80000 */ lw $t8,0x0($t7)
/* f031798: 5300000c */ beqzl $t8,.L0f0317cc
/* f03179c: 8fa900a0 */ lw $t1,0xa0($sp)
/* f0317a0: 8dea0004 */ lw $t2,0x4($t7)
/* f0317a4: 51400009 */ beqzl $t2,.L0f0317cc
/* f0317a8: 8fa900a0 */ lw $t1,0xa0($sp)
/* f0317ac: 0c004b70 */ jal random
/* f0317b0: 00000000 */ nop
/* f0317b4: 822e0034 */ lb $t6,0x34($s1)
/* f0317b8: 304d0003 */ andi $t5,$v0,0x3
/* f0317bc: 01cd5821 */ addu $t3,$t6,$t5
/* f0317c0: 256c0002 */ addiu $t4,$t3,0x2
/* f0317c4: a22c0034 */ sb $t4,0x34($s1)
.L0f0317c8:
/* f0317c8: 8fa900a0 */ lw $t1,0xa0($sp)
.L0f0317cc:
/* f0317cc: 8e2a0018 */ lw $t2,0x18($s1)
/* f0317d0: 3c017fff */ lui $at,0x7fff
/* f0317d4: ae29004c */ sw $t1,0x4c($s1)
/* f0317d8: 8fb900a4 */ lw $t9,0xa4($sp)
/* f0317dc: 3421ffff */ ori $at,$at,0xffff
/* f0317e0: 01417024 */ and $t6,$t2,$at
/* f0317e4: ae390050 */ sw $t9,0x50($s1)
/* f0317e8: 8fb800a8 */ lw $t8,0xa8($sp)
/* f0317ec: ae200058 */ sw $zero,0x58($s1)
/* f0317f0: ae200044 */ sw $zero,0x44($s1)
/* f0317f4: ae200048 */ sw $zero,0x48($s1)
/* f0317f8: ae380054 */ sw $t8,0x54($s1)
/* f0317fc: 8faf0098 */ lw $t7,0x98($sp)
/* f031800: a2200008 */ sb $zero,0x8($s1)
/* f031804: ae2e0018 */ sw $t6,0x18($s1)
/* f031808: a22f003e */ sb $t7,0x3e($s1)
/* f03180c: 93ad0053 */ lbu $t5,0x53($sp)
/* f031810: 55a00023 */ bnezl $t5,.L0f0318a0
/* f031814: 8fbf002c */ lw $ra,0x2c($sp)
/* f031818: 8e2b02d4 */ lw $t3,0x2d4($s1)
/* f03181c: 55600020 */ bnezl $t3,.L0f0318a0
/* f031820: 8fbf002c */ lw $ra,0x2c($sp)
/* f031824: 0c0076e5 */ jal modelIsAnimMerging
/* f031828: 8e240020 */ lw $a0,0x20($s1)
/* f03182c: 10400006 */ beqz $v0,.L0f031848
/* f031830: 02202025 */ or $a0,$s1,$zero
/* f031834: 8e2c0014 */ lw $t4,0x14($s1)
/* f031838: 3c010020 */ lui $at,0x20
/* f03183c: 01814825 */ or $t1,$t4,$at
/* f031840: 10000016 */ b .L0f03189c
/* f031844: ae290014 */ sw $t1,0x14($s1)
.L0f031848:
/* f031848: 3c063f4c */ lui $a2,0x3f4c
/* f03184c: 34c6cccd */ ori $a2,$a2,0xcccd
/* f031850: 0fc0b857 */ jal chrGetRangedSpeed
/* f031854: 3c053f00 */ lui $a1,0x3f00
/* f031858: 8fb90080 */ lw $t9,0x80($sp)
/* f03185c: 3c014180 */ lui $at,0x4180
/* f031860: 44813000 */ mtc1 $at,$f6
/* f031864: 87250000 */ lh $a1,0x0($t9)
/* f031868: 8f270010 */ lw $a3,0x10($t9)
/* f03186c: e7a00010 */ swc1 $f0,0x10($sp)
/* f031870: 8fa4008c */ lw $a0,0x8c($sp)
/* f031874: 8fa60098 */ lw $a2,0x98($sp)
/* f031878: 0c007733 */ jal modelSetAnimation
/* f03187c: e7a60014 */ swc1 $f6,0x14($sp)
/* f031880: 0fc0c495 */ jal func0f031254
/* f031884: 02202025 */ or $a0,$s1,$zero
/* f031888: 8e380014 */ lw $t8,0x14($s1)
/* f03188c: 3c01ffdf */ lui $at,0xffdf
/* f031890: 3421ffff */ ori $at,$at,0xffff
/* f031894: 03017824 */ and $t7,$t8,$at
/* f031898: ae2f0014 */ sw $t7,0x14($s1)
.L0f03189c:
/* f03189c: 8fbf002c */ lw $ra,0x2c($sp)
.L0f0318a0:
/* f0318a0: 8fb0001c */ lw $s0,0x1c($sp)
/* f0318a4: 8fb10020 */ lw $s1,0x20($sp)
/* f0318a8: 8fb20024 */ lw $s2,0x24($sp)
/* f0318ac: 8fb30028 */ lw $s3,0x28($sp)
/* f0318b0: 03e00008 */ jr $ra
/* f0318b4: 27bd0090 */ addiu $sp,$sp,0x90
);
void chrAttackAmount(struct chrdata *chr, u32 entitytype, u32 entityid, u32 arg3)
{
u32 stack;
struct prop *prop = chrGetEquippedWeaponProp(chr, 0);
struct var80065750 **things = NULL;
bool firing[] = {false, false};
u32 race = CHRRACE(chr);
if (prop) {
things = weaponIsOneHanded(prop) ? var800662d8[race] : var80065ae0[race];
firing[1] = false;
firing[0] = true;
}
func0f031384(chr, things, false, firing, entitytype, entityid, 0);
chr->actiontype = ACT_ATTACKAMOUNT;
chr->act_attackamount.unk033 = 0;
chr->act_attackamount.unk034 = arg3;
chr->act_attackamount.unk037 = 0;
}
#if PAL
s32 g_DrCarollDyingTimer = 8;
#else
s32 g_DrCarollDyingTimer = 10;
#endif
u8 var80068080 = 50;
/**
* Given a perfectly alive chr, make them begin the process of dying or being
* knocked unconscious.
*
* This function handles:
* - Eyespy destruction
* - Transitioning to ACT_DIE
* - Choosing and applying death animations
* - Updating kill statistics
* - Dropping items
*/
void chrBeginDeath(struct chrdata *chr, struct coord *dir, f32 relangle, s32 ibh, struct shorthand *hand, bool knockout, s32 aplayernum)
{
bool overridden = false;
bool instant;
s32 index = -1;
s32 animnum;
u32 stack1;
struct prop *prop = chr->prop;
struct model *model = chr->model;
u32 stack2;
s32 race = CHRRACE(chr);
bool wasknockedout = false;
s32 prevplayernum;
s32 i;
s32 buddyplayernum;
struct eyespy *eyespy;
s32 objectivenum;
f32 mult1;
f32 mult2;
f32 mult3;
// If chr was previously knocked out, they are now dead so decrease KO counter
if (chr->actiontype == ACT_DRUGGEDCOMINGUP
|| chr->actiontype == ACT_DRUGGEDDROP
|| chr->actiontype == ACT_DRUGGEDKO) {
#if VERSION >= VERSION_NTSC_1_0
if (chr->actiontype == ACT_DRUGGEDKO) {
wasknockedout = true;
}
#else
wasknockedout = true;
#endif
mpstatsDecrementTotalKnockoutCount();
}
// Handle eyespy then return early
if (race == RACE_EYESPY) {
prevplayernum = g_Vars.currentplayernum;
buddyplayernum = -1;
eyespy = chrToEyespy(chr);
objectivenum = -1;
// Figure out which playernum has the eyespy that's being destroyed,
// and the buddy's playernum if applicable. Note that the player count
// can only be 1 or 2 here.
for (i = 0; i < PLAYERCOUNT(); i++) {
if (eyespy == g_Vars.players[i]->eyespy) {
setCurrentPlayerNum(i);
} else {
buddyplayernum = i;
}
}
if (g_Vars.currentplayer->eyespy) {
// Stop using eyespy if active
if (g_Vars.currentplayer->eyespy->active) {
g_Vars.currentplayer->eyespy->active = false;
g_Vars.currentplayer->devicesactive &= ~DEVICE_EYESPY;
}
// Destroy the eyespy
chr->hidden |= CHRHFLAG_REAPED;
explosionCreateSimple(g_Vars.currentplayer->eyespy->prop,
&g_Vars.currentplayer->eyespy->prop->pos,
g_Vars.currentplayer->eyespy->prop->rooms, EXPLOSIONTYPE_2, 0);
invRemoveItemByNum(WEAPON_EYESPY);
func0f0926bc(g_Vars.currentplayer->eyespy->prop, 1, 0xffff);
g_Vars.currentplayer->eyespy = NULL;
setCurrentPlayerNum(prevplayernum);
// For Investigation and G5 Building, set a stage flag to show that
// the eyespy is destroyed. The scripting in those stages checks for
// this flag and fails the objective if set.
switch (stageGetIndex(g_Vars.stagenum)) {
case STAGEINDEX_INVESTIGATION:
objectivenum = 0;
break;
case STAGEINDEX_G5BUILDING:
if (lvGetDifficulty() == DIFF_A) {
objectivenum = 2;
} else if (lvGetDifficulty() == DIFF_SA) {
objectivenum = 2;
} else {
objectivenum = 2;
}
break;
}
// But don't set the flag if the coop buddy still has an eyespy
if (objectivenum >= 0 && buddyplayernum >= 0) {
setCurrentPlayerNum(buddyplayernum);
if (g_Vars.currentplayer->eyespy) {
objectivenum = -1;
}
setCurrentPlayerNum(prevplayernum);
}
if (objectivenum >= 0 && objectiveCheck(objectivenum) != OBJECTIVE_COMPLETE) {
g_StageFlags |= STAGEFLAG_EYESPY_DESTROYED;
}
}
setCurrentPlayerNum(prevplayernum);
return;
}
// instant = whether to merge into death animation or switch to it instantly
instant = chr->actiontype == ACT_ARGH && chr->act_argh.lvframe60 == g_Vars.lvframe60;
for (i = 0; g_AnimTablesByRace[race][i].ibh != -1; i++) {
if (g_AnimTablesByRace[race][i].ibh == ibh) {
index = i;
break;
}
}
// Set up chr's new action
chr->blurdrugamount = 0;
chrStopFiring(chr);
chrUncloak(chr, true);
#if VERSION >= VERSION_NTSC_1_0
chr->chrflags &= ~CHRCFLAG_HIDDEN;
#endif
chr->actiontype = (knockout == true ? ACT_DRUGGEDDROP : ACT_DIE);
chr->act_die.notifychrindex = 0;
chr->act_die.timeextra = 0;
chr->act_die.drcarollimagedelay = PALDOWN(45);
chr->act_die.thudframe1 = -1;
chr->act_die.thudframe2 = -1;
if (chr->race == RACE_DRCAROLL) {
chr->drcarollimage_left = (s32)((random() % 400) * 0.01f) + 1;
chr->drcarollimage_right = (s32)((random() % 400) * 0.01f) + 1;
}
chr->sleep = 0;
// Handle robots and Dr Caroll then return early
if (race == RACE_ROBOT || race == RACE_DRCAROLL) {
mult1 = handGetStrength(hand) * 0.5f;
if (mult1 <= 0) {
mult1 = 3;
}
if (mult1 != 0.0f) {
chr->elapseextra = 0;
chr->timeextra = mult1 * 15;
chr->extraspeed.x = dir->x * mult1;
chr->extraspeed.y = dir->y * mult1;
chr->extraspeed.z = dir->z * mult1;
}
if (race == RACE_DRCAROLL) {
g_DrCarollDyingTimer = 0;
chr->soundtimer = 0;
chr->voicebox = VOICEBOX_MALE1;
modelSetAnimation(chr->model, 0x164, false, 0, 0.5f, 16);
}
return;
}
// Handle humans and Skedar
if (race == RACE_HUMAN) {
animnum = modelGetAnimNum(chr->model);
// Chrs in lying-down sniping poses don't use standard death animations
if (animnum == ANIM_SNIPING_0269
|| animnum == ANIM_SNIPING_026B
|| animnum == ANIM_SNIPING_026A) {
modelSetAnimation(chr->model, ANIM_SNIPING_DIE, false, 0, 0.5f, 16);
} else {
// Consider making the chr do an animation where they slump against
// a wall or object which is behind them.
if ((relangle < 1.5705462694168f || relangle > 4.7116389274597f)
&& random() % 20 == 0
&& chr->specialdie == SPECIALDIE_NONE) {
f32 angle1;
f32 angle2 = chrGetInverseTheta(chr);
f32 fval1;
f32 fval2;
angle1 = angle2 + 3.3155977725983f;
angle2 += 2.966587305069f;
if (angle1 >= M_BADTAU) {
angle1 -= M_BADTAU;
}
if (angle2 >= M_BADTAU) {
angle2 -= M_BADTAU;
}
fval1 = func0f02e684(prop, angle1, 150);
fval2 = func0f02e684(prop, angle2, 150);
if (fval1 < 150 && fval2 < 150
&& fval1 - fval2 < 10 && fval1 - fval2 > -10
&& !wasknockedout) {
struct animtablerow *row = &g_AnimTableHumanSlumped[random() % 4];
u32 stack3;
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, row->endframe);
}
chr->chrwidth = 10;
chr->chrflags &= ~CHRCFLAG_HAS_SPECIAL_DEATH_ANIMATION;
overridden = true;
}
}
// Consider making the chr do a fall forward animation.
// The player must be behind the chr for it to happen.
if (relangle > 2.3558194637299f && relangle < 3.9263656139374f
&& random() % 5 < 2
&& chr->specialdie == SPECIALDIE_NONE) {
struct animtablerow *row;
struct animtablerow rows[] = {
{ 0x005b, 0, -1, 0.6, 0, 27, -1 },
{ 0x0255, 0, -1, 0.5, 0, 25, -1 },
};
bool flip;
overridden = true;
if (ibh == IBH_LBICEP || ibh == IBH_RBICEP) {
row = &rows[0];
if (ibh == IBH_LBICEP) {
flip = true;
} else {
flip = false;
}
} else {
row = &rows[1];
flip = random() % 2;
}
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
modelSetAnimationWithMerge(model, row->animnum, flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, chrGetRangedArghSpeed(chr, row->endframe, 8));
} else {
modelSetAnimEndFrame(model, chrGetRangedArghSpeed(chr, animGetNumFrames(row->animnum) - 1, 8));
}
chr->chrflags &= ~CHRCFLAG_HAS_SPECIAL_DEATH_ANIMATION;
}
if (!overridden && index >= 0) {
// Handle specialdie animations or choose a random one if not
// using specialdie
if (g_AnimTablesByRace[race][index].deathanims
&& g_AnimTablesByRace[race][index].deathanimcount > 0
&& !wasknockedout) {
struct animtablerow *row;
if (chr->specialdie == SPECIALDIE_NONE) {
s32 tmp = random() % g_AnimTablesByRace[race][index].deathanimcount;
row = &g_AnimTablesByRace[race][index].deathanims[tmp];
} else if (chr->specialdie == SPECIALDIE_ONCHAIR) {
row = &g_SpecialDieAnims[chr->specialdie + random() % 2];
// chr->myspecial is the tag number of the chr's chair
if (chr->myspecial >= 0) {
struct defaultobj *obj = objFindByTagId(chr->myspecial);
obj->flags3 &= ~OBJFLAG3_PUSHABLE;
obj->flags |= OBJFLAG_INVINCIBLE;
// The original source likely didn't have the brackets here,
// but I'm including them to show the logic that's actually
// being used. There is no bug here, as obj and obj->prop
// are always set at this point so these checks are
// unnecessary.
if ((obj && obj->prop && obj->modelnum == MODEL_DD_REDARM)
|| obj->modelnum == MODEL_DD_REDSOFA) {
row = &g_SpecialDieAnims[chr->specialdie - 1];
}
}
} else {
row = &g_SpecialDieAnims[chr->specialdie - 1];
}
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
if (chr->specialdie == SPECIALDIE_NONE) {
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
} else {
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 30, !instant);
}
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, row->endframe);
}
mult2 = handGetStrength(hand);
if (mult2 <= 0 && (chr->chrflags & CHRCFLAG_00008000)) {
mult2 = 6;
}
if (row->unk10 && mult2 > 0) {
chr->act_die.timeextra = mult2 * 15;
chr->act_die.elapseextra = 0;
chr->act_die.extraspeed.x = dir->x * mult2;
chr->act_die.extraspeed.y = dir->y * mult2;
chr->act_die.extraspeed.z = dir->z * mult2;
}
chr->chrflags &= ~CHRCFLAG_HAS_SPECIAL_DEATH_ANIMATION;
}
}
}
} else if (race == RACE_SKEDAR) {
struct animtablerow *row;
if (relangle > 2.3558194637299f && relangle < 3.9263656139374f) {
// Player is behind the Skedar - use specific set of anims
row = &g_AnimTablesByRace[race][1 + (random() % 6)].deathanims[random() % 3];
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, row->endframe);
}
} else {
// Normal Skedar death
if (index >= 0
&& g_AnimTablesByRace[race][index].deathanims != NULL
&& g_AnimTablesByRace[race][index].deathanimcount > 0) {
s32 tmp = random() % g_AnimTablesByRace[race][index].deathanimcount;
row = &g_AnimTablesByRace[race][index].deathanims[tmp];
} else {
row = &g_AnimTablesByRace[race][0].deathanims[0];
}
chr->act_die.thudframe1 = row->thudframe1;
chr->act_die.thudframe2 = row->thudframe2;
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, row->endframe);
}
mult3 = handGetStrength(hand);
if (mult3 <= 0 && (chr->chrflags & CHRCFLAG_00008000)) {
mult3 = 6;
}
if (row->unk10 != 0 && mult3 > 0) {
chr->act_die.timeextra = mult3 * 15;
chr->act_die.elapseextra = 0;
chr->act_die.extraspeed.x = dir->x * mult3;
chr->act_die.extraspeed.y = dir->y * mult3;
chr->act_die.extraspeed.z = dir->z * mult3;
}
}
} else if (race == RACE_DRCAROLL) {
// empty
}
// Handle multiplayer stats and kill count
if (g_Vars.mplayerisrunning) {
mpstatsRecordDeath(aplayernum, mpPlayerGetIndex(chr));
} else if (aplayernum >= 0) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(aplayernum);
mpstatsRecordPlayerKill();
setCurrentPlayerNum(prevplayernum);
}
if (chr->chrflags & CHRCFLAG_KILLCOUNTABLE) {
mpstatsIncrementTotalKillCount();
}
// Drop items
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (chr->weapons_held[0] && (chr->weapons_held[0]->obj->flags & OBJFLAG_00002000) == 0) {
propobjSetDropped(chr->weapons_held[0], DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
}
if (chr->weapons_held[1] && (chr->weapons_held[1]->obj->flags & OBJFLAG_00002000) == 0) {
propobjSetDropped(chr->weapons_held[1], DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
}
chrDropItems(chr);
}
}
void chrBeginArgh(struct chrdata *chr, f32 angle, s32 ibh)
{
bool doneanim = false;
s32 instant;
s32 index = -1;
struct model *model = chr->model;
s32 i;
s32 race = CHRRACE(chr);
s32 animnum = modelGetAnimNum(chr->model);
if (animnum == ANIM_SNIPING_0269
|| animnum == ANIM_SNIPING_026B
|| animnum == ANIM_SNIPING_026A) {
chrFlinchBody(chr);
return;
}
if (race == RACE_EYESPY || chr->aibot) {
return;
}
if (race == RACE_DRCAROLL) {
chr->actiontype = ACT_ARGH;
chr->act_argh.notifychrindex = 0;
chr->act_argh.lvframe60 = g_Vars.lvframe60;
chr->sleep = 0;
modelSetAnimation(chr->model, 0x163, false, 0, 0.5f, 16);
chr->drcarollimage_left = DRCAROLLIMAGE_X;
chr->drcarollimage_right = DRCAROLLIMAGE_X;
return;
}
instant = chr->actiontype == ACT_ARGH && chr->act_argh.lvframe60 == g_Vars.lvframe60;
for (i = 0; g_AnimTablesByRace[race][i].ibh != -1; i++) {
if (g_AnimTablesByRace[race][i].ibh == ibh) {
index = i;
if (chr->ivebeenhit == 0) {
chr->ivebeenhit = ibh;
}
break;
}
}
// If shot in the butt from behind, 2 in 5 chance of doing a special anim
if (race == RACE_HUMAN
&& ibh == IBH_PELVIS
&& angle > 2.3558194637299f
&& angle < 3.9263656139374f
&& random() % 5 < 2) {
struct animtablerow *row;
struct animtablerow rows[] = {
{ 0x013b, 0, -1, 0.5, 0, -1, -1 },
{ 0x013c, 0, -1, 0.5, 0, -1, -1 },
{ 0x013f, 0, -1, 0.5, 0, -1, -1 },
{ 0x0142, 0, -1, 0.5, 0, -1, -1 },
{ 0x0145, 0, -1, 0.5, 0, -1, -1 },
{ 0x0148, 0, -1, 0.5, 0, -1, -1 },
{ 0x0036, 0, -1, 0.5, 0, -1, -1 },
{ 0x0037, 0, -1, 0.5, 0, -1, -1 },
};
chrStopFiring(chr);
chr->actiontype = ACT_ARGH;
chr->act_argh.notifychrindex = 0;
chr->act_argh.lvframe60 = g_Vars.lvframe60;
chr->sleep = 0;
row = &rows[random() % 8];
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, chrGetRangedArghSpeed(chr, row->endframe, 8));
doneanim = true;
} else {
modelSetAnimEndFrame(model, chrGetRangedArghSpeed(chr, animGetNumFrames(row->animnum) - 1, 8));
doneanim = true;
}
}
if (!doneanim
&& index >= 0
&& g_AnimTablesByRace[race][index].injuryanims
&& g_AnimTablesByRace[race][index].injuryanimcount > 0) {
// If shot in a hand that's holding a gun, remap the hit location to the
// forearm because the hand injury animations assume the hand is empty.
struct prop *lgun = chrGetEquippedWeaponProp(chr, HAND_LEFT);
struct prop *rgun = chrGetEquippedWeaponProp(chr, HAND_RIGHT);
s32 rowindex;
struct animtablerow *row;
if (race == RACE_HUMAN) {
if (index == 9 && lgun) { // left hand
index = 10; // left forearm
} else if (index == 12 && rgun) { // right hand
index = 13; // right forearm
}
}
// Select a random animation for this hit location and apply it
rowindex = random() % g_AnimTablesByRace[race][index].injuryanimcount;
row = &g_AnimTablesByRace[race][index].injuryanims[rowindex];
chrStopFiring(chr);
chr->actiontype = ACT_ARGH;
chr->act_argh.notifychrindex = 0;
chr->act_argh.lvframe60 = g_Vars.lvframe60;
chr->sleep = 0;
modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, !instant);
if (row->endframe >= 0) {
modelSetAnimEndFrame(model, chrGetRangedArghSpeed(chr, row->endframe, 8));
} else {
modelSetAnimEndFrame(model, chrGetRangedArghSpeed(chr, animGetNumFrames(row->animnum) - 1, 8));
}
}
}
void chrReactToDamage(struct chrdata *chr, struct coord *vector, f32 angle, s32 ibh, struct shorthand *hand, s32 aplayernum)
{
s32 race = CHRRACE(chr);
bool knockedout = false;
s32 animnum = modelGetAnimNum(chr->model);
#if VERSION >= VERSION_NTSC_1_0
if (chr->actiontype == ACT_DRUGGEDKO)
#else
if (chr->actiontype == ACT_DRUGGEDCOMINGUP
|| chr->actiontype == ACT_DRUGGEDDROP
|| chr->actiontype == ACT_DRUGGEDKO)
#endif
{
knockedout = true;
}
if (race == RACE_EYESPY) {
f32 strength = handGetStrength(hand);
struct eyespy *eyespy = chrToEyespy(chr);
if (eyespy) {
if (strength <= 0) {
strength = 6;
}
strength *= 4;
eyespy->hit = 4;
eyespy->vel.x += vector->x * strength;
eyespy->vel.z += vector->z * strength;
}
}
if (chr->damage >= chr->maxdamage) {
chrBeginDeath(chr, vector, angle, ibh, hand, false, aplayernum);
} else if (animnum == ANIM_SNIPING_0269
|| animnum == ANIM_SNIPING_026B
|| animnum == ANIM_SNIPING_026A) {
chrFlinchBody(chr);
} else if (race == RACE_EYESPY) {
// empty
} else if (race == RACE_DRCAROLL || race == RACE_ROBOT) {
f32 strength = handGetStrength(hand);
if (race == RACE_DRCAROLL) {
strength *= 0.5f;
}
if (strength <= 0) {
strength = 6;
}
if (strength > 0) {
chr->elapseextra = 0;
chr->timeextra = strength * 15;
chr->extraspeed.x = vector->x * strength;
chr->extraspeed.y = vector->y * strength;
chr->extraspeed.z = vector->z * strength;
}
if (race == RACE_DRCAROLL) {
chrBeginArgh(chr, 0, 0);
}
} else if (!knockedout) {
chrBeginArgh(chr, angle, ibh);
}
}
/**
* Launch a chr away from the given pos (for explosions).
*/
void chrYeetFromPos(struct chrdata *chr, struct coord *exppos, f32 force)
{
struct model *model = chr->model;
struct prop *prop = chr->prop;
f32 faceangle;
f32 latangle;
u32 stack1;
s32 angleindex;
u32 stack2;
struct yeetanim *row;
struct coord dist;
u32 stack3;
s32 race = CHRRACE(chr);
f32 speed;
s32 subindex;
f32 angletoexplosion;
if (race != RACE_DRCAROLL && race != RACE_EYESPY && race != RACE_ROBOT) {
faceangle = chrGetInverseTheta(chr);
latangle = atan2f(prop->pos.x - exppos->x, prop->pos.z - exppos->z);
dist.x = prop->pos.x - exppos->x;
dist.y = prop->pos.y - exppos->y;
dist.z = prop->pos.z - exppos->z;
if (dist.f[0] == 0 && dist.f[1] == 0 && dist.f[2] == 0) {
dist.z = 1;
}
speed = 0.625f * force / sqrtf(dist.f[0] * dist.f[0] + dist.f[1] * dist.f[1] + dist.f[2] * dist.f[2]);
angletoexplosion = latangle - faceangle;
dist.x *= speed;
dist.y *= speed;
dist.z *= speed;
chr->fallspeed.x = dist.x;
chr->fallspeed.y = dist.y;
chr->fallspeed.z = dist.z;
if (latangle < faceangle) {
angletoexplosion += M_BADTAU;
}
angleindex = angletoexplosion * 1.2734422683716f + 0.5f;
if (angleindex >= 8) {
angleindex = 0;
}
subindex = random() % g_YeetAnimIndexesByRaceAngle[race][angleindex].count;
if (race == RACE_HUMAN) {
row = &g_YeetAnimsHuman[g_YeetAnimIndexesByRaceAngle[race][angleindex].indexes[subindex]];
} else if (race == RACE_SKEDAR) {
row = &g_YeetAnimsSkedar[g_YeetAnimIndexesByRaceAngle[race][angleindex].indexes[subindex]];
}
chrStopFiring(chr);
chrUncloak(chr, true);
#if VERSION >= VERSION_NTSC_1_0
chr->chrflags &= ~CHRCFLAG_HIDDEN;
#endif
chr->actiontype = ACT_DIE;
chr->act_die.notifychrindex = 0;
chr->act_die.thudframe1 = row->thudframe;
chr->act_die.thudframe2 = -1;
chr->act_die.timeextra = 0;
chr->act_die.drcarollimagedelay = PALDOWN(45);
if (chr->race == RACE_DRCAROLL) {
chr->drcarollimage_left = 1 + (s32)((random() % 400) * 0.01f);
chr->drcarollimage_right = 1 + (s32)((random() % 400) * 0.01f);
}
chr->sleep = 0;
modelSetAnimation(model, row->animnum, row->flip, row->startframe, row->speed, 8);
if (row->endframe >= 0.0f) {
modelSetAnimEndFrame(model, row->endframe);
}
}
}
s32 handGetBlurAmount(struct shorthand *hand)
{
s32 amount = PALDOWN(1000);
if (g_Vars.normmplayerisrunning == false) {
amount = PALDOWN(250);
}
if (hand->weaponnum == WEAPON_TRANQUILIZER) {
amount = PALDOWN(2000);
}
if (hand->weaponnum == WEAPON_BOLT) {
amount = PALDOWN(5000);
}
if (hand->weaponnum == WEAPON_NBOMB) {
amount = PALDOWN(100);
}
return amount;
}
void chrKnockOut(struct chrdata *chr, f32 angle, s32 ibh, struct shorthand *hand)
{
if (chr->actiontype != ACT_DRUGGEDCOMINGUP
&& chr->actiontype != ACT_DRUGGEDDROP
&& chr->actiontype != ACT_DRUGGEDKO) {
#if VERSION >= VERSION_PAL_FINAL
if (mpstatsGetTotalKnockoutCount() < 2) {
chr->chrflags |= CHRCFLAG_KEEPCORPSEKO;
if (mainGetStageNum() == STAGE_VILLA) {
chr->hidden |= CHRHFLAG_ANTINONINTERACTABLE;
}
}
#elif VERSION >= VERSION_NTSC_1_0
if (mpstatsGetTotalKnockoutCount() < 2) {
chr->chrflags |= CHRCFLAG_KEEPCORPSEKO;
}
#endif
mpstatsIncrementTotalKnockoutCount();
chr->actiontype = ACT_DRUGGEDCOMINGUP;
chr->act_druggedcomingup.timer60 = 0;
}
}
/**
* Return true if the chr's current animation would be too awkward to transition
* into an injury animation or if they're already in the PREARGH action state,
* and set dst to the anim frame number where the chr will become available for
* transition to an injury animation.
*
* The attack roll animation is the only one which is too awkward to transition.
*/
bool chrIsAnimPreventingArgh(struct chrdata *chr, f32 *dst)
{
bool result = false;
s32 race = CHRRACE(chr);
if (race == RACE_DRCAROLL || race == RACE_EYESPY || chr->aibot) {
return false;
}
if (race == RACE_HUMAN) {
s32 animnum = modelGetAnimNum(chr->model);
f32 endframe;
if (animnum == ANIM_SNIPING_0269
|| animnum == ANIM_SNIPING_026B
|| animnum == ANIM_SNIPING_026A) {
chrFlinchBody(chr);
} else if (chr->actiontype == ACT_ATTACKROLL
&& modelGetAnimNum(chr->model) == chr->act_attack.animfloats->animnum) {
if (chr->act_attack.unk035) {
if (chr->act_attack.animfloats == &var80067548
|| chr->act_attack.animfloats == &var80067590
|| chr->act_attack.animfloats == &var800675d8
|| chr->act_attack.animfloats == &var80067620) {
endframe = chr->act_attack.animfloats->unk04 - 8;
if (chr->act_attack.animfloats->unk14 < chr->act_attack.animfloats->unk04) {
endframe = chr->act_attack.animfloats->unk14;
}
if (endframe > modelGetCurAnimFrame(chr->model)) {
*dst = endframe;
result = true;
}
}
} else {
endframe = chr->act_attack.animfloats->unk04 - 8;
if (endframe > modelGetCurAnimFrame(chr->model)) {
*dst = endframe;
result = true;
}
}
}
}
if (chr->actiontype == ACT_PREARGH) {
result = true;
}
return result;
}
void chrChoke(struct chrdata *chr, s32 choketype)
{
bool male = false;
s16 soundnum = -1;
s32 race = CHRRACE(chr);
s32 playernum;
s32 allowoverride = false;
static s32 nextindexdrcaroll = 0;
static s32 nextindexmaian = 0;
static s32 nextindexskedar = 0;
static s32 nextindexshock = 0;
static s32 nextindexmale = 0;
static s32 nextindexfemale = 0;
if (race == RACE_EYESPY || race == RACE_ROBOT) {
return;
}
if (chr->prop->type == PROPTYPE_PLAYER) {
playernum = propGetPlayerNum(chr->prop);
if (g_Vars.players[playernum]->isdead) {
return;
}
}
if (g_HeadsAndBodies[chr->headnum].ismale) {
male = true;
}
if (race == RACE_DRCAROLL) {
s16 sounds[] = {
SFX_ARGH_DRCAROLL_0240,
SFX_ARGH_DRCAROLL_024C,
SFX_ARGH_DRCAROLL_0250,
SFX_ARGH_DRCAROLL_0251,
SFX_ARGH_DRCAROLL_0259,
SFX_ARGH_DRCAROLL_025A,
};
if (g_DrCarollDyingTimer > PALDOWN(10)) {
g_DrCarollDyingTimer = 0;
soundnum = sounds[nextindexdrcaroll];
nextindexdrcaroll++;
if (nextindexdrcaroll >= ARRAYCOUNT(sounds)) {
nextindexdrcaroll = 0;
}
}
} else if (chr->headnum == HEAD_THEKING
|| chr->headnum == HEAD_ELVIS
|| chr->headnum == HEAD_MAIAN_S
|| chr->headnum == HEAD_ELVIS_GOGS) {
s16 sounds[] = {
SFX_ARGH_MAIAN_05DF,
SFX_ARGH_MAIAN_05E0,
SFX_ARGH_MAIAN_05E1
};
soundnum = sounds[random() % 3];
nextindexmaian++;
if (nextindexmaian >= ARRAYCOUNT(sounds)) {
nextindexmaian = 0;
}
} else if (race == RACE_SKEDAR) {
if (chr->bodynum == BODY_MINISKEDAR) {
s16 sounds[] = {
SFX_SKEDAR_ROAR_0536,
SFX_SKEDAR_ROAR_0537,
SFX_SKEDAR_ROAR_0538,
SFX_SKEDAR_ROAR_0539,
SFX_SKEDAR_ROAR_053A,
};
soundnum = sounds[random() % 5];
nextindexskedar++;
if (nextindexskedar >= ARRAYCOUNT(sounds)) {
nextindexskedar = 0;
}
} else {
s16 sounds[] = {
SFX_SKEDAR_ROAR_052D,
SFX_SKEDAR_ROAR_052E,
SFX_SKEDAR_ROAR_052F,
};
soundnum = sounds[random() % 3];
nextindexskedar++;
if (nextindexskedar >= ARRAYCOUNT(sounds)) {
nextindexskedar = 0;
}
}
} else if (chr->headnum == HEAD_DDSHOCK) {
s16 sounds[] = {
SFX_ARGH_MALE_0086,
SFX_ARGH_MALE_0088,
SFX_ARGH_MALE_008A,
SFX_ARGH_MALE_008C,
SFX_ARGH_MALE_008E,
SFX_ARGH_MALE_0090,
SFX_ARGH_MALE_0092,
SFX_ARGH_MALE_0094,
SFX_ARGH_MALE_0096,
SFX_ARGH_MALE_0098,
SFX_ARGH_MALE_009A,
SFX_ARGH_MALE_009C,
SFX_ARGH_MALE_009E,
SFX_ARGH_MALE_0087,
};
soundnum = sounds[nextindexshock];
nextindexshock++;
if (nextindexshock >= ARRAYCOUNT(sounds)) {
nextindexshock = 0;
}
allowoverride = true;
} else if (male) {
s16 sounds[] = {
SFX_ARGH_MALE_0086,
SFX_ARGH_MALE_0087,
SFX_ARGH_MALE_0088,
SFX_ARGH_MALE_0089,
SFX_ARGH_MALE_008A,
SFX_ARGH_MALE_008B,
SFX_ARGH_MALE_008C,
SFX_ARGH_MALE_008D,
SFX_ARGH_MALE_008E,
SFX_ARGH_MALE_008F,
SFX_ARGH_MALE_0090,
SFX_ARGH_MALE_0091,
SFX_ARGH_MALE_0092,
SFX_ARGH_MALE_0093,
SFX_ARGH_MALE_0094,
SFX_ARGH_MALE_0095,
SFX_ARGH_MALE_0096,
SFX_ARGH_MALE_0097,
SFX_ARGH_MALE_0098,
SFX_ARGH_MALE_0099,
SFX_ARGH_MALE_009A,
SFX_ARGH_MALE_009B,
SFX_ARGH_MALE_009C,
SFX_ARGH_MALE_009D,
SFX_ARGH_MALE_009E,
};
soundnum = sounds[nextindexmale];
nextindexmale++;
allowoverride = true;
if (nextindexmale >= ARRAYCOUNT(sounds)) {
nextindexmale = 0;
}
} else if (chr->headnum == HEAD_DARK_COMBAT
|| chr->headnum == HEAD_DARK_FROCK
|| chr->headnum == HEAD_DARKAQUA
|| chr->headnum == HEAD_DARK_SNOW) {
s16 sounds[] = {
SFX_ARGH_JO_02AA,
SFX_ARGH_JO_02AB,
SFX_ARGH_JO_02AC,
SFX_ARGH_JO_02AD,
SFX_ARGH_JO_02AE,
SFX_ARGH_JO_02AF,
SFX_ARGH_JO_02B0,
SFX_ARGH_JO_02B1,
SFX_ARGH_JO_02B2,
SFX_ARGH_JO_02B3,
};
soundnum = sounds[random() % 10];
allowoverride = true;
} else {
s16 sounds[] = {
SFX_ARGH_FEMALE_000D,
SFX_ARGH_FEMALE_000E,
SFX_ARGH_FEMALE_000F,
};
soundnum = sounds[nextindexfemale];
nextindexfemale++;
if (nextindexfemale >= ARRAYCOUNT(sounds)) {
nextindexfemale = 0;
}
allowoverride = true;
}
if (allowoverride) {
if (choketype == CHOKETYPE_GURGLE) {
s32 sounds[] = {
SFX_M1_CHOKING,
SFX_GURGLE_05B1,
SFX_GURGLE_05B2,
};
if ((random() % 8) == 0) {
soundnum = sounds[random() % 3];
}
chr->soundgap = 10;
chr->soundtimer = 0;
} else if (choketype == CHOKETYPE_COUGH) {
if (male) {
if ((random() % 2) == 0) {
soundnum = SFX_COUGH_04AF;
} else {
soundnum = SFX_COUGH_04B0;
}
} else {
s32 index = random() % 4;
s32 sounds[] = {
SFX_COUGH_05AB,
SFX_COUGH_05AC,
SFX_COUGH_05AD,
SFX_COUGH_05AE,
};
soundnum = sounds[index];
}
chr->soundgap = 10;
chr->soundtimer = 0;
}
}
if (soundnum >= 0) {
if (chr->prop->type == PROPTYPE_PLAYER) {
if (g_Vars.players[playernum]->chokehandle == NULL) {
sndStart(var80095200, soundnum, &g_Vars.players[playernum]->chokehandle, -1, -1, -1, -1, -1);
}
} else {
func0f0926bc(chr->prop, 9, 0);
if (!func0f092610(chr->prop, 13)) {
func0f0939f8(NULL, chr->prop, soundnum, -1,
-1, 0, 0, 13, NULL, -1, NULL, -1, -1, -1, -1);
}
}
}
}
f32 chrGetShield(struct chrdata *chr)
{
return chr->cshield;
}
void chrSetShield(struct chrdata *chr, f32 amount)
{
if (amount < 0) {
amount = 0;
}
chr->cshield = amount;
if ((chr->hidden & CHRHFLAG_INFINITESHIELD) && chr->cshield < 1) {
chr->cshield = 1;
}
if (chr->prop->type == PROPTYPE_PLAYER) {
s32 playernum = propGetPlayerNum(chr->prop);
if (playernum >= 0) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(playernum);
currentPlayerDisplayHealth();
g_Vars.currentplayerstats->armourcount += amount * 0.125f;
setCurrentPlayerNum(prevplayernum);
}
}
}
bool func0f034080(struct chrdata *chr, struct modelnode *node, struct prop *prop, struct model *model, s32 side, s16 *arg5)
{
if (chrGetShield(chr) > 0) {
if (node && (node->type & 0xff) == MODELNODETYPE_BBOX) {
func0f028f7c(chr->prop, chrGetShield(chr), prop, node, model, side, arg5);
}
return true;
}
return false;
}
/**
* Damage the chr, bypassing any shield.
*
* Used for knife poison, nbomb damage, Investigation radioactivity and Escape gas.
*/
void chrDamageByMisc(struct chrdata *chr, f32 damage, struct coord *vector, struct shorthand *hand, struct prop *prop)
{
chrDamage(chr, damage, vector, hand, prop, IBH_GENERAL,
false, // damageshield
NULL, // prop2
NULL, // node
NULL, // model
-1, // side
NULL, // arg11
false, // explosion
NULL); // explosionpos
}
void chrDamageByLaser(struct chrdata *chr, f32 damage, struct coord *vector, struct shorthand *hand, struct prop *prop)
{
chrDamage(chr, damage, vector, hand, prop, IBH_GENERAL,
true, // damageshield
chr->prop, // prop2
NULL, // node
NULL, // model
-1, // side
NULL, // arg11
false, // explosion
NULL); // explosionpos
}
void func0f0341dc(struct chrdata *chr, f32 damage, struct coord *vector, struct shorthand *hand, struct prop *prop, u32 ibh, struct prop *prop2, struct modelnode *node, struct model *model, s32 side, s16 *arg10)
{
chrDamage(chr, damage, vector, hand, prop, ibh,
true, // damageshield
prop2, // prop2
node, // node
model, // model
side, // side
arg10, // arg11
false, // explosion
NULL); // explosionpos
}
/**
* Unused, and same as func0f034330 but sets ibh to IBH_GENERAL instead of argument.
*/
void func0f034248(struct chrdata *chr, f32 damage, struct coord *vector, struct shorthand *hand, struct prop *prop)
{
struct modelnode *node = NULL;
struct model *model = NULL;
s32 side = 0;
s32 ibh = IBH_GENERAL;
if (chrGetShield(chr) >= 0 && chr->model) {
chrCalculateShieldHit(chr, &chr->prop->pos, vector, &node, &ibh, &model, &side);
}
chrDamage(chr, damage, vector, hand, prop, IBH_GENERAL,
true, // damageshield
chr->prop, // prop2
node, // node
model, // model
side, // side
NULL, // arg11
false, // explosion
NULL); // explosionpos
}
void func0f034330(struct chrdata *chr, f32 damage, struct coord *vector, struct shorthand *hand, struct prop *prop, s32 ibh)
{
struct modelnode *node = NULL;
struct model *model = NULL;
s32 side = 0;
if (chrGetShield(chr) >= 0 && chr->model) {
chrCalculateShieldHit(chr, &chr->prop->pos, vector, &node, &ibh, &model, &side);
}
chrDamage(chr, damage, vector, hand, prop, ibh,
true, // damageshield
chr->prop, // prop2
node, // node
model, // model
side, // side
NULL, // arg11
false, // explosion
NULL); // explosionpos
}
void chrDamageByExplosion(struct chrdata *chr, f32 damage, struct coord *vector, struct prop *prop, struct coord *explosionpos)
{
chrDamage(chr, damage, vector, NULL, prop, IBH_GENERAL,
true, // damageshield
chr->prop, // prop2
NULL, // node
NULL, // model
-1, // side
NULL, // arg11
true, // explosion
explosionpos);
}
void playerUpdateDamageStats(struct prop *attacker, struct prop *victim, f32 damage)
{
s32 playernum;
if (attacker && attacker->type == PROPTYPE_PLAYER) {
playernum = propGetPlayerNum(attacker);
if (playernum >= 0) {
g_Vars.playerstats[playernum].damtransmitted += damage;
}
}
if (victim && victim->type == PROPTYPE_PLAYER) {
playernum = propGetPlayerNum(victim);
if (playernum >= 0) {
g_Vars.playerstats[playernum].damreceived += damage;
}
}
}
/**
* Handle a chr being damaged.
*
* Calculates and damage based on many factors and applies it to the chr,
* killing them if needed.
*
* The chr can be a player, aibot or regular chr. The chr can also be of any
* race (human, Skedar, Dr Caroll, robot or eyespy).
*
* chr - the chr being damaged
* damage - the base amount of damage to deal, prior to scaling factors
* vector - position of the attacker?
* hand - shorthand struct defining the weapon and gun function being used
* aprop - the attacker's prop struct
* ibh - "i've been hit" value, ie. the body part (see IBH constants)
* damageshield - false if attack should bypass shield if any
* prop2 - ?
* node - if shielded, model node (of type bbox) which was hit
* model - if shielded, model of chr
* side - if shielded, side of the model node's bounding box which was hit (0-5)
* arg11 - ?
* explosion - true if damage is coming from an explosion
* explosionpos - position of said explosion
*/
void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct shorthand *hand,
struct prop *aprop, s32 ibh, bool damageshield, struct prop *prop2,
struct modelnode *node, struct model *model, s32 side, s16 *arg11,
bool explosion, struct coord *explosionpos)
{
bool onehitko = false;
s32 race = CHRRACE(chr);
f32 shield;
bool makedizzy;
bool isclose;
struct prop *vprop = chr->prop;
f32 headshotdamagescale = 1;
bool usedshield = false;
bool showshield = false;
bool showdamage = false;
struct shorthand hand2 = {0};
f32 explosionforce = damage;
f32 healthscale = 1;
f32 armourscale = 1;
bool isfar = true;
bool forceapplydamage = false;
struct weaponfunc *func;
f32 amount;
bool canchoke = true;
s32 aplayernum = -1;
s32 choketype = CHOKETYPE_NONE;
if (ibh == IBH_HEAD) {
choketype = CHOKETYPE_GURGLE;
}
if (hand) {
if (hand->weaponnum == WEAPON_COMBATKNIFE) {
if (hand->weaponfunc == FUNC_2) {
canchoke = false;
}
if (hand->weaponfunc == FUNC_POISON) {
choketype = CHOKETYPE_COUGH;
}
} else if (hand->weaponnum == WEAPON_TRANQUILIZER) {
if (hand->weaponfunc == FUNC_SECONDARY) {
choketype = CHOKETYPE_GURGLE;
}
}
}
// Don't damage if in CI training outside of training session
if (chr->prop == g_Vars.currentplayer->prop
&& g_Vars.currentplayer->training == false
&& mainGetStageNum() == STAGE_CITRAINING) {
return;
}
// Don't damage if attacker was anti and chr is non-interactable by anti
if (g_Vars.antiplayernum >= 0
&& aprop
&& aprop == g_Vars.anti->prop
&& (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE)) {
return;
}
// Don't damage if coop and friendly fire is off (human buddy)
if (g_Vars.coopplayernum >= 0
&& g_Vars.coopfriendlyfire == false
&& aprop
&& aprop != vprop
&& aprop->type == PROPTYPE_PLAYER
&& vprop->type == PROPTYPE_PLAYER) {
return;
}
// Don't damage if coop and friendly fire is off (AI buddy)
if (g_MissionConfig.iscoop
&& g_Vars.coopfriendlyfire == false
&& aprop
&& aprop != vprop
&& (aprop->type == PROPTYPE_PLAYER || aprop->type == PROPTYPE_CHR)
&& chr->team == TEAM_ALLY
&& aprop->chr->team == TEAM_ALLY) {
return;
}
// Don't allow coop AI to kill or destroy anything
// which anti wouldn't be able to
if (g_MissionConfig.iscoop
&& aprop
&& aprop != vprop
&& aprop->type == PROPTYPE_CHR
&& aprop->chr->team == TEAM_ALLY
&& (chr->hidden & CHRHFLAG_ANTINONINTERACTABLE)) {
return;
}
if (hand == NULL) {
hand = &hand2;
}
func = handGetWeaponFunction(hand);
isclose = func && (func->type & 0xff) == INVENTORYFUNCTYPE_CLOSE;
makedizzy = race != RACE_DRCAROLL && handHasFunctionFlags(hand, FUNCFLAG_MAKEDIZZY);
if (chr->prop == g_Vars.currentplayer->prop && g_Vars.currentplayer->invincible) {
return;
}
if (isclose) {
isfar = false;
}
// Set a flag on the victim that makes them switch to their "shot" AI list
chr->chrflags |= CHRCFLAG_TRIGGERSHOTLIST;
// Set a flag on the attacker so their AI scripting can tell that they've
// hit their target
if (aprop
&& aprop->type == PROPTYPE_CHR
&& chrGetTargetProp(aprop->chr) == chr->prop) {
aprop->chr->chrflags |= CHRCFLAG_INJUREDTARGET;
}
// Disarm only hurts the victim in solo missions and if the victim is an NPC
if (handHasFunctionFlags(hand, FUNCFLAG_DROPWEAPON)
&& hand->weaponnum == WEAPON_UNARMED
&& (vprop->type == PROPTYPE_PLAYER || g_Vars.normmplayerisrunning)) {
damage = 0;
}
// Apply damage scaling based on difficulty settings
if (g_Vars.mplayerisrunning == false) {
// Solo
if (explosion) {
if (vprop->type == PROPTYPE_PLAYER) {
damage *= g_ExplosionDamageReceivedScale;
}
} else if (aprop && aprop->type == PROPTYPE_PLAYER) {
// Player is attacking
damage *= g_DamageDealtScale;
headshotdamagescale = 25;
} else if (aprop && aprop->type == PROPTYPE_CHR && vprop->type == PROPTYPE_PLAYER) {
// Chr is attacking player
damage *= g_DamageReceivedScale * pdmodeGetEnemyDamage();
}
if (vprop->type != PROPTYPE_PLAYER) {
damage /= pdmodeGetEnemyHealth();
}
if (vprop->type == PROPTYPE_PLAYER) {
healthscale = g_Vars.players[propGetPlayerNum(vprop)]->healthscale;
armourscale = g_Vars.players[propGetPlayerNum(vprop)]->armourscale;
}
} else if (g_Vars.coopplayernum >= 0) {
// Co-op
if (explosion) {
if (vprop->type == PROPTYPE_PLAYER) {
damage *= g_ExplosionDamageReceivedScale;
}
} else if (aprop && aprop->type == PROPTYPE_PLAYER && vprop->type != PROPTYPE_PLAYER) {
damage *= g_DamageDealtScale;
headshotdamagescale = 25;
} else if (aprop && aprop->type == PROPTYPE_CHR && vprop->type == PROPTYPE_PLAYER) {
damage *= g_DamageReceivedScale * pdmodeGetEnemyDamage();
}
if (vprop->type != PROPTYPE_PLAYER) {
damage /= pdmodeGetEnemyHealth();
}
if (vprop->type == PROPTYPE_PLAYER) {
healthscale = g_Vars.players[propGetPlayerNum(vprop)]->healthscale;
armourscale = g_Vars.players[propGetPlayerNum(vprop)]->armourscale;
}
} else if (g_Vars.antiplayernum >= 0) {
// Anti
if (explosion) {
if (vprop == g_Vars.bond->prop) {
damage *= g_ExplosionDamageReceivedScale;
}
} else if (aprop && aprop == g_Vars.bond->prop) {
damage *= g_DamageDealtScale;
headshotdamagescale = 25;
} else if (aprop && aprop != g_Vars.bond->prop && vprop == g_Vars.bond->prop) {
damage *= g_DamageReceivedScale * pdmodeGetEnemyDamage();
}
if (vprop != g_Vars.bond->prop) {
damage /= pdmodeGetEnemyHealth();
}
if (vprop == g_Vars.bond->prop) {
healthscale = g_Vars.players[propGetPlayerNum(vprop)]->healthscale;
armourscale = g_Vars.players[propGetPlayerNum(vprop)]->armourscale;
}
// Anti shooting other enemies is lethal
if (aprop && aprop == g_Vars.anti->prop && vprop != g_Vars.bond->prop) {
damage *= 100;
}
} else {
// Normal multiplayer
if (vprop->type == PROPTYPE_PLAYER) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(propGetPlayerNum(vprop));
damage *= g_Vars.currentplayerstats->damagescale;
setCurrentPlayerNum(prevplayernum);
}
}
// Apply rumble
if (vprop->type == PROPTYPE_PLAYER) {
s32 prevplayernum = g_Vars.currentplayernum;
#if VERSION >= VERSION_NTSC_1_0
s32 contpad1;
s32 contpad2;
setCurrentPlayerNum(propGetPlayerNum(vprop));
joyGetContpadNumsForPlayer(g_Vars.currentplayernum, &contpad1, &contpad2);
if (contpad1 >= 0) {
func0f11dc04(contpad1, 0.25f, -1, -1);
}
if (contpad2 >= 0) {
func0f11dc04(contpad2, 0.25f, -1, -1);
}
#else
setCurrentPlayerNum(propGetPlayerNum(vprop));
func0f11dc04((s8)g_Vars.currentplayernum, 0.25f, -1, -1);
if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) >= CONTROLMODE_21) {
func0f11dc04((s8)(PLAYERCOUNT() + g_Vars.currentplayernum), 0.25f, -1, -1);
}
#endif
setCurrentPlayerNum(prevplayernum);
}
// Find the attacker's player number if possible
// (includes MP aibots, not applicable for solo chrs)
if (g_Vars.mplayerisrunning) {
if (aprop && (aprop->type == PROPTYPE_PLAYER || aprop->type == PROPTYPE_CHR)) {
aplayernum = mpPlayerGetIndex(aprop->chr);
}
} else {
if (aprop && aprop->type == PROPTYPE_PLAYER) {
aplayernum = propGetPlayerNum(aprop);
}
}
// If using the shotgun, scale the damage based on distance
if (aprop && aprop->type == PROPTYPE_CHR && hand->weaponnum == WEAPON_SHOTGUN) {
f32 xdiff = aprop->pos.x - vprop->pos.x;
f32 ydiff = aprop->pos.y - vprop->pos.y;
f32 zdiff = aprop->pos.z - vprop->pos.z;
f32 sqdist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
if (sqdist < 200 * 200) {
damage *= 4.0f + (s32)(random() % 3); // 4, 5 or 6
} else if (sqdist < 400 * 400) {
damage *= 3.0f + (s32)(random() % 2); // 3 or 4
} else if (sqdist < 800 * 800) {
damage *= 2.0f + (s32)(random() % 2); // 2 or 3
} else if (sqdist < 1600 * 1600) {
damage *= 1.0f + (s32)(random() % 2); // 1 or 2
}
}
// damageshield is an argument to this function,
// but is forced on if using the Farsight.
if (hand && hand->weaponnum == WEAPON_FARSIGHT) {
damageshield = true;
damage *= 10;
}
// Handle shield damage
if (damageshield) {
shield = chrGetShield(chr);
if (chr->aibot && chr->aibot->simulant->base.simtype == SIMTYPE_TURTLE) {
armourscale = 4;
}
if (shield > 0) {
if (g_Vars.normmplayerisrunning) {
#if VERSION >= VERSION_PAL_FINAL
// Fixing a @bug?
damage = damage * mpHandicapToDamageScale(g_MpPlayers[g_Vars.currentplayerstats->mpindex].handicap);
#else
damage /= mpHandicapToDamageScale(g_MpPlayers[g_Vars.currentplayerstats->mpindex].handicap);
#endif
}
chr->chrflags |= CHRCFLAG_02000000;
if (prop2 && node && chr->model) {
func0f034080(chr, node, prop2, model, side, arg11);
} else {
func0f028f7c(chr->prop, chrGetShield(chr), NULL, NULL, NULL, 0, 0);
}
if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_ONEHITKILLS)) {
damage = 0;
chrSetShield(chr, 0);
} else if (shield >= damage / armourscale) {
// Has enough shield to sustain the damage
shield -= damage / armourscale;
damage = 0;
chrSetShield(chr, shield);
} else {
// Shield is now gone
damage = 0;
chrSetShield(chr, 0);
}
showshield = true;
usedshield = true;
}
}
// Handle hat shots. This is left over from GE, as hats don't exist in PD
if (damage > 0 && ibh == IBH_HAT && chr->weapons_held[2]) {
s32 type = hatGetType(chr->weapons_held[2]);
if (type == HATTYPE_CLOTH) {
// Hat remains on head and damages the chr (eg. Moonraker Elite)
ibh = IBH_HEAD;
} else if (type != HATTYPE_METAL) {
// Normal hat
damage = 0;
propobjSetDropped(chr->weapons_held[2], DROPREASON_4);
chr->hidden |= CHRHFLAG_00000001;
} else {
// Metal helmets don't fall off and make a metallic chink noise when shot
u16 sounds[] = { SFX_HATHIT_807B, SFX_HATHIT_8079, SFX_HATHIT_807C };
damage = 0;
func0f0939f8(NULL, chr->prop, sounds[random() % 3], -1,
-1, 0, 0, 0, NULL, -1, NULL, -1, -1, -1, -1);
}
}
// Handle incrementing player shot count
if (aprop && aprop->type == PROPTYPE_PLAYER && !explosion) {
bool alreadydead = false;
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(propGetPlayerNum(aprop));
// ACT_DIE is not checked here, so it would appear that shooting
// a chr as they're dying will increment the shots hit count
if (chr && chr->actiontype == ACT_DEAD) {
alreadydead = true;
}
if (vprop->type == PROPTYPE_PLAYER && g_Vars.players[propGetPlayerNum(vprop)]->isdead) {
alreadydead = true;
}
if (!alreadydead && ibh) {
switch (ibh) {
case IBH_HEAD:
mpstatsIncrementPlayerShotCount2(hand, SHOTREGION_HEAD);
break;
case IBH_GUN:
mpstatsIncrementPlayerShotCount2(hand, SHOTREGION_GUN);
break;
case IBH_HAT:
mpstatsIncrementPlayerShotCount2(hand, SHOTREGION_HAT);
break;
case IBH_PELVIS:
case IBH_TORSO:
mpstatsIncrementPlayerShotCount2(hand, SHOTREGION_BODY);
break;
default:
mpstatsIncrementPlayerShotCount2(hand, SHOTREGION_LIMB);
break;
}
}
setCurrentPlayerNum(prevplayernum);
}
// If the chr is invincible, make them flinch then we're done
if (chr->chrflags & CHRCFLAG_INVINCIBLE) {
chrFlinchBody(chr);
return;
}
// If chr is dying or already dead, consider making their head flinch
// then we're done
if (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD) {
if (ibh == IBH_HEAD && chr->actiontype == ACT_DIE && race != RACE_SKEDAR && isfar) {
struct coord pos;
pos.x = vprop->pos.x - vector->x;
pos.y = vprop->pos.y - vector->y;
pos.z = vprop->pos.z - vector->z;
chrFlinchHead(chr, chrGetAngleToPos(chr, &pos));
}
return;
}
// At this point the chr is known to be alive before they were shot
{
struct prop *weapon;
struct coord sp9c;
f32 angle;
sp9c.x = vprop->pos.x - vector->x;
sp9c.y = vprop->pos.y - vector->y;
sp9c.z = vprop->pos.z - vector->z;
angle = chrGetAngleToPos(chr, &sp9c);
// Knife in the back to an unalerted chr is lethal
if (hand->weaponnum == WEAPON_COMBATKNIFE
&& hand->weaponfunc == FUNC_PRIMARY
&& angle > 2.0940616130829f
&& angle < 4.1881237030029f
&& (chr->alertness < 100 || chr->lastseetarget60 == 0)) {
damage *= 1000;
}
// Punching and pistol whipping is less effective from the front
if (handHasFunctionFlags(hand, FUNCFLAG_BLUNTIMPACT)) {
if (angle < 1.0470308065414f || angle > 5.2351541519165f) {
damage *= 0.4f;
} else if (angle < 2.0940616130829f || angle > 4.1881237030029f) {
damage *= 0.7f;
} else if (chr->alertness < 100) {
onehitko = true;
}
if (chrGetEquippedWeaponProp(chr, HAND_RIGHT) == NULL
&& chrGetEquippedWeaponProp(chr, HAND_LEFT) == NULL
&& (chr->gunprop == NULL || chr->actiontype == ACT_SURRENDER || chr->actiontype == ACT_SURPRISED)) {
// Chr is unarmed and has no hope of getting their gun
onehitko = true;
}
forceapplydamage = true;
}
if (ibh == IBH_GENERAL) {
// Halve the damage because it's doubled for torso below
ibh = IBH_TORSO;
damage *= 0.5f;
} else if (ibh == IBH_GENERALHALF) {
// Likewise, quarter it here so it becomes half below
ibh = IBH_TORSO;
damage *= 0.25f;
}
// Hits to a Skedar's tail are 10x more lethal
if (race == RACE_SKEDAR && ibh == IBH_TAIL) {
damage *= 10;
}
// Apply damage multipliers based on which body parts were hit,
// and flinch head if shot in the head
if (ibh == IBH_HEAD) {
if (race == RACE_SKEDAR) {
damage += damage;
chrFlinchHead(chr, angle);
} else {
damage *= 4;
if (isfar && !usedshield) {
chrFlinchHead(chr, angle);
damage *= headshotdamagescale;
if (hand->weaponnum == WEAPON_COMBATKNIFE && hand->weaponfunc != FUNC_POISON) {
damage += damage;
}
}
}
} else if (ibh == IBH_TORSO) {
// Double damage for torso hits
damage += damage;
} else if (ibh == IBH_GUN) {
// No damage for gun hits
damage = 0;
makedizzy = false;
} else if (ibh == IBH_HAT) {
// No damage for hat hits
damage = 0;
makedizzy = false;
}
// Handle situations where the player is the one being shot, then return
if (vprop->type == PROPTYPE_PLAYER) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(propGetPlayerNum(vprop));
if (g_Vars.normmplayerisrunning) {
damage /= mpHandicapToDamageScale(g_MpPlayers[g_Vars.currentplayerstats->mpindex].handicap);
}
if (g_Vars.currentplayer->isdead == false && !g_PlayerInvincible) {
f32 boostscale;
// Handle player losing gun
if (handHasFunctionFlags(hand, FUNCFLAG_DROPWEAPON)) {
currentPlayerLoseGun(aprop);
}
// Handle player dizziness
if (makedizzy && g_Vars.currentplayer->invincible == false) {
f32 blurscale = 1;
struct chrdata *achr = NULL;
if (aprop) {
achr = aprop->chr;
if (achr && achr->bodynum == BODY_MINISKEDAR) {
blurscale = 4;
}
}
if (!achr
|| !achr->aibot
|| !handHasFunctionFlags(hand, FUNCFLAG_00400000)
|| chr->blurdrugamount < PALDOWN(4500)) {
chr->blurdrugamount += handGetBlurAmount(hand) * blurscale;
}
chr->blurnumtimesdied = 0;
}
// Handle player damage
if (g_Vars.currentplayer->invincible == false && damage > 0) {
f32 statsamount = amount = damage * 0.125f;
if (statsamount > g_Vars.currentplayer->bondhealth) {
statsamount = g_Vars.currentplayer->bondhealth;
}
if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_ONEHITKILLS)) {
statsamount = g_Vars.currentplayer->bondhealth;
}
playerUpdateDamageStats(aprop, vprop, statsamount);
currentPlayerDisplayHealth();
if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_ONEHITKILLS)) {
g_Vars.currentplayer->bondhealth = 0;
}
g_Vars.currentplayer->bondhealth -= amount / healthscale;
chr->lastattacker = (aprop ? aprop->chr : NULL);
showdamage = true;
if (g_Vars.currentplayer->training == false
&& g_Vars.currentplayer->bondhealth <= 0) {
currentPlayerDieByShooter(aplayernum, false);
chr->blurnumtimesdied++;
}
if (!lvIsPaused() && canchoke) {
chrChoke(chr, choketype);
}
chrFlinchBody(chr);
}
// Handle player boost
if (isclose && hand->weaponnum == WEAPON_REAPER) {
boostscale = 0.1f;
} else if (g_Vars.normmplayerisrunning) {
boostscale = 0.75f;
} else {
boostscale = 1;
}
g_Vars.currentplayer->bondshotspeed[0] += vector->x * boostscale;
g_Vars.currentplayer->bondshotspeed[2] += vector->z * boostscale;
if (showdamage) {
currentPlayerDisplayDamage();
}
if (showshield) {
currentPlayerDisplayShield();
}
if (g_Vars.normmplayerisrunning && aprop && aprop->type == PROPTYPE_PLAYER) {
currentPlayerCheckIfShotInBack(prevplayernum, vector->x, vector->z);
}
}
setCurrentPlayerNum(prevplayernum);
return;
}
// This check is pointless - a similar check and return exists earlier
if (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD) {
return;
}
// At this point we know we're dealing with a NPC being shot, and the
// NPC was alive prior to being shot.
// Handle aibot/chr losing gun
if (handHasFunctionFlags(hand, FUNCFLAG_DROPWEAPON)
&& ((chr->flags & CHRFLAG0_CANLOSEGUN) || chr->aibot)) {
if (chr->aibot) {
aibotLoseGun(chr, aprop);
} else {
weapon = chrGetEquippedWeaponProp(chr, HAND_RIGHT);
if (weapon) {
chr->gunprop = weapon;
propobjSetDropped(weapon, DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
}
weapon = chrGetEquippedWeaponProp(chr, HAND_LEFT);
if (weapon) {
chr->gunprop = weapon;
propobjSetDropped(weapon, DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
}
}
}
// Handle chr damage
if (chr->damage < chr->maxdamage
|| (!g_Vars.normmplayerisrunning && chr->actiontype != ACT_PREARGH)) {
f32 sp80 = 0;
chr->numarghs++;
// Handle chr dizziness and psychosis
if (makedizzy && race != RACE_DRCAROLL && race != RACE_ROBOT) {
if (handHasFunctionFlags(hand, FUNCFLAG_PSYCHOSIS)) {
chr->hidden |= CHRHFLAG_PSYCHOSISED;
} else {
chr->blurdrugamount += handGetBlurAmount(hand);
chr->blurnumtimesdied = 0;
if (!chr->aibot && chr->blurdrugamount >= PALDOWN(5000)) {
onehitko = true;
}
}
}
// Handle chr boost
if (chr->aibot) {
f32 boostscale;
if (isclose && hand->weaponnum == WEAPON_REAPER) {
boostscale = 0.1f;
} else {
boostscale = 0.75f;
}
chr->aibot->shotspeed.x += vector->x * boostscale;
chr->aibot->shotspeed.z += vector->z * boostscale;
}
if (hand->weaponnum == WEAPON_UNARMED) {
sp80 = 2;
}
if (hand->weaponnum == WEAPON_TRANQUILIZER || hand->weaponnum == WEAPON_PSYCHOSISGUN) {
forceapplydamage = true;
}
// Handle one-hit knockouts
if (onehitko && chr->aibot == NULL && race == RACE_HUMAN) {
chrKnockOut(chr, angle, ibh, hand);
func0f0926bc(chr->prop, 9, 0);
if (canchoke) {
chrChoke(chr, choketype);
}
if (hand->weaponnum == WEAPON_UNARMED && chr->actiontype != ACT_DRUGGEDKO) {
return;
}
return;
}
// Handle applying damage to NPCs
// Don't enter this branch if there is no damage to give,
// or we are making a chr dizzy in solo mode (unless force is set)
if (damage > 0 && (g_Vars.normmplayerisrunning || !makedizzy || forceapplydamage)) {
f32 amount = damage;
if (chr->damage + damage > chr->maxdamage) {
amount = chr->maxdamage - chr->damage;
}
amount *= 0.125f;
playerUpdateDamageStats(aprop, vprop, amount);
chr->damage += damage;
chr->lastattacker = (aprop ? aprop->chr : NULL);
chr->chrflags |= CHRCFLAG_JUST_INJURED;
if (chr->aibot) {
if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_ONEHITKILLS)) {
chr->damage = chr->maxdamage;
}
if (canchoke) {
chrChoke(chr, choketype);
}
chrFlinchBody(chr);
if (chr->damage >= chr->maxdamage) {
chrDie(chr, aplayernum);
}
} else if (explosion) {
// Chrs die instantly from explosion damage provided they
// don't have any armour (the chr has armour if their
// chr->damage is negative). Note that damage has already
// been applied to the chr above, so a perfectly healthy chr
// with no armour will already have a damage value > 0 at
// this point.
if (chr->damage > 0) {
chr->damage = chr->maxdamage;
if (race == RACE_DRCAROLL || race == RACE_EYESPY || race == RACE_ROBOT) {
chrBeginDeath(chr, vector, angle, ibh, hand, false, aplayernum);
} else {
chrYeetFromPos(chr, explosionpos, explosionforce);
}
if (canchoke) {
chrChoke(chr, choketype);
}
if (g_Vars.mplayerisrunning) {
mpstatsRecordDeath(aplayernum, mpPlayerGetIndex(chr));
} else if (aprop && aprop->type == PROPTYPE_PLAYER) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(propGetPlayerNum(aprop));
mpstatsRecordPlayerKill();
setCurrentPlayerNum(prevplayernum);
}
if (chr->chrflags & CHRCFLAG_KILLCOUNTABLE) {
mpstatsIncrementTotalKillCount();
}
if (chr->aibot == NULL) {
chrDropItems(chr);
}
if (chr->aibot == NULL) {
weapon = chr->weapons_held[HAND_RIGHT];
if (weapon && (weapon->obj->flags & OBJFLAG_00002000) == 0) {
propobjSetDropped(weapon, DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
}
weapon = chr->weapons_held[HAND_LEFT];
if (weapon && (weapon->obj->flags & OBJFLAG_00002000) == 0) {
propobjSetDropped(weapon, DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
}
}
}
} else {
// Non-explosion damage to solo mode chr
if (chr->actiontype != ACT_DRUGGEDKO && canchoke) {
chrChoke(chr, choketype);
}
if (makedizzy && chr->damage >= chr->maxdamage) {
chr->damage = chr->maxdamage - 0.1f;
chrKnockOut(chr, angle, ibh, hand);
}
// If chr has armour or the weapon doesn't stun
if (chr->damage < 0 ||
(handHasFunctionFlags(hand, FUNCFLAG_NOSTUN) && chr->damage < chr->maxdamage)) {
f32 endframe = -1;
if (!chrIsAnimPreventingArgh(chr, &endframe)) {
chrFlinchBody(chr);
}
} else if (ibh != IBH_HAT) {
// Cancel current animation and prepare for argh
f32 endframe = -1;
if (chrIsAnimPreventingArgh(chr, &endframe)) {
if (endframe >= 0) {
modelSetAnimEndFrame(chr->model, endframe);
}
chr->actiontype = ACT_PREARGH;
chr->act_preargh.pos.x = vector->x;
chr->act_preargh.pos.y = vector->y;
chr->act_preargh.pos.z = vector->z;
chr->act_preargh.angle = angle;
chr->act_preargh.ibh = ibh;
chr->act_preargh.aplayernum = aplayernum;
chr->act_preargh.hand.weaponnum = hand->weaponnum;
chr->act_preargh.hand.unk0639 = hand->unk0639;
chr->act_preargh.hand.unk063a = hand->unk063a;
chr->act_preargh.hand.weaponfunc = hand->weaponfunc;
chr->sleep = 0;
} else {
chrReactToDamage(chr, vector, angle, ibh, hand, aplayernum);
}
}
}
if (sp80 > 0) {
chr->timeextra = sp80 * 15;
chr->elapseextra = 0;
chr->extraspeed.x = prop2->pos.x - aprop->pos.x;
chr->extraspeed.y = prop2->pos.y - aprop->pos.y;
chr->extraspeed.z = prop2->pos.z - aprop->pos.z;
guNormalize(&chr->extraspeed.x, &chr->extraspeed.y, &chr->extraspeed.z);
chr->extraspeed.x *= sp80;
chr->extraspeed.y *= sp80;
chr->extraspeed.z *= sp80;
}
}
}
}
}
void chrDie(struct chrdata *chr, s32 aplayernum)
{
if (chr->actiontype != ACT_DIE) {
chrStopFiring(chr);
chrUncloak(chr, true);
chr->actiontype = ACT_DIE;
chr->act_die.notifychrindex = 0;
chr->sleep = 0;
chr->blurnumtimesdied++;
chr->act_die.thudframe1 = -1;
chr->act_die.thudframe2 = -1;
chr->act_die.timeextra = 0;
chr->ailist = ailistFindById(GAILIST_AI_BOT_DEAD);
chr->aioffset = 0;
mpstatsRecordDeath(aplayernum, mpPlayerGetIndex(chr));
func0f199964(chr, chr->aibot->weaponnum);
#if VERSION >= VERSION_NTSC_1_0
chr->aibot->unk09c_00 = 0;
chr->aibot->unk09c_01 = 0;
chr->aibot->unk04c_04 = 0;
chr->aibot->unk04c_03 = 0;
chr->aibot->unk04c_05 = 0;
#endif
}
}
GLOBAL_ASM(
glabel func0f03645c
/* f03645c: 27bdffb0 */ addiu $sp,$sp,-80
/* f036460: afbf0024 */ sw $ra,0x24($sp)
/* f036464: afa40050 */ sw $a0,0x50($sp)
/* f036468: afa50054 */ sw $a1,0x54($sp)
/* f03646c: afa60058 */ sw $a2,0x58($sp)
/* f036470: afa7005c */ sw $a3,0x5c($sp)
/* f036474: afa0004c */ sw $zero,0x4c($sp)
/* f036478: 8c84001c */ lw $a0,0x1c($a0)
/* f03647c: 27a70044 */ addiu $a3,$sp,0x44
/* f036480: 27a60048 */ addiu $a2,$sp,0x48
/* f036484: 27a50040 */ addiu $a1,$sp,0x40
/* f036488: 0fc0a277 */ jal propChrGetBbox
/* f03648c: afa4002c */ sw $a0,0x2c($sp)
/* f036490: 8fa40050 */ lw $a0,0x50($sp)
/* f036494: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f036498: 00002825 */ or $a1,$zero,$zero
/* f03649c: 8faf0064 */ lw $t7,0x64($sp)
/* f0364a0: 8fb9002c */ lw $t9,0x2c($sp)
/* f0364a4: 24180001 */ addiu $t8,$zero,0x1
/* f0364a8: afb80014 */ sw $t8,0x14($sp)
/* f0364ac: afaf0010 */ sw $t7,0x10($sp)
/* f0364b0: c720000c */ lwc1 $f0,0xc($t9)
/* f0364b4: c7a40048 */ lwc1 $f4,0x48($sp)
/* f0364b8: c7a80044 */ lwc1 $f8,0x44($sp)
/* f0364bc: 8fa40054 */ lw $a0,0x54($sp)
/* f0364c0: 46002181 */ sub.s $f6,$f4,$f0
/* f0364c4: 8fa50058 */ lw $a1,0x58($sp)
/* f0364c8: 8fa6005c */ lw $a2,0x5c($sp)
/* f0364cc: 46004281 */ sub.s $f10,$f8,$f0
/* f0364d0: e7a60018 */ swc1 $f6,0x18($sp)
/* f0364d4: 27a70030 */ addiu $a3,$sp,0x30
/* f0364d8: 0c00b610 */ jal func0002d840
/* f0364dc: e7aa001c */ swc1 $f10,0x1c($sp)
/* f0364e0: 10400012 */ beqz $v0,.L0f03652c
/* f0364e4: 24080001 */ addiu $t0,$zero,0x1
/* f0364e8: 8fa9002c */ lw $t1,0x2c($sp)
/* f0364ec: afa80010 */ sw $t0,0x10($sp)
/* f0364f0: c7b00048 */ lwc1 $f16,0x48($sp)
/* f0364f4: c520000c */ lwc1 $f0,0xc($t1)
/* f0364f8: c7a40044 */ lwc1 $f4,0x44($sp)
/* f0364fc: 8fa4005c */ lw $a0,0x5c($sp)
/* f036500: 46008481 */ sub.s $f18,$f16,$f0
/* f036504: 27a50030 */ addiu $a1,$sp,0x30
/* f036508: 8fa60060 */ lw $a2,0x60($sp)
/* f03650c: 46002181 */ sub.s $f6,$f4,$f0
/* f036510: e7b20014 */ swc1 $f18,0x14($sp)
/* f036514: 8fa70064 */ lw $a3,0x64($sp)
/* f036518: 0c00b5ab */ jal func0002d6ac
/* f03651c: e7a60018 */ swc1 $f6,0x18($sp)
/* f036520: 10400002 */ beqz $v0,.L0f03652c
/* f036524: 240a0001 */ addiu $t2,$zero,0x1
/* f036528: afaa004c */ sw $t2,0x4c($sp)
.L0f03652c:
/* f03652c: 8fa40050 */ lw $a0,0x50($sp)
/* f036530: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f036534: 24050001 */ addiu $a1,$zero,0x1
/* f036538: 8fbf0024 */ lw $ra,0x24($sp)
/* f03653c: 8fa2004c */ lw $v0,0x4c($sp)
/* f036540: 27bd0050 */ addiu $sp,$sp,0x50
/* f036544: 03e00008 */ jr $ra
/* f036548: 00000000 */ nop
);
GLOBAL_ASM(
glabel func0f03654c
/* f03654c: 27bdff70 */ addiu $sp,$sp,-144
/* f036550: afb00028 */ sw $s0,0x28($sp)
/* f036554: afbf0034 */ sw $ra,0x34($sp)
/* f036558: afb20030 */ sw $s2,0x30($sp)
/* f03655c: afb1002c */ sw $s1,0x2c($sp)
/* f036560: afa60098 */ sw $a2,0x98($sp)
/* f036564: afa00074 */ sw $zero,0x74($sp)
/* f036568: 00a08025 */ or $s0,$a1,$zero
/* f03656c: 8c92001c */ lw $s2,0x1c($a0)
/* f036570: 00e08825 */ or $s1,$a3,$zero
/* f036574: afa40090 */ sw $a0,0x90($sp)
/* f036578: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f03657c: 00002825 */ or $a1,$zero,$zero
/* f036580: 02402025 */ or $a0,$s2,$zero
/* f036584: 27a50068 */ addiu $a1,$sp,0x68
/* f036588: 27a60070 */ addiu $a2,$sp,0x70
/* f03658c: 0fc0a277 */ jal propChrGetBbox
/* f036590: 27a7006c */ addiu $a3,$sp,0x6c
/* f036594: 8fa700a0 */ lw $a3,0xa0($sp)
/* f036598: 8fae00ac */ lw $t6,0xac($sp)
/* f03659c: 240f0001 */ addiu $t7,$zero,0x1
/* f0365a0: 10e00010 */ beqz $a3,.L0f0365e4
/* f0365a4: 00000000 */ nop
/* f0365a8: afae0010 */ sw $t6,0x10($sp)
/* f0365ac: afaf0014 */ sw $t7,0x14($sp)
/* f0365b0: c640000c */ lwc1 $f0,0xc($s2)
/* f0365b4: c7a40070 */ lwc1 $f4,0x70($sp)
/* f0365b8: c7a8006c */ lwc1 $f8,0x6c($sp)
/* f0365bc: 02002025 */ or $a0,$s0,$zero
/* f0365c0: 46002181 */ sub.s $f6,$f4,$f0
/* f0365c4: 8fa50098 */ lw $a1,0x98($sp)
/* f0365c8: 02203025 */ or $a2,$s1,$zero
/* f0365cc: 46004281 */ sub.s $f10,$f8,$f0
/* f0365d0: e7a60018 */ swc1 $f6,0x18($sp)
/* f0365d4: 0c00b5cb */ jal cdTestAToB2
/* f0365d8: e7aa001c */ swc1 $f10,0x1c($sp)
/* f0365dc: 14400012 */ bnez $v0,.L0f036628
/* f0365e0: 8fa700a0 */ lw $a3,0xa0($sp)
.L0f0365e4:
/* f0365e4: 14e000aa */ bnez $a3,.L0f036890
/* f0365e8: 24180001 */ addiu $t8,$zero,0x1
/* f0365ec: afb80010 */ sw $t8,0x10($sp)
/* f0365f0: c640000c */ lwc1 $f0,0xc($s2)
/* f0365f4: c7b00070 */ lwc1 $f16,0x70($sp)
/* f0365f8: c7a4006c */ lwc1 $f4,0x6c($sp)
/* f0365fc: 02002025 */ or $a0,$s0,$zero
/* f036600: 46008481 */ sub.s $f18,$f16,$f0
/* f036604: 8fa50098 */ lw $a1,0x98($sp)
/* f036608: 02203025 */ or $a2,$s1,$zero
/* f03660c: 46002181 */ sub.s $f6,$f4,$f0
/* f036610: e7b20014 */ swc1 $f18,0x14($sp)
/* f036614: 8fa700ac */ lw $a3,0xac($sp)
/* f036618: 0c00b5ab */ jal func0002d6ac
/* f03661c: e7a60018 */ swc1 $f6,0x18($sp)
/* f036620: 5040009c */ beqzl $v0,.L0f036894
/* f036624: 8fa40090 */ lw $a0,0x90($sp)
.L0f036628:
/* f036628: 8fa200a4 */ lw $v0,0xa4($sp)
/* f03662c: 5440002a */ bnezl $v0,.L0f0366d8
/* f036630: c7ae00a8 */ lwc1 $f14,0xa8($sp)
/* f036634: c6280000 */ lwc1 $f8,0x0($s1)
/* f036638: c60a0000 */ lwc1 $f10,0x0($s0)
/* f03663c: 44800000 */ mtc1 $zero,$f0
/* f036640: 27a20084 */ addiu $v0,$sp,0x84
/* f036644: 460a4401 */ sub.s $f16,$f8,$f10
/* f036648: e7a00088 */ swc1 $f0,0x88($sp)
/* f03664c: e7b00084 */ swc1 $f16,0x84($sp)
/* f036650: c7a80084 */ lwc1 $f8,0x84($sp)
/* f036654: c6040008 */ lwc1 $f4,0x8($s0)
/* f036658: c6320008 */ lwc1 $f18,0x8($s1)
/* f03665c: 46080032 */ c.eq.s $f0,$f8
/* f036660: 46049181 */ sub.s $f6,$f18,$f4
/* f036664: 45000008 */ bc1f .L0f036688
/* f036668: e7a6008c */ swc1 $f6,0x8c($sp)
/* f03666c: c7a2008c */ lwc1 $f2,0x8c($sp)
/* f036670: 46020032 */ c.eq.s $f0,$f2
/* f036674: 00000000 */ nop
/* f036678: 45020004 */ bc1fl .L0f03668c
/* f03667c: c7a2008c */ lwc1 $f2,0x8c($sp)
/* f036680: 10000087 */ b .L0f0368a0
/* f036684: 24020001 */ addiu $v0,$zero,0x1
.L0f036688:
/* f036688: c7a2008c */ lwc1 $f2,0x8c($sp)
.L0f03668c:
/* f03668c: c7a00084 */ lwc1 $f0,0x84($sp)
/* f036690: afa200a4 */ sw $v0,0xa4($sp)
/* f036694: 46021282 */ mul.s $f10,$f2,$f2
/* f036698: 00000000 */ nop
/* f03669c: 46000402 */ mul.s $f16,$f0,$f0
/* f0366a0: 0c012974 */ jal sqrtf
/* f0366a4: 46105300 */ add.s $f12,$f10,$f16
/* f0366a8: 3c013f80 */ lui $at,0x3f80
/* f0366ac: 44819000 */ mtc1 $at,$f18
/* f0366b0: c7a40084 */ lwc1 $f4,0x84($sp)
/* f0366b4: c7a8008c */ lwc1 $f8,0x8c($sp)
/* f0366b8: 46009083 */ div.s $f2,$f18,$f0
/* f0366bc: 8fa200a4 */ lw $v0,0xa4($sp)
/* f0366c0: 46022182 */ mul.s $f6,$f4,$f2
/* f0366c4: 00000000 */ nop
/* f0366c8: 46024282 */ mul.s $f10,$f8,$f2
/* f0366cc: e7a60084 */ swc1 $f6,0x84($sp)
/* f0366d0: e7aa008c */ swc1 $f10,0x8c($sp)
/* f0366d4: c7ae00a8 */ lwc1 $f14,0xa8($sp)
.L0f0366d8:
/* f0366d8: c4500000 */ lwc1 $f16,0x0($v0)
/* f0366dc: c4520008 */ lwc1 $f18,0x8($v0)
/* f0366e0: c6040000 */ lwc1 $f4,0x0($s0)
/* f0366e4: 460e8082 */ mul.s $f2,$f16,$f14
/* f0366e8: 8fb900ac */ lw $t9,0xac($sp)
/* f0366ec: 24080001 */ addiu $t0,$zero,0x1
/* f0366f0: 460e9302 */ mul.s $f12,$f18,$f14
/* f0366f4: 02002025 */ or $a0,$s0,$zero
/* f0366f8: 8fa50098 */ lw $a1,0x98($sp)
/* f0366fc: 27a6005c */ addiu $a2,$sp,0x5c
/* f036700: 27a70040 */ addiu $a3,$sp,0x40
/* f036704: 460c2180 */ add.s $f6,$f4,$f12
/* f036708: e7a6005c */ swc1 $f6,0x5c($sp)
/* f03670c: c6080004 */ lwc1 $f8,0x4($s0)
/* f036710: e7a80060 */ swc1 $f8,0x60($sp)
/* f036714: c60a0008 */ lwc1 $f10,0x8($s0)
/* f036718: 46025401 */ sub.s $f16,$f10,$f2
/* f03671c: e7b00064 */ swc1 $f16,0x64($sp)
/* f036720: c6320000 */ lwc1 $f18,0x0($s1)
/* f036724: c7b00070 */ lwc1 $f16,0x70($sp)
/* f036728: 460c9100 */ add.s $f4,$f18,$f12
/* f03672c: e7a40050 */ swc1 $f4,0x50($sp)
/* f036730: c6260004 */ lwc1 $f6,0x4($s1)
/* f036734: c7a4006c */ lwc1 $f4,0x6c($sp)
/* f036738: e7a60054 */ swc1 $f6,0x54($sp)
/* f03673c: c6280008 */ lwc1 $f8,0x8($s1)
/* f036740: afa80014 */ sw $t0,0x14($sp)
/* f036744: afb90010 */ sw $t9,0x10($sp)
/* f036748: 46024281 */ sub.s $f10,$f8,$f2
/* f03674c: e7aa0058 */ swc1 $f10,0x58($sp)
/* f036750: c640000c */ lwc1 $f0,0xc($s2)
/* f036754: e7ac007c */ swc1 $f12,0x7c($sp)
/* f036758: e7a20080 */ swc1 $f2,0x80($sp)
/* f03675c: 46008481 */ sub.s $f18,$f16,$f0
/* f036760: 46002181 */ sub.s $f6,$f4,$f0
/* f036764: e7b20018 */ swc1 $f18,0x18($sp)
/* f036768: 0c00b610 */ jal func0002d840
/* f03676c: e7a6001c */ swc1 $f6,0x1c($sp)
/* f036770: c7a20080 */ lwc1 $f2,0x80($sp)
/* f036774: 10400046 */ beqz $v0,.L0f036890
/* f036778: c7ac007c */ lwc1 $f12,0x7c($sp)
/* f03677c: 24090001 */ addiu $t1,$zero,0x1
/* f036780: afa90010 */ sw $t1,0x10($sp)
/* f036784: c640000c */ lwc1 $f0,0xc($s2)
/* f036788: c7a80070 */ lwc1 $f8,0x70($sp)
/* f03678c: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f036790: e7ac007c */ swc1 $f12,0x7c($sp)
/* f036794: 46004281 */ sub.s $f10,$f8,$f0
/* f036798: e7a20080 */ swc1 $f2,0x80($sp)
/* f03679c: 27a4005c */ addiu $a0,$sp,0x5c
/* f0367a0: 46008481 */ sub.s $f18,$f16,$f0
/* f0367a4: e7aa0014 */ swc1 $f10,0x14($sp)
/* f0367a8: 27a50040 */ addiu $a1,$sp,0x40
/* f0367ac: 27a60050 */ addiu $a2,$sp,0x50
/* f0367b0: e7b20018 */ swc1 $f18,0x18($sp)
/* f0367b4: 0c00b5ab */ jal func0002d6ac
/* f0367b8: 8fa700ac */ lw $a3,0xac($sp)
/* f0367bc: c7a20080 */ lwc1 $f2,0x80($sp)
/* f0367c0: 10400033 */ beqz $v0,.L0f036890
/* f0367c4: c7ac007c */ lwc1 $f12,0x7c($sp)
/* f0367c8: c6040000 */ lwc1 $f4,0x0($s0)
/* f0367cc: 8faa00ac */ lw $t2,0xac($sp)
/* f0367d0: 240b0001 */ addiu $t3,$zero,0x1
/* f0367d4: 460c2181 */ sub.s $f6,$f4,$f12
/* f0367d8: 02002025 */ or $a0,$s0,$zero
/* f0367dc: 8fa50098 */ lw $a1,0x98($sp)
/* f0367e0: 27a6005c */ addiu $a2,$sp,0x5c
/* f0367e4: e7a6005c */ swc1 $f6,0x5c($sp)
/* f0367e8: c6080004 */ lwc1 $f8,0x4($s0)
/* f0367ec: 27a70040 */ addiu $a3,$sp,0x40
/* f0367f0: e7a80060 */ swc1 $f8,0x60($sp)
/* f0367f4: c60a0008 */ lwc1 $f10,0x8($s0)
/* f0367f8: 46025400 */ add.s $f16,$f10,$f2
/* f0367fc: e7b00064 */ swc1 $f16,0x64($sp)
/* f036800: c6320000 */ lwc1 $f18,0x0($s1)
/* f036804: c7b00070 */ lwc1 $f16,0x70($sp)
/* f036808: 460c9101 */ sub.s $f4,$f18,$f12
/* f03680c: e7a40050 */ swc1 $f4,0x50($sp)
/* f036810: c6260004 */ lwc1 $f6,0x4($s1)
/* f036814: c7a4006c */ lwc1 $f4,0x6c($sp)
/* f036818: e7a60054 */ swc1 $f6,0x54($sp)
/* f03681c: c6280008 */ lwc1 $f8,0x8($s1)
/* f036820: afab0014 */ sw $t3,0x14($sp)
/* f036824: afaa0010 */ sw $t2,0x10($sp)
/* f036828: 46024280 */ add.s $f10,$f8,$f2
/* f03682c: e7aa0058 */ swc1 $f10,0x58($sp)
/* f036830: c640000c */ lwc1 $f0,0xc($s2)
/* f036834: 46008481 */ sub.s $f18,$f16,$f0
/* f036838: 46002181 */ sub.s $f6,$f4,$f0
/* f03683c: e7b20018 */ swc1 $f18,0x18($sp)
/* f036840: 0c00b610 */ jal func0002d840
/* f036844: e7a6001c */ swc1 $f6,0x1c($sp)
/* f036848: 10400011 */ beqz $v0,.L0f036890
/* f03684c: 240c0001 */ addiu $t4,$zero,0x1
/* f036850: afac0010 */ sw $t4,0x10($sp)
/* f036854: c640000c */ lwc1 $f0,0xc($s2)
/* f036858: c7a80070 */ lwc1 $f8,0x70($sp)
/* f03685c: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f036860: 27a4005c */ addiu $a0,$sp,0x5c
/* f036864: 46004281 */ sub.s $f10,$f8,$f0
/* f036868: 27a50040 */ addiu $a1,$sp,0x40
/* f03686c: 27a60050 */ addiu $a2,$sp,0x50
/* f036870: 46008481 */ sub.s $f18,$f16,$f0
/* f036874: e7aa0014 */ swc1 $f10,0x14($sp)
/* f036878: 8fa700ac */ lw $a3,0xac($sp)
/* f03687c: 0c00b5ab */ jal func0002d6ac
/* f036880: e7b20018 */ swc1 $f18,0x18($sp)
/* f036884: 10400002 */ beqz $v0,.L0f036890
/* f036888: 240d0001 */ addiu $t5,$zero,0x1
/* f03688c: afad0074 */ sw $t5,0x74($sp)
.L0f036890:
/* f036890: 8fa40090 */ lw $a0,0x90($sp)
.L0f036894:
/* f036894: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f036898: 24050001 */ addiu $a1,$zero,0x1
/* f03689c: 8fa20074 */ lw $v0,0x74($sp)
.L0f0368a0:
/* f0368a0: 8fbf0034 */ lw $ra,0x34($sp)
/* f0368a4: 8fb00028 */ lw $s0,0x28($sp)
/* f0368a8: 8fb1002c */ lw $s1,0x2c($sp)
/* f0368ac: 8fb20030 */ lw $s2,0x30($sp)
/* f0368b0: 03e00008 */ jr $ra
/* f0368b4: 27bd0090 */ addiu $sp,$sp,0x90
);
bool propchrHasClearLineToPos(struct prop *prop, struct coord *dstpos, struct coord *vector)
{
return func0f03654c(prop->chr, &prop->pos, prop->rooms, dstpos, NULL, vector, prop->chr->chrwidth * 1.2f, CDTYPE_ALL);
}
bool propchrHasClearLineInVector(struct prop *prop, struct coord *vector, f32 mult)
{
struct coord dstpos;
dstpos.x = vector->x * mult + prop->pos.x;
dstpos.y = prop->pos.y;
dstpos.z = vector->z * mult + prop->pos.z;
return propchrHasClearLineToPos(prop, &dstpos, vector);
}
bool func0f036974(struct prop *prop, struct coord *pos)
{
return func0f03654c(prop->chr, &prop->pos, prop->rooms, pos, NULL, NULL, prop->chr->chrwidth * 1.2f, CDTYPE_ALL);
}
void chrGetSideVectorToTarget(struct chrdata *chr, bool side, struct coord *vector)
{
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
vector->x = 0;
vector->y = 0;
vector->z = 1;
if (target) {
f32 x = target->pos.x - prop->pos.x;
f32 z = target->pos.z - prop->pos.z;
f32 distance = sqrtf(x * x + z * z);
if (distance > 0) {
x = x / distance;
z = z / distance;
if (side) {
vector->x = z;
vector->y = 0;
vector->z = -x;
} else {
vector->x = -z;
vector->y = 0;
vector->z = x;
}
}
}
}
bool chrCanRollInDirection(struct chrdata *chr, bool side, f32 distance)
{
struct prop *prop = chr->prop;
struct coord vector;
struct coord dstpos;
chrGetSideVectorToTarget(chr, side, &vector);
dstpos.x = vector.x * distance + prop->pos.x;
dstpos.y = prop->pos.y;
dstpos.z = vector.z * distance + prop->pos.z;
return propchrHasClearLineToPos(prop, &dstpos, &vector);
}
void chrGetSideVector(struct chrdata *chr, bool side, struct coord *vector)
{
f32 angle = chrGetInverseTheta(chr);
if (side) {
vector->x = cosf(angle);
vector->y = 0;
vector->z = -sinf(angle);
} else {
vector->x = -cosf(angle);
vector->y = 0;
vector->z = sinf(angle);
}
}
bool chrCanJumpInDirection(struct chrdata *chr, bool side, f32 distance)
{
struct prop *prop = chr->prop;
struct coord vector;
struct coord dstpos;
chrGetSideVector(chr, side, &vector);
dstpos.x = vector.x * distance + prop->pos.x;
dstpos.y = prop->pos.y;
dstpos.z = vector.z * distance + prop->pos.z;
return propchrHasClearLineToPos(prop, &dstpos, &vector);
}
GLOBAL_ASM(
glabel func0f036c08
/* f036c08: 27bdff58 */ addiu $sp,$sp,-168
/* f036c0c: afbf002c */ sw $ra,0x2c($sp)
/* f036c10: afb30028 */ sw $s3,0x28($sp)
/* f036c14: afb20024 */ sw $s2,0x24($sp)
/* f036c18: afb10020 */ sw $s1,0x20($sp)
/* f036c1c: afb0001c */ sw $s0,0x1c($sp)
/* f036c20: afa500ac */ sw $a1,0xac($sp)
/* f036c24: afa600b0 */ sw $a2,0xb0($sp)
/* f036c28: 8c88001c */ lw $t0,0x1c($a0)
/* f036c2c: 240e0001 */ addiu $t6,$zero,0x1
/* f036c30: afae0060 */ sw $t6,0x60($sp)
/* f036c34: 8c8f0014 */ lw $t7,0x14($a0)
/* f036c38: 3c13800a */ lui $s3,%hi(g_Vars)
/* f036c3c: 26739fc0 */ addiu $s3,$s3,%lo(g_Vars)
/* f036c40: 000fc080 */ sll $t8,$t7,0x2
/* f036c44: 07010018 */ bgez $t8,.L0f036ca8
/* f036c48: 25040008 */ addiu $a0,$t0,0x8
/* f036c4c: 8e630284 */ lw $v1,0x284($s3)
/* f036c50: 3c098007 */ lui $t1,%hi(g_InCutscene)
/* f036c54: 8c7900d8 */ lw $t9,0xd8($v1)
/* f036c58: 57200049 */ bnezl $t9,.L0f036d80
/* f036c5c: 8fab0060 */ lw $t3,0x60($sp)
/* f036c60: 8d290764 */ lw $t1,%lo(g_InCutscene)($t1)
/* f036c64: 55200046 */ bnezl $t1,.L0f036d80
/* f036c68: 8fab0060 */ lw $t3,0x60($sp)
/* f036c6c: 8c620480 */ lw $v0,0x480($v1)
/* f036c70: 50400007 */ beqzl $v0,.L0f036c90
/* f036c74: 8c6c1c54 */ lw $t4,0x1c54($v1)
/* f036c78: 50400041 */ beqzl $v0,.L0f036d80
/* f036c7c: 8fab0060 */ lw $t3,0x60($sp)
/* f036c80: 804a0037 */ lb $t2,0x37($v0)
/* f036c84: 5540003e */ bnezl $t2,.L0f036d80
/* f036c88: 8fab0060 */ lw $t3,0x60($sp)
/* f036c8c: 8c6c1c54 */ lw $t4,0x1c54($v1)
.L0f036c90:
/* f036c90: 8c6b00c4 */ lw $t3,0xc4($v1)
/* f036c94: 01806827 */ nor $t5,$t4,$zero
/* f036c98: 016d7024 */ and $t6,$t3,$t5
/* f036c9c: 31cf0008 */ andi $t7,$t6,0x8
/* f036ca0: 51e00037 */ beqzl $t7,.L0f036d80
/* f036ca4: 8fab0060 */ lw $t3,0x60($sp)
.L0f036ca8:
/* f036ca8: 3c13800a */ lui $s3,%hi(g_Vars)
/* f036cac: 27b8007c */ addiu $t8,$sp,0x7c
/* f036cb0: 24190014 */ addiu $t9,$zero,0x14
/* f036cb4: 26739fc0 */ addiu $s3,$s3,%lo(g_Vars)
/* f036cb8: afb90014 */ sw $t9,0x14($sp)
/* f036cbc: afb80010 */ sw $t8,0x10($sp)
/* f036cc0: 25050028 */ addiu $a1,$t0,0x28
/* f036cc4: 8fa600ac */ lw $a2,0xac($sp)
/* f036cc8: 0fc1977f */ jal func0f065dfc
/* f036ccc: 27a70064 */ addiu $a3,$sp,0x64
/* f036cd0: 8e690314 */ lw $t1,0x314($s3)
/* f036cd4: 87aa007c */ lh $t2,0x7c($sp)
/* f036cd8: 87af007c */ lh $t7,0x7c($sp)
/* f036cdc: 11200013 */ beqz $t1,.L0f036d2c
/* f036ce0: 2404ffff */ addiu $a0,$zero,-1
/* f036ce4: 108a0025 */ beq $a0,$t2,.L0f036d7c
/* f036ce8: 27a2007c */ addiu $v0,$sp,0x7c
/* f036cec: 3c05800a */ lui $a1,%hi(g_MpRoomVisibility)
/* f036cf0: 8ca5492c */ lw $a1,%lo(g_MpRoomVisibility)($a1)
/* f036cf4: 84430000 */ lh $v1,0x0($v0)
/* f036cf8: 00655821 */ addu $t3,$v1,$a1
.L0f036cfc:
/* f036cfc: 916d0000 */ lbu $t5,0x0($t3)
/* f036d00: 31ae000f */ andi $t6,$t5,0xf
/* f036d04: 51c00004 */ beqzl $t6,.L0f036d18
/* f036d08: 84430002 */ lh $v1,0x2($v0)
/* f036d0c: 1000001b */ b .L0f036d7c
/* f036d10: afa00060 */ sw $zero,0x60($sp)
/* f036d14: 84430002 */ lh $v1,0x2($v0)
.L0f036d18:
/* f036d18: 24420002 */ addiu $v0,$v0,0x2
/* f036d1c: 5483fff7 */ bnel $a0,$v1,.L0f036cfc
/* f036d20: 00655821 */ addu $t3,$v1,$a1
/* f036d24: 10000016 */ b .L0f036d80
/* f036d28: 8fab0060 */ lw $t3,0x60($sp)
.L0f036d2c:
/* f036d2c: 2404ffff */ addiu $a0,$zero,-1
/* f036d30: 108f0012 */ beq $a0,$t7,.L0f036d7c
/* f036d34: 27a2007c */ addiu $v0,$sp,0x7c
/* f036d38: 3c05800a */ lui $a1,%hi(g_Rooms)
/* f036d3c: 8ca54928 */ lw $a1,%lo(g_Rooms)($a1)
/* f036d40: 84430000 */ lh $v1,0x0($v0)
/* f036d44: 2406008c */ addiu $a2,$zero,0x8c
.L0f036d48:
/* f036d48: 00660019 */ multu $v1,$a2
/* f036d4c: 0000c812 */ mflo $t9
/* f036d50: 00b94821 */ addu $t1,$a1,$t9
/* f036d54: 952a0000 */ lhu $t2,0x0($t1)
/* f036d58: 314c0004 */ andi $t4,$t2,0x4
/* f036d5c: 51800004 */ beqzl $t4,.L0f036d70
/* f036d60: 84430002 */ lh $v1,0x2($v0)
/* f036d64: 10000005 */ b .L0f036d7c
/* f036d68: afa00060 */ sw $zero,0x60($sp)
/* f036d6c: 84430002 */ lh $v1,0x2($v0)
.L0f036d70:
/* f036d70: 24420002 */ addiu $v0,$v0,0x2
/* f036d74: 1483fff4 */ bne $a0,$v1,.L0f036d48
/* f036d78: 00000000 */ nop
.L0f036d7c:
/* f036d7c: 8fab0060 */ lw $t3,0x60($sp)
.L0f036d80:
/* f036d80: 51600051 */ beqzl $t3,.L0f036ec8
/* f036d84: 8fbf002c */ lw $ra,0x2c($sp)
/* f036d88: 8e6d006c */ lw $t5,0x6c($s3)
/* f036d8c: 00009025 */ or $s2,$zero,$zero
/* f036d90: 00002825 */ or $a1,$zero,$zero
/* f036d94: 11a00003 */ beqz $t5,.L0f036da4
/* f036d98: 00002025 */ or $a0,$zero,$zero
/* f036d9c: 10000001 */ b .L0f036da4
/* f036da0: 24050001 */ addiu $a1,$zero,0x1
.L0f036da4:
/* f036da4: 8e6e0068 */ lw $t6,0x68($s3)
/* f036da8: 00001825 */ or $v1,$zero,$zero
/* f036dac: 00001025 */ or $v0,$zero,$zero
/* f036db0: 11c00003 */ beqz $t6,.L0f036dc0
/* f036db4: 00126080 */ sll $t4,$s2,0x2
/* f036db8: 10000001 */ b .L0f036dc0
/* f036dbc: 24040001 */ addiu $a0,$zero,0x1
.L0f036dc0:
/* f036dc0: 8e6f0064 */ lw $t7,0x64($s3)
/* f036dc4: 026c8021 */ addu $s0,$s3,$t4
/* f036dc8: 27b10050 */ addiu $s1,$sp,0x50
/* f036dcc: 11e00003 */ beqz $t7,.L0f036ddc
/* f036dd0: 00000000 */ nop
/* f036dd4: 10000001 */ b .L0f036ddc
/* f036dd8: 24030001 */ addiu $v1,$zero,0x1
.L0f036ddc:
/* f036ddc: 8e780070 */ lw $t8,0x70($s3)
/* f036de0: 13000003 */ beqz $t8,.L0f036df0
/* f036de4: 00000000 */ nop
/* f036de8: 10000001 */ b .L0f036df0
/* f036dec: 24020001 */ addiu $v0,$zero,0x1
.L0f036df0:
/* f036df0: 0043c821 */ addu $t9,$v0,$v1
/* f036df4: 03244821 */ addu $t1,$t9,$a0
/* f036df8: 01255021 */ addu $t2,$t1,$a1
/* f036dfc: 59400032 */ blezl $t2,.L0f036ec8
/* f036e00: 8fbf002c */ lw $ra,0x2c($sp)
/* f036e04: 8e0b0064 */ lw $t3,0x64($s0)
.L0f036e08:
/* f036e08: 8fa400ac */ lw $a0,0xac($sp)
/* f036e0c: 8fa600b0 */ lw $a2,0xb0($sp)
/* f036e10: 8d6500bc */ lw $a1,0xbc($t3)
/* f036e14: afa00014 */ sw $zero,0x14($sp)
/* f036e18: afa00010 */ sw $zero,0x10($sp)
/* f036e1c: 02203825 */ or $a3,$s1,$zero
/* f036e20: 0c006052 */ jal func00018148
/* f036e24: 24a50008 */ addiu $a1,$a1,8
/* f036e28: 8e0d0064 */ lw $t5,0x64($s0)
/* f036e2c: 02202825 */ or $a1,$s1,$zero
/* f036e30: 8da400bc */ lw $a0,0xbc($t5)
/* f036e34: 0fc19620 */ jal arrayIntersects
/* f036e38: 24840028 */ addiu $a0,$a0,0x28
/* f036e3c: 10400003 */ beqz $v0,.L0f036e4c
/* f036e40: 00002825 */ or $a1,$zero,$zero
/* f036e44: 1000001f */ b .L0f036ec4
/* f036e48: afa00060 */ sw $zero,0x60($sp)
.L0f036e4c:
/* f036e4c: 8e6e006c */ lw $t6,0x6c($s3)
/* f036e50: 26520001 */ addiu $s2,$s2,0x1
/* f036e54: 26100004 */ addiu $s0,$s0,0x4
/* f036e58: 11c00003 */ beqz $t6,.L0f036e68
/* f036e5c: 00002025 */ or $a0,$zero,$zero
/* f036e60: 10000001 */ b .L0f036e68
/* f036e64: 24050001 */ addiu $a1,$zero,0x1
.L0f036e68:
/* f036e68: 8e6f0068 */ lw $t7,0x68($s3)
/* f036e6c: 00001825 */ or $v1,$zero,$zero
/* f036e70: 00001025 */ or $v0,$zero,$zero
/* f036e74: 11e00003 */ beqz $t7,.L0f036e84
/* f036e78: 00000000 */ nop
/* f036e7c: 10000001 */ b .L0f036e84
/* f036e80: 24040001 */ addiu $a0,$zero,0x1
.L0f036e84:
/* f036e84: 8e780064 */ lw $t8,0x64($s3)
/* f036e88: 13000003 */ beqz $t8,.L0f036e98
/* f036e8c: 00000000 */ nop
/* f036e90: 10000001 */ b .L0f036e98
/* f036e94: 24030001 */ addiu $v1,$zero,0x1
.L0f036e98:
/* f036e98: 8e790070 */ lw $t9,0x70($s3)
/* f036e9c: 13200003 */ beqz $t9,.L0f036eac
/* f036ea0: 00000000 */ nop
/* f036ea4: 10000001 */ b .L0f036eac
/* f036ea8: 24020001 */ addiu $v0,$zero,0x1
.L0f036eac:
/* f036eac: 00434821 */ addu $t1,$v0,$v1
/* f036eb0: 01245021 */ addu $t2,$t1,$a0
/* f036eb4: 01456021 */ addu $t4,$t2,$a1
/* f036eb8: 024c082a */ slt $at,$s2,$t4
/* f036ebc: 5420ffd2 */ bnezl $at,.L0f036e08
/* f036ec0: 8e0b0064 */ lw $t3,0x64($s0)
.L0f036ec4:
/* f036ec4: 8fbf002c */ lw $ra,0x2c($sp)
.L0f036ec8:
/* f036ec8: 8fa20060 */ lw $v0,0x60($sp)
/* f036ecc: 8fb0001c */ lw $s0,0x1c($sp)
/* f036ed0: 8fb10020 */ lw $s1,0x20($sp)
/* f036ed4: 8fb20024 */ lw $s2,0x24($sp)
/* f036ed8: 8fb30028 */ lw $s3,0x28($sp)
/* f036edc: 03e00008 */ jr $ra
/* f036ee0: 27bd00a8 */ addiu $sp,$sp,0xa8
);
void chrGoPosInitCheap(struct chrdata *chr, struct waydata *waydata, struct coord *padpos, struct coord *chrpos)
{
f32 xdiff1 = padpos->x - chr->prop->pos.x;
f32 zdiff1 = padpos->z - chr->prop->pos.z;
f32 angle = atan2f(xdiff1, zdiff1);
f32 xdiff2 = padpos->x - chrpos->x;
f32 zdiff2 = padpos->z - chrpos->z;
waydata->mode = WAYMODE_CHEAP;
waydata->segdisttotal = sqrtf(xdiff1 * xdiff1 + zdiff1 * zdiff1);
waydata->segdistdone = waydata->segdisttotal - sqrtf(xdiff2 * xdiff2 + zdiff2 * zdiff2);
chrSetLookAngle(chr, angle);
}
void chrGoPosGetCurWaypointInfoWithFlags(struct chrdata *chr, struct coord *pos, s16 *rooms, u32 *flags)
{
struct waypoint *waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex];
struct pad pad;
if (waypoint) {
padUnpack(waypoint->padnum, PADFIELD_POS | PADFIELD_ROOM | PADFIELD_FLAGS, &pad);
pos->x = pad.pos.x;
pos->y = pad.pos.y;
pos->z = pad.pos.z;
rooms[0] = pad.room;
rooms[1] = -1;
if (flags) {
*flags = pad.flags;
}
} else {
pos->x = chr->act_gopos.pos.x;
pos->y = chr->act_gopos.pos.y;
pos->z = chr->act_gopos.pos.z;
rooms[0] = chr->act_gopos.rooms[0];
rooms[1] = -1;
if (flags) {
*flags = 0;
}
}
}
void chrGoPosGetCurWaypointInfo(struct chrdata *chr, struct coord *pos, s16 *rooms)
{
chrGoPosGetCurWaypointInfoWithFlags(chr, pos, rooms, NULL);
}
f32 func0f0370a8(struct chrdata *chr)
{
f32 result;
if (chr->aibot) {
result = aibotCalculateMaxSpeed(chr);
} else {
s16 animnum = modelGetAnimNum(chr->model);
result = func0f02dff0(animnum) * (chr->model->scale * 9.999999f);
}
return result;
}
s32 chrGoPosCalculateBaseTtl(struct chrdata *chr)
{
f32 xdiff;
f32 zdiff;
u32 stack;
struct coord pos;
s16 rooms[8];
f32 speed;
chrGoPosGetCurWaypointInfo(chr, &pos, rooms);
xdiff = pos.x - chr->prop->pos.x;
zdiff = pos.z - chr->prop->pos.z;
if (xdiff < 0) {
xdiff = -xdiff;
}
if (zdiff < 0) {
zdiff = -zdiff;
}
speed = func0f0370a8(chr);
if (chr->aibot == NULL) {
speed *= modelGetAbsAnimSpeed(chr->model);
}
if (speed < 0.001f) {
speed = 0.001f;
}
return (xdiff + zdiff) / speed;
}
void chrGoPosClearRestartTtl(struct chrdata *chr)
{
chr->act_gopos.restartttl = 0;
}
void chrGoPosConsiderRestart(struct chrdata *chr)
{
if (chr->act_gopos.waydata.mode != WAYMODE_CHEAP
&& chr->liftaction != LIFTACTION_WAITINGONLIFT
&& chr->liftaction != LIFTACTION_WAITINGFORLIFT) {
if (chr->act_gopos.restartttl == 0) {
#if VERSION >= VERSION_PAL_FINAL
s32 value = (chrGoPosCalculateBaseTtl(chr) * 100 + 15000) / 60;
#else
s32 value = chrGoPosCalculateBaseTtl(chr) * 2 + 300;
#endif
if (value > 0xffff) {
value = 0xffff;
}
chr->act_gopos.restartttl = value;
} else if (chr->act_gopos.restartttl <= (u16)g_Vars.lvupdate240_60) {
if (chr->aibot) {
func0f197544(chr);
} else {
chrGoToPos(chr, &chr->act_gopos.pos, chr->act_gopos.rooms, chr->act_gopos.flags);
}
} else {
chr->act_gopos.restartttl -= (u16)g_Vars.lvupdate240_60;
}
}
}
void chrGoPosInitExpensive(struct chrdata *chr)
{
struct coord pos;
s16 rooms[8];
chrGoPosGetCurWaypointInfo(chr, &pos, rooms);
chr->act_gopos.waydata.mode = WAYMODE_EXPENSIVE;
chr->act_gopos.waydata.unk01 = 0;
chr->act_gopos.waydata.unk02 = 0;
chr->act_gopos.waydata.pos.x = pos.x;
chr->act_gopos.waydata.pos.y = pos.y;
chr->act_gopos.waydata.pos.z = pos.z;
chrGoPosClearRestartTtl(chr);
}
/**
* Advance the chr's current waypoint index to the next one in the route.
*
* The waypoints array allows 6 waypoints and it's important that they have a
* couple loaded in front of their current one. So if the index is moving too
* far into the array, new pathfinding will be done and the array and index will
* be reset.
*/
void chrGoPosAdvanceWaypoint(struct chrdata *chr)
{
if (chr->act_gopos.curindex < 3) {
chr->act_gopos.curindex++;
} else {
struct waypoint *from = chr->act_gopos.waypoints[chr->act_gopos.curindex];
u32 hash;
chr->act_gopos.curindex = 1;
hash = (g_Vars.lvframe60 >> 9) * 0x80 + chr->chrnum * 8;
waypointSetHashThing(hash, hash);
waypointFindRoute(from, chr->act_gopos.target, chr->act_gopos.waypoints, MAX_CHRWAYPOINTS);
waypointSetHashThing(0, 0);
}
chrGoPosInitExpensive(chr);
}
/**
* Determines which step index the chr will be at given their current index, the
* number of steps to take and in which direction (forward or back).
*
* Returns the step index and populates *forward with true or false depending on
* whether the chr will be traversing the path in the forward direction at that
* point.
*/
s32 chrPatrolCalculateStep(struct chrdata *chr, bool *forward, s32 numsteps)
{
s32 nextstep = chr->act_patrol.nextstep;
bool isforward = *forward;
if (numsteps < 0) {
isforward = !isforward;
numsteps = -numsteps;
}
while (numsteps > 0) {
numsteps--;
if (isforward) {
nextstep++;
if (chr->act_patrol.path->pads[nextstep] < 0) {
// Reached the end of the list
if (chr->act_patrol.path->flags & PATHFLAG_CIRCULAR) {
nextstep = 0;
} else {
isforward = false;
nextstep -= 2;
if (nextstep < 0) {
nextstep = 0;
}
}
}
} else {
nextstep--;
if (nextstep < 0) {
// Reached the start of the list
if (chr->act_patrol.path->flags & PATHFLAG_CIRCULAR) {
nextstep = chr->act_patrol.path->len - 1;
} else {
isforward = true;
nextstep = 1;
if (chr->act_patrol.path->len - 1 <= 0) {
nextstep = chr->act_patrol.path->len - 1;
}
}
}
}
}
*forward = isforward;
return nextstep;
}
/**
* Determines which pad number the chr will be at given their current index and
* the number of steps to take.
*/
s16 chrPatrolCalculatePadNum(struct chrdata *chr, s32 numsteps)
{
s32 *padnumptr;
bool forward = chr->act_patrol.forward;
s32 step = chrPatrolCalculateStep(chr, &forward, numsteps);
padnumptr = &chr->act_patrol.path->pads[step];
return *padnumptr;
}
void chrPatrolGetCurWaypointInfoWithFlags(struct chrdata *chr, struct coord *pos, s16 *rooms, u32 *flags)
{
s32 padnum = chrPatrolCalculatePadNum(chr, 0);
struct pad pad;
padUnpack(padnum, PADFIELD_POS | PADFIELD_ROOM | PADFIELD_FLAGS, &pad);
pos->x = pad.pos.x;
pos->y = pad.pos.y;
pos->z = pad.pos.z;
rooms[0] = pad.room;
rooms[1] = -1;
if (flags) {
*flags = pad.flags;
}
}
void chrPatrolGetCurWaypointInfo(struct chrdata *chr, struct coord *pos, s16 *rooms)
{
chrPatrolGetCurWaypointInfoWithFlags(chr, pos, rooms, NULL);
}
void func0f037580(struct chrdata *chr)
{
s16 rooms[8];
chr->act_patrol.waydata.mode = WAYMODE_EXPENSIVE;
chr->act_patrol.waydata.unk01 = 0;
chr->act_patrol.waydata.unk02 = 0;
chrPatrolGetCurWaypointInfo(chr, &chr->act_patrol.waydata.pos, rooms);
}
void func0f0375b0(struct chrdata *chr)
{
s32 nextstep = chrPatrolCalculateStep(chr, &chr->act_patrol.forward, 1);
chr->act_patrol.nextstep = nextstep;
chr->patrolnextstep = nextstep;
func0f037580(chr);
}
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f0375e8
.late_rodata
glabel var7f1a8dac
.word 0x4106ae1e
.text
/* f0375e8: 27bdfed8 */ addiu $sp,$sp,-296
/* f0375ec: afbf0034 */ sw $ra,0x34($sp)
/* f0375f0: afb00030 */ sw $s0,0x30($sp)
/* f0375f4: afa5012c */ sw $a1,0x12c($sp)
/* f0375f8: afa60130 */ sw $a2,0x130($sp)
/* f0375fc: afa70134 */ sw $a3,0x134($sp)
/* f037600: 8c8e001c */ lw $t6,0x1c($a0)
/* f037604: 3c0f800a */ lui $t7,%hi(g_Vars+0x8)
/* f037608: 00808025 */ or $s0,$a0,$zero
/* f03760c: afae00f0 */ sw $t6,0xf0($sp)
/* f037610: a0800009 */ sb $zero,0x9($a0)
/* f037614: 8def9fc8 */ lw $t7,%lo(g_Vars+0x8)($t7)
/* f037618: ac8f00d8 */ sw $t7,0xd8($a0)
/* f03761c: 0c0074a2 */ jal modelGetAbsAnimSpeed
/* f037620: 8c840020 */ lw $a0,0x20($a0)
/* f037624: c7a40130 */ lwc1 $f4,0x130($sp)
/* f037628: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f03762c: c428a00c */ lwc1 $f8,%lo(g_Vars+0x4c)($at)
/* f037630: 46002182 */ mul.s $f6,$f4,$f0
/* f037634: 8fa2012c */ lw $v0,0x12c($sp)
/* f037638: 02002025 */ or $a0,$s0,$zero
/* f03763c: c4500038 */ lwc1 $f16,0x38($v0)
/* f037640: 46083282 */ mul.s $f10,$f6,$f8
/* f037644: c446003c */ lwc1 $f6,0x3c($v0)
/* f037648: 460a8480 */ add.s $f18,$f16,$f10
/* f03764c: e4520038 */ swc1 $f18,0x38($v0)
/* f037650: c4440038 */ lwc1 $f4,0x38($v0)
/* f037654: 4604303e */ c.le.s $f6,$f4
/* f037658: 00000000 */ nop
/* f03765c: 450200d0 */ bc1fl .L0f0379a0
/* f037660: 8fbf0034 */ lw $ra,0x34($sp)
/* f037664: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f037668: 00002825 */ or $a1,$zero,$zero
/* f03766c: 8fa40138 */ lw $a0,0x138($sp)
/* f037670: 0fc195e9 */ jal roomsCopy
/* f037674: 27a50118 */ addiu $a1,$sp,0x118
/* f037678: 02002025 */ or $a0,$s0,$zero
/* f03767c: 8fa50134 */ lw $a1,0x134($sp)
/* f037680: 0fc087ea */ jal func0f021fa8
/* f037684: 27a60118 */ addiu $a2,$sp,0x118
/* f037688: 8e050024 */ lw $a1,0x24($s0)
/* f03768c: 27b80105 */ addiu $t8,$sp,0x105
/* f037690: 27b90102 */ addiu $t9,$sp,0x102
/* f037694: afb90018 */ sw $t9,0x18($sp)
/* f037698: afb80010 */ sw $t8,0x10($sp)
/* f03769c: afa00020 */ sw $zero,0x20($sp)
/* f0376a0: afa0001c */ sw $zero,0x1c($sp)
/* f0376a4: afa00014 */ sw $zero,0x14($sp)
/* f0376a8: 8fa40134 */ lw $a0,0x134($sp)
/* f0376ac: 27a60118 */ addiu $a2,$sp,0x118
/* f0376b0: 0c00a86c */ jal cdFindGroundY
/* f0376b4: 27a70106 */ addiu $a3,$sp,0x106
/* f0376b8: 8fa80134 */ lw $t0,0x134($sp)
/* f0376bc: e7a00108 */ swc1 $f0,0x108($sp)
/* f0376c0: 8fa900f0 */ lw $t1,0xf0($sp)
/* f0376c4: c5080000 */ lwc1 $f8,0x0($t0)
/* f0376c8: 8fa40138 */ lw $a0,0x138($sp)
/* f0376cc: 27a50118 */ addiu $a1,$sp,0x118
/* f0376d0: e7a800f4 */ swc1 $f8,0xf4($sp)
/* f0376d4: c60a00b8 */ lwc1 $f10,0xb8($s0)
/* f0376d8: c530000c */ lwc1 $f16,0xc($t1)
/* f0376dc: 460a8481 */ sub.s $f18,$f16,$f10
/* f0376e0: 46009100 */ add.s $f4,$f18,$f0
/* f0376e4: e7a400f8 */ swc1 $f4,0xf8($sp)
/* f0376e8: c5060008 */ lwc1 $f6,0x8($t0)
/* f0376ec: 0fc195e9 */ jal roomsCopy
/* f0376f0: e7a600fc */ swc1 $f6,0xfc($sp)
/* f0376f4: 02002025 */ or $a0,$s0,$zero
/* f0376f8: 27a500f4 */ addiu $a1,$sp,0xf4
/* f0376fc: 0fc087ea */ jal func0f021fa8
/* f037700: 27a60118 */ addiu $a2,$sp,0x118
/* f037704: 8e04001c */ lw $a0,0x1c($s0)
/* f037708: 27a5010c */ addiu $a1,$sp,0x10c
/* f03770c: 27a60114 */ addiu $a2,$sp,0x114
/* f037710: 0fc0a277 */ jal propChrGetBbox
/* f037714: 27a70110 */ addiu $a3,$sp,0x110
/* f037718: 8fab00f0 */ lw $t3,0xf0($sp)
/* f03771c: 8e050024 */ lw $a1,0x24($s0)
/* f037720: 240a0001 */ addiu $t2,$zero,0x1
/* f037724: afaa0010 */ sw $t2,0x10($sp)
/* f037728: c560000c */ lwc1 $f0,0xc($t3)
/* f03772c: c7a80114 */ lwc1 $f8,0x114($sp)
/* f037730: c7aa0110 */ lwc1 $f10,0x110($sp)
/* f037734: 27a400f4 */ addiu $a0,$sp,0xf4
/* f037738: 46004401 */ sub.s $f16,$f8,$f0
/* f03773c: 27a60118 */ addiu $a2,$sp,0x118
/* f037740: 2407003f */ addiu $a3,$zero,0x3f
/* f037744: 46005481 */ sub.s $f18,$f10,$f0
/* f037748: e7b00014 */ swc1 $f16,0x14($sp)
/* f03774c: 0c00a9a1 */ jal cdTestVolume
/* f037750: e7b20018 */ swc1 $f18,0x18($sp)
/* f037754: 1040007b */ beqz $v0,.L0f037944
/* f037758: 8fa400f0 */ lw $a0,0xf0($sp)
/* f03775c: c7a400f4 */ lwc1 $f4,0xf4($sp)
/* f037760: c7a00108 */ lwc1 $f0,0x108($sp)
/* f037764: 3c017f1b */ lui $at,%hi(var7f1a8dac)
/* f037768: e4840008 */ swc1 $f4,0x8($a0)
/* f03776c: c7a600f8 */ lwc1 $f6,0xf8($sp)
/* f037770: e486000c */ swc1 $f6,0xc($a0)
/* f037774: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f037778: e4880010 */ swc1 $f8,0x10($a0)
/* f03777c: e60000b8 */ swc1 $f0,0xb8($s0)
/* f037780: e60000b4 */ swc1 $f0,0xb4($s0)
/* f037784: c4308dac */ lwc1 $f16,%lo(var7f1a8dac)($at)
/* f037788: 46100282 */ mul.s $f10,$f0,$f16
/* f03778c: e60a00b0 */ swc1 $f10,0xb0($s0)
/* f037790: 97ac0106 */ lhu $t4,0x106($sp)
/* f037794: a60c018a */ sh $t4,0x18a($s0)
/* f037798: 93ad0105 */ lbu $t5,0x105($sp)
/* f03779c: a20d0191 */ sb $t5,0x191($s0)
/* f0377a0: 87ae0102 */ lh $t6,0x102($sp)
/* f0377a4: 0fc19711 */ jal func0f065c44
/* f0377a8: a60e02b2 */ sh $t6,0x2b2($s0)
/* f0377ac: 8fa500f0 */ lw $a1,0xf0($sp)
/* f0377b0: 27a40118 */ addiu $a0,$sp,0x118
/* f0377b4: 0fc195e9 */ jal roomsCopy
/* f0377b8: 24a50028 */ addiu $a1,$a1,0x28
/* f0377bc: 0fc1972c */ jal func0f065cb0
/* f0377c0: 8fa400f0 */ lw $a0,0xf0($sp)
/* f0377c4: 8fa500f0 */ lw $a1,0xf0($sp)
/* f0377c8: 8e040020 */ lw $a0,0x20($s0)
/* f0377cc: 24a50008 */ addiu $a1,$a1,0x8
/* f0377d0: 0c006b4d */ jal modelSetRootPosition
/* f0377d4: afa5003c */ sw $a1,0x3c($sp)
/* f0377d8: 8e040020 */ lw $a0,0x20($s0)
/* f0377dc: 8c8f0008 */ lw $t7,0x8($a0)
/* f0377e0: 0c006a87 */ jal modelGetNodeRwData
/* f0377e4: 8de50000 */ lw $a1,0x0($t7)
/* f0377e8: c7b20108 */ lwc1 $f18,0x108($sp)
/* f0377ec: 2401000e */ addiu $at,$zero,0xe
/* f0377f0: e4520004 */ swc1 $f18,0x4($v0)
/* f0377f4: 8e180018 */ lw $t8,0x18($s0)
/* f0377f8: 82030007 */ lb $v1,0x7($s0)
/* f0377fc: 37190001 */ ori $t9,$t8,0x1
/* f037800: 1461000e */ bne $v1,$at,.L0f03783c
/* f037804: ae190018 */ sw $t9,0x18($s0)
/* f037808: 0fc0dd6c */ jal func0f0375b0
/* f03780c: 02002025 */ or $a0,$s0,$zero
/* f037810: 02002025 */ or $a0,$s0,$zero
/* f037814: 27a500dc */ addiu $a1,$sp,0xdc
/* f037818: 0fc0dd58 */ jal chrPatrolGetCurWaypointInfo
/* f03781c: 27a600cc */ addiu $a2,$sp,0xcc
/* f037820: 02002025 */ or $a0,$s0,$zero
/* f037824: 8fa5012c */ lw $a1,0x12c($sp)
/* f037828: 27a600dc */ addiu $a2,$sp,0xdc
/* f03782c: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f037830: 8fa7003c */ lw $a3,0x3c($sp)
/* f037834: 10000057 */ b .L0f037994
/* f037838: 02002025 */ or $a0,$s0,$zero
.L0f03783c:
/* f03783c: 2401000f */ addiu $at,$zero,0xf
/* f037840: 54610054 */ bnel $v1,$at,.L0f037994
/* f037844: 02002025 */ or $a0,$s0,$zero
/* f037848: 92020064 */ lbu $v0,0x64($s0)
/* f03784c: 00024880 */ sll $t1,$v0,0x2
/* f037850: 02094021 */ addu $t0,$s0,$t1
/* f037854: 8d0a004c */ lw $t2,0x4c($t0)
/* f037858: 1540002d */ bnez $t2,.L0f037910
/* f03785c: 00000000 */ nop
/* f037860: 920b0065 */ lbu $t3,0x65($s0)
/* f037864: 28410002 */ slti $at,$v0,0x2
/* f037868: 316c0008 */ andi $t4,$t3,0x8
/* f03786c: 11800005 */ beqz $t4,.L0f037884
/* f037870: 00000000 */ nop
/* f037874: 0fc0ea5a */ jal chrTryStartPatrol
/* f037878: 02002025 */ or $a0,$s0,$zero
/* f03787c: 10000045 */ b .L0f037994
/* f037880: 02002025 */ or $a0,$s0,$zero
.L0f037884:
/* f037884: 14200012 */ bnez $at,.L0f0378d0
/* f037888: 00026880 */ sll $t5,$v0,0x2
/* f03788c: 020d7021 */ addu $t6,$s0,$t5
/* f037890: 8dc20044 */ lw $v0,0x44($t6)
/* f037894: 24050002 */ addiu $a1,$zero,0x2
/* f037898: 27a60068 */ addiu $a2,$sp,0x68
/* f03789c: 0fc456ac */ jal padUnpack
/* f0378a0: 8c440000 */ lw $a0,0x0($v0)
/* f0378a4: 8faf00f0 */ lw $t7,0xf0($sp)
/* f0378a8: c7a60068 */ lwc1 $f6,0x68($sp)
/* f0378ac: c7b00070 */ lwc1 $f16,0x70($sp)
/* f0378b0: c5e40008 */ lwc1 $f4,0x8($t7)
/* f0378b4: c5e80010 */ lwc1 $f8,0x10($t7)
/* f0378b8: 46062301 */ sub.s $f12,$f4,$f6
/* f0378bc: 0fc259d4 */ jal atan2f
/* f0378c0: 46104381 */ sub.s $f14,$f8,$f16
/* f0378c4: 44050000 */ mfc1 $a1,$f0
/* f0378c8: 0fc0f94e */ jal chrSetLookAngle
/* f0378cc: 02002025 */ or $a0,$s0,$zero
.L0f0378d0:
/* f0378d0: 12000003 */ beqz $s0,.L0f0378e0
/* f0378d4: 00001025 */ or $v0,$zero,$zero
/* f0378d8: 10000001 */ b .L0f0378e0
/* f0378dc: 920202fe */ lbu $v0,0x2fe($s0)
.L0f0378e0:
/* f0378e0: 10400007 */ beqz $v0,.L0f037900
/* f0378e4: 24010001 */ addiu $at,$zero,0x1
/* f0378e8: 12000003 */ beqz $s0,.L0f0378f8
/* f0378ec: 00001025 */ or $v0,$zero,$zero
/* f0378f0: 10000001 */ b .L0f0378f8
/* f0378f4: 920202fe */ lbu $v0,0x2fe($s0)
.L0f0378f8:
/* f0378f8: 54410026 */ bnel $v0,$at,.L0f037994
/* f0378fc: 02002025 */ or $a0,$s0,$zero
.L0f037900:
/* f037900: 0fc0bb57 */ jal chrStop
/* f037904: 02002025 */ or $a0,$s0,$zero
/* f037908: 10000022 */ b .L0f037994
/* f03790c: 02002025 */ or $a0,$s0,$zero
.L0f037910:
/* f037910: 0fc0dccf */ jal chrGoPosAdvanceWaypoint
/* f037914: 02002025 */ or $a0,$s0,$zero
/* f037918: 02002025 */ or $a0,$s0,$zero
/* f03791c: 27a5005c */ addiu $a1,$sp,0x5c
/* f037920: 0fc0dc22 */ jal chrGoPosGetCurWaypointInfo
/* f037924: 27a6004c */ addiu $a2,$sp,0x4c
/* f037928: 02002025 */ or $a0,$s0,$zero
/* f03792c: 8fa5012c */ lw $a1,0x12c($sp)
/* f037930: 27a6005c */ addiu $a2,$sp,0x5c
/* f037934: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f037938: 8fa7003c */ lw $a3,0x3c($sp)
/* f03793c: 10000015 */ b .L0f037994
/* f037940: 02002025 */ or $a0,$s0,$zero
.L0f037944:
/* f037944: 8fa2012c */ lw $v0,0x12c($sp)
/* f037948: 2401000e */ addiu $at,$zero,0xe
/* f03794c: 3c19800a */ lui $t9,%hi(g_Vars+0x8)
/* f037950: c44a003c */ lwc1 $f10,0x3c($v0)
/* f037954: 3c09800a */ lui $t1,%hi(g_Vars+0x8)
/* f037958: e44a0038 */ swc1 $f10,0x38($v0)
/* f03795c: 82180007 */ lb $t8,0x7($s0)
/* f037960: 17010007 */ bne $t8,$at,.L0f037980
/* f037964: 00000000 */ nop
/* f037968: 8f399fc8 */ lw $t9,%lo(g_Vars+0x8)($t9)
/* f03796c: 02002025 */ or $a0,$s0,$zero
/* f037970: 0fc0dd60 */ jal func0f037580
/* f037974: ae190078 */ sw $t9,0x78($s0)
/* f037978: 10000006 */ b .L0f037994
/* f03797c: 02002025 */ or $a0,$s0,$zero
.L0f037980:
/* f037980: 8d299fc8 */ lw $t1,%lo(g_Vars+0x8)($t1)
/* f037984: 02002025 */ or $a0,$s0,$zero
/* f037988: 0fc0dcba */ jal chrGoPosInitExpensive
/* f03798c: ae0900a8 */ sw $t1,0xa8($s0)
/* f037990: 02002025 */ or $a0,$s0,$zero
.L0f037994:
/* f037994: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f037998: 24050001 */ addiu $a1,$zero,0x1
/* f03799c: 8fbf0034 */ lw $ra,0x34($sp)
.L0f0379a0:
/* f0379a0: 8fb00030 */ lw $s0,0x30($sp)
/* f0379a4: 27bd0128 */ addiu $sp,$sp,0x128
/* f0379a8: 03e00008 */ jr $ra
/* f0379ac: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f0375e8
.late_rodata
glabel var7f1a8dac
.word 0x411ffffe
.text
/* f0375e8: 27bdfed8 */ addiu $sp,$sp,-296
/* f0375ec: afbf0034 */ sw $ra,0x34($sp)
/* f0375f0: afb00030 */ sw $s0,0x30($sp)
/* f0375f4: afa5012c */ sw $a1,0x12c($sp)
/* f0375f8: afa60130 */ sw $a2,0x130($sp)
/* f0375fc: afa70134 */ sw $a3,0x134($sp)
/* f037600: 8c8e001c */ lw $t6,0x1c($a0)
/* f037604: 3c0f800a */ lui $t7,%hi(g_Vars+0x8)
/* f037608: 00808025 */ or $s0,$a0,$zero
/* f03760c: afae00f0 */ sw $t6,0xf0($sp)
/* f037610: a0800009 */ sb $zero,0x9($a0)
/* f037614: 8def9fc8 */ lw $t7,%lo(g_Vars+0x8)($t7)
/* f037618: ac8f00d8 */ sw $t7,0xd8($a0)
/* f03761c: 0c0074a2 */ jal modelGetAbsAnimSpeed
/* f037620: 8c840020 */ lw $a0,0x20($a0)
/* f037624: c7a40130 */ lwc1 $f4,0x130($sp)
/* f037628: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f03762c: c428a00c */ lwc1 $f8,%lo(g_Vars+0x4c)($at)
/* f037630: 46002182 */ mul.s $f6,$f4,$f0
/* f037634: 8fa2012c */ lw $v0,0x12c($sp)
/* f037638: 02002025 */ or $a0,$s0,$zero
/* f03763c: c4500038 */ lwc1 $f16,0x38($v0)
/* f037640: 46083282 */ mul.s $f10,$f6,$f8
/* f037644: c446003c */ lwc1 $f6,0x3c($v0)
/* f037648: 460a8480 */ add.s $f18,$f16,$f10
/* f03764c: e4520038 */ swc1 $f18,0x38($v0)
/* f037650: c4440038 */ lwc1 $f4,0x38($v0)
/* f037654: 4604303e */ c.le.s $f6,$f4
/* f037658: 00000000 */ nop
/* f03765c: 450200d0 */ bc1fl .L0f0379a0
/* f037660: 8fbf0034 */ lw $ra,0x34($sp)
/* f037664: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f037668: 00002825 */ or $a1,$zero,$zero
/* f03766c: 8fa40138 */ lw $a0,0x138($sp)
/* f037670: 0fc195e9 */ jal roomsCopy
/* f037674: 27a50118 */ addiu $a1,$sp,0x118
/* f037678: 02002025 */ or $a0,$s0,$zero
/* f03767c: 8fa50134 */ lw $a1,0x134($sp)
/* f037680: 0fc087ea */ jal func0f021fa8
/* f037684: 27a60118 */ addiu $a2,$sp,0x118
/* f037688: 8e050024 */ lw $a1,0x24($s0)
/* f03768c: 27b80105 */ addiu $t8,$sp,0x105
/* f037690: 27b90102 */ addiu $t9,$sp,0x102
/* f037694: afb90018 */ sw $t9,0x18($sp)
/* f037698: afb80010 */ sw $t8,0x10($sp)
/* f03769c: afa00020 */ sw $zero,0x20($sp)
/* f0376a0: afa0001c */ sw $zero,0x1c($sp)
/* f0376a4: afa00014 */ sw $zero,0x14($sp)
/* f0376a8: 8fa40134 */ lw $a0,0x134($sp)
/* f0376ac: 27a60118 */ addiu $a2,$sp,0x118
/* f0376b0: 0c00a86c */ jal cdFindGroundY
/* f0376b4: 27a70106 */ addiu $a3,$sp,0x106
/* f0376b8: 8fa80134 */ lw $t0,0x134($sp)
/* f0376bc: e7a00108 */ swc1 $f0,0x108($sp)
/* f0376c0: 8fa900f0 */ lw $t1,0xf0($sp)
/* f0376c4: c5080000 */ lwc1 $f8,0x0($t0)
/* f0376c8: 8fa40138 */ lw $a0,0x138($sp)
/* f0376cc: 27a50118 */ addiu $a1,$sp,0x118
/* f0376d0: e7a800f4 */ swc1 $f8,0xf4($sp)
/* f0376d4: c60a00b8 */ lwc1 $f10,0xb8($s0)
/* f0376d8: c530000c */ lwc1 $f16,0xc($t1)
/* f0376dc: 460a8481 */ sub.s $f18,$f16,$f10
/* f0376e0: 46009100 */ add.s $f4,$f18,$f0
/* f0376e4: e7a400f8 */ swc1 $f4,0xf8($sp)
/* f0376e8: c5060008 */ lwc1 $f6,0x8($t0)
/* f0376ec: 0fc195e9 */ jal roomsCopy
/* f0376f0: e7a600fc */ swc1 $f6,0xfc($sp)
/* f0376f4: 02002025 */ or $a0,$s0,$zero
/* f0376f8: 27a500f4 */ addiu $a1,$sp,0xf4
/* f0376fc: 0fc087ea */ jal func0f021fa8
/* f037700: 27a60118 */ addiu $a2,$sp,0x118
/* f037704: 8e04001c */ lw $a0,0x1c($s0)
/* f037708: 27a5010c */ addiu $a1,$sp,0x10c
/* f03770c: 27a60114 */ addiu $a2,$sp,0x114
/* f037710: 0fc0a277 */ jal propChrGetBbox
/* f037714: 27a70110 */ addiu $a3,$sp,0x110
/* f037718: 8fab00f0 */ lw $t3,0xf0($sp)
/* f03771c: 8e050024 */ lw $a1,0x24($s0)
/* f037720: 240a0001 */ addiu $t2,$zero,0x1
/* f037724: afaa0010 */ sw $t2,0x10($sp)
/* f037728: c560000c */ lwc1 $f0,0xc($t3)
/* f03772c: c7a80114 */ lwc1 $f8,0x114($sp)
/* f037730: c7aa0110 */ lwc1 $f10,0x110($sp)
/* f037734: 27a400f4 */ addiu $a0,$sp,0xf4
/* f037738: 46004401 */ sub.s $f16,$f8,$f0
/* f03773c: 27a60118 */ addiu $a2,$sp,0x118
/* f037740: 2407003f */ addiu $a3,$zero,0x3f
/* f037744: 46005481 */ sub.s $f18,$f10,$f0
/* f037748: e7b00014 */ swc1 $f16,0x14($sp)
/* f03774c: 0c00a9a1 */ jal cdTestVolume
/* f037750: e7b20018 */ swc1 $f18,0x18($sp)
/* f037754: 1040007b */ beqz $v0,.L0f037944
/* f037758: 8fa400f0 */ lw $a0,0xf0($sp)
/* f03775c: c7a400f4 */ lwc1 $f4,0xf4($sp)
/* f037760: c7a00108 */ lwc1 $f0,0x108($sp)
/* f037764: 3c017f1b */ lui $at,%hi(var7f1a8dac)
/* f037768: e4840008 */ swc1 $f4,0x8($a0)
/* f03776c: c7a600f8 */ lwc1 $f6,0xf8($sp)
/* f037770: e486000c */ swc1 $f6,0xc($a0)
/* f037774: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f037778: e4880010 */ swc1 $f8,0x10($a0)
/* f03777c: e60000b8 */ swc1 $f0,0xb8($s0)
/* f037780: e60000b4 */ swc1 $f0,0xb4($s0)
/* f037784: c4308dac */ lwc1 $f16,%lo(var7f1a8dac)($at)
/* f037788: 46100282 */ mul.s $f10,$f0,$f16
/* f03778c: e60a00b0 */ swc1 $f10,0xb0($s0)
/* f037790: 97ac0106 */ lhu $t4,0x106($sp)
/* f037794: a60c018a */ sh $t4,0x18a($s0)
/* f037798: 93ad0105 */ lbu $t5,0x105($sp)
/* f03779c: a20d0191 */ sb $t5,0x191($s0)
/* f0377a0: 87ae0102 */ lh $t6,0x102($sp)
/* f0377a4: 0fc19711 */ jal func0f065c44
/* f0377a8: a60e02b2 */ sh $t6,0x2b2($s0)
/* f0377ac: 8fa500f0 */ lw $a1,0xf0($sp)
/* f0377b0: 27a40118 */ addiu $a0,$sp,0x118
/* f0377b4: 0fc195e9 */ jal roomsCopy
/* f0377b8: 24a50028 */ addiu $a1,$a1,0x28
/* f0377bc: 0fc1972c */ jal func0f065cb0
/* f0377c0: 8fa400f0 */ lw $a0,0xf0($sp)
/* f0377c4: 8fa500f0 */ lw $a1,0xf0($sp)
/* f0377c8: 8e040020 */ lw $a0,0x20($s0)
/* f0377cc: 24a50008 */ addiu $a1,$a1,0x8
/* f0377d0: 0c006b4d */ jal modelSetRootPosition
/* f0377d4: afa5003c */ sw $a1,0x3c($sp)
/* f0377d8: 8e040020 */ lw $a0,0x20($s0)
/* f0377dc: 8c8f0008 */ lw $t7,0x8($a0)
/* f0377e0: 0c006a87 */ jal modelGetNodeRwData
/* f0377e4: 8de50000 */ lw $a1,0x0($t7)
/* f0377e8: c7b20108 */ lwc1 $f18,0x108($sp)
/* f0377ec: 2401000e */ addiu $at,$zero,0xe
/* f0377f0: e4520004 */ swc1 $f18,0x4($v0)
/* f0377f4: 8e180018 */ lw $t8,0x18($s0)
/* f0377f8: 82030007 */ lb $v1,0x7($s0)
/* f0377fc: 37190001 */ ori $t9,$t8,0x1
/* f037800: 1461000e */ bne $v1,$at,.L0f03783c
/* f037804: ae190018 */ sw $t9,0x18($s0)
/* f037808: 0fc0dd6c */ jal func0f0375b0
/* f03780c: 02002025 */ or $a0,$s0,$zero
/* f037810: 02002025 */ or $a0,$s0,$zero
/* f037814: 27a500dc */ addiu $a1,$sp,0xdc
/* f037818: 0fc0dd58 */ jal chrPatrolGetCurWaypointInfo
/* f03781c: 27a600cc */ addiu $a2,$sp,0xcc
/* f037820: 02002025 */ or $a0,$s0,$zero
/* f037824: 8fa5012c */ lw $a1,0x12c($sp)
/* f037828: 27a600dc */ addiu $a2,$sp,0xdc
/* f03782c: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f037830: 8fa7003c */ lw $a3,0x3c($sp)
/* f037834: 10000057 */ b .L0f037994
/* f037838: 02002025 */ or $a0,$s0,$zero
.L0f03783c:
/* f03783c: 2401000f */ addiu $at,$zero,0xf
/* f037840: 54610054 */ bnel $v1,$at,.L0f037994
/* f037844: 02002025 */ or $a0,$s0,$zero
/* f037848: 92020064 */ lbu $v0,0x64($s0)
/* f03784c: 00024880 */ sll $t1,$v0,0x2
/* f037850: 02094021 */ addu $t0,$s0,$t1
/* f037854: 8d0a004c */ lw $t2,0x4c($t0)
/* f037858: 1540002d */ bnez $t2,.L0f037910
/* f03785c: 00000000 */ nop
/* f037860: 920b0065 */ lbu $t3,0x65($s0)
/* f037864: 28410002 */ slti $at,$v0,0x2
/* f037868: 316c0008 */ andi $t4,$t3,0x8
/* f03786c: 11800005 */ beqz $t4,.L0f037884
/* f037870: 00000000 */ nop
/* f037874: 0fc0ea5a */ jal chrTryStartPatrol
/* f037878: 02002025 */ or $a0,$s0,$zero
/* f03787c: 10000045 */ b .L0f037994
/* f037880: 02002025 */ or $a0,$s0,$zero
.L0f037884:
/* f037884: 14200012 */ bnez $at,.L0f0378d0
/* f037888: 00026880 */ sll $t5,$v0,0x2
/* f03788c: 020d7021 */ addu $t6,$s0,$t5
/* f037890: 8dc20044 */ lw $v0,0x44($t6)
/* f037894: 24050002 */ addiu $a1,$zero,0x2
/* f037898: 27a60068 */ addiu $a2,$sp,0x68
/* f03789c: 0fc456ac */ jal padUnpack
/* f0378a0: 8c440000 */ lw $a0,0x0($v0)
/* f0378a4: 8faf00f0 */ lw $t7,0xf0($sp)
/* f0378a8: c7a60068 */ lwc1 $f6,0x68($sp)
/* f0378ac: c7b00070 */ lwc1 $f16,0x70($sp)
/* f0378b0: c5e40008 */ lwc1 $f4,0x8($t7)
/* f0378b4: c5e80010 */ lwc1 $f8,0x10($t7)
/* f0378b8: 46062301 */ sub.s $f12,$f4,$f6
/* f0378bc: 0fc259d4 */ jal atan2f
/* f0378c0: 46104381 */ sub.s $f14,$f8,$f16
/* f0378c4: 44050000 */ mfc1 $a1,$f0
/* f0378c8: 0fc0f94e */ jal chrSetLookAngle
/* f0378cc: 02002025 */ or $a0,$s0,$zero
.L0f0378d0:
/* f0378d0: 12000003 */ beqz $s0,.L0f0378e0
/* f0378d4: 00001025 */ or $v0,$zero,$zero
/* f0378d8: 10000001 */ b .L0f0378e0
/* f0378dc: 920202fe */ lbu $v0,0x2fe($s0)
.L0f0378e0:
/* f0378e0: 10400007 */ beqz $v0,.L0f037900
/* f0378e4: 24010001 */ addiu $at,$zero,0x1
/* f0378e8: 12000003 */ beqz $s0,.L0f0378f8
/* f0378ec: 00001025 */ or $v0,$zero,$zero
/* f0378f0: 10000001 */ b .L0f0378f8
/* f0378f4: 920202fe */ lbu $v0,0x2fe($s0)
.L0f0378f8:
/* f0378f8: 54410026 */ bnel $v0,$at,.L0f037994
/* f0378fc: 02002025 */ or $a0,$s0,$zero
.L0f037900:
/* f037900: 0fc0bb57 */ jal chrStop
/* f037904: 02002025 */ or $a0,$s0,$zero
/* f037908: 10000022 */ b .L0f037994
/* f03790c: 02002025 */ or $a0,$s0,$zero
.L0f037910:
/* f037910: 0fc0dccf */ jal chrGoPosAdvanceWaypoint
/* f037914: 02002025 */ or $a0,$s0,$zero
/* f037918: 02002025 */ or $a0,$s0,$zero
/* f03791c: 27a5005c */ addiu $a1,$sp,0x5c
/* f037920: 0fc0dc22 */ jal chrGoPosGetCurWaypointInfo
/* f037924: 27a6004c */ addiu $a2,$sp,0x4c
/* f037928: 02002025 */ or $a0,$s0,$zero
/* f03792c: 8fa5012c */ lw $a1,0x12c($sp)
/* f037930: 27a6005c */ addiu $a2,$sp,0x5c
/* f037934: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f037938: 8fa7003c */ lw $a3,0x3c($sp)
/* f03793c: 10000015 */ b .L0f037994
/* f037940: 02002025 */ or $a0,$s0,$zero
.L0f037944:
/* f037944: 8fa2012c */ lw $v0,0x12c($sp)
/* f037948: 2401000e */ addiu $at,$zero,0xe
/* f03794c: 3c19800a */ lui $t9,%hi(g_Vars+0x8)
/* f037950: c44a003c */ lwc1 $f10,0x3c($v0)
/* f037954: 3c09800a */ lui $t1,%hi(g_Vars+0x8)
/* f037958: e44a0038 */ swc1 $f10,0x38($v0)
/* f03795c: 82180007 */ lb $t8,0x7($s0)
/* f037960: 17010007 */ bne $t8,$at,.L0f037980
/* f037964: 00000000 */ nop
/* f037968: 8f399fc8 */ lw $t9,%lo(g_Vars+0x8)($t9)
/* f03796c: 02002025 */ or $a0,$s0,$zero
/* f037970: 0fc0dd60 */ jal func0f037580
/* f037974: ae190078 */ sw $t9,0x78($s0)
/* f037978: 10000006 */ b .L0f037994
/* f03797c: 02002025 */ or $a0,$s0,$zero
.L0f037980:
/* f037980: 8d299fc8 */ lw $t1,%lo(g_Vars+0x8)($t1)
/* f037984: 02002025 */ or $a0,$s0,$zero
/* f037988: 0fc0dcba */ jal chrGoPosInitExpensive
/* f03798c: ae0900a8 */ sw $t1,0xa8($s0)
/* f037990: 02002025 */ or $a0,$s0,$zero
.L0f037994:
/* f037994: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f037998: 24050001 */ addiu $a1,$zero,0x1
/* f03799c: 8fbf0034 */ lw $ra,0x34($sp)
.L0f0379a0:
/* f0379a0: 8fb00030 */ lw $s0,0x30($sp)
/* f0379a4: 27bd0128 */ addiu $sp,$sp,0x128
/* f0379a8: 03e00008 */ jr $ra
/* f0379ac: 00000000 */ nop
);
#endif
/**
* Calculate the chr's position when using the cheap method of navigating.
*
* The cheap method is used when the chr is off-screen. It measures the distance
* between two consecutive pads in the route and simply increments a distance
* value along that segment on each tick, ignoring collisions. Meanwhile, the
* chr's prop->pos is left as the original location where this segment started.
*
* The calculation is finding the fraction of the distance travelled in this
* segment, then finding the position between the starting pos and the pad's
* pos.
*
* The pos variable is used for both loading the next pad's position and for
* returning the new position, which means there's less stack usage.
*/
void chrCalculatePosition(struct chrdata *chr, struct coord *pos)
{
s16 rooms[8];
f32 frac;
if (chr->actiontype == ACT_PATROL && chr->act_patrol.waydata.mode == WAYMODE_CHEAP) {
chrPatrolGetCurWaypointInfo(chr, pos, rooms);
if (!(chr->act_patrol.waydata.segdistdone >= chr->act_patrol.waydata.segdisttotal)
&& chr->act_patrol.waydata.segdisttotal > 0) {
frac = chr->act_patrol.waydata.segdistdone / chr->act_patrol.waydata.segdisttotal;
pos->x = (pos->x - chr->prop->pos.x) * frac + chr->prop->pos.x;
pos->y = (pos->y - chr->prop->pos.y) * frac + chr->prop->pos.y;
pos->z = (pos->z - chr->prop->pos.z) * frac + chr->prop->pos.z;
}
} else if (chr->actiontype == ACT_GOPOS && chr->act_gopos.waydata.mode == WAYMODE_CHEAP) {
chrGoPosGetCurWaypointInfo(chr, pos, rooms);
if (!(chr->act_gopos.waydata.segdistdone >= chr->act_gopos.waydata.segdisttotal)
&& chr->act_gopos.waydata.segdisttotal > 0) {
frac = chr->act_gopos.waydata.segdistdone / chr->act_gopos.waydata.segdisttotal;
pos->x = (pos->x - chr->prop->pos.x) * frac + chr->prop->pos.x;
pos->y = (pos->y - chr->prop->pos.y) * frac + chr->prop->pos.y;
pos->z = (pos->z - chr->prop->pos.z) * frac + chr->prop->pos.z;
}
} else {
pos->x = chr->prop->pos.x;
pos->y = chr->prop->pos.y;
pos->z = chr->prop->pos.z;
}
}
void chrGoPosChooseAnimation(struct chrdata *chr)
{
s32 gospeed = chr->act_gopos.flags & 3;
s32 male = g_HeadsAndBodies[chr->bodynum].ismale;
struct prop *gun1 = chrGetEquippedWeaponProp(chr, 1);
struct prop *gun2 = chrGetEquippedWeaponProp(chr, 0);
s32 flip = false;
s32 heavy;
s32 race = CHRRACE(chr);
s32 anim = -1;
u32 stack;
f32 speed = 0.5;
f32 sp60 = 16;
f32 animspeed = -1;
f32 startframe = 16;
if (chr->actiontype == ACT_GOPOS) {
chr->act_gopos.flags &= ~GOPOSFLAG_20;
}
if (race == RACE_EYESPY || chr->aibot) {
return;
}
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if ((gun1 && gun2) || (!gun1 && !gun2)) {
heavy = false;
flip = random() % 2;
} else {
if (weaponIsOneHanded(gun1) || weaponIsOneHanded(gun2)) {
heavy = false;
flip = (bool)gun1 != false;
} else {
heavy = true;
flip = (bool)gun1 != false;
}
}
if (race == RACE_SKEDAR) {
if (gospeed == SPEED_RUN) {
anim = 0x394;
} else if (gospeed == SPEED_JOG) {
anim = 0x393;
} else if (gospeed == SPEED_WALK) {
anim = 0x392;
}
} else {
if (heavy) {
if (gospeed == SPEED_RUN) {
// Human, heavy weapon, running
if (chr->ivebeenhit == IBH_LFOOT
|| chr->ivebeenhit == IBH_LSHIN
|| chr->ivebeenhit == IBH_LTHIGH
|| chr->ivebeenhit == IBH_RFOOT
|| chr->ivebeenhit == IBH_RSHIN
|| chr->ivebeenhit == IBH_RTHIGH) {
anim = 0x20a;
speed = 0.4;
} else if (chr->ivebeenhit == IBH_LHAND
|| chr->ivebeenhit == IBH_LFOREARM
|| chr->ivebeenhit == IBH_LBICEP
|| chr->ivebeenhit == IBH_RHAND
|| chr->ivebeenhit == IBH_RFOREARM
|| chr->ivebeenhit == IBH_RBICEP) {
anim = 0x20d;
speed = 0.4;
} else {
anim = 0x29;
speed = 0.25;
}
if (chr->chrflags & CHRCFLAG_RUNFASTER) {
animspeed = 0.65;
startframe = 48;
} else {
animspeed = 0.5;
startframe = 48;
}
} else if (gospeed == SPEED_JOG) {
// Human, heavy weapon, jogging
if (chr->ivebeenhit == IBH_LFOOT
|| chr->ivebeenhit == IBH_LSHIN
|| chr->ivebeenhit == IBH_LTHIGH
|| chr->ivebeenhit == IBH_RFOOT
|| chr->ivebeenhit == IBH_RSHIN
|| chr->ivebeenhit == IBH_RTHIGH) {
anim = 0x1f9;
} else if (chr->ivebeenhit == IBH_LHAND
|| chr->ivebeenhit == IBH_LFOREARM
|| chr->ivebeenhit == IBH_LBICEP
|| chr->ivebeenhit == IBH_RHAND
|| chr->ivebeenhit == IBH_RFOREARM
|| chr->ivebeenhit == IBH_RBICEP) {
anim = 0x1f8;
} else {
anim = 0x2a;
}
} else {
// Human, heavy weapon, walking
if (chr->ivebeenhit == IBH_LFOOT
|| chr->ivebeenhit == IBH_LSHIN
|| chr->ivebeenhit == IBH_LTHIGH
|| chr->ivebeenhit == IBH_RFOOT
|| chr->ivebeenhit == IBH_RSHIN
|| chr->ivebeenhit == IBH_RTHIGH) {
anim = 0x1f9;
} else if (chr->ivebeenhit == IBH_LHAND
|| chr->ivebeenhit == IBH_LFOREARM
|| chr->ivebeenhit == IBH_LBICEP
|| chr->ivebeenhit == IBH_RHAND
|| chr->ivebeenhit == IBH_RFOREARM
|| chr->ivebeenhit == IBH_RBICEP) {
anim = 0x1f8;
} else {
if (random() % 2) {
anim = 0x18;
} else {
anim = 0x28;
}
}
}
} else {
if (gospeed == SPEED_RUN) {
// Human, light weapon, running
if (chr->ivebeenhit == IBH_LFOOT
|| chr->ivebeenhit == IBH_LSHIN
|| chr->ivebeenhit == IBH_LTHIGH) {
anim = 0x20a;
flip = true;
speed = 0.4;
} else if (chr->ivebeenhit == IBH_RFOOT
|| chr->ivebeenhit == IBH_RSHIN
|| chr->ivebeenhit == IBH_RTHIGH) {
anim = 0x20a;
speed = 0.4;
flip = false;
} else if (chr->ivebeenhit == IBH_LHAND
|| chr->ivebeenhit == IBH_LFOREARM
|| chr->ivebeenhit == IBH_LBICEP) {
anim = 0x20d;
speed = 0.4;
flip = true;
} else if (chr->ivebeenhit == IBH_RHAND
|| chr->ivebeenhit == IBH_RFOREARM
|| chr->ivebeenhit == IBH_RBICEP) {
anim = 0x20d;
speed = 0.4;
flip = false;
} else if (male) {
if (random() % 4 == 0) {
speed = 0.25;
anim = 0x1e;
} else {
speed = 0.25;
anim = 0x5a;
sp60 = 24;
}
} else {
if (random() % 2) {
anim = 0x5e;
} else {
anim = 0x5a;
}
speed = 0.25;
}
if (chr->chrflags & CHRCFLAG_RUNFASTER) {
animspeed = 0.65;
startframe = 48;
} else {
animspeed = 0.5;
startframe = 48;
}
} else if (gospeed == SPEED_JOG) {
// Human, light weapon, jogging
if (chr->ivebeenhit == IBH_LFOOT
|| chr->ivebeenhit == IBH_LSHIN
|| chr->ivebeenhit == IBH_LTHIGH) {
anim = 0x1f9;
flip = false;
} else if (chr->ivebeenhit == IBH_RFOOT
|| chr->ivebeenhit == IBH_RSHIN
|| chr->ivebeenhit == IBH_RTHIGH) {
anim = 0x1f9;
flip = true;
} else if (chr->ivebeenhit == IBH_LHAND
|| chr->ivebeenhit == IBH_LFOREARM
|| chr->ivebeenhit == IBH_LBICEP) {
anim = 0x1f8;
flip = false;
} else if (chr->ivebeenhit == IBH_RHAND
|| chr->ivebeenhit == IBH_RFOREARM
|| chr->ivebeenhit == IBH_RBICEP) {
anim = 0x1f8;
flip = true;
} else if (stageGetIndex(g_Vars.stagenum) == STAGE_MAIANSOS) {
anim = 0x5f;
} else if (male) {
if (random() % 2) {
anim = 0x1d;
} else {
anim = 0x59;
}
} else {
if (chr->myaction != MA_PANIC) {
if (random() % 2) {
anim = 0x5d;
} else {
anim = 0x73;
}
} else {
anim = 0x21d;
}
}
} else {
// Human, light weapon, walking
s32 anims[] = {0x6b, 0x1b, 0x16};
if (chr->ivebeenhit == IBH_LFOOT
|| chr->ivebeenhit == IBH_LSHIN
|| chr->ivebeenhit == IBH_LTHIGH) {
anim = 0x1f9;
flip = false;
} else if (chr->ivebeenhit == IBH_RFOOT
|| chr->ivebeenhit == IBH_RSHIN
|| chr->ivebeenhit == IBH_RTHIGH) {
anim = 0x1f9;
flip = true;
} else if (chr->ivebeenhit == IBH_LHAND
|| chr->ivebeenhit == IBH_LFOREARM
|| chr->ivebeenhit == IBH_LBICEP) {
anim = 0x1f8;
flip = false;
} else if (chr->ivebeenhit == IBH_RHAND
|| chr->ivebeenhit == IBH_RFOREARM
|| chr->ivebeenhit == IBH_RBICEP) {
anim = 0x1f8;
flip = true;
} else if (male) {
anim = anims[random() % 3];
} else {
if (random() % 2) {
anim = 0x5c;
} else {
anim = 0x72;
}
}
}
}
}
} else if (race == RACE_DRCAROLL) {
if (gospeed == SPEED_RUN) {
anim = 0x160;
} else if (gospeed == SPEED_WALK) {
anim = 0x15f;
} else {
anim = 0x15f;
}
} else if (race == RACE_ROBOT) {
anim = 0x238;
}
if (anim >= 0) {
modelSetAnimation(chr->model, anim, flip, 0, speed, sp60);
if (animspeed > 0) {
modelSetAnimSpeed(chr->model, animspeed, startframe);
}
}
}
bool chrGoToPos(struct chrdata *chr, struct coord *pos, s16 *room, u32 flags)
{
struct prop *prop = chr->prop;
struct waypoint *nextwaypoint;
struct waypoint *lastwaypoint;
struct waypoint *waypoints[MAX_CHRWAYPOINTS];
s32 i;
struct coord curwppos;
s16 curwprooms[8];
s32 isgopos = chr->actiontype == ACT_GOPOS
&& (chr->act_gopos.flags & GOPOSFLAG_SPEED) == (flags & 0xff & GOPOSFLAG_SPEED)
&& !func0f02e064(chr);
s32 ischeap = isgopos && chr->act_gopos.waydata.mode == WAYMODE_CHEAP;
struct coord prevpos;
s32 numwaypoints = 0;
for (i = 0; chr->prop->rooms[i] != -1; i++) {
chr->oldrooms[i] = chr->prop->rooms[i];
}
chr->oldrooms[i] = -1;
if (isgopos && ischeap && chr->act_gopos.waypoints[chr->act_gopos.curindex]) {
nextwaypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex];
} else {
nextwaypoint = waypointFindClosestToPos(&prop->pos, prop->rooms);
}
lastwaypoint = waypointFindClosestToPos(pos, room);
if (nextwaypoint && lastwaypoint) {
waypointSetHashThing(
((g_Vars.lvframe60 >> 9) << 7) + chr->chrnum * 8,
((g_Vars.lvframe60 >> 9) << 7) + chr->chrnum * 8);
numwaypoints = waypointFindRoute(nextwaypoint, lastwaypoint, waypoints, MAX_CHRWAYPOINTS);
waypointSetHashThing(0, 0);
}
if (numwaypoints > 1) {
if (isgopos && ischeap) {
chrCalculatePosition(chr, &prevpos);
} else {
prevpos.x = prop->pos.x;
prevpos.y = prop->pos.y;
prevpos.z = prop->pos.z;
}
chrStopFiring(chr);
chr->actiontype = ACT_GOPOS;
chr->act_gopos.pos.x = pos->x;
chr->act_gopos.pos.y = pos->y;
chr->act_gopos.pos.z = pos->z;
roomsCopy(room, chr->act_gopos.rooms);
chr->act_gopos.target = lastwaypoint;
chr->act_gopos.curindex = 0;
chr->act_gopos.flags = flags | GOPOSFLAG_INIT;
chr->act_gopos.unk0ac = 0;
chr->unk32c_21 = 0;
chr->act_gopos.waydata.age = random() % 100;
chr->act_gopos.waydata.unk03 = 0;
if (!isgopos) {
chr->act_gopos.cheapend60 = -1;
}
for (i = 0; i < MAX_CHRWAYPOINTS; i++) {
chr->act_gopos.waypoints[i] = waypoints[i];
}
chrGoPosInitExpensive(chr);
#if VERSION >= VERSION_NTSC_1_0
chr->goposforce = -1;
#endif
chr->sleep = 0;
chr->liftaction = 0;
chr->act_gopos.flags &= ~(GOPOSFLAG_80 | GOPOSFLAG_DUCK | GOPOSFLAG_20);
chrGoPosGetCurWaypointInfo(chr, &curwppos, curwprooms);
if ((!isgopos || ischeap)
&& g_Vars.normmplayerisrunning == false
&& (prop->flags & (PROPFLAG_80 | PROPFLAG_40 | PROPFLAG_02)) == 0
&& func0f036c08(chr, &curwppos, curwprooms)
&& chr->inlift == false) {
chrGoPosInitCheap(chr, &chr->act_gopos.waydata, &curwppos, &prevpos);
}
if (chr->act_gopos.waydata.mode != WAYMODE_CHEAP
&& modelIsAnimMerging(chr->model) && !chr->aibot) {
chr->hidden |= CHRHFLAG_NEEDANIM;
return true;
} else {
if (!isgopos) {
chrGoPosChooseAnimation(chr);
}
chr->hidden &= ~CHRHFLAG_NEEDANIM;
return true;
}
}
return false;
}
struct path *pathFindById(u32 path_id)
{
s32 i = 0;
for (i = 0; g_StageSetup.paths[i].pads; i++) {
if (path_id == g_StageSetup.paths[i].id) {
return &g_StageSetup.paths[i];
}
}
return NULL;
}
void chrPatrolChooseAnimation(struct chrdata *chr)
{
struct prop *leftprop = chrGetEquippedWeaponProp(chr, HAND_LEFT);
struct prop *rightprop = chrGetEquippedWeaponProp(chr, HAND_RIGHT);
s32 flip;
bool heavy;
s32 race = CHRRACE(chr);
s32 ismale = g_HeadsAndBodies[chr->bodynum].ismale;
f32 speed;
if (race == RACE_EYESPY) {
// empty
} else if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if ((leftprop && rightprop) || (!leftprop && !rightprop)) {
// No weapon, or double weapons
heavy = false;
flip = random() % 2;
} else {
// Single weapon
if (weaponIsOneHanded(leftprop) || weaponIsOneHanded(rightprop)) {
heavy = false;
flip = ((bool)leftprop != false);
} else {
heavy = true;
flip = ((bool)leftprop != false);
}
}
if (race == RACE_SKEDAR) {
modelSetAnimation(chr->model, 0x392, flip, 0, 0.25f, 16);
} else {
speed = 0.5f * func0f02dff0(0x28) / func0f02dff0(0x6b);
if (heavy) {
modelSetAnimation(chr->model, random() % 2 ? 0x18 : 0x28, flip, 0, speed, 16);
} else if (ismale) {
s32 anims[] = { 0x6b, 0x1b, 0x16 };
modelSetAnimation(chr->model, anims[random() % 3], flip, 0, speed, 16);
} else {
modelSetAnimation(chr->model, random() % 2 ? 0x5c : 0x72, flip, 0, speed, 16);
}
}
} else if (race == RACE_DRCAROLL) {
modelSetAnimation(chr->model, 0x15f, false, 0, 0.5f, 16);
} else if (race == RACE_ROBOT) {
modelSetAnimation(chr->model, 0x238, false, 0, 0.5f, 16);
}
}
GLOBAL_ASM(
glabel chrStartPatrol
.late_rodata
glabel var7f1a8dd0
.word 0x3f99999a
.text
/* f038b9c: 27bdfef0 */ addiu $sp,$sp,-272
/* f038ba0: f7b40028 */ sdc1 $f20,0x28($sp)
/* f038ba4: afbf0044 */ sw $ra,0x44($sp)
/* f038ba8: afb40040 */ sw $s4,0x40($sp)
/* f038bac: afb3003c */ sw $s3,0x3c($sp)
/* f038bb0: afb20038 */ sw $s2,0x38($sp)
/* f038bb4: afb10034 */ sw $s1,0x34($sp)
/* f038bb8: afb00030 */ sw $s0,0x30($sp)
/* f038bbc: 4480a000 */ mtc1 $zero,$f20
/* f038bc0: 00809825 */ or $s3,$a0,$zero
/* f038bc4: 00a0a025 */ or $s4,$a1,$zero
/* f038bc8: 2412ffff */ addiu $s2,$zero,-1
/* f038bcc: 10800003 */ beqz $a0,.L0f038bdc
/* f038bd0: 8c91001c */ lw $s1,0x1c($a0)
/* f038bd4: 10000002 */ b .L0f038be0
/* f038bd8: 908202fe */ lbu $v0,0x2fe($a0)
.L0f038bdc:
/* f038bdc: 00001025 */ or $v0,$zero,$zero
.L0f038be0:
/* f038be0: 24010003 */ addiu $at,$zero,0x3
/* f038be4: 504100ca */ beql $v0,$at,.L0f038f10
/* f038be8: 8fbf0044 */ lw $ra,0x44($sp)
/* f038bec: 82620333 */ lb $v0,0x333($s3)
/* f038bf0: 0442002e */ bltzl $v0,.L0f038cac
/* f038bf4: 262b0008 */ addiu $t3,$s1,0x8
/* f038bf8: 968e0006 */ lhu $t6,0x6($s4)
/* f038bfc: 0002c080 */ sll $t8,$v0,0x2
/* f038c00: 004e082a */ slt $at,$v0,$t6
/* f038c04: 50200029 */ beqzl $at,.L0f038cac
/* f038c08: 262b0008 */ addiu $t3,$s1,0x8
/* f038c0c: 8e8f0000 */ lw $t7,0x0($s4)
/* f038c10: 24050042 */ addiu $a1,$zero,0x42
/* f038c14: 27a600a8 */ addiu $a2,$sp,0xa8
/* f038c18: 01f81821 */ addu $v1,$t7,$t8
/* f038c1c: 0fc456ac */ jal padUnpack
/* f038c20: 8c640000 */ lw $a0,0x0($v1)
/* f038c24: 8fb900f0 */ lw $t9,0xf0($sp)
/* f038c28: 2408ffff */ addiu $t0,$zero,-1
/* f038c2c: a7a8007e */ sh $t0,0x7e($sp)
/* f038c30: 02202025 */ or $a0,$s1,$zero
/* f038c34: 27a50070 */ addiu $a1,$sp,0x70
/* f038c38: 27a60078 */ addiu $a2,$sp,0x78
/* f038c3c: 27a70074 */ addiu $a3,$sp,0x74
/* f038c40: 0fc0a277 */ jal propChrGetBbox
/* f038c44: a7b9007c */ sh $t9,0x7c($sp)
/* f038c48: 02602025 */ or $a0,$s3,$zero
/* f038c4c: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f038c50: 00002825 */ or $a1,$zero,$zero
/* f038c54: 24090020 */ addiu $t1,$zero,0x20
/* f038c58: 240a0001 */ addiu $t2,$zero,0x1
/* f038c5c: afaa0014 */ sw $t2,0x14($sp)
/* f038c60: afa90010 */ sw $t1,0x10($sp)
/* f038c64: c620000c */ lwc1 $f0,0xc($s1)
/* f038c68: c7a40078 */ lwc1 $f4,0x78($sp)
/* f038c6c: c7a80074 */ lwc1 $f8,0x74($sp)
/* f038c70: 26240008 */ addiu $a0,$s1,0x8
/* f038c74: 46002181 */ sub.s $f6,$f4,$f0
/* f038c78: 26250028 */ addiu $a1,$s1,0x28
/* f038c7c: 27a600a8 */ addiu $a2,$sp,0xa8
/* f038c80: 46004281 */ sub.s $f10,$f8,$f0
/* f038c84: e7a60018 */ swc1 $f6,0x18($sp)
/* f038c88: 27a7007c */ addiu $a3,$sp,0x7c
/* f038c8c: 0c00b610 */ jal func0002d840
/* f038c90: e7aa001c */ swc1 $f10,0x1c($sp)
/* f038c94: 10400002 */ beqz $v0,.L0f038ca0
/* f038c98: 02602025 */ or $a0,$s3,$zero
/* f038c9c: 82720333 */ lb $s2,0x333($s3)
.L0f038ca0:
/* f038ca0: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f038ca4: 24050001 */ addiu $a1,$zero,0x1
/* f038ca8: 262b0008 */ addiu $t3,$s1,0x8
.L0f038cac:
/* f038cac: 262c0028 */ addiu $t4,$s1,0x28
/* f038cb0: afac0050 */ sw $t4,0x50($sp)
/* f038cb4: 06410028 */ bgez $s2,.L0f038d58
/* f038cb8: afab0054 */ sw $t3,0x54($sp)
/* f038cbc: 8e820000 */ lw $v0,0x0($s4)
/* f038cc0: 00008025 */ or $s0,$zero,$zero
/* f038cc4: 00003825 */ or $a3,$zero,$zero
/* f038cc8: 8c4d0000 */ lw $t5,0x0($v0)
/* f038ccc: 05a00022 */ bltz $t5,.L0f038d58
/* f038cd0: 00107080 */ sll $t6,$s0,0x2
.L0f038cd4:
/* f038cd4: 004e1821 */ addu $v1,$v0,$t6
/* f038cd8: 8c640000 */ lw $a0,0x0($v1)
/* f038cdc: afa7004c */ sw $a3,0x4c($sp)
/* f038ce0: 24050002 */ addiu $a1,$zero,0x2
/* f038ce4: 0fc456ac */ jal padUnpack
/* f038ce8: 27a600a8 */ addiu $a2,$sp,0xa8
/* f038cec: c7b200a8 */ lwc1 $f18,0xa8($sp)
/* f038cf0: c6300008 */ lwc1 $f16,0x8($s1)
/* f038cf4: c7ae00b0 */ lwc1 $f14,0xb0($sp)
/* f038cf8: c62c0010 */ lwc1 $f12,0x10($s1)
/* f038cfc: 46109001 */ sub.s $f0,$f18,$f16
/* f038d00: 8fa7004c */ lw $a3,0x4c($sp)
/* f038d04: 06400009 */ bltz $s2,.L0f038d2c
/* f038d08: 460c7081 */ sub.s $f2,$f14,$f12
/* f038d0c: 46000202 */ mul.s $f8,$f0,$f0
/* f038d10: 00000000 */ nop
/* f038d14: 46021282 */ mul.s $f10,$f2,$f2
/* f038d18: 460a4400 */ add.s $f16,$f8,$f10
/* f038d1c: 4614803c */ c.lt.s $f16,$f20
/* f038d20: 00000000 */ nop
/* f038d24: 45000005 */ bc1f .L0f038d3c
/* f038d28: 00000000 */ nop
.L0f038d2c:
/* f038d2c: 46000482 */ mul.s $f18,$f0,$f0
/* f038d30: 02009025 */ or $s2,$s0,$zero
/* f038d34: 46021102 */ mul.s $f4,$f2,$f2
/* f038d38: 46049500 */ add.s $f20,$f18,$f4
.L0f038d3c:
/* f038d3c: 8e820000 */ lw $v0,0x0($s4)
/* f038d40: 24e70004 */ addiu $a3,$a3,0x4
/* f038d44: 26100001 */ addiu $s0,$s0,0x1
/* f038d48: 00477821 */ addu $t7,$v0,$a3
/* f038d4c: 8df80000 */ lw $t8,0x0($t7)
/* f038d50: 0703ffe0 */ bgezl $t8,.L0f038cd4
/* f038d54: 00107080 */ sll $t6,$s0,0x2
.L0f038d58:
/* f038d58: 8e990000 */ lw $t9,0x0($s4)
/* f038d5c: 00124080 */ sll $t0,$s2,0x2
/* f038d60: 24050042 */ addiu $a1,$zero,0x42
/* f038d64: 03281821 */ addu $v1,$t9,$t0
/* f038d68: 8c640000 */ lw $a0,0x0($v1)
/* f038d6c: 0fc456ac */ jal padUnpack
/* f038d70: 27a600a8 */ addiu $a2,$sp,0xa8
/* f038d74: 8fa900f0 */ lw $t1,0xf0($sp)
/* f038d78: 240affff */ addiu $t2,$zero,-1
/* f038d7c: 27ab007c */ addiu $t3,$sp,0x7c
/* f038d80: a7aa007e */ sh $t2,0x7e($sp)
/* f038d84: afab0010 */ sw $t3,0x10($sp)
/* f038d88: afa00014 */ sw $zero,0x14($sp)
/* f038d8c: 3c017f1b */ lui $at,%hi(var7f1a8dd0)
/* f038d90: a7a9007c */ sh $t1,0x7c($sp)
/* f038d94: c6660024 */ lwc1 $f6,0x24($s3)
/* f038d98: c4288dd0 */ lwc1 $f8,%lo(var7f1a8dd0)($at)
/* f038d9c: 240c0030 */ addiu $t4,$zero,0x30
/* f038da0: afac001c */ sw $t4,0x1c($sp)
/* f038da4: 46083282 */ mul.s $f10,$f6,$f8
/* f038da8: 02602025 */ or $a0,$s3,$zero
/* f038dac: 8fa50054 */ lw $a1,0x54($sp)
/* f038db0: 8fa60050 */ lw $a2,0x50($sp)
/* f038db4: 27a700a8 */ addiu $a3,$sp,0xa8
/* f038db8: 0fc0d953 */ jal func0f03654c
/* f038dbc: e7aa0018 */ swc1 $f10,0x18($sp)
/* f038dc0: 1040004a */ beqz $v0,.L0f038eec
/* f038dc4: 8fa900f0 */ lw $t1,0xf0($sp)
/* f038dc8: 0fc0fe3d */ jal chrStopFiring
/* f038dcc: 02602025 */ or $a0,$s3,$zero
/* f038dd0: 240d000e */ addiu $t5,$zero,0xe
/* f038dd4: 240e0001 */ addiu $t6,$zero,0x1
/* f038dd8: a26d0007 */ sb $t5,0x7($s3)
/* f038ddc: ae74002c */ sw $s4,0x2c($s3)
/* f038de0: ae720030 */ sw $s2,0x30($s3)
/* f038de4: 0c004b70 */ jal random
/* f038de8: ae6e0034 */ sw $t6,0x34($s3)
/* f038dec: 24010064 */ addiu $at,$zero,0x64
/* f038df0: 0041001b */ divu $zero,$v0,$at
/* f038df4: 44808000 */ mtc1 $zero,$f16
/* f038df8: 00007810 */ mfhi $t7
/* f038dfc: 2418ffff */ addiu $t8,$zero,-1
/* f038e00: ae6f0060 */ sw $t7,0x60($s3)
/* f038e04: a260003b */ sb $zero,0x3b($s3)
/* f038e08: ae780078 */ sw $t8,0x78($s3)
/* f038e0c: 02602025 */ or $a0,$s3,$zero
/* f038e10: 0fc0dd60 */ jal func0f037580
/* f038e14: e670007c */ swc1 $f16,0x7c($s3)
/* f038e18: 8e790030 */ lw $t9,0x30($s3)
/* f038e1c: 27b0009c */ addiu $s0,$sp,0x9c
/* f038e20: 27b1008c */ addiu $s1,$sp,0x8c
/* f038e24: a2600008 */ sb $zero,0x8($s3)
/* f038e28: a260032c */ sb $zero,0x32c($s3)
/* f038e2c: 02203025 */ or $a2,$s1,$zero
/* f038e30: 02002825 */ or $a1,$s0,$zero
/* f038e34: 02602025 */ or $a0,$s3,$zero
/* f038e38: 0fc0dd58 */ jal chrPatrolGetCurWaypointInfo
/* f038e3c: a2790333 */ sb $t9,0x333($s3)
/* f038e40: 3c08800a */ lui $t0,%hi(g_Vars+0x318)
/* f038e44: 8d08a2d8 */ lw $t0,%lo(g_Vars+0x318)($t0)
/* f038e48: 55000014 */ bnezl $t0,.L0f038e9c
/* f038e4c: 826e0068 */ lb $t6,0x68($s3)
/* f038e50: 8e69001c */ lw $t1,0x1c($s3)
/* f038e54: 02602025 */ or $a0,$s3,$zero
/* f038e58: 02002825 */ or $a1,$s0,$zero
/* f038e5c: 912a0001 */ lbu $t2,0x1($t1)
/* f038e60: 314b00c2 */ andi $t3,$t2,0xc2
/* f038e64: 5560000d */ bnezl $t3,.L0f038e9c
/* f038e68: 826e0068 */ lb $t6,0x68($s3)
/* f038e6c: 0fc0db02 */ jal func0f036c08
/* f038e70: 02203025 */ or $a2,$s1,$zero
/* f038e74: 50400009 */ beqzl $v0,.L0f038e9c
/* f038e78: 826e0068 */ lb $t6,0x68($s3)
/* f038e7c: 826d032d */ lb $t5,0x32d($s3)
/* f038e80: 02602025 */ or $a0,$s3,$zero
/* f038e84: 26650038 */ addiu $a1,$s3,0x38
/* f038e88: 05a00003 */ bltz $t5,.L0f038e98
/* f038e8c: 02003025 */ or $a2,$s0,$zero
/* f038e90: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f038e94: 8fa70054 */ lw $a3,0x54($sp)
.L0f038e98:
/* f038e98: 826e0068 */ lb $t6,0x68($s3)
.L0f038e9c:
/* f038e9c: 24010006 */ addiu $at,$zero,0x6
/* f038ea0: 11c1000a */ beq $t6,$at,.L0f038ecc
/* f038ea4: 00000000 */ nop
/* f038ea8: 0c0076e5 */ jal modelIsAnimMerging
/* f038eac: 8e640020 */ lw $a0,0x20($s3)
/* f038eb0: 10400006 */ beqz $v0,.L0f038ecc
/* f038eb4: 00000000 */ nop
/* f038eb8: 8e6f0014 */ lw $t7,0x14($s3)
/* f038ebc: 3c010020 */ lui $at,0x20
/* f038ec0: 01e1c025 */ or $t8,$t7,$at
/* f038ec4: 10000011 */ b .L0f038f0c
/* f038ec8: ae780014 */ sw $t8,0x14($s3)
.L0f038ecc:
/* f038ecc: 0fc0e21a */ jal chrPatrolChooseAnimation
/* f038ed0: 02602025 */ or $a0,$s3,$zero
/* f038ed4: 8e790014 */ lw $t9,0x14($s3)
/* f038ed8: 3c01ffdf */ lui $at,0xffdf
/* f038edc: 3421ffff */ ori $at,$at,0xffff
/* f038ee0: 03214024 */ and $t0,$t9,$at
/* f038ee4: 10000009 */ b .L0f038f0c
/* f038ee8: ae680014 */ sw $t0,0x14($s3)
.L0f038eec:
/* f038eec: 240affff */ addiu $t2,$zero,-1
/* f038ef0: a7a90060 */ sh $t1,0x60($sp)
/* f038ef4: a7aa0062 */ sh $t2,0x62($sp)
/* f038ef8: 02602025 */ or $a0,$s3,$zero
/* f038efc: 27a500a8 */ addiu $a1,$sp,0xa8
/* f038f00: 27a60060 */ addiu $a2,$sp,0x60
/* f038f04: 0fc0e10f */ jal chrGoToPos
/* f038f08: 24070008 */ addiu $a3,$zero,0x8
.L0f038f0c:
/* f038f0c: 8fbf0044 */ lw $ra,0x44($sp)
.L0f038f10:
/* f038f10: d7b40028 */ ldc1 $f20,0x28($sp)
/* f038f14: 8fb00030 */ lw $s0,0x30($sp)
/* f038f18: 8fb10034 */ lw $s1,0x34($sp)
/* f038f1c: 8fb20038 */ lw $s2,0x38($sp)
/* f038f20: 8fb3003c */ lw $s3,0x3c($sp)
/* f038f24: 8fb40040 */ lw $s4,0x40($sp)
/* f038f28: 03e00008 */ jr $ra
/* f038f2c: 27bd0110 */ addiu $sp,$sp,0x110
);
//void chrStartPatrol(struct chrdata *chr, struct path *path)
//{
// f32 bestdistance = 0;
// s32 nextstep = -1;
// f32 xdiff;
// f32 zdiff;
// s32 i;
// struct pad pad; // a8
// struct coord nextpos; // 9c
// s16 nextrooms[8]; // 8c
// s16 rooms[8]; // 7c
// f32 ymax; // 78
// f32 ymin; // 74
// f32 width; // 70
// s16 sp60[8]; // 60
// struct prop *prop = chr->prop;
//
// if (CHRRACE(chr) != RACE_EYESPY) {
// // Do some kind of collision test with the pad to resume from...
// // maybe a line of sight check?
// if (chr->patrolnextstep >= 0 && chr->patrolnextstep < path->len) {
// padUnpack(path->pads[chr->patrolnextstep], PADFIELD_POS | PADFIELD_ROOM, &pad);
//
// rooms[0] = pad.room;
// rooms[1] = -1;
//
// propChrGetBbox(prop, &width, &ymax, &ymin);
//
// chrSetOrUnsetHiddenFlag00000100(chr, false);
//
// if (func0002d840(&prop->pos, prop->rooms, &pad.pos, rooms, CDTYPE_BG, 1,
// ymax - prop->pos.y, ymin - prop->pos.y) != CDRESULT_COLLISION) {
// nextstep = chr->patrolnextstep;
// }
//
// chrSetOrUnsetHiddenFlag00000100(chr, true);
// }
//
// // If the pad to resume from is not in sight, find the closest pad
// // to the chr's current position and start from there.
// if (nextstep < 0) {
// for (i = 0; path->pads[i] >= 0; i++) {
// f32 dist;
// padUnpack(path->pads[i], PADFIELD_POS, &pad);
//
// xdiff = pad.pos.x - prop->pos.x;
// zdiff = pad.pos.z - prop->pos.z;
// dist = xdiff * xdiff + zdiff * zdiff;
//
// if (nextstep < 0 || dist < bestdistance) {
// bestdistance = dist;
// nextstep = i;
// }
// }
// }
//
// padUnpack(path->pads[nextstep], PADFIELD_POS | PADFIELD_ROOM, &pad);
//
// rooms[0] = pad.room;
// rooms[1] = -1;
//
// // If chr has line of sight to the pad then begin the patrol,
// // otherwise use gopos to get to the starting pad
// if (func0f03654c(chr, &prop->pos, prop->rooms, &pad.pos, rooms, NULL, chr->chrwidth * 1.2f, CDTYPE_10 | CDTYPE_BG) != CDRESULT_COLLISION) {
// chrStopFiring(chr);
//
// chr->actiontype = ACT_PATROL;
// chr->act_patrol.path = path;
// chr->act_patrol.nextstep = nextstep;
// chr->act_patrol.forward = true;
//
// chr->act_patrol.waydata.age = random() % 100;
// chr->act_patrol.waydata.unk03 = 0;
//
// chr->act_patrol.unk78 = -1;
// chr->act_patrol.unk7c = 0;
//
// func0f037580(chr);
//
// chr->sleep = 0;
// chr->liftaction = LIFTACTION_NOTUSINGLIFT;
// chr->patrolnextstep = chr->act_patrol.nextstep;
//
// chrPatrolGetCurWaypointInfo(chr, &nextpos, nextrooms);
//
// if (!g_Vars.normmplayerisrunning
// && (chr->prop->flags & (PROPFLAG_02 | PROPFLAG_40 | PROPFLAG_80)) == 0
// && func0f036c08(chr, &nextpos, nextrooms)
// && !chr->inlift) {
// chrGoPosInitCheap(chr, &chr->act_patrol.waydata, &nextpos, &prop->pos);
// }
//
// if (chr->act_patrol.waydata.unk30 != 6 && modelIsAnimMerging(chr->model)) {
// chr->hidden |= CHRHFLAG_NEEDANIM;
// } else {
// chrPatrolChooseAnimation(chr);
// chr->hidden &= ~CHRHFLAG_NEEDANIM;
// }
// } else {
// sp60[0] = pad.room;
// sp60[1] = -1;
//
// chrGoToPos(chr, &pad.pos, sp60, GOPOSFLAG_FORPATHSTART);
// }
// }
//}
void chrRecordLastVisibleTargetTime(struct chrdata *chr)
{
chr->lastvisibletarget60 = g_Vars.lvframe60;
}
GLOBAL_ASM(
glabel chrCanSeeEntity
/* f038f40: 27bdff88 */ addiu $sp,$sp,-120
/* f038f44: 8fae0088 */ lw $t6,0x88($sp)
/* f038f48: afbf001c */ sw $ra,0x1c($sp)
/* f038f4c: afa40078 */ sw $a0,0x78($sp)
/* f038f50: 31cf0002 */ andi $t7,$t6,0x2
/* f038f54: afa5007c */ sw $a1,0x7c($sp)
/* f038f58: afa60080 */ sw $a2,0x80($sp)
/* f038f5c: afa70084 */ sw $a3,0x84($sp)
/* f038f60: 11e00004 */ beqz $t7,.L0f038f74
/* f038f64: afa00074 */ sw $zero,0x74($sp)
/* f038f68: 24180001 */ addiu $t8,$zero,0x1
/* f038f6c: 1000009a */ b .L0f0391d8
/* f038f70: afb80074 */ sw $t8,0x74($sp)
.L0f038f74:
/* f038f74: 2419083f */ addiu $t9,$zero,0x83f
/* f038f78: afb9004c */ sw $t9,0x4c($sp)
/* f038f7c: 8fa40078 */ lw $a0,0x78($sp)
/* f038f80: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f038f84: 00002825 */ or $a1,$zero,$zero
/* f038f88: 14400003 */ bnez $v0,.L0f038f98
/* f038f8c: 8fa40078 */ lw $a0,0x78($sp)
/* f038f90: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f038f94: 24050001 */ addiu $a1,$zero,0x1
.L0f038f98:
/* f038f98: 1040000e */ beqz $v0,.L0f038fd4
/* f038f9c: 27a70068 */ addiu $a3,$sp,0x68
/* f038fa0: 8c430004 */ lw $v1,0x4($v0)
/* f038fa4: 24010018 */ addiu $at,$zero,0x18
/* f038fa8: 24080a3f */ addiu $t0,$zero,0xa3f
/* f038fac: 9064005c */ lbu $a0,0x5c($v1)
/* f038fb0: 10810005 */ beq $a0,$at,.L0f038fc8
/* f038fb4: 24010019 */ addiu $at,$zero,0x19
/* f038fb8: 10810003 */ beq $a0,$at,.L0f038fc8
/* f038fbc: 24010034 */ addiu $at,$zero,0x34
/* f038fc0: 14810003 */ bne $a0,$at,.L0f038fd0
/* f038fc4: 240908bf */ addiu $t1,$zero,0x8bf
.L0f038fc8:
/* f038fc8: 10000002 */ b .L0f038fd4
/* f038fcc: afa8004c */ sw $t0,0x4c($sp)
.L0f038fd0:
/* f038fd0: afa9004c */ sw $t1,0x4c($sp)
.L0f038fd4:
/* f038fd4: 27aa0058 */ addiu $t2,$sp,0x58
/* f038fd8: afaa0010 */ sw $t2,0x10($sp)
/* f038fdc: 8fa40078 */ lw $a0,0x78($sp)
/* f038fe0: 8fa50088 */ lw $a1,0x88($sp)
/* f038fe4: 0fc122de */ jal func0f048b78
/* f038fe8: 8fa6008c */ lw $a2,0x8c($sp)
/* f038fec: 8fa40078 */ lw $a0,0x78($sp)
/* f038ff0: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f038ff4: 00002825 */ or $a1,$zero,$zero
/* f038ff8: 8fa20088 */ lw $v0,0x88($sp)
/* f038ffc: 304b0200 */ andi $t3,$v0,0x200
/* f039000: 11600046 */ beqz $t3,.L0f03911c
/* f039004: 304e0004 */ andi $t6,$v0,0x4
/* f039008: 0fc0a221 */ jal chrGetTargetProp
/* f03900c: 8fa40078 */ lw $a0,0x78($sp)
/* f039010: 904c0000 */ lbu $t4,0x0($v0)
/* f039014: 24010006 */ addiu $at,$zero,0x6
/* f039018: 00402025 */ or $a0,$v0,$zero
/* f03901c: 15810003 */ bne $t4,$at,.L0f03902c
/* f039020: 3c0d800a */ lui $t5,%hi(g_Vars+0x324)
/* f039024: 8dada2e4 */ lw $t5,%lo(g_Vars+0x324)($t5)
/* f039028: 11a00068 */ beqz $t5,.L0f0391cc
.L0f03902c:
/* f03902c: 00002825 */ or $a1,$zero,$zero
/* f039030: 0fc1905e */ jal propSetCollisionsEnabled
/* f039034: afa40054 */ sw $a0,0x54($sp)
/* f039038: 8fae0084 */ lw $t6,0x84($sp)
/* f03903c: 8faf0078 */ lw $t7,0x78($sp)
/* f039040: 8fa4007c */ lw $a0,0x7c($sp)
/* f039044: 11c00023 */ beqz $t6,.L0f0390d4
/* f039048: 8fa50080 */ lw $a1,0x80($sp)
/* f03904c: 8df80018 */ lw $t8,0x18($t7)
/* f039050: 33190020 */ andi $t9,$t8,0x20
/* f039054: 53200020 */ beqzl $t9,.L0f0390d8
/* f039058: 8fab004c */ lw $t3,0x4c($sp)
/* f03905c: 8fa4007c */ lw $a0,0x7c($sp)
/* f039060: 3c01428c */ lui $at,0x428c
/* f039064: 44814000 */ mtc1 $at,$f8
/* f039068: c4840000 */ lwc1 $f4,0x0($a0)
/* f03906c: 8fa50080 */ lw $a1,0x80($sp)
/* f039070: 27a60038 */ addiu $a2,$sp,0x38
/* f039074: e7a40038 */ swc1 $f4,0x38($sp)
/* f039078: c4860004 */ lwc1 $f6,0x4($a0)
/* f03907c: 27a70028 */ addiu $a3,$sp,0x28
/* f039080: 46083280 */ add.s $f10,$f6,$f8
/* f039084: e7aa003c */ swc1 $f10,0x3c($sp)
/* f039088: c4900008 */ lwc1 $f16,0x8($a0)
/* f03908c: 0fc19776 */ jal func0f065dd8
/* f039090: e7b00040 */ swc1 $f16,0x40($sp)
/* f039094: 8fa8004c */ lw $t0,0x4c($sp)
/* f039098: 24090010 */ addiu $t1,$zero,0x10
/* f03909c: afa90014 */ sw $t1,0x14($sp)
/* f0390a0: 27a40038 */ addiu $a0,$sp,0x38
/* f0390a4: 27a50028 */ addiu $a1,$sp,0x28
/* f0390a8: 27a60068 */ addiu $a2,$sp,0x68
/* f0390ac: 27a70058 */ addiu $a3,$sp,0x58
/* f0390b0: 0c00b70f */ jal hasLineOfSight
/* f0390b4: afa80010 */ sw $t0,0x10($sp)
/* f0390b8: 50400014 */ beqzl $v0,.L0f03910c
/* f0390bc: 8fa40054 */ lw $a0,0x54($sp)
/* f0390c0: 0fc0e3cc */ jal chrRecordLastVisibleTargetTime
/* f0390c4: 8fa40078 */ lw $a0,0x78($sp)
/* f0390c8: 240a0001 */ addiu $t2,$zero,0x1
/* f0390cc: 1000000e */ b .L0f039108
/* f0390d0: afaa0074 */ sw $t2,0x74($sp)
.L0f0390d4:
/* f0390d4: 8fab004c */ lw $t3,0x4c($sp)
.L0f0390d8:
/* f0390d8: 240c0010 */ addiu $t4,$zero,0x10
/* f0390dc: afac0014 */ sw $t4,0x14($sp)
/* f0390e0: 27a60068 */ addiu $a2,$sp,0x68
/* f0390e4: 27a70058 */ addiu $a3,$sp,0x58
/* f0390e8: 0c00b70f */ jal hasLineOfSight
/* f0390ec: afab0010 */ sw $t3,0x10($sp)
/* f0390f0: 50400006 */ beqzl $v0,.L0f03910c
/* f0390f4: 8fa40054 */ lw $a0,0x54($sp)
/* f0390f8: 0fc0e3cc */ jal chrRecordLastVisibleTargetTime
/* f0390fc: 8fa40078 */ lw $a0,0x78($sp)
/* f039100: 240d0001 */ addiu $t5,$zero,0x1
/* f039104: afad0074 */ sw $t5,0x74($sp)
.L0f039108:
/* f039108: 8fa40054 */ lw $a0,0x54($sp)
.L0f03910c:
/* f03910c: 0fc1905e */ jal propSetCollisionsEnabled
/* f039110: 24050001 */ addiu $a1,$zero,0x1
/* f039114: 1000002e */ b .L0f0391d0
/* f039118: 8fa40078 */ lw $a0,0x78($sp)
.L0f03911c:
/* f03911c: 11c0001e */ beqz $t6,.L0f039198
/* f039120: 30490008 */ andi $t1,$v0,0x8
/* f039124: 8fa40078 */ lw $a0,0x78($sp)
/* f039128: 0fc126d1 */ jal chrFindById
/* f03912c: 8fa5008c */ lw $a1,0x8c($sp)
/* f039130: 10400004 */ beqz $v0,.L0f039144
/* f039134: 00402025 */ or $a0,$v0,$zero
/* f039138: 8c4f001c */ lw $t7,0x1c($v0)
/* f03913c: 55e00003 */ bnezl $t7,.L0f03914c
/* f039140: 00002825 */ or $a1,$zero,$zero
.L0f039144:
/* f039144: 8fa40078 */ lw $a0,0x78($sp)
/* f039148: 00002825 */ or $a1,$zero,$zero
.L0f03914c:
/* f03914c: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f039150: afa40050 */ sw $a0,0x50($sp)
/* f039154: 8fb8004c */ lw $t8,0x4c($sp)
/* f039158: 24190010 */ addiu $t9,$zero,0x10
/* f03915c: afb90014 */ sw $t9,0x14($sp)
/* f039160: 8fa4007c */ lw $a0,0x7c($sp)
/* f039164: 8fa50080 */ lw $a1,0x80($sp)
/* f039168: 27a60068 */ addiu $a2,$sp,0x68
/* f03916c: 27a70058 */ addiu $a3,$sp,0x58
/* f039170: 0c00b70f */ jal hasLineOfSight
/* f039174: afb80010 */ sw $t8,0x10($sp)
/* f039178: 10400003 */ beqz $v0,.L0f039188
/* f03917c: 24050001 */ addiu $a1,$zero,0x1
/* f039180: 24080001 */ addiu $t0,$zero,0x1
/* f039184: afa80074 */ sw $t0,0x74($sp)
.L0f039188:
/* f039188: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f03918c: 8fa40050 */ lw $a0,0x50($sp)
/* f039190: 1000000f */ b .L0f0391d0
/* f039194: 8fa40078 */ lw $a0,0x78($sp)
.L0f039198:
/* f039198: 1120000c */ beqz $t1,.L0f0391cc
/* f03919c: 8fa4007c */ lw $a0,0x7c($sp)
/* f0391a0: 8faa004c */ lw $t2,0x4c($sp)
/* f0391a4: 240b0010 */ addiu $t3,$zero,0x10
/* f0391a8: afab0014 */ sw $t3,0x14($sp)
/* f0391ac: 8fa50080 */ lw $a1,0x80($sp)
/* f0391b0: 27a60068 */ addiu $a2,$sp,0x68
/* f0391b4: 27a70058 */ addiu $a3,$sp,0x58
/* f0391b8: 0c00b70f */ jal hasLineOfSight
/* f0391bc: afaa0010 */ sw $t2,0x10($sp)
/* f0391c0: 10400002 */ beqz $v0,.L0f0391cc
/* f0391c4: 240c0001 */ addiu $t4,$zero,0x1
/* f0391c8: afac0074 */ sw $t4,0x74($sp)
.L0f0391cc:
/* f0391cc: 8fa40078 */ lw $a0,0x78($sp)
.L0f0391d0:
/* f0391d0: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f0391d4: 24050001 */ addiu $a1,$zero,0x1
.L0f0391d8:
/* f0391d8: 8fbf001c */ lw $ra,0x1c($sp)
/* f0391dc: 8fa20074 */ lw $v0,0x74($sp)
/* f0391e0: 27bd0078 */ addiu $sp,$sp,0x78
/* f0391e4: 03e00008 */ jr $ra
/* f0391e8: 00000000 */ nop
);
bool chrCanSeeAttackTarget(struct chrdata *chr, struct coord *pos, s16 *rooms, bool arg3)
{
u32 entitytype = ENTITYTYPE_TARGET;
u32 entityid = 0;
if (chr->actiontype == ACT_ATTACK) {
entitytype = chr->act_attack.entitytype;
entityid = chr->act_attack.entityid;
}
return chrCanSeeEntity(chr, pos, rooms, arg3, entitytype, entityid);
}
bool chrCanSeeChr(struct chrdata *chr, struct chrdata *target, s16 *room)
{
bool cansee = false;
u32 stack;
s16 sp88[] = {-1, 0, 0, 0, 0, 0, 0, 0};
if (func0f19294c(chr, target) == 0) {
struct prop *prop = chr->prop;
struct coord pos;
s16 rooms[8];
pos.x = prop->pos.x;
pos.y = chr->ground + chr->chrheight - 20;
pos.z = prop->pos.z;
chrSetOrUnsetHiddenFlag00000100(chr, false);
chrSetOrUnsetHiddenFlag00000100(target, false);
func0f065e74(&prop->pos, prop->rooms, &pos, rooms);
if (func0002dcfc(&pos, rooms, &target->prop->pos, target->prop->rooms, sp88, 307, 8)) {
cansee = true;
}
chrSetOrUnsetHiddenFlag00000100(chr, true);
chrSetOrUnsetHiddenFlag00000100(target, true);
}
if (room) {
*room = sp88[0];
}
return cansee;
}
u32 var80068298 = 0x01000000;
u32 var8006829c = 0x0000027c;
u32 var800682a0 = 0x00000005;
u32 var800682a4 = 0x00140000;
u32 var800682a8 = 0x42700000;
u32 var800682ac = 0x0000027d;
u32 var800682b0 = 0x00000005;
u32 var800682b4 = 0x00140000;
u32 var800682b8 = 0x41f80000;
u32 var800682bc = 0x0000027e;
u32 var800682c0 = 0x00000005;
u32 var800682c4 = 0x00140000;
u32 var800682c8 = 0x42400000;
u32 var800682cc = 0x0000027f;
u32 var800682d0 = 0x00000005;
u32 var800682d4 = 0x00140000;
u32 var800682d8 = 0x428a0000;
u32 var800682dc = 0x00000212;
u32 var800682e0 = 0x00000005;
u32 var800682e4 = 0x00140000;
u32 var800682e8 = 0x42800000;
u32 var800682ec = 0x00000213;
u32 var800682f0 = 0x00000005;
u32 var800682f4 = 0x00140000;
u32 var800682f8 = 0x42500000;
u32 var800682fc = 0x00000214;
u32 var80068300 = 0x00000005;
u32 var80068304 = 0x00140000;
u32 var80068308 = 0x424c0000;
u32 var8006830c = 0x0000020e;
u32 var80068310 = 0x00000005;
u32 var80068314 = 0x00140000;
u32 var80068318 = 0x42540000;
u32 var8006831c = 0x0000020f;
u32 var80068320 = 0x00000005;
u32 var80068324 = 0x00140000;
u32 var80068328 = 0x42b20000;
u32 var8006832c = 0x00000210;
u32 var80068330 = 0x00000005;
u32 var80068334 = 0x00140000;
u32 var80068338 = 0x428e0000;
u32 var8006833c = 0x00000215;
u32 var80068340 = 0x00000005;
u32 var80068344 = 0x00140000;
u32 var80068348 = 0x42780000;
u32 var8006834c = 0x00000211;
u32 var80068350 = 0x00000005;
u32 var80068354 = 0x00140000;
u32 var80068358 = 0x42900000;
u32 var8006835c = 0x0000034c;
u32 var80068360 = 0x0000000f;
u32 var80068364 = 0x00190000;
u32 var80068368 = 0x42c80000;
u32 var8006836c = 0x0000034d;
u32 var80068370 = 0x0000000f;
u32 var80068374 = 0x00190000;
u32 var80068378 = 0xbf800000;
u32 var8006837c = 0x00000395;
u32 var80068380 = 0x0000000f;
u32 var80068384 = 0x00190000;
u32 var80068388 = 0xbf800000;
u32 var8006838c = 0x00000346;
u32 var80068390 = 0x0000000f;
u32 var80068394 = 0x00190000;
u32 var80068398 = 0xbf800000;
u32 var8006839c = 0x00000347;
u32 var800683a0 = 0x0000000f;
u32 var800683a4 = 0x00190000;
u32 var800683a8 = 0xbf800000;
u32 var800683ac = 0x0000034f;
bool chrCanSeeTarget(struct chrdata *chr)
{
bool cansee;
struct prop *prop = chrGetTargetProp(chr);
cansee = chrCanSeeChr(chr, prop->chr, NULL);
if (cansee) {
chrRecordLastVisibleTargetTime(chr);
}
return cansee;
}
bool chrHasLineOfSightToPos(struct chrdata *viewerchr, struct coord *pos, s16 *rooms)
{
struct prop *viewerprop = viewerchr->prop;
bool result = false;
struct coord viewerpos;
s16 viewerrooms[8];
viewerpos.x = viewerprop->pos.x;
viewerpos.y = viewerchr->ground + viewerchr->chrheight - 20;
viewerpos.z = viewerprop->pos.z;
chrSetOrUnsetHiddenFlag00000100(viewerchr, false);
func0f065e74(&viewerprop->pos, viewerprop->rooms, &viewerpos, viewerrooms);
if (hasLineOfSight(&viewerpos, viewerrooms, pos, rooms, 307, 8)) {
result = true;
}
chrSetOrUnsetHiddenFlag00000100(viewerchr, true);
return result;
}
bool chrCanSeePos(struct chrdata *chr, struct coord *pos, s16 *rooms)
{
f32 facingangle = chrGetInverseTheta(chr);
f32 posangle = atan2f(pos->x - chr->prop->pos.x, pos->z - chr->prop->pos.z);
f32 diffangle = posangle - facingangle;
if (posangle < facingangle) {
diffangle += M_BADTAU;
}
// This check is pointless because chrHasLineOfSightToPos is called
// with the same arguments regardless.
if ((diffangle < 1.7450513839722f || diffangle > 4.5371336936951f)
&& chrHasFlag(chr, CHRFLAG1_00200000, BANK_1) == false) {
return chrHasLineOfSightToPos(chr, pos, rooms);
}
return chrHasLineOfSightToPos(chr, pos, rooms);
}
bool chrCanSeeProp(struct chrdata *chr, struct prop *prop)
{
bool result;
propSetCollisionsEnabled(prop, false);
result = chrCanSeePos(chr, &prop->pos, prop->rooms);
propSetCollisionsEnabled(prop, true);
return result;
}
void chrRecordLastSeeTargetTime(struct chrdata *chr)
{
chr->lastseetarget60 = g_Vars.lvframe60;
}
void chrRecordLastHearTargetTime(struct chrdata *chr)
{
chr->hidden |= CHRHFLAG_IS_HEARING_TARGET;
chr->lastheartarget60 = g_Vars.lvframe60;
}
bool chrIsStopped(struct chrdata *chr)
{
s16 anim = modelGetAnimNum(chr->model);
if (anim == ANIM_SNIPING_0269 || anim == ANIM_SNIPING_026B) {
return false;
}
if (anim == ANIM_SNIPING_026A
&& chr->act_attack.unk034 <= chr->act_attack.unk033) {
chrStopFiring(chr);
return true;
}
if (chr->actiontype == ACT_ROBOTATTACK && chr->act_robotattack.unk06e) {
return true;
}
if (chr->actiontype == ACT_ATTACKAMOUNT
&& chr->act_attackamount.unk034 <= chr->act_attackamount.unk033) {
return true;
}
if (chr->actiontype == ACT_STAND
&& chr->act_stand.unk02c == 0
&& chr->act_stand.unk038 == 0
&& chr->act_stand.unk03c != 1) {
return true;
}
if (chr->actiontype == ACT_ANIM) {
if (chr->act_anim.unk034
|| (modelGetAnimSpeed(chr->model) >= 0 && modelGetCurAnimFrame(chr->model) >= modelGetAnimEndFrame(chr->model))
|| (modelGetAnimSpeed(chr->model) < 0 && modelGetCurAnimFrame(chr->model) <= 0)) {
return true;
}
} else if (chr->actiontype == ACT_PATROL) {
return true;
}
return false;
}
bool chrCheckTargetInSight(struct chrdata *chr)
{
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
f32 sqdistance;
f32 fVar5 = chrGetInverseTheta(chr);
f32 x = target->pos.x - prop->pos.x;
f32 y = target->pos.y - prop->pos.y;
f32 z = target->pos.z - prop->pos.z;
f32 fVar6 = atan2f(x, z);
f32 angle = fVar6 - fVar5;
bool result = false;
if (fVar6 < fVar5) {
angle += M_BADTAU;
}
sqdistance = x * x + y * y + z * z;
if ((sqdistance < chr->visionrange * chr->visionrange * 10000.0f && (angle < 1.9195564985275f || angle > 4.3626284599304f))
|| (sqdistance < 40000.0f && (angle < 1.9195564985275f || angle > 4.3626284599304f))) {
result = false;
if (sqdistance < func0f1657e4()) {
f32 tmp;
s32 iVar8 = (sqrtf(sqdistance) * 0.0018749999580905f);
s32 tmp2;
if (angle > 0.7852731347084f && angle < 5.4969120025635f) {
tmp = angle;
if (tmp > M_PI) {
tmp = M_BADTAU - angle;
}
tmp -= 0.7852731347084f;
tmp2 = tmp * 3.8203268051147f;
iVar8 *= 1 + tmp2;
}
iVar8 = chrGetPercentageOfSlowness(chr, iVar8) + 1;
result = random() % iVar8 == 0;
}
}
if (result) {
result = chrCanSeeTarget(chr);
}
if (result) {
chrRecordLastSeeTargetTime(chr);
}
return result;
}
bool chrIsReadyForOrders(struct chrdata *chr)
{
if (chr->onladder) {
return false;
}
switch (chr->actiontype) {
case ACT_DIE:
case ACT_DEAD:
case ACT_PREARGH:
case ACT_DRUGGEDDROP:
case ACT_DRUGGEDKO:
case ACT_DRUGGEDCOMINGUP:
#if VERSION < VERSION_NTSC_1_0
case ACT_ARGH:
case 0x200:
#endif
return false;
#if VERSION >= VERSION_NTSC_1_0
case ACT_ARGH:
if ((chr->chrflags & CHRCFLAG_00000200) == 0) {
return false;
}
break;
#endif
case ACT_ROBOTATTACK:
if (!chr->act_robotattack.unk06e) {
return false;
}
break;
}
return true;
}
bool chrIsDead(struct chrdata *chr)
{
if (!chr || chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD) {
return true;
}
if (chr->prop && chr->prop->type == PROPTYPE_PLAYER) {
u32 playernum = propGetPlayerNum(chr->prop);
if (g_Vars.players[playernum]->isdead) {
return true;
}
}
return false;
}
bool chrTrySidestep(struct chrdata *chr)
{
u8 race = CHRRACE(chr);
if ((race == RACE_HUMAN || race == RACE_SKEDAR)
&& chrIsReadyForOrders(chr)) {
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
f32 a = chrGetInverseTheta(chr);
f32 b = atan2f(target->pos.x - prop->pos.x, target->pos.z - prop->pos.z);
f32 angle = b - a;
u32 stack[2];
if (b < a) {
angle += M_BADTAU;
}
if (angle < 0.7852731347084f || angle > 5.4969120025635f
|| (angle > 2.3558194637299f && angle < 3.9263656139374f)) {
bool side = (random() % 2) == 0;
if (chrCanJumpInDirection(chr, side, 100)) {
chrSidestep(chr, side);
return true;
}
if (chrCanJumpInDirection(chr, !side, 100)) {
chrSidestep(chr, !side);
return true;
}
}
}
return false;
}
bool chrTryJumpOut(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
f32 a = chrGetInverseTheta(chr);
f32 b = atan2f(target->pos.x - prop->pos.x, target->pos.z - prop->pos.z);
f32 angle = b - a;
u32 stack[2];
if (b < a) {
angle += M_BADTAU;
}
// This commented code is what the floats represent, but mismatches due
// to float precision:
//if (angle < BADDEG2RAD(45) || angle > BADDEG2RAD(315)
// || (angle > BADDEG2RAD(135) && angle < BADDEG2RAD(225))) {
if (angle < 0.7852731347084f || angle > 5.4969120025635f
|| (angle > 2.3558194637299f && angle < BADDEG2RAD(225))) {
bool side = (random() % 2) == 0;
if (chrCanJumpInDirection(chr, side, 200)) {
chrJumpOut(chr, side);
return true;
}
if (chrCanJumpInDirection(chr, !side, 200)) {
chrJumpOut(chr, !side);
return true;
}
}
}
return false;
}
bool chrTryRunSideways(struct chrdata *chr)
{
u32 race = CHRRACE(chr);
if ((race == RACE_HUMAN || race == RACE_SKEDAR)
&& chrIsReadyForOrders(chr)
&& g_Vars.lvframe60 - chr->lastwalk60 > PALDOWN(180)) {
struct prop *prop = chr->prop;
f32 distance = 200.0f + random() * (1.0f / U32_MAX) * 200.0f;
struct coord vector;
struct coord dstpos;
chrGetSideVectorToTarget(chr, random() % 2 == 0, &vector);
dstpos.x = vector.x * distance + prop->pos.x;
dstpos.y = prop->pos.y;
dstpos.z = vector.z * distance + prop->pos.z;
if (propchrHasClearLineToPos(prop, &dstpos, &vector)) {
chrRunToPos(chr, &dstpos);
return true;
}
vector.x = -vector.x;
vector.z = -vector.z;
dstpos.x = vector.x * distance + prop->pos.x;
dstpos.y = prop->pos.y;
dstpos.z = vector.z * distance + prop->pos.z;
if (propchrHasClearLineToPos(prop, &dstpos, &vector)) {
chrRunToPos(chr, &dstpos);
return true;
}
}
return false;
}
bool chrTryAttackWalk(struct chrdata *chr)
{
u32 race = CHRRACE(chr);
if (race == RACE_DRCAROLL || race == RACE_EYESPY) {
return false;
}
if (chrIsReadyForOrders(chr)) {
struct prop *prop = chr->prop;
if (chrCanSeeAttackTarget(chr, &prop->pos, prop->rooms, 0)
&& (chrGetEquippedWeaponPropWithCheck(chr, 0) || chrGetEquippedWeaponPropWithCheck(chr, 1))
&& g_Vars.lvframe60 - chr->lastwalk60 > PALDOWN(120)) {
struct prop *target = chrGetTargetProp(chr);
f32 x = target->pos.x - prop->pos.x;
f32 y = target->pos.y - prop->pos.y;
f32 z = target->pos.z - prop->pos.z;
if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000000.0f) {
chrAttackWalk(chr, SPEED_WALK);
return true;
}
}
}
return false;
}
bool chrTryAttackRun(struct chrdata *chr)
{
u32 race = CHRRACE(chr);
if (race == RACE_DRCAROLL || race == RACE_EYESPY) {
return false;
}
if (chrIsReadyForOrders(chr)) {
struct prop *prop = chr->prop;
if (chrCanSeeAttackTarget(chr, &prop->pos, prop->rooms, 0)
&& (chrGetEquippedWeaponPropWithCheck(chr, 0) || chrGetEquippedWeaponPropWithCheck(chr, 1))
&& g_Vars.lvframe60 - chr->lastwalk60 > PALDOWN(180)) {
struct prop *target = chrGetTargetProp(chr);
f32 x = target->pos.x - prop->pos.x;
f32 y = target->pos.y - prop->pos.y;
f32 z = target->pos.z - prop->pos.z;
if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000000.0f) {
chrAttackWalk(chr, SPEED_JOG);
return true;
}
}
}
return false;
}
bool chrTryAttackRoll(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
struct prop *prop = chr->prop;
if (chrCanSeeAttackTarget(chr, &prop->pos, prop->rooms, 0) &&
(chrGetEquippedWeaponPropWithCheck(chr, 0) || chrGetEquippedWeaponPropWithCheck(chr, 1))) {
struct prop *target = chrGetTargetProp(chr);
f32 x = target->pos.x - prop->pos.x;
f32 y = target->pos.y - prop->pos.y;
f32 z = target->pos.z - prop->pos.z;
f32 sqdistance = x * x + y * y + z * z;
if (sqdistance >= 40000.0f) {
bool side = (random() & 1) == 0;
if (chrCanRollInDirection(chr, side, 200)) {
chrAttackRoll(chr, side);
return true;
}
if (chrCanRollInDirection(chr, !side, 200)) {
chrAttackRoll(chr, !side);
return true;
}
}
}
}
return false;
}
bool chrTryAttackAmount(struct chrdata *chr, u32 arg1, u32 arg2, u8 lower, u8 upper)
{
u8 race = CHRRACE(chr);
if ((race == RACE_HUMAN || race == RACE_SKEDAR)
&& chrIsReadyForOrders(chr)
&& chr->weapons_held[0]) {
s32 quantity;
f32 percentage;
struct weaponobj *weapon = chr->weapons_held[0]->weapon;
struct inventory_ammo *ammo;
quantity = 1;
if (upper > 100) {
upper = 100;
}
if (lower < upper) {
percentage = ((random() % (upper - lower)) + (u32)lower) * 0.01f;
} else {
percentage = 0;
}
ammo = weaponGetAmmoByFunction(weapon->weaponnum, 0);
if (ammo) {
quantity = ammo->clipsize * percentage;
}
if (quantity < 1) {
quantity = 1;
}
chr->aimendrshoulder = 0;
chr->aimendlshoulder = 0;
chr->aimendback = 0;
chr->aimendsideback = 0;
chr->aimendcount = 10;
chrAttackAmount(chr, arg1, arg2, quantity);
return true;
}
return false;
}
bool chrTryAttackStand(struct chrdata *chr, s32 entitytype, s32 entityid)
{
s32 race = CHRRACE(chr);
if (race == RACE_DRCAROLL || race == RACE_EYESPY) {
return false;
}
if (chrIsReadyForOrders(chr)) {
if (race == RACE_ROBOT) {
robotAttack(chr);
return true;
}
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (chrGetEquippedWeaponPropWithCheck(chr, 0) ||
(chrGetEquippedWeaponPropWithCheck(chr, 1))) {
chrAttackStand(chr, entitytype, entityid);
return true;
}
}
}
return false;
}
bool chrTryAttackKneel(struct chrdata *chr, s32 entitytype, s32 entityid)
{
s32 race = CHRRACE(chr);
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (chrIsReadyForOrders(chr) && (chrGetEquippedWeaponPropWithCheck(chr, 0) || chrGetEquippedWeaponPropWithCheck(chr, 1))) {
chrAttackKneel(chr, entitytype, entityid);
return true;
}
}
return false;
}
bool chrTryAttackLie(struct chrdata *chr, s32 entitytype, s32 entityid)
{
s32 race = CHRRACE(chr);
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (chrIsReadyForOrders(chr) && (chrGetEquippedWeaponPropWithCheck(chr, 0) || chrGetEquippedWeaponPropWithCheck(chr, 1))) {
chrAttackLie(chr, entitytype, entityid);
return true;
}
}
return false;
}
bool chrTryModifyAttack(struct chrdata *chr, u32 entitytype, s32 entityid)
{
s32 race = CHRRACE(chr);
if (race == RACE_DRCAROLL || race == RACE_EYESPY) {
return false;
}
if (chr->actiontype == ACT_ATTACK
&& (chr->act_attack.entitytype & (ENTITYTYPE_AIMONLY | ENTITYTYPE_DONTTURN))) {
chr->act_attack.entitytype = entitytype;
chr->act_attack.entityid = entityid;
func0f031254(chr);
return true;
}
return false;
}
bool chrFaceEntity(struct chrdata *chr, u32 entitytype, u32 entityid)
{
if (chrIsReadyForOrders(chr)) {
if (chr->actiontype != ACT_STAND) {
chrStand(chr);
}
if (entitytype != chr->act_stand.face_entitytype ||
entityid != chr->act_stand.face_entityid) {
chr->act_stand.face_entitytype = entitytype;
chr->act_stand.face_entityid = entityid;
chr->act_stand.unk038 = 0;
chr->act_stand.unk040 = 0;
if (entitytype == ENTITYTYPE_TARGET && entityid == 1) {
chr->act_stand.face_target = true;
chr->act_stand.face_entityid = 0;
}
}
return true;
}
return false;
}
bool chrGoToPad(struct chrdata *chr, s32 padnum, u32 speed)
{
if (padnum >= 0
&& chrIsReadyForOrders(chr)
#if VERSION >= VERSION_NTSC_1_0
&& (var80062cbc <= 8
|| (chr->hidden & CHRHFLAG_00400000) == 0
|| (chr->flags & CHRFLAG0_CAN_GO_TO_PLACES))
#else
&& var80062cbc <= 9
#endif
) {
padnum = chrResolvePadId(chr, padnum);
#if VERSION >= VERSION_NTSC_1_0
if (padnum >= 0)
#endif
{
s16 rooms[2];
struct pad pad;
padUnpack(padnum, PADFIELD_ROOM | PADFIELD_POS, &pad);
rooms[0] = pad.room;
rooms[1] = -1;
if (chrGoToPos(chr, &pad.pos, rooms, speed)) {
return true;
}
}
}
return false;
}
bool chrSetPath(struct chrdata *chr, u32 path_id)
{
chr->path = path_id;
return true;
}
bool chrTryStartPatrol(struct chrdata *chr)
{
struct path *path = pathFindById(chr->path);
if (path && chrIsReadyForOrders(chr)) {
chrStartPatrol(chr, path);
return true;
}
return false;
}
bool chrTrySurrender(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
chrSurrender(chr);
return true;
}
return false;
}
bool chrFadeOut(struct chrdata *chr)
{
chrBeginDead(chr);
chrFadeCorpse(chr);
return true;
}
bool chrGoToTarget(struct chrdata *chr, u32 speed)
{
if (chrIsReadyForOrders(chr)) {
if (
#if VERSION >= VERSION_NTSC_1_0
var80062cbc <= 8 ||
(chr->hidden & CHRHFLAG_00400000) == 0 ||
(chr->flags & CHRFLAG0_CAN_GO_TO_PLACES)
#else
var80062cbc <= 9
#endif
) {
struct prop *prop = chrGetTargetProp(chr);
if (chrGoToPos(chr, &prop->pos, prop->rooms, speed)) {
return true;
}
}
}
return false;
}
bool chrGoToChr(struct chrdata *chr, u32 dst_chrnum, u32 speed)
{
if (chrIsReadyForOrders(chr)) {
if (
#if VERSION >= VERSION_NTSC_1_0
var80062cbc <= 8 ||
(chr->hidden & CHRHFLAG_00400000) == 0 ||
(chr->flags & CHRFLAG0_CAN_GO_TO_PLACES)
#else
var80062cbc <= 9
#endif
) {
struct chrdata *dstchr = chrFindById(chr, dst_chrnum);
if (dstchr && dstchr->prop && chrGoToPos(chr, &dstchr->prop->pos, dstchr->prop->rooms, speed)) {
return true;
}
}
}
return false;
}
bool chrGoToProp(struct chrdata *chr, struct prop *prop, s32 speed)
{
if (chrIsReadyForOrders(chr) && prop) {
if (chrGoToPos(chr, &prop->pos, prop->rooms, speed)) {
return true;
}
}
return false;
}
bool func0f03abd0(struct chrdata *chr, struct coord *pos, u32 flags)
{
s16 roomlist1[21];
s16 roomlist2[21];
if (chrIsReadyForOrders(chr)) {
#if VERSION >= VERSION_NTSC_1_0
if (var80062cbc < 9
|| (chr->hidden & CHRHFLAG_00400000) == 0
|| (chr->flags & CHRCFLAG_00040000))
#else
if (var80062cbc < 10)
#endif
{
s16 *rooms = NULL;
func0f162194(pos, roomlist1, roomlist2, 20, NULL);
if (roomlist1[0] != -1) {
rooms = roomlist1;
} else if (roomlist2[0] != -1) {
rooms = roomlist2;
}
if (rooms != NULL && chrGoToPos(chr, pos, rooms, flags)) {
return true;
}
}
}
return false;
}
s32 func0f03aca0(struct chrdata *chr, f32 arg1, u8 arg2)
{
f32 somefloat;
if (!arg2) {
arg1 -= chrGetDistanceToCoord(chr, &chr->runfrompos);
}
if (arg1 < 0) {
func0f04ba34(g_Vars.chrdata, 0x90a, 0);
return chrGoToCover(chr, SPEED_RUN);
}
somefloat = arg1 - 2000;
if (somefloat < 2000) {
somefloat = 2000;
}
if (chrAssignCoverAwayFromDanger(chr, somefloat, arg1 + 10000) == 0) {
func0f04ba34(g_Vars.chrdata, 0x90a, 0);
}
return chrGoToCover(chr, SPEED_RUN);
}
bool chrTryStop(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_EYESPY) {
func0f02e9a0(chr, 0);
return true;
}
if (chrIsReadyForOrders(chr)) {
chrStop(chr);
return true;
}
return false;
}
bool chrTrySurprisedOneHand(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
chrDoSurprisedOneHand(chr);
return true;
}
return false;
}
bool chrTrySurprisedSurrender(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
chrDoSurprisedSurrender(chr);
return true;
}
return false;
}
bool chrTrySurprisedLookAround(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
chrDoSurprisedLookAround(chr);
return true;
}
return false;
}
bool chrTryKneel(struct chrdata *chr)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
chrKneel(chr);
return true;
}
return false;
}
bool chrTryStartAnim(struct chrdata *chr, s32 animfnum, f32 startframe, f32 endframe, u8 flags, s32 arg5, f32 speed)
{
if (chrIsReadyForOrders(chr)) {
chrStartAnim(chr, animfnum, startframe, endframe, flags, arg5, speed);
return true;
}
return false;
}
bool chrTryRunFromTarget(struct chrdata *chr)
{
struct prop *target = chrGetTargetProp(chr);
struct prop *prop = chr->prop;
f32 ymax;
f32 ymin;
f32 width;
struct coord dst;
s16 rooms[8];
struct coord diff;
f32 distance;
if (chrIsReadyForOrders(chr)) {
if (!target) {
return false;
}
diff.x = target->pos.x - prop->pos.x;
diff.z = target->pos.z - prop->pos.z;
diff.y = 0;
distance = sqrtf(diff.f[0] * diff.f[0] + diff.f[2] * diff.f[2]);
// Scale diff into range -1 to +1
diff.x *= (1 / distance);
diff.z *= (1 / distance);
// Set dst to 1000 units in the opposite direction
dst.x = prop->pos.x - diff.x * 1000;
dst.z = prop->pos.z - diff.z * 1000;
dst.y = prop->pos.y;
propGetBbox(prop, &width, &ymax, &ymin);
// If dst runs into a wall, set it to closest valid spot
if (!func0002d7c0(&prop->pos, prop->rooms, &dst, 0x33, 1,
ymax - prop->pos.y, ymin - prop->pos.y)) {
#if VERSION >= VERSION_PAL_FINAL
cdGetPos(&dst, 8793, "chr/chraction.c");
#else
cdGetPos(&dst, 8788, "chraction.c");
#endif
}
// Adjust dst to be two chr widths closer to avoid collision with wall
dst.x = dst.x + (diff.x * width + diff.x * width);
dst.z = dst.z + (diff.z * width + diff.z * width);
if (func0f036974(prop, &dst)) {
u32 speed = SPEED_RUN;
if (CHRRACE(chr) == RACE_HUMAN) {
f32 dist = chrGetDistanceToCoord(chr, &dst);
if (dist > 100) {
speed = SPEED_RUN;
} else if (dist < 50) {
speed = SPEED_WALK;
} else {
speed = SPEED_JOG;
}
}
func0f065e74(&prop->pos, prop->rooms, &dst, rooms);
chrGoToPos(chr, &dst, rooms, speed);
return true;
}
}
return false;
}
const char var7f1a8ae4[] = "aimadjust=%d";
#if VERSION >= VERSION_PAL_FINAL
const char var7f1a8af4[] = "chr/chraction.c";
#else
const char var7f1a8af4[] = "chraction.c";
#endif
const char var7f1a8b00[] = "firing(%d) %d, beam(%d) %s";
const char var7f1a8b1c[] = "on";
const char var7f1a8b20[] = "off";
const char var7f1a8b24[] = "firecount(%d) = %d";
const char var7f1a8b38[] = "numshots(%d) = %d";
GLOBAL_ASM(
glabel func0f03b1e0
.late_rodata
glabel var7f1a8ecc
.word 0x3ecccccd
glabel var7f1a8ed0
.word 0x3f666666
glabel var7f1a8ed4
.word 0x44bb8000
.text
/* f03b1e0: 27bdfd48 */ addiu $sp,$sp,-696
/* f03b1e4: afbf003c */ sw $ra,0x3c($sp)
/* f03b1e8: afb70038 */ sw $s7,0x38($sp)
/* f03b1ec: afb60034 */ sw $s6,0x34($sp)
/* f03b1f0: afb50030 */ sw $s5,0x30($sp)
/* f03b1f4: afb4002c */ sw $s4,0x2c($sp)
/* f03b1f8: afb30028 */ sw $s3,0x28($sp)
/* f03b1fc: afb20024 */ sw $s2,0x24($sp)
/* f03b200: afb10020 */ sw $s1,0x20($sp)
/* f03b204: afb0001c */ sw $s0,0x1c($sp)
/* f03b208: f7b40010 */ sdc1 $f20,0x10($sp)
/* f03b20c: 0fc0a221 */ jal chrGetTargetProp
/* f03b210: afa402b8 */ sw $a0,0x2b8($sp)
/* f03b214: 8fa402b8 */ lw $a0,0x2b8($sp)
/* f03b218: 0040b025 */ or $s6,$v0,$zero
/* f03b21c: 14400003 */ bnez $v0,.L0f03b22c
/* f03b220: 8c93001c */ lw $s3,0x1c($a0)
/* f03b224: 100000e6 */ b .L0f03b5c0
/* f03b228: 00001025 */ or $v0,$zero,$zero
.L0f03b22c:
/* f03b22c: 0fc0e686 */ jal chrIsReadyForOrders
/* f03b230: 00000000 */ nop
/* f03b234: 104000e1 */ beqz $v0,.L0f03b5bc
/* f03b238: 27b700a8 */ addiu $s7,$sp,0xa8
/* f03b23c: 26640028 */ addiu $a0,$s3,0x28
/* f03b240: afa4004c */ sw $a0,0x4c($sp)
/* f03b244: 02e02825 */ or $a1,$s7,$zero
/* f03b248: 0fc197e0 */ jal roomGetProps
/* f03b24c: 24060100 */ addiu $a2,$zero,0x100
/* f03b250: 87ae00a8 */ lh $t6,0xa8($sp)
/* f03b254: 00008825 */ or $s1,$zero,$zero
/* f03b258: 05c0000a */ bltz $t6,.L0f03b284
/* f03b25c: 00000000 */ nop
/* f03b260: 26310001 */ addiu $s1,$s1,0x1
.L0f03b264:
/* f03b264: 00117c00 */ sll $t7,$s1,0x10
/* f03b268: 000fc403 */ sra $t8,$t7,0x10
/* f03b26c: 0018c840 */ sll $t9,$t8,0x1
/* f03b270: 02f94021 */ addu $t0,$s7,$t9
/* f03b274: 85090000 */ lh $t1,0x0($t0)
/* f03b278: 03008825 */ or $s1,$t8,$zero
/* f03b27c: 0523fff9 */ bgezl $t1,.L0f03b264
/* f03b280: 26310001 */ addiu $s1,$s1,0x1
.L0f03b284:
/* f03b284: 1a200009 */ blez $s1,.L0f03b2ac
/* f03b288: 00000000 */ nop
/* f03b28c: 0c004b70 */ jal random
/* f03b290: 00000000 */ nop
/* f03b294: 0051001b */ divu $zero,$v0,$s1
/* f03b298: 00005010 */ mfhi $t2
/* f03b29c: a7aa00a0 */ sh $t2,0xa0($sp)
/* f03b2a0: 16200002 */ bnez $s1,.L0f03b2ac
/* f03b2a4: 00000000 */ nop
/* f03b2a8: 0007000d */ break 0x7
.L0f03b2ac:
/* f03b2ac: 1a2000c3 */ blez $s1,.L0f03b5bc
/* f03b2b0: 00009025 */ or $s2,$zero,$zero
/* f03b2b4: 87ab00a0 */ lh $t3,0xa0($sp)
.L0f03b2b8:
/* f03b2b8: 3c08800a */ lui $t0,%hi(g_Vars+0x338)
/* f03b2bc: 8d08a2f8 */ lw $t0,%lo(g_Vars+0x338)($t0)
/* f03b2c0: 024b6021 */ addu $t4,$s2,$t3
/* f03b2c4: 0191001a */ div $zero,$t4,$s1
/* f03b2c8: 00006810 */ mfhi $t5
/* f03b2cc: 000d7040 */ sll $t6,$t5,0x1
/* f03b2d0: 02ee7821 */ addu $t7,$s7,$t6
/* f03b2d4: 85f80000 */ lh $t8,0x0($t7)
/* f03b2d8: 16200002 */ bnez $s1,.L0f03b2e4
/* f03b2dc: 00000000 */ nop
/* f03b2e0: 0007000d */ break 0x7
.L0f03b2e4:
/* f03b2e4: 2401ffff */ addiu $at,$zero,-1
/* f03b2e8: 16210004 */ bne $s1,$at,.L0f03b2fc
/* f03b2ec: 3c018000 */ lui $at,0x8000
/* f03b2f0: 15810002 */ bne $t4,$at,.L0f03b2fc
/* f03b2f4: 00000000 */ nop
/* f03b2f8: 0006000d */ break 0x6
.L0f03b2fc:
/* f03b2fc: 0018c8c0 */ sll $t9,$t8,0x3
/* f03b300: 0338c821 */ addu $t9,$t9,$t8
/* f03b304: 0019c8c0 */ sll $t9,$t9,0x3
/* f03b308: 03288021 */ addu $s0,$t9,$t0
/* f03b30c: 92090000 */ lbu $t1,0x0($s0)
/* f03b310: 24010001 */ addiu $at,$zero,0x1
/* f03b314: 8e150004 */ lw $s5,0x4($s0)
/* f03b318: 552100a3 */ bnel $t1,$at,.L0f03b5a8
/* f03b31c: 26520001 */ addiu $s2,$s2,0x1
/* f03b320: 92aa0002 */ lbu $t2,0x2($s5)
/* f03b324: 314b0040 */ andi $t3,$t2,0x40
/* f03b328: 5560009f */ bnezl $t3,.L0f03b5a8
/* f03b32c: 26520001 */ addiu $s2,$s2,0x1
/* f03b330: 8ea20040 */ lw $v0,0x40($s5)
/* f03b334: 3c010020 */ lui $at,0x20
/* f03b338: 304c8000 */ andi $t4,$v0,0x8000
/* f03b33c: 5580009a */ bnezl $t4,.L0f03b5a8
/* f03b340: 26520001 */ addiu $s2,$s2,0x1
/* f03b344: 00416824 */ and $t5,$v0,$at
/* f03b348: 55a00097 */ bnezl $t5,.L0f03b5a8
/* f03b34c: 26520001 */ addiu $s2,$s2,0x1
/* f03b350: 02c02025 */ or $a0,$s6,$zero
/* f03b354: 0fc12495 */ jal propGetDistanceToProp
/* f03b358: 02002825 */ or $a1,$s0,$zero
/* f03b35c: 46000506 */ mov.s $f20,$f0
/* f03b360: 02602025 */ or $a0,$s3,$zero
/* f03b364: 0fc12495 */ jal propGetDistanceToProp
/* f03b368: 02002825 */ or $a1,$s0,$zero
/* f03b36c: 3c014396 */ lui $at,0x4396
/* f03b370: 44812000 */ mtc1 $at,$f4
/* f03b374: e7a00094 */ swc1 $f0,0x94($sp)
/* f03b378: 4604003c */ c.lt.s $f0,$f4
/* f03b37c: 00000000 */ nop
/* f03b380: 45020089 */ bc1fl .L0f03b5a8
/* f03b384: 26520001 */ addiu $s2,$s2,0x1
/* f03b388: 4614a180 */ add.s $f6,$f20,$f20
/* f03b38c: 3c014448 */ lui $at,0x4448
/* f03b390: 4600303c */ c.lt.s $f6,$f0
/* f03b394: 00000000 */ nop
/* f03b398: 45020083 */ bc1fl .L0f03b5a8
/* f03b39c: 26520001 */ addiu $s2,$s2,0x1
/* f03b3a0: 44814000 */ mtc1 $at,$f8
/* f03b3a4: 00000000 */ nop
/* f03b3a8: 4614403c */ c.lt.s $f8,$f20
/* f03b3ac: 00000000 */ nop
/* f03b3b0: 4502007d */ bc1fl .L0f03b5a8
/* f03b3b4: 26520001 */ addiu $s2,$s2,0x1
/* f03b3b8: 02002025 */ or $a0,$s0,$zero
/* f03b3bc: 27a50088 */ addiu $a1,$sp,0x88
/* f03b3c0: 27a60090 */ addiu $a2,$sp,0x90
/* f03b3c4: 0fc19881 */ jal propGetBbox
/* f03b3c8: 27a7008c */ addiu $a3,$sp,0x8c
/* f03b3cc: 02602025 */ or $a0,$s3,$zero
/* f03b3d0: 27a5007c */ addiu $a1,$sp,0x7c
/* f03b3d4: 27a60084 */ addiu $a2,$sp,0x84
/* f03b3d8: 0fc19881 */ jal propGetBbox
/* f03b3dc: 27a70080 */ addiu $a3,$sp,0x80
/* f03b3e0: c7aa0084 */ lwc1 $f10,0x84($sp)
/* f03b3e4: c7b00080 */ lwc1 $f16,0x80($sp)
/* f03b3e8: 3c017f1b */ lui $at,%hi(var7f1a8ecc)
/* f03b3ec: c4268ecc */ lwc1 $f6,%lo(var7f1a8ecc)($at)
/* f03b3f0: 46105081 */ sub.s $f2,$f10,$f16
/* f03b3f4: c7b20090 */ lwc1 $f18,0x90($sp)
/* f03b3f8: c7a4008c */ lwc1 $f4,0x8c($sp)
/* f03b3fc: 3c017f1b */ lui $at,%hi(var7f1a8ed0)
/* f03b400: 46061202 */ mul.s $f8,$f2,$f6
/* f03b404: 46049001 */ sub.s $f0,$f18,$f4
/* f03b408: 4600403c */ c.lt.s $f8,$f0
/* f03b40c: 00000000 */ nop
/* f03b410: 45020062 */ bc1fl .L0f03b59c
/* f03b414: 02002025 */ or $a0,$s0,$zero
/* f03b418: c42a8ed0 */ lwc1 $f10,%lo(var7f1a8ed0)($at)
/* f03b41c: 02002025 */ or $a0,$s0,$zero
/* f03b420: 00002825 */ or $a1,$zero,$zero
/* f03b424: 460a1402 */ mul.s $f16,$f2,$f10
/* f03b428: 4610003c */ c.lt.s $f0,$f16
/* f03b42c: 00000000 */ nop
/* f03b430: 4502005a */ bc1fl .L0f03b59c
/* f03b434: 02002025 */ or $a0,$s0,$zero
/* f03b438: 0fc1905e */ jal propSetCollisionsEnabled
/* f03b43c: 26740008 */ addiu $s4,$s3,0x8
/* f03b440: 02802025 */ or $a0,$s4,$zero
/* f03b444: 8fa5004c */ lw $a1,0x4c($sp)
/* f03b448: 26060008 */ addiu $a2,$s0,0x8
/* f03b44c: 0c00b706 */ jal func0002dc18
/* f03b450: 24070022 */ addiu $a3,$zero,0x22
/* f03b454: 10400050 */ beqz $v0,.L0f03b598
/* f03b458: 02002025 */ or $a0,$s0,$zero
/* f03b45c: 0fc1905e */ jal propSetCollisionsEnabled
/* f03b460: 24050001 */ addiu $a1,$zero,0x1
/* f03b464: c6000008 */ lwc1 $f0,0x8($s0)
/* f03b468: c6ca0008 */ lwc1 $f10,0x8($s6)
/* f03b46c: 3c013fa0 */ lui $at,0x3fa0
/* f03b470: 44812000 */ mtc1 $at,$f4
/* f03b474: 46005401 */ sub.s $f16,$f10,$f0
/* f03b478: c7b20088 */ lwc1 $f18,0x88($sp)
/* f03b47c: c7a8007c */ lwc1 $f8,0x7c($sp)
/* f03b480: 02602025 */ or $a0,$s3,$zero
/* f03b484: 46049182 */ mul.s $f6,$f18,$f4
/* f03b488: 46148483 */ div.s $f18,$f16,$f20
/* f03b48c: 27a50068 */ addiu $a1,$sp,0x68
/* f03b490: 46083080 */ add.s $f2,$f6,$f8
/* f03b494: 46029102 */ mul.s $f4,$f18,$f2
/* f03b498: 46040181 */ sub.s $f6,$f0,$f4
/* f03b49c: e7a60068 */ swc1 $f6,0x68($sp)
/* f03b4a0: c6c80010 */ lwc1 $f8,0x10($s6)
/* f03b4a4: c60c0010 */ lwc1 $f12,0x10($s0)
/* f03b4a8: 460c4281 */ sub.s $f10,$f8,$f12
/* f03b4ac: 46145403 */ div.s $f16,$f10,$f20
/* f03b4b0: 46028482 */ mul.s $f18,$f16,$f2
/* f03b4b4: 46126101 */ sub.s $f4,$f12,$f18
/* f03b4b8: e7a40070 */ swc1 $f4,0x70($sp)
/* f03b4bc: c606000c */ lwc1 $f6,0xc($s0)
/* f03b4c0: 0fc0da5d */ jal func0f036974
/* f03b4c4: e7a6006c */ swc1 $f6,0x6c($sp)
/* f03b4c8: 50400034 */ beqzl $v0,.L0f03b59c
/* f03b4cc: 02002025 */ or $a0,$s0,$zero
/* f03b4d0: 8fa302b8 */ lw $v1,0x2b8($sp)
/* f03b4d4: 24110001 */ addiu $s1,$zero,0x1
/* f03b4d8: 27b20058 */ addiu $s2,$sp,0x58
/* f03b4dc: 10600003 */ beqz $v1,.L0f03b4ec
/* f03b4e0: 02802025 */ or $a0,$s4,$zero
/* f03b4e4: 10000002 */ b .L0f03b4f0
/* f03b4e8: 906202fe */ lbu $v0,0x2fe($v1)
.L0f03b4ec:
/* f03b4ec: 00001025 */ or $v0,$zero,$zero
.L0f03b4f0:
/* f03b4f0: 14400013 */ bnez $v0,.L0f03b540
/* f03b4f4: 8fa5004c */ lw $a1,0x4c($sp)
/* f03b4f8: 3c017f1b */ lui $at,%hi(var7f1a8ed4)
/* f03b4fc: c4288ed4 */ lwc1 $f8,%lo(var7f1a8ed4)($at)
/* f03b500: c7aa0094 */ lwc1 $f10,0x94($sp)
/* f03b504: 3c0142c8 */ lui $at,0x42c8
/* f03b508: c7b00094 */ lwc1 $f16,0x94($sp)
/* f03b50c: 460a403c */ c.lt.s $f8,$f10
/* f03b510: 00000000 */ nop
/* f03b514: 45020004 */ bc1fl .L0f03b528
/* f03b518: 44819000 */ mtc1 $at,$f18
/* f03b51c: 10000008 */ b .L0f03b540
/* f03b520: 24110002 */ addiu $s1,$zero,0x2
/* f03b524: 44819000 */ mtc1 $at,$f18
.L0f03b528:
/* f03b528: 00000000 */ nop
/* f03b52c: 4612803c */ c.lt.s $f16,$f18
/* f03b530: 00000000 */ nop
/* f03b534: 45020003 */ bc1fl .L0f03b544
/* f03b538: 27a60068 */ addiu $a2,$sp,0x68
/* f03b53c: 00008825 */ or $s1,$zero,$zero
.L0f03b540:
/* f03b540: 27a60068 */ addiu $a2,$sp,0x68
.L0f03b544:
/* f03b544: 0fc1979d */ jal func0f065e74
/* f03b548: 02403825 */ or $a3,$s2,$zero
/* f03b54c: 8fa402b8 */ lw $a0,0x2b8($sp)
/* f03b550: 27a50068 */ addiu $a1,$sp,0x68
/* f03b554: 02403025 */ or $a2,$s2,$zero
/* f03b558: 0fc0e10f */ jal chrGoToPos
/* f03b55c: 02203825 */ or $a3,$s1,$zero
/* f03b560: 3c0e800a */ lui $t6,%hi(g_Vars+0x338)
/* f03b564: 8dcea2f8 */ lw $t6,%lo(g_Vars+0x338)($t6)
/* f03b568: 24010048 */ addiu $at,$zero,0x48
/* f03b56c: 8fb902b8 */ lw $t9,0x2b8($sp)
/* f03b570: 020e7823 */ subu $t7,$s0,$t6
/* f03b574: 01e1001a */ div $zero,$t7,$at
/* f03b578: 0000c012 */ mflo $t8
/* f03b57c: a738012c */ sh $t8,0x12c($t9)
/* f03b580: 8ea80040 */ lw $t0,0x40($s5)
/* f03b584: 3c010020 */ lui $at,0x20
/* f03b588: 24020001 */ addiu $v0,$zero,0x1
/* f03b58c: 01014825 */ or $t1,$t0,$at
/* f03b590: 1000000b */ b .L0f03b5c0
/* f03b594: aea90040 */ sw $t1,0x40($s5)
.L0f03b598:
/* f03b598: 02002025 */ or $a0,$s0,$zero
.L0f03b59c:
/* f03b59c: 0fc1905e */ jal propSetCollisionsEnabled
/* f03b5a0: 24050001 */ addiu $a1,$zero,0x1
/* f03b5a4: 26520001 */ addiu $s2,$s2,0x1
.L0f03b5a8:
/* f03b5a8: 00125400 */ sll $t2,$s2,0x10
/* f03b5ac: 000a9403 */ sra $s2,$t2,0x10
/* f03b5b0: 0251082a */ slt $at,$s2,$s1
/* f03b5b4: 5420ff40 */ bnezl $at,.L0f03b2b8
/* f03b5b8: 87ab00a0 */ lh $t3,0xa0($sp)
.L0f03b5bc:
/* f03b5bc: 00001025 */ or $v0,$zero,$zero
.L0f03b5c0:
/* f03b5c0: 8fbf003c */ lw $ra,0x3c($sp)
/* f03b5c4: d7b40010 */ ldc1 $f20,0x10($sp)
/* f03b5c8: 8fb0001c */ lw $s0,0x1c($sp)
/* f03b5cc: 8fb10020 */ lw $s1,0x20($sp)
/* f03b5d0: 8fb20024 */ lw $s2,0x24($sp)
/* f03b5d4: 8fb30028 */ lw $s3,0x28($sp)
/* f03b5d8: 8fb4002c */ lw $s4,0x2c($sp)
/* f03b5dc: 8fb50030 */ lw $s5,0x30($sp)
/* f03b5e0: 8fb60034 */ lw $s6,0x34($sp)
/* f03b5e4: 8fb70038 */ lw $s7,0x38($sp)
/* f03b5e8: 03e00008 */ jr $ra
/* f03b5ec: 27bd02b8 */ addiu $sp,$sp,0x2b8
);
bool chrTryStartAlarm(struct chrdata *chr, s32 pad_id)
{
if (CHRRACE(chr) == RACE_HUMAN && chrIsReadyForOrders(chr)) {
pad_id = chrResolvePadId(chr, pad_id);
#if VERSION >= VERSION_NTSC_1_0
if (pad_id >= 0)
#endif
{
struct defaultobj *obj = objFindByPadNum(pad_id);
if (obj && objIsHealthy(obj)) {
chrStartAlarm(chr);
return true;
}
}
}
return false;
}
s32 chrConsiderGrenadeThrow(struct chrdata *chr, u32 entitytype, u32 entityid)
{
bool done = false;
if (CHRRACE(chr) == RACE_HUMAN &&
chr->grenadeprob > (random() % 255) &&
chrGetDistanceToTarget(chr) > 200 &&
chrIsReadyForOrders(chr)) {
struct prop *target = chrGetTargetProp(chr);
struct coord pos;
if (target) {
pos.x = target->pos.x;
pos.y = target->pos.y;
pos.z = target->pos.z;
}
if (target && func0002dc18(&chr->prop->pos, chr->prop->rooms, &pos, 0x33)) {
struct prop *leftprop = chrGetEquippedWeaponProp(chr, 1);
struct prop *rightprop = chrGetEquippedWeaponProp(chr, 0);
struct weaponobj *weapon;
#if PIRACYCHECKS
{
u32 checksum = 0;
s32 *i = (s32 *)&bgInit;
s32 *end = (s32 *)&bgBuildTables;
while (i < end) {
checksum += *i;
checksum += (*i >> 1);
i++;
}
if (checksum != CHECKSUM_PLACEHOLDER) {
// Make player explode continuously
g_Vars.currentplayer->bondexploding = true;
g_Vars.currentplayer->bondnextexplode = g_Vars.lvframe60 + 120;
g_Vars.currentplayer->bondcurexplode = 0;
}
}
#endif
// If grenade is equipped in either hand, use it
if (rightprop) {
weapon = rightprop->weapon;
if (weapon->weaponnum == WEAPON_GRENADE || weapon->weaponnum == WEAPON_NBOMB) {
chrThrowGrenade(chr, 0, false);
chr->act_throwgrenade.entitytype = entitytype;
chr->act_throwgrenade.entityid = entityid;
done = true;
}
}
if (!done && leftprop) {
weapon = leftprop->weapon;
if (weapon->weaponnum == WEAPON_GRENADE || weapon->weaponnum == WEAPON_NBOMB) {
chrThrowGrenade(chr, 1, false);
chr->act_throwgrenade.entitytype = entitytype;
chr->act_throwgrenade.entityid = entityid;
done = true;
}
}
// Grenade not equipped, and using a single weapon
if (!done && (leftprop == NULL || rightprop == NULL)) {
u32 stackpadding[1];
struct prop *prop;
u32 flags = 0;
u32 stackpadding2[2];
if (rightprop) {
flags = 0x10000000;
}
if (stageGetIndex(g_Vars.stagenum) == STAGEINDEX_MBR) {
prop = chrGiveWeapon(chr, 0x112, WEAPON_NBOMB, flags);
} else {
prop = chrGiveWeapon(chr, 0x112, WEAPON_GRENADE, flags);
}
if (prop) {
weapon = prop->weapon;
weapon->base.hidden |= OBJHFLAG_00000800;
chrThrowGrenade(chr, rightprop == NULL ? 0 : 1, true);
chr->act_throwgrenade.entitytype = entitytype;
chr->act_throwgrenade.entityid = entityid;
done = true;
}
}
}
}
return done;
}
bool chrDropItem(struct chrdata *chr, u32 modelnum, u32 weaponnum)
{
struct weaponobj *weapon;
u8 race = CHRRACE(chr);
if (race == RACE_DRCAROLL || race == RACE_ROBOT) {
return false;
}
weapon = func0f08b880(modelnum, (u8)weaponnum, chr);
if (weapon && weapon->base.prop) {
modelSetScale(weapon->base.model, weapon->base.model->scale);
propReparent(weapon->base.prop, chr->prop);
weapon->timer240 = PALDOWN(720);
propobjSetDropped(weapon->base.prop, DROPREASON_1);
chr->hidden |= CHRHFLAG_00000001;
return true;
}
return false;
}
GLOBAL_ASM(
glabel func0f03ba44
/* f03ba44: 27bdffb8 */ addiu $sp,$sp,-72
/* f03ba48: afbf0024 */ sw $ra,0x24($sp)
/* f03ba4c: afb0001c */ sw $s0,0x1c($sp)
/* f03ba50: 00808025 */ or $s0,$a0,$zero
/* f03ba54: afb10020 */ sw $s1,0x20($sp)
/* f03ba58: afa5004c */ sw $a1,0x4c($sp)
/* f03ba5c: afa60050 */ sw $a2,0x50($sp)
/* f03ba60: 0fc0a221 */ jal chrGetTargetProp
/* f03ba64: afa70054 */ sw $a3,0x54($sp)
/* f03ba68: 3c0e8007 */ lui $t6,%hi(var80068298)
/* f03ba6c: 8dce8298 */ lw $t6,%lo(var80068298)($t6)
/* f03ba70: 00408825 */ or $s1,$v0,$zero
/* f03ba74: 02002025 */ or $a0,$s0,$zero
/* f03ba78: afae0040 */ sw $t6,0x40($sp)
/* f03ba7c: 8e0302d4 */ lw $v1,0x2d4($s0)
/* f03ba80: 24050014 */ addiu $a1,$zero,0x14
/* f03ba84: 10600008 */ beqz $v1,.L0f03baa8
/* f03ba88: 00000000 */ nop
/* f03ba8c: 8c6f0020 */ lw $t7,0x20($v1)
/* f03ba90: a3af0040 */ sb $t7,0x40($sp)
/* f03ba94: 8e1802d4 */ lw $t8,0x2d4($s0)
/* f03ba98: 8f19004c */ lw $t9,0x4c($t8)
/* f03ba9c: 00194080 */ sll $t0,$t9,0x2
/* f03baa0: 00084fc2 */ srl $t1,$t0,0x1f
/* f03baa4: a3a90043 */ sb $t1,0x43($sp)
.L0f03baa8:
/* f03baa8: 0fc1241a */ jal chrIsTargetInFov
/* f03baac: 93a60057 */ lbu $a2,0x57($sp)
/* f03bab0: 5040003e */ beqzl $v0,.L0f03bbac
/* f03bab4: 93a40040 */ lbu $a0,0x40($sp)
/* f03bab8: 0fc12472 */ jal chrGetDistanceToTarget
/* f03babc: 02002025 */ or $a0,$s0,$zero
/* f03bac0: 8faa0050 */ lw $t2,0x50($sp)
/* f03bac4: 448a2000 */ mtc1 $t2,$f4
/* f03bac8: 00000000 */ nop
/* f03bacc: 468021a0 */ cvt.s.w $f6,$f4
/* f03bad0: 4606003c */ c.lt.s $f0,$f6
/* f03bad4: 00000000 */ nop
/* f03bad8: 45020034 */ bc1fl .L0f03bbac
/* f03badc: 93a40040 */ lbu $a0,0x40($sp)
/* f03bae0: 8e02001c */ lw $v0,0x1c($s0)
/* f03bae4: 26260008 */ addiu $a2,$s1,0x8
/* f03bae8: 24070033 */ addiu $a3,$zero,0x33
/* f03baec: 24440008 */ addiu $a0,$v0,0x8
/* f03baf0: 0c00b706 */ jal func0002dc18
/* f03baf4: 24450028 */ addiu $a1,$v0,0x28
/* f03baf8: 5040002c */ beqzl $v0,.L0f03bbac
/* f03bafc: 93a40040 */ lbu $a0,0x40($sp)
/* f03bb00: 8e0b001c */ lw $t3,0x1c($s0)
/* f03bb04: c6280008 */ lwc1 $f8,0x8($s1)
/* f03bb08: 44809000 */ mtc1 $zero,$f18
/* f03bb0c: c56a0008 */ lwc1 $f10,0x8($t3)
/* f03bb10: 27a40034 */ addiu $a0,$sp,0x34
/* f03bb14: e7b20038 */ swc1 $f18,0x38($sp)
/* f03bb18: 460a4401 */ sub.s $f16,$f8,$f10
/* f03bb1c: 27a50038 */ addiu $a1,$sp,0x38
/* f03bb20: 27a6003c */ addiu $a2,$sp,0x3c
/* f03bb24: e7b00034 */ swc1 $f16,0x34($sp)
/* f03bb28: 8e0c001c */ lw $t4,0x1c($s0)
/* f03bb2c: c6240010 */ lwc1 $f4,0x10($s1)
/* f03bb30: c5860010 */ lwc1 $f6,0x10($t4)
/* f03bb34: 46062201 */ sub.s $f8,$f4,$f6
/* f03bb38: 0c0011e4 */ jal guNormalize
/* f03bb3c: e7a8003c */ swc1 $f8,0x3c($sp)
/* f03bb40: 27a40040 */ addiu $a0,$sp,0x40
/* f03bb44: 02202825 */ or $a1,$s1,$zero
/* f03bb48: 0fc29f66 */ jal func0f0a7d98
/* f03bb4c: 2406ffff */ addiu $a2,$zero,-1
/* f03bb50: 92220000 */ lbu $v0,0x0($s1)
/* f03bb54: 24010006 */ addiu $at,$zero,0x6
/* f03bb58: 10410003 */ beq $v0,$at,.L0f03bb68
/* f03bb5c: 24010003 */ addiu $at,$zero,0x3
/* f03bb60: 54410012 */ bnel $v0,$at,.L0f03bbac
/* f03bb64: 93a40040 */ lbu $a0,0x40($sp)
.L0f03bb68:
/* f03bb68: 0fc2c74a */ jal handGetDamage
/* f03bb6c: 27a40040 */ addiu $a0,$sp,0x40
/* f03bb70: 8fad004c */ lw $t5,0x4c($sp)
/* f03bb74: 8e0e001c */ lw $t6,0x1c($s0)
/* f03bb78: 8e240004 */ lw $a0,0x4($s1)
/* f03bb7c: 448d5000 */ mtc1 $t5,$f10
/* f03bb80: 240f00c8 */ addiu $t7,$zero,0xc8
/* f03bb84: afaf0014 */ sw $t7,0x14($sp)
/* f03bb88: 46805420 */ cvt.s.w $f16,$f10
/* f03bb8c: 27a60034 */ addiu $a2,$sp,0x34
/* f03bb90: 27a70040 */ addiu $a3,$sp,0x40
/* f03bb94: afae0010 */ sw $t6,0x10($sp)
/* f03bb98: 46100482 */ mul.s $f18,$f0,$f16
/* f03bb9c: 44059000 */ mfc1 $a1,$f18
/* f03bba0: 0fc0d0cc */ jal func0f034330
/* f03bba4: 00000000 */ nop
/* f03bba8: 93a40040 */ lbu $a0,0x40($sp)
.L0f03bbac:
/* f03bbac: 0fc18261 */ jal func0f060984
/* f03bbb0: 8e05001c */ lw $a1,0x1c($s0)
/* f03bbb4: 8fbf0024 */ lw $ra,0x24($sp)
/* f03bbb8: 8fb0001c */ lw $s0,0x1c($sp)
/* f03bbbc: 8fb10020 */ lw $s1,0x20($sp)
/* f03bbc0: 03e00008 */ jr $ra
/* f03bbc4: 27bd0048 */ addiu $sp,$sp,0x48
);
GLOBAL_ASM(
glabel chrTryPunchOrKick
.late_rodata
glabel var7f1a8ed8
.word 0x3f59999a
.text
/* f03bbc8: 27bdffa8 */ addiu $sp,$sp,-88
/* f03bbcc: afb00028 */ sw $s0,0x28($sp)
/* f03bbd0: 00808025 */ or $s0,$a0,$zero
/* f03bbd4: afbf002c */ sw $ra,0x2c($sp)
/* f03bbd8: afa5005c */ sw $a1,0x5c($sp)
/* f03bbdc: 10800003 */ beqz $a0,.L0f03bbec
/* f03bbe0: afa00054 */ sw $zero,0x54($sp)
/* f03bbe4: 10000002 */ b .L0f03bbf0
/* f03bbe8: 908302fe */ lbu $v1,0x2fe($a0)
.L0f03bbec:
/* f03bbec: 00001825 */ or $v1,$zero,$zero
.L0f03bbf0:
/* f03bbf0: 0c004b70 */ jal random
/* f03bbf4: afa30050 */ sw $v1,0x50($sp)
/* f03bbf8: 304e00ff */ andi $t6,$v0,0xff
/* f03bbfc: 2dc10081 */ sltiu $at,$t6,0x81
/* f03bc00: 14200003 */ bnez $at,.L0f03bc10
/* f03bc04: 8fa30050 */ lw $v1,0x50($sp)
/* f03bc08: 10000002 */ b .L0f03bc14
/* f03bc0c: 24080001 */ addiu $t0,$zero,0x1
.L0f03bc10:
/* f03bc10: 00004025 */ or $t0,$zero,$zero
.L0f03bc14:
/* f03bc14: 14600013 */ bnez $v1,.L0f03bc64
/* f03bc18: 24010001 */ addiu $at,$zero,0x1
/* f03bc1c: 3c014120 */ lui $at,0x4120
/* f03bc20: 44812000 */ mtc1 $at,$f4
/* f03bc24: 3c0f8007 */ lui $t7,%hi(var8006829c)
/* f03bc28: 25ef829c */ addiu $t7,$t7,%lo(var8006829c)
/* f03bc2c: 24180078 */ addiu $t8,$zero,0x78
/* f03bc30: 24190078 */ addiu $t9,$zero,0x78
/* f03bc34: afaf0054 */ sw $t7,0x54($sp)
/* f03bc38: afb80044 */ sw $t8,0x44($sp)
/* f03bc3c: afb90040 */ sw $t9,0x40($sp)
/* f03bc40: afa80048 */ sw $t0,0x48($sp)
/* f03bc44: 0c004b70 */ jal random
/* f03bc48: e7a4003c */ swc1 $f4,0x3c($sp)
/* f03bc4c: 2401000b */ addiu $at,$zero,0xb
/* f03bc50: 0041001b */ divu $zero,$v0,$at
/* f03bc54: 00004810 */ mfhi $t1
/* f03bc58: afa9004c */ sw $t1,0x4c($sp)
/* f03bc5c: 10000034 */ b .L0f03bd30
/* f03bc60: 8fa80048 */ lw $t0,0x48($sp)
.L0f03bc64:
/* f03bc64: 14610032 */ bne $v1,$at,.L0f03bd30
/* f03bc68: 3c0a8007 */ lui $t2,%hi(var8006835c)
/* f03bc6c: 93ad005f */ lbu $t5,0x5f($sp)
/* f03bc70: 3c0141a0 */ lui $at,0x41a0
/* f03bc74: 44813000 */ mtc1 $at,$f6
/* f03bc78: 254a835c */ addiu $t2,$t2,%lo(var8006835c)
/* f03bc7c: 240b00c8 */ addiu $t3,$zero,0xc8
/* f03bc80: 240c00c8 */ addiu $t4,$zero,0xc8
/* f03bc84: afaa0054 */ sw $t2,0x54($sp)
/* f03bc88: afab0044 */ sw $t3,0x44($sp)
/* f03bc8c: afac0040 */ sw $t4,0x40($sp)
/* f03bc90: 11a00004 */ beqz $t5,.L0f03bca4
/* f03bc94: e7a6003c */ swc1 $f6,0x3c($sp)
/* f03bc98: 240e0005 */ addiu $t6,$zero,0x5
/* f03bc9c: 10000024 */ b .L0f03bd30
/* f03bca0: afae004c */ sw $t6,0x4c($sp)
.L0f03bca4:
/* f03bca4: 8e0f0170 */ lw $t7,0x170($s0)
/* f03bca8: 15e0000a */ bnez $t7,.L0f03bcd4
/* f03bcac: 00000000 */ nop
/* f03bcb0: 8e180174 */ lw $t8,0x174($s0)
/* f03bcb4: 17000007 */ bnez $t8,.L0f03bcd4
/* f03bcb8: 00000000 */ nop
/* f03bcbc: 0c004b70 */ jal random
/* f03bcc0: afa80048 */ sw $t0,0x48($sp)
/* f03bcc4: 30590001 */ andi $t9,$v0,0x1
/* f03bcc8: afb9004c */ sw $t9,0x4c($sp)
/* f03bccc: 10000018 */ b .L0f03bd30
/* f03bcd0: 8fa80048 */ lw $t0,0x48($sp)
.L0f03bcd4:
/* f03bcd4: 0c004b70 */ jal random
/* f03bcd8: afa80048 */ sw $t0,0x48($sp)
/* f03bcdc: 24010005 */ addiu $at,$zero,0x5
/* f03bce0: 0041001b */ divu $zero,$v0,$at
/* f03bce4: 00001810 */ mfhi $v1
/* f03bce8: 28610003 */ slti $at,$v1,0x3
/* f03bcec: afa3004c */ sw $v1,0x4c($sp)
/* f03bcf0: 1420000f */ bnez $at,.L0f03bd30
/* f03bcf4: 8fa80048 */ lw $t0,0x48($sp)
/* f03bcf8: 8e020170 */ lw $v0,0x170($s0)
/* f03bcfc: 10400004 */ beqz $v0,.L0f03bd10
/* f03bd00: 00000000 */ nop
/* f03bd04: 8e090174 */ lw $t1,0x174($s0)
/* f03bd08: 5520000a */ bnezl $t1,.L0f03bd34
/* f03bd0c: 02002025 */ or $a0,$s0,$zero
.L0f03bd10:
/* f03bd10: 50400004 */ beqzl $v0,.L0f03bd24
/* f03bd14: 8e0a0174 */ lw $t2,0x174($s0)
/* f03bd18: 10000005 */ b .L0f03bd30
/* f03bd1c: 00004025 */ or $t0,$zero,$zero
/* f03bd20: 8e0a0174 */ lw $t2,0x174($s0)
.L0f03bd24:
/* f03bd24: 51400003 */ beqzl $t2,.L0f03bd34
/* f03bd28: 02002025 */ or $a0,$s0,$zero
/* f03bd2c: 24080001 */ addiu $t0,$zero,0x1
.L0f03bd30:
/* f03bd30: 02002025 */ or $a0,$s0,$zero
.L0f03bd34:
/* f03bd34: 24050080 */ addiu $a1,$zero,0x80
/* f03bd38: 24060001 */ addiu $a2,$zero,0x1
/* f03bd3c: 0fc12790 */ jal chrHasFlag
/* f03bd40: afa80048 */ sw $t0,0x48($sp)
/* f03bd44: 10400031 */ beqz $v0,.L0f03be0c
/* f03bd48: 8fa80048 */ lw $t0,0x48($sp)
/* f03bd4c: 02002025 */ or $a0,$s0,$zero
/* f03bd50: 24050080 */ addiu $a1,$zero,0x80
/* f03bd54: 00003025 */ or $a2,$zero,$zero
/* f03bd58: 0fc12790 */ jal chrHasFlag
/* f03bd5c: afa80048 */ sw $t0,0x48($sp)
/* f03bd60: 10400013 */ beqz $v0,.L0f03bdb0
/* f03bd64: 8fa80048 */ lw $t0,0x48($sp)
/* f03bd68: 8fac004c */ lw $t4,0x4c($sp)
/* f03bd6c: 8fab0054 */ lw $t3,0x54($sp)
/* f03bd70: 3c013fc0 */ lui $at,0x3fc0
/* f03bd74: 000c6900 */ sll $t5,$t4,0x4
/* f03bd78: 016d1821 */ addu $v1,$t3,$t5
/* f03bd7c: 8c650000 */ lw $a1,0x0($v1)
/* f03bd80: 8c67000c */ lw $a3,0xc($v1)
/* f03bd84: 44814000 */ mtc1 $at,$f8
/* f03bd88: 240e0010 */ addiu $t6,$zero,0x10
/* f03bd8c: afae0014 */ sw $t6,0x14($sp)
/* f03bd90: afa30030 */ sw $v1,0x30($sp)
/* f03bd94: afa80010 */ sw $t0,0x10($sp)
/* f03bd98: 02002025 */ or $a0,$s0,$zero
/* f03bd9c: 8fa6003c */ lw $a2,0x3c($sp)
/* f03bda0: 0fc0ebd1 */ jal chrTryStartAnim
/* f03bda4: e7a80018 */ swc1 $f8,0x18($sp)
/* f03bda8: 10000016 */ b .L0f03be04
/* f03bdac: 8fa30030 */ lw $v1,0x30($sp)
.L0f03bdb0:
/* f03bdb0: 8fb8004c */ lw $t8,0x4c($sp)
/* f03bdb4: 8faf0054 */ lw $t7,0x54($sp)
/* f03bdb8: 3c0141c8 */ lui $at,0x41c8
/* f03bdbc: 0018c900 */ sll $t9,$t8,0x4
/* f03bdc0: 01f91821 */ addu $v1,$t7,$t9
/* f03bdc4: c46a000c */ lwc1 $f10,0xc($v1)
/* f03bdc8: 44818000 */ mtc1 $at,$f16
/* f03bdcc: 3c013f00 */ lui $at,0x3f00
/* f03bdd0: 8c650000 */ lw $a1,0x0($v1)
/* f03bdd4: 46105481 */ sub.s $f18,$f10,$f16
/* f03bdd8: 44812000 */ mtc1 $at,$f4
/* f03bddc: 24090010 */ addiu $t1,$zero,0x10
/* f03bde0: afa90014 */ sw $t1,0x14($sp)
/* f03bde4: 44079000 */ mfc1 $a3,$f18
/* f03bde8: afa30030 */ sw $v1,0x30($sp)
/* f03bdec: afa80010 */ sw $t0,0x10($sp)
/* f03bdf0: 02002025 */ or $a0,$s0,$zero
/* f03bdf4: 8fa6003c */ lw $a2,0x3c($sp)
/* f03bdf8: 0fc0ebd1 */ jal chrTryStartAnim
/* f03bdfc: e7a40018 */ swc1 $f4,0x18($sp)
/* f03be00: 8fa30030 */ lw $v1,0x30($sp)
.L0f03be04:
/* f03be04: 10000013 */ b .L0f03be54
/* f03be08: a200035e */ sb $zero,0x35e($s0)
.L0f03be0c:
/* f03be0c: 8fac004c */ lw $t4,0x4c($sp)
/* f03be10: 8faa0054 */ lw $t2,0x54($sp)
/* f03be14: 3c017f1b */ lui $at,%hi(var7f1a8ed8)
/* f03be18: 000c5900 */ sll $t3,$t4,0x4
/* f03be1c: 014b1821 */ addu $v1,$t2,$t3
/* f03be20: 8c650000 */ lw $a1,0x0($v1)
/* f03be24: 8c67000c */ lw $a3,0xc($v1)
/* f03be28: c4268ed8 */ lwc1 $f6,%lo(var7f1a8ed8)($at)
/* f03be2c: 240d0010 */ addiu $t5,$zero,0x10
/* f03be30: afad0014 */ sw $t5,0x14($sp)
/* f03be34: afa30030 */ sw $v1,0x30($sp)
/* f03be38: afa80010 */ sw $t0,0x10($sp)
/* f03be3c: 02002025 */ or $a0,$s0,$zero
/* f03be40: 8fa6003c */ lw $a2,0x3c($sp)
/* f03be44: 0fc0ebd1 */ jal chrTryStartAnim
/* f03be48: e7a60018 */ swc1 $f6,0x18($sp)
/* f03be4c: 8fa30030 */ lw $v1,0x30($sp)
/* f03be50: a200035e */ sb $zero,0x35e($s0)
.L0f03be54:
/* f03be54: 10400073 */ beqz $v0,.L0f03c024
/* f03be58: 02002025 */ or $a0,$s0,$zero
/* f03be5c: 0fc0a221 */ jal chrGetTargetProp
/* f03be60: afa30030 */ sw $v1,0x30($sp)
/* f03be64: 90440000 */ lbu $a0,0x0($v0)
/* f03be68: 24010005 */ addiu $at,$zero,0x5
/* f03be6c: 8fa30030 */ lw $v1,0x30($sp)
/* f03be70: 10810004 */ beq $a0,$at,.L0f03be84
/* f03be74: 24020001 */ addiu $v0,$zero,0x1
/* f03be78: 24010006 */ addiu $at,$zero,0x6
/* f03be7c: 14810004 */ bne $a0,$at,.L0f03be90
/* f03be80: 8fb80044 */ lw $t8,0x44($sp)
.L0f03be84:
/* f03be84: 8fae0040 */ lw $t6,0x40($sp)
/* f03be88: 10000002 */ b .L0f03be94
/* f03be8c: a60e0046 */ sh $t6,0x46($s0)
.L0f03be90:
/* f03be90: a6180046 */ sh $t8,0x46($s0)
.L0f03be94:
/* f03be94: a2020040 */ sb $v0,0x40($s0)
/* f03be98: 846f0008 */ lh $t7,0x8($v1)
/* f03be9c: 3c19800a */ lui $t9,%hi(g_Vars+0x318)
/* f03bea0: 02002025 */ or $a0,$s0,$zero
/* f03bea4: a60f0042 */ sh $t7,0x42($s0)
/* f03bea8: 8f39a2d8 */ lw $t9,%lo(g_Vars+0x318)($t9)
/* f03beac: 24050080 */ addiu $a1,$zero,0x80
/* f03beb0: 24060001 */ addiu $a2,$zero,0x1
/* f03beb4: 13200003 */ beqz $t9,.L0f03bec4
/* f03beb8: 00000000 */ nop
/* f03bebc: 10000050 */ b .L0f03c000
/* f03bec0: a6020044 */ sh $v0,0x44($s0)
.L0f03bec4:
/* f03bec4: 0fc12790 */ jal chrHasFlag
/* f03bec8: afa30030 */ sw $v1,0x30($sp)
/* f03becc: 1040003d */ beqz $v0,.L0f03bfc4
/* f03bed0: 8fa30030 */ lw $v1,0x30($sp)
/* f03bed4: 02002025 */ or $a0,$s0,$zero
/* f03bed8: 24050080 */ addiu $a1,$zero,0x80
/* f03bedc: 00003025 */ or $a2,$zero,$zero
/* f03bee0: 0fc12790 */ jal chrHasFlag
/* f03bee4: afa30030 */ sw $v1,0x30($sp)
/* f03bee8: 10400036 */ beqz $v0,.L0f03bfc4
/* f03beec: 8fa30030 */ lw $v1,0x30($sp)
/* f03bef0: 94690006 */ lhu $t1,0x6($v1)
/* f03bef4: 3c014f80 */ lui $at,0x4f80
/* f03bef8: 44894000 */ mtc1 $t1,$f8
/* f03befc: 05210004 */ bgez $t1,.L0f03bf10
/* f03bf00: 468042a0 */ cvt.s.w $f10,$f8
/* f03bf04: 44818000 */ mtc1 $at,$f16
/* f03bf08: 00000000 */ nop
/* f03bf0c: 46105280 */ add.s $f10,$f10,$f16
.L0f03bf10:
/* f03bf10: 920c0112 */ lbu $t4,0x112($s0)
/* f03bf14: 3c014f80 */ lui $at,0x4f80
/* f03bf18: 448c9000 */ mtc1 $t4,$f18
/* f03bf1c: 05810004 */ bgez $t4,.L0f03bf30
/* f03bf20: 46809120 */ cvt.s.w $f4,$f18
/* f03bf24: 44813000 */ mtc1 $at,$f6
/* f03bf28: 00000000 */ nop
/* f03bf2c: 46062100 */ add.s $f4,$f4,$f6
.L0f03bf30:
/* f03bf30: 46045002 */ mul.s $f0,$f10,$f4
/* f03bf34: 240b0001 */ addiu $t3,$zero,0x1
/* f03bf38: 3c014f00 */ lui $at,0x4f00
/* f03bf3c: 46000200 */ add.s $f8,$f0,$f0
/* f03bf40: 444af800 */ cfc1 $t2,$31
/* f03bf44: 44cbf800 */ ctc1 $t3,$31
/* f03bf48: 00000000 */ nop
/* f03bf4c: 46004424 */ cvt.w.s $f16,$f8
/* f03bf50: 444bf800 */ cfc1 $t3,$31
/* f03bf54: 00000000 */ nop
/* f03bf58: 316b0078 */ andi $t3,$t3,0x78
/* f03bf5c: 51600013 */ beqzl $t3,.L0f03bfac
/* f03bf60: 440b8000 */ mfc1 $t3,$f16
/* f03bf64: 44818000 */ mtc1 $at,$f16
/* f03bf68: 240b0001 */ addiu $t3,$zero,0x1
/* f03bf6c: 46104401 */ sub.s $f16,$f8,$f16
/* f03bf70: 44cbf800 */ ctc1 $t3,$31
/* f03bf74: 00000000 */ nop
/* f03bf78: 46008424 */ cvt.w.s $f16,$f16
/* f03bf7c: 444bf800 */ cfc1 $t3,$31
/* f03bf80: 00000000 */ nop
/* f03bf84: 316b0078 */ andi $t3,$t3,0x78
/* f03bf88: 15600005 */ bnez $t3,.L0f03bfa0
/* f03bf8c: 00000000 */ nop
/* f03bf90: 440b8000 */ mfc1 $t3,$f16
/* f03bf94: 3c018000 */ lui $at,0x8000
/* f03bf98: 10000007 */ b .L0f03bfb8
/* f03bf9c: 01615825 */ or $t3,$t3,$at
.L0f03bfa0:
/* f03bfa0: 10000005 */ b .L0f03bfb8
/* f03bfa4: 240bffff */ addiu $t3,$zero,-1
/* f03bfa8: 440b8000 */ mfc1 $t3,$f16
.L0f03bfac:
/* f03bfac: 00000000 */ nop
/* f03bfb0: 0560fffb */ bltz $t3,.L0f03bfa0
/* f03bfb4: 00000000 */ nop
.L0f03bfb8:
/* f03bfb8: 44caf800 */ ctc1 $t2,$31
/* f03bfbc: 10000010 */ b .L0f03c000
/* f03bfc0: a60b0044 */ sh $t3,0x44($s0)
.L0f03bfc4:
/* f03bfc4: 02002025 */ or $a0,$s0,$zero
/* f03bfc8: 3c058000 */ lui $a1,0x8000
/* f03bfcc: 24060001 */ addiu $a2,$zero,0x1
/* f03bfd0: 0fc12790 */ jal chrHasFlag
/* f03bfd4: afa30030 */ sw $v1,0x30($sp)
/* f03bfd8: 10400007 */ beqz $v0,.L0f03bff8
/* f03bfdc: 8fa30030 */ lw $v1,0x30($sp)
/* f03bfe0: 946d0006 */ lhu $t5,0x6($v1)
/* f03bfe4: 000d7080 */ sll $t6,$t5,0x2
/* f03bfe8: 01cd7023 */ subu $t6,$t6,$t5
/* f03bfec: 000e7040 */ sll $t6,$t6,0x1
/* f03bff0: 10000003 */ b .L0f03c000
/* f03bff4: a60e0044 */ sh $t6,0x44($s0)
.L0f03bff8:
/* f03bff8: 8c780004 */ lw $t8,0x4($v1)
/* f03bffc: a6180044 */ sh $t8,0x44($s0)
.L0f03c000:
/* f03c000: 8e190018 */ lw $t9,0x18($s0)
/* f03c004: 3c017fff */ lui $at,0x7fff
/* f03c008: 93af005f */ lbu $t7,0x5f($sp)
/* f03c00c: 3421ffff */ ori $at,$at,0xffff
/* f03c010: 03214824 */ and $t1,$t9,$at
/* f03c014: ae090018 */ sw $t1,0x18($s0)
/* f03c018: 24020001 */ addiu $v0,$zero,0x1
/* f03c01c: 10000002 */ b .L0f03c028
/* f03c020: a20f0041 */ sb $t7,0x41($s0)
.L0f03c024:
/* f03c024: 00001025 */ or $v0,$zero,$zero
.L0f03c028:
/* f03c028: 8fbf002c */ lw $ra,0x2c($sp)
/* f03c02c: 8fb00028 */ lw $s0,0x28($sp)
/* f03c030: 27bd0058 */ addiu $sp,$sp,0x58
/* f03c034: 03e00008 */ jr $ra
/* f03c038: 00000000 */ nop
/* f03c03c: 03e00008 */ jr $ra
/* f03c040: 00000000 */ nop
);
/**
* Verifies that the given chr struct is actually an eyespy and returns the
* eyespy struct.
*
* Eyespys have their own chr struct, even though they aren't a chr. Iterating
* the player list is required because the only pointer to an eyespy is via the
* player struct.
*/
struct eyespy *chrToEyespy(struct chrdata *chr)
{
if (chr && chr->prop) {
if (CHRRACE(chr) == RACE_EYESPY) {
s32 playercount = PLAYERCOUNT();
s32 i;
for (i = 0; i < playercount; i++) {
if (g_Vars.players[i]->eyespy && chr->prop == g_Vars.players[i]->eyespy->prop) {
return g_Vars.players[i]->eyespy;
}
}
return NULL;
}
}
return NULL;
}
GLOBAL_ASM(
glabel chrTickStand
.late_rodata
glabel var7f1a8edc
.word 0x3eb2b17a
glabel var7f1a8ee0
.word 0x40bddc91
glabel var7f1a8ee4
.word 0x3e32b17a
glabel var7f1a8ee8
.word 0x40c3721d
glabel var7f1a8eec
.word 0x40c907a9
glabel var7f1a8ef0
.word 0x3f4907a9
glabel var7f1a8ef4
.word 0x40c907a9
glabel var7f1a8ef8
.word 0x40c907a9
glabel var7f1a8efc
.word 0x40c907a9
glabel var7f1a8f00
.word 0x40c907a9
glabel var7f1a8f04
.word 0x3f4907a9
glabel var7f1a8f08
.word 0x46230028
.text
/* f03c138: 27bdff48 */ addiu $sp,$sp,-184
/* f03c13c: afbf0024 */ sw $ra,0x24($sp)
/* f03c140: afb00020 */ sw $s0,0x20($sp)
/* f03c144: 8c8e0014 */ lw $t6,0x14($a0)
/* f03c148: 00808025 */ or $s0,$a0,$zero
/* f03c14c: 000e7a80 */ sll $t7,$t6,0xa
/* f03c150: 05e1000c */ bgez $t7,.L0f03c184
/* f03c154: 00000000 */ nop
/* f03c158: 0c0076e5 */ jal modelIsAnimMerging
/* f03c15c: 8c840020 */ lw $a0,0x20($a0)
/* f03c160: 144001cf */ bnez $v0,.L0f03c8a0
/* f03c164: 02002025 */ or $a0,$s0,$zero
/* f03c168: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f03c16c: 8e050048 */ lw $a1,0x48($s0)
/* f03c170: 8e180014 */ lw $t8,0x14($s0)
/* f03c174: 3c01ffdf */ lui $at,0xffdf
/* f03c178: 3421ffff */ ori $at,$at,0xffff
/* f03c17c: 0301c824 */ and $t9,$t8,$at
/* f03c180: ae190014 */ sw $t9,0x14($s0)
.L0f03c184:
/* f03c184: 0c00744f */ jal modelGetAnimNum
/* f03c188: 8e040020 */ lw $a0,0x20($s0)
/* f03c18c: 2401026b */ addiu $at,$zero,0x26b
/* f03c190: 54410011 */ bnel $v0,$at,.L0f03c1d8
/* f03c194: 820b0008 */ lb $t3,0x8($s0)
/* f03c198: 0c00745f */ jal modelGetCurAnimFrame
/* f03c19c: 8e040020 */ lw $a0,0x20($s0)
/* f03c1a0: e7a0003c */ swc1 $f0,0x3c($sp)
/* f03c1a4: 0c007468 */ jal modelGetAnimEndFrame
/* f03c1a8: 8e040020 */ lw $a0,0x20($s0)
/* f03c1ac: c7a4003c */ lwc1 $f4,0x3c($sp)
/* f03c1b0: 02002025 */ or $a0,$s0,$zero
/* f03c1b4: 4604003e */ c.le.s $f0,$f4
/* f03c1b8: 00000000 */ nop
/* f03c1bc: 450201b9 */ bc1fl .L0f03c8a4
/* f03c1c0: 8fbf0024 */ lw $ra,0x24($sp)
/* f03c1c4: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f03c1c8: 3c054100 */ lui $a1,0x4100
/* f03c1cc: 100001b4 */ b .L0f03c8a0
/* f03c1d0: ae00002c */ sw $zero,0x2c($s0)
/* f03c1d4: 820b0008 */ lb $t3,0x8($s0)
.L0f03c1d8:
/* f03c1d8: 24010003 */ addiu $at,$zero,0x3
/* f03c1dc: 5d6001b1 */ bgtzl $t3,.L0f03c8a4
/* f03c1e0: 8fbf0024 */ lw $ra,0x24($sp)
/* f03c1e4: 12000003 */ beqz $s0,.L0f03c1f4
/* f03c1e8: 00001825 */ or $v1,$zero,$zero
/* f03c1ec: 10000001 */ b .L0f03c1f4
/* f03c1f0: 920302fe */ lbu $v1,0x2fe($s0)
.L0f03c1f4:
/* f03c1f4: 506101ab */ beql $v1,$at,.L0f03c8a4
/* f03c1f8: 8fbf0024 */ lw $ra,0x24($sp)
/* f03c1fc: 8e0c002c */ lw $t4,0x2c($s0)
/* f03c200: 51800012 */ beqzl $t4,.L0f03c24c
/* f03c204: 8e0202d4 */ lw $v0,0x2d4($s0)
/* f03c208: 0c00745f */ jal modelGetCurAnimFrame
/* f03c20c: 8e040020 */ lw $a0,0x20($s0)
/* f03c210: e7a0003c */ swc1 $f0,0x3c($sp)
/* f03c214: 0c007468 */ jal modelGetAnimEndFrame
/* f03c218: 8e040020 */ lw $a0,0x20($s0)
/* f03c21c: c7a6003c */ lwc1 $f6,0x3c($sp)
/* f03c220: 02002025 */ or $a0,$s0,$zero
/* f03c224: 4606003e */ c.le.s $f0,$f6
/* f03c228: 00000000 */ nop
/* f03c22c: 45000004 */ bc1f .L0f03c240
/* f03c230: 00000000 */ nop
/* f03c234: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f03c238: 3c054100 */ lui $a1,0x4100
/* f03c23c: ae00002c */ sw $zero,0x2c($s0)
.L0f03c240:
/* f03c240: 10000197 */ b .L0f03c8a0
/* f03c244: a2000008 */ sb $zero,0x8($s0)
/* f03c248: 8e0202d4 */ lw $v0,0x2d4($s0)
.L0f03c24c:
/* f03c24c: 144000b8 */ bnez $v0,.L0f03c530
/* f03c250: 00000000 */ nop
/* f03c254: 10600003 */ beqz $v1,.L0f03c264
/* f03c258: 24010001 */ addiu $at,$zero,0x1
/* f03c25c: 146100b4 */ bne $v1,$at,.L0f03c530
/* f03c260: 00000000 */ nop
.L0f03c264:
/* f03c264: 8e050030 */ lw $a1,0x30($s0)
/* f03c268: 18a000b1 */ blez $a1,.L0f03c530
/* f03c26c: 00000000 */ nop
/* f03c270: 8e0d0038 */ lw $t5,0x38($s0)
/* f03c274: 02002025 */ or $a0,$s0,$zero
/* f03c278: 51a0001c */ beqzl $t5,.L0f03c2ec
/* f03c27c: 8e060034 */ lw $a2,0x34($s0)
/* f03c280: 0c007486 */ jal modelGetNumAnimFrames
/* f03c284: 8e040020 */ lw $a0,0x20($s0)
/* f03c288: 244effff */ addiu $t6,$v0,-1
/* f03c28c: 448e4000 */ mtc1 $t6,$f8
/* f03c290: 44805000 */ mtc1 $zero,$f10
/* f03c294: 8e05003c */ lw $a1,0x3c($s0)
/* f03c298: 46804220 */ cvt.s.w $f8,$f8
/* f03c29c: 02002025 */ or $a0,$s0,$zero
/* f03c2a0: 3c073f80 */ lui $a3,0x3f80
/* f03c2a4: e7aa0010 */ swc1 $f10,0x10($sp)
/* f03c2a8: 44064000 */ mfc1 $a2,$f8
/* f03c2ac: 0fc0f9e2 */ jal func0f03e788
/* f03c2b0: 00000000 */ nop
/* f03c2b4: 24010001 */ addiu $at,$zero,0x1
/* f03c2b8: 1041009b */ beq $v0,$at,.L0f03c528
/* f03c2bc: ae02003c */ sw $v0,0x3c($s0)
/* f03c2c0: 02002025 */ or $a0,$s0,$zero
/* f03c2c4: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f03c2c8: 3c054100 */ lui $a1,0x4100
/* f03c2cc: 8e0f0030 */ lw $t7,0x30($s0)
/* f03c2d0: ae000038 */ sw $zero,0x38($s0)
/* f03c2d4: 31f80010 */ andi $t8,$t7,0x10
/* f03c2d8: 13000093 */ beqz $t8,.L0f03c528
/* f03c2dc: 00000000 */ nop
/* f03c2e0: 10000091 */ b .L0f03c528
/* f03c2e4: ae000030 */ sw $zero,0x30($s0)
/* f03c2e8: 8e060034 */ lw $a2,0x34($s0)
.L0f03c2ec:
/* f03c2ec: 0fc0b8b4 */ jal func0f02e2d0
/* f03c2f0: afa300b4 */ sw $v1,0xb4($sp)
/* f03c2f4: 3c017f1b */ lui $at,%hi(var7f1a8edc)
/* f03c2f8: c4308edc */ lwc1 $f16,%lo(var7f1a8edc)($at)
/* f03c2fc: 8fa300b4 */ lw $v1,0xb4($sp)
/* f03c300: 3c017f1b */ lui $at,%hi(var7f1a8ee0)
/* f03c304: 4600803c */ c.lt.s $f16,$f0
/* f03c308: 00000000 */ nop
/* f03c30c: 45000005 */ bc1f .L0f03c324
/* f03c310: 00000000 */ nop
/* f03c314: c4328ee0 */ lwc1 $f18,%lo(var7f1a8ee0)($at)
/* f03c318: 4612003c */ c.lt.s $f0,$f18
/* f03c31c: 00000000 */ nop
/* f03c320: 4501000e */ bc1t .L0f03c35c
.L0f03c324:
/* f03c324: 3c017f1b */ lui $at,%hi(var7f1a8ee4)
/* f03c328: c4248ee4 */ lwc1 $f4,%lo(var7f1a8ee4)($at)
/* f03c32c: 3c017f1b */ lui $at,%hi(var7f1a8ee8)
/* f03c330: 4600203c */ c.lt.s $f4,$f0
/* f03c334: 00000000 */ nop
/* f03c338: 45020077 */ bc1fl .L0f03c518
/* f03c33c: 8e0c0030 */ lw $t4,0x30($s0)
/* f03c340: c4268ee8 */ lwc1 $f6,%lo(var7f1a8ee8)($at)
/* f03c344: 4606003c */ c.lt.s $f0,$f6
/* f03c348: 00000000 */ nop
/* f03c34c: 45020072 */ bc1fl .L0f03c518
/* f03c350: 8e0c0030 */ lw $t4,0x30($s0)
/* f03c354: 9219004c */ lbu $t9,0x4c($s0)
/* f03c358: 1720006e */ bnez $t9,.L0f03c514
.L0f03c35c:
/* f03c35c: 02002025 */ or $a0,$s0,$zero
/* f03c360: 24050001 */ addiu $a1,$zero,0x1
/* f03c364: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f03c368: afa300b4 */ sw $v1,0xb4($sp)
/* f03c36c: afa200a4 */ sw $v0,0xa4($sp)
/* f03c370: 02002025 */ or $a0,$s0,$zero
/* f03c374: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f03c378: 00002825 */ or $a1,$zero,$zero
/* f03c37c: 8fa300b4 */ lw $v1,0xb4($sp)
/* f03c380: afa200a0 */ sw $v0,0xa0($sp)
/* f03c384: 240b0001 */ addiu $t3,$zero,0x1
/* f03c388: 240c0001 */ addiu $t4,$zero,0x1
/* f03c38c: ae0b0038 */ sw $t3,0x38($s0)
/* f03c390: 14600045 */ bnez $v1,.L0f03c4a8
/* f03c394: ae0c003c */ sw $t4,0x3c($s0)
/* f03c398: 8fa400a4 */ lw $a0,0xa4($sp)
/* f03c39c: 10800003 */ beqz $a0,.L0f03c3ac
/* f03c3a0: 00000000 */ nop
/* f03c3a4: 1440000d */ bnez $v0,.L0f03c3dc
/* f03c3a8: 00000000 */ nop
.L0f03c3ac:
/* f03c3ac: 14800003 */ bnez $a0,.L0f03c3bc
/* f03c3b0: 00000000 */ nop
/* f03c3b4: 10400009 */ beqz $v0,.L0f03c3dc
/* f03c3b8: 00000000 */ nop
.L0f03c3bc:
/* f03c3bc: 0fc0b849 */ jal weaponIsOneHanded
/* f03c3c0: 00000000 */ nop
/* f03c3c4: 14400005 */ bnez $v0,.L0f03c3dc
/* f03c3c8: 00000000 */ nop
/* f03c3cc: 0fc0b849 */ jal weaponIsOneHanded
/* f03c3d0: 8fa400a0 */ lw $a0,0xa0($sp)
/* f03c3d4: 10400019 */ beqz $v0,.L0f03c43c
/* f03c3d8: 8fae00a0 */ lw $t6,0xa0($sp)
.L0f03c3dc:
/* f03c3dc: 0c004b70 */ jal random
/* f03c3e0: 00000000 */ nop
/* f03c3e4: 3c013f00 */ lui $at,0x3f00
/* f03c3e8: 44814000 */ mtc1 $at,$f8
/* f03c3ec: 3c014180 */ lui $at,0x4180
/* f03c3f0: 44815000 */ mtc1 $at,$f10
/* f03c3f4: 8e040020 */ lw $a0,0x20($s0)
/* f03c3f8: 2405006b */ addiu $a1,$zero,0x6b
/* f03c3fc: 30460001 */ andi $a2,$v0,0x1
/* f03c400: 24070000 */ addiu $a3,$zero,0x0
/* f03c404: e7a80010 */ swc1 $f8,0x10($sp)
/* f03c408: 0c007733 */ jal modelSetAnimation
/* f03c40c: e7aa0014 */ swc1 $f10,0x14($sp)
/* f03c410: 0c008dda */ jal animGetNumFrames
/* f03c414: 2404006b */ addiu $a0,$zero,0x6b
/* f03c418: 244dffff */ addiu $t5,$v0,-1
/* f03c41c: 448d8000 */ mtc1 $t5,$f16
/* f03c420: 8e040020 */ lw $a0,0x20($s0)
/* f03c424: 46808420 */ cvt.s.w $f16,$f16
/* f03c428: 44058000 */ mfc1 $a1,$f16
/* f03c42c: 0c007787 */ jal modelSetAnimEndFrame
/* f03c430: 00000000 */ nop
/* f03c434: 1000003c */ b .L0f03c528
/* f03c438: 00000000 */ nop
.L0f03c43c:
/* f03c43c: 15c00002 */ bnez $t6,.L0f03c448
/* f03c440: 8faf00a4 */ lw $t7,0xa4($sp)
/* f03c444: 11e00038 */ beqz $t7,.L0f03c528
.L0f03c448:
/* f03c448: 3c013f00 */ lui $at,0x3f00
/* f03c44c: 44819000 */ mtc1 $at,$f18
/* f03c450: 8fa600a4 */ lw $a2,0xa4($sp)
/* f03c454: 3c014180 */ lui $at,0x4180
/* f03c458: 44812000 */ mtc1 $at,$f4
/* f03c45c: 8e040020 */ lw $a0,0x20($s0)
/* f03c460: 0006c02b */ sltu $t8,$zero,$a2
/* f03c464: 03003025 */ or $a2,$t8,$zero
/* f03c468: 24050028 */ addiu $a1,$zero,0x28
/* f03c46c: 24070000 */ addiu $a3,$zero,0x0
/* f03c470: e7b20010 */ swc1 $f18,0x10($sp)
/* f03c474: 0c007733 */ jal modelSetAnimation
/* f03c478: e7a40014 */ swc1 $f4,0x14($sp)
/* f03c47c: 0c008dda */ jal animGetNumFrames
/* f03c480: 24040028 */ addiu $a0,$zero,0x28
/* f03c484: 2459ffff */ addiu $t9,$v0,-1
/* f03c488: 44993000 */ mtc1 $t9,$f6
/* f03c48c: 8e040020 */ lw $a0,0x20($s0)
/* f03c490: 468031a0 */ cvt.s.w $f6,$f6
/* f03c494: 44053000 */ mfc1 $a1,$f6
/* f03c498: 0c007787 */ jal modelSetAnimEndFrame
/* f03c49c: 00000000 */ nop
/* f03c4a0: 10000021 */ b .L0f03c528
/* f03c4a4: 00000000 */ nop
.L0f03c4a8:
/* f03c4a8: 24010001 */ addiu $at,$zero,0x1
/* f03c4ac: 1461001e */ bne $v1,$at,.L0f03c528
/* f03c4b0: 00000000 */ nop
/* f03c4b4: 0c004b70 */ jal random
/* f03c4b8: 00000000 */ nop
/* f03c4bc: 3c013f00 */ lui $at,0x3f00
/* f03c4c0: 44814000 */ mtc1 $at,$f8
/* f03c4c4: 3c014180 */ lui $at,0x4180
/* f03c4c8: 44815000 */ mtc1 $at,$f10
/* f03c4cc: 8e040020 */ lw $a0,0x20($s0)
/* f03c4d0: 24050392 */ addiu $a1,$zero,0x392
/* f03c4d4: 30460001 */ andi $a2,$v0,0x1
/* f03c4d8: 24070000 */ addiu $a3,$zero,0x0
/* f03c4dc: e7a80010 */ swc1 $f8,0x10($sp)
/* f03c4e0: 0c007733 */ jal modelSetAnimation
/* f03c4e4: e7aa0014 */ swc1 $f10,0x14($sp)
/* f03c4e8: 0c008dda */ jal animGetNumFrames
/* f03c4ec: 24040392 */ addiu $a0,$zero,0x392
/* f03c4f0: 244bffff */ addiu $t3,$v0,-1
/* f03c4f4: 448b8000 */ mtc1 $t3,$f16
/* f03c4f8: 8e040020 */ lw $a0,0x20($s0)
/* f03c4fc: 46808420 */ cvt.s.w $f16,$f16
/* f03c500: 44058000 */ mfc1 $a1,$f16
/* f03c504: 0c007787 */ jal modelSetAnimEndFrame
/* f03c508: 00000000 */ nop
/* f03c50c: 10000006 */ b .L0f03c528
/* f03c510: 00000000 */ nop
.L0f03c514:
/* f03c514: 8e0c0030 */ lw $t4,0x30($s0)
.L0f03c518:
/* f03c518: 318d0010 */ andi $t5,$t4,0x10
/* f03c51c: 11a00002 */ beqz $t5,.L0f03c528
/* f03c520: 00000000 */ nop
/* f03c524: ae000030 */ sw $zero,0x30($s0)
.L0f03c528:
/* f03c528: 100000dd */ b .L0f03c8a0
/* f03c52c: a2000008 */ sb $zero,0x8($s0)
.L0f03c530:
/* f03c530: 544000dc */ bnezl $v0,.L0f03c8a4
/* f03c534: 8fbf0024 */ lw $ra,0x24($sp)
/* f03c538: 8e0e001c */ lw $t6,0x1c($s0)
/* f03c53c: 91cf0001 */ lbu $t7,0x1($t6)
/* f03c540: 31f80080 */ andi $t8,$t7,0x80
/* f03c544: 13000003 */ beqz $t8,.L0f03c554
/* f03c548: 00000000 */ nop
/* f03c54c: 10000008 */ b .L0f03c570
/* f03c550: a2000008 */ sb $zero,0x8($s0)
.L0f03c554:
/* f03c554: 0c004b70 */ jal random
/* f03c558: 00000000 */ nop
/* f03c55c: 24010005 */ addiu $at,$zero,0x5
/* f03c560: 0041001b */ divu $zero,$v0,$at
/* f03c564: 0000c810 */ mfhi $t9
/* f03c568: 272b000e */ addiu $t3,$t9,0xe
/* f03c56c: a20b0008 */ sb $t3,0x8($s0)
.L0f03c570:
/* f03c570: 8e0c0040 */ lw $t4,0x40($s0)
/* f03c574: 518000cb */ beqzl $t4,.L0f03c8a4
/* f03c578: 8fbf0024 */ lw $ra,0x24($sp)
/* f03c57c: 8e0d0018 */ lw $t5,0x18($s0)
/* f03c580: 31ae0080 */ andi $t6,$t5,0x80
/* f03c584: 51c00004 */ beqzl $t6,.L0f03c598
/* f03c588: 8e0f0044 */ lw $t7,0x44($s0)
/* f03c58c: 100000c4 */ b .L0f03c8a0
/* f03c590: ae000040 */ sw $zero,0x40($s0)
/* f03c594: 8e0f0044 */ lw $t7,0x44($s0)
.L0f03c598:
/* f03c598: 82180008 */ lb $t8,0x8($s0)
/* f03c59c: 01f8c823 */ subu $t9,$t7,$t8
/* f03c5a0: 072100bf */ bgez $t9,.L0f03c8a0
/* f03c5a4: ae190044 */ sw $t9,0x44($s0)
/* f03c5a8: 0fc0f917 */ jal chrGetInverseTheta
/* f03c5ac: 02002025 */ or $a0,$s0,$zero
/* f03c5b0: 3c017f1b */ lui $at,%hi(var7f1a8eec)
/* f03c5b4: e7a00070 */ swc1 $f0,0x70($sp)
/* f03c5b8: 46000086 */ mov.s $f2,$f0
/* f03c5bc: c42c8eec */ lwc1 $f12,%lo(var7f1a8eec)($at)
/* f03c5c0: 27a20074 */ addiu $v0,$sp,0x74
.L0f03c5c4:
/* f03c5c4: 3c017f1b */ lui $at,%hi(var7f1a8ef0)
/* f03c5c8: c4328ef0 */ lwc1 $f18,%lo(var7f1a8ef0)($at)
/* f03c5cc: 3c013f80 */ lui $at,0x3f80
/* f03c5d0: 44813000 */ mtc1 $at,$f6
/* f03c5d4: 46121080 */ add.s $f2,$f2,$f18
/* f03c5d8: 44802000 */ mtc1 $zero,$f4
/* f03c5dc: 3c06447a */ lui $a2,0x447a
/* f03c5e0: 24070020 */ addiu $a3,$zero,0x20
/* f03c5e4: 4602603e */ c.le.s $f12,$f2
/* f03c5e8: 00000000 */ nop
/* f03c5ec: 45020003 */ bc1fl .L0f03c5fc
/* f03c5f0: 8e04001c */ lw $a0,0x1c($s0)
/* f03c5f4: 460c1081 */ sub.s $f2,$f2,$f12
/* f03c5f8: 8e04001c */ lw $a0,0x1c($s0)
.L0f03c5fc:
/* f03c5fc: 44051000 */ mfc1 $a1,$f2
/* f03c600: e7a2006c */ swc1 $f2,0x6c($sp)
/* f03c604: afa20034 */ sw $v0,0x34($sp)
/* f03c608: e7a60014 */ swc1 $f6,0x14($sp)
/* f03c60c: 0fc0b954 */ jal func0f02e550
/* f03c610: e7a40010 */ swc1 $f4,0x10($sp)
/* f03c614: 8fa20034 */ lw $v0,0x34($sp)
/* f03c618: 3c017f1b */ lui $at,%hi(var7f1a8ef4)
/* f03c61c: 27ac0094 */ addiu $t4,$sp,0x94
/* f03c620: c42c8ef4 */ lwc1 $f12,%lo(var7f1a8ef4)($at)
/* f03c624: 24420004 */ addiu $v0,$v0,0x4
/* f03c628: 004c082b */ sltu $at,$v0,$t4
/* f03c62c: c7a2006c */ lwc1 $f2,0x6c($sp)
/* f03c630: 1420ffe4 */ bnez $at,.L0f03c5c4
/* f03c634: e440fffc */ swc1 $f0,-0x4($v0)
/* f03c638: 00003825 */ or $a3,$zero,$zero
/* f03c63c: 27a80044 */ addiu $t0,$sp,0x44
.L0f03c640:
/* f03c640: ad070000 */ sw $a3,0x0($t0)
/* f03c644: 24e70001 */ addiu $a3,$a3,0x1
/* f03c648: 28e10008 */ slti $at,$a3,0x8
/* f03c64c: 1420fffc */ bnez $at,.L0f03c640
/* f03c650: 25080004 */ addiu $t0,$t0,0x4
/* f03c654: 00003825 */ or $a3,$zero,$zero
/* f03c658: 27a80044 */ addiu $t0,$sp,0x44
/* f03c65c: 27aa0044 */ addiu $t2,$sp,0x44
/* f03c660: 24050008 */ addiu $a1,$zero,0x8
/* f03c664: 27a40074 */ addiu $a0,$sp,0x74
.L0f03c668:
/* f03c668: 24e90001 */ addiu $t1,$a3,0x1
/* f03c66c: 29210008 */ slti $at,$t1,0x8
/* f03c670: 00e03025 */ or $a2,$a3,$zero
/* f03c674: 10200015 */ beqz $at,.L0f03c6cc
/* f03c678: 01201825 */ or $v1,$t1,$zero
/* f03c67c: 00036880 */ sll $t5,$v1,0x2
/* f03c680: 014d1021 */ addu $v0,$t2,$t5
.L0f03c684:
/* f03c684: 0006c880 */ sll $t9,$a2,0x2
/* f03c688: 8c4e0000 */ lw $t6,0x0($v0)
/* f03c68c: 01595821 */ addu $t3,$t2,$t9
/* f03c690: 8d6c0000 */ lw $t4,0x0($t3)
/* f03c694: 000e7880 */ sll $t7,$t6,0x2
/* f03c698: 008fc021 */ addu $t8,$a0,$t7
/* f03c69c: 000c6880 */ sll $t5,$t4,0x2
/* f03c6a0: 008d7021 */ addu $t6,$a0,$t5
/* f03c6a4: c5ca0000 */ lwc1 $f10,0x0($t6)
/* f03c6a8: c7080000 */ lwc1 $f8,0x0($t8)
/* f03c6ac: 460a403c */ c.lt.s $f8,$f10
/* f03c6b0: 00000000 */ nop
/* f03c6b4: 45020003 */ bc1fl .L0f03c6c4
/* f03c6b8: 24630001 */ addiu $v1,$v1,0x1
/* f03c6bc: 00603025 */ or $a2,$v1,$zero
/* f03c6c0: 24630001 */ addiu $v1,$v1,0x1
.L0f03c6c4:
/* f03c6c4: 1465ffef */ bne $v1,$a1,.L0f03c684
/* f03c6c8: 24420004 */ addiu $v0,$v0,0x4
.L0f03c6cc:
/* f03c6cc: 00067880 */ sll $t7,$a2,0x2
/* f03c6d0: 014f1021 */ addu $v0,$t2,$t7
/* f03c6d4: 8c580000 */ lw $t8,0x0($v0)
/* f03c6d8: 8d030000 */ lw $v1,0x0($t0)
/* f03c6dc: 29210007 */ slti $at,$t1,0x7
/* f03c6e0: ad180000 */ sw $t8,0x0($t0)
/* f03c6e4: 01203825 */ or $a3,$t1,$zero
/* f03c6e8: 25080004 */ addiu $t0,$t0,0x4
/* f03c6ec: 1420ffde */ bnez $at,.L0f03c668
/* f03c6f0: ac430000 */ sw $v1,0x0($v0)
/* f03c6f4: 3c0143f5 */ lui $at,0x43f5
/* f03c6f8: 44819000 */ mtc1 $at,$f18
/* f03c6fc: c7b00074 */ lwc1 $f16,0x74($sp)
/* f03c700: 8fa50054 */ lw $a1,0x54($sp)
/* f03c704: 2406ffff */ addiu $a2,$zero,-1
/* f03c708: 4612803c */ c.lt.s $f16,$f18
/* f03c70c: 0005c880 */ sll $t9,$a1,0x2
/* f03c710: 00995821 */ addu $t3,$a0,$t9
/* f03c714: 3c014348 */ lui $at,0x4348
/* f03c718: 45000045 */ bc1f .L0f03c830
/* f03c71c: 00000000 */ nop
/* f03c720: c5640000 */ lwc1 $f4,0x0($t3)
/* f03c724: 44813000 */ mtc1 $at,$f6
/* f03c728: 8fa20044 */ lw $v0,0x44($sp)
/* f03c72c: 4606203c */ c.lt.s $f4,$f6
/* f03c730: 00000000 */ nop
/* f03c734: 45000003 */ bc1f .L0f03c744
/* f03c738: 00000000 */ nop
/* f03c73c: 1000003c */ b .L0f03c830
/* f03c740: 24060007 */ addiu $a2,$zero,0x7
.L0f03c744:
/* f03c744: 10400005 */ beqz $v0,.L0f03c75c
/* f03c748: 8fac0048 */ lw $t4,0x48($sp)
/* f03c74c: 11800003 */ beqz $t4,.L0f03c75c
/* f03c750: 8fad004c */ lw $t5,0x4c($sp)
/* f03c754: 15a00022 */ bnez $t5,.L0f03c7e0
/* f03c758: 24010001 */ addiu $at,$zero,0x1
.L0f03c75c:
/* f03c75c: 8fae0050 */ lw $t6,0x50($sp)
/* f03c760: 24030004 */ addiu $v1,$zero,0x4
/* f03c764: 106e0003 */ beq $v1,$t6,.L0f03c774
/* f03c768: 00000000 */ nop
/* f03c76c: 14650012 */ bne $v1,$a1,.L0f03c7b8
/* f03c770: 00000000 */ nop
.L0f03c774:
/* f03c774: 0c004b70 */ jal random
/* f03c778: 00000000 */ nop
/* f03c77c: 3c017f1b */ lui $at,%hi(var7f1a8ef8)
/* f03c780: c42c8ef8 */ lwc1 $f12,%lo(var7f1a8ef8)($at)
/* f03c784: 24010003 */ addiu $at,$zero,0x3
/* f03c788: 0041001b */ divu $zero,$v0,$at
/* f03c78c: 00007810 */ mfhi $t7
/* f03c790: 24030004 */ addiu $v1,$zero,0x4
/* f03c794: 15e00008 */ bnez $t7,.L0f03c7b8
/* f03c798: 27aa0044 */ addiu $t2,$sp,0x44
/* f03c79c: 8fb80050 */ lw $t8,0x50($sp)
/* f03c7a0: 14780003 */ bne $v1,$t8,.L0f03c7b0
/* f03c7a4: 00000000 */ nop
/* f03c7a8: 10000021 */ b .L0f03c830
/* f03c7ac: 24060003 */ addiu $a2,$zero,0x3
.L0f03c7b0:
/* f03c7b0: 1000001f */ b .L0f03c830
/* f03c7b4: 24060004 */ addiu $a2,$zero,0x4
.L0f03c7b8:
/* f03c7b8: 0c004b70 */ jal random
/* f03c7bc: 00000000 */ nop
/* f03c7c0: 3c017f1b */ lui $at,%hi(var7f1a8efc)
/* f03c7c4: c42c8efc */ lwc1 $f12,%lo(var7f1a8efc)($at)
/* f03c7c8: 24010003 */ addiu $at,$zero,0x3
/* f03c7cc: 0041001b */ divu $zero,$v0,$at
/* f03c7d0: 00003010 */ mfhi $a2
/* f03c7d4: 24c60005 */ addiu $a2,$a2,0x5
/* f03c7d8: 10000015 */ b .L0f03c830
/* f03c7dc: 27aa0044 */ addiu $t2,$sp,0x44
.L0f03c7e0:
/* f03c7e0: 10410004 */ beq $v0,$at,.L0f03c7f4
/* f03c7e4: 8fb90058 */ lw $t9,0x58($sp)
/* f03c7e8: 24010007 */ addiu $at,$zero,0x7
/* f03c7ec: 14410010 */ bne $v0,$at,.L0f03c830
/* f03c7f0: 00000000 */ nop
.L0f03c7f4:
/* f03c7f4: 1320000e */ beqz $t9,.L0f03c830
/* f03c7f8: 8fab005c */ lw $t3,0x5c($sp)
/* f03c7fc: 1160000c */ beqz $t3,.L0f03c830
/* f03c800: 8fac0060 */ lw $t4,0x60($sp)
/* f03c804: 1180000a */ beqz $t4,.L0f03c830
/* f03c808: 00000000 */ nop
/* f03c80c: 0c004b70 */ jal random
/* f03c810: 00000000 */ nop
/* f03c814: 3c017f1b */ lui $at,%hi(var7f1a8f00)
/* f03c818: c42c8f00 */ lwc1 $f12,%lo(var7f1a8f00)($at)
/* f03c81c: 24010003 */ addiu $at,$zero,0x3
/* f03c820: 0041001b */ divu $zero,$v0,$at
/* f03c824: 00003010 */ mfhi $a2
/* f03c828: 24c60005 */ addiu $a2,$a2,0x5
/* f03c82c: 27aa0044 */ addiu $t2,$sp,0x44
.L0f03c830:
/* f03c830: 04c0001a */ bltz $a2,.L0f03c89c
/* f03c834: 00066880 */ sll $t5,$a2,0x2
/* f03c838: 014d7021 */ addu $t6,$t2,$t5
/* f03c83c: 8dc70000 */ lw $a3,0x0($t6)
/* f03c840: 3c017f1b */ lui $at,%hi(var7f1a8f04)
/* f03c844: c4308f04 */ lwc1 $f16,%lo(var7f1a8f04)($at)
/* f03c848: 44874000 */ mtc1 $a3,$f8
/* f03c84c: c7a40070 */ lwc1 $f4,0x70($sp)
/* f03c850: 3c017f1b */ lui $at,%hi(var7f1a8f08)
/* f03c854: 468042a0 */ cvt.s.w $f10,$f8
/* f03c858: 46105482 */ mul.s $f18,$f10,$f16
/* f03c85c: 46049000 */ add.s $f0,$f18,$f4
/* f03c860: 4600603e */ c.le.s $f12,$f0
/* f03c864: 46000086 */ mov.s $f2,$f0
/* f03c868: 45000002 */ bc1f .L0f03c874
/* f03c86c: 00000000 */ nop
/* f03c870: 460c0081 */ sub.s $f2,$f0,$f12
.L0f03c874:
/* f03c874: c4268f08 */ lwc1 $f6,%lo(var7f1a8f08)($at)
/* f03c878: 02002025 */ or $a0,$s0,$zero
/* f03c87c: 24050010 */ addiu $a1,$zero,0x10
/* f03c880: 46061202 */ mul.s $f8,$f2,$f6
/* f03c884: 4600428d */ trunc.w.s $f10,$f8
/* f03c888: 44065000 */ mfc1 $a2,$f10
/* f03c88c: 0fc0e9fa */ jal chrFaceEntity
/* f03c890: 00000000 */ nop
/* f03c894: 10000003 */ b .L0f03c8a4
/* f03c898: 8fbf0024 */ lw $ra,0x24($sp)
.L0f03c89c:
/* f03c89c: ae000040 */ sw $zero,0x40($s0)
.L0f03c8a0:
/* f03c8a0: 8fbf0024 */ lw $ra,0x24($sp)
.L0f03c8a4:
/* f03c8a4: 8fb00020 */ lw $s0,0x20($sp)
/* f03c8a8: 27bd00b8 */ addiu $sp,$sp,0xb8
/* f03c8ac: 03e00008 */ jr $ra
/* f03c8b0: 00000000 */ nop
);
void chrTickKneel(struct chrdata *chr)
{
chr->sleep = 0;
if ((chr->hidden & CHRHFLAG_NEEDANIM) && modelIsAnimMerging(chr->model) == 0) {
chrKneelChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
}
void chrTickAnim(struct chrdata *chr)
{
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
modelSetAnimation(chr->model, chr->act_anim.animnum, chr->act_anim.flip,
chr->act_anim.startframe, chr->act_anim.speed, chr->act_anim.unk058);
if (chr->act_anim.endframe >= 0) {
modelSetAnimEndFrame(chr->model, chr->act_anim.endframe);
}
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
if (!chr->act_anim.holdlastframe && modelGetCurAnimFrame(chr->model) >= modelGetAnimEndFrame(chr->model)) {
chrStand(chr);
}
if (chr->act_anim.unk040 != 0 && modelGetCurAnimFrame(chr->model) >= (s32)chr->act_anim.unk042) {
chr->act_anim.unk040 = 0;
func0f03ba44(chr, chr->act_anim.unk044, chr->act_anim.unk046, chr->act_anim.unk041);
}
// Play sneezing sound
if (CHRRACE(chr) == RACE_HUMAN
&& modelGetAnimNum(chr->model) == ANIM_SNEEZE
&& modelGetCurAnimFrame(chr->model) >= 42
&& (g_Vars.lvframenum & 1) == 0
&& chrGetDistanceToCurrentPlayer(chr) < 800) {
func0f0939f8(NULL, chr->prop, SFX_0037, -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
}
if (chr->sleep <= 0 && chr->act_anim.unk038 != 0) {
chr->sleep = 14 + (random() % 5);
}
if (modelGetAnimNum(chr->model) == ANIM_RELOAD_0209) {
chrSetFiring(chr, 0, false);
chrSetFiring(chr, 1, false);
}
}
u32 var800683b0 = 0x0000000f;
u32 var800683b4 = 0x00190000;
u32 var800683b8 = 0xbf800000;
void chrTickSurrender(struct chrdata *chr)
{
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrSurrenderChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
if (chr->sleep <= 0) {
if (CHRRACE(chr) == RACE_HUMAN) {
struct model *model = chr->model;
chr->sleep = 16;
if (modelGetAnimNum(model) == ANIM_SURRENDER_002F && modelGetCurAnimFrame(model) >= 80.0f) {
struct coord coord = {0, 0, 0};
f32 value = chrGetInverseTheta(chr);
coord.x = -sinf(value);
coord.z = -cosf(value);
if (!propchrHasClearLineInVector(chr->prop, &coord, 20)) {
modelSetAnimation(chr->model, ANIM_SURRENDER_002E, random() & 1, 30, 0.5, 16);
modelSetAnimLooping(chr->model, 30, 16);
}
}
}
}
}
void chrFadeCorpse(struct chrdata *chr)
{
if (chr->actiontype == ACT_DEAD || chr->actiontype == ACT_DRUGGEDKO) {
chr->act_dead.allowfade = true;
}
}
void chrEnableReap(struct chrdata *chr)
{
if (chr->actiontype == ACT_DEAD) {
chr->act_dead.allowreap = true;
}
}
void chrTickDead(struct chrdata *chr)
{
struct aibot *aibot = chr->aibot;
// If fade is active, handle it
if (chr->act_dead.fadetimer >= 0) {
chr->act_dead.fadetimer += g_Vars.lvupdate240_60;
if (chr->act_dead.fadetimer >= PALDOWN(90)) {
// Fade finished
chr->fadealpha = 0;
if (aibot) {
mpInitSimulant(chr, true);
} else {
chr->hidden |= CHRHFLAG_REAPED;
}
} else {
// Still fading
chr->fadealpha = (PALDOWN(90) - chr->act_dead.fadetimer) * 255 / PALDOWN(90);
}
} else {
// If fade has been triggered (this can happen when the corpse is on
// screen and there's lots of other chrs around)
if (chr->act_dead.allowfade) {
chr->act_dead.fadetimer = 0;
chrDropWeapons(chr);
}
if (chr->prop->flags & PROPFLAG_80) {
// Keep corpse for now
chr->act_dead.reaptimer = 0;
} else {
chr->act_dead.reaptimer += g_Vars.lvupdate240_60;
}
if (chr->act_dead.allowreap && chr->act_dead.reaptimer >= PALDOWN(120)) {
// Remove corpse (off-screen)
if (aibot == NULL) {
chr->hidden |= CHRHFLAG_REAPED;
}
chr->fadealpha = 0;
chrDropWeapons(chr);
}
}
if (aibot == NULL) {
chr->ailist = NULL;
}
}
/**
* This function is called when a chr is injured or killed. It iterates other
* chrs within 2000 units who can see the chr and updates their chrseeshot or
* chrseedie properties.
*
* The search stops once 7 chrs have been found in range, regardless of whether
* they can see the chr, presumably to avoid doing too many expensive line of
* sight checks in one tick. The last iterated chr index is stored and continued
* from there next time the function is called. The function is called on
* subsequent ticks while the chr is still in their injured or dying action.
*/
void chrAlertOthersOfInjury(struct chrdata *chr, bool dying)
{
s32 index = 0;
s32 numinrange = 0;
s32 numchrs = getNumChrSlots();
if (g_Vars.antiplayernum >= 0 && chr->prop == g_Vars.anti->prop) {
return;
}
if (chr->actiontype == ACT_ARGH) {
index = chr->act_argh.notifychrindex;
} else if (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DRUGGEDDROP) {
index = chr->act_die.notifychrindex;
} else if (chr->actiontype == ACT_DEAD) {
index = chr->act_dead.notifychrindex;
}
for (; index < numchrs && numinrange < 7; index++) {
struct chrdata *loopchr = &g_ChrSlots[index];
if (loopchr->model && loopchr->prop && (loopchr->prop->flags & PROPFLAG_TANGIBLE)) {
f32 xdiff = loopchr->prop->pos.x - chr->prop->pos.x;
f32 ydiff = loopchr->prop->pos.y - chr->prop->pos.y;
f32 zdiff = loopchr->prop->pos.z - chr->prop->pos.z;
if (xdiff * xdiff + ydiff * ydiff + zdiff * zdiff < 4000000.0f) {
numinrange++;
if (chrCanSeePos(loopchr, &chr->prop->pos, chr->prop->rooms)) {
if (dying == false) {
loopchr->chrseeshot = chr->chrnum;
} else {
loopchr->chrseedie = chr->chrnum;
}
}
}
}
}
if (chr->actiontype == ACT_ARGH) {
chr->act_argh.notifychrindex = index;
} else if (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DRUGGEDDROP) {
chr->act_die.notifychrindex = index;
} else if (chr->actiontype == ACT_DEAD) {
chr->act_dead.notifychrindex = index;
}
}
void chrTickDie(struct chrdata *chr)
{
struct model *model = chr->model;
u32 race = CHRRACE(chr);
u16 thuds[] = {
SFX_THUD_808D,
SFX_THUD_808E,
SFX_THUD_808F,
SFX_THUD_8090,
SFX_THUD_8091,
SFX_THUD_8092,
SFX_THUD_8093,
SFX_THUD_8094,
SFX_THUD_8095,
SFX_THUD_8096,
SFX_THUD_8097,
};
u16 specialdiesounds[] = {
SFX_M1_NOOO, // "Noooo!"
SFX_M1_SCREAM, // Death scream
SFX_M2_NOOO, // "Noooo!"
SFX_M2_NOOO, // "Noooo!"
SFX_M1_SCREAM, // Death scream
SFX_THUD_8092,
SFX_THUD_8093,
SFX_THUD_8094,
SFX_THUD_8095,
SFX_THUD_8096,
SFX_THUD_8097,
};
static s32 thudindex = 0;
if (race == RACE_EYESPY) {
return;
}
if (race == RACE_ROBOT) {
struct prop *prop = chr->prop;
func0f0926bc(prop, 1, 0xffff);
explosionCreateSimple(prop, &prop->pos, prop->rooms, EXPLOSIONTYPE_8, g_Vars.currentplayernum);
chr->hidden |= CHRHFLAG_REAPED;
return;
}
if (race == RACE_DRCAROLL) {
struct prop *prop = chr->prop;
if (g_DrCarollDyingTimer > PALDOWN(120) && chr->voicebox) {
// Play speech
u16 phrases[] = {
SFX_DRCAROLL_SYSTEMS_FAILURE,
SFX_DRCAROLL_YOU_GO_ON,
SFX_DRCAROLL_I_CANT_MAKE_IT,
SFX_DRCAROLL_IM_DYING,
SFX_DRCAROLL_GOODBYE,
SFX_DRCAROLL_YOU_WERE_SUPPOSED,
};
func0f0939f8(NULL, chr->prop, phrases[random() % 5], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
chr->voicebox = 0;
}
// Change images randomly
if (chr->act_die.drcarollimagedelay > 0) {
chr->act_die.drcarollimagedelay -= g_Vars.lvupdate240_60;
} else {
chr->act_die.drcarollimagedelay = (random() % PALDOWN(1000)) * 0.01f + 5.0f;
chr->drcarollimage_left = 1 + (s32)((random() % 400) * 0.01f);
chr->drcarollimage_right = 1 + (s32)((random() % 400) * 0.01f);
}
if (g_DrCarollDyingTimer > PALDOWN(310)) {
// Explode
func0f0926bc(prop, 1, 0xffff);
explosionCreateSimple(prop, &prop->pos, prop->rooms, EXPLOSIONTYPE_8, g_Vars.currentplayernum);
chrBeginDead(chr);
} else if (chr->soundtimer > (s32)var80068080) {
// Play shield damage sound
chr->soundtimer = 0;
var80068080 -= 5;
func0f0939f8(NULL, prop, SFX_SHIELD_DAMAGE, -1,
-1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1);
sparksCreate(prop->rooms[0], prop, &prop->pos, NULL, 0, 1);
}
return;
}
// Human or Skedar
// If due, play thud 1 sound
if (chr->act_die.thudframe1 >= 0 && modelGetCurAnimFrame(model) >= chr->act_die.thudframe1) {
if (chr->specialdie == 0) {
func0f0939f8(NULL, chr->prop, thuds[thudindex], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
} else if (chr->specialdie != SPECIALDIE_OVERRAILING) {
func0f0939f8(NULL, chr->prop, specialdiesounds[chr->specialdie - 1], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
}
thudindex++;
if (thudindex > 10) {
thudindex = 0;
}
chr->act_die.thudframe1 = -1;
}
// If due, play thud 2 sound
if (chr->act_die.thudframe2 >= 0 && modelGetCurAnimFrame(model) >= chr->act_die.thudframe2) {
if (chr->specialdie < 5) {
func0f0939f8(NULL, chr->prop, SFX_THUD_808E, -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
} else {
func0f0939f8(NULL, chr->prop, thuds[thudindex], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
}
thudindex++;
if (thudindex > 10) {
thudindex = 0;
}
chr->act_die.thudframe2 = -1;
}
// Check for end of death animation and switch to ACT_DEAD
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
if (CHRRACE(chr) == RACE_HUMAN && modelGetAnimNum(model) == ANIM_DEATH_STOMACH_LONG) {
modelSetAnimation(model, ANIM_003C, !modelIsFlipped(model), 50, 0.3, animGetNumFrames(ANIM_003C) - 51.0f);
modelSetAnimSpeed(model, 0.5, animGetNumFrames(ANIM_003C) - 51.0f);
return;
}
chrBeginDead(chr);
}
chrAlertOthersOfInjury(chr, true);
}
u32 var80068408 = 0x808d808e;
u32 var8006840c = 0x808f8090;
u32 var80068410 = 0x80918092;
u32 var80068414 = 0x80938094;
u32 var80068418 = 0x80958096;
u32 var8006841c = 0x80970000;
GLOBAL_ASM(
glabel chrTickDruggedComingUp
/* f03d7ec: 27bdff58 */ addiu $sp,$sp,-168
/* f03d7f0: 3c0f8007 */ lui $t7,%hi(var80068408)
/* f03d7f4: afbf005c */ sw $ra,0x5c($sp)
/* f03d7f8: afbe0058 */ sw $s8,0x58($sp)
/* f03d7fc: afb70054 */ sw $s7,0x54($sp)
/* f03d800: afb60050 */ sw $s6,0x50($sp)
/* f03d804: afb5004c */ sw $s5,0x4c($sp)
/* f03d808: afb40048 */ sw $s4,0x48($sp)
/* f03d80c: afb30044 */ sw $s3,0x44($sp)
/* f03d810: afb20040 */ sw $s2,0x40($sp)
/* f03d814: afb1003c */ sw $s1,0x3c($sp)
/* f03d818: afb00038 */ sw $s0,0x38($sp)
/* f03d81c: f7b60030 */ sdc1 $f22,0x30($sp)
/* f03d820: f7b40028 */ sdc1 $f20,0x28($sp)
/* f03d824: 25ef8408 */ addiu $t7,$t7,%lo(var80068408)
/* f03d828: 8de10000 */ lw $at,0x0($t7)
/* f03d82c: 27ae0090 */ addiu $t6,$sp,0x90
/* f03d830: 8de90004 */ lw $t1,0x4($t7)
/* f03d834: adc10000 */ sw $at,0x0($t6)
/* f03d838: 8de10008 */ lw $at,0x8($t7)
/* f03d83c: adc90004 */ sw $t1,0x4($t6)
/* f03d840: 8de9000c */ lw $t1,0xc($t7)
/* f03d844: adc10008 */ sw $at,0x8($t6)
/* f03d848: 8de10010 */ lw $at,0x10($t7)
/* f03d84c: adc9000c */ sw $t1,0xc($t6)
/* f03d850: 3c0b800a */ lui $t3,%hi(g_Vars+0x38)
/* f03d854: adc10010 */ sw $at,0x10($t6)
/* f03d858: 95e10014 */ lhu $at,0x14($t7)
/* f03d85c: 0080f025 */ or $s8,$a0,$zero
/* f03d860: 00009825 */ or $s3,$zero,$zero
/* f03d864: a5c10014 */ sh $at,0x14($t6)
/* f03d868: 848a002c */ lh $t2,0x2c($a0)
/* f03d86c: 8d6b9ff8 */ lw $t3,%lo(g_Vars+0x38)($t3)
/* f03d870: 0000a025 */ or $s4,$zero,$zero
/* f03d874: 24050001 */ addiu $a1,$zero,0x1
/* f03d878: 014b6021 */ addu $t4,$t2,$t3
/* f03d87c: a48c002c */ sh $t4,0x2c($a0)
/* f03d880: 848d002c */ lh $t5,0x2c($a0)
/* f03d884: 59a00074 */ blezl $t5,.L0f03da58
/* f03d888: 8fbf005c */ lw $ra,0x5c($sp)
/* f03d88c: 50800005 */ beqzl $a0,.L0f03d8a4
/* f03d890: afa00088 */ sw $zero,0x88($sp)
/* f03d894: 909902fe */ lbu $t9,0x2fe($a0)
/* f03d898: 10000002 */ b .L0f03d8a4
/* f03d89c: afb90088 */ sw $t9,0x88($sp)
/* f03d8a0: afa00088 */ sw $zero,0x88($sp)
.L0f03d8a4:
/* f03d8a4: 8fd70020 */ lw $s7,0x20($s8)
/* f03d8a8: 0fc08946 */ jal chrUncloak
/* f03d8ac: 03c02025 */ or $a0,$s8,$zero
/* f03d8b0: 2418001e */ addiu $t8,$zero,0x1e
/* f03d8b4: 3c014180 */ lui $at,0x4180
/* f03d8b8: a3d80007 */ sb $t8,0x7($s8)
/* f03d8bc: 3c158006 */ lui $s5,%hi(g_AnimTablesByRace)
/* f03d8c0: 4481b000 */ mtc1 $at,$f22
/* f03d8c4: 4480a000 */ mtc1 $zero,$f20
/* f03d8c8: 26b552b8 */ addiu $s5,$s5,%lo(g_AnimTablesByRace)
/* f03d8cc: 8fa20088 */ lw $v0,0x88($sp)
/* f03d8d0: 24160014 */ addiu $s6,$zero,0x14
.L0f03d8d4:
/* f03d8d4: 06600033 */ bltz $s3,.L0f03d9a4
/* f03d8d8: 00000000 */ nop
/* f03d8dc: 02760019 */ multu $s3,$s6
/* f03d8e0: 00027080 */ sll $t6,$v0,0x2
/* f03d8e4: 02ae8821 */ addu $s1,$s5,$t6
/* f03d8e8: 8e2f0000 */ lw $t7,0x0($s1)
/* f03d8ec: 00009012 */ mflo $s2
/* f03d8f0: 01f21821 */ addu $v1,$t7,$s2
/* f03d8f4: 8c690004 */ lw $t1,0x4($v1)
/* f03d8f8: 1120002a */ beqz $t1,.L0f03d9a4
/* f03d8fc: 00000000 */ nop
/* f03d900: 8c6a000c */ lw $t2,0xc($v1)
/* f03d904: 19400027 */ blez $t2,.L0f03d9a4
/* f03d908: 00000000 */ nop
/* f03d90c: 0c004b70 */ jal random
/* f03d910: 24140001 */ addiu $s4,$zero,0x1
/* f03d914: 8e2b0000 */ lw $t3,0x0($s1)
/* f03d918: 4407a000 */ mfc1 $a3,$f20
/* f03d91c: 24180001 */ addiu $t8,$zero,0x1
/* f03d920: 01721821 */ addu $v1,$t3,$s2
/* f03d924: 8c6c000c */ lw $t4,0xc($v1)
/* f03d928: 8c6d0004 */ lw $t5,0x4($v1)
/* f03d92c: 02e02025 */ or $a0,$s7,$zero
/* f03d930: 004c001b */ divu $zero,$v0,$t4
/* f03d934: 00004010 */ mfhi $t0
/* f03d938: 0008c8c0 */ sll $t9,$t0,0x3
/* f03d93c: 0328c823 */ subu $t9,$t9,$t0
/* f03d940: 0019c880 */ sll $t9,$t9,0x2
/* f03d944: 01b98021 */ addu $s0,$t5,$t9
/* f03d948: c6040014 */ lwc1 $f4,0x14($s0)
/* f03d94c: 15800002 */ bnez $t4,.L0f03d958
/* f03d950: 00000000 */ nop
/* f03d954: 0007000d */ break 0x7
.L0f03d958:
/* f03d958: e7c40030 */ swc1 $f4,0x30($s8)
/* f03d95c: c6060018 */ lwc1 $f6,0x18($s0)
/* f03d960: e7c60034 */ swc1 $f6,0x34($s8)
/* f03d964: c608000c */ lwc1 $f8,0xc($s0)
/* f03d968: 8e060004 */ lw $a2,0x4($s0)
/* f03d96c: 86050000 */ lh $a1,0x0($s0)
/* f03d970: afb80018 */ sw $t8,0x18($sp)
/* f03d974: e7b60014 */ swc1 $f22,0x14($sp)
/* f03d978: 0c0076ff */ jal modelSetAnimationWithMerge
/* f03d97c: e7a80010 */ swc1 $f8,0x10($sp)
/* f03d980: c6000008 */ lwc1 $f0,0x8($s0)
/* f03d984: 4600a03e */ c.le.s $f20,$f0
/* f03d988: 00000000 */ nop
/* f03d98c: 45020005 */ bc1fl .L0f03d9a4
/* f03d990: 8fa20088 */ lw $v0,0x88($sp)
/* f03d994: 44050000 */ mfc1 $a1,$f0
/* f03d998: 0c007787 */ jal modelSetAnimEndFrame
/* f03d99c: 02e02025 */ or $a0,$s7,$zero
/* f03d9a0: 8fa20088 */ lw $v0,0x88($sp)
.L0f03d9a4:
/* f03d9a4: 1680000d */ bnez $s4,.L0f03d9dc
/* f03d9a8: 00000000 */ nop
/* f03d9ac: 26730001 */ addiu $s3,$s3,0x1
/* f03d9b0: 02760019 */ multu $s3,$s6
/* f03d9b4: 00027080 */ sll $t6,$v0,0x2
/* f03d9b8: 02ae7821 */ addu $t7,$s5,$t6
/* f03d9bc: 8de90000 */ lw $t1,0x0($t7)
/* f03d9c0: 2401ffff */ addiu $at,$zero,-1
/* f03d9c4: 00005012 */ mflo $t2
/* f03d9c8: 012a5821 */ addu $t3,$t1,$t2
/* f03d9cc: 8d6c0000 */ lw $t4,0x0($t3)
/* f03d9d0: 15810002 */ bne $t4,$at,.L0f03d9dc
/* f03d9d4: 00000000 */ nop
/* f03d9d8: 24140001 */ addiu $s4,$zero,0x1
.L0f03d9dc:
/* f03d9dc: 1280ffbd */ beqz $s4,.L0f03d8d4
/* f03d9e0: 00000000 */ nop
/* f03d9e4: 8fc40170 */ lw $a0,0x170($s8)
/* f03d9e8: 5080000c */ beqzl $a0,.L0f03da1c
/* f03d9ec: 8fc40174 */ lw $a0,0x174($s8)
/* f03d9f0: 8c8d0004 */ lw $t5,0x4($a0)
/* f03d9f4: 8db90008 */ lw $t9,0x8($t5)
/* f03d9f8: 33382000 */ andi $t8,$t9,0x2000
/* f03d9fc: 57000007 */ bnezl $t8,.L0f03da1c
/* f03da00: 8fc40174 */ lw $a0,0x174($s8)
/* f03da04: 0fc20a59 */ jal propobjSetDropped
/* f03da08: 24050001 */ addiu $a1,$zero,0x1
/* f03da0c: 8fce0014 */ lw $t6,0x14($s8)
/* f03da10: 35cf0001 */ ori $t7,$t6,0x1
/* f03da14: afcf0014 */ sw $t7,0x14($s8)
/* f03da18: 8fc40174 */ lw $a0,0x174($s8)
.L0f03da1c:
/* f03da1c: 1080000b */ beqz $a0,.L0f03da4c
/* f03da20: 00000000 */ nop
/* f03da24: 8c890004 */ lw $t1,0x4($a0)
/* f03da28: 8d2a0008 */ lw $t2,0x8($t1)
/* f03da2c: 314b2000 */ andi $t3,$t2,0x2000
/* f03da30: 15600006 */ bnez $t3,.L0f03da4c
/* f03da34: 00000000 */ nop
/* f03da38: 0fc20a59 */ jal propobjSetDropped
/* f03da3c: 24050001 */ addiu $a1,$zero,0x1
/* f03da40: 8fcc0014 */ lw $t4,0x14($s8)
/* f03da44: 358d0001 */ ori $t5,$t4,0x1
/* f03da48: afcd0014 */ sw $t5,0x14($s8)
.L0f03da4c:
/* f03da4c: 0fc09149 */ jal chrDropItems
/* f03da50: 03c02025 */ or $a0,$s8,$zero
/* f03da54: 8fbf005c */ lw $ra,0x5c($sp)
.L0f03da58:
/* f03da58: d7b40028 */ ldc1 $f20,0x28($sp)
/* f03da5c: d7b60030 */ ldc1 $f22,0x30($sp)
/* f03da60: 8fb00038 */ lw $s0,0x38($sp)
/* f03da64: 8fb1003c */ lw $s1,0x3c($sp)
/* f03da68: 8fb20040 */ lw $s2,0x40($sp)
/* f03da6c: 8fb30044 */ lw $s3,0x44($sp)
/* f03da70: 8fb40048 */ lw $s4,0x48($sp)
/* f03da74: 8fb5004c */ lw $s5,0x4c($sp)
/* f03da78: 8fb60050 */ lw $s6,0x50($sp)
/* f03da7c: 8fb70054 */ lw $s7,0x54($sp)
/* f03da80: 8fbe0058 */ lw $s8,0x58($sp)
/* f03da84: 03e00008 */ jr $ra
/* f03da88: 27bd00a8 */ addiu $sp,$sp,0xa8
);
// Mismatch: regalloc
//void chrTickDruggedComingUp(struct chrdata *chr)
//{
// u16 thuds[] = {
// SFX_THUD_808D,
// SFX_THUD_808E,
// SFX_THUD_808F,
// SFX_THUD_8090,
// SFX_THUD_8091,
// SFX_THUD_8092,
// SFX_THUD_8093,
// SFX_THUD_8094,
// SFX_THUD_8095,
// SFX_THUD_8096,
// SFX_THUD_8097,
// };
//
// u32 stack;
//
// chr->act_druggedcomingup.timer60 += g_Vars.lvupdate240_60;
//
// if (chr->act_druggedcomingup.timer60 > 0) {
// s32 race = CHRRACE(chr);
// struct model *model = chr->model;
// s32 i = 0;
// bool done = false;
// struct prop *weapon;
//
// chrUncloak(chr, true);
//
// chr->actiontype = ACT_DRUGGEDDROP;
//
// while (!done) {
// if (i >= 0
// && g_AnimTablesByRace[race][i].deathanims != NULL
// && g_AnimTablesByRace[race][i].deathanimcount > 0) {
// struct animtablerow *row = &g_AnimTablesByRace[race][i].deathanims[random() % g_AnimTablesByRace[race][i].deathanimcount];
//
// chr->act_druggeddrop.thudframe1 = row->thudframe1;
// chr->act_druggeddrop.thudframe2 = row->thudframe2;
//
// modelSetAnimationWithMerge(model, row->animnum, row->flip, 0, row->speed, 16, true);
//
// if (row->endframe >= 0) {
// modelSetAnimEndFrame(model, row->endframe);
// }
//
// done = true;
// }
//
// if (!done) {
// i++;
//
// if (g_AnimTablesByRace[race][i].ibh == -1) {
// done = true;
// }
// }
// }
//
// weapon = chr->weapons_held[HAND_RIGHT];
//
// if (weapon && (weapon->obj->flags & OBJFLAG_00002000) == 0) {
// propobjSetDropped(weapon, DROPREASON_1);
// chr->hidden |= CHRHFLAG_00000001;
// }
//
// weapon = chr->weapons_held[HAND_LEFT];
//
// if (weapon && (weapon->obj->flags & OBJFLAG_00002000) == 0) {
// propobjSetDropped(weapon, DROPREASON_1);
// chr->hidden |= CHRHFLAG_00000001;
// }
//
// chrDropItems(chr);
// }
//}
void chrTickDruggedDrop(struct chrdata *chr)
{
struct model *model = chr->model;
u16 thuds[11] = {
SFX_THUD_808D,
SFX_THUD_808E,
SFX_THUD_808F,
SFX_THUD_8090,
SFX_THUD_8091,
SFX_THUD_8092,
SFX_THUD_8093,
SFX_THUD_8094,
SFX_THUD_8095,
SFX_THUD_8096,
SFX_THUD_8097,
};
static s32 thudindex = 0;
// If due, play thud 1 sound
if (chr->act_druggeddrop.thudframe1 >= 0 && modelGetCurAnimFrame(model) >= chr->act_druggeddrop.thudframe1) {
func0f0939f8(NULL, chr->prop, thuds[thudindex], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
thudindex++;
if (thudindex > 10) {
thudindex = 0;
}
chr->act_druggeddrop.thudframe1 = -1;
}
// If due, play thud 2 sound
if (chr->act_druggeddrop.thudframe2 >= 0 && modelGetCurAnimFrame(model) >= chr->act_druggeddrop.thudframe2) {
func0f0939f8(NULL, chr->prop, thuds[thudindex], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
thudindex++;
if (thudindex > 10) {
thudindex = 0;
}
chr->act_druggeddrop.thudframe2 = -1;
}
// If falling animation finished, assign ACT_DRUGGEDKO
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
chr->actiontype = ACT_DRUGGEDKO;
chr->act_druggedko.fadetimer = chr->aibot ? 0 : -1;
chr->act_druggedko.allowfade = false;
chr->act_druggedko.allowreap = false;
chr->act_druggedko.reaptimer = 0;
chr->act_druggedko.unk03c = 0;
chr->sleep = 0;
}
chrAlertOthersOfInjury(chr, true);
}
void chrTickDruggedKo(struct chrdata *chr)
{
bool reap = false;
// If fade is active, handle it
if (chr->act_druggedko.fadetimer >= 0) {
chr->act_druggedko.fadetimer += g_Vars.lvupdate240_60;
if (chr->act_druggedko.fadetimer >= PALDOWN(90)) {
reap = true;
} else {
chr->fadealpha = (PALDOWN(90) - chr->act_druggedko.fadetimer) * 255 / PALDOWN(90);
}
} else if ((chr->chrflags & CHRCFLAG_KEEPCORPSEKO) == 0) {
if (chr->act_druggedko.allowfade) {
chr->act_druggedko.fadetimer = 0;
}
if (chr->prop->flags & PROPFLAG_80) {
chr->act_druggedko.reaptimer = 0;
} else {
chr->act_druggedko.reaptimer += g_Vars.lvupdate240_60;
}
if (chr->act_druggedko.allowreap && chr->act_druggedko.reaptimer >= PALDOWN(120)) {
reap = true;
}
}
if (reap) {
chr->fadealpha = 0;
chr->hidden |= CHRHFLAG_REAPED;
chrDropWeapons(chr);
}
}
void chrTickArgh(struct chrdata *chr)
{
struct model *model = chr->model;
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
chrRecordLastSeeTargetTime(chr);
if (CHRRACE(chr) == RACE_HUMAN && modelGetAnimNum(model) == ANIM_DEATH_STOMACH_LONG) {
func0f02ed28(chr, 26);
} else {
if (chr->race == RACE_DRCAROLL) {
chr->drcarollimage_left = DRCAROLLIMAGE_EYESDEFAULT;
chr->drcarollimage_right = DRCAROLLIMAGE_EYESDEFAULT;
}
chrStop(chr);
}
}
chrAlertOthersOfInjury(chr, false);
}
void chrTickPreArgh(struct chrdata *chr)
{
struct model *model = chr->model;
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
struct coord pos;
pos.x = chr->act_preargh.pos.x;
pos.y = chr->act_preargh.pos.y;
pos.z = chr->act_preargh.pos.z;
chrReactToDamage(chr, &pos,
chr->act_preargh.angle,
chr->act_preargh.ibh,
&chr->act_preargh.hand,
chr->act_preargh.aplayernum);
}
}
void chrTickSidestep(struct chrdata *chr)
{
struct model *model = chr->model;
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrSidestepChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
chrRecordLastSeeTargetTime(chr);
func0f02ed28(chr, 10);
}
}
void chrTickJumpOut(struct chrdata *chr)
{
struct model *model = chr->model;
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrJumpOutChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
chrRecordLastSeeTargetTime(chr);
chrStop(chr);
}
}
void chrTickTest(struct chrdata *chr)
{
struct model *model = chr->model;
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
chrStand(chr);
}
}
void chrTickStartAlarm(struct chrdata *chr)
{
struct model *model = chr->model;
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrStartAlarmChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
if (modelGetCurAnimFrame(model) >= 60) {
alarmActivate();
}
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
chrStop(chr);
}
}
void chrTickSurprised(struct chrdata *chr)
{
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrSurprisedChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
if (CHRRACE(chr) == RACE_HUMAN) {
struct model *model = chr->model;
if (modelGetCurAnimFrame(model) >= modelGetAnimEndFrame(model)) {
if (modelGetAnimNum(model) == 0x2e) {
func0f02ed28(chr, 26);
} else if (modelGetAnimNum(model) == 0x3f) {
func0f02ed28(chr, 26);
} else {
chrStop(chr);
}
}
}
}
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f03e29c
/* f03e29c: 27bdff98 */ addiu $sp,$sp,-104
/* f03e2a0: afbf0044 */ sw $ra,0x44($sp)
/* f03e2a4: afa40068 */ sw $a0,0x68($sp)
/* f03e2a8: afa5006c */ sw $a1,0x6c($sp)
/* f03e2ac: afa60070 */ sw $a2,0x70($sp)
/* f03e2b0: afa70074 */ sw $a3,0x74($sp)
/* f03e2b4: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f03e2b8: afa00058 */ sw $zero,0x58($sp)
/* f03e2bc: 50400064 */ beqzl $v0,.L0f03e450
/* f03e2c0: 8fbf0044 */ lw $ra,0x44($sp)
/* f03e2c4: 8c420004 */ lw $v0,0x4($v0)
/* f03e2c8: 904e005c */ lbu $t6,0x5c($v0)
/* f03e2cc: 2444005c */ addiu $a0,$v0,0x5c
/* f03e2d0: afa4004c */ sw $a0,0x4c($sp)
/* f03e2d4: 0fc2c78a */ jal handGetSingleUnk38
/* f03e2d8: afae005c */ sw $t6,0x5c($sp)
/* f03e2dc: 8fa4004c */ lw $a0,0x4c($sp)
/* f03e2e0: 0fc2c79a */ jal handGetSingleShootSound
/* f03e2e4: a3a20057 */ sb $v0,0x57($sp)
/* f03e2e8: 8faa0068 */ lw $t2,0x68($sp)
/* f03e2ec: 8faf006c */ lw $t7,0x6c($sp)
/* f03e2f0: 3049ffff */ andi $t1,$v0,0xffff
/* f03e2f4: 014f2021 */ addu $a0,$t2,$t7
/* f03e2f8: 8083017c */ lb $v1,0x17c($a0)
/* f03e2fc: 04610009 */ bgez $v1,.L0f03e324
/* f03e300: 00000000 */ nop
/* f03e304: afa4004c */ sw $a0,0x4c($sp)
/* f03e308: 0fc29c3e */ jal func0f0a70f8
/* f03e30c: a7a90054 */ sh $t1,0x54($sp)
/* f03e310: 8fa4004c */ lw $a0,0x4c($sp)
/* f03e314: 97a90054 */ lhu $t1,0x54($sp)
/* f03e318: a082017c */ sb $v0,0x17c($a0)
/* f03e31c: 8faa0068 */ lw $t2,0x68($sp)
/* f03e320: 8083017c */ lb $v1,0x17c($a0)
.L0f03e324:
/* f03e324: 04600049 */ bltz $v1,.L0f03e44c
/* f03e328: 0003c080 */ sll $t8,$v1,0x2
/* f03e32c: 8fab0070 */ lw $t3,0x70($sp)
/* f03e330: 0303c023 */ subu $t8,$t8,$v1
/* f03e334: 3c19800a */ lui $t9,%hi(g_Fireslots)
/* f03e338: 2739d150 */ addiu $t9,$t9,%lo(g_Fireslots)
/* f03e33c: 0018c100 */ sll $t8,$t8,0x4
/* f03e340: 11600013 */ beqz $t3,.L0f03e390
/* f03e344: 03194021 */ addu $t0,$t8,$t9
/* f03e348: 93ac0057 */ lbu $t4,0x57($sp)
/* f03e34c: 240b0001 */ addiu $t3,$zero,0x1
/* f03e350: 5980000f */ blezl $t4,.L0f03e390
/* f03e354: afab0058 */ sw $t3,0x58($sp)
/* f03e358: 954d0192 */ lhu $t5,0x192($t2)
/* f03e35c: 3c18800a */ lui $t8,%hi(g_Vars+0x8)
/* f03e360: 31ae0020 */ andi $t6,$t5,0x20
/* f03e364: 55c0000b */ bnezl $t6,.L0f03e394
/* f03e368: 8fac0058 */ lw $t4,0x58($sp)
/* f03e36c: 8d0f0000 */ lw $t7,0x0($t0)
/* f03e370: 8f189fc8 */ lw $t8,%lo(g_Vars+0x8)($t8)
/* f03e374: 24190001 */ addiu $t9,$zero,0x1
/* f03e378: 01f8082a */ slt $at,$t7,$t8
/* f03e37c: 50200005 */ beqzl $at,.L0f03e394
/* f03e380: 8fac0058 */ lw $t4,0x58($sp)
/* f03e384: 10000002 */ b .L0f03e390
/* f03e388: afb90058 */ sw $t9,0x58($sp)
/* f03e38c: afab0058 */ sw $t3,0x58($sp)
.L0f03e390:
/* f03e390: 8fac0058 */ lw $t4,0x58($sp)
.L0f03e394:
/* f03e394: 3c01bf80 */ lui $at,0xbf80
/* f03e398: 00002025 */ or $a0,$zero,$zero
/* f03e39c: 11800024 */ beqz $t4,.L0f03e430
/* f03e3a0: 00093400 */ sll $a2,$t1,0x10
/* f03e3a4: 8d45001c */ lw $a1,0x1c($t2)
/* f03e3a8: 44810000 */ mtc1 $at,$f0
/* f03e3ac: 93ac0057 */ lbu $t4,0x57($sp)
/* f03e3b0: 00066c03 */ sra $t5,$a2,0x10
/* f03e3b4: 240effff */ addiu $t6,$zero,-1
/* f03e3b8: 240f0400 */ addiu $t7,$zero,0x400
/* f03e3bc: 24180004 */ addiu $t8,$zero,0x4
/* f03e3c0: 24190011 */ addiu $t9,$zero,0x11
/* f03e3c4: 240bffff */ addiu $t3,$zero,-1
/* f03e3c8: afab002c */ sw $t3,0x2c($sp)
/* f03e3cc: afb9001c */ sw $t9,0x1c($sp)
/* f03e3d0: afb80018 */ sw $t8,0x18($sp)
/* f03e3d4: afaf0014 */ sw $t7,0x14($sp)
/* f03e3d8: afae0010 */ sw $t6,0x10($sp)
/* f03e3dc: 01a03025 */ or $a2,$t5,$zero
/* f03e3e0: afa80050 */ sw $t0,0x50($sp)
/* f03e3e4: afa00028 */ sw $zero,0x28($sp)
/* f03e3e8: afa00020 */ sw $zero,0x20($sp)
/* f03e3ec: 2407ffff */ addiu $a3,$zero,-1
/* f03e3f0: afac004c */ sw $t4,0x4c($sp)
/* f03e3f4: e7a00024 */ swc1 $f0,0x24($sp)
/* f03e3f8: e7a00030 */ swc1 $f0,0x30($sp)
/* f03e3fc: e7a00034 */ swc1 $f0,0x34($sp)
/* f03e400: 0fc24e7e */ jal func0f0939f8
/* f03e404: e7a00038 */ swc1 $f0,0x38($sp)
/* f03e408: 3c0d800a */ lui $t5,%hi(g_Vars+0x8)
/* f03e40c: 8dad9fc8 */ lw $t5,%lo(g_Vars+0x8)($t5)
/* f03e410: 8fae004c */ lw $t6,0x4c($sp)
/* f03e414: 8fa80050 */ lw $t0,0x50($sp)
/* f03e418: 01ae7821 */ addu $t7,$t5,$t6
/* f03e41c: ad0f0000 */ sw $t7,0x0($t0)
/* f03e420: 8fb80068 */ lw $t8,0x68($sp)
/* f03e424: 97190192 */ lhu $t9,0x192($t8)
/* f03e428: 372b0020 */ ori $t3,$t9,0x20
/* f03e42c: a70b0192 */ sh $t3,0x192($t8)
.L0f03e430:
/* f03e430: 8fac0074 */ lw $t4,0x74($sp)
/* f03e434: 25040004 */ addiu $a0,$t0,0x4
/* f03e438: 8fa5005c */ lw $a1,0x5c($sp)
/* f03e43c: 11800003 */ beqz $t4,.L0f03e44c
/* f03e440: 8fa60078 */ lw $a2,0x78($sp)
/* f03e444: 0fc2af9c */ jal func0f0abe70
/* f03e448: 8fa7007c */ lw $a3,0x7c($sp)
.L0f03e44c:
/* f03e44c: 8fbf0044 */ lw $ra,0x44($sp)
.L0f03e450:
/* f03e450: 27bd0068 */ addiu $sp,$sp,0x68
/* f03e454: 03e00008 */ jr $ra
/* f03e458: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f03e29c
/* f03da98: 27bdff90 */ addiu $sp,$sp,-112
/* f03da9c: afbf004c */ sw $ra,0x4c($sp)
/* f03daa0: afb00048 */ sw $s0,0x48($sp)
/* f03daa4: 00808025 */ or $s0,$a0,$zero
/* f03daa8: afa50074 */ sw $a1,0x74($sp)
/* f03daac: afa60078 */ sw $a2,0x78($sp)
/* f03dab0: afa7007c */ sw $a3,0x7c($sp)
/* f03dab4: 0fc0a074 */ jal chrGetEquippedWeaponProp
/* f03dab8: afa00060 */ sw $zero,0x60($sp)
/* f03dabc: 50400060 */ beqzl $v0,.NB0f03dc40
/* f03dac0: 8fbf004c */ lw $ra,0x4c($sp)
/* f03dac4: 8c420004 */ lw $v0,0x4($v0)
/* f03dac8: 904e005c */ lbu $t6,0x5c($v0)
/* f03dacc: 2444005c */ addiu $a0,$v0,0x5c
/* f03dad0: afa40054 */ sw $a0,0x54($sp)
/* f03dad4: 0fc2bee2 */ jal handGetSingleUnk38
/* f03dad8: afae0064 */ sw $t6,0x64($sp)
/* f03dadc: 8fa40054 */ lw $a0,0x54($sp)
/* f03dae0: 0fc2bef2 */ jal handGetSingleShootSound
/* f03dae4: a3a2005f */ sb $v0,0x5f($sp)
/* f03dae8: 8faf0074 */ lw $t7,0x74($sp)
/* f03daec: 3049ffff */ andi $t1,$v0,0xffff
/* f03daf0: 020f2021 */ addu $a0,$s0,$t7
/* f03daf4: 8083017c */ lb $v1,0x17c($a0)
/* f03daf8: 04610008 */ bgez $v1,.NB0f03db1c
/* f03dafc: 00000000 */ sll $zero,$zero,0x0
/* f03db00: afa40054 */ sw $a0,0x54($sp)
/* f03db04: 0fc2938f */ jal func0f0a70f8
/* f03db08: a7a9005c */ sh $t1,0x5c($sp)
/* f03db0c: 8fa40054 */ lw $a0,0x54($sp)
/* f03db10: 97a9005c */ lhu $t1,0x5c($sp)
/* f03db14: a082017c */ sb $v0,0x17c($a0)
/* f03db18: 8083017c */ lb $v1,0x17c($a0)
.NB0f03db1c:
/* f03db1c: 04600047 */ bltz $v1,.NB0f03dc3c
/* f03db20: 0003c0c0 */ sll $t8,$v1,0x3
/* f03db24: 8faa0078 */ lw $t2,0x78($sp)
/* f03db28: 0303c023 */ subu $t8,$t8,$v1
/* f03db2c: 3c19800a */ lui $t9,0x800a
/* f03db30: 27391888 */ addiu $t9,$t9,0x1888
/* f03db34: 0018c0c0 */ sll $t8,$t8,0x3
/* f03db38: 11400013 */ beqz $t2,.NB0f03db88
/* f03db3c: 03194021 */ addu $t0,$t8,$t9
/* f03db40: 93ab005f */ lbu $t3,0x5f($sp)
/* f03db44: 24190001 */ addiu $t9,$zero,0x1
/* f03db48: 5960000f */ blezl $t3,.NB0f03db88
/* f03db4c: afb90060 */ sw $t9,0x60($sp)
/* f03db50: 8e0c0014 */ lw $t4,0x14($s0)
/* f03db54: 3c0f800a */ lui $t7,0x800a
/* f03db58: 318d0080 */ andi $t5,$t4,0x80
/* f03db5c: 55a0000b */ bnezl $t5,.NB0f03db8c
/* f03db60: 8faa0060 */ lw $t2,0x60($sp)
/* f03db64: 8d0e0000 */ lw $t6,0x0($t0)
/* f03db68: 8defe6c8 */ lw $t7,-0x1938($t7)
/* f03db6c: 24180001 */ addiu $t8,$zero,0x1
/* f03db70: 01cf082a */ slt $at,$t6,$t7
/* f03db74: 50200005 */ beqzl $at,.NB0f03db8c
/* f03db78: 8faa0060 */ lw $t2,0x60($sp)
/* f03db7c: 10000002 */ beqz $zero,.NB0f03db88
/* f03db80: afb80060 */ sw $t8,0x60($sp)
/* f03db84: afb90060 */ sw $t9,0x60($sp)
.NB0f03db88:
/* f03db88: 8faa0060 */ lw $t2,0x60($sp)
.NB0f03db8c:
/* f03db8c: 3c01bf80 */ lui $at,0xbf80
/* f03db90: 00002025 */ or $a0,$zero,$zero
/* f03db94: 11400022 */ beqz $t2,.NB0f03dc20
/* f03db98: 00093400 */ sll $a2,$t1,0x10
/* f03db9c: 8e05001c */ lw $a1,0x1c($s0)
/* f03dba0: 44810000 */ mtc1 $at,$f0
/* f03dba4: 93b8005f */ lbu $t8,0x5f($sp)
/* f03dba8: 00065c03 */ sra $t3,$a2,0x10
/* f03dbac: 240cffff */ addiu $t4,$zero,-1
/* f03dbb0: 240d0400 */ addiu $t5,$zero,0x400
/* f03dbb4: 240e0004 */ addiu $t6,$zero,0x4
/* f03dbb8: 240fffff */ addiu $t7,$zero,-1
/* f03dbbc: afaf002c */ sw $t7,0x2c($sp)
/* f03dbc0: afae0018 */ sw $t6,0x18($sp)
/* f03dbc4: afad0014 */ sw $t5,0x14($sp)
/* f03dbc8: afac0010 */ sw $t4,0x10($sp)
/* f03dbcc: 01603025 */ or $a2,$t3,$zero
/* f03dbd0: afa80058 */ sw $t0,0x58($sp)
/* f03dbd4: afa00028 */ sw $zero,0x28($sp)
/* f03dbd8: afa00020 */ sw $zero,0x20($sp)
/* f03dbdc: afa0001c */ sw $zero,0x1c($sp)
/* f03dbe0: 2407ffff */ addiu $a3,$zero,-1
/* f03dbe4: afb80054 */ sw $t8,0x54($sp)
/* f03dbe8: e7a00024 */ swc1 $f0,0x24($sp)
/* f03dbec: e7a00030 */ swc1 $f0,0x30($sp)
/* f03dbf0: e7a00034 */ swc1 $f0,0x34($sp)
/* f03dbf4: 0fc24762 */ jal func0f0939f8
/* f03dbf8: e7a00038 */ swc1 $f0,0x38($sp)
/* f03dbfc: 3c19800a */ lui $t9,0x800a
/* f03dc00: 8f39e6c8 */ lw $t9,-0x1938($t9)
/* f03dc04: 8faa0054 */ lw $t2,0x54($sp)
/* f03dc08: 8fa80058 */ lw $t0,0x58($sp)
/* f03dc0c: 032a5821 */ addu $t3,$t9,$t2
/* f03dc10: ad0b0000 */ sw $t3,0x0($t0)
/* f03dc14: 8e0c0014 */ lw $t4,0x14($s0)
/* f03dc18: 358d0080 */ ori $t5,$t4,0x80
/* f03dc1c: ae0d0014 */ sw $t5,0x14($s0)
.NB0f03dc20:
/* f03dc20: 8fae007c */ lw $t6,0x7c($sp)
/* f03dc24: 2504000c */ addiu $a0,$t0,0xc
/* f03dc28: 8fa50064 */ lw $a1,0x64($sp)
/* f03dc2c: 11c00003 */ beqz $t6,.NB0f03dc3c
/* f03dc30: 8fa60080 */ lw $a2,0x80($sp)
/* f03dc34: 0fc2a6f4 */ jal func0f0abe70
/* f03dc38: 8fa70084 */ lw $a3,0x84($sp)
.NB0f03dc3c:
/* f03dc3c: 8fbf004c */ lw $ra,0x4c($sp)
.NB0f03dc40:
/* f03dc40: 8fb00048 */ lw $s0,0x48($sp)
/* f03dc44: 27bd0070 */ addiu $sp,$sp,0x70
/* f03dc48: 03e00008 */ jr $ra
/* f03dc4c: 00000000 */ sll $zero,$zero,0x0
);
#endif
/**
* Returns the chr's turn angle difference to 360 degrees, in radians.
*/
f32 chrGetInverseTheta(struct chrdata *chr)
{
if (chr->aibot) {
return chr->aibot->unk0b0;
}
if (chr->model == NULL && chr->prop && chr->prop->type == PROPTYPE_PLAYER) {
struct player *player = g_Vars.players[propGetPlayerNum(chr->prop)];
f32 angle = (360.0f - player->vv_theta) * 0.017450513318181f;
if (angle >= M_BADTAU) {
angle -= M_BADTAU;
} else if (angle < 0) {
angle += M_BADTAU;
}
return angle;
}
return func0001ae44(chr->model);
}
void chrSetLookAngle(struct chrdata *chr, f32 angle)
{
if (chr->aibot) {
chr->aibot->unk0b0 = angle;
} else {
func0001ae90(chr->model, angle);
}
}
f32 func0f03e578(struct chrdata *chr)
{
if (chr->aibot) {
return chr->aibot->unk0a4;
}
return func0001ae44(chr->model);
}
void func0f03e5b0(struct chrdata *chr, f32 arg1)
{
if (chr->aibot) {
chr->aibot->unk0a4 = arg1;
} else {
func0001ae90(chr->model, arg1);
}
}
f32 chrGetAimAngle(struct chrdata *chr)
{
f32 angle = chrGetInverseTheta(chr) + chr->aimsideback;
f32 offset = 0;
if (angle >= M_BADTAU) {
angle -= M_BADTAU;
} else if (angle < 0) {
angle += M_BADTAU;
}
if (chr->aibot) {
if (chr->aibot->unk068) {
// empty
}
} else if (chr->actiontype == ACT_ATTACK
|| chr->actiontype == ACT_ATTACKROLL
|| chr->actiontype == ACT_BOT_ATTACKSTAND
|| chr->actiontype == ACT_BOT_ATTACKKNEEL
|| chr->actiontype == ACT_BOT_ATTACKSTRAFE) {
offset = chr->act_attack.animfloats->unk0c;
} else if (chr->prop->type == PROPTYPE_PLAYER) {
offset += g_Vars.players[propGetPlayerNum(chr->prop)]->angleoffset;
}
if (offset) {
if (chr->model->anim->flip) {
offset = M_BADTAU - offset;
}
angle += offset;
if (angle >= M_BADTAU) {
angle -= M_BADTAU;
} else if (angle < M_BADTAU) {
angle += M_BADTAU;
}
}
return angle;
}
f32 func0f03e754(struct chrdata *chr)
{
f32 sum = chr->aimuprshoulder + chr->aimupback;
if (sum < 0) {
sum += M_BADTAU;
}
return sum;
}
GLOBAL_ASM(
glabel func0f03e788
.late_rodata
glabel var7f1a8f34
.word 0x3d80a8be
glabel var7f1a8f38
.word 0x40c907a9
glabel var7f1a8f3c
.word 0x40c907a9
glabel var7f1a8f40
.word 0x40490fdb
.text
/* f03e788: 27bdffc8 */ addiu $sp,$sp,-56
/* f03e78c: afb00018 */ sw $s0,0x18($sp)
/* f03e790: 24010002 */ addiu $at,$zero,0x2
/* f03e794: 00808025 */ or $s0,$a0,$zero
/* f03e798: afbf001c */ sw $ra,0x1c($sp)
/* f03e79c: afa5003c */ sw $a1,0x3c($sp)
/* f03e7a0: afa60040 */ sw $a2,0x40($sp)
/* f03e7a4: 10a1008e */ beq $a1,$at,.L0f03e9e0
/* f03e7a8: afa70044 */ sw $a3,0x44($sp)
/* f03e7ac: 8c840020 */ lw $a0,0x20($a0)
/* f03e7b0: 0c00745f */ jal modelGetCurAnimFrame
/* f03e7b4: afa40034 */ sw $a0,0x34($sp)
/* f03e7b8: e7a00030 */ swc1 $f0,0x30($sp)
/* f03e7bc: 0fc0f917 */ jal chrGetInverseTheta
/* f03e7c0: 02002025 */ or $a0,$s0,$zero
/* f03e7c4: 3c017f1b */ lui $at,%hi(var7f1a8f34)
/* f03e7c8: c4248f34 */ lwc1 $f4,%lo(var7f1a8f34)($at)
/* f03e7cc: c7a60044 */ lwc1 $f6,0x44($sp)
/* f03e7d0: 3c01800a */ lui $at,%hi(g_Vars+0x44)
/* f03e7d4: c42aa004 */ lwc1 $f10,%lo(g_Vars+0x44)($at)
/* f03e7d8: 46062202 */ mul.s $f8,$f4,$f6
/* f03e7dc: 8faf0034 */ lw $t7,0x34($sp)
/* f03e7e0: 46000306 */ mov.s $f12,$f0
/* f03e7e4: 02002025 */ or $a0,$s0,$zero
/* f03e7e8: 8df80020 */ lw $t8,0x20($t7)
/* f03e7ec: 460a4402 */ mul.s $f16,$f8,$f10
/* f03e7f0: c7120074 */ lwc1 $f18,0x74($t8)
/* f03e7f4: 46128102 */ mul.s $f4,$f16,$f18
/* f03e7f8: e7a40020 */ swc1 $f4,0x20($sp)
/* f03e7fc: 8e1902d4 */ lw $t9,0x2d4($s0)
/* f03e800: 53200009 */ beqzl $t9,.L0f03e828
/* f03e804: 82020007 */ lb $v0,0x7($s0)
/* f03e808: 0fc0a221 */ jal chrGetTargetProp
/* f03e80c: e7ac0028 */ swc1 $f12,0x28($sp)
/* f03e810: 02002025 */ or $a0,$s0,$zero
/* f03e814: 0fc122a1 */ jal chrGetAngleToPos
/* f03e818: 24450008 */ addiu $a1,$v0,0x8
/* f03e81c: 1000002b */ b .L0f03e8cc
/* f03e820: c7ac0028 */ lwc1 $f12,0x28($sp)
/* f03e824: 82020007 */ lb $v0,0x7($s0)
.L0f03e828:
/* f03e828: 24010008 */ addiu $at,$zero,0x8
/* f03e82c: 02002025 */ or $a0,$s0,$zero
/* f03e830: 10410007 */ beq $v0,$at,.L0f03e850
/* f03e834: 2401001b */ addiu $at,$zero,0x1b
/* f03e838: 10410005 */ beq $v0,$at,.L0f03e850
/* f03e83c: 2401001c */ addiu $at,$zero,0x1c
/* f03e840: 10410003 */ beq $v0,$at,.L0f03e850
/* f03e844: 2401001d */ addiu $at,$zero,0x1d
/* f03e848: 54410008 */ bnel $v0,$at,.L0f03e86c
/* f03e84c: 24010001 */ addiu $at,$zero,0x1
.L0f03e850:
/* f03e850: 8e05004c */ lw $a1,0x4c($s0)
/* f03e854: 8e060050 */ lw $a2,0x50($s0)
/* f03e858: 0fc0b8b4 */ jal func0f02e2d0
/* f03e85c: e7ac0028 */ swc1 $f12,0x28($sp)
/* f03e860: 1000001a */ b .L0f03e8cc
/* f03e864: c7ac0028 */ lwc1 $f12,0x28($sp)
/* f03e868: 24010001 */ addiu $at,$zero,0x1
.L0f03e86c:
/* f03e86c: 14410007 */ bne $v0,$at,.L0f03e88c
/* f03e870: 02002025 */ or $a0,$s0,$zero
/* f03e874: 8e050030 */ lw $a1,0x30($s0)
/* f03e878: 8e060034 */ lw $a2,0x34($s0)
/* f03e87c: 0fc0b8b4 */ jal func0f02e2d0
/* f03e880: e7ac0028 */ swc1 $f12,0x28($sp)
/* f03e884: 10000011 */ b .L0f03e8cc
/* f03e888: c7ac0028 */ lwc1 $f12,0x28($sp)
.L0f03e88c:
/* f03e88c: 24010014 */ addiu $at,$zero,0x14
/* f03e890: 14410008 */ bne $v0,$at,.L0f03e8b4
/* f03e894: 02002025 */ or $a0,$s0,$zero
/* f03e898: 8e05002c */ lw $a1,0x2c($s0)
/* f03e89c: 8e060030 */ lw $a2,0x30($s0)
/* f03e8a0: e7ac0028 */ swc1 $f12,0x28($sp)
/* f03e8a4: 0fc0b8b4 */ jal func0f02e2d0
/* f03e8a8: 02002025 */ or $a0,$s0,$zero
/* f03e8ac: 10000007 */ b .L0f03e8cc
/* f03e8b0: c7ac0028 */ lwc1 $f12,0x28($sp)
.L0f03e8b4:
/* f03e8b4: 0fc0a221 */ jal chrGetTargetProp
/* f03e8b8: e7ac0028 */ swc1 $f12,0x28($sp)
/* f03e8bc: 02002025 */ or $a0,$s0,$zero
/* f03e8c0: 0fc122a1 */ jal chrGetAngleToPos
/* f03e8c4: 24450008 */ addiu $a1,$v0,0x8
/* f03e8c8: c7ac0028 */ lwc1 $f12,0x28($sp)
.L0f03e8cc:
/* f03e8cc: c7a60048 */ lwc1 $f6,0x48($sp)
/* f03e8d0: 44807000 */ mtc1 $zero,$f14
/* f03e8d4: 3c017f1b */ lui $at,%hi(var7f1a8f38)
/* f03e8d8: 46060081 */ sub.s $f2,$f0,$f6
/* f03e8dc: c7a80020 */ lwc1 $f8,0x20($sp)
/* f03e8e0: 460e103c */ c.lt.s $f2,$f14
/* f03e8e4: 00000000 */ nop
/* f03e8e8: 45020004 */ bc1fl .L0f03e8fc
/* f03e8ec: 4608103c */ c.lt.s $f2,$f8
/* f03e8f0: c4208f38 */ lwc1 $f0,%lo(var7f1a8f38)($at)
/* f03e8f4: 46001080 */ add.s $f2,$f2,$f0
/* f03e8f8: 4608103c */ c.lt.s $f2,$f8
.L0f03e8fc:
/* f03e8fc: 3c017f1b */ lui $at,%hi(var7f1a8f3c)
/* f03e900: c4208f3c */ lwc1 $f0,%lo(var7f1a8f3c)($at)
/* f03e904: 45030008 */ bc1tl .L0f03e928
/* f03e908: 46026300 */ add.s $f12,$f12,$f2
/* f03e90c: 46080281 */ sub.s $f10,$f0,$f8
/* f03e910: 3c017f1b */ lui $at,%hi(var7f1a8f40)
/* f03e914: 4602503c */ c.lt.s $f10,$f2
/* f03e918: 00000000 */ nop
/* f03e91c: 4500000d */ bc1f .L0f03e954
/* f03e920: 00000000 */ nop
/* f03e924: 46026300 */ add.s $f12,$f12,$f2
.L0f03e928:
/* f03e928: 460c003e */ c.le.s $f0,$f12
/* f03e92c: 00000000 */ nop
/* f03e930: 45020003 */ bc1fl .L0f03e940
/* f03e934: 44056000 */ mfc1 $a1,$f12
/* f03e938: 46006301 */ sub.s $f12,$f12,$f0
/* f03e93c: 44056000 */ mfc1 $a1,$f12
.L0f03e940:
/* f03e940: 0fc0f94e */ jal chrSetLookAngle
/* f03e944: 02002025 */ or $a0,$s0,$zero
/* f03e948: 24080003 */ addiu $t0,$zero,0x3
/* f03e94c: 1000001c */ b .L0f03e9c0
/* f03e950: afa8003c */ sw $t0,0x3c($sp)
.L0f03e954:
/* f03e954: c4308f40 */ lwc1 $f16,%lo(var7f1a8f40)($at)
/* f03e958: c7b20020 */ lwc1 $f18,0x20($sp)
/* f03e95c: c7a40020 */ lwc1 $f4,0x20($sp)
/* f03e960: 4610103c */ c.lt.s $f2,$f16
/* f03e964: 00000000 */ nop
/* f03e968: 4502000d */ bc1fl .L0f03e9a0
/* f03e96c: 46046301 */ sub.s $f12,$f12,$f4
/* f03e970: 46126300 */ add.s $f12,$f12,$f18
/* f03e974: 460c003e */ c.le.s $f0,$f12
/* f03e978: 00000000 */ nop
/* f03e97c: 45020003 */ bc1fl .L0f03e98c
/* f03e980: 44056000 */ mfc1 $a1,$f12
/* f03e984: 46006301 */ sub.s $f12,$f12,$f0
/* f03e988: 44056000 */ mfc1 $a1,$f12
.L0f03e98c:
/* f03e98c: 0fc0f94e */ jal chrSetLookAngle
/* f03e990: 02002025 */ or $a0,$s0,$zero
/* f03e994: 1000000b */ b .L0f03e9c4
/* f03e998: c7a60030 */ lwc1 $f6,0x30($sp)
/* f03e99c: 46046301 */ sub.s $f12,$f12,$f4
.L0f03e9a0:
/* f03e9a0: 460e603c */ c.lt.s $f12,$f14
/* f03e9a4: 00000000 */ nop
/* f03e9a8: 45020003 */ bc1fl .L0f03e9b8
/* f03e9ac: 44056000 */ mfc1 $a1,$f12
/* f03e9b0: 46006300 */ add.s $f12,$f12,$f0
/* f03e9b4: 44056000 */ mfc1 $a1,$f12
.L0f03e9b8:
/* f03e9b8: 0fc0f94e */ jal chrSetLookAngle
/* f03e9bc: 02002025 */ or $a0,$s0,$zero
.L0f03e9c0:
/* f03e9c0: c7a60030 */ lwc1 $f6,0x30($sp)
.L0f03e9c4:
/* f03e9c4: c7a80040 */ lwc1 $f8,0x40($sp)
/* f03e9c8: 24090002 */ addiu $t1,$zero,0x2
/* f03e9cc: 4606403e */ c.le.s $f8,$f6
/* f03e9d0: 00000000 */ nop
/* f03e9d4: 45020003 */ bc1fl .L0f03e9e4
/* f03e9d8: 8fbf001c */ lw $ra,0x1c($sp)
/* f03e9dc: afa9003c */ sw $t1,0x3c($sp)
.L0f03e9e0:
/* f03e9e0: 8fbf001c */ lw $ra,0x1c($sp)
.L0f03e9e4:
/* f03e9e4: 8fa2003c */ lw $v0,0x3c($sp)
/* f03e9e8: 8fb00018 */ lw $s0,0x18($sp)
/* f03e9ec: 03e00008 */ jr $ra
/* f03e9f0: 27bd0038 */ addiu $sp,$sp,0x38
);
GLOBAL_ASM(
glabel func0f03e9f4
.late_rodata
glabel var7f1a8f44
.word 0x3d4ccccd
glabel var7f1a8f48
.word 0x3ecccccd
glabel var7f1a8f4c
.word 0x481c4000
glabel var7f1a8f50
.word 0x3dcccccd
glabel var7f1a8f54
.word 0x3f0ccccd
glabel var7f1a8f58
.word 0x3dcccccd
glabel var7f1a8f5c
.word 0x3e19999a
glabel var7f1a8f60
.word 0x3dcccccd
glabel var7f1a8f64
.word 0x3d4ccccd
glabel var7f1a8f68
.word 0x3ccccccd
glabel var7f1a8f6c
.word 0x49742400
glabel var7f1a8f70
.word 0x3dcccccd
glabel var7f1a8f74
.word 0x3d4ccccd
glabel var7f1a8f78
.word 0x3f0ccccd
glabel var7f1a8f7c
.word 0x3d4ccccd
glabel var7f1a8f80
.word 0x3dcccccd
glabel var7f1a8f84
.word 0x3f0ccccd
glabel var7f1a8f88
.word 0x3dcccccd
glabel var7f1a8f8c
.word 0x3e19999a
glabel var7f1a8f90
.word 0x3dcccccd
glabel var7f1a8f94
.word 0x3d4ccccd
glabel var7f1a8f98
.word 0x40490fdb
glabel var7f1a8f9c
.word 0x40c907a9
glabel var7f1a8fa0
.word 0x49742400
glabel var7f1a8fa4
.word 0x40c907a9
glabel var7f1a8fa8
.word 0x40c907a9
glabel var7f1a8fac
.word 0x40c907a9
glabel var7f1a8fb0
.word 0x40c907a9
glabel var7f1a8fb4
.word 0x3dd66e92
glabel var7f1a8fb8
.word 0x40c907a9
glabel var7f1a8fbc
.word 0x40c907a9
glabel var7f1a8fc0
.word 0x40c907a9
glabel var7f1a8fc4
.word 0x40490fdb
glabel var7f1a8fc8
.word 0x40c907a9
.text
/* f03e9f4: 27bdfe70 */ addiu $sp,$sp,-400
/* f03e9f8: 44808000 */ mtc1 $zero,$f16
/* f03e9fc: 240e0001 */ addiu $t6,$zero,0x1
/* f03ea00: afbf001c */ sw $ra,0x1c($sp)
/* f03ea04: afa50194 */ sw $a1,0x194($sp)
/* f03ea08: afa60198 */ sw $a2,0x198($sp)
/* f03ea0c: afa7019c */ sw $a3,0x19c($sp)
/* f03ea10: afae017c */ sw $t6,0x17c($sp)
/* f03ea14: e7b0018c */ swc1 $f16,0x18c($sp)
/* f03ea18: 8c8f02d4 */ lw $t7,0x2d4($a0)
/* f03ea1c: 24080200 */ addiu $t0,$zero,0x200
/* f03ea20: 00001825 */ or $v1,$zero,$zero
/* f03ea24: 55e00014 */ bnezl $t7,.L0f03ea78
/* f03ea28: 31180002 */ andi $t8,$t0,0x2
/* f03ea2c: 80820007 */ lb $v0,0x7($a0)
/* f03ea30: 24010008 */ addiu $at,$zero,0x8
/* f03ea34: 10410007 */ beq $v0,$at,.L0f03ea54
/* f03ea38: 2401001b */ addiu $at,$zero,0x1b
/* f03ea3c: 10410005 */ beq $v0,$at,.L0f03ea54
/* f03ea40: 2401001c */ addiu $at,$zero,0x1c
/* f03ea44: 10410003 */ beq $v0,$at,.L0f03ea54
/* f03ea48: 2401001d */ addiu $at,$zero,0x1d
/* f03ea4c: 54410005 */ bnel $v0,$at,.L0f03ea64
/* f03ea50: 24010001 */ addiu $at,$zero,0x1
.L0f03ea54:
/* f03ea54: 8c88004c */ lw $t0,0x4c($a0)
/* f03ea58: 10000006 */ b .L0f03ea74
/* f03ea5c: 8c830050 */ lw $v1,0x50($a0)
/* f03ea60: 24010001 */ addiu $at,$zero,0x1
.L0f03ea64:
/* f03ea64: 54410004 */ bnel $v0,$at,.L0f03ea78
/* f03ea68: 31180002 */ andi $t8,$t0,0x2
/* f03ea6c: 8c880030 */ lw $t0,0x30($a0)
/* f03ea70: 8c830034 */ lw $v1,0x34($a0)
.L0f03ea74:
/* f03ea74: 31180002 */ andi $t8,$t0,0x2
.L0f03ea78:
/* f03ea78: 1700032d */ bnez $t8,.L0f03f730
/* f03ea7c: afa40190 */ sw $a0,0x190($sp)
/* f03ea80: 8c99001c */ lw $t9,0x1c($a0)
/* f03ea84: e7b00188 */ swc1 $f16,0x188($sp)
/* f03ea88: afa80184 */ sw $t0,0x184($sp)
/* f03ea8c: afa40190 */ sw $a0,0x190($sp)
/* f03ea90: afa30180 */ sw $v1,0x180($sp)
/* f03ea94: 0fc0a221 */ jal chrGetTargetProp
/* f03ea98: afb9016c */ sw $t9,0x16c($sp)
/* f03ea9c: 8fa3016c */ lw $v1,0x16c($sp)
/* f03eaa0: afa20168 */ sw $v0,0x168($sp)
/* f03eaa4: c4440008 */ lwc1 $f4,0x8($v0)
/* f03eaa8: c4660008 */ lwc1 $f6,0x8($v1)
/* f03eaac: 8fa60190 */ lw $a2,0x190($sp)
/* f03eab0: 8fac0184 */ lw $t4,0x184($sp)
/* f03eab4: 46062201 */ sub.s $f8,$f4,$f6
/* f03eab8: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03eabc: 318d0200 */ andi $t5,$t4,0x200
/* f03eac0: e7a80178 */ swc1 $f8,0x178($sp)
/* f03eac4: c44a000c */ lwc1 $f10,0xc($v0)
/* f03eac8: c472000c */ lwc1 $f18,0xc($v1)
/* f03eacc: 46125101 */ sub.s $f4,$f10,$f18
/* f03ead0: c7b20178 */ lwc1 $f18,0x178($sp)
/* f03ead4: e7a40174 */ swc1 $f4,0x174($sp)
/* f03ead8: c4460010 */ lwc1 $f6,0x10($v0)
/* f03eadc: c4680010 */ lwc1 $f8,0x10($v1)
/* f03eae0: 46129102 */ mul.s $f4,$f18,$f18
/* f03eae4: 46083281 */ sub.s $f10,$f6,$f8
/* f03eae8: c7a60174 */ lwc1 $f6,0x174($sp)
/* f03eaec: 46063202 */ mul.s $f8,$f6,$f6
/* f03eaf0: e7aa0170 */ swc1 $f10,0x170($sp)
/* f03eaf4: c7b20170 */ lwc1 $f18,0x170($sp)
/* f03eaf8: 46129182 */ mul.s $f6,$f18,$f18
/* f03eafc: 46082280 */ add.s $f10,$f4,$f8
/* f03eb00: 46065000 */ add.s $f0,$f10,$f6
/* f03eb04: e7a00164 */ swc1 $f0,0x164($sp)
/* f03eb08: 8cc902d4 */ lw $t1,0x2d4($a2)
/* f03eb0c: 11200006 */ beqz $t1,.L0f03eb28
/* f03eb10: 00000000 */ nop
/* f03eb14: 8faa0184 */ lw $t2,0x184($sp)
/* f03eb18: afa00160 */ sw $zero,0x160($sp)
/* f03eb1c: 314b0200 */ andi $t3,$t2,0x200
/* f03eb20: 10000013 */ b .L0f03eb70
/* f03eb24: afab0020 */ sw $t3,0x20($sp)
.L0f03eb28:
/* f03eb28: 11a0000f */ beqz $t5,.L0f03eb68
/* f03eb2c: afad0020 */ sw $t5,0x20($sp)
/* f03eb30: 318e0040 */ andi $t6,$t4,0x40
/* f03eb34: 11c00004 */ beqz $t6,.L0f03eb48
/* f03eb38: 00c02025 */ or $a0,$a2,$zero
/* f03eb3c: 240f0001 */ addiu $t7,$zero,0x1
/* f03eb40: 1000000b */ b .L0f03eb70
/* f03eb44: afaf0160 */ sw $t7,0x160($sp)
.L0f03eb48:
/* f03eb48: e7a00024 */ swc1 $f0,0x24($sp)
/* f03eb4c: 0fc0e4da */ jal chrCanSeeTarget
/* f03eb50: e7b00188 */ swc1 $f16,0x188($sp)
/* f03eb54: c7a00024 */ lwc1 $f0,0x24($sp)
/* f03eb58: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03eb5c: afa20160 */ sw $v0,0x160($sp)
/* f03eb60: 10000003 */ b .L0f03eb70
/* f03eb64: 8fa60190 */ lw $a2,0x190($sp)
.L0f03eb68:
/* f03eb68: 24180001 */ addiu $t8,$zero,0x1
/* f03eb6c: afb80160 */ sw $t8,0x160($sp)
.L0f03eb70:
/* f03eb70: 8fb90020 */ lw $t9,0x20($sp)
/* f03eb74: 8fa90168 */ lw $t1,0x168($sp)
/* f03eb78: 27a50134 */ addiu $a1,$sp,0x134
/* f03eb7c: 5320016c */ beqzl $t9,.L0f03f130
/* f03eb80: 8cc40020 */ lw $a0,0x20($a2)
/* f03eb84: 912a0000 */ lbu $t2,0x0($t1)
/* f03eb88: 24010006 */ addiu $at,$zero,0x6
/* f03eb8c: 01202025 */ or $a0,$t1,$zero
/* f03eb90: 55410167 */ bnel $t2,$at,.L0f03f130
/* f03eb94: 8cc40020 */ lw $a0,0x20($a2)
/* f03eb98: e7a00024 */ swc1 $f0,0x24($sp)
/* f03eb9c: 0fc4a25f */ jal propGetPlayerNum
/* f03eba0: e7b00188 */ swc1 $f16,0x188($sp)
/* f03eba4: 8fa40168 */ lw $a0,0x168($sp)
/* f03eba8: 00025880 */ sll $t3,$v0,0x2
/* f03ebac: 3c0d800a */ lui $t5,%hi(g_Vars+0x64)
/* f03ebb0: 01ab6821 */ addu $t5,$t5,$t3
/* f03ebb4: 8dada024 */ lw $t5,%lo(g_Vars+0x64)($t5)
/* f03ebb8: c4840008 */ lwc1 $f4,0x8($a0)
/* f03ebbc: 8fa30190 */ lw $v1,0x190($sp)
/* f03ebc0: c5a219c4 */ lwc1 $f2,0x19c4($t5)
/* f03ebc4: e7a40154 */ swc1 $f4,0x154($sp)
/* f03ebc8: c488000c */ lwc1 $f8,0xc($a0)
/* f03ebcc: c7a00024 */ lwc1 $f0,0x24($sp)
/* f03ebd0: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03ebd4: e7a80158 */ swc1 $f8,0x158($sp)
/* f03ebd8: c4920010 */ lwc1 $f18,0x10($a0)
/* f03ebdc: e7b2015c */ swc1 $f18,0x15c($sp)
/* f03ebe0: 8c6c02d4 */ lw $t4,0x2d4($v1)
/* f03ebe4: 5180001e */ beqzl $t4,.L0f03ec60
/* f03ebe8: 8c6e0018 */ lw $t6,0x18($v1)
/* f03ebec: e7a20140 */ swc1 $f2,0x140($sp)
/* f03ebf0: 0c004b70 */ jal random
/* f03ebf4: e7b00188 */ swc1 $f16,0x188($sp)
/* f03ebf8: 44825000 */ mtc1 $v0,$f10
/* f03ebfc: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03ec00: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03ec04: 04410005 */ bgez $v0,.L0f03ec1c
/* f03ec08: 468051a0 */ cvt.s.w $f6,$f10
/* f03ec0c: 3c014f80 */ lui $at,0x4f80
/* f03ec10: 44812000 */ mtc1 $at,$f4
/* f03ec14: 00000000 */ nop
/* f03ec18: 46043180 */ add.s $f6,$f6,$f4
.L0f03ec1c:
/* f03ec1c: 3c012f80 */ lui $at,0x2f80
/* f03ec20: 44814000 */ mtc1 $at,$f8
/* f03ec24: 3c017f1b */ lui $at,%hi(var7f1a8f44)
/* f03ec28: c42a8f44 */ lwc1 $f10,%lo(var7f1a8f44)($at)
/* f03ec2c: 46083482 */ mul.s $f18,$f6,$f8
/* f03ec30: c7a601a0 */ lwc1 $f6,0x1a0($sp)
/* f03ec34: 3c017f1b */ lui $at,%hi(var7f1a8f48)
/* f03ec38: 46125102 */ mul.s $f4,$f10,$f18
/* f03ec3c: c42a8f48 */ lwc1 $f10,%lo(var7f1a8f48)($at)
/* f03ec40: 46062202 */ mul.s $f8,$f4,$f6
/* f03ec44: c7a60174 */ lwc1 $f6,0x174($sp)
/* f03ec48: 46085480 */ add.s $f18,$f10,$f8
/* f03ec4c: 46121102 */ mul.s $f4,$f2,$f18
/* f03ec50: 46043281 */ sub.s $f10,$f6,$f4
/* f03ec54: 1000014c */ b .L0f03f188
/* f03ec58: e7aa0174 */ swc1 $f10,0x174($sp)
/* f03ec5c: 8c6e0018 */ lw $t6,0x18($v1)
.L0f03ec60:
/* f03ec60: 3c017f1b */ lui $at,%hi(var7f1a8f4c)
/* f03ec64: 31cf0020 */ andi $t7,$t6,0x20
/* f03ec68: 11e00087 */ beqz $t7,.L0f03ee88
/* f03ec6c: 00000000 */ nop
/* f03ec70: 3c017f1b */ lui $at,%hi(var7f1a8f50)
/* f03ec74: c4288f4c */ lwc1 $f8,%lo(var7f1a8f4c)($at)
/* f03ec78: 4608003c */ c.lt.s $f0,$f8
/* f03ec7c: 00000000 */ nop
/* f03ec80: 45020066 */ bc1fl .L0f03ee1c
/* f03ec84: e7a20140 */ swc1 $f2,0x140($sp)
/* f03ec88: 46021180 */ add.s $f6,$f2,$f2
/* f03ec8c: c7b20158 */ lwc1 $f18,0x158($sp)
/* f03ec90: 8fb8016c */ lw $t8,0x16c($sp)
/* f03ec94: 3c013f00 */ lui $at,0x3f00
/* f03ec98: 46069101 */ sub.s $f4,$f18,$f6
/* f03ec9c: c700000c */ lwc1 $f0,0xc($t8)
/* f03eca0: 4604003c */ c.lt.s $f0,$f4
/* f03eca4: 00000000 */ nop
/* f03eca8: 4502001e */ bc1fl .L0f03ed24
/* f03ecac: 44812000 */ mtc1 $at,$f4
/* f03ecb0: e7a20140 */ swc1 $f2,0x140($sp)
/* f03ecb4: 0c004b70 */ jal random
/* f03ecb8: e7b00188 */ swc1 $f16,0x188($sp)
/* f03ecbc: 44825000 */ mtc1 $v0,$f10
/* f03ecc0: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03ecc4: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03ecc8: 04410005 */ bgez $v0,.L0f03ece0
/* f03eccc: 46805220 */ cvt.s.w $f8,$f10
/* f03ecd0: 3c014f80 */ lui $at,0x4f80
/* f03ecd4: 44819000 */ mtc1 $at,$f18
/* f03ecd8: 00000000 */ nop
/* f03ecdc: 46124200 */ add.s $f8,$f8,$f18
.L0f03ece0:
/* f03ece0: 3c012f80 */ lui $at,0x2f80
/* f03ece4: 44813000 */ mtc1 $at,$f6
/* f03ece8: 3c017f1b */ lui $at,%hi(var7f1a8f54)
/* f03ecec: c42a8f50 */ lwc1 $f10,%lo(var7f1a8f50)($at)
/* f03ecf0: 46064102 */ mul.s $f4,$f8,$f6
/* f03ecf4: c7a801a0 */ lwc1 $f8,0x1a0($sp)
/* f03ecf8: 3c017f1b */ lui $at,%hi(var7f1a8f58)
/* f03ecfc: 46045482 */ mul.s $f18,$f10,$f4
/* f03ed00: c42a8f54 */ lwc1 $f10,%lo(var7f1a8f54)($at)
/* f03ed04: 46089182 */ mul.s $f6,$f18,$f8
/* f03ed08: c7a80174 */ lwc1 $f8,0x174($sp)
/* f03ed0c: 46065100 */ add.s $f4,$f10,$f6
/* f03ed10: 46041482 */ mul.s $f18,$f2,$f4
/* f03ed14: 46124281 */ sub.s $f10,$f8,$f18
/* f03ed18: 1000011b */ b .L0f03f188
/* f03ed1c: e7aa0174 */ swc1 $f10,0x174($sp)
/* f03ed20: 44812000 */ mtc1 $at,$f4
.L0f03ed24:
/* f03ed24: c7a60158 */ lwc1 $f6,0x158($sp)
/* f03ed28: 46041202 */ mul.s $f8,$f2,$f4
/* f03ed2c: 46083481 */ sub.s $f18,$f6,$f8
/* f03ed30: 4600903c */ c.lt.s $f18,$f0
/* f03ed34: 00000000 */ nop
/* f03ed38: 4500001d */ bc1f .L0f03edb0
/* f03ed3c: 00000000 */ nop
/* f03ed40: e7a20140 */ swc1 $f2,0x140($sp)
/* f03ed44: 0c004b70 */ jal random
/* f03ed48: e7b00188 */ swc1 $f16,0x188($sp)
/* f03ed4c: 44825000 */ mtc1 $v0,$f10
/* f03ed50: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03ed54: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03ed58: 04410005 */ bgez $v0,.L0f03ed70
/* f03ed5c: 46805120 */ cvt.s.w $f4,$f10
/* f03ed60: 3c014f80 */ lui $at,0x4f80
/* f03ed64: 44813000 */ mtc1 $at,$f6
/* f03ed68: 00000000 */ nop
/* f03ed6c: 46062100 */ add.s $f4,$f4,$f6
.L0f03ed70:
/* f03ed70: 3c012f80 */ lui $at,0x2f80
/* f03ed74: 44814000 */ mtc1 $at,$f8
/* f03ed78: 3c017f1b */ lui $at,%hi(var7f1a8f5c)
/* f03ed7c: c42a8f58 */ lwc1 $f10,%lo(var7f1a8f58)($at)
/* f03ed80: 46082482 */ mul.s $f18,$f4,$f8
/* f03ed84: c7a401a0 */ lwc1 $f4,0x1a0($sp)
/* f03ed88: 3c017f1b */ lui $at,%hi(var7f1a8f60)
/* f03ed8c: 46125182 */ mul.s $f6,$f10,$f18
/* f03ed90: c42a8f5c */ lwc1 $f10,%lo(var7f1a8f5c)($at)
/* f03ed94: 46043202 */ mul.s $f8,$f6,$f4
/* f03ed98: c7a40174 */ lwc1 $f4,0x174($sp)
/* f03ed9c: 46085480 */ add.s $f18,$f10,$f8
/* f03eda0: 46121182 */ mul.s $f6,$f2,$f18
/* f03eda4: 46062281 */ sub.s $f10,$f4,$f6
/* f03eda8: 100000f7 */ b .L0f03f188
/* f03edac: e7aa0174 */ swc1 $f10,0x174($sp)
.L0f03edb0:
/* f03edb0: 0c004b70 */ jal random
/* f03edb4: e7b00188 */ swc1 $f16,0x188($sp)
/* f03edb8: 44824000 */ mtc1 $v0,$f8
/* f03edbc: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03edc0: 04410005 */ bgez $v0,.L0f03edd8
/* f03edc4: 468044a0 */ cvt.s.w $f18,$f8
/* f03edc8: 3c014f80 */ lui $at,0x4f80
/* f03edcc: 44812000 */ mtc1 $at,$f4
/* f03edd0: 00000000 */ nop
/* f03edd4: 46049480 */ add.s $f18,$f18,$f4
.L0f03edd8:
/* f03edd8: 3c012f80 */ lui $at,0x2f80
/* f03eddc: 44813000 */ mtc1 $at,$f6
/* f03ede0: 3c017f1b */ lui $at,%hi(var7f1a8f64)
/* f03ede4: c4288f60 */ lwc1 $f8,%lo(var7f1a8f60)($at)
/* f03ede8: 46069282 */ mul.s $f10,$f18,$f6
/* f03edec: c7b201a0 */ lwc1 $f18,0x1a0($sp)
/* f03edf0: 3c013f80 */ lui $at,0x3f80
/* f03edf4: 46085102 */ mul.s $f4,$f10,$f8
/* f03edf8: 44815000 */ mtc1 $at,$f10
/* f03edfc: 3c014220 */ lui $at,0x4220
/* f03ee00: 46122182 */ mul.s $f6,$f4,$f18
/* f03ee04: 44812000 */ mtc1 $at,$f4
/* f03ee08: 460a3200 */ add.s $f8,$f6,$f10
/* f03ee0c: 46044482 */ mul.s $f18,$f8,$f4
/* f03ee10: 100000dd */ b .L0f03f188
/* f03ee14: e7b20174 */ swc1 $f18,0x174($sp)
/* f03ee18: e7a20140 */ swc1 $f2,0x140($sp)
.L0f03ee1c:
/* f03ee1c: 0c004b70 */ jal random
/* f03ee20: e7b00188 */ swc1 $f16,0x188($sp)
/* f03ee24: 44823000 */ mtc1 $v0,$f6
/* f03ee28: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03ee2c: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03ee30: 04410005 */ bgez $v0,.L0f03ee48
/* f03ee34: 468032a0 */ cvt.s.w $f10,$f6
/* f03ee38: 3c014f80 */ lui $at,0x4f80
/* f03ee3c: 44814000 */ mtc1 $at,$f8
/* f03ee40: 00000000 */ nop
/* f03ee44: 46085280 */ add.s $f10,$f10,$f8
.L0f03ee48:
/* f03ee48: 3c012f80 */ lui $at,0x2f80
/* f03ee4c: 44812000 */ mtc1 $at,$f4
/* f03ee50: 3c017f1b */ lui $at,%hi(var7f1a8f68)
/* f03ee54: c4268f64 */ lwc1 $f6,%lo(var7f1a8f64)($at)
/* f03ee58: 46045482 */ mul.s $f18,$f10,$f4
/* f03ee5c: c7aa01a0 */ lwc1 $f10,0x1a0($sp)
/* f03ee60: 3c017f1b */ lui $at,%hi(var7f1a8f6c)
/* f03ee64: 46123202 */ mul.s $f8,$f6,$f18
/* f03ee68: c4268f68 */ lwc1 $f6,%lo(var7f1a8f68)($at)
/* f03ee6c: 460a4102 */ mul.s $f4,$f8,$f10
/* f03ee70: c7aa0174 */ lwc1 $f10,0x174($sp)
/* f03ee74: 46043481 */ sub.s $f18,$f6,$f4
/* f03ee78: 46121202 */ mul.s $f8,$f2,$f18
/* f03ee7c: 46085180 */ add.s $f6,$f10,$f8
/* f03ee80: 100000c1 */ b .L0f03f188
/* f03ee84: e7a60174 */ swc1 $f6,0x174($sp)
.L0f03ee88:
/* f03ee88: c4248f6c */ lwc1 $f4,%lo(var7f1a8f6c)($at)
/* f03ee8c: c7a80158 */ lwc1 $f8,0x158($sp)
/* f03ee90: 4600203c */ c.lt.s $f4,$f0
/* f03ee94: 00000000 */ nop
/* f03ee98: 45020043 */ bc1fl .L0f03efa8
/* f03ee9c: 8faa016c */ lw $t2,0x16c($sp)
/* f03eea0: e7a20140 */ swc1 $f2,0x140($sp)
/* f03eea4: 0c004b70 */ jal random
/* f03eea8: e7b00188 */ swc1 $f16,0x188($sp)
/* f03eeac: 24010003 */ addiu $at,$zero,0x3
/* f03eeb0: 0041001b */ divu $zero,$v0,$at
/* f03eeb4: 0000c810 */ mfhi $t9
/* f03eeb8: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03eebc: 1720001d */ bnez $t9,.L0f03ef34
/* f03eec0: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03eec4: e7a20140 */ swc1 $f2,0x140($sp)
/* f03eec8: 0c004b70 */ jal random
/* f03eecc: e7b00188 */ swc1 $f16,0x188($sp)
/* f03eed0: 44829000 */ mtc1 $v0,$f18
/* f03eed4: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03eed8: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03eedc: 04410005 */ bgez $v0,.L0f03eef4
/* f03eee0: 468092a0 */ cvt.s.w $f10,$f18
/* f03eee4: 3c014f80 */ lui $at,0x4f80
/* f03eee8: 44814000 */ mtc1 $at,$f8
/* f03eeec: 00000000 */ nop
/* f03eef0: 46085280 */ add.s $f10,$f10,$f8
.L0f03eef4:
/* f03eef4: 3c012f80 */ lui $at,0x2f80
/* f03eef8: 44813000 */ mtc1 $at,$f6
/* f03eefc: 3c017f1b */ lui $at,%hi(var7f1a8f70)
/* f03ef00: c4328f70 */ lwc1 $f18,%lo(var7f1a8f70)($at)
/* f03ef04: 46065102 */ mul.s $f4,$f10,$f6
/* f03ef08: c7aa01a0 */ lwc1 $f10,0x1a0($sp)
/* f03ef0c: 3c017f1b */ lui $at,%hi(var7f1a8f74)
/* f03ef10: 46049202 */ mul.s $f8,$f18,$f4
/* f03ef14: c4328f74 */ lwc1 $f18,%lo(var7f1a8f74)($at)
/* f03ef18: 460a4182 */ mul.s $f6,$f8,$f10
/* f03ef1c: c7aa0174 */ lwc1 $f10,0x174($sp)
/* f03ef20: 46069100 */ add.s $f4,$f18,$f6
/* f03ef24: 46041202 */ mul.s $f8,$f2,$f4
/* f03ef28: 46085480 */ add.s $f18,$f10,$f8
/* f03ef2c: 10000096 */ b .L0f03f188
/* f03ef30: e7b20174 */ swc1 $f18,0x174($sp)
.L0f03ef34:
/* f03ef34: e7a20140 */ swc1 $f2,0x140($sp)
/* f03ef38: 0c004b70 */ jal random
/* f03ef3c: e7b00188 */ swc1 $f16,0x188($sp)
/* f03ef40: 44823000 */ mtc1 $v0,$f6
/* f03ef44: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03ef48: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03ef4c: 04410005 */ bgez $v0,.L0f03ef64
/* f03ef50: 46803120 */ cvt.s.w $f4,$f6
/* f03ef54: 3c014f80 */ lui $at,0x4f80
/* f03ef58: 44815000 */ mtc1 $at,$f10
/* f03ef5c: 00000000 */ nop
/* f03ef60: 460a2100 */ add.s $f4,$f4,$f10
.L0f03ef64:
/* f03ef64: 3c012f80 */ lui $at,0x2f80
/* f03ef68: 44814000 */ mtc1 $at,$f8
/* f03ef6c: 3c017f1b */ lui $at,%hi(var7f1a8f78)
/* f03ef70: c4268f78 */ lwc1 $f6,%lo(var7f1a8f78)($at)
/* f03ef74: 46082482 */ mul.s $f18,$f4,$f8
/* f03ef78: c7a401a0 */ lwc1 $f4,0x1a0($sp)
/* f03ef7c: 3c017f1b */ lui $at,%hi(var7f1a8f7c)
/* f03ef80: 46123282 */ mul.s $f10,$f6,$f18
/* f03ef84: c4268f7c */ lwc1 $f6,%lo(var7f1a8f7c)($at)
/* f03ef88: 46045202 */ mul.s $f8,$f10,$f4
/* f03ef8c: c7a40174 */ lwc1 $f4,0x174($sp)
/* f03ef90: 46083480 */ add.s $f18,$f6,$f8
/* f03ef94: 46121282 */ mul.s $f10,$f2,$f18
/* f03ef98: 460a2181 */ sub.s $f6,$f4,$f10
/* f03ef9c: 1000007a */ b .L0f03f188
/* f03efa0: e7a60174 */ swc1 $f6,0x174($sp)
/* f03efa4: 8faa016c */ lw $t2,0x16c($sp)
.L0f03efa8:
/* f03efa8: 46024481 */ sub.s $f18,$f8,$f2
/* f03efac: 3c013f00 */ lui $at,0x3f00
/* f03efb0: c540000c */ lwc1 $f0,0xc($t2)
/* f03efb4: 4612003c */ c.lt.s $f0,$f18
/* f03efb8: 00000000 */ nop
/* f03efbc: 4502001e */ bc1fl .L0f03f038
/* f03efc0: 44819000 */ mtc1 $at,$f18
/* f03efc4: e7a20140 */ swc1 $f2,0x140($sp)
/* f03efc8: 0c004b70 */ jal random
/* f03efcc: e7b00188 */ swc1 $f16,0x188($sp)
/* f03efd0: 44822000 */ mtc1 $v0,$f4
/* f03efd4: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03efd8: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03efdc: 04410005 */ bgez $v0,.L0f03eff4
/* f03efe0: 468022a0 */ cvt.s.w $f10,$f4
/* f03efe4: 3c014f80 */ lui $at,0x4f80
/* f03efe8: 44813000 */ mtc1 $at,$f6
/* f03efec: 00000000 */ nop
/* f03eff0: 46065280 */ add.s $f10,$f10,$f6
.L0f03eff4:
/* f03eff4: 3c012f80 */ lui $at,0x2f80
/* f03eff8: 44814000 */ mtc1 $at,$f8
/* f03effc: 3c017f1b */ lui $at,%hi(var7f1a8f80)
/* f03f000: c4248f80 */ lwc1 $f4,%lo(var7f1a8f80)($at)
/* f03f004: 46085482 */ mul.s $f18,$f10,$f8
/* f03f008: c7aa01a0 */ lwc1 $f10,0x1a0($sp)
/* f03f00c: 3c017f1b */ lui $at,%hi(var7f1a8f84)
/* f03f010: 46122182 */ mul.s $f6,$f4,$f18
/* f03f014: c4248f84 */ lwc1 $f4,%lo(var7f1a8f84)($at)
/* f03f018: 460a3202 */ mul.s $f8,$f6,$f10
/* f03f01c: c7aa0174 */ lwc1 $f10,0x174($sp)
/* f03f020: 46082480 */ add.s $f18,$f4,$f8
/* f03f024: 46121182 */ mul.s $f6,$f2,$f18
/* f03f028: 46065101 */ sub.s $f4,$f10,$f6
/* f03f02c: 10000056 */ b .L0f03f188
/* f03f030: e7a40174 */ swc1 $f4,0x174($sp)
/* f03f034: 44819000 */ mtc1 $at,$f18
.L0f03f038:
/* f03f038: c7a80158 */ lwc1 $f8,0x158($sp)
/* f03f03c: 46121282 */ mul.s $f10,$f2,$f18
/* f03f040: 460a4181 */ sub.s $f6,$f8,$f10
/* f03f044: 4600303c */ c.lt.s $f6,$f0
/* f03f048: 00000000 */ nop
/* f03f04c: 4502001e */ bc1fl .L0f03f0c8
/* f03f050: e7a20140 */ swc1 $f2,0x140($sp)
/* f03f054: e7a20140 */ swc1 $f2,0x140($sp)
/* f03f058: 0c004b70 */ jal random
/* f03f05c: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f060: 44822000 */ mtc1 $v0,$f4
/* f03f064: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03f068: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f06c: 04410005 */ bgez $v0,.L0f03f084
/* f03f070: 468024a0 */ cvt.s.w $f18,$f4
/* f03f074: 3c014f80 */ lui $at,0x4f80
/* f03f078: 44814000 */ mtc1 $at,$f8
/* f03f07c: 00000000 */ nop
/* f03f080: 46089480 */ add.s $f18,$f18,$f8
.L0f03f084:
/* f03f084: 3c012f80 */ lui $at,0x2f80
/* f03f088: 44815000 */ mtc1 $at,$f10
/* f03f08c: 3c017f1b */ lui $at,%hi(var7f1a8f88)
/* f03f090: c4248f88 */ lwc1 $f4,%lo(var7f1a8f88)($at)
/* f03f094: 460a9182 */ mul.s $f6,$f18,$f10
/* f03f098: c7b201a0 */ lwc1 $f18,0x1a0($sp)
/* f03f09c: 3c017f1b */ lui $at,%hi(var7f1a8f8c)
/* f03f0a0: 46062202 */ mul.s $f8,$f4,$f6
/* f03f0a4: c4248f8c */ lwc1 $f4,%lo(var7f1a8f8c)($at)
/* f03f0a8: 46124282 */ mul.s $f10,$f8,$f18
/* f03f0ac: c7b20174 */ lwc1 $f18,0x174($sp)
/* f03f0b0: 460a2180 */ add.s $f6,$f4,$f10
/* f03f0b4: 46061202 */ mul.s $f8,$f2,$f6
/* f03f0b8: 46089101 */ sub.s $f4,$f18,$f8
/* f03f0bc: 10000032 */ b .L0f03f188
/* f03f0c0: e7a40174 */ swc1 $f4,0x174($sp)
/* f03f0c4: e7a20140 */ swc1 $f2,0x140($sp)
.L0f03f0c8:
/* f03f0c8: 0c004b70 */ jal random
/* f03f0cc: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f0d0: 44825000 */ mtc1 $v0,$f10
/* f03f0d4: c7a20140 */ lwc1 $f2,0x140($sp)
/* f03f0d8: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f0dc: 04410005 */ bgez $v0,.L0f03f0f4
/* f03f0e0: 468051a0 */ cvt.s.w $f6,$f10
/* f03f0e4: 3c014f80 */ lui $at,0x4f80
/* f03f0e8: 44819000 */ mtc1 $at,$f18
/* f03f0ec: 00000000 */ nop
/* f03f0f0: 46123180 */ add.s $f6,$f6,$f18
.L0f03f0f4:
/* f03f0f4: 3c012f80 */ lui $at,0x2f80
/* f03f0f8: 44814000 */ mtc1 $at,$f8
/* f03f0fc: 3c017f1b */ lui $at,%hi(var7f1a8f90)
/* f03f100: c42a8f90 */ lwc1 $f10,%lo(var7f1a8f90)($at)
/* f03f104: 46083102 */ mul.s $f4,$f6,$f8
/* f03f108: c7a601a0 */ lwc1 $f6,0x1a0($sp)
/* f03f10c: 3c017f1b */ lui $at,%hi(var7f1a8f94)
/* f03f110: 460a2482 */ mul.s $f18,$f4,$f10
/* f03f114: c4248f94 */ lwc1 $f4,%lo(var7f1a8f94)($at)
/* f03f118: 46069202 */ mul.s $f8,$f18,$f6
/* f03f11c: 46044281 */ sub.s $f10,$f8,$f4
/* f03f120: 46025482 */ mul.s $f18,$f10,$f2
/* f03f124: 10000018 */ b .L0f03f188
/* f03f128: e7b20174 */ swc1 $f18,0x174($sp)
/* f03f12c: 8cc40020 */ lw $a0,0x20($a2)
.L0f03f130:
/* f03f130: 0c006b43 */ jal modelGetRootPosition
/* f03f134: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f138: 27a90144 */ addiu $t1,$sp,0x144
/* f03f13c: afa90010 */ sw $t1,0x10($sp)
/* f03f140: 8fa40190 */ lw $a0,0x190($sp)
/* f03f144: 8fa50184 */ lw $a1,0x184($sp)
/* f03f148: 8fa60180 */ lw $a2,0x180($sp)
/* f03f14c: 0fc122de */ jal func0f048b78
/* f03f150: 27a70154 */ addiu $a3,$sp,0x154
/* f03f154: c7a60154 */ lwc1 $f6,0x154($sp)
/* f03f158: c7a80134 */ lwc1 $f8,0x134($sp)
/* f03f15c: c7aa0158 */ lwc1 $f10,0x158($sp)
/* f03f160: c7b20138 */ lwc1 $f18,0x138($sp)
/* f03f164: 46083101 */ sub.s $f4,$f6,$f8
/* f03f168: c7a8015c */ lwc1 $f8,0x15c($sp)
/* f03f16c: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f170: 46125181 */ sub.s $f6,$f10,$f18
/* f03f174: e7a40178 */ swc1 $f4,0x178($sp)
/* f03f178: c7a4013c */ lwc1 $f4,0x13c($sp)
/* f03f17c: e7a60174 */ swc1 $f6,0x174($sp)
/* f03f180: 46044281 */ sub.s $f10,$f8,$f4
/* f03f184: e7aa0170 */ swc1 $f10,0x170($sp)
.L0f03f188:
/* f03f188: 8fab0184 */ lw $t3,0x184($sp)
/* f03f18c: c7b20178 */ lwc1 $f18,0x178($sp)
/* f03f190: c7a80170 */ lwc1 $f8,0x170($sp)
/* f03f194: 316d0100 */ andi $t5,$t3,0x100
/* f03f198: 55a00015 */ bnezl $t5,.L0f03f1f0
/* f03f19c: 8fac0160 */ lw $t4,0x160($sp)
/* f03f1a0: 46129182 */ mul.s $f6,$f18,$f18
/* f03f1a4: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f1a8: 46084102 */ mul.s $f4,$f8,$f8
/* f03f1ac: 0c012974 */ jal sqrtf
/* f03f1b0: 46043300 */ add.s $f12,$f6,$f4
/* f03f1b4: c7ac0174 */ lwc1 $f12,0x174($sp)
/* f03f1b8: 0fc259d4 */ jal atan2f
/* f03f1bc: 46000386 */ mov.s $f14,$f0
/* f03f1c0: 3c017f1b */ lui $at,%hi(var7f1a8f98)
/* f03f1c4: c42a8f98 */ lwc1 $f10,%lo(var7f1a8f98)($at)
/* f03f1c8: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f1cc: e7a0018c */ swc1 $f0,0x18c($sp)
/* f03f1d0: 4600503e */ c.le.s $f10,$f0
/* f03f1d4: 3c017f1b */ lui $at,%hi(var7f1a8f9c)
/* f03f1d8: 45020005 */ bc1fl .L0f03f1f0
/* f03f1dc: 8fac0160 */ lw $t4,0x160($sp)
/* f03f1e0: c4328f9c */ lwc1 $f18,%lo(var7f1a8f9c)($at)
/* f03f1e4: 46120201 */ sub.s $f8,$f0,$f18
/* f03f1e8: e7a8018c */ swc1 $f8,0x18c($sp)
/* f03f1ec: 8fac0160 */ lw $t4,0x160($sp)
.L0f03f1f0:
/* f03f1f0: 51800150 */ beqzl $t4,.L0f03f734
/* f03f1f4: c7a4018c */ lwc1 $f4,0x18c($sp)
/* f03f1f8: 0fc0f97c */ jal chrGetAimAngle
/* f03f1fc: 8fa40190 */ lw $a0,0x190($sp)
/* f03f200: 8fae0020 */ lw $t6,0x20($sp)
/* f03f204: e7a00130 */ swc1 $f0,0x130($sp)
/* f03f208: 8faf019c */ lw $t7,0x19c($sp)
/* f03f20c: 51c000aa */ beqzl $t6,.L0f03f4b8
/* f03f210: c7ac0178 */ lwc1 $f12,0x178($sp)
/* f03f214: 11e00006 */ beqz $t7,.L0f03f230
/* f03f218: 8fa40190 */ lw $a0,0x190($sp)
/* f03f21c: 8fa40190 */ lw $a0,0x190($sp)
/* f03f220: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f03f224: 00002825 */ or $a1,$zero,$zero
/* f03f228: 10000004 */ b .L0f03f23c
/* f03f22c: 00404025 */ or $t0,$v0,$zero
.L0f03f230:
/* f03f230: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f03f234: 24050001 */ addiu $a1,$zero,0x1
/* f03f238: 00404025 */ or $t0,$v0,$zero
.L0f03f23c:
/* f03f23c: 3c18800a */ lui $t8,%hi(g_Vars+0x6c)
/* f03f240: 8f18a02c */ lw $t8,%lo(g_Vars+0x6c)($t8)
/* f03f244: 3c19800a */ lui $t9,%hi(g_Vars+0x68)
/* f03f248: 3c0a800a */ lui $t2,%hi(g_Vars+0x64)
/* f03f24c: 13000003 */ beqz $t8,.L0f03f25c
/* f03f250: 3c09800a */ lui $t1,%hi(g_Vars+0x70)
/* f03f254: 10000002 */ b .L0f03f260
/* f03f258: 24060001 */ addiu $a2,$zero,0x1
.L0f03f25c:
/* f03f25c: 00003025 */ or $a2,$zero,$zero
.L0f03f260:
/* f03f260: 8f39a028 */ lw $t9,%lo(g_Vars+0x68)($t9)
/* f03f264: 24010001 */ addiu $at,$zero,0x1
/* f03f268: 00002025 */ or $a0,$zero,$zero
/* f03f26c: 13200003 */ beqz $t9,.L0f03f27c
/* f03f270: 00002825 */ or $a1,$zero,$zero
/* f03f274: 10000001 */ b .L0f03f27c
/* f03f278: 24040001 */ addiu $a0,$zero,0x1
.L0f03f27c:
/* f03f27c: 8d4aa024 */ lw $t2,%lo(g_Vars+0x64)($t2)
/* f03f280: 00001825 */ or $v1,$zero,$zero
/* f03f284: 11400003 */ beqz $t2,.L0f03f294
/* f03f288: 00000000 */ nop
/* f03f28c: 10000001 */ b .L0f03f294
/* f03f290: 24050001 */ addiu $a1,$zero,0x1
.L0f03f294:
/* f03f294: 8d29a030 */ lw $t1,%lo(g_Vars+0x70)($t1)
/* f03f298: 11200003 */ beqz $t1,.L0f03f2a8
/* f03f29c: 00000000 */ nop
/* f03f2a0: 10000001 */ b .L0f03f2a8
/* f03f2a4: 24030001 */ addiu $v1,$zero,0x1
.L0f03f2a8:
/* f03f2a8: 00655821 */ addu $t3,$v1,$a1
/* f03f2ac: 01646821 */ addu $t5,$t3,$a0
/* f03f2b0: 01a66021 */ addu $t4,$t5,$a2
/* f03f2b4: 55810080 */ bnel $t4,$at,.L0f03f4b8
/* f03f2b8: c7ac0178 */ lwc1 $f12,0x178($sp)
/* f03f2bc: 5040007e */ beqzl $v0,.L0f03f4b8
/* f03f2c0: c7ac0178 */ lwc1 $f12,0x178($sp)
/* f03f2c4: 904e0001 */ lbu $t6,0x1($v0)
/* f03f2c8: c7a60164 */ lwc1 $f6,0x164($sp)
/* f03f2cc: 3c017f1b */ lui $at,%hi(var7f1a8fa0)
/* f03f2d0: 31cf0080 */ andi $t7,$t6,0x80
/* f03f2d4: 51e00078 */ beqzl $t7,.L0f03f4b8
/* f03f2d8: c7ac0178 */ lwc1 $f12,0x178($sp)
/* f03f2dc: c4248fa0 */ lwc1 $f4,%lo(var7f1a8fa0)($at)
/* f03f2e0: 4604303c */ c.lt.s $f6,$f4
/* f03f2e4: 00000000 */ nop
/* f03f2e8: 45020073 */ bc1fl .L0f03f4b8
/* f03f2ec: c7ac0178 */ lwc1 $f12,0x178($sp)
/* f03f2f0: 8d020004 */ lw $v0,0x4($t0)
/* f03f2f4: 00002825 */ or $a1,$zero,$zero
/* f03f2f8: 8c470018 */ lw $a3,0x18($v0)
/* f03f2fc: afa00114 */ sw $zero,0x114($sp)
/* f03f300: 8ce40008 */ lw $a0,0x8($a3)
/* f03f304: 0c006a47 */ jal modelGetPart
/* f03f308: afa70124 */ sw $a3,0x124($sp)
/* f03f30c: 8fa70124 */ lw $a3,0x124($sp)
/* f03f310: 10400026 */ beqz $v0,.L0f03f3ac
/* f03f314: 00402825 */ or $a1,$v0,$zero
/* f03f318: 00e02025 */ or $a0,$a3,$zero
/* f03f31c: 00003025 */ or $a2,$zero,$zero
/* f03f320: 0c006973 */ jal func0001a5cc
/* f03f324: afa20110 */ sw $v0,0x110($sp)
/* f03f328: 8fa50110 */ lw $a1,0x110($sp)
/* f03f32c: afa20108 */ sw $v0,0x108($sp)
/* f03f330: 00402025 */ or $a0,$v0,$zero
/* f03f334: 8cb80004 */ lw $t8,0x4($a1)
/* f03f338: 0fc2d4e9 */ jal func0f0b53a4
/* f03f33c: afb800c4 */ sw $t8,0xc4($sp)
/* f03f340: 10400037 */ beqz $v0,.L0f03f420
/* f03f344: 8fa40108 */ lw $a0,0x108($sp)
/* f03f348: 27a500c8 */ addiu $a1,$sp,0xc8
/* f03f34c: 0c0059e6 */ jal func00016798
/* f03f350: afa200b4 */ sw $v0,0xb4($sp)
/* f03f354: 8fa400b4 */ lw $a0,0xb4($sp)
/* f03f358: 0c0056f8 */ jal func00015be0
/* f03f35c: 27a500c8 */ addiu $a1,$sp,0xc8
/* f03f360: 8fa200c4 */ lw $v0,0xc4($sp)
/* f03f364: 27a400c8 */ addiu $a0,$sp,0xc8
/* f03f368: 27a500b8 */ addiu $a1,$sp,0xb8
/* f03f36c: c44a0000 */ lwc1 $f10,0x0($v0)
/* f03f370: e7aa00b8 */ swc1 $f10,0xb8($sp)
/* f03f374: c4520004 */ lwc1 $f18,0x4($v0)
/* f03f378: e7b200bc */ swc1 $f18,0xbc($sp)
/* f03f37c: c4480008 */ lwc1 $f8,0x8($v0)
/* f03f380: 0c0056d9 */ jal func00015b64
/* f03f384: e7a800c0 */ swc1 $f8,0xc0($sp)
/* f03f388: c7a600b8 */ lwc1 $f6,0xb8($sp)
/* f03f38c: c7a400bc */ lwc1 $f4,0xbc($sp)
/* f03f390: c7aa00c0 */ lwc1 $f10,0xc0($sp)
/* f03f394: 24190001 */ addiu $t9,$zero,0x1
/* f03f398: afb90114 */ sw $t9,0x114($sp)
/* f03f39c: e7a60118 */ swc1 $f6,0x118($sp)
/* f03f3a0: e7a4011c */ swc1 $f4,0x11c($sp)
/* f03f3a4: 1000001e */ b .L0f03f420
/* f03f3a8: e7aa0120 */ swc1 $f10,0x120($sp)
.L0f03f3ac:
/* f03f3ac: 8ce40008 */ lw $a0,0x8($a3)
/* f03f3b0: afa70124 */ sw $a3,0x124($sp)
/* f03f3b4: 0c006a47 */ jal modelGetPart
/* f03f3b8: 24050001 */ addiu $a1,$zero,0x1
/* f03f3bc: 8fa70124 */ lw $a3,0x124($sp)
/* f03f3c0: 10400017 */ beqz $v0,.L0f03f420
/* f03f3c4: 00402825 */ or $a1,$v0,$zero
/* f03f3c8: 00e02025 */ or $a0,$a3,$zero
/* f03f3cc: 0c006973 */ jal func0001a5cc
/* f03f3d0: 00003025 */ or $a2,$zero,$zero
/* f03f3d4: afa200b0 */ sw $v0,0xb0($sp)
/* f03f3d8: 0fc2d4e9 */ jal func0f0b53a4
/* f03f3dc: 00402025 */ or $a0,$v0,$zero
/* f03f3e0: 1040000f */ beqz $v0,.L0f03f420
/* f03f3e4: 8fa400b0 */ lw $a0,0xb0($sp)
/* f03f3e8: 27a50070 */ addiu $a1,$sp,0x70
/* f03f3ec: 0c0059e6 */ jal func00016798
/* f03f3f0: afa2006c */ sw $v0,0x6c($sp)
/* f03f3f4: 8fa4006c */ lw $a0,0x6c($sp)
/* f03f3f8: 0c0056f8 */ jal func00015be0
/* f03f3fc: 27a50070 */ addiu $a1,$sp,0x70
/* f03f400: c7b200a0 */ lwc1 $f18,0xa0($sp)
/* f03f404: c7a800a4 */ lwc1 $f8,0xa4($sp)
/* f03f408: c7a600a8 */ lwc1 $f6,0xa8($sp)
/* f03f40c: 240a0001 */ addiu $t2,$zero,0x1
/* f03f410: afaa0114 */ sw $t2,0x114($sp)
/* f03f414: e7b20118 */ swc1 $f18,0x118($sp)
/* f03f418: e7a8011c */ swc1 $f8,0x11c($sp)
/* f03f41c: e7a60120 */ swc1 $f6,0x120($sp)
.L0f03f420:
/* f03f420: 8fa90114 */ lw $t1,0x114($sp)
/* f03f424: 51200024 */ beqzl $t1,.L0f03f4b8
/* f03f428: c7ac0178 */ lwc1 $f12,0x178($sp)
/* f03f42c: 0c0068f7 */ jal sinf
/* f03f430: c7ac0130 */ lwc1 $f12,0x130($sp)
/* f03f434: 44802000 */ mtc1 $zero,$f4
/* f03f438: e7a00054 */ swc1 $f0,0x54($sp)
/* f03f43c: c7ac0130 */ lwc1 $f12,0x130($sp)
/* f03f440: 0c0068f4 */ jal cosf
/* f03f444: e7a40058 */ swc1 $f4,0x58($sp)
/* f03f448: 8fa2016c */ lw $v0,0x16c($sp)
/* f03f44c: e7a0005c */ swc1 $f0,0x5c($sp)
/* f03f450: c7b20170 */ lwc1 $f18,0x170($sp)
/* f03f454: c44a0008 */ lwc1 $f10,0x8($v0)
/* f03f458: 27ab0060 */ addiu $t3,$sp,0x60
/* f03f45c: 27a50048 */ addiu $a1,$sp,0x48
/* f03f460: 46125201 */ sub.s $f8,$f10,$f18
/* f03f464: c7aa0178 */ lwc1 $f10,0x178($sp)
/* f03f468: 27a60118 */ addiu $a2,$sp,0x118
/* f03f46c: 27a70054 */ addiu $a3,$sp,0x54
/* f03f470: e7a80048 */ swc1 $f8,0x48($sp)
/* f03f474: c446000c */ lwc1 $f6,0xc($v0)
/* f03f478: 24440008 */ addiu $a0,$v0,0x8
/* f03f47c: e7a6004c */ swc1 $f6,0x4c($sp)
/* f03f480: c4440010 */ lwc1 $f4,0x10($v0)
/* f03f484: afab0010 */ sw $t3,0x10($sp)
/* f03f488: 460a2480 */ add.s $f18,$f4,$f10
/* f03f48c: 0fc0b8f7 */ jal func0f02e3dc
/* f03f490: e7b20050 */ swc1 $f18,0x50($sp)
/* f03f494: c7a80154 */ lwc1 $f8,0x154($sp)
/* f03f498: c7a60060 */ lwc1 $f6,0x60($sp)
/* f03f49c: c7aa015c */ lwc1 $f10,0x15c($sp)
/* f03f4a0: c7b20068 */ lwc1 $f18,0x68($sp)
/* f03f4a4: 46064101 */ sub.s $f4,$f8,$f6
/* f03f4a8: 46125201 */ sub.s $f8,$f10,$f18
/* f03f4ac: e7a40178 */ swc1 $f4,0x178($sp)
/* f03f4b0: e7a80170 */ swc1 $f8,0x170($sp)
/* f03f4b4: c7ac0178 */ lwc1 $f12,0x178($sp)
.L0f03f4b8:
/* f03f4b8: 0fc259d4 */ jal atan2f
/* f03f4bc: c7ae0170 */ lwc1 $f14,0x170($sp)
/* f03f4c0: c7a60130 */ lwc1 $f6,0x130($sp)
/* f03f4c4: 3c017f1b */ lui $at,%hi(var7f1a8fa4)
/* f03f4c8: 8fad0190 */ lw $t5,0x190($sp)
/* f03f4cc: 4606003c */ c.lt.s $f0,$f6
/* f03f4d0: 46060081 */ sub.s $f2,$f0,$f6
/* f03f4d4: 45000003 */ bc1f .L0f03f4e4
/* f03f4d8: 46001406 */ mov.s $f16,$f2
/* f03f4dc: c4248fa4 */ lwc1 $f4,%lo(var7f1a8fa4)($at)
/* f03f4e0: 46041400 */ add.s $f16,$f2,$f4
.L0f03f4e4:
/* f03f4e4: 8da40020 */ lw $a0,0x20($t5)
/* f03f4e8: 8c8c0008 */ lw $t4,0x8($a0)
/* f03f4ec: 8d850000 */ lw $a1,0x0($t4)
/* f03f4f0: 0c006a87 */ jal modelGetNodeRwData
/* f03f4f4: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f4f8: 44801000 */ mtc1 $zero,$f2
/* f03f4fc: c440005c */ lwc1 $f0,0x5c($v0)
/* f03f500: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f504: 8fae0190 */ lw $t6,0x190($sp)
/* f03f508: 4600103c */ c.lt.s $f2,$f0
/* f03f50c: 8fb80020 */ lw $t8,0x20($sp)
/* f03f510: 45020015 */ bc1fl .L0f03f568
/* f03f514: 8dcf02d4 */ lw $t7,0x2d4($t6)
/* f03f518: c44a0058 */ lwc1 $f10,0x58($v0)
/* f03f51c: 3c017f1b */ lui $at,%hi(var7f1a8fa8)
/* f03f520: 460a0482 */ mul.s $f18,$f0,$f10
/* f03f524: 46128401 */ sub.s $f16,$f16,$f18
/* f03f528: 4602803c */ c.lt.s $f16,$f2
/* f03f52c: 00000000 */ nop
/* f03f530: 45000003 */ bc1f .L0f03f540
/* f03f534: 00000000 */ nop
/* f03f538: c4288fa8 */ lwc1 $f8,%lo(var7f1a8fa8)($at)
/* f03f53c: 46088400 */ add.s $f16,$f16,$f8
.L0f03f540:
/* f03f540: 3c017f1b */ lui $at,%hi(var7f1a8fac)
/* f03f544: c4268fac */ lwc1 $f6,%lo(var7f1a8fac)($at)
/* f03f548: 3c017f1b */ lui $at,%hi(var7f1a8fb0)
/* f03f54c: 4610303e */ c.le.s $f6,$f16
/* f03f550: 00000000 */ nop
/* f03f554: 45020004 */ bc1fl .L0f03f568
/* f03f558: 8dcf02d4 */ lw $t7,0x2d4($t6)
/* f03f55c: c4248fb0 */ lwc1 $f4,%lo(var7f1a8fb0)($at)
/* f03f560: 46048401 */ sub.s $f16,$f16,$f4
/* f03f564: 8dcf02d4 */ lw $t7,0x2d4($t6)
.L0f03f568:
/* f03f568: 15e0003d */ bnez $t7,.L0f03f660
/* f03f56c: 00000000 */ nop
/* f03f570: 1300003b */ beqz $t8,.L0f03f660
/* f03f574: 8fb90184 */ lw $t9,0x184($sp)
/* f03f578: 332a0060 */ andi $t2,$t9,0x60
/* f03f57c: 15400038 */ bnez $t2,.L0f03f660
/* f03f580: 8fa90168 */ lw $t1,0x168($sp)
/* f03f584: 912b0000 */ lbu $t3,0x0($t1)
/* f03f588: 24010006 */ addiu $at,$zero,0x6
/* f03f58c: 3c0d800a */ lui $t5,%hi(g_Vars+0x8)
/* f03f590: 15610033 */ bne $t3,$at,.L0f03f660
/* f03f594: 8fac0190 */ lw $t4,0x190($sp)
/* f03f598: 8dad9fc8 */ lw $t5,%lo(g_Vars+0x8)($t5)
/* f03f59c: 8d8e0020 */ lw $t6,0x20($t4)
/* f03f5a0: 858a0000 */ lh $t2,0x0($t4)
/* f03f5a4: 448d5000 */ mtc1 $t5,$f10
/* f03f5a8: 8dcf0020 */ lw $t7,0x20($t6)
/* f03f5ac: 2401003c */ addiu $at,$zero,0x3c
/* f03f5b0: 468054a0 */ cvt.s.w $f18,$f10
/* f03f5b4: c5e80074 */ lwc1 $f8,0x74($t7)
/* f03f5b8: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f5bc: 46089182 */ mul.s $f6,$f18,$f8
/* f03f5c0: 4600310d */ trunc.w.s $f4,$f6
/* f03f5c4: 44192000 */ mfc1 $t9,$f4
/* f03f5c8: 00000000 */ nop
/* f03f5cc: 032a4821 */ addu $t1,$t9,$t2
/* f03f5d0: 0121001a */ div $zero,$t1,$at
/* f03f5d4: 00005810 */ mfhi $t3
/* f03f5d8: 448b5000 */ mtc1 $t3,$f10
/* f03f5dc: 3c017f1b */ lui $at,%hi(var7f1a8fb4)
/* f03f5e0: c4288fb4 */ lwc1 $f8,%lo(var7f1a8fb4)($at)
/* f03f5e4: 468054a0 */ cvt.s.w $f18,$f10
/* f03f5e8: 46089302 */ mul.s $f12,$f18,$f8
/* f03f5ec: 0c0068f7 */ jal sinf
/* f03f5f0: 00000000 */ nop
/* f03f5f4: e7a00028 */ swc1 $f0,0x28($sp)
/* f03f5f8: 0fc0fe84 */ jal chrGetAimLimitAngle
/* f03f5fc: c7ac0164 */ lwc1 $f12,0x164($sp)
/* f03f600: 3c013f00 */ lui $at,0x3f00
/* f03f604: 44813000 */ mtc1 $at,$f6
/* f03f608: c7aa0028 */ lwc1 $f10,0x28($sp)
/* f03f60c: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f610: 46060102 */ mul.s $f4,$f0,$f6
/* f03f614: 44804000 */ mtc1 $zero,$f8
/* f03f618: 3c017f1b */ lui $at,%hi(var7f1a8fb8)
/* f03f61c: 460a2482 */ mul.s $f18,$f4,$f10
/* f03f620: 46128400 */ add.s $f16,$f16,$f18
/* f03f624: 4608803c */ c.lt.s $f16,$f8
/* f03f628: 00000000 */ nop
/* f03f62c: 45000003 */ bc1f .L0f03f63c
/* f03f630: 00000000 */ nop
/* f03f634: c4268fb8 */ lwc1 $f6,%lo(var7f1a8fb8)($at)
/* f03f638: 46068400 */ add.s $f16,$f16,$f6
.L0f03f63c:
/* f03f63c: 3c017f1b */ lui $at,%hi(var7f1a8fbc)
/* f03f640: c4248fbc */ lwc1 $f4,%lo(var7f1a8fbc)($at)
/* f03f644: 3c017f1b */ lui $at,%hi(var7f1a8fc0)
/* f03f648: 4610203e */ c.le.s $f4,$f16
/* f03f64c: 00000000 */ nop
/* f03f650: 45000003 */ bc1f .L0f03f660
/* f03f654: 00000000 */ nop
/* f03f658: c42a8fc0 */ lwc1 $f10,%lo(var7f1a8fc0)($at)
/* f03f65c: 460a8401 */ sub.s $f16,$f16,$f10
.L0f03f660:
/* f03f660: 3c017f1b */ lui $at,%hi(var7f1a8fc4)
/* f03f664: c4328fc4 */ lwc1 $f18,%lo(var7f1a8fc4)($at)
/* f03f668: 3c017f1b */ lui $at,%hi(var7f1a8fc8)
/* f03f66c: 8fad0190 */ lw $t5,0x190($sp)
/* f03f670: 4610903e */ c.le.s $f18,$f16
/* f03f674: 00000000 */ nop
/* f03f678: 45020004 */ bc1fl .L0f03f68c
/* f03f67c: 8fa20194 */ lw $v0,0x194($sp)
/* f03f680: c4288fc8 */ lwc1 $f8,%lo(var7f1a8fc8)($at)
/* f03f684: 46088401 */ sub.s $f16,$f16,$f8
/* f03f688: 8fa20194 */ lw $v0,0x194($sp)
.L0f03f68c:
/* f03f68c: c5a6015c */ lwc1 $f6,0x15c($t5)
/* f03f690: 10400027 */ beqz $v0,.L0f03f730
/* f03f694: 46068400 */ add.s $f16,$f16,$f6
/* f03f698: 8dae0020 */ lw $t6,0x20($t5)
/* f03f69c: 8dcf0020 */ lw $t7,0x20($t6)
/* f03f6a0: 81f80008 */ lb $t8,0x8($t7)
/* f03f6a4: 53000014 */ beqzl $t8,.L0f03f6f8
/* f03f6a8: c4400038 */ lwc1 $f0,0x38($v0)
/* f03f6ac: c4400038 */ lwc1 $f0,0x38($v0)
/* f03f6b0: 46000007 */ neg.s $f0,$f0
/* f03f6b4: 4600803c */ c.lt.s $f16,$f0
/* f03f6b8: 00000000 */ nop
/* f03f6bc: 45020005 */ bc1fl .L0f03f6d4
/* f03f6c0: c440003c */ lwc1 $f0,0x3c($v0)
/* f03f6c4: 46000406 */ mov.s $f16,$f0
/* f03f6c8: 10000019 */ b .L0f03f730
/* f03f6cc: afa0017c */ sw $zero,0x17c($sp)
/* f03f6d0: c440003c */ lwc1 $f0,0x3c($v0)
.L0f03f6d4:
/* f03f6d4: 46000007 */ neg.s $f0,$f0
/* f03f6d8: 4610003c */ c.lt.s $f0,$f16
/* f03f6dc: 00000000 */ nop
/* f03f6e0: 45020014 */ bc1fl .L0f03f734
/* f03f6e4: c7a4018c */ lwc1 $f4,0x18c($sp)
/* f03f6e8: 46000406 */ mov.s $f16,$f0
/* f03f6ec: 10000010 */ b .L0f03f730
/* f03f6f0: afa0017c */ sw $zero,0x17c($sp)
/* f03f6f4: c4400038 */ lwc1 $f0,0x38($v0)
.L0f03f6f8:
/* f03f6f8: 4610003c */ c.lt.s $f0,$f16
/* f03f6fc: 00000000 */ nop
/* f03f700: 45020005 */ bc1fl .L0f03f718
/* f03f704: c440003c */ lwc1 $f0,0x3c($v0)
/* f03f708: 46000406 */ mov.s $f16,$f0
/* f03f70c: 10000008 */ b .L0f03f730
/* f03f710: afa0017c */ sw $zero,0x17c($sp)
/* f03f714: c440003c */ lwc1 $f0,0x3c($v0)
.L0f03f718:
/* f03f718: 4600803c */ c.lt.s $f16,$f0
/* f03f71c: 00000000 */ nop
/* f03f720: 45020004 */ bc1fl .L0f03f734
/* f03f724: c7a4018c */ lwc1 $f4,0x18c($sp)
/* f03f728: 46000406 */ mov.s $f16,$f0
/* f03f72c: afa0017c */ sw $zero,0x17c($sp)
.L0f03f730:
/* f03f730: c7a4018c */ lwc1 $f4,0x18c($sp)
.L0f03f734:
/* f03f734: 8fa40190 */ lw $a0,0x190($sp)
/* f03f738: 8fa50194 */ lw $a1,0x194($sp)
/* f03f73c: 8fa60198 */ lw $a2,0x198($sp)
/* f03f740: 8fa7019c */ lw $a3,0x19c($sp)
/* f03f744: e7b00188 */ swc1 $f16,0x188($sp)
/* f03f748: 0fc0fdde */ jal func0f03f778
/* f03f74c: e7a40010 */ swc1 $f4,0x10($sp)
/* f03f750: 8fac0190 */ lw $t4,0x190($sp)
/* f03f754: c7b00188 */ lwc1 $f16,0x188($sp)
/* f03f758: 2419000a */ addiu $t9,$zero,0xa
/* f03f75c: a199000e */ sb $t9,0xe($t4)
/* f03f760: e590016c */ swc1 $f16,0x16c($t4)
/* f03f764: 8fbf001c */ lw $ra,0x1c($sp)
/* f03f768: 8fa2017c */ lw $v0,0x17c($sp)
/* f03f76c: 27bd0190 */ addiu $sp,$sp,0x190
/* f03f770: 03e00008 */ jr $ra
/* f03f774: 00000000 */ nop
);
GLOBAL_ASM(
glabel func0f03f778
/* f03f778: 44808000 */ mtc1 $zero,$f16
/* f03f77c: c7ae0010 */ lwc1 $f14,0x10($sp)
/* f03f780: 46008006 */ mov.s $f0,$f16
/* f03f784: 46008086 */ mov.s $f2,$f16
/* f03f788: 10a0001b */ beqz $a1,.L0f03f7f8
/* f03f78c: 46007306 */ mov.s $f12,$f14
/* f03f790: c4a00030 */ lwc1 $f0,0x30($a1)
/* f03f794: 460e003c */ c.lt.s $f0,$f14
/* f03f798: 00000000 */ nop
/* f03f79c: 45020005 */ bc1fl .L0f03f7b4
/* f03f7a0: c4a00034 */ lwc1 $f0,0x34($a1)
/* f03f7a4: 46007081 */ sub.s $f2,$f14,$f0
/* f03f7a8: 10000008 */ b .L0f03f7cc
/* f03f7ac: 46000306 */ mov.s $f12,$f0
/* f03f7b0: c4a00034 */ lwc1 $f0,0x34($a1)
.L0f03f7b4:
/* f03f7b4: 4600703c */ c.lt.s $f14,$f0
/* f03f7b8: 00000000 */ nop
/* f03f7bc: 45020004 */ bc1fl .L0f03f7d0
/* f03f7c0: 460c803c */ c.lt.s $f16,$f12
/* f03f7c4: 46007081 */ sub.s $f2,$f14,$f0
/* f03f7c8: 46000306 */ mov.s $f12,$f0
.L0f03f7cc:
/* f03f7cc: 460c803c */ c.lt.s $f16,$f12
.L0f03f7d0:
/* f03f7d0: 00000000 */ nop
/* f03f7d4: 45020006 */ bc1fl .L0f03f7f0
/* f03f7d8: c4a60044 */ lwc1 $f6,0x44($a1)
/* f03f7dc: c4a40040 */ lwc1 $f4,0x40($a1)
/* f03f7e0: 460c2002 */ mul.s $f0,$f4,$f12
/* f03f7e4: 10000004 */ b .L0f03f7f8
/* f03f7e8: 00000000 */ nop
/* f03f7ec: c4a60044 */ lwc1 $f6,0x44($a1)
.L0f03f7f0:
/* f03f7f0: 460c3002 */ mul.s $f0,$f6,$f12
/* f03f7f4: 00000000 */ nop
.L0f03f7f8:
/* f03f7f8: 50e00008 */ beqzl $a3,.L0f03f81c
/* f03f7fc: e4800164 */ swc1 $f0,0x164($a0)
/* f03f800: 10c00003 */ beqz $a2,.L0f03f810
/* f03f804: e48c0164 */ swc1 $f12,0x164($a0)
/* f03f808: 10000005 */ b .L0f03f820
/* f03f80c: e48c0160 */ swc1 $f12,0x160($a0)
.L0f03f810:
/* f03f810: 10000003 */ b .L0f03f820
/* f03f814: e4800160 */ swc1 $f0,0x160($a0)
/* f03f818: e4800164 */ swc1 $f0,0x164($a0)
.L0f03f81c:
/* f03f81c: e48c0160 */ swc1 $f12,0x160($a0)
.L0f03f820:
/* f03f820: 03e00008 */ jr $ra
/* f03f824: e4820168 */ swc1 $f2,0x168($a0)
);
void chrResetAimEndProperties(struct chrdata *chr)
{
chr->aimendcount = 10;
chr->aimendrshoulder = 0;
chr->aimendlshoulder = 0;
chr->aimendback = 0;
chr->aimendsideback = 0;
}
void chrSetFiring(struct chrdata *chr, s32 hand, bool firing)
{
struct prop *prop = chrGetEquippedWeaponProp(chr, hand);
chr->prop->unk3f_02 = firing ? 1 : 0;
if (prop) {
weaponSetGunfireVisible(prop, firing, chr->prop->rooms[0]);
}
}
bool chrIsGunfireVisible(struct chrdata *chr, s32 hand)
{
struct prop *prop = chrGetEquippedWeaponProp(chr, hand);
if (prop) {
return weaponIsGunfireVisible(prop);
}
return false;
}
void chrStopFiring(struct chrdata *chr)
{
u8 race = CHRRACE(chr);
if (race != RACE_DRCAROLL && race != RACE_EYESPY && chr->aibot == NULL) {
chrSetFiring(chr, 0, false);
chrSetFiring(chr, 1, false);
chrResetAimEndProperties(chr);
chr->fireslot[0] = freeFireslot(chr->fireslot[0]);
chr->fireslot[1] = freeFireslot(chr->fireslot[1]);
}
}
void func0f03f988(struct chrdata *chr, s32 hand, s32 arg2)
{
if (arg2) {
if (hand == 1) {
chr->hidden |= CHRHFLAG_00000004;
} else {
chr->hidden |= CHRHFLAG_00000008;
}
} else {
if (hand == 1) {
chr->hidden &= ~CHRHFLAG_00000004;
} else {
chr->hidden &= ~CHRHFLAG_00000008;
}
}
if (arg2 == 0) {
chrSetFiring(chr, hand, false);
}
}
f32 chrGetAimLimitAngle(f32 sqdist)
{
if (sqdist > 1600 * 1600) {
return 0.018752790987492f;
}
if (sqdist > 800 * 800) {
return 0.03761787340045f;
}
if (sqdist > 400 * 400) {
return 0.07478791475296f;
}
if (sqdist > 200 * 200) {
return 0.14957582950592f;
}
return 0.2512874007225f;
}
/**
* Calculate whether a chr's shot hits their target on this tick.
*
* Each chr maintains a shotbondsum property which is a float ranging from
* 0 to 1. Each time this function is called, the value is increased slightly
* based on the chr's accuracy and other factors. Once it reaches 1, the target
* is considered to be hit and the value is reset to 0.
*
* The function writes to the angleokptr argument if the angle to their target
* is within range, and writes to the hit argument to indicate if the target is
* being hit or not.
*/
void chrCalculateHit(struct chrdata *chr, bool *angleokptr, bool *hit, struct shorthand *hand)
{
struct prop *prop;
struct prop *target;
f32 xdist;
f32 ydist;
f32 zdist;
f32 angletotarget;
f32 angleaiming;
f32 anglediff;
f32 limitangle;
bool angleok;
u32 stack;
f32 taperdist;
f32 sqdist;
taperdist = 300;
// Check that the chr's aim angle is within an acceptable range to their
// target.
prop = chr->prop;
target = chrGetTargetProp(chr);
xdist = target->pos.x - prop->pos.x;
ydist = target->pos.y - prop->pos.y;
zdist = target->pos.z - prop->pos.z;
angletotarget = atan2f(xdist, zdist);
angleaiming = chrGetAimAngle(chr);
anglediff = angletotarget - angleaiming;
sqdist = xdist * xdist + ydist * ydist + zdist * zdist;
limitangle = chrGetAimLimitAngle(sqdist);
if (anglediff < 0) {
anglediff += M_BADTAU;
}
angleok = anglediff < limitangle || anglediff > M_BADTAU - limitangle;
*angleokptr = angleok;
*hit = false;
// Determine the distance at which accuracy starts to taper off
switch (hand->weaponnum) {
case WEAPON_FALCON2:
case WEAPON_FALCON2_SILENCER:
case WEAPON_MAULER:
case WEAPON_PHOENIX:
case WEAPON_DY357MAGNUM:
case WEAPON_DY357LX:
case WEAPON_CMP150:
case WEAPON_CYCLONE:
case WEAPON_CALLISTO:
case WEAPON_RCP120:
case WEAPON_LAPTOPGUN:
case WEAPON_DRAGON:
case WEAPON_K7AVENGER:
case WEAPON_AR34:
case WEAPON_SUPERDRAGON:
case WEAPON_SHOTGUN:
case WEAPON_REAPER:
case WEAPON_DEVASTATOR:
case WEAPON_ROCKETLAUNCHER:
case WEAPON_SLAYER:
case WEAPON_COMBATKNIFE:
case WEAPON_CROSSBOW:
case WEAPON_TRANQUILIZER:
case WEAPON_LASER:
case WEAPON_GRENADE:
case WEAPON_NBOMB:
case WEAPON_TIMEDMINE:
case WEAPON_PROXIMITYMINE:
case WEAPON_REMOTEMINE:
case WEAPON_COMBATBOOST:
case WEAPON_PP9I:
case WEAPON_CC13:
case WEAPON_KL01313:
case WEAPON_KF7SPECIAL:
case WEAPON_ZZT:
case WEAPON_DMC:
case WEAPON_AR53:
case WEAPON_RCP45:
case WEAPON_PSYCHOSISGUN:
default:
// Use default distance (300)
break;
case WEAPON_FALCON2_SCOPE:
case WEAPON_MAGSEC4:
taperdist = 600;
break;
case WEAPON_SNIPERRIFLE:
case WEAPON_FARSIGHT:
taperdist = 1200;
break;
}
if (angleok) {
f32 dist = sqrtf(xdist * xdist + ydist * ydist + zdist * zdist);
f32 accuracy = 0.16f;
// Decrease accuracy if further than taperdist
if (dist > taperdist) {
accuracy *= taperdist / dist;
}
// Scale accuracy up or down based on chr's accuracyrating
if (chr->accuracyrating > 0) {
accuracy *= 1 + chr->accuracyrating * 0.1f;
} else if (chr->accuracyrating < 0) {
if (chr->accuracyrating <= -100) {
accuracy = 0;
} else {
accuracy *= (chr->accuracyrating + 100) * 0.01f;
}
}
// Apply PD mode enemy accuracy setting (default 1 which is no op)
if (pdmodeGetEnemyAccuracy() <= 1) {
accuracy *= pdmodeGetEnemyAccuracy();
} else {
accuracy *= 9 / (10.001f - pdmodeGetEnemyAccuracy());
}
// Apply difficulty multiplier (solo A = 0.6, SA = 0.8, PA = 1.175)
accuracy *= g_EnemyAccuracyScale;
// If the weapon fires more than once per tick, double the value to
// account for it. No weapons meet this criteria, however.
if (weaponGetNumTicksPerShot(hand->weaponnum, hand->weaponfunc) <= 0) {
accuracy += accuracy;
}
// Shotgun doubles the value due to more bullets
if (hand->weaponnum == WEAPON_SHOTGUN) {
accuracy += accuracy;
}
chr->shotbondsum += accuracy;
if (chr->hidden & CHRHFLAG_PERFECTACCURACY) {
chr->shotbondsum += 1.1f;
}
if (chr->shotbondsum >= 1) {
*hit = true;
chr->shotbondsum = 0;
}
}
}
bool func0f03fde4(struct chrdata *chr, s32 handnum, struct coord *arg2)
{
struct prop *weaponprop = chrGetEquippedWeaponProp(chr, handnum);
struct defaultobj *obj;
struct model *model;
bool result = false;
struct modelnode *part0;
struct modelnode *part1;
Mtxf *spac;
Mtxf sp6c;
struct modelrodata_gunfire *rodata;
Mtxf *sp64;
Mtxf sp24;
if (weaponprop) {
obj = weaponprop->obj;
model = obj->model;
if ((chr->prop->flags & PROPFLAG_02) && (weaponprop->flags & PROPFLAG_02)) {
if ((part0 = modelGetPart(model->filedata, MODELPART_0000))) {
spac = func0001a5cc(model, part0, 0);
rodata = &part0->rodata->gunfire;
arg2->x = rodata->pos.x;
arg2->y = rodata->pos.y;
arg2->z = rodata->pos.z;
func00015be4(currentPlayerGetUnk174c(), spac, &sp6c);
func00015b64(&sp6c, arg2);
result = true;
} else if ((part1 = modelGetPart(model->filedata, MODELPART_0001))) {
sp64 = func0001a5cc(model, part1, 0);
func00015be4(currentPlayerGetUnk174c(), sp64, &sp24);
arg2->x = sp24.m[3][0];
arg2->y = sp24.m[3][1];
arg2->z = sp24.m[3][2];
result = true;
}
}
}
return result;
}
/**
* For a shielded chr, determine which model node has been shot and populate the
* last 4 pointer arguments with information about the hit.
*
* Shield hits are calculated using the bounding box of each body part.
* This gives a bit of padding around the chr which can register as a hit.
*
* nodeptr - will be populated with a pointer to the bbox model node.
* ibhptr - will be populated with the IBH value. See the IBH constants.
* modelptr - will be populated with a pointer to the chr's model.
* sideptr - will be populated with an index in the range 0-5 which
* represents which side of the node's bounding box was hit.
*/
void chrCalculateShieldHit(struct chrdata *chr, struct coord *pos, struct coord *vector,
struct modelnode **nodeptr, s32 *ibhptr, struct model **modelptr, s32 *sideptr)
{
u32 stack1;
struct prop *prop = chr->prop;
bool done = false;
bool isdifferentmtx;
struct coord sp124;
struct coord sp118;
s32 i;
struct modelnode *bestnode;
u32 stack2[2];
Mtxf spc8;
f32 bestvolume;
Mtxf *lVar4;
struct modelnode *node;
f32 x;
f32 y;
f32 z;
f32 volume;
Mtxf *mtxptr1;
Mtxf *mtxptr2;
f32 sides[6];
u32 stack3;
if (prop->type != PROPTYPE_PLAYER || g_Vars.normmplayerisrunning || chrGetShield(chr) > 0) {
if (prop->flags & (PROPFLAG_02 | PROPFLAG_40 | PROPFLAG_80)) {
bestnode = NULL;
bestvolume = MAXFLOAT;
lVar4 = func0f0b5050(chr->model->matrices);
if (lVar4) {
func00015b68(lVar4, pos, &sp124);
func00015b14(lVar4, vector, &sp118);
isdifferentmtx = (currentPlayerGetMatrix1740() != lVar4);
node = chr->model->filedata->rootnode;
while (node) {
if ((node->type & 0xff) == MODELNODETYPE_BBOX) {
mtxptr1 = func0001a5cc(chr->model, node, 0);
if (isdifferentmtx) {
func00016798(mtxptr1, &spc8);
mtxptr1 = &spc8;
}
x = mtxptr1->m[3][0] - sp124.f[0];
y = mtxptr1->m[3][1] - sp124.f[1];
z = mtxptr1->m[3][2] - sp124.f[2];
volume = x * x + y * y + z * z;
if (volume < bestvolume) {
bestvolume = volume;
bestnode = node;
}
}
// Iterate all nodes recursively except headspot's chidlren
if (node->child && (node->type & 0xff) != MODELNODETYPE_HEADSPOT) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
if (bestvolume);
#if VERSION >= VERSION_NTSC_1_0
if (bestnode != NULL)
#endif
{
Mtxf sp48;
struct modelrodata_bbox *rodata = &bestnode->rodata->bbox;
*ibhptr = rodata->ibh;
*nodeptr = bestnode;
*modelptr = chr->model;
*sideptr = 0;
mtxptr2 = func0001a5cc(chr->model, bestnode, 0);
if (isdifferentmtx) {
func00016798(mtxptr2, &sp48);
mtxptr2 = &sp48;
}
bestvolume = -2;
x = (sp118.f[0] * mtxptr2->m[0][0]) + (sp118.f[1] * mtxptr2->m[0][1]) + (sp118.f[2] * mtxptr2->m[0][2]);
y = (sp118.f[0] * mtxptr2->m[1][0]) + (sp118.f[1] * mtxptr2->m[1][1]) + (sp118.f[2] * mtxptr2->m[1][2]);
z = (sp118.f[0] * mtxptr2->m[2][0]) + (sp118.f[1] * mtxptr2->m[2][1]) + (sp118.f[2] * mtxptr2->m[2][2]);
sides[0] = x;
sides[1] = -x;
sides[2] = y;
sides[3] = -y;
sides[4] = z;
sides[5] = -z;
for (i = 0; i < 6; i++) {
if (sides[i] > bestvolume) {
bestvolume = sides[i];
*sideptr = i;
}
}
done = true;
}
}
}
// If no node was found above, search the model for the torso bbox
// and return that.
if (!done) {
node = chr->model->filedata->rootnode;
while (node) {
if ((node->type & 0xff) == MODELNODETYPE_BBOX) {
struct modelrodata_bbox *rodata = &node->rodata->bbox;
if (rodata->ibh == IBH_TORSO) {
*ibhptr = rodata->ibh;
*nodeptr = node;
*modelptr = chr->model;
*sideptr = 0;
return;
}
}
if (node->child) {
node = node->child;
} else {
while (node) {
if (node->next) {
node = node->next;
break;
}
node = node->parent;
}
}
}
}
}
}
GLOBAL_ASM(
glabel func0f04031c
.late_rodata
glabel var7f1a90bc
.word 0x3c23d70a
glabel var7f1a90c0
.word 0x3f199999
glabel var7f1a90c4
.word 0x411cf5c3
.text
/* f04031c: 3c017f1b */ lui $at,%hi(var7f1a90bc)
/* f040320: c42090bc */ lwc1 $f0,%lo(var7f1a90bc)($at)
/* f040324: 27bdffa8 */ addiu $sp,$sp,-88
/* f040328: afa5005c */ sw $a1,0x5c($sp)
/* f04032c: 3c017f1b */ lui $at,%hi(var7f1a90c0)
/* f040330: c42690c0 */ lwc1 $f6,%lo(var7f1a90c0)($at)
/* f040334: c7a4005c */ lwc1 $f4,0x5c($sp)
/* f040338: afbf0014 */ sw $ra,0x14($sp)
/* f04033c: afa70064 */ sw $a3,0x64($sp)
/* f040340: 46062202 */ mul.s $f8,$f4,$f6
/* f040344: e7a8005c */ swc1 $f8,0x5c($sp)
/* f040348: c4840000 */ lwc1 $f4,0x0($a0)
/* f04034c: c4ca0000 */ lwc1 $f10,0x0($a2)
/* f040350: c4c80004 */ lwc1 $f8,0x4($a2)
/* f040354: 46045181 */ sub.s $f6,$f10,$f4
/* f040358: c48a0004 */ lwc1 $f10,0x4($a0)
/* f04035c: 46003482 */ mul.s $f18,$f6,$f0
/* f040360: 460a4101 */ sub.s $f4,$f8,$f10
/* f040364: c4880008 */ lwc1 $f8,0x8($a0)
/* f040368: c4c60008 */ lwc1 $f6,0x8($a2)
/* f04036c: 46002082 */ mul.s $f2,$f4,$f0
/* f040370: 46083281 */ sub.s $f10,$f6,$f8
/* f040374: e7b20054 */ swc1 $f18,0x54($sp)
/* f040378: 46005102 */ mul.s $f4,$f10,$f0
/* f04037c: e7a20050 */ swc1 $f2,0x50($sp)
/* f040380: 46129382 */ mul.s $f14,$f18,$f18
/* f040384: 00000000 */ nop
/* f040388: 46042402 */ mul.s $f16,$f4,$f4
/* f04038c: e7a4004c */ swc1 $f4,0x4c($sp)
/* f040390: 46021182 */ mul.s $f6,$f2,$f2
/* f040394: e7ae0020 */ swc1 $f14,0x20($sp)
/* f040398: e7b0001c */ swc1 $f16,0x1c($sp)
/* f04039c: 46067200 */ add.s $f8,$f14,$f6
/* f0403a0: 0c012974 */ jal sqrtf
/* f0403a4: 46104300 */ add.s $f12,$f8,$f16
/* f0403a8: c7ae0020 */ lwc1 $f14,0x20($sp)
/* f0403ac: c7b0001c */ lwc1 $f16,0x1c($sp)
/* f0403b0: e7a00044 */ swc1 $f0,0x44($sp)
/* f0403b4: 0c012974 */ jal sqrtf
/* f0403b8: 46107300 */ add.s $f12,$f14,$f16
/* f0403bc: c7aa0044 */ lwc1 $f10,0x44($sp)
/* f0403c0: e7a00048 */ swc1 $f0,0x48($sp)
/* f0403c4: 460a0303 */ div.s $f12,$f0,$f10
/* f0403c8: 0fc25a74 */ jal func0f0969d0
/* f0403cc: e7ac0038 */ swc1 $f12,0x38($sp)
/* f0403d0: c7a20050 */ lwc1 $f2,0x50($sp)
/* f0403d4: 44802000 */ mtc1 $zero,$f4
/* f0403d8: 3c01bf80 */ lui $at,0xbf80
/* f0403dc: 44819000 */ mtc1 $at,$f18
/* f0403e0: 4604103c */ c.lt.s $f2,$f4
/* f0403e4: c7ae0038 */ lwc1 $f14,0x38($sp)
/* f0403e8: 46000406 */ mov.s $f16,$f0
/* f0403ec: 3c017f1b */ lui $at,%hi(var7f1a90c4)
/* f0403f0: 45000002 */ bc1f .L0f0403fc
/* f0403f4: c7a60044 */ lwc1 $f6,0x44($sp)
/* f0403f8: 46000407 */ neg.s $f16,$f0
.L0f0403fc:
/* f0403fc: c42890c4 */ lwc1 $f8,%lo(var7f1a90c4)($at)
/* f040400: 3c013f80 */ lui $at,0x3f80
/* f040404: 46083282 */ mul.s $f10,$f6,$f8
/* f040408: 00000000 */ nop
/* f04040c: 460e5102 */ mul.s $f4,$f10,$f14
/* f040410: c7aa005c */ lwc1 $f10,0x5c($sp)
/* f040414: 460e2202 */ mul.s $f8,$f4,$f14
/* f040418: 00000000 */ nop
/* f04041c: 460a5102 */ mul.s $f4,$f10,$f10
/* f040420: 46044283 */ div.s $f10,$f8,$f4
/* f040424: 46061203 */ div.s $f8,$f2,$f6
/* f040428: 46085000 */ add.s $f0,$f10,$f8
/* f04042c: 4612003c */ c.lt.s $f0,$f18
/* f040430: 46000306 */ mov.s $f12,$f0
/* f040434: 45000003 */ bc1f .L0f040444
/* f040438: 00000000 */ nop
/* f04043c: 10000008 */ b .L0f040460
/* f040440: 46009306 */ mov.s $f12,$f18
.L0f040444:
/* f040444: 44811000 */ mtc1 $at,$f2
/* f040448: 00000000 */ nop
/* f04044c: 4600103c */ c.lt.s $f2,$f0
/* f040450: 00000000 */ nop
/* f040454: 45000002 */ bc1f .L0f040460
/* f040458: 00000000 */ nop
/* f04045c: 46001306 */ mov.s $f12,$f2
.L0f040460:
/* f040460: 0fc25a9f */ jal func0f096a7c
/* f040464: e7b00040 */ swc1 $f16,0x40($sp)
/* f040468: c7b00040 */ lwc1 $f16,0x40($sp)
/* f04046c: 3c013f00 */ lui $at,0x3f00
/* f040470: 44813000 */ mtc1 $at,$f6
/* f040474: 46100101 */ sub.s $f4,$f0,$f16
/* f040478: 46062282 */ mul.s $f10,$f4,$f6
/* f04047c: 46105300 */ add.s $f12,$f10,$f16
/* f040480: 0c0068f4 */ jal cosf
/* f040484: e7ac003c */ swc1 $f12,0x3c($sp)
/* f040488: c7ac003c */ lwc1 $f12,0x3c($sp)
/* f04048c: 0c0068f7 */ jal sinf
/* f040490: e7a00028 */ swc1 $f0,0x28($sp)
/* f040494: c7ac0048 */ lwc1 $f12,0x48($sp)
/* f040498: c7a80054 */ lwc1 $f8,0x54($sp)
/* f04049c: c7a20028 */ lwc1 $f2,0x28($sp)
/* f0404a0: 8fa20064 */ lw $v0,0x64($sp)
/* f0404a4: 460c4103 */ div.s $f4,$f8,$f12
/* f0404a8: e4400004 */ swc1 $f0,0x4($v0)
/* f0404ac: 46022182 */ mul.s $f6,$f4,$f2
/* f0404b0: e4460000 */ swc1 $f6,0x0($v0)
/* f0404b4: c7aa004c */ lwc1 $f10,0x4c($sp)
/* f0404b8: 460c5203 */ div.s $f8,$f10,$f12
/* f0404bc: 46024102 */ mul.s $f4,$f8,$f2
/* f0404c0: e4440008 */ swc1 $f4,0x8($v0)
/* f0404c4: 8fbf0014 */ lw $ra,0x14($sp)
/* f0404c8: 27bd0058 */ addiu $sp,$sp,0x58
/* f0404cc: 03e00008 */ jr $ra
/* f0404d0: 00000000 */ nop
);
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f0404d4
.late_rodata
glabel var7f1a90c8
.word 0x3d888889
glabel var7f1a90cc
.word 0x481c4000
glabel var7f1a90d0
.word 0x3fd55555
glabel var7f1a90d4
.word 0x3fd55555
glabel var7f1a90d8
.word 0x3fd55555
glabel var7f1a90dc
.word 0x461c4000
glabel var7f1a90e0
.word func0f0404d4+0x14fc
glabel var7f1a90e4
.word func0f0404d4+0x14fc
glabel var7f1a90e8
.word func0f0404d4+0x14fc
glabel var7f1a90ec
.word func0f0404d4+0x14fc
glabel var7f1a90f0
.word func0f0404d4+0x14fc
glabel var7f1a90f4
.word func0f0404d4+0x14fc
glabel var7f1a90f8
.word func0f0404d4+0x14fc
glabel var7f1a90fc
.word func0f0404d4+0x14fc
glabel var7f1a9100
.word func0f0404d4+0x14fc
glabel var7f1a9104
.word func0f0404d4+0x14fc
glabel var7f1a9108
.word func0f0404d4+0x14fc
glabel var7f1a910c
.word func0f0404d4+0x14fc
glabel var7f1a9110
.word func0f0404d4+0x14fc
glabel var7f1a9114
.word func0f0404d4+0x14fc
glabel var7f1a9118
.word func0f0404d4+0x14fc
glabel var7f1a911c
.word func0f0404d4+0x14fc
glabel var7f1a9120
.word func0f0404d4+0x14fc
glabel var7f1a9124
.word func0f0404d4+0x1508
glabel var7f1a9128
.word func0f0404d4+0x14fc
glabel var7f1a912c
.word func0f0404d4+0x14fc
glabel var7f1a9130
.word func0f0404d4+0x14fc
glabel var7f1a9134
.word func0f0404d4+0x1508
glabel var7f1a9138
.word func0f0404d4+0x1508
glabel var7f1a913c
.word func0f0404d4+0x1508
glabel var7f1a9140
.word func0f0404d4+0x1508
glabel var7f1a9144
.word func0f0404d4+0x1508
glabel var7f1a9148
.word func0f0404d4+0x14fc
glabel var7f1a914c
.word func0f0404d4+0x14fc
glabel var7f1a9150
.word func0f0404d4+0x1508
glabel var7f1a9154
.word func0f0404d4+0x1508
glabel var7f1a9158
.word func0f0404d4+0x1508
glabel var7f1a915c
.word func0f0404d4+0x1508
glabel var7f1a9160
.word func0f0404d4+0x1508
glabel var7f1a9164
.word func0f0404d4+0x1508
glabel var7f1a9168
.word func0f0404d4+0x14fc
glabel var7f1a916c
.word func0f0404d4+0x14fc
glabel var7f1a9170
.word func0f0404d4+0x14fc
glabel var7f1a9174
.word func0f0404d4+0x14fc
glabel var7f1a9178
.word func0f0404d4+0x14fc
glabel var7f1a917c
.word func0f0404d4+0x14fc
glabel var7f1a9180
.word func0f0404d4+0x14fc
glabel var7f1a9184
.word func0f0404d4+0x14fc
.text
/* f040658: 27bdfd88 */ addiu $sp,$sp,-632
/* f04065c: afbf0044 */ sw $ra,0x44($sp)
/* f040660: afa5027c */ sw $a1,0x27c($sp)
/* f040664: 8c8e001c */ lw $t6,0x1c($a0)
/* f040668: 240f0001 */ li $t7,0x1
/* f04066c: a3af026e */ sb $t7,0x26e($sp)
/* f040670: afae0274 */ sw $t6,0x274($sp)
/* f040674: 8c9802d4 */ lw $t8,0x2d4($a0)
/* f040678: 00001025 */ move $v0,$zero
/* f04067c: 8fa5027c */ lw $a1,0x27c($sp)
/* f040680: 53000003 */ beqzl $t8,.PF0f040690
/* f040684: a3a2026f */ sb $v0,0x26f($sp)
/* f040688: 24020001 */ li $v0,0x1
/* f04068c: a3a2026f */ sb $v0,0x26f($sp)
.PF0f040690:
/* f040690: 0fc0a252 */ jal chrGetEquippedWeaponProp
/* f040694: afa40278 */ sw $a0,0x278($sp)
/* f040698: 5040055c */ beqzl $v0,.PF0f041c0c
/* f04069c: 8fbf0044 */ lw $ra,0x44($sp)
/* f0406a0: afa00268 */ sw $zero,0x268($sp)
/* f0406a4: 8c590004 */ lw $t9,0x4($v0)
/* f0406a8: 8fa40278 */ lw $a0,0x278($sp)
/* f0406ac: 0fc0a26a */ jal chrGetTargetProp
/* f0406b0: afb90264 */ sw $t9,0x264($sp)
/* f0406b4: 8fab0264 */ lw $t3,0x264($sp)
/* f0406b8: afa2025c */ sw $v0,0x25c($sp)
/* f0406bc: 8fa70278 */ lw $a3,0x278($sp)
/* f0406c0: 8961005c */ lwl $at,0x5c($t3)
/* f0406c4: 9961005f */ lwr $at,0x5f($t3)
/* f0406c8: 27aa0260 */ addiu $t2,$sp,0x260
/* f0406cc: 24080200 */ li $t0,0x200
/* f0406d0: ad410000 */ sw $at,0x0($t2)
/* f0406d4: 80e30007 */ lb $v1,0x7($a3)
/* f0406d8: 24010008 */ li $at,0x8
/* f0406dc: 10610007 */ beq $v1,$at,.PF0f0406fc
/* f0406e0: 2401001b */ li $at,0x1b
/* f0406e4: 10610005 */ beq $v1,$at,.PF0f0406fc
/* f0406e8: 2401001c */ li $at,0x1c
/* f0406ec: 10610003 */ beq $v1,$at,.PF0f0406fc
/* f0406f0: 2401001d */ li $at,0x1d
/* f0406f4: 54610003 */ bnel $v1,$at,.PF0f040704
/* f0406f8: afa00250 */ sw $zero,0x250($sp)
.PF0f0406fc:
/* f0406fc: 8ce8004c */ lw $t0,0x4c($a3)
/* f040700: afa00250 */ sw $zero,0x250($sp)
.PF0f040704:
/* f040704: afa00224 */ sw $zero,0x224($sp)
/* f040708: afa00210 */ sw $zero,0x210($sp)
/* f04070c: 93a40260 */ lbu $a0,0x260($sp)
/* f040710: 93a50263 */ lbu $a1,0x263($sp)
/* f040714: afa00254 */ sw $zero,0x254($sp)
/* f040718: 0fc2c8f8 */ jal weaponGetNumTicksPerShot
/* f04071c: afa80258 */ sw $t0,0x258($sp)
/* f040720: 8fa60254 */ lw $a2,0x254($sp)
/* f040724: 1c400005 */ bgtz $v0,.PF0f04073c
/* f040728: 00402025 */ move $a0,$v0
/* f04072c: 240f0001 */ li $t7,0x1
/* f040730: 24060001 */ li $a2,0x1
/* f040734: 10000055 */ b .PF0f04088c
/* f040738: afaf0250 */ sw $t7,0x250($sp)
.PF0f04073c:
/* f04073c: 8fb80278 */ lw $t8,0x278($sp)
/* f040740: 8f0302d4 */ lw $v1,0x2d4($t8)
/* f040744: 5060001d */ beqzl $v1,.PF0f0407bc
/* f040748: 8faa0278 */ lw $t2,0x278($sp)
/* f04074c: 8c790020 */ lw $t9,0x20($v1)
/* f040750: 24010014 */ li $at,0x14
/* f040754: 57210019 */ bnel $t9,$at,.PF0f0407bc
/* f040758: 8faa0278 */ lw $t2,0x278($sp)
/* f04075c: 8c6d004c */ lw $t5,0x4c($v1)
/* f040760: 8fab027c */ lw $t3,0x27c($sp)
/* f040764: 000d5080 */ sll $t2,$t5,0x2
/* f040768: 05400013 */ bltz $t2,.PF0f0407b8
/* f04076c: 000b7040 */ sll $t6,$t3,0x1
/* f040770: 006e7821 */ addu $t7,$v1,$t6
/* f040774: 85f800e0 */ lh $t8,0xe0($t7)
/* f040778: 2419004b */ li $t9,0x4b
/* f04077c: 3c017f1b */ lui $at,0x7f1b
/* f040780: 03386823 */ subu $t5,$t9,$t8
/* f040784: 448d2000 */ mtc1 $t5,$f4
/* f040788: c428a32c */ lwc1 $f8,-0x5cd4($at)
/* f04078c: 44825000 */ mtc1 $v0,$f10
/* f040790: 468021a0 */ cvt.s.w $f6,$f4
/* f040794: 3c013f80 */ lui $at,0x3f80
/* f040798: 44819000 */ mtc1 $at,$f18
/* f04079c: 46805420 */ cvt.s.w $f16,$f10
/* f0407a0: 46083002 */ mul.s $f0,$f6,$f8
/* f0407a4: 46009100 */ add.s $f4,$f18,$f0
/* f0407a8: 46048182 */ mul.s $f6,$f16,$f4
/* f0407ac: 4600320d */ trunc.w.s $f8,$f6
/* f0407b0: 44044000 */ mfc1 $a0,$f8
/* f0407b4: 00000000 */ nop
.PF0f0407b8:
/* f0407b8: 8faa0278 */ lw $t2,0x278($sp)
.PF0f0407bc:
/* f0407bc: 8fab027c */ lw $t3,0x27c($sp)
/* f0407c0: 3c0f800a */ lui $t7,0x800a
/* f0407c4: 8defa548 */ lw $t7,-0x5ab8($t7)
/* f0407c8: 014b1821 */ addu $v1,$t2,$t3
/* f0407cc: 906e0004 */ lbu $t6,0x4($v1)
/* f0407d0: 01cfc821 */ addu $t9,$t6,$t7
/* f0407d4: 333800ff */ andi $t8,$t9,0xff
/* f0407d8: 0304082a */ slt $at,$t8,$a0
/* f0407dc: 1420002b */ bnez $at,.PF0f04088c
/* f0407e0: a0790004 */ sb $t9,0x4($v1)
/* f0407e4: a0600004 */ sb $zero,0x4($v1)
/* f0407e8: 8faa0278 */ lw $t2,0x278($sp)
/* f0407ec: 8fad027c */ lw $t5,0x27c($sp)
/* f0407f0: 240c0001 */ li $t4,0x1
/* f0407f4: 8d4b032c */ lw $t3,0x32c($t2)
/* f0407f8: 01ac1004 */ sllv $v0,$t4,$t5
/* f0407fc: 24060001 */ li $a2,0x1
/* f040800: 000b7300 */ sll $t6,$t3,0xc
/* f040804: 914b032d */ lbu $t3,0x32d($t2)
/* f040808: 000e7f82 */ srl $t7,$t6,0x1e
/* f04080c: 01e2c026 */ xor $t8,$t7,$v0
/* f040810: 00186080 */ sll $t4,$t8,0x2
/* f040814: 318d000c */ andi $t5,$t4,0xc
/* f040818: 316efff3 */ andi $t6,$t3,0xfff3
/* f04081c: 01ae7825 */ or $t7,$t5,$t6
/* f040820: a14f032d */ sb $t7,0x32d($t2)
/* f040824: 8d59032c */ lw $t9,0x32c($t2)
/* f040828: 93ad0260 */ lbu $t5,0x260($sp)
/* f04082c: 2401001d */ li $at,0x1d
/* f040830: 0019c300 */ sll $t8,$t9,0xc
/* f040834: 00186782 */ srl $t4,$t8,0x1e
/* f040838: 01825824 */ and $t3,$t4,$v0
/* f04083c: 15600003 */ bnez $t3,.PF0f04084c
/* f040840: 240e0001 */ li $t6,0x1
/* f040844: 55a10003 */ bnel $t5,$at,.PF0f040854
/* f040848: 8faf0278 */ lw $t7,0x278($sp)
.PF0f04084c:
/* f04084c: afae0250 */ sw $t6,0x250($sp)
/* f040850: 8faf0278 */ lw $t7,0x278($sp)
.PF0f040854:
/* f040854: 24010008 */ li $at,0x8
/* f040858: 81ea0007 */ lb $t2,0x7($t7)
/* f04085c: 1541000b */ bne $t2,$at,.PF0f04088c
/* f040860: 00000000 */ nop
/* f040864: 8de40020 */ lw $a0,0x20($t7)
/* f040868: 0c0073c3 */ jal modelGetAnimNum
/* f04086c: afa60254 */ sw $a2,0x254($sp)
/* f040870: 2401026a */ li $at,0x26a
/* f040874: 14410005 */ bne $v0,$at,.PF0f04088c
/* f040878: 8fa60254 */ lw $a2,0x254($sp)
/* f04087c: 8fb90278 */ lw $t9,0x278($sp)
/* f040880: 83380033 */ lb $t8,0x33($t9)
/* f040884: 270c0001 */ addiu $t4,$t8,0x1
/* f040888: a32c0033 */ sb $t4,0x33($t9)
.PF0f04088c:
/* f04088c: 50c004a3 */ beqzl $a2,.PF0f041b1c
/* f040890: 8fa80268 */ lw $t0,0x268($sp)
/* f040894: 0fc0f9dd */ jal chrGetAimAngle
/* f040898: 8fa40278 */ lw $a0,0x278($sp)
/* f04089c: e7a00204 */ swc1 $f0,0x204($sp)
/* f0408a0: 0fc0fa36 */ jal func0f03e754
/* f0408a4: 8fa40278 */ lw $a0,0x278($sp)
/* f0408a8: 93ab026f */ lbu $t3,0x26f($sp)
/* f0408ac: e7a00200 */ swc1 $f0,0x200($sp)
/* f0408b0: 240e0001 */ li $t6,0x1
/* f0408b4: 11600004 */ beqz $t3,.PF0f0408c8
/* f0408b8: 27a60244 */ addiu $a2,$sp,0x244
/* f0408bc: 240d0004 */ li $t5,0x4
/* f0408c0: 10000002 */ b .PF0f0408cc
/* f0408c4: afad01fc */ sw $t5,0x1fc($sp)
.PF0f0408c8:
/* f0408c8: afa001fc */ sw $zero,0x1fc($sp)
.PF0f0408cc:
/* f0408cc: afae0268 */ sw $t6,0x268($sp)
/* f0408d0: 8fa40278 */ lw $a0,0x278($sp)
/* f0408d4: 0fc0ffda */ jal func0f03fde4
/* f0408d8: 8fa5027c */ lw $a1,0x27c($sp)
/* f0408dc: 54400032 */ bnezl $v0,.PF0f0409a8
/* f0408e0: 8fa40278 */ lw $a0,0x278($sp)
/* f0408e4: 8fa20274 */ lw $v0,0x274($sp)
/* f0408e8: 3c0141f0 */ lui $at,0x41f0
/* f0408ec: 44818000 */ mtc1 $at,$f16
/* f0408f0: c44a0008 */ lwc1 $f10,0x8($v0)
/* f0408f4: 8faa027c */ lw $t2,0x27c($sp)
/* f0408f8: 24010001 */ li $at,0x1
/* f0408fc: e7aa0244 */ swc1 $f10,0x244($sp)
/* f040900: c452000c */ lwc1 $f18,0xc($v0)
/* f040904: 46109100 */ add.s $f4,$f18,$f16
/* f040908: e7a40248 */ swc1 $f4,0x248($sp)
/* f04090c: c4460010 */ lwc1 $f6,0x10($v0)
/* f040910: 15410013 */ bne $t2,$at,.PF0f040960
/* f040914: e7a6024c */ swc1 $f6,0x24c($sp)
/* f040918: 0c006858 */ jal cosf
/* f04091c: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040920: 3c014120 */ lui $at,0x4120
/* f040924: 44815000 */ mtc1 $at,$f10
/* f040928: c7a80244 */ lwc1 $f8,0x244($sp)
/* f04092c: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040930: 460a0482 */ mul.s $f18,$f0,$f10
/* f040934: 46124400 */ add.s $f16,$f8,$f18
/* f040938: 0c00685b */ jal sinf
/* f04093c: e7b00244 */ swc1 $f16,0x244($sp)
/* f040940: 3c014120 */ lui $at,0x4120
/* f040944: 44813000 */ mtc1 $at,$f6
/* f040948: 46000107 */ neg.s $f4,$f0
/* f04094c: c7a8024c */ lwc1 $f8,0x24c($sp)
/* f040950: 46062282 */ mul.s $f10,$f4,$f6
/* f040954: 460a4480 */ add.s $f18,$f8,$f10
/* f040958: 10000012 */ b .PF0f0409a4
/* f04095c: e7b2024c */ swc1 $f18,0x24c($sp)
.PF0f040960:
/* f040960: 0c006858 */ jal cosf
/* f040964: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040968: 3c014120 */ lui $at,0x4120
/* f04096c: 44812000 */ mtc1 $at,$f4
/* f040970: 46000407 */ neg.s $f16,$f0
/* f040974: c7a80244 */ lwc1 $f8,0x244($sp)
/* f040978: 46048182 */ mul.s $f6,$f16,$f4
/* f04097c: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040980: 46064280 */ add.s $f10,$f8,$f6
/* f040984: 0c00685b */ jal sinf
/* f040988: e7aa0244 */ swc1 $f10,0x244($sp)
/* f04098c: 3c014120 */ lui $at,0x4120
/* f040990: 44818000 */ mtc1 $at,$f16
/* f040994: c7b2024c */ lwc1 $f18,0x24c($sp)
/* f040998: 46100102 */ mul.s $f4,$f0,$f16
/* f04099c: 46049200 */ add.s $f8,$f18,$f4
/* f0409a0: e7a8024c */ swc1 $f8,0x24c($sp)
.PF0f0409a4:
/* f0409a4: 8fa40278 */ lw $a0,0x278($sp)
.PF0f0409a8:
/* f0409a8: 0fc07a37 */ jal chrSetOrUnsetHiddenFlag00000100
/* f0409ac: 00002825 */ move $a1,$zero
/* f0409b0: 8fb801fc */ lw $t8,0x1fc($sp)
/* f0409b4: 8faf0274 */ lw $t7,0x274($sp)
/* f0409b8: 24190010 */ li $t9,0x10
/* f0409bc: 370c082a */ ori $t4,$t8,0x82a
/* f0409c0: afac0010 */ sw $t4,0x10($sp)
/* f0409c4: afb90014 */ sw $t9,0x14($sp)
/* f0409c8: 27a60244 */ addiu $a2,$sp,0x244
/* f0409cc: 27a70234 */ addiu $a3,$sp,0x234
/* f0409d0: 25e40008 */ addiu $a0,$t7,0x8
/* f0409d4: 0c00b5cd */ jal func0002de34
/* f0409d8: 25e50028 */ addiu $a1,$t7,0x28
/* f0409dc: 14400002 */ bnez $v0,.PF0f0409e8
/* f0409e0: 24050001 */ li $a1,0x1
/* f0409e4: afa00268 */ sw $zero,0x268($sp)
.PF0f0409e8:
/* f0409e8: 0fc07a37 */ jal chrSetOrUnsetHiddenFlag00000100
/* f0409ec: 8fa40278 */ lw $a0,0x278($sp)
/* f0409f0: 8fab0268 */ lw $t3,0x268($sp)
/* f0409f4: 240d0001 */ li $t5,0x1
/* f0409f8: 51600448 */ beqzl $t3,.PF0f041b1c
/* f0409fc: 8fa80268 */ lw $t0,0x268($sp)
/* f040a00: 93ae026f */ lbu $t6,0x26f($sp)
/* f040a04: afa001f8 */ sw $zero,0x1f8($sp)
/* f040a08: afa001f4 */ sw $zero,0x1f4($sp)
/* f040a0c: afad01f0 */ sw $t5,0x1f0($sp)
/* f040a10: 11c00004 */ beqz $t6,.PF0f040a24
/* f040a14: afa001cc */ sw $zero,0x1cc($sp)
/* f040a18: 240a083f */ li $t2,0x83f
/* f040a1c: 10000003 */ b .PF0f040a2c
/* f040a20: afaa01c8 */ sw $t2,0x1c8($sp)
.PF0f040a24:
/* f040a24: 240f083b */ li $t7,0x83b
/* f040a28: afaf01c8 */ sw $t7,0x1c8($sp)
.PF0f040a2c:
/* f040a2c: 8fa7025c */ lw $a3,0x25c($sp)
/* f040a30: 8ce20004 */ lw $v0,0x4($a3)
/* f040a34: 50400004 */ beqzl $v0,.PF0f040a48
/* f040a38: 00004825 */ move $t1,$zero
/* f040a3c: 10000002 */ b .PF0f040a48
/* f040a40: 904902fe */ lbu $t1,0x2fe($v0)
/* f040a44: 00004825 */ move $t1,$zero
.PF0f040a48:
/* f040a48: 39220003 */ xori $v0,$t1,0x3
/* f040a4c: 2c420001 */ sltiu $v0,$v0,0x1
/* f040a50: 1040000f */ beqz $v0,.PF0f040a90
/* f040a54: 00401825 */ move $v1,$v0
/* f040a58: afa2005c */ sw $v0,0x5c($sp)
/* f040a5c: 0fc124d8 */ jal chrGetDistanceToTarget
/* f040a60: 8fa40278 */ lw $a0,0x278($sp)
/* f040a64: 3c014316 */ lui $at,0x4316
/* f040a68: 44813000 */ mtc1 $at,$f6
/* f040a6c: 0000c025 */ move $t8,$zero
/* f040a70: 4600303c */ c.lt.s $f6,$f0
/* f040a74: 00000000 */ nop
/* f040a78: 45020003 */ bc1fl .PF0f040a88
/* f040a7c: afb8005c */ sw $t8,0x5c($sp)
/* f040a80: 24180001 */ li $t8,0x1
/* f040a84: afb8005c */ sw $t8,0x5c($sp)
.PF0f040a88:
/* f040a88: 8fa7025c */ lw $a3,0x25c($sp)
/* f040a8c: 03001825 */ move $v1,$t8
.PF0f040a90:
/* f040a90: afa301c0 */ sw $v1,0x1c0($sp)
/* f040a94: 10600016 */ beqz $v1,.PF0f040af0
/* f040a98: afa001bc */ sw $zero,0x1bc($sp)
/* f040a9c: c4ea0008 */ lwc1 $f10,0x8($a3)
/* f040aa0: c7b00244 */ lwc1 $f16,0x244($sp)
/* f040aa4: c7a80248 */ lwc1 $f8,0x248($sp)
/* f040aa8: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f040aac: 46105481 */ sub.s $f18,$f10,$f16
/* f040ab0: c7b0024c */ lwc1 $f16,0x24c($sp)
/* f040ab4: 27a501e4 */ addiu $a1,$sp,0x1e4
/* f040ab8: 27a601e8 */ addiu $a2,$sp,0x1e8
/* f040abc: e7b201e0 */ swc1 $f18,0x1e0($sp)
/* f040ac0: c4e4000c */ lwc1 $f4,0xc($a3)
/* f040ac4: 46082181 */ sub.s $f6,$f4,$f8
/* f040ac8: e7a601e4 */ swc1 $f6,0x1e4($sp)
/* f040acc: c4ea0010 */ lwc1 $f10,0x10($a3)
/* f040ad0: 46105481 */ sub.s $f18,$f10,$f16
/* f040ad4: 0c0011d8 */ jal guNormalize
/* f040ad8: e7b201e8 */ swc1 $f18,0x1e8($sp)
/* f040adc: 8fa4025c */ lw $a0,0x25c($sp)
/* f040ae0: 0fc19102 */ jal propSetCollisionsEnabled
/* f040ae4: 24050001 */ li $a1,0x1
/* f040ae8: 1000002f */ b .PF0f040ba8
/* f040aec: 8fab0278 */ lw $t3,0x278($sp)
.PF0f040af0:
/* f040af0: 0c006858 */ jal cosf
/* f040af4: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040af8: e7a00060 */ swc1 $f0,0x60($sp)
/* f040afc: 0c00685b */ jal sinf
/* f040b00: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040b04: c7a40060 */ lwc1 $f4,0x60($sp)
/* f040b08: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040b0c: 46040202 */ mul.s $f8,$f0,$f4
/* f040b10: 0c00685b */ jal sinf
/* f040b14: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f040b18: e7a001e4 */ swc1 $f0,0x1e4($sp)
/* f040b1c: 0c006858 */ jal cosf
/* f040b20: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040b24: e7a00060 */ swc1 $f0,0x60($sp)
/* f040b28: 0c006858 */ jal cosf
/* f040b2c: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040b30: c7a60060 */ lwc1 $f6,0x60($sp)
/* f040b34: 93ac026f */ lbu $t4,0x26f($sp)
/* f040b38: 46060282 */ mul.s $f10,$f0,$f6
/* f040b3c: 11800019 */ beqz $t4,.PF0f040ba4
/* f040b40: e7aa01e8 */ swc1 $f10,0x1e8($sp)
/* f040b44: 0fc6492c */ jal chrGuessCrouchPos
/* f040b48: 8fa40278 */ lw $a0,0x278($sp)
/* f040b4c: 8fb90278 */ lw $t9,0x278($sp)
/* f040b50: 00404825 */ move $t1,$v0
/* f040b54: 8fae0278 */ lw $t6,0x278($sp)
/* f040b58: 8f280170 */ lw $t0,0x170($t9)
/* f040b5c: 0008582b */ sltu $t3,$zero,$t0
/* f040b60: 11600004 */ beqz $t3,.PF0f040b74
/* f040b64: 01604025 */ move $t0,$t3
/* f040b68: 8f280174 */ lw $t0,0x174($t9)
/* f040b6c: 0008682b */ sltu $t5,$zero,$t0
/* f040b70: 01a04025 */ move $t0,$t5
.PF0f040b74:
/* f040b74: 8dc302d4 */ lw $v1,0x2d4($t6)
/* f040b78: 8fb8027c */ lw $t8,0x27c($sp)
/* f040b7c: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f040b80: 8c66004c */ lw $a2,0x4c($v1)
/* f040b84: 00786021 */ addu $t4,$v1,$t8
/* f040b88: 9187004d */ lbu $a3,0x4d($t4)
/* f040b8c: 8c650020 */ lw $a1,0x20($v1)
/* f040b90: 00065080 */ sll $t2,$a2,0x2
/* f040b94: 000a37c2 */ srl $a2,$t2,0x1f
/* f040b98: afa80014 */ sw $t0,0x14($sp)
/* f040b9c: 0fc284b4 */ jal func0f0a0fac
/* f040ba0: afa90010 */ sw $t1,0x10($sp)
.PF0f040ba4:
/* f040ba4: 8fab0278 */ lw $t3,0x278($sp)
.PF0f040ba8:
/* f040ba8: 93b90260 */ lbu $t9,0x260($sp)
/* f040bac: 24010016 */ li $at,0x16
/* f040bb0: 8d6302d4 */ lw $v1,0x2d4($t3)
/* f040bb4: 50600018 */ beqzl $v1,.PF0f040c18
/* f040bb8: 3c014780 */ lui $at,0x4780
/* f040bbc: 57210016 */ bnel $t9,$at,.PF0f040c18
/* f040bc0: 3c014780 */ lui $at,0x4780
/* f040bc4: 8c6d0128 */ lw $t5,0x128($v1)
/* f040bc8: 240e0001 */ li $t6,0x1
/* f040bcc: 01602025 */ move $a0,$t3
/* f040bd0: 15a00010 */ bnez $t5,.PF0f040c14
/* f040bd4: 00002825 */ move $a1,$zero
/* f040bd8: afae0250 */ sw $t6,0x250($sp)
/* f040bdc: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f040be0: 0fc66c21 */ jal aibotDoFarsightThing
/* f040be4: 27a70244 */ addiu $a3,$sp,0x244
/* f040be8: 24010002 */ li $at,0x2
/* f040bec: 5441000a */ bnel $v0,$at,.PF0f040c18
/* f040bf0: 3c014780 */ lui $at,0x4780
/* f040bf4: 0c004ad4 */ jal random
/* f040bf8: 00000000 */ nop
/* f040bfc: 240100ff */ li $at,0xff
/* f040c00: 0041001b */ divu $zero,$v0,$at
/* f040c04: 00005010 */ mfhi $t2
/* f040c08: 2d4f00c9 */ sltiu $t7,$t2,0xc9
/* f040c0c: 39ef0001 */ xori $t7,$t7,0x1
/* f040c10: a3af026e */ sb $t7,0x26e($sp)
.PF0f040c14:
/* f040c14: 3c014780 */ lui $at,0x4780
.PF0f040c18:
/* f040c18: 44810000 */ mtc1 $at,$f0
/* f040c1c: c7b001e0 */ lwc1 $f16,0x1e0($sp)
/* f040c20: c7a40244 */ lwc1 $f4,0x244($sp)
/* f040c24: c7a601e4 */ lwc1 $f6,0x1e4($sp)
/* f040c28: 46008482 */ mul.s $f18,$f16,$f0
/* f040c2c: c7b00248 */ lwc1 $f16,0x248($sp)
/* f040c30: 8fa40278 */ lw $a0,0x278($sp)
/* f040c34: 46003282 */ mul.s $f10,$f6,$f0
/* f040c38: c7a6024c */ lwc1 $f6,0x24c($sp)
/* f040c3c: 00002825 */ move $a1,$zero
/* f040c40: 46049200 */ add.s $f8,$f18,$f4
/* f040c44: c7a401e8 */ lwc1 $f4,0x1e8($sp)
/* f040c48: 46105480 */ add.s $f18,$f10,$f16
/* f040c4c: e7a80228 */ swc1 $f8,0x228($sp)
/* f040c50: 46002202 */ mul.s $f8,$f4,$f0
/* f040c54: e7b2022c */ swc1 $f18,0x22c($sp)
/* f040c58: 46064280 */ add.s $f10,$f8,$f6
/* f040c5c: 0fc07a37 */ jal chrSetOrUnsetHiddenFlag00000100
/* f040c60: e7aa0230 */ swc1 $f10,0x230($sp)
/* f040c64: 93b8026f */ lbu $t8,0x26f($sp)
/* f040c68: 27a40244 */ addiu $a0,$sp,0x244
/* f040c6c: 27a50234 */ addiu $a1,$sp,0x234
/* f040c70: 13000004 */ beqz $t8,.PF0f040c84
/* f040c74: 27a60228 */ addiu $a2,$sp,0x228
/* f040c78: 240c0001 */ li $t4,0x1
/* f040c7c: 3c01800a */ lui $at,0x800a
/* f040c80: ac2ca99c */ sw $t4,-0x5664($at)
.PF0f040c84:
/* f040c84: 24190010 */ li $t9,0x10
/* f040c88: afb90010 */ sw $t9,0x10($sp)
/* f040c8c: 0c00b5a4 */ jal cdTestAToB4
/* f040c90: 8fa701c8 */ lw $a3,0x1c8($sp)
/* f040c94: 1440000a */ bnez $v0,.PF0f040cc0
/* f040c98: 240d0001 */ li $t5,0x1
/* f040c9c: 3c067f1b */ lui $a2,0x7f1b
/* f040ca0: afad0224 */ sw $t5,0x224($sp)
/* f040ca4: 24c69d20 */ addiu $a2,$a2,-25312
/* f040ca8: 27a40228 */ addiu $a0,$sp,0x228
/* f040cac: 0c0091ef */ jal cdGetPos
/* f040cb0: 24052f2d */ li $a1,0x2f2d
/* f040cb4: 0c0091ec */ jal cdGetObstacle
/* f040cb8: 00000000 */ nop
/* f040cbc: afa201cc */ sw $v0,0x1cc($sp)
.PF0f040cc0:
/* f040cc0: 8fa40278 */ lw $a0,0x278($sp)
/* f040cc4: 0fc07a37 */ jal chrSetOrUnsetHiddenFlag00000100
/* f040cc8: 24050001 */ li $a1,0x1
/* f040ccc: 93ae026f */ lbu $t6,0x26f($sp)
/* f040cd0: 3c01800a */ lui $at,0x800a
/* f040cd4: 51c00003 */ beqzl $t6,.PF0f040ce4
/* f040cd8: 8fab01cc */ lw $t3,0x1cc($sp)
/* f040cdc: ac20a99c */ sw $zero,-0x5664($at)
/* f040ce0: 8fab01cc */ lw $t3,0x1cc($sp)
.PF0f040ce4:
/* f040ce4: 8faa01c0 */ lw $t2,0x1c0($sp)
/* f040ce8: 55600015 */ bnezl $t3,.PF0f040d40
/* f040cec: c7a80228 */ lwc1 $f8,0x228($sp)
/* f040cf0: 51400013 */ beqzl $t2,.PF0f040d40
/* f040cf4: c7a80228 */ lwc1 $f8,0x228($sp)
/* f040cf8: 0c004ad4 */ jal random
/* f040cfc: 00000000 */ nop
/* f040d00: 24010064 */ li $at,0x64
/* f040d04: 0041001b */ divu $zero,$v0,$at
/* f040d08: 00001810 */ mfhi $v1
/* f040d0c: 2c6f0033 */ sltiu $t7,$v1,0x33
/* f040d10: 39ef0001 */ xori $t7,$t7,0x1
/* f040d14: 11e00009 */ beqz $t7,.PF0f040d3c
/* f040d18: afaf01bc */ sw $t7,0x1bc($sp)
/* f040d1c: 8fb8025c */ lw $t8,0x25c($sp)
/* f040d20: afb801cc */ sw $t8,0x1cc($sp)
/* f040d24: c7100008 */ lwc1 $f16,0x8($t8)
/* f040d28: e7b00228 */ swc1 $f16,0x228($sp)
/* f040d2c: c712000c */ lwc1 $f18,0xc($t8)
/* f040d30: e7b2022c */ swc1 $f18,0x22c($sp)
/* f040d34: c7040010 */ lwc1 $f4,0x10($t8)
/* f040d38: e7a40230 */ swc1 $f4,0x230($sp)
.PF0f040d3c:
/* f040d3c: c7a80228 */ lwc1 $f8,0x228($sp)
.PF0f040d40:
/* f040d40: c7a60244 */ lwc1 $f6,0x244($sp)
/* f040d44: c7aa022c */ lwc1 $f10,0x22c($sp)
/* f040d48: c7b00248 */ lwc1 $f16,0x248($sp)
/* f040d4c: 46064001 */ sub.s $f0,$f8,$f6
/* f040d50: c7b20230 */ lwc1 $f18,0x230($sp)
/* f040d54: c7a4024c */ lwc1 $f4,0x24c($sp)
/* f040d58: 46105081 */ sub.s $f2,$f10,$f16
/* f040d5c: 46000202 */ mul.s $f8,$f0,$f0
/* f040d60: 93a40260 */ lbu $a0,0x260($sp)
/* f040d64: 46049301 */ sub.s $f12,$f18,$f4
/* f040d68: 46021182 */ mul.s $f6,$f2,$f2
/* f040d6c: 24010018 */ li $at,0x18
/* f040d70: 460c6402 */ mul.s $f16,$f12,$f12
/* f040d74: 46064280 */ add.s $f10,$f8,$f6
/* f040d78: 46105480 */ add.s $f18,$f10,$f16
/* f040d7c: 1081000f */ beq $a0,$at,.PF0f040dbc
/* f040d80: e7b201d0 */ swc1 $f18,0x1d0($sp)
/* f040d84: 24010019 */ li $at,0x19
/* f040d88: 1081000c */ beq $a0,$at,.PF0f040dbc
/* f040d8c: 24010012 */ li $at,0x12
/* f040d90: 14810003 */ bne $a0,$at,.PF0f040da0
/* f040d94: 93ac0263 */ lbu $t4,0x263($sp)
/* f040d98: 24010001 */ li $at,0x1
/* f040d9c: 11810007 */ beq $t4,$at,.PF0f040dbc
.PF0f040da0:
/* f040da0: 24010017 */ li $at,0x17
/* f040da4: 10810005 */ beq $a0,$at,.PF0f040dbc
/* f040da8: 2401001b */ li $at,0x1b
/* f040dac: 10810003 */ beq $a0,$at,.PF0f040dbc
/* f040db0: 24010034 */ li $at,0x34
/* f040db4: 54810179 */ bnel $a0,$at,.PF0f04139c
/* f040db8: 24010006 */ li $at,0x6
.PF0f040dbc:
/* f040dbc: 93b9026f */ lbu $t9,0x26f($sp)
/* f040dc0: afa00250 */ sw $zero,0x250($sp)
/* f040dc4: 3c017f1b */ lui $at,0x7f1b
/* f040dc8: 17200006 */ bnez $t9,.PF0f040de4
/* f040dcc: c7a801d0 */ lwc1 $f8,0x1d0($sp)
/* f040dd0: c424a330 */ lwc1 $f4,-0x5cd0($at)
/* f040dd4: 4608203c */ c.lt.s $f4,$f8
/* f040dd8: 00000000 */ nop
/* f040ddc: 4502016c */ bc1fl .PF0f041390
/* f040de0: afa00268 */ sw $zero,0x268($sp)
.PF0f040de4:
/* f040de4: 0fc2c524 */ jal weaponFindById
/* f040de8: 00000000 */ nop
/* f040dec: 93ad0263 */ lbu $t5,0x263($sp)
/* f040df0: 93a40260 */ lbu $a0,0x260($sp)
/* f040df4: 24010018 */ li $at,0x18
/* f040df8: 000d7080 */ sll $t6,$t5,0x2
/* f040dfc: 004e5821 */ addu $t3,$v0,$t6
/* f040e00: 10810006 */ beq $a0,$at,.PF0f040e1c
/* f040e04: 8d630014 */ lw $v1,0x14($t3)
/* f040e08: 24010034 */ li $at,0x34
/* f040e0c: 10810003 */ beq $a0,$at,.PF0f040e1c
/* f040e10: 24010019 */ li $at,0x19
/* f040e14: 5481000e */ bnel $a0,$at,.PF0f040e50
/* f040e18: 2401001b */ li $at,0x1b
.PF0f040e1c:
/* f040e1c: 8c6a0010 */ lw $t2,0x10($v1)
/* f040e20: 24050053 */ li $a1,0x53
/* f040e24: 8fa60278 */ lw $a2,0x278($sp)
/* f040e28: 000a7840 */ sll $t7,$t2,0x1
/* f040e2c: 05e30003 */ bgezl $t7,.PF0f040e3c
/* f040e30: 8c640040 */ lw $a0,0x40($v1)
/* f040e34: 24050054 */ li $a1,0x54
/* f040e38: 8c640040 */ lw $a0,0x40($v1)
.PF0f040e3c:
/* f040e3c: 0fc22deb */ jal func0f08b880
/* f040e40: afa300d4 */ sw $v1,0xd4($sp)
/* f040e44: 1000002e */ b .PF0f040f00
/* f040e48: afa201b8 */ sw $v0,0x1b8($sp)
/* f040e4c: 2401001b */ li $at,0x1b
.PF0f040e50:
/* f040e50: 1481000a */ bne $a0,$at,.PF0f040e7c
/* f040e54: 24050056 */ li $a1,0x56
/* f040e58: 8c640040 */ lw $a0,0x40($v1)
/* f040e5c: afa300d4 */ sw $v1,0xd4($sp)
/* f040e60: 0fc22deb */ jal func0f08b880
/* f040e64: 8fa60278 */ lw $a2,0x278($sp)
/* f040e68: 10400025 */ beqz $v0,.PF0f040f00
/* f040e6c: afa201b8 */ sw $v0,0x1b8($sp)
/* f040e70: 93b80263 */ lbu $t8,0x263($sp)
/* f040e74: 10000022 */ b .PF0f040f00
/* f040e78: a058005f */ sb $t8,0x5f($v0)
.PF0f040e7c:
/* f040e7c: 24010017 */ li $at,0x17
/* f040e80: 1481000a */ bne $a0,$at,.PF0f040eac
/* f040e84: 24050055 */ li $a1,0x55
/* f040e88: 8c640040 */ lw $a0,0x40($v1)
/* f040e8c: afa300d4 */ sw $v1,0xd4($sp)
/* f040e90: 0fc22deb */ jal func0f08b880
/* f040e94: 8fa60278 */ lw $a2,0x278($sp)
/* f040e98: 10400019 */ beqz $v0,.PF0f040f00
/* f040e9c: afa201b8 */ sw $v0,0x1b8($sp)
/* f040ea0: 93ac0263 */ lbu $t4,0x263($sp)
/* f040ea4: 10000016 */ b .PF0f040f00
/* f040ea8: a04c005f */ sb $t4,0x5f($v0)
.PF0f040eac:
/* f040eac: 24010012 */ li $at,0x12
/* f040eb0: 1481000b */ bne $a0,$at,.PF0f040ee0
/* f040eb4: 3c0d800a */ lui $t5,0x800a
/* f040eb8: 8c640040 */ lw $a0,0x40($v1)
/* f040ebc: afa300d4 */ sw $v1,0xd4($sp)
/* f040ec0: 24050055 */ li $a1,0x55
/* f040ec4: 0fc22deb */ jal func0f08b880
/* f040ec8: 8fa60278 */ lw $a2,0x278($sp)
/* f040ecc: 1040000c */ beqz $v0,.PF0f040f00
/* f040ed0: afa201b8 */ sw $v0,0x1b8($sp)
/* f040ed4: 24190002 */ li $t9,0x2
/* f040ed8: 10000009 */ b .PF0f040f00
/* f040edc: a059005f */ sb $t9,0x5f($v0)
.PF0f040ee0:
/* f040ee0: 8dada794 */ lw $t5,-0x586c($t5)
/* f040ee4: 8c640040 */ lw $a0,0x40($v1)
/* f040ee8: 27a50260 */ addiu $a1,$sp,0x260
/* f040eec: 8dae00bc */ lw $t6,0xbc($t5)
/* f040ef0: 8dc60004 */ lw $a2,0x4($t6)
/* f040ef4: 0fc22d61 */ jal func0f08b658
/* f040ef8: afa300d4 */ sw $v1,0xd4($sp)
/* f040efc: afa201b8 */ sw $v0,0x1b8($sp)
.PF0f040f00:
/* f040f00: 10400123 */ beqz $v0,.PF0f041390
/* f040f04: 8fab00d4 */ lw $t3,0xd4($sp)
/* f040f08: 8d6a004c */ lw $t2,0x4c($t3)
/* f040f0c: 3c017f1b */ lui $at,0x7f1b
/* f040f10: c430a334 */ lwc1 $f16,-0x5ccc($at)
/* f040f14: 448a3000 */ mtc1 $t2,$f6
/* f040f18: 3c014270 */ lui $at,0x4270
/* f040f1c: 44812000 */ mtc1 $at,$f4
/* f040f20: 468032a0 */ cvt.s.w $f10,$f6
/* f040f24: 3c017f1b */ lui $at,0x7f1b
/* f040f28: 93b8026f */ lbu $t8,0x26f($sp)
/* f040f2c: 8fa40278 */ lw $a0,0x278($sp)
/* f040f30: 2405001e */ li $a1,0x1e
/* f040f34: 46105482 */ mul.s $f18,$f10,$f16
/* f040f38: c430a338 */ lwc1 $f16,-0x5cc8($at)
/* f040f3c: 46049203 */ div.s $f8,$f18,$f4
/* f040f40: e7a80168 */ swc1 $f8,0x168($sp)
/* f040f44: 8d6f0054 */ lw $t7,0x54($t3)
/* f040f48: 448f3000 */ mtc1 $t7,$f6
/* f040f4c: 00000000 */ nop
/* f040f50: 468032a0 */ cvt.s.w $f10,$f6
/* f040f54: 46105482 */ mul.s $f18,$f10,$f16
/* f040f58: 13000080 */ beqz $t8,.PF0f04115c
/* f040f5c: e7b200cc */ swc1 $f18,0xcc($sp)
/* f040f60: 0fc12480 */ jal chrIsTargetInFov
/* f040f64: 00003025 */ move $a2,$zero
/* f040f68: 1040007c */ beqz $v0,.PF0f04115c
/* f040f6c: 00000000 */ nop
/* f040f70: 93a20263 */ lbu $v0,0x263($sp)
/* f040f74: 00001825 */ move $v1,$zero
/* f040f78: 93a40260 */ lbu $a0,0x260($sp)
/* f040f7c: 14400025 */ bnez $v0,.PF0f041014
/* f040f80: 24010018 */ li $at,0x18
/* f040f84: 10810006 */ beq $a0,$at,.PF0f040fa0
/* f040f88: 8fac025c */ lw $t4,0x25c($sp)
/* f040f8c: 24010034 */ li $at,0x34
/* f040f90: 10810003 */ beq $a0,$at,.PF0f040fa0
/* f040f94: 24010019 */ li $at,0x19
/* f040f98: 5481001f */ bnel $a0,$at,.PF0f041018
/* f040f9c: 93a40260 */ lbu $a0,0x260($sp)
.PF0f040fa0:
/* f040fa0: 91820000 */ lbu $v0,0x0($t4)
/* f040fa4: 24010003 */ li $at,0x3
/* f040fa8: 8fb9025c */ lw $t9,0x25c($sp)
/* f040fac: 10410003 */ beq $v0,$at,.PF0f040fbc
/* f040fb0: 24010006 */ li $at,0x6
/* f040fb4: 14410051 */ bne $v0,$at,.PF0f0410fc
/* f040fb8: 00000000 */ nop
.PF0f040fbc:
/* f040fbc: c7240008 */ lwc1 $f4,0x8($t9)
/* f040fc0: c7aa0244 */ lwc1 $f10,0x244($sp)
/* f040fc4: c7b20248 */ lwc1 $f18,0x248($sp)
/* f040fc8: e7a400b8 */ swc1 $f4,0xb8($sp)
/* f040fcc: 8f2d0004 */ lw $t5,0x4($t9)
/* f040fd0: 460a2401 */ sub.s $f16,$f4,$f10
/* f040fd4: c7aa024c */ lwc1 $f10,0x24c($sp)
/* f040fd8: c5a800b4 */ lwc1 $f8,0xb4($t5)
/* f040fdc: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f040fe0: 27a501e4 */ addiu $a1,$sp,0x1e4
/* f040fe4: e7a800bc */ swc1 $f8,0xbc($sp)
/* f040fe8: c7260010 */ lwc1 $f6,0x10($t9)
/* f040fec: e7b001e0 */ swc1 $f16,0x1e0($sp)
/* f040ff0: 46124101 */ sub.s $f4,$f8,$f18
/* f040ff4: 27a601e8 */ addiu $a2,$sp,0x1e8
/* f040ff8: e7a600c0 */ swc1 $f6,0xc0($sp)
/* f040ffc: 460a3401 */ sub.s $f16,$f6,$f10
/* f041000: e7a401e4 */ swc1 $f4,0x1e4($sp)
/* f041004: 0c0011d8 */ jal guNormalize
/* f041008: e7b001e8 */ swc1 $f16,0x1e8($sp)
/* f04100c: 1000003b */ b .PF0f0410fc
/* f041010: 24030001 */ li $v1,0x1
.PF0f041014:
/* f041014: 93a40260 */ lbu $a0,0x260($sp)
.PF0f041018:
/* f041018: 24050017 */ li $a1,0x17
/* f04101c: 24010012 */ li $at,0x12
/* f041020: 14a40003 */ bne $a1,$a0,.PF0f041030
/* f041024: 00000000 */ nop
/* f041028: 50400004 */ beqzl $v0,.PF0f04103c
/* f04102c: 8fae025c */ lw $t6,0x25c($sp)
.PF0f041030:
/* f041030: 14810017 */ bne $a0,$at,.PF0f041090
/* f041034: 00000000 */ nop
/* f041038: 8fae025c */ lw $t6,0x25c($sp)
.PF0f04103c:
/* f04103c: 24010003 */ li $at,0x3
/* f041040: 8faa025c */ lw $t2,0x25c($sp)
/* f041044: 91c20000 */ lbu $v0,0x0($t6)
/* f041048: 10410003 */ beq $v0,$at,.PF0f041058
/* f04104c: 24010006 */ li $at,0x6
/* f041050: 1441002a */ bne $v0,$at,.PF0f0410fc
/* f041054: 00000000 */ nop
.PF0f041058:
/* f041058: c5480008 */ lwc1 $f8,0x8($t2)
/* f04105c: 27a40244 */ addiu $a0,$sp,0x244
/* f041060: 8fa500cc */ lw $a1,0xcc($sp)
/* f041064: e7a800b8 */ swc1 $f8,0xb8($sp)
/* f041068: 8d4b0004 */ lw $t3,0x4($t2)
/* f04106c: 27a600b8 */ addiu $a2,$sp,0xb8
/* f041070: 27a701e0 */ addiu $a3,$sp,0x1e0
/* f041074: c57200b4 */ lwc1 $f18,0xb4($t3)
/* f041078: e7b200bc */ swc1 $f18,0xbc($sp)
/* f04107c: c5440010 */ lwc1 $f4,0x10($t2)
/* f041080: 0fc10128 */ jal func0f04031c
/* f041084: e7a400c0 */ swc1 $f4,0xc0($sp)
/* f041088: 1000001c */ b .PF0f0410fc
/* f04108c: 24030001 */ li $v1,0x1
.PF0f041090:
/* f041090: 14a40002 */ bne $a1,$a0,.PF0f04109c
/* f041094: 24010001 */ li $at,0x1
/* f041098: 10410003 */ beq $v0,$at,.PF0f0410a8
.PF0f04109c:
/* f04109c: 2401001b */ li $at,0x1b
/* f0410a0: 14810016 */ bne $a0,$at,.PF0f0410fc
/* f0410a4: 00000000 */ nop
.PF0f0410a8:
/* f0410a8: 8faf025c */ lw $t7,0x25c($sp)
/* f0410ac: 24010006 */ li $at,0x6
/* f0410b0: 27a40244 */ addiu $a0,$sp,0x244
/* f0410b4: c5e60008 */ lwc1 $f6,0x8($t7)
/* f0410b8: 27a600b8 */ addiu $a2,$sp,0xb8
/* f0410bc: 27a701e0 */ addiu $a3,$sp,0x1e0
/* f0410c0: e7a600b8 */ swc1 $f6,0xb8($sp)
/* f0410c4: c5ea000c */ lwc1 $f10,0xc($t7)
/* f0410c8: e7aa00bc */ swc1 $f10,0xbc($sp)
/* f0410cc: c5f00010 */ lwc1 $f16,0x10($t7)
/* f0410d0: e7b000c0 */ swc1 $f16,0xc0($sp)
/* f0410d4: 91f80000 */ lbu $t8,0x0($t7)
/* f0410d8: 17010005 */ bne $t8,$at,.PF0f0410f0
/* f0410dc: 3c0141c8 */ lui $at,0x41c8
/* f0410e0: 44814000 */ mtc1 $at,$f8
/* f0410e4: 00000000 */ nop
/* f0410e8: 46085481 */ sub.s $f18,$f10,$f8
/* f0410ec: e7b200bc */ swc1 $f18,0xbc($sp)
.PF0f0410f0:
/* f0410f0: 0fc10128 */ jal func0f04031c
/* f0410f4: 8fa500cc */ lw $a1,0xcc($sp)
/* f0410f8: 24030001 */ li $v1,0x1
.PF0f0410fc:
/* f0410fc: 10600017 */ beqz $v1,.PF0f04115c
/* f041100: 8fa40278 */ lw $a0,0x278($sp)
/* f041104: 0fc12307 */ jal chrGetAngleToPos
/* f041108: 27a500b8 */ addiu $a1,$sp,0xb8
/* f04110c: e7a000b4 */ swc1 $f0,0xb4($sp)
/* f041110: 0c006858 */ jal cosf
/* f041114: 46000306 */ mov.s $f12,$f0
/* f041118: c7ac00b4 */ lwc1 $f12,0xb4($sp)
/* f04111c: 0c00685b */ jal sinf
/* f041120: e7a000b0 */ swc1 $f0,0xb0($sp)
/* f041124: c7ac01e8 */ lwc1 $f12,0x1e8($sp)
/* f041128: c7ae00b0 */ lwc1 $f14,0xb0($sp)
/* f04112c: c7a201e0 */ lwc1 $f2,0x1e0($sp)
/* f041130: 460c0102 */ mul.s $f4,$f0,$f12
/* f041134: 00000000 */ nop
/* f041138: 46027182 */ mul.s $f6,$f14,$f2
/* f04113c: 00000000 */ nop
/* f041140: 460c7282 */ mul.s $f10,$f14,$f12
/* f041144: 00000000 */ nop
/* f041148: 46020202 */ mul.s $f8,$f0,$f2
/* f04114c: 46062400 */ add.s $f16,$f4,$f6
/* f041150: e7b001e0 */ swc1 $f16,0x1e0($sp)
/* f041154: 46085481 */ sub.s $f18,$f10,$f8
/* f041158: e7b201e8 */ swc1 $f18,0x1e8($sp)
.PF0f04115c:
/* f04115c: 0c0055d0 */ jal func000159b0
/* f041160: 27a40178 */ addiu $a0,$sp,0x178
/* f041164: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f041168: 0c00581e */ jal func000162e8
/* f04116c: 27a5011c */ addiu $a1,$sp,0x11c
/* f041170: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f041174: 0c005841 */ jal func00016374
/* f041178: 27a500dc */ addiu $a1,$sp,0xdc
/* f04117c: 27a400dc */ addiu $a0,$sp,0xdc
/* f041180: 0c00565c */ jal func00015be0
/* f041184: 27a5011c */ addiu $a1,$sp,0x11c
/* f041188: c7ac0168 */ lwc1 $f12,0x168($sp)
/* f04118c: c7a401e0 */ lwc1 $f4,0x1e0($sp)
/* f041190: c7b001e4 */ lwc1 $f16,0x1e4($sp)
/* f041194: c7a801e8 */ lwc1 $f8,0x1e8($sp)
/* f041198: 460c2182 */ mul.s $f6,$f4,$f12
/* f04119c: c7a200cc */ lwc1 $f2,0xcc($sp)
/* f0411a0: 3c01800a */ lui $at,0x800a
/* f0411a4: 460c8282 */ mul.s $f10,$f16,$f12
/* f0411a8: c420a55c */ lwc1 $f0,-0x5aa4($at)
/* f0411ac: 8fac00d4 */ lw $t4,0xd4($sp)
/* f0411b0: 460c4482 */ mul.s $f18,$f8,$f12
/* f0411b4: e7a6015c */ swc1 $f6,0x15c($sp)
/* f0411b8: 8fa401b8 */ lw $a0,0x1b8($sp)
/* f0411bc: 46022102 */ mul.s $f4,$f4,$f2
/* f0411c0: e7aa0160 */ swc1 $f10,0x160($sp)
/* f0411c4: 2401ffff */ li $at,-1
/* f0411c8: 46003182 */ mul.s $f6,$f6,$f0
/* f0411cc: e7b20164 */ swc1 $f18,0x164($sp)
/* f0411d0: 27a50244 */ addiu $a1,$sp,0x244
/* f0411d4: 27a60234 */ addiu $a2,$sp,0x234
/* f0411d8: 27a7011c */ addiu $a3,$sp,0x11c
/* f0411dc: 27ab016c */ addiu $t3,$sp,0x16c
/* f0411e0: 27aa0178 */ addiu $t2,$sp,0x178
/* f0411e4: 46062100 */ add.s $f4,$f4,$f6
/* f0411e8: 46028182 */ mul.s $f6,$f16,$f2
/* f0411ec: e7a4016c */ swc1 $f4,0x16c($sp)
/* f0411f0: 46005102 */ mul.s $f4,$f10,$f0
/* f0411f4: 46043400 */ add.s $f16,$f6,$f4
/* f0411f8: 46024282 */ mul.s $f10,$f8,$f2
/* f0411fc: 00000000 */ nop
/* f041200: 46009182 */ mul.s $f6,$f18,$f0
/* f041204: e7b00170 */ swc1 $f16,0x170($sp)
/* f041208: 46065100 */ add.s $f4,$f10,$f6
/* f04120c: e7a40174 */ swc1 $f4,0x174($sp)
/* f041210: 8d8d0058 */ lw $t5,0x58($t4)
/* f041214: a48d0062 */ sh $t5,0x62($a0)
/* f041218: 84820062 */ lh $v0,0x62($a0)
/* f04121c: 1041000a */ beq $v0,$at,.PF0f041248
/* f041220: 0002c880 */ sll $t9,$v0,0x2
/* f041224: 0322c823 */ subu $t9,$t9,$v0
/* f041228: 0019c8c0 */ sll $t9,$t9,0x3
/* f04122c: 0322c821 */ addu $t9,$t9,$v0
/* f041230: 0019c8c0 */ sll $t9,$t9,0x3
/* f041234: 2401003c */ li $at,0x3c
/* f041238: 0321001a */ div $zero,$t9,$at
/* f04123c: 00007012 */ mflo $t6
/* f041240: a48e0062 */ sh $t6,0x62($a0)
/* f041244: 00000000 */ nop
.PF0f041248:
/* f041248: 8faf0274 */ lw $t7,0x274($sp)
/* f04124c: afab0010 */ sw $t3,0x10($sp)
/* f041250: afaa0014 */ sw $t2,0x14($sp)
/* f041254: afa5001c */ sw $a1,0x1c($sp)
/* f041258: 0fc27bac */ jal func0f09ebcc
/* f04125c: afaf0018 */ sw $t7,0x18($sp)
/* f041260: 8fa301b8 */ lw $v1,0x1b8($sp)
/* f041264: 8fad00d4 */ lw $t5,0xd4($sp)
/* f041268: 8c780040 */ lw $t8,0x40($v1)
/* f04126c: 330c0080 */ andi $t4,$t8,0x80
/* f041270: 11800047 */ beqz $t4,.PF0f041390
/* f041274: 00000000 */ nop
/* f041278: 8da20010 */ lw $v0,0x10($t5)
/* f04127c: 0002c800 */ sll $t9,$v0,0x0
/* f041280: 07210007 */ bgez $t9,.PF0f0412a0
/* f041284: 00025100 */ sll $t2,$v0,0x4
/* f041288: 8c620048 */ lw $v0,0x48($v1)
/* f04128c: 3c014000 */ lui $at,0x4000
/* f041290: 8c4e0000 */ lw $t6,0x0($v0)
/* f041294: 01c15825 */ or $t3,$t6,$at
/* f041298: 10000007 */ b .PF0f0412b8
/* f04129c: ac4b0000 */ sw $t3,0x0($v0)
.PF0f0412a0:
/* f0412a0: 05430006 */ bgezl $t2,.PF0f0412bc
/* f0412a4: c7b0015c */ lwc1 $f16,0x15c($sp)
/* f0412a8: 8c620048 */ lw $v0,0x48($v1)
/* f0412ac: 8c4f0000 */ lw $t7,0x0($v0)
/* f0412b0: 35f80010 */ ori $t8,$t7,0x10
/* f0412b4: ac580000 */ sw $t8,0x0($v0)
.PF0f0412b8:
/* f0412b8: c7b0015c */ lwc1 $f16,0x15c($sp)
.PF0f0412bc:
/* f0412bc: 8c6c0048 */ lw $t4,0x48($v1)
/* f0412c0: 240e00c8 */ li $t6,0xc8
/* f0412c4: 3c017f1b */ lui $at,0x7f1b
/* f0412c8: e5900010 */ swc1 $f16,0x10($t4)
/* f0412cc: 8c6d0048 */ lw $t5,0x48($v1)
/* f0412d0: c7a80160 */ lwc1 $f8,0x160($sp)
/* f0412d4: e5a80014 */ swc1 $f8,0x14($t5)
/* f0412d8: 8c790048 */ lw $t9,0x48($v1)
/* f0412dc: c7b20164 */ lwc1 $f18,0x164($sp)
/* f0412e0: e7320018 */ swc1 $f18,0x18($t9)
/* f0412e4: 8c6b0048 */ lw $t3,0x48($v1)
/* f0412e8: ad6e00b4 */ sw $t6,0xb4($t3)
/* f0412ec: 8faa00d4 */ lw $t2,0xd4($sp)
/* f0412f0: 8c6f0048 */ lw $t7,0x48($v1)
/* f0412f4: c54a005c */ lwc1 $f10,0x5c($t2)
/* f0412f8: e5ea008c */ swc1 $f10,0x8c($t7)
/* f0412fc: 8fb800d4 */ lw $t8,0xd4($sp)
/* f041300: c424a33c */ lwc1 $f4,-0x5cc4($at)
/* f041304: 8c6c0048 */ lw $t4,0x48($v1)
/* f041308: c7060050 */ lwc1 $f6,0x50($t8)
/* f04130c: 46043402 */ mul.s $f16,$f6,$f4
/* f041310: e5900098 */ swc1 $f16,0x98($t4)
/* f041314: 0fc0a26a */ jal chrGetTargetProp
/* f041318: 8fa40278 */ lw $a0,0x278($sp)
/* f04131c: 8fad01b8 */ lw $t5,0x1b8($sp)
/* f041320: 3c01bf80 */ lui $at,0xbf80
/* f041324: 00002025 */ move $a0,$zero
/* f041328: 8db90048 */ lw $t9,0x48($t5)
/* f04132c: 2407ffff */ li $a3,-1
/* f041330: 240bffff */ li $t3,-1
/* f041334: af2200e8 */ sw $v0,0xe8($t9)
/* f041338: 8fae00d4 */ lw $t6,0xd4($sp)
/* f04133c: 240affff */ li $t2,-1
/* f041340: 85c60060 */ lh $a2,0x60($t6)
/* f041344: 18c00012 */ blez $a2,.PF0f041390
/* f041348: 00000000 */ nop
/* f04134c: 8da50014 */ lw $a1,0x14($t5)
/* f041350: 44810000 */ mtc1 $at,$f0
/* f041354: afaa002c */ sw $t2,0x2c($sp)
/* f041358: afa00028 */ sw $zero,0x28($sp)
/* f04135c: afa00020 */ sw $zero,0x20($sp)
/* f041360: afa0001c */ sw $zero,0x1c($sp)
/* f041364: afa00018 */ sw $zero,0x18($sp)
/* f041368: afa00014 */ sw $zero,0x14($sp)
/* f04136c: afab0010 */ sw $t3,0x10($sp)
/* f041370: e7a00024 */ swc1 $f0,0x24($sp)
/* f041374: e7a00030 */ swc1 $f0,0x30($sp)
/* f041378: e7a00034 */ swc1 $f0,0x34($sp)
/* f04137c: 0fc24e3a */ jal func0f0939f8
/* f041380: e7a00038 */ swc1 $f0,0x38($sp)
/* f041384: 10000002 */ b .PF0f041390
/* f041388: 00000000 */ nop
/* f04138c: afa00268 */ sw $zero,0x268($sp)
.PF0f041390:
/* f041390: 10000019 */ b .PF0f0413f8
/* f041394: a3a0026e */ sb $zero,0x26e($sp)
/* f041398: 24010006 */ li $at,0x6
.PF0f04139c:
/* f04139c: 14810016 */ bne $a0,$at,.PF0f0413f8
/* f0413a0: 93af026f */ lbu $t7,0x26f($sp)
/* f0413a4: 11e00014 */ beqz $t7,.PF0f0413f8
/* f0413a8: 93b80263 */ lbu $t8,0x263($sp)
/* f0413ac: 24010001 */ li $at,0x1
/* f0413b0: 17010011 */ bne $t8,$at,.PF0f0413f8
/* f0413b4: 8fb90278 */ lw $t9,0x278($sp)
/* f0413b8: 8fa2027c */ lw $v0,0x27c($sp)
/* f0413bc: 8f2e02d4 */ lw $t6,0x2d4($t9)
/* f0413c0: 3c014120 */ lui $at,0x4120
/* f0413c4: 00026080 */ sll $t4,$v0,0x2
/* f0413c8: 01cc6821 */ addu $t5,$t6,$t4
/* f0413cc: c5a800e4 */ lwc1 $f8,0xe4($t5)
/* f0413d0: 44819000 */ mtc1 $at,$f18
/* f0413d4: 44802000 */ mtc1 $zero,$f4
/* f0413d8: 46124282 */ mul.s $f10,$f8,$f18
/* f0413dc: 4600518d */ trunc.w.s $f6,$f10
/* f0413e0: 440a3000 */ mfc1 $t2,$f6
/* f0413e4: 00000000 */ nop
/* f0413e8: a3aa0262 */ sb $t2,0x262($sp)
/* f0413ec: 8f2f02d4 */ lw $t7,0x2d4($t9)
/* f0413f0: 01ecc021 */ addu $t8,$t7,$t4
/* f0413f4: e70400e4 */ swc1 $f4,0xe4($t8)
.PF0f0413f8:
/* f0413f8: 93ac026e */ lbu $t4,0x26e($sp)
/* f0413fc: 93ae026f */ lbu $t6,0x26f($sp)
/* f041400: 518001c0 */ beqzl $t4,.PF0f041b04
/* f041404: 8fab01c0 */ lw $t3,0x1c0($sp)
/* f041408: 15c000d6 */ bnez $t6,.PF0f041764
/* f04140c: 8fad0258 */ lw $t5,0x258($sp)
/* f041410: 31ab0200 */ andi $t3,$t5,0x200
/* f041414: 1160004c */ beqz $t3,.PF0f041548
/* f041418: 8faa025c */ lw $t2,0x25c($sp)
/* f04141c: 91590000 */ lbu $t9,0x0($t2)
/* f041420: 24010006 */ li $at,0x6
/* f041424: 8fa40278 */ lw $a0,0x278($sp)
/* f041428: 17210047 */ bne $t9,$at,.PF0f041548
/* f04142c: 27a50244 */ addiu $a1,$sp,0x244
/* f041430: 27a60234 */ addiu $a2,$sp,0x234
/* f041434: 0fc0e4dc */ jal chrCanSeeAttackTarget
/* f041438: 00003825 */ move $a3,$zero
/* f04143c: 10400042 */ beqz $v0,.PF0f041548
/* f041440: 8faf025c */ lw $t7,0x25c($sp)
/* f041444: 8de40004 */ lw $a0,0x4($t7)
/* f041448: 8fa50278 */ lw $a1,0x278($sp)
/* f04144c: 0fc12b09 */ jal chrCompareTeams
/* f041450: 24060002 */ li $a2,0x2
/* f041454: 1040003c */ beqz $v0,.PF0f041548
/* f041458: 3c014170 */ lui $at,0x4170
/* f04145c: 44817000 */ mtc1 $at,$f14
/* f041460: 8fb8025c */ lw $t8,0x25c($sp)
/* f041464: c7aa01e0 */ lwc1 $f10,0x1e0($sp)
/* f041468: c7a80244 */ lwc1 $f8,0x244($sp)
/* f04146c: c7100008 */ lwc1 $f16,0x8($t8)
/* f041470: 460e5182 */ mul.s $f6,$f10,$f14
/* f041474: c7aa01e4 */ lwc1 $f10,0x1e4($sp)
/* f041478: 46088481 */ sub.s $f18,$f16,$f8
/* f04147c: c7b00248 */ lwc1 $f16,0x248($sp)
/* f041480: c704000c */ lwc1 $f4,0xc($t8)
/* f041484: 8fa40278 */ lw $a0,0x278($sp)
/* f041488: 27a501f8 */ addiu $a1,$sp,0x1f8
/* f04148c: 46069001 */ sub.s $f0,$f18,$f6
/* f041490: 460e5482 */ mul.s $f18,$f10,$f14
/* f041494: c7aa01e8 */ lwc1 $f10,0x1e8($sp)
/* f041498: 46102201 */ sub.s $f8,$f4,$f16
/* f04149c: c7a4024c */ lwc1 $f4,0x24c($sp)
/* f0414a0: c7060010 */ lwc1 $f6,0x10($t8)
/* f0414a4: 27a601f4 */ addiu $a2,$sp,0x1f4
/* f0414a8: 46124081 */ sub.s $f2,$f8,$f18
/* f0414ac: 460e5202 */ mul.s $f8,$f10,$f14
/* f0414b0: c7b201d0 */ lwc1 $f18,0x1d0($sp)
/* f0414b4: 46043401 */ sub.s $f16,$f6,$f4
/* f0414b8: 46000182 */ mul.s $f6,$f0,$f0
/* f0414bc: 00000000 */ nop
/* f0414c0: 46021102 */ mul.s $f4,$f2,$f2
/* f0414c4: 46088301 */ sub.s $f12,$f16,$f8
/* f0414c8: 460c6402 */ mul.s $f16,$f12,$f12
/* f0414cc: 46043280 */ add.s $f10,$f6,$f4
/* f0414d0: 46105200 */ add.s $f8,$f10,$f16
/* f0414d4: 4612403e */ c.le.s $f8,$f18
/* f0414d8: 00000000 */ nop
/* f0414dc: 4500002b */ bc1f .PF0f04158c
/* f0414e0: 00000000 */ nop
/* f0414e4: 0fc0ff0d */ jal chrCalculateHit
/* f0414e8: 27a70260 */ addiu $a3,$sp,0x260
/* f0414ec: 8fac01f4 */ lw $t4,0x1f4($sp)
/* f0414f0: 8fad01f8 */ lw $t5,0x1f8($sp)
/* f0414f4: 8fab0278 */ lw $t3,0x278($sp)
/* f0414f8: 2d8e0001 */ sltiu $t6,$t4,0x1
/* f0414fc: 11a00023 */ beqz $t5,.PF0f04158c
/* f041500: afae01f0 */ sw $t6,0x1f0($sp)
/* f041504: 81630007 */ lb $v1,0x7($t3)
/* f041508: 24010008 */ li $at,0x8
/* f04150c: 3c0a800a */ lui $t2,0x800a
/* f041510: 1061000a */ beq $v1,$at,.PF0f04153c
/* f041514: 8fb90278 */ lw $t9,0x278($sp)
/* f041518: 2401000a */ li $at,0xa
/* f04151c: 10610007 */ beq $v1,$at,.PF0f04153c
/* f041520: 2401001b */ li $at,0x1b
/* f041524: 10610005 */ beq $v1,$at,.PF0f04153c
/* f041528: 2401001c */ li $at,0x1c
/* f04152c: 10610003 */ beq $v1,$at,.PF0f04153c
/* f041530: 2401001d */ li $at,0x1d
/* f041534: 54610016 */ bnel $v1,$at,.PF0f041590
/* f041538: 8fae01f4 */ lw $t6,0x1f4($sp)
.PF0f04153c:
/* f04153c: 8d4aa518 */ lw $t2,-0x5ae8($t2)
/* f041540: 10000012 */ b .PF0f04158c
/* f041544: af2a0048 */ sw $t2,0x48($t9)
.PF0f041548:
/* f041548: 8faf0278 */ lw $t7,0x278($sp)
/* f04154c: 24010008 */ li $at,0x8
/* f041550: 3c18800a */ lui $t8,0x800a
/* f041554: 81e30007 */ lb $v1,0x7($t7)
/* f041558: 8fac0278 */ lw $t4,0x278($sp)
/* f04155c: 10610009 */ beq $v1,$at,.PF0f041584
/* f041560: 2401000a */ li $at,0xa
/* f041564: 10610007 */ beq $v1,$at,.PF0f041584
/* f041568: 2401001b */ li $at,0x1b
/* f04156c: 10610005 */ beq $v1,$at,.PF0f041584
/* f041570: 2401001c */ li $at,0x1c
/* f041574: 10610003 */ beq $v1,$at,.PF0f041584
/* f041578: 2401001d */ li $at,0x1d
/* f04157c: 54610004 */ bnel $v1,$at,.PF0f041590
/* f041580: 8fae01f4 */ lw $t6,0x1f4($sp)
.PF0f041584:
/* f041584: 8f18a518 */ lw $t8,-0x5ae8($t8)
/* f041588: ad980048 */ sw $t8,0x48($t4)
.PF0f04158c:
/* f04158c: 8fae01f4 */ lw $t6,0x1f4($sp)
.PF0f041590:
/* f041590: 8faf01cc */ lw $t7,0x1cc($sp)
/* f041594: 11c00065 */ beqz $t6,.PF0f04172c
/* f041598: 00000000 */ nop
/* f04159c: 0fc2c87a */ jal handGetDamage
/* f0415a0: 27a40260 */ addiu $a0,$sp,0x260
/* f0415a4: 8faa025c */ lw $t2,0x25c($sp)
/* f0415a8: 240dffff */ li $t5,-1
/* f0415ac: 240b00c8 */ li $t3,0xc8
/* f0415b0: e7a0009c */ swc1 $f0,0x9c($sp)
/* f0415b4: afa00098 */ sw $zero,0x98($sp)
/* f0415b8: afa00094 */ sw $zero,0x94($sp)
/* f0415bc: afad0090 */ sw $t5,0x90($sp)
/* f0415c0: afab008c */ sw $t3,0x8c($sp)
/* f0415c4: 8d590004 */ lw $t9,0x4($t2)
/* f0415c8: afb90088 */ sw $t9,0x88($sp)
/* f0415cc: c5460008 */ lwc1 $f6,0x8($t2)
/* f0415d0: e7a60228 */ swc1 $f6,0x228($sp)
/* f0415d4: c544000c */ lwc1 $f4,0xc($t2)
/* f0415d8: e7a4022c */ swc1 $f4,0x22c($sp)
/* f0415dc: c54a0010 */ lwc1 $f10,0x10($t2)
/* f0415e0: 0c004ad4 */ jal random
/* f0415e4: e7aa0230 */ swc1 $f10,0x230($sp)
/* f0415e8: 304f0001 */ andi $t7,$v0,0x1
/* f0415ec: 11e00012 */ beqz $t7,.PF0f041638
/* f0415f0: 00000000 */ nop
/* f0415f4: 0c004ad4 */ jal random
/* f0415f8: 00000000 */ nop
/* f0415fc: 2401000a */ li $at,0xa
/* f041600: 0041001b */ divu $zero,$v0,$at
/* f041604: 0000c010 */ mfhi $t8
/* f041608: 270c0002 */ addiu $t4,$t8,0x2
/* f04160c: 448c9000 */ mtc1 $t4,$f18
/* f041610: c7b0022c */ lwc1 $f16,0x22c($sp)
/* f041614: 05810005 */ bgez $t4,.PF0f04162c
/* f041618: 46809220 */ cvt.s.w $f8,$f18
/* f04161c: 3c014f80 */ lui $at,0x4f80
/* f041620: 44813000 */ mtc1 $at,$f6
/* f041624: 00000000 */ nop
/* f041628: 46064200 */ add.s $f8,$f8,$f6
.PF0f04162c:
/* f04162c: 46088100 */ add.s $f4,$f16,$f8
/* f041630: 10000011 */ b .PF0f041678
/* f041634: e7a4022c */ swc1 $f4,0x22c($sp)
.PF0f041638:
/* f041638: 0c004ad4 */ jal random
/* f04163c: 00000000 */ nop
/* f041640: 2401000a */ li $at,0xa
/* f041644: 0041001b */ divu $zero,$v0,$at
/* f041648: 00007010 */ mfhi $t6
/* f04164c: 25cd0002 */ addiu $t5,$t6,0x2
/* f041650: 448d9000 */ mtc1 $t5,$f18
/* f041654: c7aa022c */ lwc1 $f10,0x22c($sp)
/* f041658: 05a10005 */ bgez $t5,.PF0f041670
/* f04165c: 468091a0 */ cvt.s.w $f6,$f18
/* f041660: 3c014f80 */ lui $at,0x4f80
/* f041664: 44818000 */ mtc1 $at,$f16
/* f041668: 00000000 */ nop
/* f04166c: 46103180 */ add.s $f6,$f6,$f16
.PF0f041670:
/* f041670: 46065201 */ sub.s $f8,$f10,$f6
/* f041674: e7a8022c */ swc1 $f8,0x22c($sp)
.PF0f041678:
/* f041678: 27a40260 */ addiu $a0,$sp,0x260
/* f04167c: 8fa5025c */ lw $a1,0x25c($sp)
/* f041680: 0fc2a079 */ jal func0f0a7d98
/* f041684: 2406ffff */ li $a2,-1
/* f041688: 8fa40088 */ lw $a0,0x88($sp)
/* f04168c: 8c8b0020 */ lw $t3,0x20($a0)
/* f041690: 51600012 */ beqzl $t3,.PF0f0416dc
/* f041694: 8fb80278 */ lw $t8,0x278($sp)
/* f041698: 0fc0d042 */ jal chrGetShield
/* f04169c: 00000000 */ nop
/* f0416a0: 44802000 */ mtc1 $zero,$f4
/* f0416a4: 8fa40088 */ lw $a0,0x88($sp)
/* f0416a8: 27a50228 */ addiu $a1,$sp,0x228
/* f0416ac: 4600203c */ c.lt.s $f4,$f0
/* f0416b0: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f0416b4: 27a70098 */ addiu $a3,$sp,0x98
/* f0416b8: 27b9008c */ addiu $t9,$sp,0x8c
/* f0416bc: 45000006 */ bc1f .PF0f0416d8
/* f0416c0: 27aa0094 */ addiu $t2,$sp,0x94
/* f0416c4: 27af0090 */ addiu $t7,$sp,0x90
/* f0416c8: afaf0018 */ sw $t7,0x18($sp)
/* f0416cc: afb90010 */ sw $t9,0x10($sp)
/* f0416d0: 0fc1002c */ jal chrCalculateShieldHit
/* f0416d4: afaa0014 */ sw $t2,0x14($sp)
.PF0f0416d8:
/* f0416d8: 8fb80278 */ lw $t8,0x278($sp)
.PF0f0416dc:
/* f0416dc: 8fad025c */ lw $t5,0x25c($sp)
/* f0416e0: 8fab0098 */ lw $t3,0x98($sp)
/* f0416e4: 8f0c001c */ lw $t4,0x1c($t8)
/* f0416e8: 8fb90094 */ lw $t9,0x94($sp)
/* f0416ec: 8faa0090 */ lw $t2,0x90($sp)
/* f0416f0: 240e00c8 */ li $t6,0xc8
/* f0416f4: 8fa40088 */ lw $a0,0x88($sp)
/* f0416f8: afae0014 */ sw $t6,0x14($sp)
/* f0416fc: afa00028 */ sw $zero,0x28($sp)
/* f041700: 8fa5009c */ lw $a1,0x9c($sp)
/* f041704: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f041708: 27a70260 */ addiu $a3,$sp,0x260
/* f04170c: afad0018 */ sw $t5,0x18($sp)
/* f041710: afab001c */ sw $t3,0x1c($sp)
/* f041714: afac0010 */ sw $t4,0x10($sp)
/* f041718: afb90020 */ sw $t9,0x20($sp)
/* f04171c: 0fc0d0d1 */ jal func0f0341dc
/* f041720: afaa0024 */ sw $t2,0x24($sp)
/* f041724: 10000010 */ b .PF0f041768
/* f041728: 8fb801f0 */ lw $t8,0x1f0($sp)
.PF0f04172c:
/* f04172c: 11e00006 */ beqz $t7,.PF0f041748
/* f041730: c7b201d0 */ lwc1 $f18,0x1d0($sp)
/* f041734: 91e20000 */ lbu $v0,0x0($t7)
/* f041738: 24010003 */ li $at,0x3
/* f04173c: 10410009 */ beq $v0,$at,.PF0f041764
/* f041740: 24010006 */ li $at,0x6
/* f041744: 10410007 */ beq $v0,$at,.PF0f041764
.PF0f041748:
/* f041748: 3c017f1b */ lui $at,0x7f1b
/* f04174c: c430a340 */ lwc1 $f16,-0x5cc0($at)
/* f041750: 4610903c */ c.lt.s $f18,$f16
/* f041754: 00000000 */ nop
/* f041758: 45020003 */ bc1fl .PF0f041768
/* f04175c: 8fb801f0 */ lw $t8,0x1f0($sp)
/* f041760: afa001f0 */ sw $zero,0x1f0($sp)
.PF0f041764:
/* f041764: 8fb801f0 */ lw $t8,0x1f0($sp)
.PF0f041768:
/* f041768: 8fac01cc */ lw $t4,0x1cc($sp)
/* f04176c: 530000e5 */ beqzl $t8,.PF0f041b04
/* f041770: 8fab01c0 */ lw $t3,0x1c0($sp)
/* f041774: 118000a2 */ beqz $t4,.PF0f041a00
/* f041778: 8fab0224 */ lw $t3,0x224($sp)
/* f04177c: 91820000 */ lbu $v0,0x0($t4)
/* f041780: 24010006 */ li $at,0x6
/* f041784: 93ae026f */ lbu $t6,0x26f($sp)
/* f041788: 10410003 */ beq $v0,$at,.PF0f041798
/* f04178c: 24010003 */ li $at,0x3
/* f041790: 54410053 */ bnel $v0,$at,.PF0f0418e0
/* f041794: 24010001 */ li $at,0x1
.PF0f041798:
/* f041798: 15c0000c */ bnez $t6,.PF0f0417cc
/* f04179c: 8fad01bc */ lw $t5,0x1bc($sp)
/* f0417a0: 15a0000a */ bnez $t5,.PF0f0417cc
/* f0417a4: 8fab0278 */ lw $t3,0x278($sp)
/* f0417a8: 8d790018 */ lw $t9,0x18($t3)
/* f0417ac: 8faf01cc */ lw $t7,0x1cc($sp)
/* f0417b0: 01602825 */ move $a1,$t3
/* f0417b4: 332a0040 */ andi $t2,$t9,0x40
/* f0417b8: 11400045 */ beqz $t2,.PF0f0418d0
/* f0417bc: 24060002 */ li $a2,0x2
/* f0417c0: 0fc12b09 */ jal chrCompareTeams
/* f0417c4: 8de40004 */ lw $a0,0x4($t7)
/* f0417c8: 10400041 */ beqz $v0,.PF0f0418d0
.PF0f0417cc:
/* f0417cc: 2418ffff */ li $t8,-1
/* f0417d0: 240c00c8 */ li $t4,0xc8
/* f0417d4: afa00084 */ sw $zero,0x84($sp)
/* f0417d8: afa00080 */ sw $zero,0x80($sp)
/* f0417dc: afb8007c */ sw $t8,0x7c($sp)
/* f0417e0: afac0078 */ sw $t4,0x78($sp)
/* f0417e4: 0fc2c87a */ jal handGetDamage
/* f0417e8: 27a40260 */ addiu $a0,$sp,0x260
/* f0417ec: 8fa501cc */ lw $a1,0x1cc($sp)
/* f0417f0: e7a00074 */ swc1 $f0,0x74($sp)
/* f0417f4: 27a40260 */ addiu $a0,$sp,0x260
/* f0417f8: 8cad0004 */ lw $t5,0x4($a1)
/* f0417fc: 2406ffff */ li $a2,-1
/* f041800: 0fc2a079 */ jal func0f0a7d98
/* f041804: afad0070 */ sw $t5,0x70($sp)
/* f041808: 8fa40070 */ lw $a0,0x70($sp)
/* f04180c: 8c990020 */ lw $t9,0x20($a0)
/* f041810: 53200012 */ beqzl $t9,.PF0f04185c
/* f041814: 8fac0278 */ lw $t4,0x278($sp)
/* f041818: 0fc0d042 */ jal chrGetShield
/* f04181c: 00000000 */ nop
/* f041820: 44805000 */ mtc1 $zero,$f10
/* f041824: 8fa40070 */ lw $a0,0x70($sp)
/* f041828: 27a50228 */ addiu $a1,$sp,0x228
/* f04182c: 4600503c */ c.lt.s $f10,$f0
/* f041830: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f041834: 27a70084 */ addiu $a3,$sp,0x84
/* f041838: 27aa0078 */ addiu $t2,$sp,0x78
/* f04183c: 45000006 */ bc1f .PF0f041858
/* f041840: 27af0080 */ addiu $t7,$sp,0x80
/* f041844: 27ab007c */ addiu $t3,$sp,0x7c
/* f041848: afab0018 */ sw $t3,0x18($sp)
/* f04184c: afaa0010 */ sw $t2,0x10($sp)
/* f041850: 0fc1002c */ jal chrCalculateShieldHit
/* f041854: afaf0014 */ sw $t7,0x14($sp)
.PF0f041858:
/* f041858: 8fac0278 */ lw $t4,0x278($sp)
.PF0f04185c:
/* f04185c: 27b801e0 */ addiu $t8,$sp,0x1e0
/* f041860: 8fa40070 */ lw $a0,0x70($sp)
/* f041864: afb80010 */ sw $t8,0x10($sp)
/* f041868: 8fa501cc */ lw $a1,0x1cc($sp)
/* f04186c: 8fa60078 */ lw $a2,0x78($sp)
/* f041870: 27a70228 */ addiu $a3,$sp,0x228
/* f041874: 0fc097f2 */ jal chrEmitSparks
/* f041878: afac0014 */ sw $t4,0x14($sp)
/* f04187c: 8fad0278 */ lw $t5,0x278($sp)
/* f041880: 8faa01cc */ lw $t2,0x1cc($sp)
/* f041884: 8faf0084 */ lw $t7,0x84($sp)
/* f041888: 8dae001c */ lw $t6,0x1c($t5)
/* f04188c: 8fab0080 */ lw $t3,0x80($sp)
/* f041890: 8fb8007c */ lw $t8,0x7c($sp)
/* f041894: 241900c8 */ li $t9,0xc8
/* f041898: afb90014 */ sw $t9,0x14($sp)
/* f04189c: afa00028 */ sw $zero,0x28($sp)
/* f0418a0: 8fa40070 */ lw $a0,0x70($sp)
/* f0418a4: 8fa50074 */ lw $a1,0x74($sp)
/* f0418a8: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f0418ac: 27a70260 */ addiu $a3,$sp,0x260
/* f0418b0: afaa0018 */ sw $t2,0x18($sp)
/* f0418b4: afaf001c */ sw $t7,0x1c($sp)
/* f0418b8: afae0010 */ sw $t6,0x10($sp)
/* f0418bc: afab0020 */ sw $t3,0x20($sp)
/* f0418c0: 0fc0d0d1 */ jal func0f0341dc
/* f0418c4: afb80024 */ sw $t8,0x24($sp)
/* f0418c8: 1000006f */ b .PF0f041a88
/* f0418cc: 93ad0260 */ lbu $t5,0x260($sp)
.PF0f0418d0:
/* f0418d0: afa00250 */ sw $zero,0x250($sp)
/* f0418d4: 1000006b */ b .PF0f041a84
/* f0418d8: afa00268 */ sw $zero,0x268($sp)
/* f0418dc: 24010001 */ li $at,0x1
.PF0f0418e0:
/* f0418e0: 10410005 */ beq $v0,$at,.PF0f0418f8
/* f0418e4: 8fac01cc */ lw $t4,0x1cc($sp)
/* f0418e8: 24010004 */ li $at,0x4
/* f0418ec: 10410002 */ beq $v0,$at,.PF0f0418f8
/* f0418f0: 24010002 */ li $at,0x2
/* f0418f4: 14410063 */ bne $v0,$at,.PF0f041a84
.PF0f0418f8:
/* f0418f8: 3c19800a */ lui $t9,0x800a
/* f0418fc: 8f39a824 */ lw $t9,-0x57dc($t9)
/* f041900: 8d8d0004 */ lw $t5,0x4($t4)
/* f041904: 240effff */ li $t6,-1
/* f041908: afae0068 */ sw $t6,0x68($sp)
/* f04190c: 13200004 */ beqz $t9,.PF0f041920
/* f041910: afad006c */ sw $t5,0x6c($sp)
/* f041914: 0fc63831 */ jal mpPlayerGetIndex
/* f041918: 8fa40278 */ lw $a0,0x278($sp)
/* f04191c: afa20068 */ sw $v0,0x68($sp)
.PF0f041920:
/* f041920: 27a40260 */ addiu $a0,$sp,0x260
/* f041924: 8fa501cc */ lw $a1,0x1cc($sp)
/* f041928: 0fc2a079 */ jal func0f0a7d98
/* f04192c: 2406ffff */ li $a2,-1
/* f041930: 27a40244 */ addiu $a0,$sp,0x244
/* f041934: 27a50234 */ addiu $a1,$sp,0x234
/* f041938: 27a60228 */ addiu $a2,$sp,0x228
/* f04193c: 0fc19841 */ jal func0f065e74
/* f041940: 27a70214 */ addiu $a3,$sp,0x214
/* f041944: 240a0001 */ li $t2,0x1
/* f041948: afaa0210 */ sw $t2,0x210($sp)
/* f04194c: 0fc4fc06 */ jal chrIsUsingPaintball
/* f041950: 8fa40278 */ lw $a0,0x278($sp)
/* f041954: 1040000b */ beqz $v0,.PF0f041984
/* f041958: 87a40214 */ lh $a0,0x214($sp)
/* f04195c: 240f0019 */ li $t7,0x19
/* f041960: afaf0014 */ sw $t7,0x14($sp)
/* f041964: 87a40214 */ lh $a0,0x214($sp)
/* f041968: 8fa501cc */ lw $a1,0x1cc($sp)
/* f04196c: 27a60228 */ addiu $a2,$sp,0x228
/* f041970: 00003825 */ move $a3,$zero
/* f041974: 0fc4c159 */ jal sparksCreate
/* f041978: afa00010 */ sw $zero,0x10($sp)
/* f04197c: 10000007 */ b .PF0f04199c
/* f041980: 00000000 */ nop
.PF0f041984:
/* f041984: 8fa501cc */ lw $a1,0x1cc($sp)
/* f041988: 27a60228 */ addiu $a2,$sp,0x228
/* f04198c: 00003825 */ move $a3,$zero
/* f041990: afa00010 */ sw $zero,0x10($sp)
/* f041994: 0fc4c159 */ jal sparksCreate
/* f041998: afa00014 */ sw $zero,0x14($sp)
.PF0f04199c:
/* f04199c: 3c0b800a */ lui $t3,0x800a
/* f0419a0: 8178e58b */ lb $t8,-0x1a75($t3)
/* f0419a4: 8fac0278 */ lw $t4,0x278($sp)
/* f0419a8: 0701000a */ bgez $t8,.PF0f0419d4
/* f0419ac: 00000000 */ nop
/* f0419b0: 918d0125 */ lbu $t5,0x125($t4)
/* f0419b4: 24010010 */ li $at,0x10
/* f0419b8: 8fae006c */ lw $t6,0x6c($sp)
/* f0419bc: 15a10005 */ bne $t5,$at,.PF0f0419d4
/* f0419c0: 00000000 */ nop
/* f0419c4: 8dd9000c */ lw $t9,0xc($t6)
/* f0419c8: 332a0001 */ andi $t2,$t9,0x1
/* f0419cc: 5540002e */ bnezl $t2,.PF0f041a88
/* f0419d0: 93ad0260 */ lbu $t5,0x260($sp)
.PF0f0419d4:
/* f0419d4: 0fc2c87a */ jal handGetDamage
/* f0419d8: 27a40260 */ addiu $a0,$sp,0x260
/* f0419dc: 8faf0068 */ lw $t7,0x68($sp)
/* f0419e0: 44050000 */ mfc1 $a1,$f0
/* f0419e4: 8fa4006c */ lw $a0,0x6c($sp)
/* f0419e8: 27a60228 */ addiu $a2,$sp,0x228
/* f0419ec: 93a70260 */ lbu $a3,0x260($sp)
/* f0419f0: 0fc21530 */ jal func0f085270
/* f0419f4: afaf0010 */ sw $t7,0x10($sp)
/* f0419f8: 10000023 */ b .PF0f041a88
/* f0419fc: 93ad0260 */ lbu $t5,0x260($sp)
.PF0f041a00:
/* f041a00: 11600020 */ beqz $t3,.PF0f041a84
/* f041a04: 27a40244 */ addiu $a0,$sp,0x244
/* f041a08: 27a50234 */ addiu $a1,$sp,0x234
/* f041a0c: 27a60228 */ addiu $a2,$sp,0x228
/* f041a10: 0fc19841 */ jal func0f065e74
/* f041a14: 27a70214 */ addiu $a3,$sp,0x214
/* f041a18: 24180001 */ li $t8,0x1
/* f041a1c: afb80210 */ sw $t8,0x210($sp)
/* f041a20: 27a40260 */ addiu $a0,$sp,0x260
/* f041a24: 27a50228 */ addiu $a1,$sp,0x228
/* f041a28: 2406ffff */ li $a2,-1
/* f041a2c: 0fc2a245 */ jal func0f0a84c8
/* f041a30: 27a70214 */ addiu $a3,$sp,0x214
/* f041a34: 0fc4fc06 */ jal chrIsUsingPaintball
/* f041a38: 8fa40278 */ lw $a0,0x278($sp)
/* f041a3c: 1040000b */ beqz $v0,.PF0f041a6c
/* f041a40: 87a40214 */ lh $a0,0x214($sp)
/* f041a44: 240c0019 */ li $t4,0x19
/* f041a48: afac0014 */ sw $t4,0x14($sp)
/* f041a4c: 87a40214 */ lh $a0,0x214($sp)
/* f041a50: 00002825 */ move $a1,$zero
/* f041a54: 27a60228 */ addiu $a2,$sp,0x228
/* f041a58: 00003825 */ move $a3,$zero
/* f041a5c: 0fc4c159 */ jal sparksCreate
/* f041a60: afa00010 */ sw $zero,0x10($sp)
/* f041a64: 10000008 */ b .PF0f041a88
/* f041a68: 93ad0260 */ lbu $t5,0x260($sp)
.PF0f041a6c:
/* f041a6c: 00002825 */ move $a1,$zero
/* f041a70: 27a60228 */ addiu $a2,$sp,0x228
/* f041a74: 00003825 */ move $a3,$zero
/* f041a78: afa00010 */ sw $zero,0x10($sp)
/* f041a7c: 0fc4c159 */ jal sparksCreate
/* f041a80: afa00014 */ sw $zero,0x14($sp)
.PF0f041a84:
/* f041a84: 93ad0260 */ lbu $t5,0x260($sp)
.PF0f041a88:
/* f041a88: 24010007 */ li $at,0x7
/* f041a8c: 93ae0263 */ lbu $t6,0x263($sp)
/* f041a90: 15a1001b */ bne $t5,$at,.PF0f041b00
/* f041a94: 24010001 */ li $at,0x1
/* f041a98: 15c10019 */ bne $t6,$at,.PF0f041b00
/* f041a9c: 8fb90278 */ lw $t9,0x278($sp)
/* f041aa0: 8f2a02d4 */ lw $t2,0x2d4($t9)
/* f041aa4: 3c03800a */ lui $v1,0x800a
/* f041aa8: 11400005 */ beqz $t2,.PF0f041ac0
/* f041aac: 00000000 */ nop
/* f041ab0: 0fc63831 */ jal mpPlayerGetIndex
/* f041ab4: 03202025 */ move $a0,$t9
/* f041ab8: 10000002 */ b .PF0f041ac4
/* f041abc: 00401825 */ move $v1,$v0
.PF0f041ac0:
/* f041ac0: 8c63a79c */ lw $v1,-0x5864($v1)
.PF0f041ac4:
/* f041ac4: 8faf0210 */ lw $t7,0x210($sp)
/* f041ac8: 27a40244 */ addiu $a0,$sp,0x244
/* f041acc: 27a50234 */ addiu $a1,$sp,0x234
/* f041ad0: 15e00005 */ bnez $t7,.PF0f041ae8
/* f041ad4: 27a60228 */ addiu $a2,$sp,0x228
/* f041ad8: 27a70214 */ addiu $a3,$sp,0x214
/* f041adc: 0fc19841 */ jal func0f065e74
/* f041ae0: afa30064 */ sw $v1,0x64($sp)
/* f041ae4: 8fa30064 */ lw $v1,0x64($sp)
.PF0f041ae8:
/* f041ae8: 00002025 */ move $a0,$zero
/* f041aec: 27a50228 */ addiu $a1,$sp,0x228
/* f041af0: 27a60214 */ addiu $a2,$sp,0x214
/* f041af4: 24070016 */ li $a3,0x16
/* f041af8: 0fc4a8f4 */ jal explosionCreateSimple
/* f041afc: afa30010 */ sw $v1,0x10($sp)
.PF0f041b00:
/* f041b00: 8fab01c0 */ lw $t3,0x1c0($sp)
.PF0f041b04:
/* f041b04: 8fa4025c */ lw $a0,0x25c($sp)
/* f041b08: 51600004 */ beqzl $t3,.PF0f041b1c
/* f041b0c: 8fa80268 */ lw $t0,0x268($sp)
/* f041b10: 0fc19102 */ jal propSetCollisionsEnabled
/* f041b14: 00002825 */ move $a1,$zero
/* f041b18: 8fa80268 */ lw $t0,0x268($sp)
.PF0f041b1c:
/* f041b1c: 8fac0250 */ lw $t4,0x250($sp)
/* f041b20: 93ad0260 */ lbu $t5,0x260($sp)
/* f041b24: 0008c02b */ sltu $t8,$zero,$t0
/* f041b28: 1180000e */ beqz $t4,.PF0f041b64
/* f041b2c: 03004025 */ move $t0,$t8
/* f041b30: 25aefffe */ addiu $t6,$t5,-2
/* f041b34: 2dc1002a */ sltiu $at,$t6,0x2a
/* f041b38: 10200009 */ beqz $at,.PF0f041b60
/* f041b3c: 000e7080 */ sll $t6,$t6,0x2
/* f041b40: 3c017f1b */ lui $at,0x7f1b
/* f041b44: 002e0821 */ addu $at,$at,$t6
/* f041b48: 8c2ea344 */ lw $t6,-0x5cbc($at)
/* f041b4c: 01c00008 */ jr $t6
/* f041b50: 00000000 */ nop
/* f041b54: 240a0001 */ li $t2,0x1
/* f041b58: 10000002 */ b .PF0f041b64
/* f041b5c: afaa0250 */ sw $t2,0x250($sp)
.PF0f041b60:
/* f041b60: afa00250 */ sw $zero,0x250($sp)
.PF0f041b64:
/* f041b64: 11000004 */ beqz $t0,.PF0f041b78
/* f041b68: 01003825 */ move $a3,$t0
/* f041b6c: 8fa70250 */ lw $a3,0x250($sp)
/* f041b70: 0007c82b */ sltu $t9,$zero,$a3
/* f041b74: 03203825 */ move $a3,$t9
.PF0f041b78:
/* f041b78: 27af0244 */ addiu $t7,$sp,0x244
/* f041b7c: 27ab0228 */ addiu $t3,$sp,0x228
/* f041b80: afab0014 */ sw $t3,0x14($sp)
/* f041b84: afaf0010 */ sw $t7,0x10($sp)
/* f041b88: 8fa40278 */ lw $a0,0x278($sp)
/* f041b8c: 8fa5027c */ lw $a1,0x27c($sp)
/* f041b90: 8fa60268 */ lw $a2,0x268($sp)
/* f041b94: 0fc0f908 */ jal func0f03e29c
/* f041b98: afa80054 */ sw $t0,0x54($sp)
/* f041b9c: 93b8026f */ lbu $t8,0x26f($sp)
/* f041ba0: 8fa80054 */ lw $t0,0x54($sp)
/* f041ba4: 8fa40278 */ lw $a0,0x278($sp)
/* f041ba8: 13000015 */ beqz $t8,.PF0f041c00
/* f041bac: 8fa5027c */ lw $a1,0x27c($sp)
/* f041bb0: 1100000a */ beqz $t0,.PF0f041bdc
/* f041bb4: 01003025 */ move $a2,$t0
/* f041bb8: 8fac0278 */ lw $t4,0x278($sp)
/* f041bbc: 8fae027c */ lw $t6,0x27c($sp)
/* f041bc0: 8d8d02d4 */ lw $t5,0x2d4($t4)
/* f041bc4: 000e5080 */ sll $t2,$t6,0x2
/* f041bc8: 01aa1021 */ addu $v0,$t5,$t2
/* f041bcc: 8c430024 */ lw $v1,0x24($v0)
/* f041bd0: 18600002 */ blez $v1,.PF0f041bdc
/* f041bd4: 2479ffff */ addiu $t9,$v1,-1
/* f041bd8: ac590024 */ sw $t9,0x24($v0)
.PF0f041bdc:
/* f041bdc: 11000004 */ beqz $t0,.PF0f041bf0
/* f041be0: 8fa40278 */ lw $a0,0x278($sp)
/* f041be4: 93a6026e */ lbu $a2,0x26e($sp)
/* f041be8: 0006782b */ sltu $t7,$zero,$a2
/* f041bec: 01e03025 */ move $a2,$t7
.PF0f041bf0:
/* f041bf0: 0fc0fe73 */ jal chrSetFiring
/* f041bf4: 8fa5027c */ lw $a1,0x27c($sp)
/* f041bf8: 10000004 */ b .PF0f041c0c
/* f041bfc: 8fbf0044 */ lw $ra,0x44($sp)
.PF0f041c00:
/* f041c00: 0fc0fe73 */ jal chrSetFiring
/* f041c04: 8fa60268 */ lw $a2,0x268($sp)
/* f041c08: 8fbf0044 */ lw $ra,0x44($sp)
.PF0f041c0c:
/* f041c0c: 27bd0278 */ addiu $sp,$sp,0x278
/* f041c10: 03e00008 */ jr $ra
/* f041c14: 00000000 */ nop
);
#elif VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f0404d4
.late_rodata
glabel var7f1a90c8
.word 0x3d638e39
glabel var7f1a90cc
.word 0x481c4000
glabel var7f1a90d0
.word 0x3fd55555
glabel var7f1a90d4
.word 0x3fd55555
glabel var7f1a90d8
.word 0x3fd55555
glabel var7f1a90dc
.word 0x461c4000
glabel var7f1a90e0
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90e4
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90e8
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90ec
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90f0
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90f4
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90f8
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a90fc
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9100
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9104
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9108
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a910c
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9110
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9114
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9118
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a911c
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9120
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9124
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9128
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a912c
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9130
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9134
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9138
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a913c
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9140
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9144
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9148
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a914c
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9150
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9154
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9158
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a915c
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9160
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9164
.word func0f0404d4+0x14e8 # f0419bc
glabel var7f1a9168
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a916c
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9170
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9174
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9178
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a917c
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9180
.word func0f0404d4+0x14dc # f0419b0
glabel var7f1a9184
.word func0f0404d4+0x14dc # f0419b0
.text
/* f0404d4: 27bdfd88 */ addiu $sp,$sp,-632
/* f0404d8: afbf0044 */ sw $ra,0x44($sp)
/* f0404dc: afa5027c */ sw $a1,0x27c($sp)
/* f0404e0: 8c8e001c */ lw $t6,0x1c($a0)
/* f0404e4: 240f0001 */ addiu $t7,$zero,0x1
/* f0404e8: a3af026e */ sb $t7,0x26e($sp)
/* f0404ec: afae0274 */ sw $t6,0x274($sp)
/* f0404f0: 8c9802d4 */ lw $t8,0x2d4($a0)
/* f0404f4: 00001025 */ or $v0,$zero,$zero
/* f0404f8: 8fa5027c */ lw $a1,0x27c($sp)
/* f0404fc: 53000003 */ beqzl $t8,.L0f04050c
/* f040500: a3a2026f */ sb $v0,0x26f($sp)
/* f040504: 24020001 */ addiu $v0,$zero,0x1
/* f040508: a3a2026f */ sb $v0,0x26f($sp)
.L0f04050c:
/* f04050c: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f040510: afa40278 */ sw $a0,0x278($sp)
/* f040514: 50400554 */ beqzl $v0,.L0f041a68
/* f040518: 8fbf0044 */ lw $ra,0x44($sp)
/* f04051c: afa00268 */ sw $zero,0x268($sp)
/* f040520: 8c590004 */ lw $t9,0x4($v0)
/* f040524: 8fa40278 */ lw $a0,0x278($sp)
/* f040528: 0fc0a221 */ jal chrGetTargetProp
/* f04052c: afb90264 */ sw $t9,0x264($sp)
/* f040530: 8fab0264 */ lw $t3,0x264($sp)
/* f040534: afa2025c */ sw $v0,0x25c($sp)
/* f040538: 8fa70278 */ lw $a3,0x278($sp)
/* f04053c: 8961005c */ lwl $at,0x5c($t3)
/* f040540: 9961005f */ lwr $at,0x5f($t3)
/* f040544: 27aa0260 */ addiu $t2,$sp,0x260
/* f040548: 24080200 */ addiu $t0,$zero,0x200
/* f04054c: ad410000 */ sw $at,0x0($t2)
/* f040550: 80e30007 */ lb $v1,0x7($a3)
/* f040554: 24010008 */ addiu $at,$zero,0x8
/* f040558: 10610007 */ beq $v1,$at,.L0f040578
/* f04055c: 2401001b */ addiu $at,$zero,0x1b
/* f040560: 10610005 */ beq $v1,$at,.L0f040578
/* f040564: 2401001c */ addiu $at,$zero,0x1c
/* f040568: 10610003 */ beq $v1,$at,.L0f040578
/* f04056c: 2401001d */ addiu $at,$zero,0x1d
/* f040570: 54610003 */ bnel $v1,$at,.L0f040580
/* f040574: afa00250 */ sw $zero,0x250($sp)
.L0f040578:
/* f040578: 8ce8004c */ lw $t0,0x4c($a3)
/* f04057c: afa00250 */ sw $zero,0x250($sp)
.L0f040580:
/* f040580: afa00224 */ sw $zero,0x224($sp)
/* f040584: afa00210 */ sw $zero,0x210($sp)
/* f040588: 93a40260 */ lbu $a0,0x260($sp)
/* f04058c: 93a50263 */ lbu $a1,0x263($sp)
/* f040590: afa00254 */ sw $zero,0x254($sp)
/* f040594: 0fc2c7ba */ jal weaponGetNumTicksPerShot
/* f040598: afa80258 */ sw $t0,0x258($sp)
/* f04059c: 8fa60254 */ lw $a2,0x254($sp)
/* f0405a0: 1c400005 */ bgtz $v0,.L0f0405b8
/* f0405a4: 00402025 */ or $a0,$v0,$zero
/* f0405a8: 240f0001 */ addiu $t7,$zero,0x1
/* f0405ac: 24060001 */ addiu $a2,$zero,0x1
/* f0405b0: 10000055 */ b .L0f040708
/* f0405b4: afaf0250 */ sw $t7,0x250($sp)
.L0f0405b8:
/* f0405b8: 8fb80278 */ lw $t8,0x278($sp)
/* f0405bc: 8f0302d4 */ lw $v1,0x2d4($t8)
/* f0405c0: 5060001d */ beqzl $v1,.L0f040638
/* f0405c4: 8faa0278 */ lw $t2,0x278($sp)
/* f0405c8: 8c790020 */ lw $t9,0x20($v1)
/* f0405cc: 24010014 */ addiu $at,$zero,0x14
/* f0405d0: 57210019 */ bnel $t9,$at,.L0f040638
/* f0405d4: 8faa0278 */ lw $t2,0x278($sp)
/* f0405d8: 8c6d004c */ lw $t5,0x4c($v1)
/* f0405dc: 8fab027c */ lw $t3,0x27c($sp)
/* f0405e0: 000d5080 */ sll $t2,$t5,0x2
/* f0405e4: 05400013 */ bltz $t2,.L0f040634
/* f0405e8: 000b7040 */ sll $t6,$t3,0x1
/* f0405ec: 006e7821 */ addu $t7,$v1,$t6
/* f0405f0: 85f800e0 */ lh $t8,0xe0($t7)
/* f0405f4: 2419005a */ addiu $t9,$zero,0x5a
/* f0405f8: 3c017f1b */ lui $at,%hi(var7f1a90c8)
/* f0405fc: 03386823 */ subu $t5,$t9,$t8
/* f040600: 448d2000 */ mtc1 $t5,$f4
/* f040604: c42890c8 */ lwc1 $f8,%lo(var7f1a90c8)($at)
/* f040608: 44825000 */ mtc1 $v0,$f10
/* f04060c: 468021a0 */ cvt.s.w $f6,$f4
/* f040610: 3c013f80 */ lui $at,0x3f80
/* f040614: 44819000 */ mtc1 $at,$f18
/* f040618: 46805420 */ cvt.s.w $f16,$f10
/* f04061c: 46083002 */ mul.s $f0,$f6,$f8
/* f040620: 46009100 */ add.s $f4,$f18,$f0
/* f040624: 46048182 */ mul.s $f6,$f16,$f4
/* f040628: 4600320d */ trunc.w.s $f8,$f6
/* f04062c: 44044000 */ mfc1 $a0,$f8
/* f040630: 00000000 */ nop
.L0f040634:
/* f040634: 8faa0278 */ lw $t2,0x278($sp)
.L0f040638:
/* f040638: 8fab027c */ lw $t3,0x27c($sp)
/* f04063c: 3c0f800a */ lui $t7,%hi(g_Vars+0x38)
/* f040640: 8def9ff8 */ lw $t7,%lo(g_Vars+0x38)($t7)
/* f040644: 014b1821 */ addu $v1,$t2,$t3
/* f040648: 906e0004 */ lbu $t6,0x4($v1)
/* f04064c: 01cfc821 */ addu $t9,$t6,$t7
/* f040650: 333800ff */ andi $t8,$t9,0xff
/* f040654: 0304082a */ slt $at,$t8,$a0
/* f040658: 1420002b */ bnez $at,.L0f040708
/* f04065c: a0790004 */ sb $t9,0x4($v1)
/* f040660: a0600004 */ sb $zero,0x4($v1)
/* f040664: 8faa0278 */ lw $t2,0x278($sp)
/* f040668: 8fad027c */ lw $t5,0x27c($sp)
/* f04066c: 240c0001 */ addiu $t4,$zero,0x1
/* f040670: 8d4b032c */ lw $t3,0x32c($t2)
/* f040674: 01ac1004 */ sllv $v0,$t4,$t5
/* f040678: 24060001 */ addiu $a2,$zero,0x1
/* f04067c: 000b7300 */ sll $t6,$t3,0xc
/* f040680: 914b032d */ lbu $t3,0x32d($t2)
/* f040684: 000e7f82 */ srl $t7,$t6,0x1e
/* f040688: 01e2c026 */ xor $t8,$t7,$v0
/* f04068c: 00186080 */ sll $t4,$t8,0x2
/* f040690: 318d000c */ andi $t5,$t4,0xc
/* f040694: 316efff3 */ andi $t6,$t3,0xfff3
/* f040698: 01ae7825 */ or $t7,$t5,$t6
/* f04069c: a14f032d */ sb $t7,0x32d($t2)
/* f0406a0: 8d59032c */ lw $t9,0x32c($t2)
/* f0406a4: 93ad0260 */ lbu $t5,0x260($sp)
/* f0406a8: 2401001d */ addiu $at,$zero,0x1d
/* f0406ac: 0019c300 */ sll $t8,$t9,0xc
/* f0406b0: 00186782 */ srl $t4,$t8,0x1e
/* f0406b4: 01825824 */ and $t3,$t4,$v0
/* f0406b8: 15600003 */ bnez $t3,.L0f0406c8
/* f0406bc: 240e0001 */ addiu $t6,$zero,0x1
/* f0406c0: 55a10003 */ bnel $t5,$at,.L0f0406d0
/* f0406c4: 8faf0278 */ lw $t7,0x278($sp)
.L0f0406c8:
/* f0406c8: afae0250 */ sw $t6,0x250($sp)
/* f0406cc: 8faf0278 */ lw $t7,0x278($sp)
.L0f0406d0:
/* f0406d0: 24010008 */ addiu $at,$zero,0x8
/* f0406d4: 81ea0007 */ lb $t2,0x7($t7)
/* f0406d8: 1541000b */ bne $t2,$at,.L0f040708
/* f0406dc: 00000000 */ nop
/* f0406e0: 8de40020 */ lw $a0,0x20($t7)
/* f0406e4: 0c00744f */ jal modelGetAnimNum
/* f0406e8: afa60254 */ sw $a2,0x254($sp)
/* f0406ec: 2401026a */ addiu $at,$zero,0x26a
/* f0406f0: 14410005 */ bne $v0,$at,.L0f040708
/* f0406f4: 8fa60254 */ lw $a2,0x254($sp)
/* f0406f8: 8fb90278 */ lw $t9,0x278($sp)
/* f0406fc: 83380033 */ lb $t8,0x33($t9)
/* f040700: 270c0001 */ addiu $t4,$t8,0x1
/* f040704: a32c0033 */ sb $t4,0x33($t9)
.L0f040708:
/* f040708: 50c0049b */ beqzl $a2,.L0f041978
/* f04070c: 8fa80268 */ lw $t0,0x268($sp)
/* f040710: 0fc0f97c */ jal chrGetAimAngle
/* f040714: 8fa40278 */ lw $a0,0x278($sp)
/* f040718: e7a00204 */ swc1 $f0,0x204($sp)
/* f04071c: 0fc0f9d5 */ jal func0f03e754
/* f040720: 8fa40278 */ lw $a0,0x278($sp)
/* f040724: 93ab026f */ lbu $t3,0x26f($sp)
/* f040728: e7a00200 */ swc1 $f0,0x200($sp)
/* f04072c: 240e0001 */ addiu $t6,$zero,0x1
/* f040730: 11600004 */ beqz $t3,.L0f040744
/* f040734: 27a60244 */ addiu $a2,$sp,0x244
/* f040738: 240d0004 */ addiu $t5,$zero,0x4
/* f04073c: 10000002 */ b .L0f040748
/* f040740: afad01fc */ sw $t5,0x1fc($sp)
.L0f040744:
/* f040744: afa001fc */ sw $zero,0x1fc($sp)
.L0f040748:
/* f040748: afae0268 */ sw $t6,0x268($sp)
/* f04074c: 8fa40278 */ lw $a0,0x278($sp)
/* f040750: 0fc0ff79 */ jal func0f03fde4
/* f040754: 8fa5027c */ lw $a1,0x27c($sp)
/* f040758: 54400032 */ bnezl $v0,.L0f040824
/* f04075c: 8fa40278 */ lw $a0,0x278($sp)
/* f040760: 8fa20274 */ lw $v0,0x274($sp)
/* f040764: 3c0141f0 */ lui $at,0x41f0
/* f040768: 44818000 */ mtc1 $at,$f16
/* f04076c: c44a0008 */ lwc1 $f10,0x8($v0)
/* f040770: 8faa027c */ lw $t2,0x27c($sp)
/* f040774: 24010001 */ addiu $at,$zero,0x1
/* f040778: e7aa0244 */ swc1 $f10,0x244($sp)
/* f04077c: c452000c */ lwc1 $f18,0xc($v0)
/* f040780: 46109100 */ add.s $f4,$f18,$f16
/* f040784: e7a40248 */ swc1 $f4,0x248($sp)
/* f040788: c4460010 */ lwc1 $f6,0x10($v0)
/* f04078c: 15410013 */ bne $t2,$at,.L0f0407dc
/* f040790: e7a6024c */ swc1 $f6,0x24c($sp)
/* f040794: 0c0068f4 */ jal cosf
/* f040798: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f04079c: 3c014120 */ lui $at,0x4120
/* f0407a0: 44815000 */ mtc1 $at,$f10
/* f0407a4: c7a80244 */ lwc1 $f8,0x244($sp)
/* f0407a8: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f0407ac: 460a0482 */ mul.s $f18,$f0,$f10
/* f0407b0: 46124400 */ add.s $f16,$f8,$f18
/* f0407b4: 0c0068f7 */ jal sinf
/* f0407b8: e7b00244 */ swc1 $f16,0x244($sp)
/* f0407bc: 3c014120 */ lui $at,0x4120
/* f0407c0: 44813000 */ mtc1 $at,$f6
/* f0407c4: 46000107 */ neg.s $f4,$f0
/* f0407c8: c7a8024c */ lwc1 $f8,0x24c($sp)
/* f0407cc: 46062282 */ mul.s $f10,$f4,$f6
/* f0407d0: 460a4480 */ add.s $f18,$f8,$f10
/* f0407d4: 10000012 */ b .L0f040820
/* f0407d8: e7b2024c */ swc1 $f18,0x24c($sp)
.L0f0407dc:
/* f0407dc: 0c0068f4 */ jal cosf
/* f0407e0: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f0407e4: 3c014120 */ lui $at,0x4120
/* f0407e8: 44812000 */ mtc1 $at,$f4
/* f0407ec: 46000407 */ neg.s $f16,$f0
/* f0407f0: c7a80244 */ lwc1 $f8,0x244($sp)
/* f0407f4: 46048182 */ mul.s $f6,$f16,$f4
/* f0407f8: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f0407fc: 46064280 */ add.s $f10,$f8,$f6
/* f040800: 0c0068f7 */ jal sinf
/* f040804: e7aa0244 */ swc1 $f10,0x244($sp)
/* f040808: 3c014120 */ lui $at,0x4120
/* f04080c: 44818000 */ mtc1 $at,$f16
/* f040810: c7b2024c */ lwc1 $f18,0x24c($sp)
/* f040814: 46100102 */ mul.s $f4,$f0,$f16
/* f040818: 46049200 */ add.s $f8,$f18,$f4
/* f04081c: e7a8024c */ swc1 $f8,0x24c($sp)
.L0f040820:
/* f040820: 8fa40278 */ lw $a0,0x278($sp)
.L0f040824:
/* f040824: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f040828: 00002825 */ or $a1,$zero,$zero
/* f04082c: 8fb801fc */ lw $t8,0x1fc($sp)
/* f040830: 8faf0274 */ lw $t7,0x274($sp)
/* f040834: 24190010 */ addiu $t9,$zero,0x10
/* f040838: 370c082a */ ori $t4,$t8,0x82a
/* f04083c: afac0010 */ sw $t4,0x10($sp)
/* f040840: afb90014 */ sw $t9,0x14($sp)
/* f040844: 27a60244 */ addiu $a2,$sp,0x244
/* f040848: 27a70234 */ addiu $a3,$sp,0x234
/* f04084c: 25e40008 */ addiu $a0,$t7,0x8
/* f040850: 0c00b78d */ jal func0002de34
/* f040854: 25e50028 */ addiu $a1,$t7,0x28
/* f040858: 14400002 */ bnez $v0,.L0f040864
/* f04085c: 24050001 */ addiu $a1,$zero,0x1
/* f040860: afa00268 */ sw $zero,0x268($sp)
.L0f040864:
/* f040864: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f040868: 8fa40278 */ lw $a0,0x278($sp)
/* f04086c: 8fab0268 */ lw $t3,0x268($sp)
/* f040870: 240d0001 */ addiu $t5,$zero,0x1
/* f040874: 51600440 */ beqzl $t3,.L0f041978
/* f040878: 8fa80268 */ lw $t0,0x268($sp)
/* f04087c: 93ae026f */ lbu $t6,0x26f($sp)
/* f040880: afa001f8 */ sw $zero,0x1f8($sp)
/* f040884: afa001f4 */ sw $zero,0x1f4($sp)
/* f040888: afad01f0 */ sw $t5,0x1f0($sp)
/* f04088c: 11c00004 */ beqz $t6,.L0f0408a0
/* f040890: afa001cc */ sw $zero,0x1cc($sp)
/* f040894: 240a083f */ addiu $t2,$zero,0x83f
/* f040898: 10000003 */ b .L0f0408a8
/* f04089c: afaa01c8 */ sw $t2,0x1c8($sp)
.L0f0408a0:
/* f0408a0: 240f083b */ addiu $t7,$zero,0x83b
/* f0408a4: afaf01c8 */ sw $t7,0x1c8($sp)
.L0f0408a8:
/* f0408a8: 8fa7025c */ lw $a3,0x25c($sp)
/* f0408ac: 8ce20004 */ lw $v0,0x4($a3)
/* f0408b0: 50400004 */ beqzl $v0,.L0f0408c4
/* f0408b4: 00004825 */ or $t1,$zero,$zero
/* f0408b8: 10000002 */ b .L0f0408c4
/* f0408bc: 904902fe */ lbu $t1,0x2fe($v0)
/* f0408c0: 00004825 */ or $t1,$zero,$zero
.L0f0408c4:
/* f0408c4: 39220003 */ xori $v0,$t1,0x3
/* f0408c8: 2c420001 */ sltiu $v0,$v0,0x1
/* f0408cc: 1040000f */ beqz $v0,.L0f04090c
/* f0408d0: 00401825 */ or $v1,$v0,$zero
/* f0408d4: afa2005c */ sw $v0,0x5c($sp)
/* f0408d8: 0fc12472 */ jal chrGetDistanceToTarget
/* f0408dc: 8fa40278 */ lw $a0,0x278($sp)
/* f0408e0: 3c014316 */ lui $at,0x4316
/* f0408e4: 44813000 */ mtc1 $at,$f6
/* f0408e8: 0000c025 */ or $t8,$zero,$zero
/* f0408ec: 4600303c */ c.lt.s $f6,$f0
/* f0408f0: 00000000 */ nop
/* f0408f4: 45020003 */ bc1fl .L0f040904
/* f0408f8: afb8005c */ sw $t8,0x5c($sp)
/* f0408fc: 24180001 */ addiu $t8,$zero,0x1
/* f040900: afb8005c */ sw $t8,0x5c($sp)
.L0f040904:
/* f040904: 8fa7025c */ lw $a3,0x25c($sp)
/* f040908: 03001825 */ or $v1,$t8,$zero
.L0f04090c:
/* f04090c: afa301c0 */ sw $v1,0x1c0($sp)
/* f040910: 10600016 */ beqz $v1,.L0f04096c
/* f040914: afa001bc */ sw $zero,0x1bc($sp)
/* f040918: c4ea0008 */ lwc1 $f10,0x8($a3)
/* f04091c: c7b00244 */ lwc1 $f16,0x244($sp)
/* f040920: c7a80248 */ lwc1 $f8,0x248($sp)
/* f040924: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f040928: 46105481 */ sub.s $f18,$f10,$f16
/* f04092c: c7b0024c */ lwc1 $f16,0x24c($sp)
/* f040930: 27a501e4 */ addiu $a1,$sp,0x1e4
/* f040934: 27a601e8 */ addiu $a2,$sp,0x1e8
/* f040938: e7b201e0 */ swc1 $f18,0x1e0($sp)
/* f04093c: c4e4000c */ lwc1 $f4,0xc($a3)
/* f040940: 46082181 */ sub.s $f6,$f4,$f8
/* f040944: e7a601e4 */ swc1 $f6,0x1e4($sp)
/* f040948: c4ea0010 */ lwc1 $f10,0x10($a3)
/* f04094c: 46105481 */ sub.s $f18,$f10,$f16
/* f040950: 0c0011e4 */ jal guNormalize
/* f040954: e7b201e8 */ swc1 $f18,0x1e8($sp)
/* f040958: 8fa4025c */ lw $a0,0x25c($sp)
/* f04095c: 0fc1905e */ jal propSetCollisionsEnabled
/* f040960: 24050001 */ addiu $a1,$zero,0x1
/* f040964: 1000002f */ b .L0f040a24
/* f040968: 8fab0278 */ lw $t3,0x278($sp)
.L0f04096c:
/* f04096c: 0c0068f4 */ jal cosf
/* f040970: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040974: e7a00060 */ swc1 $f0,0x60($sp)
/* f040978: 0c0068f7 */ jal sinf
/* f04097c: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040980: c7a40060 */ lwc1 $f4,0x60($sp)
/* f040984: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040988: 46040202 */ mul.s $f8,$f0,$f4
/* f04098c: 0c0068f7 */ jal sinf
/* f040990: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f040994: e7a001e4 */ swc1 $f0,0x1e4($sp)
/* f040998: 0c0068f4 */ jal cosf
/* f04099c: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f0409a0: e7a00060 */ swc1 $f0,0x60($sp)
/* f0409a4: 0c0068f4 */ jal cosf
/* f0409a8: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f0409ac: c7a60060 */ lwc1 $f6,0x60($sp)
/* f0409b0: 93ac026f */ lbu $t4,0x26f($sp)
/* f0409b4: 46060282 */ mul.s $f10,$f0,$f6
/* f0409b8: 11800019 */ beqz $t4,.L0f040a20
/* f0409bc: e7aa01e8 */ swc1 $f10,0x1e8($sp)
/* f0409c0: 0fc644fe */ jal chrGuessCrouchPos
/* f0409c4: 8fa40278 */ lw $a0,0x278($sp)
/* f0409c8: 8fb90278 */ lw $t9,0x278($sp)
/* f0409cc: 00404825 */ or $t1,$v0,$zero
/* f0409d0: 8fae0278 */ lw $t6,0x278($sp)
/* f0409d4: 8f280170 */ lw $t0,0x170($t9)
/* f0409d8: 0008582b */ sltu $t3,$zero,$t0
/* f0409dc: 11600004 */ beqz $t3,.L0f0409f0
/* f0409e0: 01604025 */ or $t0,$t3,$zero
/* f0409e4: 8f280174 */ lw $t0,0x174($t9)
/* f0409e8: 0008682b */ sltu $t5,$zero,$t0
/* f0409ec: 01a04025 */ or $t0,$t5,$zero
.L0f0409f0:
/* f0409f0: 8dc302d4 */ lw $v1,0x2d4($t6)
/* f0409f4: 8fb8027c */ lw $t8,0x27c($sp)
/* f0409f8: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f0409fc: 8c66004c */ lw $a2,0x4c($v1)
/* f040a00: 00786021 */ addu $t4,$v1,$t8
/* f040a04: 9187004d */ lbu $a3,0x4d($t4)
/* f040a08: 8c650020 */ lw $a1,0x20($v1)
/* f040a0c: 00065080 */ sll $t2,$a2,0x2
/* f040a10: 000a37c2 */ srl $a2,$t2,0x1f
/* f040a14: afa80014 */ sw $t0,0x14($sp)
/* f040a18: 0fc283eb */ jal func0f0a0fac
/* f040a1c: afa90010 */ sw $t1,0x10($sp)
.L0f040a20:
/* f040a20: 8fab0278 */ lw $t3,0x278($sp)
.L0f040a24:
/* f040a24: 93b90260 */ lbu $t9,0x260($sp)
/* f040a28: 24010016 */ addiu $at,$zero,0x16
/* f040a2c: 8d6302d4 */ lw $v1,0x2d4($t3)
/* f040a30: 50600018 */ beqzl $v1,.L0f040a94
/* f040a34: 3c014780 */ lui $at,0x4780
/* f040a38: 57210016 */ bnel $t9,$at,.L0f040a94
/* f040a3c: 3c014780 */ lui $at,0x4780
/* f040a40: 8c6d0128 */ lw $t5,0x128($v1)
/* f040a44: 240e0001 */ addiu $t6,$zero,0x1
/* f040a48: 01602025 */ or $a0,$t3,$zero
/* f040a4c: 15a00010 */ bnez $t5,.L0f040a90
/* f040a50: 00002825 */ or $a1,$zero,$zero
/* f040a54: afae0250 */ sw $t6,0x250($sp)
/* f040a58: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f040a5c: 0fc667e1 */ jal aibotDoFarsightThing
/* f040a60: 27a70244 */ addiu $a3,$sp,0x244
/* f040a64: 24010002 */ addiu $at,$zero,0x2
/* f040a68: 5441000a */ bnel $v0,$at,.L0f040a94
/* f040a6c: 3c014780 */ lui $at,0x4780
/* f040a70: 0c004b70 */ jal random
/* f040a74: 00000000 */ nop
/* f040a78: 240100ff */ addiu $at,$zero,0xff
/* f040a7c: 0041001b */ divu $zero,$v0,$at
/* f040a80: 00005010 */ mfhi $t2
/* f040a84: 2d4f00c9 */ sltiu $t7,$t2,0xc9
/* f040a88: 39ef0001 */ xori $t7,$t7,0x1
/* f040a8c: a3af026e */ sb $t7,0x26e($sp)
.L0f040a90:
/* f040a90: 3c014780 */ lui $at,0x4780
.L0f040a94:
/* f040a94: 44810000 */ mtc1 $at,$f0
/* f040a98: c7b001e0 */ lwc1 $f16,0x1e0($sp)
/* f040a9c: c7a40244 */ lwc1 $f4,0x244($sp)
/* f040aa0: c7a601e4 */ lwc1 $f6,0x1e4($sp)
/* f040aa4: 46008482 */ mul.s $f18,$f16,$f0
/* f040aa8: c7b00248 */ lwc1 $f16,0x248($sp)
/* f040aac: 8fa40278 */ lw $a0,0x278($sp)
/* f040ab0: 46003282 */ mul.s $f10,$f6,$f0
/* f040ab4: c7a6024c */ lwc1 $f6,0x24c($sp)
/* f040ab8: 00002825 */ or $a1,$zero,$zero
/* f040abc: 46049200 */ add.s $f8,$f18,$f4
/* f040ac0: c7a401e8 */ lwc1 $f4,0x1e8($sp)
/* f040ac4: 46105480 */ add.s $f18,$f10,$f16
/* f040ac8: e7a80228 */ swc1 $f8,0x228($sp)
/* f040acc: 46002202 */ mul.s $f8,$f4,$f0
/* f040ad0: e7b2022c */ swc1 $f18,0x22c($sp)
/* f040ad4: 46064280 */ add.s $f10,$f8,$f6
/* f040ad8: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f040adc: e7aa0230 */ swc1 $f10,0x230($sp)
/* f040ae0: 93b8026f */ lbu $t8,0x26f($sp)
/* f040ae4: 27a40244 */ addiu $a0,$sp,0x244
/* f040ae8: 27a50234 */ addiu $a1,$sp,0x234
/* f040aec: 13000004 */ beqz $t8,.L0f040b00
/* f040af0: 27a60228 */ addiu $a2,$sp,0x228
/* f040af4: 240c0001 */ addiu $t4,$zero,0x1
/* f040af8: 3c01800a */ lui $at,%hi(g_Vars+0x48c)
/* f040afc: ac2ca44c */ sw $t4,%lo(g_Vars+0x48c)($at)
.L0f040b00:
/* f040b00: 24190010 */ addiu $t9,$zero,0x10
/* f040b04: afb90010 */ sw $t9,0x10($sp)
/* f040b08: 0c00b764 */ jal cdTestAToB4
/* f040b0c: 8fa701c8 */ lw $a3,0x1c8($sp)
/* f040b10: 1440000a */ bnez $v0,.L0f040b3c
/* f040b14: 240d0001 */ addiu $t5,$zero,0x1
/* f040b18: 3c067f1b */ lui $a2,%hi(var7f1a8af4)
/* f040b1c: afad0224 */ sw $t5,0x224($sp)
/* f040b20: 24c68af4 */ addiu $a2,$a2,%lo(var7f1a8af4)
/* f040b24: 27a40228 */ addiu $a0,$sp,0x228
/* f040b28: 0c0093af */ jal cdGetPos
/* f040b2c: 24052f28 */ addiu $a1,$zero,0x2f28
/* f040b30: 0c0093ac */ jal cdGetObstacle
/* f040b34: 00000000 */ nop
/* f040b38: afa201cc */ sw $v0,0x1cc($sp)
.L0f040b3c:
/* f040b3c: 8fa40278 */ lw $a0,0x278($sp)
/* f040b40: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f040b44: 24050001 */ addiu $a1,$zero,0x1
/* f040b48: 93ae026f */ lbu $t6,0x26f($sp)
/* f040b4c: 3c01800a */ lui $at,%hi(g_Vars+0x48c)
/* f040b50: 51c00003 */ beqzl $t6,.L0f040b60
/* f040b54: 8fab01cc */ lw $t3,0x1cc($sp)
/* f040b58: ac20a44c */ sw $zero,%lo(g_Vars+0x48c)($at)
/* f040b5c: 8fab01cc */ lw $t3,0x1cc($sp)
.L0f040b60:
/* f040b60: 8faa01c0 */ lw $t2,0x1c0($sp)
/* f040b64: 55600015 */ bnezl $t3,.L0f040bbc
/* f040b68: c7a80228 */ lwc1 $f8,0x228($sp)
/* f040b6c: 51400013 */ beqzl $t2,.L0f040bbc
/* f040b70: c7a80228 */ lwc1 $f8,0x228($sp)
/* f040b74: 0c004b70 */ jal random
/* f040b78: 00000000 */ nop
/* f040b7c: 24010064 */ addiu $at,$zero,0x64
/* f040b80: 0041001b */ divu $zero,$v0,$at
/* f040b84: 00001810 */ mfhi $v1
/* f040b88: 2c6f0033 */ sltiu $t7,$v1,0x33
/* f040b8c: 39ef0001 */ xori $t7,$t7,0x1
/* f040b90: 11e00009 */ beqz $t7,.L0f040bb8
/* f040b94: afaf01bc */ sw $t7,0x1bc($sp)
/* f040b98: 8fb8025c */ lw $t8,0x25c($sp)
/* f040b9c: afb801cc */ sw $t8,0x1cc($sp)
/* f040ba0: c7100008 */ lwc1 $f16,0x8($t8)
/* f040ba4: e7b00228 */ swc1 $f16,0x228($sp)
/* f040ba8: c712000c */ lwc1 $f18,0xc($t8)
/* f040bac: e7b2022c */ swc1 $f18,0x22c($sp)
/* f040bb0: c7040010 */ lwc1 $f4,0x10($t8)
/* f040bb4: e7a40230 */ swc1 $f4,0x230($sp)
.L0f040bb8:
/* f040bb8: c7a80228 */ lwc1 $f8,0x228($sp)
.L0f040bbc:
/* f040bbc: c7a60244 */ lwc1 $f6,0x244($sp)
/* f040bc0: c7aa022c */ lwc1 $f10,0x22c($sp)
/* f040bc4: c7b00248 */ lwc1 $f16,0x248($sp)
/* f040bc8: 46064001 */ sub.s $f0,$f8,$f6
/* f040bcc: c7b20230 */ lwc1 $f18,0x230($sp)
/* f040bd0: c7a4024c */ lwc1 $f4,0x24c($sp)
/* f040bd4: 46105081 */ sub.s $f2,$f10,$f16
/* f040bd8: 46000202 */ mul.s $f8,$f0,$f0
/* f040bdc: 93a40260 */ lbu $a0,0x260($sp)
/* f040be0: 46049301 */ sub.s $f12,$f18,$f4
/* f040be4: 46021182 */ mul.s $f6,$f2,$f2
/* f040be8: 24010018 */ addiu $at,$zero,0x18
/* f040bec: 460c6402 */ mul.s $f16,$f12,$f12
/* f040bf0: 46064280 */ add.s $f10,$f8,$f6
/* f040bf4: 46105480 */ add.s $f18,$f10,$f16
/* f040bf8: 1081000f */ beq $a0,$at,.L0f040c38
/* f040bfc: e7b201d0 */ swc1 $f18,0x1d0($sp)
/* f040c00: 24010019 */ addiu $at,$zero,0x19
/* f040c04: 1081000c */ beq $a0,$at,.L0f040c38
/* f040c08: 24010012 */ addiu $at,$zero,0x12
/* f040c0c: 14810003 */ bne $a0,$at,.L0f040c1c
/* f040c10: 93ac0263 */ lbu $t4,0x263($sp)
/* f040c14: 24010001 */ addiu $at,$zero,0x1
/* f040c18: 11810007 */ beq $t4,$at,.L0f040c38
.L0f040c1c:
/* f040c1c: 24010017 */ addiu $at,$zero,0x17
/* f040c20: 10810005 */ beq $a0,$at,.L0f040c38
/* f040c24: 2401001b */ addiu $at,$zero,0x1b
/* f040c28: 10810003 */ beq $a0,$at,.L0f040c38
/* f040c2c: 24010034 */ addiu $at,$zero,0x34
/* f040c30: 54810171 */ bnel $a0,$at,.L0f0411f8
/* f040c34: 24010006 */ addiu $at,$zero,0x6
.L0f040c38:
/* f040c38: 93b9026f */ lbu $t9,0x26f($sp)
/* f040c3c: afa00250 */ sw $zero,0x250($sp)
/* f040c40: 3c017f1b */ lui $at,%hi(var7f1a90cc)
/* f040c44: 17200006 */ bnez $t9,.L0f040c60
/* f040c48: c7a801d0 */ lwc1 $f8,0x1d0($sp)
/* f040c4c: c42490cc */ lwc1 $f4,%lo(var7f1a90cc)($at)
/* f040c50: 4608203c */ c.lt.s $f4,$f8
/* f040c54: 00000000 */ nop
/* f040c58: 45020164 */ bc1fl .L0f0411ec
/* f040c5c: afa00268 */ sw $zero,0x268($sp)
.L0f040c60:
/* f040c60: 0fc2c3f4 */ jal weaponFindById
/* f040c64: 00000000 */ nop
/* f040c68: 93ad0263 */ lbu $t5,0x263($sp)
/* f040c6c: 93a40260 */ lbu $a0,0x260($sp)
/* f040c70: 24010018 */ addiu $at,$zero,0x18
/* f040c74: 000d7080 */ sll $t6,$t5,0x2
/* f040c78: 004e5821 */ addu $t3,$v0,$t6
/* f040c7c: 10810006 */ beq $a0,$at,.L0f040c98
/* f040c80: 8d630014 */ lw $v1,0x14($t3)
/* f040c84: 24010034 */ addiu $at,$zero,0x34
/* f040c88: 10810003 */ beq $a0,$at,.L0f040c98
/* f040c8c: 24010019 */ addiu $at,$zero,0x19
/* f040c90: 5481000e */ bnel $a0,$at,.L0f040ccc
/* f040c94: 2401001b */ addiu $at,$zero,0x1b
.L0f040c98:
/* f040c98: 8c6a0010 */ lw $t2,0x10($v1)
/* f040c9c: 24050053 */ addiu $a1,$zero,0x53
/* f040ca0: 8fa60278 */ lw $a2,0x278($sp)
/* f040ca4: 000a7840 */ sll $t7,$t2,0x1
/* f040ca8: 05e30003 */ bgezl $t7,.L0f040cb8
/* f040cac: 8c640040 */ lw $a0,0x40($v1)
/* f040cb0: 24050054 */ addiu $a1,$zero,0x54
/* f040cb4: 8c640040 */ lw $a0,0x40($v1)
.L0f040cb8:
/* f040cb8: 0fc22e20 */ jal func0f08b880
/* f040cbc: afa300d4 */ sw $v1,0xd4($sp)
/* f040cc0: 1000002e */ b .L0f040d7c
/* f040cc4: afa201b8 */ sw $v0,0x1b8($sp)
/* f040cc8: 2401001b */ addiu $at,$zero,0x1b
.L0f040ccc:
/* f040ccc: 1481000a */ bne $a0,$at,.L0f040cf8
/* f040cd0: 24050056 */ addiu $a1,$zero,0x56
/* f040cd4: 8c640040 */ lw $a0,0x40($v1)
/* f040cd8: afa300d4 */ sw $v1,0xd4($sp)
/* f040cdc: 0fc22e20 */ jal func0f08b880
/* f040ce0: 8fa60278 */ lw $a2,0x278($sp)
/* f040ce4: 10400025 */ beqz $v0,.L0f040d7c
/* f040ce8: afa201b8 */ sw $v0,0x1b8($sp)
/* f040cec: 93b80263 */ lbu $t8,0x263($sp)
/* f040cf0: 10000022 */ b .L0f040d7c
/* f040cf4: a058005f */ sb $t8,0x5f($v0)
.L0f040cf8:
/* f040cf8: 24010017 */ addiu $at,$zero,0x17
/* f040cfc: 1481000a */ bne $a0,$at,.L0f040d28
/* f040d00: 24050055 */ addiu $a1,$zero,0x55
/* f040d04: 8c640040 */ lw $a0,0x40($v1)
/* f040d08: afa300d4 */ sw $v1,0xd4($sp)
/* f040d0c: 0fc22e20 */ jal func0f08b880
/* f040d10: 8fa60278 */ lw $a2,0x278($sp)
/* f040d14: 10400019 */ beqz $v0,.L0f040d7c
/* f040d18: afa201b8 */ sw $v0,0x1b8($sp)
/* f040d1c: 93ac0263 */ lbu $t4,0x263($sp)
/* f040d20: 10000016 */ b .L0f040d7c
/* f040d24: a04c005f */ sb $t4,0x5f($v0)
.L0f040d28:
/* f040d28: 24010012 */ addiu $at,$zero,0x12
/* f040d2c: 1481000b */ bne $a0,$at,.L0f040d5c
/* f040d30: 3c0d800a */ lui $t5,%hi(g_Vars+0x284)
/* f040d34: 8c640040 */ lw $a0,0x40($v1)
/* f040d38: afa300d4 */ sw $v1,0xd4($sp)
/* f040d3c: 24050055 */ addiu $a1,$zero,0x55
/* f040d40: 0fc22e20 */ jal func0f08b880
/* f040d44: 8fa60278 */ lw $a2,0x278($sp)
/* f040d48: 1040000c */ beqz $v0,.L0f040d7c
/* f040d4c: afa201b8 */ sw $v0,0x1b8($sp)
/* f040d50: 24190002 */ addiu $t9,$zero,0x2
/* f040d54: 10000009 */ b .L0f040d7c
/* f040d58: a059005f */ sb $t9,0x5f($v0)
.L0f040d5c:
/* f040d5c: 8dada244 */ lw $t5,%lo(g_Vars+0x284)($t5)
/* f040d60: 8c640040 */ lw $a0,0x40($v1)
/* f040d64: 27a50260 */ addiu $a1,$sp,0x260
/* f040d68: 8dae00bc */ lw $t6,0xbc($t5)
/* f040d6c: 8dc60004 */ lw $a2,0x4($t6)
/* f040d70: 0fc22d96 */ jal func0f08b658
/* f040d74: afa300d4 */ sw $v1,0xd4($sp)
/* f040d78: afa201b8 */ sw $v0,0x1b8($sp)
.L0f040d7c:
/* f040d7c: 1040011b */ beqz $v0,.L0f0411ec
/* f040d80: 8fab00d4 */ lw $t3,0xd4($sp)
/* f040d84: 8d6a004c */ lw $t2,0x4c($t3)
/* f040d88: 3c017f1b */ lui $at,%hi(var7f1a90d0)
/* f040d8c: c43090d0 */ lwc1 $f16,%lo(var7f1a90d0)($at)
/* f040d90: 448a3000 */ mtc1 $t2,$f6
/* f040d94: 3c014270 */ lui $at,0x4270
/* f040d98: 44812000 */ mtc1 $at,$f4
/* f040d9c: 468032a0 */ cvt.s.w $f10,$f6
/* f040da0: 3c017f1b */ lui $at,%hi(var7f1a90d4)
/* f040da4: 93b8026f */ lbu $t8,0x26f($sp)
/* f040da8: 8fa40278 */ lw $a0,0x278($sp)
/* f040dac: 2405001e */ addiu $a1,$zero,0x1e
/* f040db0: 46105482 */ mul.s $f18,$f10,$f16
/* f040db4: c43090d4 */ lwc1 $f16,%lo(var7f1a90d4)($at)
/* f040db8: 46049203 */ div.s $f8,$f18,$f4
/* f040dbc: e7a80168 */ swc1 $f8,0x168($sp)
/* f040dc0: 8d6f0054 */ lw $t7,0x54($t3)
/* f040dc4: 448f3000 */ mtc1 $t7,$f6
/* f040dc8: 00000000 */ nop
/* f040dcc: 468032a0 */ cvt.s.w $f10,$f6
/* f040dd0: 46105482 */ mul.s $f18,$f10,$f16
/* f040dd4: 13000080 */ beqz $t8,.L0f040fd8
/* f040dd8: e7b200cc */ swc1 $f18,0xcc($sp)
/* f040ddc: 0fc1241a */ jal chrIsTargetInFov
/* f040de0: 00003025 */ or $a2,$zero,$zero
/* f040de4: 1040007c */ beqz $v0,.L0f040fd8
/* f040de8: 00000000 */ nop
/* f040dec: 93a20263 */ lbu $v0,0x263($sp)
/* f040df0: 00001825 */ or $v1,$zero,$zero
/* f040df4: 93a40260 */ lbu $a0,0x260($sp)
/* f040df8: 14400025 */ bnez $v0,.L0f040e90
/* f040dfc: 24010018 */ addiu $at,$zero,0x18
/* f040e00: 10810006 */ beq $a0,$at,.L0f040e1c
/* f040e04: 8fac025c */ lw $t4,0x25c($sp)
/* f040e08: 24010034 */ addiu $at,$zero,0x34
/* f040e0c: 10810003 */ beq $a0,$at,.L0f040e1c
/* f040e10: 24010019 */ addiu $at,$zero,0x19
/* f040e14: 5481001f */ bnel $a0,$at,.L0f040e94
/* f040e18: 93a40260 */ lbu $a0,0x260($sp)
.L0f040e1c:
/* f040e1c: 91820000 */ lbu $v0,0x0($t4)
/* f040e20: 24010003 */ addiu $at,$zero,0x3
/* f040e24: 8fb9025c */ lw $t9,0x25c($sp)
/* f040e28: 10410003 */ beq $v0,$at,.L0f040e38
/* f040e2c: 24010006 */ addiu $at,$zero,0x6
/* f040e30: 14410051 */ bne $v0,$at,.L0f040f78
/* f040e34: 00000000 */ nop
.L0f040e38:
/* f040e38: c7240008 */ lwc1 $f4,0x8($t9)
/* f040e3c: c7aa0244 */ lwc1 $f10,0x244($sp)
/* f040e40: c7b20248 */ lwc1 $f18,0x248($sp)
/* f040e44: e7a400b8 */ swc1 $f4,0xb8($sp)
/* f040e48: 8f2d0004 */ lw $t5,0x4($t9)
/* f040e4c: 460a2401 */ sub.s $f16,$f4,$f10
/* f040e50: c7aa024c */ lwc1 $f10,0x24c($sp)
/* f040e54: c5a800b4 */ lwc1 $f8,0xb4($t5)
/* f040e58: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f040e5c: 27a501e4 */ addiu $a1,$sp,0x1e4
/* f040e60: e7a800bc */ swc1 $f8,0xbc($sp)
/* f040e64: c7260010 */ lwc1 $f6,0x10($t9)
/* f040e68: e7b001e0 */ swc1 $f16,0x1e0($sp)
/* f040e6c: 46124101 */ sub.s $f4,$f8,$f18
/* f040e70: 27a601e8 */ addiu $a2,$sp,0x1e8
/* f040e74: e7a600c0 */ swc1 $f6,0xc0($sp)
/* f040e78: 460a3401 */ sub.s $f16,$f6,$f10
/* f040e7c: e7a401e4 */ swc1 $f4,0x1e4($sp)
/* f040e80: 0c0011e4 */ jal guNormalize
/* f040e84: e7b001e8 */ swc1 $f16,0x1e8($sp)
/* f040e88: 1000003b */ b .L0f040f78
/* f040e8c: 24030001 */ addiu $v1,$zero,0x1
.L0f040e90:
/* f040e90: 93a40260 */ lbu $a0,0x260($sp)
.L0f040e94:
/* f040e94: 24050017 */ addiu $a1,$zero,0x17
/* f040e98: 24010012 */ addiu $at,$zero,0x12
/* f040e9c: 14a40003 */ bne $a1,$a0,.L0f040eac
/* f040ea0: 00000000 */ nop
/* f040ea4: 50400004 */ beqzl $v0,.L0f040eb8
/* f040ea8: 8fae025c */ lw $t6,0x25c($sp)
.L0f040eac:
/* f040eac: 14810017 */ bne $a0,$at,.L0f040f0c
/* f040eb0: 00000000 */ nop
/* f040eb4: 8fae025c */ lw $t6,0x25c($sp)
.L0f040eb8:
/* f040eb8: 24010003 */ addiu $at,$zero,0x3
/* f040ebc: 8faa025c */ lw $t2,0x25c($sp)
/* f040ec0: 91c20000 */ lbu $v0,0x0($t6)
/* f040ec4: 10410003 */ beq $v0,$at,.L0f040ed4
/* f040ec8: 24010006 */ addiu $at,$zero,0x6
/* f040ecc: 1441002a */ bne $v0,$at,.L0f040f78
/* f040ed0: 00000000 */ nop
.L0f040ed4:
/* f040ed4: c5480008 */ lwc1 $f8,0x8($t2)
/* f040ed8: 27a40244 */ addiu $a0,$sp,0x244
/* f040edc: 8fa500cc */ lw $a1,0xcc($sp)
/* f040ee0: e7a800b8 */ swc1 $f8,0xb8($sp)
/* f040ee4: 8d4b0004 */ lw $t3,0x4($t2)
/* f040ee8: 27a600b8 */ addiu $a2,$sp,0xb8
/* f040eec: 27a701e0 */ addiu $a3,$sp,0x1e0
/* f040ef0: c57200b4 */ lwc1 $f18,0xb4($t3)
/* f040ef4: e7b200bc */ swc1 $f18,0xbc($sp)
/* f040ef8: c5440010 */ lwc1 $f4,0x10($t2)
/* f040efc: 0fc100c7 */ jal func0f04031c
/* f040f00: e7a400c0 */ swc1 $f4,0xc0($sp)
/* f040f04: 1000001c */ b .L0f040f78
/* f040f08: 24030001 */ addiu $v1,$zero,0x1
.L0f040f0c:
/* f040f0c: 14a40002 */ bne $a1,$a0,.L0f040f18
/* f040f10: 24010001 */ addiu $at,$zero,0x1
/* f040f14: 10410003 */ beq $v0,$at,.L0f040f24
.L0f040f18:
/* f040f18: 2401001b */ addiu $at,$zero,0x1b
/* f040f1c: 14810016 */ bne $a0,$at,.L0f040f78
/* f040f20: 00000000 */ nop
.L0f040f24:
/* f040f24: 8faf025c */ lw $t7,0x25c($sp)
/* f040f28: 24010006 */ addiu $at,$zero,0x6
/* f040f2c: 27a40244 */ addiu $a0,$sp,0x244
/* f040f30: c5e60008 */ lwc1 $f6,0x8($t7)
/* f040f34: 27a600b8 */ addiu $a2,$sp,0xb8
/* f040f38: 27a701e0 */ addiu $a3,$sp,0x1e0
/* f040f3c: e7a600b8 */ swc1 $f6,0xb8($sp)
/* f040f40: c5ea000c */ lwc1 $f10,0xc($t7)
/* f040f44: e7aa00bc */ swc1 $f10,0xbc($sp)
/* f040f48: c5f00010 */ lwc1 $f16,0x10($t7)
/* f040f4c: e7b000c0 */ swc1 $f16,0xc0($sp)
/* f040f50: 91f80000 */ lbu $t8,0x0($t7)
/* f040f54: 17010005 */ bne $t8,$at,.L0f040f6c
/* f040f58: 3c0141c8 */ lui $at,0x41c8
/* f040f5c: 44814000 */ mtc1 $at,$f8
/* f040f60: 00000000 */ nop
/* f040f64: 46085481 */ sub.s $f18,$f10,$f8
/* f040f68: e7b200bc */ swc1 $f18,0xbc($sp)
.L0f040f6c:
/* f040f6c: 0fc100c7 */ jal func0f04031c
/* f040f70: 8fa500cc */ lw $a1,0xcc($sp)
/* f040f74: 24030001 */ addiu $v1,$zero,0x1
.L0f040f78:
/* f040f78: 10600017 */ beqz $v1,.L0f040fd8
/* f040f7c: 8fa40278 */ lw $a0,0x278($sp)
/* f040f80: 0fc122a1 */ jal chrGetAngleToPos
/* f040f84: 27a500b8 */ addiu $a1,$sp,0xb8
/* f040f88: e7a000b4 */ swc1 $f0,0xb4($sp)
/* f040f8c: 0c0068f4 */ jal cosf
/* f040f90: 46000306 */ mov.s $f12,$f0
/* f040f94: c7ac00b4 */ lwc1 $f12,0xb4($sp)
/* f040f98: 0c0068f7 */ jal sinf
/* f040f9c: e7a000b0 */ swc1 $f0,0xb0($sp)
/* f040fa0: c7ac01e8 */ lwc1 $f12,0x1e8($sp)
/* f040fa4: c7ae00b0 */ lwc1 $f14,0xb0($sp)
/* f040fa8: c7a201e0 */ lwc1 $f2,0x1e0($sp)
/* f040fac: 460c0102 */ mul.s $f4,$f0,$f12
/* f040fb0: 00000000 */ nop
/* f040fb4: 46027182 */ mul.s $f6,$f14,$f2
/* f040fb8: 00000000 */ nop
/* f040fbc: 460c7282 */ mul.s $f10,$f14,$f12
/* f040fc0: 00000000 */ nop
/* f040fc4: 46020202 */ mul.s $f8,$f0,$f2
/* f040fc8: 46062400 */ add.s $f16,$f4,$f6
/* f040fcc: e7b001e0 */ swc1 $f16,0x1e0($sp)
/* f040fd0: 46085481 */ sub.s $f18,$f10,$f8
/* f040fd4: e7b201e8 */ swc1 $f18,0x1e8($sp)
.L0f040fd8:
/* f040fd8: 0c00566c */ jal func000159b0
/* f040fdc: 27a40178 */ addiu $a0,$sp,0x178
/* f040fe0: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040fe4: 0c0058ba */ jal func000162e8
/* f040fe8: 27a5011c */ addiu $a1,$sp,0x11c
/* f040fec: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040ff0: 0c0058dd */ jal func00016374
/* f040ff4: 27a500dc */ addiu $a1,$sp,0xdc
/* f040ff8: 27a400dc */ addiu $a0,$sp,0xdc
/* f040ffc: 0c0056f8 */ jal func00015be0
/* f041000: 27a5011c */ addiu $a1,$sp,0x11c
/* f041004: c7ac0168 */ lwc1 $f12,0x168($sp)
/* f041008: c7a401e0 */ lwc1 $f4,0x1e0($sp)
/* f04100c: c7b001e4 */ lwc1 $f16,0x1e4($sp)
/* f041010: c7a801e8 */ lwc1 $f8,0x1e8($sp)
/* f041014: 460c2182 */ mul.s $f6,$f4,$f12
/* f041018: c7a200cc */ lwc1 $f2,0xcc($sp)
/* f04101c: 3c01800a */ lui $at,%hi(g_Vars+0x4c)
/* f041020: 460c8282 */ mul.s $f10,$f16,$f12
/* f041024: c420a00c */ lwc1 $f0,%lo(g_Vars+0x4c)($at)
/* f041028: 8fac00d4 */ lw $t4,0xd4($sp)
/* f04102c: 460c4482 */ mul.s $f18,$f8,$f12
/* f041030: e7a6015c */ swc1 $f6,0x15c($sp)
/* f041034: 8fa401b8 */ lw $a0,0x1b8($sp)
/* f041038: 46022102 */ mul.s $f4,$f4,$f2
/* f04103c: e7aa0160 */ swc1 $f10,0x160($sp)
/* f041040: 2401ffff */ addiu $at,$zero,-1
/* f041044: 46003182 */ mul.s $f6,$f6,$f0
/* f041048: e7b20164 */ swc1 $f18,0x164($sp)
/* f04104c: 27a50244 */ addiu $a1,$sp,0x244
/* f041050: 27a60234 */ addiu $a2,$sp,0x234
/* f041054: 27a7011c */ addiu $a3,$sp,0x11c
/* f041058: 27ae016c */ addiu $t6,$sp,0x16c
/* f04105c: 27ab0178 */ addiu $t3,$sp,0x178
/* f041060: 46062100 */ add.s $f4,$f4,$f6
/* f041064: 46028182 */ mul.s $f6,$f16,$f2
/* f041068: e7a4016c */ swc1 $f4,0x16c($sp)
/* f04106c: 46005102 */ mul.s $f4,$f10,$f0
/* f041070: 46043400 */ add.s $f16,$f6,$f4
/* f041074: 46024282 */ mul.s $f10,$f8,$f2
/* f041078: 00000000 */ nop
/* f04107c: 46009182 */ mul.s $f6,$f18,$f0
/* f041080: e7b00170 */ swc1 $f16,0x170($sp)
/* f041084: 46065100 */ add.s $f4,$f10,$f6
/* f041088: e7a40174 */ swc1 $f4,0x174($sp)
/* f04108c: 8d8d0058 */ lw $t5,0x58($t4)
/* f041090: a48d0062 */ sh $t5,0x62($a0)
/* f041094: 84820062 */ lh $v0,0x62($a0)
/* f041098: 10410002 */ beq $v0,$at,.L0f0410a4
/* f04109c: 0002c880 */ sll $t9,$v0,0x2
/* f0410a0: a4990062 */ sh $t9,0x62($a0)
.L0f0410a4:
/* f0410a4: 8faa0274 */ lw $t2,0x274($sp)
/* f0410a8: afae0010 */ sw $t6,0x10($sp)
/* f0410ac: afab0014 */ sw $t3,0x14($sp)
/* f0410b0: afa5001c */ sw $a1,0x1c($sp)
/* f0410b4: 0fc27af3 */ jal func0f09ebcc
/* f0410b8: afaa0018 */ sw $t2,0x18($sp)
/* f0410bc: 8fa301b8 */ lw $v1,0x1b8($sp)
/* f0410c0: 8fac00d4 */ lw $t4,0xd4($sp)
/* f0410c4: 8c6f0040 */ lw $t7,0x40($v1)
/* f0410c8: 31f80080 */ andi $t8,$t7,0x80
/* f0410cc: 13000047 */ beqz $t8,.L0f0411ec
/* f0410d0: 00000000 */ nop
/* f0410d4: 8d820010 */ lw $v0,0x10($t4)
/* f0410d8: 00026800 */ sll $t5,$v0,0x0
/* f0410dc: 05a10007 */ bgez $t5,.L0f0410fc
/* f0410e0: 00025900 */ sll $t3,$v0,0x4
/* f0410e4: 8c620048 */ lw $v0,0x48($v1)
/* f0410e8: 3c014000 */ lui $at,0x4000
/* f0410ec: 8c590000 */ lw $t9,0x0($v0)
/* f0410f0: 03217025 */ or $t6,$t9,$at
/* f0410f4: 10000007 */ b .L0f041114
/* f0410f8: ac4e0000 */ sw $t6,0x0($v0)
.L0f0410fc:
/* f0410fc: 05630006 */ bgezl $t3,.L0f041118
/* f041100: c7b0015c */ lwc1 $f16,0x15c($sp)
/* f041104: 8c620048 */ lw $v0,0x48($v1)
/* f041108: 8c4a0000 */ lw $t2,0x0($v0)
/* f04110c: 354f0010 */ ori $t7,$t2,0x10
/* f041110: ac4f0000 */ sw $t7,0x0($v0)
.L0f041114:
/* f041114: c7b0015c */ lwc1 $f16,0x15c($sp)
.L0f041118:
/* f041118: 8c780048 */ lw $t8,0x48($v1)
/* f04111c: 241900f0 */ addiu $t9,$zero,0xf0
/* f041120: 3c017f1b */ lui $at,%hi(var7f1a90d8)
/* f041124: e7100010 */ swc1 $f16,0x10($t8)
/* f041128: 8c6c0048 */ lw $t4,0x48($v1)
/* f04112c: c7a80160 */ lwc1 $f8,0x160($sp)
/* f041130: e5880014 */ swc1 $f8,0x14($t4)
/* f041134: 8c6d0048 */ lw $t5,0x48($v1)
/* f041138: c7b20164 */ lwc1 $f18,0x164($sp)
/* f04113c: e5b20018 */ swc1 $f18,0x18($t5)
/* f041140: 8c6e0048 */ lw $t6,0x48($v1)
/* f041144: add900b4 */ sw $t9,0xb4($t6)
/* f041148: 8fab00d4 */ lw $t3,0xd4($sp)
/* f04114c: 8c6a0048 */ lw $t2,0x48($v1)
/* f041150: c56a005c */ lwc1 $f10,0x5c($t3)
/* f041154: e54a008c */ swc1 $f10,0x8c($t2)
/* f041158: 8faf00d4 */ lw $t7,0xd4($sp)
/* f04115c: c42490d8 */ lwc1 $f4,%lo(var7f1a90d8)($at)
/* f041160: 8c780048 */ lw $t8,0x48($v1)
/* f041164: c5e60050 */ lwc1 $f6,0x50($t7)
/* f041168: 46043402 */ mul.s $f16,$f6,$f4
/* f04116c: e7100098 */ swc1 $f16,0x98($t8)
/* f041170: 0fc0a221 */ jal chrGetTargetProp
/* f041174: 8fa40278 */ lw $a0,0x278($sp)
/* f041178: 8fac01b8 */ lw $t4,0x1b8($sp)
/* f04117c: 3c01bf80 */ lui $at,0xbf80
/* f041180: 00002025 */ or $a0,$zero,$zero
/* f041184: 8d8d0048 */ lw $t5,0x48($t4)
/* f041188: 2407ffff */ addiu $a3,$zero,-1
/* f04118c: 240effff */ addiu $t6,$zero,-1
/* f041190: ada200e8 */ sw $v0,0xe8($t5)
/* f041194: 8fb900d4 */ lw $t9,0xd4($sp)
/* f041198: 240bffff */ addiu $t3,$zero,-1
/* f04119c: 87260060 */ lh $a2,0x60($t9)
/* f0411a0: 18c00012 */ blez $a2,.L0f0411ec
/* f0411a4: 00000000 */ nop
/* f0411a8: 8d850014 */ lw $a1,0x14($t4)
/* f0411ac: 44810000 */ mtc1 $at,$f0
/* f0411b0: afab002c */ sw $t3,0x2c($sp)
/* f0411b4: afa00028 */ sw $zero,0x28($sp)
/* f0411b8: afa00020 */ sw $zero,0x20($sp)
/* f0411bc: afa0001c */ sw $zero,0x1c($sp)
/* f0411c0: afa00018 */ sw $zero,0x18($sp)
/* f0411c4: afa00014 */ sw $zero,0x14($sp)
/* f0411c8: afae0010 */ sw $t6,0x10($sp)
/* f0411cc: e7a00024 */ swc1 $f0,0x24($sp)
/* f0411d0: e7a00030 */ swc1 $f0,0x30($sp)
/* f0411d4: e7a00034 */ swc1 $f0,0x34($sp)
/* f0411d8: 0fc24e7e */ jal func0f0939f8
/* f0411dc: e7a00038 */ swc1 $f0,0x38($sp)
/* f0411e0: 10000002 */ b .L0f0411ec
/* f0411e4: 00000000 */ nop
/* f0411e8: afa00268 */ sw $zero,0x268($sp)
.L0f0411ec:
/* f0411ec: 10000019 */ b .L0f041254
/* f0411f0: a3a0026e */ sb $zero,0x26e($sp)
/* f0411f4: 24010006 */ addiu $at,$zero,0x6
.L0f0411f8:
/* f0411f8: 14810016 */ bne $a0,$at,.L0f041254
/* f0411fc: 93aa026f */ lbu $t2,0x26f($sp)
/* f041200: 11400014 */ beqz $t2,.L0f041254
/* f041204: 93af0263 */ lbu $t7,0x263($sp)
/* f041208: 24010001 */ addiu $at,$zero,0x1
/* f04120c: 15e10011 */ bne $t7,$at,.L0f041254
/* f041210: 8fad0278 */ lw $t5,0x278($sp)
/* f041214: 8fa2027c */ lw $v0,0x27c($sp)
/* f041218: 8db902d4 */ lw $t9,0x2d4($t5)
/* f04121c: 3c014120 */ lui $at,0x4120
/* f041220: 0002c080 */ sll $t8,$v0,0x2
/* f041224: 03386021 */ addu $t4,$t9,$t8
/* f041228: c58800e4 */ lwc1 $f8,0xe4($t4)
/* f04122c: 44819000 */ mtc1 $at,$f18
/* f041230: 44802000 */ mtc1 $zero,$f4
/* f041234: 46124282 */ mul.s $f10,$f8,$f18
/* f041238: 4600518d */ trunc.w.s $f6,$f10
/* f04123c: 440b3000 */ mfc1 $t3,$f6
/* f041240: 00000000 */ nop
/* f041244: a3ab0262 */ sb $t3,0x262($sp)
/* f041248: 8daa02d4 */ lw $t2,0x2d4($t5)
/* f04124c: 01587821 */ addu $t7,$t2,$t8
/* f041250: e5e400e4 */ swc1 $f4,0xe4($t7)
.L0f041254:
/* f041254: 93b8026e */ lbu $t8,0x26e($sp)
/* f041258: 93b9026f */ lbu $t9,0x26f($sp)
/* f04125c: 530001c0 */ beqzl $t8,.L0f041960
/* f041260: 8fae01c0 */ lw $t6,0x1c0($sp)
/* f041264: 172000d6 */ bnez $t9,.L0f0415c0
/* f041268: 8fac0258 */ lw $t4,0x258($sp)
/* f04126c: 318e0200 */ andi $t6,$t4,0x200
/* f041270: 11c0004c */ beqz $t6,.L0f0413a4
/* f041274: 8fab025c */ lw $t3,0x25c($sp)
/* f041278: 916d0000 */ lbu $t5,0x0($t3)
/* f04127c: 24010006 */ addiu $at,$zero,0x6
/* f041280: 8fa40278 */ lw $a0,0x278($sp)
/* f041284: 15a10047 */ bne $t5,$at,.L0f0413a4
/* f041288: 27a50244 */ addiu $a1,$sp,0x244
/* f04128c: 27a60234 */ addiu $a2,$sp,0x234
/* f041290: 0fc0e47b */ jal chrCanSeeAttackTarget
/* f041294: 00003825 */ or $a3,$zero,$zero
/* f041298: 10400042 */ beqz $v0,.L0f0413a4
/* f04129c: 8faa025c */ lw $t2,0x25c($sp)
/* f0412a0: 8d440004 */ lw $a0,0x4($t2)
/* f0412a4: 8fa50278 */ lw $a1,0x278($sp)
/* f0412a8: 0fc12aa3 */ jal chrCompareTeams
/* f0412ac: 24060002 */ addiu $a2,$zero,0x2
/* f0412b0: 1040003c */ beqz $v0,.L0f0413a4
/* f0412b4: 3c014170 */ lui $at,0x4170
/* f0412b8: 44817000 */ mtc1 $at,$f14
/* f0412bc: 8faf025c */ lw $t7,0x25c($sp)
/* f0412c0: c7aa01e0 */ lwc1 $f10,0x1e0($sp)
/* f0412c4: c7a80244 */ lwc1 $f8,0x244($sp)
/* f0412c8: c5f00008 */ lwc1 $f16,0x8($t7)
/* f0412cc: 460e5182 */ mul.s $f6,$f10,$f14
/* f0412d0: c7aa01e4 */ lwc1 $f10,0x1e4($sp)
/* f0412d4: 46088481 */ sub.s $f18,$f16,$f8
/* f0412d8: c7b00248 */ lwc1 $f16,0x248($sp)
/* f0412dc: c5e4000c */ lwc1 $f4,0xc($t7)
/* f0412e0: 8fa40278 */ lw $a0,0x278($sp)
/* f0412e4: 27a501f8 */ addiu $a1,$sp,0x1f8
/* f0412e8: 46069001 */ sub.s $f0,$f18,$f6
/* f0412ec: 460e5482 */ mul.s $f18,$f10,$f14
/* f0412f0: c7aa01e8 */ lwc1 $f10,0x1e8($sp)
/* f0412f4: 46102201 */ sub.s $f8,$f4,$f16
/* f0412f8: c7a4024c */ lwc1 $f4,0x24c($sp)
/* f0412fc: c5e60010 */ lwc1 $f6,0x10($t7)
/* f041300: 27a601f4 */ addiu $a2,$sp,0x1f4
/* f041304: 46124081 */ sub.s $f2,$f8,$f18
/* f041308: 460e5202 */ mul.s $f8,$f10,$f14
/* f04130c: c7b201d0 */ lwc1 $f18,0x1d0($sp)
/* f041310: 46043401 */ sub.s $f16,$f6,$f4
/* f041314: 46000182 */ mul.s $f6,$f0,$f0
/* f041318: 00000000 */ nop
/* f04131c: 46021102 */ mul.s $f4,$f2,$f2
/* f041320: 46088301 */ sub.s $f12,$f16,$f8
/* f041324: 460c6402 */ mul.s $f16,$f12,$f12
/* f041328: 46043280 */ add.s $f10,$f6,$f4
/* f04132c: 46105200 */ add.s $f8,$f10,$f16
/* f041330: 4612403e */ c.le.s $f8,$f18
/* f041334: 00000000 */ nop
/* f041338: 4500002b */ bc1f .L0f0413e8
/* f04133c: 00000000 */ nop
/* f041340: 0fc0feac */ jal chrCalculateHit
/* f041344: 27a70260 */ addiu $a3,$sp,0x260
/* f041348: 8fb801f4 */ lw $t8,0x1f4($sp)
/* f04134c: 8fac01f8 */ lw $t4,0x1f8($sp)
/* f041350: 8fae0278 */ lw $t6,0x278($sp)
/* f041354: 2f190001 */ sltiu $t9,$t8,0x1
/* f041358: 11800023 */ beqz $t4,.L0f0413e8
/* f04135c: afb901f0 */ sw $t9,0x1f0($sp)
/* f041360: 81c30007 */ lb $v1,0x7($t6)
/* f041364: 24010008 */ addiu $at,$zero,0x8
/* f041368: 3c0b800a */ lui $t3,%hi(g_Vars+0x8)
/* f04136c: 1061000a */ beq $v1,$at,.L0f041398
/* f041370: 8fad0278 */ lw $t5,0x278($sp)
/* f041374: 2401000a */ addiu $at,$zero,0xa
/* f041378: 10610007 */ beq $v1,$at,.L0f041398
/* f04137c: 2401001b */ addiu $at,$zero,0x1b
/* f041380: 10610005 */ beq $v1,$at,.L0f041398
/* f041384: 2401001c */ addiu $at,$zero,0x1c
/* f041388: 10610003 */ beq $v1,$at,.L0f041398
/* f04138c: 2401001d */ addiu $at,$zero,0x1d
/* f041390: 54610016 */ bnel $v1,$at,.L0f0413ec
/* f041394: 8fb901f4 */ lw $t9,0x1f4($sp)
.L0f041398:
/* f041398: 8d6b9fc8 */ lw $t3,%lo(g_Vars+0x8)($t3)
/* f04139c: 10000012 */ b .L0f0413e8
/* f0413a0: adab0048 */ sw $t3,0x48($t5)
.L0f0413a4:
/* f0413a4: 8faa0278 */ lw $t2,0x278($sp)
/* f0413a8: 24010008 */ addiu $at,$zero,0x8
/* f0413ac: 3c0f800a */ lui $t7,%hi(g_Vars+0x8)
/* f0413b0: 81430007 */ lb $v1,0x7($t2)
/* f0413b4: 8fb80278 */ lw $t8,0x278($sp)
/* f0413b8: 10610009 */ beq $v1,$at,.L0f0413e0
/* f0413bc: 2401000a */ addiu $at,$zero,0xa
/* f0413c0: 10610007 */ beq $v1,$at,.L0f0413e0
/* f0413c4: 2401001b */ addiu $at,$zero,0x1b
/* f0413c8: 10610005 */ beq $v1,$at,.L0f0413e0
/* f0413cc: 2401001c */ addiu $at,$zero,0x1c
/* f0413d0: 10610003 */ beq $v1,$at,.L0f0413e0
/* f0413d4: 2401001d */ addiu $at,$zero,0x1d
/* f0413d8: 54610004 */ bnel $v1,$at,.L0f0413ec
/* f0413dc: 8fb901f4 */ lw $t9,0x1f4($sp)
.L0f0413e0:
/* f0413e0: 8def9fc8 */ lw $t7,%lo(g_Vars+0x8)($t7)
/* f0413e4: af0f0048 */ sw $t7,0x48($t8)
.L0f0413e8:
/* f0413e8: 8fb901f4 */ lw $t9,0x1f4($sp)
.L0f0413ec:
/* f0413ec: 8faa01cc */ lw $t2,0x1cc($sp)
/* f0413f0: 13200065 */ beqz $t9,.L0f041588
/* f0413f4: 00000000 */ nop
/* f0413f8: 0fc2c74a */ jal handGetDamage
/* f0413fc: 27a40260 */ addiu $a0,$sp,0x260
/* f041400: 8fab025c */ lw $t3,0x25c($sp)
/* f041404: 240cffff */ addiu $t4,$zero,-1
/* f041408: 240e00c8 */ addiu $t6,$zero,0xc8
/* f04140c: e7a0009c */ swc1 $f0,0x9c($sp)
/* f041410: afa00098 */ sw $zero,0x98($sp)
/* f041414: afa00094 */ sw $zero,0x94($sp)
/* f041418: afac0090 */ sw $t4,0x90($sp)
/* f04141c: afae008c */ sw $t6,0x8c($sp)
/* f041420: 8d6d0004 */ lw $t5,0x4($t3)
/* f041424: afad0088 */ sw $t5,0x88($sp)
/* f041428: c5660008 */ lwc1 $f6,0x8($t3)
/* f04142c: e7a60228 */ swc1 $f6,0x228($sp)
/* f041430: c564000c */ lwc1 $f4,0xc($t3)
/* f041434: e7a4022c */ swc1 $f4,0x22c($sp)
/* f041438: c56a0010 */ lwc1 $f10,0x10($t3)
/* f04143c: 0c004b70 */ jal random
/* f041440: e7aa0230 */ swc1 $f10,0x230($sp)
/* f041444: 304a0001 */ andi $t2,$v0,0x1
/* f041448: 11400012 */ beqz $t2,.L0f041494
/* f04144c: 00000000 */ nop
/* f041450: 0c004b70 */ jal random
/* f041454: 00000000 */ nop
/* f041458: 2401000a */ addiu $at,$zero,0xa
/* f04145c: 0041001b */ divu $zero,$v0,$at
/* f041460: 00007810 */ mfhi $t7
/* f041464: 25f80002 */ addiu $t8,$t7,0x2
/* f041468: 44989000 */ mtc1 $t8,$f18
/* f04146c: c7b0022c */ lwc1 $f16,0x22c($sp)
/* f041470: 07010005 */ bgez $t8,.L0f041488
/* f041474: 46809220 */ cvt.s.w $f8,$f18
/* f041478: 3c014f80 */ lui $at,0x4f80
/* f04147c: 44813000 */ mtc1 $at,$f6
/* f041480: 00000000 */ nop
/* f041484: 46064200 */ add.s $f8,$f8,$f6
.L0f041488:
/* f041488: 46088100 */ add.s $f4,$f16,$f8
/* f04148c: 10000011 */ b .L0f0414d4
/* f041490: e7a4022c */ swc1 $f4,0x22c($sp)
.L0f041494:
/* f041494: 0c004b70 */ jal random
/* f041498: 00000000 */ nop
/* f04149c: 2401000a */ addiu $at,$zero,0xa
/* f0414a0: 0041001b */ divu $zero,$v0,$at
/* f0414a4: 0000c810 */ mfhi $t9
/* f0414a8: 272c0002 */ addiu $t4,$t9,0x2
/* f0414ac: 448c9000 */ mtc1 $t4,$f18
/* f0414b0: c7aa022c */ lwc1 $f10,0x22c($sp)
/* f0414b4: 05810005 */ bgez $t4,.L0f0414cc
/* f0414b8: 468091a0 */ cvt.s.w $f6,$f18
/* f0414bc: 3c014f80 */ lui $at,0x4f80
/* f0414c0: 44818000 */ mtc1 $at,$f16
/* f0414c4: 00000000 */ nop
/* f0414c8: 46103180 */ add.s $f6,$f6,$f16
.L0f0414cc:
/* f0414cc: 46065201 */ sub.s $f8,$f10,$f6
/* f0414d0: e7a8022c */ swc1 $f8,0x22c($sp)
.L0f0414d4:
/* f0414d4: 27a40260 */ addiu $a0,$sp,0x260
/* f0414d8: 8fa5025c */ lw $a1,0x25c($sp)
/* f0414dc: 0fc29f66 */ jal func0f0a7d98
/* f0414e0: 2406ffff */ addiu $a2,$zero,-1
/* f0414e4: 8fa40088 */ lw $a0,0x88($sp)
/* f0414e8: 8c8e0020 */ lw $t6,0x20($a0)
/* f0414ec: 51c00012 */ beqzl $t6,.L0f041538
/* f0414f0: 8faf0278 */ lw $t7,0x278($sp)
/* f0414f4: 0fc0cfe8 */ jal chrGetShield
/* f0414f8: 00000000 */ nop
/* f0414fc: 44802000 */ mtc1 $zero,$f4
/* f041500: 8fa40088 */ lw $a0,0x88($sp)
/* f041504: 27a50228 */ addiu $a1,$sp,0x228
/* f041508: 4600203c */ c.lt.s $f4,$f0
/* f04150c: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f041510: 27a70098 */ addiu $a3,$sp,0x98
/* f041514: 27ad008c */ addiu $t5,$sp,0x8c
/* f041518: 45000006 */ bc1f .L0f041534
/* f04151c: 27ab0094 */ addiu $t3,$sp,0x94
/* f041520: 27aa0090 */ addiu $t2,$sp,0x90
/* f041524: afaa0018 */ sw $t2,0x18($sp)
/* f041528: afad0010 */ sw $t5,0x10($sp)
/* f04152c: 0fc0ffcb */ jal chrCalculateShieldHit
/* f041530: afab0014 */ sw $t3,0x14($sp)
.L0f041534:
/* f041534: 8faf0278 */ lw $t7,0x278($sp)
.L0f041538:
/* f041538: 8fac025c */ lw $t4,0x25c($sp)
/* f04153c: 8fae0098 */ lw $t6,0x98($sp)
/* f041540: 8df8001c */ lw $t8,0x1c($t7)
/* f041544: 8fad0094 */ lw $t5,0x94($sp)
/* f041548: 8fab0090 */ lw $t3,0x90($sp)
/* f04154c: 241900c8 */ addiu $t9,$zero,0xc8
/* f041550: 8fa40088 */ lw $a0,0x88($sp)
/* f041554: afb90014 */ sw $t9,0x14($sp)
/* f041558: afa00028 */ sw $zero,0x28($sp)
/* f04155c: 8fa5009c */ lw $a1,0x9c($sp)
/* f041560: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f041564: 27a70260 */ addiu $a3,$sp,0x260
/* f041568: afac0018 */ sw $t4,0x18($sp)
/* f04156c: afae001c */ sw $t6,0x1c($sp)
/* f041570: afb80010 */ sw $t8,0x10($sp)
/* f041574: afad0020 */ sw $t5,0x20($sp)
/* f041578: 0fc0d077 */ jal func0f0341dc
/* f04157c: afab0024 */ sw $t3,0x24($sp)
/* f041580: 10000010 */ b .L0f0415c4
/* f041584: 8faf01f0 */ lw $t7,0x1f0($sp)
.L0f041588:
/* f041588: 11400006 */ beqz $t2,.L0f0415a4
/* f04158c: c7b201d0 */ lwc1 $f18,0x1d0($sp)
/* f041590: 91420000 */ lbu $v0,0x0($t2)
/* f041594: 24010003 */ addiu $at,$zero,0x3
/* f041598: 10410009 */ beq $v0,$at,.L0f0415c0
/* f04159c: 24010006 */ addiu $at,$zero,0x6
/* f0415a0: 10410007 */ beq $v0,$at,.L0f0415c0
.L0f0415a4:
/* f0415a4: 3c017f1b */ lui $at,%hi(var7f1a90dc)
/* f0415a8: c43090dc */ lwc1 $f16,%lo(var7f1a90dc)($at)
/* f0415ac: 4610903c */ c.lt.s $f18,$f16
/* f0415b0: 00000000 */ nop
/* f0415b4: 45020003 */ bc1fl .L0f0415c4
/* f0415b8: 8faf01f0 */ lw $t7,0x1f0($sp)
/* f0415bc: afa001f0 */ sw $zero,0x1f0($sp)
.L0f0415c0:
/* f0415c0: 8faf01f0 */ lw $t7,0x1f0($sp)
.L0f0415c4:
/* f0415c4: 8fb801cc */ lw $t8,0x1cc($sp)
/* f0415c8: 51e000e5 */ beqzl $t7,.L0f041960
/* f0415cc: 8fae01c0 */ lw $t6,0x1c0($sp)
/* f0415d0: 130000a2 */ beqz $t8,.L0f04185c
/* f0415d4: 8fae0224 */ lw $t6,0x224($sp)
/* f0415d8: 93020000 */ lbu $v0,0x0($t8)
/* f0415dc: 24010006 */ addiu $at,$zero,0x6
/* f0415e0: 93b9026f */ lbu $t9,0x26f($sp)
/* f0415e4: 10410003 */ beq $v0,$at,.L0f0415f4
/* f0415e8: 24010003 */ addiu $at,$zero,0x3
/* f0415ec: 54410053 */ bnel $v0,$at,.L0f04173c
/* f0415f0: 24010001 */ addiu $at,$zero,0x1
.L0f0415f4:
/* f0415f4: 1720000c */ bnez $t9,.L0f041628
/* f0415f8: 8fac01bc */ lw $t4,0x1bc($sp)
/* f0415fc: 1580000a */ bnez $t4,.L0f041628
/* f041600: 8fae0278 */ lw $t6,0x278($sp)
/* f041604: 8dcd0018 */ lw $t5,0x18($t6)
/* f041608: 8faa01cc */ lw $t2,0x1cc($sp)
/* f04160c: 01c02825 */ or $a1,$t6,$zero
/* f041610: 31ab0040 */ andi $t3,$t5,0x40
/* f041614: 11600045 */ beqz $t3,.L0f04172c
/* f041618: 24060002 */ addiu $a2,$zero,0x2
/* f04161c: 0fc12aa3 */ jal chrCompareTeams
/* f041620: 8d440004 */ lw $a0,0x4($t2)
/* f041624: 10400041 */ beqz $v0,.L0f04172c
.L0f041628:
/* f041628: 240fffff */ addiu $t7,$zero,-1
/* f04162c: 241800c8 */ addiu $t8,$zero,0xc8
/* f041630: afa00084 */ sw $zero,0x84($sp)
/* f041634: afa00080 */ sw $zero,0x80($sp)
/* f041638: afaf007c */ sw $t7,0x7c($sp)
/* f04163c: afb80078 */ sw $t8,0x78($sp)
/* f041640: 0fc2c74a */ jal handGetDamage
/* f041644: 27a40260 */ addiu $a0,$sp,0x260
/* f041648: 8fa501cc */ lw $a1,0x1cc($sp)
/* f04164c: e7a00074 */ swc1 $f0,0x74($sp)
/* f041650: 27a40260 */ addiu $a0,$sp,0x260
/* f041654: 8cac0004 */ lw $t4,0x4($a1)
/* f041658: 2406ffff */ addiu $a2,$zero,-1
/* f04165c: 0fc29f66 */ jal func0f0a7d98
/* f041660: afac0070 */ sw $t4,0x70($sp)
/* f041664: 8fa40070 */ lw $a0,0x70($sp)
/* f041668: 8c8d0020 */ lw $t5,0x20($a0)
/* f04166c: 51a00012 */ beqzl $t5,.L0f0416b8
/* f041670: 8fb80278 */ lw $t8,0x278($sp)
/* f041674: 0fc0cfe8 */ jal chrGetShield
/* f041678: 00000000 */ nop
/* f04167c: 44805000 */ mtc1 $zero,$f10
/* f041680: 8fa40070 */ lw $a0,0x70($sp)
/* f041684: 27a50228 */ addiu $a1,$sp,0x228
/* f041688: 4600503c */ c.lt.s $f10,$f0
/* f04168c: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f041690: 27a70084 */ addiu $a3,$sp,0x84
/* f041694: 27ab0078 */ addiu $t3,$sp,0x78
/* f041698: 45000006 */ bc1f .L0f0416b4
/* f04169c: 27aa0080 */ addiu $t2,$sp,0x80
/* f0416a0: 27ae007c */ addiu $t6,$sp,0x7c
/* f0416a4: afae0018 */ sw $t6,0x18($sp)
/* f0416a8: afab0010 */ sw $t3,0x10($sp)
/* f0416ac: 0fc0ffcb */ jal chrCalculateShieldHit
/* f0416b0: afaa0014 */ sw $t2,0x14($sp)
.L0f0416b4:
/* f0416b4: 8fb80278 */ lw $t8,0x278($sp)
.L0f0416b8:
/* f0416b8: 27af01e0 */ addiu $t7,$sp,0x1e0
/* f0416bc: 8fa40070 */ lw $a0,0x70($sp)
/* f0416c0: afaf0010 */ sw $t7,0x10($sp)
/* f0416c4: 8fa501cc */ lw $a1,0x1cc($sp)
/* f0416c8: 8fa60078 */ lw $a2,0x78($sp)
/* f0416cc: 27a70228 */ addiu $a3,$sp,0x228
/* f0416d0: 0fc097a9 */ jal chrEmitSparks
/* f0416d4: afb80014 */ sw $t8,0x14($sp)
/* f0416d8: 8fac0278 */ lw $t4,0x278($sp)
/* f0416dc: 8fab01cc */ lw $t3,0x1cc($sp)
/* f0416e0: 8faa0084 */ lw $t2,0x84($sp)
/* f0416e4: 8d99001c */ lw $t9,0x1c($t4)
/* f0416e8: 8fae0080 */ lw $t6,0x80($sp)
/* f0416ec: 8faf007c */ lw $t7,0x7c($sp)
/* f0416f0: 240d00c8 */ addiu $t5,$zero,0xc8
/* f0416f4: afad0014 */ sw $t5,0x14($sp)
/* f0416f8: afa00028 */ sw $zero,0x28($sp)
/* f0416fc: 8fa40070 */ lw $a0,0x70($sp)
/* f041700: 8fa50074 */ lw $a1,0x74($sp)
/* f041704: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f041708: 27a70260 */ addiu $a3,$sp,0x260
/* f04170c: afab0018 */ sw $t3,0x18($sp)
/* f041710: afaa001c */ sw $t2,0x1c($sp)
/* f041714: afb90010 */ sw $t9,0x10($sp)
/* f041718: afae0020 */ sw $t6,0x20($sp)
/* f04171c: 0fc0d077 */ jal func0f0341dc
/* f041720: afaf0024 */ sw $t7,0x24($sp)
/* f041724: 1000006f */ b .L0f0418e4
/* f041728: 93ac0260 */ lbu $t4,0x260($sp)
.L0f04172c:
/* f04172c: afa00250 */ sw $zero,0x250($sp)
/* f041730: 1000006b */ b .L0f0418e0
/* f041734: afa00268 */ sw $zero,0x268($sp)
/* f041738: 24010001 */ addiu $at,$zero,0x1
.L0f04173c:
/* f04173c: 10410005 */ beq $v0,$at,.L0f041754
/* f041740: 8fb801cc */ lw $t8,0x1cc($sp)
/* f041744: 24010004 */ addiu $at,$zero,0x4
/* f041748: 10410002 */ beq $v0,$at,.L0f041754
/* f04174c: 24010002 */ addiu $at,$zero,0x2
/* f041750: 14410063 */ bne $v0,$at,.L0f0418e0
.L0f041754:
/* f041754: 3c0d800a */ lui $t5,%hi(g_Vars+0x314)
/* f041758: 8dada2d4 */ lw $t5,%lo(g_Vars+0x314)($t5)
/* f04175c: 8f0c0004 */ lw $t4,0x4($t8)
/* f041760: 2419ffff */ addiu $t9,$zero,-1
/* f041764: afb90068 */ sw $t9,0x68($sp)
/* f041768: 11a00004 */ beqz $t5,.L0f04177c
/* f04176c: afac006c */ sw $t4,0x6c($sp)
/* f041770: 0fc633fe */ jal mpPlayerGetIndex
/* f041774: 8fa40278 */ lw $a0,0x278($sp)
/* f041778: afa20068 */ sw $v0,0x68($sp)
.L0f04177c:
/* f04177c: 27a40260 */ addiu $a0,$sp,0x260
/* f041780: 8fa501cc */ lw $a1,0x1cc($sp)
/* f041784: 0fc29f66 */ jal func0f0a7d98
/* f041788: 2406ffff */ addiu $a2,$zero,-1
/* f04178c: 27a40244 */ addiu $a0,$sp,0x244
/* f041790: 27a50234 */ addiu $a1,$sp,0x234
/* f041794: 27a60228 */ addiu $a2,$sp,0x228
/* f041798: 0fc1979d */ jal func0f065e74
/* f04179c: 27a70214 */ addiu $a3,$sp,0x214
/* f0417a0: 240b0001 */ addiu $t3,$zero,0x1
/* f0417a4: afab0210 */ sw $t3,0x210($sp)
/* f0417a8: 0fc4f92a */ jal chrIsUsingPaintball
/* f0417ac: 8fa40278 */ lw $a0,0x278($sp)
/* f0417b0: 1040000b */ beqz $v0,.L0f0417e0
/* f0417b4: 87a40214 */ lh $a0,0x214($sp)
/* f0417b8: 240a0019 */ addiu $t2,$zero,0x19
/* f0417bc: afaa0014 */ sw $t2,0x14($sp)
/* f0417c0: 87a40214 */ lh $a0,0x214($sp)
/* f0417c4: 8fa501cc */ lw $a1,0x1cc($sp)
/* f0417c8: 27a60228 */ addiu $a2,$sp,0x228
/* f0417cc: 00003825 */ or $a3,$zero,$zero
/* f0417d0: 0fc4be7c */ jal sparksCreate
/* f0417d4: afa00010 */ sw $zero,0x10($sp)
/* f0417d8: 10000007 */ b .L0f0417f8
/* f0417dc: 00000000 */ nop
.L0f0417e0:
/* f0417e0: 8fa501cc */ lw $a1,0x1cc($sp)
/* f0417e4: 27a60228 */ addiu $a2,$sp,0x228
/* f0417e8: 00003825 */ or $a3,$zero,$zero
/* f0417ec: afa00010 */ sw $zero,0x10($sp)
/* f0417f0: 0fc4be7c */ jal sparksCreate
/* f0417f4: afa00014 */ sw $zero,0x14($sp)
.L0f0417f8:
/* f0417f8: 3c0e800a */ lui $t6,%hi(g_MissionConfig+0x3)
/* f0417fc: 81cfdfeb */ lb $t7,%lo(g_MissionConfig+0x3)($t6)
/* f041800: 8fb80278 */ lw $t8,0x278($sp)
/* f041804: 05e1000a */ bgez $t7,.L0f041830
/* f041808: 00000000 */ nop
/* f04180c: 930c0125 */ lbu $t4,0x125($t8)
/* f041810: 24010010 */ addiu $at,$zero,0x10
/* f041814: 8fb9006c */ lw $t9,0x6c($sp)
/* f041818: 15810005 */ bne $t4,$at,.L0f041830
/* f04181c: 00000000 */ nop
/* f041820: 8f2d000c */ lw $t5,0xc($t9)
/* f041824: 31ab0001 */ andi $t3,$t5,0x1
/* f041828: 5560002e */ bnezl $t3,.L0f0418e4
/* f04182c: 93ac0260 */ lbu $t4,0x260($sp)
.L0f041830:
/* f041830: 0fc2c74a */ jal handGetDamage
/* f041834: 27a40260 */ addiu $a0,$sp,0x260
/* f041838: 8faa0068 */ lw $t2,0x68($sp)
/* f04183c: 44050000 */ mfc1 $a1,$f0
/* f041840: 8fa4006c */ lw $a0,0x6c($sp)
/* f041844: 27a60228 */ addiu $a2,$sp,0x228
/* f041848: 93a70260 */ lbu $a3,0x260($sp)
/* f04184c: 0fc2149c */ jal func0f085270
/* f041850: afaa0010 */ sw $t2,0x10($sp)
/* f041854: 10000023 */ b .L0f0418e4
/* f041858: 93ac0260 */ lbu $t4,0x260($sp)
.L0f04185c:
/* f04185c: 11c00020 */ beqz $t6,.L0f0418e0
/* f041860: 27a40244 */ addiu $a0,$sp,0x244
/* f041864: 27a50234 */ addiu $a1,$sp,0x234
/* f041868: 27a60228 */ addiu $a2,$sp,0x228
/* f04186c: 0fc1979d */ jal func0f065e74
/* f041870: 27a70214 */ addiu $a3,$sp,0x214
/* f041874: 240f0001 */ addiu $t7,$zero,0x1
/* f041878: afaf0210 */ sw $t7,0x210($sp)
/* f04187c: 27a40260 */ addiu $a0,$sp,0x260
/* f041880: 27a50228 */ addiu $a1,$sp,0x228
/* f041884: 2406ffff */ addiu $a2,$zero,-1
/* f041888: 0fc2a132 */ jal func0f0a84c8
/* f04188c: 27a70214 */ addiu $a3,$sp,0x214
/* f041890: 0fc4f92a */ jal chrIsUsingPaintball
/* f041894: 8fa40278 */ lw $a0,0x278($sp)
/* f041898: 1040000b */ beqz $v0,.L0f0418c8
/* f04189c: 87a40214 */ lh $a0,0x214($sp)
/* f0418a0: 24180019 */ addiu $t8,$zero,0x19
/* f0418a4: afb80014 */ sw $t8,0x14($sp)
/* f0418a8: 87a40214 */ lh $a0,0x214($sp)
/* f0418ac: 00002825 */ or $a1,$zero,$zero
/* f0418b0: 27a60228 */ addiu $a2,$sp,0x228
/* f0418b4: 00003825 */ or $a3,$zero,$zero
/* f0418b8: 0fc4be7c */ jal sparksCreate
/* f0418bc: afa00010 */ sw $zero,0x10($sp)
/* f0418c0: 10000008 */ b .L0f0418e4
/* f0418c4: 93ac0260 */ lbu $t4,0x260($sp)
.L0f0418c8:
/* f0418c8: 00002825 */ or $a1,$zero,$zero
/* f0418cc: 27a60228 */ addiu $a2,$sp,0x228
/* f0418d0: 00003825 */ or $a3,$zero,$zero
/* f0418d4: afa00010 */ sw $zero,0x10($sp)
/* f0418d8: 0fc4be7c */ jal sparksCreate
/* f0418dc: afa00014 */ sw $zero,0x14($sp)
.L0f0418e0:
/* f0418e0: 93ac0260 */ lbu $t4,0x260($sp)
.L0f0418e4:
/* f0418e4: 24010007 */ addiu $at,$zero,0x7
/* f0418e8: 93b90263 */ lbu $t9,0x263($sp)
/* f0418ec: 1581001b */ bne $t4,$at,.L0f04195c
/* f0418f0: 24010001 */ addiu $at,$zero,0x1
/* f0418f4: 17210019 */ bne $t9,$at,.L0f04195c
/* f0418f8: 8fad0278 */ lw $t5,0x278($sp)
/* f0418fc: 8dab02d4 */ lw $t3,0x2d4($t5)
/* f041900: 3c03800a */ lui $v1,%hi(g_Vars+0x28c)
/* f041904: 11600005 */ beqz $t3,.L0f04191c
/* f041908: 00000000 */ nop
/* f04190c: 0fc633fe */ jal mpPlayerGetIndex
/* f041910: 01a02025 */ or $a0,$t5,$zero
/* f041914: 10000002 */ b .L0f041920
/* f041918: 00401825 */ or $v1,$v0,$zero
.L0f04191c:
/* f04191c: 8c63a24c */ lw $v1,%lo(g_Vars+0x28c)($v1)
.L0f041920:
/* f041920: 8faa0210 */ lw $t2,0x210($sp)
/* f041924: 27a40244 */ addiu $a0,$sp,0x244
/* f041928: 27a50234 */ addiu $a1,$sp,0x234
/* f04192c: 15400005 */ bnez $t2,.L0f041944
/* f041930: 27a60228 */ addiu $a2,$sp,0x228
/* f041934: 27a70214 */ addiu $a3,$sp,0x214
/* f041938: 0fc1979d */ jal func0f065e74
/* f04193c: afa30064 */ sw $v1,0x64($sp)
/* f041940: 8fa30064 */ lw $v1,0x64($sp)
.L0f041944:
/* f041944: 00002025 */ or $a0,$zero,$zero
/* f041948: 27a50228 */ addiu $a1,$sp,0x228
/* f04194c: 27a60214 */ addiu $a2,$sp,0x214
/* f041950: 24070016 */ addiu $a3,$zero,0x16
/* f041954: 0fc4a640 */ jal explosionCreateSimple
/* f041958: afa30010 */ sw $v1,0x10($sp)
.L0f04195c:
/* f04195c: 8fae01c0 */ lw $t6,0x1c0($sp)
.L0f041960:
/* f041960: 8fa4025c */ lw $a0,0x25c($sp)
/* f041964: 51c00004 */ beqzl $t6,.L0f041978
/* f041968: 8fa80268 */ lw $t0,0x268($sp)
/* f04196c: 0fc1905e */ jal propSetCollisionsEnabled
/* f041970: 00002825 */ or $a1,$zero,$zero
/* f041974: 8fa80268 */ lw $t0,0x268($sp)
.L0f041978:
/* f041978: 8fb80250 */ lw $t8,0x250($sp)
/* f04197c: 93ac0260 */ lbu $t4,0x260($sp)
/* f041980: 0008782b */ sltu $t7,$zero,$t0
/* f041984: 1300000e */ beqz $t8,.L0f0419c0
/* f041988: 01e04025 */ or $t0,$t7,$zero
/* f04198c: 2599fffe */ addiu $t9,$t4,-2
/* f041990: 2f21002a */ sltiu $at,$t9,0x2a
/* f041994: 10200009 */ beqz $at,.L0f0419bc
/* f041998: 0019c880 */ sll $t9,$t9,0x2
/* f04199c: 3c017f1b */ lui $at,%hi(var7f1a90e0)
/* f0419a0: 00390821 */ addu $at,$at,$t9
/* f0419a4: 8c3990e0 */ lw $t9,%lo(var7f1a90e0)($at)
/* f0419a8: 03200008 */ jr $t9
/* f0419ac: 00000000 */ nop
/* f0419b0: 240b0001 */ addiu $t3,$zero,0x1
/* f0419b4: 10000002 */ b .L0f0419c0
/* f0419b8: afab0250 */ sw $t3,0x250($sp)
.L0f0419bc:
/* f0419bc: afa00250 */ sw $zero,0x250($sp)
.L0f0419c0:
/* f0419c0: 11000004 */ beqz $t0,.L0f0419d4
/* f0419c4: 01003825 */ or $a3,$t0,$zero
/* f0419c8: 8fa70250 */ lw $a3,0x250($sp)
/* f0419cc: 0007682b */ sltu $t5,$zero,$a3
/* f0419d0: 01a03825 */ or $a3,$t5,$zero
.L0f0419d4:
/* f0419d4: 27aa0244 */ addiu $t2,$sp,0x244
/* f0419d8: 27ae0228 */ addiu $t6,$sp,0x228
/* f0419dc: afae0014 */ sw $t6,0x14($sp)
/* f0419e0: afaa0010 */ sw $t2,0x10($sp)
/* f0419e4: 8fa40278 */ lw $a0,0x278($sp)
/* f0419e8: 8fa5027c */ lw $a1,0x27c($sp)
/* f0419ec: 8fa60268 */ lw $a2,0x268($sp)
/* f0419f0: 0fc0f8a7 */ jal func0f03e29c
/* f0419f4: afa80054 */ sw $t0,0x54($sp)
/* f0419f8: 93af026f */ lbu $t7,0x26f($sp)
/* f0419fc: 8fa80054 */ lw $t0,0x54($sp)
/* f041a00: 8fa40278 */ lw $a0,0x278($sp)
/* f041a04: 11e00015 */ beqz $t7,.L0f041a5c
/* f041a08: 8fa5027c */ lw $a1,0x27c($sp)
/* f041a0c: 1100000a */ beqz $t0,.L0f041a38
/* f041a10: 01003025 */ or $a2,$t0,$zero
/* f041a14: 8fb80278 */ lw $t8,0x278($sp)
/* f041a18: 8fb9027c */ lw $t9,0x27c($sp)
/* f041a1c: 8f0c02d4 */ lw $t4,0x2d4($t8)
/* f041a20: 00195880 */ sll $t3,$t9,0x2
/* f041a24: 018b1021 */ addu $v0,$t4,$t3
/* f041a28: 8c430024 */ lw $v1,0x24($v0)
/* f041a2c: 18600002 */ blez $v1,.L0f041a38
/* f041a30: 246dffff */ addiu $t5,$v1,-1
/* f041a34: ac4d0024 */ sw $t5,0x24($v0)
.L0f041a38:
/* f041a38: 11000004 */ beqz $t0,.L0f041a4c
/* f041a3c: 8fa40278 */ lw $a0,0x278($sp)
/* f041a40: 93a6026e */ lbu $a2,0x26e($sp)
/* f041a44: 0006502b */ sltu $t2,$zero,$a2
/* f041a48: 01403025 */ or $a2,$t2,$zero
.L0f041a4c:
/* f041a4c: 0fc0fe12 */ jal chrSetFiring
/* f041a50: 8fa5027c */ lw $a1,0x27c($sp)
/* f041a54: 10000004 */ b .L0f041a68
/* f041a58: 8fbf0044 */ lw $ra,0x44($sp)
.L0f041a5c:
/* f041a5c: 0fc0fe12 */ jal chrSetFiring
/* f041a60: 8fa60268 */ lw $a2,0x268($sp)
/* f041a64: 8fbf0044 */ lw $ra,0x44($sp)
.L0f041a68:
/* f041a68: 27bd0278 */ addiu $sp,$sp,0x278
/* f041a6c: 03e00008 */ jr $ra
/* f041a70: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f0404d4
.late_rodata
glabel var7f1a90c8
.word 0x3d638e39
glabel var7f1a90cc
.word 0x481c4000
glabel var7f1a90d0
.word 0x3fd55555
glabel var7f1a90d4
.word 0x3fd55555
glabel var7f1a90d8
.word 0x3fd55555
glabel var7f1a90dc
.word 0x461c4000
glabel var7f1a90e0
.word func0f0404d4+0x14c4
glabel var7f1a90e4
.word func0f0404d4+0x14c4
glabel var7f1a90e8
.word func0f0404d4+0x14c4
glabel var7f1a90ec
.word func0f0404d4+0x14c4
glabel var7f1a90f0
.word func0f0404d4+0x14c4
glabel var7f1a90f4
.word func0f0404d4+0x14c4
glabel var7f1a90f8
.word func0f0404d4+0x14c4
glabel var7f1a90fc
.word func0f0404d4+0x14c4
glabel var7f1a9100
.word func0f0404d4+0x14c4
glabel var7f1a9104
.word func0f0404d4+0x14c4
glabel var7f1a9108
.word func0f0404d4+0x14c4
glabel var7f1a910c
.word func0f0404d4+0x14c4
glabel var7f1a9110
.word func0f0404d4+0x14c4
glabel var7f1a9114
.word func0f0404d4+0x14c4
glabel var7f1a9118
.word func0f0404d4+0x14c4
glabel var7f1a911c
.word func0f0404d4+0x14c4
glabel var7f1a9120
.word func0f0404d4+0x14c4
glabel var7f1a9124
.word func0f0404d4+0x14d0
glabel var7f1a9128
.word func0f0404d4+0x14c4
glabel var7f1a912c
.word func0f0404d4+0x14c4
glabel var7f1a9130
.word func0f0404d4+0x14c4
glabel var7f1a9134
.word func0f0404d4+0x14d0
glabel var7f1a9138
.word func0f0404d4+0x14d0
glabel var7f1a913c
.word func0f0404d4+0x14d0
glabel var7f1a9140
.word func0f0404d4+0x14d0
glabel var7f1a9144
.word func0f0404d4+0x14d0
glabel var7f1a9148
.word func0f0404d4+0x14c4
glabel var7f1a914c
.word func0f0404d4+0x14c4
glabel var7f1a9150
.word func0f0404d4+0x14d0
glabel var7f1a9154
.word func0f0404d4+0x14d0
glabel var7f1a9158
.word func0f0404d4+0x14d0
glabel var7f1a915c
.word func0f0404d4+0x14d0
glabel var7f1a9160
.word func0f0404d4+0x14d0
glabel var7f1a9164
.word func0f0404d4+0x14d0
glabel var7f1a9168
.word func0f0404d4+0x14c4
glabel var7f1a916c
.word func0f0404d4+0x14c4
glabel var7f1a9170
.word func0f0404d4+0x14c4
glabel var7f1a9174
.word func0f0404d4+0x14c4
glabel var7f1a9178
.word func0f0404d4+0x14c4
glabel var7f1a917c
.word func0f0404d4+0x14c4
glabel var7f1a9180
.word func0f0404d4+0x14c4
glabel var7f1a9184
.word func0f0404d4+0x14c4
.text
/* f03fcb4: 27bdfd88 */ addiu $sp,$sp,-632
/* f03fcb8: afbf0044 */ sw $ra,0x44($sp)
/* f03fcbc: afa5027c */ sw $a1,0x27c($sp)
/* f03fcc0: 8c8e001c */ lw $t6,0x1c($a0)
/* f03fcc4: 240f0001 */ addiu $t7,$zero,0x1
/* f03fcc8: a3af026e */ sb $t7,0x26e($sp)
/* f03fccc: afae0274 */ sw $t6,0x274($sp)
/* f03fcd0: 8c9802d4 */ lw $t8,0x2d4($a0)
/* f03fcd4: 00001025 */ or $v0,$zero,$zero
/* f03fcd8: 8fa5027c */ lw $a1,0x27c($sp)
/* f03fcdc: 53000003 */ beqzl $t8,.NB0f03fcec
/* f03fce0: a3a2026f */ sb $v0,0x26f($sp)
/* f03fce4: 24020001 */ addiu $v0,$zero,0x1
/* f03fce8: a3a2026f */ sb $v0,0x26f($sp)
.NB0f03fcec:
/* f03fcec: 0fc0a074 */ jal chrGetEquippedWeaponProp
/* f03fcf0: afa40278 */ sw $a0,0x278($sp)
/* f03fcf4: 5040054e */ beqzl $v0,.NB0f041230
/* f03fcf8: 8fbf0044 */ lw $ra,0x44($sp)
/* f03fcfc: afa00268 */ sw $zero,0x268($sp)
/* f03fd00: 8c590004 */ lw $t9,0x4($v0)
/* f03fd04: 8fa40278 */ lw $a0,0x278($sp)
/* f03fd08: 0fc0a08c */ jal chrGetTargetProp
/* f03fd0c: afb90264 */ sw $t9,0x264($sp)
/* f03fd10: 8fab0264 */ lw $t3,0x264($sp)
/* f03fd14: afa2025c */ sw $v0,0x25c($sp)
/* f03fd18: 8fa70278 */ lw $a3,0x278($sp)
/* f03fd1c: 8961005c */ lwl $at,0x5c($t3)
/* f03fd20: 9961005f */ lwr $at,0x5f($t3)
/* f03fd24: 27aa0260 */ addiu $t2,$sp,0x260
/* f03fd28: 24080200 */ addiu $t0,$zero,0x200
/* f03fd2c: ad410000 */ sw $at,0x0($t2)
/* f03fd30: 80e30007 */ lb $v1,0x7($a3)
/* f03fd34: 24010008 */ addiu $at,$zero,0x8
/* f03fd38: 10610007 */ beq $v1,$at,.NB0f03fd58
/* f03fd3c: 2401001b */ addiu $at,$zero,0x1b
/* f03fd40: 10610005 */ beq $v1,$at,.NB0f03fd58
/* f03fd44: 2401001c */ addiu $at,$zero,0x1c
/* f03fd48: 10610003 */ beq $v1,$at,.NB0f03fd58
/* f03fd4c: 2401001d */ addiu $at,$zero,0x1d
/* f03fd50: 54610003 */ bnel $v1,$at,.NB0f03fd60
/* f03fd54: afa00250 */ sw $zero,0x250($sp)
.NB0f03fd58:
/* f03fd58: 8ce8004c */ lw $t0,0x4c($a3)
/* f03fd5c: afa00250 */ sw $zero,0x250($sp)
.NB0f03fd60:
/* f03fd60: afa00224 */ sw $zero,0x224($sp)
/* f03fd64: afa00210 */ sw $zero,0x210($sp)
/* f03fd68: 93a40260 */ lbu $a0,0x260($sp)
/* f03fd6c: 93a50263 */ lbu $a1,0x263($sp)
/* f03fd70: afa00254 */ sw $zero,0x254($sp)
/* f03fd74: 0fc2bf12 */ jal weaponGetNumTicksPerShot
/* f03fd78: afa80258 */ sw $t0,0x258($sp)
/* f03fd7c: 8fa60254 */ lw $a2,0x254($sp)
/* f03fd80: 1c400005 */ bgtz $v0,.NB0f03fd98
/* f03fd84: 00402025 */ or $a0,$v0,$zero
/* f03fd88: 240f0001 */ addiu $t7,$zero,0x1
/* f03fd8c: 24060001 */ addiu $a2,$zero,0x1
/* f03fd90: 10000055 */ beqz $zero,.NB0f03fee8
/* f03fd94: afaf0250 */ sw $t7,0x250($sp)
.NB0f03fd98:
/* f03fd98: 8fb80278 */ lw $t8,0x278($sp)
/* f03fd9c: 8f0302d4 */ lw $v1,0x2d4($t8)
/* f03fda0: 5060001d */ beqzl $v1,.NB0f03fe18
/* f03fda4: 8faa0278 */ lw $t2,0x278($sp)
/* f03fda8: 8c790020 */ lw $t9,0x20($v1)
/* f03fdac: 24010014 */ addiu $at,$zero,0x14
/* f03fdb0: 57210019 */ bnel $t9,$at,.NB0f03fe18
/* f03fdb4: 8faa0278 */ lw $t2,0x278($sp)
/* f03fdb8: 8c6d004c */ lw $t5,0x4c($v1)
/* f03fdbc: 8fab027c */ lw $t3,0x27c($sp)
/* f03fdc0: 000d5080 */ sll $t2,$t5,0x2
/* f03fdc4: 05400013 */ bltz $t2,.NB0f03fe14
/* f03fdc8: 000b7040 */ sll $t6,$t3,0x1
/* f03fdcc: 006e7821 */ addu $t7,$v1,$t6
/* f03fdd0: 85f800e0 */ lh $t8,0xe0($t7)
/* f03fdd4: 2419005a */ addiu $t9,$zero,0x5a
/* f03fdd8: 3c017f1a */ lui $at,0x7f1a
/* f03fddc: 03386823 */ subu $t5,$t9,$t8
/* f03fde0: 448d2000 */ mtc1 $t5,$f4
/* f03fde4: c42833fc */ lwc1 $f8,0x33fc($at)
/* f03fde8: 44825000 */ mtc1 $v0,$f10
/* f03fdec: 468021a0 */ cvt.s.w $f6,$f4
/* f03fdf0: 3c013f80 */ lui $at,0x3f80
/* f03fdf4: 44819000 */ mtc1 $at,$f18
/* f03fdf8: 46805420 */ cvt.s.w $f16,$f10
/* f03fdfc: 46083002 */ mul.s $f0,$f6,$f8
/* f03fe00: 46009100 */ add.s $f4,$f18,$f0
/* f03fe04: 46048182 */ mul.s $f6,$f16,$f4
/* f03fe08: 4600320d */ trunc.w.s $f8,$f6
/* f03fe0c: 44044000 */ mfc1 $a0,$f8
/* f03fe10: 00000000 */ sll $zero,$zero,0x0
.NB0f03fe14:
/* f03fe14: 8faa0278 */ lw $t2,0x278($sp)
.NB0f03fe18:
/* f03fe18: 8fab027c */ lw $t3,0x27c($sp)
/* f03fe1c: 3c0f800a */ lui $t7,0x800a
/* f03fe20: 8defe6f8 */ lw $t7,-0x1908($t7)
/* f03fe24: 014b1821 */ addu $v1,$t2,$t3
/* f03fe28: 906e0004 */ lbu $t6,0x4($v1)
/* f03fe2c: 01cfc821 */ addu $t9,$t6,$t7
/* f03fe30: 333800ff */ andi $t8,$t9,0xff
/* f03fe34: 0304082a */ slt $at,$t8,$a0
/* f03fe38: 1420002b */ bnez $at,.NB0f03fee8
/* f03fe3c: a0790004 */ sb $t9,0x4($v1)
/* f03fe40: a0600004 */ sb $zero,0x4($v1)
/* f03fe44: 8faa0278 */ lw $t2,0x278($sp)
/* f03fe48: 8fad027c */ lw $t5,0x27c($sp)
/* f03fe4c: 240c0001 */ addiu $t4,$zero,0x1
/* f03fe50: 8d4b032c */ lw $t3,0x32c($t2)
/* f03fe54: 01ac1004 */ sllv $v0,$t4,$t5
/* f03fe58: 24060001 */ addiu $a2,$zero,0x1
/* f03fe5c: 000b7300 */ sll $t6,$t3,0xc
/* f03fe60: 914b032d */ lbu $t3,0x32d($t2)
/* f03fe64: 000e7f82 */ srl $t7,$t6,0x1e
/* f03fe68: 01e2c026 */ xor $t8,$t7,$v0
/* f03fe6c: 00186080 */ sll $t4,$t8,0x2
/* f03fe70: 318d000c */ andi $t5,$t4,0xc
/* f03fe74: 316efff3 */ andi $t6,$t3,0xfff3
/* f03fe78: 01ae7825 */ or $t7,$t5,$t6
/* f03fe7c: a14f032d */ sb $t7,0x32d($t2)
/* f03fe80: 8d59032c */ lw $t9,0x32c($t2)
/* f03fe84: 93ad0260 */ lbu $t5,0x260($sp)
/* f03fe88: 2401001d */ addiu $at,$zero,0x1d
/* f03fe8c: 0019c300 */ sll $t8,$t9,0xc
/* f03fe90: 00186782 */ srl $t4,$t8,0x1e
/* f03fe94: 01825824 */ and $t3,$t4,$v0
/* f03fe98: 15600003 */ bnez $t3,.NB0f03fea8
/* f03fe9c: 240e0001 */ addiu $t6,$zero,0x1
/* f03fea0: 55a10003 */ bnel $t5,$at,.NB0f03feb0
/* f03fea4: 8faf0278 */ lw $t7,0x278($sp)
.NB0f03fea8:
/* f03fea8: afae0250 */ sw $t6,0x250($sp)
/* f03feac: 8faf0278 */ lw $t7,0x278($sp)
.NB0f03feb0:
/* f03feb0: 24010008 */ addiu $at,$zero,0x8
/* f03feb4: 81ea0007 */ lb $t2,0x7($t7)
/* f03feb8: 1541000b */ bne $t2,$at,.NB0f03fee8
/* f03febc: 00000000 */ sll $zero,$zero,0x0
/* f03fec0: 8de40020 */ lw $a0,0x20($t7)
/* f03fec4: 0c00786f */ jal modelGetAnimNum
/* f03fec8: afa60254 */ sw $a2,0x254($sp)
/* f03fecc: 2401026a */ addiu $at,$zero,0x26a
/* f03fed0: 14410005 */ bne $v0,$at,.NB0f03fee8
/* f03fed4: 8fa60254 */ lw $a2,0x254($sp)
/* f03fed8: 8fb90278 */ lw $t9,0x278($sp)
/* f03fedc: 83380033 */ lb $t8,0x33($t9)
/* f03fee0: 270c0001 */ addiu $t4,$t8,0x1
/* f03fee4: a32c0033 */ sb $t4,0x33($t9)
.NB0f03fee8:
/* f03fee8: 50c00495 */ beqzl $a2,.NB0f041140
/* f03feec: 8fa80268 */ lw $t0,0x268($sp)
/* f03fef0: 0fc0f779 */ jal chrGetAimAngle
/* f03fef4: 8fa40278 */ lw $a0,0x278($sp)
/* f03fef8: e7a00204 */ swc1 $f0,0x204($sp)
/* f03fefc: 0fc0f7d2 */ jal func0f03e754
/* f03ff00: 8fa40278 */ lw $a0,0x278($sp)
/* f03ff04: 93ab026f */ lbu $t3,0x26f($sp)
/* f03ff08: e7a00200 */ swc1 $f0,0x200($sp)
/* f03ff0c: 240e0001 */ addiu $t6,$zero,0x1
/* f03ff10: 11600004 */ beqz $t3,.NB0f03ff24
/* f03ff14: 27a60244 */ addiu $a2,$sp,0x244
/* f03ff18: 240d0004 */ addiu $t5,$zero,0x4
/* f03ff1c: 10000002 */ beqz $zero,.NB0f03ff28
/* f03ff20: afad01fc */ sw $t5,0x1fc($sp)
.NB0f03ff24:
/* f03ff24: afa001fc */ sw $zero,0x1fc($sp)
.NB0f03ff28:
/* f03ff28: afae0268 */ sw $t6,0x268($sp)
/* f03ff2c: 8fa40278 */ lw $a0,0x278($sp)
/* f03ff30: 0fc0fd76 */ jal func0f03fde4
/* f03ff34: 8fa5027c */ lw $a1,0x27c($sp)
/* f03ff38: 54400032 */ bnezl $v0,.NB0f040004
/* f03ff3c: 8fa40278 */ lw $a0,0x278($sp)
/* f03ff40: 8fa20274 */ lw $v0,0x274($sp)
/* f03ff44: 3c0141f0 */ lui $at,0x41f0
/* f03ff48: 44818000 */ mtc1 $at,$f16
/* f03ff4c: c44a0008 */ lwc1 $f10,0x8($v0)
/* f03ff50: 8faa027c */ lw $t2,0x27c($sp)
/* f03ff54: 24010001 */ addiu $at,$zero,0x1
/* f03ff58: e7aa0244 */ swc1 $f10,0x244($sp)
/* f03ff5c: c452000c */ lwc1 $f18,0xc($v0)
/* f03ff60: 46109100 */ add.s $f4,$f18,$f16
/* f03ff64: e7a40248 */ swc1 $f4,0x248($sp)
/* f03ff68: c4460010 */ lwc1 $f6,0x10($v0)
/* f03ff6c: 15410013 */ bne $t2,$at,.NB0f03ffbc
/* f03ff70: e7a6024c */ swc1 $f6,0x24c($sp)
/* f03ff74: 0c006d52 */ jal cosf
/* f03ff78: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f03ff7c: 3c014120 */ lui $at,0x4120
/* f03ff80: 44815000 */ mtc1 $at,$f10
/* f03ff84: c7a80244 */ lwc1 $f8,0x244($sp)
/* f03ff88: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f03ff8c: 460a0482 */ mul.s $f18,$f0,$f10
/* f03ff90: 46124400 */ add.s $f16,$f8,$f18
/* f03ff94: 0c006d55 */ jal sinf
/* f03ff98: e7b00244 */ swc1 $f16,0x244($sp)
/* f03ff9c: 3c014120 */ lui $at,0x4120
/* f03ffa0: 44813000 */ mtc1 $at,$f6
/* f03ffa4: 46000107 */ neg.s $f4,$f0
/* f03ffa8: c7a8024c */ lwc1 $f8,0x24c($sp)
/* f03ffac: 46062282 */ mul.s $f10,$f4,$f6
/* f03ffb0: 460a4480 */ add.s $f18,$f8,$f10
/* f03ffb4: 10000012 */ beqz $zero,.NB0f040000
/* f03ffb8: e7b2024c */ swc1 $f18,0x24c($sp)
.NB0f03ffbc:
/* f03ffbc: 0c006d52 */ jal cosf
/* f03ffc0: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f03ffc4: 3c014120 */ lui $at,0x4120
/* f03ffc8: 44812000 */ mtc1 $at,$f4
/* f03ffcc: 46000407 */ neg.s $f16,$f0
/* f03ffd0: c7a80244 */ lwc1 $f8,0x244($sp)
/* f03ffd4: 46048182 */ mul.s $f6,$f16,$f4
/* f03ffd8: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f03ffdc: 46064280 */ add.s $f10,$f8,$f6
/* f03ffe0: 0c006d55 */ jal sinf
/* f03ffe4: e7aa0244 */ swc1 $f10,0x244($sp)
/* f03ffe8: 3c014120 */ lui $at,0x4120
/* f03ffec: 44818000 */ mtc1 $at,$f16
/* f03fff0: c7b2024c */ lwc1 $f18,0x24c($sp)
/* f03fff4: 46100102 */ mul.s $f4,$f0,$f16
/* f03fff8: 46049200 */ add.s $f8,$f18,$f4
/* f03fffc: e7a8024c */ swc1 $f8,0x24c($sp)
.NB0f040000:
/* f040000: 8fa40278 */ lw $a0,0x278($sp)
.NB0f040004:
/* f040004: 0fc07927 */ jal chrSetOrUnsetHiddenFlag00000100
/* f040008: 00002825 */ or $a1,$zero,$zero
/* f04000c: 8fb801fc */ lw $t8,0x1fc($sp)
/* f040010: 8faf0274 */ lw $t7,0x274($sp)
/* f040014: 24190010 */ addiu $t9,$zero,0x10
/* f040018: 370c082a */ ori $t4,$t8,0x82a
/* f04001c: afac0010 */ sw $t4,0x10($sp)
/* f040020: afb90014 */ sw $t9,0x14($sp)
/* f040024: 27a60244 */ addiu $a2,$sp,0x244
/* f040028: 27a70234 */ addiu $a3,$sp,0x234
/* f04002c: 25e40008 */ addiu $a0,$t7,0x8
/* f040030: 0c00bc8f */ jal func0002de34
/* f040034: 25e50028 */ addiu $a1,$t7,0x28
/* f040038: 14400002 */ bnez $v0,.NB0f040044
/* f04003c: 24050001 */ addiu $a1,$zero,0x1
/* f040040: afa00268 */ sw $zero,0x268($sp)
.NB0f040044:
/* f040044: 0fc07927 */ jal chrSetOrUnsetHiddenFlag00000100
/* f040048: 8fa40278 */ lw $a0,0x278($sp)
/* f04004c: 8fab0268 */ lw $t3,0x268($sp)
/* f040050: 240d0001 */ addiu $t5,$zero,0x1
/* f040054: 5160043a */ beqzl $t3,.NB0f041140
/* f040058: 8fa80268 */ lw $t0,0x268($sp)
/* f04005c: 93ae026f */ lbu $t6,0x26f($sp)
/* f040060: afa001f8 */ sw $zero,0x1f8($sp)
/* f040064: afa001f4 */ sw $zero,0x1f4($sp)
/* f040068: afad01f0 */ sw $t5,0x1f0($sp)
/* f04006c: 11c00004 */ beqz $t6,.NB0f040080
/* f040070: afa001cc */ sw $zero,0x1cc($sp)
/* f040074: 240a083f */ addiu $t2,$zero,0x83f
/* f040078: 10000003 */ beqz $zero,.NB0f040088
/* f04007c: afaa01c8 */ sw $t2,0x1c8($sp)
.NB0f040080:
/* f040080: 240f083b */ addiu $t7,$zero,0x83b
/* f040084: afaf01c8 */ sw $t7,0x1c8($sp)
.NB0f040088:
/* f040088: 8fa7025c */ lw $a3,0x25c($sp)
/* f04008c: 8ce20004 */ lw $v0,0x4($a3)
/* f040090: 50400004 */ beqzl $v0,.NB0f0400a4
/* f040094: 00004825 */ or $t1,$zero,$zero
/* f040098: 10000002 */ beqz $zero,.NB0f0400a4
/* f04009c: 904902fe */ lbu $t1,0x2fe($v0)
/* f0400a0: 00004825 */ or $t1,$zero,$zero
.NB0f0400a4:
/* f0400a4: 39220003 */ xori $v0,$t1,0x3
/* f0400a8: 2c420001 */ sltiu $v0,$v0,0x1
/* f0400ac: 1040000f */ beqz $v0,.NB0f0400ec
/* f0400b0: 00401825 */ or $v1,$v0,$zero
/* f0400b4: afa2005c */ sw $v0,0x5c($sp)
/* f0400b8: 0fc121b6 */ jal chrGetDistanceToTarget
/* f0400bc: 8fa40278 */ lw $a0,0x278($sp)
/* f0400c0: 3c014316 */ lui $at,0x4316
/* f0400c4: 44813000 */ mtc1 $at,$f6
/* f0400c8: 0000c025 */ or $t8,$zero,$zero
/* f0400cc: 4600303c */ c.lt.s $f6,$f0
/* f0400d0: 00000000 */ sll $zero,$zero,0x0
/* f0400d4: 45020003 */ bc1fl .NB0f0400e4
/* f0400d8: afb8005c */ sw $t8,0x5c($sp)
/* f0400dc: 24180001 */ addiu $t8,$zero,0x1
/* f0400e0: afb8005c */ sw $t8,0x5c($sp)
.NB0f0400e4:
/* f0400e4: 8fa7025c */ lw $a3,0x25c($sp)
/* f0400e8: 03001825 */ or $v1,$t8,$zero
.NB0f0400ec:
/* f0400ec: afa301c0 */ sw $v1,0x1c0($sp)
/* f0400f0: 10600016 */ beqz $v1,.NB0f04014c
/* f0400f4: afa001bc */ sw $zero,0x1bc($sp)
/* f0400f8: c4ea0008 */ lwc1 $f10,0x8($a3)
/* f0400fc: c7b00244 */ lwc1 $f16,0x244($sp)
/* f040100: c7a80248 */ lwc1 $f8,0x248($sp)
/* f040104: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f040108: 46105481 */ sub.s $f18,$f10,$f16
/* f04010c: c7b0024c */ lwc1 $f16,0x24c($sp)
/* f040110: 27a501e4 */ addiu $a1,$sp,0x1e4
/* f040114: 27a601e8 */ addiu $a2,$sp,0x1e8
/* f040118: e7b201e0 */ swc1 $f18,0x1e0($sp)
/* f04011c: c4e4000c */ lwc1 $f4,0xc($a3)
/* f040120: 46082181 */ sub.s $f6,$f4,$f8
/* f040124: e7a601e4 */ swc1 $f6,0x1e4($sp)
/* f040128: c4ea0010 */ lwc1 $f10,0x10($a3)
/* f04012c: 46105481 */ sub.s $f18,$f10,$f16
/* f040130: 0c0012a8 */ jal guNormalize
/* f040134: e7b201e8 */ swc1 $f18,0x1e8($sp)
/* f040138: 8fa4025c */ lw $a0,0x25c($sp)
/* f04013c: 0fc18cfb */ jal propSetCollisionsEnabled
/* f040140: 24050001 */ addiu $a1,$zero,0x1
/* f040144: 1000002f */ beqz $zero,.NB0f040204
/* f040148: 8fab0278 */ lw $t3,0x278($sp)
.NB0f04014c:
/* f04014c: 0c006d52 */ jal cosf
/* f040150: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040154: e7a00060 */ swc1 $f0,0x60($sp)
/* f040158: 0c006d55 */ jal sinf
/* f04015c: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f040160: c7a40060 */ lwc1 $f4,0x60($sp)
/* f040164: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040168: 46040202 */ mul.s $f8,$f0,$f4
/* f04016c: 0c006d55 */ jal sinf
/* f040170: e7a801e0 */ swc1 $f8,0x1e0($sp)
/* f040174: e7a001e4 */ swc1 $f0,0x1e4($sp)
/* f040178: 0c006d52 */ jal cosf
/* f04017c: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f040180: e7a00060 */ swc1 $f0,0x60($sp)
/* f040184: 0c006d52 */ jal cosf
/* f040188: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f04018c: c7a60060 */ lwc1 $f6,0x60($sp)
/* f040190: 93ac026f */ lbu $t4,0x26f($sp)
/* f040194: 46060282 */ mul.s $f10,$f0,$f6
/* f040198: 11800019 */ beqz $t4,.NB0f040200
/* f04019c: e7aa01e8 */ swc1 $f10,0x1e8($sp)
/* f0401a0: 0fc62d37 */ jal chrGuessCrouchPos
/* f0401a4: 8fa40278 */ lw $a0,0x278($sp)
/* f0401a8: 8fb90278 */ lw $t9,0x278($sp)
/* f0401ac: 00404825 */ or $t1,$v0,$zero
/* f0401b0: 8fae0278 */ lw $t6,0x278($sp)
/* f0401b4: 8f280170 */ lw $t0,0x170($t9)
/* f0401b8: 0008582b */ sltu $t3,$zero,$t0
/* f0401bc: 11600004 */ beqz $t3,.NB0f0401d0
/* f0401c0: 01604025 */ or $t0,$t3,$zero
/* f0401c4: 8f280174 */ lw $t0,0x174($t9)
/* f0401c8: 0008682b */ sltu $t5,$zero,$t0
/* f0401cc: 01a04025 */ or $t0,$t5,$zero
.NB0f0401d0:
/* f0401d0: 8dc302d4 */ lw $v1,0x2d4($t6)
/* f0401d4: 8fb8027c */ lw $t8,0x27c($sp)
/* f0401d8: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f0401dc: 8c66004c */ lw $a2,0x4c($v1)
/* f0401e0: 00786021 */ addu $t4,$v1,$t8
/* f0401e4: 9187004d */ lbu $a3,0x4d($t4)
/* f0401e8: 8c650020 */ lw $a1,0x20($v1)
/* f0401ec: 00065080 */ sll $t2,$a2,0x2
/* f0401f0: 000a37c2 */ srl $a2,$t2,0x1f
/* f0401f4: afa80014 */ sw $t0,0x14($sp)
/* f0401f8: 0fc27b58 */ jal func0f0a0fac
/* f0401fc: afa90010 */ sw $t1,0x10($sp)
.NB0f040200:
/* f040200: 8fab0278 */ lw $t3,0x278($sp)
.NB0f040204:
/* f040204: 93b90260 */ lbu $t9,0x260($sp)
/* f040208: 24010016 */ addiu $at,$zero,0x16
/* f04020c: 8d6302d4 */ lw $v1,0x2d4($t3)
/* f040210: 50600018 */ beqzl $v1,.NB0f040274
/* f040214: 3c014780 */ lui $at,0x4780
/* f040218: 57210016 */ bnel $t9,$at,.NB0f040274
/* f04021c: 3c014780 */ lui $at,0x4780
/* f040220: 8c6d0128 */ lw $t5,0x128($v1)
/* f040224: 240e0001 */ addiu $t6,$zero,0x1
/* f040228: 01602025 */ or $a0,$t3,$zero
/* f04022c: 15a00010 */ bnez $t5,.NB0f040270
/* f040230: 00002825 */ or $a1,$zero,$zero
/* f040234: afae0250 */ sw $t6,0x250($sp)
/* f040238: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f04023c: 0fc64fd9 */ jal aibotDoFarsightThing
/* f040240: 27a70244 */ addiu $a3,$sp,0x244
/* f040244: 24010002 */ addiu $at,$zero,0x2
/* f040248: 5441000a */ bnel $v0,$at,.NB0f040274
/* f04024c: 3c014780 */ lui $at,0x4780
/* f040250: 0c004d84 */ jal random
/* f040254: 00000000 */ sll $zero,$zero,0x0
/* f040258: 240100ff */ addiu $at,$zero,0xff
/* f04025c: 0041001b */ divu $zero,$v0,$at
/* f040260: 00005010 */ mfhi $t2
/* f040264: 2d4f00c9 */ sltiu $t7,$t2,0xc9
/* f040268: 39ef0001 */ xori $t7,$t7,0x1
/* f04026c: a3af026e */ sb $t7,0x26e($sp)
.NB0f040270:
/* f040270: 3c014780 */ lui $at,0x4780
.NB0f040274:
/* f040274: 44810000 */ mtc1 $at,$f0
/* f040278: c7b001e0 */ lwc1 $f16,0x1e0($sp)
/* f04027c: c7a40244 */ lwc1 $f4,0x244($sp)
/* f040280: c7a601e4 */ lwc1 $f6,0x1e4($sp)
/* f040284: 46008482 */ mul.s $f18,$f16,$f0
/* f040288: c7b00248 */ lwc1 $f16,0x248($sp)
/* f04028c: 8fa40278 */ lw $a0,0x278($sp)
/* f040290: 46003282 */ mul.s $f10,$f6,$f0
/* f040294: c7a6024c */ lwc1 $f6,0x24c($sp)
/* f040298: 00002825 */ or $a1,$zero,$zero
/* f04029c: 46049200 */ add.s $f8,$f18,$f4
/* f0402a0: c7a401e8 */ lwc1 $f4,0x1e8($sp)
/* f0402a4: 46105480 */ add.s $f18,$f10,$f16
/* f0402a8: e7a80228 */ swc1 $f8,0x228($sp)
/* f0402ac: 46002202 */ mul.s $f8,$f4,$f0
/* f0402b0: e7b2022c */ swc1 $f18,0x22c($sp)
/* f0402b4: 46064280 */ add.s $f10,$f8,$f6
/* f0402b8: 0fc07927 */ jal chrSetOrUnsetHiddenFlag00000100
/* f0402bc: e7aa0230 */ swc1 $f10,0x230($sp)
/* f0402c0: 93b8026f */ lbu $t8,0x26f($sp)
/* f0402c4: 27a40244 */ addiu $a0,$sp,0x244
/* f0402c8: 27a50234 */ addiu $a1,$sp,0x234
/* f0402cc: 13000004 */ beqz $t8,.NB0f0402e0
/* f0402d0: 27a60228 */ addiu $a2,$sp,0x228
/* f0402d4: 240c0001 */ addiu $t4,$zero,0x1
/* f0402d8: 3c01800a */ lui $at,0x800a
/* f0402dc: ac2ceb4c */ sw $t4,-0x14b4($at)
.NB0f0402e0:
/* f0402e0: 24190010 */ addiu $t9,$zero,0x10
/* f0402e4: afb90010 */ sw $t9,0x10($sp)
/* f0402e8: 0c00bc66 */ jal cdTestAToB4
/* f0402ec: 8fa701c8 */ lw $a3,0x1c8($sp)
/* f0402f0: 1440000a */ bnez $v0,.NB0f04031c
/* f0402f4: 240d0001 */ addiu $t5,$zero,0x1
/* f0402f8: 3c067f1a */ lui $a2,0x7f1a
/* f0402fc: afad0224 */ sw $t5,0x224($sp)
/* f040300: 24c62e9c */ addiu $a2,$a2,0x2e9c
/* f040304: 27a40228 */ addiu $a0,$sp,0x228
/* f040308: 0c0098a7 */ jal cdGetPos
/* f04030c: 24052f36 */ addiu $a1,$zero,0x2f36
/* f040310: 0c0098a4 */ jal cdGetObstacle
/* f040314: 00000000 */ sll $zero,$zero,0x0
/* f040318: afa201cc */ sw $v0,0x1cc($sp)
.NB0f04031c:
/* f04031c: 8fa40278 */ lw $a0,0x278($sp)
/* f040320: 0fc07927 */ jal chrSetOrUnsetHiddenFlag00000100
/* f040324: 24050001 */ addiu $a1,$zero,0x1
/* f040328: 93ae026f */ lbu $t6,0x26f($sp)
/* f04032c: 3c01800a */ lui $at,0x800a
/* f040330: 51c00003 */ beqzl $t6,.NB0f040340
/* f040334: 8fab01cc */ lw $t3,0x1cc($sp)
/* f040338: ac20eb4c */ sw $zero,-0x14b4($at)
/* f04033c: 8fab01cc */ lw $t3,0x1cc($sp)
.NB0f040340:
/* f040340: 8faa01c0 */ lw $t2,0x1c0($sp)
/* f040344: 55600015 */ bnezl $t3,.NB0f04039c
/* f040348: c7a80228 */ lwc1 $f8,0x228($sp)
/* f04034c: 51400013 */ beqzl $t2,.NB0f04039c
/* f040350: c7a80228 */ lwc1 $f8,0x228($sp)
/* f040354: 0c004d84 */ jal random
/* f040358: 00000000 */ sll $zero,$zero,0x0
/* f04035c: 24010064 */ addiu $at,$zero,0x64
/* f040360: 0041001b */ divu $zero,$v0,$at
/* f040364: 00001810 */ mfhi $v1
/* f040368: 2c6f0033 */ sltiu $t7,$v1,0x33
/* f04036c: 39ef0001 */ xori $t7,$t7,0x1
/* f040370: 11e00009 */ beqz $t7,.NB0f040398
/* f040374: afaf01bc */ sw $t7,0x1bc($sp)
/* f040378: 8fb8025c */ lw $t8,0x25c($sp)
/* f04037c: afb801cc */ sw $t8,0x1cc($sp)
/* f040380: c7100008 */ lwc1 $f16,0x8($t8)
/* f040384: e7b00228 */ swc1 $f16,0x228($sp)
/* f040388: c712000c */ lwc1 $f18,0xc($t8)
/* f04038c: e7b2022c */ swc1 $f18,0x22c($sp)
/* f040390: c7040010 */ lwc1 $f4,0x10($t8)
/* f040394: e7a40230 */ swc1 $f4,0x230($sp)
.NB0f040398:
/* f040398: c7a80228 */ lwc1 $f8,0x228($sp)
.NB0f04039c:
/* f04039c: c7a60244 */ lwc1 $f6,0x244($sp)
/* f0403a0: c7aa022c */ lwc1 $f10,0x22c($sp)
/* f0403a4: c7b00248 */ lwc1 $f16,0x248($sp)
/* f0403a8: 46064001 */ sub.s $f0,$f8,$f6
/* f0403ac: c7b20230 */ lwc1 $f18,0x230($sp)
/* f0403b0: c7a4024c */ lwc1 $f4,0x24c($sp)
/* f0403b4: 46105081 */ sub.s $f2,$f10,$f16
/* f0403b8: 46000202 */ mul.s $f8,$f0,$f0
/* f0403bc: 93a40260 */ lbu $a0,0x260($sp)
/* f0403c0: 46049301 */ sub.s $f12,$f18,$f4
/* f0403c4: 46021182 */ mul.s $f6,$f2,$f2
/* f0403c8: 24010018 */ addiu $at,$zero,0x18
/* f0403cc: 460c6402 */ mul.s $f16,$f12,$f12
/* f0403d0: 46064280 */ add.s $f10,$f8,$f6
/* f0403d4: 46105480 */ add.s $f18,$f10,$f16
/* f0403d8: 1081000f */ beq $a0,$at,.NB0f040418
/* f0403dc: e7b201d0 */ swc1 $f18,0x1d0($sp)
/* f0403e0: 24010019 */ addiu $at,$zero,0x19
/* f0403e4: 1081000c */ beq $a0,$at,.NB0f040418
/* f0403e8: 24010012 */ addiu $at,$zero,0x12
/* f0403ec: 14810003 */ bne $a0,$at,.NB0f0403fc
/* f0403f0: 93ac0263 */ lbu $t4,0x263($sp)
/* f0403f4: 24010001 */ addiu $at,$zero,0x1
/* f0403f8: 11810007 */ beq $t4,$at,.NB0f040418
.NB0f0403fc:
/* f0403fc: 24010017 */ addiu $at,$zero,0x17
/* f040400: 10810005 */ beq $a0,$at,.NB0f040418
/* f040404: 2401001b */ addiu $at,$zero,0x1b
/* f040408: 10810003 */ beq $a0,$at,.NB0f040418
/* f04040c: 24010034 */ addiu $at,$zero,0x34
/* f040410: 54810171 */ bnel $a0,$at,.NB0f0409d8
/* f040414: 24010006 */ addiu $at,$zero,0x6
.NB0f040418:
/* f040418: 93b9026f */ lbu $t9,0x26f($sp)
/* f04041c: afa00250 */ sw $zero,0x250($sp)
/* f040420: 3c017f1a */ lui $at,0x7f1a
/* f040424: 17200006 */ bnez $t9,.NB0f040440
/* f040428: c7a801d0 */ lwc1 $f8,0x1d0($sp)
/* f04042c: c4243400 */ lwc1 $f4,0x3400($at)
/* f040430: 4608203c */ c.lt.s $f4,$f8
/* f040434: 00000000 */ sll $zero,$zero,0x0
/* f040438: 45020164 */ bc1fl .NB0f0409cc
/* f04043c: afa00268 */ sw $zero,0x268($sp)
.NB0f040440:
/* f040440: 0fc2bb4c */ jal weaponFindById
/* f040444: 00000000 */ sll $zero,$zero,0x0
/* f040448: 93ad0263 */ lbu $t5,0x263($sp)
/* f04044c: 93a40260 */ lbu $a0,0x260($sp)
/* f040450: 24010018 */ addiu $at,$zero,0x18
/* f040454: 000d7080 */ sll $t6,$t5,0x2
/* f040458: 004e5821 */ addu $t3,$v0,$t6
/* f04045c: 10810006 */ beq $a0,$at,.NB0f040478
/* f040460: 8d630014 */ lw $v1,0x14($t3)
/* f040464: 24010034 */ addiu $at,$zero,0x34
/* f040468: 10810003 */ beq $a0,$at,.NB0f040478
/* f04046c: 24010019 */ addiu $at,$zero,0x19
/* f040470: 5481000e */ bnel $a0,$at,.NB0f0404ac
/* f040474: 2401001b */ addiu $at,$zero,0x1b
.NB0f040478:
/* f040478: 8c6a0010 */ lw $t2,0x10($v1)
/* f04047c: 24050052 */ addiu $a1,$zero,0x52
/* f040480: 8fa60278 */ lw $a2,0x278($sp)
/* f040484: 000a7840 */ sll $t7,$t2,0x1
/* f040488: 05e30003 */ bgezl $t7,.NB0f040498
/* f04048c: 8c640040 */ lw $a0,0x40($v1)
/* f040490: 24050053 */ addiu $a1,$zero,0x53
/* f040494: 8c640040 */ lw $a0,0x40($v1)
.NB0f040498:
/* f040498: 0fc2282a */ jal func0f08b880
/* f04049c: afa300d4 */ sw $v1,0xd4($sp)
/* f0404a0: 1000002e */ beqz $zero,.NB0f04055c
/* f0404a4: afa201b8 */ sw $v0,0x1b8($sp)
/* f0404a8: 2401001b */ addiu $at,$zero,0x1b
.NB0f0404ac:
/* f0404ac: 1481000a */ bne $a0,$at,.NB0f0404d8
/* f0404b0: 24050055 */ addiu $a1,$zero,0x55
/* f0404b4: 8c640040 */ lw $a0,0x40($v1)
/* f0404b8: afa300d4 */ sw $v1,0xd4($sp)
/* f0404bc: 0fc2282a */ jal func0f08b880
/* f0404c0: 8fa60278 */ lw $a2,0x278($sp)
/* f0404c4: 10400025 */ beqz $v0,.NB0f04055c
/* f0404c8: afa201b8 */ sw $v0,0x1b8($sp)
/* f0404cc: 93b80263 */ lbu $t8,0x263($sp)
/* f0404d0: 10000022 */ beqz $zero,.NB0f04055c
/* f0404d4: a058005f */ sb $t8,0x5f($v0)
.NB0f0404d8:
/* f0404d8: 24010017 */ addiu $at,$zero,0x17
/* f0404dc: 1481000a */ bne $a0,$at,.NB0f040508
/* f0404e0: 24050054 */ addiu $a1,$zero,0x54
/* f0404e4: 8c640040 */ lw $a0,0x40($v1)
/* f0404e8: afa300d4 */ sw $v1,0xd4($sp)
/* f0404ec: 0fc2282a */ jal func0f08b880
/* f0404f0: 8fa60278 */ lw $a2,0x278($sp)
/* f0404f4: 10400019 */ beqz $v0,.NB0f04055c
/* f0404f8: afa201b8 */ sw $v0,0x1b8($sp)
/* f0404fc: 93ac0263 */ lbu $t4,0x263($sp)
/* f040500: 10000016 */ beqz $zero,.NB0f04055c
/* f040504: a04c005f */ sb $t4,0x5f($v0)
.NB0f040508:
/* f040508: 24010012 */ addiu $at,$zero,0x12
/* f04050c: 1481000b */ bne $a0,$at,.NB0f04053c
/* f040510: 3c0d800a */ lui $t5,0x800a
/* f040514: 8c640040 */ lw $a0,0x40($v1)
/* f040518: afa300d4 */ sw $v1,0xd4($sp)
/* f04051c: 24050054 */ addiu $a1,$zero,0x54
/* f040520: 0fc2282a */ jal func0f08b880
/* f040524: 8fa60278 */ lw $a2,0x278($sp)
/* f040528: 1040000c */ beqz $v0,.NB0f04055c
/* f04052c: afa201b8 */ sw $v0,0x1b8($sp)
/* f040530: 24190002 */ addiu $t9,$zero,0x2
/* f040534: 10000009 */ beqz $zero,.NB0f04055c
/* f040538: a059005f */ sb $t9,0x5f($v0)
.NB0f04053c:
/* f04053c: 8dade944 */ lw $t5,-0x16bc($t5)
/* f040540: 8c640040 */ lw $a0,0x40($v1)
/* f040544: 27a50260 */ addiu $a1,$sp,0x260
/* f040548: 8dae00bc */ lw $t6,0xbc($t5)
/* f04054c: 8dc60004 */ lw $a2,0x4($t6)
/* f040550: 0fc227a4 */ jal func0f08b658
/* f040554: afa300d4 */ sw $v1,0xd4($sp)
/* f040558: afa201b8 */ sw $v0,0x1b8($sp)
.NB0f04055c:
/* f04055c: 1040011b */ beqz $v0,.NB0f0409cc
/* f040560: 8fab00d4 */ lw $t3,0xd4($sp)
/* f040564: 8d6a004c */ lw $t2,0x4c($t3)
/* f040568: 3c017f1a */ lui $at,0x7f1a
/* f04056c: c4303404 */ lwc1 $f16,0x3404($at)
/* f040570: 448a3000 */ mtc1 $t2,$f6
/* f040574: 3c014270 */ lui $at,0x4270
/* f040578: 44812000 */ mtc1 $at,$f4
/* f04057c: 468032a0 */ cvt.s.w $f10,$f6
/* f040580: 3c017f1a */ lui $at,0x7f1a
/* f040584: 93b8026f */ lbu $t8,0x26f($sp)
/* f040588: 8fa40278 */ lw $a0,0x278($sp)
/* f04058c: 2405001e */ addiu $a1,$zero,0x1e
/* f040590: 46105482 */ mul.s $f18,$f10,$f16
/* f040594: c4303408 */ lwc1 $f16,0x3408($at)
/* f040598: 46049203 */ div.s $f8,$f18,$f4
/* f04059c: e7a80168 */ swc1 $f8,0x168($sp)
/* f0405a0: 8d6f0054 */ lw $t7,0x54($t3)
/* f0405a4: 448f3000 */ mtc1 $t7,$f6
/* f0405a8: 00000000 */ sll $zero,$zero,0x0
/* f0405ac: 468032a0 */ cvt.s.w $f10,$f6
/* f0405b0: 46105482 */ mul.s $f18,$f10,$f16
/* f0405b4: 13000080 */ beqz $t8,.NB0f0407b8
/* f0405b8: e7b200cc */ swc1 $f18,0xcc($sp)
/* f0405bc: 0fc1215e */ jal chrIsTargetInFov
/* f0405c0: 00003025 */ or $a2,$zero,$zero
/* f0405c4: 1040007c */ beqz $v0,.NB0f0407b8
/* f0405c8: 00000000 */ sll $zero,$zero,0x0
/* f0405cc: 93a20263 */ lbu $v0,0x263($sp)
/* f0405d0: 00001825 */ or $v1,$zero,$zero
/* f0405d4: 93a40260 */ lbu $a0,0x260($sp)
/* f0405d8: 14400025 */ bnez $v0,.NB0f040670
/* f0405dc: 24010018 */ addiu $at,$zero,0x18
/* f0405e0: 10810006 */ beq $a0,$at,.NB0f0405fc
/* f0405e4: 8fac025c */ lw $t4,0x25c($sp)
/* f0405e8: 24010034 */ addiu $at,$zero,0x34
/* f0405ec: 10810003 */ beq $a0,$at,.NB0f0405fc
/* f0405f0: 24010019 */ addiu $at,$zero,0x19
/* f0405f4: 5481001f */ bnel $a0,$at,.NB0f040674
/* f0405f8: 93a40260 */ lbu $a0,0x260($sp)
.NB0f0405fc:
/* f0405fc: 91820000 */ lbu $v0,0x0($t4)
/* f040600: 24010003 */ addiu $at,$zero,0x3
/* f040604: 8fb9025c */ lw $t9,0x25c($sp)
/* f040608: 10410003 */ beq $v0,$at,.NB0f040618
/* f04060c: 24010006 */ addiu $at,$zero,0x6
/* f040610: 14410051 */ bne $v0,$at,.NB0f040758
/* f040614: 00000000 */ sll $zero,$zero,0x0
.NB0f040618:
/* f040618: c7240008 */ lwc1 $f4,0x8($t9)
/* f04061c: c7aa0244 */ lwc1 $f10,0x244($sp)
/* f040620: c7b20248 */ lwc1 $f18,0x248($sp)
/* f040624: e7a400b8 */ swc1 $f4,0xb8($sp)
/* f040628: 8f2d0004 */ lw $t5,0x4($t9)
/* f04062c: 460a2401 */ sub.s $f16,$f4,$f10
/* f040630: c7aa024c */ lwc1 $f10,0x24c($sp)
/* f040634: c5a800b4 */ lwc1 $f8,0xb4($t5)
/* f040638: 27a401e0 */ addiu $a0,$sp,0x1e0
/* f04063c: 27a501e4 */ addiu $a1,$sp,0x1e4
/* f040640: e7a800bc */ swc1 $f8,0xbc($sp)
/* f040644: c7260010 */ lwc1 $f6,0x10($t9)
/* f040648: e7b001e0 */ swc1 $f16,0x1e0($sp)
/* f04064c: 46124101 */ sub.s $f4,$f8,$f18
/* f040650: 27a601e8 */ addiu $a2,$sp,0x1e8
/* f040654: e7a600c0 */ swc1 $f6,0xc0($sp)
/* f040658: 460a3401 */ sub.s $f16,$f6,$f10
/* f04065c: e7a401e4 */ swc1 $f4,0x1e4($sp)
/* f040660: 0c0012a8 */ jal guNormalize
/* f040664: e7b001e8 */ swc1 $f16,0x1e8($sp)
/* f040668: 1000003b */ beqz $zero,.NB0f040758
/* f04066c: 24030001 */ addiu $v1,$zero,0x1
.NB0f040670:
/* f040670: 93a40260 */ lbu $a0,0x260($sp)
.NB0f040674:
/* f040674: 24050017 */ addiu $a1,$zero,0x17
/* f040678: 24010012 */ addiu $at,$zero,0x12
/* f04067c: 14a40003 */ bne $a1,$a0,.NB0f04068c
/* f040680: 00000000 */ sll $zero,$zero,0x0
/* f040684: 50400004 */ beqzl $v0,.NB0f040698
/* f040688: 8fae025c */ lw $t6,0x25c($sp)
.NB0f04068c:
/* f04068c: 14810017 */ bne $a0,$at,.NB0f0406ec
/* f040690: 00000000 */ sll $zero,$zero,0x0
/* f040694: 8fae025c */ lw $t6,0x25c($sp)
.NB0f040698:
/* f040698: 24010003 */ addiu $at,$zero,0x3
/* f04069c: 8faa025c */ lw $t2,0x25c($sp)
/* f0406a0: 91c20000 */ lbu $v0,0x0($t6)
/* f0406a4: 10410003 */ beq $v0,$at,.NB0f0406b4
/* f0406a8: 24010006 */ addiu $at,$zero,0x6
/* f0406ac: 1441002a */ bne $v0,$at,.NB0f040758
/* f0406b0: 00000000 */ sll $zero,$zero,0x0
.NB0f0406b4:
/* f0406b4: c5480008 */ lwc1 $f8,0x8($t2)
/* f0406b8: 27a40244 */ addiu $a0,$sp,0x244
/* f0406bc: 8fa500cc */ lw $a1,0xcc($sp)
/* f0406c0: e7a800b8 */ swc1 $f8,0xb8($sp)
/* f0406c4: 8d4b0004 */ lw $t3,0x4($t2)
/* f0406c8: 27a600b8 */ addiu $a2,$sp,0xb8
/* f0406cc: 27a701e0 */ addiu $a3,$sp,0x1e0
/* f0406d0: c57200b4 */ lwc1 $f18,0xb4($t3)
/* f0406d4: e7b200bc */ swc1 $f18,0xbc($sp)
/* f0406d8: c5440010 */ lwc1 $f4,0x10($t2)
/* f0406dc: 0fc0febf */ jal func0f04031c
/* f0406e0: e7a400c0 */ swc1 $f4,0xc0($sp)
/* f0406e4: 1000001c */ beqz $zero,.NB0f040758
/* f0406e8: 24030001 */ addiu $v1,$zero,0x1
.NB0f0406ec:
/* f0406ec: 14a40002 */ bne $a1,$a0,.NB0f0406f8
/* f0406f0: 24010001 */ addiu $at,$zero,0x1
/* f0406f4: 10410003 */ beq $v0,$at,.NB0f040704
.NB0f0406f8:
/* f0406f8: 2401001b */ addiu $at,$zero,0x1b
/* f0406fc: 14810016 */ bne $a0,$at,.NB0f040758
/* f040700: 00000000 */ sll $zero,$zero,0x0
.NB0f040704:
/* f040704: 8faf025c */ lw $t7,0x25c($sp)
/* f040708: 24010006 */ addiu $at,$zero,0x6
/* f04070c: 27a40244 */ addiu $a0,$sp,0x244
/* f040710: c5e60008 */ lwc1 $f6,0x8($t7)
/* f040714: 27a600b8 */ addiu $a2,$sp,0xb8
/* f040718: 27a701e0 */ addiu $a3,$sp,0x1e0
/* f04071c: e7a600b8 */ swc1 $f6,0xb8($sp)
/* f040720: c5ea000c */ lwc1 $f10,0xc($t7)
/* f040724: e7aa00bc */ swc1 $f10,0xbc($sp)
/* f040728: c5f00010 */ lwc1 $f16,0x10($t7)
/* f04072c: e7b000c0 */ swc1 $f16,0xc0($sp)
/* f040730: 91f80000 */ lbu $t8,0x0($t7)
/* f040734: 17010005 */ bne $t8,$at,.NB0f04074c
/* f040738: 3c0141c8 */ lui $at,0x41c8
/* f04073c: 44814000 */ mtc1 $at,$f8
/* f040740: 00000000 */ sll $zero,$zero,0x0
/* f040744: 46085481 */ sub.s $f18,$f10,$f8
/* f040748: e7b200bc */ swc1 $f18,0xbc($sp)
.NB0f04074c:
/* f04074c: 0fc0febf */ jal func0f04031c
/* f040750: 8fa500cc */ lw $a1,0xcc($sp)
/* f040754: 24030001 */ addiu $v1,$zero,0x1
.NB0f040758:
/* f040758: 10600017 */ beqz $v1,.NB0f0407b8
/* f04075c: 8fa40278 */ lw $a0,0x278($sp)
/* f040760: 0fc11fe5 */ jal chrGetAngleToPos
/* f040764: 27a500b8 */ addiu $a1,$sp,0xb8
/* f040768: e7a000b4 */ swc1 $f0,0xb4($sp)
/* f04076c: 0c006d52 */ jal cosf
/* f040770: 46000306 */ mov.s $f12,$f0
/* f040774: c7ac00b4 */ lwc1 $f12,0xb4($sp)
/* f040778: 0c006d55 */ jal sinf
/* f04077c: e7a000b0 */ swc1 $f0,0xb0($sp)
/* f040780: c7ac01e8 */ lwc1 $f12,0x1e8($sp)
/* f040784: c7ae00b0 */ lwc1 $f14,0xb0($sp)
/* f040788: c7a201e0 */ lwc1 $f2,0x1e0($sp)
/* f04078c: 460c0102 */ mul.s $f4,$f0,$f12
/* f040790: 00000000 */ sll $zero,$zero,0x0
/* f040794: 46027182 */ mul.s $f6,$f14,$f2
/* f040798: 00000000 */ sll $zero,$zero,0x0
/* f04079c: 460c7282 */ mul.s $f10,$f14,$f12
/* f0407a0: 00000000 */ sll $zero,$zero,0x0
/* f0407a4: 46020202 */ mul.s $f8,$f0,$f2
/* f0407a8: 46062400 */ add.s $f16,$f4,$f6
/* f0407ac: e7b001e0 */ swc1 $f16,0x1e0($sp)
/* f0407b0: 46085481 */ sub.s $f18,$f10,$f8
/* f0407b4: e7b201e8 */ swc1 $f18,0x1e8($sp)
.NB0f0407b8:
/* f0407b8: 0c005a28 */ jal func000159b0
/* f0407bc: 27a40178 */ addiu $a0,$sp,0x178
/* f0407c0: c7ac0200 */ lwc1 $f12,0x200($sp)
/* f0407c4: 0c005c9e */ jal func000162e8
/* f0407c8: 27a5011c */ addiu $a1,$sp,0x11c
/* f0407cc: c7ac0204 */ lwc1 $f12,0x204($sp)
/* f0407d0: 0c005cc1 */ jal func00016374
/* f0407d4: 27a500dc */ addiu $a1,$sp,0xdc
/* f0407d8: 27a400dc */ addiu $a0,$sp,0xdc
/* f0407dc: 0c005ab4 */ jal func00015be0
/* f0407e0: 27a5011c */ addiu $a1,$sp,0x11c
/* f0407e4: c7ac0168 */ lwc1 $f12,0x168($sp)
/* f0407e8: c7a401e0 */ lwc1 $f4,0x1e0($sp)
/* f0407ec: c7b001e4 */ lwc1 $f16,0x1e4($sp)
/* f0407f0: c7a801e8 */ lwc1 $f8,0x1e8($sp)
/* f0407f4: 460c2182 */ mul.s $f6,$f4,$f12
/* f0407f8: c7a200cc */ lwc1 $f2,0xcc($sp)
/* f0407fc: 3c01800a */ lui $at,0x800a
/* f040800: 460c8282 */ mul.s $f10,$f16,$f12
/* f040804: c420e70c */ lwc1 $f0,-0x18f4($at)
/* f040808: 8fac00d4 */ lw $t4,0xd4($sp)
/* f04080c: 460c4482 */ mul.s $f18,$f8,$f12
/* f040810: e7a6015c */ swc1 $f6,0x15c($sp)
/* f040814: 8fa401b8 */ lw $a0,0x1b8($sp)
/* f040818: 46022102 */ mul.s $f4,$f4,$f2
/* f04081c: e7aa0160 */ swc1 $f10,0x160($sp)
/* f040820: 2401ffff */ addiu $at,$zero,-1
/* f040824: 46003182 */ mul.s $f6,$f6,$f0
/* f040828: e7b20164 */ swc1 $f18,0x164($sp)
/* f04082c: 27a50244 */ addiu $a1,$sp,0x244
/* f040830: 27a60234 */ addiu $a2,$sp,0x234
/* f040834: 27a7011c */ addiu $a3,$sp,0x11c
/* f040838: 27ae016c */ addiu $t6,$sp,0x16c
/* f04083c: 27ab0178 */ addiu $t3,$sp,0x178
/* f040840: 46062100 */ add.s $f4,$f4,$f6
/* f040844: 46028182 */ mul.s $f6,$f16,$f2
/* f040848: e7a4016c */ swc1 $f4,0x16c($sp)
/* f04084c: 46005102 */ mul.s $f4,$f10,$f0
/* f040850: 46043400 */ add.s $f16,$f6,$f4
/* f040854: 46024282 */ mul.s $f10,$f8,$f2
/* f040858: 00000000 */ sll $zero,$zero,0x0
/* f04085c: 46009182 */ mul.s $f6,$f18,$f0
/* f040860: e7b00170 */ swc1 $f16,0x170($sp)
/* f040864: 46065100 */ add.s $f4,$f10,$f6
/* f040868: e7a40174 */ swc1 $f4,0x174($sp)
/* f04086c: 8d8d0058 */ lw $t5,0x58($t4)
/* f040870: a48d0062 */ sh $t5,0x62($a0)
/* f040874: 84820062 */ lh $v0,0x62($a0)
/* f040878: 10410002 */ beq $v0,$at,.NB0f040884
/* f04087c: 0002c880 */ sll $t9,$v0,0x2
/* f040880: a4990062 */ sh $t9,0x62($a0)
.NB0f040884:
/* f040884: 8faa0274 */ lw $t2,0x274($sp)
/* f040888: afae0010 */ sw $t6,0x10($sp)
/* f04088c: afab0014 */ sw $t3,0x14($sp)
/* f040890: afa5001c */ sw $a1,0x1c($sp)
/* f040894: 0fc27298 */ jal func0f09ebcc
/* f040898: afaa0018 */ sw $t2,0x18($sp)
/* f04089c: 8fa301b8 */ lw $v1,0x1b8($sp)
/* f0408a0: 8fac00d4 */ lw $t4,0xd4($sp)
/* f0408a4: 8c6f0040 */ lw $t7,0x40($v1)
/* f0408a8: 31f80080 */ andi $t8,$t7,0x80
/* f0408ac: 13000047 */ beqz $t8,.NB0f0409cc
/* f0408b0: 00000000 */ sll $zero,$zero,0x0
/* f0408b4: 8d820010 */ lw $v0,0x10($t4)
/* f0408b8: 00026800 */ sll $t5,$v0,0x0
/* f0408bc: 05a10007 */ bgez $t5,.NB0f0408dc
/* f0408c0: 00025900 */ sll $t3,$v0,0x4
/* f0408c4: 8c620048 */ lw $v0,0x48($v1)
/* f0408c8: 3c014000 */ lui $at,0x4000
/* f0408cc: 8c590000 */ lw $t9,0x0($v0)
/* f0408d0: 03217025 */ or $t6,$t9,$at
/* f0408d4: 10000007 */ beqz $zero,.NB0f0408f4
/* f0408d8: ac4e0000 */ sw $t6,0x0($v0)
.NB0f0408dc:
/* f0408dc: 05630006 */ bgezl $t3,.NB0f0408f8
/* f0408e0: c7b0015c */ lwc1 $f16,0x15c($sp)
/* f0408e4: 8c620048 */ lw $v0,0x48($v1)
/* f0408e8: 8c4a0000 */ lw $t2,0x0($v0)
/* f0408ec: 354f0010 */ ori $t7,$t2,0x10
/* f0408f0: ac4f0000 */ sw $t7,0x0($v0)
.NB0f0408f4:
/* f0408f4: c7b0015c */ lwc1 $f16,0x15c($sp)
.NB0f0408f8:
/* f0408f8: 8c780048 */ lw $t8,0x48($v1)
/* f0408fc: 241900f0 */ addiu $t9,$zero,0xf0
/* f040900: 3c017f1a */ lui $at,0x7f1a
/* f040904: e7100010 */ swc1 $f16,0x10($t8)
/* f040908: 8c6c0048 */ lw $t4,0x48($v1)
/* f04090c: c7a80160 */ lwc1 $f8,0x160($sp)
/* f040910: e5880014 */ swc1 $f8,0x14($t4)
/* f040914: 8c6d0048 */ lw $t5,0x48($v1)
/* f040918: c7b20164 */ lwc1 $f18,0x164($sp)
/* f04091c: e5b20018 */ swc1 $f18,0x18($t5)
/* f040920: 8c6e0048 */ lw $t6,0x48($v1)
/* f040924: add900b4 */ sw $t9,0xb4($t6)
/* f040928: 8fab00d4 */ lw $t3,0xd4($sp)
/* f04092c: 8c6a0048 */ lw $t2,0x48($v1)
/* f040930: c56a005c */ lwc1 $f10,0x5c($t3)
/* f040934: e54a008c */ swc1 $f10,0x8c($t2)
/* f040938: 8faf00d4 */ lw $t7,0xd4($sp)
/* f04093c: c424340c */ lwc1 $f4,0x340c($at)
/* f040940: 8c780048 */ lw $t8,0x48($v1)
/* f040944: c5e60050 */ lwc1 $f6,0x50($t7)
/* f040948: 46043402 */ mul.s $f16,$f6,$f4
/* f04094c: e7100098 */ swc1 $f16,0x98($t8)
/* f040950: 0fc0a08c */ jal chrGetTargetProp
/* f040954: 8fa40278 */ lw $a0,0x278($sp)
/* f040958: 8fac01b8 */ lw $t4,0x1b8($sp)
/* f04095c: 3c01bf80 */ lui $at,0xbf80
/* f040960: 00002025 */ or $a0,$zero,$zero
/* f040964: 8d8d0048 */ lw $t5,0x48($t4)
/* f040968: 2407ffff */ addiu $a3,$zero,-1
/* f04096c: 240effff */ addiu $t6,$zero,-1
/* f040970: ada200e8 */ sw $v0,0xe8($t5)
/* f040974: 8fb900d4 */ lw $t9,0xd4($sp)
/* f040978: 240bffff */ addiu $t3,$zero,-1
/* f04097c: 87260060 */ lh $a2,0x60($t9)
/* f040980: 18c00012 */ blez $a2,.NB0f0409cc
/* f040984: 00000000 */ sll $zero,$zero,0x0
/* f040988: 8d850014 */ lw $a1,0x14($t4)
/* f04098c: 44810000 */ mtc1 $at,$f0
/* f040990: afab002c */ sw $t3,0x2c($sp)
/* f040994: afa00028 */ sw $zero,0x28($sp)
/* f040998: afa00020 */ sw $zero,0x20($sp)
/* f04099c: afa0001c */ sw $zero,0x1c($sp)
/* f0409a0: afa00018 */ sw $zero,0x18($sp)
/* f0409a4: afa00014 */ sw $zero,0x14($sp)
/* f0409a8: afae0010 */ sw $t6,0x10($sp)
/* f0409ac: e7a00024 */ swc1 $f0,0x24($sp)
/* f0409b0: e7a00030 */ swc1 $f0,0x30($sp)
/* f0409b4: e7a00034 */ swc1 $f0,0x34($sp)
/* f0409b8: 0fc24762 */ jal func0f0939f8
/* f0409bc: e7a00038 */ swc1 $f0,0x38($sp)
/* f0409c0: 10000002 */ beqz $zero,.NB0f0409cc
/* f0409c4: 00000000 */ sll $zero,$zero,0x0
/* f0409c8: afa00268 */ sw $zero,0x268($sp)
.NB0f0409cc:
/* f0409cc: 10000019 */ beqz $zero,.NB0f040a34
/* f0409d0: a3a0026e */ sb $zero,0x26e($sp)
/* f0409d4: 24010006 */ addiu $at,$zero,0x6
.NB0f0409d8:
/* f0409d8: 14810016 */ bne $a0,$at,.NB0f040a34
/* f0409dc: 93aa026f */ lbu $t2,0x26f($sp)
/* f0409e0: 11400014 */ beqz $t2,.NB0f040a34
/* f0409e4: 93af0263 */ lbu $t7,0x263($sp)
/* f0409e8: 24010001 */ addiu $at,$zero,0x1
/* f0409ec: 15e10011 */ bne $t7,$at,.NB0f040a34
/* f0409f0: 8fad0278 */ lw $t5,0x278($sp)
/* f0409f4: 8fa2027c */ lw $v0,0x27c($sp)
/* f0409f8: 8db902d4 */ lw $t9,0x2d4($t5)
/* f0409fc: 3c014120 */ lui $at,0x4120
/* f040a00: 0002c080 */ sll $t8,$v0,0x2
/* f040a04: 03386021 */ addu $t4,$t9,$t8
/* f040a08: c58800e4 */ lwc1 $f8,0xe4($t4)
/* f040a0c: 44819000 */ mtc1 $at,$f18
/* f040a10: 44802000 */ mtc1 $zero,$f4
/* f040a14: 46124282 */ mul.s $f10,$f8,$f18
/* f040a18: 4600518d */ trunc.w.s $f6,$f10
/* f040a1c: 440b3000 */ mfc1 $t3,$f6
/* f040a20: 00000000 */ sll $zero,$zero,0x0
/* f040a24: a3ab0262 */ sb $t3,0x262($sp)
/* f040a28: 8daa02d4 */ lw $t2,0x2d4($t5)
/* f040a2c: 01587821 */ addu $t7,$t2,$t8
/* f040a30: e5e400e4 */ swc1 $f4,0xe4($t7)
.NB0f040a34:
/* f040a34: 93b8026e */ lbu $t8,0x26e($sp)
/* f040a38: 93b9026f */ lbu $t9,0x26f($sp)
/* f040a3c: 530001ba */ beqzl $t8,.NB0f041128
/* f040a40: 8fac01c0 */ lw $t4,0x1c0($sp)
/* f040a44: 172000d0 */ bnez $t9,.NB0f040d88
/* f040a48: 8fac0258 */ lw $t4,0x258($sp)
/* f040a4c: 318e0200 */ andi $t6,$t4,0x200
/* f040a50: 11c00046 */ beqz $t6,.NB0f040b6c
/* f040a54: 8fab025c */ lw $t3,0x25c($sp)
/* f040a58: 916d0000 */ lbu $t5,0x0($t3)
/* f040a5c: 24010006 */ addiu $at,$zero,0x6
/* f040a60: 8fa40278 */ lw $a0,0x278($sp)
/* f040a64: 15a10041 */ bne $t5,$at,.NB0f040b6c
/* f040a68: 27a50244 */ addiu $a1,$sp,0x244
/* f040a6c: 27a60234 */ addiu $a2,$sp,0x234
/* f040a70: 0fc0e2c1 */ jal chrCanSeeAttackTarget
/* f040a74: 00003825 */ or $a3,$zero,$zero
/* f040a78: 1040003c */ beqz $v0,.NB0f040b6c
/* f040a7c: 3c014170 */ lui $at,0x4170
/* f040a80: 44817000 */ mtc1 $at,$f14
/* f040a84: 8faa025c */ lw $t2,0x25c($sp)
/* f040a88: c7aa01e0 */ lwc1 $f10,0x1e0($sp)
/* f040a8c: c7a80244 */ lwc1 $f8,0x244($sp)
/* f040a90: c5500008 */ lwc1 $f16,0x8($t2)
/* f040a94: 460e5182 */ mul.s $f6,$f10,$f14
/* f040a98: c7aa01e4 */ lwc1 $f10,0x1e4($sp)
/* f040a9c: 46088481 */ sub.s $f18,$f16,$f8
/* f040aa0: c7b00248 */ lwc1 $f16,0x248($sp)
/* f040aa4: c544000c */ lwc1 $f4,0xc($t2)
/* f040aa8: 8fa40278 */ lw $a0,0x278($sp)
/* f040aac: 27a501f8 */ addiu $a1,$sp,0x1f8
/* f040ab0: 46069001 */ sub.s $f0,$f18,$f6
/* f040ab4: 460e5482 */ mul.s $f18,$f10,$f14
/* f040ab8: c7aa01e8 */ lwc1 $f10,0x1e8($sp)
/* f040abc: 46102201 */ sub.s $f8,$f4,$f16
/* f040ac0: c7a4024c */ lwc1 $f4,0x24c($sp)
/* f040ac4: c5460010 */ lwc1 $f6,0x10($t2)
/* f040ac8: 27a601f4 */ addiu $a2,$sp,0x1f4
/* f040acc: 46124081 */ sub.s $f2,$f8,$f18
/* f040ad0: 460e5202 */ mul.s $f8,$f10,$f14
/* f040ad4: c7b201d0 */ lwc1 $f18,0x1d0($sp)
/* f040ad8: 46043401 */ sub.s $f16,$f6,$f4
/* f040adc: 46000182 */ mul.s $f6,$f0,$f0
/* f040ae0: 00000000 */ sll $zero,$zero,0x0
/* f040ae4: 46021102 */ mul.s $f4,$f2,$f2
/* f040ae8: 46088301 */ sub.s $f12,$f16,$f8
/* f040aec: 460c6402 */ mul.s $f16,$f12,$f12
/* f040af0: 46043280 */ add.s $f10,$f6,$f4
/* f040af4: 46105200 */ add.s $f8,$f10,$f16
/* f040af8: 4612403e */ c.le.s $f8,$f18
/* f040afc: 00000000 */ sll $zero,$zero,0x0
/* f040b00: 4500002b */ bc1f .NB0f040bb0
/* f040b04: 00000000 */ sll $zero,$zero,0x0
/* f040b08: 0fc0fca9 */ jal chrCalculateHit
/* f040b0c: 27a70260 */ addiu $a3,$sp,0x260
/* f040b10: 8faf01f4 */ lw $t7,0x1f4($sp)
/* f040b14: 8fb901f8 */ lw $t9,0x1f8($sp)
/* f040b18: 8fac0278 */ lw $t4,0x278($sp)
/* f040b1c: 2df80001 */ sltiu $t8,$t7,0x1
/* f040b20: 13200023 */ beqz $t9,.NB0f040bb0
/* f040b24: afb801f0 */ sw $t8,0x1f0($sp)
/* f040b28: 81830007 */ lb $v1,0x7($t4)
/* f040b2c: 24010008 */ addiu $at,$zero,0x8
/* f040b30: 3c0e800a */ lui $t6,0x800a
/* f040b34: 1061000a */ beq $v1,$at,.NB0f040b60
/* f040b38: 8fab0278 */ lw $t3,0x278($sp)
/* f040b3c: 2401000a */ addiu $at,$zero,0xa
/* f040b40: 10610007 */ beq $v1,$at,.NB0f040b60
/* f040b44: 2401001b */ addiu $at,$zero,0x1b
/* f040b48: 10610005 */ beq $v1,$at,.NB0f040b60
/* f040b4c: 2401001c */ addiu $at,$zero,0x1c
/* f040b50: 10610003 */ beq $v1,$at,.NB0f040b60
/* f040b54: 2401001d */ addiu $at,$zero,0x1d
/* f040b58: 54610016 */ bnel $v1,$at,.NB0f040bb4
/* f040b5c: 8fb801f4 */ lw $t8,0x1f4($sp)
.NB0f040b60:
/* f040b60: 8dcee6c8 */ lw $t6,-0x1938($t6)
/* f040b64: 10000012 */ beqz $zero,.NB0f040bb0
/* f040b68: ad6e0048 */ sw $t6,0x48($t3)
.NB0f040b6c:
/* f040b6c: 8fad0278 */ lw $t5,0x278($sp)
/* f040b70: 24010008 */ addiu $at,$zero,0x8
/* f040b74: 3c0a800a */ lui $t2,0x800a
/* f040b78: 81a30007 */ lb $v1,0x7($t5)
/* f040b7c: 8faf0278 */ lw $t7,0x278($sp)
/* f040b80: 10610009 */ beq $v1,$at,.NB0f040ba8
/* f040b84: 2401000a */ addiu $at,$zero,0xa
/* f040b88: 10610007 */ beq $v1,$at,.NB0f040ba8
/* f040b8c: 2401001b */ addiu $at,$zero,0x1b
/* f040b90: 10610005 */ beq $v1,$at,.NB0f040ba8
/* f040b94: 2401001c */ addiu $at,$zero,0x1c
/* f040b98: 10610003 */ beq $v1,$at,.NB0f040ba8
/* f040b9c: 2401001d */ addiu $at,$zero,0x1d
/* f040ba0: 54610004 */ bnel $v1,$at,.NB0f040bb4
/* f040ba4: 8fb801f4 */ lw $t8,0x1f4($sp)
.NB0f040ba8:
/* f040ba8: 8d4ae6c8 */ lw $t2,-0x1938($t2)
/* f040bac: adea0048 */ sw $t2,0x48($t7)
.NB0f040bb0:
/* f040bb0: 8fb801f4 */ lw $t8,0x1f4($sp)
.NB0f040bb4:
/* f040bb4: 8fad01cc */ lw $t5,0x1cc($sp)
/* f040bb8: 13000065 */ beqz $t8,.NB0f040d50
/* f040bbc: 00000000 */ sll $zero,$zero,0x0
/* f040bc0: 0fc2bea2 */ jal handGetDamage
/* f040bc4: 27a40260 */ addiu $a0,$sp,0x260
/* f040bc8: 8fae025c */ lw $t6,0x25c($sp)
/* f040bcc: 2419ffff */ addiu $t9,$zero,-1
/* f040bd0: 240c00c8 */ addiu $t4,$zero,0xc8
/* f040bd4: e7a0009c */ swc1 $f0,0x9c($sp)
/* f040bd8: afa00098 */ sw $zero,0x98($sp)
/* f040bdc: afa00094 */ sw $zero,0x94($sp)
/* f040be0: afb90090 */ sw $t9,0x90($sp)
/* f040be4: afac008c */ sw $t4,0x8c($sp)
/* f040be8: 8dcb0004 */ lw $t3,0x4($t6)
/* f040bec: afab0088 */ sw $t3,0x88($sp)
/* f040bf0: c5c60008 */ lwc1 $f6,0x8($t6)
/* f040bf4: e7a60228 */ swc1 $f6,0x228($sp)
/* f040bf8: c5c4000c */ lwc1 $f4,0xc($t6)
/* f040bfc: e7a4022c */ swc1 $f4,0x22c($sp)
/* f040c00: c5ca0010 */ lwc1 $f10,0x10($t6)
/* f040c04: 0c004d84 */ jal random
/* f040c08: e7aa0230 */ swc1 $f10,0x230($sp)
/* f040c0c: 304d0001 */ andi $t5,$v0,0x1
/* f040c10: 11a00012 */ beqz $t5,.NB0f040c5c
/* f040c14: 00000000 */ sll $zero,$zero,0x0
/* f040c18: 0c004d84 */ jal random
/* f040c1c: 00000000 */ sll $zero,$zero,0x0
/* f040c20: 2401000a */ addiu $at,$zero,0xa
/* f040c24: 0041001b */ divu $zero,$v0,$at
/* f040c28: 00005010 */ mfhi $t2
/* f040c2c: 254f0002 */ addiu $t7,$t2,0x2
/* f040c30: 448f9000 */ mtc1 $t7,$f18
/* f040c34: c7b0022c */ lwc1 $f16,0x22c($sp)
/* f040c38: 05e10005 */ bgez $t7,.NB0f040c50
/* f040c3c: 46809220 */ cvt.s.w $f8,$f18
/* f040c40: 3c014f80 */ lui $at,0x4f80
/* f040c44: 44813000 */ mtc1 $at,$f6
/* f040c48: 00000000 */ sll $zero,$zero,0x0
/* f040c4c: 46064200 */ add.s $f8,$f8,$f6
.NB0f040c50:
/* f040c50: 46088100 */ add.s $f4,$f16,$f8
/* f040c54: 10000011 */ beqz $zero,.NB0f040c9c
/* f040c58: e7a4022c */ swc1 $f4,0x22c($sp)
.NB0f040c5c:
/* f040c5c: 0c004d84 */ jal random
/* f040c60: 00000000 */ sll $zero,$zero,0x0
/* f040c64: 2401000a */ addiu $at,$zero,0xa
/* f040c68: 0041001b */ divu $zero,$v0,$at
/* f040c6c: 0000c010 */ mfhi $t8
/* f040c70: 27190002 */ addiu $t9,$t8,0x2
/* f040c74: 44999000 */ mtc1 $t9,$f18
/* f040c78: c7aa022c */ lwc1 $f10,0x22c($sp)
/* f040c7c: 07210005 */ bgez $t9,.NB0f040c94
/* f040c80: 468091a0 */ cvt.s.w $f6,$f18
/* f040c84: 3c014f80 */ lui $at,0x4f80
/* f040c88: 44818000 */ mtc1 $at,$f16
/* f040c8c: 00000000 */ sll $zero,$zero,0x0
/* f040c90: 46103180 */ add.s $f6,$f6,$f16
.NB0f040c94:
/* f040c94: 46065201 */ sub.s $f8,$f10,$f6
/* f040c98: e7a8022c */ swc1 $f8,0x22c($sp)
.NB0f040c9c:
/* f040c9c: 27a40260 */ addiu $a0,$sp,0x260
/* f040ca0: 8fa5025c */ lw $a1,0x25c($sp)
/* f040ca4: 0fc296b1 */ jal func0f0a7d98
/* f040ca8: 2406ffff */ addiu $a2,$zero,-1
/* f040cac: 8fa40088 */ lw $a0,0x88($sp)
/* f040cb0: 8c8c0020 */ lw $t4,0x20($a0)
/* f040cb4: 51800012 */ beqzl $t4,.NB0f040d00
/* f040cb8: 8faa0278 */ lw $t2,0x278($sp)
/* f040cbc: 0fc0ce2a */ jal chrGetShield
/* f040cc0: 00000000 */ sll $zero,$zero,0x0
/* f040cc4: 44802000 */ mtc1 $zero,$f4
/* f040cc8: 8fa40088 */ lw $a0,0x88($sp)
/* f040ccc: 27a50228 */ addiu $a1,$sp,0x228
/* f040cd0: 4600203c */ c.lt.s $f4,$f0
/* f040cd4: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f040cd8: 27a70098 */ addiu $a3,$sp,0x98
/* f040cdc: 27ab008c */ addiu $t3,$sp,0x8c
/* f040ce0: 45000006 */ bc1f .NB0f040cfc
/* f040ce4: 27ae0094 */ addiu $t6,$sp,0x94
/* f040ce8: 27ad0090 */ addiu $t5,$sp,0x90
/* f040cec: afad0018 */ sw $t5,0x18($sp)
/* f040cf0: afab0010 */ sw $t3,0x10($sp)
/* f040cf4: 0fc0fdc8 */ jal chrCalculateShieldHit
/* f040cf8: afae0014 */ sw $t6,0x14($sp)
.NB0f040cfc:
/* f040cfc: 8faa0278 */ lw $t2,0x278($sp)
.NB0f040d00:
/* f040d00: 8fb9025c */ lw $t9,0x25c($sp)
/* f040d04: 8fac0098 */ lw $t4,0x98($sp)
/* f040d08: 8d4f001c */ lw $t7,0x1c($t2)
/* f040d0c: 8fab0094 */ lw $t3,0x94($sp)
/* f040d10: 8fae0090 */ lw $t6,0x90($sp)
/* f040d14: 241800c8 */ addiu $t8,$zero,0xc8
/* f040d18: 8fa40088 */ lw $a0,0x88($sp)
/* f040d1c: afb80014 */ sw $t8,0x14($sp)
/* f040d20: afa00028 */ sw $zero,0x28($sp)
/* f040d24: 8fa5009c */ lw $a1,0x9c($sp)
/* f040d28: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f040d2c: 27a70260 */ addiu $a3,$sp,0x260
/* f040d30: afb90018 */ sw $t9,0x18($sp)
/* f040d34: afac001c */ sw $t4,0x1c($sp)
/* f040d38: afaf0010 */ sw $t7,0x10($sp)
/* f040d3c: afab0020 */ sw $t3,0x20($sp)
/* f040d40: 0fc0ceb9 */ jal func0f0341dc
/* f040d44: afae0024 */ sw $t6,0x24($sp)
/* f040d48: 10000010 */ beqz $zero,.NB0f040d8c
/* f040d4c: 8faa01f0 */ lw $t2,0x1f0($sp)
.NB0f040d50:
/* f040d50: 11a00006 */ beqz $t5,.NB0f040d6c
/* f040d54: c7b201d0 */ lwc1 $f18,0x1d0($sp)
/* f040d58: 91a20000 */ lbu $v0,0x0($t5)
/* f040d5c: 24010003 */ addiu $at,$zero,0x3
/* f040d60: 10410009 */ beq $v0,$at,.NB0f040d88
/* f040d64: 24010006 */ addiu $at,$zero,0x6
/* f040d68: 10410007 */ beq $v0,$at,.NB0f040d88
.NB0f040d6c:
/* f040d6c: 3c017f1a */ lui $at,0x7f1a
/* f040d70: c4303410 */ lwc1 $f16,0x3410($at)
/* f040d74: 4610903c */ c.lt.s $f18,$f16
/* f040d78: 00000000 */ sll $zero,$zero,0x0
/* f040d7c: 45020003 */ bc1fl .NB0f040d8c
/* f040d80: 8faa01f0 */ lw $t2,0x1f0($sp)
/* f040d84: afa001f0 */ sw $zero,0x1f0($sp)
.NB0f040d88:
/* f040d88: 8faa01f0 */ lw $t2,0x1f0($sp)
.NB0f040d8c:
/* f040d8c: 8faf01cc */ lw $t7,0x1cc($sp)
/* f040d90: 514000e5 */ beqzl $t2,.NB0f041128
/* f040d94: 8fac01c0 */ lw $t4,0x1c0($sp)
/* f040d98: 11e000a2 */ beqz $t7,.NB0f041024
/* f040d9c: 8fac0224 */ lw $t4,0x224($sp)
/* f040da0: 91e20000 */ lbu $v0,0x0($t7)
/* f040da4: 24010006 */ addiu $at,$zero,0x6
/* f040da8: 93b8026f */ lbu $t8,0x26f($sp)
/* f040dac: 10410003 */ beq $v0,$at,.NB0f040dbc
/* f040db0: 24010003 */ addiu $at,$zero,0x3
/* f040db4: 54410053 */ bnel $v0,$at,.NB0f040f04
/* f040db8: 24010001 */ addiu $at,$zero,0x1
.NB0f040dbc:
/* f040dbc: 1700000c */ bnez $t8,.NB0f040df0
/* f040dc0: 8fb901bc */ lw $t9,0x1bc($sp)
/* f040dc4: 1720000a */ bnez $t9,.NB0f040df0
/* f040dc8: 8fac0278 */ lw $t4,0x278($sp)
/* f040dcc: 8d8b0018 */ lw $t3,0x18($t4)
/* f040dd0: 8fad01cc */ lw $t5,0x1cc($sp)
/* f040dd4: 01802825 */ or $a1,$t4,$zero
/* f040dd8: 316e0040 */ andi $t6,$t3,0x40
/* f040ddc: 11c00045 */ beqz $t6,.NB0f040ef4
/* f040de0: 24060002 */ addiu $a2,$zero,0x2
/* f040de4: 0fc1279f */ jal chrCompareTeams
/* f040de8: 8da40004 */ lw $a0,0x4($t5)
/* f040dec: 10400041 */ beqz $v0,.NB0f040ef4
.NB0f040df0:
/* f040df0: 240affff */ addiu $t2,$zero,-1
/* f040df4: 240f00c8 */ addiu $t7,$zero,0xc8
/* f040df8: afa00084 */ sw $zero,0x84($sp)
/* f040dfc: afa00080 */ sw $zero,0x80($sp)
/* f040e00: afaa007c */ sw $t2,0x7c($sp)
/* f040e04: afaf0078 */ sw $t7,0x78($sp)
/* f040e08: 0fc2bea2 */ jal handGetDamage
/* f040e0c: 27a40260 */ addiu $a0,$sp,0x260
/* f040e10: 8fa501cc */ lw $a1,0x1cc($sp)
/* f040e14: e7a00074 */ swc1 $f0,0x74($sp)
/* f040e18: 27a40260 */ addiu $a0,$sp,0x260
/* f040e1c: 8cb90004 */ lw $t9,0x4($a1)
/* f040e20: 2406ffff */ addiu $a2,$zero,-1
/* f040e24: 0fc296b1 */ jal func0f0a7d98
/* f040e28: afb90070 */ sw $t9,0x70($sp)
/* f040e2c: 8fa40070 */ lw $a0,0x70($sp)
/* f040e30: 8c8b0020 */ lw $t3,0x20($a0)
/* f040e34: 51600012 */ beqzl $t3,.NB0f040e80
/* f040e38: 8faf0278 */ lw $t7,0x278($sp)
/* f040e3c: 0fc0ce2a */ jal chrGetShield
/* f040e40: 00000000 */ sll $zero,$zero,0x0
/* f040e44: 44805000 */ mtc1 $zero,$f10
/* f040e48: 8fa40070 */ lw $a0,0x70($sp)
/* f040e4c: 27a50228 */ addiu $a1,$sp,0x228
/* f040e50: 4600503c */ c.lt.s $f10,$f0
/* f040e54: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f040e58: 27a70084 */ addiu $a3,$sp,0x84
/* f040e5c: 27ae0078 */ addiu $t6,$sp,0x78
/* f040e60: 45000006 */ bc1f .NB0f040e7c
/* f040e64: 27ad0080 */ addiu $t5,$sp,0x80
/* f040e68: 27ac007c */ addiu $t4,$sp,0x7c
/* f040e6c: afac0018 */ sw $t4,0x18($sp)
/* f040e70: afae0010 */ sw $t6,0x10($sp)
/* f040e74: 0fc0fdc8 */ jal chrCalculateShieldHit
/* f040e78: afad0014 */ sw $t5,0x14($sp)
.NB0f040e7c:
/* f040e7c: 8faf0278 */ lw $t7,0x278($sp)
.NB0f040e80:
/* f040e80: 27aa01e0 */ addiu $t2,$sp,0x1e0
/* f040e84: 8fa40070 */ lw $a0,0x70($sp)
/* f040e88: afaa0010 */ sw $t2,0x10($sp)
/* f040e8c: 8fa501cc */ lw $a1,0x1cc($sp)
/* f040e90: 8fa60078 */ lw $a2,0x78($sp)
/* f040e94: 27a70228 */ addiu $a3,$sp,0x228
/* f040e98: 0fc09630 */ jal chrEmitSparks
/* f040e9c: afaf0014 */ sw $t7,0x14($sp)
/* f040ea0: 8fb90278 */ lw $t9,0x278($sp)
/* f040ea4: 8fae01cc */ lw $t6,0x1cc($sp)
/* f040ea8: 8fad0084 */ lw $t5,0x84($sp)
/* f040eac: 8f38001c */ lw $t8,0x1c($t9)
/* f040eb0: 8fac0080 */ lw $t4,0x80($sp)
/* f040eb4: 8faa007c */ lw $t2,0x7c($sp)
/* f040eb8: 240b00c8 */ addiu $t3,$zero,0xc8
/* f040ebc: afab0014 */ sw $t3,0x14($sp)
/* f040ec0: afa00028 */ sw $zero,0x28($sp)
/* f040ec4: 8fa40070 */ lw $a0,0x70($sp)
/* f040ec8: 8fa50074 */ lw $a1,0x74($sp)
/* f040ecc: 27a601e0 */ addiu $a2,$sp,0x1e0
/* f040ed0: 27a70260 */ addiu $a3,$sp,0x260
/* f040ed4: afae0018 */ sw $t6,0x18($sp)
/* f040ed8: afad001c */ sw $t5,0x1c($sp)
/* f040edc: afb80010 */ sw $t8,0x10($sp)
/* f040ee0: afac0020 */ sw $t4,0x20($sp)
/* f040ee4: 0fc0ceb9 */ jal func0f0341dc
/* f040ee8: afaa0024 */ sw $t2,0x24($sp)
/* f040eec: 1000006f */ beqz $zero,.NB0f0410ac
/* f040ef0: 93b90260 */ lbu $t9,0x260($sp)
.NB0f040ef4:
/* f040ef4: afa00250 */ sw $zero,0x250($sp)
/* f040ef8: 1000006b */ beqz $zero,.NB0f0410a8
/* f040efc: afa00268 */ sw $zero,0x268($sp)
/* f040f00: 24010001 */ addiu $at,$zero,0x1
.NB0f040f04:
/* f040f04: 10410005 */ beq $v0,$at,.NB0f040f1c
/* f040f08: 8faf01cc */ lw $t7,0x1cc($sp)
/* f040f0c: 24010004 */ addiu $at,$zero,0x4
/* f040f10: 10410002 */ beq $v0,$at,.NB0f040f1c
/* f040f14: 24010002 */ addiu $at,$zero,0x2
/* f040f18: 14410063 */ bne $v0,$at,.NB0f0410a8
.NB0f040f1c:
/* f040f1c: 3c0b800a */ lui $t3,0x800a
/* f040f20: 8d6be9d4 */ lw $t3,-0x162c($t3)
/* f040f24: 8df90004 */ lw $t9,0x4($t7)
/* f040f28: 2418ffff */ addiu $t8,$zero,-1
/* f040f2c: afb80068 */ sw $t8,0x68($sp)
/* f040f30: 11600004 */ beqz $t3,.NB0f040f44
/* f040f34: afb9006c */ sw $t9,0x6c($sp)
/* f040f38: 0fc61c7f */ jal mpPlayerGetIndex
/* f040f3c: 8fa40278 */ lw $a0,0x278($sp)
/* f040f40: afa20068 */ sw $v0,0x68($sp)
.NB0f040f44:
/* f040f44: 27a40260 */ addiu $a0,$sp,0x260
/* f040f48: 8fa501cc */ lw $a1,0x1cc($sp)
/* f040f4c: 0fc296b1 */ jal func0f0a7d98
/* f040f50: 2406ffff */ addiu $a2,$zero,-1
/* f040f54: 27a40244 */ addiu $a0,$sp,0x244
/* f040f58: 27a50234 */ addiu $a1,$sp,0x234
/* f040f5c: 27a60228 */ addiu $a2,$sp,0x228
/* f040f60: 0fc19437 */ jal func0f065e74
/* f040f64: 27a70214 */ addiu $a3,$sp,0x214
/* f040f68: 240e0001 */ addiu $t6,$zero,0x1
/* f040f6c: afae0210 */ sw $t6,0x210($sp)
/* f040f70: 0fc4e3ea */ jal chrIsUsingPaintball
/* f040f74: 8fa40278 */ lw $a0,0x278($sp)
/* f040f78: 1040000b */ beqz $v0,.NB0f040fa8
/* f040f7c: 87a40214 */ lh $a0,0x214($sp)
/* f040f80: 240d0019 */ addiu $t5,$zero,0x19
/* f040f84: afad0014 */ sw $t5,0x14($sp)
/* f040f88: 87a40214 */ lh $a0,0x214($sp)
/* f040f8c: 8fa501cc */ lw $a1,0x1cc($sp)
/* f040f90: 27a60228 */ addiu $a2,$sp,0x228
/* f040f94: 00003825 */ or $a3,$zero,$zero
/* f040f98: 0fc4a960 */ jal sparksCreate
/* f040f9c: afa00010 */ sw $zero,0x10($sp)
/* f040fa0: 10000007 */ beqz $zero,.NB0f040fc0
/* f040fa4: 00000000 */ sll $zero,$zero,0x0
.NB0f040fa8:
/* f040fa8: 8fa501cc */ lw $a1,0x1cc($sp)
/* f040fac: 27a60228 */ addiu $a2,$sp,0x228
/* f040fb0: 00003825 */ or $a3,$zero,$zero
/* f040fb4: afa00010 */ sw $zero,0x10($sp)
/* f040fb8: 0fc4a960 */ jal sparksCreate
/* f040fbc: afa00014 */ sw $zero,0x14($sp)
.NB0f040fc0:
/* f040fc0: 3c0c800a */ lui $t4,0x800a
/* f040fc4: 818a27ab */ lb $t2,0x27ab($t4)
/* f040fc8: 8faf0278 */ lw $t7,0x278($sp)
/* f040fcc: 0541000a */ bgez $t2,.NB0f040ff8
/* f040fd0: 00000000 */ sll $zero,$zero,0x0
/* f040fd4: 91f90125 */ lbu $t9,0x125($t7)
/* f040fd8: 24010010 */ addiu $at,$zero,0x10
/* f040fdc: 8fb8006c */ lw $t8,0x6c($sp)
/* f040fe0: 17210005 */ bne $t9,$at,.NB0f040ff8
/* f040fe4: 00000000 */ sll $zero,$zero,0x0
/* f040fe8: 8f0b000c */ lw $t3,0xc($t8)
/* f040fec: 316e0001 */ andi $t6,$t3,0x1
/* f040ff0: 55c0002e */ bnezl $t6,.NB0f0410ac
/* f040ff4: 93b90260 */ lbu $t9,0x260($sp)
.NB0f040ff8:
/* f040ff8: 0fc2bea2 */ jal handGetDamage
/* f040ffc: 27a40260 */ addiu $a0,$sp,0x260
/* f041000: 8fad0068 */ lw $t5,0x68($sp)
/* f041004: 44050000 */ mfc1 $a1,$f0
/* f041008: 8fa4006c */ lw $a0,0x6c($sp)
/* f04100c: 27a60228 */ addiu $a2,$sp,0x228
/* f041010: 93a70260 */ lbu $a3,0x260($sp)
/* f041014: 0fc20ebd */ jal func0f085270
/* f041018: afad0010 */ sw $t5,0x10($sp)
/* f04101c: 10000023 */ beqz $zero,.NB0f0410ac
/* f041020: 93b90260 */ lbu $t9,0x260($sp)
.NB0f041024:
/* f041024: 11800020 */ beqz $t4,.NB0f0410a8
/* f041028: 27a40244 */ addiu $a0,$sp,0x244
/* f04102c: 27a50234 */ addiu $a1,$sp,0x234
/* f041030: 27a60228 */ addiu $a2,$sp,0x228
/* f041034: 0fc19437 */ jal func0f065e74
/* f041038: 27a70214 */ addiu $a3,$sp,0x214
/* f04103c: 240a0001 */ addiu $t2,$zero,0x1
/* f041040: afaa0210 */ sw $t2,0x210($sp)
/* f041044: 27a40260 */ addiu $a0,$sp,0x260
/* f041048: 27a50228 */ addiu $a1,$sp,0x228
/* f04104c: 2406ffff */ addiu $a2,$zero,-1
/* f041050: 0fc298a8 */ jal func0f0a84c8
/* f041054: 27a70214 */ addiu $a3,$sp,0x214
/* f041058: 0fc4e3ea */ jal chrIsUsingPaintball
/* f04105c: 8fa40278 */ lw $a0,0x278($sp)
/* f041060: 1040000b */ beqz $v0,.NB0f041090
/* f041064: 87a40214 */ lh $a0,0x214($sp)
/* f041068: 240f0019 */ addiu $t7,$zero,0x19
/* f04106c: afaf0014 */ sw $t7,0x14($sp)
/* f041070: 87a40214 */ lh $a0,0x214($sp)
/* f041074: 00002825 */ or $a1,$zero,$zero
/* f041078: 27a60228 */ addiu $a2,$sp,0x228
/* f04107c: 00003825 */ or $a3,$zero,$zero
/* f041080: 0fc4a960 */ jal sparksCreate
/* f041084: afa00010 */ sw $zero,0x10($sp)
/* f041088: 10000008 */ beqz $zero,.NB0f0410ac
/* f04108c: 93b90260 */ lbu $t9,0x260($sp)
.NB0f041090:
/* f041090: 00002825 */ or $a1,$zero,$zero
/* f041094: 27a60228 */ addiu $a2,$sp,0x228
/* f041098: 00003825 */ or $a3,$zero,$zero
/* f04109c: afa00010 */ sw $zero,0x10($sp)
/* f0410a0: 0fc4a960 */ jal sparksCreate
/* f0410a4: afa00014 */ sw $zero,0x14($sp)
.NB0f0410a8:
/* f0410a8: 93b90260 */ lbu $t9,0x260($sp)
.NB0f0410ac:
/* f0410ac: 24010007 */ addiu $at,$zero,0x7
/* f0410b0: 93b80263 */ lbu $t8,0x263($sp)
/* f0410b4: 1721001b */ bne $t9,$at,.NB0f041124
/* f0410b8: 24010001 */ addiu $at,$zero,0x1
/* f0410bc: 17010019 */ bne $t8,$at,.NB0f041124
/* f0410c0: 8fab0278 */ lw $t3,0x278($sp)
/* f0410c4: 8d6e02d4 */ lw $t6,0x2d4($t3)
/* f0410c8: 3c03800a */ lui $v1,0x800a
/* f0410cc: 11c00005 */ beqz $t6,.NB0f0410e4
/* f0410d0: 00000000 */ sll $zero,$zero,0x0
/* f0410d4: 0fc61c7f */ jal mpPlayerGetIndex
/* f0410d8: 01602025 */ or $a0,$t3,$zero
/* f0410dc: 10000002 */ beqz $zero,.NB0f0410e8
/* f0410e0: 00401825 */ or $v1,$v0,$zero
.NB0f0410e4:
/* f0410e4: 8c63e94c */ lw $v1,-0x16b4($v1)
.NB0f0410e8:
/* f0410e8: 8fad0210 */ lw $t5,0x210($sp)
/* f0410ec: 27a40244 */ addiu $a0,$sp,0x244
/* f0410f0: 27a50234 */ addiu $a1,$sp,0x234
/* f0410f4: 15a00005 */ bnez $t5,.NB0f04110c
/* f0410f8: 27a60228 */ addiu $a2,$sp,0x228
/* f0410fc: 27a70214 */ addiu $a3,$sp,0x214
/* f041100: 0fc19437 */ jal func0f065e74
/* f041104: afa30064 */ sw $v1,0x64($sp)
/* f041108: 8fa30064 */ lw $v1,0x64($sp)
.NB0f04110c:
/* f04110c: 00002025 */ or $a0,$zero,$zero
/* f041110: 27a50228 */ addiu $a1,$sp,0x228
/* f041114: 27a60214 */ addiu $a2,$sp,0x214
/* f041118: 24070016 */ addiu $a3,$zero,0x16
/* f04111c: 0fc49158 */ jal explosionCreateSimple
/* f041120: afa30010 */ sw $v1,0x10($sp)
.NB0f041124:
/* f041124: 8fac01c0 */ lw $t4,0x1c0($sp)
.NB0f041128:
/* f041128: 8fa4025c */ lw $a0,0x25c($sp)
/* f04112c: 51800004 */ beqzl $t4,.NB0f041140
/* f041130: 8fa80268 */ lw $t0,0x268($sp)
/* f041134: 0fc18cfb */ jal propSetCollisionsEnabled
/* f041138: 00002825 */ or $a1,$zero,$zero
/* f04113c: 8fa80268 */ lw $t0,0x268($sp)
.NB0f041140:
/* f041140: 8faf0250 */ lw $t7,0x250($sp)
/* f041144: 93b90260 */ lbu $t9,0x260($sp)
/* f041148: 0008502b */ sltu $t2,$zero,$t0
/* f04114c: 11e0000e */ beqz $t7,.NB0f041188
/* f041150: 01404025 */ or $t0,$t2,$zero
/* f041154: 2738fffe */ addiu $t8,$t9,-2
/* f041158: 2f01002a */ sltiu $at,$t8,0x2a
/* f04115c: 10200009 */ beqz $at,.NB0f041184
/* f041160: 0018c080 */ sll $t8,$t8,0x2
/* f041164: 3c017f1a */ lui $at,0x7f1a
/* f041168: 00380821 */ addu $at,$at,$t8
/* f04116c: 8c383414 */ lw $t8,0x3414($at)
/* f041170: 03000008 */ jr $t8
/* f041174: 00000000 */ sll $zero,$zero,0x0
/* f041178: 240e0001 */ addiu $t6,$zero,0x1
/* f04117c: 10000002 */ beqz $zero,.NB0f041188
/* f041180: afae0250 */ sw $t6,0x250($sp)
.NB0f041184:
/* f041184: afa00250 */ sw $zero,0x250($sp)
.NB0f041188:
/* f041188: 11000004 */ beqz $t0,.NB0f04119c
/* f04118c: 01003825 */ or $a3,$t0,$zero
/* f041190: 8fa70250 */ lw $a3,0x250($sp)
/* f041194: 0007582b */ sltu $t3,$zero,$a3
/* f041198: 01603825 */ or $a3,$t3,$zero
.NB0f04119c:
/* f04119c: 27ad0244 */ addiu $t5,$sp,0x244
/* f0411a0: 27ac0228 */ addiu $t4,$sp,0x228
/* f0411a4: afac0014 */ sw $t4,0x14($sp)
/* f0411a8: afad0010 */ sw $t5,0x10($sp)
/* f0411ac: 8fa40278 */ lw $a0,0x278($sp)
/* f0411b0: 8fa5027c */ lw $a1,0x27c($sp)
/* f0411b4: 8fa60268 */ lw $a2,0x268($sp)
/* f0411b8: 0fc0f6a6 */ jal func0f03e29c
/* f0411bc: afa80054 */ sw $t0,0x54($sp)
/* f0411c0: 93aa026f */ lbu $t2,0x26f($sp)
/* f0411c4: 8fa80054 */ lw $t0,0x54($sp)
/* f0411c8: 8fa40278 */ lw $a0,0x278($sp)
/* f0411cc: 11400015 */ beqz $t2,.NB0f041224
/* f0411d0: 8fa5027c */ lw $a1,0x27c($sp)
/* f0411d4: 1100000a */ beqz $t0,.NB0f041200
/* f0411d8: 01003025 */ or $a2,$t0,$zero
/* f0411dc: 8faf0278 */ lw $t7,0x278($sp)
/* f0411e0: 8fb8027c */ lw $t8,0x27c($sp)
/* f0411e4: 8df902d4 */ lw $t9,0x2d4($t7)
/* f0411e8: 00187080 */ sll $t6,$t8,0x2
/* f0411ec: 032e1021 */ addu $v0,$t9,$t6
/* f0411f0: 8c430024 */ lw $v1,0x24($v0)
/* f0411f4: 18600002 */ blez $v1,.NB0f041200
/* f0411f8: 246bffff */ addiu $t3,$v1,-1
/* f0411fc: ac4b0024 */ sw $t3,0x24($v0)
.NB0f041200:
/* f041200: 11000004 */ beqz $t0,.NB0f041214
/* f041204: 8fa40278 */ lw $a0,0x278($sp)
/* f041208: 93a6026e */ lbu $a2,0x26e($sp)
/* f04120c: 0006682b */ sltu $t5,$zero,$a2
/* f041210: 01a03025 */ or $a2,$t5,$zero
.NB0f041214:
/* f041214: 0fc0fc0f */ jal chrSetFiring
/* f041218: 8fa5027c */ lw $a1,0x27c($sp)
/* f04121c: 10000004 */ beqz $zero,.NB0f041230
/* f041220: 8fbf0044 */ lw $ra,0x44($sp)
.NB0f041224:
/* f041224: 0fc0fc0f */ jal chrSetFiring
/* f041228: 8fa60268 */ lw $a2,0x268($sp)
/* f04122c: 8fbf0044 */ lw $ra,0x44($sp)
.NB0f041230:
/* f041230: 27bd0278 */ addiu $sp,$sp,0x278
/* f041234: 03e00008 */ jr $ra
/* f041238: 00000000 */ sll $zero,$zero,0x0
);
#endif
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f041a74
/* f041a74: 27bdffd8 */ addiu $sp,$sp,-40
/* f041a78: afbf0024 */ sw $ra,0x24($sp)
/* f041a7c: afb00020 */ sw $s0,0x20($sp)
/* f041a80: 948e0192 */ lhu $t6,0x192($a0)
/* f041a84: 80820007 */ lb $v0,0x7($a0)
/* f041a88: 24010022 */ addiu $at,$zero,0x22
/* f041a8c: 31cfffdf */ andi $t7,$t6,0xffdf
/* f041a90: 00808025 */ or $s0,$a0,$zero
/* f041a94: 14410041 */ bne $v0,$at,.L0f041b9c
/* f041a98: a48f0192 */ sh $t7,0x192($a0)
/* f041a9c: 9098006c */ lbu $t8,0x6c($a0)
/* f041aa0: 53000019 */ beqzl $t8,.L0f041b08
/* f041aa4: 8e02001c */ lw $v0,0x1c($s0)
/* f041aa8: 8c82001c */ lw $v0,0x1c($a0)
/* f041aac: 9048003f */ lbu $t0,0x3f($v0)
/* f041ab0: 35090020 */ ori $t1,$t0,0x20
/* f041ab4: 0fc0a221 */ jal chrGetTargetProp
/* f041ab8: a049003f */ sb $t1,0x3f($v0)
/* f041abc: 8e0a005c */ lw $t2,0x5c($s0)
/* f041ac0: 8e04001c */ lw $a0,0x1c($s0)
/* f041ac4: 8e050348 */ lw $a1,0x348($s0)
/* f041ac8: afa20014 */ sw $v0,0x14($sp)
/* f041acc: 2606002c */ addiu $a2,$s0,0x2c
/* f041ad0: 26070044 */ addiu $a3,$s0,0x44
/* f041ad4: 0fc244b7 */ jal projectileCreate
/* f041ad8: afaa0010 */ sw $t2,0x10($sp)
/* f041adc: 3c0b800a */ lui $t3,%hi(g_Vars+0x8)
/* f041ae0: 8d6b9fc8 */ lw $t3,%lo(g_Vars+0x8)($t3)
/* f041ae4: 8e0d034c */ lw $t5,0x34c($s0)
/* f041ae8: 256c0002 */ addiu $t4,$t3,0x2
/* f041aec: adac0008 */ sw $t4,0x8($t5)
/* f041af0: 8e0e0348 */ lw $t6,0x348($s0)
/* f041af4: 8e0f034c */ lw $t7,0x34c($s0)
/* f041af8: c5c40014 */ lwc1 $f4,0x14($t6)
/* f041afc: 10000005 */ b .L0f041b14
/* f041b00: e5e40014 */ swc1 $f4,0x14($t7)
/* f041b04: 8e02001c */ lw $v0,0x1c($s0)
.L0f041b08:
/* f041b08: 9058003f */ lbu $t8,0x3f($v0)
/* f041b0c: 3319ffdf */ andi $t9,$t8,0xffdf
/* f041b10: a059003f */ sb $t9,0x3f($v0)
.L0f041b14:
/* f041b14: 9208006d */ lbu $t0,0x6d($s0)
/* f041b18: 51000015 */ beqzl $t0,.L0f041b70
/* f041b1c: 8e02001c */ lw $v0,0x1c($s0)
/* f041b20: 8e02001c */ lw $v0,0x1c($s0)
/* f041b24: 02002025 */ or $a0,$s0,$zero
/* f041b28: 904a003f */ lbu $t2,0x3f($v0)
/* f041b2c: 354b0020 */ ori $t3,$t2,0x20
/* f041b30: 0fc0a221 */ jal chrGetTargetProp
/* f041b34: a04b003f */ sb $t3,0x3f($v0)
/* f041b38: 8e0c0060 */ lw $t4,0x60($s0)
/* f041b3c: 8e04001c */ lw $a0,0x1c($s0)
/* f041b40: 8e05034c */ lw $a1,0x34c($s0)
/* f041b44: afa20014 */ sw $v0,0x14($sp)
/* f041b48: 26060038 */ addiu $a2,$s0,0x38
/* f041b4c: 26070050 */ addiu $a3,$s0,0x50
/* f041b50: 0fc244b7 */ jal projectileCreate
/* f041b54: afac0010 */ sw $t4,0x10($sp)
/* f041b58: 8e0d034c */ lw $t5,0x34c($s0)
/* f041b5c: 8e0e0348 */ lw $t6,0x348($s0)
/* f041b60: c5a60014 */ lwc1 $f6,0x14($t5)
/* f041b64: 10000005 */ b .L0f041b7c
/* f041b68: e5c60014 */ swc1 $f6,0x14($t6)
/* f041b6c: 8e02001c */ lw $v0,0x1c($s0)
.L0f041b70:
/* f041b70: 904f003f */ lbu $t7,0x3f($v0)
/* f041b74: 31f8ffdf */ andi $t8,$t7,0xffdf
/* f041b78: a058003f */ sb $t8,0x3f($v0)
.L0f041b7c:
/* f041b7c: 8e190348 */ lw $t9,0x348($s0)
/* f041b80: 0fc2b6ef */ jal beamTick
/* f041b84: 8f240004 */ lw $a0,0x4($t9)
/* f041b88: 8e08034c */ lw $t0,0x34c($s0)
/* f041b8c: 0fc2b6ef */ jal beamTick
/* f041b90: 8d040004 */ lw $a0,0x4($t0)
/* f041b94: 10000027 */ b .L0f041c34
/* f041b98: 8fbf0024 */ lw $ra,0x24($sp)
.L0f041b9c:
/* f041b9c: 24010021 */ addiu $at,$zero,0x21
/* f041ba0: 54410010 */ bnel $v0,$at,.L0f041be4
/* f041ba4: 8e020014 */ lw $v0,0x14($s0)
/* f041ba8: 82090033 */ lb $t1,0x33($s0)
/* f041bac: 820a0034 */ lb $t2,0x34($s0)
/* f041bb0: 012a082a */ slt $at,$t1,$t2
/* f041bb4: 5020001f */ beqzl $at,.L0f041c34
/* f041bb8: 8fbf0024 */ lw $ra,0x24($sp)
/* f041bbc: 8e0b0014 */ lw $t3,0x14($s0)
/* f041bc0: 02002025 */ or $a0,$s0,$zero
/* f041bc4: 316c0008 */ andi $t4,$t3,0x8
/* f041bc8: 5180001a */ beqzl $t4,.L0f041c34
/* f041bcc: 8fbf0024 */ lw $ra,0x24($sp)
/* f041bd0: 0fc10135 */ jal func0f0404d4
/* f041bd4: 00002825 */ or $a1,$zero,$zero
/* f041bd8: 10000016 */ b .L0f041c34
/* f041bdc: 8fbf0024 */ lw $ra,0x24($sp)
/* f041be0: 8e020014 */ lw $v0,0x14($s0)
.L0f041be4:
/* f041be4: 02002025 */ or $a0,$s0,$zero
/* f041be8: 304d0008 */ andi $t5,$v0,0x8
/* f041bec: 51a00008 */ beqzl $t5,.L0f041c10
/* f041bf0: 30580004 */ andi $t8,$v0,0x4
/* f041bf4: 0fc10135 */ jal func0f0404d4
/* f041bf8: 00002825 */ or $a1,$zero,$zero
/* f041bfc: 8e0e0014 */ lw $t6,0x14($s0)
/* f041c00: 2401fff7 */ addiu $at,$zero,-9
/* f041c04: 01c11024 */ and $v0,$t6,$at
/* f041c08: ae020014 */ sw $v0,0x14($s0)
/* f041c0c: 30580004 */ andi $t8,$v0,0x4
.L0f041c10:
/* f041c10: 13000007 */ beqz $t8,.L0f041c30
/* f041c14: 02002025 */ or $a0,$s0,$zero
/* f041c18: 0fc10135 */ jal func0f0404d4
/* f041c1c: 24050001 */ addiu $a1,$zero,0x1
/* f041c20: 8e190014 */ lw $t9,0x14($s0)
/* f041c24: 2401fffb */ addiu $at,$zero,-5
/* f041c28: 03214024 */ and $t0,$t9,$at
/* f041c2c: ae080014 */ sw $t0,0x14($s0)
.L0f041c30:
/* f041c30: 8fbf0024 */ lw $ra,0x24($sp)
.L0f041c34:
/* f041c34: 8fb00020 */ lw $s0,0x20($sp)
/* f041c38: 27bd0028 */ addiu $sp,$sp,0x28
/* f041c3c: 03e00008 */ jr $ra
/* f041c40: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f041a74
/* f04123c: 27bdffd8 */ addiu $sp,$sp,-40
/* f041240: afbf0024 */ sw $ra,0x24($sp)
/* f041244: afb00020 */ sw $s0,0x20($sp)
/* f041248: 8c8e0014 */ lw $t6,0x14($a0)
/* f04124c: 80820007 */ lb $v0,0x7($a0)
/* f041250: 2401ff7f */ addiu $at,$zero,-129
/* f041254: 01c17824 */ and $t7,$t6,$at
/* f041258: 24010022 */ addiu $at,$zero,0x22
/* f04125c: 00808025 */ or $s0,$a0,$zero
/* f041260: 14410041 */ bne $v0,$at,.NB0f041368
/* f041264: ac8f0014 */ sw $t7,0x14($a0)
/* f041268: 9098006c */ lbu $t8,0x6c($a0)
/* f04126c: 53000019 */ beqzl $t8,.NB0f0412d4
/* f041270: 8e02001c */ lw $v0,0x1c($s0)
/* f041274: 8c82001c */ lw $v0,0x1c($a0)
/* f041278: 9048003f */ lbu $t0,0x3f($v0)
/* f04127c: 35090020 */ ori $t1,$t0,0x20
/* f041280: 0fc0a08c */ jal chrGetTargetProp
/* f041284: a049003f */ sb $t1,0x3f($v0)
/* f041288: 8e0a005c */ lw $t2,0x5c($s0)
/* f04128c: 8e04001c */ lw $a0,0x1c($s0)
/* f041290: 8e050348 */ lw $a1,0x348($s0)
/* f041294: afa20014 */ sw $v0,0x14($sp)
/* f041298: 2606002c */ addiu $a2,$s0,0x2c
/* f04129c: 26070044 */ addiu $a3,$s0,0x44
/* f0412a0: 0fc23e35 */ jal projectileCreate
/* f0412a4: afaa0010 */ sw $t2,0x10($sp)
/* f0412a8: 3c0b800a */ lui $t3,0x800a
/* f0412ac: 8d6be6c8 */ lw $t3,-0x1938($t3)
/* f0412b0: 8e0d034c */ lw $t5,0x34c($s0)
/* f0412b4: 256c0002 */ addiu $t4,$t3,0x2
/* f0412b8: adac0008 */ sw $t4,0x8($t5)
/* f0412bc: 8e0e0348 */ lw $t6,0x348($s0)
/* f0412c0: 8e0f034c */ lw $t7,0x34c($s0)
/* f0412c4: c5c40014 */ lwc1 $f4,0x14($t6)
/* f0412c8: 10000005 */ beqz $zero,.NB0f0412e0
/* f0412cc: e5e40014 */ swc1 $f4,0x14($t7)
/* f0412d0: 8e02001c */ lw $v0,0x1c($s0)
.NB0f0412d4:
/* f0412d4: 9058003f */ lbu $t8,0x3f($v0)
/* f0412d8: 3319ffdf */ andi $t9,$t8,0xffdf
/* f0412dc: a059003f */ sb $t9,0x3f($v0)
.NB0f0412e0:
/* f0412e0: 9208006d */ lbu $t0,0x6d($s0)
/* f0412e4: 51000015 */ beqzl $t0,.NB0f04133c
/* f0412e8: 8e02001c */ lw $v0,0x1c($s0)
/* f0412ec: 8e02001c */ lw $v0,0x1c($s0)
/* f0412f0: 02002025 */ or $a0,$s0,$zero
/* f0412f4: 904a003f */ lbu $t2,0x3f($v0)
/* f0412f8: 354b0020 */ ori $t3,$t2,0x20
/* f0412fc: 0fc0a08c */ jal chrGetTargetProp
/* f041300: a04b003f */ sb $t3,0x3f($v0)
/* f041304: 8e0c0060 */ lw $t4,0x60($s0)
/* f041308: 8e04001c */ lw $a0,0x1c($s0)
/* f04130c: 8e05034c */ lw $a1,0x34c($s0)
/* f041310: afa20014 */ sw $v0,0x14($sp)
/* f041314: 26060038 */ addiu $a2,$s0,0x38
/* f041318: 26070050 */ addiu $a3,$s0,0x50
/* f04131c: 0fc23e35 */ jal projectileCreate
/* f041320: afac0010 */ sw $t4,0x10($sp)
/* f041324: 8e0d034c */ lw $t5,0x34c($s0)
/* f041328: 8e0e0348 */ lw $t6,0x348($s0)
/* f04132c: c5a60014 */ lwc1 $f6,0x14($t5)
/* f041330: 10000005 */ beqz $zero,.NB0f041348
/* f041334: e5c60014 */ swc1 $f6,0x14($t6)
/* f041338: 8e02001c */ lw $v0,0x1c($s0)
.NB0f04133c:
/* f04133c: 904f003f */ lbu $t7,0x3f($v0)
/* f041340: 31f8ffdf */ andi $t8,$t7,0xffdf
/* f041344: a058003f */ sb $t8,0x3f($v0)
.NB0f041348:
/* f041348: 8e190348 */ lw $t9,0x348($s0)
/* f04134c: 0fc2ae47 */ jal beamTick
/* f041350: 8f240004 */ lw $a0,0x4($t9)
/* f041354: 8e08034c */ lw $t0,0x34c($s0)
/* f041358: 0fc2ae47 */ jal beamTick
/* f04135c: 8d040004 */ lw $a0,0x4($t0)
/* f041360: 10000027 */ beqz $zero,.NB0f041400
/* f041364: 8fbf0024 */ lw $ra,0x24($sp)
.NB0f041368:
/* f041368: 24010021 */ addiu $at,$zero,0x21
/* f04136c: 54410010 */ bnel $v0,$at,.NB0f0413b0
/* f041370: 8e020014 */ lw $v0,0x14($s0)
/* f041374: 82090033 */ lb $t1,0x33($s0)
/* f041378: 820a0034 */ lb $t2,0x34($s0)
/* f04137c: 012a082a */ slt $at,$t1,$t2
/* f041380: 5020001f */ beqzl $at,.NB0f041400
/* f041384: 8fbf0024 */ lw $ra,0x24($sp)
/* f041388: 8e0b0014 */ lw $t3,0x14($s0)
/* f04138c: 02002025 */ or $a0,$s0,$zero
/* f041390: 316c0008 */ andi $t4,$t3,0x8
/* f041394: 5180001a */ beqzl $t4,.NB0f041400
/* f041398: 8fbf0024 */ lw $ra,0x24($sp)
/* f04139c: 0fc0ff2d */ jal func0f0404d4
/* f0413a0: 00002825 */ or $a1,$zero,$zero
/* f0413a4: 10000016 */ beqz $zero,.NB0f041400
/* f0413a8: 8fbf0024 */ lw $ra,0x24($sp)
/* f0413ac: 8e020014 */ lw $v0,0x14($s0)
.NB0f0413b0:
/* f0413b0: 02002025 */ or $a0,$s0,$zero
/* f0413b4: 304d0008 */ andi $t5,$v0,0x8
/* f0413b8: 51a00008 */ beqzl $t5,.NB0f0413dc
/* f0413bc: 30580004 */ andi $t8,$v0,0x4
/* f0413c0: 0fc0ff2d */ jal func0f0404d4
/* f0413c4: 00002825 */ or $a1,$zero,$zero
/* f0413c8: 8e0e0014 */ lw $t6,0x14($s0)
/* f0413cc: 2401fff7 */ addiu $at,$zero,-9
/* f0413d0: 01c11024 */ and $v0,$t6,$at
/* f0413d4: ae020014 */ sw $v0,0x14($s0)
/* f0413d8: 30580004 */ andi $t8,$v0,0x4
.NB0f0413dc:
/* f0413dc: 13000007 */ beqz $t8,.NB0f0413fc
/* f0413e0: 02002025 */ or $a0,$s0,$zero
/* f0413e4: 0fc0ff2d */ jal func0f0404d4
/* f0413e8: 24050001 */ addiu $a1,$zero,0x1
/* f0413ec: 8e190014 */ lw $t9,0x14($s0)
/* f0413f0: 2401fffb */ addiu $at,$zero,-5
/* f0413f4: 03214024 */ and $t0,$t9,$at
/* f0413f8: ae080014 */ sw $t0,0x14($s0)
.NB0f0413fc:
/* f0413fc: 8fbf0024 */ lw $ra,0x24($sp)
.NB0f041400:
/* f041400: 8fb00020 */ lw $s0,0x20($sp)
/* f041404: 27bd0028 */ addiu $sp,$sp,0x28
/* f041408: 03e00008 */ jr $ra
/* f04140c: 00000000 */ sll $zero,$zero,0x0
);
#endif
GLOBAL_ASM(
glabel func0f041c44
/* f041c44: 27bdffd0 */ addiu $sp,$sp,-48
/* f041c48: 10800003 */ beqz $a0,.L0f041c58
/* f041c4c: afbf001c */ sw $ra,0x1c($sp)
/* f041c50: 10000002 */ b .L0f041c5c
/* f041c54: 908202fe */ lbu $v0,0x2fe($a0)
.L0f041c58:
/* f041c58: 00001025 */ or $v0,$zero,$zero
.L0f041c5c:
/* f041c5c: 54400032 */ bnezl $v0,.L0f041d28
/* f041c60: 00001025 */ or $v0,$zero,$zero
/* f041c64: 8c82002c */ lw $v0,0x2c($a0)
/* f041c68: 3c0e8006 */ lui $t6,%hi(var800674b8)
/* f041c6c: 25ce74b8 */ addiu $t6,$t6,%lo(var800674b8)
/* f041c70: 11c20004 */ beq $t6,$v0,.L0f041c84
/* f041c74: 3c0f8006 */ lui $t7,%hi(var80067500)
/* f041c78: 25ef7500 */ addiu $t7,$t7,%lo(var80067500)
/* f041c7c: 55e2002a */ bnel $t7,$v0,.L0f041d28
/* f041c80: 00001025 */ or $v0,$zero,$zero
.L0f041c84:
/* f041c84: 8c820020 */ lw $v0,0x20($a0)
/* f041c88: 3c098006 */ lui $t1,%hi(var80067470)
/* f041c8c: 24080002 */ addiu $t0,$zero,0x2
/* f041c90: 8c580020 */ lw $t8,0x20($v0)
/* f041c94: 25297470 */ addiu $t1,$t1,%lo(var80067470)
/* f041c98: 3c053f33 */ lui $a1,0x3f33
/* f041c9c: 83190008 */ lb $t9,0x8($t8)
/* f041ca0: 3c063f8f */ lui $a2,0x3f8f
/* f041ca4: 34c65c29 */ ori $a2,$a2,0x5c29
/* f041ca8: afb90024 */ sw $t9,0x24($sp)
/* f041cac: a0880030 */ sb $t0,0x30($a0)
/* f041cb0: ac89002c */ sw $t1,0x2c($a0)
/* f041cb4: a0800008 */ sb $zero,0x8($a0)
/* f041cb8: 34a53333 */ ori $a1,$a1,0x3333
/* f041cbc: 0fc0b857 */ jal chrGetRangedSpeed
/* f041cc0: afa2002c */ sw $v0,0x2c($sp)
/* f041cc4: 3c0141b0 */ lui $at,0x41b0
/* f041cc8: 44812000 */ mtc1 $at,$f4
/* f041ccc: 3c058006 */ lui $a1,%hi(var80067470)
/* f041cd0: 3c078006 */ lui $a3,%hi(var80067470+0x1c)
/* f041cd4: 8ce7748c */ lw $a3,%lo(var80067470+0x1c)($a3)
/* f041cd8: 84a57470 */ lh $a1,%lo(var80067470)($a1)
/* f041cdc: 8fa4002c */ lw $a0,0x2c($sp)
/* f041ce0: 8fa60024 */ lw $a2,0x24($sp)
/* f041ce4: e7a00010 */ swc1 $f0,0x10($sp)
/* f041ce8: 0c007733 */ jal modelSetAnimation
/* f041cec: e7a40014 */ swc1 $f4,0x14($sp)
/* f041cf0: 3c018006 */ lui $at,%hi(var80067470+0x14)
/* f041cf4: c4207484 */ lwc1 $f0,%lo(var80067470+0x14)($at)
/* f041cf8: 44803000 */ mtc1 $zero,$f6
/* f041cfc: 00000000 */ nop
/* f041d00: 4600303e */ c.le.s $f6,$f0
/* f041d04: 00000000 */ nop
/* f041d08: 45000004 */ bc1f .L0f041d1c
/* f041d0c: 00000000 */ nop
/* f041d10: 44050000 */ mfc1 $a1,$f0
/* f041d14: 0c007787 */ jal modelSetAnimEndFrame
/* f041d18: 8fa4002c */ lw $a0,0x2c($sp)
.L0f041d1c:
/* f041d1c: 10000002 */ b .L0f041d28
/* f041d20: 24020001 */ addiu $v0,$zero,0x1
/* f041d24: 00001025 */ or $v0,$zero,$zero
.L0f041d28:
/* f041d28: 8fbf001c */ lw $ra,0x1c($sp)
/* f041d2c: 27bd0030 */ addiu $sp,$sp,0x30
/* f041d30: 03e00008 */ jr $ra
/* f041d34: 00000000 */ nop
);
void chrAttackAmountUpdateAnimation(struct chrdata *chr)
{
struct model *model = chr->model;
if (chr->act_attackamount.unk02c->fstartframe2 > 0) {
modelSetAnimation(model,
modelGetAnimNum(model),
model->anim->flip,
chr->act_attackamount.unk02c->fstartframe2,
chrGetRangedSpeed(chr, 0.5f, 0.8f),
8);
} else {
modelSetAnimation(model,
modelGetAnimNum(model),
model->anim->flip,
chr->act_attackamount.unk02c->fstartframe1,
chrGetRangedSpeed(chr, 0.5f, 0.8f),
8);
}
if (chr->act_attackamount.unk02c->unk14 >= 0) {
modelSetAnimEndFrame(model, chr->act_attackamount.unk02c->unk14);
}
}
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f041e48
.late_rodata
glabel var7f1aa3ecpf
.word 0x3d2aaaab
glabel var7f1aa3f0pf
.word 0x40c907a9
glabel var7f1aa3f4pf
.word 0x3f555555
.text
/* f041fec: 27bdff90 */ addiu $sp,$sp,-112
/* f041ff0: afbf0044 */ sw $ra,0x44($sp)
/* f041ff4: afb30040 */ sw $s3,0x40($sp)
/* f041ff8: afb2003c */ sw $s2,0x3c($sp)
/* f041ffc: afb10038 */ sw $s1,0x38($sp)
/* f042000: afb00034 */ sw $s0,0x34($sp)
/* f042004: f7b80028 */ sdc1 $f24,0x28($sp)
/* f042008: f7b60020 */ sdc1 $f22,0x20($sp)
/* f04200c: f7b40018 */ sdc1 $f20,0x18($sp)
/* f042010: 8c930020 */ lw $s3,0x20($a0)
/* f042014: 00808025 */ move $s0,$a0
/* f042018: 0c0073d3 */ jal modelGetCurAnimFrame
/* f04201c: 02602025 */ move $a0,$s3
/* f042020: 46000506 */ mov.s $f20,$f0
/* f042024: 0c0073c3 */ jal modelGetAnimNum
/* f042028: 02602025 */ move $a0,$s3
/* f04202c: 24010269 */ li $at,0x269
/* f042030: 504101e2 */ beql $v0,$at,.PF0f0427bc
/* f042034: 8fbf0044 */ lw $ra,0x44($sp)
/* f042038: 8e0f0044 */ lw $t7,0x44($s0)
/* f04203c: 8e0e0048 */ lw $t6,0x48($s0)
/* f042040: 25f8ffe7 */ addiu $t8,$t7,-25
/* f042044: 01d8082a */ slt $at,$t6,$t8
/* f042048: 50200051 */ beqzl $at,.PF0f042190
/* f04204c: 3c013f00 */ lui $at,0x3f00
/* f042050: 8e790020 */ lw $t9,0x20($s3)
/* f042054: 87280002 */ lh $t0,0x2($t9)
/* f042058: 5500004d */ bnezl $t0,.PF0f042190
/* f04205c: 3c013f00 */ lui $at,0x3f00
/* f042060: 8e05002c */ lw $a1,0x2c($s0)
/* f042064: 3c014120 */ lui $at,0x4120
/* f042068: 44813000 */ mtc1 $at,$f6
/* f04206c: c4a40018 */ lwc1 $f4,0x18($a1)
/* f042070: 46062200 */ add.s $f8,$f4,$f6
/* f042074: 4614403c */ c.lt.s $f8,$f20
/* f042078: 00000000 */ nop
/* f04207c: 45020044 */ bc1fl .PF0f042190
/* f042080: 3c013f00 */ lui $at,0x3f00
/* f042084: c4aa001c */ lwc1 $f10,0x1c($a1)
/* f042088: 460aa03c */ c.lt.s $f20,$f10
/* f04208c: 00000000 */ nop
/* f042090: 4502003f */ bc1fl .PF0f042190
/* f042094: 3c013f00 */ lui $at,0x3f00
/* f042098: 4480b000 */ mtc1 $zero,$f22
/* f04209c: c4a00024 */ lwc1 $f0,0x24($a1)
/* f0420a0: 4616003c */ c.lt.s $f0,$f22
/* f0420a4: 00000000 */ nop
/* f0420a8: 45030006 */ bc1tl .PF0f0420c4
/* f0420ac: 82090036 */ lb $t1,0x36($s0)
/* f0420b0: 4600a03c */ c.lt.s $f20,$f0
/* f0420b4: 00000000 */ nop
/* f0420b8: 45020035 */ bc1fl .PF0f042190
/* f0420bc: 3c013f00 */ lui $at,0x3f00
/* f0420c0: 82090036 */ lb $t1,0x36($s0)
.PF0f0420c4:
/* f0420c4: 15200029 */ bnez $t1,.PF0f04216c
/* f0420c8: 00000000 */ nop
/* f0420cc: 0fc1077a */ jal func0f041c44
/* f0420d0: 02002025 */ move $a0,$s0
/* f0420d4: 14400023 */ bnez $v0,.PF0f042164
/* f0420d8: 00000000 */ nop
/* f0420dc: 0c0073c3 */ jal modelGetAnimNum
/* f0420e0: 02602025 */ move $a0,$s3
/* f0420e4: 3c013f00 */ lui $at,0x3f00
/* f0420e8: 4481c000 */ mtc1 $at,$f24
/* f0420ec: 00028c00 */ sll $s1,$v0,0x10
/* f0420f0: 00115403 */ sra $t2,$s1,0x10
/* f0420f4: 3c063f4c */ lui $a2,0x3f4c
/* f0420f8: 4405c000 */ mfc1 $a1,$f24
/* f0420fc: 34c6cccd */ ori $a2,$a2,0xcccd
/* f042100: 01408825 */ move $s1,$t2
/* f042104: 0fc0b89f */ jal chrGetRangedSpeed
/* f042108: 02002025 */ move $a0,$s0
/* f04210c: 8e6c0020 */ lw $t4,0x20($s3)
/* f042110: 8e0d002c */ lw $t5,0x2c($s0)
/* f042114: 3c014100 */ lui $at,0x4100
/* f042118: 44818000 */ mtc1 $at,$f16
/* f04211c: 00112c00 */ sll $a1,$s1,0x10
/* f042120: 00055c03 */ sra $t3,$a1,0x10
/* f042124: 81860008 */ lb $a2,0x8($t4)
/* f042128: 8da7001c */ lw $a3,0x1c($t5)
/* f04212c: e7a00010 */ swc1 $f0,0x10($sp)
/* f042130: 01602825 */ move $a1,$t3
/* f042134: 02602025 */ move $a0,$s3
/* f042138: 0c0076a7 */ jal modelSetAnimation
/* f04213c: e7b00014 */ swc1 $f16,0x14($sp)
/* f042140: 8e0f002c */ lw $t7,0x2c($s0)
/* f042144: c5e00014 */ lwc1 $f0,0x14($t7)
/* f042148: 4600b03e */ c.le.s $f22,$f0
/* f04214c: 00000000 */ nop
/* f042150: 45000004 */ bc1f .PF0f042164
/* f042154: 00000000 */ nop
/* f042158: 44050000 */ mfc1 $a1,$f0
/* f04215c: 0c0076fb */ jal modelSetAnimEndFrame
/* f042160: 02602025 */ move $a0,$s3
.PF0f042164:
/* f042164: 10000004 */ b .PF0f042178
/* f042168: 820e0034 */ lb $t6,0x34($s0)
.PF0f04216c:
/* f04216c: 0fc107b7 */ jal chrAttackAmountUpdateAnimation
/* f042170: 02002025 */ move $a0,$s0
/* f042174: 820e0034 */ lb $t6,0x34($s0)
.PF0f042178:
/* f042178: 02602025 */ move $a0,$s3
/* f04217c: 25d80001 */ addiu $t8,$t6,0x1
/* f042180: 0c0073d3 */ jal modelGetCurAnimFrame
/* f042184: a2180033 */ sb $t8,0x33($s0)
/* f042188: 46000506 */ mov.s $f20,$f0
/* f04218c: 3c013f00 */ lui $at,0x3f00
.PF0f042190:
/* f042190: 4481c000 */ mtc1 $at,$f24
/* f042194: 4480b000 */ mtc1 $zero,$f22
/* f042198: 0c0073dc */ jal modelGetAnimEndFrame
/* f04219c: 02602025 */ move $a0,$s3
/* f0421a0: 4614003e */ c.le.s $f0,$f20
/* f0421a4: 00000000 */ nop
/* f0421a8: 45000080 */ bc1f .PF0f0423ac
/* f0421ac: 00000000 */ nop
/* f0421b0: 0c0073c3 */ jal modelGetAnimNum
/* f0421b4: 02602025 */ move $a0,$s3
/* f0421b8: 2401026a */ li $at,0x26a
/* f0421bc: 50410018 */ beql $v0,$at,.PF0f042220
/* f0421c0: 82020033 */ lb $v0,0x33($s0)
/* f0421c4: 82190037 */ lb $t9,0x37($s0)
/* f0421c8: 17200006 */ bnez $t9,.PF0f0421e4
/* f0421cc: 00000000 */ nop
/* f0421d0: 82080034 */ lb $t0,0x34($s0)
/* f0421d4: 82090033 */ lb $t1,0x33($s0)
/* f0421d8: 0109082a */ slt $at,$t0,$t1
/* f0421dc: 50200010 */ beqzl $at,.PF0f042220
/* f0421e0: 82020033 */ lb $v0,0x33($s0)
.PF0f0421e4:
/* f0421e4: 0fc1077a */ jal func0f041c44
/* f0421e8: 02002025 */ move $a0,$s0
/* f0421ec: 1440006c */ bnez $v0,.PF0f0423a0
/* f0421f0: 00000000 */ nop
/* f0421f4: 8e0a004c */ lw $t2,0x4c($s0)
/* f0421f8: 314b0200 */ andi $t3,$t2,0x200
/* f0421fc: 11600003 */ beqz $t3,.PF0f04220c
/* f042200: 00000000 */ nop
/* f042204: 0fc0e5cc */ jal chrRecordLastSeeTargetTime
/* f042208: 02002025 */ move $a0,$s0
.PF0f04220c:
/* f04220c: 0fc0bb9f */ jal chrStop
/* f042210: 02002025 */ move $a0,$s0
/* f042214: 10000169 */ b .PF0f0427bc
/* f042218: 8fbf0044 */ lw $ra,0x44($sp)
/* f04221c: 82020033 */ lb $v0,0x33($s0)
.PF0f042220:
/* f042220: 820c0034 */ lb $t4,0x34($s0)
/* f042224: 02002025 */ move $a0,$s0
/* f042228: 244d0001 */ addiu $t5,$v0,0x1
/* f04222c: 55820006 */ bnel $t4,$v0,.PF0f042248
/* f042230: 820f0031 */ lb $t7,0x31($s0)
/* f042234: 0fc107b7 */ jal chrAttackAmountUpdateAnimation
/* f042238: a20d0033 */ sb $t5,0x33($s0)
/* f04223c: 10000058 */ b .PF0f0423a0
/* f042240: 00000000 */ nop
/* f042244: 820f0031 */ lb $t7,0x31($s0)
.PF0f042248:
/* f042248: 3c014140 */ lui $at,0x4140
/* f04224c: 02602025 */ move $a0,$s3
/* f042250: 11e00053 */ beqz $t7,.PF0f0423a0
/* f042254: 00000000 */ nop
/* f042258: 820e0036 */ lb $t6,0x36($s0)
/* f04225c: 4600c086 */ mov.s $f2,$f24
/* f042260: 51c00014 */ beqzl $t6,.PF0f0422b4
/* f042264: 8e05002c */ lw $a1,0x2c($s0)
/* f042268: 8e05002c */ lw $a1,0x2c($s0)
/* f04226c: c4a00020 */ lwc1 $f0,0x20($a1)
/* f042270: 4600b03c */ c.lt.s $f22,$f0
/* f042274: 00000000 */ nop
/* f042278: 45020004 */ bc1fl .PF0f04228c
/* f04227c: c4ac0018 */ lwc1 $f12,0x18($a1)
/* f042280: 10000002 */ b .PF0f04228c
/* f042284: 46000306 */ mov.s $f12,$f0
/* f042288: c4ac0018 */ lwc1 $f12,0x18($a1)
.PF0f04228c:
/* f04228c: c4a00024 */ lwc1 $f0,0x24($a1)
/* f042290: 4600b03c */ c.lt.s $f22,$f0
/* f042294: 00000000 */ nop
/* f042298: 45000003 */ bc1f .PF0f0422a8
/* f04229c: 00000000 */ nop
/* f0422a0: 1000000d */ b .PF0f0422d8
/* f0422a4: 46000506 */ mov.s $f20,$f0
.PF0f0422a8:
/* f0422a8: 1000000b */ b .PF0f0422d8
/* f0422ac: c4b4001c */ lwc1 $f20,0x1c($a1)
/* f0422b0: 8e05002c */ lw $a1,0x2c($s0)
.PF0f0422b4:
/* f0422b4: c4a00020 */ lwc1 $f0,0x20($a1)
/* f0422b8: c4ac0018 */ lwc1 $f12,0x18($a1)
/* f0422bc: 4600b03c */ c.lt.s $f22,$f0
/* f0422c0: 00000000 */ nop
/* f0422c4: 45020004 */ bc1fl .PF0f0422d8
/* f0422c8: c4b4001c */ lwc1 $f20,0x1c($a1)
/* f0422cc: 10000002 */ b .PF0f0422d8
/* f0422d0: 46000506 */ mov.s $f20,$f0
/* f0422d4: c4b4001c */ lwc1 $f20,0x1c($a1)
.PF0f0422d8:
/* f0422d8: 460ca001 */ sub.s $f0,$f20,$f12
/* f0422dc: 44819000 */ mtc1 $at,$f18
/* f0422e0: 3c014180 */ lui $at,0x4180
/* f0422e4: 4612003c */ c.lt.s $f0,$f18
/* f0422e8: 00000000 */ nop
/* f0422ec: 45020007 */ bc1fl .PF0f04230c
/* f0422f0: 44813000 */ mtc1 $at,$f6
/* f0422f4: 3c017f1b */ lui $at,0x7f1b
/* f0422f8: c424a3ec */ lwc1 $f4,-0x5c14($at)
/* f0422fc: 46040082 */ mul.s $f2,$f0,$f4
/* f042300: 1000000c */ b .PF0f042334
/* f042304: 8218003a */ lb $t8,0x3a($s0)
/* f042308: 44813000 */ mtc1 $at,$f6
.PF0f04230c:
/* f04230c: 3c013d00 */ lui $at,0x3d00
/* f042310: 4600303c */ c.lt.s $f6,$f0
/* f042314: 00000000 */ nop
/* f042318: 45020006 */ bc1fl .PF0f042334
/* f04231c: 8218003a */ lb $t8,0x3a($s0)
/* f042320: 44814000 */ mtc1 $at,$f8
/* f042324: 00000000 */ nop
/* f042328: 46080082 */ mul.s $f2,$f0,$f8
/* f04232c: 00000000 */ nop
/* f042330: 8218003a */ lb $t8,0x3a($s0)
.PF0f042334:
/* f042334: 53000006 */ beqzl $t8,.PF0f042350
/* f042338: a2000031 */ sb $zero,0x31($s0)
/* f04233c: 8219003b */ lb $t9,0x3b($s0)
/* f042340: 53200003 */ beqzl $t9,.PF0f042350
/* f042344: a2000031 */ sb $zero,0x31($s0)
/* f042348: 46021080 */ add.s $f2,$f2,$f2
/* f04234c: a2000031 */ sb $zero,0x31($s0)
.PF0f042350:
/* f042350: e7ac005c */ swc1 $f12,0x5c($sp)
/* f042354: 0c0073c3 */ jal modelGetAnimNum
/* f042358: e7a20060 */ swc1 $f2,0x60($sp)
/* f04235c: c7ac005c */ lwc1 $f12,0x5c($sp)
/* f042360: 8e690020 */ lw $t1,0x20($s3)
/* f042364: 3c014100 */ lui $at,0x4100
/* f042368: 44815000 */ mtc1 $at,$f10
/* f04236c: c7a20060 */ lwc1 $f2,0x60($sp)
/* f042370: 00022c00 */ sll $a1,$v0,0x10
/* f042374: 00054403 */ sra $t0,$a1,0x10
/* f042378: 44076000 */ mfc1 $a3,$f12
/* f04237c: 81260008 */ lb $a2,0x8($t1)
/* f042380: 01002825 */ move $a1,$t0
/* f042384: 02602025 */ move $a0,$s3
/* f042388: e7aa0014 */ swc1 $f10,0x14($sp)
/* f04238c: 0c0076a7 */ jal modelSetAnimation
/* f042390: e7a20010 */ swc1 $f2,0x10($sp)
/* f042394: 4405a000 */ mfc1 $a1,$f20
/* f042398: 0c0076fb */ jal modelSetAnimEndFrame
/* f04239c: 02602025 */ move $a0,$s3
.PF0f0423a0:
/* f0423a0: 0c0073d3 */ jal modelGetCurAnimFrame
/* f0423a4: 02602025 */ move $a0,$s3
/* f0423a8: 46000506 */ mov.s $f20,$f0
.PF0f0423ac:
/* f0423ac: 0c0073c3 */ jal modelGetAnimNum
/* f0423b0: 02602025 */ move $a0,$s3
/* f0423b4: 2401026a */ li $at,0x26a
/* f0423b8: 50410030 */ beql $v0,$at,.PF0f04247c
/* f0423bc: 8e05002c */ lw $a1,0x2c($s0)
/* f0423c0: 8e02004c */ lw $v0,0x4c($s0)
/* f0423c4: 304a0040 */ andi $t2,$v0,0x40
/* f0423c8: 5540002c */ bnezl $t2,.PF0f04247c
/* f0423cc: 8e05002c */ lw $a1,0x2c($s0)
/* f0423d0: 8e05002c */ lw $a1,0x2c($s0)
/* f0423d4: 304b0020 */ andi $t3,$v0,0x20
/* f0423d8: 02602025 */ move $a0,$s3
/* f0423dc: c4a2000c */ lwc1 $f2,0xc($a1)
/* f0423e0: 1160000f */ beqz $t3,.PF0f042420
/* f0423e4: c4ac0004 */ lwc1 $f12,0x4($a1)
/* f0423e8: e7a20050 */ swc1 $f2,0x50($sp)
/* f0423ec: 0c0073dc */ jal modelGetAnimEndFrame
/* f0423f0: e7ac004c */ swc1 $f12,0x4c($sp)
/* f0423f4: c7ac004c */ lwc1 $f12,0x4c($sp)
/* f0423f8: c7a20050 */ lwc1 $f2,0x50($sp)
/* f0423fc: 02602025 */ move $a0,$s3
/* f042400: 460c003c */ c.lt.s $f0,$f12
/* f042404: 00000000 */ nop
/* f042408: 45020006 */ bc1fl .PF0f042424
/* f04240c: 8e6c0020 */ lw $t4,0x20($s3)
/* f042410: 0c0073dc */ jal modelGetAnimEndFrame
/* f042414: e7a20050 */ swc1 $f2,0x50($sp)
/* f042418: c7a20050 */ lwc1 $f2,0x50($sp)
/* f04241c: 46000306 */ mov.s $f12,$f0
.PF0f042420:
/* f042420: 8e6c0020 */ lw $t4,0x20($s3)
.PF0f042424:
/* f042424: 3c063fcc */ lui $a2,0x3fcc
/* f042428: 3c017f1b */ lui $at,0x7f1b
/* f04242c: 818d0008 */ lb $t5,0x8($t4)
/* f042430: 34c6cccd */ ori $a2,$a2,0xcccd
/* f042434: 02002025 */ move $a0,$s0
/* f042438: 11a00003 */ beqz $t5,.PF0f042448
/* f04243c: 3c053f80 */ lui $a1,0x3f80
/* f042440: c430a3f0 */ lwc1 $f16,-0x5c10($at)
/* f042444: 46028081 */ sub.s $f2,$f16,$f2
.PF0f042448:
/* f042448: e7a20050 */ swc1 $f2,0x50($sp)
/* f04244c: 0fc0b89f */ jal chrGetRangedSpeed
/* f042450: e7ac004c */ swc1 $f12,0x4c($sp)
/* f042454: c7ac004c */ lwc1 $f12,0x4c($sp)
/* f042458: c7a20050 */ lwc1 $f2,0x50($sp)
/* f04245c: 82050030 */ lb $a1,0x30($s0)
/* f042460: 44070000 */ mfc1 $a3,$f0
/* f042464: 44066000 */ mfc1 $a2,$f12
/* f042468: 02002025 */ move $a0,$s0
/* f04246c: 0fc0fa43 */ jal func0f03e788
/* f042470: e7a20010 */ swc1 $f2,0x10($sp)
/* f042474: a2020030 */ sb $v0,0x30($s0)
/* f042478: 8e05002c */ lw $a1,0x2c($s0)
.PF0f04247c:
/* f04247c: c4b20028 */ lwc1 $f18,0x28($a1)
/* f042480: 4614903c */ c.lt.s $f18,$f20
/* f042484: 00000000 */ nop
/* f042488: 45000006 */ bc1f .PF0f0424a4
/* f04248c: 00000000 */ nop
/* f042490: c4a4002c */ lwc1 $f4,0x2c($a1)
/* f042494: 4604a03c */ c.lt.s $f20,$f4
/* f042498: 00000000 */ nop
/* f04249c: 45030008 */ bc1tl .PF0f0424c0
/* f0424a0: 3c013f80 */ lui $at,0x3f80
.PF0f0424a4:
/* f0424a4: 0c0073c3 */ jal modelGetAnimNum
/* f0424a8: 02602025 */ move $a0,$s3
/* f0424ac: 2401026a */ li $at,0x26a
/* f0424b0: 1441000b */ bne $v0,$at,.PF0f0424e0
/* f0424b4: 00000000 */ nop
/* f0424b8: 8e05002c */ lw $a1,0x2c($s0)
/* f0424bc: 3c013f80 */ lui $at,0x3f80
.PF0f0424c0:
/* f0424c0: 44813000 */ mtc1 $at,$f6
/* f0424c4: 82060039 */ lb $a2,0x39($s0)
/* f0424c8: 82070038 */ lb $a3,0x38($s0)
/* f0424cc: 02002025 */ move $a0,$s0
/* f0424d0: 0fc0fade */ jal func0f03e9f4
/* f0424d4: e7a60010 */ swc1 $f6,0x10($sp)
/* f0424d8: 10000004 */ b .PF0f0424ec
/* f0424dc: 00008825 */ move $s1,$zero
.PF0f0424e0:
/* f0424e0: 0fc0fe6b */ jal chrResetAimEndProperties
/* f0424e4: 02002025 */ move $a0,$s0
/* f0424e8: 00008825 */ move $s1,$zero
.PF0f0424ec:
/* f0424ec: 02009025 */ move $s2,$s0
.PF0f0424f0:
/* f0424f0: 824f0038 */ lb $t7,0x38($s2)
/* f0424f4: 02002025 */ move $a0,$s0
/* f0424f8: 02202825 */ move $a1,$s1
/* f0424fc: 11e000a8 */ beqz $t7,.PF0f0427a0
/* f042500: 00000000 */ nop
/* f042504: 824e003a */ lb $t6,0x3a($s2)
/* f042508: 15c0006a */ bnez $t6,.PF0f0426b4
/* f04250c: 00000000 */ nop
/* f042510: 0c0073c3 */ jal modelGetAnimNum
/* f042514: 02602025 */ move $a0,$s3
/* f042518: 2401026a */ li $at,0x26a
/* f04251c: 1041000c */ beq $v0,$at,.PF0f042550
/* f042520: 02002025 */ move $a0,$s0
/* f042524: 8e05002c */ lw $a1,0x2c($s0)
/* f042528: 00003025 */ move $a2,$zero
/* f04252c: c4a80018 */ lwc1 $f8,0x18($a1)
/* f042530: 4614403e */ c.le.s $f8,$f20
/* f042534: 00000000 */ nop
/* f042538: 45020043 */ bc1fl .PF0f042648
/* f04253c: 02002025 */ move $a0,$s0
/* f042540: c4aa001c */ lwc1 $f10,0x1c($a1)
/* f042544: 460aa03c */ c.lt.s $f20,$f10
/* f042548: 00000000 */ nop
/* f04254c: 4500003d */ bc1f .PF0f042644
.PF0f042550:
/* f042550: 02202825 */ move $a1,$s1
/* f042554: 0fc0fec3 */ jal func0f03f988
/* f042558: 24060001 */ li $a2,0x1
/* f04255c: 82190007 */ lb $t9,0x7($s0)
/* f042560: 3c18800a */ lui $t8,0x800a
/* f042564: 8f18a518 */ lw $t8,-0x5ae8($t8)
/* f042568: 2401000a */ li $at,0xa
/* f04256c: 1721002f */ bne $t9,$at,.PF0f04262c
/* f042570: ae180044 */ sw $t8,0x44($s0)
/* f042574: 8e05002c */ lw $a1,0x2c($s0)
/* f042578: 3c0141f0 */ lui $at,0x41f0
/* f04257c: 44812000 */ mtc1 $at,$f4
/* f042580: c4b0001c */ lwc1 $f16,0x1c($a1)
/* f042584: c4b20018 */ lwc1 $f18,0x18($a1)
/* f042588: 3c017f1b */ lui $at,0x7f1b
/* f04258c: 46128001 */ sub.s $f0,$f16,$f18
/* f042590: 4604003c */ c.lt.s $f0,$f4
/* f042594: 00000000 */ nop
/* f042598: 4502001f */ bc1fl .PF0f042618
/* f04259c: 4405c000 */ mfc1 $a1,$f24
/* f0425a0: c426a3f4 */ lwc1 $f6,-0x5c0c($at)
/* f0425a4: 8e080040 */ lw $t0,0x40($s0)
/* f0425a8: 240c0032 */ li $t4,0x32
/* f0425ac: 46060202 */ mul.s $f8,$f0,$f6
/* f0425b0: 02602025 */ move $a0,$s3
/* f0425b4: 3c053dcc */ lui $a1,0x3dcc
/* f0425b8: 4600428d */ trunc.w.s $f10,$f8
/* f0425bc: 440a5000 */ mfc1 $t2,$f10
/* f0425c0: 00000000 */ nop
/* f0425c4: 000a5840 */ sll $t3,$t2,0x1
/* f0425c8: 018b6823 */ subu $t5,$t4,$t3
/* f0425cc: 010d082a */ slt $at,$t0,$t5
/* f0425d0: 54200008 */ bnezl $at,.PF0f0425f4
/* f0425d4: 4406b000 */ mfc1 $a2,$f22
/* f0425d8: 4405c000 */ mfc1 $a1,$f24
/* f0425dc: 4406b000 */ mfc1 $a2,$f22
/* f0425e0: 0c007720 */ jal modelSetAnimSpeed
/* f0425e4: 02602025 */ move $a0,$s3
/* f0425e8: 10000070 */ b .PF0f0427ac
/* f0425ec: 26310001 */ addiu $s1,$s1,0x1
/* f0425f0: 4406b000 */ mfc1 $a2,$f22
.PF0f0425f4:
/* f0425f4: 0c007720 */ jal modelSetAnimSpeed
/* f0425f8: 34a5cccd */ ori $a1,$a1,0xcccd
/* f0425fc: 3c0e800a */ lui $t6,0x800a
/* f042600: 8dcea548 */ lw $t6,-0x5ab8($t6)
/* f042604: 8e0f0040 */ lw $t7,0x40($s0)
/* f042608: 01eec021 */ addu $t8,$t7,$t6
/* f04260c: 10000066 */ b .PF0f0427a8
/* f042610: ae180040 */ sw $t8,0x40($s0)
/* f042614: 4405c000 */ mfc1 $a1,$f24
.PF0f042618:
/* f042618: 4406b000 */ mfc1 $a2,$f22
/* f04261c: 0c007720 */ jal modelSetAnimSpeed
/* f042620: 02602025 */ move $a0,$s3
/* f042624: 10000061 */ b .PF0f0427ac
/* f042628: 26310001 */ addiu $s1,$s1,0x1
.PF0f04262c:
/* f04262c: 4405c000 */ mfc1 $a1,$f24
/* f042630: 4406b000 */ mfc1 $a2,$f22
/* f042634: 0c007720 */ jal modelSetAnimSpeed
/* f042638: 02602025 */ move $a0,$s3
/* f04263c: 1000005b */ b .PF0f0427ac
/* f042640: 26310001 */ addiu $s1,$s1,0x1
.PF0f042644:
/* f042644: 02002025 */ move $a0,$s0
.PF0f042648:
/* f042648: 0fc0fec3 */ jal func0f03f988
/* f04264c: 02202825 */ move $a1,$s1
/* f042650: 82190007 */ lb $t9,0x7($s0)
/* f042654: 2401000a */ li $at,0xa
/* f042658: 02002025 */ move $a0,$s0
/* f04265c: 1721000c */ bne $t9,$at,.PF0f042690
/* f042660: 3c063f4c */ lui $a2,0x3f4c
/* f042664: 4405c000 */ mfc1 $a1,$f24
/* f042668: 3c063f4c */ lui $a2,0x3f4c
/* f04266c: 34c6cccd */ ori $a2,$a2,0xcccd
/* f042670: 0fc0b89f */ jal chrGetRangedSpeed
/* f042674: 02002025 */ move $a0,$s0
/* f042678: 44050000 */ mfc1 $a1,$f0
/* f04267c: 4406b000 */ mfc1 $a2,$f22
/* f042680: 0c007720 */ jal modelSetAnimSpeed
/* f042684: 02602025 */ move $a0,$s3
/* f042688: 10000048 */ b .PF0f0427ac
/* f04268c: 26310001 */ addiu $s1,$s1,0x1
.PF0f042690:
/* f042690: 4405c000 */ mfc1 $a1,$f24
/* f042694: 0fc0b89f */ jal chrGetRangedSpeed
/* f042698: 34c6cccd */ ori $a2,$a2,0xcccd
/* f04269c: 44050000 */ mfc1 $a1,$f0
/* f0426a0: 4406b000 */ mfc1 $a2,$f22
/* f0426a4: 0c007720 */ jal modelSetAnimSpeed
/* f0426a8: 02602025 */ move $a0,$s3
/* f0426ac: 1000003f */ b .PF0f0427ac
/* f0426b0: 26310001 */ addiu $s1,$s1,0x1
.PF0f0426b4:
/* f0426b4: 0c0073c3 */ jal modelGetAnimNum
/* f0426b8: 02602025 */ move $a0,$s3
/* f0426bc: 2401026a */ li $at,0x26a
/* f0426c0: 10410023 */ beq $v0,$at,.PF0f042750
/* f0426c4: 24060001 */ li $a2,0x1
/* f0426c8: 82090031 */ lb $t1,0x31($s0)
/* f0426cc: 02002025 */ move $a0,$s0
/* f0426d0: 5520002f */ bnezl $t1,.PF0f042790
/* f0426d4: 02202825 */ move $a1,$s1
/* f0426d8: 82020032 */ lb $v0,0x32($s0)
/* f0426dc: 12220004 */ beq $s1,$v0,.PF0f0426f0
/* f0426e0: 02025021 */ addu $t2,$s0,$v0
/* f0426e4: 814c003a */ lb $t4,0x3a($t2)
/* f0426e8: 55800029 */ bnezl $t4,.PF0f042790
/* f0426ec: 02202825 */ move $a1,$s1
.PF0f0426f0:
/* f0426f0: 8e05002c */ lw $a1,0x2c($s0)
/* f0426f4: c4a00020 */ lwc1 $f0,0x20($a1)
/* f0426f8: 4600b03e */ c.le.s $f22,$f0
/* f0426fc: 00000000 */ nop
/* f042700: 4502000b */ bc1fl .PF0f042730
/* f042704: 4616003c */ c.lt.s $f0,$f22
/* f042708: 4614003e */ c.le.s $f0,$f20
/* f04270c: 00000000 */ nop
/* f042710: 45020007 */ bc1fl .PF0f042730
/* f042714: 4616003c */ c.lt.s $f0,$f22
/* f042718: c4b00024 */ lwc1 $f16,0x24($a1)
/* f04271c: 4610a03e */ c.le.s $f20,$f16
/* f042720: 00000000 */ nop
/* f042724: 4503000b */ bc1tl .PF0f042754
/* f042728: 820b0032 */ lb $t3,0x32($s0)
/* f04272c: 4616003c */ c.lt.s $f0,$f22
.PF0f042730:
/* f042730: 00000000 */ nop
/* f042734: 45020016 */ bc1fl .PF0f042790
/* f042738: 02202825 */ move $a1,$s1
/* f04273c: c4b20018 */ lwc1 $f18,0x18($a1)
/* f042740: 4614903e */ c.le.s $f18,$f20
/* f042744: 00000000 */ nop
/* f042748: 45020011 */ bc1fl .PF0f042790
/* f04274c: 02202825 */ move $a1,$s1
.PF0f042750:
/* f042750: 820b0032 */ lb $t3,0x32($s0)
.PF0f042754:
/* f042754: 820d0033 */ lb $t5,0x33($s0)
/* f042758: a2060031 */ sb $a2,0x31($s0)
/* f04275c: 00cb4023 */ subu $t0,$a2,$t3
/* f042760: 25af0001 */ addiu $t7,$t5,0x1
/* f042764: a2080032 */ sb $t0,0x32($s0)
/* f042768: a20f0033 */ sb $t7,0x33($s0)
/* f04276c: 3c0e800a */ lui $t6,0x800a
/* f042770: 8dcea518 */ lw $t6,-0x5ae8($t6)
/* f042774: 02002025 */ move $a0,$s0
/* f042778: 02202825 */ move $a1,$s1
/* f04277c: 0fc0fec3 */ jal func0f03f988
/* f042780: ae0e0044 */ sw $t6,0x44($s0)
/* f042784: 10000009 */ b .PF0f0427ac
/* f042788: 26310001 */ addiu $s1,$s1,0x1
/* f04278c: 02202825 */ move $a1,$s1
.PF0f042790:
/* f042790: 0fc0fec3 */ jal func0f03f988
/* f042794: 00003025 */ move $a2,$zero
/* f042798: 10000004 */ b .PF0f0427ac
/* f04279c: 26310001 */ addiu $s1,$s1,0x1
.PF0f0427a0:
/* f0427a0: 0fc0fec3 */ jal func0f03f988
/* f0427a4: 00003025 */ move $a2,$zero
.PF0f0427a8:
/* f0427a8: 26310001 */ addiu $s1,$s1,0x1
.PF0f0427ac:
/* f0427ac: 24010002 */ li $at,0x2
/* f0427b0: 1621ff4f */ bne $s1,$at,.PF0f0424f0
/* f0427b4: 26520001 */ addiu $s2,$s2,0x1
/* f0427b8: 8fbf0044 */ lw $ra,0x44($sp)
.PF0f0427bc:
/* f0427bc: d7b40018 */ ldc1 $f20,0x18($sp)
/* f0427c0: d7b60020 */ ldc1 $f22,0x20($sp)
/* f0427c4: d7b80028 */ ldc1 $f24,0x28($sp)
/* f0427c8: 8fb00034 */ lw $s0,0x34($sp)
/* f0427cc: 8fb10038 */ lw $s1,0x38($sp)
/* f0427d0: 8fb2003c */ lw $s2,0x3c($sp)
/* f0427d4: 8fb30040 */ lw $s3,0x40($sp)
/* f0427d8: 03e00008 */ jr $ra
/* f0427dc: 27bd0070 */ addiu $sp,$sp,0x70
);
#else
GLOBAL_ASM(
glabel func0f041e48
.late_rodata
glabel var7f1a9188
.word 0x3d2aaaab
glabel var7f1a918c
.word 0x40c907a9
.text
/* f041e48: 27bdff90 */ addiu $sp,$sp,-112
/* f041e4c: afbf0044 */ sw $ra,0x44($sp)
/* f041e50: afb30040 */ sw $s3,0x40($sp)
/* f041e54: afb2003c */ sw $s2,0x3c($sp)
/* f041e58: afb10038 */ sw $s1,0x38($sp)
/* f041e5c: afb00034 */ sw $s0,0x34($sp)
/* f041e60: f7b80028 */ sdc1 $f24,0x28($sp)
/* f041e64: f7b60020 */ sdc1 $f22,0x20($sp)
/* f041e68: f7b40018 */ sdc1 $f20,0x18($sp)
/* f041e6c: 8c930020 */ lw $s3,0x20($a0)
/* f041e70: 00808025 */ or $s0,$a0,$zero
/* f041e74: 0c00745f */ jal modelGetCurAnimFrame
/* f041e78: 02602025 */ or $a0,$s3,$zero
/* f041e7c: 46000506 */ mov.s $f20,$f0
/* f041e80: 0c00744f */ jal modelGetAnimNum
/* f041e84: 02602025 */ or $a0,$s3,$zero
/* f041e88: 24010269 */ addiu $at,$zero,0x269
/* f041e8c: 504101de */ beql $v0,$at,.L0f042608
/* f041e90: 8fbf0044 */ lw $ra,0x44($sp)
/* f041e94: 8e0f0044 */ lw $t7,0x44($s0)
/* f041e98: 8e0e0048 */ lw $t6,0x48($s0)
/* f041e9c: 25f8ffe2 */ addiu $t8,$t7,-30
/* f041ea0: 01d8082a */ slt $at,$t6,$t8
/* f041ea4: 50200051 */ beqzl $at,.L0f041fec
/* f041ea8: 3c013f00 */ lui $at,0x3f00
/* f041eac: 8e790020 */ lw $t9,0x20($s3)
/* f041eb0: 87280002 */ lh $t0,0x2($t9)
/* f041eb4: 5500004d */ bnezl $t0,.L0f041fec
/* f041eb8: 3c013f00 */ lui $at,0x3f00
/* f041ebc: 8e05002c */ lw $a1,0x2c($s0)
/* f041ec0: 3c014120 */ lui $at,0x4120
/* f041ec4: 44813000 */ mtc1 $at,$f6
/* f041ec8: c4a40018 */ lwc1 $f4,0x18($a1)
/* f041ecc: 46062200 */ add.s $f8,$f4,$f6
/* f041ed0: 4614403c */ c.lt.s $f8,$f20
/* f041ed4: 00000000 */ nop
/* f041ed8: 45020044 */ bc1fl .L0f041fec
/* f041edc: 3c013f00 */ lui $at,0x3f00
/* f041ee0: c4aa001c */ lwc1 $f10,0x1c($a1)
/* f041ee4: 460aa03c */ c.lt.s $f20,$f10
/* f041ee8: 00000000 */ nop
/* f041eec: 4502003f */ bc1fl .L0f041fec
/* f041ef0: 3c013f00 */ lui $at,0x3f00
/* f041ef4: 4480b000 */ mtc1 $zero,$f22
/* f041ef8: c4a00024 */ lwc1 $f0,0x24($a1)
/* f041efc: 4616003c */ c.lt.s $f0,$f22
/* f041f00: 00000000 */ nop
/* f041f04: 45030006 */ bc1tl .L0f041f20
/* f041f08: 82090036 */ lb $t1,0x36($s0)
/* f041f0c: 4600a03c */ c.lt.s $f20,$f0
/* f041f10: 00000000 */ nop
/* f041f14: 45020035 */ bc1fl .L0f041fec
/* f041f18: 3c013f00 */ lui $at,0x3f00
/* f041f1c: 82090036 */ lb $t1,0x36($s0)
.L0f041f20:
/* f041f20: 15200029 */ bnez $t1,.L0f041fc8
/* f041f24: 00000000 */ nop
/* f041f28: 0fc10711 */ jal func0f041c44
/* f041f2c: 02002025 */ or $a0,$s0,$zero
/* f041f30: 14400023 */ bnez $v0,.L0f041fc0
/* f041f34: 00000000 */ nop
/* f041f38: 0c00744f */ jal modelGetAnimNum
/* f041f3c: 02602025 */ or $a0,$s3,$zero
/* f041f40: 3c013f00 */ lui $at,0x3f00
/* f041f44: 4481c000 */ mtc1 $at,$f24
/* f041f48: 00028c00 */ sll $s1,$v0,0x10
/* f041f4c: 00115403 */ sra $t2,$s1,0x10
/* f041f50: 3c063f4c */ lui $a2,0x3f4c
/* f041f54: 4405c000 */ mfc1 $a1,$f24
/* f041f58: 34c6cccd */ ori $a2,$a2,0xcccd
/* f041f5c: 01408825 */ or $s1,$t2,$zero
/* f041f60: 0fc0b857 */ jal chrGetRangedSpeed
/* f041f64: 02002025 */ or $a0,$s0,$zero
/* f041f68: 8e6c0020 */ lw $t4,0x20($s3)
/* f041f6c: 8e0d002c */ lw $t5,0x2c($s0)
/* f041f70: 3c014100 */ lui $at,0x4100
/* f041f74: 44818000 */ mtc1 $at,$f16
/* f041f78: 00112c00 */ sll $a1,$s1,0x10
/* f041f7c: 00055c03 */ sra $t3,$a1,0x10
/* f041f80: 81860008 */ lb $a2,0x8($t4)
/* f041f84: 8da7001c */ lw $a3,0x1c($t5)
/* f041f88: e7a00010 */ swc1 $f0,0x10($sp)
/* f041f8c: 01602825 */ or $a1,$t3,$zero
/* f041f90: 02602025 */ or $a0,$s3,$zero
/* f041f94: 0c007733 */ jal modelSetAnimation
/* f041f98: e7b00014 */ swc1 $f16,0x14($sp)
/* f041f9c: 8e0f002c */ lw $t7,0x2c($s0)
/* f041fa0: c5e00014 */ lwc1 $f0,0x14($t7)
/* f041fa4: 4600b03e */ c.le.s $f22,$f0
/* f041fa8: 00000000 */ nop
/* f041fac: 45000004 */ bc1f .L0f041fc0
/* f041fb0: 00000000 */ nop
/* f041fb4: 44050000 */ mfc1 $a1,$f0
/* f041fb8: 0c007787 */ jal modelSetAnimEndFrame
/* f041fbc: 02602025 */ or $a0,$s3,$zero
.L0f041fc0:
/* f041fc0: 10000004 */ b .L0f041fd4
/* f041fc4: 820e0034 */ lb $t6,0x34($s0)
.L0f041fc8:
/* f041fc8: 0fc1074e */ jal chrAttackAmountUpdateAnimation
/* f041fcc: 02002025 */ or $a0,$s0,$zero
/* f041fd0: 820e0034 */ lb $t6,0x34($s0)
.L0f041fd4:
/* f041fd4: 02602025 */ or $a0,$s3,$zero
/* f041fd8: 25d80001 */ addiu $t8,$t6,0x1
/* f041fdc: 0c00745f */ jal modelGetCurAnimFrame
/* f041fe0: a2180033 */ sb $t8,0x33($s0)
/* f041fe4: 46000506 */ mov.s $f20,$f0
/* f041fe8: 3c013f00 */ lui $at,0x3f00
.L0f041fec:
/* f041fec: 4481c000 */ mtc1 $at,$f24
/* f041ff0: 4480b000 */ mtc1 $zero,$f22
/* f041ff4: 0c007468 */ jal modelGetAnimEndFrame
/* f041ff8: 02602025 */ or $a0,$s3,$zero
/* f041ffc: 4614003e */ c.le.s $f0,$f20
/* f042000: 00000000 */ nop
/* f042004: 45000080 */ bc1f .L0f042208
/* f042008: 00000000 */ nop
/* f04200c: 0c00744f */ jal modelGetAnimNum
/* f042010: 02602025 */ or $a0,$s3,$zero
/* f042014: 2401026a */ addiu $at,$zero,0x26a
/* f042018: 50410018 */ beql $v0,$at,.L0f04207c
/* f04201c: 82020033 */ lb $v0,0x33($s0)
/* f042020: 82190037 */ lb $t9,0x37($s0)
/* f042024: 17200006 */ bnez $t9,.L0f042040
/* f042028: 00000000 */ nop
/* f04202c: 82080034 */ lb $t0,0x34($s0)
/* f042030: 82090033 */ lb $t1,0x33($s0)
/* f042034: 0109082a */ slt $at,$t0,$t1
/* f042038: 50200010 */ beqzl $at,.L0f04207c
/* f04203c: 82020033 */ lb $v0,0x33($s0)
.L0f042040:
/* f042040: 0fc10711 */ jal func0f041c44
/* f042044: 02002025 */ or $a0,$s0,$zero
/* f042048: 1440006c */ bnez $v0,.L0f0421fc
/* f04204c: 00000000 */ nop
/* f042050: 8e0a004c */ lw $t2,0x4c($s0)
/* f042054: 314b0200 */ andi $t3,$t2,0x200
/* f042058: 11600003 */ beqz $t3,.L0f042068
/* f04205c: 00000000 */ nop
/* f042060: 0fc0e56b */ jal chrRecordLastSeeTargetTime
/* f042064: 02002025 */ or $a0,$s0,$zero
.L0f042068:
/* f042068: 0fc0bb57 */ jal chrStop
/* f04206c: 02002025 */ or $a0,$s0,$zero
/* f042070: 10000165 */ b .L0f042608
/* f042074: 8fbf0044 */ lw $ra,0x44($sp)
/* f042078: 82020033 */ lb $v0,0x33($s0)
.L0f04207c:
/* f04207c: 820c0034 */ lb $t4,0x34($s0)
/* f042080: 02002025 */ or $a0,$s0,$zero
/* f042084: 244d0001 */ addiu $t5,$v0,0x1
/* f042088: 55820006 */ bnel $t4,$v0,.L0f0420a4
/* f04208c: 820f0031 */ lb $t7,0x31($s0)
/* f042090: 0fc1074e */ jal chrAttackAmountUpdateAnimation
/* f042094: a20d0033 */ sb $t5,0x33($s0)
/* f042098: 10000058 */ b .L0f0421fc
/* f04209c: 00000000 */ nop
/* f0420a0: 820f0031 */ lb $t7,0x31($s0)
.L0f0420a4:
/* f0420a4: 3c014140 */ lui $at,0x4140
/* f0420a8: 02602025 */ or $a0,$s3,$zero
/* f0420ac: 11e00053 */ beqz $t7,.L0f0421fc
/* f0420b0: 00000000 */ nop
/* f0420b4: 820e0036 */ lb $t6,0x36($s0)
/* f0420b8: 4600c086 */ mov.s $f2,$f24
/* f0420bc: 51c00014 */ beqzl $t6,.L0f042110
/* f0420c0: 8e05002c */ lw $a1,0x2c($s0)
/* f0420c4: 8e05002c */ lw $a1,0x2c($s0)
/* f0420c8: c4a00020 */ lwc1 $f0,0x20($a1)
/* f0420cc: 4600b03c */ c.lt.s $f22,$f0
/* f0420d0: 00000000 */ nop
/* f0420d4: 45020004 */ bc1fl .L0f0420e8
/* f0420d8: c4ac0018 */ lwc1 $f12,0x18($a1)
/* f0420dc: 10000002 */ b .L0f0420e8
/* f0420e0: 46000306 */ mov.s $f12,$f0
/* f0420e4: c4ac0018 */ lwc1 $f12,0x18($a1)
.L0f0420e8:
/* f0420e8: c4a00024 */ lwc1 $f0,0x24($a1)
/* f0420ec: 4600b03c */ c.lt.s $f22,$f0
/* f0420f0: 00000000 */ nop
/* f0420f4: 45000003 */ bc1f .L0f042104
/* f0420f8: 00000000 */ nop
/* f0420fc: 1000000d */ b .L0f042134
/* f042100: 46000506 */ mov.s $f20,$f0
.L0f042104:
/* f042104: 1000000b */ b .L0f042134
/* f042108: c4b4001c */ lwc1 $f20,0x1c($a1)
/* f04210c: 8e05002c */ lw $a1,0x2c($s0)
.L0f042110:
/* f042110: c4a00020 */ lwc1 $f0,0x20($a1)
/* f042114: c4ac0018 */ lwc1 $f12,0x18($a1)
/* f042118: 4600b03c */ c.lt.s $f22,$f0
/* f04211c: 00000000 */ nop
/* f042120: 45020004 */ bc1fl .L0f042134
/* f042124: c4b4001c */ lwc1 $f20,0x1c($a1)
/* f042128: 10000002 */ b .L0f042134
/* f04212c: 46000506 */ mov.s $f20,$f0
/* f042130: c4b4001c */ lwc1 $f20,0x1c($a1)
.L0f042134:
/* f042134: 460ca001 */ sub.s $f0,$f20,$f12
/* f042138: 44819000 */ mtc1 $at,$f18
/* f04213c: 3c014180 */ lui $at,0x4180
/* f042140: 4612003c */ c.lt.s $f0,$f18
/* f042144: 00000000 */ nop
/* f042148: 45020007 */ bc1fl .L0f042168
/* f04214c: 44813000 */ mtc1 $at,$f6
/* f042150: 3c017f1b */ lui $at,%hi(var7f1a9188)
/* f042154: c4249188 */ lwc1 $f4,%lo(var7f1a9188)($at)
/* f042158: 46040082 */ mul.s $f2,$f0,$f4
/* f04215c: 1000000c */ b .L0f042190
/* f042160: 8218003a */ lb $t8,0x3a($s0)
/* f042164: 44813000 */ mtc1 $at,$f6
.L0f042168:
/* f042168: 3c013d00 */ lui $at,0x3d00
/* f04216c: 4600303c */ c.lt.s $f6,$f0
/* f042170: 00000000 */ nop
/* f042174: 45020006 */ bc1fl .L0f042190
/* f042178: 8218003a */ lb $t8,0x3a($s0)
/* f04217c: 44814000 */ mtc1 $at,$f8
/* f042180: 00000000 */ nop
/* f042184: 46080082 */ mul.s $f2,$f0,$f8
/* f042188: 00000000 */ nop
/* f04218c: 8218003a */ lb $t8,0x3a($s0)
.L0f042190:
/* f042190: 53000006 */ beqzl $t8,.L0f0421ac
/* f042194: a2000031 */ sb $zero,0x31($s0)
/* f042198: 8219003b */ lb $t9,0x3b($s0)
/* f04219c: 53200003 */ beqzl $t9,.L0f0421ac
/* f0421a0: a2000031 */ sb $zero,0x31($s0)
/* f0421a4: 46021080 */ add.s $f2,$f2,$f2
/* f0421a8: a2000031 */ sb $zero,0x31($s0)
.L0f0421ac:
/* f0421ac: e7ac005c */ swc1 $f12,0x5c($sp)
/* f0421b0: 0c00744f */ jal modelGetAnimNum
/* f0421b4: e7a20060 */ swc1 $f2,0x60($sp)
/* f0421b8: c7ac005c */ lwc1 $f12,0x5c($sp)
/* f0421bc: 8e690020 */ lw $t1,0x20($s3)
/* f0421c0: 3c014100 */ lui $at,0x4100
/* f0421c4: 44815000 */ mtc1 $at,$f10
/* f0421c8: c7a20060 */ lwc1 $f2,0x60($sp)
/* f0421cc: 00022c00 */ sll $a1,$v0,0x10
/* f0421d0: 00054403 */ sra $t0,$a1,0x10
/* f0421d4: 44076000 */ mfc1 $a3,$f12
/* f0421d8: 81260008 */ lb $a2,0x8($t1)
/* f0421dc: 01002825 */ or $a1,$t0,$zero
/* f0421e0: 02602025 */ or $a0,$s3,$zero
/* f0421e4: e7aa0014 */ swc1 $f10,0x14($sp)
/* f0421e8: 0c007733 */ jal modelSetAnimation
/* f0421ec: e7a20010 */ swc1 $f2,0x10($sp)
/* f0421f0: 4405a000 */ mfc1 $a1,$f20
/* f0421f4: 0c007787 */ jal modelSetAnimEndFrame
/* f0421f8: 02602025 */ or $a0,$s3,$zero
.L0f0421fc:
/* f0421fc: 0c00745f */ jal modelGetCurAnimFrame
/* f042200: 02602025 */ or $a0,$s3,$zero
/* f042204: 46000506 */ mov.s $f20,$f0
.L0f042208:
/* f042208: 0c00744f */ jal modelGetAnimNum
/* f04220c: 02602025 */ or $a0,$s3,$zero
/* f042210: 2401026a */ addiu $at,$zero,0x26a
/* f042214: 50410030 */ beql $v0,$at,.L0f0422d8
/* f042218: 8e05002c */ lw $a1,0x2c($s0)
/* f04221c: 8e02004c */ lw $v0,0x4c($s0)
/* f042220: 304a0040 */ andi $t2,$v0,0x40
/* f042224: 5540002c */ bnezl $t2,.L0f0422d8
/* f042228: 8e05002c */ lw $a1,0x2c($s0)
/* f04222c: 8e05002c */ lw $a1,0x2c($s0)
/* f042230: 304b0020 */ andi $t3,$v0,0x20
/* f042234: 02602025 */ or $a0,$s3,$zero
/* f042238: c4a2000c */ lwc1 $f2,0xc($a1)
/* f04223c: 1160000f */ beqz $t3,.L0f04227c
/* f042240: c4ac0004 */ lwc1 $f12,0x4($a1)
/* f042244: e7a20050 */ swc1 $f2,0x50($sp)
/* f042248: 0c007468 */ jal modelGetAnimEndFrame
/* f04224c: e7ac004c */ swc1 $f12,0x4c($sp)
/* f042250: c7ac004c */ lwc1 $f12,0x4c($sp)
/* f042254: c7a20050 */ lwc1 $f2,0x50($sp)
/* f042258: 02602025 */ or $a0,$s3,$zero
/* f04225c: 460c003c */ c.lt.s $f0,$f12
/* f042260: 00000000 */ nop
/* f042264: 45020006 */ bc1fl .L0f042280
/* f042268: 8e6c0020 */ lw $t4,0x20($s3)
/* f04226c: 0c007468 */ jal modelGetAnimEndFrame
/* f042270: e7a20050 */ swc1 $f2,0x50($sp)
/* f042274: c7a20050 */ lwc1 $f2,0x50($sp)
/* f042278: 46000306 */ mov.s $f12,$f0
.L0f04227c:
/* f04227c: 8e6c0020 */ lw $t4,0x20($s3)
.L0f042280:
/* f042280: 3c063fcc */ lui $a2,0x3fcc
/* f042284: 3c017f1b */ lui $at,%hi(var7f1a918c)
/* f042288: 818d0008 */ lb $t5,0x8($t4)
/* f04228c: 34c6cccd */ ori $a2,$a2,0xcccd
/* f042290: 02002025 */ or $a0,$s0,$zero
/* f042294: 11a00003 */ beqz $t5,.L0f0422a4
/* f042298: 3c053f80 */ lui $a1,0x3f80
/* f04229c: c430918c */ lwc1 $f16,%lo(var7f1a918c)($at)
/* f0422a0: 46028081 */ sub.s $f2,$f16,$f2
.L0f0422a4:
/* f0422a4: e7a20050 */ swc1 $f2,0x50($sp)
/* f0422a8: 0fc0b857 */ jal chrGetRangedSpeed
/* f0422ac: e7ac004c */ swc1 $f12,0x4c($sp)
/* f0422b0: c7ac004c */ lwc1 $f12,0x4c($sp)
/* f0422b4: c7a20050 */ lwc1 $f2,0x50($sp)
/* f0422b8: 82050030 */ lb $a1,0x30($s0)
/* f0422bc: 44070000 */ mfc1 $a3,$f0
/* f0422c0: 44066000 */ mfc1 $a2,$f12
/* f0422c4: 02002025 */ or $a0,$s0,$zero
/* f0422c8: 0fc0f9e2 */ jal func0f03e788
/* f0422cc: e7a20010 */ swc1 $f2,0x10($sp)
/* f0422d0: a2020030 */ sb $v0,0x30($s0)
/* f0422d4: 8e05002c */ lw $a1,0x2c($s0)
.L0f0422d8:
/* f0422d8: c4b20028 */ lwc1 $f18,0x28($a1)
/* f0422dc: 4614903c */ c.lt.s $f18,$f20
/* f0422e0: 00000000 */ nop
/* f0422e4: 45000006 */ bc1f .L0f042300
/* f0422e8: 00000000 */ nop
/* f0422ec: c4a4002c */ lwc1 $f4,0x2c($a1)
/* f0422f0: 4604a03c */ c.lt.s $f20,$f4
/* f0422f4: 00000000 */ nop
/* f0422f8: 45030008 */ bc1tl .L0f04231c
/* f0422fc: 3c013f80 */ lui $at,0x3f80
.L0f042300:
/* f042300: 0c00744f */ jal modelGetAnimNum
/* f042304: 02602025 */ or $a0,$s3,$zero
/* f042308: 2401026a */ addiu $at,$zero,0x26a
/* f04230c: 1441000b */ bne $v0,$at,.L0f04233c
/* f042310: 00000000 */ nop
/* f042314: 8e05002c */ lw $a1,0x2c($s0)
/* f042318: 3c013f80 */ lui $at,0x3f80
.L0f04231c:
/* f04231c: 44813000 */ mtc1 $at,$f6
/* f042320: 82060039 */ lb $a2,0x39($s0)
/* f042324: 82070038 */ lb $a3,0x38($s0)
/* f042328: 02002025 */ or $a0,$s0,$zero
/* f04232c: 0fc0fa7d */ jal func0f03e9f4
/* f042330: e7a60010 */ swc1 $f6,0x10($sp)
/* f042334: 10000004 */ b .L0f042348
/* f042338: 00008825 */ or $s1,$zero,$zero
.L0f04233c:
/* f04233c: 0fc0fe0a */ jal chrResetAimEndProperties
/* f042340: 02002025 */ or $a0,$s0,$zero
/* f042344: 00008825 */ or $s1,$zero,$zero
.L0f042348:
/* f042348: 02009025 */ or $s2,$s0,$zero
.L0f04234c:
/* f04234c: 824f0038 */ lb $t7,0x38($s2)
/* f042350: 02002025 */ or $a0,$s0,$zero
/* f042354: 02202825 */ or $a1,$s1,$zero
/* f042358: 11e000a4 */ beqz $t7,.L0f0425ec
/* f04235c: 00000000 */ nop
/* f042360: 824e003a */ lb $t6,0x3a($s2)
/* f042364: 15c00066 */ bnez $t6,.L0f042500
/* f042368: 00000000 */ nop
/* f04236c: 0c00744f */ jal modelGetAnimNum
/* f042370: 02602025 */ or $a0,$s3,$zero
/* f042374: 2401026a */ addiu $at,$zero,0x26a
/* f042378: 1041000c */ beq $v0,$at,.L0f0423ac
/* f04237c: 02002025 */ or $a0,$s0,$zero
/* f042380: 8e05002c */ lw $a1,0x2c($s0)
/* f042384: 00003025 */ or $a2,$zero,$zero
/* f042388: c4a80018 */ lwc1 $f8,0x18($a1)
/* f04238c: 4614403e */ c.le.s $f8,$f20
/* f042390: 00000000 */ nop
/* f042394: 4502003f */ bc1fl .L0f042494
/* f042398: 02002025 */ or $a0,$s0,$zero
/* f04239c: c4aa001c */ lwc1 $f10,0x1c($a1)
/* f0423a0: 460aa03c */ c.lt.s $f20,$f10
/* f0423a4: 00000000 */ nop
/* f0423a8: 45000039 */ bc1f .L0f042490
.L0f0423ac:
/* f0423ac: 02202825 */ or $a1,$s1,$zero
/* f0423b0: 0fc0fe62 */ jal func0f03f988
/* f0423b4: 24060001 */ addiu $a2,$zero,0x1
/* f0423b8: 82190007 */ lb $t9,0x7($s0)
/* f0423bc: 3c18800a */ lui $t8,%hi(g_Vars+0x8)
/* f0423c0: 8f189fc8 */ lw $t8,%lo(g_Vars+0x8)($t8)
/* f0423c4: 2401000a */ addiu $at,$zero,0xa
/* f0423c8: 1721002b */ bne $t9,$at,.L0f042478
/* f0423cc: ae180044 */ sw $t8,0x44($s0)
/* f0423d0: 8e05002c */ lw $a1,0x2c($s0)
/* f0423d4: 3c0141f0 */ lui $at,0x41f0
/* f0423d8: 44812000 */ mtc1 $at,$f4
/* f0423dc: c4b0001c */ lwc1 $f16,0x1c($a1)
/* f0423e0: c4b20018 */ lwc1 $f18,0x18($a1)
/* f0423e4: 46128001 */ sub.s $f0,$f16,$f18
/* f0423e8: 4604003c */ c.lt.s $f0,$f4
/* f0423ec: 00000000 */ nop
/* f0423f0: 4502001c */ bc1fl .L0f042464
/* f0423f4: 4405c000 */ mfc1 $a1,$f24
/* f0423f8: 4600018d */ trunc.w.s $f6,$f0
/* f0423fc: 8e080040 */ lw $t0,0x40($s0)
/* f042400: 240c003c */ addiu $t4,$zero,0x3c
/* f042404: 02602025 */ or $a0,$s3,$zero
/* f042408: 440a3000 */ mfc1 $t2,$f6
/* f04240c: 3c053dcc */ lui $a1,0x3dcc
/* f042410: 000a5840 */ sll $t3,$t2,0x1
/* f042414: 018b6823 */ subu $t5,$t4,$t3
/* f042418: 010d082a */ slt $at,$t0,$t5
/* f04241c: 54200008 */ bnezl $at,.L0f042440
/* f042420: 4406b000 */ mfc1 $a2,$f22
/* f042424: 4405c000 */ mfc1 $a1,$f24
/* f042428: 4406b000 */ mfc1 $a2,$f22
/* f04242c: 0c0077ac */ jal modelSetAnimSpeed
/* f042430: 02602025 */ or $a0,$s3,$zero
/* f042434: 10000070 */ b .L0f0425f8
/* f042438: 26310001 */ addiu $s1,$s1,0x1
/* f04243c: 4406b000 */ mfc1 $a2,$f22
.L0f042440:
/* f042440: 0c0077ac */ jal modelSetAnimSpeed
/* f042444: 34a5cccd */ ori $a1,$a1,0xcccd
/* f042448: 3c0e800a */ lui $t6,%hi(g_Vars+0x38)
/* f04244c: 8dce9ff8 */ lw $t6,%lo(g_Vars+0x38)($t6)
/* f042450: 8e0f0040 */ lw $t7,0x40($s0)
/* f042454: 01eec021 */ addu $t8,$t7,$t6
/* f042458: 10000066 */ b .L0f0425f4
/* f04245c: ae180040 */ sw $t8,0x40($s0)
/* f042460: 4405c000 */ mfc1 $a1,$f24
.L0f042464:
/* f042464: 4406b000 */ mfc1 $a2,$f22
/* f042468: 0c0077ac */ jal modelSetAnimSpeed
/* f04246c: 02602025 */ or $a0,$s3,$zero
/* f042470: 10000061 */ b .L0f0425f8
/* f042474: 26310001 */ addiu $s1,$s1,0x1
.L0f042478:
/* f042478: 4405c000 */ mfc1 $a1,$f24
/* f04247c: 4406b000 */ mfc1 $a2,$f22
/* f042480: 0c0077ac */ jal modelSetAnimSpeed
/* f042484: 02602025 */ or $a0,$s3,$zero
/* f042488: 1000005b */ b .L0f0425f8
/* f04248c: 26310001 */ addiu $s1,$s1,0x1
.L0f042490:
/* f042490: 02002025 */ or $a0,$s0,$zero
.L0f042494:
/* f042494: 0fc0fe62 */ jal func0f03f988
/* f042498: 02202825 */ or $a1,$s1,$zero
/* f04249c: 82190007 */ lb $t9,0x7($s0)
/* f0424a0: 2401000a */ addiu $at,$zero,0xa
/* f0424a4: 02002025 */ or $a0,$s0,$zero
/* f0424a8: 1721000c */ bne $t9,$at,.L0f0424dc
/* f0424ac: 3c063f4c */ lui $a2,0x3f4c
/* f0424b0: 4405c000 */ mfc1 $a1,$f24
/* f0424b4: 3c063f4c */ lui $a2,0x3f4c
/* f0424b8: 34c6cccd */ ori $a2,$a2,0xcccd
/* f0424bc: 0fc0b857 */ jal chrGetRangedSpeed
/* f0424c0: 02002025 */ or $a0,$s0,$zero
/* f0424c4: 44050000 */ mfc1 $a1,$f0
/* f0424c8: 4406b000 */ mfc1 $a2,$f22
/* f0424cc: 0c0077ac */ jal modelSetAnimSpeed
/* f0424d0: 02602025 */ or $a0,$s3,$zero
/* f0424d4: 10000048 */ b .L0f0425f8
/* f0424d8: 26310001 */ addiu $s1,$s1,0x1
.L0f0424dc:
/* f0424dc: 4405c000 */ mfc1 $a1,$f24
/* f0424e0: 0fc0b857 */ jal chrGetRangedSpeed
/* f0424e4: 34c6cccd */ ori $a2,$a2,0xcccd
/* f0424e8: 44050000 */ mfc1 $a1,$f0
/* f0424ec: 4406b000 */ mfc1 $a2,$f22
/* f0424f0: 0c0077ac */ jal modelSetAnimSpeed
/* f0424f4: 02602025 */ or $a0,$s3,$zero
/* f0424f8: 1000003f */ b .L0f0425f8
/* f0424fc: 26310001 */ addiu $s1,$s1,0x1
.L0f042500:
/* f042500: 0c00744f */ jal modelGetAnimNum
/* f042504: 02602025 */ or $a0,$s3,$zero
/* f042508: 2401026a */ addiu $at,$zero,0x26a
/* f04250c: 10410023 */ beq $v0,$at,.L0f04259c
/* f042510: 24060001 */ addiu $a2,$zero,0x1
/* f042514: 82090031 */ lb $t1,0x31($s0)
/* f042518: 02002025 */ or $a0,$s0,$zero
/* f04251c: 5520002f */ bnezl $t1,.L0f0425dc
/* f042520: 02202825 */ or $a1,$s1,$zero
/* f042524: 82020032 */ lb $v0,0x32($s0)
/* f042528: 12220004 */ beq $s1,$v0,.L0f04253c
/* f04252c: 02025021 */ addu $t2,$s0,$v0
/* f042530: 814c003a */ lb $t4,0x3a($t2)
/* f042534: 55800029 */ bnezl $t4,.L0f0425dc
/* f042538: 02202825 */ or $a1,$s1,$zero
.L0f04253c:
/* f04253c: 8e05002c */ lw $a1,0x2c($s0)
/* f042540: c4a00020 */ lwc1 $f0,0x20($a1)
/* f042544: 4600b03e */ c.le.s $f22,$f0
/* f042548: 00000000 */ nop
/* f04254c: 4502000b */ bc1fl .L0f04257c
/* f042550: 4616003c */ c.lt.s $f0,$f22
/* f042554: 4614003e */ c.le.s $f0,$f20
/* f042558: 00000000 */ nop
/* f04255c: 45020007 */ bc1fl .L0f04257c
/* f042560: 4616003c */ c.lt.s $f0,$f22
/* f042564: c4a80024 */ lwc1 $f8,0x24($a1)
/* f042568: 4608a03e */ c.le.s $f20,$f8
/* f04256c: 00000000 */ nop
/* f042570: 4503000b */ bc1tl .L0f0425a0
/* f042574: 820b0032 */ lb $t3,0x32($s0)
/* f042578: 4616003c */ c.lt.s $f0,$f22
.L0f04257c:
/* f04257c: 00000000 */ nop
/* f042580: 45020016 */ bc1fl .L0f0425dc
/* f042584: 02202825 */ or $a1,$s1,$zero
/* f042588: c4aa0018 */ lwc1 $f10,0x18($a1)
/* f04258c: 4614503e */ c.le.s $f10,$f20
/* f042590: 00000000 */ nop
/* f042594: 45020011 */ bc1fl .L0f0425dc
/* f042598: 02202825 */ or $a1,$s1,$zero
.L0f04259c:
/* f04259c: 820b0032 */ lb $t3,0x32($s0)
.L0f0425a0:
/* f0425a0: 820d0033 */ lb $t5,0x33($s0)
/* f0425a4: a2060031 */ sb $a2,0x31($s0)
/* f0425a8: 00cb4023 */ subu $t0,$a2,$t3
/* f0425ac: 25af0001 */ addiu $t7,$t5,0x1
/* f0425b0: a2080032 */ sb $t0,0x32($s0)
/* f0425b4: a20f0033 */ sb $t7,0x33($s0)
/* f0425b8: 3c0e800a */ lui $t6,%hi(g_Vars+0x8)
/* f0425bc: 8dce9fc8 */ lw $t6,%lo(g_Vars+0x8)($t6)
/* f0425c0: 02002025 */ or $a0,$s0,$zero
/* f0425c4: 02202825 */ or $a1,$s1,$zero
/* f0425c8: 0fc0fe62 */ jal func0f03f988
/* f0425cc: ae0e0044 */ sw $t6,0x44($s0)
/* f0425d0: 10000009 */ b .L0f0425f8
/* f0425d4: 26310001 */ addiu $s1,$s1,0x1
/* f0425d8: 02202825 */ or $a1,$s1,$zero
.L0f0425dc:
/* f0425dc: 0fc0fe62 */ jal func0f03f988
/* f0425e0: 00003025 */ or $a2,$zero,$zero
/* f0425e4: 10000004 */ b .L0f0425f8
/* f0425e8: 26310001 */ addiu $s1,$s1,0x1
.L0f0425ec:
/* f0425ec: 0fc0fe62 */ jal func0f03f988
/* f0425f0: 00003025 */ or $a2,$zero,$zero
.L0f0425f4:
/* f0425f4: 26310001 */ addiu $s1,$s1,0x1
.L0f0425f8:
/* f0425f8: 24010002 */ addiu $at,$zero,0x2
/* f0425fc: 1621ff53 */ bne $s1,$at,.L0f04234c
/* f042600: 26520001 */ addiu $s2,$s2,0x1
/* f042604: 8fbf0044 */ lw $ra,0x44($sp)
.L0f042608:
/* f042608: d7b40018 */ ldc1 $f20,0x18($sp)
/* f04260c: d7b60020 */ ldc1 $f22,0x20($sp)
/* f042610: d7b80028 */ ldc1 $f24,0x28($sp)
/* f042614: 8fb00034 */ lw $s0,0x34($sp)
/* f042618: 8fb10038 */ lw $s1,0x38($sp)
/* f04261c: 8fb2003c */ lw $s2,0x3c($sp)
/* f042620: 8fb30040 */ lw $s3,0x40($sp)
/* f042624: 03e00008 */ jr $ra
/* f042628: 27bd0070 */ addiu $sp,$sp,0x70
);
#endif
void chrTickAttackAmount(struct chrdata *chr)
{
struct model *model = chr->model;
f32 frame = modelGetCurAnimFrame(model);
f32 unk0c = chr->act_attackamount.unk02c->unk0c;
f32 unk04 = chr->act_attackamount.unk02c->unk04;
f32 thing = chrGetRangedSpeed(chr, 1, 1.6f);
func0f03e788(chr, 1, unk04, thing, unk0c);
if (frame > chr->act_attackamount.unk02c->framestart
&& frame < chr->act_attackamount.unk02c->frameend) {
func0f03e9f4(chr, chr->act_attackamount.unk02c, 0, 1, 0.2f);
} else {
chrResetAimEndProperties(chr);
}
if (frame >= chr->act_attackamount.unk02c->unk18
&& chr->act_attackamount.unk037 == false) {
chr->act_attackamount.unk037 = true;
}
if (chr->act_attackamount.unk037) {
if (chr->act_attackamount.unk033++ < chr->act_attackamount.unk034) {
func0f03f988(chr, 0, 1);
} else {
chrAttackAmountUpdateAnimation(chr);
func0f03f988(chr, 0, 0);
}
} else {
func0f03f988(chr, 0, 0);
}
}
/**
* Sets the robot's muzzle flash to on or off.
*
* There are two muzzles, left and right, which is specified using the `right`
* argument.
*/
void robotSetMuzzleFlash(struct chrdata *chr, bool right, bool visible)
{
struct modelnode *node;
union modelrwdata *rwdata;
s32 partnum;
if (right) {
partnum = MODELPART_ROBOT_RGUNFIRE;
} else {
partnum = MODELPART_ROBOT_LGUNFIRE;
}
node = modelGetPart(chr->model->filedata, partnum);
if (node) {
rwdata = modelGetNodeRwData(chr->model, node);
}
if (rwdata) {
rwdata->gunfire.visible = visible;
}
}
void robotAttack(struct chrdata *chr)
{
u32 rand = random() % 20;
if (chr->unk348 && chr->unk34c) {
chr->actiontype = ACT_ROBOTATTACK;
chr->unk348->beam->age = -1;
chr->unk348->unk00 = random() % 3;
chr->unk348->unk01 = 0;
chr->unk348->unk08 = -1;
chr->unk348->unk0c = 0.85f;
if ((lvGetDifficulty() == DIFF_PA) * 0.2f) {
chr->unk348->unk10 = 2.0f;
} else {
chr->unk348->unk10 = 1.0f;
}
chr->unk348->unk14 = 0.0f;
chr->act_robotattack.unk02c = 0.0f;
chr->act_robotattack.unk030 = 0.0f;
chr->act_robotattack.unk034 = 0.0f;
chr->act_robotattack.unk044 = 0.0f;
chr->act_robotattack.unk048 = 0.0f;
chr->act_robotattack.unk04c = 0.0f;
chr->act_robotattack.unk05c = 90;
chr->act_robotattack.unk06c = 0;
chr->unk34c->beam->age = -1;
chr->unk34c->unk00 = random() % 3;
chr->unk34c->unk01 = 0;
chr->unk34c->unk08 = -1;
chr->unk34c->unk0c = 0.85f;
chr->unk34c->unk10 = 0.2f;
chr->unk34c->unk14 = 0.0f;
chr->act_robotattack.unk060 = 90;
chr->act_robotattack.unk06d = 0;
chr->act_robotattack.unk06e = 0;
chr->act_robotattack.unk064 = rand;
chr->act_robotattack.unk068 = rand;
chr->act_robotattack.unk038 = 0.0f;
chr->act_robotattack.unk03c = 0.0f;
chr->act_robotattack.unk040 = 0.0f;
chr->act_robotattack.unk050 = 0.0f;
chr->act_robotattack.unk054 = 0.0f;
chr->act_robotattack.unk058 = 0.0f;
chrStandChooseAnimation(chr, 16);
}
}
void func0f0429d8(struct chrdata *chr, f32 arg1, f32 arg2)
{
struct prop *prop = chrGetTargetProp(chr);
f32 distance = atan2f(prop->pos.x - chr->prop->pos.x, prop->pos.z - chr->prop->pos.z);
f32 value = func0001afe8(arg2, distance, arg1);
chrSetLookAngle(chr, value);
}
GLOBAL_ASM(
glabel chrTickRobotAttack
.late_rodata
glabel var7f1a91a4
.word 0x40c907a9
glabel var7f1a91a8
.word 0x3cf5c28f
glabel var7f1a91ac
.word 0x3cf5c28f
glabel var7f1a91b0
.word 0x3cf5c28f
glabel var7f1a91b4
.word 0x3cf5c28f
glabel var7f1a91b8
.word 0x404907a9
glabel var7f1a91bc
.word 0xbf0624dd
glabel var7f1a91c0
.word 0x3f0624dd
glabel var7f1a91c4
.word 0x404907a9
glabel var7f1a91c8
.word 0xbf0624dd
glabel var7f1a91cc
.word 0xbf0624dd
glabel var7f1a91d0
.word 0x3f0624dd
glabel var7f1a91d4
.word 0x3f0624dd
glabel var7f1a91d8
.word 0x3e19999a
glabel var7f1a91dc
.word 0x3e19999a
.text
/* f042a40: 27bdfee8 */ addiu $sp,$sp,-280
/* f042a44: f7bc0038 */ sdc1 $f28,0x38($sp)
/* f042a48: 4480e000 */ mtc1 $zero,$f28
/* f042a4c: afbf006c */ sw $ra,0x6c($sp)
/* f042a50: afb20050 */ sw $s2,0x50($sp)
/* f042a54: f7ba0030 */ sdc1 $f26,0x30($sp)
/* f042a58: 00809025 */ or $s2,$a0,$zero
/* f042a5c: afbe0068 */ sw $s8,0x68($sp)
/* f042a60: afb70064 */ sw $s7,0x64($sp)
/* f042a64: afb60060 */ sw $s6,0x60($sp)
/* f042a68: afb5005c */ sw $s5,0x5c($sp)
/* f042a6c: afb40058 */ sw $s4,0x58($sp)
/* f042a70: afb30054 */ sw $s3,0x54($sp)
/* f042a74: afb1004c */ sw $s1,0x4c($sp)
/* f042a78: afb00048 */ sw $s0,0x48($sp)
/* f042a7c: f7be0040 */ sdc1 $f30,0x40($sp)
/* f042a80: f7b80028 */ sdc1 $f24,0x28($sp)
/* f042a84: f7b60020 */ sdc1 $f22,0x20($sp)
/* f042a88: f7b40018 */ sdc1 $f20,0x18($sp)
/* f042a8c: 0fc0a221 */ jal chrGetTargetProp
/* f042a90: 4600e686 */ mov.s $f26,$f28
/* f042a94: 0040f025 */ or $s8,$v0,$zero
/* f042a98: 0fc0f917 */ jal chrGetInverseTheta
/* f042a9c: 02402025 */ or $a0,$s2,$zero
/* f042aa0: 3c053dae */ lui $a1,0x3dae
/* f042aa4: 44060000 */ mfc1 $a2,$f0
/* f042aa8: e7a000fc */ swc1 $f0,0xfc($sp)
/* f042aac: 34a5147b */ ori $a1,$a1,0x147b
/* f042ab0: 0fc10a76 */ jal func0f0429d8
/* f042ab4: 02402025 */ or $a0,$s2,$zero
/* f042ab8: 8e4f0020 */ lw $t7,0x20($s2)
/* f042abc: 3c0e8008 */ lui $t6,%hi(g_ModelTypeRobot)
/* f042ac0: 25cecefc */ addiu $t6,$t6,%lo(g_ModelTypeRobot)
/* f042ac4: 8df80008 */ lw $t8,0x8($t7)
/* f042ac8: 2655002c */ addiu $s5,$s2,0x2c
/* f042acc: 02a0b825 */ or $s7,$s5,$zero
/* f042ad0: 8f190004 */ lw $t9,0x4($t8)
/* f042ad4: 0000a025 */ or $s4,$zero,$zero
/* f042ad8: 02408825 */ or $s1,$s2,$zero
/* f042adc: 11d90004 */ beq $t6,$t9,.L0f042af0
/* f042ae0: 3c017f1b */ lui $at,%hi(var7f1a91a4)
/* f042ae4: 24080001 */ addiu $t0,$zero,0x1
/* f042ae8: 10000132 */ b .L0f042fb4
/* f042aec: a248006e */ sb $t0,0x6e($s2)
.L0f042af0:
/* f042af0: afb50070 */ sw $s5,0x70($sp)
/* f042af4: c43e91a4 */ lwc1 $f30,%lo(var7f1a91a4)($at)
.L0f042af8:
/* f042af8: 8ee90038 */ lw $t1,0x38($s7)
/* f042afc: 00009825 */ or $s3,$zero,$zero
/* f042b00: 5920000e */ blezl $t1,.L0f042b3c
/* f042b04: 8e380348 */ lw $t8,0x348($s1)
/* f042b08: 8e220348 */ lw $v0,0x348($s1)
/* f042b0c: 24010003 */ addiu $at,$zero,0x3
/* f042b10: 90450000 */ lbu $a1,0x0($v0)
/* f042b14: 00a1001a */ div $zero,$a1,$at
/* f042b18: 00005010 */ mfhi $t2
/* f042b1c: 2d4b0001 */ sltiu $t3,$t2,0x1
/* f042b20: a04b0001 */ sb $t3,0x1($v0)
/* f042b24: 8e2c0348 */ lw $t4,0x348($s1)
/* f042b28: 91850000 */ lbu $a1,0x0($t4)
/* f042b2c: 30ad0001 */ andi $t5,$a1,0x1
/* f042b30: 10000004 */ b .L0f042b44
/* f042b34: 2db60001 */ sltiu $s6,$t5,0x1
/* f042b38: 8e380348 */ lw $t8,0x348($s1)
.L0f042b3c:
/* f042b3c: 0000b025 */ or $s6,$zero,$zero
/* f042b40: a3000001 */ sb $zero,0x1($t8)
.L0f042b44:
/* f042b44: 8fae0070 */ lw $t6,0x70($sp)
/* f042b48: 00145080 */ sll $t2,$s4,0x2
/* f042b4c: 01545023 */ subu $t2,$t2,$s4
/* f042b50: a1d60040 */ sb $s6,0x40($t6)
/* f042b54: 8eb90038 */ lw $t9,0x38($s5)
/* f042b58: 000a5080 */ sll $t2,$t2,0x2
/* f042b5c: 1f200045 */ bgtz $t9,.L0f042c74
/* f042b60: 00000000 */ nop
/* f042b64: 8ea8003c */ lw $t0,0x3c($s5)
/* f042b68: 3c017f1b */ lui $at,%hi(var7f1a91a8)
/* f042b6c: 1d000041 */ bgtz $t0,.L0f042c74
/* f042b70: 00000000 */ nop
/* f042b74: c640030c */ lwc1 $f0,0x30c($s2)
/* f042b78: 44802000 */ mtc1 $zero,$f4
/* f042b7c: 24130001 */ addiu $s3,$zero,0x1
/* f042b80: 4600203c */ c.lt.s $f4,$f0
/* f042b84: 00000000 */ nop
/* f042b88: 45020004 */ bc1fl .L0f042b9c
/* f042b8c: 46000587 */ neg.s $f22,$f0
/* f042b90: 10000002 */ b .L0f042b9c
/* f042b94: 46000586 */ mov.s $f22,$f0
/* f042b98: 46000587 */ neg.s $f22,$f0
.L0f042b9c:
/* f042b9c: c42691a8 */ lwc1 $f6,%lo(var7f1a91a8)($at)
/* f042ba0: 3c017f1b */ lui $at,%hi(var7f1a91ac)
/* f042ba4: 4606b03c */ c.lt.s $f22,$f6
/* f042ba8: 00000000 */ nop
/* f042bac: 45000031 */ bc1f .L0f042c74
/* f042bb0: 00000000 */ nop
/* f042bb4: c6400314 */ lwc1 $f0,0x314($s2)
/* f042bb8: 44804000 */ mtc1 $zero,$f8
/* f042bbc: 00000000 */ nop
/* f042bc0: 4600403c */ c.lt.s $f8,$f0
/* f042bc4: 00000000 */ nop
/* f042bc8: 45020004 */ bc1fl .L0f042bdc
/* f042bcc: 46000087 */ neg.s $f2,$f0
/* f042bd0: 10000002 */ b .L0f042bdc
/* f042bd4: 46000086 */ mov.s $f2,$f0
/* f042bd8: 46000087 */ neg.s $f2,$f0
.L0f042bdc:
/* f042bdc: c42a91ac */ lwc1 $f10,%lo(var7f1a91ac)($at)
/* f042be0: 3c017f1b */ lui $at,%hi(var7f1a91b0)
/* f042be4: 460a103c */ c.lt.s $f2,$f10
/* f042be8: 00000000 */ nop
/* f042bec: 45000021 */ bc1f .L0f042c74
/* f042bf0: 00000000 */ nop
/* f042bf4: c6400310 */ lwc1 $f0,0x310($s2)
/* f042bf8: 44808000 */ mtc1 $zero,$f16
/* f042bfc: 00000000 */ nop
/* f042c00: 4600803c */ c.lt.s $f16,$f0
/* f042c04: 00000000 */ nop
/* f042c08: 45020004 */ bc1fl .L0f042c1c
/* f042c0c: 46000087 */ neg.s $f2,$f0
/* f042c10: 10000002 */ b .L0f042c1c
/* f042c14: 46000086 */ mov.s $f2,$f0
/* f042c18: 46000087 */ neg.s $f2,$f0
.L0f042c1c:
/* f042c1c: c43291b0 */ lwc1 $f18,%lo(var7f1a91b0)($at)
/* f042c20: 3c017f1b */ lui $at,%hi(var7f1a91b4)
/* f042c24: 4612103c */ c.lt.s $f2,$f18
/* f042c28: 00000000 */ nop
/* f042c2c: 45000011 */ bc1f .L0f042c74
/* f042c30: 00000000 */ nop
/* f042c34: c6400318 */ lwc1 $f0,0x318($s2)
/* f042c38: 44802000 */ mtc1 $zero,$f4
/* f042c3c: 24090001 */ addiu $t1,$zero,0x1
/* f042c40: 4600203c */ c.lt.s $f4,$f0
/* f042c44: 00000000 */ nop
/* f042c48: 45020004 */ bc1fl .L0f042c5c
/* f042c4c: 46000087 */ neg.s $f2,$f0
/* f042c50: 10000002 */ b .L0f042c5c
/* f042c54: 46000086 */ mov.s $f2,$f0
/* f042c58: 46000087 */ neg.s $f2,$f0
.L0f042c5c:
/* f042c5c: c42691b4 */ lwc1 $f6,%lo(var7f1a91b4)($at)
/* f042c60: 4606103c */ c.lt.s $f2,$f6
/* f042c64: 00000000 */ nop
/* f042c68: 45000002 */ bc1f .L0f042c74
/* f042c6c: 00000000 */ nop
/* f042c70: a2a90042 */ sb $t1,0x42($s5)
.L0f042c74:
/* f042c74: 16600083 */ bnez $s3,.L0f042e84
/* f042c78: 3c0141a0 */ lui $at,0x41a0
/* f042c7c: c7c8000c */ lwc1 $f8,0xc($s8)
/* f042c80: 44815000 */ mtc1 $at,$f10
/* f042c84: 02aa8021 */ addu $s0,$s5,$t2
/* f042c88: 12800003 */ beqz $s4,.L0f042c98
/* f042c8c: 460a4501 */ sub.s $f20,$f8,$f10
/* f042c90: 10000002 */ b .L0f042c9c
/* f042c94: 00002825 */ or $a1,$zero,$zero
.L0f042c98:
/* f042c98: 24050001 */ addiu $a1,$zero,0x1
.L0f042c9c:
/* f042c9c: 8e4b0020 */ lw $t3,0x20($s2)
/* f042ca0: 0c006a6f */ jal modelGetPartRodata
/* f042ca4: 8d640008 */ lw $a0,0x8($t3)
/* f042ca8: c4500000 */ lwc1 $f16,0x0($v0)
/* f042cac: 3c014396 */ lui $at,0x4396
/* f042cb0: 44812000 */ mtc1 $at,$f4
/* f042cb4: e6100000 */ swc1 $f16,0x0($s0)
/* f042cb8: c4520004 */ lwc1 $f18,0x4($v0)
/* f042cbc: 27a500a4 */ addiu $a1,$sp,0xa4
/* f042cc0: 46049181 */ sub.s $f6,$f18,$f4
/* f042cc4: e6060004 */ swc1 $f6,0x4($s0)
/* f042cc8: c4480008 */ lwc1 $f8,0x8($v0)
/* f042ccc: e6080008 */ swc1 $f8,0x8($s0)
/* f042cd0: 0c0058dd */ jal func00016374
/* f042cd4: c7ac00fc */ lwc1 $f12,0xfc($sp)
/* f042cd8: 27a400a4 */ addiu $a0,$sp,0xa4
/* f042cdc: 02002825 */ or $a1,$s0,$zero
/* f042ce0: 0c0056c5 */ jal func00015b14
/* f042ce4: 27a600e4 */ addiu $a2,$sp,0xe4
/* f042ce8: 8e4c0020 */ lw $t4,0x20($s2)
/* f042cec: c7aa00e4 */ lwc1 $f10,0xe4($sp)
/* f042cf0: c7a400e8 */ lwc1 $f4,0xe8($sp)
/* f042cf4: c5900014 */ lwc1 $f16,0x14($t4)
/* f042cf8: 46105482 */ mul.s $f18,$f10,$f16
/* f042cfc: c7aa00ec */ lwc1 $f10,0xec($sp)
/* f042d00: e7b200e4 */ swc1 $f18,0xe4($sp)
/* f042d04: 8e4d0020 */ lw $t5,0x20($s2)
/* f042d08: c5a60014 */ lwc1 $f6,0x14($t5)
/* f042d0c: 46062202 */ mul.s $f8,$f4,$f6
/* f042d10: e7a800e8 */ swc1 $f8,0xe8($sp)
/* f042d14: 8e4f0020 */ lw $t7,0x20($s2)
/* f042d18: c5f00014 */ lwc1 $f16,0x14($t7)
/* f042d1c: 46105102 */ mul.s $f4,$f10,$f16
/* f042d20: e7a400ec */ swc1 $f4,0xec($sp)
/* f042d24: 8e58001c */ lw $t8,0x1c($s2)
/* f042d28: c7060008 */ lwc1 $f6,0x8($t8)
/* f042d2c: 46123200 */ add.s $f8,$f6,$f18
/* f042d30: e6080000 */ swc1 $f8,0x0($s0)
/* f042d34: 8e4e001c */ lw $t6,0x1c($s2)
/* f042d38: c7b000e8 */ lwc1 $f16,0xe8($sp)
/* f042d3c: c5ca000c */ lwc1 $f10,0xc($t6)
/* f042d40: 46105100 */ add.s $f4,$f10,$f16
/* f042d44: c6100000 */ lwc1 $f16,0x0($s0)
/* f042d48: e6040004 */ swc1 $f4,0x4($s0)
/* f042d4c: 8e59001c */ lw $t9,0x1c($s2)
/* f042d50: c7b200ec */ lwc1 $f18,0xec($sp)
/* f042d54: c7260010 */ lwc1 $f6,0x10($t9)
/* f042d58: 46123200 */ add.s $f8,$f6,$f18
/* f042d5c: e6080008 */ swc1 $f8,0x8($s0)
/* f042d60: c6060008 */ lwc1 $f6,0x8($s0)
/* f042d64: c7c40010 */ lwc1 $f4,0x10($s8)
/* f042d68: c7ca0008 */ lwc1 $f10,0x8($s8)
/* f042d6c: 46062381 */ sub.s $f14,$f4,$f6
/* f042d70: 0fc259d4 */ jal atan2f
/* f042d74: 46105301 */ sub.s $f12,$f10,$f16
/* f042d78: c7ac00fc */ lwc1 $f12,0xfc($sp)
/* f042d7c: 3c017f1b */ lui $at,%hi(var7f1a91b8)
/* f042d80: 460c003c */ c.lt.s $f0,$f12
/* f042d84: 460c0081 */ sub.s $f2,$f0,$f12
/* f042d88: 45000002 */ bc1f .L0f042d94
/* f042d8c: 46001686 */ mov.s $f26,$f2
/* f042d90: 461e1680 */ add.s $f26,$f2,$f30
.L0f042d94:
/* f042d94: c43291b8 */ lwc1 $f18,%lo(var7f1a91b8)($at)
/* f042d98: 3c017f1b */ lui $at,%hi(var7f1a91bc)
/* f042d9c: 461a903c */ c.lt.s $f18,$f26
/* f042da0: 00000000 */ nop
/* f042da4: 45000002 */ bc1f .L0f042db0
/* f042da8: 00000000 */ nop
/* f042dac: 461ed681 */ sub.s $f26,$f26,$f30
.L0f042db0:
/* f042db0: c42e91bc */ lwc1 $f14,%lo(var7f1a91bc)($at)
/* f042db4: 3c017f1b */ lui $at,%hi(var7f1a91c0)
/* f042db8: 460ed03c */ c.lt.s $f26,$f14
/* f042dbc: 00000000 */ nop
/* f042dc0: 45000002 */ bc1f .L0f042dcc
/* f042dc4: 00000000 */ nop
/* f042dc8: 46007686 */ mov.s $f26,$f14
.L0f042dcc:
/* f042dcc: c42091c0 */ lwc1 $f0,%lo(var7f1a91c0)($at)
/* f042dd0: 461a003c */ c.lt.s $f0,$f26
/* f042dd4: 00000000 */ nop
/* f042dd8: 45020003 */ bc1fl .L0f042de8
/* f042ddc: c7c80008 */ lwc1 $f8,0x8($s8)
/* f042de0: 46000686 */ mov.s $f26,$f0
/* f042de4: c7c80008 */ lwc1 $f8,0x8($s8)
.L0f042de8:
/* f042de8: c60a0000 */ lwc1 $f10,0x0($s0)
/* f042dec: c7d00010 */ lwc1 $f16,0x10($s8)
/* f042df0: c6040008 */ lwc1 $f4,0x8($s0)
/* f042df4: 460a4001 */ sub.s $f0,$f8,$f10
/* f042df8: 46048081 */ sub.s $f2,$f16,$f4
/* f042dfc: 46000182 */ mul.s $f6,$f0,$f0
/* f042e00: 00000000 */ nop
/* f042e04: 46021482 */ mul.s $f18,$f2,$f2
/* f042e08: 0c012974 */ jal sqrtf
/* f042e0c: 46123300 */ add.s $f12,$f6,$f18
/* f042e10: c6080004 */ lwc1 $f8,0x4($s0)
/* f042e14: 46000386 */ mov.s $f14,$f0
/* f042e18: 0fc259d4 */ jal atan2f
/* f042e1c: 4608a301 */ sub.s $f12,$f20,$f8
/* f042e20: 4600f081 */ sub.s $f2,$f30,$f0
/* f042e24: 3c017f1b */ lui $at,%hi(var7f1a91c4)
/* f042e28: c42a91c4 */ lwc1 $f10,%lo(var7f1a91c4)($at)
/* f042e2c: 3c017f1b */ lui $at,%hi(var7f1a91c8)
/* f042e30: 46001706 */ mov.s $f28,$f2
/* f042e34: 4602503c */ c.lt.s $f10,$f2
/* f042e38: 00000000 */ nop
/* f042e3c: 45000002 */ bc1f .L0f042e48
/* f042e40: 00000000 */ nop
/* f042e44: 461e1701 */ sub.s $f28,$f2,$f30
.L0f042e48:
/* f042e48: c43091c8 */ lwc1 $f16,%lo(var7f1a91c8)($at)
/* f042e4c: 3c017f1b */ lui $at,%hi(var7f1a91cc)
/* f042e50: 4610e03c */ c.lt.s $f28,$f16
/* f042e54: 00000000 */ nop
/* f042e58: 45000002 */ bc1f .L0f042e64
/* f042e5c: 00000000 */ nop
/* f042e60: c43c91cc */ lwc1 $f28,%lo(var7f1a91cc)($at)
.L0f042e64:
/* f042e64: 3c017f1b */ lui $at,%hi(var7f1a91d0)
/* f042e68: c42491d0 */ lwc1 $f4,%lo(var7f1a91d0)($at)
/* f042e6c: 3c017f1b */ lui $at,%hi(var7f1a91d4)
/* f042e70: 461c203c */ c.lt.s $f4,$f28
/* f042e74: 00000000 */ nop
/* f042e78: 45020003 */ bc1fl .L0f042e88
/* f042e7c: c620030c */ lwc1 $f0,0x30c($s1)
/* f042e80: c43c91d4 */ lwc1 $f28,%lo(var7f1a91d4)($at)
.L0f042e84:
/* f042e84: c620030c */ lwc1 $f0,0x30c($s1)
.L0f042e88:
/* f042e88: 3c017f1b */ lui $at,%hi(var7f1a91d8)
/* f042e8c: c43291d8 */ lwc1 $f18,%lo(var7f1a91d8)($at)
/* f042e90: 4600d181 */ sub.s $f6,$f26,$f0
/* f042e94: c6220314 */ lwc1 $f2,0x314($s1)
/* f042e98: 3c017f1b */ lui $at,%hi(var7f1a91dc)
/* f042e9c: 46123202 */ mul.s $f8,$f6,$f18
/* f042ea0: 4602e401 */ sub.s $f16,$f28,$f2
/* f042ea4: 46080280 */ add.s $f10,$f0,$f8
/* f042ea8: e62a030c */ swc1 $f10,0x30c($s1)
/* f042eac: c42491dc */ lwc1 $f4,%lo(var7f1a91dc)($at)
/* f042eb0: 46048182 */ mul.s $f6,$f16,$f4
/* f042eb4: 46061480 */ add.s $f18,$f2,$f6
/* f042eb8: 16600036 */ bnez $s3,.L0f042f94
/* f042ebc: e6320314 */ swc1 $f18,0x314($s1)
/* f042ec0: 12c00030 */ beqz $s6,.L0f042f84
/* f042ec4: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f042ec8: 44800000 */ mtc1 $zero,$f0
/* f042ecc: c6380314 */ lwc1 $f24,0x314($s1)
/* f042ed0: 00144080 */ sll $t0,$s4,0x2
/* f042ed4: 01144023 */ subu $t0,$t0,$s4
/* f042ed8: 4600c03c */ c.lt.s $f24,$f0
/* f042edc: 00084080 */ sll $t0,$t0,0x2
/* f042ee0: c634030c */ lwc1 $f20,0x30c($s1)
/* f042ee4: 02a88021 */ addu $s0,$s5,$t0
/* f042ee8: 45020003 */ bc1fl .L0f042ef8
/* f042eec: 4600a03c */ c.lt.s $f20,$f0
/* f042ef0: 461ec600 */ add.s $f24,$f24,$f30
/* f042ef4: 4600a03c */ c.lt.s $f20,$f0
.L0f042ef8:
/* f042ef8: 00000000 */ nop
/* f042efc: 45020003 */ bc1fl .L0f042f0c
/* f042f00: 4608a500 */ add.s $f20,$f20,$f8
/* f042f04: 461ea500 */ add.s $f20,$f20,$f30
/* f042f08: 4608a500 */ add.s $f20,$f20,$f8
.L0f042f0c:
/* f042f0c: 4614f03e */ c.le.s $f30,$f20
/* f042f10: 00000000 */ nop
/* f042f14: 45000002 */ bc1f .L0f042f20
/* f042f18: 00000000 */ nop
/* f042f1c: 461ea501 */ sub.s $f20,$f20,$f30
.L0f042f20:
/* f042f20: 0c0068f7 */ jal sinf
/* f042f24: 4600a306 */ mov.s $f12,$f20
/* f042f28: 46000586 */ mov.s $f22,$f0
/* f042f2c: 0c0068f4 */ jal cosf
/* f042f30: 4600c306 */ mov.s $f12,$f24
/* f042f34: 46160282 */ mul.s $f10,$f0,$f22
/* f042f38: 4600c306 */ mov.s $f12,$f24
/* f042f3c: 0c0068f7 */ jal sinf
/* f042f40: e60a0018 */ swc1 $f10,0x18($s0)
/* f042f44: 46000407 */ neg.s $f16,$f0
/* f042f48: 4600a306 */ mov.s $f12,$f20
/* f042f4c: 0c0068f4 */ jal cosf
/* f042f50: e610001c */ swc1 $f16,0x1c($s0)
/* f042f54: 46000586 */ mov.s $f22,$f0
/* f042f58: 0c0068f4 */ jal cosf
/* f042f5c: 4600c306 */ mov.s $f12,$f24
/* f042f60: 46160102 */ mul.s $f4,$f0,$f22
/* f042f64: 02402025 */ or $a0,$s2,$zero
/* f042f68: 02802825 */ or $a1,$s4,$zero
/* f042f6c: 24060001 */ addiu $a2,$zero,0x1
/* f042f70: 0fc109e7 */ jal robotSetMuzzleFlash
/* f042f74: e6040020 */ swc1 $f4,0x20($s0)
/* f042f78: 8ee90038 */ lw $t1,0x38($s7)
/* f042f7c: 252affff */ addiu $t2,$t1,-1
/* f042f80: aeea0038 */ sw $t2,0x38($s7)
.L0f042f84:
/* f042f84: 8e220348 */ lw $v0,0x348($s1)
/* f042f88: 904b0000 */ lbu $t3,0x0($v0)
/* f042f8c: 256c0001 */ addiu $t4,$t3,0x1
/* f042f90: a04c0000 */ sb $t4,0x0($v0)
.L0f042f94:
/* f042f94: 8fad0070 */ lw $t5,0x70($sp)
/* f042f98: 26940001 */ addiu $s4,$s4,0x1
/* f042f9c: 24010002 */ addiu $at,$zero,0x2
/* f042fa0: 25af0001 */ addiu $t7,$t5,0x1
/* f042fa4: afaf0070 */ sw $t7,0x70($sp)
/* f042fa8: 26310004 */ addiu $s1,$s1,0x4
/* f042fac: 1681fed2 */ bne $s4,$at,.L0f042af8
/* f042fb0: 26f70004 */ addiu $s7,$s7,0x4
.L0f042fb4:
/* f042fb4: 8fbf006c */ lw $ra,0x6c($sp)
/* f042fb8: d7b40018 */ ldc1 $f20,0x18($sp)
/* f042fbc: d7b60020 */ ldc1 $f22,0x20($sp)
/* f042fc0: d7b80028 */ ldc1 $f24,0x28($sp)
/* f042fc4: d7ba0030 */ ldc1 $f26,0x30($sp)
/* f042fc8: d7bc0038 */ ldc1 $f28,0x38($sp)
/* f042fcc: d7be0040 */ ldc1 $f30,0x40($sp)
/* f042fd0: 8fb00048 */ lw $s0,0x48($sp)
/* f042fd4: 8fb1004c */ lw $s1,0x4c($sp)
/* f042fd8: 8fb20050 */ lw $s2,0x50($sp)
/* f042fdc: 8fb30054 */ lw $s3,0x54($sp)
/* f042fe0: 8fb40058 */ lw $s4,0x58($sp)
/* f042fe4: 8fb5005c */ lw $s5,0x5c($sp)
/* f042fe8: 8fb60060 */ lw $s6,0x60($sp)
/* f042fec: 8fb70064 */ lw $s7,0x64($sp)
/* f042ff0: 8fbe0068 */ lw $s8,0x68($sp)
/* f042ff4: 03e00008 */ jr $ra
/* f042ff8: 27bd0118 */ addiu $sp,$sp,0x118
);
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel chrTickAttack
.late_rodata
glabel var7f1a91e0
.word 0x3e4ccccd
.text
/* f042ffc: 27bdffc0 */ addiu $sp,$sp,-64
/* f043000: afb00020 */ sw $s0,0x20($sp)
/* f043004: 00808025 */ or $s0,$a0,$zero
/* f043008: afbf0024 */ sw $ra,0x24($sp)
/* f04300c: 8c840020 */ lw $a0,0x20($a0)
/* f043010: 0c00745f */ jal modelGetCurAnimFrame
/* f043014: afa4003c */ sw $a0,0x3c($sp)
/* f043018: e7a00038 */ swc1 $f0,0x38($sp)
/* f04301c: 8e0e0014 */ lw $t6,0x14($s0)
/* f043020: 000e7a80 */ sll $t7,$t6,0xa
/* f043024: 05e3001b */ bgezl $t7,.L0f043094
/* f043028: 8e08002c */ lw $t0,0x2c($s0)
/* f04302c: 0c0076e5 */ jal modelIsAnimMerging
/* f043030: 8e040020 */ lw $a0,0x20($s0)
/* f043034: 144000e5 */ bnez $v0,.L0f0433cc
/* f043038: 02002025 */ or $a0,$s0,$zero
/* f04303c: 3c063f4c */ lui $a2,0x3f4c
/* f043040: 34c6cccd */ ori $a2,$a2,0xcccd
/* f043044: 0fc0b857 */ jal chrGetRangedSpeed
/* f043048: 3c053f00 */ lui $a1,0x3f00
/* f04304c: 8e02002c */ lw $v0,0x2c($s0)
/* f043050: 3c014180 */ lui $at,0x4180
/* f043054: 44812000 */ mtc1 $at,$f4
/* f043058: 8206003e */ lb $a2,0x3e($s0)
/* f04305c: 84450000 */ lh $a1,0x0($v0)
/* f043060: 8c470010 */ lw $a3,0x10($v0)
/* f043064: e7a00010 */ swc1 $f0,0x10($sp)
/* f043068: 8fa4003c */ lw $a0,0x3c($sp)
/* f04306c: 0c007733 */ jal modelSetAnimation
/* f043070: e7a40014 */ swc1 $f4,0x14($sp)
/* f043074: 0fc0c495 */ jal func0f031254
/* f043078: 02002025 */ or $a0,$s0,$zero
/* f04307c: 8e180014 */ lw $t8,0x14($s0)
/* f043080: 3c01ffdf */ lui $at,0xffdf
/* f043084: 3421ffff */ ori $at,$at,0xffff
/* f043088: 0301c824 */ and $t9,$t8,$at
/* f04308c: ae190014 */ sw $t9,0x14($s0)
/* f043090: 8e08002c */ lw $t0,0x2c($s0)
.L0f043094:
/* f043094: 24010269 */ addiu $at,$zero,0x269
/* f043098: 85090000 */ lh $t1,0x0($t0)
/* f04309c: 55210019 */ bnel $t1,$at,.L0f043104
/* f0430a0: 8e0302d4 */ lw $v1,0x2d4($s0)
/* f0430a4: 0c007468 */ jal modelGetAnimEndFrame
/* f0430a8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0430ac: c7a60038 */ lwc1 $f6,0x38($sp)
/* f0430b0: 3c0a8006 */ lui $t2,%hi(var80067d70)
/* f0430b4: 3c063f4c */ lui $a2,0x3f4c
/* f0430b8: 4606003e */ c.le.s $f0,$f6
/* f0430bc: 254a7d70 */ addiu $t2,$t2,%lo(var80067d70)
/* f0430c0: 34c6cccd */ ori $a2,$a2,0xcccd
/* f0430c4: 02002025 */ or $a0,$s0,$zero
/* f0430c8: 4500000d */ bc1f .L0f043100
/* f0430cc: 3c053f00 */ lui $a1,0x3f00
/* f0430d0: 0fc0b857 */ jal chrGetRangedSpeed
/* f0430d4: ae0a002c */ sw $t2,0x2c($s0)
/* f0430d8: 8e02002c */ lw $v0,0x2c($s0)
/* f0430dc: 3c014180 */ lui $at,0x4180
/* f0430e0: 44814000 */ mtc1 $at,$f8
/* f0430e4: 8206003e */ lb $a2,0x3e($s0)
/* f0430e8: 84450000 */ lh $a1,0x0($v0)
/* f0430ec: 8c470010 */ lw $a3,0x10($v0)
/* f0430f0: e7a00010 */ swc1 $f0,0x10($sp)
/* f0430f4: 8fa4003c */ lw $a0,0x3c($sp)
/* f0430f8: 0c007733 */ jal modelSetAnimation
/* f0430fc: e7a80014 */ swc1 $f8,0x14($sp)
.L0f043100:
/* f043100: 8e0302d4 */ lw $v1,0x2d4($s0)
.L0f043104:
/* f043104: 14600050 */ bnez $v1,.L0f043248
/* f043108: 00000000 */ nop
/* f04310c: 8e020058 */ lw $v0,0x58($s0)
/* f043110: 24010001 */ addiu $at,$zero,0x1
/* f043114: 1040004c */ beqz $v0,.L0f043248
/* f043118: 00000000 */ nop
/* f04311c: 1441002e */ bne $v0,$at,.L0f0431d8
/* f043120: 8fa4003c */ lw $a0,0x3c($sp)
/* f043124: 8e02002c */ lw $v0,0x2c($s0)
/* f043128: 44805000 */ mtc1 $zero,$f10
/* f04312c: c4400024 */ lwc1 $f0,0x24($v0)
/* f043130: 4600503e */ c.le.s $f10,$f0
/* f043134: 00000000 */ nop
/* f043138: 45020004 */ bc1fl .L0f04314c
/* f04313c: c442001c */ lwc1 $f2,0x1c($v0)
/* f043140: 10000002 */ b .L0f04314c
/* f043144: 46000086 */ mov.s $f2,$f0
/* f043148: c442001c */ lwc1 $f2,0x1c($v0)
.L0f04314c:
/* f04314c: 0c00744f */ jal modelGetAnimNum
/* f043150: e7a20034 */ swc1 $f2,0x34($sp)
/* f043154: 3c063f4c */ lui $a2,0x3f4c
/* f043158: 34c6cccd */ ori $a2,$a2,0xcccd
/* f04315c: a7a2002e */ sh $v0,0x2e($sp)
/* f043160: 02002025 */ or $a0,$s0,$zero
/* f043164: 0fc0b857 */ jal chrGetRangedSpeed
/* f043168: 3c053f00 */ lui $a1,0x3f00
/* f04316c: 8fa4003c */ lw $a0,0x3c($sp)
/* f043170: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043174: 3c014180 */ lui $at,0x4180
/* f043178: 8c8b0020 */ lw $t3,0x20($a0)
/* f04317c: 44818000 */ mtc1 $at,$f16
/* f043180: 44071000 */ mfc1 $a3,$f2
/* f043184: 81660008 */ lb $a2,0x8($t3)
/* f043188: e7a00010 */ swc1 $f0,0x10($sp)
/* f04318c: 87a5002e */ lh $a1,0x2e($sp)
/* f043190: 0c007733 */ jal modelSetAnimation
/* f043194: e7b00014 */ swc1 $f16,0x14($sp)
/* f043198: 8e0c002c */ lw $t4,0x2c($s0)
/* f04319c: 44809000 */ mtc1 $zero,$f18
/* f0431a0: c5800014 */ lwc1 $f0,0x14($t4)
/* f0431a4: 4600903e */ c.le.s $f18,$f0
/* f0431a8: 00000000 */ nop
/* f0431ac: 45020005 */ bc1fl .L0f0431c4
/* f0431b0: 240d0002 */ addiu $t5,$zero,0x2
/* f0431b4: 44050000 */ mfc1 $a1,$f0
/* f0431b8: 0c007787 */ jal modelSetAnimEndFrame
/* f0431bc: 8fa4003c */ lw $a0,0x3c($sp)
/* f0431c0: 240d0002 */ addiu $t5,$zero,0x2
.L0f0431c4:
/* f0431c4: ae0d0058 */ sw $t5,0x58($s0)
/* f0431c8: 0fc0fe0a */ jal chrResetAimEndProperties
/* f0431cc: 02002025 */ or $a0,$s0,$zero
/* f0431d0: 1000007f */ b .L0f0433d0
/* f0431d4: 8fbf0024 */ lw $ra,0x24($sp)
.L0f0431d8:
/* f0431d8: 24010002 */ addiu $at,$zero,0x2
/* f0431dc: 1441001a */ bne $v0,$at,.L0f043248
/* f0431e0: 00000000 */ nop
/* f0431e4: 0c007468 */ jal modelGetAnimEndFrame
/* f0431e8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0431ec: c7a40038 */ lwc1 $f4,0x38($sp)
/* f0431f0: 4604003e */ c.le.s $f0,$f4
/* f0431f4: 00000000 */ nop
/* f0431f8: 45020075 */ bc1fl .L0f0433d0
/* f0431fc: 8fbf0024 */ lw $ra,0x24($sp)
/* f043200: 8e0e004c */ lw $t6,0x4c($s0)
/* f043204: 8e180054 */ lw $t8,0x54($s0)
/* f043208: 2401ffbf */ addiu $at,$zero,-65
/* f04320c: 01c17824 */ and $t7,$t6,$at
/* f043210: 13000007 */ beqz $t8,.L0f043230
/* f043214: ae0f004c */ sw $t7,0x4c($s0)
/* f043218: 02002025 */ or $a0,$s0,$zero
/* f04321c: 01e02825 */ or $a1,$t7,$zero
/* f043220: 0fc0c048 */ jal chrAttackStand
/* f043224: 8e060050 */ lw $a2,0x50($s0)
/* f043228: 10000069 */ b .L0f0433d0
/* f04322c: 8fbf0024 */ lw $ra,0x24($sp)
.L0f043230:
/* f043230: 02002025 */ or $a0,$s0,$zero
/* f043234: 8e05004c */ lw $a1,0x4c($s0)
/* f043238: 0fc0c0e8 */ jal chrAttackKneel
/* f04323c: 8e060050 */ lw $a2,0x50($s0)
/* f043240: 10000063 */ b .L0f0433d0
/* f043244: 8fbf0024 */ lw $ra,0x24($sp)
.L0f043248:
/* f043248: 54600020 */ bnezl $v1,.L0f0432cc
/* f04324c: 8e0d02d4 */ lw $t5,0x2d4($s0)
/* f043250: 8e02004c */ lw $v0,0x4c($s0)
/* f043254: 30590020 */ andi $t9,$v0,0x20
/* f043258: 1320001b */ beqz $t9,.L0f0432c8
/* f04325c: 30480040 */ andi $t0,$v0,0x40
/* f043260: 1100000c */ beqz $t0,.L0f043294
/* f043264: 02002025 */ or $a0,$s0,$zero
/* f043268: 3c017f1b */ lui $at,%hi(var7f1a91e0)
/* f04326c: c42691e0 */ lwc1 $f6,%lo(var7f1a91e0)($at)
/* f043270: 8e05002c */ lw $a1,0x2c($s0)
/* f043274: 82060039 */ lb $a2,0x39($s0)
/* f043278: 82070038 */ lb $a3,0x38($s0)
/* f04327c: 0fc0fa7d */ jal func0f03e9f4
/* f043280: e7a60010 */ swc1 $f6,0x10($sp)
/* f043284: 14400051 */ bnez $v0,.L0f0433cc
/* f043288: 24090001 */ addiu $t1,$zero,0x1
/* f04328c: 1000004f */ b .L0f0433cc
/* f043290: ae090058 */ sw $t1,0x58($s0)
.L0f043294:
/* f043294: 0c007468 */ jal modelGetAnimEndFrame
/* f043298: 8fa4003c */ lw $a0,0x3c($sp)
/* f04329c: c7a80038 */ lwc1 $f8,0x38($sp)
/* f0432a0: 4608003e */ c.le.s $f0,$f8
/* f0432a4: 00000000 */ nop
/* f0432a8: 45020008 */ bc1fl .L0f0432cc
/* f0432ac: 8e0d02d4 */ lw $t5,0x2d4($s0)
/* f0432b0: 8e0a004c */ lw $t2,0x4c($s0)
/* f0432b4: 240c0002 */ addiu $t4,$zero,0x2
/* f0432b8: a20c0030 */ sb $t4,0x30($s0)
/* f0432bc: 354b0040 */ ori $t3,$t2,0x40
/* f0432c0: 10000042 */ b .L0f0433cc
/* f0432c4: ae0b004c */ sw $t3,0x4c($s0)
.L0f0432c8:
/* f0432c8: 8e0d02d4 */ lw $t5,0x2d4($s0)
.L0f0432cc:
/* f0432cc: 15a0003d */ bnez $t5,.L0f0433c4
/* f0432d0: 00000000 */ nop
/* f0432d4: 820e0036 */ lb $t6,0x36($s0)
/* f0432d8: 15c0003a */ bnez $t6,.L0f0433c4
/* f0432dc: 00000000 */ nop
/* f0432e0: 8e0f002c */ lw $t7,0x2c($s0)
/* f0432e4: 44805000 */ mtc1 $zero,$f10
/* f0432e8: c7b00038 */ lwc1 $f16,0x38($sp)
/* f0432ec: c5e00024 */ lwc1 $f0,0x24($t7)
/* f0432f0: 4600503c */ c.lt.s $f10,$f0
/* f0432f4: 00000000 */ nop
/* f0432f8: 45000032 */ bc1f .L0f0433c4
/* f0432fc: 00000000 */ nop
/* f043300: 4600803e */ c.le.s $f16,$f0
/* f043304: 00000000 */ nop
/* f043308: 4500002e */ bc1f .L0f0433c4
/* f04330c: 00000000 */ nop
/* f043310: 0c007468 */ jal modelGetAnimEndFrame
/* f043314: 8fa4003c */ lw $a0,0x3c($sp)
/* f043318: c7b20038 */ lwc1 $f18,0x38($sp)
/* f04331c: 4612003e */ c.le.s $f0,$f18
/* f043320: 00000000 */ nop
/* f043324: 45000027 */ bc1f .L0f0433c4
/* f043328: 00000000 */ nop
/* f04332c: 0c00744f */ jal modelGetAnimNum
/* f043330: 8fa4003c */ lw $a0,0x3c($sp)
/* f043334: 3c063f4c */ lui $a2,0x3f4c
/* f043338: 34c6cccd */ ori $a2,$a2,0xcccd
/* f04333c: a7a2002e */ sh $v0,0x2e($sp)
/* f043340: 02002025 */ or $a0,$s0,$zero
/* f043344: 0fc0b857 */ jal chrGetRangedSpeed
/* f043348: 3c053f00 */ lui $a1,0x3f00
/* f04334c: 8fa4003c */ lw $a0,0x3c($sp)
/* f043350: 8e08002c */ lw $t0,0x2c($s0)
/* f043354: 3c014180 */ lui $at,0x4180
/* f043358: 8c990020 */ lw $t9,0x20($a0)
/* f04335c: 44812000 */ mtc1 $at,$f4
/* f043360: 8d070024 */ lw $a3,0x24($t0)
/* f043364: 83260008 */ lb $a2,0x8($t9)
/* f043368: e7a00010 */ swc1 $f0,0x10($sp)
/* f04336c: 87a5002e */ lh $a1,0x2e($sp)
/* f043370: 0c007733 */ jal modelSetAnimation
/* f043374: e7a40014 */ swc1 $f4,0x14($sp)
/* f043378: 82090037 */ lb $t1,0x37($s0)
/* f04337c: 5120000e */ beqzl $t1,.L0f0433b8
/* f043380: 8e0b002c */ lw $t3,0x2c($s0)
/* f043384: 8e0a002c */ lw $t2,0x2c($s0)
/* f043388: 44803000 */ mtc1 $zero,$f6
/* f04338c: c5400014 */ lwc1 $f0,0x14($t2)
/* f043390: 4600303e */ c.le.s $f6,$f0
/* f043394: 00000000 */ nop
/* f043398: 4500000a */ bc1f .L0f0433c4
/* f04339c: 00000000 */ nop
/* f0433a0: 44050000 */ mfc1 $a1,$f0
/* f0433a4: 0c007787 */ jal modelSetAnimEndFrame
/* f0433a8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0433ac: 10000005 */ b .L0f0433c4
/* f0433b0: 00000000 */ nop
/* f0433b4: 8e0b002c */ lw $t3,0x2c($s0)
.L0f0433b8:
/* f0433b8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0433bc: 0c007787 */ jal modelSetAnimEndFrame
/* f0433c0: 8d65001c */ lw $a1,0x1c($t3)
.L0f0433c4:
/* f0433c4: 0fc10792 */ jal func0f041e48
/* f0433c8: 02002025 */ or $a0,$s0,$zero
.L0f0433cc:
/* f0433cc: 8fbf0024 */ lw $ra,0x24($sp)
.L0f0433d0:
/* f0433d0: 8fb00020 */ lw $s0,0x20($sp)
/* f0433d4: 27bd0040 */ addiu $sp,$sp,0x40
/* f0433d8: 03e00008 */ jr $ra
/* f0433dc: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel chrTickAttack
.late_rodata
glabel var7f1a91e0
.word 0x3e4ccccd
.text
/* f042ffc: 27bdffc0 */ addiu $sp,$sp,-64
/* f043000: afb00020 */ sw $s0,0x20($sp)
/* f043004: 00808025 */ or $s0,$a0,$zero
/* f043008: afbf0024 */ sw $ra,0x24($sp)
/* f04300c: 8c840020 */ lw $a0,0x20($a0)
/* f043010: 0c00745f */ jal modelGetCurAnimFrame
/* f043014: afa4003c */ sw $a0,0x3c($sp)
/* f043018: e7a00038 */ swc1 $f0,0x38($sp)
/* f04301c: 8e0e0014 */ lw $t6,0x14($s0)
/* f043020: 000e7a80 */ sll $t7,$t6,0xa
/* f043024: 05e3001b */ bgezl $t7,.L0f043094
/* f043028: 8e08002c */ lw $t0,0x2c($s0)
/* f04302c: 0c0076e5 */ jal modelIsAnimMerging
/* f043030: 8e040020 */ lw $a0,0x20($s0)
/* f043034: 144000e5 */ bnez $v0,.L0f0433cc
/* f043038: 02002025 */ or $a0,$s0,$zero
/* f04303c: 3c063f4c */ lui $a2,0x3f4c
/* f043040: 34c6cccd */ ori $a2,$a2,0xcccd
/* f043044: 0fc0b857 */ jal chrGetRangedSpeed
/* f043048: 3c053f00 */ lui $a1,0x3f00
/* f04304c: 8e02002c */ lw $v0,0x2c($s0)
/* f043050: 3c014180 */ lui $at,0x4180
/* f043054: 44812000 */ mtc1 $at,$f4
/* f043058: 8206003e */ lb $a2,0x3e($s0)
/* f04305c: 84450000 */ lh $a1,0x0($v0)
/* f043060: 8c470010 */ lw $a3,0x10($v0)
/* f043064: e7a00010 */ swc1 $f0,0x10($sp)
/* f043068: 8fa4003c */ lw $a0,0x3c($sp)
/* f04306c: 0c007733 */ jal modelSetAnimation
/* f043070: e7a40014 */ swc1 $f4,0x14($sp)
/* f043074: 0fc0c495 */ jal func0f031254
/* f043078: 02002025 */ or $a0,$s0,$zero
/* f04307c: 8e180014 */ lw $t8,0x14($s0)
/* f043080: 3c01ffdf */ lui $at,0xffdf
/* f043084: 3421ffff */ ori $at,$at,0xffff
/* f043088: 0301c824 */ and $t9,$t8,$at
/* f04308c: ae190014 */ sw $t9,0x14($s0)
/* f043090: 8e08002c */ lw $t0,0x2c($s0)
.L0f043094:
/* f043094: 24010269 */ addiu $at,$zero,0x269
/* f043098: 85090000 */ lh $t1,0x0($t0)
/* f04309c: 55210019 */ bnel $t1,$at,.L0f043104
/* f0430a0: 8e0302d4 */ lw $v1,0x2d4($s0)
/* f0430a4: 0c007468 */ jal modelGetAnimEndFrame
/* f0430a8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0430ac: c7a60038 */ lwc1 $f6,0x38($sp)
/* f0430b0: 3c0a8006 */ lui $t2,%hi(var80067d70)
/* f0430b4: 3c063f4c */ lui $a2,0x3f4c
/* f0430b8: 4606003e */ c.le.s $f0,$f6
/* f0430bc: 254a7d70 */ addiu $t2,$t2,%lo(var80067d70)
/* f0430c0: 34c6cccd */ ori $a2,$a2,0xcccd
/* f0430c4: 02002025 */ or $a0,$s0,$zero
/* f0430c8: 4500000d */ bc1f .L0f043100
/* f0430cc: 3c053f00 */ lui $a1,0x3f00
/* f0430d0: 0fc0b857 */ jal chrGetRangedSpeed
/* f0430d4: ae0a002c */ sw $t2,0x2c($s0)
/* f0430d8: 8e02002c */ lw $v0,0x2c($s0)
/* f0430dc: 3c014180 */ lui $at,0x4180
/* f0430e0: 44814000 */ mtc1 $at,$f8
/* f0430e4: 8206003e */ lb $a2,0x3e($s0)
/* f0430e8: 84450000 */ lh $a1,0x0($v0)
/* f0430ec: 8c470010 */ lw $a3,0x10($v0)
/* f0430f0: e7a00010 */ swc1 $f0,0x10($sp)
/* f0430f4: 8fa4003c */ lw $a0,0x3c($sp)
/* f0430f8: 0c007733 */ jal modelSetAnimation
/* f0430fc: e7a80014 */ swc1 $f8,0x14($sp)
.L0f043100:
/* f043100: 8e0302d4 */ lw $v1,0x2d4($s0)
.L0f043104:
/* f043104: 14600050 */ bnez $v1,.L0f043248
/* f043108: 00000000 */ nop
/* f04310c: 8e020058 */ lw $v0,0x58($s0)
/* f043110: 24010001 */ addiu $at,$zero,0x1
/* f043114: 1040004c */ beqz $v0,.L0f043248
/* f043118: 00000000 */ nop
/* f04311c: 1441002e */ bne $v0,$at,.L0f0431d8
/* f043120: 8fa4003c */ lw $a0,0x3c($sp)
/* f043124: 8e02002c */ lw $v0,0x2c($s0)
/* f043128: 44805000 */ mtc1 $zero,$f10
/* f04312c: c4400024 */ lwc1 $f0,0x24($v0)
/* f043130: 4600503e */ c.le.s $f10,$f0
/* f043134: 00000000 */ nop
/* f043138: 45020004 */ bc1fl .L0f04314c
/* f04313c: c442001c */ lwc1 $f2,0x1c($v0)
/* f043140: 10000002 */ b .L0f04314c
/* f043144: 46000086 */ mov.s $f2,$f0
/* f043148: c442001c */ lwc1 $f2,0x1c($v0)
.L0f04314c:
/* f04314c: 0c00744f */ jal modelGetAnimNum
/* f043150: e7a20034 */ swc1 $f2,0x34($sp)
/* f043154: 3c063f4c */ lui $a2,0x3f4c
/* f043158: 34c6cccd */ ori $a2,$a2,0xcccd
/* f04315c: a7a2002e */ sh $v0,0x2e($sp)
/* f043160: 02002025 */ or $a0,$s0,$zero
/* f043164: 0fc0b857 */ jal chrGetRangedSpeed
/* f043168: 3c053f00 */ lui $a1,0x3f00
/* f04316c: 8fa4003c */ lw $a0,0x3c($sp)
/* f043170: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043174: 3c014180 */ lui $at,0x4180
/* f043178: 8c8b0020 */ lw $t3,0x20($a0)
/* f04317c: 44818000 */ mtc1 $at,$f16
/* f043180: 44071000 */ mfc1 $a3,$f2
/* f043184: 81660008 */ lb $a2,0x8($t3)
/* f043188: e7a00010 */ swc1 $f0,0x10($sp)
/* f04318c: 87a5002e */ lh $a1,0x2e($sp)
/* f043190: 0c007733 */ jal modelSetAnimation
/* f043194: e7b00014 */ swc1 $f16,0x14($sp)
/* f043198: 8e0c002c */ lw $t4,0x2c($s0)
/* f04319c: 44809000 */ mtc1 $zero,$f18
/* f0431a0: c5800014 */ lwc1 $f0,0x14($t4)
/* f0431a4: 4600903e */ c.le.s $f18,$f0
/* f0431a8: 00000000 */ nop
/* f0431ac: 45020005 */ bc1fl .L0f0431c4
/* f0431b0: 240d0002 */ addiu $t5,$zero,0x2
/* f0431b4: 44050000 */ mfc1 $a1,$f0
/* f0431b8: 0c007787 */ jal modelSetAnimEndFrame
/* f0431bc: 8fa4003c */ lw $a0,0x3c($sp)
/* f0431c0: 240d0002 */ addiu $t5,$zero,0x2
.L0f0431c4:
/* f0431c4: ae0d0058 */ sw $t5,0x58($s0)
/* f0431c8: 0fc0fe0a */ jal chrResetAimEndProperties
/* f0431cc: 02002025 */ or $a0,$s0,$zero
/* f0431d0: 1000007f */ b .L0f0433d0
/* f0431d4: 8fbf0024 */ lw $ra,0x24($sp)
.L0f0431d8:
/* f0431d8: 24010002 */ addiu $at,$zero,0x2
/* f0431dc: 1441001a */ bne $v0,$at,.L0f043248
/* f0431e0: 00000000 */ nop
/* f0431e4: 0c007468 */ jal modelGetAnimEndFrame
/* f0431e8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0431ec: c7a40038 */ lwc1 $f4,0x38($sp)
/* f0431f0: 4604003e */ c.le.s $f0,$f4
/* f0431f4: 00000000 */ nop
/* f0431f8: 45020075 */ bc1fl .L0f0433d0
/* f0431fc: 8fbf0024 */ lw $ra,0x24($sp)
/* f043200: 8e0e004c */ lw $t6,0x4c($s0)
/* f043204: 8e180054 */ lw $t8,0x54($s0)
/* f043208: 2401ffbf */ addiu $at,$zero,-65
/* f04320c: 01c17824 */ and $t7,$t6,$at
/* f043210: 13000007 */ beqz $t8,.L0f043230
/* f043214: ae0f004c */ sw $t7,0x4c($s0)
/* f043218: 02002025 */ or $a0,$s0,$zero
/* f04321c: 01e02825 */ or $a1,$t7,$zero
/* f043220: 0fc0c048 */ jal chrAttackStand
/* f043224: 8e060050 */ lw $a2,0x50($s0)
/* f043228: 10000069 */ b .L0f0433d0
/* f04322c: 8fbf0024 */ lw $ra,0x24($sp)
.L0f043230:
/* f043230: 02002025 */ or $a0,$s0,$zero
/* f043234: 8e05004c */ lw $a1,0x4c($s0)
/* f043238: 0fc0c0e8 */ jal chrAttackKneel
/* f04323c: 8e060050 */ lw $a2,0x50($s0)
/* f043240: 10000063 */ b .L0f0433d0
/* f043244: 8fbf0024 */ lw $ra,0x24($sp)
.L0f043248:
/* f043248: 54600020 */ bnezl $v1,.L0f0432cc
/* f04324c: 8e0d02d4 */ lw $t5,0x2d4($s0)
/* f043250: 8e02004c */ lw $v0,0x4c($s0)
/* f043254: 30590020 */ andi $t9,$v0,0x20
/* f043258: 1320001b */ beqz $t9,.L0f0432c8
/* f04325c: 30480040 */ andi $t0,$v0,0x40
/* f043260: 1100000c */ beqz $t0,.L0f043294
/* f043264: 02002025 */ or $a0,$s0,$zero
/* f043268: 3c017f1b */ lui $at,%hi(var7f1a91e0)
/* f04326c: c42691e0 */ lwc1 $f6,%lo(var7f1a91e0)($at)
/* f043270: 8e05002c */ lw $a1,0x2c($s0)
/* f043274: 82060039 */ lb $a2,0x39($s0)
/* f043278: 82070038 */ lb $a3,0x38($s0)
/* f04327c: 0fc0fa7d */ jal func0f03e9f4
/* f043280: e7a60010 */ swc1 $f6,0x10($sp)
/* f043284: 14400051 */ bnez $v0,.L0f0433cc
/* f043288: 24090001 */ addiu $t1,$zero,0x1
/* f04328c: 1000004f */ b .L0f0433cc
/* f043290: ae090058 */ sw $t1,0x58($s0)
.L0f043294:
/* f043294: 0c007468 */ jal modelGetAnimEndFrame
/* f043298: 8fa4003c */ lw $a0,0x3c($sp)
/* f04329c: c7a80038 */ lwc1 $f8,0x38($sp)
/* f0432a0: 4608003e */ c.le.s $f0,$f8
/* f0432a4: 00000000 */ nop
/* f0432a8: 45020008 */ bc1fl .L0f0432cc
/* f0432ac: 8e0d02d4 */ lw $t5,0x2d4($s0)
/* f0432b0: 8e0a004c */ lw $t2,0x4c($s0)
/* f0432b4: 240c0002 */ addiu $t4,$zero,0x2
/* f0432b8: a20c0030 */ sb $t4,0x30($s0)
/* f0432bc: 354b0040 */ ori $t3,$t2,0x40
/* f0432c0: 10000042 */ b .L0f0433cc
/* f0432c4: ae0b004c */ sw $t3,0x4c($s0)
.L0f0432c8:
/* f0432c8: 8e0d02d4 */ lw $t5,0x2d4($s0)
.L0f0432cc:
/* f0432cc: 15a0003d */ bnez $t5,.L0f0433c4
/* f0432d0: 00000000 */ nop
/* f0432d4: 820e0036 */ lb $t6,0x36($s0)
/* f0432d8: 15c0003a */ bnez $t6,.L0f0433c4
/* f0432dc: 00000000 */ nop
/* f0432e0: 8e0f002c */ lw $t7,0x2c($s0)
/* f0432e4: 44805000 */ mtc1 $zero,$f10
/* f0432e8: c7b00038 */ lwc1 $f16,0x38($sp)
/* f0432ec: c5e00024 */ lwc1 $f0,0x24($t7)
/* f0432f0: 4600503c */ c.lt.s $f10,$f0
/* f0432f4: 00000000 */ nop
/* f0432f8: 45000032 */ bc1f .L0f0433c4
/* f0432fc: 00000000 */ nop
/* f043300: 4600803e */ c.le.s $f16,$f0
/* f043304: 00000000 */ nop
/* f043308: 4500002e */ bc1f .L0f0433c4
/* f04330c: 00000000 */ nop
/* f043310: 0c007468 */ jal modelGetAnimEndFrame
/* f043314: 8fa4003c */ lw $a0,0x3c($sp)
/* f043318: c7b20038 */ lwc1 $f18,0x38($sp)
/* f04331c: 4612003e */ c.le.s $f0,$f18
/* f043320: 00000000 */ nop
/* f043324: 45000027 */ bc1f .L0f0433c4
/* f043328: 00000000 */ nop
/* f04332c: 0c00744f */ jal modelGetAnimNum
/* f043330: 8fa4003c */ lw $a0,0x3c($sp)
/* f043334: 3c063f4c */ lui $a2,0x3f4c
/* f043338: 34c6cccd */ ori $a2,$a2,0xcccd
/* f04333c: a7a2002e */ sh $v0,0x2e($sp)
/* f043340: 02002025 */ or $a0,$s0,$zero
/* f043344: 0fc0b857 */ jal chrGetRangedSpeed
/* f043348: 3c053f00 */ lui $a1,0x3f00
/* f04334c: 8fa4003c */ lw $a0,0x3c($sp)
/* f043350: 8e08002c */ lw $t0,0x2c($s0)
/* f043354: 3c014180 */ lui $at,0x4180
/* f043358: 8c990020 */ lw $t9,0x20($a0)
/* f04335c: 44812000 */ mtc1 $at,$f4
/* f043360: 8d070024 */ lw $a3,0x24($t0)
/* f043364: 83260008 */ lb $a2,0x8($t9)
/* f043368: e7a00010 */ swc1 $f0,0x10($sp)
/* f04336c: 87a5002e */ lh $a1,0x2e($sp)
/* f043370: 0c007733 */ jal modelSetAnimation
/* f043374: e7a40014 */ swc1 $f4,0x14($sp)
/* f043378: 82090037 */ lb $t1,0x37($s0)
/* f04337c: 5120000e */ beqzl $t1,.L0f0433b8
/* f043380: 8e0b002c */ lw $t3,0x2c($s0)
/* f043384: 8e0a002c */ lw $t2,0x2c($s0)
/* f043388: 44803000 */ mtc1 $zero,$f6
/* f04338c: c5400014 */ lwc1 $f0,0x14($t2)
/* f043390: 4600303e */ c.le.s $f6,$f0
/* f043394: 00000000 */ nop
/* f043398: 4500000a */ bc1f .L0f0433c4
/* f04339c: 00000000 */ nop
/* f0433a0: 44050000 */ mfc1 $a1,$f0
/* f0433a4: 0c007787 */ jal modelSetAnimEndFrame
/* f0433a8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0433ac: 10000005 */ b .L0f0433c4
/* f0433b0: 00000000 */ nop
/* f0433b4: 8e0b002c */ lw $t3,0x2c($s0)
.L0f0433b8:
/* f0433b8: 8fa4003c */ lw $a0,0x3c($sp)
/* f0433bc: 0c007787 */ jal modelSetAnimEndFrame
/* f0433c0: 8d65001c */ lw $a1,0x1c($t3)
.L0f0433c4:
/* f0433c4: 0fc10792 */ jal func0f041e48
/* f0433c8: 02002025 */ or $a0,$s0,$zero
.L0f0433cc:
/* f0433cc: 8fbf0024 */ lw $ra,0x24($sp)
.L0f0433d0:
/* f0433d0: 8fb00020 */ lw $s0,0x20($sp)
/* f0433d4: 27bd0040 */ addiu $sp,$sp,0x40
/* f0433d8: 03e00008 */ jr $ra
/* f0433dc: 00000000 */ nop
);
#endif
GLOBAL_ASM(
glabel chrTickAttackRoll
/* f0433e0: 27bdffb8 */ addiu $sp,$sp,-72
/* f0433e4: afbf001c */ sw $ra,0x1c($sp)
/* f0433e8: afa40048 */ sw $a0,0x48($sp)
/* f0433ec: 8c8f0014 */ lw $t7,0x14($a0)
/* f0433f0: 000fc280 */ sll $t8,$t7,0xa
/* f0433f4: 0703000e */ bgezl $t8,.L0f043430
/* f0433f8: 8fa90048 */ lw $t1,0x48($sp)
/* f0433fc: 0c0076e5 */ jal modelIsAnimMerging
/* f043400: 8c840020 */ lw $a0,0x20($a0)
/* f043404: 5440014c */ bnezl $v0,.L0f043938
/* f043408: 8fbf001c */ lw $ra,0x1c($sp)
/* f04340c: 0fc0c290 */ jal chrAttackRollChooseAnimation
/* f043410: 8fa40048 */ lw $a0,0x48($sp)
/* f043414: 8fa20048 */ lw $v0,0x48($sp)
/* f043418: 3c01ffdf */ lui $at,0xffdf
/* f04341c: 3421ffff */ ori $at,$at,0xffff
/* f043420: 8c590014 */ lw $t9,0x14($v0)
/* f043424: 03214024 */ and $t0,$t9,$at
/* f043428: ac480014 */ sw $t0,0x14($v0)
/* f04342c: 8fa90048 */ lw $t1,0x48($sp)
.L0f043430:
/* f043430: 812a0035 */ lb $t2,0x35($t1)
/* f043434: 1140013d */ beqz $t2,.L0f04392c
/* f043438: 00000000 */ nop
/* f04343c: 8d240020 */ lw $a0,0x20($t1)
/* f043440: 0c00745f */ jal modelGetCurAnimFrame
/* f043444: afa40044 */ sw $a0,0x44($sp)
/* f043448: 8fa70048 */ lw $a3,0x48($sp)
/* f04344c: 3c0b8006 */ lui $t3,%hi(var80067548)
/* f043450: 256b7548 */ addiu $t3,$t3,%lo(var80067548)
/* f043454: 8ce2002c */ lw $v0,0x2c($a3)
/* f043458: 3c0c8006 */ lui $t4,%hi(var80067590)
/* f04345c: 46000306 */ mov.s $f12,$f0
/* f043460: 11620009 */ beq $t3,$v0,.L0f043488
/* f043464: 258c7590 */ addiu $t4,$t4,%lo(var80067590)
/* f043468: 11820007 */ beq $t4,$v0,.L0f043488
/* f04346c: 3c0d8006 */ lui $t5,%hi(var800675d8)
/* f043470: 25ad75d8 */ addiu $t5,$t5,%lo(var800675d8)
/* f043474: 11a20004 */ beq $t5,$v0,.L0f043488
/* f043478: 3c0f8006 */ lui $t7,%hi(var80067620)
/* f04347c: 25ef7620 */ addiu $t7,$t7,%lo(var80067620)
/* f043480: 15e200c8 */ bne $t7,$v0,.L0f0437a4
/* f043484: 3c0c8006 */ lui $t4,%hi(var80067668)
.L0f043488:
/* f043488: c4440014 */ lwc1 $f4,0x14($v0)
/* f04348c: 8fb80044 */ lw $t8,0x44($sp)
/* f043490: 4600203e */ c.le.s $f4,$f0
/* f043494: 00000000 */ nop
/* f043498: 450000c0 */ bc1f .L0f04379c
/* f04349c: 00000000 */ nop
/* f0434a0: 8f0e0020 */ lw $t6,0x20($t8)
/* f0434a4: 3c014180 */ lui $at,0x4180
/* f0434a8: 44811000 */ mtc1 $at,$f2
/* f0434ac: 81d90008 */ lb $t9,0x8($t6)
/* f0434b0: 24430120 */ addiu $v1,$v0,0x120
/* f0434b4: afb90038 */ sw $t9,0x38($sp)
/* f0434b8: 80e80039 */ lb $t0,0x39($a3)
/* f0434bc: 11000010 */ beqz $t0,.L0f043500
/* f0434c0: 00000000 */ nop
/* f0434c4: 80ea0038 */ lb $t2,0x38($a3)
/* f0434c8: 1140000d */ beqz $t2,.L0f043500
/* f0434cc: 00000000 */ nop
/* f0434d0: afa3003c */ sw $v1,0x3c($sp)
/* f0434d4: 0c004b70 */ jal random
/* f0434d8: e7a20034 */ swc1 $f2,0x34($sp)
/* f0434dc: 30490001 */ andi $t1,$v0,0x1
/* f0434e0: 8fa3003c */ lw $v1,0x3c($sp)
/* f0434e4: 15200004 */ bnez $t1,.L0f0434f8
/* f0434e8: c7a20034 */ lwc1 $f2,0x34($sp)
/* f0434ec: 24630120 */ addiu $v1,$v1,0x120
/* f0434f0: 10000003 */ b .L0f043500
/* f0434f4: 8fa70048 */ lw $a3,0x48($sp)
.L0f0434f8:
/* f0434f8: 24630240 */ addiu $v1,$v1,0x240
/* f0434fc: 8fa70048 */ lw $a3,0x48($sp)
.L0f043500:
/* f043500: 3c028006 */ lui $v0,%hi(var80067428)
/* f043504: 24427428 */ addiu $v0,$v0,%lo(var80067428)
/* f043508: 244b0240 */ addiu $t3,$v0,0x240
/* f04350c: 146b0005 */ bne $v1,$t3,.L0f043524
/* f043510: 00e02025 */ or $a0,$a3,$zero
/* f043514: 3c0141c0 */ lui $at,0x41c0
/* f043518: 44811000 */ mtc1 $at,$f2
/* f04351c: 10000043 */ b .L0f04362c
/* f043520: 240d0002 */ addiu $t5,$zero,0x2
.L0f043524:
/* f043524: 244c0288 */ addiu $t4,$v0,0x288
/* f043528: 146c0005 */ bne $v1,$t4,.L0f043540
/* f04352c: 244d02d0 */ addiu $t5,$v0,0x2d0
/* f043530: 3c0141c0 */ lui $at,0x41c0
/* f043534: 44811000 */ mtc1 $at,$f2
/* f043538: 1000003c */ b .L0f04362c
/* f04353c: 240d0002 */ addiu $t5,$zero,0x2
.L0f043540:
/* f043540: 146d0005 */ bne $v1,$t5,.L0f043558
/* f043544: 244f0318 */ addiu $t7,$v0,0x318
/* f043548: 3c014200 */ lui $at,0x4200
/* f04354c: 44811000 */ mtc1 $at,$f2
/* f043550: 10000036 */ b .L0f04362c
/* f043554: 240d0002 */ addiu $t5,$zero,0x2
.L0f043558:
/* f043558: 146f0005 */ bne $v1,$t7,.L0f043570
/* f04355c: 24580360 */ addiu $t8,$v0,0x360
/* f043560: 3c014230 */ lui $at,0x4230
/* f043564: 44811000 */ mtc1 $at,$f2
/* f043568: 10000030 */ b .L0f04362c
/* f04356c: 240d0002 */ addiu $t5,$zero,0x2
.L0f043570:
/* f043570: 14780005 */ bne $v1,$t8,.L0f043588
/* f043574: 244e03a8 */ addiu $t6,$v0,0x3a8
/* f043578: 3c0141c0 */ lui $at,0x41c0
/* f04357c: 44811000 */ mtc1 $at,$f2
/* f043580: 1000002a */ b .L0f04362c
/* f043584: 240d0002 */ addiu $t5,$zero,0x2
.L0f043588:
/* f043588: 146e0005 */ bne $v1,$t6,.L0f0435a0
/* f04358c: 245903f0 */ addiu $t9,$v0,0x3f0
/* f043590: 3c014208 */ lui $at,0x4208
/* f043594: 44811000 */ mtc1 $at,$f2
/* f043598: 10000024 */ b .L0f04362c
/* f04359c: 240d0002 */ addiu $t5,$zero,0x2
.L0f0435a0:
/* f0435a0: 14790005 */ bne $v1,$t9,.L0f0435b8
/* f0435a4: 24480438 */ addiu $t0,$v0,0x438
/* f0435a8: 3c014200 */ lui $at,0x4200
/* f0435ac: 44811000 */ mtc1 $at,$f2
/* f0435b0: 1000001e */ b .L0f04362c
/* f0435b4: 240d0002 */ addiu $t5,$zero,0x2
.L0f0435b8:
/* f0435b8: 14680005 */ bne $v1,$t0,.L0f0435d0
/* f0435bc: 244a0480 */ addiu $t2,$v0,0x480
/* f0435c0: 3c014230 */ lui $at,0x4230
/* f0435c4: 44811000 */ mtc1 $at,$f2
/* f0435c8: 10000018 */ b .L0f04362c
/* f0435cc: 240d0002 */ addiu $t5,$zero,0x2
.L0f0435d0:
/* f0435d0: 146a0005 */ bne $v1,$t2,.L0f0435e8
/* f0435d4: 244904c8 */ addiu $t1,$v0,0x4c8
/* f0435d8: 3c0141c0 */ lui $at,0x41c0
/* f0435dc: 44811000 */ mtc1 $at,$f2
/* f0435e0: 10000012 */ b .L0f04362c
/* f0435e4: 240d0002 */ addiu $t5,$zero,0x2
.L0f0435e8:
/* f0435e8: 14690005 */ bne $v1,$t1,.L0f043600
/* f0435ec: 244b0510 */ addiu $t3,$v0,0x510
/* f0435f0: 3c014208 */ lui $at,0x4208
/* f0435f4: 44811000 */ mtc1 $at,$f2
/* f0435f8: 1000000c */ b .L0f04362c
/* f0435fc: 240d0002 */ addiu $t5,$zero,0x2
.L0f043600:
/* f043600: 146b0005 */ bne $v1,$t3,.L0f043618
/* f043604: 244c0558 */ addiu $t4,$v0,0x558
/* f043608: 3c014200 */ lui $at,0x4200
/* f04360c: 44811000 */ mtc1 $at,$f2
/* f043610: 10000006 */ b .L0f04362c
/* f043614: 240d0002 */ addiu $t5,$zero,0x2
.L0f043618:
/* f043618: 146c0003 */ bne $v1,$t4,.L0f043628
/* f04361c: 3c014230 */ lui $at,0x4230
/* f043620: 44811000 */ mtc1 $at,$f2
/* f043624: 00000000 */ nop
.L0f043628:
/* f043628: 240d0002 */ addiu $t5,$zero,0x2
.L0f04362c:
/* f04362c: a0ed0030 */ sb $t5,0x30($a3)
/* f043630: ace3002c */ sw $v1,0x2c($a3)
/* f043634: a0e00008 */ sb $zero,0x8($a3)
/* f043638: 3c063f4c */ lui $a2,0x3f4c
/* f04363c: 34c6cccd */ ori $a2,$a2,0xcccd
/* f043640: e7a20034 */ swc1 $f2,0x34($sp)
/* f043644: afa3003c */ sw $v1,0x3c($sp)
/* f043648: 0fc0b857 */ jal chrGetRangedSpeed
/* f04364c: 3c053f00 */ lui $a1,0x3f00
/* f043650: 8fa3003c */ lw $v1,0x3c($sp)
/* f043654: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043658: 8fa40044 */ lw $a0,0x44($sp)
/* f04365c: 84650000 */ lh $a1,0x0($v1)
/* f043660: 8c670010 */ lw $a3,0x10($v1)
/* f043664: e7a00010 */ swc1 $f0,0x10($sp)
/* f043668: 8fa60038 */ lw $a2,0x38($sp)
/* f04366c: 0c007733 */ jal modelSetAnimation
/* f043670: e7a20014 */ swc1 $f2,0x14($sp)
/* f043674: 8faf0048 */ lw $t7,0x48($sp)
/* f043678: 8fa3003c */ lw $v1,0x3c($sp)
/* f04367c: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043680: 81f80036 */ lb $t8,0x36($t7)
/* f043684: 53000014 */ beqzl $t8,.L0f0436d8
/* f043688: c4600020 */ lwc1 $f0,0x20($v1)
/* f04368c: c4600024 */ lwc1 $f0,0x24($v1)
/* f043690: 44803000 */ mtc1 $zero,$f6
/* f043694: 8fa40044 */ lw $a0,0x44($sp)
/* f043698: 4600303e */ c.le.s $f6,$f0
/* f04369c: 00000000 */ nop
/* f0436a0: 45020008 */ bc1fl .L0f0436c4
/* f0436a4: 8c65001c */ lw $a1,0x1c($v1)
/* f0436a8: 44050000 */ mfc1 $a1,$f0
/* f0436ac: 8fa40044 */ lw $a0,0x44($sp)
/* f0436b0: 0c007787 */ jal modelSetAnimEndFrame
/* f0436b4: e7a20034 */ swc1 $f2,0x34($sp)
/* f0436b8: 1000001d */ b .L0f043730
/* f0436bc: c7a20034 */ lwc1 $f2,0x34($sp)
/* f0436c0: 8c65001c */ lw $a1,0x1c($v1)
.L0f0436c4:
/* f0436c4: 0c007787 */ jal modelSetAnimEndFrame
/* f0436c8: e7a20034 */ swc1 $f2,0x34($sp)
/* f0436cc: 10000018 */ b .L0f043730
/* f0436d0: c7a20034 */ lwc1 $f2,0x34($sp)
/* f0436d4: c4600020 */ lwc1 $f0,0x20($v1)
.L0f0436d8:
/* f0436d8: 44804000 */ mtc1 $zero,$f8
/* f0436dc: 8fa40044 */ lw $a0,0x44($sp)
/* f0436e0: 4600403e */ c.le.s $f8,$f0
/* f0436e4: 00000000 */ nop
/* f0436e8: 45020007 */ bc1fl .L0f043708
/* f0436ec: c4600014 */ lwc1 $f0,0x14($v1)
/* f0436f0: 44050000 */ mfc1 $a1,$f0
/* f0436f4: 0c007787 */ jal modelSetAnimEndFrame
/* f0436f8: e7a20034 */ swc1 $f2,0x34($sp)
/* f0436fc: 1000000c */ b .L0f043730
/* f043700: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043704: c4600014 */ lwc1 $f0,0x14($v1)
.L0f043708:
/* f043708: 44805000 */ mtc1 $zero,$f10
/* f04370c: 8fa40044 */ lw $a0,0x44($sp)
/* f043710: 4600503e */ c.le.s $f10,$f0
/* f043714: 00000000 */ nop
/* f043718: 45020006 */ bc1fl .L0f043734
/* f04371c: 8fae0048 */ lw $t6,0x48($sp)
/* f043720: 44050000 */ mfc1 $a1,$f0
/* f043724: 0c007787 */ jal modelSetAnimEndFrame
/* f043728: e7a20034 */ swc1 $f2,0x34($sp)
/* f04372c: c7a20034 */ lwc1 $f2,0x34($sp)
.L0f043730:
/* f043730: 8fae0048 */ lw $t6,0x48($sp)
.L0f043734:
/* f043734: 44808000 */ mtc1 $zero,$f16
/* f043738: 8fa40044 */ lw $a0,0x44($sp)
/* f04373c: 8dd9002c */ lw $t9,0x2c($t6)
/* f043740: c732000c */ lwc1 $f18,0xc($t9)
/* f043744: 46128032 */ c.eq.s $f16,$f18
/* f043748: 00000000 */ nop
/* f04374c: 45010013 */ bc1t .L0f04379c
/* f043750: 00000000 */ nop
/* f043754: 8c880008 */ lw $t0,0x8($a0)
/* f043758: 8d050000 */ lw $a1,0x0($t0)
/* f04375c: 0c006a87 */ jal modelGetNodeRwData
/* f043760: e7a20034 */ swc1 $f2,0x34($sp)
/* f043764: c7a20034 */ lwc1 $f2,0x34($sp)
/* f043768: e442005c */ swc1 $f2,0x5c($v0)
/* f04376c: 8faa0048 */ lw $t2,0x48($sp)
/* f043770: 8d49002c */ lw $t1,0x2c($t2)
/* f043774: c524000c */ lwc1 $f4,0xc($t1)
/* f043778: 46002187 */ neg.s $f6,$f4
/* f04377c: 46023203 */ div.s $f8,$f6,$f2
/* f043780: e4480058 */ swc1 $f8,0x58($v0)
/* f043784: 8fab0038 */ lw $t3,0x38($sp)
/* f043788: 11600004 */ beqz $t3,.L0f04379c
/* f04378c: 00000000 */ nop
/* f043790: c44a0058 */ lwc1 $f10,0x58($v0)
/* f043794: 46005407 */ neg.s $f16,$f10
/* f043798: e4500058 */ swc1 $f16,0x58($v0)
.L0f04379c:
/* f04379c: 10000063 */ b .L0f04392c
/* f0437a0: 00000000 */ nop
.L0f0437a4:
/* f0437a4: 258c7668 */ addiu $t4,$t4,%lo(var80067668)
/* f0437a8: 11820022 */ beq $t4,$v0,.L0f043834
/* f0437ac: 3c0d8006 */ lui $t5,%hi(var800676b0)
/* f0437b0: 25ad76b0 */ addiu $t5,$t5,%lo(var800676b0)
/* f0437b4: 11a2001f */ beq $t5,$v0,.L0f043834
/* f0437b8: 3c0f8006 */ lui $t7,%hi(var800676f8)
/* f0437bc: 25ef76f8 */ addiu $t7,$t7,%lo(var800676f8)
/* f0437c0: 11e2001c */ beq $t7,$v0,.L0f043834
/* f0437c4: 3c188006 */ lui $t8,%hi(var80067740)
/* f0437c8: 27187740 */ addiu $t8,$t8,%lo(var80067740)
/* f0437cc: 13020019 */ beq $t8,$v0,.L0f043834
/* f0437d0: 3c0e8006 */ lui $t6,%hi(var80067788)
/* f0437d4: 25ce7788 */ addiu $t6,$t6,%lo(var80067788)
/* f0437d8: 11c20016 */ beq $t6,$v0,.L0f043834
/* f0437dc: 3c198006 */ lui $t9,%hi(var800677d0)
/* f0437e0: 273977d0 */ addiu $t9,$t9,%lo(var800677d0)
/* f0437e4: 13220013 */ beq $t9,$v0,.L0f043834
/* f0437e8: 3c088006 */ lui $t0,%hi(var80067818)
/* f0437ec: 25087818 */ addiu $t0,$t0,%lo(var80067818)
/* f0437f0: 11020010 */ beq $t0,$v0,.L0f043834
/* f0437f4: 3c0a8006 */ lui $t2,%hi(var80067860)
/* f0437f8: 254a7860 */ addiu $t2,$t2,%lo(var80067860)
/* f0437fc: 1142000d */ beq $t2,$v0,.L0f043834
/* f043800: 3c098006 */ lui $t1,%hi(var800678a8)
/* f043804: 252978a8 */ addiu $t1,$t1,%lo(var800678a8)
/* f043808: 1122000a */ beq $t1,$v0,.L0f043834
/* f04380c: 3c0b8006 */ lui $t3,%hi(var800678f0)
/* f043810: 256b78f0 */ addiu $t3,$t3,%lo(var800678f0)
/* f043814: 11620007 */ beq $t3,$v0,.L0f043834
/* f043818: 3c0c8006 */ lui $t4,%hi(var80067938)
/* f04381c: 258c7938 */ addiu $t4,$t4,%lo(var80067938)
/* f043820: 11820004 */ beq $t4,$v0,.L0f043834
/* f043824: 3c0d8006 */ lui $t5,%hi(var80067980)
/* f043828: 25ad7980 */ addiu $t5,$t5,%lo(var80067980)
/* f04382c: 15a2003f */ bne $t5,$v0,.L0f04392c
/* f043830: 00000000 */ nop
.L0f043834:
/* f043834: 80ef0036 */ lb $t7,0x36($a3)
/* f043838: 15e0003c */ bnez $t7,.L0f04392c
/* f04383c: 00000000 */ nop
/* f043840: c4420024 */ lwc1 $f2,0x24($v0)
/* f043844: 44809000 */ mtc1 $zero,$f18
/* f043848: 00000000 */ nop
/* f04384c: 4602903c */ c.lt.s $f18,$f2
/* f043850: 00000000 */ nop
/* f043854: 45000035 */ bc1f .L0f04392c
/* f043858: 00000000 */ nop
/* f04385c: 4602003e */ c.le.s $f0,$f2
/* f043860: 8fa40044 */ lw $a0,0x44($sp)
/* f043864: 45000031 */ bc1f .L0f04392c
/* f043868: 00000000 */ nop
/* f04386c: 0c007468 */ jal modelGetAnimEndFrame
/* f043870: e7ac0040 */ swc1 $f12,0x40($sp)
/* f043874: c7ac0040 */ lwc1 $f12,0x40($sp)
/* f043878: 460c003e */ c.le.s $f0,$f12
/* f04387c: 00000000 */ nop
/* f043880: 4500002a */ bc1f .L0f04392c
/* f043884: 00000000 */ nop
/* f043888: 0c00744f */ jal modelGetAnimNum
/* f04388c: 8fa40044 */ lw $a0,0x44($sp)
/* f043890: 3c063f4c */ lui $a2,0x3f4c
/* f043894: 34c6cccd */ ori $a2,$a2,0xcccd
/* f043898: a7a20026 */ sh $v0,0x26($sp)
/* f04389c: 8fa40048 */ lw $a0,0x48($sp)
/* f0438a0: 0fc0b857 */ jal chrGetRangedSpeed
/* f0438a4: 3c053f00 */ lui $a1,0x3f00
/* f0438a8: 8fa40044 */ lw $a0,0x44($sp)
/* f0438ac: 8fb90048 */ lw $t9,0x48($sp)
/* f0438b0: 3c014180 */ lui $at,0x4180
/* f0438b4: 8c8e0020 */ lw $t6,0x20($a0)
/* f0438b8: 8f28002c */ lw $t0,0x2c($t9)
/* f0438bc: 44812000 */ mtc1 $at,$f4
/* f0438c0: 81c60008 */ lb $a2,0x8($t6)
/* f0438c4: 8d070024 */ lw $a3,0x24($t0)
/* f0438c8: e7a00010 */ swc1 $f0,0x10($sp)
/* f0438cc: 87a50026 */ lh $a1,0x26($sp)
/* f0438d0: 0c007733 */ jal modelSetAnimation
/* f0438d4: e7a40014 */ swc1 $f4,0x14($sp)
/* f0438d8: 8faa0048 */ lw $t2,0x48($sp)
/* f0438dc: 8fac0048 */ lw $t4,0x48($sp)
/* f0438e0: 81490037 */ lb $t1,0x37($t2)
/* f0438e4: 5120000e */ beqzl $t1,.L0f043920
/* f0438e8: 8d8d002c */ lw $t5,0x2c($t4)
/* f0438ec: 8d4b002c */ lw $t3,0x2c($t2)
/* f0438f0: 44803000 */ mtc1 $zero,$f6
/* f0438f4: c5600014 */ lwc1 $f0,0x14($t3)
/* f0438f8: 4600303e */ c.le.s $f6,$f0
/* f0438fc: 00000000 */ nop
/* f043900: 4500000a */ bc1f .L0f04392c
/* f043904: 00000000 */ nop
/* f043908: 44050000 */ mfc1 $a1,$f0
/* f04390c: 0c007787 */ jal modelSetAnimEndFrame
/* f043910: 8fa40044 */ lw $a0,0x44($sp)
/* f043914: 10000005 */ b .L0f04392c
/* f043918: 00000000 */ nop
/* f04391c: 8d8d002c */ lw $t5,0x2c($t4)
.L0f043920:
/* f043920: 8fa40044 */ lw $a0,0x44($sp)
/* f043924: 0c007787 */ jal modelSetAnimEndFrame
/* f043928: 8da5001c */ lw $a1,0x1c($t5)
.L0f04392c:
/* f04392c: 0fc10792 */ jal func0f041e48
/* f043930: 8fa40048 */ lw $a0,0x48($sp)
/* f043934: 8fbf001c */ lw $ra,0x1c($sp)
.L0f043938:
/* f043938: 27bd0048 */ addiu $sp,$sp,0x48
/* f04393c: 03e00008 */ jr $ra
/* f043940: 00000000 */ nop
);
void propPrintDangerous(void)
{
u8 i;
osSyncPrintf("Current dangerous items:");
for (i = 0; i < MAX_DANGEROUSPROPS; i++) {
struct prop *prop = g_DangerousProps[i];
if (prop) {
if (prop->weapon
&& prop->weapon->weaponnum == WEAPON_GRENADE
&& prop->type == PROPTYPE_WEAPON) {
osSyncPrintf(" Grenade %x", prop);
} else if (prop->type == PROPTYPE_EXPLOSION) {
osSyncPrintf(" Explosion %x", prop);
} else {
osSyncPrintf("misc dangerous prop");
}
}
}
}
void propUnsetDangerous(struct prop *prop)
{
s32 i;
for (i = 0; i != MAX_DANGEROUSPROPS; i++) {
if (g_DangerousProps[i] == prop) {
g_DangerousProps[i] = NULL;
return;
}
}
}
void propSetDangerous(struct prop *prop)
{
s32 i;
for (i = 0; i != MAX_DANGEROUSPROPS; i++) {
if (g_DangerousProps[i] == NULL) {
g_DangerousProps[i] = prop;
return;
}
}
}
void chrTickThrowGrenade(struct chrdata *chr)
{
struct model *model;
f32 frame;
u32 hand;
struct prop *weaponprop;
struct defaultobj *obj;
struct weaponobj *weapon;
f32 frame2;
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrThrowGrenadeChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
model = chr->model;
frame = modelGetCurAnimFrame(model);
hand = model->anim->flip ? 1 : 0;
weaponprop = chrGetEquippedWeaponProp(chr, hand);
if ((frame >= 20 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING) ||
(frame >= 1 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
(frame >= 1 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
obj = weaponprop->obj;
obj->hidden &= ~OBJHFLAG_00000800;
}
if ((frame >= 119 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING) ||
(frame >= 57 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
(frame >= 58 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
weapon = weaponprop->weapon;
propobjSetDropped(weaponprop, DROPREASON_3);
chr->hidden |= CHRHFLAG_00000001;
weapon->timer240 = PALDOWN(240);
}
frame2 = modelGetCurAnimFrame(model);
if (frame2 >= modelGetAnimEndFrame(model)) {
chrStop(chr);
} else {
if ((frame >= 87 && frame <= 110 && modelGetAnimNum(model) == ANIM_THROWGRENADE_STANDING) ||
(frame >= 5 && frame <= 45 && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
((frame >= 20 && frame <= 45 && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING))) {
f32 value = chrGetRangedSpeed(chr, 1, 3.2);
func0f03e788(chr, 1, 110, value, 0);
}
}
}
bool chrDetectDangerousObject(struct chrdata *chr, u8 flags)
{
s32 i;
for (i = 0; i != MAX_DANGEROUSPROPS; i++) {
struct prop *prop = g_DangerousProps[i];
bool pass = false;
if (prop) {
if ((flags & 1) && prop->weapon &&
prop->weapon->weaponnum == WEAPON_GRENADE &&
prop->weapon->timer240 < PALDOWN(480)) {
pass = true;
}
if ((flags & 2) && prop->type == PROPTYPE_EXPLOSION) {
pass = true;
}
if (pass && chrGetSquaredDistanceToCoord(chr, &prop->pos) < 1600) {
chr->runfrompos.x = g_DangerousProps[i]->pos.x;
chr->runfrompos.y = g_DangerousProps[i]->pos.y;
chr->runfrompos.z = g_DangerousProps[i]->pos.z;
if (chr->aibot) {
chr->aibot->unk064 |= 0x0004;
chr->aibot->dangerouspropnum = i;
}
return true;
}
}
}
if (chr->aibot) {
chr->aibot->unk064 &= ~0x0004;
chr->aibot->dangerouspropnum = -1;
}
return false;
}
void chrTickBondDie(struct chrdata *chr)
{
// empty
}
#if VERSION >= VERSION_PAL_FINAL
const char var7f1a8ba0[] = "chr/chraction.c";
const char var7f1a8bac[] = "chr/chraction.c";
const char var7f1a8bb8[] = "chr/chraction.c";
const char var7f1a8bc4[] = "chr/chraction.c";
const char var7f1a8bd0[] = "chr/chraction.c";
const char var7f1a8bdc[] = "chr/chraction.c";
#else
const char var7f1a8ba0[] = "chraction.c";
const char var7f1a8bac[] = "chraction.c";
const char var7f1a8bb8[] = "chraction.c";
const char var7f1a8bc4[] = "chraction.c";
const char var7f1a8bd0[] = "chraction.c";
const char var7f1a8bdc[] = "chraction.c";
#endif
#if VERSION >= VERSION_NTSC_1_0
const char var7f1a8be8[] = "CHARS -> FRAMETIMESCALEI(240) = %d";
const char var7f1a8c0c[] = "CHARS -> numseenbond1 \t= %d/%d";
const char var7f1a8c30[] = "CHARS -> numseenbond2 \t= %d/%d";
const char var7f1a8c54[] = "CHARS -> numseenbond3 \t= %d/%d";
const char var7f1a8c78[] = "CHARS -> numseenbond \t= %d/%d";
#endif
const char var7f1a8c9c[] = "CHARS -> DEAD = %d/%d";
const char var7f1a8cb4[] = "chrdisttopad : %x -> %d : Dist=%f";
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f043f2c
.late_rodata
glabel var7f1a91e4
.word 0x40c907a9
glabel var7f1a91e8
.word 0x40c907a9
glabel var7f1a91ec
.word 0x3bcddaca
glabel var7f1a91f0
.word 0x40c907a9
glabel var7f1a91f4
.word 0x39c59ed7
glabel var7f1a91f8
.word 0x404907a9
glabel var7f1a91fc
.word 0x3e992a68
glabel var7f1a9200
.word 0x3c7510a7
glabel var7f1a9204
.word 0x3ec907a9
glabel var7f1a9208
.word 0x3ca0d2ee
glabel var7f1a920c
.word 0x3fa0d2ee
glabel var7f1a9210
.word 0x3dc907a9
glabel var7f1a9214
.word 0x3e4907a9
glabel var7f1a9218
.word 0x3c7510a7
glabel var7f1a921c
.word 0x3ec907a9
glabel var7f1a9220
.word 0x3c20d2ee
glabel var7f1a9224
.word 0x3fa0d2ee
glabel var7f1a9228
.word 0x3d4907a9
glabel var7f1a922c
.word 0x3e00a8be
glabel var7f1a9230
.word 0x3c20d2ee
glabel var7f1a9234
.word 0x3c23d70a
.text
/* f043f2c: 27bdffa8 */ addiu $sp,$sp,-88
/* f043f30: afbf001c */ sw $ra,0x1c($sp)
/* f043f34: afa60060 */ sw $a2,0x60($sp)
/* f043f38: afa70064 */ sw $a3,0x64($sp)
/* f043f3c: 8c8e0020 */ lw $t6,0x20($a0)
/* f043f40: 8c82001c */ lw $v0,0x1c($a0)
/* f043f44: afae0050 */ sw $t6,0x50($sp)
/* f043f48: c4a40000 */ lwc1 $f4,0x0($a1)
/* f043f4c: c4a80008 */ lwc1 $f8,0x8($a1)
/* f043f50: c4460008 */ lwc1 $f6,0x8($v0)
/* f043f54: c44a0010 */ lwc1 $f10,0x10($v0)
/* f043f58: afa0002c */ sw $zero,0x2c($sp)
/* f043f5c: afa40058 */ sw $a0,0x58($sp)
/* f043f60: 46062301 */ sub.s $f12,$f4,$f6
/* f043f64: 0fc259d4 */ jal atan2f
/* f043f68: 460a4381 */ sub.s $f14,$f8,$f10
/* f043f6c: 8fa40058 */ lw $a0,0x58($sp)
/* f043f70: 0fc0f95e */ jal func0f03e578
/* f043f74: e7a00044 */ swc1 $f0,0x44($sp)
/* f043f78: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f043f7c: 8fa20060 */ lw $v0,0x60($sp)
/* f043f80: e7a00040 */ swc1 $f0,0x40($sp)
/* f043f84: 4600703c */ c.lt.s $f14,$f0
/* f043f88: 3c017f1b */ lui $at,%hi(var7f1a91e4)
/* f043f8c: 46007301 */ sub.s $f12,$f14,$f0
/* f043f90: 8faf0058 */ lw $t7,0x58($sp)
/* f043f94: 304e0003 */ andi $t6,$v0,0x3
/* f043f98: 45000003 */ bc1f .L0f043fa8
/* f043f9c: 46006086 */ mov.s $f2,$f12
/* f043fa0: c43091e4 */ lwc1 $f16,%lo(var7f1a91e4)($at)
/* f043fa4: 46106080 */ add.s $f2,$f12,$f16
.L0f043fa8:
/* f043fa8: 8df802d4 */ lw $t8,0x2d4($t7)
/* f043fac: 3c017f1b */ lui $at,%hi(var7f1a91e8)
/* f043fb0: c43091e8 */ lwc1 $f16,%lo(var7f1a91e8)($at)
/* f043fb4: 1300002b */ beqz $t8,.L0f044064
/* f043fb8: 3c017f1b */ lui $at,%hi(var7f1a91ec)
/* f043fbc: 85f902d8 */ lh $t9,0x2d8($t7)
/* f043fc0: 3c08800a */ lui $t0,%hi(g_Vars+0x8)
/* f043fc4: 5b200021 */ blezl $t9,.L0f04404c
/* f043fc8: 44804000 */ mtc1 $zero,$f8
/* f043fcc: 8d089fc8 */ lw $t0,%lo(g_Vars+0x8)($t0)
/* f043fd0: 240104b0 */ addiu $at,$zero,0x3e8
/* f043fd4: e7ae0044 */ swc1 $f14,0x44($sp)
/* f043fd8: 0101001a */ div $zero,$t0,$at
/* f043fdc: 00004810 */ mfhi $t1
/* f043fe0: 44899000 */ mtc1 $t1,$f18
/* f043fe4: 3c017f1b */ lui $at,%hi(var7f1a91f0)
/* f043fe8: c42691ec */ lwc1 $f6,%lo(var7f1a91ec)($at)
/* f043fec: 46809120 */ cvt.s.w $f4,$f18
/* f043ff0: 46062302 */ mul.s $f12,$f4,$f6
/* f043ff4: 0c0068f7 */ jal sinf
/* f043ff8: 00000000 */ nop
/* f043ffc: 8faa0058 */ lw $t2,0x58($sp)
/* f044000: 3c017f1b */ lui $at,%hi(var7f1a91f4)
/* f044004: c43091f0 */ lwc1 $f16,%lo(var7f1a91f0)($at)
/* f044008: 854b02d8 */ lh $t3,0x2d8($t2)
/* f04400c: 3c017f1b */ lui $at,%hi(var7f1a91f8)
/* f044010: c43291f4 */ lwc1 $f18,%lo(var7f1a91f4)($at)
/* f044014: 448b4000 */ mtc1 $t3,$f8
/* f044018: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f04401c: 468042a0 */ cvt.s.w $f10,$f8
/* f044020: 46125102 */ mul.s $f4,$f10,$f18
/* f044024: 00000000 */ nop
/* f044028: 46002182 */ mul.s $f6,$f4,$f0
/* f04402c: 46067380 */ add.s $f14,$f14,$f6
/* f044030: 460e803e */ c.le.s $f16,$f14
/* f044034: 00000000 */ nop
/* f044038: 45000002 */ bc1f .L0f044044
/* f04403c: 00000000 */ nop
/* f044040: 46107381 */ sub.s $f14,$f14,$f16
.L0f044044:
/* f044044: 46107380 */ add.s $f14,$f14,$f16
/* f044048: 44804000 */ mtc1 $zero,$f8
.L0f04404c:
/* f04404c: 8fac0064 */ lw $t4,0x64($sp)
/* f044050: e7ae0040 */ swc1 $f14,0x40($sp)
/* f044054: 240d0001 */ addiu $t5,$zero,0x1
/* f044058: e5880000 */ swc1 $f8,0x0($t4)
/* f04405c: 10000062 */ b .L0f0441e8
/* f044060: afad002c */ sw $t5,0x2c($sp)
.L0f044064:
/* f044064: c42a91f8 */ lwc1 $f10,%lo(var7f1a91f8)($at)
/* f044068: 46001006 */ mov.s $f0,$f2
/* f04406c: 24010002 */ addiu $at,$zero,0x2
/* f044070: 4602503c */ c.lt.s $f10,$f2
/* f044074: 8fb80050 */ lw $t8,0x50($sp)
/* f044078: 45000002 */ bc1f .L0f044084
/* f04407c: 00000000 */ nop
/* f044080: 46028001 */ sub.s $f0,$f16,$f2
.L0f044084:
/* f044084: 15c10006 */ bne $t6,$at,.L0f0440a0
/* f044088: 01c01025 */ or $v0,$t6,$zero
/* f04408c: 3c017f1b */ lui $at,%hi(var7f1a91fc)
/* f044090: c42c91fc */ lwc1 $f12,%lo(var7f1a91fc)($at)
/* f044094: 3c017f1b */ lui $at,%hi(var7f1a9200)
/* f044098: 10000030 */ b .L0f04415c
/* f04409c: c4209200 */ lwc1 $f0,%lo(var7f1a9200)($at)
.L0f0440a0:
/* f0440a0: 24010001 */ addiu $at,$zero,0x1
/* f0440a4: 14410017 */ bne $v0,$at,.L0f044104
/* f0440a8: 3c017f1b */ lui $at,%hi(var7f1a9204)
/* f0440ac: c4329204 */ lwc1 $f18,%lo(var7f1a9204)($at)
/* f0440b0: 3c017f1b */ lui $at,%hi(var7f1a9208)
/* f0440b4: 4612003c */ c.lt.s $f0,$f18
/* f0440b8: 00000000 */ nop
/* f0440bc: 45000004 */ bc1f .L0f0440d0
/* f0440c0: 00000000 */ nop
/* f0440c4: 3c017f1b */ lui $at,%hi(var7f1a920c)
/* f0440c8: 1000000b */ b .L0f0440f8
/* f0440cc: c42c9208 */ lwc1 $f12,%lo(var7f1a9208)($at)
.L0f0440d0:
/* f0440d0: c424920c */ lwc1 $f4,%lo(var7f1a920c)($at)
/* f0440d4: 3c017f1b */ lui $at,%hi(var7f1a9210)
/* f0440d8: 4604003c */ c.lt.s $f0,$f4
/* f0440dc: 00000000 */ nop
/* f0440e0: 45000004 */ bc1f .L0f0440f4
/* f0440e4: 00000000 */ nop
/* f0440e8: 3c017f1b */ lui $at,%hi(var7f1a9214)
/* f0440ec: 10000002 */ b .L0f0440f8
/* f0440f0: c42c9210 */ lwc1 $f12,%lo(var7f1a9210)($at)
.L0f0440f4:
/* f0440f4: c42c9214 */ lwc1 $f12,%lo(var7f1a9214)($at)
.L0f0440f8:
/* f0440f8: 3c017f1b */ lui $at,%hi(var7f1a9218)
/* f0440fc: 10000017 */ b .L0f04415c
/* f044100: c4209218 */ lwc1 $f0,%lo(var7f1a9218)($at)
.L0f044104:
/* f044104: 3c017f1b */ lui $at,%hi(var7f1a921c)
/* f044108: c426921c */ lwc1 $f6,%lo(var7f1a921c)($at)
/* f04410c: 3c017f1b */ lui $at,%hi(var7f1a9220)
/* f044110: 4606003c */ c.lt.s $f0,$f6
/* f044114: 00000000 */ nop
/* f044118: 45000004 */ bc1f .L0f04412c
/* f04411c: 00000000 */ nop
/* f044120: 3c017f1b */ lui $at,%hi(var7f1a9224)
/* f044124: 1000000b */ b .L0f044154
/* f044128: c42c9220 */ lwc1 $f12,%lo(var7f1a9220)($at)
.L0f04412c:
/* f04412c: c4289224 */ lwc1 $f8,%lo(var7f1a9224)($at)
/* f044130: 3c017f1b */ lui $at,%hi(var7f1a9228)
/* f044134: 4608003c */ c.lt.s $f0,$f8
/* f044138: 00000000 */ nop
/* f04413c: 45000004 */ bc1f .L0f044150
/* f044140: 00000000 */ nop
/* f044144: 3c017f1b */ lui $at,%hi(var7f1a922c)
/* f044148: 10000002 */ b .L0f044154
/* f04414c: c42c9228 */ lwc1 $f12,%lo(var7f1a9228)($at)
.L0f044150:
/* f044150: c42c922c */ lwc1 $f12,%lo(var7f1a922c)($at)
.L0f044154:
/* f044154: 3c017f1b */ lui $at,%hi(var7f1a9230)
/* f044158: c4209230 */ lwc1 $f0,%lo(var7f1a9230)($at)
.L0f04415c:
/* f04415c: 8f0f0020 */ lw $t7,0x20($t8)
/* f044160: 44057000 */ mfc1 $a1,$f14
/* f044164: 27a40040 */ addiu $a0,$sp,0x40
/* f044168: c5e20074 */ lwc1 $f2,0x74($t7)
/* f04416c: e7ae0044 */ swc1 $f14,0x44($sp)
/* f044170: 8fa60064 */ lw $a2,0x64($sp)
/* f044174: 46026302 */ mul.s $f12,$f12,$f2
/* f044178: 00000000 */ nop
/* f04417c: 46020002 */ mul.s $f0,$f0,$f2
/* f044180: e7ac0014 */ swc1 $f12,0x14($sp)
/* f044184: 46000280 */ add.s $f10,$f0,$f0
/* f044188: 44070000 */ mfc1 $a3,$f0
/* f04418c: 0fc1b6c0 */ jal func0f06db00
/* f044190: e7aa0010 */ swc1 $f10,0x10($sp)
/* f044194: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f044198: c7b20040 */ lwc1 $f18,0x40($sp)
/* f04419c: 3c017f1b */ lui $at,%hi(var7f1a9234)
/* f0441a0: c7a40040 */ lwc1 $f4,0x40($sp)
/* f0441a4: 4612703c */ c.lt.s $f14,$f18
/* f0441a8: 8fb90064 */ lw $t9,0x64($sp)
/* f0441ac: 45020004 */ bc1fl .L0f0441c0
/* f0441b0: 460e2001 */ sub.s $f0,$f4,$f14
/* f0441b4: 10000003 */ b .L0f0441c4
/* f0441b8: 460e9001 */ sub.s $f0,$f18,$f14
/* f0441bc: 460e2001 */ sub.s $f0,$f4,$f14
.L0f0441c0:
/* f0441c0: 46000007 */ neg.s $f0,$f0
.L0f0441c4:
/* f0441c4: c4269234 */ lwc1 $f6,%lo(var7f1a9234)($at)
/* f0441c8: 4606003c */ c.lt.s $f0,$f6
/* f0441cc: 00000000 */ nop
/* f0441d0: 45020006 */ bc1fl .L0f0441ec
/* f0441d4: 8fa40058 */ lw $a0,0x58($sp)
/* f0441d8: 44804000 */ mtc1 $zero,$f8
/* f0441dc: 24080001 */ addiu $t0,$zero,0x1
/* f0441e0: e7280000 */ swc1 $f8,0x0($t9)
/* f0441e4: afa8002c */ sw $t0,0x2c($sp)
.L0f0441e8:
/* f0441e8: 8fa40058 */ lw $a0,0x58($sp)
.L0f0441ec:
/* f0441ec: 0fc0f96c */ jal func0f03e5b0
/* f0441f0: 8fa50040 */ lw $a1,0x40($sp)
/* f0441f4: 8fbf001c */ lw $ra,0x1c($sp)
/* f0441f8: 8fa2002c */ lw $v0,0x2c($sp)
/* f0441fc: 27bd0058 */ addiu $sp,$sp,0x58
/* f044200: 03e00008 */ jr $ra
/* f044204: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f043f2c
.late_rodata
glabel var7f1a91e4
.word 0x40c907a9
glabel var7f1a91e8
.word 0x40c907a9
glabel var7f1a91ec
.word 0x3bab8ba8
glabel var7f1a91f0
.word 0x40c907a9
glabel var7f1a91f4
.word 0x39a4af08
glabel var7f1a91f8
.word 0x404907a9
glabel var7f1a91fc
.word 0x3e992a68
glabel var7f1a9200
.word 0x3c7510a7
glabel var7f1a9204
.word 0x3ec907a9
glabel var7f1a9208
.word 0x3ca0d2ee
glabel var7f1a920c
.word 0x3fa0d2ee
glabel var7f1a9210
.word 0x3dc907a9
glabel var7f1a9214
.word 0x3e4907a9
glabel var7f1a9218
.word 0x3c7510a7
glabel var7f1a921c
.word 0x3ec907a9
glabel var7f1a9220
.word 0x3c20d2ee
glabel var7f1a9224
.word 0x3fa0d2ee
glabel var7f1a9228
.word 0x3d4907a9
glabel var7f1a922c
.word 0x3e00a8be
glabel var7f1a9230
.word 0x3c20d2ee
glabel var7f1a9234
.word 0x3c23d70a
.text
/* f043f2c: 27bdffa8 */ addiu $sp,$sp,-88
/* f043f30: afbf001c */ sw $ra,0x1c($sp)
/* f043f34: afa60060 */ sw $a2,0x60($sp)
/* f043f38: afa70064 */ sw $a3,0x64($sp)
/* f043f3c: 8c8e0020 */ lw $t6,0x20($a0)
/* f043f40: 8c82001c */ lw $v0,0x1c($a0)
/* f043f44: afae0050 */ sw $t6,0x50($sp)
/* f043f48: c4a40000 */ lwc1 $f4,0x0($a1)
/* f043f4c: c4a80008 */ lwc1 $f8,0x8($a1)
/* f043f50: c4460008 */ lwc1 $f6,0x8($v0)
/* f043f54: c44a0010 */ lwc1 $f10,0x10($v0)
/* f043f58: afa0002c */ sw $zero,0x2c($sp)
/* f043f5c: afa40058 */ sw $a0,0x58($sp)
/* f043f60: 46062301 */ sub.s $f12,$f4,$f6
/* f043f64: 0fc259d4 */ jal atan2f
/* f043f68: 460a4381 */ sub.s $f14,$f8,$f10
/* f043f6c: 8fa40058 */ lw $a0,0x58($sp)
/* f043f70: 0fc0f95e */ jal func0f03e578
/* f043f74: e7a00044 */ swc1 $f0,0x44($sp)
/* f043f78: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f043f7c: 8fa20060 */ lw $v0,0x60($sp)
/* f043f80: e7a00040 */ swc1 $f0,0x40($sp)
/* f043f84: 4600703c */ c.lt.s $f14,$f0
/* f043f88: 3c017f1b */ lui $at,%hi(var7f1a91e4)
/* f043f8c: 46007301 */ sub.s $f12,$f14,$f0
/* f043f90: 8faf0058 */ lw $t7,0x58($sp)
/* f043f94: 304e0003 */ andi $t6,$v0,0x3
/* f043f98: 45000003 */ bc1f .L0f043fa8
/* f043f9c: 46006086 */ mov.s $f2,$f12
/* f043fa0: c43091e4 */ lwc1 $f16,%lo(var7f1a91e4)($at)
/* f043fa4: 46106080 */ add.s $f2,$f12,$f16
.L0f043fa8:
/* f043fa8: 8df802d4 */ lw $t8,0x2d4($t7)
/* f043fac: 3c017f1b */ lui $at,%hi(var7f1a91e8)
/* f043fb0: c43091e8 */ lwc1 $f16,%lo(var7f1a91e8)($at)
/* f043fb4: 1300002b */ beqz $t8,.L0f044064
/* f043fb8: 3c017f1b */ lui $at,%hi(var7f1a91ec)
/* f043fbc: 85f902d8 */ lh $t9,0x2d8($t7)
/* f043fc0: 3c08800a */ lui $t0,%hi(g_Vars+0x8)
/* f043fc4: 5b200021 */ blezl $t9,.L0f04404c
/* f043fc8: 44804000 */ mtc1 $zero,$f8
/* f043fcc: 8d089fc8 */ lw $t0,%lo(g_Vars+0x8)($t0)
/* f043fd0: 240104b0 */ addiu $at,$zero,0x4b0
/* f043fd4: e7ae0044 */ swc1 $f14,0x44($sp)
/* f043fd8: 0101001a */ div $zero,$t0,$at
/* f043fdc: 00004810 */ mfhi $t1
/* f043fe0: 44899000 */ mtc1 $t1,$f18
/* f043fe4: 3c017f1b */ lui $at,%hi(var7f1a91f0)
/* f043fe8: c42691ec */ lwc1 $f6,%lo(var7f1a91ec)($at)
/* f043fec: 46809120 */ cvt.s.w $f4,$f18
/* f043ff0: 46062302 */ mul.s $f12,$f4,$f6
/* f043ff4: 0c0068f7 */ jal sinf
/* f043ff8: 00000000 */ nop
/* f043ffc: 8faa0058 */ lw $t2,0x58($sp)
/* f044000: 3c017f1b */ lui $at,%hi(var7f1a91f4)
/* f044004: c43091f0 */ lwc1 $f16,%lo(var7f1a91f0)($at)
/* f044008: 854b02d8 */ lh $t3,0x2d8($t2)
/* f04400c: 3c017f1b */ lui $at,%hi(var7f1a91f8)
/* f044010: c43291f4 */ lwc1 $f18,%lo(var7f1a91f4)($at)
/* f044014: 448b4000 */ mtc1 $t3,$f8
/* f044018: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f04401c: 468042a0 */ cvt.s.w $f10,$f8
/* f044020: 46125102 */ mul.s $f4,$f10,$f18
/* f044024: 00000000 */ nop
/* f044028: 46002182 */ mul.s $f6,$f4,$f0
/* f04402c: 46067380 */ add.s $f14,$f14,$f6
/* f044030: 460e803e */ c.le.s $f16,$f14
/* f044034: 00000000 */ nop
/* f044038: 45000002 */ bc1f .L0f044044
/* f04403c: 00000000 */ nop
/* f044040: 46107381 */ sub.s $f14,$f14,$f16
.L0f044044:
/* f044044: 46107380 */ add.s $f14,$f14,$f16
/* f044048: 44804000 */ mtc1 $zero,$f8
.L0f04404c:
/* f04404c: 8fac0064 */ lw $t4,0x64($sp)
/* f044050: e7ae0040 */ swc1 $f14,0x40($sp)
/* f044054: 240d0001 */ addiu $t5,$zero,0x1
/* f044058: e5880000 */ swc1 $f8,0x0($t4)
/* f04405c: 10000062 */ b .L0f0441e8
/* f044060: afad002c */ sw $t5,0x2c($sp)
.L0f044064:
/* f044064: c42a91f8 */ lwc1 $f10,%lo(var7f1a91f8)($at)
/* f044068: 46001006 */ mov.s $f0,$f2
/* f04406c: 24010002 */ addiu $at,$zero,0x2
/* f044070: 4602503c */ c.lt.s $f10,$f2
/* f044074: 8fb80050 */ lw $t8,0x50($sp)
/* f044078: 45000002 */ bc1f .L0f044084
/* f04407c: 00000000 */ nop
/* f044080: 46028001 */ sub.s $f0,$f16,$f2
.L0f044084:
/* f044084: 15c10006 */ bne $t6,$at,.L0f0440a0
/* f044088: 01c01025 */ or $v0,$t6,$zero
/* f04408c: 3c017f1b */ lui $at,%hi(var7f1a91fc)
/* f044090: c42c91fc */ lwc1 $f12,%lo(var7f1a91fc)($at)
/* f044094: 3c017f1b */ lui $at,%hi(var7f1a9200)
/* f044098: 10000030 */ b .L0f04415c
/* f04409c: c4209200 */ lwc1 $f0,%lo(var7f1a9200)($at)
.L0f0440a0:
/* f0440a0: 24010001 */ addiu $at,$zero,0x1
/* f0440a4: 14410017 */ bne $v0,$at,.L0f044104
/* f0440a8: 3c017f1b */ lui $at,%hi(var7f1a9204)
/* f0440ac: c4329204 */ lwc1 $f18,%lo(var7f1a9204)($at)
/* f0440b0: 3c017f1b */ lui $at,%hi(var7f1a9208)
/* f0440b4: 4612003c */ c.lt.s $f0,$f18
/* f0440b8: 00000000 */ nop
/* f0440bc: 45000004 */ bc1f .L0f0440d0
/* f0440c0: 00000000 */ nop
/* f0440c4: 3c017f1b */ lui $at,%hi(var7f1a920c)
/* f0440c8: 1000000b */ b .L0f0440f8
/* f0440cc: c42c9208 */ lwc1 $f12,%lo(var7f1a9208)($at)
.L0f0440d0:
/* f0440d0: c424920c */ lwc1 $f4,%lo(var7f1a920c)($at)
/* f0440d4: 3c017f1b */ lui $at,%hi(var7f1a9210)
/* f0440d8: 4604003c */ c.lt.s $f0,$f4
/* f0440dc: 00000000 */ nop
/* f0440e0: 45000004 */ bc1f .L0f0440f4
/* f0440e4: 00000000 */ nop
/* f0440e8: 3c017f1b */ lui $at,%hi(var7f1a9214)
/* f0440ec: 10000002 */ b .L0f0440f8
/* f0440f0: c42c9210 */ lwc1 $f12,%lo(var7f1a9210)($at)
.L0f0440f4:
/* f0440f4: c42c9214 */ lwc1 $f12,%lo(var7f1a9214)($at)
.L0f0440f8:
/* f0440f8: 3c017f1b */ lui $at,%hi(var7f1a9218)
/* f0440fc: 10000017 */ b .L0f04415c
/* f044100: c4209218 */ lwc1 $f0,%lo(var7f1a9218)($at)
.L0f044104:
/* f044104: 3c017f1b */ lui $at,%hi(var7f1a921c)
/* f044108: c426921c */ lwc1 $f6,%lo(var7f1a921c)($at)
/* f04410c: 3c017f1b */ lui $at,%hi(var7f1a9220)
/* f044110: 4606003c */ c.lt.s $f0,$f6
/* f044114: 00000000 */ nop
/* f044118: 45000004 */ bc1f .L0f04412c
/* f04411c: 00000000 */ nop
/* f044120: 3c017f1b */ lui $at,%hi(var7f1a9224)
/* f044124: 1000000b */ b .L0f044154
/* f044128: c42c9220 */ lwc1 $f12,%lo(var7f1a9220)($at)
.L0f04412c:
/* f04412c: c4289224 */ lwc1 $f8,%lo(var7f1a9224)($at)
/* f044130: 3c017f1b */ lui $at,%hi(var7f1a9228)
/* f044134: 4608003c */ c.lt.s $f0,$f8
/* f044138: 00000000 */ nop
/* f04413c: 45000004 */ bc1f .L0f044150
/* f044140: 00000000 */ nop
/* f044144: 3c017f1b */ lui $at,%hi(var7f1a922c)
/* f044148: 10000002 */ b .L0f044154
/* f04414c: c42c9228 */ lwc1 $f12,%lo(var7f1a9228)($at)
.L0f044150:
/* f044150: c42c922c */ lwc1 $f12,%lo(var7f1a922c)($at)
.L0f044154:
/* f044154: 3c017f1b */ lui $at,%hi(var7f1a9230)
/* f044158: c4209230 */ lwc1 $f0,%lo(var7f1a9230)($at)
.L0f04415c:
/* f04415c: 8f0f0020 */ lw $t7,0x20($t8)
/* f044160: 44057000 */ mfc1 $a1,$f14
/* f044164: 27a40040 */ addiu $a0,$sp,0x40
/* f044168: c5e20074 */ lwc1 $f2,0x74($t7)
/* f04416c: e7ae0044 */ swc1 $f14,0x44($sp)
/* f044170: 8fa60064 */ lw $a2,0x64($sp)
/* f044174: 46026302 */ mul.s $f12,$f12,$f2
/* f044178: 00000000 */ nop
/* f04417c: 46020002 */ mul.s $f0,$f0,$f2
/* f044180: e7ac0014 */ swc1 $f12,0x14($sp)
/* f044184: 46000280 */ add.s $f10,$f0,$f0
/* f044188: 44070000 */ mfc1 $a3,$f0
/* f04418c: 0fc1b6c0 */ jal func0f06db00
/* f044190: e7aa0010 */ swc1 $f10,0x10($sp)
/* f044194: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f044198: c7b20040 */ lwc1 $f18,0x40($sp)
/* f04419c: 3c017f1b */ lui $at,%hi(var7f1a9234)
/* f0441a0: c7a40040 */ lwc1 $f4,0x40($sp)
/* f0441a4: 4612703c */ c.lt.s $f14,$f18
/* f0441a8: 8fb90064 */ lw $t9,0x64($sp)
/* f0441ac: 45020004 */ bc1fl .L0f0441c0
/* f0441b0: 460e2001 */ sub.s $f0,$f4,$f14
/* f0441b4: 10000003 */ b .L0f0441c4
/* f0441b8: 460e9001 */ sub.s $f0,$f18,$f14
/* f0441bc: 460e2001 */ sub.s $f0,$f4,$f14
.L0f0441c0:
/* f0441c0: 46000007 */ neg.s $f0,$f0
.L0f0441c4:
/* f0441c4: c4269234 */ lwc1 $f6,%lo(var7f1a9234)($at)
/* f0441c8: 4606003c */ c.lt.s $f0,$f6
/* f0441cc: 00000000 */ nop
/* f0441d0: 45020006 */ bc1fl .L0f0441ec
/* f0441d4: 8fa40058 */ lw $a0,0x58($sp)
/* f0441d8: 44804000 */ mtc1 $zero,$f8
/* f0441dc: 24080001 */ addiu $t0,$zero,0x1
/* f0441e0: e7280000 */ swc1 $f8,0x0($t9)
/* f0441e4: afa8002c */ sw $t0,0x2c($sp)
.L0f0441e8:
/* f0441e8: 8fa40058 */ lw $a0,0x58($sp)
.L0f0441ec:
/* f0441ec: 0fc0f96c */ jal func0f03e5b0
/* f0441f0: 8fa50040 */ lw $a1,0x40($sp)
/* f0441f4: 8fbf001c */ lw $ra,0x1c($sp)
/* f0441f8: 8fa2002c */ lw $v0,0x2c($sp)
/* f0441fc: 27bd0058 */ addiu $sp,$sp,0x58
/* f044200: 03e00008 */ jr $ra
/* f044204: 00000000 */ nop
);
#endif
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel chrTickAttackWalk
/* f044208: 27bdffb0 */ addiu $sp,$sp,-80
/* f04420c: afbf002c */ sw $ra,0x2c($sp)
/* f044210: afb20028 */ sw $s2,0x28($sp)
/* f044214: afb10024 */ sw $s1,0x24($sp)
/* f044218: afb00020 */ sw $s0,0x20($sp)
/* f04421c: 8c8e001c */ lw $t6,0x1c($a0)
/* f044220: 8c910020 */ lw $s1,0x20($a0)
/* f044224: 00808025 */ or $s0,$a0,$zero
/* f044228: 0fc0a221 */ jal chrGetTargetProp
/* f04422c: afae0048 */ sw $t6,0x48($sp)
/* f044230: 8e0f0014 */ lw $t7,0x14($s0)
/* f044234: 00409025 */ or $s2,$v0,$zero
/* f044238: 000fc280 */ sll $t8,$t7,0xa
/* f04423c: 0701000c */ bgez $t8,.L0f044270
/* f044240: 00000000 */ nop
/* f044244: 0c0076e5 */ jal modelIsAnimMerging
/* f044248: 8e040020 */ lw $a0,0x20($s0)
/* f04424c: 544000d8 */ bnezl $v0,.L0f0445b0
/* f044250: 8fbf002c */ lw $ra,0x2c($sp)
/* f044254: 0fc0c161 */ jal chrAttackWalkChooseAnimation
/* f044258: 02002025 */ or $a0,$s0,$zero
/* f04425c: 8e190014 */ lw $t9,0x14($s0)
/* f044260: 3c01ffdf */ lui $at,0xffdf
/* f044264: 3421ffff */ ori $at,$at,0xffff
/* f044268: 03214024 */ and $t0,$t9,$at
/* f04426c: ae080014 */ sw $t0,0x14($s0)
.L0f044270:
/* f044270: 3c02800a */ lui $v0,%hi(g_Vars)
/* f044274: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f044278: 8c4a0038 */ lw $t2,0x38($v0)
/* f04427c: 8e090030 */ lw $t1,0x30($s0)
/* f044280: 820d0009 */ lb $t5,0x9($s0)
/* f044284: 24010001 */ addiu $at,$zero,0x1
/* f044288: 012a5821 */ addu $t3,$t1,$t2
/* f04428c: ae0b0030 */ sw $t3,0x30($s0)
/* f044290: 8c4c0008 */ lw $t4,0x8($v0)
/* f044294: 11a1000c */ beq $t5,$at,.L0f0442c8
/* f044298: ae0c00d4 */ sw $t4,0xd4($s0)
/* f04429c: 8c4f0008 */ lw $t7,0x8($v0)
/* f0442a0: 8e0e00d8 */ lw $t6,0xd8($s0)
/* f0442a4: 25f8ffc4 */ addiu $t8,$t7,-50
/* f0442a8: 01d8082a */ slt $at,$t6,$t8
/* f0442ac: 14200006 */ bnez $at,.L0f0442c8
/* f0442b0: 00000000 */ nop
/* f0442b4: 8e190034 */ lw $t9,0x34($s0)
/* f0442b8: 8fa20048 */ lw $v0,0x48($sp)
/* f0442bc: 032b082a */ slt $at,$t9,$t3
/* f0442c0: 50200029 */ beqzl $at,.L0f044368
/* f0442c4: c64a0008 */ lwc1 $f10,0x8($s2)
.L0f0442c8:
/* f0442c8: 0c00745f */ jal modelGetCurAnimFrame
/* f0442cc: 02202025 */ or $a0,$s1,$zero
/* f0442d0: e7a00034 */ swc1 $f0,0x34($sp)
/* f0442d4: 0c007486 */ jal modelGetNumAnimFrames
/* f0442d8: 02202025 */ or $a0,$s1,$zero
/* f0442dc: 44822000 */ mtc1 $v0,$f4
/* f0442e0: 3c013f00 */ lui $at,0x3f00
/* f0442e4: 44814000 */ mtc1 $at,$f8
/* f0442e8: 468021a0 */ cvt.s.w $f6,$f4
/* f0442ec: c7b00034 */ lwc1 $f16,0x34($sp)
/* f0442f0: 02202025 */ or $a0,$s1,$zero
/* f0442f4: 24050000 */ addiu $a1,$zero,0x0
/* f0442f8: 46083282 */ mul.s $f10,$f6,$f8
/* f0442fc: 4610503c */ c.lt.s $f10,$f16
/* f044300: 00000000 */ nop
/* f044304: 45000005 */ bc1f .L0f04431c
/* f044308: 00000000 */ nop
/* f04430c: 0c0077c1 */ jal modelSetAnimSpeedAuto
/* f044310: 3c064180 */ lui $a2,0x4180
/* f044314: 1000000d */ b .L0f04434c
/* f044318: 00000000 */ nop
.L0f04431c:
/* f04431c: 0c007486 */ jal modelGetNumAnimFrames
/* f044320: 02202025 */ or $a0,$s1,$zero
/* f044324: 44829000 */ mtc1 $v0,$f18
/* f044328: 3c013f00 */ lui $at,0x3f00
/* f04432c: 44813000 */ mtc1 $at,$f6
/* f044330: 46809120 */ cvt.s.w $f4,$f18
/* f044334: 02202025 */ or $a0,$s1,$zero
/* f044338: 3c064180 */ lui $a2,0x4180
/* f04433c: 46062202 */ mul.s $f8,$f4,$f6
/* f044340: 44054000 */ mfc1 $a1,$f8
/* f044344: 0c0077c1 */ jal modelSetAnimSpeedAuto
/* f044348: 00000000 */ nop
.L0f04434c:
/* f04434c: 0fc0e56b */ jal chrRecordLastSeeTargetTime
/* f044350: 02002025 */ or $a0,$s0,$zero
/* f044354: 0fc0bb57 */ jal chrStop
/* f044358: 02002025 */ or $a0,$s0,$zero
/* f04435c: 10000094 */ b .L0f0445b0
/* f044360: 8fbf002c */ lw $ra,0x2c($sp)
/* f044364: c64a0008 */ lwc1 $f10,0x8($s2)
.L0f044368:
/* f044368: c4500008 */ lwc1 $f16,0x8($v0)
/* f04436c: 3c014396 */ lui $at,0x4396
/* f044370: 44816000 */ mtc1 $at,$f12
/* f044374: 46105001 */ sub.s $f0,$f10,$f16
/* f044378: c6520010 */ lwc1 $f18,0x10($s2)
/* f04437c: c4440010 */ lwc1 $f4,0x10($v0)
/* f044380: 3c01c396 */ lui $at,0xc396
/* f044384: 460c003c */ c.lt.s $f0,$f12
/* f044388: 02002025 */ or $a0,$s0,$zero
/* f04438c: 26450008 */ addiu $a1,$s2,0x8
/* f044390: 00003025 */ or $a2,$zero,$zero
/* f044394: 45000015 */ bc1f .L0f0443ec
/* f044398: 46049081 */ sub.s $f2,$f18,$f4
/* f04439c: 44817000 */ mtc1 $at,$f14
/* f0443a0: 00000000 */ nop
/* f0443a4: 4600703c */ c.lt.s $f14,$f0
/* f0443a8: 00000000 */ nop
/* f0443ac: 4500000f */ bc1f .L0f0443ec
/* f0443b0: 00000000 */ nop
/* f0443b4: 460c103c */ c.lt.s $f2,$f12
/* f0443b8: 00000000 */ nop
/* f0443bc: 4500000b */ bc1f .L0f0443ec
/* f0443c0: 00000000 */ nop
/* f0443c4: 4602703c */ c.lt.s $f14,$f2
/* f0443c8: 00000000 */ nop
/* f0443cc: 45000007 */ bc1f .L0f0443ec
/* f0443d0: 00000000 */ nop
/* f0443d4: 0fc0e56b */ jal chrRecordLastSeeTargetTime
/* f0443d8: 02002025 */ or $a0,$s0,$zero
/* f0443dc: 0fc0bb57 */ jal chrStop
/* f0443e0: 02002025 */ or $a0,$s0,$zero
/* f0443e4: 10000072 */ b .L0f0445b0
/* f0443e8: 8fbf002c */ lw $ra,0x2c($sp)
.L0f0443ec:
/* f0443ec: 0fc10fcb */ jal func0f043f2c
/* f0443f0: 26070054 */ addiu $a3,$s0,0x54
/* f0443f4: 10400002 */ beqz $v0,.L0f044400
/* f0443f8: 24090001 */ addiu $t1,$zero,0x1
/* f0443fc: ae090038 */ sw $t1,0x38($s0)
.L0f044400:
/* f044400: 8e0a0030 */ lw $t2,0x30($s0)
/* f044404: 02002025 */ or $a0,$s0,$zero
/* f044408: 29410015 */ slti $at,$t2,0x11
/* f04440c: 14200009 */ bnez $at,.L0f044434
/* f044410: 3c013f80 */ lui $at,0x3f80
/* f044414: 44813000 */ mtc1 $at,$f6
/* f044418: 8e05003c */ lw $a1,0x3c($s0)
/* f04441c: 82060049 */ lb $a2,0x49($s0)
/* f044420: 82070048 */ lb $a3,0x48($s0)
/* f044424: 0fc0fa7d */ jal func0f03e9f4
/* f044428: e7a60010 */ swc1 $f6,0x10($sp)
/* f04442c: 10000004 */ b .L0f044440
/* f044430: 8e0b0038 */ lw $t3,0x38($s0)
.L0f044434:
/* f044434: 0fc0fe0a */ jal chrResetAimEndProperties
/* f044438: 02002025 */ or $a0,$s0,$zero
/* f04443c: 8e0b0038 */ lw $t3,0x38($s0)
.L0f044440:
/* f044440: 02002025 */ or $a0,$s0,$zero
/* f044444: 24050001 */ addiu $a1,$zero,0x1
/* f044448: 11600052 */ beqz $t3,.L0f044594
/* f04444c: 00000000 */ nop
/* f044450: 8e0c0030 */ lw $t4,0x30($s0)
/* f044454: 00008825 */ or $s1,$zero,$zero
/* f044458: 02009025 */ or $s2,$s0,$zero
/* f04445c: 2981001f */ slti $at,$t4,0x1a
/* f044460: 1420004c */ bnez $at,.L0f044594
/* f044464: 00000000 */ nop
.L0f044468:
/* f044468: 824d0048 */ lb $t5,0x48($s2)
/* f04446c: 02002025 */ or $a0,$s0,$zero
/* f044470: 02202825 */ or $a1,$s1,$zero
/* f044474: 11a0003f */ beqz $t5,.L0f044574
/* f044478: 00000000 */ nop
/* f04447c: 824f004a */ lb $t7,0x4a($s2)
/* f044480: 02002025 */ or $a0,$s0,$zero
/* f044484: 02202825 */ or $a1,$s1,$zero
/* f044488: 55e00006 */ bnezl $t7,.L0f0444a4
/* f04448c: 8e020030 */ lw $v0,0x30($s0)
/* f044490: 0fc0fe62 */ jal func0f03f988
/* f044494: 24060001 */ addiu $a2,$zero,0x1
/* f044498: 10000039 */ b .L0f044580
/* f04449c: 26310001 */ addiu $s1,$s1,0x1
/* f0444a0: 8e020030 */ lw $v0,0x30($s0)
.L0f0444a4:
/* f0444a4: 8e0e0040 */ lw $t6,0x40($s0)
/* f0444a8: 02002025 */ or $a0,$s0,$zero
/* f0444ac: 02202825 */ or $a1,$s1,$zero
/* f0444b0: 01c2082a */ slt $at,$t6,$v0
/* f0444b4: 1020002b */ beqz $at,.L0f044564
/* f0444b8: 00000000 */ nop
/* f0444bc: 8e030044 */ lw $v1,0x44($s0)
/* f0444c0: 00114023 */ negu $t0,$s1
/* f0444c4: 02084821 */ addu $t1,$s0,$t0
/* f0444c8: 12230004 */ beq $s1,$v1,.L0f0444dc
/* f0444cc: 0203c021 */ addu $t8,$s0,$v1
/* f0444d0: 8319004a */ lb $t9,0x4a($t8)
/* f0444d4: 17200023 */ bnez $t9,.L0f044564
/* f0444d8: 00000000 */ nop
.L0f0444dc:
/* f0444dc: ae020040 */ sw $v0,0x40($s0)
/* f0444e0: 812a004b */ lb $t2,0x4b($t1)
/* f0444e4: 240c0001 */ addiu $t4,$zero,0x1
/* f0444e8: 02002025 */ or $a0,$s0,$zero
/* f0444ec: 5140000c */ beqzl $t2,.L0f044520
/* f0444f0: 8258004c */ lb $t8,0x4c($s2)
/* f0444f4: 824b004c */ lb $t3,0x4c($s2)
/* f0444f8: 244d005a */ addiu $t5,$v0,0x4b
/* f0444fc: 51600004 */ beqzl $t3,.L0f044510
/* f044500: 8e0f0040 */ lw $t7,0x40($s0)
/* f044504: 1000000f */ b .L0f044544
/* f044508: ae0d0040 */ sw $t5,0x40($s0)
/* f04450c: 8e0f0040 */ lw $t7,0x40($s0)
.L0f044510:
/* f044510: 25ee0014 */ addiu $t6,$t7,0x10
/* f044514: 1000000b */ b .L0f044544
/* f044518: ae0e0040 */ sw $t6,0x40($s0)
/* f04451c: 8258004c */ lb $t8,0x4c($s2)
.L0f044520:
/* f044520: 53000006 */ beqzl $t8,.L0f04453c
/* f044524: 8e090040 */ lw $t1,0x40($s0)
/* f044528: 8e190040 */ lw $t9,0x40($s0)
/* f04452c: 272800b4 */ addiu $t0,$t9,0x96
/* f044530: 10000004 */ b .L0f044544
/* f044534: ae080040 */ sw $t0,0x40($s0)
/* f044538: 8e090040 */ lw $t1,0x40($s0)
.L0f04453c:
/* f04453c: 252a0028 */ addiu $t2,$t1,0x21
/* f044540: ae0a0040 */ sw $t2,0x40($s0)
.L0f044544:
/* f044544: 8e0b0044 */ lw $t3,0x44($s0)
/* f044548: 02202825 */ or $a1,$s1,$zero
/* f04454c: 24060001 */ addiu $a2,$zero,0x1
/* f044550: 018b6823 */ subu $t5,$t4,$t3
/* f044554: 0fc0fe62 */ jal func0f03f988
/* f044558: ae0d0044 */ sw $t5,0x44($s0)
/* f04455c: 10000008 */ b .L0f044580
/* f044560: 26310001 */ addiu $s1,$s1,0x1
.L0f044564:
/* f044564: 0fc0fe62 */ jal func0f03f988
/* f044568: 00003025 */ or $a2,$zero,$zero
/* f04456c: 10000004 */ b .L0f044580
/* f044570: 26310001 */ addiu $s1,$s1,0x1
.L0f044574:
/* f044574: 0fc0fe62 */ jal func0f03f988
/* f044578: 00003025 */ or $a2,$zero,$zero
/* f04457c: 26310001 */ addiu $s1,$s1,0x1
.L0f044580:
/* f044580: 24010002 */ addiu $at,$zero,0x2
/* f044584: 1621ffb8 */ bne $s1,$at,.L0f044468
/* f044588: 26520001 */ addiu $s2,$s2,0x1
/* f04458c: 10000008 */ b .L0f0445b0
/* f044590: 8fbf002c */ lw $ra,0x2c($sp)
.L0f044594:
/* f044594: 0fc0fe62 */ jal func0f03f988
/* f044598: 00003025 */ or $a2,$zero,$zero
/* f04459c: 02002025 */ or $a0,$s0,$zero
/* f0445a0: 00002825 */ or $a1,$zero,$zero
/* f0445a4: 0fc0fe62 */ jal func0f03f988
/* f0445a8: 00003025 */ or $a2,$zero,$zero
/* f0445ac: 8fbf002c */ lw $ra,0x2c($sp)
.L0f0445b0:
/* f0445b0: 8fb00020 */ lw $s0,0x20($sp)
/* f0445b4: 8fb10024 */ lw $s1,0x24($sp)
/* f0445b8: 8fb20028 */ lw $s2,0x28($sp)
/* f0445bc: 03e00008 */ jr $ra
/* f0445c0: 27bd0050 */ addiu $sp,$sp,0x50
);
#else
GLOBAL_ASM(
glabel chrTickAttackWalk
/* f044208: 27bdffb0 */ addiu $sp,$sp,-80
/* f04420c: afbf002c */ sw $ra,0x2c($sp)
/* f044210: afb20028 */ sw $s2,0x28($sp)
/* f044214: afb10024 */ sw $s1,0x24($sp)
/* f044218: afb00020 */ sw $s0,0x20($sp)
/* f04421c: 8c8e001c */ lw $t6,0x1c($a0)
/* f044220: 8c910020 */ lw $s1,0x20($a0)
/* f044224: 00808025 */ or $s0,$a0,$zero
/* f044228: 0fc0a221 */ jal chrGetTargetProp
/* f04422c: afae0048 */ sw $t6,0x48($sp)
/* f044230: 8e0f0014 */ lw $t7,0x14($s0)
/* f044234: 00409025 */ or $s2,$v0,$zero
/* f044238: 000fc280 */ sll $t8,$t7,0xa
/* f04423c: 0701000c */ bgez $t8,.L0f044270
/* f044240: 00000000 */ nop
/* f044244: 0c0076e5 */ jal modelIsAnimMerging
/* f044248: 8e040020 */ lw $a0,0x20($s0)
/* f04424c: 544000d8 */ bnezl $v0,.L0f0445b0
/* f044250: 8fbf002c */ lw $ra,0x2c($sp)
/* f044254: 0fc0c161 */ jal chrAttackWalkChooseAnimation
/* f044258: 02002025 */ or $a0,$s0,$zero
/* f04425c: 8e190014 */ lw $t9,0x14($s0)
/* f044260: 3c01ffdf */ lui $at,0xffdf
/* f044264: 3421ffff */ ori $at,$at,0xffff
/* f044268: 03214024 */ and $t0,$t9,$at
/* f04426c: ae080014 */ sw $t0,0x14($s0)
.L0f044270:
/* f044270: 3c02800a */ lui $v0,%hi(g_Vars)
/* f044274: 24429fc0 */ addiu $v0,$v0,%lo(g_Vars)
/* f044278: 8c4a0038 */ lw $t2,0x38($v0)
/* f04427c: 8e090030 */ lw $t1,0x30($s0)
/* f044280: 820d0009 */ lb $t5,0x9($s0)
/* f044284: 24010001 */ addiu $at,$zero,0x1
/* f044288: 012a5821 */ addu $t3,$t1,$t2
/* f04428c: ae0b0030 */ sw $t3,0x30($s0)
/* f044290: 8c4c0008 */ lw $t4,0x8($v0)
/* f044294: 11a1000c */ beq $t5,$at,.L0f0442c8
/* f044298: ae0c00d4 */ sw $t4,0xd4($s0)
/* f04429c: 8c4f0008 */ lw $t7,0x8($v0)
/* f0442a0: 8e0e00d8 */ lw $t6,0xd8($s0)
/* f0442a4: 25f8ffc4 */ addiu $t8,$t7,-60
/* f0442a8: 01d8082a */ slt $at,$t6,$t8
/* f0442ac: 14200006 */ bnez $at,.L0f0442c8
/* f0442b0: 00000000 */ nop
/* f0442b4: 8e190034 */ lw $t9,0x34($s0)
/* f0442b8: 8fa20048 */ lw $v0,0x48($sp)
/* f0442bc: 032b082a */ slt $at,$t9,$t3
/* f0442c0: 50200029 */ beqzl $at,.L0f044368
/* f0442c4: c64a0008 */ lwc1 $f10,0x8($s2)
.L0f0442c8:
/* f0442c8: 0c00745f */ jal modelGetCurAnimFrame
/* f0442cc: 02202025 */ or $a0,$s1,$zero
/* f0442d0: e7a00034 */ swc1 $f0,0x34($sp)
/* f0442d4: 0c007486 */ jal modelGetNumAnimFrames
/* f0442d8: 02202025 */ or $a0,$s1,$zero
/* f0442dc: 44822000 */ mtc1 $v0,$f4
/* f0442e0: 3c013f00 */ lui $at,0x3f00
/* f0442e4: 44814000 */ mtc1 $at,$f8
/* f0442e8: 468021a0 */ cvt.s.w $f6,$f4
/* f0442ec: c7b00034 */ lwc1 $f16,0x34($sp)
/* f0442f0: 02202025 */ or $a0,$s1,$zero
/* f0442f4: 24050000 */ addiu $a1,$zero,0x0
/* f0442f8: 46083282 */ mul.s $f10,$f6,$f8
/* f0442fc: 4610503c */ c.lt.s $f10,$f16
/* f044300: 00000000 */ nop
/* f044304: 45000005 */ bc1f .L0f04431c
/* f044308: 00000000 */ nop
/* f04430c: 0c0077c1 */ jal modelSetAnimSpeedAuto
/* f044310: 3c064180 */ lui $a2,0x4180
/* f044314: 1000000d */ b .L0f04434c
/* f044318: 00000000 */ nop
.L0f04431c:
/* f04431c: 0c007486 */ jal modelGetNumAnimFrames
/* f044320: 02202025 */ or $a0,$s1,$zero
/* f044324: 44829000 */ mtc1 $v0,$f18
/* f044328: 3c013f00 */ lui $at,0x3f00
/* f04432c: 44813000 */ mtc1 $at,$f6
/* f044330: 46809120 */ cvt.s.w $f4,$f18
/* f044334: 02202025 */ or $a0,$s1,$zero
/* f044338: 3c064180 */ lui $a2,0x4180
/* f04433c: 46062202 */ mul.s $f8,$f4,$f6
/* f044340: 44054000 */ mfc1 $a1,$f8
/* f044344: 0c0077c1 */ jal modelSetAnimSpeedAuto
/* f044348: 00000000 */ nop
.L0f04434c:
/* f04434c: 0fc0e56b */ jal chrRecordLastSeeTargetTime
/* f044350: 02002025 */ or $a0,$s0,$zero
/* f044354: 0fc0bb57 */ jal chrStop
/* f044358: 02002025 */ or $a0,$s0,$zero
/* f04435c: 10000094 */ b .L0f0445b0
/* f044360: 8fbf002c */ lw $ra,0x2c($sp)
/* f044364: c64a0008 */ lwc1 $f10,0x8($s2)
.L0f044368:
/* f044368: c4500008 */ lwc1 $f16,0x8($v0)
/* f04436c: 3c014396 */ lui $at,0x4396
/* f044370: 44816000 */ mtc1 $at,$f12
/* f044374: 46105001 */ sub.s $f0,$f10,$f16
/* f044378: c6520010 */ lwc1 $f18,0x10($s2)
/* f04437c: c4440010 */ lwc1 $f4,0x10($v0)
/* f044380: 3c01c396 */ lui $at,0xc396
/* f044384: 460c003c */ c.lt.s $f0,$f12
/* f044388: 02002025 */ or $a0,$s0,$zero
/* f04438c: 26450008 */ addiu $a1,$s2,0x8
/* f044390: 00003025 */ or $a2,$zero,$zero
/* f044394: 45000015 */ bc1f .L0f0443ec
/* f044398: 46049081 */ sub.s $f2,$f18,$f4
/* f04439c: 44817000 */ mtc1 $at,$f14
/* f0443a0: 00000000 */ nop
/* f0443a4: 4600703c */ c.lt.s $f14,$f0
/* f0443a8: 00000000 */ nop
/* f0443ac: 4500000f */ bc1f .L0f0443ec
/* f0443b0: 00000000 */ nop
/* f0443b4: 460c103c */ c.lt.s $f2,$f12
/* f0443b8: 00000000 */ nop
/* f0443bc: 4500000b */ bc1f .L0f0443ec
/* f0443c0: 00000000 */ nop
/* f0443c4: 4602703c */ c.lt.s $f14,$f2
/* f0443c8: 00000000 */ nop
/* f0443cc: 45000007 */ bc1f .L0f0443ec
/* f0443d0: 00000000 */ nop
/* f0443d4: 0fc0e56b */ jal chrRecordLastSeeTargetTime
/* f0443d8: 02002025 */ or $a0,$s0,$zero
/* f0443dc: 0fc0bb57 */ jal chrStop
/* f0443e0: 02002025 */ or $a0,$s0,$zero
/* f0443e4: 10000072 */ b .L0f0445b0
/* f0443e8: 8fbf002c */ lw $ra,0x2c($sp)
.L0f0443ec:
/* f0443ec: 0fc10fcb */ jal func0f043f2c
/* f0443f0: 26070054 */ addiu $a3,$s0,0x54
/* f0443f4: 10400002 */ beqz $v0,.L0f044400
/* f0443f8: 24090001 */ addiu $t1,$zero,0x1
/* f0443fc: ae090038 */ sw $t1,0x38($s0)
.L0f044400:
/* f044400: 8e0a0030 */ lw $t2,0x30($s0)
/* f044404: 02002025 */ or $a0,$s0,$zero
/* f044408: 29410015 */ slti $at,$t2,0x15
/* f04440c: 14200009 */ bnez $at,.L0f044434
/* f044410: 3c013f80 */ lui $at,0x3f80
/* f044414: 44813000 */ mtc1 $at,$f6
/* f044418: 8e05003c */ lw $a1,0x3c($s0)
/* f04441c: 82060049 */ lb $a2,0x49($s0)
/* f044420: 82070048 */ lb $a3,0x48($s0)
/* f044424: 0fc0fa7d */ jal func0f03e9f4
/* f044428: e7a60010 */ swc1 $f6,0x10($sp)
/* f04442c: 10000004 */ b .L0f044440
/* f044430: 8e0b0038 */ lw $t3,0x38($s0)
.L0f044434:
/* f044434: 0fc0fe0a */ jal chrResetAimEndProperties
/* f044438: 02002025 */ or $a0,$s0,$zero
/* f04443c: 8e0b0038 */ lw $t3,0x38($s0)
.L0f044440:
/* f044440: 02002025 */ or $a0,$s0,$zero
/* f044444: 24050001 */ addiu $a1,$zero,0x1
/* f044448: 11600052 */ beqz $t3,.L0f044594
/* f04444c: 00000000 */ nop
/* f044450: 8e0c0030 */ lw $t4,0x30($s0)
/* f044454: 00008825 */ or $s1,$zero,$zero
/* f044458: 02009025 */ or $s2,$s0,$zero
/* f04445c: 2981001f */ slti $at,$t4,0x1f
/* f044460: 1420004c */ bnez $at,.L0f044594
/* f044464: 00000000 */ nop
.L0f044468:
/* f044468: 824d0048 */ lb $t5,0x48($s2)
/* f04446c: 02002025 */ or $a0,$s0,$zero
/* f044470: 02202825 */ or $a1,$s1,$zero
/* f044474: 11a0003f */ beqz $t5,.L0f044574
/* f044478: 00000000 */ nop
/* f04447c: 824f004a */ lb $t7,0x4a($s2)
/* f044480: 02002025 */ or $a0,$s0,$zero
/* f044484: 02202825 */ or $a1,$s1,$zero
/* f044488: 55e00006 */ bnezl $t7,.L0f0444a4
/* f04448c: 8e020030 */ lw $v0,0x30($s0)
/* f044490: 0fc0fe62 */ jal func0f03f988
/* f044494: 24060001 */ addiu $a2,$zero,0x1
/* f044498: 10000039 */ b .L0f044580
/* f04449c: 26310001 */ addiu $s1,$s1,0x1
/* f0444a0: 8e020030 */ lw $v0,0x30($s0)
.L0f0444a4:
/* f0444a4: 8e0e0040 */ lw $t6,0x40($s0)
/* f0444a8: 02002025 */ or $a0,$s0,$zero
/* f0444ac: 02202825 */ or $a1,$s1,$zero
/* f0444b0: 01c2082a */ slt $at,$t6,$v0
/* f0444b4: 1020002b */ beqz $at,.L0f044564
/* f0444b8: 00000000 */ nop
/* f0444bc: 8e030044 */ lw $v1,0x44($s0)
/* f0444c0: 00114023 */ negu $t0,$s1
/* f0444c4: 02084821 */ addu $t1,$s0,$t0
/* f0444c8: 12230004 */ beq $s1,$v1,.L0f0444dc
/* f0444cc: 0203c021 */ addu $t8,$s0,$v1
/* f0444d0: 8319004a */ lb $t9,0x4a($t8)
/* f0444d4: 17200023 */ bnez $t9,.L0f044564
/* f0444d8: 00000000 */ nop
.L0f0444dc:
/* f0444dc: ae020040 */ sw $v0,0x40($s0)
/* f0444e0: 812a004b */ lb $t2,0x4b($t1)
/* f0444e4: 240c0001 */ addiu $t4,$zero,0x1
/* f0444e8: 02002025 */ or $a0,$s0,$zero
/* f0444ec: 5140000c */ beqzl $t2,.L0f044520
/* f0444f0: 8258004c */ lb $t8,0x4c($s2)
/* f0444f4: 824b004c */ lb $t3,0x4c($s2)
/* f0444f8: 244d005a */ addiu $t5,$v0,0x5a
/* f0444fc: 51600004 */ beqzl $t3,.L0f044510
/* f044500: 8e0f0040 */ lw $t7,0x40($s0)
/* f044504: 1000000f */ b .L0f044544
/* f044508: ae0d0040 */ sw $t5,0x40($s0)
/* f04450c: 8e0f0040 */ lw $t7,0x40($s0)
.L0f044510:
/* f044510: 25ee0014 */ addiu $t6,$t7,0x14
/* f044514: 1000000b */ b .L0f044544
/* f044518: ae0e0040 */ sw $t6,0x40($s0)
/* f04451c: 8258004c */ lb $t8,0x4c($s2)
.L0f044520:
/* f044520: 53000006 */ beqzl $t8,.L0f04453c
/* f044524: 8e090040 */ lw $t1,0x40($s0)
/* f044528: 8e190040 */ lw $t9,0x40($s0)
/* f04452c: 272800b4 */ addiu $t0,$t9,0xb4
/* f044530: 10000004 */ b .L0f044544
/* f044534: ae080040 */ sw $t0,0x40($s0)
/* f044538: 8e090040 */ lw $t1,0x40($s0)
.L0f04453c:
/* f04453c: 252a0028 */ addiu $t2,$t1,0x28
/* f044540: ae0a0040 */ sw $t2,0x40($s0)
.L0f044544:
/* f044544: 8e0b0044 */ lw $t3,0x44($s0)
/* f044548: 02202825 */ or $a1,$s1,$zero
/* f04454c: 24060001 */ addiu $a2,$zero,0x1
/* f044550: 018b6823 */ subu $t5,$t4,$t3
/* f044554: 0fc0fe62 */ jal func0f03f988
/* f044558: ae0d0044 */ sw $t5,0x44($s0)
/* f04455c: 10000008 */ b .L0f044580
/* f044560: 26310001 */ addiu $s1,$s1,0x1
.L0f044564:
/* f044564: 0fc0fe62 */ jal func0f03f988
/* f044568: 00003025 */ or $a2,$zero,$zero
/* f04456c: 10000004 */ b .L0f044580
/* f044570: 26310001 */ addiu $s1,$s1,0x1
.L0f044574:
/* f044574: 0fc0fe62 */ jal func0f03f988
/* f044578: 00003025 */ or $a2,$zero,$zero
/* f04457c: 26310001 */ addiu $s1,$s1,0x1
.L0f044580:
/* f044580: 24010002 */ addiu $at,$zero,0x2
/* f044584: 1621ffb8 */ bne $s1,$at,.L0f044468
/* f044588: 26520001 */ addiu $s2,$s2,0x1
/* f04458c: 10000008 */ b .L0f0445b0
/* f044590: 8fbf002c */ lw $ra,0x2c($sp)
.L0f044594:
/* f044594: 0fc0fe62 */ jal func0f03f988
/* f044598: 00003025 */ or $a2,$zero,$zero
/* f04459c: 02002025 */ or $a0,$s0,$zero
/* f0445a0: 00002825 */ or $a1,$zero,$zero
/* f0445a4: 0fc0fe62 */ jal func0f03f988
/* f0445a8: 00003025 */ or $a2,$zero,$zero
/* f0445ac: 8fbf002c */ lw $ra,0x2c($sp)
.L0f0445b0:
/* f0445b0: 8fb00020 */ lw $s0,0x20($sp)
/* f0445b4: 8fb10024 */ lw $s1,0x24($sp)
/* f0445b8: 8fb20028 */ lw $s2,0x28($sp)
/* f0445bc: 03e00008 */ jr $ra
/* f0445c0: 27bd0050 */ addiu $sp,$sp,0x50
);
#endif
bool func0f0445c4(struct coord *arg0, struct coord *arg1, struct coord *arg2, f32 arg3)
{
struct coord diff;
f32 tmp;
diff.x = arg2->x - arg0->x;
diff.z = arg2->z - arg0->z;
if (arg1->f[0] == 0 && arg1->f[2] == 0) {
return diff.f[0] * diff.f[0] + diff.f[2] * diff.f[2] <= arg3 * arg3;
}
tmp = arg1->f[0] * diff.f[0] + arg1->f[2] * diff.f[2];
if (tmp > 0) {
f32 a = arg1->f[0] * arg1->f[0] + arg1->f[2] * arg1->f[2];
f32 b = diff.f[0] * diff.f[0] + diff.f[2] * diff.f[2];
if ((b - arg3 * arg3) * a <= tmp * tmp) {
return true;
}
return false;
}
return false;
}
GLOBAL_ASM(
glabel func0f0446e0
/* f0446e0: 27bdffc0 */ addiu $sp,$sp,-64
/* f0446e4: afbf001c */ sw $ra,0x1c($sp)
/* f0446e8: afb00018 */ sw $s0,0x18($sp)
/* f0446ec: 44876000 */ mtc1 $a3,$f12
/* f0446f0: c4c00000 */ lwc1 $f0,0x0($a2)
/* f0446f4: c4900000 */ lwc1 $f16,0x0($a0)
/* f0446f8: 00a08025 */ or $s0,$a1,$zero
/* f0446fc: 460c0081 */ sub.s $f2,$f0,$f12
/* f044700: 4602803e */ c.le.s $f16,$f2
/* f044704: 00000000 */ nop
/* f044708: 45020009 */ bc1fl .L0f044730
/* f04470c: 460c0080 */ add.s $f2,$f0,$f12
/* f044710: c4a40000 */ lwc1 $f4,0x0($a1)
/* f044714: 4602203e */ c.le.s $f4,$f2
/* f044718: 00000000 */ nop
/* f04471c: 45020004 */ bc1fl .L0f044730
/* f044720: 460c0080 */ add.s $f2,$f0,$f12
/* f044724: 10000033 */ b .L0f0447f4
/* f044728: 00001025 */ or $v0,$zero,$zero
/* f04472c: 460c0080 */ add.s $f2,$f0,$f12
.L0f044730:
/* f044730: 4610103e */ c.le.s $f2,$f16
/* f044734: 00000000 */ nop
/* f044738: 45020009 */ bc1fl .L0f044760
/* f04473c: c4c00008 */ lwc1 $f0,0x8($a2)
/* f044740: c6060000 */ lwc1 $f6,0x0($s0)
/* f044744: 4606103e */ c.le.s $f2,$f6
/* f044748: 00000000 */ nop
/* f04474c: 45020004 */ bc1fl .L0f044760
/* f044750: c4c00008 */ lwc1 $f0,0x8($a2)
/* f044754: 10000027 */ b .L0f0447f4
/* f044758: 00001025 */ or $v0,$zero,$zero
/* f04475c: c4c00008 */ lwc1 $f0,0x8($a2)
.L0f044760:
/* f044760: c48e0008 */ lwc1 $f14,0x8($a0)
/* f044764: 460c0081 */ sub.s $f2,$f0,$f12
/* f044768: 4602703e */ c.le.s $f14,$f2
/* f04476c: 00000000 */ nop
/* f044770: 45020009 */ bc1fl .L0f044798
/* f044774: 460c0080 */ add.s $f2,$f0,$f12
/* f044778: c6080008 */ lwc1 $f8,0x8($s0)
/* f04477c: 4602403e */ c.le.s $f8,$f2
/* f044780: 00000000 */ nop
/* f044784: 45020004 */ bc1fl .L0f044798
/* f044788: 460c0080 */ add.s $f2,$f0,$f12
/* f04478c: 10000019 */ b .L0f0447f4
/* f044790: 00001025 */ or $v0,$zero,$zero
/* f044794: 460c0080 */ add.s $f2,$f0,$f12
.L0f044798:
/* f044798: 460e103e */ c.le.s $f2,$f14
/* f04479c: 00000000 */ nop
/* f0447a0: 45020009 */ bc1fl .L0f0447c8
/* f0447a4: c6120000 */ lwc1 $f18,0x0($s0)
/* f0447a8: c60a0008 */ lwc1 $f10,0x8($s0)
/* f0447ac: 460a103e */ c.le.s $f2,$f10
/* f0447b0: 00000000 */ nop
/* f0447b4: 45020004 */ bc1fl .L0f0447c8
/* f0447b8: c6120000 */ lwc1 $f18,0x0($s0)
/* f0447bc: 1000000d */ b .L0f0447f4
/* f0447c0: 00001025 */ or $v0,$zero,$zero
/* f0447c4: c6120000 */ lwc1 $f18,0x0($s0)
.L0f0447c8:
/* f0447c8: 44803000 */ mtc1 $zero,$f6
/* f0447cc: 44076000 */ mfc1 $a3,$f12
/* f0447d0: 46109101 */ sub.s $f4,$f18,$f16
/* f0447d4: e7a60038 */ swc1 $f6,0x38($sp)
/* f0447d8: 27a50034 */ addiu $a1,$sp,0x34
/* f0447dc: e7a40034 */ swc1 $f4,0x34($sp)
/* f0447e0: c48a0008 */ lwc1 $f10,0x8($a0)
/* f0447e4: c6080008 */ lwc1 $f8,0x8($s0)
/* f0447e8: 460a4481 */ sub.s $f18,$f8,$f10
/* f0447ec: 0fc11171 */ jal func0f0445c4
/* f0447f0: e7b2003c */ swc1 $f18,0x3c($sp)
.L0f0447f4:
/* f0447f4: 8fbf001c */ lw $ra,0x1c($sp)
/* f0447f8: 8fb00018 */ lw $s0,0x18($sp)
/* f0447fc: 27bd0040 */ addiu $sp,$sp,0x40
/* f044800: 03e00008 */ jr $ra
/* f044804: 00000000 */ nop
);
bool func0f044808(struct coord *prevpos, struct coord *curpos, struct coord *targetpos, f32 arg3)
{
if (targetpos->y - 150 >= prevpos->y && targetpos->y - 150 >= curpos->y) {
return false;
}
if (targetpos->y + 150 <= prevpos->y && targetpos->y + 150 <= curpos->y) {
return false;
}
return func0f0446e0(prevpos, curpos, targetpos, arg3);
}
void chrTickRunPos(struct chrdata *chr)
{
struct prop *prop = chr->prop;
struct model *model = chr->model;
u32 race = CHRRACE(chr);
f32 fVar6;
f32 zero;
f32 fVar7;
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrRunPosChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
chr->lastwalk60 = g_Vars.lvframe60;
if (chr->invalidmove == 1
|| g_Vars.lvframe60 - PALDOWN(60) > chr->lastmoveok60
|| func0f0446e0(&chr->prevpos, &prop->pos, &chr->act_runpos.pos, chr->act_runpos.unk038)) {
if (race == RACE_HUMAN) {
modelGetAnimNum(model);
}
zero = 0;
fVar7 = modelGetCurAnimFrame(model);
fVar6 = fVar7 - zero;
if (fVar7 < 0) {
fVar6 += modelGetNumAnimFrames(model);
}
if (modelGetNumAnimFrames(model) * 0.5f < fVar6) {
zero = 0;
modelSetAnimSpeedAuto(model, modelGetNumAnimFrames(model) - zero, 16);
} else {
zero = 0;
fVar7 = modelGetNumAnimFrames(model) * 0.5f;
fVar6 = fVar7 - zero;
if (fVar7 < 0) {
fVar6 += modelGetNumAnimFrames(model);
}
modelSetAnimSpeedAuto(model, fVar6, 16);
}
chrStop(chr);
return;
}
func0f043f2c(chr, &chr->act_runpos.pos, 1, &chr->act_runpos.unk040);
if (chr->act_runpos.unk03c > 0) {
chr->act_runpos.unk03c -= g_Vars.lvupdate240_60;
} else {
fVar7 = 1;
if (race == RACE_HUMAN) {
if (modelGetAnimNum(model) == ANIM_RUNNING_ONEHANDGUN) {
fVar7 = func0f02dff0(ANIM_RUNNING_ONEHANDGUN);
} else {
fVar7 = func0f02dff0(ANIM_RUNNING_TWOHANDGUN);
}
} else if (race == RACE_SKEDAR) {
fVar7 = func0f02dff0(ANIM_SKEDAR_RUNNING);
}
chr->act_runpos.unk038 += fVar7 * g_Vars.lvupdate240freal * modelGetAbsAnimSpeed(model);
}
}
GLOBAL_ASM(
glabel func0f044b68
/* f044b68: c4a40000 */ lwc1 $f4,0x0($a1)
/* f044b6c: c4860000 */ lwc1 $f6,0x0($a0)
/* f044b70: 27bdffe8 */ addiu $sp,$sp,-24
/* f044b74: 44800000 */ mtc1 $zero,$f0
/* f044b78: 46062201 */ sub.s $f8,$f4,$f6
/* f044b7c: e7a8000c */ swc1 $f8,0xc($sp)
/* f044b80: c4900004 */ lwc1 $f16,0x4($a0)
/* f044b84: c4aa0004 */ lwc1 $f10,0x4($a1)
/* f044b88: 46105481 */ sub.s $f18,$f10,$f16
/* f044b8c: e7b20010 */ swc1 $f18,0x10($sp)
/* f044b90: c4860008 */ lwc1 $f6,0x8($a0)
/* f044b94: c4a40008 */ lwc1 $f4,0x8($a1)
/* f044b98: 46062201 */ sub.s $f8,$f4,$f6
/* f044b9c: e7a80014 */ swc1 $f8,0x14($sp)
/* f044ba0: c4ca0008 */ lwc1 $f10,0x8($a2)
/* f044ba4: e7a00004 */ swc1 $f0,0x4($sp)
/* f044ba8: c7a40014 */ lwc1 $f4,0x14($sp)
/* f044bac: 46005407 */ neg.s $f16,$f10
/* f044bb0: e7b00000 */ swc1 $f16,0x0($sp)
/* f044bb4: c4d20000 */ lwc1 $f18,0x0($a2)
/* f044bb8: c7aa0000 */ lwc1 $f10,0x0($sp)
/* f044bbc: c7b0000c */ lwc1 $f16,0xc($sp)
/* f044bc0: e7b20008 */ swc1 $f18,0x8($sp)
/* f044bc4: c7a60008 */ lwc1 $f6,0x8($sp)
/* f044bc8: 46062202 */ mul.s $f8,$f4,$f6
/* f044bcc: 00000000 */ nop
/* f044bd0: 46105482 */ mul.s $f18,$f10,$f16
/* f044bd4: 46124100 */ add.s $f4,$f8,$f18
/* f044bd8: 4604003c */ c.lt.s $f0,$f4
/* f044bdc: 00000000 */ nop
/* f044be0: 45010013 */ bc1t .L0f044c30
/* f044be4: 00000000 */ nop
/* f044be8: c4860000 */ lwc1 $f6,0x0($a0)
/* f044bec: e7a6000c */ swc1 $f6,0xc($sp)
/* f044bf0: c48a0004 */ lwc1 $f10,0x4($a0)
/* f044bf4: e7aa0010 */ swc1 $f10,0x10($sp)
/* f044bf8: c4900008 */ lwc1 $f16,0x8($a0)
/* f044bfc: e7b00014 */ swc1 $f16,0x14($sp)
/* f044c00: c4a80000 */ lwc1 $f8,0x0($a1)
/* f044c04: e4880000 */ swc1 $f8,0x0($a0)
/* f044c08: c4b20004 */ lwc1 $f18,0x4($a1)
/* f044c0c: e4920004 */ swc1 $f18,0x4($a0)
/* f044c10: c4a40008 */ lwc1 $f4,0x8($a1)
/* f044c14: e4840008 */ swc1 $f4,0x8($a0)
/* f044c18: c7a6000c */ lwc1 $f6,0xc($sp)
/* f044c1c: e4a60000 */ swc1 $f6,0x0($a1)
/* f044c20: c7aa0010 */ lwc1 $f10,0x10($sp)
/* f044c24: e4aa0004 */ swc1 $f10,0x4($a1)
/* f044c28: c7b00014 */ lwc1 $f16,0x14($sp)
/* f044c2c: e4b00008 */ swc1 $f16,0x8($a1)
.L0f044c30:
/* f044c30: 03e00008 */ jr $ra
/* f044c34: 27bd0018 */ addiu $sp,$sp,0x18
);
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f044c38
.late_rodata
glabel var7f1a9238
.word 0x3f733333
glabel var7f1a923c
.word 0x3f733333
glabel var7f1a9240
.word 0x3f99999a
glabel var7f1a9244
.word 0x3f99999a
.text
/* f044c38: 27bdff20 */ addiu $sp,$sp,-224
/* f044c3c: afbf002c */ sw $ra,0x2c($sp)
/* f044c40: afb00028 */ sw $s0,0x28($sp)
/* f044c44: afa400e0 */ sw $a0,0xe0($sp)
/* f044c48: afa600e8 */ sw $a2,0xe8($sp)
/* f044c4c: afa700ec */ sw $a3,0xec($sp)
/* f044c50: afa000bc */ sw $zero,0xbc($sp)
/* f044c54: afa000b8 */ sw $zero,0xb8($sp)
/* f044c58: afa00084 */ sw $zero,0x84($sp)
/* f044c5c: 8c84001c */ lw $a0,0x1c($a0)
/* f044c60: 00a08025 */ or $s0,$a1,$zero
/* f044c64: 27a50078 */ addiu $a1,$sp,0x78
/* f044c68: 27a7007c */ addiu $a3,$sp,0x7c
/* f044c6c: 27a60080 */ addiu $a2,$sp,0x80
/* f044c70: 0fc0a277 */ jal propChrGetBbox
/* f044c74: afa4003c */ sw $a0,0x3c($sp)
/* f044c78: 8fa200ec */ lw $v0,0xec($sp)
/* f044c7c: c6060000 */ lwc1 $f6,0x0($s0)
/* f044c80: 44800000 */ mtc1 $zero,$f0
/* f044c84: c4440000 */ lwc1 $f4,0x0($v0)
/* f044c88: e7a000d8 */ swc1 $f0,0xd8($sp)
/* f044c8c: 46062201 */ sub.s $f8,$f4,$f6
/* f044c90: e7a800d4 */ swc1 $f8,0xd4($sp)
/* f044c94: c7a800d4 */ lwc1 $f8,0xd4($sp)
/* f044c98: c6040008 */ lwc1 $f4,0x8($s0)
/* f044c9c: c44a0008 */ lwc1 $f10,0x8($v0)
/* f044ca0: 46080032 */ c.eq.s $f0,$f8
/* f044ca4: 46045181 */ sub.s $f6,$f10,$f4
/* f044ca8: 45000008 */ bc1f .L0f044ccc
/* f044cac: e7a600dc */ swc1 $f6,0xdc($sp)
/* f044cb0: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f044cb4: 46120032 */ c.eq.s $f0,$f18
/* f044cb8: 00000000 */ nop
/* f044cbc: 45020004 */ bc1fl .L0f044cd0
/* f044cc0: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f044cc4: 10000133 */ b .L0f045194
/* f044cc8: 24020001 */ addiu $v0,$zero,0x1
.L0f044ccc:
/* f044ccc: c7b200dc */ lwc1 $f18,0xdc($sp)
.L0f044cd0:
/* f044cd0: c7b000d4 */ lwc1 $f16,0xd4($sp)
/* f044cd4: 46129282 */ mul.s $f10,$f18,$f18
/* f044cd8: 00000000 */ nop
/* f044cdc: 46108102 */ mul.s $f4,$f16,$f16
/* f044ce0: 0c012974 */ jal sqrtf
/* f044ce4: 46045300 */ add.s $f12,$f10,$f4
/* f044ce8: 3c013f80 */ lui $at,0x3f80
/* f044cec: 44813000 */ mtc1 $at,$f6
/* f044cf0: c7b000d4 */ lwc1 $f16,0xd4($sp)
/* f044cf4: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f044cf8: 46003083 */ div.s $f2,$f6,$f0
/* f044cfc: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f044d00: 3c017f1b */ lui $at,%hi(var7f1a9238)
/* f044d04: c42a9238 */ lwc1 $f10,%lo(var7f1a9238)($at)
/* f044d08: 3c017f1b */ lui $at,%hi(var7f1a923c)
/* f044d0c: c426923c */ lwc1 $f6,%lo(var7f1a923c)($at)
/* f044d10: 3c017f1b */ lui $at,%hi(var7f1a9240)
/* f044d14: 8fa400e0 */ lw $a0,0xe0($sp)
/* f044d18: 00002825 */ or $a1,$zero,$zero
/* f044d1c: 46028402 */ mul.s $f16,$f16,$f2
/* f044d20: 00000000 */ nop
/* f044d24: 46029482 */ mul.s $f18,$f18,$f2
/* f044d28: 00000000 */ nop
/* f044d2c: 46088302 */ mul.s $f12,$f16,$f8
/* f044d30: e7b000d4 */ swc1 $f16,0xd4($sp)
/* f044d34: e7b200dc */ swc1 $f18,0xdc($sp)
/* f044d38: 460a6102 */ mul.s $f4,$f12,$f10
/* f044d3c: 00000000 */ nop
/* f044d40: 46089382 */ mul.s $f14,$f18,$f8
/* f044d44: e7a400d0 */ swc1 $f4,0xd0($sp)
/* f044d48: c4249240 */ lwc1 $f4,%lo(var7f1a9240)($at)
/* f044d4c: 3c017f1b */ lui $at,%hi(var7f1a9244)
/* f044d50: 46067282 */ mul.s $f10,$f14,$f6
/* f044d54: c4269244 */ lwc1 $f6,%lo(var7f1a9244)($at)
/* f044d58: 46046202 */ mul.s $f8,$f12,$f4
/* f044d5c: e7aa00cc */ swc1 $f10,0xcc($sp)
/* f044d60: 46067282 */ mul.s $f10,$f14,$f6
/* f044d64: e7a800c8 */ swc1 $f8,0xc8($sp)
/* f044d68: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f044d6c: e7aa00c4 */ swc1 $f10,0xc4($sp)
/* f044d70: c6040000 */ lwc1 $f4,0x0($s0)
/* f044d74: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f044d78: 8fa200ec */ lw $v0,0xec($sp)
/* f044d7c: c7a200f8 */ lwc1 $f2,0xf8($sp)
/* f044d80: 46082180 */ add.s $f6,$f4,$f8
/* f044d84: c7a800d0 */ lwc1 $f8,0xd0($sp)
/* f044d88: 8faf0100 */ lw $t7,0x100($sp)
/* f044d8c: 8fb9003c */ lw $t9,0x3c($sp)
/* f044d90: e7a6006c */ swc1 $f6,0x6c($sp)
/* f044d94: c60a0004 */ lwc1 $f10,0x4($s0)
/* f044d98: 24180001 */ addiu $t8,$zero,0x1
/* f044d9c: 02002025 */ or $a0,$s0,$zero
/* f044da0: e7aa0070 */ swc1 $f10,0x70($sp)
/* f044da4: c6040008 */ lwc1 $f4,0x8($s0)
/* f044da8: 8fa500e8 */ lw $a1,0xe8($sp)
/* f044dac: 27a6006c */ addiu $a2,$sp,0x6c
/* f044db0: 46082181 */ sub.s $f6,$f4,$f8
/* f044db4: c7a400c4 */ lwc1 $f4,0xc4($sp)
/* f044db8: 27a70050 */ addiu $a3,$sp,0x50
/* f044dbc: e7a60074 */ swc1 $f6,0x74($sp)
/* f044dc0: c44a0000 */ lwc1 $f10,0x0($v0)
/* f044dc4: c7a600d4 */ lwc1 $f6,0xd4($sp)
/* f044dc8: 46045200 */ add.s $f8,$f10,$f4
/* f044dcc: 46023282 */ mul.s $f10,$f6,$f2
/* f044dd0: 46085100 */ add.s $f4,$f10,$f8
/* f044dd4: c7a800c8 */ lwc1 $f8,0xc8($sp)
/* f044dd8: e7a40060 */ swc1 $f4,0x60($sp)
/* f044ddc: c4460004 */ lwc1 $f6,0x4($v0)
/* f044de0: e7a60064 */ swc1 $f6,0x64($sp)
/* f044de4: c44a0008 */ lwc1 $f10,0x8($v0)
/* f044de8: c7a600dc */ lwc1 $f6,0xdc($sp)
/* f044dec: afb80014 */ sw $t8,0x14($sp)
/* f044df0: 46085101 */ sub.s $f4,$f10,$f8
/* f044df4: 46023282 */ mul.s $f10,$f6,$f2
/* f044df8: afaf0010 */ sw $t7,0x10($sp)
/* f044dfc: c7a60080 */ lwc1 $f6,0x80($sp)
/* f044e00: 46045200 */ add.s $f8,$f10,$f4
/* f044e04: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f044e08: e7a80068 */ swc1 $f8,0x68($sp)
/* f044e0c: c720000c */ lwc1 $f0,0xc($t9)
/* f044e10: 46003281 */ sub.s $f10,$f6,$f0
/* f044e14: 46002201 */ sub.s $f8,$f4,$f0
/* f044e18: e7aa0018 */ swc1 $f10,0x18($sp)
/* f044e1c: 0c00b694 */ jal func0002da50
/* f044e20: e7a8001c */ swc1 $f8,0x1c($sp)
/* f044e24: 10400010 */ beqz $v0,.L0f044e68
/* f044e28: 24080001 */ addiu $t0,$zero,0x1
/* f044e2c: 8fa9003c */ lw $t1,0x3c($sp)
/* f044e30: afa80010 */ sw $t0,0x10($sp)
/* f044e34: c7a60080 */ lwc1 $f6,0x80($sp)
/* f044e38: c520000c */ lwc1 $f0,0xc($t1)
/* f044e3c: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f044e40: 27a4006c */ addiu $a0,$sp,0x6c
/* f044e44: 46003281 */ sub.s $f10,$f6,$f0
/* f044e48: 27a50050 */ addiu $a1,$sp,0x50
/* f044e4c: 27a60060 */ addiu $a2,$sp,0x60
/* f044e50: 46002201 */ sub.s $f8,$f4,$f0
/* f044e54: e7aa0014 */ swc1 $f10,0x14($sp)
/* f044e58: 8fa70100 */ lw $a3,0x100($sp)
/* f044e5c: 0c00b5f0 */ jal func0002d7c0
/* f044e60: e7a80018 */ swc1 $f8,0x18($sp)
/* f044e64: 1440000c */ bnez $v0,.L0f044e98
.L0f044e68:
/* f044e68: 240a0001 */ addiu $t2,$zero,0x1
/* f044e6c: 3c077f1b */ lui $a3,%hi(var7f1a8ba0)
/* f044e70: afaa00bc */ sw $t2,0xbc($sp)
/* f044e74: 24e78ba0 */ addiu $a3,$a3,%lo(var7f1a8ba0)
/* f044e78: 27a400ac */ addiu $a0,$sp,0xac
/* f044e7c: 27a500a0 */ addiu $a1,$sp,0xa0
/* f044e80: 0c009393 */ jal func00024e4c
/* f044e84: 24063741 */ addiu $a2,$zero,0x3747
/* f044e88: 27a400ac */ addiu $a0,$sp,0xac
/* f044e8c: 27a500a0 */ addiu $a1,$sp,0xa0
/* f044e90: 0fc112da */ jal func0f044b68
/* f044e94: 27a600d4 */ addiu $a2,$sp,0xd4
.L0f044e98:
/* f044e98: c6060000 */ lwc1 $f6,0x0($s0)
/* f044e9c: c7aa00cc */ lwc1 $f10,0xcc($sp)
/* f044ea0: 8fa200ec */ lw $v0,0xec($sp)
/* f044ea4: c7a200f8 */ lwc1 $f2,0xf8($sp)
/* f044ea8: 460a3101 */ sub.s $f4,$f6,$f10
/* f044eac: c7aa00d0 */ lwc1 $f10,0xd0($sp)
/* f044eb0: 8fab0100 */ lw $t3,0x100($sp)
/* f044eb4: 8fad003c */ lw $t5,0x3c($sp)
/* f044eb8: e7a4006c */ swc1 $f4,0x6c($sp)
/* f044ebc: c6080004 */ lwc1 $f8,0x4($s0)
/* f044ec0: 240c0001 */ addiu $t4,$zero,0x1
/* f044ec4: 02002025 */ or $a0,$s0,$zero
/* f044ec8: e7a80070 */ swc1 $f8,0x70($sp)
/* f044ecc: c6060008 */ lwc1 $f6,0x8($s0)
/* f044ed0: 8fa500e8 */ lw $a1,0xe8($sp)
/* f044ed4: 27a6006c */ addiu $a2,$sp,0x6c
/* f044ed8: 460a3100 */ add.s $f4,$f6,$f10
/* f044edc: c7a600c4 */ lwc1 $f6,0xc4($sp)
/* f044ee0: 27a70050 */ addiu $a3,$sp,0x50
/* f044ee4: e7a40074 */ swc1 $f4,0x74($sp)
/* f044ee8: c4480000 */ lwc1 $f8,0x0($v0)
/* f044eec: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f044ef0: 46064281 */ sub.s $f10,$f8,$f6
/* f044ef4: 46022202 */ mul.s $f8,$f4,$f2
/* f044ef8: 460a4180 */ add.s $f6,$f8,$f10
/* f044efc: c7aa00c8 */ lwc1 $f10,0xc8($sp)
/* f044f00: e7a60060 */ swc1 $f6,0x60($sp)
/* f044f04: c4440004 */ lwc1 $f4,0x4($v0)
/* f044f08: e7a40064 */ swc1 $f4,0x64($sp)
/* f044f0c: c4480008 */ lwc1 $f8,0x8($v0)
/* f044f10: c7a400dc */ lwc1 $f4,0xdc($sp)
/* f044f14: afac0014 */ sw $t4,0x14($sp)
/* f044f18: 460a4180 */ add.s $f6,$f8,$f10
/* f044f1c: 46022202 */ mul.s $f8,$f4,$f2
/* f044f20: afab0010 */ sw $t3,0x10($sp)
/* f044f24: c7a40080 */ lwc1 $f4,0x80($sp)
/* f044f28: 46064280 */ add.s $f10,$f8,$f6
/* f044f2c: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f044f30: e7aa0068 */ swc1 $f10,0x68($sp)
/* f044f34: c5a0000c */ lwc1 $f0,0xc($t5)
/* f044f38: 46002201 */ sub.s $f8,$f4,$f0
/* f044f3c: 46003281 */ sub.s $f10,$f6,$f0
/* f044f40: e7a80018 */ swc1 $f8,0x18($sp)
/* f044f44: 0c00b694 */ jal func0002da50
/* f044f48: e7aa001c */ swc1 $f10,0x1c($sp)
/* f044f4c: 10400010 */ beqz $v0,.L0f044f90
/* f044f50: 240e0001 */ addiu $t6,$zero,0x1
/* f044f54: 8faf003c */ lw $t7,0x3c($sp)
/* f044f58: afae0010 */ sw $t6,0x10($sp)
/* f044f5c: c7a40080 */ lwc1 $f4,0x80($sp)
/* f044f60: c5e0000c */ lwc1 $f0,0xc($t7)
/* f044f64: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f044f68: 27a4006c */ addiu $a0,$sp,0x6c
/* f044f6c: 46002201 */ sub.s $f8,$f4,$f0
/* f044f70: 8fa500e8 */ lw $a1,0xe8($sp)
/* f044f74: 27a60060 */ addiu $a2,$sp,0x60
/* f044f78: 46003281 */ sub.s $f10,$f6,$f0
/* f044f7c: e7a80014 */ swc1 $f8,0x14($sp)
/* f044f80: 8fa70100 */ lw $a3,0x100($sp)
/* f044f84: 0c00b5f0 */ jal func0002d7c0
/* f044f88: e7aa0018 */ swc1 $f10,0x18($sp)
/* f044f8c: 1440000c */ bnez $v0,.L0f044fc0
.L0f044f90:
/* f044f90: 24180001 */ addiu $t8,$zero,0x1
/* f044f94: 3c077f1b */ lui $a3,%hi(var7f1a8bac)
/* f044f98: afb800b8 */ sw $t8,0xb8($sp)
/* f044f9c: 24e78bac */ addiu $a3,$a3,%lo(var7f1a8bac)
/* f044fa0: 27a40094 */ addiu $a0,$sp,0x94
/* f044fa4: 27a50088 */ addiu $a1,$sp,0x88
/* f044fa8: 0c009393 */ jal func00024e4c
/* f044fac: 24063750 */ addiu $a2,$zero,0x3756
/* f044fb0: 27a40094 */ addiu $a0,$sp,0x94
/* f044fb4: 27a50088 */ addiu $a1,$sp,0x88
/* f044fb8: 0fc112da */ jal func0f044b68
/* f044fbc: 27a600d4 */ addiu $a2,$sp,0xd4
.L0f044fc0:
/* f044fc0: 8fb900bc */ lw $t9,0xbc($sp)
/* f044fc4: 8fa800b8 */ lw $t0,0xb8($sp)
/* f044fc8: 8fa900bc */ lw $t1,0xbc($sp)
/* f044fcc: 13200019 */ beqz $t9,.L0f045034
/* f044fd0: 00000000 */ nop
/* f044fd4: 11000017 */ beqz $t0,.L0f045034
/* f044fd8: 27a400ac */ addiu $a0,$sp,0xac
/* f044fdc: 27a50094 */ addiu $a1,$sp,0x94
/* f044fe0: 0fc112da */ jal func0f044b68
/* f044fe4: 27a600d4 */ addiu $a2,$sp,0xd4
/* f044fe8: 27a400a0 */ addiu $a0,$sp,0xa0
/* f044fec: 27a50088 */ addiu $a1,$sp,0x88
/* f044ff0: 0fc112da */ jal func0f044b68
/* f044ff4: 27a600d4 */ addiu $a2,$sp,0xd4
/* f044ff8: 8fa400f0 */ lw $a0,0xf0($sp)
/* f044ffc: c7a400ac */ lwc1 $f4,0xac($sp)
/* f045000: 8fa500f4 */ lw $a1,0xf4($sp)
/* f045004: e4840000 */ swc1 $f4,0x0($a0)
/* f045008: c7a800b0 */ lwc1 $f8,0xb0($sp)
/* f04500c: e4880004 */ swc1 $f8,0x4($a0)
/* f045010: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f045014: e4860008 */ swc1 $f6,0x8($a0)
/* f045018: c7aa0088 */ lwc1 $f10,0x88($sp)
/* f04501c: e4aa0000 */ swc1 $f10,0x0($a1)
/* f045020: c7a4008c */ lwc1 $f4,0x8c($sp)
/* f045024: e4a40004 */ swc1 $f4,0x4($a1)
/* f045028: c7a80090 */ lwc1 $f8,0x90($sp)
/* f04502c: 10000055 */ b .L0f045184
/* f045030: e4a80008 */ swc1 $f8,0x8($a1)
.L0f045034:
/* f045034: 11200010 */ beqz $t1,.L0f045078
/* f045038: 8faa00b8 */ lw $t2,0xb8($sp)
/* f04503c: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045040: c7a600ac */ lwc1 $f6,0xac($sp)
/* f045044: 8fa500f4 */ lw $a1,0xf4($sp)
/* f045048: e4860000 */ swc1 $f6,0x0($a0)
/* f04504c: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f045050: e48a0004 */ swc1 $f10,0x4($a0)
/* f045054: c7a400b4 */ lwc1 $f4,0xb4($sp)
/* f045058: e4840008 */ swc1 $f4,0x8($a0)
/* f04505c: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f045060: e4a80000 */ swc1 $f8,0x0($a1)
/* f045064: c7a600a4 */ lwc1 $f6,0xa4($sp)
/* f045068: e4a60004 */ swc1 $f6,0x4($a1)
/* f04506c: c7aa00a8 */ lwc1 $f10,0xa8($sp)
/* f045070: 10000044 */ b .L0f045184
/* f045074: e4aa0008 */ swc1 $f10,0x8($a1)
.L0f045078:
/* f045078: 11400010 */ beqz $t2,.L0f0450bc
/* f04507c: 8fab0100 */ lw $t3,0x100($sp)
/* f045080: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045084: c7a40094 */ lwc1 $f4,0x94($sp)
/* f045088: 8fa500f4 */ lw $a1,0xf4($sp)
/* f04508c: e4840000 */ swc1 $f4,0x0($a0)
/* f045090: c7a80098 */ lwc1 $f8,0x98($sp)
/* f045094: e4880004 */ swc1 $f8,0x4($a0)
/* f045098: c7a6009c */ lwc1 $f6,0x9c($sp)
/* f04509c: e4860008 */ swc1 $f6,0x8($a0)
/* f0450a0: c7aa0088 */ lwc1 $f10,0x88($sp)
/* f0450a4: e4aa0000 */ swc1 $f10,0x0($a1)
/* f0450a8: c7a4008c */ lwc1 $f4,0x8c($sp)
/* f0450ac: e4a40004 */ swc1 $f4,0x4($a1)
/* f0450b0: c7a80090 */ lwc1 $f8,0x90($sp)
/* f0450b4: 10000033 */ b .L0f045184
/* f0450b8: e4a80008 */ swc1 $f8,0x8($a1)
.L0f0450bc:
/* f0450bc: 8fad003c */ lw $t5,0x3c($sp)
/* f0450c0: 240c0001 */ addiu $t4,$zero,0x1
/* f0450c4: afac0014 */ sw $t4,0x14($sp)
/* f0450c8: afab0010 */ sw $t3,0x10($sp)
/* f0450cc: c5a0000c */ lwc1 $f0,0xc($t5)
/* f0450d0: c7a60080 */ lwc1 $f6,0x80($sp)
/* f0450d4: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f0450d8: 02002025 */ or $a0,$s0,$zero
/* f0450dc: 46003281 */ sub.s $f10,$f6,$f0
/* f0450e0: 8fa500e8 */ lw $a1,0xe8($sp)
/* f0450e4: 8fa600ec */ lw $a2,0xec($sp)
/* f0450e8: 46002201 */ sub.s $f8,$f4,$f0
/* f0450ec: e7aa0018 */ swc1 $f10,0x18($sp)
/* f0450f0: 27a70040 */ addiu $a3,$sp,0x40
/* f0450f4: 0c00b694 */ jal func0002da50
/* f0450f8: e7a8001c */ swc1 $f8,0x1c($sp)
/* f0450fc: 10400017 */ beqz $v0,.L0f04515c
/* f045100: 8fae0104 */ lw $t6,0x104($sp)
/* f045104: 11c00012 */ beqz $t6,.L0f045150
/* f045108: 8faf0100 */ lw $t7,0x100($sp)
/* f04510c: 8fb9003c */ lw $t9,0x3c($sp)
/* f045110: 24180001 */ addiu $t8,$zero,0x1
/* f045114: afb80014 */ sw $t8,0x14($sp)
/* f045118: afaf0010 */ sw $t7,0x10($sp)
/* f04511c: c720000c */ lwc1 $f0,0xc($t9)
/* f045120: c7a60080 */ lwc1 $f6,0x80($sp)
/* f045124: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f045128: 02002025 */ or $a0,$s0,$zero
/* f04512c: 46003281 */ sub.s $f10,$f6,$f0
/* f045130: 8fa500ec */ lw $a1,0xec($sp)
/* f045134: 8fa600fc */ lw $a2,0xfc($sp)
/* f045138: 46002201 */ sub.s $f8,$f4,$f0
/* f04513c: e7aa0018 */ swc1 $f10,0x18($sp)
/* f045140: 27a70040 */ addiu $a3,$sp,0x40
/* f045144: 0c00a9bf */ jal func0002a6fc
/* f045148: e7a8001c */ swc1 $f8,0x1c($sp)
/* f04514c: 10400003 */ beqz $v0,.L0f04515c
.L0f045150:
/* f045150: 24080001 */ addiu $t0,$zero,0x1
/* f045154: 1000000b */ b .L0f045184
/* f045158: afa80084 */ sw $t0,0x84($sp)
.L0f04515c:
/* f04515c: 3c077f1b */ lui $a3,%hi(var7f1a8bb8)
/* f045160: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045164: 8fa500f4 */ lw $a1,0xf4($sp)
/* f045168: 24e78bb8 */ addiu $a3,$a3,%lo(var7f1a8bb8)
/* f04516c: 0c009393 */ jal func00024e4c
/* f045170: 24063796 */ addiu $a2,$zero,0x379c
/* f045174: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045178: 8fa500f4 */ lw $a1,0xf4($sp)
/* f04517c: 0fc112da */ jal func0f044b68
/* f045180: 27a600d4 */ addiu $a2,$sp,0xd4
.L0f045184:
/* f045184: 8fa400e0 */ lw $a0,0xe0($sp)
/* f045188: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f04518c: 24050001 */ addiu $a1,$zero,0x1
/* f045190: 8fa20084 */ lw $v0,0x84($sp)
.L0f045194:
/* f045194: 8fbf002c */ lw $ra,0x2c($sp)
/* f045198: 8fb00028 */ lw $s0,0x28($sp)
/* f04519c: 27bd00e0 */ addiu $sp,$sp,0xe0
/* f0451a0: 03e00008 */ jr $ra
/* f0451a4: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f044c38
.late_rodata
glabel var7f1a9238
.word 0x3f733333
glabel var7f1a923c
.word 0x3f733333
glabel var7f1a9240
.word 0x3f99999a
glabel var7f1a9244
.word 0x3f99999a
.text
/* f044c38: 27bdff20 */ addiu $sp,$sp,-224
/* f044c3c: afbf002c */ sw $ra,0x2c($sp)
/* f044c40: afb00028 */ sw $s0,0x28($sp)
/* f044c44: afa400e0 */ sw $a0,0xe0($sp)
/* f044c48: afa600e8 */ sw $a2,0xe8($sp)
/* f044c4c: afa700ec */ sw $a3,0xec($sp)
/* f044c50: afa000bc */ sw $zero,0xbc($sp)
/* f044c54: afa000b8 */ sw $zero,0xb8($sp)
/* f044c58: afa00084 */ sw $zero,0x84($sp)
/* f044c5c: 8c84001c */ lw $a0,0x1c($a0)
/* f044c60: 00a08025 */ or $s0,$a1,$zero
/* f044c64: 27a50078 */ addiu $a1,$sp,0x78
/* f044c68: 27a7007c */ addiu $a3,$sp,0x7c
/* f044c6c: 27a60080 */ addiu $a2,$sp,0x80
/* f044c70: 0fc0a277 */ jal propChrGetBbox
/* f044c74: afa4003c */ sw $a0,0x3c($sp)
/* f044c78: 8fa200ec */ lw $v0,0xec($sp)
/* f044c7c: c6060000 */ lwc1 $f6,0x0($s0)
/* f044c80: 44800000 */ mtc1 $zero,$f0
/* f044c84: c4440000 */ lwc1 $f4,0x0($v0)
/* f044c88: e7a000d8 */ swc1 $f0,0xd8($sp)
/* f044c8c: 46062201 */ sub.s $f8,$f4,$f6
/* f044c90: e7a800d4 */ swc1 $f8,0xd4($sp)
/* f044c94: c7a800d4 */ lwc1 $f8,0xd4($sp)
/* f044c98: c6040008 */ lwc1 $f4,0x8($s0)
/* f044c9c: c44a0008 */ lwc1 $f10,0x8($v0)
/* f044ca0: 46080032 */ c.eq.s $f0,$f8
/* f044ca4: 46045181 */ sub.s $f6,$f10,$f4
/* f044ca8: 45000008 */ bc1f .L0f044ccc
/* f044cac: e7a600dc */ swc1 $f6,0xdc($sp)
/* f044cb0: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f044cb4: 46120032 */ c.eq.s $f0,$f18
/* f044cb8: 00000000 */ nop
/* f044cbc: 45020004 */ bc1fl .L0f044cd0
/* f044cc0: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f044cc4: 10000133 */ b .L0f045194
/* f044cc8: 24020001 */ addiu $v0,$zero,0x1
.L0f044ccc:
/* f044ccc: c7b200dc */ lwc1 $f18,0xdc($sp)
.L0f044cd0:
/* f044cd0: c7b000d4 */ lwc1 $f16,0xd4($sp)
/* f044cd4: 46129282 */ mul.s $f10,$f18,$f18
/* f044cd8: 00000000 */ nop
/* f044cdc: 46108102 */ mul.s $f4,$f16,$f16
/* f044ce0: 0c012974 */ jal sqrtf
/* f044ce4: 46045300 */ add.s $f12,$f10,$f4
/* f044ce8: 3c013f80 */ lui $at,0x3f80
/* f044cec: 44813000 */ mtc1 $at,$f6
/* f044cf0: c7b000d4 */ lwc1 $f16,0xd4($sp)
/* f044cf4: c7b200dc */ lwc1 $f18,0xdc($sp)
/* f044cf8: 46003083 */ div.s $f2,$f6,$f0
/* f044cfc: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f044d00: 3c017f1b */ lui $at,%hi(var7f1a9238)
/* f044d04: c42a9238 */ lwc1 $f10,%lo(var7f1a9238)($at)
/* f044d08: 3c017f1b */ lui $at,%hi(var7f1a923c)
/* f044d0c: c426923c */ lwc1 $f6,%lo(var7f1a923c)($at)
/* f044d10: 3c017f1b */ lui $at,%hi(var7f1a9240)
/* f044d14: 8fa400e0 */ lw $a0,0xe0($sp)
/* f044d18: 00002825 */ or $a1,$zero,$zero
/* f044d1c: 46028402 */ mul.s $f16,$f16,$f2
/* f044d20: 00000000 */ nop
/* f044d24: 46029482 */ mul.s $f18,$f18,$f2
/* f044d28: 00000000 */ nop
/* f044d2c: 46088302 */ mul.s $f12,$f16,$f8
/* f044d30: e7b000d4 */ swc1 $f16,0xd4($sp)
/* f044d34: e7b200dc */ swc1 $f18,0xdc($sp)
/* f044d38: 460a6102 */ mul.s $f4,$f12,$f10
/* f044d3c: 00000000 */ nop
/* f044d40: 46089382 */ mul.s $f14,$f18,$f8
/* f044d44: e7a400d0 */ swc1 $f4,0xd0($sp)
/* f044d48: c4249240 */ lwc1 $f4,%lo(var7f1a9240)($at)
/* f044d4c: 3c017f1b */ lui $at,%hi(var7f1a9244)
/* f044d50: 46067282 */ mul.s $f10,$f14,$f6
/* f044d54: c4269244 */ lwc1 $f6,%lo(var7f1a9244)($at)
/* f044d58: 46046202 */ mul.s $f8,$f12,$f4
/* f044d5c: e7aa00cc */ swc1 $f10,0xcc($sp)
/* f044d60: 46067282 */ mul.s $f10,$f14,$f6
/* f044d64: e7a800c8 */ swc1 $f8,0xc8($sp)
/* f044d68: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f044d6c: e7aa00c4 */ swc1 $f10,0xc4($sp)
/* f044d70: c6040000 */ lwc1 $f4,0x0($s0)
/* f044d74: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f044d78: 8fa200ec */ lw $v0,0xec($sp)
/* f044d7c: c7a200f8 */ lwc1 $f2,0xf8($sp)
/* f044d80: 46082180 */ add.s $f6,$f4,$f8
/* f044d84: c7a800d0 */ lwc1 $f8,0xd0($sp)
/* f044d88: 8faf0100 */ lw $t7,0x100($sp)
/* f044d8c: 8fb9003c */ lw $t9,0x3c($sp)
/* f044d90: e7a6006c */ swc1 $f6,0x6c($sp)
/* f044d94: c60a0004 */ lwc1 $f10,0x4($s0)
/* f044d98: 24180001 */ addiu $t8,$zero,0x1
/* f044d9c: 02002025 */ or $a0,$s0,$zero
/* f044da0: e7aa0070 */ swc1 $f10,0x70($sp)
/* f044da4: c6040008 */ lwc1 $f4,0x8($s0)
/* f044da8: 8fa500e8 */ lw $a1,0xe8($sp)
/* f044dac: 27a6006c */ addiu $a2,$sp,0x6c
/* f044db0: 46082181 */ sub.s $f6,$f4,$f8
/* f044db4: c7a400c4 */ lwc1 $f4,0xc4($sp)
/* f044db8: 27a70050 */ addiu $a3,$sp,0x50
/* f044dbc: e7a60074 */ swc1 $f6,0x74($sp)
/* f044dc0: c44a0000 */ lwc1 $f10,0x0($v0)
/* f044dc4: c7a600d4 */ lwc1 $f6,0xd4($sp)
/* f044dc8: 46045200 */ add.s $f8,$f10,$f4
/* f044dcc: 46023282 */ mul.s $f10,$f6,$f2
/* f044dd0: 46085100 */ add.s $f4,$f10,$f8
/* f044dd4: c7a800c8 */ lwc1 $f8,0xc8($sp)
/* f044dd8: e7a40060 */ swc1 $f4,0x60($sp)
/* f044ddc: c4460004 */ lwc1 $f6,0x4($v0)
/* f044de0: e7a60064 */ swc1 $f6,0x64($sp)
/* f044de4: c44a0008 */ lwc1 $f10,0x8($v0)
/* f044de8: c7a600dc */ lwc1 $f6,0xdc($sp)
/* f044dec: afb80014 */ sw $t8,0x14($sp)
/* f044df0: 46085101 */ sub.s $f4,$f10,$f8
/* f044df4: 46023282 */ mul.s $f10,$f6,$f2
/* f044df8: afaf0010 */ sw $t7,0x10($sp)
/* f044dfc: c7a60080 */ lwc1 $f6,0x80($sp)
/* f044e00: 46045200 */ add.s $f8,$f10,$f4
/* f044e04: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f044e08: e7a80068 */ swc1 $f8,0x68($sp)
/* f044e0c: c720000c */ lwc1 $f0,0xc($t9)
/* f044e10: 46003281 */ sub.s $f10,$f6,$f0
/* f044e14: 46002201 */ sub.s $f8,$f4,$f0
/* f044e18: e7aa0018 */ swc1 $f10,0x18($sp)
/* f044e1c: 0c00b694 */ jal func0002da50
/* f044e20: e7a8001c */ swc1 $f8,0x1c($sp)
/* f044e24: 10400010 */ beqz $v0,.L0f044e68
/* f044e28: 24080001 */ addiu $t0,$zero,0x1
/* f044e2c: 8fa9003c */ lw $t1,0x3c($sp)
/* f044e30: afa80010 */ sw $t0,0x10($sp)
/* f044e34: c7a60080 */ lwc1 $f6,0x80($sp)
/* f044e38: c520000c */ lwc1 $f0,0xc($t1)
/* f044e3c: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f044e40: 27a4006c */ addiu $a0,$sp,0x6c
/* f044e44: 46003281 */ sub.s $f10,$f6,$f0
/* f044e48: 27a50050 */ addiu $a1,$sp,0x50
/* f044e4c: 27a60060 */ addiu $a2,$sp,0x60
/* f044e50: 46002201 */ sub.s $f8,$f4,$f0
/* f044e54: e7aa0014 */ swc1 $f10,0x14($sp)
/* f044e58: 8fa70100 */ lw $a3,0x100($sp)
/* f044e5c: 0c00b5f0 */ jal func0002d7c0
/* f044e60: e7a80018 */ swc1 $f8,0x18($sp)
/* f044e64: 1440000c */ bnez $v0,.L0f044e98
.L0f044e68:
/* f044e68: 240a0001 */ addiu $t2,$zero,0x1
/* f044e6c: 3c077f1b */ lui $a3,%hi(var7f1a8ba0)
/* f044e70: afaa00bc */ sw $t2,0xbc($sp)
/* f044e74: 24e78ba0 */ addiu $a3,$a3,%lo(var7f1a8ba0)
/* f044e78: 27a400ac */ addiu $a0,$sp,0xac
/* f044e7c: 27a500a0 */ addiu $a1,$sp,0xa0
/* f044e80: 0c009393 */ jal func00024e4c
/* f044e84: 24063741 */ addiu $a2,$zero,0x3741
/* f044e88: 27a400ac */ addiu $a0,$sp,0xac
/* f044e8c: 27a500a0 */ addiu $a1,$sp,0xa0
/* f044e90: 0fc112da */ jal func0f044b68
/* f044e94: 27a600d4 */ addiu $a2,$sp,0xd4
.L0f044e98:
/* f044e98: c6060000 */ lwc1 $f6,0x0($s0)
/* f044e9c: c7aa00cc */ lwc1 $f10,0xcc($sp)
/* f044ea0: 8fa200ec */ lw $v0,0xec($sp)
/* f044ea4: c7a200f8 */ lwc1 $f2,0xf8($sp)
/* f044ea8: 460a3101 */ sub.s $f4,$f6,$f10
/* f044eac: c7aa00d0 */ lwc1 $f10,0xd0($sp)
/* f044eb0: 8fab0100 */ lw $t3,0x100($sp)
/* f044eb4: 8fad003c */ lw $t5,0x3c($sp)
/* f044eb8: e7a4006c */ swc1 $f4,0x6c($sp)
/* f044ebc: c6080004 */ lwc1 $f8,0x4($s0)
/* f044ec0: 240c0001 */ addiu $t4,$zero,0x1
/* f044ec4: 02002025 */ or $a0,$s0,$zero
/* f044ec8: e7a80070 */ swc1 $f8,0x70($sp)
/* f044ecc: c6060008 */ lwc1 $f6,0x8($s0)
/* f044ed0: 8fa500e8 */ lw $a1,0xe8($sp)
/* f044ed4: 27a6006c */ addiu $a2,$sp,0x6c
/* f044ed8: 460a3100 */ add.s $f4,$f6,$f10
/* f044edc: c7a600c4 */ lwc1 $f6,0xc4($sp)
/* f044ee0: 27a70050 */ addiu $a3,$sp,0x50
/* f044ee4: e7a40074 */ swc1 $f4,0x74($sp)
/* f044ee8: c4480000 */ lwc1 $f8,0x0($v0)
/* f044eec: c7a400d4 */ lwc1 $f4,0xd4($sp)
/* f044ef0: 46064281 */ sub.s $f10,$f8,$f6
/* f044ef4: 46022202 */ mul.s $f8,$f4,$f2
/* f044ef8: 460a4180 */ add.s $f6,$f8,$f10
/* f044efc: c7aa00c8 */ lwc1 $f10,0xc8($sp)
/* f044f00: e7a60060 */ swc1 $f6,0x60($sp)
/* f044f04: c4440004 */ lwc1 $f4,0x4($v0)
/* f044f08: e7a40064 */ swc1 $f4,0x64($sp)
/* f044f0c: c4480008 */ lwc1 $f8,0x8($v0)
/* f044f10: c7a400dc */ lwc1 $f4,0xdc($sp)
/* f044f14: afac0014 */ sw $t4,0x14($sp)
/* f044f18: 460a4180 */ add.s $f6,$f8,$f10
/* f044f1c: 46022202 */ mul.s $f8,$f4,$f2
/* f044f20: afab0010 */ sw $t3,0x10($sp)
/* f044f24: c7a40080 */ lwc1 $f4,0x80($sp)
/* f044f28: 46064280 */ add.s $f10,$f8,$f6
/* f044f2c: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f044f30: e7aa0068 */ swc1 $f10,0x68($sp)
/* f044f34: c5a0000c */ lwc1 $f0,0xc($t5)
/* f044f38: 46002201 */ sub.s $f8,$f4,$f0
/* f044f3c: 46003281 */ sub.s $f10,$f6,$f0
/* f044f40: e7a80018 */ swc1 $f8,0x18($sp)
/* f044f44: 0c00b694 */ jal func0002da50
/* f044f48: e7aa001c */ swc1 $f10,0x1c($sp)
/* f044f4c: 10400010 */ beqz $v0,.L0f044f90
/* f044f50: 240e0001 */ addiu $t6,$zero,0x1
/* f044f54: 8faf003c */ lw $t7,0x3c($sp)
/* f044f58: afae0010 */ sw $t6,0x10($sp)
/* f044f5c: c7a40080 */ lwc1 $f4,0x80($sp)
/* f044f60: c5e0000c */ lwc1 $f0,0xc($t7)
/* f044f64: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f044f68: 27a4006c */ addiu $a0,$sp,0x6c
/* f044f6c: 46002201 */ sub.s $f8,$f4,$f0
/* f044f70: 8fa500e8 */ lw $a1,0xe8($sp)
/* f044f74: 27a60060 */ addiu $a2,$sp,0x60
/* f044f78: 46003281 */ sub.s $f10,$f6,$f0
/* f044f7c: e7a80014 */ swc1 $f8,0x14($sp)
/* f044f80: 8fa70100 */ lw $a3,0x100($sp)
/* f044f84: 0c00b5f0 */ jal func0002d7c0
/* f044f88: e7aa0018 */ swc1 $f10,0x18($sp)
/* f044f8c: 1440000c */ bnez $v0,.L0f044fc0
.L0f044f90:
/* f044f90: 24180001 */ addiu $t8,$zero,0x1
/* f044f94: 3c077f1b */ lui $a3,%hi(var7f1a8bac)
/* f044f98: afb800b8 */ sw $t8,0xb8($sp)
/* f044f9c: 24e78bac */ addiu $a3,$a3,%lo(var7f1a8bac)
/* f044fa0: 27a40094 */ addiu $a0,$sp,0x94
/* f044fa4: 27a50088 */ addiu $a1,$sp,0x88
/* f044fa8: 0c009393 */ jal func00024e4c
/* f044fac: 24063750 */ addiu $a2,$zero,0x3750
/* f044fb0: 27a40094 */ addiu $a0,$sp,0x94
/* f044fb4: 27a50088 */ addiu $a1,$sp,0x88
/* f044fb8: 0fc112da */ jal func0f044b68
/* f044fbc: 27a600d4 */ addiu $a2,$sp,0xd4
.L0f044fc0:
/* f044fc0: 8fb900bc */ lw $t9,0xbc($sp)
/* f044fc4: 8fa800b8 */ lw $t0,0xb8($sp)
/* f044fc8: 8fa900bc */ lw $t1,0xbc($sp)
/* f044fcc: 13200019 */ beqz $t9,.L0f045034
/* f044fd0: 00000000 */ nop
/* f044fd4: 11000017 */ beqz $t0,.L0f045034
/* f044fd8: 27a400ac */ addiu $a0,$sp,0xac
/* f044fdc: 27a50094 */ addiu $a1,$sp,0x94
/* f044fe0: 0fc112da */ jal func0f044b68
/* f044fe4: 27a600d4 */ addiu $a2,$sp,0xd4
/* f044fe8: 27a400a0 */ addiu $a0,$sp,0xa0
/* f044fec: 27a50088 */ addiu $a1,$sp,0x88
/* f044ff0: 0fc112da */ jal func0f044b68
/* f044ff4: 27a600d4 */ addiu $a2,$sp,0xd4
/* f044ff8: 8fa400f0 */ lw $a0,0xf0($sp)
/* f044ffc: c7a400ac */ lwc1 $f4,0xac($sp)
/* f045000: 8fa500f4 */ lw $a1,0xf4($sp)
/* f045004: e4840000 */ swc1 $f4,0x0($a0)
/* f045008: c7a800b0 */ lwc1 $f8,0xb0($sp)
/* f04500c: e4880004 */ swc1 $f8,0x4($a0)
/* f045010: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f045014: e4860008 */ swc1 $f6,0x8($a0)
/* f045018: c7aa0088 */ lwc1 $f10,0x88($sp)
/* f04501c: e4aa0000 */ swc1 $f10,0x0($a1)
/* f045020: c7a4008c */ lwc1 $f4,0x8c($sp)
/* f045024: e4a40004 */ swc1 $f4,0x4($a1)
/* f045028: c7a80090 */ lwc1 $f8,0x90($sp)
/* f04502c: 10000055 */ b .L0f045184
/* f045030: e4a80008 */ swc1 $f8,0x8($a1)
.L0f045034:
/* f045034: 11200010 */ beqz $t1,.L0f045078
/* f045038: 8faa00b8 */ lw $t2,0xb8($sp)
/* f04503c: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045040: c7a600ac */ lwc1 $f6,0xac($sp)
/* f045044: 8fa500f4 */ lw $a1,0xf4($sp)
/* f045048: e4860000 */ swc1 $f6,0x0($a0)
/* f04504c: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f045050: e48a0004 */ swc1 $f10,0x4($a0)
/* f045054: c7a400b4 */ lwc1 $f4,0xb4($sp)
/* f045058: e4840008 */ swc1 $f4,0x8($a0)
/* f04505c: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f045060: e4a80000 */ swc1 $f8,0x0($a1)
/* f045064: c7a600a4 */ lwc1 $f6,0xa4($sp)
/* f045068: e4a60004 */ swc1 $f6,0x4($a1)
/* f04506c: c7aa00a8 */ lwc1 $f10,0xa8($sp)
/* f045070: 10000044 */ b .L0f045184
/* f045074: e4aa0008 */ swc1 $f10,0x8($a1)
.L0f045078:
/* f045078: 11400010 */ beqz $t2,.L0f0450bc
/* f04507c: 8fab0100 */ lw $t3,0x100($sp)
/* f045080: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045084: c7a40094 */ lwc1 $f4,0x94($sp)
/* f045088: 8fa500f4 */ lw $a1,0xf4($sp)
/* f04508c: e4840000 */ swc1 $f4,0x0($a0)
/* f045090: c7a80098 */ lwc1 $f8,0x98($sp)
/* f045094: e4880004 */ swc1 $f8,0x4($a0)
/* f045098: c7a6009c */ lwc1 $f6,0x9c($sp)
/* f04509c: e4860008 */ swc1 $f6,0x8($a0)
/* f0450a0: c7aa0088 */ lwc1 $f10,0x88($sp)
/* f0450a4: e4aa0000 */ swc1 $f10,0x0($a1)
/* f0450a8: c7a4008c */ lwc1 $f4,0x8c($sp)
/* f0450ac: e4a40004 */ swc1 $f4,0x4($a1)
/* f0450b0: c7a80090 */ lwc1 $f8,0x90($sp)
/* f0450b4: 10000033 */ b .L0f045184
/* f0450b8: e4a80008 */ swc1 $f8,0x8($a1)
.L0f0450bc:
/* f0450bc: 8fad003c */ lw $t5,0x3c($sp)
/* f0450c0: 240c0001 */ addiu $t4,$zero,0x1
/* f0450c4: afac0014 */ sw $t4,0x14($sp)
/* f0450c8: afab0010 */ sw $t3,0x10($sp)
/* f0450cc: c5a0000c */ lwc1 $f0,0xc($t5)
/* f0450d0: c7a60080 */ lwc1 $f6,0x80($sp)
/* f0450d4: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f0450d8: 02002025 */ or $a0,$s0,$zero
/* f0450dc: 46003281 */ sub.s $f10,$f6,$f0
/* f0450e0: 8fa500e8 */ lw $a1,0xe8($sp)
/* f0450e4: 8fa600ec */ lw $a2,0xec($sp)
/* f0450e8: 46002201 */ sub.s $f8,$f4,$f0
/* f0450ec: e7aa0018 */ swc1 $f10,0x18($sp)
/* f0450f0: 27a70040 */ addiu $a3,$sp,0x40
/* f0450f4: 0c00b694 */ jal func0002da50
/* f0450f8: e7a8001c */ swc1 $f8,0x1c($sp)
/* f0450fc: 10400017 */ beqz $v0,.L0f04515c
/* f045100: 8fae0104 */ lw $t6,0x104($sp)
/* f045104: 11c00012 */ beqz $t6,.L0f045150
/* f045108: 8faf0100 */ lw $t7,0x100($sp)
/* f04510c: 8fb9003c */ lw $t9,0x3c($sp)
/* f045110: 24180001 */ addiu $t8,$zero,0x1
/* f045114: afb80014 */ sw $t8,0x14($sp)
/* f045118: afaf0010 */ sw $t7,0x10($sp)
/* f04511c: c720000c */ lwc1 $f0,0xc($t9)
/* f045120: c7a60080 */ lwc1 $f6,0x80($sp)
/* f045124: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f045128: 02002025 */ or $a0,$s0,$zero
/* f04512c: 46003281 */ sub.s $f10,$f6,$f0
/* f045130: 8fa500ec */ lw $a1,0xec($sp)
/* f045134: 8fa600fc */ lw $a2,0xfc($sp)
/* f045138: 46002201 */ sub.s $f8,$f4,$f0
/* f04513c: e7aa0018 */ swc1 $f10,0x18($sp)
/* f045140: 27a70040 */ addiu $a3,$sp,0x40
/* f045144: 0c00a9bf */ jal func0002a6fc
/* f045148: e7a8001c */ swc1 $f8,0x1c($sp)
/* f04514c: 10400003 */ beqz $v0,.L0f04515c
.L0f045150:
/* f045150: 24080001 */ addiu $t0,$zero,0x1
/* f045154: 1000000b */ b .L0f045184
/* f045158: afa80084 */ sw $t0,0x84($sp)
.L0f04515c:
/* f04515c: 3c077f1b */ lui $a3,%hi(var7f1a8bb8)
/* f045160: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045164: 8fa500f4 */ lw $a1,0xf4($sp)
/* f045168: 24e78bb8 */ addiu $a3,$a3,%lo(var7f1a8bb8)
/* f04516c: 0c009393 */ jal func00024e4c
/* f045170: 24063796 */ addiu $a2,$zero,0x3796
/* f045174: 8fa400f0 */ lw $a0,0xf0($sp)
/* f045178: 8fa500f4 */ lw $a1,0xf4($sp)
/* f04517c: 0fc112da */ jal func0f044b68
/* f045180: 27a600d4 */ addiu $a2,$sp,0xd4
.L0f045184:
/* f045184: 8fa400e0 */ lw $a0,0xe0($sp)
/* f045188: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f04518c: 24050001 */ addiu $a1,$zero,0x1
/* f045190: 8fa20084 */ lw $v0,0x84($sp)
.L0f045194:
/* f045194: 8fbf002c */ lw $ra,0x2c($sp)
/* f045198: 8fb00028 */ lw $s0,0x28($sp)
/* f04519c: 27bd00e0 */ addiu $sp,$sp,0xe0
/* f0451a0: 03e00008 */ jr $ra
/* f0451a4: 00000000 */ nop
);
#endif
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f0451a8
.late_rodata
glabel var7f1a9248
.word 0x3f733333
glabel var7f1a924c
.word 0x3f733333
glabel var7f1a9250
.word 0x3f99999a
glabel var7f1a9254
.word 0x3f99999a
.text
/* f0451a8: 27bdff18 */ addiu $sp,$sp,-232
/* f0451ac: afbf002c */ sw $ra,0x2c($sp)
/* f0451b0: afb00028 */ sw $s0,0x28($sp)
/* f0451b4: afa400e8 */ sw $a0,0xe8($sp)
/* f0451b8: afa600f0 */ sw $a2,0xf0($sp)
/* f0451bc: afa700f4 */ sw $a3,0xf4($sp)
/* f0451c0: afa000c4 */ sw $zero,0xc4($sp)
/* f0451c4: afa000c0 */ sw $zero,0xc0($sp)
/* f0451c8: afa0008c */ sw $zero,0x8c($sp)
/* f0451cc: 8c84001c */ lw $a0,0x1c($a0)
/* f0451d0: 00a08025 */ or $s0,$a1,$zero
/* f0451d4: 27a50078 */ addiu $a1,$sp,0x78
/* f0451d8: 27a7007c */ addiu $a3,$sp,0x7c
/* f0451dc: 27a60080 */ addiu $a2,$sp,0x80
/* f0451e0: 0fc0a277 */ jal propChrGetBbox
/* f0451e4: afa4003c */ sw $a0,0x3c($sp)
/* f0451e8: 8fa200f4 */ lw $v0,0xf4($sp)
/* f0451ec: c6060000 */ lwc1 $f6,0x0($s0)
/* f0451f0: 44800000 */ mtc1 $zero,$f0
/* f0451f4: c4440000 */ lwc1 $f4,0x0($v0)
/* f0451f8: e7a000e0 */ swc1 $f0,0xe0($sp)
/* f0451fc: 46062201 */ sub.s $f8,$f4,$f6
/* f045200: e7a800dc */ swc1 $f8,0xdc($sp)
/* f045204: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f045208: c6040008 */ lwc1 $f4,0x8($s0)
/* f04520c: c44a0008 */ lwc1 $f10,0x8($v0)
/* f045210: 46080032 */ c.eq.s $f0,$f8
/* f045214: 46045181 */ sub.s $f6,$f10,$f4
/* f045218: 45000008 */ bc1f .L0f04523c
/* f04521c: e7a600e4 */ swc1 $f6,0xe4($sp)
/* f045220: c7b200e4 */ lwc1 $f18,0xe4($sp)
/* f045224: 46120032 */ c.eq.s $f0,$f18
/* f045228: 00000000 */ nop
/* f04522c: 45020004 */ bc1fl .L0f045240
/* f045230: c7b200e4 */ lwc1 $f18,0xe4($sp)
/* f045234: 10000145 */ b .L0f04574c
/* f045238: 24020001 */ addiu $v0,$zero,0x1
.L0f04523c:
/* f04523c: c7b200e4 */ lwc1 $f18,0xe4($sp)
.L0f045240:
/* f045240: c7b000dc */ lwc1 $f16,0xdc($sp)
/* f045244: 46129282 */ mul.s $f10,$f18,$f18
/* f045248: 00000000 */ nop
/* f04524c: 46108102 */ mul.s $f4,$f16,$f16
/* f045250: 0c012974 */ jal sqrtf
/* f045254: 46045300 */ add.s $f12,$f10,$f4
/* f045258: 3c013f80 */ lui $at,0x3f80
/* f04525c: 44813000 */ mtc1 $at,$f6
/* f045260: c7b000dc */ lwc1 $f16,0xdc($sp)
/* f045264: c7b200e4 */ lwc1 $f18,0xe4($sp)
/* f045268: 46003083 */ div.s $f2,$f6,$f0
/* f04526c: c7a80104 */ lwc1 $f8,0x104($sp)
/* f045270: 3c017f1b */ lui $at,%hi(var7f1a9248)
/* f045274: c42a9248 */ lwc1 $f10,%lo(var7f1a9248)($at)
/* f045278: 3c017f1b */ lui $at,%hi(var7f1a924c)
/* f04527c: c426924c */ lwc1 $f6,%lo(var7f1a924c)($at)
/* f045280: 3c017f1b */ lui $at,%hi(var7f1a9250)
/* f045284: 8fa400e8 */ lw $a0,0xe8($sp)
/* f045288: 00002825 */ or $a1,$zero,$zero
/* f04528c: 46028402 */ mul.s $f16,$f16,$f2
/* f045290: 00000000 */ nop
/* f045294: 46029482 */ mul.s $f18,$f18,$f2
/* f045298: 00000000 */ nop
/* f04529c: 46088302 */ mul.s $f12,$f16,$f8
/* f0452a0: e7b000dc */ swc1 $f16,0xdc($sp)
/* f0452a4: e7b200e4 */ swc1 $f18,0xe4($sp)
/* f0452a8: 460a6102 */ mul.s $f4,$f12,$f10
/* f0452ac: 00000000 */ nop
/* f0452b0: 46089382 */ mul.s $f14,$f18,$f8
/* f0452b4: e7a400d8 */ swc1 $f4,0xd8($sp)
/* f0452b8: c4249250 */ lwc1 $f4,%lo(var7f1a9250)($at)
/* f0452bc: 3c017f1b */ lui $at,%hi(var7f1a9254)
/* f0452c0: 46067282 */ mul.s $f10,$f14,$f6
/* f0452c4: c4269254 */ lwc1 $f6,%lo(var7f1a9254)($at)
/* f0452c8: 46046202 */ mul.s $f8,$f12,$f4
/* f0452cc: e7aa00d4 */ swc1 $f10,0xd4($sp)
/* f0452d0: 46067282 */ mul.s $f10,$f14,$f6
/* f0452d4: e7a800d0 */ swc1 $f8,0xd0($sp)
/* f0452d8: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f0452dc: e7aa00cc */ swc1 $f10,0xcc($sp)
/* f0452e0: c6040000 */ lwc1 $f4,0x0($s0)
/* f0452e4: c7a800d4 */ lwc1 $f8,0xd4($sp)
/* f0452e8: 8fa200f4 */ lw $v0,0xf4($sp)
/* f0452ec: c7a20100 */ lwc1 $f2,0x100($sp)
/* f0452f0: 46082180 */ add.s $f6,$f4,$f8
/* f0452f4: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f0452f8: 8faf0108 */ lw $t7,0x108($sp)
/* f0452fc: 8fb9003c */ lw $t9,0x3c($sp)
/* f045300: e7a6006c */ swc1 $f6,0x6c($sp)
/* f045304: c60a0004 */ lwc1 $f10,0x4($s0)
/* f045308: 24180001 */ addiu $t8,$zero,0x1
/* f04530c: 02002025 */ or $a0,$s0,$zero
/* f045310: e7aa0070 */ swc1 $f10,0x70($sp)
/* f045314: c6040008 */ lwc1 $f4,0x8($s0)
/* f045318: 8fa500f0 */ lw $a1,0xf0($sp)
/* f04531c: 27a6006c */ addiu $a2,$sp,0x6c
/* f045320: 46082181 */ sub.s $f6,$f4,$f8
/* f045324: c7a400cc */ lwc1 $f4,0xcc($sp)
/* f045328: 27a70050 */ addiu $a3,$sp,0x50
/* f04532c: e7a60074 */ swc1 $f6,0x74($sp)
/* f045330: c44a0000 */ lwc1 $f10,0x0($v0)
/* f045334: c7a600dc */ lwc1 $f6,0xdc($sp)
/* f045338: 46045200 */ add.s $f8,$f10,$f4
/* f04533c: 46023282 */ mul.s $f10,$f6,$f2
/* f045340: 46085100 */ add.s $f4,$f10,$f8
/* f045344: c7a800d0 */ lwc1 $f8,0xd0($sp)
/* f045348: e7a40060 */ swc1 $f4,0x60($sp)
/* f04534c: c4460004 */ lwc1 $f6,0x4($v0)
/* f045350: e7a60064 */ swc1 $f6,0x64($sp)
/* f045354: c44a0008 */ lwc1 $f10,0x8($v0)
/* f045358: c7a600e4 */ lwc1 $f6,0xe4($sp)
/* f04535c: afb80014 */ sw $t8,0x14($sp)
/* f045360: 46085101 */ sub.s $f4,$f10,$f8
/* f045364: 46023282 */ mul.s $f10,$f6,$f2
/* f045368: afaf0010 */ sw $t7,0x10($sp)
/* f04536c: c7a60080 */ lwc1 $f6,0x80($sp)
/* f045370: 46045200 */ add.s $f8,$f10,$f4
/* f045374: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f045378: e7a80068 */ swc1 $f8,0x68($sp)
/* f04537c: c720000c */ lwc1 $f0,0xc($t9)
/* f045380: 46003281 */ sub.s $f10,$f6,$f0
/* f045384: 46002201 */ sub.s $f8,$f4,$f0
/* f045388: e7aa0018 */ swc1 $f10,0x18($sp)
/* f04538c: 0c00b694 */ jal func0002da50
/* f045390: e7a8001c */ swc1 $f8,0x1c($sp)
/* f045394: 10400010 */ beqz $v0,.L0f0453d8
/* f045398: 24080001 */ addiu $t0,$zero,0x1
/* f04539c: 8fa9003c */ lw $t1,0x3c($sp)
/* f0453a0: afa80010 */ sw $t0,0x10($sp)
/* f0453a4: c7a60080 */ lwc1 $f6,0x80($sp)
/* f0453a8: c520000c */ lwc1 $f0,0xc($t1)
/* f0453ac: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f0453b0: 27a4006c */ addiu $a0,$sp,0x6c
/* f0453b4: 46003281 */ sub.s $f10,$f6,$f0
/* f0453b8: 27a50050 */ addiu $a1,$sp,0x50
/* f0453bc: 27a60060 */ addiu $a2,$sp,0x60
/* f0453c0: 46002201 */ sub.s $f8,$f4,$f0
/* f0453c4: e7aa0014 */ swc1 $f10,0x14($sp)
/* f0453c8: 8fa70108 */ lw $a3,0x108($sp)
/* f0453cc: 0c00b5f0 */ jal func0002d7c0
/* f0453d0: e7a80018 */ swc1 $f8,0x18($sp)
/* f0453d4: 1440000f */ bnez $v0,.L0f045414
.L0f0453d8:
/* f0453d8: 240a0001 */ addiu $t2,$zero,0x1
/* f0453dc: 3c077f1b */ lui $a3,%hi(var7f1a8bc4)
/* f0453e0: afaa00c4 */ sw $t2,0xc4($sp)
/* f0453e4: 24e78bc4 */ addiu $a3,$a3,%lo(var7f1a8bc4)
/* f0453e8: 27a400b4 */ addiu $a0,$sp,0xb4
/* f0453ec: 27a500a8 */ addiu $a1,$sp,0xa8
/* f0453f0: 0c009393 */ jal func00024e4c
/* f0453f4: 240637e6 */ addiu $a2,$zero,0x37ec
/* f0453f8: 27a400b4 */ addiu $a0,$sp,0xb4
/* f0453fc: 27a500a8 */ addiu $a1,$sp,0xa8
/* f045400: 0fc112da */ jal func0f044b68
/* f045404: 27a600dc */ addiu $a2,$sp,0xdc
/* f045408: 0c009390 */ jal func00024e40
/* f04540c: 00000000 */ nop
/* f045410: e7a00088 */ swc1 $f0,0x88($sp)
.L0f045414:
/* f045414: c6060000 */ lwc1 $f6,0x0($s0)
/* f045418: c7aa00d4 */ lwc1 $f10,0xd4($sp)
/* f04541c: 8fa200f4 */ lw $v0,0xf4($sp)
/* f045420: c7a20100 */ lwc1 $f2,0x100($sp)
/* f045424: 460a3101 */ sub.s $f4,$f6,$f10
/* f045428: c7aa00d8 */ lwc1 $f10,0xd8($sp)
/* f04542c: 8fab0108 */ lw $t3,0x108($sp)
/* f045430: 8fad003c */ lw $t5,0x3c($sp)
/* f045434: e7a4006c */ swc1 $f4,0x6c($sp)
/* f045438: c6080004 */ lwc1 $f8,0x4($s0)
/* f04543c: 240c0001 */ addiu $t4,$zero,0x1
/* f045440: 02002025 */ or $a0,$s0,$zero
/* f045444: e7a80070 */ swc1 $f8,0x70($sp)
/* f045448: c6060008 */ lwc1 $f6,0x8($s0)
/* f04544c: 8fa500f0 */ lw $a1,0xf0($sp)
/* f045450: 27a6006c */ addiu $a2,$sp,0x6c
/* f045454: 460a3100 */ add.s $f4,$f6,$f10
/* f045458: c7a600cc */ lwc1 $f6,0xcc($sp)
/* f04545c: 27a70050 */ addiu $a3,$sp,0x50
/* f045460: e7a40074 */ swc1 $f4,0x74($sp)
/* f045464: c4480000 */ lwc1 $f8,0x0($v0)
/* f045468: c7a400dc */ lwc1 $f4,0xdc($sp)
/* f04546c: 46064281 */ sub.s $f10,$f8,$f6
/* f045470: 46022202 */ mul.s $f8,$f4,$f2
/* f045474: 460a4180 */ add.s $f6,$f8,$f10
/* f045478: c7aa00d0 */ lwc1 $f10,0xd0($sp)
/* f04547c: e7a60060 */ swc1 $f6,0x60($sp)
/* f045480: c4440004 */ lwc1 $f4,0x4($v0)
/* f045484: e7a40064 */ swc1 $f4,0x64($sp)
/* f045488: c4480008 */ lwc1 $f8,0x8($v0)
/* f04548c: c7a400e4 */ lwc1 $f4,0xe4($sp)
/* f045490: afac0014 */ sw $t4,0x14($sp)
/* f045494: 460a4180 */ add.s $f6,$f8,$f10
/* f045498: 46022202 */ mul.s $f8,$f4,$f2
/* f04549c: afab0010 */ sw $t3,0x10($sp)
/* f0454a0: c7a40080 */ lwc1 $f4,0x80($sp)
/* f0454a4: 46064280 */ add.s $f10,$f8,$f6
/* f0454a8: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f0454ac: e7aa0068 */ swc1 $f10,0x68($sp)
/* f0454b0: c5a0000c */ lwc1 $f0,0xc($t5)
/* f0454b4: 46002201 */ sub.s $f8,$f4,$f0
/* f0454b8: 46003281 */ sub.s $f10,$f6,$f0
/* f0454bc: e7a80018 */ swc1 $f8,0x18($sp)
/* f0454c0: 0c00b694 */ jal func0002da50
/* f0454c4: e7aa001c */ swc1 $f10,0x1c($sp)
/* f0454c8: 10400010 */ beqz $v0,.L0f04550c
/* f0454cc: 240e0001 */ addiu $t6,$zero,0x1
/* f0454d0: 8faf003c */ lw $t7,0x3c($sp)
/* f0454d4: afae0010 */ sw $t6,0x10($sp)
/* f0454d8: c7a40080 */ lwc1 $f4,0x80($sp)
/* f0454dc: c5e0000c */ lwc1 $f0,0xc($t7)
/* f0454e0: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f0454e4: 27a4006c */ addiu $a0,$sp,0x6c
/* f0454e8: 46002201 */ sub.s $f8,$f4,$f0
/* f0454ec: 8fa500f0 */ lw $a1,0xf0($sp)
/* f0454f0: 27a60060 */ addiu $a2,$sp,0x60
/* f0454f4: 46003281 */ sub.s $f10,$f6,$f0
/* f0454f8: e7a80014 */ swc1 $f8,0x14($sp)
/* f0454fc: 8fa70108 */ lw $a3,0x108($sp)
/* f045500: 0c00b5f0 */ jal func0002d7c0
/* f045504: e7aa0018 */ swc1 $f10,0x18($sp)
/* f045508: 1440000f */ bnez $v0,.L0f045548
.L0f04550c:
/* f04550c: 24180001 */ addiu $t8,$zero,0x1
/* f045510: 3c077f1b */ lui $a3,%hi(var7f1a8bd0)
/* f045514: afb800c0 */ sw $t8,0xc0($sp)
/* f045518: 24e78bd0 */ addiu $a3,$a3,%lo(var7f1a8bd0)
/* f04551c: 27a4009c */ addiu $a0,$sp,0x9c
/* f045520: 27a50090 */ addiu $a1,$sp,0x90
/* f045524: 0c009393 */ jal func00024e4c
/* f045528: 240637f5 */ addiu $a2,$zero,0x37fb
/* f04552c: 27a4009c */ addiu $a0,$sp,0x9c
/* f045530: 27a50090 */ addiu $a1,$sp,0x90
/* f045534: 0fc112da */ jal func0f044b68
/* f045538: 27a600dc */ addiu $a2,$sp,0xdc
/* f04553c: 0c009390 */ jal func00024e40
/* f045540: 00000000 */ nop
/* f045544: e7a00084 */ swc1 $f0,0x84($sp)
.L0f045548:
/* f045548: 8fb900c4 */ lw $t9,0xc4($sp)
/* f04554c: 8fa800c0 */ lw $t0,0xc0($sp)
/* f045550: 8fa900c4 */ lw $t1,0xc4($sp)
/* f045554: 13200025 */ beqz $t9,.L0f0455ec
/* f045558: 00000000 */ nop
/* f04555c: 11000023 */ beqz $t0,.L0f0455ec
/* f045560: c7a40088 */ lwc1 $f4,0x88($sp)
/* f045564: c7a80084 */ lwc1 $f8,0x84($sp)
/* f045568: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f04556c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f045570: 4608203c */ c.lt.s $f4,$f8
/* f045574: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f045578: 45020010 */ bc1fl .L0f0455bc
/* f04557c: 8fa500fc */ lw $a1,0xfc($sp)
/* f045580: 8fa400f8 */ lw $a0,0xf8($sp)
/* f045584: 8fa500fc */ lw $a1,0xfc($sp)
/* f045588: e4860000 */ swc1 $f6,0x0($a0)
/* f04558c: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f045590: e48a0004 */ swc1 $f10,0x4($a0)
/* f045594: c7a400bc */ lwc1 $f4,0xbc($sp)
/* f045598: e4840008 */ swc1 $f4,0x8($a0)
/* f04559c: c7a800a8 */ lwc1 $f8,0xa8($sp)
/* f0455a0: e4a80000 */ swc1 $f8,0x0($a1)
/* f0455a4: c7a600ac */ lwc1 $f6,0xac($sp)
/* f0455a8: e4a60004 */ swc1 $f6,0x4($a1)
/* f0455ac: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f0455b0: 10000062 */ b .L0f04573c
/* f0455b4: e4aa0008 */ swc1 $f10,0x8($a1)
/* f0455b8: 8fa500fc */ lw $a1,0xfc($sp)
.L0f0455bc:
/* f0455bc: e4840000 */ swc1 $f4,0x0($a0)
/* f0455c0: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f0455c4: e4880004 */ swc1 $f8,0x4($a0)
/* f0455c8: c7a600a4 */ lwc1 $f6,0xa4($sp)
/* f0455cc: e4860008 */ swc1 $f6,0x8($a0)
/* f0455d0: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f0455d4: e4aa0000 */ swc1 $f10,0x0($a1)
/* f0455d8: c7a40094 */ lwc1 $f4,0x94($sp)
/* f0455dc: e4a40004 */ swc1 $f4,0x4($a1)
/* f0455e0: c7a80098 */ lwc1 $f8,0x98($sp)
/* f0455e4: 10000055 */ b .L0f04573c
/* f0455e8: e4a80008 */ swc1 $f8,0x8($a1)
.L0f0455ec:
/* f0455ec: 11200010 */ beqz $t1,.L0f045630
/* f0455f0: 8faa00c0 */ lw $t2,0xc0($sp)
/* f0455f4: 8fa400f8 */ lw $a0,0xf8($sp)
/* f0455f8: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f0455fc: 8fa500fc */ lw $a1,0xfc($sp)
/* f045600: e4860000 */ swc1 $f6,0x0($a0)
/* f045604: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f045608: e48a0004 */ swc1 $f10,0x4($a0)
/* f04560c: c7a400bc */ lwc1 $f4,0xbc($sp)
/* f045610: e4840008 */ swc1 $f4,0x8($a0)
/* f045614: c7a800a8 */ lwc1 $f8,0xa8($sp)
/* f045618: e4a80000 */ swc1 $f8,0x0($a1)
/* f04561c: c7a600ac */ lwc1 $f6,0xac($sp)
/* f045620: e4a60004 */ swc1 $f6,0x4($a1)
/* f045624: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f045628: 10000044 */ b .L0f04573c
/* f04562c: e4aa0008 */ swc1 $f10,0x8($a1)
.L0f045630:
/* f045630: 11400010 */ beqz $t2,.L0f045674
/* f045634: 8fab0108 */ lw $t3,0x108($sp)
/* f045638: 8fa400f8 */ lw $a0,0xf8($sp)
/* f04563c: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f045640: 8fa500fc */ lw $a1,0xfc($sp)
/* f045644: e4840000 */ swc1 $f4,0x0($a0)
/* f045648: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f04564c: e4880004 */ swc1 $f8,0x4($a0)
/* f045650: c7a600a4 */ lwc1 $f6,0xa4($sp)
/* f045654: e4860008 */ swc1 $f6,0x8($a0)
/* f045658: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f04565c: e4aa0000 */ swc1 $f10,0x0($a1)
/* f045660: c7a40094 */ lwc1 $f4,0x94($sp)
/* f045664: e4a40004 */ swc1 $f4,0x4($a1)
/* f045668: c7a80098 */ lwc1 $f8,0x98($sp)
/* f04566c: 10000033 */ b .L0f04573c
/* f045670: e4a80008 */ swc1 $f8,0x8($a1)
.L0f045674:
/* f045674: 8fad003c */ lw $t5,0x3c($sp)
/* f045678: 240c0001 */ addiu $t4,$zero,0x1
/* f04567c: afac0014 */ sw $t4,0x14($sp)
/* f045680: afab0010 */ sw $t3,0x10($sp)
/* f045684: c5a0000c */ lwc1 $f0,0xc($t5)
/* f045688: c7a60080 */ lwc1 $f6,0x80($sp)
/* f04568c: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f045690: 02002025 */ or $a0,$s0,$zero
/* f045694: 46003281 */ sub.s $f10,$f6,$f0
/* f045698: 8fa500f0 */ lw $a1,0xf0($sp)
/* f04569c: 8fa600f4 */ lw $a2,0xf4($sp)
/* f0456a0: 46002201 */ sub.s $f8,$f4,$f0
/* f0456a4: e7aa0018 */ swc1 $f10,0x18($sp)
/* f0456a8: 27a70040 */ addiu $a3,$sp,0x40
/* f0456ac: 0c00b694 */ jal func0002da50
/* f0456b0: e7a8001c */ swc1 $f8,0x1c($sp)
/* f0456b4: 10400017 */ beqz $v0,.L0f045714
/* f0456b8: 8fae010c */ lw $t6,0x10c($sp)
/* f0456bc: 11c00012 */ beqz $t6,.L0f045708
/* f0456c0: 8faf0108 */ lw $t7,0x108($sp)
/* f0456c4: 8fb9003c */ lw $t9,0x3c($sp)
/* f0456c8: 24180001 */ addiu $t8,$zero,0x1
/* f0456cc: afb80014 */ sw $t8,0x14($sp)
/* f0456d0: afaf0010 */ sw $t7,0x10($sp)
/* f0456d4: c720000c */ lwc1 $f0,0xc($t9)
/* f0456d8: c7a60080 */ lwc1 $f6,0x80($sp)
/* f0456dc: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f0456e0: 02002025 */ or $a0,$s0,$zero
/* f0456e4: 46003281 */ sub.s $f10,$f6,$f0
/* f0456e8: 8fa500f4 */ lw $a1,0xf4($sp)
/* f0456ec: 8fa60104 */ lw $a2,0x104($sp)
/* f0456f0: 46002201 */ sub.s $f8,$f4,$f0
/* f0456f4: e7aa0018 */ swc1 $f10,0x18($sp)
/* f0456f8: 27a70040 */ addiu $a3,$sp,0x40
/* f0456fc: 0c00a9bf */ jal func0002a6fc
/* f045700: e7a8001c */ swc1 $f8,0x1c($sp)
/* f045704: 10400003 */ beqz $v0,.L0f045714
.L0f045708:
/* f045708: 24080001 */ addiu $t0,$zero,0x1
/* f04570c: 1000000b */ b .L0f04573c
/* f045710: afa8008c */ sw $t0,0x8c($sp)
.L0f045714:
/* f045714: 3c077f1b */ lui $a3,%hi(var7f1a8bdc)
/* f045718: 8fa400f8 */ lw $a0,0xf8($sp)
/* f04571c: 8fa500fc */ lw $a1,0xfc($sp)
/* f045720: 24e78bdc */ addiu $a3,$a3,%lo(var7f1a8bdc)
/* f045724: 0c009393 */ jal func00024e4c
/* f045728: 2406383b */ addiu $a2,$zero,0x3841
/* f04572c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f045730: 8fa500fc */ lw $a1,0xfc($sp)
/* f045734: 0fc112da */ jal func0f044b68
/* f045738: 27a600dc */ addiu $a2,$sp,0xdc
.L0f04573c:
/* f04573c: 8fa400e8 */ lw $a0,0xe8($sp)
/* f045740: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f045744: 24050001 */ addiu $a1,$zero,0x1
/* f045748: 8fa2008c */ lw $v0,0x8c($sp)
.L0f04574c:
/* f04574c: 8fbf002c */ lw $ra,0x2c($sp)
/* f045750: 8fb00028 */ lw $s0,0x28($sp)
/* f045754: 27bd00e8 */ addiu $sp,$sp,0xe8
/* f045758: 03e00008 */ jr $ra
/* f04575c: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel func0f0451a8
.late_rodata
glabel var7f1a9248
.word 0x3f733333
glabel var7f1a924c
.word 0x3f733333
glabel var7f1a9250
.word 0x3f99999a
glabel var7f1a9254
.word 0x3f99999a
.text
/* f0451a8: 27bdff18 */ addiu $sp,$sp,-232
/* f0451ac: afbf002c */ sw $ra,0x2c($sp)
/* f0451b0: afb00028 */ sw $s0,0x28($sp)
/* f0451b4: afa400e8 */ sw $a0,0xe8($sp)
/* f0451b8: afa600f0 */ sw $a2,0xf0($sp)
/* f0451bc: afa700f4 */ sw $a3,0xf4($sp)
/* f0451c0: afa000c4 */ sw $zero,0xc4($sp)
/* f0451c4: afa000c0 */ sw $zero,0xc0($sp)
/* f0451c8: afa0008c */ sw $zero,0x8c($sp)
/* f0451cc: 8c84001c */ lw $a0,0x1c($a0)
/* f0451d0: 00a08025 */ or $s0,$a1,$zero
/* f0451d4: 27a50078 */ addiu $a1,$sp,0x78
/* f0451d8: 27a7007c */ addiu $a3,$sp,0x7c
/* f0451dc: 27a60080 */ addiu $a2,$sp,0x80
/* f0451e0: 0fc0a277 */ jal propChrGetBbox
/* f0451e4: afa4003c */ sw $a0,0x3c($sp)
/* f0451e8: 8fa200f4 */ lw $v0,0xf4($sp)
/* f0451ec: c6060000 */ lwc1 $f6,0x0($s0)
/* f0451f0: 44800000 */ mtc1 $zero,$f0
/* f0451f4: c4440000 */ lwc1 $f4,0x0($v0)
/* f0451f8: e7a000e0 */ swc1 $f0,0xe0($sp)
/* f0451fc: 46062201 */ sub.s $f8,$f4,$f6
/* f045200: e7a800dc */ swc1 $f8,0xdc($sp)
/* f045204: c7a800dc */ lwc1 $f8,0xdc($sp)
/* f045208: c6040008 */ lwc1 $f4,0x8($s0)
/* f04520c: c44a0008 */ lwc1 $f10,0x8($v0)
/* f045210: 46080032 */ c.eq.s $f0,$f8
/* f045214: 46045181 */ sub.s $f6,$f10,$f4
/* f045218: 45000008 */ bc1f .L0f04523c
/* f04521c: e7a600e4 */ swc1 $f6,0xe4($sp)
/* f045220: c7b200e4 */ lwc1 $f18,0xe4($sp)
/* f045224: 46120032 */ c.eq.s $f0,$f18
/* f045228: 00000000 */ nop
/* f04522c: 45020004 */ bc1fl .L0f045240
/* f045230: c7b200e4 */ lwc1 $f18,0xe4($sp)
/* f045234: 10000145 */ b .L0f04574c
/* f045238: 24020001 */ addiu $v0,$zero,0x1
.L0f04523c:
/* f04523c: c7b200e4 */ lwc1 $f18,0xe4($sp)
.L0f045240:
/* f045240: c7b000dc */ lwc1 $f16,0xdc($sp)
/* f045244: 46129282 */ mul.s $f10,$f18,$f18
/* f045248: 00000000 */ nop
/* f04524c: 46108102 */ mul.s $f4,$f16,$f16
/* f045250: 0c012974 */ jal sqrtf
/* f045254: 46045300 */ add.s $f12,$f10,$f4
/* f045258: 3c013f80 */ lui $at,0x3f80
/* f04525c: 44813000 */ mtc1 $at,$f6
/* f045260: c7b000dc */ lwc1 $f16,0xdc($sp)
/* f045264: c7b200e4 */ lwc1 $f18,0xe4($sp)
/* f045268: 46003083 */ div.s $f2,$f6,$f0
/* f04526c: c7a80104 */ lwc1 $f8,0x104($sp)
/* f045270: 3c017f1b */ lui $at,%hi(var7f1a9248)
/* f045274: c42a9248 */ lwc1 $f10,%lo(var7f1a9248)($at)
/* f045278: 3c017f1b */ lui $at,%hi(var7f1a924c)
/* f04527c: c426924c */ lwc1 $f6,%lo(var7f1a924c)($at)
/* f045280: 3c017f1b */ lui $at,%hi(var7f1a9250)
/* f045284: 8fa400e8 */ lw $a0,0xe8($sp)
/* f045288: 00002825 */ or $a1,$zero,$zero
/* f04528c: 46028402 */ mul.s $f16,$f16,$f2
/* f045290: 00000000 */ nop
/* f045294: 46029482 */ mul.s $f18,$f18,$f2
/* f045298: 00000000 */ nop
/* f04529c: 46088302 */ mul.s $f12,$f16,$f8
/* f0452a0: e7b000dc */ swc1 $f16,0xdc($sp)
/* f0452a4: e7b200e4 */ swc1 $f18,0xe4($sp)
/* f0452a8: 460a6102 */ mul.s $f4,$f12,$f10
/* f0452ac: 00000000 */ nop
/* f0452b0: 46089382 */ mul.s $f14,$f18,$f8
/* f0452b4: e7a400d8 */ swc1 $f4,0xd8($sp)
/* f0452b8: c4249250 */ lwc1 $f4,%lo(var7f1a9250)($at)
/* f0452bc: 3c017f1b */ lui $at,%hi(var7f1a9254)
/* f0452c0: 46067282 */ mul.s $f10,$f14,$f6
/* f0452c4: c4269254 */ lwc1 $f6,%lo(var7f1a9254)($at)
/* f0452c8: 46046202 */ mul.s $f8,$f12,$f4
/* f0452cc: e7aa00d4 */ swc1 $f10,0xd4($sp)
/* f0452d0: 46067282 */ mul.s $f10,$f14,$f6
/* f0452d4: e7a800d0 */ swc1 $f8,0xd0($sp)
/* f0452d8: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f0452dc: e7aa00cc */ swc1 $f10,0xcc($sp)
/* f0452e0: c6040000 */ lwc1 $f4,0x0($s0)
/* f0452e4: c7a800d4 */ lwc1 $f8,0xd4($sp)
/* f0452e8: 8fa200f4 */ lw $v0,0xf4($sp)
/* f0452ec: c7a20100 */ lwc1 $f2,0x100($sp)
/* f0452f0: 46082180 */ add.s $f6,$f4,$f8
/* f0452f4: c7a800d8 */ lwc1 $f8,0xd8($sp)
/* f0452f8: 8faf0108 */ lw $t7,0x108($sp)
/* f0452fc: 8fb9003c */ lw $t9,0x3c($sp)
/* f045300: e7a6006c */ swc1 $f6,0x6c($sp)
/* f045304: c60a0004 */ lwc1 $f10,0x4($s0)
/* f045308: 24180001 */ addiu $t8,$zero,0x1
/* f04530c: 02002025 */ or $a0,$s0,$zero
/* f045310: e7aa0070 */ swc1 $f10,0x70($sp)
/* f045314: c6040008 */ lwc1 $f4,0x8($s0)
/* f045318: 8fa500f0 */ lw $a1,0xf0($sp)
/* f04531c: 27a6006c */ addiu $a2,$sp,0x6c
/* f045320: 46082181 */ sub.s $f6,$f4,$f8
/* f045324: c7a400cc */ lwc1 $f4,0xcc($sp)
/* f045328: 27a70050 */ addiu $a3,$sp,0x50
/* f04532c: e7a60074 */ swc1 $f6,0x74($sp)
/* f045330: c44a0000 */ lwc1 $f10,0x0($v0)
/* f045334: c7a600dc */ lwc1 $f6,0xdc($sp)
/* f045338: 46045200 */ add.s $f8,$f10,$f4
/* f04533c: 46023282 */ mul.s $f10,$f6,$f2
/* f045340: 46085100 */ add.s $f4,$f10,$f8
/* f045344: c7a800d0 */ lwc1 $f8,0xd0($sp)
/* f045348: e7a40060 */ swc1 $f4,0x60($sp)
/* f04534c: c4460004 */ lwc1 $f6,0x4($v0)
/* f045350: e7a60064 */ swc1 $f6,0x64($sp)
/* f045354: c44a0008 */ lwc1 $f10,0x8($v0)
/* f045358: c7a600e4 */ lwc1 $f6,0xe4($sp)
/* f04535c: afb80014 */ sw $t8,0x14($sp)
/* f045360: 46085101 */ sub.s $f4,$f10,$f8
/* f045364: 46023282 */ mul.s $f10,$f6,$f2
/* f045368: afaf0010 */ sw $t7,0x10($sp)
/* f04536c: c7a60080 */ lwc1 $f6,0x80($sp)
/* f045370: 46045200 */ add.s $f8,$f10,$f4
/* f045374: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f045378: e7a80068 */ swc1 $f8,0x68($sp)
/* f04537c: c720000c */ lwc1 $f0,0xc($t9)
/* f045380: 46003281 */ sub.s $f10,$f6,$f0
/* f045384: 46002201 */ sub.s $f8,$f4,$f0
/* f045388: e7aa0018 */ swc1 $f10,0x18($sp)
/* f04538c: 0c00b694 */ jal func0002da50
/* f045390: e7a8001c */ swc1 $f8,0x1c($sp)
/* f045394: 10400010 */ beqz $v0,.L0f0453d8
/* f045398: 24080001 */ addiu $t0,$zero,0x1
/* f04539c: 8fa9003c */ lw $t1,0x3c($sp)
/* f0453a0: afa80010 */ sw $t0,0x10($sp)
/* f0453a4: c7a60080 */ lwc1 $f6,0x80($sp)
/* f0453a8: c520000c */ lwc1 $f0,0xc($t1)
/* f0453ac: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f0453b0: 27a4006c */ addiu $a0,$sp,0x6c
/* f0453b4: 46003281 */ sub.s $f10,$f6,$f0
/* f0453b8: 27a50050 */ addiu $a1,$sp,0x50
/* f0453bc: 27a60060 */ addiu $a2,$sp,0x60
/* f0453c0: 46002201 */ sub.s $f8,$f4,$f0
/* f0453c4: e7aa0014 */ swc1 $f10,0x14($sp)
/* f0453c8: 8fa70108 */ lw $a3,0x108($sp)
/* f0453cc: 0c00b5f0 */ jal func0002d7c0
/* f0453d0: e7a80018 */ swc1 $f8,0x18($sp)
/* f0453d4: 1440000f */ bnez $v0,.L0f045414
.L0f0453d8:
/* f0453d8: 240a0001 */ addiu $t2,$zero,0x1
/* f0453dc: 3c077f1b */ lui $a3,%hi(var7f1a8bc4)
/* f0453e0: afaa00c4 */ sw $t2,0xc4($sp)
/* f0453e4: 24e78bc4 */ addiu $a3,$a3,%lo(var7f1a8bc4)
/* f0453e8: 27a400b4 */ addiu $a0,$sp,0xb4
/* f0453ec: 27a500a8 */ addiu $a1,$sp,0xa8
/* f0453f0: 0c009393 */ jal func00024e4c
/* f0453f4: 240637e6 */ addiu $a2,$zero,0x37e6
/* f0453f8: 27a400b4 */ addiu $a0,$sp,0xb4
/* f0453fc: 27a500a8 */ addiu $a1,$sp,0xa8
/* f045400: 0fc112da */ jal func0f044b68
/* f045404: 27a600dc */ addiu $a2,$sp,0xdc
/* f045408: 0c009390 */ jal func00024e40
/* f04540c: 00000000 */ nop
/* f045410: e7a00088 */ swc1 $f0,0x88($sp)
.L0f045414:
/* f045414: c6060000 */ lwc1 $f6,0x0($s0)
/* f045418: c7aa00d4 */ lwc1 $f10,0xd4($sp)
/* f04541c: 8fa200f4 */ lw $v0,0xf4($sp)
/* f045420: c7a20100 */ lwc1 $f2,0x100($sp)
/* f045424: 460a3101 */ sub.s $f4,$f6,$f10
/* f045428: c7aa00d8 */ lwc1 $f10,0xd8($sp)
/* f04542c: 8fab0108 */ lw $t3,0x108($sp)
/* f045430: 8fad003c */ lw $t5,0x3c($sp)
/* f045434: e7a4006c */ swc1 $f4,0x6c($sp)
/* f045438: c6080004 */ lwc1 $f8,0x4($s0)
/* f04543c: 240c0001 */ addiu $t4,$zero,0x1
/* f045440: 02002025 */ or $a0,$s0,$zero
/* f045444: e7a80070 */ swc1 $f8,0x70($sp)
/* f045448: c6060008 */ lwc1 $f6,0x8($s0)
/* f04544c: 8fa500f0 */ lw $a1,0xf0($sp)
/* f045450: 27a6006c */ addiu $a2,$sp,0x6c
/* f045454: 460a3100 */ add.s $f4,$f6,$f10
/* f045458: c7a600cc */ lwc1 $f6,0xcc($sp)
/* f04545c: 27a70050 */ addiu $a3,$sp,0x50
/* f045460: e7a40074 */ swc1 $f4,0x74($sp)
/* f045464: c4480000 */ lwc1 $f8,0x0($v0)
/* f045468: c7a400dc */ lwc1 $f4,0xdc($sp)
/* f04546c: 46064281 */ sub.s $f10,$f8,$f6
/* f045470: 46022202 */ mul.s $f8,$f4,$f2
/* f045474: 460a4180 */ add.s $f6,$f8,$f10
/* f045478: c7aa00d0 */ lwc1 $f10,0xd0($sp)
/* f04547c: e7a60060 */ swc1 $f6,0x60($sp)
/* f045480: c4440004 */ lwc1 $f4,0x4($v0)
/* f045484: e7a40064 */ swc1 $f4,0x64($sp)
/* f045488: c4480008 */ lwc1 $f8,0x8($v0)
/* f04548c: c7a400e4 */ lwc1 $f4,0xe4($sp)
/* f045490: afac0014 */ sw $t4,0x14($sp)
/* f045494: 460a4180 */ add.s $f6,$f8,$f10
/* f045498: 46022202 */ mul.s $f8,$f4,$f2
/* f04549c: afab0010 */ sw $t3,0x10($sp)
/* f0454a0: c7a40080 */ lwc1 $f4,0x80($sp)
/* f0454a4: 46064280 */ add.s $f10,$f8,$f6
/* f0454a8: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f0454ac: e7aa0068 */ swc1 $f10,0x68($sp)
/* f0454b0: c5a0000c */ lwc1 $f0,0xc($t5)
/* f0454b4: 46002201 */ sub.s $f8,$f4,$f0
/* f0454b8: 46003281 */ sub.s $f10,$f6,$f0
/* f0454bc: e7a80018 */ swc1 $f8,0x18($sp)
/* f0454c0: 0c00b694 */ jal func0002da50
/* f0454c4: e7aa001c */ swc1 $f10,0x1c($sp)
/* f0454c8: 10400010 */ beqz $v0,.L0f04550c
/* f0454cc: 240e0001 */ addiu $t6,$zero,0x1
/* f0454d0: 8faf003c */ lw $t7,0x3c($sp)
/* f0454d4: afae0010 */ sw $t6,0x10($sp)
/* f0454d8: c7a40080 */ lwc1 $f4,0x80($sp)
/* f0454dc: c5e0000c */ lwc1 $f0,0xc($t7)
/* f0454e0: c7a6007c */ lwc1 $f6,0x7c($sp)
/* f0454e4: 27a4006c */ addiu $a0,$sp,0x6c
/* f0454e8: 46002201 */ sub.s $f8,$f4,$f0
/* f0454ec: 8fa500f0 */ lw $a1,0xf0($sp)
/* f0454f0: 27a60060 */ addiu $a2,$sp,0x60
/* f0454f4: 46003281 */ sub.s $f10,$f6,$f0
/* f0454f8: e7a80014 */ swc1 $f8,0x14($sp)
/* f0454fc: 8fa70108 */ lw $a3,0x108($sp)
/* f045500: 0c00b5f0 */ jal func0002d7c0
/* f045504: e7aa0018 */ swc1 $f10,0x18($sp)
/* f045508: 1440000f */ bnez $v0,.L0f045548
.L0f04550c:
/* f04550c: 24180001 */ addiu $t8,$zero,0x1
/* f045510: 3c077f1b */ lui $a3,%hi(var7f1a8bd0)
/* f045514: afb800c0 */ sw $t8,0xc0($sp)
/* f045518: 24e78bd0 */ addiu $a3,$a3,%lo(var7f1a8bd0)
/* f04551c: 27a4009c */ addiu $a0,$sp,0x9c
/* f045520: 27a50090 */ addiu $a1,$sp,0x90
/* f045524: 0c009393 */ jal func00024e4c
/* f045528: 240637f5 */ addiu $a2,$zero,0x37f5
/* f04552c: 27a4009c */ addiu $a0,$sp,0x9c
/* f045530: 27a50090 */ addiu $a1,$sp,0x90
/* f045534: 0fc112da */ jal func0f044b68
/* f045538: 27a600dc */ addiu $a2,$sp,0xdc
/* f04553c: 0c009390 */ jal func00024e40
/* f045540: 00000000 */ nop
/* f045544: e7a00084 */ swc1 $f0,0x84($sp)
.L0f045548:
/* f045548: 8fb900c4 */ lw $t9,0xc4($sp)
/* f04554c: 8fa800c0 */ lw $t0,0xc0($sp)
/* f045550: 8fa900c4 */ lw $t1,0xc4($sp)
/* f045554: 13200025 */ beqz $t9,.L0f0455ec
/* f045558: 00000000 */ nop
/* f04555c: 11000023 */ beqz $t0,.L0f0455ec
/* f045560: c7a40088 */ lwc1 $f4,0x88($sp)
/* f045564: c7a80084 */ lwc1 $f8,0x84($sp)
/* f045568: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f04556c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f045570: 4608203c */ c.lt.s $f4,$f8
/* f045574: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f045578: 45020010 */ bc1fl .L0f0455bc
/* f04557c: 8fa500fc */ lw $a1,0xfc($sp)
/* f045580: 8fa400f8 */ lw $a0,0xf8($sp)
/* f045584: 8fa500fc */ lw $a1,0xfc($sp)
/* f045588: e4860000 */ swc1 $f6,0x0($a0)
/* f04558c: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f045590: e48a0004 */ swc1 $f10,0x4($a0)
/* f045594: c7a400bc */ lwc1 $f4,0xbc($sp)
/* f045598: e4840008 */ swc1 $f4,0x8($a0)
/* f04559c: c7a800a8 */ lwc1 $f8,0xa8($sp)
/* f0455a0: e4a80000 */ swc1 $f8,0x0($a1)
/* f0455a4: c7a600ac */ lwc1 $f6,0xac($sp)
/* f0455a8: e4a60004 */ swc1 $f6,0x4($a1)
/* f0455ac: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f0455b0: 10000062 */ b .L0f04573c
/* f0455b4: e4aa0008 */ swc1 $f10,0x8($a1)
/* f0455b8: 8fa500fc */ lw $a1,0xfc($sp)
.L0f0455bc:
/* f0455bc: e4840000 */ swc1 $f4,0x0($a0)
/* f0455c0: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f0455c4: e4880004 */ swc1 $f8,0x4($a0)
/* f0455c8: c7a600a4 */ lwc1 $f6,0xa4($sp)
/* f0455cc: e4860008 */ swc1 $f6,0x8($a0)
/* f0455d0: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f0455d4: e4aa0000 */ swc1 $f10,0x0($a1)
/* f0455d8: c7a40094 */ lwc1 $f4,0x94($sp)
/* f0455dc: e4a40004 */ swc1 $f4,0x4($a1)
/* f0455e0: c7a80098 */ lwc1 $f8,0x98($sp)
/* f0455e4: 10000055 */ b .L0f04573c
/* f0455e8: e4a80008 */ swc1 $f8,0x8($a1)
.L0f0455ec:
/* f0455ec: 11200010 */ beqz $t1,.L0f045630
/* f0455f0: 8faa00c0 */ lw $t2,0xc0($sp)
/* f0455f4: 8fa400f8 */ lw $a0,0xf8($sp)
/* f0455f8: c7a600b4 */ lwc1 $f6,0xb4($sp)
/* f0455fc: 8fa500fc */ lw $a1,0xfc($sp)
/* f045600: e4860000 */ swc1 $f6,0x0($a0)
/* f045604: c7aa00b8 */ lwc1 $f10,0xb8($sp)
/* f045608: e48a0004 */ swc1 $f10,0x4($a0)
/* f04560c: c7a400bc */ lwc1 $f4,0xbc($sp)
/* f045610: e4840008 */ swc1 $f4,0x8($a0)
/* f045614: c7a800a8 */ lwc1 $f8,0xa8($sp)
/* f045618: e4a80000 */ swc1 $f8,0x0($a1)
/* f04561c: c7a600ac */ lwc1 $f6,0xac($sp)
/* f045620: e4a60004 */ swc1 $f6,0x4($a1)
/* f045624: c7aa00b0 */ lwc1 $f10,0xb0($sp)
/* f045628: 10000044 */ b .L0f04573c
/* f04562c: e4aa0008 */ swc1 $f10,0x8($a1)
.L0f045630:
/* f045630: 11400010 */ beqz $t2,.L0f045674
/* f045634: 8fab0108 */ lw $t3,0x108($sp)
/* f045638: 8fa400f8 */ lw $a0,0xf8($sp)
/* f04563c: c7a4009c */ lwc1 $f4,0x9c($sp)
/* f045640: 8fa500fc */ lw $a1,0xfc($sp)
/* f045644: e4840000 */ swc1 $f4,0x0($a0)
/* f045648: c7a800a0 */ lwc1 $f8,0xa0($sp)
/* f04564c: e4880004 */ swc1 $f8,0x4($a0)
/* f045650: c7a600a4 */ lwc1 $f6,0xa4($sp)
/* f045654: e4860008 */ swc1 $f6,0x8($a0)
/* f045658: c7aa0090 */ lwc1 $f10,0x90($sp)
/* f04565c: e4aa0000 */ swc1 $f10,0x0($a1)
/* f045660: c7a40094 */ lwc1 $f4,0x94($sp)
/* f045664: e4a40004 */ swc1 $f4,0x4($a1)
/* f045668: c7a80098 */ lwc1 $f8,0x98($sp)
/* f04566c: 10000033 */ b .L0f04573c
/* f045670: e4a80008 */ swc1 $f8,0x8($a1)
.L0f045674:
/* f045674: 8fad003c */ lw $t5,0x3c($sp)
/* f045678: 240c0001 */ addiu $t4,$zero,0x1
/* f04567c: afac0014 */ sw $t4,0x14($sp)
/* f045680: afab0010 */ sw $t3,0x10($sp)
/* f045684: c5a0000c */ lwc1 $f0,0xc($t5)
/* f045688: c7a60080 */ lwc1 $f6,0x80($sp)
/* f04568c: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f045690: 02002025 */ or $a0,$s0,$zero
/* f045694: 46003281 */ sub.s $f10,$f6,$f0
/* f045698: 8fa500f0 */ lw $a1,0xf0($sp)
/* f04569c: 8fa600f4 */ lw $a2,0xf4($sp)
/* f0456a0: 46002201 */ sub.s $f8,$f4,$f0
/* f0456a4: e7aa0018 */ swc1 $f10,0x18($sp)
/* f0456a8: 27a70040 */ addiu $a3,$sp,0x40
/* f0456ac: 0c00b694 */ jal func0002da50
/* f0456b0: e7a8001c */ swc1 $f8,0x1c($sp)
/* f0456b4: 10400017 */ beqz $v0,.L0f045714
/* f0456b8: 8fae010c */ lw $t6,0x10c($sp)
/* f0456bc: 11c00012 */ beqz $t6,.L0f045708
/* f0456c0: 8faf0108 */ lw $t7,0x108($sp)
/* f0456c4: 8fb9003c */ lw $t9,0x3c($sp)
/* f0456c8: 24180001 */ addiu $t8,$zero,0x1
/* f0456cc: afb80014 */ sw $t8,0x14($sp)
/* f0456d0: afaf0010 */ sw $t7,0x10($sp)
/* f0456d4: c720000c */ lwc1 $f0,0xc($t9)
/* f0456d8: c7a60080 */ lwc1 $f6,0x80($sp)
/* f0456dc: c7a4007c */ lwc1 $f4,0x7c($sp)
/* f0456e0: 02002025 */ or $a0,$s0,$zero
/* f0456e4: 46003281 */ sub.s $f10,$f6,$f0
/* f0456e8: 8fa500f4 */ lw $a1,0xf4($sp)
/* f0456ec: 8fa60104 */ lw $a2,0x104($sp)
/* f0456f0: 46002201 */ sub.s $f8,$f4,$f0
/* f0456f4: e7aa0018 */ swc1 $f10,0x18($sp)
/* f0456f8: 27a70040 */ addiu $a3,$sp,0x40
/* f0456fc: 0c00a9bf */ jal func0002a6fc
/* f045700: e7a8001c */ swc1 $f8,0x1c($sp)
/* f045704: 10400003 */ beqz $v0,.L0f045714
.L0f045708:
/* f045708: 24080001 */ addiu $t0,$zero,0x1
/* f04570c: 1000000b */ b .L0f04573c
/* f045710: afa8008c */ sw $t0,0x8c($sp)
.L0f045714:
/* f045714: 3c077f1b */ lui $a3,%hi(var7f1a8bdc)
/* f045718: 8fa400f8 */ lw $a0,0xf8($sp)
/* f04571c: 8fa500fc */ lw $a1,0xfc($sp)
/* f045720: 24e78bdc */ addiu $a3,$a3,%lo(var7f1a8bdc)
/* f045724: 0c009393 */ jal func00024e4c
/* f045728: 2406383b */ addiu $a2,$zero,0x383b
/* f04572c: 8fa400f8 */ lw $a0,0xf8($sp)
/* f045730: 8fa500fc */ lw $a1,0xfc($sp)
/* f045734: 0fc112da */ jal func0f044b68
/* f045738: 27a600dc */ addiu $a2,$sp,0xdc
.L0f04573c:
/* f04573c: 8fa400e8 */ lw $a0,0xe8($sp)
/* f045740: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f045744: 24050001 */ addiu $a1,$zero,0x1
/* f045748: 8fa2008c */ lw $v0,0x8c($sp)
.L0f04574c:
/* f04574c: 8fbf002c */ lw $ra,0x2c($sp)
/* f045750: 8fb00028 */ lw $s0,0x28($sp)
/* f045754: 27bd00e8 */ addiu $sp,$sp,0xe8
/* f045758: 03e00008 */ jr $ra
/* f04575c: 00000000 */ nop
);
#endif
GLOBAL_ASM(
glabel func0f045760
.late_rodata
glabel var7f1a9258
.word 0x3f4907a9
glabel var7f1a925c
.word 0x40c907a9
.text
/* f045760: 27bdff88 */ addiu $sp,$sp,-120
/* f045764: afbf002c */ sw $ra,0x2c($sp)
/* f045768: afa40078 */ sw $a0,0x78($sp)
/* f04576c: afa5007c */ sw $a1,0x7c($sp)
/* f045770: afa60080 */ sw $a2,0x80($sp)
/* f045774: 8c8f001c */ lw $t7,0x1c($a0)
/* f045778: 10c00004 */ beqz $a2,.L0f04578c
/* f04577c: afaf0074 */ sw $t7,0x74($sp)
/* f045780: afa50044 */ sw $a1,0x44($sp)
/* f045784: 10000004 */ b .L0f045798
/* f045788: afa70040 */ sw $a3,0x40($sp)
.L0f04578c:
/* f04578c: 8fa8007c */ lw $t0,0x7c($sp)
/* f045790: afa70044 */ sw $a3,0x44($sp)
/* f045794: afa80040 */ sw $t0,0x40($sp)
.L0f045798:
/* f045798: 8fa9007c */ lw $t1,0x7c($sp)
/* f04579c: 8faa0074 */ lw $t2,0x74($sp)
/* f0457a0: 44808000 */ mtc1 $zero,$f16
/* f0457a4: c5240000 */ lwc1 $f4,0x0($t1)
/* f0457a8: c5460008 */ lwc1 $f6,0x8($t2)
/* f0457ac: e7b0006c */ swc1 $f16,0x6c($sp)
/* f0457b0: 46062201 */ sub.s $f8,$f4,$f6
/* f0457b4: e7a80068 */ swc1 $f8,0x68($sp)
/* f0457b8: c52a0008 */ lwc1 $f10,0x8($t1)
/* f0457bc: c5440010 */ lwc1 $f4,0x10($t2)
/* f0457c0: 46088032 */ c.eq.s $f16,$f8
/* f0457c4: 46045181 */ sub.s $f6,$f10,$f4
/* f0457c8: 45000006 */ bc1f .L0f0457e4
/* f0457cc: e7a60070 */ swc1 $f6,0x70($sp)
/* f0457d0: 46068032 */ c.eq.s $f16,$f6
/* f0457d4: c7ae0088 */ lwc1 $f14,0x88($sp)
/* f0457d8: 3c013f80 */ lui $at,0x3f80
/* f0457dc: 45030023 */ bc1tl .L0f04586c
/* f0457e0: 44811000 */ mtc1 $at,$f2
.L0f0457e4:
/* f0457e4: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f0457e8: c7b20068 */ lwc1 $f18,0x68($sp)
/* f0457ec: 460a5102 */ mul.s $f4,$f10,$f10
/* f0457f0: 00000000 */ nop
/* f0457f4: 46129202 */ mul.s $f8,$f18,$f18
/* f0457f8: 0c012974 */ jal sqrtf
/* f0457fc: 46082300 */ add.s $f12,$f4,$f8
/* f045800: 44808000 */ mtc1 $zero,$f16
/* f045804: c7ae0088 */ lwc1 $f14,0x88($sp)
/* f045808: 3c013f80 */ lui $at,0x3f80
/* f04580c: 4600803c */ c.lt.s $f16,$f0
/* f045810: 00000000 */ nop
/* f045814: 45020010 */ bc1fl .L0f045858
/* f045818: 44811000 */ mtc1 $at,$f2
/* f04581c: 3c013f80 */ lui $at,0x3f80
/* f045820: 44813000 */ mtc1 $at,$f6
/* f045824: c7ae0088 */ lwc1 $f14,0x88($sp)
/* f045828: c7b20068 */ lwc1 $f18,0x68($sp)
/* f04582c: 46003083 */ div.s $f2,$f6,$f0
/* f045830: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f045834: 46027302 */ mul.s $f12,$f14,$f2
/* f045838: 00000000 */ nop
/* f04583c: 460c9482 */ mul.s $f18,$f18,$f12
/* f045840: 00000000 */ nop
/* f045844: 460c5102 */ mul.s $f4,$f10,$f12
/* f045848: e7b20068 */ swc1 $f18,0x68($sp)
/* f04584c: 1000000a */ b .L0f045878
/* f045850: e7a40070 */ swc1 $f4,0x70($sp)
/* f045854: 44811000 */ mtc1 $at,$f2
.L0f045858:
/* f045858: e7ae0070 */ swc1 $f14,0x70($sp)
/* f04585c: 46027302 */ mul.s $f12,$f14,$f2
/* f045860: 10000006 */ b .L0f04587c
/* f045864: 3c013f80 */ lui $at,0x3f80
/* f045868: 44811000 */ mtc1 $at,$f2
.L0f04586c:
/* f04586c: e7ae0070 */ swc1 $f14,0x70($sp)
/* f045870: 46027302 */ mul.s $f12,$f14,$f2
/* f045874: 00000000 */ nop
.L0f045878:
/* f045878: 3c013f80 */ lui $at,0x3f80
.L0f04587c:
/* f04587c: 44814000 */ mtc1 $at,$f8
/* f045880: 3c017f1b */ lui $at,%hi(var7f1a9258)
/* f045884: 460c403c */ c.lt.s $f8,$f12
/* f045888: 00000000 */ nop
/* f04588c: 45000003 */ bc1f .L0f04589c
/* f045890: 00000000 */ nop
/* f045894: 10000005 */ b .L0f0458ac
/* f045898: c42c9258 */ lwc1 $f12,%lo(var7f1a9258)($at)
.L0f04589c:
/* f04589c: 0fc25a74 */ jal func0f0969d0
/* f0458a0: 00000000 */ nop
/* f0458a4: 44808000 */ mtc1 $zero,$f16
/* f0458a8: 46000306 */ mov.s $f12,$f0
.L0f0458ac:
/* f0458ac: 8fab0080 */ lw $t3,0x80($sp)
/* f0458b0: 15600007 */ bnez $t3,.L0f0458d0
/* f0458b4: 00000000 */ nop
/* f0458b8: 46106032 */ c.eq.s $f12,$f16
/* f0458bc: 3c017f1b */ lui $at,%hi(var7f1a925c)
/* f0458c0: 45010003 */ bc1t .L0f0458d0
/* f0458c4: 00000000 */ nop
/* f0458c8: c426925c */ lwc1 $f6,%lo(var7f1a925c)($at)
/* f0458cc: 460c3301 */ sub.s $f12,$f6,$f12
.L0f0458d0:
/* f0458d0: 0c0068f4 */ jal cosf
/* f0458d4: e7ac0054 */ swc1 $f12,0x54($sp)
/* f0458d8: c7ac0054 */ lwc1 $f12,0x54($sp)
/* f0458dc: 0c0068f7 */ jal sinf
/* f0458e0: e7a00038 */ swc1 $f0,0x38($sp)
/* f0458e4: c7aa0070 */ lwc1 $f10,0x70($sp)
/* f0458e8: c7a80038 */ lwc1 $f8,0x38($sp)
/* f0458ec: c7b20068 */ lwc1 $f18,0x68($sp)
/* f0458f0: 46005102 */ mul.s $f4,$f10,$f0
/* f0458f4: 46004187 */ neg.s $f6,$f8
/* f0458f8: 44808000 */ mtc1 $zero,$f16
/* f0458fc: 46123282 */ mul.s $f10,$f6,$f18
/* f045900: c7ac0054 */ lwc1 $f12,0x54($sp)
/* f045904: e7b0004c */ swc1 $f16,0x4c($sp)
/* f045908: 460a2200 */ add.s $f8,$f4,$f10
/* f04590c: 0c0068f7 */ jal sinf
/* f045910: e7a80048 */ swc1 $f8,0x48($sp)
/* f045914: c7ac0054 */ lwc1 $f12,0x54($sp)
/* f045918: 0c0068f4 */ jal cosf
/* f04591c: e7a00038 */ swc1 $f0,0x38($sp)
/* f045920: c7a60038 */ lwc1 $f6,0x38($sp)
/* f045924: c7aa0068 */ lwc1 $f10,0x68($sp)
/* f045928: 8fac007c */ lw $t4,0x7c($sp)
/* f04592c: 46003107 */ neg.s $f4,$f6
/* f045930: c7a60070 */ lwc1 $f6,0x70($sp)
/* f045934: 460a2202 */ mul.s $f8,$f4,$f10
/* f045938: 8fae0044 */ lw $t6,0x44($sp)
/* f04593c: 8faf0040 */ lw $t7,0x40($sp)
/* f045940: 46003102 */ mul.s $f4,$f6,$f0
/* f045944: c7a60048 */ lwc1 $f6,0x48($sp)
/* f045948: 8fa40078 */ lw $a0,0x78($sp)
/* f04594c: 8fa50074 */ lw $a1,0x74($sp)
/* f045950: 8fa60074 */ lw $a2,0x74($sp)
/* f045954: 8fb8009c */ lw $t8,0x9c($sp)
/* f045958: 24190001 */ addiu $t9,$zero,0x1
/* f04595c: 46044281 */ sub.s $f10,$f8,$f4
/* f045960: 24a50008 */ addiu $a1,$a1,0x8
/* f045964: 24c60028 */ addiu $a2,$a2,0x28
/* f045968: 27a7005c */ addiu $a3,$sp,0x5c
/* f04596c: e7aa0050 */ swc1 $f10,0x50($sp)
/* f045970: c5880000 */ lwc1 $f8,0x0($t4)
/* f045974: 46083100 */ add.s $f4,$f6,$f8
/* f045978: e7a4005c */ swc1 $f4,0x5c($sp)
/* f04597c: c5860004 */ lwc1 $f6,0x4($t4)
/* f045980: e7a60060 */ swc1 $f6,0x60($sp)
/* f045984: c5880008 */ lwc1 $f8,0x8($t4)
/* f045988: c7a60098 */ lwc1 $f6,0x98($sp)
/* f04598c: afae0010 */ sw $t6,0x10($sp)
/* f045990: 46085100 */ add.s $f4,$f10,$f8
/* f045994: afaf0014 */ sw $t7,0x14($sp)
/* f045998: e7a60018 */ swc1 $f6,0x18($sp)
/* f04599c: e7a40064 */ swc1 $f4,0x64($sp)
/* f0459a0: c48a0024 */ lwc1 $f10,0x24($a0)
/* f0459a4: afa60030 */ sw $a2,0x30($sp)
/* f0459a8: afa50034 */ sw $a1,0x34($sp)
/* f0459ac: afb90024 */ sw $t9,0x24($sp)
/* f0459b0: afb80020 */ sw $t8,0x20($sp)
/* f0459b4: 0fc1130e */ jal func0f044c38
/* f0459b8: e7aa001c */ swc1 $f10,0x1c($sp)
/* f0459bc: 8fa50034 */ lw $a1,0x34($sp)
/* f0459c0: 10400026 */ beqz $v0,.L0f045a5c
/* f0459c4: 8fa60030 */ lw $a2,0x30($sp)
/* f0459c8: 8fa8008c */ lw $t0,0x8c($sp)
/* f0459cc: 8fa40078 */ lw $a0,0x78($sp)
/* f0459d0: 8fa90090 */ lw $t1,0x90($sp)
/* f0459d4: 51000009 */ beqzl $t0,.L0f0459fc
/* f0459d8: 8fab00a0 */ lw $t3,0xa0($sp)
/* f0459dc: 8faa009c */ lw $t2,0x9c($sp)
/* f0459e0: 27a7005c */ addiu $a3,$sp,0x5c
/* f0459e4: afa90010 */ sw $t1,0x10($sp)
/* f0459e8: 0fc0d917 */ jal func0f03645c
/* f0459ec: afaa0014 */ sw $t2,0x14($sp)
/* f0459f0: 5040001b */ beqzl $v0,.L0f045a60
/* f0459f4: 00001025 */ or $v0,$zero,$zero
/* f0459f8: 8fab00a0 */ lw $t3,0xa0($sp)
.L0f0459fc:
/* f0459fc: 8fa20094 */ lw $v0,0x94($sp)
/* f045a00: 240e0001 */ addiu $t6,$zero,0x1
/* f045a04: 5160000d */ beqzl $t3,.L0f045a3c
/* f045a08: a04e0002 */ sb $t6,0x2($v0)
/* f045a0c: 8fa20094 */ lw $v0,0x94($sp)
/* f045a10: 240c0001 */ addiu $t4,$zero,0x1
/* f045a14: a04c0003 */ sb $t4,0x3($v0)
/* f045a18: c7a8005c */ lwc1 $f8,0x5c($sp)
/* f045a1c: e448002c */ swc1 $f8,0x2c($v0)
/* f045a20: c7a40060 */ lwc1 $f4,0x60($sp)
/* f045a24: e4440030 */ swc1 $f4,0x30($v0)
/* f045a28: c7a60064 */ lwc1 $f6,0x64($sp)
/* f045a2c: e4460034 */ swc1 $f6,0x34($v0)
/* f045a30: 1000000b */ b .L0f045a60
/* f045a34: 24020001 */ addiu $v0,$zero,0x1
/* f045a38: a04e0002 */ sb $t6,0x2($v0)
.L0f045a3c:
/* f045a3c: c7aa005c */ lwc1 $f10,0x5c($sp)
/* f045a40: e44a0004 */ swc1 $f10,0x4($v0)
/* f045a44: c7a80060 */ lwc1 $f8,0x60($sp)
/* f045a48: e4480008 */ swc1 $f8,0x8($v0)
/* f045a4c: c7a40064 */ lwc1 $f4,0x64($sp)
/* f045a50: e444000c */ swc1 $f4,0xc($v0)
/* f045a54: 10000002 */ b .L0f045a60
/* f045a58: 24020001 */ addiu $v0,$zero,0x1
.L0f045a5c:
/* f045a5c: 00001025 */ or $v0,$zero,$zero
.L0f045a60:
/* f045a60: 8fbf002c */ lw $ra,0x2c($sp)
/* f045a64: 27bd0078 */ addiu $sp,$sp,0x78
/* f045a68: 03e00008 */ jr $ra
/* f045a6c: 00000000 */ nop
);
/**
* Check for doors in front of the chr and open them if possible.
*
* I'm guessing the coord argument is a position in front of the chr, and the
* collision check is looking for doors between the chr and that point.
*
* - Multiplayer simulants can open any doors
* - Solo chrs cannot open doors with OBJFLAG2_AICANNOTUSE
* - In ntsc-beta, solo chrs can bring down lasers even if they have that flag
*
* The chr must be within 200cm of the door unless it's a laser.
*/
struct prop *chrOpenDoor(struct chrdata *chr, struct coord *coord)
{
struct prop *doorprop = NULL;
if (func0002d7c0(&chr->prop->pos, chr->prop->rooms, coord, 0x5020, 1, 0, 0) == CDRESULT_COLLISION) {
doorprop = cdGetObstacle();
}
if (doorprop) {
struct doorobj *door = doorprop->door;
#if VERSION >= VERSION_NTSC_1_0
if (chr->aibot || (door->base.flags2 & OBJFLAG2_AICANNOTUSE) == 0)
#else
if (chr->aibot
|| (door->base.flags2 & OBJFLAG2_AICANNOTUSE) == 0
|| (door->doorflags & DOORFLAG_DAMAGEONCONTACT))
#endif
{
f32 xdiff = doorprop->pos.x - chr->prop->pos.x;
f32 zdiff = doorprop->pos.z - chr->prop->pos.z;
if (xdiff * xdiff + zdiff * zdiff < 200 * 200 || (door->doorflags & DOORFLAG_DAMAGEONCONTACT)) {
chrGoPosClearRestartTtl(chr);
doorsChooseSwingDirection(chr->prop, doorprop->door);
if (!doorCallLift(doorprop, false)) {
doorsRequestMode(doorprop->door, DOORMODE_OPENING);
}
} else {
doorprop = NULL;
}
} else {
doorprop = NULL;
}
}
return doorprop;
}
GLOBAL_ASM(
glabel func0f045b9c
.late_rodata
glabel var7f1a9264
.word 0x404907a9
glabel var7f1a9268
.word 0x40c907a9
glabel var7f1a926c
.word 0x3fa147ae
glabel var7f1a9270
.word 0x3fa147ae
glabel var7f1a9274
.word 0x3fa147ae
glabel var7f1a9278
.word 0x3f8ccccd
glabel var7f1a927c
.word 0x3f8ccccd
.text
/* f045b9c: 27bdfef0 */ addiu $sp,$sp,-272
/* f045ba0: afbf0084 */ sw $ra,0x84($sp)
/* f045ba4: afb70080 */ sw $s7,0x80($sp)
/* f045ba8: afb6007c */ sw $s6,0x7c($sp)
/* f045bac: afb50078 */ sw $s5,0x78($sp)
/* f045bb0: afb40074 */ sw $s4,0x74($sp)
/* f045bb4: afb30070 */ sw $s3,0x70($sp)
/* f045bb8: afb2006c */ sw $s2,0x6c($sp)
/* f045bbc: afb10068 */ sw $s1,0x68($sp)
/* f045bc0: afb00064 */ sw $s0,0x64($sp)
/* f045bc4: f7be0058 */ sdc1 $f30,0x58($sp)
/* f045bc8: f7bc0050 */ sdc1 $f28,0x50($sp)
/* f045bcc: f7ba0048 */ sdc1 $f26,0x48($sp)
/* f045bd0: f7b80040 */ sdc1 $f24,0x40($sp)
/* f045bd4: f7b60038 */ sdc1 $f22,0x38($sp)
/* f045bd8: f7b40030 */ sdc1 $f20,0x30($sp)
/* f045bdc: afa7011c */ sw $a3,0x11c($sp)
/* f045be0: 8c8e0014 */ lw $t6,0x14($a0)
/* f045be4: 00c08025 */ or $s0,$a2,$zero
/* f045be8: 00809025 */ or $s2,$a0,$zero
/* f045bec: 31cf0010 */ andi $t7,$t6,0x10
/* f045bf0: 00a09825 */ or $s3,$a1,$zero
/* f045bf4: 8c91001c */ lw $s1,0x1c($a0)
/* f045bf8: 11e00002 */ beqz $t7,.L0f045c04
/* f045bfc: 3416803d */ dli $s6,0x803d
/* f045c00: 2416003f */ addiu $s6,$zero,0x3f
.L0f045c04:
/* f045c04: 3c017f1b */ lui $at,%hi(var7f1a9264)
/* f045c08: c43e9264 */ lwc1 $f30,%lo(var7f1a9264)($at)
/* f045c0c: 3c017f1b */ lui $at,%hi(var7f1a9268)
/* f045c10: 4480d000 */ mtc1 $zero,$f26
/* f045c14: c43c9268 */ lwc1 $f28,%lo(var7f1a9268)($at)
/* f045c18: afa000f0 */ sw $zero,0xf0($sp)
/* f045c1c: 24170001 */ addiu $s7,$zero,0x1
/* f045c20: 24150004 */ addiu $s5,$zero,0x4
/* f045c24: 27b400f4 */ addiu $s4,$sp,0xf4
.L0f045c28:
/* f045c28: 82020000 */ lb $v0,0x0($s0)
/* f045c2c: 24010002 */ addiu $at,$zero,0x2
/* f045c30: 02402025 */ or $a0,$s2,$zero
/* f045c34: 10400003 */ beqz $v0,.L0f045c44
/* f045c38: 26250008 */ addiu $a1,$s1,0x8
/* f045c3c: 1441002d */ bne $v0,$at,.L0f045cf4
/* f045c40: 00000000 */ nop
.L0f045c44:
/* f045c44: c6640000 */ lwc1 $f4,0x0($s3)
/* f045c48: 26180010 */ addiu $t8,$s0,0x10
/* f045c4c: 2619001c */ addiu $t9,$s0,0x1c
/* f045c50: e7a40100 */ swc1 $f4,0x100($sp)
/* f045c54: c6660004 */ lwc1 $f6,0x4($s3)
/* f045c58: 8faa011c */ lw $t2,0x11c($sp)
/* f045c5c: 24090030 */ addiu $t1,$zero,0x30
/* f045c60: e7a60104 */ swc1 $f6,0x104($sp)
/* f045c64: c6680008 */ lwc1 $f8,0x8($s3)
/* f045c68: afb90014 */ sw $t9,0x14($sp)
/* f045c6c: afb80010 */ sw $t8,0x10($sp)
/* f045c70: e7a80108 */ swc1 $f8,0x108($sp)
/* f045c74: c6400024 */ lwc1 $f0,0x24($s2)
/* f045c78: afa90020 */ sw $t1,0x20($sp)
/* f045c7c: 26260028 */ addiu $a2,$s1,0x28
/* f045c80: 46000287 */ neg.s $f10,$f0
/* f045c84: 27a70100 */ addiu $a3,$sp,0x100
/* f045c88: e7aa0018 */ swc1 $f10,0x18($sp)
/* f045c8c: afaa0024 */ sw $t2,0x24($sp)
/* f045c90: 0fc1130e */ jal func0f044c38
/* f045c94: e7a0001c */ swc1 $f0,0x1c($sp)
/* f045c98: 5040000b */ beqzl $v0,.L0f045cc8
/* f045c9c: 82020000 */ lb $v0,0x0($s0)
/* f045ca0: a2170002 */ sb $s7,0x2($s0)
/* f045ca4: c7b20100 */ lwc1 $f18,0x100($sp)
/* f045ca8: e6120004 */ swc1 $f18,0x4($s0)
/* f045cac: c7a40104 */ lwc1 $f4,0x104($sp)
/* f045cb0: e6040008 */ swc1 $f4,0x8($s0)
/* f045cb4: c7a60108 */ lwc1 $f6,0x108($sp)
/* f045cb8: a2150000 */ sb $s5,0x0($s0)
/* f045cbc: 100001a9 */ b .L0f046364
/* f045cc0: e606000c */ swc1 $f6,0xc($s0)
/* f045cc4: 82020000 */ lb $v0,0x0($s0)
.L0f045cc8:
/* f045cc8: 24010002 */ addiu $at,$zero,0x2
/* f045ccc: 14400004 */ bnez $v0,.L0f045ce0
/* f045cd0: 00000000 */ nop
/* f045cd4: a2170000 */ sb $s7,0x0($s0)
/* f045cd8: 100001a2 */ b .L0f046364
/* f045cdc: a2000001 */ sb $zero,0x1($s0)
.L0f045ce0:
/* f045ce0: 144101a0 */ bne $v0,$at,.L0f046364
/* f045ce4: 240b0003 */ addiu $t3,$zero,0x3
/* f045ce8: a20b0000 */ sb $t3,0x0($s0)
/* f045cec: 1000019d */ b .L0f046364
/* f045cf0: a2000001 */ sb $zero,0x1($s0)
.L0f045cf4:
/* f045cf4: 16e20032 */ bne $s7,$v0,.L0f045dc0
/* f045cf8: 24010003 */ addiu $at,$zero,0x3
/* f045cfc: 3c017f1b */ lui $at,%hi(var7f1a926c)
/* f045d00: c42a926c */ lwc1 $f10,%lo(var7f1a926c)($at)
/* f045d04: c6480024 */ lwc1 $f8,0x24($s2)
/* f045d08: 240c0030 */ addiu $t4,$zero,0x30
/* f045d0c: afac0024 */ sw $t4,0x24($sp)
/* f045d10: 460a4002 */ mul.s $f0,$f8,$f10
/* f045d14: afa00028 */ sw $zero,0x28($sp)
/* f045d18: e7ba0020 */ swc1 $f26,0x20($sp)
/* f045d1c: afb0001c */ sw $s0,0x1c($sp)
/* f045d20: afb30018 */ sw $s3,0x18($sp)
/* f045d24: afb70014 */ sw $s7,0x14($sp)
/* f045d28: 02402025 */ or $a0,$s2,$zero
/* f045d2c: e7a00010 */ swc1 $f0,0x10($sp)
/* f045d30: e7a000e8 */ swc1 $f0,0xe8($sp)
/* f045d34: 26050010 */ addiu $a1,$s0,0x10
/* f045d38: 02e03025 */ or $a2,$s7,$zero
/* f045d3c: 0fc115d8 */ jal func0f045760
/* f045d40: 02803825 */ or $a3,$s4,$zero
/* f045d44: 10400003 */ beqz $v0,.L0f045d54
/* f045d48: c7a000e8 */ lwc1 $f0,0xe8($sp)
/* f045d4c: 10000185 */ b .L0f046364
/* f045d50: a2150000 */ sb $s5,0x0($s0)
.L0f045d54:
/* f045d54: 240d0030 */ addiu $t5,$zero,0x30
/* f045d58: afad0024 */ sw $t5,0x24($sp)
/* f045d5c: 02402025 */ or $a0,$s2,$zero
/* f045d60: 2605001c */ addiu $a1,$s0,0x1c
/* f045d64: 00003025 */ or $a2,$zero,$zero
/* f045d68: 02803825 */ or $a3,$s4,$zero
/* f045d6c: e7a00010 */ swc1 $f0,0x10($sp)
/* f045d70: afb70014 */ sw $s7,0x14($sp)
/* f045d74: afb30018 */ sw $s3,0x18($sp)
/* f045d78: afb0001c */ sw $s0,0x1c($sp)
/* f045d7c: e7ba0020 */ swc1 $f26,0x20($sp)
/* f045d80: 0fc115d8 */ jal func0f045760
/* f045d84: afa00028 */ sw $zero,0x28($sp)
/* f045d88: 50400004 */ beqzl $v0,.L0f045d9c
/* f045d8c: 820e0001 */ lb $t6,0x1($s0)
/* f045d90: 10000174 */ b .L0f046364
/* f045d94: a2150000 */ sb $s5,0x0($s0)
/* f045d98: 820e0001 */ lb $t6,0x1($s0)
.L0f045d9c:
/* f045d9c: 24190002 */ addiu $t9,$zero,0x2
/* f045da0: 25cf0001 */ addiu $t7,$t6,0x1
/* f045da4: a20f0001 */ sb $t7,0x1($s0)
/* f045da8: 82180001 */ lb $t8,0x1($s0)
/* f045dac: 2b010006 */ slti $at,$t8,0x6
/* f045db0: 5420016d */ bnezl $at,.L0f046368
/* f045db4: 8fab00f0 */ lw $t3,0xf0($sp)
/* f045db8: 1000016a */ b .L0f046364
/* f045dbc: a2190000 */ sb $t9,0x0($s0)
.L0f045dc0:
/* f045dc0: 1441003c */ bne $v0,$at,.L0f045eb4
/* f045dc4: 02402025 */ or $a0,$s2,$zero
/* f045dc8: 3c017f1b */ lui $at,%hi(var7f1a9270)
/* f045dcc: c4249270 */ lwc1 $f4,%lo(var7f1a9270)($at)
/* f045dd0: c6520024 */ lwc1 $f18,0x24($s2)
/* f045dd4: 24090030 */ addiu $t1,$zero,0x30
/* f045dd8: afa90024 */ sw $t1,0x24($sp)
/* f045ddc: 46049002 */ mul.s $f0,$f18,$f4
/* f045de0: afa00028 */ sw $zero,0x28($sp)
/* f045de4: e7ba0020 */ swc1 $f26,0x20($sp)
/* f045de8: afb0001c */ sw $s0,0x1c($sp)
/* f045dec: afa00018 */ sw $zero,0x18($sp)
/* f045df0: afa00014 */ sw $zero,0x14($sp)
/* f045df4: 26050010 */ addiu $a1,$s0,0x10
/* f045df8: e7a00010 */ swc1 $f0,0x10($sp)
/* f045dfc: e7a000e4 */ swc1 $f0,0xe4($sp)
/* f045e00: 02e03025 */ or $a2,$s7,$zero
/* f045e04: 0fc115d8 */ jal func0f045760
/* f045e08: 02803825 */ or $a3,$s4,$zero
/* f045e0c: 10400003 */ beqz $v0,.L0f045e1c
/* f045e10: c7a000e4 */ lwc1 $f0,0xe4($sp)
/* f045e14: 10000153 */ b .L0f046364
/* f045e18: a2150000 */ sb $s5,0x0($s0)
.L0f045e1c:
/* f045e1c: 240a0030 */ addiu $t2,$zero,0x30
/* f045e20: afaa0024 */ sw $t2,0x24($sp)
/* f045e24: 02402025 */ or $a0,$s2,$zero
/* f045e28: 2605001c */ addiu $a1,$s0,0x1c
/* f045e2c: 00003025 */ or $a2,$zero,$zero
/* f045e30: 02803825 */ or $a3,$s4,$zero
/* f045e34: e7a00010 */ swc1 $f0,0x10($sp)
/* f045e38: afa00014 */ sw $zero,0x14($sp)
/* f045e3c: afa00018 */ sw $zero,0x18($sp)
/* f045e40: afb0001c */ sw $s0,0x1c($sp)
/* f045e44: e7ba0020 */ swc1 $f26,0x20($sp)
/* f045e48: 0fc115d8 */ jal func0f045760
/* f045e4c: afa00028 */ sw $zero,0x28($sp)
/* f045e50: 50400004 */ beqzl $v0,.L0f045e64
/* f045e54: 820b0001 */ lb $t3,0x1($s0)
/* f045e58: 10000142 */ b .L0f046364
/* f045e5c: a2150000 */ sb $s5,0x0($s0)
/* f045e60: 820b0001 */ lb $t3,0x1($s0)
.L0f045e64:
/* f045e64: 256c0001 */ addiu $t4,$t3,0x1
/* f045e68: a20c0001 */ sb $t4,0x1($s0)
/* f045e6c: 820d0001 */ lb $t5,0x1($s0)
/* f045e70: 29a10006 */ slti $at,$t5,0x6
/* f045e74: 5420013c */ bnezl $at,.L0f046368
/* f045e78: 8fab00f0 */ lw $t3,0xf0($sp)
/* f045e7c: a2000002 */ sb $zero,0x2($s0)
/* f045e80: 820e0002 */ lb $t6,0x2($s0)
/* f045e84: a20e0003 */ sb $t6,0x3($s0)
/* f045e88: c6600000 */ lwc1 $f0,0x0($s3)
/* f045e8c: e6000004 */ swc1 $f0,0x4($s0)
/* f045e90: e600002c */ swc1 $f0,0x2c($s0)
/* f045e94: c6600004 */ lwc1 $f0,0x4($s3)
/* f045e98: e6000008 */ swc1 $f0,0x8($s0)
/* f045e9c: e6000030 */ swc1 $f0,0x30($s0)
/* f045ea0: c6600008 */ lwc1 $f0,0x8($s3)
/* f045ea4: a2000000 */ sb $zero,0x0($s0)
/* f045ea8: e600000c */ swc1 $f0,0xc($s0)
/* f045eac: 1000012d */ b .L0f046364
/* f045eb0: e6000034 */ swc1 $f0,0x34($s0)
.L0f045eb4:
/* f045eb4: 16a20034 */ bne $s5,$v0,.L0f045f88
/* f045eb8: 24010005 */ addiu $at,$zero,0x5
/* f045ebc: 8faf011c */ lw $t7,0x11c($sp)
/* f045ec0: 02e01025 */ or $v0,$s7,$zero
/* f045ec4: 26250008 */ addiu $a1,$s1,0x8
/* f045ec8: 26260028 */ addiu $a2,$s1,0x28
/* f045ecc: 26030010 */ addiu $v1,$s0,0x10
/* f045ed0: 2608001c */ addiu $t0,$s0,0x1c
/* f045ed4: 15e00014 */ bnez $t7,.L0f045f28
/* f045ed8: 26070004 */ addiu $a3,$s0,0x4
/* f045edc: c6060004 */ lwc1 $f6,0x4($s0)
/* f045ee0: c6680000 */ lwc1 $f8,0x0($s3)
/* f045ee4: 46083032 */ c.eq.s $f6,$f8
/* f045ee8: 00000000 */ nop
/* f045eec: 4502000f */ bc1fl .L0f045f2c
/* f045ef0: afa30010 */ sw $v1,0x10($sp)
/* f045ef4: c60a0008 */ lwc1 $f10,0x8($s0)
/* f045ef8: c6720004 */ lwc1 $f18,0x4($s3)
/* f045efc: 46125032 */ c.eq.s $f10,$f18
/* f045f00: 00000000 */ nop
/* f045f04: 45020009 */ bc1fl .L0f045f2c
/* f045f08: afa30010 */ sw $v1,0x10($sp)
/* f045f0c: c604000c */ lwc1 $f4,0xc($s0)
/* f045f10: c6660008 */ lwc1 $f6,0x8($s3)
/* f045f14: 46062032 */ c.eq.s $f4,$f6
/* f045f18: 00000000 */ nop
/* f045f1c: 45020003 */ bc1fl .L0f045f2c
/* f045f20: afa30010 */ sw $v1,0x10($sp)
/* f045f24: 00001025 */ or $v0,$zero,$zero
.L0f045f28:
/* f045f28: afa30010 */ sw $v1,0x10($sp)
.L0f045f2c:
/* f045f2c: afa80014 */ sw $t0,0x14($sp)
/* f045f30: c6400024 */ lwc1 $f0,0x24($s2)
/* f045f34: afa20024 */ sw $v0,0x24($sp)
/* f045f38: afb60020 */ sw $s6,0x20($sp)
/* f045f3c: 46000207 */ neg.s $f8,$f0
/* f045f40: 02402025 */ or $a0,$s2,$zero
/* f045f44: e7a80018 */ swc1 $f8,0x18($sp)
/* f045f48: 0fc1146a */ jal func0f0451a8
/* f045f4c: e7a0001c */ swc1 $f0,0x1c($sp)
/* f045f50: 1040000a */ beqz $v0,.L0f045f7c
/* f045f54: 24180005 */ addiu $t8,$zero,0x5
/* f045f58: c60a0004 */ lwc1 $f10,0x4($s0)
/* f045f5c: c6120008 */ lwc1 $f18,0x8($s0)
/* f045f60: c604000c */ lwc1 $f4,0xc($s0)
/* f045f64: a2170003 */ sb $s7,0x3($s0)
/* f045f68: a2000000 */ sb $zero,0x0($s0)
/* f045f6c: e60a002c */ swc1 $f10,0x2c($s0)
/* f045f70: e6120030 */ swc1 $f18,0x30($s0)
/* f045f74: 100000fb */ b .L0f046364
/* f045f78: e6040034 */ swc1 $f4,0x34($s0)
.L0f045f7c:
/* f045f7c: a2180000 */ sb $t8,0x0($s0)
/* f045f80: 100000f8 */ b .L0f046364
/* f045f84: a2000001 */ sb $zero,0x1($s0)
.L0f045f88:
/* f045f88: 144100f6 */ bne $v0,$at,.L0f046364
/* f045f8c: 3c017f1b */ lui $at,%hi(var7f1a9274)
/* f045f90: c4289274 */ lwc1 $f8,%lo(var7f1a9274)($at)
/* f045f94: c6460024 */ lwc1 $f6,0x24($s2)
/* f045f98: c60a0004 */ lwc1 $f10,0x4($s0)
/* f045f9c: c6320008 */ lwc1 $f18,0x8($s1)
/* f045fa0: 46083602 */ mul.s $f24,$f6,$f8
/* f045fa4: c6260010 */ lwc1 $f6,0x10($s1)
/* f045fa8: c604000c */ lwc1 $f4,0xc($s0)
/* f045fac: 46125301 */ sub.s $f12,$f10,$f18
/* f045fb0: 0fc259d4 */ jal atan2f
/* f045fb4: 46062381 */ sub.s $f14,$f4,$f6
/* f045fb8: c6160010 */ lwc1 $f22,0x10($s0)
/* f045fbc: c6320008 */ lwc1 $f18,0x8($s1)
/* f045fc0: c6100018 */ lwc1 $f16,0x18($s0)
/* f045fc4: c62a0010 */ lwc1 $f10,0x10($s1)
/* f045fc8: 4612b301 */ sub.s $f12,$f22,$f18
/* f045fcc: 46000506 */ mov.s $f20,$f0
/* f045fd0: 0fc259d4 */ jal atan2f
/* f045fd4: 460a8381 */ sub.s $f14,$f16,$f10
/* f045fd8: 4600a581 */ sub.s $f22,$f20,$f0
/* f045fdc: c612001c */ lwc1 $f18,0x1c($s0)
/* f045fe0: c6300008 */ lwc1 $f16,0x8($s1)
/* f045fe4: c60a0024 */ lwc1 $f10,0x24($s0)
/* f045fe8: c6280010 */ lwc1 $f8,0x10($s1)
/* f045fec: 46109301 */ sub.s $f12,$f18,$f16
/* f045ff0: e7b600d0 */ swc1 $f22,0xd0($sp)
/* f045ff4: 0fc259d4 */ jal atan2f
/* f045ff8: 46085381 */ sub.s $f14,$f10,$f8
/* f045ffc: c7b000d0 */ lwc1 $f16,0xd0($sp)
/* f046000: 4600a301 */ sub.s $f12,$f20,$f0
/* f046004: 02803825 */ or $a3,$s4,$zero
/* f046008: 02402025 */ or $a0,$s2,$zero
/* f04600c: 461a803c */ c.lt.s $f16,$f26
/* f046010: 46006086 */ mov.s $f2,$f12
/* f046014: 2605001c */ addiu $a1,$s0,0x1c
/* f046018: 00003025 */ or $a2,$zero,$zero
/* f04601c: 45000002 */ bc1f .L0f046028
/* f046020: 3c017f1b */ lui $at,%hi(var7f1a9278)
/* f046024: 461c8400 */ add.s $f16,$f16,$f28
.L0f046028:
/* f046028: 4610f03e */ c.le.s $f30,$f16
/* f04602c: 00000000 */ nop
/* f046030: 45020003 */ bc1fl .L0f046040
/* f046034: 461a803c */ c.lt.s $f16,$f26
/* f046038: 461c8401 */ sub.s $f16,$f16,$f28
/* f04603c: 461a803c */ c.lt.s $f16,$f26
.L0f046040:
/* f046040: 00000000 */ nop
/* f046044: 45020003 */ bc1fl .L0f046054
/* f046048: 461a603c */ c.lt.s $f12,$f26
/* f04604c: 46008407 */ neg.s $f16,$f16
/* f046050: 461a603c */ c.lt.s $f12,$f26
.L0f046054:
/* f046054: 00000000 */ nop
/* f046058: 45020003 */ bc1fl .L0f046068
/* f04605c: 4602f03e */ c.le.s $f30,$f2
/* f046060: 461c6080 */ add.s $f2,$f12,$f28
/* f046064: 4602f03e */ c.le.s $f30,$f2
.L0f046068:
/* f046068: 00000000 */ nop
/* f04606c: 45020003 */ bc1fl .L0f04607c
/* f046070: 461a103c */ c.lt.s $f2,$f26
/* f046074: 461c1081 */ sub.s $f2,$f2,$f28
/* f046078: 461a103c */ c.lt.s $f2,$f26
.L0f04607c:
/* f04607c: 00000000 */ nop
/* f046080: 45020003 */ bc1fl .L0f046090
/* f046084: 4602803c */ c.lt.s $f16,$f2
/* f046088: 46001087 */ neg.s $f2,$f2
/* f04608c: 4602803c */ c.lt.s $f16,$f2
.L0f046090:
/* f046090: 00000000 */ nop
/* f046094: 45000057 */ bc1f .L0f0461f4
/* f046098: 00000000 */ nop
/* f04609c: 3c017f1b */ lui $at,%hi(var7f1a927c)
/* f0460a0: c4249278 */ lwc1 $f4,%lo(var7f1a9278)($at)
/* f0460a4: 02402025 */ or $a0,$s2,$zero
/* f0460a8: 26050010 */ addiu $a1,$s0,0x10
/* f0460ac: 4604c582 */ mul.s $f22,$f24,$f4
/* f0460b0: 02e03025 */ or $a2,$s7,$zero
/* f0460b4: e7b80010 */ swc1 $f24,0x10($sp)
/* f0460b8: afa00014 */ sw $zero,0x14($sp)
/* f0460bc: afa00018 */ sw $zero,0x18($sp)
/* f0460c0: afb0001c */ sw $s0,0x1c($sp)
/* f0460c4: afb60024 */ sw $s6,0x24($sp)
/* f0460c8: e7b60020 */ swc1 $f22,0x20($sp)
/* f0460cc: 0fc115d8 */ jal func0f045760
/* f0460d0: afb70028 */ sw $s7,0x28($sp)
/* f0460d4: 50400004 */ beqzl $v0,.L0f0460e8
/* f0460d8: c6060010 */ lwc1 $f6,0x10($s0)
/* f0460dc: 100000a5 */ b .L0f046374
/* f0460e0: a2000000 */ sb $zero,0x0($s0)
/* f0460e4: c6060010 */ lwc1 $f6,0x10($s0)
.L0f0460e8:
/* f0460e8: c6280008 */ lwc1 $f8,0x8($s1)
/* f0460ec: c60a0018 */ lwc1 $f10,0x18($s0)
/* f0460f0: c6320010 */ lwc1 $f18,0x10($s1)
/* f0460f4: 46083301 */ sub.s $f12,$f6,$f8
/* f0460f8: 0fc259d4 */ jal atan2f
/* f0460fc: 46125381 */ sub.s $f14,$f10,$f18
/* f046100: 4600a481 */ sub.s $f18,$f20,$f0
/* f046104: c7b000f4 */ lwc1 $f16,0xf4($sp)
/* f046108: c62a0008 */ lwc1 $f10,0x8($s1)
/* f04610c: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f046110: c6260010 */ lwc1 $f6,0x10($s1)
/* f046114: 460a8301 */ sub.s $f12,$f16,$f10
/* f046118: e7b200c0 */ swc1 $f18,0xc0($sp)
/* f04611c: 0fc259d4 */ jal atan2f
/* f046120: 46064381 */ sub.s $f14,$f8,$f6
/* f046124: c7b000c0 */ lwc1 $f16,0xc0($sp)
/* f046128: 4600a301 */ sub.s $f12,$f20,$f0
/* f04612c: 02402025 */ or $a0,$s2,$zero
/* f046130: 02802825 */ or $a1,$s4,$zero
/* f046134: 461a803c */ c.lt.s $f16,$f26
/* f046138: 46006086 */ mov.s $f2,$f12
/* f04613c: 00003025 */ or $a2,$zero,$zero
/* f046140: 02803825 */ or $a3,$s4,$zero
/* f046144: 45020003 */ bc1fl .L0f046154
/* f046148: 4610f03e */ c.le.s $f30,$f16
/* f04614c: 461c8400 */ add.s $f16,$f16,$f28
/* f046150: 4610f03e */ c.le.s $f30,$f16
.L0f046154:
/* f046154: 00000000 */ nop
/* f046158: 45020003 */ bc1fl .L0f046168
/* f04615c: 461a803c */ c.lt.s $f16,$f26
/* f046160: 461c8401 */ sub.s $f16,$f16,$f28
/* f046164: 461a803c */ c.lt.s $f16,$f26
.L0f046168:
/* f046168: 00000000 */ nop
/* f04616c: 45020003 */ bc1fl .L0f04617c
/* f046170: 461a603c */ c.lt.s $f12,$f26
/* f046174: 46008407 */ neg.s $f16,$f16
/* f046178: 461a603c */ c.lt.s $f12,$f26
.L0f04617c:
/* f04617c: 00000000 */ nop
/* f046180: 45020003 */ bc1fl .L0f046190
/* f046184: 4602f03e */ c.le.s $f30,$f2
/* f046188: 461c6080 */ add.s $f2,$f12,$f28
/* f04618c: 4602f03e */ c.le.s $f30,$f2
.L0f046190:
/* f046190: 00000000 */ nop
/* f046194: 45020003 */ bc1fl .L0f0461a4
/* f046198: 461a103c */ c.lt.s $f2,$f26
/* f04619c: 461c1081 */ sub.s $f2,$f2,$f28
/* f0461a0: 461a103c */ c.lt.s $f2,$f26
.L0f0461a4:
/* f0461a4: 00000000 */ nop
/* f0461a8: 45020003 */ bc1fl .L0f0461b8
/* f0461ac: 4610103c */ c.lt.s $f2,$f16
/* f0461b0: 46001087 */ neg.s $f2,$f2
/* f0461b4: 4610103c */ c.lt.s $f2,$f16
.L0f0461b8:
/* f0461b8: 00000000 */ nop
/* f0461bc: 45020061 */ bc1fl .L0f046344
/* f0461c0: 82190001 */ lb $t9,0x1($s0)
/* f0461c4: e7b80010 */ swc1 $f24,0x10($sp)
/* f0461c8: afa00014 */ sw $zero,0x14($sp)
/* f0461cc: afa00018 */ sw $zero,0x18($sp)
/* f0461d0: afb0001c */ sw $s0,0x1c($sp)
/* f0461d4: e7b60020 */ swc1 $f22,0x20($sp)
/* f0461d8: afb60024 */ sw $s6,0x24($sp)
/* f0461dc: 0fc115d8 */ jal func0f045760
/* f0461e0: afb70028 */ sw $s7,0x28($sp)
/* f0461e4: 50400057 */ beqzl $v0,.L0f046344
/* f0461e8: 82190001 */ lb $t9,0x1($s0)
/* f0461ec: 10000061 */ b .L0f046374
/* f0461f0: a2000000 */ sb $zero,0x0($s0)
.L0f0461f4:
/* f0461f4: c432927c */ lwc1 $f18,%lo(var7f1a927c)($at)
/* f0461f8: 02803825 */ or $a3,$s4,$zero
/* f0461fc: e7b80010 */ swc1 $f24,0x10($sp)
/* f046200: 4612c582 */ mul.s $f22,$f24,$f18
/* f046204: afa00014 */ sw $zero,0x14($sp)
/* f046208: afa00018 */ sw $zero,0x18($sp)
/* f04620c: afb0001c */ sw $s0,0x1c($sp)
/* f046210: afb60024 */ sw $s6,0x24($sp)
/* f046214: afb70028 */ sw $s7,0x28($sp)
/* f046218: 0fc115d8 */ jal func0f045760
/* f04621c: e7b60020 */ swc1 $f22,0x20($sp)
/* f046220: 50400004 */ beqzl $v0,.L0f046234
/* f046224: c604001c */ lwc1 $f4,0x1c($s0)
/* f046228: 10000052 */ b .L0f046374
/* f04622c: a2000000 */ sb $zero,0x0($s0)
/* f046230: c604001c */ lwc1 $f4,0x1c($s0)
.L0f046234:
/* f046234: c6260008 */ lwc1 $f6,0x8($s1)
/* f046238: c6080024 */ lwc1 $f8,0x24($s0)
/* f04623c: c62a0010 */ lwc1 $f10,0x10($s1)
/* f046240: 46062301 */ sub.s $f12,$f4,$f6
/* f046244: 0fc259d4 */ jal atan2f
/* f046248: 460a4381 */ sub.s $f14,$f8,$f10
/* f04624c: 4600a481 */ sub.s $f18,$f20,$f0
/* f046250: c7b000f4 */ lwc1 $f16,0xf4($sp)
/* f046254: c62a0008 */ lwc1 $f10,0x8($s1)
/* f046258: c7a800fc */ lwc1 $f8,0xfc($sp)
/* f04625c: c6260010 */ lwc1 $f6,0x10($s1)
/* f046260: 460a8301 */ sub.s $f12,$f16,$f10
/* f046264: e7b200b0 */ swc1 $f18,0xb0($sp)
/* f046268: 0fc259d4 */ jal atan2f
/* f04626c: 46064381 */ sub.s $f14,$f8,$f6
/* f046270: c7b000b0 */ lwc1 $f16,0xb0($sp)
/* f046274: 4600a301 */ sub.s $f12,$f20,$f0
/* f046278: 02402025 */ or $a0,$s2,$zero
/* f04627c: 02802825 */ or $a1,$s4,$zero
/* f046280: 461a803c */ c.lt.s $f16,$f26
/* f046284: 46006086 */ mov.s $f2,$f12
/* f046288: 02e03025 */ or $a2,$s7,$zero
/* f04628c: 02803825 */ or $a3,$s4,$zero
/* f046290: 45020003 */ bc1fl .L0f0462a0
/* f046294: 4610f03e */ c.le.s $f30,$f16
/* f046298: 461c8400 */ add.s $f16,$f16,$f28
/* f04629c: 4610f03e */ c.le.s $f30,$f16
.L0f0462a0:
/* f0462a0: 00000000 */ nop
/* f0462a4: 45020003 */ bc1fl .L0f0462b4
/* f0462a8: 461a803c */ c.lt.s $f16,$f26
/* f0462ac: 461c8401 */ sub.s $f16,$f16,$f28
/* f0462b0: 461a803c */ c.lt.s $f16,$f26
.L0f0462b4:
/* f0462b4: 00000000 */ nop
/* f0462b8: 45020003 */ bc1fl .L0f0462c8
/* f0462bc: 461a603c */ c.lt.s $f12,$f26
/* f0462c0: 46008407 */ neg.s $f16,$f16
/* f0462c4: 461a603c */ c.lt.s $f12,$f26
.L0f0462c8:
/* f0462c8: 00000000 */ nop
/* f0462cc: 45020003 */ bc1fl .L0f0462dc
/* f0462d0: 4602f03e */ c.le.s $f30,$f2
/* f0462d4: 461c6080 */ add.s $f2,$f12,$f28
/* f0462d8: 4602f03e */ c.le.s $f30,$f2
.L0f0462dc:
/* f0462dc: 00000000 */ nop
/* f0462e0: 45020003 */ bc1fl .L0f0462f0
/* f0462e4: 461a103c */ c.lt.s $f2,$f26
/* f0462e8: 461c1081 */ sub.s $f2,$f2,$f28
/* f0462ec: 461a103c */ c.lt.s $f2,$f26
.L0f0462f0:
/* f0462f0: 00000000 */ nop
/* f0462f4: 45020003 */ bc1fl .L0f046304
/* f0462f8: 4610103c */ c.lt.s $f2,$f16
/* f0462fc: 46001087 */ neg.s $f2,$f2
/* f046300: 4610103c */ c.lt.s $f2,$f16
.L0f046304:
/* f046304: 00000000 */ nop
/* f046308: 4502000e */ bc1fl .L0f046344
/* f04630c: 82190001 */ lb $t9,0x1($s0)
/* f046310: e7b80010 */ swc1 $f24,0x10($sp)
/* f046314: afa00014 */ sw $zero,0x14($sp)
/* f046318: afa00018 */ sw $zero,0x18($sp)
/* f04631c: afb0001c */ sw $s0,0x1c($sp)
/* f046320: e7b60020 */ swc1 $f22,0x20($sp)
/* f046324: afb60024 */ sw $s6,0x24($sp)
/* f046328: 0fc115d8 */ jal func0f045760
/* f04632c: afb70028 */ sw $s7,0x28($sp)
/* f046330: 50400004 */ beqzl $v0,.L0f046344
/* f046334: 82190001 */ lb $t9,0x1($s0)
/* f046338: 1000000e */ b .L0f046374
/* f04633c: a2000000 */ sb $zero,0x0($s0)
/* f046340: 82190001 */ lb $t9,0x1($s0)
.L0f046344:
/* f046344: 27290001 */ addiu $t1,$t9,0x1
/* f046348: a2090001 */ sb $t1,0x1($s0)
/* f04634c: 820a0001 */ lb $t2,0x1($s0)
/* f046350: 29410006 */ slti $at,$t2,0x6
/* f046354: 54200004 */ bnezl $at,.L0f046368
/* f046358: 8fab00f0 */ lw $t3,0xf0($sp)
/* f04635c: a2000003 */ sb $zero,0x3($s0)
/* f046360: a2000000 */ sb $zero,0x0($s0)
.L0f046364:
/* f046364: 8fab00f0 */ lw $t3,0xf0($sp)
.L0f046368:
/* f046368: 256c0001 */ addiu $t4,$t3,0x1
/* f04636c: 1597fe2e */ bne $t4,$s7,.L0f045c28
/* f046370: afac00f0 */ sw $t4,0xf0($sp)
.L0f046374:
/* f046374: 820d0003 */ lb $t5,0x3($s0)
/* f046378: 02402025 */ or $a0,$s2,$zero
/* f04637c: 55a00008 */ bnezl $t5,.L0f0463a0
/* f046380: 8e0e0028 */ lw $t6,0x28($s0)
/* f046384: c60a0004 */ lwc1 $f10,0x4($s0)
/* f046388: c6120008 */ lwc1 $f18,0x8($s0)
/* f04638c: c604000c */ lwc1 $f4,0xc($s0)
/* f046390: e60a002c */ swc1 $f10,0x2c($s0)
/* f046394: e6120030 */ swc1 $f18,0x30($s0)
/* f046398: e6040034 */ swc1 $f4,0x34($s0)
/* f04639c: 8e0e0028 */ lw $t6,0x28($s0)
.L0f0463a0:
/* f0463a0: 2401000a */ addiu $at,$zero,0xa
/* f0463a4: 01c1001a */ div $zero,$t6,$at
/* f0463a8: 00007810 */ mfhi $t7
/* f0463ac: 55e00039 */ bnezl $t7,.L0f046494
/* f0463b0: 82590007 */ lb $t9,0x7($s2)
/* f0463b4: 0fc1169c */ jal chrOpenDoor
/* f0463b8: 2605002c */ addiu $a1,$s0,0x2c
/* f0463bc: 10400011 */ beqz $v0,.L0f046404
/* f0463c0: 00408825 */ or $s1,$v0,$zero
/* f0463c4: 8e5802d4 */ lw $t8,0x2d4($s2)
/* f0463c8: 1700000e */ bnez $t8,.L0f046404
/* f0463cc: 00000000 */ nop
/* f0463d0: 8e590014 */ lw $t9,0x14($s2)
/* f0463d4: 33290010 */ andi $t1,$t9,0x10
/* f0463d8: 1520000a */ bnez $t1,.L0f046404
/* f0463dc: 00000000 */ nop
/* f0463e0: 0fc0b819 */ jal func0f02e064
/* f0463e4: 02402025 */ or $a0,$s2,$zero
/* f0463e8: 14400006 */ bnez $v0,.L0f046404
/* f0463ec: 02402025 */ or $a0,$s2,$zero
/* f0463f0: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f0463f4: 3c054180 */ lui $a1,0x4180
/* f0463f8: 3c0a800a */ lui $t2,%hi(g_Vars+0x8)
/* f0463fc: 8d4a9fc8 */ lw $t2,%lo(g_Vars+0x8)($t2)
/* f046400: ae4a00d8 */ sw $t2,0xd8($s2)
.L0f046404:
/* f046404: 52200006 */ beqzl $s1,.L0f046420
/* f046408: 8e4d02d4 */ lw $t5,0x2d4($s2)
/* f04640c: 8e4b0014 */ lw $t3,0x14($s2)
/* f046410: 316c0010 */ andi $t4,$t3,0x10
/* f046414: 5180001f */ beqzl $t4,.L0f046494
/* f046418: 82590007 */ lb $t9,0x7($s2)
/* f04641c: 8e4d02d4 */ lw $t5,0x2d4($s2)
.L0f046420:
/* f046420: 15a00015 */ bnez $t5,.L0f046478
/* f046424: 00000000 */ nop
/* f046428: 0fc0b819 */ jal func0f02e064
/* f04642c: 02402025 */ or $a0,$s2,$zero
/* f046430: 10400011 */ beqz $v0,.L0f046478
/* f046434: 00000000 */ nop
/* f046438: 9242032c */ lbu $v0,0x32c($s2)
/* f04643c: 24010003 */ addiu $at,$zero,0x3
/* f046440: 12e2000d */ beq $s7,$v0,.L0f046478
/* f046444: 00000000 */ nop
/* f046448: 1041000b */ beq $v0,$at,.L0f046478
/* f04644c: 00000000 */ nop
/* f046450: 824e0007 */ lb $t6,0x7($s2)
/* f046454: 2401000e */ addiu $at,$zero,0xe
/* f046458: 15c10005 */ bne $t6,$at,.L0f046470
/* f04645c: 00000000 */ nop
/* f046460: 0fc0e21a */ jal chrPatrolChooseAnimation
/* f046464: 02402025 */ or $a0,$s2,$zero
/* f046468: 10000003 */ b .L0f046478
/* f04646c: 00000000 */ nop
.L0f046470:
/* f046470: 0fc0dedc */ jal chrGoPosChooseAnimation
/* f046474: 02402025 */ or $a0,$s2,$zero
.L0f046478:
/* f046478: 56200006 */ bnezl $s1,.L0f046494
/* f04647c: 82590007 */ lb $t9,0x7($s2)
/* f046480: 8e4f0014 */ lw $t7,0x14($s2)
/* f046484: 2401ffef */ addiu $at,$zero,-17
/* f046488: 01e1c024 */ and $t8,$t7,$at
/* f04648c: ae580014 */ sw $t8,0x14($s2)
/* f046490: 82590007 */ lb $t9,0x7($s2)
.L0f046494:
/* f046494: 2401000e */ addiu $at,$zero,0xe
/* f046498: 2605002c */ addiu $a1,$s0,0x2c
/* f04649c: 17210007 */ bne $t9,$at,.L0f0464bc
/* f0464a0: 02402025 */ or $a0,$s2,$zero
/* f0464a4: 02402025 */ or $a0,$s2,$zero
/* f0464a8: 00003025 */ or $a2,$zero,$zero
/* f0464ac: 0fc10fcb */ jal func0f043f2c
/* f0464b0: 2647007c */ addiu $a3,$s2,0x7c
/* f0464b4: 10000054 */ b .L0f046608
/* f0464b8: 8fbf0084 */ lw $ra,0x84($sp)
.L0f0464bc:
/* f0464bc: c64600ac */ lwc1 $f6,0xac($s2)
/* f0464c0: 00004825 */ or $t1,$zero,$zero
/* f0464c4: 264700ac */ addiu $a3,$s2,0xac
/* f0464c8: 4606d032 */ c.eq.s $f26,$f6
/* f0464cc: 00000000 */ nop
/* f0464d0: 45030003 */ bc1tl .L0f0464e0
/* f0464d4: 924d032e */ lbu $t5,0x32e($s2)
/* f0464d8: 24090001 */ addiu $t1,$zero,0x1
/* f0464dc: 924d032e */ lbu $t5,0x32e($s2)
.L0f0464e0:
/* f0464e0: 00095880 */ sll $t3,$t1,0x2
/* f0464e4: 316c0004 */ andi $t4,$t3,0x4
/* f0464e8: 31aefffb */ andi $t6,$t5,0xfffb
/* f0464ec: 018e7825 */ or $t7,$t4,$t6
/* f0464f0: a24f032e */ sb $t7,0x32e($s2)
/* f0464f4: 0fc10fcb */ jal func0f043f2c
/* f0464f8: 92460065 */ lbu $a2,0x65($s2)
/* f0464fc: 8e5802d4 */ lw $t8,0x2d4($s2)
/* f046500: 57000041 */ bnezl $t8,.L0f046608
/* f046504: 8fbf0084 */ lw $ra,0x84($sp)
/* f046508: 0fc0b819 */ jal func0f02e064
/* f04650c: 02402025 */ or $a0,$s2,$zero
/* f046510: 5440003d */ bnezl $v0,.L0f046608
/* f046514: 8fbf0084 */ lw $ra,0x84($sp)
/* f046518: 92420065 */ lbu $v0,0x65($s2)
/* f04651c: 24010002 */ addiu $at,$zero,0x2
/* f046520: 30590003 */ andi $t9,$v0,0x3
/* f046524: 17210025 */ bne $t9,$at,.L0f0465bc
/* f046528: 03201025 */ or $v0,$t9,$zero
/* f04652c: c64800ac */ lwc1 $f8,0xac($s2)
/* f046530: 4608d032 */ c.eq.s $f26,$f8
/* f046534: 00000000 */ nop
/* f046538: 4503000c */ bc1tl .L0f04656c
/* f04653c: 8e4d032c */ lw $t5,0x32c($s2)
/* f046540: 8e49032c */ lw $t1,0x32c($s2)
/* f046544: 3c053e80 */ lui $a1,0x3e80
/* f046548: 3c064100 */ lui $a2,0x4100
/* f04654c: 00095d40 */ sll $t3,$t1,0x15
/* f046550: 0562002d */ bltzl $t3,.L0f046608
/* f046554: 8fbf0084 */ lw $ra,0x84($sp)
/* f046558: 0c0077ac */ jal modelSetAnimSpeed
/* f04655c: 8e440020 */ lw $a0,0x20($s2)
/* f046560: 10000029 */ b .L0f046608
/* f046564: 8fbf0084 */ lw $ra,0x84($sp)
/* f046568: 8e4d032c */ lw $t5,0x32c($s2)
.L0f04656c:
/* f04656c: 000d7540 */ sll $t6,$t5,0x15
/* f046570: 05c30025 */ bgezl $t6,.L0f046608
/* f046574: 8fbf0084 */ lw $ra,0x84($sp)
/* f046578: 8e4f0018 */ lw $t7,0x18($s2)
/* f04657c: 3c053f00 */ lui $a1,0x3f00
/* f046580: 3c064200 */ lui $a2,0x4200
/* f046584: 000fc300 */ sll $t8,$t7,0xc
/* f046588: 07010008 */ bgez $t8,.L0f0465ac
/* f04658c: 00000000 */ nop
/* f046590: 3c053f26 */ lui $a1,0x3f26
/* f046594: 34a56666 */ ori $a1,$a1,0x6666
/* f046598: 8e440020 */ lw $a0,0x20($s2)
/* f04659c: 0c0077ac */ jal modelSetAnimSpeed
/* f0465a0: 3c064200 */ lui $a2,0x4200
/* f0465a4: 10000018 */ b .L0f046608
/* f0465a8: 8fbf0084 */ lw $ra,0x84($sp)
.L0f0465ac:
/* f0465ac: 0c0077ac */ jal modelSetAnimSpeed
/* f0465b0: 8e440020 */ lw $a0,0x20($s2)
/* f0465b4: 10000014 */ b .L0f046608
/* f0465b8: 8fbf0084 */ lw $ra,0x84($sp)
.L0f0465bc:
/* f0465bc: 56e20012 */ bnel $s7,$v0,.L0f046608
/* f0465c0: 8fbf0084 */ lw $ra,0x84($sp)
/* f0465c4: c64a00ac */ lwc1 $f10,0xac($s2)
/* f0465c8: 3c053f00 */ lui $a1,0x3f00
/* f0465cc: 460ad032 */ c.eq.s $f26,$f10
/* f0465d0: 00000000 */ nop
/* f0465d4: 45030009 */ bc1tl .L0f0465fc
/* f0465d8: 4406d000 */ mfc1 $a2,$f26
/* f0465dc: 3c053ecc */ lui $a1,0x3ecc
/* f0465e0: 4406d000 */ mfc1 $a2,$f26
/* f0465e4: 34a5cccd */ ori $a1,$a1,0xcccd
/* f0465e8: 0c0077ac */ jal modelSetAnimSpeed
/* f0465ec: 8e440020 */ lw $a0,0x20($s2)
/* f0465f0: 10000005 */ b .L0f046608
/* f0465f4: 8fbf0084 */ lw $ra,0x84($sp)
/* f0465f8: 4406d000 */ mfc1 $a2,$f26
.L0f0465fc:
/* f0465fc: 0c0077ac */ jal modelSetAnimSpeed
/* f046600: 8e440020 */ lw $a0,0x20($s2)
/* f046604: 8fbf0084 */ lw $ra,0x84($sp)
.L0f046608:
/* f046608: d7b40030 */ ldc1 $f20,0x30($sp)
/* f04660c: d7b60038 */ ldc1 $f22,0x38($sp)
/* f046610: d7b80040 */ ldc1 $f24,0x40($sp)
/* f046614: d7ba0048 */ ldc1 $f26,0x48($sp)
/* f046618: d7bc0050 */ ldc1 $f28,0x50($sp)
/* f04661c: d7be0058 */ ldc1 $f30,0x58($sp)
/* f046620: 8fb00064 */ lw $s0,0x64($sp)
/* f046624: 8fb10068 */ lw $s1,0x68($sp)
/* f046628: 8fb2006c */ lw $s2,0x6c($sp)
/* f04662c: 8fb30070 */ lw $s3,0x70($sp)
/* f046630: 8fb40074 */ lw $s4,0x74($sp)
/* f046634: 8fb50078 */ lw $s5,0x78($sp)
/* f046638: 8fb6007c */ lw $s6,0x7c($sp)
/* f04663c: 8fb70080 */ lw $s7,0x80($sp)
/* f046640: 03e00008 */ jr $ra
/* f046644: 27bd0110 */ addiu $sp,$sp,0x110
);
GLOBAL_ASM(
glabel goPosUpdateLiftAction
/* f046648: 27bdff60 */ addiu $sp,$sp,-160
/* f04664c: afb00018 */ sw $s0,0x18($sp)
/* f046650: 00808025 */ or $s0,$a0,$zero
/* f046654: afbf001c */ sw $ra,0x1c($sp)
/* f046658: afa500a4 */ sw $a1,0xa4($sp)
/* f04665c: afa600a8 */ sw $a2,0xa8($sp)
/* f046660: afa700ac */ sw $a3,0xac($sp)
/* f046664: 87a400b2 */ lh $a0,0xb2($sp)
/* f046668: afa00044 */ sw $zero,0x44($sp)
/* f04666c: 0fc1c396 */ jal liftFindByPad
/* f046670: afa0009c */ sw $zero,0x9c($sp)
/* f046674: 8fa30044 */ lw $v1,0x44($sp)
/* f046678: 8fa8009c */ lw $t0,0x9c($sp)
/* f04667c: 14400003 */ bnez $v0,.L0f04668c
/* f046680: 00402825 */ or $a1,$v0,$zero
/* f046684: 100000e5 */ b .L0f046a1c
/* f046688: 00001025 */ or $v0,$zero,$zero
.L0f04668c:
/* f04668c: 8ca40004 */ lw $a0,0x4($a1)
/* f046690: afa8009c */ sw $t0,0x9c($sp)
/* f046694: afa30044 */ sw $v1,0x44($sp)
/* f046698: 0fc1c3ab */ jal liftGetY
/* f04669c: afa40038 */ sw $a0,0x38($sp)
/* f0466a0: 8fae00b4 */ lw $t6,0xb4($sp)
/* f0466a4: 8fa30044 */ lw $v1,0x44($sp)
/* f0466a8: 8fa8009c */ lw $t0,0x9c($sp)
/* f0466ac: 8fa90038 */ lw $t1,0x38($sp)
/* f0466b0: 05c0000b */ bltz $t6,.L0f0466e0
/* f0466b4: 46000086 */ mov.s $f2,$f0
/* f0466b8: 01c02025 */ or $a0,$t6,$zero
/* f0466bc: 240500c2 */ addiu $a1,$zero,0xc2
/* f0466c0: 27a60048 */ addiu $a2,$sp,0x48
/* f0466c4: afa8009c */ sw $t0,0x9c($sp)
/* f0466c8: 0fc456ac */ jal padUnpack
/* f0466cc: e7a2003c */ swc1 $f2,0x3c($sp)
/* f0466d0: 8fa8009c */ lw $t0,0x9c($sp)
/* f0466d4: 8fa90038 */ lw $t1,0x38($sp)
/* f0466d8: c7a2003c */ lwc1 $f2,0x3c($sp)
/* f0466dc: 8fa30094 */ lw $v1,0x94($sp)
.L0f0466e0:
/* f0466e0: 8fa200a4 */ lw $v0,0xa4($sp)
/* f0466e4: 30780800 */ andi $t8,$v1,0x800
/* f0466e8: 304f0400 */ andi $t7,$v0,0x400
/* f0466ec: 11e00061 */ beqz $t7,.L0f046874
/* f0466f0: 304b0800 */ andi $t3,$v0,0x800
/* f0466f4: 1300005a */ beqz $t8,.L0f046860
/* f0466f8: 8faa00ac */ lw $t2,0xac($sp)
/* f0466fc: 8fa400ac */ lw $a0,0xac($sp)
/* f046700: 3c0a800a */ lui $t2,%hi(g_Vars+0x318)
/* f046704: 54800005 */ bnezl $a0,.L0f04671c
/* f046708: 3c014220 */ lui $at,0x4220
/* f04670c: 9219032c */ lbu $t9,0x32c($s0)
/* f046710: 24010001 */ addiu $at,$zero,0x1
/* f046714: 17210028 */ bne $t9,$at,.L0f0467b8
/* f046718: 3c014220 */ lui $at,0x4220
.L0f04671c:
/* f04671c: 44812000 */ mtc1 $at,$f4
/* f046720: c60000b4 */ lwc1 $f0,0xb4($s0)
/* f046724: 00004025 */ or $t0,$zero,$zero
/* f046728: 46040180 */ add.s $f6,$f0,$f4
/* f04672c: 4606103e */ c.le.s $f2,$f6
/* f046730: 00000000 */ nop
/* f046734: 45000002 */ bc1f .L0f046740
/* f046738: 00000000 */ nop
/* f04673c: 24080001 */ addiu $t0,$zero,0x1
.L0f046740:
/* f046740: 8d4aa2d8 */ lw $t2,%lo(g_Vars+0x318)($t2)
/* f046744: 1540000b */ bnez $t2,.L0f046774
/* f046748: 00000000 */ nop
/* f04674c: 11000009 */ beqz $t0,.L0f046774
/* f046750: 3c0142c8 */ lui $at,0x42c8
/* f046754: 44814000 */ mtc1 $at,$f8
/* f046758: 00004025 */ or $t0,$zero,$zero
/* f04675c: 46080281 */ sub.s $f10,$f0,$f8
/* f046760: 4602503c */ c.lt.s $f10,$f2
/* f046764: 00000000 */ nop
/* f046768: 45000002 */ bc1f .L0f046774
/* f04676c: 00000000 */ nop
/* f046770: 24080001 */ addiu $t0,$zero,0x1
.L0f046774:
/* f046774: 11000010 */ beqz $t0,.L0f0467b8
/* f046778: 00000000 */ nop
/* f04677c: 812b0085 */ lb $t3,0x85($t1)
/* f046780: 3c013f00 */ lui $at,0x3f00
/* f046784: 000b6080 */ sll $t4,$t3,0x2
/* f046788: 012c6821 */ addu $t5,$t1,$t4
/* f04678c: 8da20064 */ lw $v0,0x64($t5)
/* f046790: 10400009 */ beqz $v0,.L0f0467b8
/* f046794: 00000000 */ nop
/* f046798: c450007c */ lwc1 $f16,0x7c($v0)
/* f04679c: 44819000 */ mtc1 $at,$f18
/* f0467a0: 00000000 */ nop
/* f0467a4: 4612803c */ c.lt.s $f16,$f18
/* f0467a8: 00000000 */ nop
/* f0467ac: 45000002 */ bc1f .L0f0467b8
/* f0467b0: 00000000 */ nop
/* f0467b4: 00004025 */ or $t0,$zero,$zero
.L0f0467b8:
/* f0467b8: 55000016 */ bnezl $t0,.L0f046814
/* f0467bc: a200032c */ sb $zero,0x32c($s0)
/* f0467c0: 50800096 */ beqzl $a0,.L0f046a1c
/* f0467c4: 01001025 */ or $v0,$t0,$zero
/* f0467c8: 920e032c */ lbu $t6,0x32c($s0)
/* f0467cc: 24010001 */ addiu $at,$zero,0x1
/* f0467d0: 240f0001 */ addiu $t7,$zero,0x1
/* f0467d4: 11c10090 */ beq $t6,$at,.L0f046a18
/* f0467d8: 02002025 */ or $a0,$s0,$zero
/* f0467dc: a20f032c */ sb $t7,0x32c($s0)
/* f0467e0: afa8009c */ sw $t0,0x9c($sp)
/* f0467e4: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f0467e8: 3c054180 */ lui $a1,0x4180
/* f0467ec: 8fb800b4 */ lw $t8,0xb4($sp)
/* f0467f0: 8fa8009c */ lw $t0,0x9c($sp)
/* f0467f4: 02002025 */ or $a0,$s0,$zero
/* f0467f8: 07000087 */ bltz $t8,.L0f046a18
/* f0467fc: 27a50048 */ addiu $a1,$sp,0x48
/* f046800: 0fc1169c */ jal chrOpenDoor
/* f046804: afa8009c */ sw $t0,0x9c($sp)
/* f046808: 10000083 */ b .L0f046a18
/* f04680c: 8fa8009c */ lw $t0,0x9c($sp)
/* f046810: a200032c */ sb $zero,0x32c($s0)
.L0f046814:
/* f046814: afa8009c */ sw $t0,0x9c($sp)
/* f046818: 0fc0b819 */ jal func0f02e064
/* f04681c: 02002025 */ or $a0,$s0,$zero
/* f046820: 1040007d */ beqz $v0,.L0f046a18
/* f046824: 8fa8009c */ lw $t0,0x9c($sp)
/* f046828: 82190007 */ lb $t9,0x7($s0)
/* f04682c: 2401000e */ addiu $at,$zero,0xe
/* f046830: 02002025 */ or $a0,$s0,$zero
/* f046834: 17210006 */ bne $t9,$at,.L0f046850
/* f046838: 00000000 */ nop
/* f04683c: 02002025 */ or $a0,$s0,$zero
/* f046840: 0fc0e21a */ jal chrPatrolChooseAnimation
/* f046844: afa8009c */ sw $t0,0x9c($sp)
/* f046848: 10000073 */ b .L0f046a18
/* f04684c: 8fa8009c */ lw $t0,0x9c($sp)
.L0f046850:
/* f046850: 0fc0dedc */ jal chrGoPosChooseAnimation
/* f046854: afa8009c */ sw $t0,0x9c($sp)
/* f046858: 1000006f */ b .L0f046a18
/* f04685c: 8fa8009c */ lw $t0,0x9c($sp)
.L0f046860:
/* f046860: 5140006e */ beqzl $t2,.L0f046a1c
/* f046864: 01001025 */ or $v0,$t0,$zero
/* f046868: 24080001 */ addiu $t0,$zero,0x1
/* f04686c: 1000006a */ b .L0f046a18
/* f046870: a200032c */ sb $zero,0x32c($s0)
.L0f046874:
/* f046874: 11600068 */ beqz $t3,.L0f046a18
/* f046878: 306c0400 */ andi $t4,$v1,0x400
/* f04687c: 11800060 */ beqz $t4,.L0f046a00
/* f046880: 8fad00a8 */ lw $t5,0xa8($sp)
/* f046884: 15a00004 */ bnez $t5,.L0f046898
/* f046888: 27a5002c */ addiu $a1,$sp,0x2c
/* f04688c: 920e032c */ lbu $t6,0x32c($s0)
/* f046890: 24010003 */ addiu $at,$zero,0x3
/* f046894: 15c10036 */ bne $t6,$at,.L0f046970
.L0f046898:
/* f046898: 3c0f8007 */ lui $t7,%hi(var8006843c)
/* f04689c: 25ef843c */ addiu $t7,$t7,%lo(var8006843c)
/* f0468a0: 8de10000 */ lw $at,0x0($t7)
/* f0468a4: 27a40048 */ addiu $a0,$sp,0x48
/* f0468a8: 00003025 */ or $a2,$zero,$zero
/* f0468ac: aca10000 */ sw $at,0x0($a1)
/* f0468b0: 8faa0090 */ lw $t2,0x90($sp)
/* f0468b4: e7a2003c */ swc1 $f2,0x3c($sp)
/* f0468b8: 00003825 */ or $a3,$zero,$zero
/* f0468bc: 0c00a8db */ jal func0002a36c
/* f0468c0: a7aa002c */ sh $t2,0x2c($sp)
/* f0468c4: 3c0141f0 */ lui $at,0x41f0
/* f0468c8: 44812000 */ mtc1 $at,$f4
/* f0468cc: c7a2003c */ lwc1 $f2,0x3c($sp)
/* f0468d0: 8fa90038 */ lw $t1,0x38($sp)
/* f0468d4: 46040181 */ sub.s $f6,$f0,$f4
/* f0468d8: 00001025 */ or $v0,$zero,$zero
/* f0468dc: 3c0b800a */ lui $t3,%hi(g_Vars+0x318)
/* f0468e0: 4602303e */ c.le.s $f6,$f2
/* f0468e4: 00000000 */ nop
/* f0468e8: 45000002 */ bc1f .L0f0468f4
/* f0468ec: 00000000 */ nop
/* f0468f0: 24020001 */ addiu $v0,$zero,0x1
.L0f0468f4:
/* f0468f4: 8d6ba2d8 */ lw $t3,%lo(g_Vars+0x318)($t3)
/* f0468f8: 00404025 */ or $t0,$v0,$zero
/* f0468fc: 1560000b */ bnez $t3,.L0f04692c
/* f046900: 00000000 */ nop
/* f046904: 10400009 */ beqz $v0,.L0f04692c
/* f046908: 3c0142c8 */ lui $at,0x42c8
/* f04690c: 44814000 */ mtc1 $at,$f8
/* f046910: 00004025 */ or $t0,$zero,$zero
/* f046914: 46080280 */ add.s $f10,$f0,$f8
/* f046918: 460a103c */ c.lt.s $f2,$f10
/* f04691c: 00000000 */ nop
/* f046920: 45000002 */ bc1f .L0f04692c
/* f046924: 00000000 */ nop
/* f046928: 24080001 */ addiu $t0,$zero,0x1
.L0f04692c:
/* f04692c: 11000010 */ beqz $t0,.L0f046970
/* f046930: 00000000 */ nop
/* f046934: 812c0085 */ lb $t4,0x85($t1)
/* f046938: 3c013f00 */ lui $at,0x3f00
/* f04693c: 000c6880 */ sll $t5,$t4,0x2
/* f046940: 012d7021 */ addu $t6,$t1,$t5
/* f046944: 8dc20064 */ lw $v0,0x64($t6)
/* f046948: 10400009 */ beqz $v0,.L0f046970
/* f04694c: 00000000 */ nop
/* f046950: c450007c */ lwc1 $f16,0x7c($v0)
/* f046954: 44819000 */ mtc1 $at,$f18
/* f046958: 00000000 */ nop
/* f04695c: 4612803c */ c.lt.s $f16,$f18
/* f046960: 00000000 */ nop
/* f046964: 45000002 */ bc1f .L0f046970
/* f046968: 00000000 */ nop
/* f04696c: 00004025 */ or $t0,$zero,$zero
.L0f046970:
/* f046970: 1500000f */ bnez $t0,.L0f0469b0
/* f046974: 240a0002 */ addiu $t2,$zero,0x2
/* f046978: 8fb800a8 */ lw $t8,0xa8($sp)
/* f04697c: 53000027 */ beqzl $t8,.L0f046a1c
/* f046980: 01001025 */ or $v0,$t0,$zero
/* f046984: 920f032c */ lbu $t7,0x32c($s0)
/* f046988: 24010003 */ addiu $at,$zero,0x3
/* f04698c: 24190003 */ addiu $t9,$zero,0x3
/* f046990: 11e10021 */ beq $t7,$at,.L0f046a18
/* f046994: 02002025 */ or $a0,$s0,$zero
/* f046998: a219032c */ sb $t9,0x32c($s0)
/* f04699c: afa8009c */ sw $t0,0x9c($sp)
/* f0469a0: 0fc0b9b7 */ jal chrStandChooseAnimation
/* f0469a4: 3c054180 */ lui $a1,0x4180
/* f0469a8: 1000001b */ b .L0f046a18
/* f0469ac: 8fa8009c */ lw $t0,0x9c($sp)
.L0f0469b0:
/* f0469b0: a20a032c */ sb $t2,0x32c($s0)
/* f0469b4: afa8009c */ sw $t0,0x9c($sp)
/* f0469b8: 0fc0b819 */ jal func0f02e064
/* f0469bc: 02002025 */ or $a0,$s0,$zero
/* f0469c0: 10400015 */ beqz $v0,.L0f046a18
/* f0469c4: 8fa8009c */ lw $t0,0x9c($sp)
/* f0469c8: 820b0007 */ lb $t3,0x7($s0)
/* f0469cc: 2401000e */ addiu $at,$zero,0xe
/* f0469d0: 02002025 */ or $a0,$s0,$zero
/* f0469d4: 15610006 */ bne $t3,$at,.L0f0469f0
/* f0469d8: 00000000 */ nop
/* f0469dc: 02002025 */ or $a0,$s0,$zero
/* f0469e0: 0fc0e21a */ jal chrPatrolChooseAnimation
/* f0469e4: afa8009c */ sw $t0,0x9c($sp)
/* f0469e8: 1000000b */ b .L0f046a18
/* f0469ec: 8fa8009c */ lw $t0,0x9c($sp)
.L0f0469f0:
/* f0469f0: 0fc0dedc */ jal chrGoPosChooseAnimation
/* f0469f4: afa8009c */ sw $t0,0x9c($sp)
/* f0469f8: 10000007 */ b .L0f046a18
/* f0469fc: 8fa8009c */ lw $t0,0x9c($sp)
.L0f046a00:
/* f046a00: 8fac00a8 */ lw $t4,0xa8($sp)
/* f046a04: 240d0002 */ addiu $t5,$zero,0x2
/* f046a08: 51800004 */ beqzl $t4,.L0f046a1c
/* f046a0c: 01001025 */ or $v0,$t0,$zero
/* f046a10: 24080001 */ addiu $t0,$zero,0x1
/* f046a14: a20d032c */ sb $t5,0x32c($s0)
.L0f046a18:
/* f046a18: 01001025 */ or $v0,$t0,$zero
.L0f046a1c:
/* f046a1c: 8fbf001c */ lw $ra,0x1c($sp)
/* f046a20: 8fb00018 */ lw $s0,0x18($sp)
/* f046a24: 27bd00a0 */ addiu $sp,$sp,0xa0
/* f046a28: 03e00008 */ jr $ra
/* f046a2c: 00000000 */ nop
);
u32 var8006843c = 0x0000ffff;
// Mismatch: Goal loads arrivingatlift into a0 then later copies s0 (chr) to a0.
// The below loads arrivingatlift into v1 and copies s0 to a0 earlier.
//bool goPosUpdateLiftAction(struct chrdata *chr, u32 curpadflags, bool arg2, bool arrivingatlift, s16 curpadnum, s32 nextpadnum)
//{
// bool advance = false;
// struct pad nextpad;
// u32 nextpadflags = 0;
// f32 nextground;
// f32 lifty;
// struct liftobj *lift;
// struct prop *liftprop = liftFindByPad(curpadnum);
// u32 stack;
//
// if (!liftprop) {
// return false;
// }
//
// lift = (struct liftobj *) liftprop->obj;
//
// lifty = liftGetY(lift);
//
// if (nextpadnum >= 0) {
// padUnpack(nextpadnum, PADFIELD_POS | PADFIELD_ROOM | PADFIELD_FLAGS, &nextpad);
// nextpadflags = nextpad.flags;
// }
//
// if (curpadflags & PADFLAG_AIWAITLIFT) {
// if (nextpadflags & PADFLAG_AIONLIFT) {
// if (arrivingatlift || chr->liftaction == LIFTACTION_WAITINGFORLIFT) {
// // Begin entering lift if lift is under 40cm above this level
// advance = (lifty <= chr->manground + 40);
//
// // ...and (if solo mode) lift is over 1m under this level
// // (this logic allows MP simulants to drop down onto lifts)
// if (!g_Vars.normmplayerisrunning && advance) {
// advance = (lifty > chr->manground - 100);
// }
//
// // ...and if the lift has a door, is at least halfway open
// if (advance && lift->doors[lift->levelcur] && lift->doors[lift->levelcur]->frac < 0.5f) {
// advance = false;
// }
// }
//
// if (!advance) {
// if (arrivingatlift && chr->liftaction != LIFTACTION_WAITINGFORLIFT) {
// // Just arrived at lift
// chr->liftaction = LIFTACTION_WAITINGFORLIFT;
//
// chrStandChooseAnimation(chr, 16);
//
// if (nextpadnum >= 0) {
// // Call the lift
// chrOpenDoor(chr, &nextpad.pos);
// }
// }
// } else {
// // Enter lift
// chr->liftaction = LIFTACTION_NOTUSINGLIFT;
//
// if (func0f02e064(chr)) {
// if (chr->actiontype == ACT_PATROL) {
// chrPatrolChooseAnimation(chr);
// } else {
// chrGoPosChooseAnimation(chr);
// }
// }
// }
// } else {
// // On a wait lift pad, but the next pad in the route is not on the
// // lift, so the chr is running past the lift without using it.
// if (arrivingatlift) {
// advance = true;
// chr->liftaction = LIFTACTION_NOTUSINGLIFT;
// }
// }
// } else if (curpadflags & PADFLAG_AIONLIFT) {
// if (nextpadflags & PADFLAG_AIWAITLIFT) {
// // Waiting for door to close or lift to arrive at destination
// if (arg2 || chr->liftaction == LIFTACTION_WAITINGONLIFT) {
// // Continue waiting
// s16 rooms[] = {0, -1};
// u32 stack2;
//
// rooms[0] = nextpad.room;
//
// nextground = func0002a36c(&nextpad.pos, rooms, NULL, NULL);
//
// // Begin exiting lift if lift is 30cm under destination or higher
// advance = (lifty >= nextground - 30);
//
// // ...and (if solo) lift is under 1m above destination
// if (!g_Vars.normmplayerisrunning && advance) {
// advance = (lifty < nextground + 100);
// }
//
// // ...and if the lift has a door, is at least halfway open
// if (advance && lift->doors[lift->levelcur] && lift->doors[lift->levelcur]->frac < 0.5f) {
// advance = false;
// }
// }
//
// if (!advance) {
// if (arg2 && chr->liftaction != LIFTACTION_WAITINGONLIFT) {
// // Just arrived inside lift
// chr->liftaction = LIFTACTION_WAITINGONLIFT;
// chrStandChooseAnimation(chr, 16);
// }
// } else {
// // Start disembarking
// chr->liftaction = LIFTACTION_ONLIFT;
//
// if (func0f02e064(chr)) {
// if (chr->actiontype == ACT_PATROL) {
// chrPatrolChooseAnimation(chr);
// } else {
// chrGoPosChooseAnimation(chr);
// }
// }
// }
// } else {
// // Not our stop? Not sure why advance is true here. I guess the chr
// // can't go anywhere anyway because the next pad is above or below
// // them.
// if (arg2) {
// advance = true;
// chr->liftaction = LIFTACTION_ONLIFT;
// }
// }
// }
//
// return advance;
//}
s32 chrIsUsingLift(struct chrdata *chr)
{
return (chr->actiontype == ACT_GOPOS || chr->actiontype == ACT_PATROL) && chr->liftaction > 0;
}
s16 chrGoPosGetNextPadNum(struct chrdata *chr)
{
if (chr->act_gopos.waypoints[chr->act_gopos.curindex + 1]) {
return chr->act_gopos.waypoints[chr->act_gopos.curindex + 1]->padnum;
}
return -1;
}
void chrTickGoPos(struct chrdata *chr)
{
struct waypoint *waypoint;
struct coord pos;
s16 rooms[8];
struct prop *prop = chr->prop;
bool enteringcheap = false;
struct pad pad;
bool sp240 = true;
struct coord curwppos;
s16 curwprooms[8];
u32 curwpflags;
chr->act_gopos.flags &= ~(GOPOSFLAG_DUCK | GOPOSFLAG_80);
if (chr->hidden & CHRHFLAG_NEEDANIM) {
if (modelIsAnimMerging(chr->model)) {
return;
}
chrGoPosChooseAnimation(chr);
chr->hidden &= ~CHRHFLAG_NEEDANIM;
}
chr->act_gopos.waydata.age++;
// If stuck for 1 second
if (chr->lastmoveok60 < g_Vars.lvframe60 - PALDOWN(60)) {
#if VERSION >= VERSION_NTSC_1_0
if (chr->goposforce >= 0) {
// Try and warp the chr past whatever obstacle is blocking them?
struct coord sp196 = {0, 0, 0};
chrDamageByMisc(chr, 1, &sp196, NULL, NULL);
chr->lastmoveok60 = g_Vars.lvframe60;
return;
}
#endif
// Goposforce was not set - restart the action to try and find a new route
chrGoToPos(chr, &chr->act_gopos.pos, chr->act_gopos.rooms, chr->act_gopos.flags);
}
chrGoPosConsiderRestart(chr);
chrGoPosGetCurWaypointInfoWithFlags(chr, &curwppos, curwprooms, &curwpflags);
// If cheap mode ended over 3 seconds ago, not multiplayer, not in view of
// eyespy, pad is nothing special and not in lift, then enter the cheap move
// mode.
if (chr->act_gopos.waydata.mode != WAYMODE_CHEAP
&& chr->act_gopos.cheapend60 + PALDOWN(180) < g_Vars.lvframe60
&& g_Vars.normmplayerisrunning == false
&& func0f036c08(chr, &curwppos, curwprooms) // related to eyespy
&& (curwpflags & (PADFLAG_AIWAITLIFT | PADFLAG_AIONLIFT)) == 0
&& chr->inlift == false) {
enteringcheap = true;
chrGoPosInitCheap(chr, &chr->act_gopos.waydata, &curwppos, &prop->pos);
}
if (var80062cbc >= 9
#if VERSION >= VERSION_NTSC_1_0
&& (chr->hidden & CHRHFLAG_00400000)
&& (chr->flags & CHRFLAG0_CAN_GO_TO_PLACES) == 0
#endif
) {
chrStop(chr);
return;
}
// If goposforce is set then decrease it on each tick. If it's reached -1
// then stop the chr. I guess goposforce is not only used to warp past
// obstacles, but is also used as a run countdown timer.
#if VERSION >= VERSION_NTSC_1_0
if (chr->goposforce >= 0) {
chr->goposforce -= g_Vars.lvupdate240_60;
if (chr->goposforce < 0) {
chrStop(chr);
return;
}
}
#endif
if (chr->act_gopos.waydata.mode == WAYMODE_CHEAP) {
// Check if chr needs to exit cheap mode
if ((!enteringcheap && ((prop->flags & (PROPFLAG_80 | PROPFLAG_40 | PROPFLAG_02)) || !func0f036c08(chr, &curwppos, curwprooms)))
|| (curwpflags & (PADFLAG_AIWAITLIFT | PADFLAG_AIONLIFT))
|| chr->inlift) {
// Exiting cheap mode
chrGoPosInitExpensive(chr);
chr->act_gopos.cheapend60 = g_Vars.lvframe60;
return;
}
// Tick the cheap mode
func0f0375e8(chr, &chr->act_gopos.waydata, func0f0370a8(chr), &curwppos, curwprooms);
return;
}
{
bool advance = false;
bool sp188;
bool sp184;
f32 sp180;
f32 sp176;
f32 sp172;
f32 sp168;
bool candosomething;
f32 sp160;
f32 sp156;
struct waypoint *next;
struct pad pad2;
waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex];
if (waypoint) {
padUnpack(waypoint->padnum, PADFIELD_FLAGS | PADFIELD_POS, &pad);
// Both of these functions are calculating something with the coords
// and are returning a boolean. There are no write operations.
sp188 = func0f044808(&chr->prevpos, &prop->pos, &pad.pos, 30);
sp184 = func0f0446e0(&chr->prevpos, &prop->pos, &pad.pos, 30);
if (pad.flags & PADFLAG_AIDUCK) {
chr->act_gopos.flags |= GOPOSFLAG_DUCK;
} else if (pad.flags & PADFLAG_10000) {
chr->act_gopos.flags |= GOPOSFLAG_80;
}
if ((pad.flags & PADFLAG_AIWAITLIFT) || (pad.flags & PADFLAG_AIONLIFT)) {
advance = goPosUpdateLiftAction(chr, pad.flags, sp184, sp188, waypoint->padnum, chrGoPosGetNextPadNum(chr));
} else {
if (sp188 || (sp184 && (chr->inlift || (pad.flags & PADFLAG_8000)))) {
advance = true;
}
}
} else {
// No more waypoints - chr is finished
if (func0f044808(&chr->prevpos, &prop->pos, &chr->act_gopos.pos, 30) ||
(chr->inlift && func0f0446e0(&chr->prevpos, &prop->pos, &chr->act_gopos.pos, 30))) {
if (chr->act_gopos.flags & GOPOSFLAG_FORPATHSTART) {
chrTryStartPatrol(chr);
return;
}
chrStop(chr);
return;
}
}
if (advance) {
chrGoPosAdvanceWaypoint(chr);
}
// Every 10 ticks: Check something a couple of waypoints ahead
// This might be checking if the chr has line of sight to that pad and can
// walk straight to it.
if (chr->act_gopos.waydata.age % 10 == 5 || (chr->act_gopos.flags & GOPOSFLAG_INIT)) {
// Load waypoint that the chr is running to
waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex];
if (waypoint) {
padUnpack(waypoint->padnum, PADFIELD_FLAGS, &pad);
if ((pad.flags & PADFLAG_AIWALKDIRECT) == 0) {
// The waypoint the chr is running to doesn't have
// PADFLAG_AIWALKDIRECT, so the chr is able to ignore it and run
// towards the next one if it's in sight.
// Load the next waypoint after the one the chr is running to
waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex + 1];
if (waypoint) {
padUnpack(waypoint->padnum, PADFIELD_FLAGS, &pad);
if ((pad.flags & PADFLAG_AIWALKDIRECT) == 0) {
// And this one doesn't have PADFLAG_AIWALKDIRECT either,
// so the chr can consider skipping this one too.
waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex + 2];
if (waypoint) {
padUnpack(waypoint->padnum, PADFIELD_ROOM | PADFIELD_POS, &pad);
pos.x = pad.pos.x;
pos.y = pad.pos.y;
pos.z = pad.pos.z;
rooms[0] = pad.room;
rooms[1] = -1;
} else {
pos.x = chr->act_gopos.pos.x;
pos.y = chr->act_gopos.pos.y;
pos.z = chr->act_gopos.pos.z;
roomsCopy(chr->act_gopos.rooms, rooms);
}
// Some bbox related check
if (func0f03654c(chr, &prop->pos, prop->rooms, &pos, rooms, NULL, chr->chrwidth * 1.2f, CDTYPE_10 | CDTYPE_BG)) {
chrGoPosAdvanceWaypoint(chr);
chrGoPosAdvanceWaypoint(chr);
}
}
}
}
}
}
if (chr->act_gopos.waydata.age % 10 == 0 || (chr->act_gopos.flags & GOPOSFLAG_INIT)) {
waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex];
if (waypoint) {
candosomething = (chr->act_gopos.flags & GOPOSFLAG_INIT) != 0;
padUnpack(waypoint->padnum, PADFIELD_FLAGS | PADFIELD_POS, &pad);
next = chr->act_gopos.waypoints[chr->act_gopos.curindex + 1];
if (next) {
padUnpack(next->padnum, PADFIELD_ROOM | PADFIELD_POS, &pad2);
if ((pad.flags & (PADFLAG_AIWAITLIFT | PADFLAG_AIONLIFT))
&& (pad2.flags & (PADFLAG_AIWAITLIFT | PADFLAG_AIONLIFT))) {
candosomething = false;
}
}
if ((pad.flags & PADFLAG_AIWALKDIRECT) == 0 || candosomething) {
if (next) {
pos.x = pad2.pos.x;
pos.y = pad2.pos.y;
pos.z = pad2.pos.z;
rooms[0] = pad2.room;
rooms[1] = -1;
} else {
pos.x = chr->act_gopos.pos.x;
pos.y = chr->act_gopos.pos.y;
pos.z = chr->act_gopos.pos.z;
roomsCopy(chr->act_gopos.rooms, rooms);
}
// I suspect this is making the chr turn to face the next pad
if ((pad.flags & PADFLAG_AIWALKDIRECT) && candosomething) {
if (true) {
sp180 = prop->pos.x - pad.pos.x;
sp176 = prop->pos.z - pad.pos.z;
sp172 = pos.x - pad.pos.x;
sp168 = pos.z - pad.pos.z;
}
sp156 = sqrtf((sp180 * sp180 + sp176 * sp176) * (sp172 * sp172 + sp168 * sp168));
if (sp156 > 0) {
sp160 = func0f0969d0((sp180 * sp172 + sp176 * sp168) / sp156);
// sp160 < DEG2RAD(45) || sp160 > DEG2RAD(315)
if (sp160 < 0.7852731347084f || sp160 > 5.4969120025635f) {
if (func0f03654c(chr, &prop->pos, prop->rooms, &pos, rooms, NULL, chr->chrwidth * 1.2f, CDTYPE_10 | CDTYPE_BG)) {
chrGoPosAdvanceWaypoint(chr);
}
}
}
} else {
if (func0f03654c(chr, &prop->pos, prop->rooms, &pos, rooms, NULL, chr->chrwidth * 1.2f, CDTYPE_10 | CDTYPE_BG)) {
chrGoPosAdvanceWaypoint(chr);
}
}
}
}
chr->act_gopos.flags &= ~GOPOSFLAG_INIT;
}
waypoint = chr->act_gopos.waypoints[chr->act_gopos.curindex];
if (waypoint) {
padUnpack(waypoint->padnum, PADFIELD_POS, &pad);
pos.x = pad.pos.x;
pos.y = pad.pos.y;
pos.z = pad.pos.z;
} else {
pos.x = chr->act_gopos.pos.x;
pos.y = chr->act_gopos.pos.y;
pos.z = chr->act_gopos.pos.z;
if (chr->aibot && chr->myaction == MA_AIBOTGETITEM) {
sp240 = false;
}
}
}
func0f045b9c(chr, &pos, &chr->act_gopos.waydata, sp240);
}
#if PAL
GLOBAL_ASM(
glabel chrTickPatrol
/* f0473cc: 27bdff90 */ addiu $sp,$sp,-112
/* f0473d0: afbf0024 */ sw $ra,0x24($sp)
/* f0473d4: afb00020 */ sw $s0,0x20($sp)
/* f0473d8: 8c8e001c */ lw $t6,0x1c($a0)
/* f0473dc: afa00064 */ sw $zero,0x64($sp)
/* f0473e0: afa00068 */ sw $zero,0x68($sp)
/* f0473e4: afae006c */ sw $t6,0x6c($sp)
/* f0473e8: 8c8f0014 */ lw $t7,0x14($a0)
/* f0473ec: 00808025 */ or $s0,$a0,$zero
/* f0473f0: 000fc280 */ sll $t8,$t7,0xa
/* f0473f4: 0703000d */ bgezl $t8,.L0f04742c
/* f0473f8: 02002025 */ or $a0,$s0,$zero
/* f0473fc: 0c0076e5 */ jal modelIsAnimMerging
/* f047400: 8c840020 */ lw $a0,0x20($a0)
/* f047404: 54400099 */ bnezl $v0,.L0f04766c
/* f047408: 8fbf0024 */ lw $ra,0x24($sp)
/* f04740c: 0fc0e21a */ jal chrPatrolChooseAnimation
/* f047410: 02002025 */ or $a0,$s0,$zero
/* f047414: 8e190014 */ lw $t9,0x14($s0)
/* f047418: 3c01ffdf */ lui $at,0xffdf
/* f04741c: 3421ffff */ ori $at,$at,0xffff
/* f047420: 03214024 */ and $t0,$t9,$at
/* f047424: ae080014 */ sw $t0,0x14($s0)
/* f047428: 02002025 */ or $a0,$s0,$zero
.L0f04742c:
/* f04742c: 27a50058 */ addiu $a1,$sp,0x58
/* f047430: 27a60048 */ addiu $a2,$sp,0x48
/* f047434: 0fc0dd39 */ jal chrPatrolGetCurWaypointInfoWithFlags
/* f047438: 27a70064 */ addiu $a3,$sp,0x64
/* f04743c: 8e090060 */ lw $t1,0x60($s0)
/* f047440: 820b0038 */ lb $t3,0x38($s0)
/* f047444: 24010006 */ addiu $at,$zero,0x6
/* f047448: 252a0001 */ addiu $t2,$t1,0x1
/* f04744c: 1161001f */ beq $t3,$at,.L0f0474cc
/* f047450: ae0a0060 */ sw $t2,0x60($s0)
/* f047454: 8e0d0078 */ lw $t5,0x78($s0)
/* f047458: 3c0c800a */ lui $t4,%hi(g_Vars+0x8)
/* f04745c: 8d8c9fc8 */ lw $t4,%lo(g_Vars+0x8)($t4)
/* f047460: 25ae00b4 */ addiu $t6,$t5,0x96
/* f047464: 3c0f800a */ lui $t7,%hi(g_Vars+0x318)
/* f047468: 01cc082a */ slt $at,$t6,$t4
/* f04746c: 50200018 */ beqzl $at,.L0f0474d0
/* f047470: 820b0038 */ lb $t3,0x38($s0)
/* f047474: 8defa2d8 */ lw $t7,%lo(g_Vars+0x318)($t7)
/* f047478: 02002025 */ or $a0,$s0,$zero
/* f04747c: 27a50058 */ addiu $a1,$sp,0x58
/* f047480: 55e00013 */ bnezl $t7,.L0f0474d0
/* f047484: 820b0038 */ lb $t3,0x38($s0)
/* f047488: 0fc0db02 */ jal func0f036c08
/* f04748c: 27a60048 */ addiu $a2,$sp,0x48
/* f047490: 1040000e */ beqz $v0,.L0f0474cc
/* f047494: 8fb80064 */ lw $t8,0x64($sp)
/* f047498: 33190c00 */ andi $t9,$t8,0xc00
/* f04749c: 5720000c */ bnezl $t9,.L0f0474d0
/* f0474a0: 820b0038 */ lb $t3,0x38($s0)
/* f0474a4: 8209032d */ lb $t1,0x32d($s0)
/* f0474a8: 240a0001 */ addiu $t2,$zero,0x1
/* f0474ac: 02002025 */ or $a0,$s0,$zero
/* f0474b0: 05200006 */ bltz $t1,.L0f0474cc
/* f0474b4: 26050038 */ addiu $a1,$s0,0x38
/* f0474b8: 8fa7006c */ lw $a3,0x6c($sp)
/* f0474bc: afaa0068 */ sw $t2,0x68($sp)
/* f0474c0: 27a60058 */ addiu $a2,$sp,0x58
/* f0474c4: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f0474c8: 24e70008 */ addiu $a3,$a3,0x8
.L0f0474cc:
/* f0474cc: 820b0038 */ lb $t3,0x38($s0)
.L0f0474d0:
/* f0474d0: 24010006 */ addiu $at,$zero,0x6
/* f0474d4: 260400c8 */ addiu $a0,$s0,0xc8
/* f0474d8: 1561002b */ bne $t3,$at,.L0f047588
/* f0474dc: 8fa5006c */ lw $a1,0x6c($sp)
/* f0474e0: 8fad0068 */ lw $t5,0x68($sp)
/* f0474e4: 8fac006c */ lw $t4,0x6c($sp)
/* f0474e8: 55a0000c */ bnezl $t5,.L0f04751c
/* f0474ec: 8fb80064 */ lw $t8,0x64($sp)
/* f0474f0: 918e0001 */ lbu $t6,0x1($t4)
/* f0474f4: 02002025 */ or $a0,$s0,$zero
/* f0474f8: 27a50058 */ addiu $a1,$sp,0x58
/* f0474fc: 31cf00c2 */ andi $t7,$t6,0xc2
/* f047500: 15e0000d */ bnez $t7,.L0f047538
/* f047504: 00000000 */ nop
/* f047508: 0fc0db02 */ jal func0f036c08
/* f04750c: 27a60048 */ addiu $a2,$sp,0x48
/* f047510: 10400009 */ beqz $v0,.L0f047538
/* f047514: 00000000 */ nop
/* f047518: 8fb80064 */ lw $t8,0x64($sp)
.L0f04751c:
/* f04751c: 33190c00 */ andi $t9,$t8,0xc00
/* f047520: 17200005 */ bnez $t9,.L0f047538
/* f047524: 00000000 */ nop
/* f047528: 8209032d */ lb $t1,0x32d($s0)
/* f04752c: 02002025 */ or $a0,$s0,$zero
/* f047530: 260b0038 */ addiu $t3,$s0,0x38
/* f047534: 05210007 */ bgez $t1,.L0f047554
.L0f047538:
/* f047538: 3c0a800a */ lui $t2,%hi(g_Vars+0x8)
/* f04753c: 8d4a9fc8 */ lw $t2,%lo(g_Vars+0x8)($t2)
/* f047540: 02002025 */ or $a0,$s0,$zero
/* f047544: 0fc0dd60 */ jal func0f037580
/* f047548: ae0a0078 */ sw $t2,0x78($s0)
/* f04754c: 1000000a */ b .L0f047578
/* f047550: 00000000 */ nop
.L0f047554:
/* f047554: 0fc0dc2a */ jal func0f0370a8
/* f047558: afab0030 */ sw $t3,0x30($sp)
/* f04755c: 44060000 */ mfc1 $a2,$f0
/* f047560: 27ad0048 */ addiu $t5,$sp,0x48
/* f047564: afad0010 */ sw $t5,0x10($sp)
/* f047568: 02002025 */ or $a0,$s0,$zero
/* f04756c: 8fa50030 */ lw $a1,0x30($sp)
/* f047570: 0fc0dd7a */ jal func0f0375e8
/* f047574: 27a70058 */ addiu $a3,$sp,0x58
.L0f047578:
/* f047578: 0fc01948 */ jal func0f006520
/* f04757c: 02002025 */ or $a0,$s0,$zero
/* f047580: 1000003a */ b .L0f04766c
/* f047584: 8fbf0024 */ lw $ra,0x24($sp)
.L0f047588:
/* f047588: 24a50008 */ addiu $a1,$a1,0x8
/* f04758c: 260c0038 */ addiu $t4,$s0,0x38
/* f047590: afac0030 */ sw $t4,0x30($sp)
/* f047594: afa5002c */ sw $a1,0x2c($sp)
/* f047598: 27a60058 */ addiu $a2,$sp,0x58
/* f04759c: 3c0741f0 */ lui $a3,0x41f0
/* f0475a0: 0fc111b8 */ jal func0f0446e0
/* f0475a4: afa40028 */ sw $a0,0x28($sp)
/* f0475a8: 8fa40028 */ lw $a0,0x28($sp)
/* f0475ac: 8fa5002c */ lw $a1,0x2c($sp)
/* f0475b0: afa20044 */ sw $v0,0x44($sp)
/* f0475b4: 27a60058 */ addiu $a2,$sp,0x58
/* f0475b8: 0fc11202 */ jal func0f044808
/* f0475bc: 3c0741f0 */ lui $a3,0x41f0
/* f0475c0: 8fae0064 */ lw $t6,0x64($sp)
/* f0475c4: afa20040 */ sw $v0,0x40($sp)
/* f0475c8: 00001825 */ or $v1,$zero,$zero
/* f0475cc: 31cf0400 */ andi $t7,$t6,0x400
/* f0475d0: 15e00002 */ bnez $t7,.L0f0475dc
/* f0475d4: 31d80800 */ andi $t8,$t6,0x800
/* f0475d8: 13000011 */ beqz $t8,.L0f047620
.L0f0475dc:
/* f0475dc: 02002025 */ or $a0,$s0,$zero
/* f0475e0: 0fc0dd28 */ jal chrPatrolCalculatePadNum
/* f0475e4: 00002825 */ or $a1,$zero,$zero
/* f0475e8: a7a20034 */ sh $v0,0x34($sp)
/* f0475ec: 02002025 */ or $a0,$s0,$zero
/* f0475f0: 0fc0dd28 */ jal chrPatrolCalculatePadNum
/* f0475f4: 24050001 */ addiu $a1,$zero,0x1
/* f0475f8: 87b90034 */ lh $t9,0x34($sp)
/* f0475fc: 02002025 */ or $a0,$s0,$zero
/* f047600: 8fa50064 */ lw $a1,0x64($sp)
/* f047604: 8fa60044 */ lw $a2,0x44($sp)
/* f047608: 8fa70040 */ lw $a3,0x40($sp)
/* f04760c: afa20014 */ sw $v0,0x14($sp)
/* f047610: 0fc11992 */ jal goPosUpdateLiftAction
/* f047614: afb90010 */ sw $t9,0x10($sp)
/* f047618: 10000004 */ b .L0f04762c
/* f04761c: 00401825 */ or $v1,$v0,$zero
.L0f047620:
/* f047620: 10400002 */ beqz $v0,.L0f04762c
/* f047624: 00000000 */ nop
/* f047628: 24030001 */ addiu $v1,$zero,0x1
.L0f04762c:
/* f04762c: 50600008 */ beqzl $v1,.L0f047650
/* f047630: 02002025 */ or $a0,$s0,$zero
/* f047634: 0fc0dd6c */ jal func0f0375b0
/* f047638: 02002025 */ or $a0,$s0,$zero
/* f04763c: 02002025 */ or $a0,$s0,$zero
/* f047640: 27a50058 */ addiu $a1,$sp,0x58
/* f047644: 0fc0dd58 */ jal chrPatrolGetCurWaypointInfo
/* f047648: 27a60048 */ addiu $a2,$sp,0x48
/* f04764c: 02002025 */ or $a0,$s0,$zero
.L0f047650:
/* f047650: 27a50058 */ addiu $a1,$sp,0x58
/* f047654: 8fa60030 */ lw $a2,0x30($sp)
/* f047658: 0fc116e7 */ jal func0f045b9c
/* f04765c: 24070001 */ addiu $a3,$zero,0x1
/* f047660: 0fc01877 */ jal func0f0061dc
/* f047664: 02002025 */ or $a0,$s0,$zero
/* f047668: 8fbf0024 */ lw $ra,0x24($sp)
.L0f04766c:
/* f04766c: 8fb00020 */ lw $s0,0x20($sp)
/* f047670: 27bd0070 */ addiu $sp,$sp,0x70
/* f047674: 03e00008 */ jr $ra
/* f047678: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel chrTickPatrol
/* f0473cc: 27bdff90 */ addiu $sp,$sp,-112
/* f0473d0: afbf0024 */ sw $ra,0x24($sp)
/* f0473d4: afb00020 */ sw $s0,0x20($sp)
/* f0473d8: 8c8e001c */ lw $t6,0x1c($a0)
/* f0473dc: afa00064 */ sw $zero,0x64($sp)
/* f0473e0: afa00068 */ sw $zero,0x68($sp)
/* f0473e4: afae006c */ sw $t6,0x6c($sp)
/* f0473e8: 8c8f0014 */ lw $t7,0x14($a0)
/* f0473ec: 00808025 */ or $s0,$a0,$zero
/* f0473f0: 000fc280 */ sll $t8,$t7,0xa
/* f0473f4: 0703000d */ bgezl $t8,.L0f04742c
/* f0473f8: 02002025 */ or $a0,$s0,$zero
/* f0473fc: 0c0076e5 */ jal modelIsAnimMerging
/* f047400: 8c840020 */ lw $a0,0x20($a0)
/* f047404: 54400099 */ bnezl $v0,.L0f04766c
/* f047408: 8fbf0024 */ lw $ra,0x24($sp)
/* f04740c: 0fc0e21a */ jal chrPatrolChooseAnimation
/* f047410: 02002025 */ or $a0,$s0,$zero
/* f047414: 8e190014 */ lw $t9,0x14($s0)
/* f047418: 3c01ffdf */ lui $at,0xffdf
/* f04741c: 3421ffff */ ori $at,$at,0xffff
/* f047420: 03214024 */ and $t0,$t9,$at
/* f047424: ae080014 */ sw $t0,0x14($s0)
/* f047428: 02002025 */ or $a0,$s0,$zero
.L0f04742c:
/* f04742c: 27a50058 */ addiu $a1,$sp,0x58
/* f047430: 27a60048 */ addiu $a2,$sp,0x48
/* f047434: 0fc0dd39 */ jal chrPatrolGetCurWaypointInfoWithFlags
/* f047438: 27a70064 */ addiu $a3,$sp,0x64
/* f04743c: 8e090060 */ lw $t1,0x60($s0)
/* f047440: 820b0038 */ lb $t3,0x38($s0)
/* f047444: 24010006 */ addiu $at,$zero,0x6
/* f047448: 252a0001 */ addiu $t2,$t1,0x1
/* f04744c: 1161001f */ beq $t3,$at,.L0f0474cc
/* f047450: ae0a0060 */ sw $t2,0x60($s0)
/* f047454: 8e0d0078 */ lw $t5,0x78($s0)
/* f047458: 3c0c800a */ lui $t4,%hi(g_Vars+0x8)
/* f04745c: 8d8c9fc8 */ lw $t4,%lo(g_Vars+0x8)($t4)
/* f047460: 25ae00b4 */ addiu $t6,$t5,0xb4
/* f047464: 3c0f800a */ lui $t7,%hi(g_Vars+0x318)
/* f047468: 01cc082a */ slt $at,$t6,$t4
/* f04746c: 50200018 */ beqzl $at,.L0f0474d0
/* f047470: 820b0038 */ lb $t3,0x38($s0)
/* f047474: 8defa2d8 */ lw $t7,%lo(g_Vars+0x318)($t7)
/* f047478: 02002025 */ or $a0,$s0,$zero
/* f04747c: 27a50058 */ addiu $a1,$sp,0x58
/* f047480: 55e00013 */ bnezl $t7,.L0f0474d0
/* f047484: 820b0038 */ lb $t3,0x38($s0)
/* f047488: 0fc0db02 */ jal func0f036c08
/* f04748c: 27a60048 */ addiu $a2,$sp,0x48
/* f047490: 1040000e */ beqz $v0,.L0f0474cc
/* f047494: 8fb80064 */ lw $t8,0x64($sp)
/* f047498: 33190c00 */ andi $t9,$t8,0xc00
/* f04749c: 5720000c */ bnezl $t9,.L0f0474d0
/* f0474a0: 820b0038 */ lb $t3,0x38($s0)
/* f0474a4: 8209032d */ lb $t1,0x32d($s0)
/* f0474a8: 240a0001 */ addiu $t2,$zero,0x1
/* f0474ac: 02002025 */ or $a0,$s0,$zero
/* f0474b0: 05200006 */ bltz $t1,.L0f0474cc
/* f0474b4: 26050038 */ addiu $a1,$s0,0x38
/* f0474b8: 8fa7006c */ lw $a3,0x6c($sp)
/* f0474bc: afaa0068 */ sw $t2,0x68($sp)
/* f0474c0: 27a60058 */ addiu $a2,$sp,0x58
/* f0474c4: 0fc0dbb9 */ jal chrGoPosInitCheap
/* f0474c8: 24e70008 */ addiu $a3,$a3,0x8
.L0f0474cc:
/* f0474cc: 820b0038 */ lb $t3,0x38($s0)
.L0f0474d0:
/* f0474d0: 24010006 */ addiu $at,$zero,0x6
/* f0474d4: 260400c8 */ addiu $a0,$s0,0xc8
/* f0474d8: 1561002b */ bne $t3,$at,.L0f047588
/* f0474dc: 8fa5006c */ lw $a1,0x6c($sp)
/* f0474e0: 8fad0068 */ lw $t5,0x68($sp)
/* f0474e4: 8fac006c */ lw $t4,0x6c($sp)
/* f0474e8: 55a0000c */ bnezl $t5,.L0f04751c
/* f0474ec: 8fb80064 */ lw $t8,0x64($sp)
/* f0474f0: 918e0001 */ lbu $t6,0x1($t4)
/* f0474f4: 02002025 */ or $a0,$s0,$zero
/* f0474f8: 27a50058 */ addiu $a1,$sp,0x58
/* f0474fc: 31cf00c2 */ andi $t7,$t6,0xc2
/* f047500: 15e0000d */ bnez $t7,.L0f047538
/* f047504: 00000000 */ nop
/* f047508: 0fc0db02 */ jal func0f036c08
/* f04750c: 27a60048 */ addiu $a2,$sp,0x48
/* f047510: 10400009 */ beqz $v0,.L0f047538
/* f047514: 00000000 */ nop
/* f047518: 8fb80064 */ lw $t8,0x64($sp)
.L0f04751c:
/* f04751c: 33190c00 */ andi $t9,$t8,0xc00
/* f047520: 17200005 */ bnez $t9,.L0f047538
/* f047524: 00000000 */ nop
/* f047528: 8209032d */ lb $t1,0x32d($s0)
/* f04752c: 02002025 */ or $a0,$s0,$zero
/* f047530: 260b0038 */ addiu $t3,$s0,0x38
/* f047534: 05210007 */ bgez $t1,.L0f047554
.L0f047538:
/* f047538: 3c0a800a */ lui $t2,%hi(g_Vars+0x8)
/* f04753c: 8d4a9fc8 */ lw $t2,%lo(g_Vars+0x8)($t2)
/* f047540: 02002025 */ or $a0,$s0,$zero
/* f047544: 0fc0dd60 */ jal func0f037580
/* f047548: ae0a0078 */ sw $t2,0x78($s0)
/* f04754c: 1000000a */ b .L0f047578
/* f047550: 00000000 */ nop
.L0f047554:
/* f047554: 0fc0dc2a */ jal func0f0370a8
/* f047558: afab0030 */ sw $t3,0x30($sp)
/* f04755c: 44060000 */ mfc1 $a2,$f0
/* f047560: 27ad0048 */ addiu $t5,$sp,0x48
/* f047564: afad0010 */ sw $t5,0x10($sp)
/* f047568: 02002025 */ or $a0,$s0,$zero
/* f04756c: 8fa50030 */ lw $a1,0x30($sp)
/* f047570: 0fc0dd7a */ jal func0f0375e8
/* f047574: 27a70058 */ addiu $a3,$sp,0x58
.L0f047578:
/* f047578: 0fc01948 */ jal func0f006520
/* f04757c: 02002025 */ or $a0,$s0,$zero
/* f047580: 1000003a */ b .L0f04766c
/* f047584: 8fbf0024 */ lw $ra,0x24($sp)
.L0f047588:
/* f047588: 24a50008 */ addiu $a1,$a1,0x8
/* f04758c: 260c0038 */ addiu $t4,$s0,0x38
/* f047590: afac0030 */ sw $t4,0x30($sp)
/* f047594: afa5002c */ sw $a1,0x2c($sp)
/* f047598: 27a60058 */ addiu $a2,$sp,0x58
/* f04759c: 3c0741f0 */ lui $a3,0x41f0
/* f0475a0: 0fc111b8 */ jal func0f0446e0
/* f0475a4: afa40028 */ sw $a0,0x28($sp)
/* f0475a8: 8fa40028 */ lw $a0,0x28($sp)
/* f0475ac: 8fa5002c */ lw $a1,0x2c($sp)
/* f0475b0: afa20044 */ sw $v0,0x44($sp)
/* f0475b4: 27a60058 */ addiu $a2,$sp,0x58
/* f0475b8: 0fc11202 */ jal func0f044808
/* f0475bc: 3c0741f0 */ lui $a3,0x41f0
/* f0475c0: 8fae0064 */ lw $t6,0x64($sp)
/* f0475c4: afa20040 */ sw $v0,0x40($sp)
/* f0475c8: 00001825 */ or $v1,$zero,$zero
/* f0475cc: 31cf0400 */ andi $t7,$t6,0x400
/* f0475d0: 15e00002 */ bnez $t7,.L0f0475dc
/* f0475d4: 31d80800 */ andi $t8,$t6,0x800
/* f0475d8: 13000011 */ beqz $t8,.L0f047620
.L0f0475dc:
/* f0475dc: 02002025 */ or $a0,$s0,$zero
/* f0475e0: 0fc0dd28 */ jal chrPatrolCalculatePadNum
/* f0475e4: 00002825 */ or $a1,$zero,$zero
/* f0475e8: a7a20034 */ sh $v0,0x34($sp)
/* f0475ec: 02002025 */ or $a0,$s0,$zero
/* f0475f0: 0fc0dd28 */ jal chrPatrolCalculatePadNum
/* f0475f4: 24050001 */ addiu $a1,$zero,0x1
/* f0475f8: 87b90034 */ lh $t9,0x34($sp)
/* f0475fc: 02002025 */ or $a0,$s0,$zero
/* f047600: 8fa50064 */ lw $a1,0x64($sp)
/* f047604: 8fa60044 */ lw $a2,0x44($sp)
/* f047608: 8fa70040 */ lw $a3,0x40($sp)
/* f04760c: afa20014 */ sw $v0,0x14($sp)
/* f047610: 0fc11992 */ jal goPosUpdateLiftAction
/* f047614: afb90010 */ sw $t9,0x10($sp)
/* f047618: 10000004 */ b .L0f04762c
/* f04761c: 00401825 */ or $v1,$v0,$zero
.L0f047620:
/* f047620: 10400002 */ beqz $v0,.L0f04762c
/* f047624: 00000000 */ nop
/* f047628: 24030001 */ addiu $v1,$zero,0x1
.L0f04762c:
/* f04762c: 50600008 */ beqzl $v1,.L0f047650
/* f047630: 02002025 */ or $a0,$s0,$zero
/* f047634: 0fc0dd6c */ jal func0f0375b0
/* f047638: 02002025 */ or $a0,$s0,$zero
/* f04763c: 02002025 */ or $a0,$s0,$zero
/* f047640: 27a50058 */ addiu $a1,$sp,0x58
/* f047644: 0fc0dd58 */ jal chrPatrolGetCurWaypointInfo
/* f047648: 27a60048 */ addiu $a2,$sp,0x48
/* f04764c: 02002025 */ or $a0,$s0,$zero
.L0f047650:
/* f047650: 27a50058 */ addiu $a1,$sp,0x58
/* f047654: 8fa60030 */ lw $a2,0x30($sp)
/* f047658: 0fc116e7 */ jal func0f045b9c
/* f04765c: 24070001 */ addiu $a3,$zero,0x1
/* f047660: 0fc01877 */ jal func0f0061dc
/* f047664: 02002025 */ or $a0,$s0,$zero
/* f047668: 8fbf0024 */ lw $ra,0x24($sp)
.L0f04766c:
/* f04766c: 8fb00020 */ lw $s0,0x20($sp)
/* f047670: 27bd0070 */ addiu $sp,$sp,0x70
/* f047674: 03e00008 */ jr $ra
/* f047678: 00000000 */ nop
);
#endif
bool chrTrySkJump(struct chrdata *chr, u8 arg1, u8 arg2, s32 arg3, u8 arg4)
{
if (chr && chr->actiontype != ACT_SKJUMP
&& chrIsReadyForOrders(chr)
&& CHRRACE(chr) == RACE_SKEDAR) {
return chrStartSkJump(chr, arg1, arg2, arg3, arg4);
}
return false;
}
bool chrStartSkJump(struct chrdata *chr, u8 arg1, u8 arg2, s32 arg3, u8 arg4)
{
f32 width;
f32 ymax;
f32 ymin;
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
bool iVar2;
f32 distance = chrGetDistanceToCoord(chr, &target->pos);
f32 diffs[2];
f32 thing;
s32 hspeed;
if (distance < 200 || distance > 550 || !target) {
return false;
}
propChrGetBbox(prop, &width, &ymax, &ymin);
chrSetOrUnsetHiddenFlag00000100(chr, false);
propSetCollisionsEnabled(target, false);
iVar2 = func0002d6ac(&prop->pos, prop->rooms, &target->pos, 51, 1,
ymax - prop->pos.y, ymin - prop->pos.y);
chrSetOrUnsetHiddenFlag00000100(chr, true);
propSetCollisionsEnabled(target, true);
if (iVar2) {
diffs[0] = target->pos.x - chr->prop->pos.x;
diffs[1] = target->pos.z - chr->prop->pos.z;
thing = sqrtf(diffs[0] * diffs[0] + diffs[1] * diffs[1]) * 2.5f / PALUPF(21.0f);
hspeed = thing;
if (hspeed < PALDOWN(10)) {
hspeed = PALDOWN(10);
}
chr->act_skjump.xspeed = diffs[0] / hspeed;
chr->act_skjump.zspeed = diffs[1] / hspeed;
chr->act_skjump.angle = chrGetInverseTheta(chr) + chrGetAngleToPos(chr, &target->pos);
chr->act_skjump.hit = false;
chr->act_skjump.unk03c = hspeed;
chr->act_skjump.unk04c = hspeed;
chr->act_skjump.y = cdFindGroundYSimple(&chr->prop->pos, chr->chrwidth, chr->prop->rooms, NULL, NULL);
} else {
return false;
}
chr->actiontype = ACT_SKJUMP;
chr->act_skjump.needsnewanim = true;
chr->act_skjump.state = SKJUMPSTATE_TAKEOFF;
return true;
}
void chrTickSkJump(struct chrdata *chr)
{
if (g_Vars.lvupdate240_60 == 0) {
return;
}
if (chr->act_skjump.needsnewanim) {
chr->act_skjump.needsnewanim = false;
switch (chr->act_skjump.state) {
case SKJUMPSTATE_TAKEOFF:
modelSetAnimation(chr->model, ANIM_SKEDAR_JUMPSTART, 0, 0, -1, 8);
modelSetAnimSpeed(chr->model, 2.5, 0);
break;
case SKJUMPSTATE_AIRBORNE: {
u16 sounds[] = {
SFX_SKEDAR_ROAR_0532,
SFX_SKEDAR_ROAR_0533,
SFX_SKEDAR_ROAR_0534,
};
func0f0939f8(NULL, chr->prop, sounds[random() % 3], -1,
-1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
modelSetAnimation(chr->model, ANIM_SKEDAR_JUMPAIR, 0, 0, -1, 16);
modelSetAnimSpeed(chr->model, 1, 0);
}
break;
}
}
{
f32 fVar5;
f32 fVar6;
f32 fVar7;
u32 stack[1];
f32 frame;
switch (chr->act_skjump.state) {
case SKJUMPSTATE_TAKEOFF:
fVar6 = chrGetInverseTheta(chr);
fVar5 = func0001afe8(fVar6, chr->act_skjump.angle, 0.35);
chrSetLookAngle(chr, fVar5);
frame = modelGetCurAnimFrame(chr->model);
if (frame >= modelGetAnimEndFrame(chr->model)) {
chr->act_skjump.state++;
chr->act_skjump.needsnewanim = true;
}
break;
case SKJUMPSTATE_AIRBORNE:
chr->act_skjump.newpos.x = chr->act_skjump.xspeed * g_Vars.lvupdate240_60 + chr->prop->pos.x;
chr->act_skjump.newpos.z = chr->act_skjump.zspeed * g_Vars.lvupdate240_60 + chr->prop->pos.z;
if (chr->act_skjump.unk04c > 0) {
fVar6 = 1.0f - chr->act_skjump.unk03c / (f32)chr->act_skjump.unk04c;
fVar7 = sinf(M_PI * fVar6);
fVar7 = fVar7 * 160.0f + chr->act_skjump.y;
} else {
fVar6 = 1;
fVar7 = chr->act_skjump.y;
}
chr->act_skjump.newpos.y = fVar7 - chr->prop->pos.y;
if (fVar6 < 0.5f && chr->act_skjump.newpos.y < 0.0f) {
chr->act_skjump.newpos.y = 0;
}
if (chr->act_skjump.hit == false && chrGetDistanceToTarget(chr) < 150.0f) {
func0f03ba44(chr, 3, 0x96, 0);
chr->act_skjump.hit = true;
}
if (chr->act_skjump.unk03c > 0) {
chr->act_skjump.unk03c -= g_Vars.lvupdate240_60;
} else {
chrTryStop(chr);
}
break;
}
}
}
void chrTick(struct chrdata *chr)
{
u32 race = CHRRACE(chr);
if (g_Vars.lvupdate240 < 1) {
return;
}
if (chr->actiontype == ACT_INIT) {
chr->chrflags |= CHRCFLAG_00000001;
func0f02e9a0(chr, 0);
chr->sleep = 0;
}
if (race == RACE_DRCAROLL) {
g_DrCarollDyingTimer += g_Vars.lvupdate240_60;
}
chr->soundtimer += g_Vars.lvupdate240_60;
chr->talktimer += g_Vars.lvupdate240_60;
#if VERSION < VERSION_PAL_FINAL
if (chr->aibot) {
chr->aibot->unk030 += g_Vars.lvupdate240_60;
}
#endif
if (chr->hidden & CHRHFLAG_TIMER_RUNNING) {
chr->timer60 += g_Vars.lvupdate240_60;
}
chr->sleep -= g_Vars.lvupdate240_60;
if (chr->sleep < 0
|| (chr->chrflags & CHRCFLAG_00040000)
|| chr->alertness >= 65
|| (chr->aibot && (chr->actiontype == ACT_DIE || chr->actiontype == ACT_DEAD))) {
u8 pass = race == RACE_HUMAN || race == RACE_SKEDAR;
chr->sleep = 0;
chraiExecute(chr, PROPTYPE_CHR);
// Consider setting shootingatmelist
if (chr->prop) {
if (chr->aimtesttimer60 < 1) {
chr->aimtesttimer60 = PALDOWN(30);
if (chr->aishootingatmelist >= 0
&& ailistFindById(chr->aishootingatmelist) != chr->ailist
&& chrCanSeeTargetWithExtraCheck(chr)) {
chr->chrflags |= CHRCFLAG_CONSIDER_DODGE;
}
} else {
chr->aimtesttimer60 -= g_Vars.lvupdate240_60;
}
}
// Consider setting darkroomlist
if (chr->prop
&& chr->aidarkroomlist >= 0
&& roomGetBrightness(chr->prop->rooms[0]) < 25
&& ailistFindById(chr->aidarkroomlist) != chr->ailist) {
chr->darkroomthing = true;
}
// Consider setting playerdeadlist
if (chr->prop && chr->aiplayerdeadlist >= 0 && g_Vars.currentplayer->isdead) {
u32 prevplayernum = g_Vars.currentplayernum;
s32 i;
s32 playercount = PLAYERCOUNT();
bool alldead = true;
if (playercount >= 2) {
for (i = 0; i < playercount && alldead; i++) {
if (i != prevplayernum) {
setCurrentPlayerNum(i);
if (g_Vars.currentplayer->isdead == false) {
alldead = false;
}
}
}
setCurrentPlayerNum(prevplayernum);
}
if (alldead && ailistFindById(chr->aiplayerdeadlist) != chr->ailist) {
chr->playerdeadthing = true;
}
}
if (race == RACE_ROBOT) {
robotSetMuzzleFlash(chr, 0, false);
robotSetMuzzleFlash(chr, 1, false);
}
if (chr->prop) {
if (g_Vars.in_cutscene) {
switch (chr->actiontype) {
case ACT_ANIM: chrTickAnim(chr); break;
case ACT_PATROL: chrTickPatrol(chr); pass = false; break;
}
} else {
switch (chr->actiontype) {
case ACT_STAND: chrTickStand(chr); break;
case ACT_KNEEL: chrTickKneel(chr); break;
case ACT_ANIM: chrTickAnim(chr); break;
case ACT_DIE: chrTickDie(chr); break;
case ACT_ARGH: chrTickArgh(chr); break;
case ACT_PREARGH: chrTickPreArgh(chr); break;
case ACT_SIDESTEP: chrTickSidestep(chr); break;
case ACT_JUMPOUT: chrTickJumpOut(chr); break;
case ACT_DEAD: chrTickDead(chr); break;
case ACT_ATTACK: chrTickAttack(chr); break;
case ACT_ATTACKWALK: chrTickAttackWalk(chr); break;
case ACT_ATTACKROLL: chrTickAttackRoll(chr); break;
case ACT_RUNPOS: chrTickRunPos(chr); break;
case ACT_PATROL: chrTickPatrol(chr); pass = false; break;
case ACT_GOPOS: chrTickGoPos(chr); break;
case ACT_SURRENDER: chrTickSurrender(chr); break;
case ACT_TEST: chrTickTest(chr); break;
case ACT_SURPRISED: chrTickSurprised(chr); break;
case ACT_STARTALARM: chrTickStartAlarm(chr); break;
case ACT_THROWGRENADE: chrTickThrowGrenade(chr); break;
case ACT_BONDDIE: chrTickBondDie(chr); break;
case ACT_DRUGGEDCOMINGUP: chrTickDruggedComingUp(chr); break;
case ACT_DRUGGEDDROP: chrTickDruggedDrop(chr); break;
case ACT_DRUGGEDKO: chrTickDruggedKo(chr); break;
case ACT_ATTACKAMOUNT: chrTickAttackAmount(chr); break;
case ACT_ROBOTATTACK: chrTickRobotAttack(chr); break;
case ACT_SKJUMP: chrTickSkJump(chr); break;
}
}
}
chr->hidden &= ~CHRHFLAG_IS_HEARING_TARGET;
#if VERSION >= VERSION_NTSC_1_0
chr->hidden2 &= ~CHRH2FLAG_0040;
#endif
if (pass) {
func0f0061dc(chr);
}
} else {
func0f006520(chr);
}
}
void func0f0482cc(u32 ailistid)
{
struct prop *prop;
#if VERSION >= VERSION_PAL_FINAL
var8009e388pf = 0;
#else
g_CutsceneFrameOverrun240 = 0;
#endif
g_CutsceneSkipRequested = false;
g_CutsceneCurTotalFrame60f = 0;
prop = g_Vars.list1head;
while (prop) {
prop->unk38 = 0xffff;
prop->unk3a = 0;
prop->unk3c = 2;
prop = prop->next;
}
g_BgChrs[g_NumBgChrs - 1].ailist = ailistFindById(ailistid);
g_BgChrs[g_NumBgChrs - 1].aioffset = 0;
g_BgChrs[g_NumBgChrs - 1].aireturnlist = -1;
}
u32 var80068454 = 0;
s32 var80068458 = 0;
u32 var8006845c = 0x01020408;
#if PAL
GLOBAL_ASM(
glabel func0f048398
/* f048398: 27bdff18 */ addiu $sp,$sp,-232
/* f04839c: afbf003c */ sw $ra,0x3c($sp)
/* f0483a0: afbe0038 */ sw $s8,0x38($sp)
/* f0483a4: afb70034 */ sw $s7,0x34($sp)
/* f0483a8: afb60030 */ sw $s6,0x30($sp)
/* f0483ac: afb5002c */ sw $s5,0x2c($sp)
/* f0483b0: afb40028 */ sw $s4,0x28($sp)
/* f0483b4: afb30024 */ sw $s3,0x24($sp)
/* f0483b8: afb20020 */ sw $s2,0x20($sp)
/* f0483bc: afb1001c */ sw $s1,0x1c($sp)
/* f0483c0: 0fc07934 */ jal getNumChrSlots
/* f0483c4: afb00018 */ sw $s0,0x18($sp)
/* f0483c8: 3c1e8006 */ lui $s8,%hi(var80062cb0)
/* f0483cc: 27de2cb0 */ addiu $s8,$s8,%lo(var80062cb0)
/* f0483d0: afc00000 */ sw $zero,0x0($s8)
/* f0483d4: 3c018006 */ lui $at,%hi(var80062cb4)
/* f0483d8: ac202cb4 */ sw $zero,%lo(var80062cb4)($at)
/* f0483dc: 3c0e800a */ lui $t6,%hi(g_Vars+0x318)
/* f0483e0: 8dcea2d8 */ lw $t6,%lo(g_Vars+0x318)($t6)
/* f0483e4: 3c018006 */ lui $at,%hi(var80062cb8)
/* f0483e8: ac202cb8 */ sw $zero,%lo(var80062cb8)($at)
/* f0483ec: 3c018006 */ lui $at,%hi(var80062cbc)
/* f0483f0: afa200e0 */ sw $v0,0xe0($sp)
/* f0483f4: afa000dc */ sw $zero,0xdc($sp)
/* f0483f8: 00009025 */ or $s2,$zero,$zero
/* f0483fc: 0000b025 */ or $s6,$zero,$zero
/* f048400: 15c0005a */ bnez $t6,.L0f04856c
/* f048404: ac202cbc */ sw $zero,%lo(var80062cbc)($at)
/* f048408: 18400058 */ blez $v0,.L0f04856c
/* f04840c: 0000a825 */ or $s5,$zero,$zero
/* f048410: 00009825 */ or $s3,$zero,$zero
/* f048414: 24170006 */ addiu $s7,$zero,0x6
/* f048418: 24140003 */ addiu $s4,$zero,0x3
.L0f04841c:
/* f04841c: 3c0f8006 */ lui $t7,%hi(g_ChrSlots)
/* f048420: 8def2988 */ lw $t7,%lo(g_ChrSlots)($t7)
/* f048424: 026f8021 */ addu $s0,$s3,$t7
/* f048428: 8e180020 */ lw $t8,0x20($s0)
/* f04842c: 5300004b */ beqzl $t8,.L0f04855c
/* f048430: 8faa00e0 */ lw $t2,0xe0($sp)
/* f048434: 8e19001c */ lw $t9,0x1c($s0)
/* f048438: 53200048 */ beqzl $t9,.L0f04855c
/* f04843c: 8faa00e0 */ lw $t2,0xe0($sp)
/* f048440: 0fc0e6a5 */ jal chrIsDead
/* f048444: 02002025 */ or $a0,$s0,$zero
/* f048448: 54400044 */ bnezl $v0,.L0f04855c
/* f04844c: 8faa00e0 */ lw $t2,0xe0($sp)
/* f048450: 0fc0a221 */ jal chrGetTargetProp
/* f048454: 02002025 */ or $a0,$s0,$zero
/* f048458: 1040003f */ beqz $v0,.L0f048558
/* f04845c: 00408825 */ or $s1,$v0,$zero
/* f048460: 90430000 */ lbu $v1,0x0($v0)
/* f048464: 12830003 */ beq $s4,$v1,.L0f048474
/* f048468: 00000000 */ nop
/* f04846c: 56e3003b */ bnel $s7,$v1,.L0f04855c
/* f048470: 8faa00e0 */ lw $t2,0xe0($sp)
.L0f048474:
/* f048474: 16e30011 */ bne $s7,$v1,.L0f0484bc
/* f048478: 3c07800a */ lui $a3,%hi(g_Vars)
/* f04847c: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars)
/* f048480: 8ce8029c */ lw $t0,0x29c($a3)
/* f048484: 02002025 */ or $a0,$s0,$zero
/* f048488: 24060002 */ addiu $a2,$zero,0x2
/* f04848c: 05000007 */ bltz $t0,.L0f0484ac
/* f048490: 00000000 */ nop
/* f048494: 8ce302a8 */ lw $v1,0x2a8($a3)
/* f048498: 10600004 */ beqz $v1,.L0f0484ac
/* f04849c: 00000000 */ nop
/* f0484a0: 8c6900bc */ lw $t1,0xbc($v1)
/* f0484a4: 50490006 */ beql $v0,$t1,.L0f0484c0
/* f0484a8: 8e220004 */ lw $v0,0x4($s1)
.L0f0484ac:
/* f0484ac: 0fc12aa3 */ jal chrCompareTeams
/* f0484b0: 8e250004 */ lw $a1,0x4($s1)
/* f0484b4: 5440000a */ bnezl $v0,.L0f0484e0
/* f0484b8: 8fca0000 */ lw $t2,0x0($s8)
.L0f0484bc:
/* f0484bc: 8e220004 */ lw $v0,0x4($s1)
.L0f0484c0:
/* f0484c0: 00001825 */ or $v1,$zero,$zero
/* f0484c4: 10400003 */ beqz $v0,.L0f0484d4
/* f0484c8: 00000000 */ nop
/* f0484cc: 10000001 */ b .L0f0484d4
/* f0484d0: 904302fe */ lbu $v1,0x2fe($v0)
.L0f0484d4:
/* f0484d4: 54740021 */ bnel $v1,$s4,.L0f04855c
/* f0484d8: 8faa00e0 */ lw $t2,0xe0($sp)
/* f0484dc: 8fca0000 */ lw $t2,0x0($s8)
.L0f0484e0:
/* f0484e0: 254b0001 */ addiu $t3,$t2,0x1
/* f0484e4: afcb0000 */ sw $t3,0x0($s8)
/* f0484e8: 8e0300e0 */ lw $v1,0xe0($s0)
/* f0484ec: 8e0400e4 */ lw $a0,0xe4($s0)
/* f0484f0: 0083082a */ slt $at,$a0,$v1
/* f0484f4: 10200003 */ beqz $at,.L0f048504
/* f0484f8: 00801025 */ or $v0,$a0,$zero
/* f0484fc: 10000001 */ b .L0f048504
/* f048500: 00601025 */ or $v0,$v1,$zero
.L0f048504:
/* f048504: 10400014 */ beqz $v0,.L0f048558
/* f048508: 3c038006 */ lui $v1,%hi(var80062cb4)
/* f04850c: 24632cb4 */ addiu $v1,$v1,%lo(var80062cb4)
/* f048510: 8c6c0000 */ lw $t4,0x0($v1)
/* f048514: 3c0e800a */ lui $t6,%hi(g_Vars+0x8)
/* f048518: 3c048006 */ lui $a0,%hi(var80062cbc)
/* f04851c: 258d0001 */ addiu $t5,$t4,0x1
/* f048520: ac6d0000 */ sw $t5,0x0($v1)
/* f048524: 8dce9fc8 */ lw $t6,%lo(g_Vars+0x8)($t6)
/* f048528: 24842cbc */ addiu $a0,$a0,%lo(var80062cbc)
/* f04852c: 01c27823 */ subu $t7,$t6,$v0
/* f048530: 29e100f0 */ slti $at,$t7,0xc8
/* f048534: 10200008 */ beqz $at,.L0f048558
/* f048538: 3c028006 */ lui $v0,%hi(var80062cb8)
/* f04853c: 24422cb8 */ addiu $v0,$v0,%lo(var80062cb8)
/* f048540: 8c580000 */ lw $t8,0x0($v0)
/* f048544: 8c880000 */ lw $t0,0x0($a0)
/* f048548: 27190001 */ addiu $t9,$t8,0x1
/* f04854c: 25090001 */ addiu $t1,$t0,0x1
/* f048550: ac590000 */ sw $t9,0x0($v0)
/* f048554: ac890000 */ sw $t1,0x0($a0)
.L0f048558:
/* f048558: 8faa00e0 */ lw $t2,0xe0($sp)
.L0f04855c:
/* f04855c: 26b50001 */ addiu $s5,$s5,0x1
/* f048560: 26730368 */ addiu $s3,$s3,0x368
/* f048564: 16aaffad */ bne $s5,$t2,.L0f04841c
/* f048568: 00000000 */ nop
.L0f04856c:
/* f04856c: 3c028007 */ lui $v0,%hi(var80068454)
/* f048570: 8c428454 */ lw $v0,%lo(var80068454)($v0)
/* f048574: 3c018007 */ lui $at,%hi(var80068454)
/* f048578: 0000a825 */ or $s5,$zero,$zero
/* f04857c: 24420001 */ addiu $v0,$v0,0x1
/* f048580: ac228454 */ sw $v0,%lo(var80068454)($at)
/* f048584: 2c41000b */ sltiu $at,$v0,0xb
/* f048588: 14200002 */ bnez $at,.L0f048594
/* f04858c: 3c018007 */ lui $at,%hi(var80068454)
/* f048590: ac208454 */ sw $zero,%lo(var80068454)($at)
.L0f048594:
/* f048594: 0fc47bac */ jal debugDangerousProps
/* f048598: 00000000 */ nop
/* f04859c: 10400003 */ beqz $v0,.L0f0485ac
/* f0485a0: 00000000 */ nop
/* f0485a4: 0fc10e51 */ jal propPrintDangerous
/* f0485a8: 00000000 */ nop
.L0f0485ac:
/* f0485ac: 3c02800a */ lui $v0,%hi(g_Vars+0x4d2)
/* f0485b0: 8042a492 */ lb $v0,%lo(g_Vars+0x4d2)($v0)
/* f0485b4: 04400009 */ bltz $v0,.L0f0485dc
/* f0485b8: 00000000 */ nop
/* f0485bc: 0fc120b3 */ jal func0f0482cc
/* f0485c0: 24440c00 */ addiu $a0,$v0,0xc00
/* f0485c4: 240bffff */ addiu $t3,$zero,-1
/* f0485c8: 3c01800a */ lui $at,%hi(g_Vars+0x4d2)
/* f0485cc: a02ba492 */ sb $t3,%lo(g_Vars+0x4d2)($at)
/* f0485d0: 3c01800a */ lui $at,%hi(g_Vars+0x4d3)
/* f0485d4: 240c0001 */ addiu $t4,$zero,0x1
/* f0485d8: a02ca493 */ sb $t4,%lo(g_Vars+0x4d3)($at)
.L0f0485dc:
/* f0485dc: 3c038006 */ lui $v1,%hi(g_NumBgChrs)
/* f0485e0: 8c637e60 */ lw $v1,%lo(g_NumBgChrs)($v1)
/* f0485e4: 00009825 */ or $s3,$zero,$zero
/* f0485e8: 18600013 */ blez $v1,.L0f048638
.L0f0485ec:
/* f0485ec: 3c0d800a */ lui $t5,%hi(g_Vars+0x4d3)
/* f0485f0: 81ada493 */ lb $t5,%lo(g_Vars+0x4d3)($t5)
/* f0485f4: 3c028006 */ lui $v0,%hi(g_BgChrs)
/* f0485f8: 8c427e58 */ lw $v0,%lo(g_BgChrs)($v0)
/* f0485fc: 11a00005 */ beqz $t5,.L0f048614
/* f048600: 00537021 */ addu $t6,$v0,$s3
/* f048604: 95cf0192 */ lhu $t7,0x192($t6)
/* f048608: 31f80010 */ andi $t8,$t7,0x10
/* f04860c: 53000006 */ beqzl $t8,.L0f048628
/* f048610: 26b50001 */ addiu $s5,$s5,0x1
.L0f048614:
/* f048614: 0fc11f20 */ jal chrTick
/* f048618: 02622021 */ addu $a0,$s3,$v0
/* f04861c: 3c038006 */ lui $v1,%hi(g_NumBgChrs)
/* f048620: 8c637e60 */ lw $v1,%lo(g_NumBgChrs)($v1)
/* f048624: 26b50001 */ addiu $s5,$s5,0x1
.L0f048628:
/* f048628: 02a3082a */ slt $at,$s5,$v1
/* f04862c: 1420ffef */ bnez $at,.L0f0485ec
/* f048630: 26730368 */ addiu $s3,$s3,0x368
/* f048634: 0000a825 */ or $s5,$zero,$zero
.L0f048638:
/* f048638: 8fb900e0 */ lw $t9,0xe0($sp)
/* f04863c: 0000a025 */ or $s4,$zero,$zero
/* f048640: 00009825 */ or $s3,$zero,$zero
/* f048644: 1b200052 */ blez $t9,.L0f048790
/* f048648: 241e001f */ addiu $s8,$zero,0x1f
/* f04864c: 24170005 */ addiu $s7,$zero,0x5
/* f048650: 27b1007c */ addiu $s1,$sp,0x7c
.L0f048654:
/* f048654: 3c088006 */ lui $t0,%hi(g_ChrSlots)
/* f048658: 8d082988 */ lw $t0,%lo(g_ChrSlots)($t0)
/* f04865c: 02682021 */ addu $a0,$s3,$t0
/* f048660: 8c890020 */ lw $t1,0x20($a0)
/* f048664: 51200046 */ beqzl $t1,.L0f048780
/* f048668: 8fb800e0 */ lw $t8,0xe0($sp)
/* f04866c: 8c83001c */ lw $v1,0x1c($a0)
/* f048670: 50600043 */ beqzl $v1,.L0f048780
/* f048674: 8fb800e0 */ lw $t8,0xe0($sp)
/* f048678: 80820007 */ lb $v0,0x7($a0)
/* f04867c: 52e20005 */ beql $s7,$v0,.L0f048694
/* f048680: 906a0001 */ lbu $t2,0x1($v1)
/* f048684: 53c20003 */ beql $s8,$v0,.L0f048694
/* f048688: 906a0001 */ lbu $t2,0x1($v1)
/* f04868c: 26940001 */ addiu $s4,$s4,0x1
/* f048690: 906a0001 */ lbu $t2,0x1($v1)
.L0f048694:
/* f048694: 314b0080 */ andi $t3,$t2,0x80
/* f048698: 11600011 */ beqz $t3,.L0f0486e0
/* f04869c: 00000000 */ nop
/* f0486a0: 12e20006 */ beq $s7,$v0,.L0f0486bc
/* f0486a4: 00000000 */ nop
/* f0486a8: 13c20004 */ beq $s8,$v0,.L0f0486bc
/* f0486ac: 8fac00dc */ lw $t4,0xdc($sp)
/* f0486b0: 258d0001 */ addiu $t5,$t4,0x1
/* f0486b4: 1000000a */ b .L0f0486e0
/* f0486b8: afad00dc */ sw $t5,0xdc($sp)
.L0f0486bc:
/* f0486bc: 57c20008 */ bnel $s8,$v0,.L0f0486e0
/* f0486c0: 26d60001 */ addiu $s6,$s6,0x1
/* f0486c4: 8c8e0018 */ lw $t6,0x18($a0)
/* f0486c8: 000e7940 */ sll $t7,$t6,0x5
/* f0486cc: 05e00004 */ bltz $t7,.L0f0486e0
/* f0486d0: 00000000 */ nop
/* f0486d4: 10000002 */ b .L0f0486e0
/* f0486d8: 26d60001 */ addiu $s6,$s6,0x1
/* f0486dc: 26d60001 */ addiu $s6,$s6,0x1
.L0f0486e0:
/* f0486e0: 52e20008 */ beql $s7,$v0,.L0f048704
/* f0486e4: 94880192 */ lhu $t0,0x192($a0)
/* f0486e8: 57c20025 */ bnel $s8,$v0,.L0f048780
/* f0486ec: 8fb800e0 */ lw $t8,0xe0($sp)
/* f0486f0: 8c980018 */ lw $t8,0x18($a0)
/* f0486f4: 0018c940 */ sll $t9,$t8,0x5
/* f0486f8: 07220021 */ bltzl $t9,.L0f048780
/* f0486fc: 8fb800e0 */ lw $t8,0xe0($sp)
/* f048700: 94880192 */ lhu $t0,0x192($a0)
.L0f048704:
/* f048704: 00125080 */ sll $t2,$s2,0x2
/* f048708: 022a1821 */ addu $v1,$s1,$t2
/* f04870c: 31090080 */ andi $t1,$t0,0x80
/* f048710: 5120001b */ beqzl $t1,.L0f048780
/* f048714: 8fb800e0 */ lw $t8,0xe0($sp)
/* f048718: 26520001 */ addiu $s2,$s2,0x1
/* f04871c: 2a41000a */ slti $at,$s2,0xa
/* f048720: ac640000 */ sw $a0,0x0($v1)
/* f048724: 14200015 */ bnez $at,.L0f04877c
/* f048728: 24630004 */ addiu $v1,$v1,4
/* f04872c: 0c004b70 */ jal random
/* f048730: afa30048 */ sw $v1,0x48($sp)
/* f048734: 0052001b */ divu $zero,$v0,$s2
/* f048738: 00002810 */ mfhi $a1
/* f04873c: 00055880 */ sll $t3,$a1,0x2
/* f048740: 022b6021 */ addu $t4,$s1,$t3
/* f048744: 00a08025 */ or $s0,$a1,$zero
/* f048748: 8fa30048 */ lw $v1,0x48($sp)
/* f04874c: 16400002 */ bnez $s2,.L0f048758
/* f048750: 00000000 */ nop
/* f048754: 0007000d */ break 0x7
.L0f048758:
/* f048758: 8d840000 */ lw $a0,0x0($t4)
/* f04875c: 0fc0f337 */ jal chrFadeCorpse
/* f048760: 00000000 */ nop
/* f048764: 8fa30048 */ lw $v1,0x48($sp)
/* f048768: 00107080 */ sll $t6,$s0,0x2
/* f04876c: 022e7821 */ addu $t7,$s1,$t6
/* f048770: 8c6dfffc */ lw $t5,-0x4($v1)
/* f048774: 2652ffff */ addiu $s2,$s2,-1
/* f048778: aded0000 */ sw $t5,0x0($t7)
.L0f04877c:
/* f04877c: 8fb800e0 */ lw $t8,0xe0($sp)
.L0f048780:
/* f048780: 26b50001 */ addiu $s5,$s5,0x1
/* f048784: 26730368 */ addiu $s3,$s3,0x368
/* f048788: 16b8ffb2 */ bne $s5,$t8,.L0f048654
/* f04878c: 00000000 */ nop
.L0f048790:
/* f048790: 3c198007 */ lui $t9,%hi(var80068458)
/* f048794: 8f398458 */ lw $t9,%lo(var80068458)($t9)
/* f048798: 24170005 */ addiu $s7,$zero,0x5
/* f04879c: 241e001f */ addiu $s8,$zero,0x1f
/* f0487a0: 0334082a */ slt $at,$t9,$s4
/* f0487a4: 10200003 */ beqz $at,.L0f0487b4
/* f0487a8: 3c03800a */ lui $v1,%hi(g_Vars+0x38)
/* f0487ac: 3c018007 */ lui $at,%hi(var80068458)
/* f0487b0: ac348458 */ sw $s4,%lo(var80068458)($at)
.L0f0487b4:
/* f0487b4: 8fa800dc */ lw $t0,0xdc($sp)
/* f0487b8: 8c639ff8 */ lw $v1,%lo(g_Vars+0x38)($v1)
/* f0487bc: 00008825 */ or $s1,$zero,$zero
/* f0487c0: 02e81023 */ subu $v0,$s7,$t0
/* f0487c4: 28610007 */ slti $at,$v1,0x7
/* f0487c8: 14200004 */ bnez $at,.L0f0487dc
/* f0487cc: afa20074 */ sw $v0,0x74($sp)
/* f0487d0: 00434823 */ subu $t1,$v0,$v1
/* f0487d4: 252a0006 */ addiu $t2,$t1,0x6
/* f0487d8: afaa0074 */ sw $t2,0x74($sp)
.L0f0487dc:
/* f0487dc: 8fab0074 */ lw $t3,0x74($sp)
/* f0487e0: 05610002 */ bgez $t3,.L0f0487ec
/* f0487e4: 00000000 */ nop
/* f0487e8: afa00074 */ sw $zero,0x74($sp)
.L0f0487ec:
/* f0487ec: 12c0007d */ beqz $s6,.L0f0489e4
/* f0487f0: 8fac00e0 */ lw $t4,0xe0($sp)
/* f0487f4: 0000b025 */ or $s6,$zero,$zero
/* f0487f8: 00009025 */ or $s2,$zero,$zero
/* f0487fc: 19800079 */ blez $t4,.L0f0489e4
/* f048800: 0000a825 */ or $s5,$zero,$zero
/* f048804: 00009825 */ or $s3,$zero,$zero
/* f048808: 27b400a4 */ addiu $s4,$sp,0xa4
.L0f04880c:
/* f04880c: 3c0e8006 */ lui $t6,%hi(g_ChrSlots)
/* f048810: 8dce2988 */ lw $t6,%lo(g_ChrSlots)($t6)
/* f048814: 026e2021 */ addu $a0,$s3,$t6
/* f048818: 8c8d0020 */ lw $t5,0x20($a0)
/* f04881c: 51a0006d */ beqzl $t5,.L0f0489d4
/* f048820: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048824: 80820007 */ lb $v0,0x7($a0)
/* f048828: 52e2000b */ beql $s7,$v0,.L0f048858
/* f04882c: 8c88001c */ lw $t0,0x1c($a0)
/* f048830: 57c20068 */ bnel $s8,$v0,.L0f0489d4
/* f048834: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048838: 8c8f001c */ lw $t7,0x1c($a0)
/* f04883c: 51e00065 */ beqzl $t7,.L0f0489d4
/* f048840: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048844: 8c980018 */ lw $t8,0x18($a0)
/* f048848: 0018c940 */ sll $t9,$t8,0x5
/* f04884c: 07220061 */ bltzl $t9,.L0f0489d4
/* f048850: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048854: 8c88001c */ lw $t0,0x1c($a0)
.L0f048858:
/* f048858: 91090001 */ lbu $t1,0x1($t0)
/* f04885c: 312a0080 */ andi $t2,$t1,0x80
/* f048860: 51400033 */ beqzl $t2,.L0f048930
/* f048864: 8c8c0030 */ lw $t4,0x30($a0)
/* f048868: 8c8b0038 */ lw $t3,0x38($a0)
/* f04886c: 05630059 */ bgezl $t3,.L0f0489d4
/* f048870: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048874: 8c8c002c */ lw $t4,0x2c($a0)
/* f048878: 8fae0074 */ lw $t6,0x74($sp)
/* f04887c: 55800055 */ bnezl $t4,.L0f0489d4
/* f048880: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048884: 26d60001 */ addiu $s6,$s6,0x1
/* f048888: 01d6082a */ slt $at,$t6,$s6
/* f04888c: 14200004 */ bnez $at,.L0f0488a0
/* f048890: 00000000 */ nop
/* f048894: 8c8d02d4 */ lw $t5,0x2d4($a0)
/* f048898: 51a00006 */ beqzl $t5,.L0f0488b4
/* f04889c: 8c8f0030 */ lw $t7,0x30($a0)
.L0f0488a0:
/* f0488a0: 0fc0f337 */ jal chrFadeCorpse
/* f0488a4: 00000000 */ nop
/* f0488a8: 10000049 */ b .L0f0489d0
/* f0488ac: 26d6ffff */ addiu $s6,$s6,-1
/* f0488b0: 8c8f0030 */ lw $t7,0x30($a0)
.L0f0488b4:
/* f0488b4: 0011c080 */ sll $t8,$s1,0x2
/* f0488b8: 27b900b8 */ addiu $t9,$sp,0xb8
/* f0488bc: 15e00044 */ bnez $t7,.L0f0489d0
/* f0488c0: 03191821 */ addu $v1,$t8,$t9
/* f0488c4: 26310001 */ addiu $s1,$s1,0x1
/* f0488c8: 2a210002 */ slti $at,$s1,0x2
/* f0488cc: ac640000 */ sw $a0,0x0($v1)
/* f0488d0: 1420003f */ bnez $at,.L0f0489d0
/* f0488d4: 24630004 */ addiu $v1,$v1,4
/* f0488d8: 0c004b70 */ jal random
/* f0488dc: afa30048 */ sw $v1,0x48($sp)
/* f0488e0: 0051001b */ divu $zero,$v0,$s1
/* f0488e4: 00002810 */ mfhi $a1
/* f0488e8: 00054080 */ sll $t0,$a1,0x2
/* f0488ec: 03a82021 */ addu $a0,$sp,$t0
/* f0488f0: 00a08025 */ or $s0,$a1,$zero
/* f0488f4: 8fa30048 */ lw $v1,0x48($sp)
/* f0488f8: 16200002 */ bnez $s1,.L0f048904
/* f0488fc: 00000000 */ nop
/* f048900: 0007000d */ break 0x7
.L0f048904:
/* f048904: 8c8400b8 */ lw $a0,0xb8($a0)
/* f048908: 0fc0f341 */ jal chrEnableReap
/* f04890c: 00000000 */ nop
/* f048910: 8fa30048 */ lw $v1,0x48($sp)
/* f048914: 00105080 */ sll $t2,$s0,0x2
/* f048918: 03aa5821 */ addu $t3,$sp,$t2
/* f04891c: 8c69fffc */ lw $t1,-0x4($v1)
/* f048920: 2631ffff */ addiu $s1,$s1,-1
/* f048924: 1000002a */ b .L0f0489d0
/* f048928: ad6900b8 */ sw $t1,0xb8($t3)
/* f04892c: 8c8c0030 */ lw $t4,0x30($a0)
.L0f048930:
/* f048930: 00127080 */ sll $t6,$s2,0x2
/* f048934: 028e2821 */ addu $a1,$s4,$t6
/* f048938: 55800026 */ bnezl $t4,.L0f0489d4
/* f04893c: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048940: 26520001 */ addiu $s2,$s2,0x1
/* f048944: 2a410005 */ slti $at,$s2,0x5
/* f048948: aca40000 */ sw $a0,0x0($a1)
/* f04894c: 14200020 */ bnez $at,.L0f0489d0
/* f048950: 24a50004 */ addiu $a1,$a1,0x4
/* f048954: 0c004b70 */ jal random
/* f048958: afa50048 */ sw $a1,0x48($sp)
/* f04895c: 0052001b */ divu $zero,$v0,$s2
/* f048960: 00001810 */ mfhi $v1
/* f048964: 00036880 */ sll $t5,$v1,0x2
/* f048968: 028d7821 */ addu $t7,$s4,$t5
/* f04896c: 8df80000 */ lw $t8,0x0($t7)
/* f048970: 00608025 */ or $s0,$v1,$zero
/* f048974: 8fa50048 */ lw $a1,0x48($sp)
/* f048978: 83190007 */ lb $t9,0x7($t8)
/* f04897c: 16400002 */ bnez $s2,.L0f048988
/* f048980: 00000000 */ nop
/* f048984: 0007000d */ break 0x7
.L0f048988:
/* f048988: 00034080 */ sll $t0,$v1,0x2
/* f04898c: 12f90005 */ beq $s7,$t9,.L0f0489a4
/* f048990: 02884821 */ addu $t1,$s4,$t0
/* f048994: 8d240000 */ lw $a0,0x0($t1)
/* f048998: 0fc0c467 */ jal chrBeginDead
/* f04899c: afa50048 */ sw $a1,0x48($sp)
/* f0489a0: 8fa50048 */ lw $a1,0x48($sp)
.L0f0489a4:
/* f0489a4: 00105080 */ sll $t2,$s0,0x2
/* f0489a8: 028a1021 */ addu $v0,$s4,$t2
/* f0489ac: 8c440000 */ lw $a0,0x0($v0)
/* f0489b0: afa50048 */ sw $a1,0x48($sp)
/* f0489b4: 0fc0f341 */ jal chrEnableReap
/* f0489b8: afa20044 */ sw $v0,0x44($sp)
/* f0489bc: 8fa50048 */ lw $a1,0x48($sp)
/* f0489c0: 8fa20044 */ lw $v0,0x44($sp)
/* f0489c4: 2652ffff */ addiu $s2,$s2,-1
/* f0489c8: 8cabfffc */ lw $t3,-0x4($a1)
/* f0489cc: ac4b0000 */ sw $t3,0x0($v0)
.L0f0489d0:
/* f0489d0: 8fac00e0 */ lw $t4,0xe0($sp)
.L0f0489d4:
/* f0489d4: 26b50001 */ addiu $s5,$s5,0x1
/* f0489d8: 26730368 */ addiu $s3,$s3,0x368
/* f0489dc: 16acff8b */ bne $s5,$t4,.L0f04880c
/* f0489e0: 00000000 */ nop
.L0f0489e4:
/* f0489e4: 8fbf003c */ lw $ra,0x3c($sp)
/* f0489e8: 8fb00018 */ lw $s0,0x18($sp)
/* f0489ec: 8fb1001c */ lw $s1,0x1c($sp)
/* f0489f0: 8fb20020 */ lw $s2,0x20($sp)
/* f0489f4: 8fb30024 */ lw $s3,0x24($sp)
/* f0489f8: 8fb40028 */ lw $s4,0x28($sp)
/* f0489fc: 8fb5002c */ lw $s5,0x2c($sp)
/* f048a00: 8fb60030 */ lw $s6,0x30($sp)
/* f048a04: 8fb70034 */ lw $s7,0x34($sp)
/* f048a08: 8fbe0038 */ lw $s8,0x38($sp)
/* f048a0c: 03e00008 */ jr $ra
/* f048a10: 27bd00e8 */ addiu $sp,$sp,0xe8
);
#elif VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f048398
/* f048398: 27bdff18 */ addiu $sp,$sp,-232
/* f04839c: afbf003c */ sw $ra,0x3c($sp)
/* f0483a0: afbe0038 */ sw $s8,0x38($sp)
/* f0483a4: afb70034 */ sw $s7,0x34($sp)
/* f0483a8: afb60030 */ sw $s6,0x30($sp)
/* f0483ac: afb5002c */ sw $s5,0x2c($sp)
/* f0483b0: afb40028 */ sw $s4,0x28($sp)
/* f0483b4: afb30024 */ sw $s3,0x24($sp)
/* f0483b8: afb20020 */ sw $s2,0x20($sp)
/* f0483bc: afb1001c */ sw $s1,0x1c($sp)
/* f0483c0: 0fc07934 */ jal getNumChrSlots
/* f0483c4: afb00018 */ sw $s0,0x18($sp)
/* f0483c8: 3c1e8006 */ lui $s8,%hi(var80062cb0)
/* f0483cc: 27de2cb0 */ addiu $s8,$s8,%lo(var80062cb0)
/* f0483d0: afc00000 */ sw $zero,0x0($s8)
/* f0483d4: 3c018006 */ lui $at,%hi(var80062cb4)
/* f0483d8: ac202cb4 */ sw $zero,%lo(var80062cb4)($at)
/* f0483dc: 3c0e800a */ lui $t6,%hi(g_Vars+0x318)
/* f0483e0: 8dcea2d8 */ lw $t6,%lo(g_Vars+0x318)($t6)
/* f0483e4: 3c018006 */ lui $at,%hi(var80062cb8)
/* f0483e8: ac202cb8 */ sw $zero,%lo(var80062cb8)($at)
/* f0483ec: 3c018006 */ lui $at,%hi(var80062cbc)
/* f0483f0: afa200e0 */ sw $v0,0xe0($sp)
/* f0483f4: afa000dc */ sw $zero,0xdc($sp)
/* f0483f8: 00009025 */ or $s2,$zero,$zero
/* f0483fc: 0000b025 */ or $s6,$zero,$zero
/* f048400: 15c0005a */ bnez $t6,.L0f04856c
/* f048404: ac202cbc */ sw $zero,%lo(var80062cbc)($at)
/* f048408: 18400058 */ blez $v0,.L0f04856c
/* f04840c: 0000a825 */ or $s5,$zero,$zero
/* f048410: 00009825 */ or $s3,$zero,$zero
/* f048414: 24170006 */ addiu $s7,$zero,0x6
/* f048418: 24140003 */ addiu $s4,$zero,0x3
.L0f04841c:
/* f04841c: 3c0f8006 */ lui $t7,%hi(g_ChrSlots)
/* f048420: 8def2988 */ lw $t7,%lo(g_ChrSlots)($t7)
/* f048424: 026f8021 */ addu $s0,$s3,$t7
/* f048428: 8e180020 */ lw $t8,0x20($s0)
/* f04842c: 5300004b */ beqzl $t8,.L0f04855c
/* f048430: 8faa00e0 */ lw $t2,0xe0($sp)
/* f048434: 8e19001c */ lw $t9,0x1c($s0)
/* f048438: 53200048 */ beqzl $t9,.L0f04855c
/* f04843c: 8faa00e0 */ lw $t2,0xe0($sp)
/* f048440: 0fc0e6a5 */ jal chrIsDead
/* f048444: 02002025 */ or $a0,$s0,$zero
/* f048448: 54400044 */ bnezl $v0,.L0f04855c
/* f04844c: 8faa00e0 */ lw $t2,0xe0($sp)
/* f048450: 0fc0a221 */ jal chrGetTargetProp
/* f048454: 02002025 */ or $a0,$s0,$zero
/* f048458: 1040003f */ beqz $v0,.L0f048558
/* f04845c: 00408825 */ or $s1,$v0,$zero
/* f048460: 90430000 */ lbu $v1,0x0($v0)
/* f048464: 12830003 */ beq $s4,$v1,.L0f048474
/* f048468: 00000000 */ nop
/* f04846c: 56e3003b */ bnel $s7,$v1,.L0f04855c
/* f048470: 8faa00e0 */ lw $t2,0xe0($sp)
.L0f048474:
/* f048474: 16e30011 */ bne $s7,$v1,.L0f0484bc
/* f048478: 3c07800a */ lui $a3,%hi(g_Vars)
/* f04847c: 24e79fc0 */ addiu $a3,$a3,%lo(g_Vars)
/* f048480: 8ce8029c */ lw $t0,0x29c($a3)
/* f048484: 02002025 */ or $a0,$s0,$zero
/* f048488: 24060002 */ addiu $a2,$zero,0x2
/* f04848c: 05000007 */ bltz $t0,.L0f0484ac
/* f048490: 00000000 */ nop
/* f048494: 8ce302a8 */ lw $v1,0x2a8($a3)
/* f048498: 10600004 */ beqz $v1,.L0f0484ac
/* f04849c: 00000000 */ nop
/* f0484a0: 8c6900bc */ lw $t1,0xbc($v1)
/* f0484a4: 50490006 */ beql $v0,$t1,.L0f0484c0
/* f0484a8: 8e220004 */ lw $v0,0x4($s1)
.L0f0484ac:
/* f0484ac: 0fc12aa3 */ jal chrCompareTeams
/* f0484b0: 8e250004 */ lw $a1,0x4($s1)
/* f0484b4: 5440000a */ bnezl $v0,.L0f0484e0
/* f0484b8: 8fca0000 */ lw $t2,0x0($s8)
.L0f0484bc:
/* f0484bc: 8e220004 */ lw $v0,0x4($s1)
.L0f0484c0:
/* f0484c0: 00001825 */ or $v1,$zero,$zero
/* f0484c4: 10400003 */ beqz $v0,.L0f0484d4
/* f0484c8: 00000000 */ nop
/* f0484cc: 10000001 */ b .L0f0484d4
/* f0484d0: 904302fe */ lbu $v1,0x2fe($v0)
.L0f0484d4:
/* f0484d4: 54740021 */ bnel $v1,$s4,.L0f04855c
/* f0484d8: 8faa00e0 */ lw $t2,0xe0($sp)
/* f0484dc: 8fca0000 */ lw $t2,0x0($s8)
.L0f0484e0:
/* f0484e0: 254b0001 */ addiu $t3,$t2,0x1
/* f0484e4: afcb0000 */ sw $t3,0x0($s8)
/* f0484e8: 8e0300e0 */ lw $v1,0xe0($s0)
/* f0484ec: 8e0400e4 */ lw $a0,0xe4($s0)
/* f0484f0: 0083082a */ slt $at,$a0,$v1
/* f0484f4: 10200003 */ beqz $at,.L0f048504
/* f0484f8: 00801025 */ or $v0,$a0,$zero
/* f0484fc: 10000001 */ b .L0f048504
/* f048500: 00601025 */ or $v0,$v1,$zero
.L0f048504:
/* f048504: 10400014 */ beqz $v0,.L0f048558
/* f048508: 3c038006 */ lui $v1,%hi(var80062cb4)
/* f04850c: 24632cb4 */ addiu $v1,$v1,%lo(var80062cb4)
/* f048510: 8c6c0000 */ lw $t4,0x0($v1)
/* f048514: 3c0e800a */ lui $t6,%hi(g_Vars+0x8)
/* f048518: 3c048006 */ lui $a0,%hi(var80062cbc)
/* f04851c: 258d0001 */ addiu $t5,$t4,0x1
/* f048520: ac6d0000 */ sw $t5,0x0($v1)
/* f048524: 8dce9fc8 */ lw $t6,%lo(g_Vars+0x8)($t6)
/* f048528: 24842cbc */ addiu $a0,$a0,%lo(var80062cbc)
/* f04852c: 01c27823 */ subu $t7,$t6,$v0
/* f048530: 29e100f0 */ slti $at,$t7,0xf0
/* f048534: 10200008 */ beqz $at,.L0f048558
/* f048538: 3c028006 */ lui $v0,%hi(var80062cb8)
/* f04853c: 24422cb8 */ addiu $v0,$v0,%lo(var80062cb8)
/* f048540: 8c580000 */ lw $t8,0x0($v0)
/* f048544: 8c880000 */ lw $t0,0x0($a0)
/* f048548: 27190001 */ addiu $t9,$t8,0x1
/* f04854c: 25090001 */ addiu $t1,$t0,0x1
/* f048550: ac590000 */ sw $t9,0x0($v0)
/* f048554: ac890000 */ sw $t1,0x0($a0)
.L0f048558:
/* f048558: 8faa00e0 */ lw $t2,0xe0($sp)
.L0f04855c:
/* f04855c: 26b50001 */ addiu $s5,$s5,0x1
/* f048560: 26730368 */ addiu $s3,$s3,0x368
/* f048564: 16aaffad */ bne $s5,$t2,.L0f04841c
/* f048568: 00000000 */ nop
.L0f04856c:
/* f04856c: 3c028007 */ lui $v0,%hi(var80068454)
/* f048570: 8c428454 */ lw $v0,%lo(var80068454)($v0)
/* f048574: 3c018007 */ lui $at,%hi(var80068454)
/* f048578: 0000a825 */ or $s5,$zero,$zero
/* f04857c: 24420001 */ addiu $v0,$v0,0x1
/* f048580: ac228454 */ sw $v0,%lo(var80068454)($at)
/* f048584: 2c41000b */ sltiu $at,$v0,0xb
/* f048588: 14200002 */ bnez $at,.L0f048594
/* f04858c: 3c018007 */ lui $at,%hi(var80068454)
/* f048590: ac208454 */ sw $zero,%lo(var80068454)($at)
.L0f048594:
/* f048594: 0fc47bac */ jal debugDangerousProps
/* f048598: 00000000 */ nop
/* f04859c: 10400003 */ beqz $v0,.L0f0485ac
/* f0485a0: 00000000 */ nop
/* f0485a4: 0fc10e51 */ jal propPrintDangerous
/* f0485a8: 00000000 */ nop
.L0f0485ac:
/* f0485ac: 3c02800a */ lui $v0,%hi(g_Vars+0x4d2)
/* f0485b0: 8042a492 */ lb $v0,%lo(g_Vars+0x4d2)($v0)
/* f0485b4: 04400009 */ bltz $v0,.L0f0485dc
/* f0485b8: 00000000 */ nop
/* f0485bc: 0fc120b3 */ jal func0f0482cc
/* f0485c0: 24440c00 */ addiu $a0,$v0,0xc00
/* f0485c4: 240bffff */ addiu $t3,$zero,-1
/* f0485c8: 3c01800a */ lui $at,%hi(g_Vars+0x4d2)
/* f0485cc: a02ba492 */ sb $t3,%lo(g_Vars+0x4d2)($at)
/* f0485d0: 3c01800a */ lui $at,%hi(g_Vars+0x4d3)
/* f0485d4: 240c0001 */ addiu $t4,$zero,0x1
/* f0485d8: a02ca493 */ sb $t4,%lo(g_Vars+0x4d3)($at)
.L0f0485dc:
/* f0485dc: 3c038006 */ lui $v1,%hi(g_NumBgChrs)
/* f0485e0: 8c637e60 */ lw $v1,%lo(g_NumBgChrs)($v1)
/* f0485e4: 00009825 */ or $s3,$zero,$zero
/* f0485e8: 18600013 */ blez $v1,.L0f048638
.L0f0485ec:
/* f0485ec: 3c0d800a */ lui $t5,%hi(g_Vars+0x4d3)
/* f0485f0: 81ada493 */ lb $t5,%lo(g_Vars+0x4d3)($t5)
/* f0485f4: 3c028006 */ lui $v0,%hi(g_BgChrs)
/* f0485f8: 8c427e58 */ lw $v0,%lo(g_BgChrs)($v0)
/* f0485fc: 11a00005 */ beqz $t5,.L0f048614
/* f048600: 00537021 */ addu $t6,$v0,$s3
/* f048604: 95cf0192 */ lhu $t7,0x192($t6)
/* f048608: 31f80010 */ andi $t8,$t7,0x10
/* f04860c: 53000006 */ beqzl $t8,.L0f048628
/* f048610: 26b50001 */ addiu $s5,$s5,0x1
.L0f048614:
/* f048614: 0fc11f20 */ jal chrTick
/* f048618: 02622021 */ addu $a0,$s3,$v0
/* f04861c: 3c038006 */ lui $v1,%hi(g_NumBgChrs)
/* f048620: 8c637e60 */ lw $v1,%lo(g_NumBgChrs)($v1)
/* f048624: 26b50001 */ addiu $s5,$s5,0x1
.L0f048628:
/* f048628: 02a3082a */ slt $at,$s5,$v1
/* f04862c: 1420ffef */ bnez $at,.L0f0485ec
/* f048630: 26730368 */ addiu $s3,$s3,0x368
/* f048634: 0000a825 */ or $s5,$zero,$zero
.L0f048638:
/* f048638: 8fb900e0 */ lw $t9,0xe0($sp)
/* f04863c: 0000a025 */ or $s4,$zero,$zero
/* f048640: 00009825 */ or $s3,$zero,$zero
/* f048644: 1b200052 */ blez $t9,.L0f048790
/* f048648: 241e001f */ addiu $s8,$zero,0x1f
/* f04864c: 24170005 */ addiu $s7,$zero,0x5
/* f048650: 27b1007c */ addiu $s1,$sp,0x7c
.L0f048654:
/* f048654: 3c088006 */ lui $t0,%hi(g_ChrSlots)
/* f048658: 8d082988 */ lw $t0,%lo(g_ChrSlots)($t0)
/* f04865c: 02682021 */ addu $a0,$s3,$t0
/* f048660: 8c890020 */ lw $t1,0x20($a0)
/* f048664: 51200046 */ beqzl $t1,.L0f048780
/* f048668: 8fb800e0 */ lw $t8,0xe0($sp)
/* f04866c: 8c83001c */ lw $v1,0x1c($a0)
/* f048670: 50600043 */ beqzl $v1,.L0f048780
/* f048674: 8fb800e0 */ lw $t8,0xe0($sp)
/* f048678: 80820007 */ lb $v0,0x7($a0)
/* f04867c: 52e20005 */ beql $s7,$v0,.L0f048694
/* f048680: 906a0001 */ lbu $t2,0x1($v1)
/* f048684: 53c20003 */ beql $s8,$v0,.L0f048694
/* f048688: 906a0001 */ lbu $t2,0x1($v1)
/* f04868c: 26940001 */ addiu $s4,$s4,0x1
/* f048690: 906a0001 */ lbu $t2,0x1($v1)
.L0f048694:
/* f048694: 314b0080 */ andi $t3,$t2,0x80
/* f048698: 11600011 */ beqz $t3,.L0f0486e0
/* f04869c: 00000000 */ nop
/* f0486a0: 12e20006 */ beq $s7,$v0,.L0f0486bc
/* f0486a4: 00000000 */ nop
/* f0486a8: 13c20004 */ beq $s8,$v0,.L0f0486bc
/* f0486ac: 8fac00dc */ lw $t4,0xdc($sp)
/* f0486b0: 258d0001 */ addiu $t5,$t4,0x1
/* f0486b4: 1000000a */ b .L0f0486e0
/* f0486b8: afad00dc */ sw $t5,0xdc($sp)
.L0f0486bc:
/* f0486bc: 57c20008 */ bnel $s8,$v0,.L0f0486e0
/* f0486c0: 26d60001 */ addiu $s6,$s6,0x1
/* f0486c4: 8c8e0018 */ lw $t6,0x18($a0)
/* f0486c8: 000e7940 */ sll $t7,$t6,0x5
/* f0486cc: 05e00004 */ bltz $t7,.L0f0486e0
/* f0486d0: 00000000 */ nop
/* f0486d4: 10000002 */ b .L0f0486e0
/* f0486d8: 26d60001 */ addiu $s6,$s6,0x1
/* f0486dc: 26d60001 */ addiu $s6,$s6,0x1
.L0f0486e0:
/* f0486e0: 52e20008 */ beql $s7,$v0,.L0f048704
/* f0486e4: 94880192 */ lhu $t0,0x192($a0)
/* f0486e8: 57c20025 */ bnel $s8,$v0,.L0f048780
/* f0486ec: 8fb800e0 */ lw $t8,0xe0($sp)
/* f0486f0: 8c980018 */ lw $t8,0x18($a0)
/* f0486f4: 0018c940 */ sll $t9,$t8,0x5
/* f0486f8: 07220021 */ bltzl $t9,.L0f048780
/* f0486fc: 8fb800e0 */ lw $t8,0xe0($sp)
/* f048700: 94880192 */ lhu $t0,0x192($a0)
.L0f048704:
/* f048704: 00125080 */ sll $t2,$s2,0x2
/* f048708: 022a1821 */ addu $v1,$s1,$t2
/* f04870c: 31090080 */ andi $t1,$t0,0x80
/* f048710: 5120001b */ beqzl $t1,.L0f048780
/* f048714: 8fb800e0 */ lw $t8,0xe0($sp)
/* f048718: 26520001 */ addiu $s2,$s2,0x1
/* f04871c: 2a41000a */ slti $at,$s2,0xa
/* f048720: ac640000 */ sw $a0,0x0($v1)
/* f048724: 14200015 */ bnez $at,.L0f04877c
/* f048728: 24630004 */ addiu $v1,$v1,4
/* f04872c: 0c004b70 */ jal random
/* f048730: afa30048 */ sw $v1,0x48($sp)
/* f048734: 0052001b */ divu $zero,$v0,$s2
/* f048738: 00002810 */ mfhi $a1
/* f04873c: 00055880 */ sll $t3,$a1,0x2
/* f048740: 022b6021 */ addu $t4,$s1,$t3
/* f048744: 00a08025 */ or $s0,$a1,$zero
/* f048748: 8fa30048 */ lw $v1,0x48($sp)
/* f04874c: 16400002 */ bnez $s2,.L0f048758
/* f048750: 00000000 */ nop
/* f048754: 0007000d */ break 0x7
.L0f048758:
/* f048758: 8d840000 */ lw $a0,0x0($t4)
/* f04875c: 0fc0f337 */ jal chrFadeCorpse
/* f048760: 00000000 */ nop
/* f048764: 8fa30048 */ lw $v1,0x48($sp)
/* f048768: 00107080 */ sll $t6,$s0,0x2
/* f04876c: 022e7821 */ addu $t7,$s1,$t6
/* f048770: 8c6dfffc */ lw $t5,-0x4($v1)
/* f048774: 2652ffff */ addiu $s2,$s2,-1
/* f048778: aded0000 */ sw $t5,0x0($t7)
.L0f04877c:
/* f04877c: 8fb800e0 */ lw $t8,0xe0($sp)
.L0f048780:
/* f048780: 26b50001 */ addiu $s5,$s5,0x1
/* f048784: 26730368 */ addiu $s3,$s3,0x368
/* f048788: 16b8ffb2 */ bne $s5,$t8,.L0f048654
/* f04878c: 00000000 */ nop
.L0f048790:
/* f048790: 3c198007 */ lui $t9,%hi(var80068458)
/* f048794: 8f398458 */ lw $t9,%lo(var80068458)($t9)
/* f048798: 24170005 */ addiu $s7,$zero,0x5
/* f04879c: 241e001f */ addiu $s8,$zero,0x1f
/* f0487a0: 0334082a */ slt $at,$t9,$s4
/* f0487a4: 10200003 */ beqz $at,.L0f0487b4
/* f0487a8: 3c03800a */ lui $v1,%hi(g_Vars+0x38)
/* f0487ac: 3c018007 */ lui $at,%hi(var80068458)
/* f0487b0: ac348458 */ sw $s4,%lo(var80068458)($at)
.L0f0487b4:
/* f0487b4: 8fa800dc */ lw $t0,0xdc($sp)
/* f0487b8: 8c639ff8 */ lw $v1,%lo(g_Vars+0x38)($v1)
/* f0487bc: 00008825 */ or $s1,$zero,$zero
/* f0487c0: 02e81023 */ subu $v0,$s7,$t0
/* f0487c4: 28610007 */ slti $at,$v1,0x7
/* f0487c8: 14200004 */ bnez $at,.L0f0487dc
/* f0487cc: afa20074 */ sw $v0,0x74($sp)
/* f0487d0: 00434823 */ subu $t1,$v0,$v1
/* f0487d4: 252a0006 */ addiu $t2,$t1,0x6
/* f0487d8: afaa0074 */ sw $t2,0x74($sp)
.L0f0487dc:
/* f0487dc: 8fab0074 */ lw $t3,0x74($sp)
/* f0487e0: 05610002 */ bgez $t3,.L0f0487ec
/* f0487e4: 00000000 */ nop
/* f0487e8: afa00074 */ sw $zero,0x74($sp)
.L0f0487ec:
/* f0487ec: 12c0007d */ beqz $s6,.L0f0489e4
/* f0487f0: 8fac00e0 */ lw $t4,0xe0($sp)
/* f0487f4: 0000b025 */ or $s6,$zero,$zero
/* f0487f8: 00009025 */ or $s2,$zero,$zero
/* f0487fc: 19800079 */ blez $t4,.L0f0489e4
/* f048800: 0000a825 */ or $s5,$zero,$zero
/* f048804: 00009825 */ or $s3,$zero,$zero
/* f048808: 27b400a4 */ addiu $s4,$sp,0xa4
.L0f04880c:
/* f04880c: 3c0e8006 */ lui $t6,%hi(g_ChrSlots)
/* f048810: 8dce2988 */ lw $t6,%lo(g_ChrSlots)($t6)
/* f048814: 026e2021 */ addu $a0,$s3,$t6
/* f048818: 8c8d0020 */ lw $t5,0x20($a0)
/* f04881c: 51a0006d */ beqzl $t5,.L0f0489d4
/* f048820: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048824: 80820007 */ lb $v0,0x7($a0)
/* f048828: 52e2000b */ beql $s7,$v0,.L0f048858
/* f04882c: 8c88001c */ lw $t0,0x1c($a0)
/* f048830: 57c20068 */ bnel $s8,$v0,.L0f0489d4
/* f048834: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048838: 8c8f001c */ lw $t7,0x1c($a0)
/* f04883c: 51e00065 */ beqzl $t7,.L0f0489d4
/* f048840: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048844: 8c980018 */ lw $t8,0x18($a0)
/* f048848: 0018c940 */ sll $t9,$t8,0x5
/* f04884c: 07220061 */ bltzl $t9,.L0f0489d4
/* f048850: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048854: 8c88001c */ lw $t0,0x1c($a0)
.L0f048858:
/* f048858: 91090001 */ lbu $t1,0x1($t0)
/* f04885c: 312a0080 */ andi $t2,$t1,0x80
/* f048860: 51400033 */ beqzl $t2,.L0f048930
/* f048864: 8c8c0030 */ lw $t4,0x30($a0)
/* f048868: 8c8b0038 */ lw $t3,0x38($a0)
/* f04886c: 05630059 */ bgezl $t3,.L0f0489d4
/* f048870: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048874: 8c8c002c */ lw $t4,0x2c($a0)
/* f048878: 8fae0074 */ lw $t6,0x74($sp)
/* f04887c: 55800055 */ bnezl $t4,.L0f0489d4
/* f048880: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048884: 26d60001 */ addiu $s6,$s6,0x1
/* f048888: 01d6082a */ slt $at,$t6,$s6
/* f04888c: 14200004 */ bnez $at,.L0f0488a0
/* f048890: 00000000 */ nop
/* f048894: 8c8d02d4 */ lw $t5,0x2d4($a0)
/* f048898: 51a00006 */ beqzl $t5,.L0f0488b4
/* f04889c: 8c8f0030 */ lw $t7,0x30($a0)
.L0f0488a0:
/* f0488a0: 0fc0f337 */ jal chrFadeCorpse
/* f0488a4: 00000000 */ nop
/* f0488a8: 10000049 */ b .L0f0489d0
/* f0488ac: 26d6ffff */ addiu $s6,$s6,-1
/* f0488b0: 8c8f0030 */ lw $t7,0x30($a0)
.L0f0488b4:
/* f0488b4: 0011c080 */ sll $t8,$s1,0x2
/* f0488b8: 27b900b8 */ addiu $t9,$sp,0xb8
/* f0488bc: 15e00044 */ bnez $t7,.L0f0489d0
/* f0488c0: 03191821 */ addu $v1,$t8,$t9
/* f0488c4: 26310001 */ addiu $s1,$s1,0x1
/* f0488c8: 2a210002 */ slti $at,$s1,0x2
/* f0488cc: ac640000 */ sw $a0,0x0($v1)
/* f0488d0: 1420003f */ bnez $at,.L0f0489d0
/* f0488d4: 24630004 */ addiu $v1,$v1,4
/* f0488d8: 0c004b70 */ jal random
/* f0488dc: afa30048 */ sw $v1,0x48($sp)
/* f0488e0: 0051001b */ divu $zero,$v0,$s1
/* f0488e4: 00002810 */ mfhi $a1
/* f0488e8: 00054080 */ sll $t0,$a1,0x2
/* f0488ec: 03a82021 */ addu $a0,$sp,$t0
/* f0488f0: 00a08025 */ or $s0,$a1,$zero
/* f0488f4: 8fa30048 */ lw $v1,0x48($sp)
/* f0488f8: 16200002 */ bnez $s1,.L0f048904
/* f0488fc: 00000000 */ nop
/* f048900: 0007000d */ break 0x7
.L0f048904:
/* f048904: 8c8400b8 */ lw $a0,0xb8($a0)
/* f048908: 0fc0f341 */ jal chrEnableReap
/* f04890c: 00000000 */ nop
/* f048910: 8fa30048 */ lw $v1,0x48($sp)
/* f048914: 00105080 */ sll $t2,$s0,0x2
/* f048918: 03aa5821 */ addu $t3,$sp,$t2
/* f04891c: 8c69fffc */ lw $t1,-0x4($v1)
/* f048920: 2631ffff */ addiu $s1,$s1,-1
/* f048924: 1000002a */ b .L0f0489d0
/* f048928: ad6900b8 */ sw $t1,0xb8($t3)
/* f04892c: 8c8c0030 */ lw $t4,0x30($a0)
.L0f048930:
/* f048930: 00127080 */ sll $t6,$s2,0x2
/* f048934: 028e2821 */ addu $a1,$s4,$t6
/* f048938: 55800026 */ bnezl $t4,.L0f0489d4
/* f04893c: 8fac00e0 */ lw $t4,0xe0($sp)
/* f048940: 26520001 */ addiu $s2,$s2,0x1
/* f048944: 2a410005 */ slti $at,$s2,0x5
/* f048948: aca40000 */ sw $a0,0x0($a1)
/* f04894c: 14200020 */ bnez $at,.L0f0489d0
/* f048950: 24a50004 */ addiu $a1,$a1,0x4
/* f048954: 0c004b70 */ jal random
/* f048958: afa50048 */ sw $a1,0x48($sp)
/* f04895c: 0052001b */ divu $zero,$v0,$s2
/* f048960: 00001810 */ mfhi $v1
/* f048964: 00036880 */ sll $t5,$v1,0x2
/* f048968: 028d7821 */ addu $t7,$s4,$t5
/* f04896c: 8df80000 */ lw $t8,0x0($t7)
/* f048970: 00608025 */ or $s0,$v1,$zero
/* f048974: 8fa50048 */ lw $a1,0x48($sp)
/* f048978: 83190007 */ lb $t9,0x7($t8)
/* f04897c: 16400002 */ bnez $s2,.L0f048988
/* f048980: 00000000 */ nop
/* f048984: 0007000d */ break 0x7
.L0f048988:
/* f048988: 00034080 */ sll $t0,$v1,0x2
/* f04898c: 12f90005 */ beq $s7,$t9,.L0f0489a4
/* f048990: 02884821 */ addu $t1,$s4,$t0
/* f048994: 8d240000 */ lw $a0,0x0($t1)
/* f048998: 0fc0c467 */ jal chrBeginDead
/* f04899c: afa50048 */ sw $a1,0x48($sp)
/* f0489a0: 8fa50048 */ lw $a1,0x48($sp)
.L0f0489a4:
/* f0489a4: 00105080 */ sll $t2,$s0,0x2
/* f0489a8: 028a1021 */ addu $v0,$s4,$t2
/* f0489ac: 8c440000 */ lw $a0,0x0($v0)
/* f0489b0: afa50048 */ sw $a1,0x48($sp)
/* f0489b4: 0fc0f341 */ jal chrEnableReap
/* f0489b8: afa20044 */ sw $v0,0x44($sp)
/* f0489bc: 8fa50048 */ lw $a1,0x48($sp)
/* f0489c0: 8fa20044 */ lw $v0,0x44($sp)
/* f0489c4: 2652ffff */ addiu $s2,$s2,-1
/* f0489c8: 8cabfffc */ lw $t3,-0x4($a1)
/* f0489cc: ac4b0000 */ sw $t3,0x0($v0)
.L0f0489d0:
/* f0489d0: 8fac00e0 */ lw $t4,0xe0($sp)
.L0f0489d4:
/* f0489d4: 26b50001 */ addiu $s5,$s5,0x1
/* f0489d8: 26730368 */ addiu $s3,$s3,0x368
/* f0489dc: 16acff8b */ bne $s5,$t4,.L0f04880c
/* f0489e0: 00000000 */ nop
.L0f0489e4:
/* f0489e4: 8fbf003c */ lw $ra,0x3c($sp)
/* f0489e8: 8fb00018 */ lw $s0,0x18($sp)
/* f0489ec: 8fb1001c */ lw $s1,0x1c($sp)
/* f0489f0: 8fb20020 */ lw $s2,0x20($sp)
/* f0489f4: 8fb30024 */ lw $s3,0x24($sp)
/* f0489f8: 8fb40028 */ lw $s4,0x28($sp)
/* f0489fc: 8fb5002c */ lw $s5,0x2c($sp)
/* f048a00: 8fb60030 */ lw $s6,0x30($sp)
/* f048a04: 8fb70034 */ lw $s7,0x34($sp)
/* f048a08: 8fbe0038 */ lw $s8,0x38($sp)
/* f048a0c: 03e00008 */ jr $ra
/* f048a10: 27bd00e8 */ addiu $sp,$sp,0xe8
);
#else
GLOBAL_ASM(
glabel func0f048398
/* f047abc: 27bdff60 */ addiu $sp,$sp,-160
/* f047ac0: afbf003c */ sw $ra,0x3c($sp)
/* f047ac4: afbe0038 */ sw $s8,0x38($sp)
/* f047ac8: afb70034 */ sw $s7,0x34($sp)
/* f047acc: afb60030 */ sw $s6,0x30($sp)
/* f047ad0: afb5002c */ sw $s5,0x2c($sp)
/* f047ad4: afb40028 */ sw $s4,0x28($sp)
/* f047ad8: afb30024 */ sw $s3,0x24($sp)
/* f047adc: afb20020 */ sw $s2,0x20($sp)
/* f047ae0: afb1001c */ sw $s1,0x1c($sp)
/* f047ae4: 0fc0786c */ jal getNumChrSlots
/* f047ae8: afb00018 */ sw $s0,0x18($sp)
/* f047aec: afa20098 */ sw $v0,0x98($sp)
/* f047af0: 00008025 */ or $s0,$zero,$zero
/* f047af4: 0000a025 */ or $s4,$zero,$zero
/* f047af8: 0000b025 */ or $s6,$zero,$zero
/* f047afc: 0fc466ab */ jal debugDangerousProps
/* f047b00: 0000b825 */ or $s7,$zero,$zero
/* f047b04: 10400003 */ beqz $v0,.NB0f047b14
/* f047b08: 00000000 */ sll $zero,$zero,0x0
/* f047b0c: 0fc10c44 */ jal propPrintDangerous
/* f047b10: 00000000 */ sll $zero,$zero,0x0
.NB0f047b14:
/* f047b14: 3c02800a */ lui $v0,0x800a
/* f047b18: 8042eb92 */ lb $v0,-0x146e($v0)
/* f047b1c: 04400009 */ bltz $v0,.NB0f047b44
/* f047b20: 00000000 */ sll $zero,$zero,0x0
/* f047b24: 0fc11e7c */ jal func0f0482cc
/* f047b28: 24440c00 */ addiu $a0,$v0,0xc00
/* f047b2c: 3c02800a */ lui $v0,0x800a
/* f047b30: 2442e6c0 */ addiu $v0,$v0,-6464
/* f047b34: 240effff */ addiu $t6,$zero,-1
/* f047b38: 240f0001 */ addiu $t7,$zero,0x1
/* f047b3c: a04e04d2 */ sb $t6,0x4d2($v0)
/* f047b40: a04f04d3 */ sb $t7,0x4d3($v0)
.NB0f047b44:
/* f047b44: 3c038007 */ lui $v1,0x8007
/* f047b48: 8c63a578 */ lw $v1,-0x5a88($v1)
/* f047b4c: 00009825 */ or $s3,$zero,$zero
/* f047b50: 00009025 */ or $s2,$zero,$zero
/* f047b54: 18600013 */ blez $v1,.NB0f047ba4
.NB0f047b58:
/* f047b58: 3c18800a */ lui $t8,0x800a
/* f047b5c: 8318eb93 */ lb $t8,-0x146d($t8)
/* f047b60: 3c028007 */ lui $v0,0x8007
/* f047b64: 8c42a570 */ lw $v0,-0x5a90($v0)
/* f047b68: 13000005 */ beqz $t8,.NB0f047b80
/* f047b6c: 0052c821 */ addu $t9,$v0,$s2
/* f047b70: 972a0192 */ lhu $t2,0x192($t9)
/* f047b74: 314b0010 */ andi $t3,$t2,0x10
/* f047b78: 51600006 */ beqzl $t3,.NB0f047b94
/* f047b7c: 26730001 */ addiu $s3,$s3,0x1
.NB0f047b80:
/* f047b80: 0fc11cec */ jal chrTick
/* f047b84: 02422021 */ addu $a0,$s2,$v0
/* f047b88: 3c038007 */ lui $v1,0x8007
/* f047b8c: 8c63a578 */ lw $v1,-0x5a88($v1)
/* f047b90: 26730001 */ addiu $s3,$s3,0x1
.NB0f047b94:
/* f047b94: 0263082a */ slt $at,$s3,$v1
/* f047b98: 1420ffef */ bnez $at,.NB0f047b58
/* f047b9c: 26520368 */ addiu $s2,$s2,0x368
/* f047ba0: 00009825 */ or $s3,$zero,$zero
.NB0f047ba4:
/* f047ba4: 8fa90098 */ lw $t1,0x98($sp)
/* f047ba8: 00003025 */ or $a2,$zero,$zero
/* f047bac: 3c058006 */ lui $a1,0x8006
/* f047bb0: 19200027 */ blez $t1,.NB0f047c50
/* f047bb4: 3c198007 */ lui $t9,0x8007
/* f047bb8: 8ca54e98 */ lw $a1,0x4e98($a1)
/* f047bbc: 2408001f */ addiu $t0,$zero,0x1f
/* f047bc0: 24070005 */ addiu $a3,$zero,0x5
.NB0f047bc4:
/* f047bc4: 8cac0020 */ lw $t4,0x20($a1)
/* f047bc8: 26730001 */ addiu $s3,$s3,0x1
/* f047bcc: 00a02025 */ or $a0,$a1,$zero
/* f047bd0: 1180001d */ beqz $t4,.NB0f047c48
/* f047bd4: 00000000 */ sll $zero,$zero,0x0
/* f047bd8: 8c83001c */ lw $v1,0x1c($a0)
/* f047bdc: 1060001a */ beqz $v1,.NB0f047c48
/* f047be0: 00000000 */ sll $zero,$zero,0x0
/* f047be4: 80820007 */ lb $v0,0x7($a0)
/* f047be8: 50e20005 */ beql $a3,$v0,.NB0f047c00
/* f047bec: 906d0001 */ lbu $t5,0x1($v1)
/* f047bf0: 51020003 */ beql $t0,$v0,.NB0f047c00
/* f047bf4: 906d0001 */ lbu $t5,0x1($v1)
/* f047bf8: 24c60001 */ addiu $a2,$a2,0x1
/* f047bfc: 906d0001 */ lbu $t5,0x1($v1)
.NB0f047c00:
/* f047c00: 31ae0080 */ andi $t6,$t5,0x80
/* f047c04: 11c00010 */ beqz $t6,.NB0f047c48
/* f047c08: 00000000 */ sll $zero,$zero,0x0
/* f047c0c: 10e20005 */ beq $a3,$v0,.NB0f047c24
/* f047c10: 00000000 */ sll $zero,$zero,0x0
/* f047c14: 11020003 */ beq $t0,$v0,.NB0f047c24
/* f047c18: 00000000 */ sll $zero,$zero,0x0
/* f047c1c: 1000000a */ beqz $zero,.NB0f047c48
/* f047c20: 26100001 */ addiu $s0,$s0,0x1
.NB0f047c24:
/* f047c24: 55020008 */ bnel $t0,$v0,.NB0f047c48
/* f047c28: 26940001 */ addiu $s4,$s4,0x1
/* f047c2c: 8c8f0018 */ lw $t7,0x18($a0)
/* f047c30: 000fc140 */ sll $t8,$t7,0x5
/* f047c34: 07000004 */ bltz $t8,.NB0f047c48
/* f047c38: 00000000 */ sll $zero,$zero,0x0
/* f047c3c: 10000002 */ beqz $zero,.NB0f047c48
/* f047c40: 26940001 */ addiu $s4,$s4,0x1
/* f047c44: 26940001 */ addiu $s4,$s4,0x1
.NB0f047c48:
/* f047c48: 1669ffde */ bne $s3,$t1,.NB0f047bc4
/* f047c4c: 24a50368 */ addiu $a1,$a1,0x368
.NB0f047c50:
/* f047c50: 8f39ab60 */ lw $t9,-0x54a0($t9)
/* f047c54: 24070005 */ addiu $a3,$zero,0x5
/* f047c58: 3c03800a */ lui $v1,0x800a
/* f047c5c: 0326082a */ slt $at,$t9,$a2
/* f047c60: 10200003 */ beqz $at,.NB0f047c70
/* f047c64: 00009825 */ or $s3,$zero,$zero
/* f047c68: 3c018007 */ lui $at,0x8007
/* f047c6c: ac26ab60 */ sw $a2,-0x54a0($at)
.NB0f047c70:
/* f047c70: 8c63e6f8 */ lw $v1,-0x1908($v1)
/* f047c74: 00f01023 */ subu $v0,$a3,$s0
/* f047c78: afa20058 */ sw $v0,0x58($sp)
/* f047c7c: 28610007 */ slti $at,$v1,0x7
/* f047c80: 14200003 */ bnez $at,.NB0f047c90
/* f047c84: 00435023 */ subu $t2,$v0,$v1
/* f047c88: 254b0006 */ addiu $t3,$t2,0x6
/* f047c8c: afab0058 */ sw $t3,0x58($sp)
.NB0f047c90:
/* f047c90: 8fac0058 */ lw $t4,0x58($sp)
/* f047c94: 3c018006 */ lui $at,0x8006
/* f047c98: 05810002 */ bgez $t4,.NB0f047ca4
/* f047c9c: 00000000 */ sll $zero,$zero,0x0
/* f047ca0: afa00058 */ sw $zero,0x58($sp)
.NB0f047ca4:
/* f047ca4: 12800093 */ beqz $s4,.NB0f047ef4
/* f047ca8: 0000a025 */ or $s4,$zero,$zero
/* f047cac: 19200091 */ blez $t1,.NB0f047ef4
/* f047cb0: ac2051c0 */ sw $zero,0x51c0($at)
/* f047cb4: 00009025 */ or $s2,$zero,$zero
/* f047cb8: 27be0074 */ addiu $s8,$sp,0x74
/* f047cbc: 27b50060 */ addiu $s5,$sp,0x60
.NB0f047cc0:
/* f047cc0: 3c0d8006 */ lui $t5,0x8006
/* f047cc4: 8dad4e98 */ lw $t5,0x4e98($t5)
/* f047cc8: 3c0f800a */ lui $t7,0x800a
/* f047ccc: 024d2021 */ addu $a0,$s2,$t5
/* f047cd0: 8c8e0020 */ lw $t6,0x20($a0)
/* f047cd4: 51c00083 */ beqzl $t6,.NB0f047ee4
/* f047cd8: 8fb80098 */ lw $t8,0x98($sp)
/* f047cdc: 8defe9d4 */ lw $t7,-0x162c($t7)
/* f047ce0: 55e00017 */ bnezl $t7,.NB0f047d40
/* f047ce4: 80820007 */ lb $v0,0x7($a0)
/* f047ce8: 0fc0a08c */ jal chrGetTargetProp
/* f047cec: afa4004c */ sw $a0,0x4c($sp)
/* f047cf0: 90580000 */ lbu $t8,0x0($v0)
/* f047cf4: 24010006 */ addiu $at,$zero,0x6
/* f047cf8: 8fa4004c */ lw $a0,0x4c($sp)
/* f047cfc: 57010010 */ bnel $t8,$at,.NB0f047d40
/* f047d00: 80820007 */ lb $v0,0x7($a0)
/* f047d04: 8c8200e0 */ lw $v0,0xe0($a0)
/* f047d08: 3c19800a */ lui $t9,0x800a
/* f047d0c: 5840000c */ blezl $v0,.NB0f047d40
/* f047d10: 80820007 */ lb $v0,0x7($a0)
/* f047d14: 8f39e6c8 */ lw $t9,-0x1938($t9)
/* f047d18: 3c0b8006 */ lui $t3,0x8006
/* f047d1c: 03225023 */ subu $t2,$t9,$v0
/* f047d20: 29410078 */ slti $at,$t2,0x78
/* f047d24: 50200006 */ beqzl $at,.NB0f047d40
/* f047d28: 80820007 */ lb $v0,0x7($a0)
/* f047d2c: 8d6b51c0 */ lw $t3,0x51c0($t3)
/* f047d30: 3c018006 */ lui $at,0x8006
/* f047d34: 256c0001 */ addiu $t4,$t3,0x1
/* f047d38: ac2c51c0 */ sw $t4,0x51c0($at)
/* f047d3c: 80820007 */ lb $v0,0x7($a0)
.NB0f047d40:
/* f047d40: 24010005 */ addiu $at,$zero,0x5
/* f047d44: 1041000a */ beq $v0,$at,.NB0f047d70
/* f047d48: 2401001f */ addiu $at,$zero,0x1f
/* f047d4c: 54410065 */ bnel $v0,$at,.NB0f047ee4
/* f047d50: 8fb80098 */ lw $t8,0x98($sp)
/* f047d54: 8c8d001c */ lw $t5,0x1c($a0)
/* f047d58: 51a00062 */ beqzl $t5,.NB0f047ee4
/* f047d5c: 8fb80098 */ lw $t8,0x98($sp)
/* f047d60: 8c8e0018 */ lw $t6,0x18($a0)
/* f047d64: 000e7940 */ sll $t7,$t6,0x5
/* f047d68: 05e2005e */ bltzl $t7,.NB0f047ee4
/* f047d6c: 8fb80098 */ lw $t8,0x98($sp)
.NB0f047d70:
/* f047d70: 8c98001c */ lw $t8,0x1c($a0)
/* f047d74: 93190001 */ lbu $t9,0x1($t8)
/* f047d78: 332a0080 */ andi $t2,$t9,0x80
/* f047d7c: 51400033 */ beqzl $t2,.NB0f047e4c
/* f047d80: 8c8e0030 */ lw $t6,0x30($a0)
/* f047d84: 8c8b0038 */ lw $t3,0x38($a0)
/* f047d88: 05630056 */ bgezl $t3,.NB0f047ee4
/* f047d8c: 8fb80098 */ lw $t8,0x98($sp)
/* f047d90: 8c8c002c */ lw $t4,0x2c($a0)
/* f047d94: 8fad0058 */ lw $t5,0x58($sp)
/* f047d98: 55800052 */ bnezl $t4,.NB0f047ee4
/* f047d9c: 8fb80098 */ lw $t8,0x98($sp)
/* f047da0: 26940001 */ addiu $s4,$s4,0x1
/* f047da4: 01b4082a */ slt $at,$t5,$s4
/* f047da8: 14200004 */ bnez $at,.NB0f047dbc
/* f047dac: 00000000 */ sll $zero,$zero,0x0
/* f047db0: 8c8e02d4 */ lw $t6,0x2d4($a0)
/* f047db4: 51c00006 */ beqzl $t6,.NB0f047dd0
/* f047db8: 8c8f0030 */ lw $t7,0x30($a0)
.NB0f047dbc:
/* f047dbc: 0fc0f136 */ jal chrFadeCorpse
/* f047dc0: 00000000 */ sll $zero,$zero,0x0
/* f047dc4: 10000046 */ beqz $zero,.NB0f047ee0
/* f047dc8: 2694ffff */ addiu $s4,$s4,-1
/* f047dcc: 8c8f0030 */ lw $t7,0x30($a0)
.NB0f047dd0:
/* f047dd0: 0016c080 */ sll $t8,$s6,0x2
/* f047dd4: 03d81821 */ addu $v1,$s8,$t8
/* f047dd8: 55e00042 */ bnezl $t7,.NB0f047ee4
/* f047ddc: 8fb80098 */ lw $t8,0x98($sp)
/* f047de0: 26d60001 */ addiu $s6,$s6,0x1
/* f047de4: 2ac10003 */ slti $at,$s6,0x3
/* f047de8: ac640000 */ sw $a0,0x0($v1)
/* f047dec: 1420003c */ bnez $at,.NB0f047ee0
/* f047df0: 24630004 */ addiu $v1,$v1,0x4
/* f047df4: 0c004d84 */ jal random
/* f047df8: afa30048 */ sw $v1,0x48($sp)
/* f047dfc: 0056001b */ divu $zero,$v0,$s6
/* f047e00: 00002810 */ mfhi $a1
/* f047e04: 0005c880 */ sll $t9,$a1,0x2
/* f047e08: 03d95021 */ addu $t2,$s8,$t9
/* f047e0c: 00a08825 */ or $s1,$a1,$zero
/* f047e10: 8fa30048 */ lw $v1,0x48($sp)
/* f047e14: 16c00002 */ bnez $s6,.NB0f047e20
/* f047e18: 00000000 */ sll $zero,$zero,0x0
/* f047e1c: 0007000d */ break 0x7
.NB0f047e20:
/* f047e20: 8d440000 */ lw $a0,0x0($t2)
/* f047e24: 0fc0f140 */ jal chrEnableReap
/* f047e28: 00000000 */ sll $zero,$zero,0x0
/* f047e2c: 8fa30048 */ lw $v1,0x48($sp)
/* f047e30: 00116080 */ sll $t4,$s1,0x2
/* f047e34: 03cc6821 */ addu $t5,$s8,$t4
/* f047e38: 8c6bfffc */ lw $t3,-0x4($v1)
/* f047e3c: 26d6ffff */ addiu $s6,$s6,-1
/* f047e40: 10000027 */ beqz $zero,.NB0f047ee0
/* f047e44: adab0000 */ sw $t3,0x0($t5)
/* f047e48: 8c8e0030 */ lw $t6,0x30($a0)
.NB0f047e4c:
/* f047e4c: 00177880 */ sll $t7,$s7,0x2
/* f047e50: 55c00024 */ bnezl $t6,.NB0f047ee4
/* f047e54: 8fb80098 */ lw $t8,0x98($sp)
/* f047e58: 26f70001 */ addiu $s7,$s7,0x1
/* f047e5c: 02af8021 */ addu $s0,$s5,$t7
/* f047e60: 2ae10006 */ slti $at,$s7,0x6
/* f047e64: ae040000 */ sw $a0,0x0($s0)
/* f047e68: 1420001d */ bnez $at,.NB0f047ee0
/* f047e6c: 26100004 */ addiu $s0,$s0,0x4
/* f047e70: 0c004d84 */ jal random
/* f047e74: 00000000 */ sll $zero,$zero,0x0
/* f047e78: 0057001b */ divu $zero,$v0,$s7
/* f047e7c: 00001810 */ mfhi $v1
/* f047e80: 0003c080 */ sll $t8,$v1,0x2
/* f047e84: 02b8c821 */ addu $t9,$s5,$t8
/* f047e88: 8f2a0000 */ lw $t2,0x0($t9)
/* f047e8c: 16e00002 */ bnez $s7,.NB0f047e98
/* f047e90: 00000000 */ sll $zero,$zero,0x0
/* f047e94: 0007000d */ break 0x7
.NB0f047e98:
/* f047e98: 814c0007 */ lb $t4,0x7($t2)
/* f047e9c: 24010005 */ addiu $at,$zero,0x5
/* f047ea0: 00608825 */ or $s1,$v1,$zero
/* f047ea4: 11810004 */ beq $t4,$at,.NB0f047eb8
/* f047ea8: 00035880 */ sll $t3,$v1,0x2
/* f047eac: 02ab6821 */ addu $t5,$s5,$t3
/* f047eb0: 0fc0c2b7 */ jal chrBeginDead
/* f047eb4: 8da40000 */ lw $a0,0x0($t5)
.NB0f047eb8:
/* f047eb8: 00117080 */ sll $t6,$s1,0x2
/* f047ebc: 02ae1021 */ addu $v0,$s5,$t6
/* f047ec0: 8c440000 */ lw $a0,0x0($v0)
/* f047ec4: 0fc0f140 */ jal chrEnableReap
/* f047ec8: afa20044 */ sw $v0,0x44($sp)
/* f047ecc: 8fa20044 */ lw $v0,0x44($sp)
/* f047ed0: 8e0ffffc */ lw $t7,-0x4($s0)
/* f047ed4: 26f7ffff */ addiu $s7,$s7,-1
/* f047ed8: 2610fffc */ addiu $s0,$s0,-4
/* f047edc: ac4f0000 */ sw $t7,0x0($v0)
.NB0f047ee0:
/* f047ee0: 8fb80098 */ lw $t8,0x98($sp)
.NB0f047ee4:
/* f047ee4: 26730001 */ addiu $s3,$s3,0x1
/* f047ee8: 26520368 */ addiu $s2,$s2,0x368
/* f047eec: 1678ff74 */ bne $s3,$t8,.NB0f047cc0
/* f047ef0: 00000000 */ sll $zero,$zero,0x0
.NB0f047ef4:
/* f047ef4: 8fbf003c */ lw $ra,0x3c($sp)
/* f047ef8: 8fb00018 */ lw $s0,0x18($sp)
/* f047efc: 8fb1001c */ lw $s1,0x1c($sp)
/* f047f00: 8fb20020 */ lw $s2,0x20($sp)
/* f047f04: 8fb30024 */ lw $s3,0x24($sp)
/* f047f08: 8fb40028 */ lw $s4,0x28($sp)
/* f047f0c: 8fb5002c */ lw $s5,0x2c($sp)
/* f047f10: 8fb60030 */ lw $s6,0x30($sp)
/* f047f14: 8fb70034 */ lw $s7,0x34($sp)
/* f047f18: 8fbe0038 */ lw $s8,0x38($sp)
/* f047f1c: 03e00008 */ jr $ra
/* f047f20: 27bd00a0 */ addiu $sp,$sp,0xa0
);
#endif
// Mismatch because it uses the stack differently.
//void func0f048398(void)
//{
// s32 numchrs = getNumChrSlots(); // e0
// s32 numalivewithpropflag80; // dc
// struct chrdata *spb8[10];
// struct chrdata *spa4[5]; // a4
// struct chrdata *sp7c[10]; // 7c
// s32 writeindex;
// s32 sp74;
// s32 numreapablewithpropflag80;
// s32 numalive;
// s32 s1len;
// s32 s2len;
// s32 i;
// s32 time60;
//
// var80062cb0 = 0;
// var80062cb4 = 0;
// var80062cb8 = 0;
// numalivewithpropflag80 = 0;
// var80062cbc = 0;
//
// // 400
// if (g_Vars.normmplayerisrunning == false) {
// for (i = 0; i < numchrs; i++) {
// struct chrdata *chr = &g_ChrSlots[i]; // s0
//
// if (chr->model && chr->prop && chrIsDead(chr) == false) {
// struct prop *targetprop = chrGetTargetProp(chr);
//
// if (targetprop && (targetprop->type == PROPTYPE_CHR || targetprop->type == PROPTYPE_PLAYER)) {
// if ((targetprop->type == PROPTYPE_PLAYER
// && !(g_Vars.antiplayernum >= 0 && g_Vars.anti && g_Vars.anti->prop == targetprop)
// && chrCompareTeams(chr, targetprop->chr, COMPARE_ENEMIES))
// || CHRRACE(targetprop->chr) == RACE_EYESPY) {
// var80062cb0++;
//
// if (chr->lastvisibletarget60 < chr->lastseetarget60) {
// time60 = chr->lastseetarget60;
// } else {
// time60 = chr->lastvisibletarget60;
// }
//
// if (time60) {
// var80062cb4++;
//
// if (g_Vars.lvframe60 - time60 < 240) {
// var80062cb8++;
// var80062cbc++;
// }
// }
// }
// }
// }
// }
// }
//
// // 56c
// var80068454++;
//
// if (var80068454 > 10) {
// var80068454 = 0;
// }
//
// if (debugDangerousProps()) {
// propPrintDangerous();
// }
//
// if (g_Vars.autocutnum >= 0) {
// func0f0482cc(g_Vars.autocutnum + 0xc00);
// g_Vars.autocutnum = -1;
// g_Vars.autocutplaying = true;
// }
//
// for (i = 0; i < g_NumBgChrs; i++) {
// if (!g_Vars.autocutplaying || (g_BgChrs[i].hidden2 & CHRH2FLAG_TICKDURINGAUTOCUT)) {
// chrTick(&g_BgChrs[i]);
// }
// }
//
// // 634
// numalive = 0;
// s2len = 0;
//
// for (i = 0; i < numchrs; i++) {
// struct chrdata *chr = &g_ChrSlots[i];
//
// // 664
// if (chr->model && chr->prop) {
// // 67c
// if (chr->actiontype != ACT_DEAD && chr->actiontype != ACT_DRUGGEDKO) {
// numalive++;
// }
//
// // 698
// if (chr->prop->flags & PROPFLAG_80) {
// // 6a0
// if (chr->actiontype != ACT_DEAD && chr->actiontype != ACT_DRUGGEDKO) {
// numalivewithpropflag80++;
// } else /*6bc*/ if (chr->actiontype == ACT_DRUGGEDKO) {
// if ((chr->chrflags & CHRCFLAG_KEEPCORPSEKO) == 0) {
// numreapablewithpropflag80++;
// }
// } else {
// numreapablewithpropflag80++;
// }
// }
//
// // 6e0
// if (chr->actiontype == ACT_DEAD
// || (chr->actiontype == ACT_DRUGGEDKO && (chr->chrflags & CHRCFLAG_KEEPCORPSEKO) == 0)) {
// if (chr->hidden2 & CHRH2FLAG_0080) {
// sp7c[s2len] = chr;
// s2len++;
//
// if (s2len >= 10) {
// writeindex = random() % s2len;
// chrFadeCorpse(sp7c[writeindex]);
// sp7c[writeindex] = sp7c[s2len - 1];
// s2len--;
// }
// }
// }
// }
// }
//
// // 790
// if (var80068458 < numalive) {
// var80068458 = numalive;
// }
//
// // 7b4
// sp74 = 5 - numalivewithpropflag80;
//
// // 7c8
// if (g_Vars.lvupdate240_60 > 6) {
// sp74 = (sp74 - g_Vars.lvupdate240_60) + 6;
// }
//
// // 7dc
// if (sp74 < 0) {
// sp74 = 0;
// }
//
// // 7ec
// if (numreapablewithpropflag80) {
// numreapablewithpropflag80 = 0;
// s1len = 0;
// s2len = 0;
//
// for (i = 0; i < numchrs; i++) {
// struct chrdata *chr = &g_ChrSlots[i];
//
// if (chr->model) {
// if (chr->actiontype == ACT_DEAD
// || (chr->actiontype == ACT_DRUGGEDKO && chr->prop && (chr->chrflags & CHRCFLAG_KEEPCORPSEKO) == 0)) {
// if (chr->prop->flags & PROPFLAG_80) {
// if (chr->act_dead.fadetimer < 0 && !chr->act_dead.allowfade) {
// numreapablewithpropflag80++;
//
// if (sp74 < numreapablewithpropflag80 || chr->aibot) {
// chrFadeCorpse(chr);
// numreapablewithpropflag80--;
// } else {
// if (chr->act_dead.allowreap == 0) {
// spb8[s1len] = chr;
// s1len++;
//
// if (s1len >= 2) {
// writeindex = random() % s1len;
//
//
// chrEnableReap(spb8[writeindex]);
// spb8[writeindex] = spb8[s1len - 1];
// s1len--;
// }
// }
// }
// }
// } else {
// // 938
// if (chr->act_dead.allowreap == 0) {
// spa4[s2len] = chr;
// s2len++;
//
// if (s2len >= 5) {
// writeindex = random() % s2len;
//
// if (spa4[writeindex]->actiontype != ACT_DEAD);
// if (spa4[writeindex]->actiontype != ACT_DEAD) {
// chrBeginDead(spa4[writeindex]);
// }
//
// chrEnableReap(spa4[writeindex]);
// spa4[writeindex] = spa4[s2len - 1];
// s2len--;
// }
// }
// }
// }
// }
// }
// }
//}
bool chrSawTargetRecently(struct chrdata *chr)
{
if (chr->lastseetarget60 > 0 && g_Vars.lvframe60 - chr->lastseetarget60 < PALDOWN(600)) {
return true;
}
return false;
}
bool chrHeardTargetRecently(struct chrdata *chr)
{
if (chr->lastheartarget60 > 0 && g_Vars.lvframe60 - chr->lastheartarget60 < PALDOWN(600)) {
return true;
}
return false;
}
f32 chrGetAngleToPos(struct chrdata *chr, struct coord *pos)
{
f32 fVar3;
f32 fVar2;
f32 fVar4;
struct prop *prop;
if (chr->prop->type == PROPTYPE_PLAYER) {
u32 playernum = propGetPlayerNum(chr->prop);
fVar3 = (360 - g_Vars.players[playernum]->vv_theta) * (M_BADTAU / 360);
} else {
fVar3 = chrGetInverseTheta(chr);
}
prop = chr->prop;
fVar2 = atan2f(pos->x - prop->pos.x, pos->z - prop->pos.z);
fVar4 = fVar2 - fVar3;
if (fVar2 < fVar3) {
fVar4 += M_BADTAU;
}
return fVar4;
}
f32 chrGetAngleToTarget(struct chrdata *chr)
{
struct prop *prop = chrGetTargetProp(chr);
return chrGetAngleToPos(chr, &prop->pos);
}
GLOBAL_ASM(
glabel func0f048b78
/* f048b78: 27bdff80 */ addiu $sp,$sp,-128
/* f048b7c: 30ae0004 */ andi $t6,$a1,0x4
/* f048b80: 11c0001f */ beqz $t6,.L0f048c00
/* f048b84: afbf0014 */ sw $ra,0x14($sp)
/* f048b88: 00c02825 */ or $a1,$a2,$zero
/* f048b8c: afa40080 */ sw $a0,0x80($sp)
/* f048b90: 0fc126d1 */ jal chrFindById
/* f048b94: afa7008c */ sw $a3,0x8c($sp)
/* f048b98: 8fa40080 */ lw $a0,0x80($sp)
/* f048b9c: 8fa7008c */ lw $a3,0x8c($sp)
/* f048ba0: 10400004 */ beqz $v0,.L0f048bb4
/* f048ba4: 00401825 */ or $v1,$v0,$zero
/* f048ba8: 8c4f001c */ lw $t7,0x1c($v0)
/* f048bac: 55e00003 */ bnezl $t7,.L0f048bbc
/* f048bb0: 8c78001c */ lw $t8,0x1c($v1)
.L0f048bb4:
/* f048bb4: 00801825 */ or $v1,$a0,$zero
/* f048bb8: 8c78001c */ lw $t8,0x1c($v1)
.L0f048bbc:
/* f048bbc: c7040008 */ lwc1 $f4,0x8($t8)
/* f048bc0: e4e40000 */ swc1 $f4,0x0($a3)
/* f048bc4: 8c79001c */ lw $t9,0x1c($v1)
/* f048bc8: c726000c */ lwc1 $f6,0xc($t9)
/* f048bcc: e4e60004 */ swc1 $f6,0x4($a3)
/* f048bd0: 8c68001c */ lw $t0,0x1c($v1)
/* f048bd4: c5080010 */ lwc1 $f8,0x10($t0)
/* f048bd8: 10600003 */ beqz $v1,.L0f048be8
/* f048bdc: e4e80008 */ swc1 $f8,0x8($a3)
/* f048be0: 10000002 */ b .L0f048bec
/* f048be4: 8c64001c */ lw $a0,0x1c($v1)
.L0f048be8:
/* f048be8: 8c64001c */ lw $a0,0x1c($v1)
.L0f048bec:
/* f048bec: 8fa50090 */ lw $a1,0x90($sp)
/* f048bf0: 0fc195e9 */ jal roomsCopy
/* f048bf4: 24840028 */ addiu $a0,$a0,0x28
/* f048bf8: 1000002e */ b .L0f048cb4
/* f048bfc: 8fbf0014 */ lw $ra,0x14($sp)
.L0f048c00:
/* f048c00: 30a90008 */ andi $t1,$a1,0x8
/* f048c04: 11200014 */ beqz $t1,.L0f048c58
/* f048c08: 00c02825 */ or $a1,$a2,$zero
/* f048c0c: 0fc1258b */ jal chrResolvePadId
/* f048c10: afa7008c */ sw $a3,0x8c($sp)
/* f048c14: 00402025 */ or $a0,$v0,$zero
/* f048c18: 24050042 */ addiu $a1,$zero,0x42
/* f048c1c: 0fc456ac */ jal padUnpack
/* f048c20: 27a60024 */ addiu $a2,$sp,0x24
/* f048c24: 8fa7008c */ lw $a3,0x8c($sp)
/* f048c28: c7aa0024 */ lwc1 $f10,0x24($sp)
/* f048c2c: 8fa50090 */ lw $a1,0x90($sp)
/* f048c30: 240bffff */ addiu $t3,$zero,-1
/* f048c34: e4ea0000 */ swc1 $f10,0x0($a3)
/* f048c38: c7b00028 */ lwc1 $f16,0x28($sp)
/* f048c3c: e4f00004 */ swc1 $f16,0x4($a3)
/* f048c40: c7b2002c */ lwc1 $f18,0x2c($sp)
/* f048c44: e4f20008 */ swc1 $f18,0x8($a3)
/* f048c48: 8faa006c */ lw $t2,0x6c($sp)
/* f048c4c: a4ab0002 */ sh $t3,0x2($a1)
/* f048c50: 10000017 */ b .L0f048cb0
/* f048c54: a4aa0000 */ sh $t2,0x0($a1)
.L0f048c58:
/* f048c58: 0fc0a221 */ jal chrGetTargetProp
/* f048c5c: afa7008c */ sw $a3,0x8c($sp)
/* f048c60: 8fa7008c */ lw $a3,0x8c($sp)
/* f048c64: c4440008 */ lwc1 $f4,0x8($v0)
/* f048c68: 24010003 */ addiu $at,$zero,0x3
/* f048c6c: 00403025 */ or $a2,$v0,$zero
/* f048c70: e4e40000 */ swc1 $f4,0x0($a3)
/* f048c74: c446000c */ lwc1 $f6,0xc($v0)
/* f048c78: e4e60004 */ swc1 $f6,0x4($a3)
/* f048c7c: c4480010 */ lwc1 $f8,0x10($v0)
/* f048c80: e4e80008 */ swc1 $f8,0x8($a3)
/* f048c84: 904c0000 */ lbu $t4,0x0($v0)
/* f048c88: 8fa50090 */ lw $a1,0x90($sp)
/* f048c8c: 15810006 */ bne $t4,$at,.L0f048ca8
/* f048c90: 00000000 */ nop
/* f048c94: 8c430004 */ lw $v1,0x4($v0)
/* f048c98: 10600003 */ beqz $v1,.L0f048ca8
/* f048c9c: 00000000 */ nop
/* f048ca0: 10000001 */ b .L0f048ca8
/* f048ca4: 00000000 */ nop
.L0f048ca8:
/* f048ca8: 0fc195e9 */ jal roomsCopy
/* f048cac: 24c40028 */ addiu $a0,$a2,0x28
.L0f048cb0:
/* f048cb0: 8fbf0014 */ lw $ra,0x14($sp)
.L0f048cb4:
/* f048cb4: 27bd0080 */ addiu $sp,$sp,0x80
/* f048cb8: 03e00008 */ jr $ra
/* f048cbc: 00000000 */ nop
);
f32 chrGetAngleFromTargetsFov(struct chrdata *chr)
{
f32 targetfacingangle = 0;
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
f32 xdiff;
f32 zdiff;
f32 angletotarget;
f32 result;
if (prop && target) {
xdiff = prop->pos.f[0] - target->pos.f[0];
zdiff = prop->pos.f[2] - target->pos.f[2];
angletotarget = atan2f(xdiff, zdiff);
if (target->type == PROPTYPE_PLAYER) {
s32 playernum = propGetPlayerNum(target);
targetfacingangle = (360.0f - g_Vars.players[playernum]->vv_theta) * M_BADTAU / 360.0f;
} else if (target->type == PROPTYPE_CHR) {
targetfacingangle = chrGetInverseTheta(target->chr);
}
result = angletotarget - targetfacingangle;
if (angletotarget < targetfacingangle) {
result += M_BADTAU;
}
}
return result;
}
f32 chrGetVerticalAngleToTarget(struct chrdata *chr)
{
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
f32 result = 0;
if (prop && target) {
f32 ydiff;
f32 xdiff;
f32 zdiff;
xdiff = prop->pos.x - target->pos.x;
ydiff = prop->pos.y - target->pos.y;
zdiff = prop->pos.z - target->pos.z;
result = atan2f(ydiff, sqrtf(xdiff * xdiff + zdiff * zdiff));
if (result < 0) {
result += M_BADTAU;
}
}
return result;
}
bool chrIsInTargetsFovX(struct chrdata *chr, u8 fov360)
{
f32 angle = chrGetAngleFromTargetsFov(chr);
if ((angle < fov360 * 0.024539785459638f && angle < M_PI)
|| (angle > M_BADTAU - fov360 * 0.024539785459638f && angle > M_PI)) {
return true;
}
return false;
}
bool chrIsVerticalAngleToTargetWithin(struct chrdata *chr, u8 fov360)
{
f32 val = chrGetVerticalAngleToTarget(chr);
if ((val < fov360 * 0.024539785459638f && val < M_PI)
|| (val > M_BADTAU - fov360 * 0.024539785459638f && val > M_PI)) {
return true;
}
return false;
}
f32 func0f048fcc(struct chrdata *chr, u8 arg1)
{
f32 result;
struct prop *chrprop = chr->prop;
struct prop *targetprop = chrGetTargetProp(chr);
f32 xdiff = chrprop->pos.x - targetprop->pos.x;
f32 zdiff = chrprop->pos.z - targetprop->pos.z;
f32 angle1 = atan2f(-xdiff, -zdiff);
f32 angle2 = chrGetInverseTheta(chr) + M_PI * (s32)arg1;
result = angle1 - angle2;
if (angle1 < angle2) {
result += M_BADTAU;
}
return result;
}
bool chrIsTargetInFov(struct chrdata *chr, u8 arg1, u8 arg2)
{
f32 angle = func0f048fcc(chr, arg2);
if ((angle < arg1 * 0.024539785459638f && angle < M_PI)
|| (angle > M_BADTAU - arg1 * 0.024539785459638f && angle > M_PI)) {
return true;
}
return false;
}
bool func0f04911c(struct chrdata *chr, struct coord *pos, u8 arg2)
{
f32 angle = chrGetAngleToPos(chr, pos);
if ((angle < arg2 * 0.024539785459638f && angle < M_PI) ||
(M_BADTAU - arg2 * 0.024539785459638f < angle && M_PI < angle)) {
return true;
}
return false;
}
f32 chrGetDistanceToTarget(struct chrdata *chr)
{
struct prop *prop = chrGetTargetProp(chr);
return propGetDistanceToProp(chr->prop, prop);
}
// Redundant function - it's the same as above
f32 chrGetDistanceToTarget2(struct chrdata *chr)
{
struct prop *prop = chrGetTargetProp(chr);
return propGetDistanceToProp(chr->prop, prop);
}
f32 chrGetDistanceToCurrentPlayer(struct chrdata *chr)
{
return propGetDistanceToProp(chr->prop, g_Vars.currentplayer->prop);
}
f32 propGetDistanceToProp(struct prop *a, struct prop *b)
{
f32 xdiff = a->pos.x - b->pos.x;
f32 ydiff = a->pos.y - b->pos.y;
f32 zdiff = a->pos.z - b->pos.z;
return sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
}
f32 propGetLateralDistanceToProp(struct prop *a, struct prop *b)
{
f32 xdiff = a->pos.x - b->pos.x;
f32 zdiff = a->pos.z - b->pos.z;
return sqrtf(xdiff * xdiff + zdiff * zdiff);
}
f32 chrGetDistanceToPad(struct chrdata *chr, s32 pad_id)
{
struct prop *prop = chr->prop;
f32 xdiff, ydiff, zdiff;
f32 distance = 0;
struct pad pad;
pad_id = chrResolvePadId(chr, pad_id);
#if VERSION >= VERSION_NTSC_1_0
if (pad_id >= 0)
#endif
{
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
ydiff = pad.pos.y - prop->pos.y;
zdiff = pad.pos.z - prop->pos.z;
distance = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
}
return distance;
}
#if VERSION >= VERSION_NTSC_1_0
f32 chrGetSameFloorDistanceToPad(struct chrdata *chr, s32 pad_id)
{
struct prop *prop = chr->prop;
f32 xdiff, ydiff, zdiff, ydiff_absolute;
struct pad pad;
f32 ret;
pad_id = chrResolvePadId(chr, pad_id);
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
ydiff = pad.pos.y - prop->pos.y;
zdiff = pad.pos.z - prop->pos.z;
if (ydiff > 0) {
ydiff_absolute = ydiff;
} else {
ydiff_absolute = -ydiff;
}
if (ydiff_absolute < 150) {
ret = sqrtf(xdiff * xdiff + zdiff * zdiff);
} else {
ret = 100000000;
}
return ret;
}
#endif
f32 chrGetDistanceToCoord(struct chrdata *chr, struct coord *pos)
{
f32 xdiff = pos->x - chr->prop->pos.x;
f32 ydiff = pos->y - chr->prop->pos.y;
f32 zdiff = pos->z - chr->prop->pos.z;
return sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
}
f32 chrGetLateralDistanceToCoord(struct chrdata *chr, struct coord *pos)
{
f32 xdiff = pos->x - chr->prop->pos.x;
f32 zdiff = pos->z - chr->prop->pos.z;
return sqrtf(xdiff * xdiff + zdiff * zdiff);
}
f32 chrGetLateralDistanceToPad(struct chrdata *chr, s32 pad_id)
{
struct prop *prop = chr->prop;
f32 xdiff, zdiff;
struct pad pad;
f32 distance = 0;
pad_id = chrResolvePadId(chr, pad_id);
#if VERSION >= VERSION_NTSC_1_0
if (pad_id >= 0)
#endif
{
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
zdiff = pad.pos.z - prop->pos.z;
distance = sqrtf(xdiff * xdiff + zdiff * zdiff);
}
return distance;
}
f32 chrGetSquaredDistanceToCoord(struct chrdata *chr, struct coord *pos)
{
f32 xdiff = pos->x - chr->prop->pos.x;
f32 ydiff = pos->y - chr->prop->pos.y;
f32 zdiff = pos->z - chr->prop->pos.z;
return xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
}
f32 coordGetSquaredDistanceToCoord(struct coord *a, struct coord *b)
{
f32 xdiff = a->x - b->x;
f32 ydiff = a->y - b->y;
f32 zdiff = a->z - b->z;
return xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
}
s32 chrGetPadRoom(struct chrdata *chr, s32 pad_id)
{
s32 ret = -1;
s32 pad_id_backup = pad_id;
struct pad pad;
if (pad_id >= 10000) {
s32 resolved_pad_id = chrResolvePadId(chr, pad_id - 10000);
#if VERSION >= VERSION_NTSC_1_0
if (resolved_pad_id >= 0)
#endif
{
padUnpack(resolved_pad_id, PADFIELD_ROOM, &pad);
ret = pad.room;
}
} else {
ret = pad_id;
}
return ret;
}
s32 chrResolvePadId(struct chrdata *chr, s32 pad_id)
{
if (pad_id == 9000) {
pad_id = chr->padpreset1;
}
return pad_id;
}
/**
* For all chrs, clear their target and p1p2 values if set to the given player.
*
* This function is called when the given player has died. It causes all guards
* to switch their focus to the remaining coop player.
*/
void chrsClearRefsToPlayer(s32 playernum)
{
s32 otherplayernum;
s32 playerpropnum;
s32 i;
if (g_Vars.coopplayernum >= 0) {
if (playernum == g_Vars.bondplayernum) {
otherplayernum = g_Vars.coopplayernum;
playerpropnum = g_Vars.bond->prop - g_Vars.props;
} else {
otherplayernum = g_Vars.bondplayernum;
playerpropnum = g_Vars.coop->prop - g_Vars.props;
}
for (i = 0; i < getNumChrSlots(); i++) {
if (g_ChrSlots[i].p1p2 == playernum) {
g_ChrSlots[i].p1p2 = otherplayernum;
}
if (g_ChrSlots[i].target == playerpropnum) {
g_ChrSlots[i].target = -1;
}
}
for (i = 0; i < g_NumBgChrs; i++) {
if (g_BgChrs[i].p1p2 == playernum) {
g_BgChrs[i].p1p2 = otherplayernum;
}
if (g_BgChrs[i].target == playerpropnum) {
g_BgChrs[i].target = -1;
}
}
}
}
s32 chrResolveId(struct chrdata *ref, s32 id)
{
if (ref) {
switch (id) {
case CHR_SEESHOT:
id = ref->chrseeshot;
break;
case CHR_SEEDIE:
id = ref->chrseedie;
break;
case CHR_PRESET:
id = ref->chrpreset1;
break;
case CHR_SELF:
id = ref->chrnum;
break;
case CHR_CLONE:
id = ref->chrdup;
break;
case CHR_BOND:
if (g_Vars.bond && g_Vars.bond->prop && g_Vars.bond->prop->chr) {
id = g_Vars.bond->prop->chr->chrnum;
}
break;
case CHR_COOP:
if (g_Vars.coop && g_Vars.coop->prop && g_Vars.coop->prop->chr) {
id = g_Vars.coop->prop->chr->chrnum;
}
break;
case CHR_ANTI:
if (g_Vars.anti && g_Vars.anti->prop && g_Vars.anti->prop->chr) {
id = g_Vars.anti->prop->chr->chrnum;
}
break;
case CHR_P1P2:
{
u32 index = g_Vars.coopplayernum >= 0 ? ref->p1p2 : g_Vars.bondplayernum;
struct player *player = g_Vars.players[index];
if (player && player->prop && player->prop->chr) {
id = player->prop->chr->chrnum;
}
}
break;
case CHR_P1P2_OPPOSITE:
if (g_Vars.coopplayernum >= 0) {
struct player *player = g_Vars.players[1 - ref->p1p2];
if (player && player->prop && player->prop->chr) {
id = player->prop->chr->chrnum;
}
}
break;
case CHR_TARGET:
{
struct prop *target = chrGetTargetProp(ref);
if ((target->type == PROPTYPE_CHR || target->type == PROPTYPE_PLAYER) && target->chr) {
id = target->chr->chrnum;
}
}
break;
}
} else { // ref is NULL
switch (id) {
case CHR_BOND:
if (g_Vars.bond && g_Vars.bond->prop && g_Vars.bond->prop->chr) {
id = g_Vars.bond->prop->chr->chrnum;
}
break;
case CHR_COOP:
if (g_Vars.coop && g_Vars.coop->prop && g_Vars.coop->prop->chr) {
id = g_Vars.coop->prop->chr->chrnum;
}
break;
case CHR_ANTI:
if (g_Vars.anti && g_Vars.anti->prop && g_Vars.anti->prop->chr) {
id = g_Vars.anti->prop->chr->chrnum;
}
break;
case CHR_P1P2:
{
struct player *player = g_Vars.players[g_Vars.bondplayernum];
if (player && player->prop && player->prop->chr) {
id = player->prop->chr->chrnum;
}
}
break;
case CHR_P1P2_OPPOSITE:
if (g_Vars.coopplayernum >= 0) {
struct player *player = g_Vars.players[g_Vars.coopplayernum];
if (player && player->prop && player->prop->chr) {
id = player->prop->chr->chrnum;
}
}
break;
}
}
return id;
}
struct chrdata *chrFindById(struct chrdata *basechr, s32 chrnum)
{
struct chrdata *chr;
s32 lower;
s32 upper;
s32 i;
chrnum = chrResolveId(basechr, chrnum);
chr = chrFindByLiteralId(chrnum);
if (chr) {
return chr;
}
lower = 0;
upper = g_NumBgChrs;
while (upper >= lower) {
i = (lower + upper) / 2;
if (chrnum == g_BgChrnums[i]) {
return &g_BgChrs[i];
}
if (chrnum < g_BgChrnums[i]) {
upper = i - 1;
} else {
lower = i + 1;
}
}
return NULL;
}
s32 propGetIndexByChrId(struct chrdata *basechr, s32 chrnum)
{
s32 index;
if (chrnum == CHR_BOND || chrnum == CHR_BOND) {
index = g_Vars.bond->prop - g_Vars.props;
} else {
struct chrdata *chr = chrFindById(basechr, chrnum);
if (chr && chr->prop) {
index = chr->prop - g_Vars.props;
} else {
index = -1;
}
}
return index;
}
f32 chrGetDistanceToChr(struct chrdata *chr1, s32 chr2num)
{
struct prop *prop1 = chr1->prop;
struct chrdata *chr2 = chrFindById(chr1, chr2num);
f32 distance = 0;
if (chr2 && chr2->prop) {
f32 xdiff = chr2->prop->pos.x - prop1->pos.x;
f32 ydiff = chr2->prop->pos.y - prop1->pos.y;
f32 zdiff = chr2->prop->pos.z - prop1->pos.z;
distance = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
}
return distance;
}
f32 chrGetDistanceFromTargetToPad(struct chrdata *chr, s32 pad_id)
{
struct prop *prop = chrGetTargetProp(chr);
f32 xdiff, ydiff, zdiff;
struct pad pad;
f32 distance = 0;
pad_id = chrResolvePadId(chr, pad_id);
#if VERSION >= VERSION_NTSC_1_0
if (pad_id >= 0)
#endif
{
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
ydiff = pad.pos.y - prop->pos.y;
zdiff = pad.pos.z - prop->pos.z;
distance = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
}
return distance;
}
void chrSetFlags(struct chrdata *chr, u32 flags, u8 bank)
{
if (bank == 0) {
chr->flags |= flags;
} else {
chr->flags2 |= flags;
}
}
void chrUnsetFlags(struct chrdata *chr, u32 flags, u8 bank)
{
if (bank == 0) {
chr->flags &= ~flags;
} else {
chr->flags2 &= ~flags;
}
}
bool chrHasFlag(struct chrdata *chr, u32 flag, u8 bank)
{
if (bank == 0) {
return (chr->flags & flag) != 0;
} else {
return (chr->flags2 & flag) != 0;
}
}
void chrSetFlagsById(struct chrdata *ref, u32 chrnum, u32 flags, u32 bank)
{
struct chrdata *chr = chrFindById(ref, chrnum);
if (chr) {
chrSetFlags(chr, flags, bank);
}
}
void chrUnsetFlagsById(struct chrdata *ref, u32 chrnum, u32 flags, u32 bank)
{
struct chrdata *chr = chrFindById(ref, chrnum);
if (chr) {
chrUnsetFlags(chr, flags, bank);
}
}
bool chrHasFlagById(struct chrdata *ref, u32 chrnum, u32 flag, u32 bank)
{
struct chrdata *chr = chrFindById(ref, chrnum);
if (chr) {
return chrHasFlag(chr, flag, bank);
}
return false;
}
void chrSetStageFlag(struct chrdata *chr, u32 flag)
{
g_StageFlags |= flag;
}
void chrUnsetStageFlag(struct chrdata *chr, u32 flag)
{
g_StageFlags = g_StageFlags & ~flag;
}
bool chrHasStageFlag(struct chrdata *chr, u32 flag)
{
return (g_StageFlags & flag) != 0;
}
bool chrIsHearingTarget(struct chrdata *chr)
{
return (chr->hidden & CHRHFLAG_IS_HEARING_TARGET) != 0;
}
void chrRestartTimer(struct chrdata *chr)
{
chr->timer60 = 0;
chr->hidden |= CHRHFLAG_TIMER_RUNNING;
}
f32 chrGetTimer(struct chrdata *chr)
{
return chr->timer60 * FRAMEDURATION;
}
bool chrCanSeeTargetWithExtraCheck(struct chrdata *chr)
{
struct prop *target = chrGetTargetProp(chr);
if (target) {
if (target->type == PROPTYPE_CHR) {
if (!chrCanSeeTarget(chr)) {
return false;
}
return chrIsInTargetsFovX(chr, 20);
}
if (target->type == PROPTYPE_PLAYER) {
if (g_Vars.bondvisible &&
(hasLineOfSight(&target->pos, target->rooms, &chr->prop->pos, chr->prop->rooms, 51, 8))) {
struct model *model = chr->model;
struct coord sp68;
struct coord sp56;
struct coord sp44;
f32 somefloat = func0001af80(model) * 0.8f;
func0f0a0c08(&sp68, &sp56);
modelGetRootPosition(model, &sp44);
func00015b64(currentPlayerGetMatrix1740(), &sp44);
if (func0f06b39c(&sp68, &sp56, &sp44, somefloat)) {
return true;
}
}
}
}
return false;
}
bool chrResetNearMiss(struct chrdata *chr)
{
bool has_flag = (chr->chrflags & CHRCFLAG_NEAR_MISS) != 0;
chr->chrflags &= ~CHRCFLAG_NEAR_MISS;
return has_flag;
}
s32 chrGetNumArghs(struct chrdata *chr)
{
return chr->numarghs;
}
s32 chrGetNumCloseArghs(struct chrdata *chr)
{
return chr->numclosearghs;
}
bool chrSawInjury(struct chrdata *chr, u8 arg1)
{
bool saw_injury = chr->chrseeshot >= 0;
if (saw_injury && arg1 == 0) {
chr->chrseeshot = -1;
} else if (saw_injury && arg1 == 1) {
struct chrdata *victim = chrFindById(chr, chr->chrseeshot);
if (victim && !chrCompareTeams(chr, victim, COMPARE_FRIENDS)) {
saw_injury = false;
}
} else {
chr->chrseeshot = -1;
}
return saw_injury;
}
bool chrSawDeath(struct chrdata *chr, u8 arg1)
{
bool saw_death = chr->chrseedie >= 0;
// The commented line below was likely originally there but removed before
// the final version. Compare with chrSawInjury above.
if (saw_death && arg1 == 0) {
//chr->chrseedie = -1;
} else if (saw_death && arg1 == 1) {
struct chrdata *victim = chrFindById(chr, chr->chrseedie);
if (victim && !chrCompareTeams(chr, victim, COMPARE_FRIENDS)) {
saw_death = false;
chr->chrseedie = -1;
}
} else {
chr->chrseedie = -1;
}
return saw_death;
}
void decrementByte(u8 *dst, u8 amount)
{
if (*dst < amount) {
*dst = 0;
return;
}
*dst -= amount;
}
void incrementByte(u8 *dst, u8 amount)
{
if (0xff - amount < *dst) {
*dst = 0xff;
return;
}
*dst += amount;
}
bool chrCanHearAlarm(struct chrdata *chr)
{
return alarmIsActive();
}
bool waypointIsWithin90DegreesOfPosAngle(struct waypoint *waypoint, struct coord *pos, f32 angle)
{
u32 stack[3];
f32 diffangle;
struct pad pad;
padUnpack(waypoint->padnum, PADFIELD_POS, &pad);
diffangle = angle - atan2f(pad.pos.x - pos->x, pad.pos.z - pos->z);
if (diffangle < 0) {
diffangle += M_BADTAU;
}
if (diffangle < 1.5705462694168f || diffangle > 4.7116389274597f) {
return true;
}
return false;
}
/**
* Attempt to find a waypoint near pos which is in a particular quadrant to pos,
* then return its padnum.
*
* For example, pos is typically the player's position, angle is the direction
* the player is facing, and quadrant is which quadrant (front/back/left/right)
* that is desired relative to the player's position and angle.
*
* The function starts by finding the closest waypoint to the pos. If it's not
* in the quadrant then its neighouring waypoints are checked too. If none of
* those are in the quadrant then no further checks are made and the function
* returns -1.
*/
s32 chrFindWaypointWithinPosQuadrant(struct coord *pos, s16 *rooms, f32 angle, u8 quadrant)
{
struct waypoint *waypoint = waypointFindClosestToPos(pos, rooms);
s32 neighbournum;
s32 i;
if (waypoint) {
switch (quadrant) {
case QUADRANT_BACK:
angle += M_BADPI;
break;
case QUADRANT_SIDE1:
angle += 1.5705462694168f;
break;
case QUADRANT_SIDE2:
angle += 4.7116389274597f;
break;
case QUADRANT_FRONT:
break;
}
if (angle >= M_BADTAU) {
angle -= M_BADTAU;
}
if (waypointIsWithin90DegreesOfPosAngle(waypoint, pos, angle)) {
return waypoint->padnum;
}
for (i = 0; (neighbournum = waypoint->neighbours[i]) >= 0; i++) {
if ((neighbournum & 0x8000) == 0) {
neighbournum &= 0x3fff;
if (waypointIsWithin90DegreesOfPosAngle(&g_StageSetup.waypoints[neighbournum], pos, angle)) {
return g_StageSetup.waypoints[neighbournum].padnum;
}
}
}
}
return -1;
}
bool func0f04a4ec(struct chrdata *chr, u8 quadrant)
{
if (quadrant == QUADRANT_2NDWPTOTARGET || quadrant == QUADRANT_20) {
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
struct waypoint *fromwp = waypointFindClosestToPos(&prop->pos, prop->rooms);
struct waypoint *towp = waypointFindClosestToPos(&target->pos, target->rooms);
// @dangerous: I'm creating an array overflow here to get a match.
// waypoints should have len 3 but this causes a mismatch due to too
// much stack usage. If compiling using anything other than IDO and -O2
// then this will need to be changed to 3.
s32 numwaypoints;
struct waypoint *waypoints[2];
u32 hash;
if (fromwp && towp) {
if (quadrant == QUADRANT_2NDWPTOTARGET) {
hash = (g_Vars.lvframe60 >> 9) * 128 + chr->chrnum * 8;
waypointSetHashThing(hash, hash);
numwaypoints = waypointFindRoute(fromwp, towp, waypoints, 3);
waypointSetHashThing(0, 0);
if (numwaypoints >= 3) {
chr->padpreset1 = waypoints[1]->padnum;
return true;
}
} else {
hash = (g_Vars.lvframe60 >> 9) * 128 + chr->chrnum * 8;
waypointSetHashThing(hash, hash);
fromwp = func0f1155e0(fromwp, towp);
waypointSetHashThing(0, 0);
if (fromwp) {
chr->padpreset1 = fromwp->padnum;
return true;
}
}
}
} else {
s32 padnum = chrFindWaypointWithinPosQuadrant(&chr->prop->pos, chr->prop->rooms, chrGetInverseTheta(chr), quadrant);
if (padnum >= 0) {
chr->padpreset1 = padnum;
return true;
}
}
return false;
}
bool chrSetPadPresetToWaypointWithinTargetQuadrant(struct chrdata *chr, u8 quadrant)
{
f32 angle;
s32 padnum;
struct prop *prop;
if (quadrant == QUADRANT_2NDWPTOTARGET || quadrant == QUADRANT_20) {
return func0f04a4ec(chr, quadrant);
}
angle = 0;
prop = chrGetTargetProp(chr);
if (prop->type == PROPTYPE_PLAYER) {
angle = (360.0f - g_Vars.players[propGetPlayerNum(prop)]->vv_theta) * M_BADTAU / 360.0f;
} else if (prop->type == PROPTYPE_CHR) {
angle = chrGetInverseTheta(prop->chr);
}
padnum = chrFindWaypointWithinPosQuadrant(&prop->pos, prop->rooms, angle, quadrant);
if (padnum >= 0) {
chr->padpreset1 = padnum;
return true;
}
return false;
}
bool chrSetChrPresetToAnyChrNearSelf(struct chrdata *chr, f32 distance)
{
return chrSetChrPresetToChrNearSelf(COMPARE_ANY, chr, distance);
}
bool chrSetChrPresetToChrNearSelf(u8 checktype, struct chrdata *chr, f32 distance)
{
return chrSetChrPresetToChrNearPos(checktype, chr, distance, &chr->prop->pos, chr->prop->rooms);
}
bool chrSetChrPresetToChrNearPad(u32 checktype, struct chrdata *chr, f32 distance, s32 padnum)
{
struct pad pad;
s16 rooms[2];
padnum = chrResolvePadId(chr, padnum);
padUnpack(padnum, PADFIELD_POS | PADFIELD_ROOM, &pad);
rooms[0] = pad.room;
rooms[1] = -1;
return chrSetChrPresetToChrNearPos(checktype, chr, distance, &pad.pos, rooms);
}
bool chrSetChrPresetToChrNearPos(u8 checktype, struct chrdata *chr, f32 distance, struct coord *pos, s16 *rooms)
{
s32 i;
s16 *propnumptr;
s16 propnums[256];
s16 allrooms[21];
f32 xmin = pos->x - distance;
f32 xmax = pos->x + distance;
f32 ymin = pos->y - distance;
f32 ymax = pos->y + distance;
f32 zmin = pos->z - distance;
f32 zmax = pos->z + distance;
s16 neighbours[11];
roomsCopy(rooms, allrooms);
for (i = 0; rooms[i] != -1; i++) {
roomGetNeighbours(rooms[i], neighbours, 10);
roomsAppend(neighbours, allrooms, 20);
}
roomGetProps(allrooms, propnums, 256);
propnumptr = propnums;
while (*propnumptr >= 0) {
struct prop *prop = &g_Vars.props[*propnumptr];
if (prop->type == PROPTYPE_CHR || prop->type == PROPTYPE_PLAYER) {
struct chrdata *loopchr = prop->chr;
if (loopchr->chrnum != chr->chrnum
&& !chrIsDead(loopchr)
&& prop->pos.x >= xmin
&& prop->pos.x <= xmax
&& prop->pos.y >= ymin
&& prop->pos.y <= ymax
&& prop->pos.z >= zmin
&& prop->pos.z <= zmax
&& chrCompareTeams(loopchr, chr, checktype)) {
chr->chrpreset1 = loopchr->chrnum;
return true;
}
}
*propnumptr++;
}
return false;
}
bool chrCompareTeams(struct chrdata *chr1, struct chrdata *chr2, u8 checktype)
{
if (chr1 && chr1->prop) {
if (checktype == COMPARE_ANY) {
return true;
}
if (checktype == COMPARE_FRIENDS) { // Return true if chrs are friends
if (g_Vars.normmplayerisrunning) {
if ((g_MpSetup.options & MPOPTION_TEAMSENABLED) && chr2->team == chr1->team) {
return true;
}
} else {
if (g_Vars.bond && g_Vars.bond->prop) {
struct chrdata *playerchr = g_Vars.bond->prop->chr;
// @bug: This makes Jon an ally in Duel
if ((chr2 == playerchr && chr1->headnum == HEAD_JONATHAN) ||
(chr1 == playerchr && chr2->headnum == HEAD_JONATHAN)) {
return true;
}
}
if ((chr2->team & chr1->team) != 0) {
return true;
}
}
} else if (checktype == COMPARE_ENEMIES) { // Return true if chrs are enemies
if (g_Vars.normmplayerisrunning) {
if ((g_MpSetup.options & MPOPTION_TEAMSENABLED) == 0 || chr2->team != chr1->team) {
return true;
}
} else {
if (g_Vars.bond && g_Vars.bond->prop) {
struct chrdata *playerchr = g_Vars.bond->prop->chr;
// @bug: This makes Jon an ally in Duel
if ((chr2 == playerchr && chr1->headnum == HEAD_JONATHAN) ||
(chr1 == playerchr && chr2->headnum == HEAD_JONATHAN)) {
return false;
}
}
if ((chr2->team & chr1->team) == 0) {
return true;
}
}
}
return false;
}
return false;
}
void chrSetChrPreset(struct chrdata *chr, s32 chrpreset)
{
chr->chrpreset1 = chrResolveId(chr, chrpreset);
}
void chrSetChrPresetByChrnum(struct chrdata *basechr, s32 chrnum, s32 chrpreset)
{
struct chrdata *chr = chrFindById(basechr, chrnum);
if (chr) {
chr->chrpreset1 = chrResolveId(basechr, chrpreset);
}
}
void chrSetPadPreset(struct chrdata *chr, s32 pad_id)
{
chr->padpreset1 = chrResolvePadId(chr, pad_id);
}
void chrSetPadPresetByChrnum(struct chrdata *basechr, s32 chrnum, s32 pad_id)
{
struct chrdata *chr = chrFindById(basechr, chrnum);
if (chr) {
chr->padpreset1 = chrResolvePadId(basechr, pad_id);
}
}
/**
* Check if chr has line of sight (I think?) to their target. If so, find a
* route to them, then iterate the route backwards (from target to chr). Find
* the first waypoint with line of sight and store it as the chr's pad preset.
*/
bool chrSetPadPresetToPadOnRouteToTarget(struct chrdata *chr)
{
struct prop *target = chrGetTargetProp(chr);
struct prop *prop = chr->prop;
struct waypoint *fromwp;
struct waypoint *towp;
struct waypoint *waypoints[5];
s32 numwaypoints;
s32 i;
struct pad pad;
if (target->type != PROPTYPE_PLAYER || g_Vars.bondvisible) {
if (func0002dc18(&prop->pos, prop->rooms, &target->pos, CDTYPE_BG)) {
return false;
}
fromwp = waypointFindClosestToPos(&prop->pos, prop->rooms);
towp = waypointFindClosestToPos(&target->pos, target->rooms);
if (fromwp && towp) {
u32 hash = (g_Vars.lvframe60 >> 9) * 128 + chr->chrnum * 8;
// Note from/to are swapped here, so the route is from target to chr
waypointSetHashThing(hash, hash);
numwaypoints = waypointFindRoute(towp, fromwp, waypoints, 5);
waypointSetHashThing(0, 0);
if (numwaypoints >= 3) {
for (i = 0; waypoints[i] != NULL; i++) {
struct waypoint *wp = waypoints[i];
padUnpack(wp->padnum, PADFIELD_POS, &pad);
if (func0002dc18(&target->pos, target->rooms, &pad.pos, CDTYPE_BG)) {
if (func0002dc18(&prop->pos, prop->rooms, &pad.pos, CDTYPE_BG)) {
chr->padpreset1 = wp->padnum;
return true;
}
}
}
}
}
}
return false;
}
bool func0f04aeb0(struct coord *pos, s16 *rooms)
{
bool result = true;
s32 i;
if (func0f1666f8(pos, 0)) {
for (i = 0; rooms[i] != -1; i++) {
if (roomIsVisibleByAnyPlayer(rooms[i])) {
break;
}
}
if (rooms[i] != -1) {
// Room is visible by player
result = !func0f0b5d38(pos, 200, func0f158140(rooms[i]));
}
}
return result;
}
/**
* Test if a chr can be spawned into or nearby the given position, taking into
* consideration collision checks.
*
* If the spawn can happen, the position and rooms are updated with the actual
* position to be used and the function returns true.
*
* If the spawn cannot happen, the function return false.
*/
#if VERSION >= VERSION_NTSC_1_0
bool chrAdjustPosForSpawn(f32 width, struct coord *pos, s16 *rooms, f32 angle, bool arg4, bool ignorebg, bool arg6)
{
struct coord testpos;
s32 i;
u32 types;
s16 testrooms[8];
f32 ymin;
f32 ymax = 200;
f32 curangle = angle;
f32 ground;
if (ignorebg) {
types = CDTYPE_ALL & ~CDTYPE_BG;
arg4 = true;
} else {
types = CDTYPE_ALL;
}
if (arg6) {
// Skip testing the given pos, and just do the surrounding checks below.
// Add 45 degrees to the angle here, but this isn't necessary.
curangle += 0.7852731347084f;
if (curangle >= M_BADTAU) {
curangle -= M_BADTAU;
}
} else {
// Check that the chr isn't being spawned out of bounds, and do a volume
// test reaching 200cm above and below the chr's feet... unless there is
// ground under the chr (highly likely), in which case reduce the volume
// to be tested to the ground Y value. I'm not sure why this is useful,
// because if the chr was being spawned on top of another chr or object
// then the calculated ground value would be raised.
ymin = -200;
ground = cdFindGroundYSimple(pos, width, rooms, NULL, NULL);
if (ground > -100000 && ground - pos->y < -200) {
ymin = ground - pos->y;
}
if (cdTestVolume(pos, width, rooms, types, 1, ymax, ymin) != CDRESULT_COLLISION
&& (arg4 || func0f04aeb0(pos, rooms))) {
return true;
}
}
// Try 60cm in 8 directions
for (i = 0; i < 8; i++) {
testpos.x = pos->x + sinf(curangle) * 60;
testpos.y = pos->y;
testpos.z = pos->z + cosf(curangle) * 60;
if ((arg6 && func0002d840(pos, rooms, &testpos, testrooms, CDTYPE_ALL & ~CDTYPE_PLAYERS, 1, ymax, -200) != CDRESULT_COLLISION)
|| (!arg6 && func0002deac(pos, rooms, &testpos, testrooms, CDTYPE_BG))) {
func0f021fa8(NULL, &testpos, testrooms);
ground = cdFindGroundYSimple(&testpos, width, testrooms, 0, 0);
ymin = -200;
if (ground > -100000 && ground - pos->y < -200) {
ymin = ground - pos->y;
}
if (cdTestVolume(&testpos, width, testrooms, CDTYPE_ALL, 1, ymax, ymin) != CDRESULT_COLLISION
&& (arg4 || func0f04aeb0(&testpos, testrooms))
&& (!arg6 || ground > -100000)) {
pos->x = testpos.x;
pos->y = testpos.y;
pos->z = testpos.z;
roomsCopy(testrooms, rooms);
return true;
}
}
curangle += 0.7852731347084f;
if (curangle >= M_BADTAU) {
curangle -= M_BADTAU;
}
}
return false;
}
#else
/**
* ntsc-beta's version of this function doesn't have the arg6 argument
* nor out of bounds checking, and lacks the reduction for the volume test.
*/
bool chrAdjustPosForSpawn(f32 width, struct coord *pos, s16 *rooms, f32 angle, bool arg4, bool ignorebg)
{
struct coord testpos;
s32 i;
u32 types;
s16 testrooms[8];
f32 curangle = angle;
if (ignorebg) {
types = CDTYPE_ALL & ~CDTYPE_BG;
arg4 = true;
} else {
types = CDTYPE_ALL;
}
if (cdTestVolume(pos, width, rooms, types, 1, 200, -200) != CDRESULT_COLLISION
&& (arg4 || func0f04aeb0(pos, rooms))) {
return true;
}
for (i = 0; i < 8; i++) {
testpos.x = sinf(curangle) * 60 + pos->x;
testpos.y = pos->y;
testpos.z = cosf(curangle) * 60 + pos->z;
if (func0002deac(pos, rooms, &testpos, testrooms, CDTYPE_BG)
&& cdTestVolume(&testpos, width, testrooms, CDTYPE_ALL, 1, 200, -200.0f) != CDRESULT_COLLISION
&& (arg4 || func0f04aeb0(&testpos, testrooms))) {
pos->x = testpos.x;
pos->y = testpos.y;
pos->z = testpos.z;
roomsCopy(testrooms, rooms);
return true;
}
curangle += 0.7852731347084f;
if (curangle >= M_BADTAU) {
curangle -= M_BADTAU;
}
}
return false;
}
#endif
/**
* Attempts to spawn a chr at the given coordinates.
*
* In low memory conditions, the function will iterate all existing chrs in
* search of a corpse that can be reaped. If one is found then the reap will be
* triggered, but the function will not attempt to spawn the chr until the next
* time it's called.
*/
struct prop *chrSpawnAtCoord(s32 bodynum, s32 headnum, struct coord *pos, s16 *rooms, f32 angle, u8 *ailist, u32 spawnflags)
{
struct prop *prop;
struct coord pos2;
s16 rooms2[8];
s32 stack;
if (getNumFreeChrSlots() > 1) {
if (headnum < 0) {
headnum = bodyChooseHead(bodynum);
}
pos2.x = pos->x;
pos2.y = pos->y;
pos2.z = pos->z;
roomsCopy(rooms, rooms2);
#if VERSION >= VERSION_NTSC_1_0
if (chrAdjustPosForSpawn(20, &pos2, rooms2, angle, (spawnflags & SPAWNFLAG_00000010) != 0, 0, 0))
#else
if (chrAdjustPosForSpawn(20, &pos2, rooms2, angle, (spawnflags & SPAWNFLAG_00000010) != 0, 0))
#endif
{
struct model *model = modelAllocateChr(bodynum, headnum, spawnflags);
struct chrdata *chr;
if (model) {
prop = propAllocateChr(model, &pos2, rooms2, angle, ailist);
if (prop) {
propAppendToList1(prop);
propShow(prop);
chr = prop->chr;
chr->headnum = headnum;
chr->bodynum = bodynum;
chr->race = bodyGetRace(chr->bodynum);
chr->flags = 0;
chr->flags2 = 0;
#if VERSION >= VERSION_NTSC_1_0
chr->hidden2 |= CHRH2FLAG_0080;
#endif
if (spawnflags & SPAWNFLAG_NOBLOOD) {
chr->noblood = true;
}
return prop;
}
modelFree(model);
}
}
}
// Low memory - find a corpse to reap
if (getNumFreeChrSlots() < 4) {
#if VERSION >= VERSION_NTSC_1_0
s32 stack2;
#endif
struct chrdata *replacechr = NULL;
s32 startindex = random() % g_NumChrSlots;
s32 index = startindex;
do {
if (g_ChrSlots[index].chrnum >= 0 && g_ChrSlots[index].model && g_ChrSlots[index].prop) {
if (g_ChrSlots[index].actiontype == ACT_DEAD
#if VERSION >= VERSION_NTSC_1_0
|| (g_ChrSlots[index].actiontype == ACT_DRUGGEDKO && (g_ChrSlots[index].chrflags & CHRCFLAG_KEEPCORPSEKO) == 0)
#endif
) {
// If we've found a chr that's ready to be reaped, great.
// Bail out of the loop.
if (g_ChrSlots[index].act_dead.reaptimer >= PALDOWN(120)) {
replacechr = &g_ChrSlots[index];
break;
}
// Otherwise, this chr is dead/KO'ed and can be reaped as a
// last resort, so store them and keep looping in search of
// a better chr.
if (replacechr == NULL) {
replacechr = &g_ChrSlots[index];
}
}
}
index = (index + 1) % g_NumChrSlots;
} while (index != startindex);
if (replacechr) {
replacechr->act_dead.allowreap = true;
replacechr->act_dead.allowfade = true;
}
}
return NULL;
}
struct prop *chrSpawnAtPad(struct chrdata *basechr, s32 body, s32 head, s32 pad_id, u8 *ailist, u32 spawnflags)
{
s32 resolved_pad_id = chrResolvePadId(basechr, pad_id);
struct pad pad;
s16 room[2];
f32 fvalue;
padUnpack(resolved_pad_id, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_ROOM, &pad);
fvalue = atan2f(pad.look.x, pad.look.z);
room[0] = pad.room;
room[1] = -1;
return chrSpawnAtCoord(body, head, &pad.pos, &room[0], fvalue, ailist, spawnflags);
}
struct prop *chrSpawnAtChr(struct chrdata *basechr, s32 body, s32 head, u32 chrnum, u8 *ailist, u32 spawnflags)
{
struct chrdata *chr = chrFindById(basechr, chrnum);
f32 fvalue;
if (1) {
fvalue = chrGetInverseTheta(chr);
}
return chrSpawnAtCoord(body, head, &chr->prop->pos, chr->prop->rooms, fvalue, ailist, spawnflags);
}
bool func0f04b658(struct chrdata *chr)
{
bool result = false;
struct prop *prop = chr->prop;
struct prop *target = chrGetTargetProp(chr);
if (chr->proppreset1 >= 0) {
chrSetOrUnsetHiddenFlag00000100(chr, false);
propSetCollisionsEnabled(target, false);
if (!func0002dc18(&prop->pos, prop->rooms, &target->pos, 0x33)) {
struct prop *thing = cdGetObstacle();
if (thing && thing->type == PROPTYPE_OBJ
&& chr->proppreset1 == (s16)(thing - g_Vars.props)) {
result = true;
}
}
chrSetOrUnsetHiddenFlag00000100(chr, true);
propSetCollisionsEnabled(target, true);
}
return result;
}
void func0f04b740(void)
{
// empty
}
bool chrMoveToPos(struct chrdata *chr, struct coord *pos, s16 *rooms, f32 angle, bool allowonscreen)
{
struct coord pos2;
s16 rooms2[8];
bool result = false;
u32 nodetype;
union modelrwdata *rwdata;
struct player *player;
f32 ground;
pos2.x = pos->x;
pos2.y = pos->y;
pos2.z = pos->z;
roomsCopy(rooms, rooms2);
propSetCollisionsEnabled(chr->prop, false);
#if VERSION >= VERSION_NTSC_1_0
if (chrAdjustPosForSpawn(chr->chrwidth, &pos2, rooms2, angle, (chr->hidden & CHRHFLAG_00100000) != 0, allowonscreen, (chr->hidden & CHRHFLAG_00000200) != 0))
#else
if (chrAdjustPosForSpawn(chr->chrwidth, &pos2, rooms2, angle, (chr->hidden & CHRHFLAG_00100000) != 0, allowonscreen))
#endif
{
ground = cdFindGroundY(&pos2, chr->chrwidth, rooms2, &chr->floorcol,
&chr->floortype, NULL, &chr->floorroom, NULL, NULL);
chr->ground = ground;
chr->manground = ground;
chr->sumground = ground * (PAL ? 8.4175090789795f : 9.999998f);
chr->prop->pos.x = pos2.x;
chr->prop->pos.y = pos2.y;
chr->prop->pos.z = pos2.z;
func0f065c44(chr->prop);
roomsCopy(rooms2, chr->prop->rooms);
func0f0220ac(chr);
modelSetRootPosition(chr->model, &pos2);
nodetype = chr->model->filedata->rootnode->type;
if ((nodetype & 0xff) == MODELNODETYPE_CHRINFO) {
rwdata = modelGetNodeRwData(chr->model, chr->model->filedata->rootnode);
rwdata->chrinfo.ground = ground;
}
chr->chrflags |= CHRCFLAG_00000001;
chrSetLookAngle(chr, angle);
if (chr->prop->type == PROPTYPE_PLAYER) {
player = g_Vars.players[propGetPlayerNum(chr->prop)];
player->vv_manground = ground;
player->vv_ground = ground;
player->vv_theta = ((M_BADTAU - angle) * 360.0f) / M_BADTAU;
player->vv_verta = 0;
player->unk1c64 = 1;
}
result = true;
}
propSetCollisionsEnabled(chr->prop, true);
return result;
}
bool chrCheckCoverOutOfSight(struct chrdata *chr, s32 covernum, bool arg2)
{
struct cover cover;
struct prop *target;
bool targetcanseecover;
// @bug: Should be >= coverGetCount()
if (covernum < 0 || covernum > coverGetCount() || !coverUnpack(covernum, &cover)) {
return false;
}
target = chrGetTargetProp(chr);
if (!target) {
return false;
}
if (arg2) {
targetcanseecover = func0002db98(&target->pos, target->rooms, cover.pos, 35, 8);
} else {
targetcanseecover = func0002f450(&target->pos, target->rooms, cover.pos, 50, 35);
}
if (!targetcanseecover != false) {
// Target can't see cover
coverSetFlag0001(covernum, true);
return true;
}
coverSetFlag0001(covernum, false);
return false;
}
GLOBAL_ASM(
glabel func0f04ba34
/* f04ba34: 27bdff48 */ addiu $sp,$sp,-184
/* f04ba38: afbf003c */ sw $ra,0x3c($sp)
/* f04ba3c: afb40028 */ sw $s4,0x28($sp)
/* f04ba40: afa500bc */ sw $a1,0xbc($sp)
/* f04ba44: 0080a025 */ or $s4,$a0,$zero
/* f04ba48: afbe0038 */ sw $s8,0x38($sp)
/* f04ba4c: afb70034 */ sw $s7,0x34($sp)
/* f04ba50: afb60030 */ sw $s6,0x30($sp)
/* f04ba54: afb5002c */ sw $s5,0x2c($sp)
/* f04ba58: afb30024 */ sw $s3,0x24($sp)
/* f04ba5c: afb20020 */ sw $s2,0x20($sp)
/* f04ba60: afb1001c */ sw $s1,0x1c($sp)
/* f04ba64: afb00018 */ sw $s0,0x18($sp)
/* f04ba68: afa600c0 */ sw $a2,0xc0($sp)
/* f04ba6c: 0fc458b4 */ jal coverGetCount
/* f04ba70: a7a500be */ sh $a1,0xbe($sp)
/* f04ba74: afa20078 */ sw $v0,0x78($sp)
/* f04ba78: 0000f025 */ or $s8,$zero,$zero
/* f04ba7c: 0fc0a221 */ jal chrGetTargetProp
/* f04ba80: 02802025 */ or $a0,$s4,$zero
/* f04ba84: 8e8f001c */ lw $t7,0x1c($s4)
/* f04ba88: 3c01432a */ lui $at,0x432a
/* f04ba8c: 44813000 */ mtc1 $at,$f6
/* f04ba90: c5e4000c */ lwc1 $f4,0xc($t7)
/* f04ba94: 97b100be */ lhu $s1,0xbe($sp)
/* f04ba98: 8fa400c0 */ lw $a0,0xc0($sp)
/* f04ba9c: 46062200 */ add.s $f8,$f4,$f6
/* f04baa0: 32384000 */ andi $t8,$s1,0x4000
/* f04baa4: 0040b025 */ or $s6,$v0,$zero
/* f04baa8: 00009825 */ or $s3,$zero,$zero
/* f04baac: e7a80060 */ swc1 $f8,0x60($sp)
/* f04bab0: 1300000a */ beqz $t8,.L0f04badc
/* f04bab4: 0080b825 */ or $s7,$a0,$zero
/* f04bab8: 8e8202d4 */ lw $v0,0x2d4($s4)
/* f04babc: 10400004 */ beqz $v0,.L0f04bad0
/* f04bac0: 00000000 */ nop
/* f04bac4: 8c430010 */ lw $v1,0x10($v0)
/* f04bac8: 54600004 */ bnezl $v1,.L0f04badc
/* f04bacc: afa30058 */ sw $v1,0x58($sp)
.L0f04bad0:
/* f04bad0: 1000013e */ b .L0f04bfcc
/* f04bad4: 2402ffff */ addiu $v0,$zero,-1
/* f04bad8: afa30058 */ sw $v1,0x58($sp)
.L0f04badc:
/* f04badc: 16800003 */ bnez $s4,.L0f04baec
/* f04bae0: 00000000 */ nop
/* f04bae4: 10000139 */ b .L0f04bfcc
/* f04bae8: 00001025 */ or $v0,$zero,$zero
.L0f04baec:
/* f04baec: 00840019 */ multu $a0,$a0
/* f04baf0: 8fa80078 */ lw $t0,0x78($sp)
/* f04baf4: 86990292 */ lh $t9,0x292($s4)
/* f04baf8: 3c12800a */ lui $s2,%hi(var800a2368)
/* f04bafc: 26522368 */ addiu $s2,$s2,%lo(var800a2368)
/* f04bb00: 00008025 */ or $s0,$zero,$zero
/* f04bb04: 27b500a0 */ addiu $s5,$sp,0xa0
/* f04bb08: afb90084 */ sw $t9,0x84($sp)
/* f04bb0c: 00002012 */ mflo $a0
/* f04bb10: 190000ba */ blez $t0,.L0f04bdfc
/* f04bb14: 00000000 */ nop
/* f04bb18: afa400c0 */ sw $a0,0xc0($sp)
/* f04bb1c: 02002025 */ or $a0,$s0,$zero
.L0f04bb20:
/* f04bb20: 0fc458b8 */ jal coverUnpack
/* f04bb24: 27a50098 */ addiu $a1,$sp,0x98
/* f04bb28: 504000b0 */ beqzl $v0,.L0f04bdec
/* f04bb2c: 8fae0078 */ lw $t6,0x78($sp)
/* f04bb30: 0fc4596c */ jal coverIsSpecial
/* f04bb34: 27a40098 */ addiu $a0,$sp,0x98
/* f04bb38: 144000ab */ bnez $v0,.L0f04bde8
/* f04bb3c: 32292000 */ andi $t1,$s1,0x2000
/* f04bb40: 11200003 */ beqz $t1,.L0f04bb50
/* f04bb44: 97aa00a4 */ lhu $t2,0xa4($sp)
/* f04bb48: 314b0010 */ andi $t3,$t2,0x10
/* f04bb4c: 116000a6 */ beqz $t3,.L0f04bde8
.L0f04bb50:
/* f04bb50: 322c1000 */ andi $t4,$s1,0x1000
/* f04bb54: 15800007 */ bnez $t4,.L0f04bb74
/* f04bb58: 97ad00a4 */ lhu $t5,0xa4($sp)
/* f04bb5c: 31ae0008 */ andi $t6,$t5,0x8
/* f04bb60: 11c00004 */ beqz $t6,.L0f04bb74
/* f04bb64: 02a02025 */ or $a0,$s5,$zero
/* f04bb68: 0fc19620 */ jal arrayIntersects
/* f04bb6c: 26c50028 */ addiu $a1,$s6,0x28
/* f04bb70: 1440009d */ bnez $v0,.L0f04bde8
.L0f04bb74:
/* f04bb74: 322f0001 */ andi $t7,$s1,0x1
/* f04bb78: 11e00006 */ beqz $t7,.L0f04bb94
/* f04bb7c: 00009825 */ or $s3,$zero,$zero
/* f04bb80: 32380002 */ andi $t8,$s1,0x2
/* f04bb84: 13000003 */ beqz $t8,.L0f04bb94
/* f04bb88: 02202825 */ or $a1,$s1,$zero
/* f04bb8c: 24130001 */ addiu $s3,$zero,0x1
/* f04bb90: 30b1fffc */ andi $s1,$a1,0xfffc
.L0f04bb94:
/* f04bb94: 32280010 */ andi $t0,$s1,0x10
/* f04bb98: 11000002 */ beqz $t0,.L0f04bba4
/* f04bb9c: 8fa90084 */ lw $t1,0x84($sp)
/* f04bba0: 12090091 */ beq $s0,$t1,.L0f04bde8
.L0f04bba4:
/* f04bba4: 322a2000 */ andi $t2,$s1,0x2000
/* f04bba8: 5540000b */ bnezl $t2,.L0f04bbd8
/* f04bbac: 322c0040 */ andi $t4,$s1,0x40
/* f04bbb0: 0fc45917 */ jal coverIsInUse
/* f04bbb4: 02002025 */ or $a0,$s0,$zero
/* f04bbb8: 1440008b */ bnez $v0,.L0f04bde8
/* f04bbbc: 8fab0098 */ lw $t3,0x98($sp)
/* f04bbc0: c7aa0060 */ lwc1 $f10,0x60($sp)
/* f04bbc4: c5700004 */ lwc1 $f16,0x4($t3)
/* f04bbc8: 4610503c */ c.lt.s $f10,$f16
/* f04bbcc: 00000000 */ nop
/* f04bbd0: 45010085 */ bc1t .L0f04bde8
/* f04bbd4: 322c0040 */ andi $t4,$s1,0x40
.L0f04bbd8:
/* f04bbd8: 322d0800 */ andi $t5,$s1,0x800
/* f04bbdc: afac004c */ sw $t4,0x4c($sp)
/* f04bbe0: 11a00003 */ beqz $t5,.L0f04bbf0
/* f04bbe4: 32230080 */ andi $v1,$s1,0x80
/* f04bbe8: 1000000b */ b .L0f04bc18
/* f04bbec: 8e82001c */ lw $v0,0x1c($s4)
.L0f04bbf0:
/* f04bbf0: 322e0400 */ andi $t6,$s1,0x400
/* f04bbf4: 11c00003 */ beqz $t6,.L0f04bc04
/* f04bbf8: 322f0008 */ andi $t7,$s1,0x8
/* f04bbfc: 10000006 */ b .L0f04bc18
/* f04bc00: 02c01025 */ or $v0,$s6,$zero
.L0f04bc04:
/* f04bc04: 51e00004 */ beqzl $t7,.L0f04bc18
/* f04bc08: 8e82001c */ lw $v0,0x1c($s4)
/* f04bc0c: 10000002 */ b .L0f04bc18
/* f04bc10: 02c01025 */ or $v0,$s6,$zero
/* f04bc14: 8e82001c */ lw $v0,0x1c($s4)
.L0f04bc18:
/* f04bc18: 84580028 */ lh $t8,0x28($v0)
/* f04bc1c: 2419ffff */ addiu $t9,$zero,-1
/* f04bc20: a7b900aa */ sh $t9,0xaa($sp)
/* f04bc24: 10600007 */ beqz $v1,.L0f04bc44
/* f04bc28: a7b800a8 */ sh $t8,0xa8($sp)
/* f04bc2c: 84440028 */ lh $a0,0x28($v0)
/* f04bc30: 27a500aa */ addiu $a1,$sp,0xaa
/* f04bc34: 0fc5916a */ jal roomGetNeighbours
/* f04bc38: 24060006 */ addiu $a2,$zero,0x6
/* f04bc3c: 10000008 */ b .L0f04bc60
/* f04bc40: 8fa9004c */ lw $t1,0x4c($sp)
.L0f04bc44:
/* f04bc44: 32280100 */ andi $t0,$s1,0x100
/* f04bc48: 11000004 */ beqz $t0,.L0f04bc5c
/* f04bc4c: 27a500a8 */ addiu $a1,$sp,0xa8
/* f04bc50: 84440028 */ lh $a0,0x28($v0)
/* f04bc54: 0fc5916a */ jal roomGetNeighbours
/* f04bc58: 24060007 */ addiu $a2,$zero,0x7
.L0f04bc5c:
/* f04bc5c: 8fa9004c */ lw $t1,0x4c($sp)
.L0f04bc60:
/* f04bc60: 02a02025 */ or $a0,$s5,$zero
/* f04bc64: 51200005 */ beqzl $t1,.L0f04bc7c
/* f04bc68: 322a0020 */ andi $t2,$s1,0x20
/* f04bc6c: 0fc19620 */ jal arrayIntersects
/* f04bc70: 27a500a8 */ addiu $a1,$sp,0xa8
/* f04bc74: 1440005c */ bnez $v0,.L0f04bde8
/* f04bc78: 322a0020 */ andi $t2,$s1,0x20
.L0f04bc7c:
/* f04bc7c: 11400005 */ beqz $t2,.L0f04bc94
/* f04bc80: 02a02025 */ or $a0,$s5,$zero
/* f04bc84: 0fc19620 */ jal arrayIntersects
/* f04bc88: 27a500a8 */ addiu $a1,$sp,0xa8
/* f04bc8c: 50400057 */ beqzl $v0,.L0f04bdec
/* f04bc90: 8fae0078 */ lw $t6,0x78($sp)
.L0f04bc94:
/* f04bc94: 87ab00aa */ lh $t3,0xaa($sp)
/* f04bc98: 2401ffff */ addiu $at,$zero,-1
/* f04bc9c: 5161000c */ beql $t3,$at,.L0f04bcd0
/* f04bca0: 322e0004 */ andi $t6,$s1,0x4
/* f04bca4: 868c02b8 */ lh $t4,0x2b8($s4)
/* f04bca8: 2401ffff */ addiu $at,$zero,-1
/* f04bcac: 322d0200 */ andi $t5,$s1,0x200
/* f04bcb0: 51810007 */ beql $t4,$at,.L0f04bcd0
/* f04bcb4: 322e0004 */ andi $t6,$s1,0x4
/* f04bcb8: 11a00004 */ beqz $t5,.L0f04bccc
/* f04bcbc: 02a02025 */ or $a0,$s5,$zero
/* f04bcc0: 0fc19620 */ jal arrayIntersects
/* f04bcc4: 268502b8 */ addiu $a1,$s4,0x2b8
/* f04bcc8: 14400047 */ bnez $v0,.L0f04bde8
.L0f04bccc:
/* f04bccc: 322e0004 */ andi $t6,$s1,0x4
.L0f04bcd0:
/* f04bcd0: 11c00006 */ beqz $t6,.L0f04bcec
/* f04bcd4: 322f0008 */ andi $t7,$s1,0x8
/* f04bcd8: 02802025 */ or $a0,$s4,$zero
/* f04bcdc: 0fc12555 */ jal chrGetSquaredDistanceToCoord
/* f04bce0: 8fa50098 */ lw $a1,0x98($sp)
/* f04bce4: 10000021 */ b .L0f04bd6c
/* f04bce8: 46000306 */ mov.s $f12,$f0
.L0f04bcec:
/* f04bcec: 11e00006 */ beqz $t7,.L0f04bd08
/* f04bcf0: 32384000 */ andi $t8,$s1,0x4000
/* f04bcf4: 26c40008 */ addiu $a0,$s6,0x8
/* f04bcf8: 0fc12565 */ jal coordGetSquaredDistanceToCoord
/* f04bcfc: 8fa50098 */ lw $a1,0x98($sp)
/* f04bd00: 1000001a */ b .L0f04bd6c
/* f04bd04: 46000306 */ mov.s $f12,$f0
.L0f04bd08:
/* f04bd08: 13000006 */ beqz $t8,.L0f04bd24
/* f04bd0c: 8fa40058 */ lw $a0,0x58($sp)
/* f04bd10: 24840008 */ addiu $a0,$a0,0x8
/* f04bd14: 0fc12565 */ jal coordGetSquaredDistanceToCoord
/* f04bd18: 8fa50098 */ lw $a1,0x98($sp)
/* f04bd1c: 10000013 */ b .L0f04bd6c
/* f04bd20: 46000306 */ mov.s $f12,$f0
.L0f04bd24:
/* f04bd24: 52600010 */ beqzl $s3,.L0f04bd68
/* f04bd28: 44806000 */ mtc1 $zero,$f12
/* f04bd2c: 0c004b70 */ jal random
/* f04bd30: 00000000 */ nop
/* f04bd34: 3401f000 */ dli $at,0xf000
/* f04bd38: 0041001b */ divu $zero,$v0,$at
/* f04bd3c: 0000c810 */ mfhi $t9
/* f04bd40: 44999000 */ mtc1 $t9,$f18
/* f04bd44: 3c014f80 */ lui $at,0x4f80
/* f04bd48: 07210008 */ bgez $t9,.L0f04bd6c
/* f04bd4c: 46809320 */ cvt.s.w $f12,$f18
/* f04bd50: 44812000 */ mtc1 $at,$f4
/* f04bd54: 00000000 */ nop
/* f04bd58: 46046300 */ add.s $f12,$f12,$f4
/* f04bd5c: 10000003 */ b .L0f04bd6c
/* f04bd60: 00000000 */ nop
/* f04bd64: 44806000 */ mtc1 $zero,$f12
.L0f04bd68:
/* f04bd68: 0000b825 */ or $s7,$zero,$zero
.L0f04bd6c:
/* f04bd6c: 12e00013 */ beqz $s7,.L0f04bdbc
/* f04bd70: 001e2100 */ sll $a0,$s8,0x4
/* f04bd74: 06e10008 */ bgez $s7,.L0f04bd98
/* f04bd78: 8fa800c0 */ lw $t0,0xc0($sp)
/* f04bd7c: 44883000 */ mtc1 $t0,$f6
/* f04bd80: 00000000 */ nop
/* f04bd84: 46803220 */ cvt.s.w $f8,$f6
/* f04bd88: 460c403c */ c.lt.s $f8,$f12
/* f04bd8c: 00000000 */ nop
/* f04bd90: 4501000a */ bc1t .L0f04bdbc
/* f04bd94: 00000000 */ nop
.L0f04bd98:
/* f04bd98: 1ae00013 */ blez $s7,.L0f04bde8
/* f04bd9c: 8fa900c0 */ lw $t1,0xc0($sp)
/* f04bda0: 44895000 */ mtc1 $t1,$f10
/* f04bda4: 00000000 */ nop
/* f04bda8: 46805420 */ cvt.s.w $f16,$f10
/* f04bdac: 4610603c */ c.lt.s $f12,$f16
/* f04bdb0: 00000000 */ nop
/* f04bdb4: 4502000d */ bc1fl .L0f04bdec
/* f04bdb8: 8fae0078 */ lw $t6,0x78($sp)
.L0f04bdbc:
/* f04bdbc: 0c00169f */ jal __f_to_ull
/* f04bdc0: afa40050 */ sw $a0,0x50($sp)
/* f04bdc4: 8fa40050 */ lw $a0,0x50($sp)
/* f04bdc8: 8e4a0000 */ lw $t2,0x0($s2)
/* f04bdcc: 27de0001 */ addiu $s8,$s8,0x1
/* f04bdd0: 01445821 */ addu $t3,$t2,$a0
/* f04bdd4: ad620000 */ sw $v0,0x0($t3)
/* f04bdd8: ad630004 */ sw $v1,0x4($t3)
/* f04bddc: 8e4c0000 */ lw $t4,0x0($s2)
/* f04bde0: 01846821 */ addu $t5,$t4,$a0
/* f04bde4: adb00008 */ sw $s0,0x8($t5)
.L0f04bde8:
/* f04bde8: 8fae0078 */ lw $t6,0x78($sp)
.L0f04bdec:
/* f04bdec: 26100001 */ addiu $s0,$s0,0x1
/* f04bdf0: 560eff4b */ bnel $s0,$t6,.L0f04bb20
/* f04bdf4: 02002025 */ or $a0,$s0,$zero
/* f04bdf8: 00008025 */ or $s0,$zero,$zero
.L0f04bdfc:
/* f04bdfc: 3c12800a */ lui $s2,%hi(var800a2368)
/* f04be00: 2bc10002 */ slti $at,$s8,0x2
/* f04be04: 1420004b */ bnez $at,.L0f04bf34
/* f04be08: 26522368 */ addiu $s2,$s2,%lo(var800a2368)
/* f04be0c: 27c6ffff */ addiu $a2,$s8,-1
/* f04be10: 27a30088 */ addiu $v1,$sp,0x88
.L0f04be14:
/* f04be14: 18c00045 */ blez $a2,.L0f04bf2c
/* f04be18: 00002825 */ or $a1,$zero,$zero
/* f04be1c: 32240001 */ andi $a0,$s1,0x1
.L0f04be20:
/* f04be20: 14800005 */ bnez $a0,.L0f04be38
/* f04be24: 322f4000 */ andi $t7,$s1,0x4000
/* f04be28: 55e00004 */ bnezl $t7,.L0f04be3c
/* f04be2c: 8e580000 */ lw $t8,0x0($s2)
/* f04be30: 5260000f */ beqzl $s3,.L0f04be70
/* f04be34: 32390002 */ andi $t9,$s1,0x2
.L0f04be38:
/* f04be38: 8e580000 */ lw $t8,0x0($s2)
.L0f04be3c:
/* f04be3c: 00103900 */ sll $a3,$s0,0x4
/* f04be40: 03071021 */ addu $v0,$t8,$a3
/* f04be44: 8c480010 */ lw $t0,0x10($v0)
/* f04be48: 8c4a0000 */ lw $t2,0x0($v0)
/* f04be4c: 8c490014 */ lw $t1,0x14($v0)
/* f04be50: 8c4b0004 */ lw $t3,0x4($v0)
/* f04be54: 010a082b */ sltu $at,$t0,$t2
/* f04be58: 14200015 */ bnez $at,.L0f04beb0
/* f04be5c: 0148082b */ sltu $at,$t2,$t0
/* f04be60: 14200002 */ bnez $at,.L0f04be6c
/* f04be64: 012b082b */ sltu $at,$t1,$t3
/* f04be68: 14200011 */ bnez $at,.L0f04beb0
.L0f04be6c:
/* f04be6c: 32390002 */ andi $t9,$s1,0x2
.L0f04be70:
/* f04be70: 5320002b */ beqzl $t9,.L0f04bf20
/* f04be74: 26100001 */ addiu $s0,$s0,0x1
/* f04be78: 8e4c0000 */ lw $t4,0x0($s2)
/* f04be7c: 00103900 */ sll $a3,$s0,0x4
/* f04be80: 01871021 */ addu $v0,$t4,$a3
/* f04be84: 8c4e0000 */ lw $t6,0x0($v0)
/* f04be88: 8c580010 */ lw $t8,0x10($v0)
/* f04be8c: 8c4f0004 */ lw $t7,0x4($v0)
/* f04be90: 8c590014 */ lw $t9,0x14($v0)
/* f04be94: 030e082b */ sltu $at,$t8,$t6
/* f04be98: 14200020 */ bnez $at,.L0f04bf1c
/* f04be9c: 01d8082b */ sltu $at,$t6,$t8
/* f04bea0: 14200003 */ bnez $at,.L0f04beb0
/* f04bea4: 01f9082b */ sltu $at,$t7,$t9
/* f04bea8: 5020001d */ beqzl $at,.L0f04bf20
/* f04beac: 26100001 */ addiu $s0,$s0,0x1
.L0f04beb0:
/* f04beb0: 8c410000 */ lw $at,0x0($v0)
/* f04beb4: 24050001 */ addiu $a1,$zero,0x1
/* f04beb8: ac610000 */ sw $at,0x0($v1)
/* f04bebc: 8c480004 */ lw $t0,0x4($v0)
/* f04bec0: ac680004 */ sw $t0,0x4($v1)
/* f04bec4: 8c410008 */ lw $at,0x8($v0)
/* f04bec8: ac610008 */ sw $at,0x8($v1)
/* f04becc: 8c48000c */ lw $t0,0xc($v0)
/* f04bed0: ac68000c */ sw $t0,0xc($v1)
/* f04bed4: 8c4a0014 */ lw $t2,0x14($v0)
/* f04bed8: 8c410010 */ lw $at,0x10($v0)
/* f04bedc: ac4a0004 */ sw $t2,0x4($v0)
/* f04bee0: ac410000 */ sw $at,0x0($v0)
/* f04bee4: 8c410018 */ lw $at,0x18($v0)
/* f04bee8: 8c4a001c */ lw $t2,0x1c($v0)
/* f04beec: ac410008 */ sw $at,0x8($v0)
/* f04bef0: ac4a000c */ sw $t2,0xc($v0)
/* f04bef4: 8e4b0000 */ lw $t3,0x0($s2)
/* f04bef8: 8c610000 */ lw $at,0x0($v1)
/* f04befc: 01676021 */ addu $t4,$t3,$a3
/* f04bf00: ad810010 */ sw $at,0x10($t4)
/* f04bf04: 8c6f0004 */ lw $t7,0x4($v1)
/* f04bf08: ad8f0014 */ sw $t7,0x14($t4)
/* f04bf0c: 8c610008 */ lw $at,0x8($v1)
/* f04bf10: ad810018 */ sw $at,0x18($t4)
/* f04bf14: 8c6f000c */ lw $t7,0xc($v1)
/* f04bf18: ad8f001c */ sw $t7,0x1c($t4)
.L0f04bf1c:
/* f04bf1c: 26100001 */ addiu $s0,$s0,0x1
.L0f04bf20:
/* f04bf20: 1606ffbf */ bne $s0,$a2,.L0f04be20
/* f04bf24: 00000000 */ nop
/* f04bf28: 00008025 */ or $s0,$zero,$zero
.L0f04bf2c:
/* f04bf2c: 14a0ffb9 */ bnez $a1,.L0f04be14
/* f04bf30: 00000000 */ nop
.L0f04bf34:
/* f04bf34: 1bc00024 */ blez $s8,.L0f04bfc8
/* f04bf38: 00003825 */ or $a3,$zero,$zero
/* f04bf3c: 32388000 */ andi $t8,$s1,0x8000
/* f04bf40: afb80050 */ sw $t8,0x50($sp)
.L0f04bf44:
/* f04bf44: 8e420000 */ lw $v0,0x0($s2)
/* f04bf48: 02802025 */ or $a0,$s4,$zero
/* f04bf4c: 8fa60050 */ lw $a2,0x50($sp)
/* f04bf50: 0047c821 */ addu $t9,$v0,$a3
/* f04bf54: 8f250008 */ lw $a1,0x8($t9)
/* f04bf58: 0fc12e54 */ jal chrCheckCoverOutOfSight
/* f04bf5c: afa70048 */ sw $a3,0x48($sp)
/* f04bf60: 10400016 */ beqz $v0,.L0f04bfbc
/* f04bf64: 8fa70048 */ lw $a3,0x48($sp)
/* f04bf68: 8e4d0000 */ lw $t5,0x0($s2)
/* f04bf6c: 2401ffff */ addiu $at,$zero,-1
/* f04bf70: 00002825 */ or $a1,$zero,$zero
/* f04bf74: 01a74021 */ addu $t0,$t5,$a3
/* f04bf78: 8d090008 */ lw $t1,0x8($t0)
/* f04bf7c: a6890292 */ sh $t1,0x292($s4)
/* f04bf80: 8faa0084 */ lw $t2,0x84($sp)
/* f04bf84: 11410004 */ beq $t2,$at,.L0f04bf98
/* f04bf88: 01402025 */ or $a0,$t2,$zero
/* f04bf8c: 0fc45929 */ jal coverSetInUse
/* f04bf90: afa70048 */ sw $a3,0x48($sp)
/* f04bf94: 8fa70048 */ lw $a3,0x48($sp)
.L0f04bf98:
/* f04bf98: 86840292 */ lh $a0,0x292($s4)
/* f04bf9c: afa70048 */ sw $a3,0x48($sp)
/* f04bfa0: 0fc45929 */ jal coverSetInUse
/* f04bfa4: 24050001 */ addiu $a1,$zero,0x1
/* f04bfa8: 8fa70048 */ lw $a3,0x48($sp)
/* f04bfac: 8e4b0000 */ lw $t3,0x0($s2)
/* f04bfb0: 01677021 */ addu $t6,$t3,$a3
/* f04bfb4: 10000005 */ b .L0f04bfcc
/* f04bfb8: 8dc20008 */ lw $v0,0x8($t6)
.L0f04bfbc:
/* f04bfbc: 26100001 */ addiu $s0,$s0,0x1
/* f04bfc0: 161effe0 */ bne $s0,$s8,.L0f04bf44
/* f04bfc4: 24e70010 */ addiu $a3,$a3,0x10
.L0f04bfc8:
/* f04bfc8: 2402ffff */ addiu $v0,$zero,-1
.L0f04bfcc:
/* f04bfcc: 8fbf003c */ lw $ra,0x3c($sp)
/* f04bfd0: 8fb00018 */ lw $s0,0x18($sp)
/* f04bfd4: 8fb1001c */ lw $s1,0x1c($sp)
/* f04bfd8: 8fb20020 */ lw $s2,0x20($sp)
/* f04bfdc: 8fb30024 */ lw $s3,0x24($sp)
/* f04bfe0: 8fb40028 */ lw $s4,0x28($sp)
/* f04bfe4: 8fb5002c */ lw $s5,0x2c($sp)
/* f04bfe8: 8fb60030 */ lw $s6,0x30($sp)
/* f04bfec: 8fb70034 */ lw $s7,0x34($sp)
/* f04bff0: 8fbe0038 */ lw $s8,0x38($sp)
/* f04bff4: 03e00008 */ jr $ra
/* f04bff8: 27bd00b8 */ addiu $sp,$sp,0xb8
);
GLOBAL_ASM(
glabel chrAssignCoverAwayFromDanger
/* f04bffc: 27bdff58 */ addiu $sp,$sp,-168
/* f04c000: afbf005c */ sw $ra,0x5c($sp)
/* f04c004: afbe0058 */ sw $s8,0x58($sp)
/* f04c008: afb70054 */ sw $s7,0x54($sp)
/* f04c00c: afb60050 */ sw $s6,0x50($sp)
/* f04c010: afb5004c */ sw $s5,0x4c($sp)
/* f04c014: afb40048 */ sw $s4,0x48($sp)
/* f04c018: afb30044 */ sw $s3,0x44($sp)
/* f04c01c: afb20040 */ sw $s2,0x40($sp)
/* f04c020: afb1003c */ sw $s1,0x3c($sp)
/* f04c024: afb00038 */ sw $s0,0x38($sp)
/* f04c028: f7ba0030 */ sdc1 $f26,0x30($sp)
/* f04c02c: f7b80028 */ sdc1 $f24,0x28($sp)
/* f04c030: f7b60020 */ sdc1 $f22,0x20($sp)
/* f04c034: f7b40018 */ sdc1 $f20,0x18($sp)
/* f04c038: 8c8e001c */ lw $t6,0x1c($a0)
/* f04c03c: 4480d000 */ mtc1 $zero,$f26
/* f04c040: 3c01432a */ lui $at,0x432a
/* f04c044: 44813000 */ mtc1 $at,$f6
/* f04c048: c5c4000c */ lwc1 $f4,0xc($t6)
/* f04c04c: 240fffff */ addiu $t7,$zero,-1
/* f04c050: 00808825 */ or $s1,$a0,$zero
/* f04c054: 00a0a025 */ or $s4,$a1,$zero
/* f04c058: 00c0a825 */ or $s5,$a2,$zero
/* f04c05c: afaf0078 */ sw $t7,0x78($sp)
/* f04c060: e7ba0090 */ swc1 $f26,0x90($sp)
/* f04c064: 4600d586 */ mov.s $f22,$f26
/* f04c068: 0fc458b4 */ jal coverGetCount
/* f04c06c: 46062600 */ add.s $f24,$f4,$f6
/* f04c070: 02940019 */ multu $s4,$s4
/* f04c074: 86380292 */ lh $t8,0x292($s1)
/* f04c078: 27b60090 */ addiu $s6,$sp,0x90
/* f04c07c: 00409825 */ or $s3,$v0,$zero
/* f04c080: afb8007c */ sw $t8,0x7c($sp)
/* f04c084: 8e39001c */ lw $t9,0x1c($s1)
/* f04c088: c62a02c8 */ lwc1 $f10,0x2c8($s1)
/* f04c08c: 02c02825 */ or $a1,$s6,$zero
/* f04c090: c7280008 */ lwc1 $f8,0x8($t9)
/* f04c094: 27a4009c */ addiu $a0,$sp,0x9c
/* f04c098: 0000a012 */ mflo $s4
/* f04c09c: 460a4401 */ sub.s $f16,$f8,$f10
/* f04c0a0: 27a600a0 */ addiu $a2,$sp,0xa0
/* f04c0a4: 02b50019 */ multu $s5,$s5
/* f04c0a8: e7b0009c */ swc1 $f16,0x9c($sp)
/* f04c0ac: 8e28001c */ lw $t0,0x1c($s1)
/* f04c0b0: c62402d0 */ lwc1 $f4,0x2d0($s1)
/* f04c0b4: c5120010 */ lwc1 $f18,0x10($t0)
/* f04c0b8: 46049181 */ sub.s $f6,$f18,$f4
/* f04c0bc: 0000a812 */ mflo $s5
/* f04c0c0: 0c0011e4 */ jal guNormalize
/* f04c0c4: e7a600a0 */ swc1 $f6,0xa0($sp)
/* f04c0c8: 1a600048 */ blez $s3,.L0f04c1ec
/* f04c0cc: 00008025 */ or $s0,$zero,$zero
/* f04c0d0: 27be0098 */ addiu $s8,$sp,0x98
/* f04c0d4: 27b70094 */ addiu $s7,$sp,0x94
/* f04c0d8: 27b20064 */ addiu $s2,$sp,0x64
/* f04c0dc: 02002025 */ or $a0,$s0,$zero
.L0f04c0e0:
/* f04c0e0: 0fc458b8 */ jal coverUnpack
/* f04c0e4: 02402825 */ or $a1,$s2,$zero
/* f04c0e8: 5040003e */ beqzl $v0,.L0f04c1e4
/* f04c0ec: 26100001 */ addiu $s0,$s0,0x1
/* f04c0f0: 0fc45917 */ jal coverIsInUse
/* f04c0f4: 02002025 */ or $a0,$s0,$zero
/* f04c0f8: 14400039 */ bnez $v0,.L0f04c1e0
/* f04c0fc: 8fa90064 */ lw $t1,0x64($sp)
/* f04c100: c5280004 */ lwc1 $f8,0x4($t1)
/* f04c104: 4608c03c */ c.lt.s $f24,$f8
/* f04c108: 00000000 */ nop
/* f04c10c: 45030035 */ bc1tl .L0f04c1e4
/* f04c110: 26100001 */ addiu $s0,$s0,0x1
/* f04c114: 0fc4596c */ jal coverIsSpecial
/* f04c118: 02402025 */ or $a0,$s2,$zero
/* f04c11c: 14400030 */ bnez $v0,.L0f04c1e0
/* f04c120: 262402c8 */ addiu $a0,$s1,0x2c8
/* f04c124: 44945000 */ mtc1 $s4,$f10
/* f04c128: 8fa50064 */ lw $a1,0x64($sp)
/* f04c12c: 0fc12565 */ jal coordGetSquaredDistanceToCoord
/* f04c130: 46805520 */ cvt.s.w $f20,$f10
/* f04c134: 4614003c */ c.lt.s $f0,$f20
/* f04c138: 00000000 */ nop
/* f04c13c: 45030029 */ bc1tl .L0f04c1e4
/* f04c140: 26100001 */ addiu $s0,$s0,0x1
/* f04c144: 44958000 */ mtc1 $s5,$f16
/* f04c148: 8faa0064 */ lw $t2,0x64($sp)
/* f04c14c: 468084a0 */ cvt.s.w $f18,$f16
/* f04c150: 4600903c */ c.lt.s $f18,$f0
/* f04c154: 00000000 */ nop
/* f04c158: 45030022 */ bc1tl .L0f04c1e4
/* f04c15c: 26100001 */ addiu $s0,$s0,0x1
/* f04c160: 8e2b001c */ lw $t3,0x1c($s1)
/* f04c164: c5440000 */ lwc1 $f4,0x0($t2)
/* f04c168: 02e02025 */ or $a0,$s7,$zero
/* f04c16c: c5660008 */ lwc1 $f6,0x8($t3)
/* f04c170: 02c02825 */ or $a1,$s6,$zero
/* f04c174: 03c03025 */ or $a2,$s8,$zero
/* f04c178: 46062201 */ sub.s $f8,$f4,$f6
/* f04c17c: e7a80094 */ swc1 $f8,0x94($sp)
/* f04c180: 8e2c001c */ lw $t4,0x1c($s1)
/* f04c184: c54a0008 */ lwc1 $f10,0x8($t2)
/* f04c188: c5900010 */ lwc1 $f16,0x10($t4)
/* f04c18c: 46105481 */ sub.s $f18,$f10,$f16
/* f04c190: 0c0011e4 */ jal guNormalize
/* f04c194: e7b20098 */ swc1 $f18,0x98($sp)
/* f04c198: c7a40098 */ lwc1 $f4,0x98($sp)
/* f04c19c: c7a600a0 */ lwc1 $f6,0xa0($sp)
/* f04c1a0: c7aa009c */ lwc1 $f10,0x9c($sp)
/* f04c1a4: c7b00094 */ lwc1 $f16,0x94($sp)
/* f04c1a8: 46062202 */ mul.s $f8,$f4,$f6
/* f04c1ac: 00000000 */ nop
/* f04c1b0: 46105482 */ mul.s $f18,$f10,$f16
/* f04c1b4: 46124080 */ add.s $f2,$f8,$f18
/* f04c1b8: 461a103c */ c.lt.s $f2,$f26
/* f04c1bc: 00000000 */ nop
/* f04c1c0: 45010007 */ bc1t .L0f04c1e0
/* f04c1c4: 00000000 */ nop
/* f04c1c8: 4602b03c */ c.lt.s $f22,$f2
/* f04c1cc: 00000000 */ nop
/* f04c1d0: 45020004 */ bc1fl .L0f04c1e4
/* f04c1d4: 26100001 */ addiu $s0,$s0,0x1
/* f04c1d8: 46001586 */ mov.s $f22,$f2
/* f04c1dc: afb00078 */ sw $s0,0x78($sp)
.L0f04c1e0:
/* f04c1e0: 26100001 */ addiu $s0,$s0,0x1
.L0f04c1e4:
/* f04c1e4: 5613ffbe */ bnel $s0,$s3,.L0f04c0e0
/* f04c1e8: 02002025 */ or $a0,$s0,$zero
.L0f04c1ec:
/* f04c1ec: 8fad0078 */ lw $t5,0x78($sp)
/* f04c1f0: 2402ffff */ addiu $v0,$zero,-1
/* f04c1f4: a62d0292 */ sh $t5,0x292($s1)
/* f04c1f8: 8fae0078 */ lw $t6,0x78($sp)
/* f04c1fc: 8fa4007c */ lw $a0,0x7c($sp)
/* f04c200: 51c20009 */ beql $t6,$v0,.L0f04c228
/* f04c204: 8fbf005c */ lw $ra,0x5c($sp)
/* f04c208: 50820004 */ beql $a0,$v0,.L0f04c21c
/* f04c20c: 86240292 */ lh $a0,0x292($s1)
/* f04c210: 0fc45929 */ jal coverSetInUse
/* f04c214: 00002825 */ or $a1,$zero,$zero
/* f04c218: 86240292 */ lh $a0,0x292($s1)
.L0f04c21c:
/* f04c21c: 0fc45929 */ jal coverSetInUse
/* f04c220: 24050001 */ addiu $a1,$zero,0x1
/* f04c224: 8fbf005c */ lw $ra,0x5c($sp)
.L0f04c228:
/* f04c228: 8fa20078 */ lw $v0,0x78($sp)
/* f04c22c: d7b40018 */ ldc1 $f20,0x18($sp)
/* f04c230: d7b60020 */ ldc1 $f22,0x20($sp)
/* f04c234: d7b80028 */ ldc1 $f24,0x28($sp)
/* f04c238: d7ba0030 */ ldc1 $f26,0x30($sp)
/* f04c23c: 8fb00038 */ lw $s0,0x38($sp)
/* f04c240: 8fb1003c */ lw $s1,0x3c($sp)
/* f04c244: 8fb20040 */ lw $s2,0x40($sp)
/* f04c248: 8fb30044 */ lw $s3,0x44($sp)
/* f04c24c: 8fb40048 */ lw $s4,0x48($sp)
/* f04c250: 8fb5004c */ lw $s5,0x4c($sp)
/* f04c254: 8fb60050 */ lw $s6,0x50($sp)
/* f04c258: 8fb70054 */ lw $s7,0x54($sp)
/* f04c25c: 8fbe0058 */ lw $s8,0x58($sp)
/* f04c260: 03e00008 */ jr $ra
/* f04c264: 27bd00a8 */ addiu $sp,$sp,0xa8
);
/**
* Find cover in the opposite direction (?) of the chr's runfrompos and assign
* it to the chr. The distance from the runfrompos to the cover must be between
* mindist and maxdist along the X/Z plane. The chr will not choose cover more
* than 170cm higher than their current elevation, but strangely there is no
* lower Y limit.
*
* Testing with this function logic results in the following, where:
* R = run from pos
* C = chr's pos
* A = available cover
* . = unavailable cover
*
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A R A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . .
* A A A A A A A A A A A A A A . . . . . A
* A A A A A A A A A A A A A A . . . A A A
* A A A A A A A A A A A A A A . A A A A A
* A A A A A A A A A A A A A C A A A A A A
* . . . . . . . . . . . A A A A A A A A A
* . . . . . . . . . A A A A A A A A A A A
*
* The block of available cover around the runfrompos might be a bug, but if
* this function is called with mindist = chr - runfrompos or higher then it
* will work as expected.
*
* Preference is given to cover which is the "most opposite", meaning ones
* which are directly behind the chr from the perspective of runfrompos.
*/
// Mismatch: Regalloc in callee-save registers
//s32 chrAssignCoverAwayFromDanger(struct chrdata *chr, s32 mindist, s32 maxdist)
//{
// s32 i;
// f32 vecfromdanger[2];
// f32 vectocover[2];
// f32 y;
// f32 ymax;
// f32 bestsqdist;
// f32 sqdist;
// s32 numcovers;
// s32 prevcover;
// s32 newcover;
// f32 coversqdistfrompos;
// struct cover cover;
//
// ymax = chr->prop->pos.y + 170;
// y = 0;
// bestsqdist = 0;
// newcover = -1;
// numcovers = coverGetCount();
// prevcover = chr->cover;
//
// mindist = mindist * mindist;
// maxdist = maxdist * maxdist;
//
// if (mindist);
// if (maxdist);
//
// vecfromdanger[0] = chr->prop->pos.x - chr->runfrompos.x;
// vecfromdanger[1] = chr->prop->pos.z - chr->runfrompos.z;
//
// guNormalize(&vecfromdanger[0], &y, &vecfromdanger[1]);
//
// for (i = 0; i < numcovers; i++) {
// if (coverUnpack(i, &cover)
// && !coverIsInUse(i)
// && !(cover.pos->y > ymax)
// && !coverIsSpecial(&cover)) {
// coversqdistfrompos = coordGetSquaredDistanceToCoord(&chr->runfrompos, cover.pos);
//
// if (!(coversqdistfrompos < mindist) && !(coversqdistfrompos > maxdist)) {
// vectocover[0] = cover.pos->x - chr->prop->pos.x;
// vectocover[1] = cover.pos->z - chr->prop->pos.z;
//
// guNormalize(&vectocover[0], &y, &vectocover[1]);
//
// sqdist = vecfromdanger[0] * vectocover[0] + vecfromdanger[1] * vectocover[1];
//
// if (!(sqdist < 0) && sqdist > bestsqdist) {
// bestsqdist = sqdist;
// newcover = i;
// }
// }
// }
//
// if (numcovers);
// }
//
// chr->cover = newcover;
//
// if (newcover != -1) {
// if (prevcover != -1) {
// coverSetInUse(prevcover, false);
// }
//
// coverSetInUse(chr->cover, true);
// }
//
// return newcover;
//}
s16 chrGoToCover(struct chrdata *chr, u8 speed)
{
struct cover cover;
if (!chr) {
return 0;
}
if (chrIsReadyForOrders(chr) && chr->cover != -1 && coverUnpack(chr->cover, &cover)) {
chrGoToPos(chr, cover.pos, &cover.room, speed);
return chr->cover;
}
return -1;
}
bool chrRunFromPos(struct chrdata *chr, u32 speed, f32 rundist, struct coord *frompos)
{
f32 curdistfrompos;
struct coord delta;
s16 rooms[8];
f32 zero = 0;
if (chrIsReadyForOrders(chr)) {
delta.x = chr->prop->pos.x - frompos->x;
delta.y = chr->prop->pos.y;
delta.z = chr->prop->pos.z - frompos->z;
// @bug: This check should be &&. The runfrompos will fail if the
// frompos is on the same X or Z axis as the chr, which is unlikely
// because it's a floating point number.
if (zero == delta.x || zero == delta.z) {
return false;
}
curdistfrompos = sqrtf(delta.z * delta.z + delta.x * delta.x);
delta.x *= rundist / curdistfrompos;
delta.z *= rundist / curdistfrompos;
chrSetOrUnsetHiddenFlag00000100(chr, false);
if (cdTestAToB4(&chr->prop->pos, chr->prop->rooms, &delta, CDTYPE_ALL, 4) == CDRESULT_COLLISION) {
#if VERSION >= VERSION_PAL_FINAL
cdGetPos(&delta, 18555, "chr/chraction.c");
#else
cdGetPos(&delta, 18547, "chraction.c");
#endif
}
chrSetOrUnsetHiddenFlag00000100(chr, true);
func0f065e74(&chr->prop->pos, chr->prop->rooms, &delta, rooms);
return chrGoToPos(chr, &delta, rooms, speed);
}
return false;
}
void chrAddTargetToBdlist(struct chrdata *chr)
{
if (chr->prop) {
struct prop *target = chrGetTargetProp(chr);
s32 i;
if (target) {
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
chr->bdlist[chr->bdstart] = target->pos.x - chr->prop->pos.x;
chr->bdstart++;
chr->bdstart %= 60;
chr->bdlist[chr->bdstart] = target->pos.z - chr->prop->pos.z;
chr->bdstart++;
chr->bdstart %= 60;
}
}
}
}
s32 chrGetDistanceLostToTargetInLastSecond(struct chrdata *chr)
{
s32 *bdlist = &chr->bdlist[0];
s32 index = chr->bdstart;
u32 stack[2];
s32 x1 = bdlist[(index + 1) % 60];
s32 z1 = bdlist[index];
s32 olddist = sqrtf(x1 * x1 + z1 * z1);
s32 x2 = bdlist[(index + 59) % 60];
s32 z2 = bdlist[(index + 58) % 60];
s32 curdist = sqrtf(x2 * x2 + z2 * z2);
return curdist - olddist;
}
bool chrIsTargetNearlyInSight(struct chrdata *chr, u32 distance)
{
struct prop *target = chrGetTargetProp(chr);
return func0002f450(&chr->prop->pos, chr->prop->rooms, &target->pos, distance, 32);
}
bool chrIsNearlyInTargetsSight(struct chrdata *chr, u32 distance)
{
struct prop *target = chrGetTargetProp(chr);
return func0002f450(&target->pos, target->rooms, &chr->prop->pos, distance, 32);
}
f32 func0f04c784(struct chrdata *chr)
{
f32 targetfacingangle = 0;
u32 stack;
struct prop *target = chrGetTargetProp(chr);
f32 angletotarget;
f32 result;
if (target->type == PROPTYPE_CHR) {
targetfacingangle = chrGetInverseTheta(target->chr);
} else if (target->type == PROPTYPE_PLAYER) {
s32 playernum = propGetPlayerNum(target);
targetfacingangle = g_Vars.players[playernum]->vv_theta;
}
angletotarget = atan2f(target->pos.z - chr->prop->pos.z, target->pos.x - chr->prop->pos.x);
result = (angletotarget * 360 / M_BADTAU - targetfacingangle) + 90;
if (result > 180) {
result -= 360;
}
return result;
}
#if VERSION >= VERSION_PAL_FINAL
const char var7f1a8ce4[] = "chr/chraction.c";
#else
const char var7f1a8ce4[] = "chraction.c";
#endif
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(
glabel func0f04c874
.late_rodata
glabel var7f1a942c
.word 0x3c8ef461
.text
/* f04c874: 27bdff18 */ addiu $sp,$sp,-232
/* f04c878: afbf007c */ sw $ra,0x7c($sp)
/* f04c87c: afb40068 */ sw $s4,0x68($sp)
/* f04c880: afb30064 */ sw $s3,0x64($sp)
/* f04c884: afb20060 */ sw $s2,0x60($sp)
/* f04c888: afb00058 */ sw $s0,0x58($sp)
/* f04c88c: 00c08025 */ or $s0,$a2,$zero
/* f04c890: 00a09025 */ or $s2,$a1,$zero
/* f04c894: 00809825 */ or $s3,$a0,$zero
/* f04c898: 30f400ff */ andi $s4,$a3,0xff
/* f04c89c: afbe0078 */ sw $s8,0x78($sp)
/* f04c8a0: afb70074 */ sw $s7,0x74($sp)
/* f04c8a4: afb60070 */ sw $s6,0x70($sp)
/* f04c8a8: afb5006c */ sw $s5,0x6c($sp)
/* f04c8ac: afb1005c */ sw $s1,0x5c($sp)
/* f04c8b0: f7be0050 */ sdc1 $f30,0x50($sp)
/* f04c8b4: f7bc0048 */ sdc1 $f28,0x48($sp)
/* f04c8b8: f7ba0040 */ sdc1 $f26,0x40($sp)
/* f04c8bc: f7b80038 */ sdc1 $f24,0x38($sp)
/* f04c8c0: f7b60030 */ sdc1 $f22,0x30($sp)
/* f04c8c4: f7b40028 */ sdc1 $f20,0x28($sp)
/* f04c8c8: 0fc0a221 */ jal chrGetTargetProp
/* f04c8cc: afa700f4 */ sw $a3,0xf4($sp)
/* f04c8d0: 4480d000 */ mtc1 $zero,$f26
/* f04c8d4: 00408825 */ or $s1,$v0,$zero
/* f04c8d8: 0fc131e1 */ jal func0f04c784
/* f04c8dc: 02602025 */ or $a0,$s3,$zero
/* f04c8e0: 8e6e001c */ lw $t6,0x1c($s3)
/* f04c8e4: 3c0143b4 */ lui $at,0x43b4
/* f04c8e8: 4481f000 */ mtc1 $at,$f30
/* f04c8ec: c5c40008 */ lwc1 $f4,0x8($t6)
/* f04c8f0: 3c014334 */ lui $at,0x4334
/* f04c8f4: 4481e000 */ mtc1 $at,$f28
/* f04c8f8: e7a400c8 */ swc1 $f4,0xc8($sp)
/* f04c8fc: 8e6f001c */ lw $t7,0x1c($s3)
/* f04c900: 46000606 */ mov.s $f24,$f0
/* f04c904: 27be00c8 */ addiu $s8,$sp,0xc8
/* f04c908: c5e6000c */ lwc1 $f6,0xc($t7)
/* f04c90c: 27b7009c */ addiu $s7,$sp,0x9c
/* f04c910: 27b600a0 */ addiu $s6,$sp,0xa0
/* f04c914: e7a600cc */ swc1 $f6,0xcc($sp)
/* f04c918: 8e78001c */ lw $t8,0x1c($s3)
/* f04c91c: 27b50098 */ addiu $s5,$sp,0x98
/* f04c920: c7080010 */ lwc1 $f8,0x10($t8)
/* f04c924: e7a800d0 */ swc1 $f8,0xd0($sp)
/* f04c928: 44925000 */ mtc1 $s2,$f10
.L0f04c92c:
/* f04c92c: 3c014f80 */ lui $at,0x4f80
/* f04c930: 06410004 */ bgez $s2,.L0f04c944
/* f04c934: 46805020 */ cvt.s.w $f0,$f10
/* f04c938: 44818000 */ mtc1 $at,$f16
/* f04c93c: 00000000 */ nop
/* f04c940: 46100000 */ add.s $f0,$f0,$f16
.L0f04c944:
/* f04c944: 4600e03c */ c.lt.s $f28,$f0
/* f04c948: 46000506 */ mov.s $f20,$f0
/* f04c94c: 3c017f1b */ lui $at,%hi(var7f1a942c)
/* f04c950: 45020003 */ bc1fl .L0f04c960
/* f04c954: 4618a501 */ sub.s $f20,$f20,$f24
/* f04c958: 461e0501 */ sub.s $f20,$f0,$f30
/* f04c95c: 4618a501 */ sub.s $f20,$f20,$f24
.L0f04c960:
/* f04c960: c432942c */ lwc1 $f18,%lo(var7f1a942c)($at)
/* f04c964: 4612a502 */ mul.s $f20,$f20,$f18
/* f04c968: 0c0068f4 */ jal cosf
/* f04c96c: 4600a306 */ mov.s $f12,$f20
/* f04c970: 46000586 */ mov.s $f22,$f0
/* f04c974: 0c0068f7 */ jal sinf
/* f04c978: 4600a306 */ mov.s $f12,$f20
/* f04c97c: c62e0008 */ lwc1 $f14,0x8($s1)
/* f04c980: c7a400c8 */ lwc1 $f4,0xc8($sp)
/* f04c984: c7a600d0 */ lwc1 $f6,0xd0($sp)
/* f04c988: c6280010 */ lwc1 $f8,0x10($s1)
/* f04c98c: 460e2081 */ sub.s $f2,$f4,$f14
/* f04c990: 02a02825 */ or $a1,$s5,$zero
/* f04c994: 02c03025 */ or $a2,$s6,$zero
/* f04c998: 46083301 */ sub.s $f12,$f6,$f8
/* f04c99c: 46161282 */ mul.s $f10,$f2,$f22
/* f04c9a0: 02e03825 */ or $a3,$s7,$zero
/* f04c9a4: 46006402 */ mul.s $f16,$f12,$f0
/* f04c9a8: 46105481 */ sub.s $f18,$f10,$f16
/* f04c9ac: 46001202 */ mul.s $f8,$f2,$f0
/* f04c9b0: 00000000 */ nop
/* f04c9b4: 46166282 */ mul.s $f10,$f12,$f22
/* f04c9b8: 46127100 */ add.s $f4,$f14,$f18
/* f04c9bc: e6040000 */ swc1 $f4,0x0($s0)
/* f04c9c0: c7a600cc */ lwc1 $f6,0xcc($sp)
/* f04c9c4: 460a4400 */ add.s $f16,$f8,$f10
/* f04c9c8: e6060004 */ swc1 $f6,0x4($s0)
/* f04c9cc: c6320010 */ lwc1 $f18,0x10($s1)
/* f04c9d0: 46109100 */ add.s $f4,$f18,$f16
/* f04c9d4: e6040008 */ swc1 $f4,0x8($s0)
/* f04c9d8: 0fc0a277 */ jal propChrGetBbox
/* f04c9dc: 8e64001c */ lw $a0,0x1c($s3)
/* f04c9e0: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f04c9e4: c7a600a0 */ lwc1 $f6,0xa0($sp)
/* f04c9e8: c7b2009c */ lwc1 $f18,0x9c($sp)
/* f04c9ec: 8e65001c */ lw $a1,0x1c($s3)
/* f04c9f0: 46083281 */ sub.s $f10,$f6,$f8
/* f04c9f4: 24190001 */ addiu $t9,$zero,0x1
/* f04c9f8: afb90010 */ sw $t9,0x10($sp)
/* f04c9fc: 46089401 */ sub.s $f16,$f18,$f8
/* f04ca00: e7aa0014 */ swc1 $f10,0x14($sp)
/* f04ca04: 03c02025 */ or $a0,$s8,$zero
/* f04ca08: 02003025 */ or $a2,$s0,$zero
/* f04ca0c: e7b00018 */ swc1 $f16,0x18($sp)
/* f04ca10: 24070023 */ addiu $a3,$zero,0x23
/* f04ca14: 0c00b5f0 */ jal func0002d7c0
/* f04ca18: 24a50028 */ addiu $a1,$a1,0x28
/* f04ca1c: 1440002a */ bnez $v0,.L0f04cac8
/* f04ca20: 02002025 */ or $a0,$s0,$zero
/* f04ca24: 3c067f1b */ lui $a2,%hi(var7f1a8ce4)
/* f04ca28: 24c68ce4 */ addiu $a2,$a2,%lo(var7f1a8ce4)
/* f04ca2c: 0c0093af */ jal cdGetPos
/* f04ca30: 240548fe */ addiu $a1,$zero,0x4906
/* f04ca34: c6040000 */ lwc1 $f4,0x0($s0)
/* f04ca38: c7a600c8 */ lwc1 $f6,0xc8($sp)
/* f04ca3c: c60a0008 */ lwc1 $f10,0x8($s0)
/* f04ca40: c7b200d0 */ lwc1 $f18,0xd0($sp)
/* f04ca44: 46062501 */ sub.s $f20,$f4,$f6
/* f04ca48: 46125581 */ sub.s $f22,$f10,$f18
/* f04ca4c: 4614a202 */ mul.s $f8,$f20,$f20
/* f04ca50: 00000000 */ nop
/* f04ca54: 4616b402 */ mul.s $f16,$f22,$f22
/* f04ca58: 0c012974 */ jal sqrtf
/* f04ca5c: 46104300 */ add.s $f12,$f8,$f16
/* f04ca60: 3c014248 */ lui $at,0x4248
/* f04ca64: 44812000 */ mtc1 $at,$f4
/* f04ca68: 44805000 */ mtc1 $zero,$f10
/* f04ca6c: c7b200c8 */ lwc1 $f18,0xc8($sp)
/* f04ca70: 46040181 */ sub.s $f6,$f0,$f4
/* f04ca74: c7a400c8 */ lwc1 $f4,0xc8($sp)
/* f04ca78: 46003083 */ div.s $f2,$f6,$f0
/* f04ca7c: 460a103c */ c.lt.s $f2,$f10
/* f04ca80: 00000000 */ nop
/* f04ca84: 45000007 */ bc1f .L0f04caa4
/* f04ca88: 00000000 */ nop
/* f04ca8c: e6120000 */ swc1 $f18,0x0($s0)
/* f04ca90: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f04ca94: e6080004 */ swc1 $f8,0x4($s0)
/* f04ca98: c7b000d0 */ lwc1 $f16,0xd0($sp)
/* f04ca9c: 1000000a */ b .L0f04cac8
/* f04caa0: e6100008 */ swc1 $f16,0x8($s0)
.L0f04caa4:
/* f04caa4: 4602a502 */ mul.s $f20,$f20,$f2
/* f04caa8: 46142180 */ add.s $f6,$f4,$f20
/* f04caac: 4602b582 */ mul.s $f22,$f22,$f2
/* f04cab0: e6060000 */ swc1 $f6,0x0($s0)
/* f04cab4: c7aa00cc */ lwc1 $f10,0xcc($sp)
/* f04cab8: e60a0004 */ swc1 $f10,0x4($s0)
/* f04cabc: c7b200d0 */ lwc1 $f18,0xd0($sp)
/* f04cac0: 46169200 */ add.s $f8,$f18,$f22
/* f04cac4: e6080008 */ swc1 $f8,0x8($s0)
.L0f04cac8:
/* f04cac8: 12800019 */ beqz $s4,.L0f04cb30
/* f04cacc: 00001025 */ or $v0,$zero,$zero
/* f04cad0: c6000000 */ lwc1 $f0,0x0($s0)
/* f04cad4: c7b000c8 */ lwc1 $f16,0xc8($sp)
/* f04cad8: c7a400cc */ lwc1 $f4,0xcc($sp)
/* f04cadc: c6060004 */ lwc1 $f6,0x4($s0)
/* f04cae0: 46008081 */ sub.s $f2,$f16,$f0
/* f04cae4: c7aa00d0 */ lwc1 $f10,0xd0($sp)
/* f04cae8: c6120008 */ lwc1 $f18,0x8($s0)
/* f04caec: 46062381 */ sub.s $f14,$f4,$f6
/* f04caf0: 46021202 */ mul.s $f8,$f2,$f2
/* f04caf4: e7a000a8 */ swc1 $f0,0xa8($sp)
/* f04caf8: 46125301 */ sub.s $f12,$f10,$f18
/* f04cafc: 460e7402 */ mul.s $f16,$f14,$f14
/* f04cb00: c60a0004 */ lwc1 $f10,0x4($s0)
/* f04cb04: 24080168 */ addiu $t0,$zero,0x168
/* f04cb08: 460c6182 */ mul.s $f6,$f12,$f12
/* f04cb0c: e7aa00ac */ swc1 $f10,0xac($sp)
/* f04cb10: c6120008 */ lwc1 $f18,0x8($s0)
/* f04cb14: 01129023 */ subu $s2,$t0,$s2
/* f04cb18: 24020001 */ addiu $v0,$zero,0x1
/* f04cb1c: 46104100 */ add.s $f4,$f8,$f16
/* f04cb20: 0000a025 */ or $s4,$zero,$zero
/* f04cb24: e7b200b0 */ swc1 $f18,0xb0($sp)
/* f04cb28: 10000001 */ b .L0f04cb30
/* f04cb2c: 46062680 */ add.s $f26,$f4,$f6
.L0f04cb30:
/* f04cb30: 5440ff7e */ bnezl $v0,.L0f04c92c
/* f04cb34: 44925000 */ mtc1 $s2,$f10
/* f04cb38: 44804000 */ mtc1 $zero,$f8
/* f04cb3c: c7b000c8 */ lwc1 $f16,0xc8($sp)
/* f04cb40: 02602025 */ or $a0,$s3,$zero
/* f04cb44: 4608d032 */ c.eq.s $f26,$f8
/* f04cb48: 02002825 */ or $a1,$s0,$zero
/* f04cb4c: 45010018 */ bc1t .L0f04cbb0
/* f04cb50: 00000000 */ nop
/* f04cb54: c6040000 */ lwc1 $f4,0x0($s0)
/* f04cb58: c7a600cc */ lwc1 $f6,0xcc($sp)
/* f04cb5c: c60a0004 */ lwc1 $f10,0x4($s0)
/* f04cb60: 46048081 */ sub.s $f2,$f16,$f4
/* f04cb64: c7b200d0 */ lwc1 $f18,0xd0($sp)
/* f04cb68: c6080008 */ lwc1 $f8,0x8($s0)
/* f04cb6c: 460a3381 */ sub.s $f14,$f6,$f10
/* f04cb70: 46021402 */ mul.s $f16,$f2,$f2
/* f04cb74: 46089301 */ sub.s $f12,$f18,$f8
/* f04cb78: 460e7102 */ mul.s $f4,$f14,$f14
/* f04cb7c: c7a800a8 */ lwc1 $f8,0xa8($sp)
/* f04cb80: 460c6282 */ mul.s $f10,$f12,$f12
/* f04cb84: 46048180 */ add.s $f6,$f16,$f4
/* f04cb88: 460a3480 */ add.s $f18,$f6,$f10
/* f04cb8c: 461a903c */ c.lt.s $f18,$f26
/* f04cb90: 00000000 */ nop
/* f04cb94: 45000006 */ bc1f .L0f04cbb0
/* f04cb98: 00000000 */ nop
/* f04cb9c: e6080000 */ swc1 $f8,0x0($s0)
/* f04cba0: c7b000ac */ lwc1 $f16,0xac($sp)
/* f04cba4: e6100004 */ swc1 $f16,0x4($s0)
/* f04cba8: c7a400b0 */ lwc1 $f4,0xb0($sp)
/* f04cbac: e6040008 */ swc1 $f4,0x8($s0)
.L0f04cbb0:
/* f04cbb0: 0fc0eaf4 */ jal func0f03abd0
/* f04cbb4: 93a600fb */ lbu $a2,0xfb($sp)
/* f04cbb8: 8fbf007c */ lw $ra,0x7c($sp)
/* f04cbbc: d7b40028 */ ldc1 $f20,0x28($sp)
/* f04cbc0: d7b60030 */ ldc1 $f22,0x30($sp)
/* f04cbc4: d7b80038 */ ldc1 $f24,0x38($sp)
/* f04cbc8: d7ba0040 */ ldc1 $f26,0x40($sp)
/* f04cbcc: d7bc0048 */ ldc1 $f28,0x48($sp)
/* f04cbd0: d7be0050 */ ldc1 $f30,0x50($sp)
/* f04cbd4: 8fb00058 */ lw $s0,0x58($sp)
/* f04cbd8: 8fb1005c */ lw $s1,0x5c($sp)
/* f04cbdc: 8fb20060 */ lw $s2,0x60($sp)
/* f04cbe0: 8fb30064 */ lw $s3,0x64($sp)
/* f04cbe4: 8fb40068 */ lw $s4,0x68($sp)
/* f04cbe8: 8fb5006c */ lw $s5,0x6c($sp)
/* f04cbec: 8fb60070 */ lw $s6,0x70($sp)
/* f04cbf0: 8fb70074 */ lw $s7,0x74($sp)
/* f04cbf4: 8fbe0078 */ lw $s8,0x78($sp)
/* f04cbf8: 27bd00e8 */ addiu $sp,$sp,0xe8
/* f04cbfc: 03e00008 */ jr $ra
/* f04cc00: 24020001 */ addiu $v0,$zero,0x1
);
#else
GLOBAL_ASM(
glabel func0f04c874
.late_rodata
glabel var7f1a942c
.word 0x3c8ef461
.text
/* f04c874: 27bdff18 */ addiu $sp,$sp,-232
/* f04c878: afbf007c */ sw $ra,0x7c($sp)
/* f04c87c: afb40068 */ sw $s4,0x68($sp)
/* f04c880: afb30064 */ sw $s3,0x64($sp)
/* f04c884: afb20060 */ sw $s2,0x60($sp)
/* f04c888: afb00058 */ sw $s0,0x58($sp)
/* f04c88c: 00c08025 */ or $s0,$a2,$zero
/* f04c890: 00a09025 */ or $s2,$a1,$zero
/* f04c894: 00809825 */ or $s3,$a0,$zero
/* f04c898: 30f400ff */ andi $s4,$a3,0xff
/* f04c89c: afbe0078 */ sw $s8,0x78($sp)
/* f04c8a0: afb70074 */ sw $s7,0x74($sp)
/* f04c8a4: afb60070 */ sw $s6,0x70($sp)
/* f04c8a8: afb5006c */ sw $s5,0x6c($sp)
/* f04c8ac: afb1005c */ sw $s1,0x5c($sp)
/* f04c8b0: f7be0050 */ sdc1 $f30,0x50($sp)
/* f04c8b4: f7bc0048 */ sdc1 $f28,0x48($sp)
/* f04c8b8: f7ba0040 */ sdc1 $f26,0x40($sp)
/* f04c8bc: f7b80038 */ sdc1 $f24,0x38($sp)
/* f04c8c0: f7b60030 */ sdc1 $f22,0x30($sp)
/* f04c8c4: f7b40028 */ sdc1 $f20,0x28($sp)
/* f04c8c8: 0fc0a221 */ jal chrGetTargetProp
/* f04c8cc: afa700f4 */ sw $a3,0xf4($sp)
/* f04c8d0: 4480d000 */ mtc1 $zero,$f26
/* f04c8d4: 00408825 */ or $s1,$v0,$zero
/* f04c8d8: 0fc131e1 */ jal func0f04c784
/* f04c8dc: 02602025 */ or $a0,$s3,$zero
/* f04c8e0: 8e6e001c */ lw $t6,0x1c($s3)
/* f04c8e4: 3c0143b4 */ lui $at,0x43b4
/* f04c8e8: 4481f000 */ mtc1 $at,$f30
/* f04c8ec: c5c40008 */ lwc1 $f4,0x8($t6)
/* f04c8f0: 3c014334 */ lui $at,0x4334
/* f04c8f4: 4481e000 */ mtc1 $at,$f28
/* f04c8f8: e7a400c8 */ swc1 $f4,0xc8($sp)
/* f04c8fc: 8e6f001c */ lw $t7,0x1c($s3)
/* f04c900: 46000606 */ mov.s $f24,$f0
/* f04c904: 27be00c8 */ addiu $s8,$sp,0xc8
/* f04c908: c5e6000c */ lwc1 $f6,0xc($t7)
/* f04c90c: 27b7009c */ addiu $s7,$sp,0x9c
/* f04c910: 27b600a0 */ addiu $s6,$sp,0xa0
/* f04c914: e7a600cc */ swc1 $f6,0xcc($sp)
/* f04c918: 8e78001c */ lw $t8,0x1c($s3)
/* f04c91c: 27b50098 */ addiu $s5,$sp,0x98
/* f04c920: c7080010 */ lwc1 $f8,0x10($t8)
/* f04c924: e7a800d0 */ swc1 $f8,0xd0($sp)
/* f04c928: 44925000 */ mtc1 $s2,$f10
.L0f04c92c:
/* f04c92c: 3c014f80 */ lui $at,0x4f80
/* f04c930: 06410004 */ bgez $s2,.L0f04c944
/* f04c934: 46805020 */ cvt.s.w $f0,$f10
/* f04c938: 44818000 */ mtc1 $at,$f16
/* f04c93c: 00000000 */ nop
/* f04c940: 46100000 */ add.s $f0,$f0,$f16
.L0f04c944:
/* f04c944: 4600e03c */ c.lt.s $f28,$f0
/* f04c948: 46000506 */ mov.s $f20,$f0
/* f04c94c: 3c017f1b */ lui $at,%hi(var7f1a942c)
/* f04c950: 45020003 */ bc1fl .L0f04c960
/* f04c954: 4618a501 */ sub.s $f20,$f20,$f24
/* f04c958: 461e0501 */ sub.s $f20,$f0,$f30
/* f04c95c: 4618a501 */ sub.s $f20,$f20,$f24
.L0f04c960:
/* f04c960: c432942c */ lwc1 $f18,%lo(var7f1a942c)($at)
/* f04c964: 4612a502 */ mul.s $f20,$f20,$f18
/* f04c968: 0c0068f4 */ jal cosf
/* f04c96c: 4600a306 */ mov.s $f12,$f20
/* f04c970: 46000586 */ mov.s $f22,$f0
/* f04c974: 0c0068f7 */ jal sinf
/* f04c978: 4600a306 */ mov.s $f12,$f20
/* f04c97c: c62e0008 */ lwc1 $f14,0x8($s1)
/* f04c980: c7a400c8 */ lwc1 $f4,0xc8($sp)
/* f04c984: c7a600d0 */ lwc1 $f6,0xd0($sp)
/* f04c988: c6280010 */ lwc1 $f8,0x10($s1)
/* f04c98c: 460e2081 */ sub.s $f2,$f4,$f14
/* f04c990: 02a02825 */ or $a1,$s5,$zero
/* f04c994: 02c03025 */ or $a2,$s6,$zero
/* f04c998: 46083301 */ sub.s $f12,$f6,$f8
/* f04c99c: 46161282 */ mul.s $f10,$f2,$f22
/* f04c9a0: 02e03825 */ or $a3,$s7,$zero
/* f04c9a4: 46006402 */ mul.s $f16,$f12,$f0
/* f04c9a8: 46105481 */ sub.s $f18,$f10,$f16
/* f04c9ac: 46001202 */ mul.s $f8,$f2,$f0
/* f04c9b0: 00000000 */ nop
/* f04c9b4: 46166282 */ mul.s $f10,$f12,$f22
/* f04c9b8: 46127100 */ add.s $f4,$f14,$f18
/* f04c9bc: e6040000 */ swc1 $f4,0x0($s0)
/* f04c9c0: c7a600cc */ lwc1 $f6,0xcc($sp)
/* f04c9c4: 460a4400 */ add.s $f16,$f8,$f10
/* f04c9c8: e6060004 */ swc1 $f6,0x4($s0)
/* f04c9cc: c6320010 */ lwc1 $f18,0x10($s1)
/* f04c9d0: 46109100 */ add.s $f4,$f18,$f16
/* f04c9d4: e6040008 */ swc1 $f4,0x8($s0)
/* f04c9d8: 0fc0a277 */ jal propChrGetBbox
/* f04c9dc: 8e64001c */ lw $a0,0x1c($s3)
/* f04c9e0: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f04c9e4: c7a600a0 */ lwc1 $f6,0xa0($sp)
/* f04c9e8: c7b2009c */ lwc1 $f18,0x9c($sp)
/* f04c9ec: 8e65001c */ lw $a1,0x1c($s3)
/* f04c9f0: 46083281 */ sub.s $f10,$f6,$f8
/* f04c9f4: 24190001 */ addiu $t9,$zero,0x1
/* f04c9f8: afb90010 */ sw $t9,0x10($sp)
/* f04c9fc: 46089401 */ sub.s $f16,$f18,$f8
/* f04ca00: e7aa0014 */ swc1 $f10,0x14($sp)
/* f04ca04: 03c02025 */ or $a0,$s8,$zero
/* f04ca08: 02003025 */ or $a2,$s0,$zero
/* f04ca0c: e7b00018 */ swc1 $f16,0x18($sp)
/* f04ca10: 24070023 */ addiu $a3,$zero,0x23
/* f04ca14: 0c00b5f0 */ jal func0002d7c0
/* f04ca18: 24a50028 */ addiu $a1,$a1,0x28
/* f04ca1c: 1440002a */ bnez $v0,.L0f04cac8
/* f04ca20: 02002025 */ or $a0,$s0,$zero
/* f04ca24: 3c067f1b */ lui $a2,%hi(var7f1a8ce4)
/* f04ca28: 24c68ce4 */ addiu $a2,$a2,%lo(var7f1a8ce4)
/* f04ca2c: 0c0093af */ jal cdGetPos
/* f04ca30: 240548fe */ addiu $a1,$zero,0x48fe
/* f04ca34: c6040000 */ lwc1 $f4,0x0($s0)
/* f04ca38: c7a600c8 */ lwc1 $f6,0xc8($sp)
/* f04ca3c: c60a0008 */ lwc1 $f10,0x8($s0)
/* f04ca40: c7b200d0 */ lwc1 $f18,0xd0($sp)
/* f04ca44: 46062501 */ sub.s $f20,$f4,$f6
/* f04ca48: 46125581 */ sub.s $f22,$f10,$f18
/* f04ca4c: 4614a202 */ mul.s $f8,$f20,$f20
/* f04ca50: 00000000 */ nop
/* f04ca54: 4616b402 */ mul.s $f16,$f22,$f22
/* f04ca58: 0c012974 */ jal sqrtf
/* f04ca5c: 46104300 */ add.s $f12,$f8,$f16
/* f04ca60: 3c014248 */ lui $at,0x4248
/* f04ca64: 44812000 */ mtc1 $at,$f4
/* f04ca68: 44805000 */ mtc1 $zero,$f10
/* f04ca6c: c7b200c8 */ lwc1 $f18,0xc8($sp)
/* f04ca70: 46040181 */ sub.s $f6,$f0,$f4
/* f04ca74: c7a400c8 */ lwc1 $f4,0xc8($sp)
/* f04ca78: 46003083 */ div.s $f2,$f6,$f0
/* f04ca7c: 460a103c */ c.lt.s $f2,$f10
/* f04ca80: 00000000 */ nop
/* f04ca84: 45000007 */ bc1f .L0f04caa4
/* f04ca88: 00000000 */ nop
/* f04ca8c: e6120000 */ swc1 $f18,0x0($s0)
/* f04ca90: c7a800cc */ lwc1 $f8,0xcc($sp)
/* f04ca94: e6080004 */ swc1 $f8,0x4($s0)
/* f04ca98: c7b000d0 */ lwc1 $f16,0xd0($sp)
/* f04ca9c: 1000000a */ b .L0f04cac8
/* f04caa0: e6100008 */ swc1 $f16,0x8($s0)
.L0f04caa4:
/* f04caa4: 4602a502 */ mul.s $f20,$f20,$f2
/* f04caa8: 46142180 */ add.s $f6,$f4,$f20
/* f04caac: 4602b582 */ mul.s $f22,$f22,$f2
/* f04cab0: e6060000 */ swc1 $f6,0x0($s0)
/* f04cab4: c7aa00cc */ lwc1 $f10,0xcc($sp)
/* f04cab8: e60a0004 */ swc1 $f10,0x4($s0)
/* f04cabc: c7b200d0 */ lwc1 $f18,0xd0($sp)
/* f04cac0: 46169200 */ add.s $f8,$f18,$f22
/* f04cac4: e6080008 */ swc1 $f8,0x8($s0)
.L0f04cac8:
/* f04cac8: 12800019 */ beqz $s4,.L0f04cb30
/* f04cacc: 00001025 */ or $v0,$zero,$zero
/* f04cad0: c6000000 */ lwc1 $f0,0x0($s0)
/* f04cad4: c7b000c8 */ lwc1 $f16,0xc8($sp)
/* f04cad8: c7a400cc */ lwc1 $f4,0xcc($sp)
/* f04cadc: c6060004 */ lwc1 $f6,0x4($s0)
/* f04cae0: 46008081 */ sub.s $f2,$f16,$f0
/* f04cae4: c7aa00d0 */ lwc1 $f10,0xd0($sp)
/* f04cae8: c6120008 */ lwc1 $f18,0x8($s0)
/* f04caec: 46062381 */ sub.s $f14,$f4,$f6
/* f04caf0: 46021202 */ mul.s $f8,$f2,$f2
/* f04caf4: e7a000a8 */ swc1 $f0,0xa8($sp)
/* f04caf8: 46125301 */ sub.s $f12,$f10,$f18
/* f04cafc: 460e7402 */ mul.s $f16,$f14,$f14
/* f04cb00: c60a0004 */ lwc1 $f10,0x4($s0)
/* f04cb04: 24080168 */ addiu $t0,$zero,0x168
/* f04cb08: 460c6182 */ mul.s $f6,$f12,$f12
/* f04cb0c: e7aa00ac */ swc1 $f10,0xac($sp)
/* f04cb10: c6120008 */ lwc1 $f18,0x8($s0)
/* f04cb14: 01129023 */ subu $s2,$t0,$s2
/* f04cb18: 24020001 */ addiu $v0,$zero,0x1
/* f04cb1c: 46104100 */ add.s $f4,$f8,$f16
/* f04cb20: 0000a025 */ or $s4,$zero,$zero
/* f04cb24: e7b200b0 */ swc1 $f18,0xb0($sp)
/* f04cb28: 10000001 */ b .L0f04cb30
/* f04cb2c: 46062680 */ add.s $f26,$f4,$f6
.L0f04cb30:
/* f04cb30: 5440ff7e */ bnezl $v0,.L0f04c92c
/* f04cb34: 44925000 */ mtc1 $s2,$f10
/* f04cb38: 44804000 */ mtc1 $zero,$f8
/* f04cb3c: c7b000c8 */ lwc1 $f16,0xc8($sp)
/* f04cb40: 02602025 */ or $a0,$s3,$zero
/* f04cb44: 4608d032 */ c.eq.s $f26,$f8
/* f04cb48: 02002825 */ or $a1,$s0,$zero
/* f04cb4c: 45010018 */ bc1t .L0f04cbb0
/* f04cb50: 00000000 */ nop
/* f04cb54: c6040000 */ lwc1 $f4,0x0($s0)
/* f04cb58: c7a600cc */ lwc1 $f6,0xcc($sp)
/* f04cb5c: c60a0004 */ lwc1 $f10,0x4($s0)
/* f04cb60: 46048081 */ sub.s $f2,$f16,$f4
/* f04cb64: c7b200d0 */ lwc1 $f18,0xd0($sp)
/* f04cb68: c6080008 */ lwc1 $f8,0x8($s0)
/* f04cb6c: 460a3381 */ sub.s $f14,$f6,$f10
/* f04cb70: 46021402 */ mul.s $f16,$f2,$f2
/* f04cb74: 46089301 */ sub.s $f12,$f18,$f8
/* f04cb78: 460e7102 */ mul.s $f4,$f14,$f14
/* f04cb7c: c7a800a8 */ lwc1 $f8,0xa8($sp)
/* f04cb80: 460c6282 */ mul.s $f10,$f12,$f12
/* f04cb84: 46048180 */ add.s $f6,$f16,$f4
/* f04cb88: 460a3480 */ add.s $f18,$f6,$f10
/* f04cb8c: 461a903c */ c.lt.s $f18,$f26
/* f04cb90: 00000000 */ nop
/* f04cb94: 45000006 */ bc1f .L0f04cbb0
/* f04cb98: 00000000 */ nop
/* f04cb9c: e6080000 */ swc1 $f8,0x0($s0)
/* f04cba0: c7b000ac */ lwc1 $f16,0xac($sp)
/* f04cba4: e6100004 */ swc1 $f16,0x4($s0)
/* f04cba8: c7a400b0 */ lwc1 $f4,0xb0($sp)
/* f04cbac: e6040008 */ swc1 $f4,0x8($s0)
.L0f04cbb0:
/* f04cbb0: 0fc0eaf4 */ jal func0f03abd0
/* f04cbb4: 93a600fb */ lbu $a2,0xfb($sp)
/* f04cbb8: 8fbf007c */ lw $ra,0x7c($sp)
/* f04cbbc: d7b40028 */ ldc1 $f20,0x28($sp)
/* f04cbc0: d7b60030 */ ldc1 $f22,0x30($sp)
/* f04cbc4: d7b80038 */ ldc1 $f24,0x38($sp)
/* f04cbc8: d7ba0040 */ ldc1 $f26,0x40($sp)
/* f04cbcc: d7bc0048 */ ldc1 $f28,0x48($sp)
/* f04cbd0: d7be0050 */ ldc1 $f30,0x50($sp)
/* f04cbd4: 8fb00058 */ lw $s0,0x58($sp)
/* f04cbd8: 8fb1005c */ lw $s1,0x5c($sp)
/* f04cbdc: 8fb20060 */ lw $s2,0x60($sp)
/* f04cbe0: 8fb30064 */ lw $s3,0x64($sp)
/* f04cbe4: 8fb40068 */ lw $s4,0x68($sp)
/* f04cbe8: 8fb5006c */ lw $s5,0x6c($sp)
/* f04cbec: 8fb60070 */ lw $s6,0x70($sp)
/* f04cbf0: 8fb70074 */ lw $s7,0x74($sp)
/* f04cbf4: 8fbe0078 */ lw $s8,0x78($sp)
/* f04cbf8: 27bd00e8 */ addiu $sp,$sp,0xe8
/* f04cbfc: 03e00008 */ jr $ra
/* f04cc00: 24020001 */ addiu $v0,$zero,0x1
);
#endif
// Mismatch: Probably due to variable reuse.
//bool func0f04c874(struct chrdata *chr, u32 angle360, struct coord *pos, u8 arg3, u8 arg4)
//{
// struct prop *target = chrGetTargetProp(chr);
// f32 fVar7 = 0;
// f32 uVar9 = func0f04c784(chr);
// struct coord chrpos; // c8, cc, d0
// struct coord saved; // a8, ac, b0
// f32 ymax; // a0
// f32 ymin; // 9c
// f32 width; // 98
// f32 cosine;
// f32 sine;
// f32 xdiff;
// f32 ydiff;
// f32 zdiff;
// f32 xdiff2;
// f32 ydiff2;
// f32 zdiff2;
// f32 scale;
// bool again;
//
// chrpos.x = chr->prop->pos.x;
// chrpos.y = chr->prop->pos.y;
// chrpos.z = chr->prop->pos.z;
//
// do {
// s32 result;
// f32 angle360f = angle360;
//
// if (angle360f > 180) {
// angle360f -= 360;
// }
//
// cosine = cosf((angle360f - uVar9) * 0.017450513318181f);
// sine = sinf((angle360f - uVar9) * 0.017450513318181f);
// xdiff = chrpos.x - target->pos.x;
// zdiff = chrpos.z - target->pos.z;
//
// pos->x = target->pos.x + (xdiff * cosine - zdiff * sine);
// pos->y = chrpos.y;
// pos->z = target->pos.z + (xdiff * sine + zdiff * cosine);
//
// propChrGetBbox(chr->prop, &width, &ymax, &ymin);
//
// // a14
// result = func0002d7c0(&chrpos, chr->prop->rooms, pos,
// CDTYPE_BG | CDTYPE_OBJS | CDTYPE_DOORS, 1,
// ymax - chrpos.y,
// ymin - chrpos.y);
//
// if (result == CDRESULT_COLLISION) {
// f32 xdiff;
// f32 zdiff;
// f32 tmp;
// cdGetPos(pos, 18686, "chraction.c");
//
// xdiff = pos->x - chrpos.x;
// zdiff = pos->z - chrpos.z;
// tmp = sqrtf(xdiff * xdiff + zdiff * zdiff);
// scale = (tmp - 50.0f) / tmp;
//
// if (scale < 0) {
// pos->x = chrpos.x;
// pos->y = chrpos.y;
// pos->z = chrpos.z;
// } else {
// pos->x = chrpos.x + xdiff * scale;
// pos->y = chrpos.y;
// pos->z = chrpos.z + zdiff * scale;
// }
// }
//
// // ac8
// if (arg3) {
// xdiff2 = chrpos.x - pos->x;
// ydiff2 = chrpos.y - pos->y;
// zdiff2 = chrpos.z - pos->z;
//
// saved.x = pos->x;
// saved.y = pos->y;
// saved.z = pos->z;
//
// fVar7 = xdiff2 * xdiff2 + ydiff2 * ydiff2 + zdiff2 * zdiff2;
//
// angle360 = 360 - angle360;
// again = true;
// arg3 = 0;
// } else {
// again = false;
// }
// } while (again);
//
// if (fVar7 != 0) {
// f32 tmp;
// xdiff2 = chrpos.x - pos->x;
// ydiff2 = chrpos.y - pos->y;
// zdiff2 = chrpos.z - pos->z;
//
// tmp = xdiff2 * xdiff2 + ydiff2 * ydiff2 + zdiff2 * zdiff2;
//
// if (tmp < fVar7) {
// pos->x = saved.x;
// pos->y = saved.y;
// pos->z = saved.z;
// }
// }
//
// func0f03abd0(chr, pos, arg4);
//
// return true;
//}
GLOBAL_ASM(
glabel rebuildTeams
/* f04cc04: 27bdffc0 */ addiu $sp,$sp,-64
/* f04cc08: afbf0014 */ sw $ra,0x14($sp)
/* f04cc0c: 0fc07934 */ jal getNumChrSlots
/* f04cc10: 00000000 */ nop
/* f04cc14: 3c0e8007 */ lui $t6,%hi(var8006845c)
/* f04cc18: 25ce845c */ addiu $t6,$t6,%lo(var8006845c)
/* f04cc1c: 8dc10000 */ lw $at,0x0($t6)
/* f04cc20: 27ab0024 */ addiu $t3,$sp,0x24
/* f04cc24: 3c0c8006 */ lui $t4,%hi(g_ChrSlots)
/* f04cc28: ad610000 */ sw $at,0x0($t3)
/* f04cc2c: 8dd90004 */ lw $t9,0x4($t6)
/* f04cc30: 3c098006 */ lui $t1,%hi(g_TeamList)
/* f04cc34: 00405025 */ or $t2,$v0,$zero
/* f04cc38: 24070007 */ addiu $a3,$zero,0x7
/* f04cc3c: 25297e64 */ addiu $t1,$t1,%lo(g_TeamList)
/* f04cc40: 258c2988 */ addiu $t4,$t4,%lo(g_ChrSlots)
/* f04cc44: 00004025 */ or $t0,$zero,$zero
/* f04cc48: 241f0008 */ addiu $ra,$zero,0x8
/* f04cc4c: 240dfffe */ addiu $t5,$zero,-2
/* f04cc50: ad790004 */ sw $t9,0x4($t3)
.L0f04cc54:
/* f04cc54: 11000005 */ beqz $t0,.L0f04cc6c
/* f04cc58: 00003025 */ or $a2,$zero,$zero
/* f04cc5c: 8d380000 */ lw $t8,0x0($t1)
/* f04cc60: 00087840 */ sll $t7,$t0,0x1
/* f04cc64: 030f7021 */ addu $t6,$t8,$t7
/* f04cc68: a5c7fffe */ sh $a3,-0x2($t6)
.L0f04cc6c:
/* f04cc6c: 18400015 */ blez $v0,.L0f04ccc4
/* f04cc70: 00001825 */ or $v1,$zero,$zero
.L0f04cc74:
/* f04cc74: 8d990000 */ lw $t9,0x0($t4)
/* f04cc78: 24c60001 */ addiu $a2,$a2,0x1
/* f04cc7c: 0168c021 */ addu $t8,$t3,$t0
/* f04cc80: 00792021 */ addu $a0,$v1,$t9
/* f04cc84: 84850000 */ lh $a1,0x0($a0)
/* f04cc88: 04a0000c */ bltz $a1,.L0f04ccbc
/* f04cc8c: 00000000 */ nop
/* f04cc90: 930f0000 */ lbu $t7,0x0($t8)
/* f04cc94: 908e0125 */ lbu $t6,0x125($a0)
/* f04cc98: 01eec824 */ and $t9,$t7,$t6
/* f04cc9c: 13200007 */ beqz $t9,.L0f04ccbc
/* f04cca0: 00077840 */ sll $t7,$a3,0x1
/* f04cca4: 8d380000 */ lw $t8,0x0($t1)
/* f04cca8: 24e70001 */ addiu $a3,$a3,0x1
/* f04ccac: 0007cc00 */ sll $t9,$a3,0x10
/* f04ccb0: 030f7021 */ addu $t6,$t8,$t7
/* f04ccb4: a5c50000 */ sh $a1,0x0($t6)
/* f04ccb8: 00193c03 */ sra $a3,$t9,0x10
.L0f04ccbc:
/* f04ccbc: 14caffed */ bne $a2,$t2,.L0f04cc74
/* f04ccc0: 24630368 */ addiu $v1,$v1,0x368
.L0f04ccc4:
/* f04ccc4: 00077040 */ sll $t6,$a3,0x1
/* f04ccc8: 8d2f0000 */ lw $t7,0x0($t1)
/* f04cccc: 24e70001 */ addiu $a3,$a3,0x1
/* f04ccd0: 0007c400 */ sll $t8,$a3,0x10
/* f04ccd4: 00183c03 */ sra $a3,$t8,0x10
/* f04ccd8: 28e10108 */ slti $at,$a3,0x108
/* f04ccdc: 01eec821 */ addu $t9,$t7,$t6
/* f04cce0: 10200004 */ beqz $at,.L0f04ccf4
/* f04cce4: a72d0000 */ sh $t5,0x0($t9)
/* f04cce8: 25080001 */ addiu $t0,$t0,0x1
/* f04ccec: 151fffd9 */ bne $t0,$ra,.L0f04cc54
/* f04ccf0: 00000000 */ nop
.L0f04ccf4:
/* f04ccf4: 8fbf0014 */ lw $ra,0x14($sp)
/* f04ccf8: 27bd0040 */ addiu $sp,$sp,0x40
/* f04ccfc: 03e00008 */ jr $ra
/* f04cd00: 00000000 */ nop
);
GLOBAL_ASM(
glabel rebuildSquadrons
/* f04cd04: 27bdffe0 */ addiu $sp,$sp,-32
/* f04cd08: afbf001c */ sw $ra,0x1c($sp)
/* f04cd0c: 0fc07934 */ jal getNumChrSlots
/* f04cd10: afb00018 */ sw $s0,0x18($sp)
/* f04cd14: 3c0c8006 */ lui $t4,%hi(g_ChrSlots)
/* f04cd18: 3c0a8006 */ lui $t2,%hi(g_SquadronList)
/* f04cd1c: 00405825 */ or $t3,$v0,$zero
/* f04cd20: 2408000f */ addiu $t0,$zero,0xf
/* f04cd24: 254a7e68 */ addiu $t2,$t2,%lo(g_SquadronList)
/* f04cd28: 258c2988 */ addiu $t4,$t4,%lo(g_ChrSlots)
/* f04cd2c: 00004825 */ or $t1,$zero,$zero
/* f04cd30: 24100010 */ addiu $s0,$zero,0x10
/* f04cd34: 241ffffe */ addiu $ra,$zero,-2
/* f04cd38: 240d0006 */ addiu $t5,$zero,0x6
.L0f04cd3c:
/* f04cd3c: 11200005 */ beqz $t1,.L0f04cd54
/* f04cd40: 00003825 */ or $a3,$zero,$zero
/* f04cd44: 8d4e0000 */ lw $t6,0x0($t2)
/* f04cd48: 00097840 */ sll $t7,$t1,0x1
/* f04cd4c: 01cfc021 */ addu $t8,$t6,$t7
/* f04cd50: a708fffe */ sh $t0,-0x2($t8)
.L0f04cd54:
/* f04cd54: 18400019 */ blez $v0,.L0f04cdbc
/* f04cd58: 00002825 */ or $a1,$zero,$zero
.L0f04cd5c:
/* f04cd5c: 8d990000 */ lw $t9,0x0($t4)
/* f04cd60: 24e70001 */ addiu $a3,$a3,0x1
/* f04cd64: 00b91821 */ addu $v1,$a1,$t9
/* f04cd68: 84660000 */ lh $a2,0x0($v1)
/* f04cd6c: 04c00011 */ bltz $a2,.L0f04cdb4
/* f04cd70: 00000000 */ nop
/* f04cd74: 906e02a2 */ lbu $t6,0x2a2($v1)
/* f04cd78: 152e000e */ bne $t1,$t6,.L0f04cdb4
/* f04cd7c: 00000000 */ nop
/* f04cd80: 8c64001c */ lw $a0,0x1c($v1)
/* f04cd84: 0008c840 */ sll $t9,$t0,0x1
/* f04cd88: 50800005 */ beqzl $a0,.L0f04cda0
/* f04cd8c: 8d580000 */ lw $t8,0x0($t2)
/* f04cd90: 908f0000 */ lbu $t7,0x0($a0)
/* f04cd94: 11af0007 */ beq $t5,$t7,.L0f04cdb4
/* f04cd98: 00000000 */ nop
/* f04cd9c: 8d580000 */ lw $t8,0x0($t2)
.L0f04cda0:
/* f04cda0: 25080001 */ addiu $t0,$t0,0x1
/* f04cda4: 00087c00 */ sll $t7,$t0,0x10
/* f04cda8: 03197021 */ addu $t6,$t8,$t9
/* f04cdac: a5c60000 */ sh $a2,0x0($t6)
/* f04cdb0: 000f4403 */ sra $t0,$t7,0x10
.L0f04cdb4:
/* f04cdb4: 14ebffe9 */ bne $a3,$t3,.L0f04cd5c
/* f04cdb8: 24a50368 */ addiu $a1,$a1,0x368
.L0f04cdbc:
/* f04cdbc: 00087040 */ sll $t6,$t0,0x1
/* f04cdc0: 8d590000 */ lw $t9,0x0($t2)
/* f04cdc4: 25080001 */ addiu $t0,$t0,0x1
/* f04cdc8: 0008c400 */ sll $t8,$t0,0x10
/* f04cdcc: 00184403 */ sra $t0,$t8,0x10
/* f04cdd0: 29010110 */ slti $at,$t0,0x110
/* f04cdd4: 032e7821 */ addu $t7,$t9,$t6
/* f04cdd8: 10200004 */ beqz $at,.L0f04cdec
/* f04cddc: a5ff0000 */ sh $ra,0x0($t7)
/* f04cde0: 25290001 */ addiu $t1,$t1,0x1
/* f04cde4: 1530ffd5 */ bne $t1,$s0,.L0f04cd3c
/* f04cde8: 00000000 */ nop
.L0f04cdec:
/* f04cdec: 8fbf001c */ lw $ra,0x1c($sp)
/* f04cdf0: 8fb00018 */ lw $s0,0x18($sp)
/* f04cdf4: 27bd0020 */ addiu $sp,$sp,0x20
/* f04cdf8: 03e00008 */ jr $ra
/* f04cdfc: 00000000 */ nop
);
u32 var80068460 = 0x10204080;
s16 *teamGetChrIds(s32 team_id)
{
s32 i;
u8 lookup[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
for (i = 0; i != MAX_TEAMS; i++) {
if (lookup[i] == team_id) {
team_id = i;
break;
}
}
if (team_id < 0 || team_id >= MAX_TEAMS) {
return NULL;
}
if (team_id != 0) {
return &g_TeamList[g_TeamList[team_id - 1]];
}
return &g_TeamList[MAX_TEAMS - 1];
}
s16 *squadronGetChrIds(s32 squadron_id)
{
if (squadron_id < 0 || squadron_id >= MAX_SQUADRONS) {
return NULL;
}
if (squadron_id != 0) {
return &g_SquadronList[g_SquadronList[squadron_id - 1]];
}
return &g_SquadronList[MAX_SQUADRONS - 1];
}
void audioMarkAsRecentlyPlayed(s16 audioid)
{
g_RecentQuipsPlayed[g_RecentQuipsIndex++] = audioid;
if (g_RecentQuipsIndex > 4) {
g_RecentQuipsIndex = 0;
}
}
bool audioWasNotPlayedRecently(s16 audioid)
{
u8 i;
for (i = 0; i < 5; i++) {
if (g_RecentQuipsPlayed[i] == audioid) {
return false;
}
}
return true;
}
#if VERSION >= VERSION_NTSC_1_0
Gfx *func0f004cd84(Gfx *gdl, s32 arg1)
{
return gdl;
}
#else
const char var7f1a2fe4nb[] = "\nTEAM %d: Cmd: %s";
const char var7f1a2ff8nb[] = "CHR[%d]\n%s\n%s\n%s%s";
const char var7f1a300cnb[] = "myaction?";
const char var7f1a3018nb[] = "ACT_?";
const char var7f1a1020nb[] = "";
GLOBAL_ASM(
glabel func0f04c1e8nb
/* f04c1e8: 27bdfdd0 */ addiu $sp,$sp,-560
/* f04c1ec: afbf005c */ sw $ra,0x5c($sp)
/* f04c1f0: afb1003c */ sw $s1,0x3c($sp)
/* f04c1f4: 00808825 */ or $s1,$a0,$zero
/* f04c1f8: afbe0058 */ sw $s8,0x58($sp)
/* f04c1fc: afb70054 */ sw $s7,0x54($sp)
/* f04c200: afb60050 */ sw $s6,0x50($sp)
/* f04c204: afb5004c */ sw $s5,0x4c($sp)
/* f04c208: afb40048 */ sw $s4,0x48($sp)
/* f04c20c: afb30044 */ sw $s3,0x44($sp)
/* f04c210: afb20040 */ sw $s2,0x40($sp)
/* f04c214: afb00038 */ sw $s0,0x38($sp)
/* f04c218: afa50234 */ sw $a1,0x234($sp)
/* f04c21c: afa00224 */ sw $zero,0x224($sp)
/* f04c220: afa00220 */ sw $zero,0x220($sp)
/* f04c224: 0fc0786c */ jal getNumChrSlots
/* f04c228: a3a0008b */ sb $zero,0x8b($sp)
/* f04c22c: afa20080 */ sw $v0,0x80($sp)
/* f04c230: 0fc5374a */ jal func0f153628
/* f04c234: 02202025 */ or $a0,$s1,$zero
/* f04c238: 8fae0080 */ lw $t6,0x80($sp)
/* f04c23c: 00408825 */ or $s1,$v0,$zero
/* f04c240: 00009825 */ or $s3,$zero,$zero
/* f04c244: 19c000bb */ blez $t6,.NB0f04c534
/* f04c248: 0000a025 */ or $s4,$zero,$zero
/* f04c24c: 3c1e8006 */ lui $s8,0x8006
/* f04c250: 3c15800a */ lui $s5,0x800a
/* f04c254: 26b5e6c0 */ addiu $s5,$s5,-6464
/* f04c258: 27de53c8 */ addiu $s8,$s8,0x53c8
/* f04c25c: 27b7008c */ addiu $s7,$sp,0x8c
/* f04c260: 27b6020c */ addiu $s6,$sp,0x20c
/* f04c264: 27b20104 */ addiu $s2,$sp,0x104
.NB0f04c268:
/* f04c268: 3c0f8006 */ lui $t7,0x8006
/* f04c26c: 8def4e98 */ lw $t7,0x4e98($t7)
/* f04c270: 028f8021 */ addu $s0,$s4,$t7
/* f04c274: 520000ab */ beqzl $s0,.NB0f04c524
/* f04c278: 8fa90080 */ lw $t1,0x80($sp)
/* f04c27c: 8e02001c */ lw $v0,0x1c($s0)
/* f04c280: 104000a7 */ beqz $v0,.NB0f04c520
/* f04c284: 24440028 */ addiu $a0,$v0,0x28
/* f04c288: 0fc192ba */ jal arrayIntersects
/* f04c28c: 8fa50234 */ lw $a1,0x234($sp)
/* f04c290: 504000a4 */ beqzl $v0,.NB0f04c524
/* f04c294: 8fa90080 */ lw $t1,0x80($sp)
/* f04c298: 8e18001c */ lw $t8,0x1c($s0)
/* f04c29c: 3c0141f0 */ lui $at,0x41f0
/* f04c2a0: 44818000 */ mtc1 $at,$f16
/* f04c2a4: c7040008 */ lwc1 $f4,0x8($t8)
/* f04c2a8: 8ea90284 */ lw $t1,0x284($s5)
/* f04c2ac: 02c02825 */ or $a1,$s6,$zero
/* f04c2b0: e7a4020c */ swc1 $f4,0x20c($sp)
/* f04c2b4: c6080028 */ lwc1 $f8,0x28($s0)
/* f04c2b8: c60600b8 */ lwc1 $f6,0xb8($s0)
/* f04c2bc: 46083280 */ add.s $f10,$f6,$f8
/* f04c2c0: 46105481 */ sub.s $f18,$f10,$f16
/* f04c2c4: e7b20210 */ swc1 $f18,0x210($sp)
/* f04c2c8: 8e19001c */ lw $t9,0x1c($s0)
/* f04c2cc: c7240010 */ lwc1 $f4,0x10($t9)
/* f04c2d0: e7a40214 */ swc1 $f4,0x214($sp)
/* f04c2d4: 0c005a95 */ jal func00015b64
/* f04c2d8: 8d241740 */ lw $a0,0x1740($t1)
/* f04c2dc: 3c01c2c8 */ lui $at,0xc2c8
/* f04c2e0: c7a00214 */ lwc1 $f0,0x214($sp)
/* f04c2e4: 44813000 */ mtc1 $at,$f6
/* f04c2e8: 3c01c47a */ lui $at,0xc47a
/* f04c2ec: 4606003c */ c.lt.s $f0,$f6
/* f04c2f0: 00000000 */ sll $zero,$zero,0x0
/* f04c2f4: 4502008b */ bc1fl .NB0f04c524
/* f04c2f8: 8fa90080 */ lw $t1,0x80($sp)
/* f04c2fc: 44814000 */ mtc1 $at,$f8
/* f04c300: 00000000 */ sll $zero,$zero,0x0
/* f04c304: 4600403c */ c.lt.s $f8,$f0
/* f04c308: 00000000 */ sll $zero,$zero,0x0
/* f04c30c: 45020085 */ bc1fl .NB0f04c524
/* f04c310: 8fa90080 */ lw $t1,0x80($sp)
/* f04c314: 8ea20284 */ lw $v0,0x284($s5)
/* f04c318: 02c02025 */ or $a0,$s6,$zero
/* f04c31c: 27a50204 */ addiu $a1,$sp,0x204
/* f04c320: 8c461718 */ lw $a2,0x1718($v0)
/* f04c324: 0fc2cb06 */ jal func0f0b4eb8
/* f04c328: 8c47171c */ lw $a3,0x171c($v0)
/* f04c32c: c7aa0204 */ lwc1 $f10,0x204($sp)
/* f04c330: c7b20208 */ lwc1 $f18,0x208($sp)
/* f04c334: 3c0e800b */ lui $t6,0x800b
/* f04c338: 4600540d */ trunc.w.s $f16,$f10
/* f04c33c: 4600910d */ trunc.w.s $f4,$f18
/* f04c340: 440b8000 */ mfc1 $t3,$f16
/* f04c344: 440d2000 */ mfc1 $t5,$f4
/* f04c348: afab022c */ sw $t3,0x22c($sp)
/* f04c34c: afad0228 */ sw $t5,0x228($sp)
/* f04c350: 8e0202d4 */ lw $v0,0x2d4($s0)
/* f04c354: 50400010 */ beqzl $v0,.NB0f04c398
/* f04c358: 920202a0 */ lbu $v0,0x2a0($s0)
/* f04c35c: 8dce1444 */ lw $t6,0x1444($t6)
/* f04c360: 24180001 */ addiu $t8,$zero,0x1
/* f04c364: 31cf0002 */ andi $t7,$t6,0x2
/* f04c368: 51e0000b */ beqzl $t7,.NB0f04c398
/* f04c36c: 920202a0 */ lbu $v0,0x2a0($s0)
/* f04c370: a3b8008b */ sb $t8,0x8b($sp)
/* f04c374: 0fc6311b */ jal mpGetBotCommandName
/* f04c378: 90440079 */ lbu $a0,0x79($v0)
/* f04c37c: 3c057f1a */ lui $a1,0x7f1a
/* f04c380: 24a52fe4 */ addiu $a1,$a1,0x2fe4
/* f04c384: 02e02025 */ or $a0,$s7,$zero
/* f04c388: 92060125 */ lbu $a2,0x125($s0)
/* f04c38c: 0c004fc1 */ jal sprintf
/* f04c390: 00403825 */ or $a3,$v0,$zero
/* f04c394: 920202a0 */ lbu $v0,0x2a0($s0)
.NB0f04c398:
/* f04c398: 93ad008b */ lbu $t5,0x8b($sp)
/* f04c39c: 02402025 */ or $a0,$s2,$zero
/* f04c3a0: 28410037 */ slti $at,$v0,0x37
/* f04c3a4: 14200004 */ bnez $at,.NB0f04c3b8
/* f04c3a8: 3c057f1a */ lui $a1,0x7f1a
/* f04c3ac: 3c077f1a */ lui $a3,0x7f1a
/* f04c3b0: 10000005 */ beqz $zero,.NB0f04c3c8
/* f04c3b4: 24e7300c */ addiu $a3,$a3,0x300c
.NB0f04c3b8:
/* f04c3b8: 0002c880 */ sll $t9,$v0,0x2
/* f04c3bc: 3c078006 */ lui $a3,0x8006
/* f04c3c0: 00f93821 */ addu $a3,$a3,$t9
/* f04c3c4: 8ce7525c */ lw $a3,0x525c($a3)
.NB0f04c3c8:
/* f04c3c8: 82020007 */ lb $v0,0x7($s0)
/* f04c3cc: 24a52ff8 */ addiu $a1,$a1,0x2ff8
/* f04c3d0: 3c087f1a */ lui $t0,0x7f1a
/* f04c3d4: 28410026 */ slti $at,$v0,0x26
/* f04c3d8: 10200003 */ beqz $at,.NB0f04c3e8
/* f04c3dc: 00000000 */ sll $zero,$zero,0x0
/* f04c3e0: 04410003 */ bgez $v0,.NB0f04c3f0
/* f04c3e4: 00024880 */ sll $t1,$v0,0x2
.NB0f04c3e8:
/* f04c3e8: 10000004 */ beqz $zero,.NB0f04c3fc
/* f04c3ec: 25083018 */ addiu $t0,$t0,0x3018
.NB0f04c3f0:
/* f04c3f0: 3c088006 */ lui $t0,0x8006
/* f04c3f4: 01094021 */ addu $t0,$t0,$t1
/* f04c3f8: 8d085338 */ lw $t0,0x5338($t0)
.NB0f04c3fc:
/* f04c3fc: 2401000f */ addiu $at,$zero,0xf
/* f04c400: 10410003 */ beq $v0,$at,.NB0f04c410
/* f04c404: 2401000e */ addiu $at,$zero,0xe
/* f04c408: 54410007 */ bnel $v0,$at,.NB0f04c428
/* f04c40c: 8fc30000 */ lw $v1,0x0($s8)
.NB0f04c410:
/* f04c410: 920a032c */ lbu $t2,0x32c($s0)
/* f04c414: 000a5880 */ sll $t3,$t2,0x2
/* f04c418: 03cb6021 */ addu $t4,$s8,$t3
/* f04c41c: 10000002 */ beqz $zero,.NB0f04c428
/* f04c420: 8d830000 */ lw $v1,0x0($t4)
/* f04c424: 8fc30000 */ lw $v1,0x0($s8)
.NB0f04c428:
/* f04c428: 11a00003 */ beqz $t5,.NB0f04c438
/* f04c42c: 3c027f1a */ lui $v0,0x7f1a
/* f04c430: 10000002 */ beqz $zero,.NB0f04c43c
/* f04c434: 02e01025 */ or $v0,$s7,$zero
.NB0f04c438:
/* f04c438: 24423020 */ addiu $v0,$v0,0x3020
.NB0f04c43c:
/* f04c43c: 86060000 */ lh $a2,0x0($s0)
/* f04c440: afa20018 */ sw $v0,0x18($sp)
/* f04c444: afa30014 */ sw $v1,0x14($sp)
/* f04c448: 0c004fc1 */ jal sprintf
/* f04c44c: afa80010 */ sw $t0,0x10($sp)
/* f04c450: 3c0e8008 */ lui $t6,0x8008
/* f04c454: 8dce2364 */ lw $t6,0x2364($t6)
/* f04c458: 3c078008 */ lui $a3,0x8008
/* f04c45c: 8ce72368 */ lw $a3,0x2368($a3)
/* f04c460: 27a40220 */ addiu $a0,$sp,0x220
/* f04c464: 27a50224 */ addiu $a1,$sp,0x224
/* f04c468: 02403025 */ or $a2,$s2,$zero
/* f04c46c: afa00014 */ sw $zero,0x14($sp)
/* f04c470: 0fc54655 */ jal textMeasure
/* f04c474: afae0010 */ sw $t6,0x10($sp)
/* f04c478: 8faf022c */ lw $t7,0x22c($sp)
/* f04c47c: 8fb80224 */ lw $t8,0x224($sp)
/* f04c480: 8fa90228 */ lw $t1,0x228($sp)
/* f04c484: 8faa0220 */ lw $t2,0x220($sp)
/* f04c488: 27ac0218 */ addiu $t4,$sp,0x218
/* f04c48c: 01f8c821 */ addu $t9,$t7,$t8
/* f04c490: 012a5821 */ addu $t3,$t1,$t2
/* f04c494: afb9021c */ sw $t9,0x21c($sp)
/* f04c498: afab0218 */ sw $t3,0x218($sp)
/* f04c49c: afac0010 */ sw $t4,0x10($sp)
/* f04c4a0: 02202025 */ or $a0,$s1,$zero
/* f04c4a4: 27a5022c */ addiu $a1,$sp,0x22c
/* f04c4a8: 27a60228 */ addiu $a2,$sp,0x228
/* f04c4ac: 0fc537d6 */ jal func0f153858
/* f04c4b0: 27a7021c */ addiu $a3,$sp,0x21c
/* f04c4b4: 0c002f77 */ jal viGetWidth
/* f04c4b8: 00408825 */ or $s1,$v0,$zero
/* f04c4bc: 00028400 */ sll $s0,$v0,0x10
/* f04c4c0: 00106c03 */ sra $t5,$s0,0x10
/* f04c4c4: 0c002f7b */ jal viGetHeight
/* f04c4c8: 01a08025 */ or $s0,$t5,$zero
/* f04c4cc: 3c0e8008 */ lui $t6,0x8008
/* f04c4d0: 3c0f8008 */ lui $t7,0x8008
/* f04c4d4: 8def2364 */ lw $t7,0x2364($t7)
/* f04c4d8: 8dce2368 */ lw $t6,0x2368($t6)
/* f04c4dc: 3c18ff88 */ lui $t8,0xff88
/* f04c4e0: 371800aa */ ori $t8,$t8,0xaa
/* f04c4e4: 24190088 */ addiu $t9,$zero,0x88
/* f04c4e8: afb9001c */ sw $t9,0x1c($sp)
/* f04c4ec: afb80018 */ sw $t8,0x18($sp)
/* f04c4f0: 02202025 */ or $a0,$s1,$zero
/* f04c4f4: 27a5022c */ addiu $a1,$sp,0x22c
/* f04c4f8: 27a60228 */ addiu $a2,$sp,0x228
/* f04c4fc: 02403825 */ or $a3,$s2,$zero
/* f04c500: afb00020 */ sw $s0,0x20($sp)
/* f04c504: afa20024 */ sw $v0,0x24($sp)
/* f04c508: afa00028 */ sw $zero,0x28($sp)
/* f04c50c: afa0002c */ sw $zero,0x2c($sp)
/* f04c510: afaf0014 */ sw $t7,0x14($sp)
/* f04c514: 0fc54529 */ jal textRender
/* f04c518: afae0010 */ sw $t6,0x10($sp)
/* f04c51c: 00408825 */ or $s1,$v0,$zero
.NB0f04c520:
/* f04c520: 8fa90080 */ lw $t1,0x80($sp)
.NB0f04c524:
/* f04c524: 26730001 */ addiu $s3,$s3,0x1
/* f04c528: 26940368 */ addiu $s4,$s4,0x368
/* f04c52c: 1669ff4e */ bne $s3,$t1,.NB0f04c268
/* f04c530: 00000000 */ sll $zero,$zero,0x0
.NB0f04c534:
/* f04c534: 0fc537a0 */ jal func0f153780
/* f04c538: 02202025 */ or $a0,$s1,$zero
/* f04c53c: 8fbf005c */ lw $ra,0x5c($sp)
/* f04c540: 8fb00038 */ lw $s0,0x38($sp)
/* f04c544: 8fb1003c */ lw $s1,0x3c($sp)
/* f04c548: 8fb20040 */ lw $s2,0x40($sp)
/* f04c54c: 8fb30044 */ lw $s3,0x44($sp)
/* f04c550: 8fb40048 */ lw $s4,0x48($sp)
/* f04c554: 8fb5004c */ lw $s5,0x4c($sp)
/* f04c558: 8fb60050 */ lw $s6,0x50($sp)
/* f04c55c: 8fb70054 */ lw $s7,0x54($sp)
/* f04c560: 8fbe0058 */ lw $s8,0x58($sp)
/* f04c564: 03e00008 */ jr $ra
/* f04c568: 27bd0230 */ addiu $sp,$sp,0x230
);
#endif
void chrToggleModelPart(struct chrdata *chr, s32 partnum)
{
if (chr && chr->model && chr->model->filedata) {
struct modelnode *node = modelGetPart(chr->model->filedata, partnum);
union modelrwdata *rwdata = NULL;
if (node) {
rwdata = modelGetNodeRwData(chr->model, node);
}
if (rwdata) {
bool visible = rwdata->toggle.visible;
rwdata->toggle.visible = !visible;
}
}
}
u32 var8006846c = 0x00000064;
u32 var80068470 = 0x00000065;
u32 var80068474 = 0x00000066;
u32 var80068478 = 0x00000067;
u32 var8006847c = 0x00000030;
u32 var80068480 = 0x0000003a;
u32 var80068484 = 0x00000023;
u32 var80068488 = 0x00000023;
u32 var8006848c = 0x00000000;
GLOBAL_ASM(
glabel func0f04d000
.late_rodata
glabel var7f1a9430
.word 0x40c907a9
glabel var7f1a9434
.word 0x40490fdb
glabel var7f1a9438
.word 0x439d8000
glabel var7f1a943c
.word 0x40490fdb
glabel var7f1a9440
.word 0x3fc90fdb
glabel var7f1a9444
.word 0x3fc90fdb
glabel var7f1a9448
.word 0x3f19999a
.text
/* f04d000: 27bdff58 */ addiu $sp,$sp,-168
/* f04d004: 3c0f8007 */ lui $t7,%hi(var8006846c)
/* f04d008: afbf002c */ sw $ra,0x2c($sp)
/* f04d00c: afb00028 */ sw $s0,0x28($sp)
/* f04d010: 25ef846c */ addiu $t7,$t7,%lo(var8006846c)
/* f04d014: 8de10000 */ lw $at,0x0($t7)
/* f04d018: 8de80004 */ lw $t0,0x4($t7)
/* f04d01c: 27ae0088 */ addiu $t6,$sp,0x88
/* f04d020: adc10000 */ sw $at,0x0($t6)
/* f04d024: adc80004 */ sw $t0,0x4($t6)
/* f04d028: 8de8000c */ lw $t0,0xc($t7)
/* f04d02c: 8de10008 */ lw $at,0x8($t7)
/* f04d030: 00808025 */ or $s0,$a0,$zero
/* f04d034: adc8000c */ sw $t0,0xc($t6)
/* f04d038: adc10008 */ sw $at,0x8($t6)
/* f04d03c: 8de10010 */ lw $at,0x10($t7)
/* f04d040: 8de80014 */ lw $t0,0x14($t7)
/* f04d044: adc10010 */ sw $at,0x10($t6)
/* f04d048: adc80014 */ sw $t0,0x14($t6)
/* f04d04c: 8de8001c */ lw $t0,0x1c($t7)
/* f04d050: 8de10018 */ lw $at,0x18($t7)
/* f04d054: adc8001c */ sw $t0,0x1c($t6)
/* f04d058: 0fc0a221 */ jal chrGetTargetProp
/* f04d05c: adc10018 */ sw $at,0x18($t6)
/* f04d060: 02002025 */ or $a0,$s0,$zero
/* f04d064: 0fc122a1 */ jal chrGetAngleToPos
/* f04d068: 24450008 */ addiu $a1,$v0,0x8
/* f04d06c: 3c017f1b */ lui $at,%hi(var7f1a9430)
/* f04d070: c4249430 */ lwc1 $f4,%lo(var7f1a9430)($at)
/* f04d074: 3c0143b4 */ lui $at,0x43b4
/* f04d078: 44814000 */ mtc1 $at,$f8
/* f04d07c: 46040183 */ div.s $f6,$f0,$f4
/* f04d080: 24090001 */ addiu $t1,$zero,0x1
/* f04d084: afa00078 */ sw $zero,0x78($sp)
/* f04d088: afa90068 */ sw $t1,0x68($sp)
/* f04d08c: 8e040020 */ lw $a0,0x20($s0)
/* f04d090: 46083082 */ mul.s $f2,$f6,$f8
/* f04d094: 0c006b91 */ jal func0001ae44
/* f04d098: e7a2007c */ swc1 $f2,0x7c($sp)
/* f04d09c: 02002025 */ or $a0,$s0,$zero
/* f04d0a0: 00002825 */ or $a1,$zero,$zero
/* f04d0a4: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f04d0a8: e7a00058 */ swc1 $f0,0x58($sp)
/* f04d0ac: 0fc0e686 */ jal chrIsReadyForOrders
/* f04d0b0: 02002025 */ or $a0,$s0,$zero
/* f04d0b4: c7a2007c */ lwc1 $f2,0x7c($sp)
/* f04d0b8: 104000df */ beqz $v0,.L0f04d438
/* f04d0bc: c7ac0058 */ lwc1 $f12,0x58($sp)
/* f04d0c0: 02002025 */ or $a0,$s0,$zero
/* f04d0c4: 00002825 */ or $a1,$zero,$zero
/* f04d0c8: e7a2007c */ swc1 $f2,0x7c($sp)
/* f04d0cc: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f04d0d0: e7ac0058 */ swc1 $f12,0x58($sp)
/* f04d0d4: 3c014234 */ lui $at,0x4234
/* f04d0d8: c7a2007c */ lwc1 $f2,0x7c($sp)
/* f04d0dc: 44815000 */ mtc1 $at,$f10
/* f04d0e0: c7ac0058 */ lwc1 $f12,0x58($sp)
/* f04d0e4: 3c014307 */ lui $at,0x4307
/* f04d0e8: 4602503c */ c.lt.s $f10,$f2
/* f04d0ec: 00000000 */ nop
/* f04d0f0: 4502000e */ bc1fl .L0f04d12c
/* f04d0f4: 3c014307 */ lui $at,0x4307
/* f04d0f8: 44818000 */ mtc1 $at,$f16
/* f04d0fc: 240a0003 */ addiu $t2,$zero,0x3
/* f04d100: 240b0001 */ addiu $t3,$zero,0x1
/* f04d104: 4610103e */ c.le.s $f2,$f16
/* f04d108: 3c017f1b */ lui $at,%hi(var7f1a9434)
/* f04d10c: 45020007 */ bc1fl .L0f04d12c
/* f04d110: 3c014307 */ lui $at,0x4307
/* f04d114: c4329434 */ lwc1 $f18,%lo(var7f1a9434)($at)
/* f04d118: afaa0084 */ sw $t2,0x84($sp)
/* f04d11c: afab0078 */ sw $t3,0x78($sp)
/* f04d120: 10000046 */ b .L0f04d23c
/* f04d124: 46126300 */ add.s $f12,$f12,$f18
/* f04d128: 3c014307 */ lui $at,0x4307
.L0f04d12c:
/* f04d12c: 44812000 */ mtc1 $at,$f4
/* f04d130: 3c014361 */ lui $at,0x4361
/* f04d134: 4602203c */ c.lt.s $f4,$f2
/* f04d138: 00000000 */ nop
/* f04d13c: 45020018 */ bc1fl .L0f04d1a0
/* f04d140: 3c014361 */ lui $at,0x4361
/* f04d144: 44813000 */ mtc1 $at,$f6
/* f04d148: 240c0002 */ addiu $t4,$zero,0x2
/* f04d14c: 4606103c */ c.lt.s $f2,$f6
/* f04d150: 00000000 */ nop
/* f04d154: 45020012 */ bc1fl .L0f04d1a0
/* f04d158: 3c014361 */ lui $at,0x4361
/* f04d15c: afac0084 */ sw $t4,0x84($sp)
/* f04d160: 0c004b70 */ jal random
/* f04d164: e7ac0058 */ swc1 $f12,0x58($sp)
/* f04d168: 240100ff */ addiu $at,$zero,0xff
/* f04d16c: 0041001b */ divu $zero,$v0,$at
/* f04d170: 00006810 */ mfhi $t5
/* f04d174: 2da10002 */ sltiu $at,$t5,0x2
/* f04d178: 14200030 */ bnez $at,.L0f04d23c
/* f04d17c: c7ac0058 */ lwc1 $f12,0x58($sp)
/* f04d180: afa00068 */ sw $zero,0x68($sp)
/* f04d184: 8e190018 */ lw $t9,0x18($s0)
/* f04d188: 3c01efff */ lui $at,0xefff
/* f04d18c: 3421ffff */ ori $at,$at,0xffff
/* f04d190: 0321c024 */ and $t8,$t9,$at
/* f04d194: 10000029 */ b .L0f04d23c
/* f04d198: ae180018 */ sw $t8,0x18($s0)
/* f04d19c: 3c014361 */ lui $at,0x4361
.L0f04d1a0:
/* f04d1a0: 44814000 */ mtc1 $at,$f8
/* f04d1a4: 3c017f1b */ lui $at,%hi(var7f1a9438)
/* f04d1a8: 4602403c */ c.lt.s $f8,$f2
/* f04d1ac: 00000000 */ nop
/* f04d1b0: 4500000c */ bc1f .L0f04d1e4
/* f04d1b4: 00000000 */ nop
/* f04d1b8: c42a9438 */ lwc1 $f10,%lo(var7f1a9438)($at)
/* f04d1bc: 240e0003 */ addiu $t6,$zero,0x3
/* f04d1c0: 3c017f1b */ lui $at,%hi(var7f1a943c)
/* f04d1c4: 460a103c */ c.lt.s $f2,$f10
/* f04d1c8: 00000000 */ nop
/* f04d1cc: 45000005 */ bc1f .L0f04d1e4
/* f04d1d0: 00000000 */ nop
/* f04d1d4: c430943c */ lwc1 $f16,%lo(var7f1a943c)($at)
/* f04d1d8: afae0084 */ sw $t6,0x84($sp)
/* f04d1dc: 10000017 */ b .L0f04d23c
/* f04d1e0: 46106300 */ add.s $f12,$f12,$f16
.L0f04d1e4:
/* f04d1e4: 0c004b70 */ jal random
/* f04d1e8: e7ac0058 */ swc1 $f12,0x58($sp)
/* f04d1ec: 24010064 */ addiu $at,$zero,0x64
/* f04d1f0: 0041001b */ divu $zero,$v0,$at
/* f04d1f4: 00007810 */ mfhi $t7
/* f04d1f8: 2de10032 */ sltiu $at,$t7,0x32
/* f04d1fc: 10200003 */ beqz $at,.L0f04d20c
/* f04d200: c7ac0058 */ lwc1 $f12,0x58($sp)
/* f04d204: 10000003 */ b .L0f04d214
/* f04d208: afa00084 */ sw $zero,0x84($sp)
.L0f04d20c:
/* f04d20c: 24080001 */ addiu $t0,$zero,0x1
/* f04d210: afa80084 */ sw $t0,0x84($sp)
.L0f04d214:
/* f04d214: 8fa90084 */ lw $t1,0x84($sp)
/* f04d218: 3c017f1b */ lui $at,%hi(var7f1a9440)
/* f04d21c: 15200005 */ bnez $t1,.L0f04d234
/* f04d220: 00000000 */ nop
/* f04d224: 3c017f1b */ lui $at,%hi(var7f1a9444)
/* f04d228: c4329440 */ lwc1 $f18,%lo(var7f1a9440)($at)
/* f04d22c: 10000003 */ b .L0f04d23c
/* f04d230: 46126301 */ sub.s $f12,$f12,$f18
.L0f04d234:
/* f04d234: c4249444 */ lwc1 $f4,%lo(var7f1a9444)($at)
/* f04d238: 46046300 */ add.s $f12,$f12,$f4
.L0f04d23c:
/* f04d23c: 8faa0068 */ lw $t2,0x68($sp)
/* f04d240: 5140007b */ beqzl $t2,.L0f04d430
/* f04d244: 02002025 */ or $a0,$s0,$zero
/* f04d248: 0c0068f7 */ jal sinf
/* f04d24c: e7ac0058 */ swc1 $f12,0x58($sp)
/* f04d250: 3c0142c8 */ lui $at,0x42c8
/* f04d254: 44814000 */ mtc1 $at,$f8
/* f04d258: 8e0b001c */ lw $t3,0x1c($s0)
/* f04d25c: c7ac0058 */ lwc1 $f12,0x58($sp)
/* f04d260: 46080282 */ mul.s $f10,$f0,$f8
/* f04d264: c5660008 */ lwc1 $f6,0x8($t3)
/* f04d268: 460a3401 */ sub.s $f16,$f6,$f10
/* f04d26c: e7b0003c */ swc1 $f16,0x3c($sp)
/* f04d270: 8e0c001c */ lw $t4,0x1c($s0)
/* f04d274: c592000c */ lwc1 $f18,0xc($t4)
/* f04d278: 0c0068f4 */ jal cosf
/* f04d27c: e7b20040 */ swc1 $f18,0x40($sp)
/* f04d280: 3c0142c8 */ lui $at,0x42c8
/* f04d284: 44812000 */ mtc1 $at,$f4
/* f04d288: 8e0d001c */ lw $t5,0x1c($s0)
/* f04d28c: 27a5006c */ addiu $a1,$sp,0x6c
/* f04d290: 46040202 */ mul.s $f8,$f0,$f4
/* f04d294: c5a60010 */ lwc1 $f6,0x10($t5)
/* f04d298: 27a60074 */ addiu $a2,$sp,0x74
/* f04d29c: 27a70070 */ addiu $a3,$sp,0x70
/* f04d2a0: 46064280 */ add.s $f10,$f8,$f6
/* f04d2a4: e7aa0044 */ swc1 $f10,0x44($sp)
/* f04d2a8: 0fc0a277 */ jal propChrGetBbox
/* f04d2ac: 8e04001c */ lw $a0,0x1c($s0)
/* f04d2b0: 3c013f00 */ lui $at,0x3f00
/* f04d2b4: 44819000 */ mtc1 $at,$f18
/* f04d2b8: c7b0006c */ lwc1 $f16,0x6c($sp)
/* f04d2bc: 8e02001c */ lw $v0,0x1c($s0)
/* f04d2c0: 27a6003c */ addiu $a2,$sp,0x3c
/* f04d2c4: 46128002 */ mul.s $f0,$f16,$f18
/* f04d2c8: 27a70048 */ addiu $a3,$sp,0x48
/* f04d2cc: 24440008 */ addiu $a0,$v0,0x8
/* f04d2d0: 24450028 */ addiu $a1,$v0,0x28
/* f04d2d4: 0fc1979d */ jal func0f065e74
/* f04d2d8: e7a0005c */ swc1 $f0,0x5c($sp)
/* f04d2dc: 02002025 */ or $a0,$s0,$zero
/* f04d2e0: 27a5003c */ addiu $a1,$sp,0x3c
/* f04d2e4: 0fc087ea */ jal func0f021fa8
/* f04d2e8: 27a60048 */ addiu $a2,$sp,0x48
/* f04d2ec: 8e02001c */ lw $v0,0x1c($s0)
/* f04d2f0: c7a4003c */ lwc1 $f4,0x3c($sp)
/* f04d2f4: c7a0005c */ lwc1 $f0,0x5c($sp)
/* f04d2f8: c4480008 */ lwc1 $f8,0x8($v0)
/* f04d2fc: c7a60044 */ lwc1 $f6,0x44($sp)
/* f04d300: c44a0010 */ lwc1 $f10,0x10($v0)
/* f04d304: 46082081 */ sub.s $f2,$f4,$f8
/* f04d308: 2419003f */ addiu $t9,$zero,0x3f
/* f04d30c: 24180001 */ addiu $t8,$zero,0x1
/* f04d310: 460a3301 */ sub.s $f12,$f6,$f10
/* f04d314: 4602003c */ c.lt.s $f0,$f2
/* f04d318: 00000000 */ nop
/* f04d31c: 4503000f */ bc1tl .L0f04d35c
/* f04d320: afb90010 */ sw $t9,0x10($sp)
/* f04d324: 460c003c */ c.lt.s $f0,$f12
/* f04d328: 00000000 */ nop
/* f04d32c: 4503000b */ bc1tl .L0f04d35c
/* f04d330: afb90010 */ sw $t9,0x10($sp)
/* f04d334: 46000387 */ neg.s $f14,$f0
/* f04d338: 460e103c */ c.lt.s $f2,$f14
/* f04d33c: 00000000 */ nop
/* f04d340: 45030006 */ bc1tl .L0f04d35c
/* f04d344: afb90010 */ sw $t9,0x10($sp)
/* f04d348: 460e603c */ c.lt.s $f12,$f14
/* f04d34c: 00000000 */ nop
/* f04d350: 45020011 */ bc1fl .L0f04d398
/* f04d354: 8fa30068 */ lw $v1,0x68($sp)
/* f04d358: afb90010 */ sw $t9,0x10($sp)
.L0f04d35c:
/* f04d35c: afb80014 */ sw $t8,0x14($sp)
/* f04d360: c440000c */ lwc1 $f0,0xc($v0)
/* f04d364: c7b00074 */ lwc1 $f16,0x74($sp)
/* f04d368: c7a40070 */ lwc1 $f4,0x70($sp)
/* f04d36c: 24440008 */ addiu $a0,$v0,0x8
/* f04d370: 46008481 */ sub.s $f18,$f16,$f0
/* f04d374: 24450028 */ addiu $a1,$v0,0x28
/* f04d378: 27a6003c */ addiu $a2,$sp,0x3c
/* f04d37c: 46002201 */ sub.s $f8,$f4,$f0
/* f04d380: e7b20018 */ swc1 $f18,0x18($sp)
/* f04d384: 27a70048 */ addiu $a3,$sp,0x48
/* f04d388: 0c00b62e */ jal func0002d8b8
/* f04d38c: e7a8001c */ swc1 $f8,0x1c($sp)
/* f04d390: afa20068 */ sw $v0,0x68($sp)
/* f04d394: 8fa30068 */ lw $v1,0x68($sp)
.L0f04d398:
/* f04d398: 2401ffff */ addiu $at,$zero,-1
/* f04d39c: 54610008 */ bnel $v1,$at,.L0f04d3c0
/* f04d3a0: 24010001 */ addiu $at,$zero,0x1
/* f04d3a4: 8e0e0018 */ lw $t6,0x18($s0)
/* f04d3a8: 3c01efff */ lui $at,0xefff
/* f04d3ac: 3421ffff */ ori $at,$at,0xffff
/* f04d3b0: 01c17824 */ and $t7,$t6,$at
/* f04d3b4: 1000001d */ b .L0f04d42c
/* f04d3b8: ae0f0018 */ sw $t7,0x18($s0)
/* f04d3bc: 24010001 */ addiu $at,$zero,0x1
.L0f04d3c0:
/* f04d3c0: 14610015 */ bne $v1,$at,.L0f04d418
/* f04d3c4: 8fa80084 */ lw $t0,0x84($sp)
/* f04d3c8: 00084880 */ sll $t1,$t0,0x2
/* f04d3cc: 27aa0088 */ addiu $t2,$sp,0x88
/* f04d3d0: 012a1021 */ addu $v0,$t1,$t2
/* f04d3d4: 8c4b0010 */ lw $t3,0x10($v0)
/* f04d3d8: 3c017f1b */ lui $at,%hi(var7f1a9448)
/* f04d3dc: c42a9448 */ lwc1 $f10,%lo(var7f1a9448)($at)
/* f04d3e0: 448b3000 */ mtc1 $t3,$f6
/* f04d3e4: 8fac0078 */ lw $t4,0x78($sp)
/* f04d3e8: 8c450000 */ lw $a1,0x0($v0)
/* f04d3ec: 468031a0 */ cvt.s.w $f6,$f6
/* f04d3f0: 240d0002 */ addiu $t5,$zero,0x2
/* f04d3f4: afad0014 */ sw $t5,0x14($sp)
/* f04d3f8: 02002025 */ or $a0,$s0,$zero
/* f04d3fc: 24060000 */ addiu $a2,$zero,0x0
/* f04d400: e7aa0018 */ swc1 $f10,0x18($sp)
/* f04d404: 44073000 */ mfc1 $a3,$f6
/* f04d408: 0fc0c3fe */ jal chrStartAnim
/* f04d40c: afac0010 */ sw $t4,0x10($sp)
/* f04d410: 10000007 */ b .L0f04d430
/* f04d414: 02002025 */ or $a0,$s0,$zero
.L0f04d418:
/* f04d418: 8e190018 */ lw $t9,0x18($s0)
/* f04d41c: 3c01efff */ lui $at,0xefff
/* f04d420: 3421ffff */ ori $at,$at,0xffff
/* f04d424: 0321c024 */ and $t8,$t9,$at
/* f04d428: ae180018 */ sw $t8,0x18($s0)
.L0f04d42c:
/* f04d42c: 02002025 */ or $a0,$s0,$zero
.L0f04d430:
/* f04d430: 0fc079ef */ jal chrSetOrUnsetHiddenFlag00000100
/* f04d434: 24050001 */ addiu $a1,$zero,0x1
.L0f04d438:
/* f04d438: 8fbf002c */ lw $ra,0x2c($sp)
/* f04d43c: 8fb00028 */ lw $s0,0x28($sp)
/* f04d440: 27bd00a8 */ addiu $sp,$sp,0xa8
/* f04d444: 03e00008 */ jr $ra
/* f04d448: 00000000 */ nop
);
/**
* Checks if the chr is doing an avoiding animation.
*
* These animations are possibly unused. In each one, the chr jumps backwards or
* to the side as if avoiding something, then looks at whatever it was that just
* went past.
*/
bool chrIsAvoiding(struct chrdata *chr)
{
s32 anim = modelGetAnimNum(chr->model);
chr->chrflags &= ~CHRCFLAG_10000000;
// Possible @bug or just sloppy code: The flag check below can never pass
// because that flag was just turned off above.
if (anim == 0x64
|| anim == 0x65
|| anim == 0x66
|| anim == 0x67
|| (chr->chrflags & CHRCFLAG_10000000)) {
return true;
}
return false;
}
void chrDrCarollEmitSparks(struct chrdata *chr)
{
if (chr && chr->prop) {
func0f0939f8(0, chr->prop, SFX_SHIELD_DAMAGE, -1, -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
sparksCreate(chr->prop->rooms[0], chr->prop, &chr->prop->pos, NULL, 0, 1);
}
}