mirror of
https://github.com/HarbourMasters/Starship.git
synced 2025-02-10 04:02:26 +03:00
1498 lines
59 KiB
C
1498 lines
59 KiB
C
#include "global.h"
|
|
#include "assets/ast_landmaster.h"
|
|
#include "assets/ast_titania.h"
|
|
|
|
void func_tank_80047754(Player* player);
|
|
void func_tank_80047D38(Player* player, f32);
|
|
void func_tank_80047E7C(Player* player, f32, f32);
|
|
void func_tank_80047FBC(Player* player);
|
|
void func_tank_800481F4(Player* player);
|
|
s32 func_tank_80046E40(Player* player, f32* hitboxData, s32* index, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot,
|
|
f32 zRot, f32 arg9, f32 argA, f32 argB);
|
|
|
|
static u8 D_800C9F00 = 0;
|
|
static u8 D_800C9F04 = 0;
|
|
static u8 D_800C9F08 = 0;
|
|
static s32 D_800C9F0C = 0; // unused.
|
|
static f32 D_800C9F10 = 0.0f;
|
|
static s32 D_800C9F14 = 0;
|
|
static s32 D_800C9F18[2] = { 0, 0 }; // unused.
|
|
static f32 D_800C9F20 = 0.0f;
|
|
static f32 D_800C9F24 = 0.0f;
|
|
static f32 D_800C9F28 = 0.0f;
|
|
Vec3f D_tank_800C9F2C = { 0.0f, 0.0f, 0.0f };
|
|
static s32 D_800C9F38 = 0; // unused
|
|
|
|
void func_tank_80043280(u16* text0, u16* text1, f32 zRot) {
|
|
s32 py;
|
|
s32 px;
|
|
s32 i;
|
|
s32 j;
|
|
f32 dy;
|
|
f32 dx;
|
|
s32 pad;
|
|
Vec3f sp80;
|
|
Vec3f sp74;
|
|
|
|
Matrix_Push(&gCalcMatrix);
|
|
text0 = LOAD_ASSET(text0);
|
|
text1 = LOAD_ASSET(text1);
|
|
Matrix_RotateZ(gCalcMatrix, M_DTOR * zRot, 0);
|
|
sp74.z = 0.0f;
|
|
for (i = 0, dy = 0.0f; i < 32; i++, dy += 1.0f) {
|
|
for (j = 0, dx = 0.0f; j < 32; j++, dx += 1.0f) {
|
|
sp74.x = dx - 16.0f;
|
|
sp74.y = dy - 16.0f;
|
|
Matrix_MultVec3f(gCalcMatrix, &sp74, &sp80);
|
|
px = (s32) (sp80.x + 16.0f);
|
|
py = (s32) (sp80.y + 16.0f);
|
|
if ((px >= 0) && (px < 32) && (py >= 0) && (py < 32)) {
|
|
text0[px + 32 * py] = text1[j + 32 * i];
|
|
}
|
|
}
|
|
}
|
|
Matrix_Pop(&gCalcMatrix);
|
|
}
|
|
|
|
void func_tank_80043468(Player* player) {
|
|
f32 sp54;
|
|
f32 sp50;
|
|
f32 sp4C;
|
|
f32 sp48;
|
|
s32 pad44;
|
|
f32 sp40;
|
|
s32 pad3C;
|
|
|
|
sp54 = ((player->pos.x - player->unk_0AC) * player->unk_148) + (player->unk_0E8 * 0.5f);
|
|
sp48 = sp54 + (player->unk_0E8 * -5.0f);
|
|
sp40 = player->camEye.z - 1000.0f;
|
|
sp54 += player->unk_0AC;
|
|
sp48 += player->unk_0AC;
|
|
if (player->unk_1D4 != 0) {
|
|
sp50 = player->pos.y + 100.0f + (-player->unk_0E4 * 5.0f);
|
|
sp4C = player->pos.y + player->unk_0E4 * 10.0f;
|
|
sp50 += player->unk_17C * 0.5f;
|
|
sp4C += player->unk_17C * -5.0f;
|
|
|
|
if (0 || (gCurrentLevel == LEVEL_MACBETH) && (D_MA_801BA1E8 == 102)) {
|
|
sp50 = player->pos.y + 45.0f + (-player->unk_0E4 * 5.0f);
|
|
sp4C = player->pos.y + 200.0f + (player->unk_0E4 * 10.0f);
|
|
sp50 += player->unk_17C * 0.2f;
|
|
sp4C += player->unk_17C * -3.0f;
|
|
}
|
|
if (D_MA_801BA1E8 == 99) {
|
|
sp50 = player->pos.y + 40.0f + (-player->unk_0E4 * 5.0f);
|
|
sp4C = player->pos.y + 200.0f + (player->unk_0E4 * 10.0f);
|
|
sp50 += player->unk_17C * 0.2f;
|
|
sp4C += player->unk_17C * -3.0f;
|
|
} else if (D_MA_801BA1E8 == 98) {
|
|
sp50 = player->pos.y + 100.0f;
|
|
sp4C = player->pos.y + (player->unk_0E4 * 10.0f);
|
|
sp4C += player->unk_17C * -3.0f;
|
|
}
|
|
} else {
|
|
sp50 = player->pos.y + 50.0f;
|
|
sp4C = player->pos.y;
|
|
|
|
if (0 || (gCurrentLevel == LEVEL_MACBETH) && (D_MA_801BA1E8 == 102)) {
|
|
sp4C = player->pos.y + 150.0f;
|
|
}
|
|
if (D_MA_801BA1E8 == 99) {
|
|
sp4C = player->pos.y + 150.0f;
|
|
}
|
|
}
|
|
if (player->vel.y < -20.0f) {
|
|
Math_SmoothStepToF(&player->camAt.y, sp4C - 100.0f, 0.2f, player->unk_014 * 20.0f, 0.00001f);
|
|
}
|
|
Math_SmoothStepToF(&player->camEye.x, sp54, 0.1f, player->unk_014 * 20.0f, 0.00001f);
|
|
Math_SmoothStepToF(&player->camEye.y, sp50, 0.1f, player->unk_014 * 7.0f, 0.00001f);
|
|
Math_SmoothStepToF(&player->camAt.y, sp4C, 0.1f, player->unk_014 * 7.0f, 0.00001f);
|
|
Math_SmoothStepToF(&player->camAt.x, sp48, 0.1f, player->unk_014 * 20.0f, 0.00001f);
|
|
Math_SmoothStepToF(&player->camEye.z, 200.0f, 0.1f, player->unk_014 * 10.0f, 0.0f);
|
|
Math_SmoothStepToF(&player->camAt.z, sp40, 1.0f, player->unk_014 * 10.0f, 0.0f);
|
|
Math_SmoothStepToF(&player->unk_034, player->unk_0EC * -0.4f, 0.1f, 1.0f, 0.01f);
|
|
Math_SmoothStepToF(&player->unk_014, 1.0f, 1.0f, 0.1f, 0.0f);
|
|
}
|
|
|
|
void func_tank_800438E0(Effect* effect, f32 xPos, f32 yPos, f32 zPos, f32 scale) {
|
|
f32 pad[12];
|
|
|
|
Effect_Initialize(effect);
|
|
effect->obj.status = OBJ_ACTIVE;
|
|
effect->obj.id = OBJ_EFFECT_357;
|
|
effect->obj.pos.x = xPos;
|
|
effect->obj.pos.y = yPos;
|
|
effect->obj.pos.z = zPos;
|
|
effect->vel.x = RAND_FLOAT(1.0f) - RAND_FLOAT(2.0f);
|
|
effect->vel.y = RAND_FLOAT(3.0f) - (gPlayer[0].vel.z / 5.0f) + 3.0f;
|
|
effect->vel.z = RAND_FLOAT(3.0f) - (gPlayer[0].vel.z / 5.0f) + 2.0f;
|
|
effect->scale2 = (RAND_FLOAT(0.8f) + 0.3f) * scale;
|
|
effect->timer_50 = RAND_INT(5.0f) + 8;
|
|
effect->obj.rot.x = RAND_FLOAT(360.0f);
|
|
effect->unk_60.x = RAND_FLOAT_CENTERED(30.0f);
|
|
effect->unk_60.y = RAND_FLOAT_CENTERED(30.0f);
|
|
effect->unk_60.z = RAND_FLOAT_CENTERED(30.0f);
|
|
Object_SetInfo(&effect->info, effect->obj.id);
|
|
}
|
|
|
|
void func_tank_80043AA0(f32 xPos, f32 yPos, f32 zPos, f32 scale) {
|
|
s32 i;
|
|
|
|
for (i = 50; i >= 0; i--) {
|
|
if (gEffects[i].obj.status == OBJ_FREE) {
|
|
func_tank_800438E0(&gEffects[i], xPos, yPos, zPos, scale);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_80043B0C(s32 arg0) {
|
|
}
|
|
|
|
void func_tank_80043B18(Player* player) {
|
|
f32 pad;
|
|
Vec3f sp48;
|
|
Vec3f sp3C;
|
|
f32 sp38;
|
|
|
|
Matrix_Translate(gCalcMatrix, 0.0f, player->unk_18C + 30.0f, 0, 0);
|
|
Matrix_RotateY(gCalcMatrix, player->unk_114 * M_DTOR, 1);
|
|
Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1);
|
|
Matrix_RotateZ(gCalcMatrix, (player->unk_0EC + player->unk_0F0) * M_DTOR, 1);
|
|
Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 1);
|
|
Matrix_RotateZ(gCalcMatrix, -player->unk_12C * M_DTOR, 1);
|
|
Matrix_Translate(gCalcMatrix, 0.0f, -30.0f, 0, 1);
|
|
sp48.y = 0.0f;
|
|
sp48.z = -20.0f;
|
|
sp38 = player->unk_114;
|
|
if (player->unk_1DC != 0) {
|
|
|
|
sp48.x = 0.0f;
|
|
sp48.z = RAND_FLOAT_CENTERED(50.0f) + -20.0f;
|
|
if (player->unk_1EC < 0) {
|
|
sp38 -= 65.0f;
|
|
} else {
|
|
sp38 += 65.0f;
|
|
}
|
|
Matrix_MultVec3f(gCalcMatrix, &sp48, &sp3C);
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
|
func_tank_80043AA0(player->pos.x + sp3C.x, player->pos.y + sp3C.y, player->unk_138 + sp3C.z, 0.2f);
|
|
} else {
|
|
if (!(gGameFrameCount & 1)) {
|
|
Titania_80189120(player->pos.x + sp3C.x, player->pos.y + sp3C.y, player->unk_138 + sp3C.z,
|
|
player->unk_0E8 + sp38, 1.3f);
|
|
}
|
|
if (!(gGameFrameCount & 3)) {
|
|
func_effect_8007A900(player->pos.x + sp3C.x, player->pos.y + sp3C.y + 20.0f, player->unk_138 + sp3C.z,
|
|
2.0f, 255, 15, 0);
|
|
}
|
|
}
|
|
} else {
|
|
sp38 += player->unk_12C;
|
|
if (player->unk_12C > -5.0f) {
|
|
sp48.x = 36.0f;
|
|
Matrix_MultVec3f(gCalcMatrix, &sp48, &sp3C);
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
|
if (gGameFrameCount & 1) {
|
|
func_tank_80043AA0(player->pos.x + sp3C.x, player->pos.y + sp3C.y, player->unk_138 + sp3C.z, 0.2f);
|
|
}
|
|
} else {
|
|
if (!(gGameFrameCount & 1)) {
|
|
Titania_80189120(player->pos.x + sp3C.x, player->pos.y + sp3C.y, player->unk_138 + sp3C.z,
|
|
player->unk_0E8 + sp38, 1.0f);
|
|
}
|
|
if (!(gGameFrameCount & 3) && (player->unk_0D0 >= 5.0f)) {
|
|
func_effect_8007A900(player->pos.x + sp3C.x, player->pos.y + sp3C.y + 20.0f,
|
|
player->unk_138 + sp3C.z, 2.0f, 255, 15, 0);
|
|
}
|
|
}
|
|
}
|
|
if (player->unk_12C < 5.0f) {
|
|
sp48.x = -36.0f;
|
|
Matrix_MultVec3f(gCalcMatrix, &sp48, &sp3C);
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
|
if (!(gGameFrameCount & 1)) {
|
|
func_tank_80043AA0(player->pos.x + sp3C.x, player->pos.y + sp3C.y, player->unk_138 + sp3C.z, 0.2f);
|
|
}
|
|
} else {
|
|
if (!(gGameFrameCount & 1)) {
|
|
Titania_80189120(player->pos.x + sp3C.x, player->pos.y + sp3C.y, player->unk_138 + sp3C.z,
|
|
player->unk_0E8 + sp38, 1.0f);
|
|
}
|
|
if (!(gGameFrameCount & 3) && (player->unk_0D0 >= 5.0f)) {
|
|
func_effect_8007A900(player->pos.x + sp3C.x, player->pos.y + sp3C.y + 20.0f,
|
|
player->unk_138 + sp3C.z, 2.0f, 255, 15, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 func_tank_80044120(Hitbox* hitbox, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6) {
|
|
Vec3f sp34;
|
|
Vec3f sp28;
|
|
|
|
sp34.x = arg1 - arg4;
|
|
sp34.y = arg2 - arg5;
|
|
sp34.z = arg3 - arg6;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp34, &sp28);
|
|
return func_play_800A78C4(hitbox, arg4, arg5, arg6, sp28.x + arg4, sp28.y + arg5, sp28.z + arg6);
|
|
}
|
|
|
|
void func_tank_800441C8(Player* player, f32* hitboxData, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot) {
|
|
Hitbox* hitbox;
|
|
s32 count;
|
|
s32 i;
|
|
f32 x;
|
|
f32 y;
|
|
f32 z;
|
|
|
|
Matrix_RotateY(gCalcMatrix, -yRot * M_DTOR, 0);
|
|
count = *hitboxData++;
|
|
if (count != 0) {
|
|
for (i = 0; i < count; i++, hitboxData += 6) {
|
|
hitbox = (Hitbox*) hitboxData;
|
|
|
|
if (player->vel.y <= 0.0f) {
|
|
x = player->pos.x;
|
|
y = player->pos.y - 10.0f;
|
|
z = player->unk_138;
|
|
if (func_tank_80044120(hitbox, x, y, z, xPos, yPos, zPos)) {
|
|
player->unk_1D4 = 1;
|
|
if (player->vel.y < -20.0f) {
|
|
player->unk_1F4 = 20;
|
|
}
|
|
player->vel.y = 0.0f;
|
|
player->pos.y = yPos + 20.0f;
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.3f, 5.0f, 0.0f);
|
|
Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.3f, 5.0f, 0.0f);
|
|
}
|
|
} else {
|
|
x = player->pos.x;
|
|
y = player->pos.y + 30.0f;
|
|
z = player->unk_138;
|
|
if (func_tank_80044120(hitbox, x, y, z, xPos, yPos, zPos)) {
|
|
player->vel.y = 0.0f;
|
|
player->pos.y = yPos - 75.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_800443DC(Player* player) {
|
|
Object_80* obj80;
|
|
s32 i;
|
|
|
|
for (i = 0, obj80 = gObjects80; i < ARRAY_COUNT(gObjects80); i++, obj80++) {
|
|
if ((obj80->obj.status == OBJ_ACTIVE) && (obj80->obj.id == OBJ_80_58) &&
|
|
((player->unk_138 - 2000.0f) < obj80->obj.pos.z)) {
|
|
func_tank_800441C8(player, obj80->info.hitbox, obj80->obj.pos.x, obj80->obj.pos.y, obj80->obj.pos.z,
|
|
obj80->obj.rot.x, obj80->obj.rot.y, obj80->obj.rot.z);
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_800444BC(Player* player) {
|
|
f32 pad;
|
|
f32 sp40;
|
|
f32 sp3C;
|
|
f32 sp38;
|
|
f32 sp34;
|
|
f32 sp30;
|
|
|
|
sp30 = 5.0f;
|
|
player->unk_1D4 = 0;
|
|
if (player->unk_0D4 < 0.0f) {
|
|
sp30 = 0.0f;
|
|
}
|
|
sp40 = sp3C = 0.0f;
|
|
sp38 = gGroundLevel;
|
|
if (D_ctx_801784AC == 4) {
|
|
Ground_801B6E20(player->pos.x, player->unk_138 + player->unk_144, &sp40, &sp38, &sp3C);
|
|
}
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
|
D_MA_801BE250[27] = gGroundLevel;
|
|
D_MA_801BE250[28] = D_MA_801BE250[29] = 0.0f;
|
|
D_800C9F10 = 0.0f;
|
|
func_tank_80047754(player);
|
|
sp38 = D_MA_801BE250[27];
|
|
sp40 = D_MA_801BE250[28];
|
|
sp3C = D_MA_801BE250[29];
|
|
}
|
|
if ((player->pos.y - sp30) < sp38) {
|
|
if (player->vel.y < -10.0f) {
|
|
AUDIO_PLAY_SFX(0x09008015, player->sfxSource, 0);
|
|
}
|
|
player->unk_1D4 = 1;
|
|
if (player->vel.y < -20.0f) {
|
|
player->unk_1F4 = 20;
|
|
}
|
|
if (D_ctx_80177BAC != 0) {
|
|
D_ctx_80177BAC = 0;
|
|
AUDIO_PLAY_BGM(SEQ_ID_TITANIA | SEQ_FLAG);
|
|
func_8001C8B8(0);
|
|
}
|
|
|
|
player->pos.y = sp38 - 3.0f;
|
|
sp34 = (player->unk_0D0 * 0.2f) + 0.2f;
|
|
player->vel.y = -3.0f;
|
|
|
|
if ((player->unk_104 > 0.0f) && (sp40 <= 0.0f)) {
|
|
player->vel.y = player->unk_104 * 0.5f * player->unk_0D0 * 0.035f;
|
|
player->unk_0E4 = player->unk_104;
|
|
}
|
|
if (player->unk_0D4 < 0.0f) {
|
|
player->vel.y = 2.0f;
|
|
if (player->vel.y) {} // fake?
|
|
player->pos.y += 7.0f;
|
|
}
|
|
player->unk_104 = RAD_TO_DEG(sp40);
|
|
player->unk_10C = RAD_TO_DEG(sp3C);
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
|
if (player->unk_104 > 90.0f) {
|
|
player->unk_104 = -(180 - player->unk_104);
|
|
}
|
|
if (player->unk_10C > 90.0f) {
|
|
player->unk_10C = -(180 - player->unk_10C);
|
|
}
|
|
}
|
|
if (player->unk_0E4 < player->unk_104) {
|
|
player->unk_0E4 += sp34;
|
|
}
|
|
if (player->unk_0E4 > player->unk_104) {
|
|
player->unk_0E4 -= sp34;
|
|
}
|
|
if (player->unk_0EC < player->unk_10C) {
|
|
player->unk_0EC += sp34;
|
|
}
|
|
if (player->unk_0EC > player->unk_10C) {
|
|
player->unk_0EC -= sp34;
|
|
}
|
|
}
|
|
if (gCurrentLevel == LEVEL_TITANIA) {
|
|
func_tank_800443DC(player);
|
|
}
|
|
}
|
|
|
|
void func_tank_80044868(Player* player) {
|
|
f32 pad;
|
|
f32 var_fv1;
|
|
f32 sp2C;
|
|
|
|
var_fv1 = (gInputPress->stick_y * 0.7f) - 8.0f;
|
|
if (var_fv1 < -40.0f) {
|
|
var_fv1 = -40.0f;
|
|
}
|
|
if (var_fv1 > 0.0f) {
|
|
var_fv1 = 0.0f;
|
|
}
|
|
if (player->unk_17C < var_fv1) {
|
|
player->unk_17C += 3.0f;
|
|
}
|
|
if (var_fv1 < player->unk_17C) {
|
|
player->unk_17C -= 3.0f;
|
|
}
|
|
if (player->unk_180 < 0.0f) {
|
|
player->unk_180 += 3.0f;
|
|
}
|
|
if (player->unk_180 > 0.0f) {
|
|
player->unk_180 -= 3.0f;
|
|
}
|
|
D_ctx_80177968 = 3.0f;
|
|
D_ctx_80177970 = 0.66f;
|
|
var_fv1 = gInputPress->stick_x;
|
|
if (var_fv1 == 0.0f) {
|
|
Math_SmoothStepToF(&player->unk_0E8, -var_fv1 * D_ctx_80177970, 0.1f, D_ctx_80177968 * 0.5f, 0.1f);
|
|
} else {
|
|
Math_SmoothStepToF(&player->unk_0E8, -var_fv1 * D_ctx_80177970, 0.1f, D_ctx_80177968, 0.1f);
|
|
}
|
|
player->unk_108 = player->unk_0E8;
|
|
sp2C = player->unk_0D0;
|
|
|
|
if ((gCurrentLevel == LEVEL_MACBETH) && (sp2C < 3.0f)) {
|
|
sp2C = 3.0f;
|
|
}
|
|
if (player->unk_16C > 0.2f) {
|
|
Math_SmoothStepToF(&player->unk_184, player->unk_0D0 * 0.5f, 1.0f, 1.0f, 0.0f);
|
|
}
|
|
if (player->unk_170 > 0.2f) {
|
|
Math_SmoothStepToF(&player->unk_184, -player->unk_0D0 * 0.5f, 1.0f, 1.0f, 0.0f);
|
|
}
|
|
if (!(player->unk_170 > 0.2f) && !(player->unk_16C > 0.2f) && (player->unk_1D4 != 0)) {
|
|
Math_SmoothStepToF(&player->unk_184, 0.0f, 1.0f, 0.75f, 0.0f);
|
|
}
|
|
if (player->unk_1DC != 0) {
|
|
if (player->unk_1EC < 0) {
|
|
player->unk_184 = 15.0f;
|
|
}
|
|
if (player->unk_1EC > 0) {
|
|
player->unk_184 = -15.0f;
|
|
}
|
|
}
|
|
player->vel.z = -(COS_DEG(player->unk_108) * COS_DEG(player->unk_104) * sp2C);
|
|
if ((player->vel.x < 20.0f) && (player->unk_10C < -30.0f)) {
|
|
Math_SmoothStepToF(&player->vel.x, -player->unk_10C * 0.5f, 0.2f, 3.0f, 0.0f);
|
|
player->unk_184 = 0.0f;
|
|
} else if ((player->vel.x > -20.0f) && (player->unk_10C > 30.0f)) {
|
|
Math_SmoothStepToF(&player->vel.x, -player->unk_10C * 0.5f, 0.2f, 3.0f, 0.0f);
|
|
player->unk_184 = 0.0f;
|
|
} else {
|
|
Math_SmoothStepToF(&player->vel.x, player->unk_184 - (SIN_DEG(player->unk_108) * sp2C), 0.5f, 5.0f, 0.0f);
|
|
}
|
|
player->vel.z += fabsf((player->unk_184 * 0.4f * player->unk_0D0) / 15.0f);
|
|
if (player->unk_000 == 0) {
|
|
player->vel.z += SIN_DEG(player->unk_0E4) * player->unk_110;
|
|
}
|
|
if (D_800C9F00 != 0) {
|
|
player->vel.z = 2.0f * D_800C9F00;
|
|
}
|
|
player->pos.x += player->vel.x;
|
|
if ((player->unk_0AC + (player->unk_09C - 100.0f)) < player->pos.x) {
|
|
player->flags_228 = 1;
|
|
}
|
|
if (player->pos.x < (player->unk_0AC - (player->unk_09C - 100.0f))) {
|
|
player->flags_228 = 2;
|
|
}
|
|
if (player->unk_09C + player->unk_0AC < player->pos.x) {
|
|
player->pos.x = player->unk_09C + player->unk_0AC;
|
|
player->vel.x = 0.0f;
|
|
}
|
|
if (player->pos.x < player->unk_0AC - player->unk_09C) {
|
|
player->pos.x = player->unk_0AC - player->unk_09C;
|
|
player->vel.x = 0.0f;
|
|
}
|
|
player->pos.y += player->vel.y;
|
|
player->vel.y -= player->unk_0D4;
|
|
|
|
if (player->vel.y < -50.0f) {
|
|
player->vel.y = -50.0f;
|
|
}
|
|
if (player->vel.y > 20.0f) {
|
|
player->vel.y = 20.0f;
|
|
}
|
|
player->pos.z += player->vel.z;
|
|
if (player->unk_1D4 != 0) {
|
|
player->unk_0A0 = 0.0f;
|
|
player->unk_0F4 += player->unk_0D0 * 5.0f;
|
|
player->unk_0F0 = SIN_DEG(player->unk_0F4) * 0.7f;
|
|
if (D_800C9F04 == 0) {
|
|
if (player->unk_0D0 != 0.0f) {
|
|
func_tank_80043B18(player);
|
|
}
|
|
if (player->unk_1DC != 0.0f) {
|
|
func_tank_80043B18(player);
|
|
}
|
|
}
|
|
}
|
|
if (player->unk_0D0 > 0.0f) {
|
|
Texture_Scroll(D_landmaster_3002E80, 32, 32, 0);
|
|
if ((gCurrentLevel == LEVEL_TITANIA) && (gBossActive == 0)) {
|
|
func_tank_80043280(D_landmaster_3005EA8, D_TI_6009BB8, gGameFrameCount * -55.0f);
|
|
}
|
|
if ((gCurrentLevel == LEVEL_MACBETH) && (player->state_1C8 == PLAYERSTATE_1C8_7)) {
|
|
func_tank_80043280(D_landmaster_3005EA8, *D_Tex_800DACB8, gGameFrameCount * -55.0f);
|
|
}
|
|
}
|
|
if (player->unk_0D0 > 10.0f) {
|
|
Texture_Scroll(D_landmaster_3002E80, 32, 32, 0);
|
|
if ((gCurrentLevel == LEVEL_TITANIA) && (gBossActive == 0)) {
|
|
func_tank_80043280(D_landmaster_3005EA8, D_TI_6009BB8, gGameFrameCount * -55.0f);
|
|
}
|
|
}
|
|
func_play_800A46A0(player);
|
|
}
|
|
|
|
void func_tank_80045130(Player* player) {
|
|
Math_SmoothStepToF(&player->unk_170, 0.0f, 1.0f, 0.2f, 0.0f);
|
|
Math_SmoothStepToF(&player->unk_16C, 0.0f, 1.0f, 0.2f, 0.0f);
|
|
if (gInputPress->button & Z_TRIG) {
|
|
player->sfx.bank = 1;
|
|
if ((player->timer_1E0 != 0) && (player->unk_12C > 0.0f) && (player->unk_2BC < 10.0f)) {
|
|
player->unk_1DC = 1;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1F0 = 20;
|
|
player->unk_1EC = 20;
|
|
player->sfx.roll = 1;
|
|
AUDIO_PLAY_SFX(0x1100000A, player->sfxSource, 0);
|
|
} else {
|
|
player->timer_1E0 = 10;
|
|
}
|
|
}
|
|
if (gInputPress->button & R_TRIG) {
|
|
player->sfx.bank = 1;
|
|
if ((player->timer_1E4 != 0) && (player->unk_12C < 0.0f) && (player->unk_2BC < 10.0f)) {
|
|
player->unk_1DC = 1;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1F0 = -20;
|
|
player->unk_1EC = -20;
|
|
player->sfx.roll = 1;
|
|
AUDIO_PLAY_SFX(0x1100000A, player->sfxSource, 0);
|
|
} else {
|
|
player->timer_1E4 = 10;
|
|
}
|
|
}
|
|
player->unk_18C = fabsf(SIN_DEG(player->unk_12C) * 25.0f);
|
|
player->unk_18C += fabsf(SIN_DEG(player->unk_130) * 20.0f);
|
|
}
|
|
|
|
void func_tank_80045348(Player* player) {
|
|
f32 sp44 = 15.0f;
|
|
f32 sp40 = 0;
|
|
f32 sp3C = 0.1f;
|
|
f32 sp38 = 3.5f;
|
|
f32 pad1;
|
|
f32 pad2;
|
|
s16 sp2E = false;
|
|
|
|
if (player->unk_19C >= 0) {
|
|
if ((gBoostButton[player->num] & gInputHold->button) && !player->unk_2B4) {
|
|
D_800C9F14++;
|
|
sp2E = true;
|
|
if (D_800C9F24 == 0.0f) {
|
|
player->unk_190 = player->unk_194 = 4.0f;
|
|
AUDIO_PLAY_SFX(0x0900402F, player->sfxSource, 0);
|
|
} else {
|
|
player->unk_190 = 2.0f;
|
|
}
|
|
sp44 = 25.0f;
|
|
sp40 = -200.0f;
|
|
sp3C = 0.2f;
|
|
sp38 = 6.0f;
|
|
|
|
D_800C9F24 += 1.0f;
|
|
if (D_ctx_801779A8[player->num] < 25.0f) {
|
|
D_ctx_801779A8[player->num] = 25.0f;
|
|
}
|
|
|
|
Math_SmoothStepToF(&D_ctx_801779A8[player->num], 50.0f, 1.0f, 10.0f, 0.0f);
|
|
} else {
|
|
D_800C9F24 = 0.0f;
|
|
}
|
|
if ((gBrakeButton[player->num] & gInputHold->button) && !player->unk_2B4 && !sp2E) {
|
|
D_800C9F14++;
|
|
sp44 = 5.0f;
|
|
sp40 = 100.0f;
|
|
sp3C = 0.2f;
|
|
D_800C9F28 += 1.0f;
|
|
Math_SmoothStepToF(&D_ctx_801779A8[player->num], 25.0f, 1.0f, 5.0f, 0.0f);
|
|
} else {
|
|
D_800C9F28 = 0.0f;
|
|
}
|
|
Math_SmoothStepToF(&player->unk_0D0, sp44, sp3C, sp38, 0.001f);
|
|
Math_SmoothStepToF(&player->unk_08C, sp40, sp3C, sp38, 0.001f);
|
|
} else if (player->unk_19C == -1) {
|
|
Math_SmoothStepToF(&player->unk_0D0, player->unk_000, 0.1f, 2.0f, 0.01f);
|
|
}
|
|
}
|
|
|
|
void func_tank_80045678(Player* player) {
|
|
static u8 D_800C9F3C = 0;
|
|
f32 temp;
|
|
f32 pad;
|
|
|
|
player->unk_0D4 = 3.0f;
|
|
if (!(gInputHold->button & Z_TRIG)) {
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01008016);
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x1100000A);
|
|
}
|
|
if ((gInputHold->button & Z_TRIG) && !player->unk_2B4) {
|
|
D_800C9F14++;
|
|
if (D_800C9F20 == 0.0f) {
|
|
AUDIO_PLAY_SFX(0x01004024, player->sfxSource, 0);
|
|
}
|
|
player->unk_188 = 0.0f;
|
|
player->unk_12C += 4.0f;
|
|
if (player->unk_12C > 50.0f) {
|
|
player->unk_12C = 50.0f;
|
|
}
|
|
Math_SmoothStepToF(&player->unk_170, 1.0f, 1.0f, 0.4f, 0.0f);
|
|
D_800C9F20 += 1.0f;
|
|
} else {
|
|
if (player->unk_12C > 0) {
|
|
player->unk_188 += 1.5f;
|
|
player->unk_12C -= player->unk_188;
|
|
if (player->unk_12C <= 0.0f) {
|
|
player->unk_12C = 0.0f;
|
|
if (player->unk_188 > 3.0f) {
|
|
player->unk_188 *= -0.4f;
|
|
player->unk_12C -= player->unk_188;
|
|
}
|
|
}
|
|
}
|
|
D_800C9F20 = 0.0f;
|
|
}
|
|
if (!(gInputHold->button & R_TRIG)) {
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01008016);
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x1100000A);
|
|
}
|
|
if ((gInputHold->button & R_TRIG) && !player->unk_2B4) {
|
|
D_800C9F14++;
|
|
if (player->unk_2C0 == 0.0f) {
|
|
AUDIO_PLAY_SFX(0x01004024, player->sfxSource, 0);
|
|
}
|
|
player->unk_188 = 0.0f;
|
|
player->unk_12C -= 4.0f;
|
|
if (player->unk_12C < -50.0f) {
|
|
player->unk_12C = -50.0f;
|
|
}
|
|
Math_SmoothStepToF(&player->unk_16C, 1.0f, 1.0f, 0.4f, 0.0f);
|
|
player->unk_2C0 += 1.0f;
|
|
} else {
|
|
if (player->unk_12C < 0.0f) {
|
|
player->unk_188 += 1.5f;
|
|
player->unk_12C += player->unk_188;
|
|
if (player->unk_12C >= 0.0f) {
|
|
player->unk_12C = 0.0f;
|
|
if (player->unk_188 > 3.0f) {
|
|
player->unk_188 *= -0.4f;
|
|
player->unk_12C += player->unk_188;
|
|
}
|
|
}
|
|
}
|
|
player->unk_2C0 = 0.0f;
|
|
}
|
|
Math_SmoothStepToF(&player->unk_110, 0.0f, 0.1f, 1.0f, 0);
|
|
if ((player->unk_16C > 0.2f) && (player->unk_170 > 0.2f) && (player->timer_220 == 0)) {
|
|
if (D_800C9F3C == 0) {
|
|
D_800C9F3C = 1;
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x1100000A);
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01004024);
|
|
AUDIO_PLAY_SFX(0x01008016, player->sfxSource, 0);
|
|
}
|
|
player->unk_12C += ((__cosf(gGameFrameCount * M_DTOR * 8.0f) * 10.0f) - player->unk_12C) * 0.1f;
|
|
temp = -gInputPress->stick_y;
|
|
Math_SmoothStepToF(&player->unk_0E4, temp * 0.3f, 0.05f, 5.0f, 0.00001f);
|
|
Math_SmoothStepToF(&player->unk_110, 15.0f, 0.5f, 5.0f, 0.0f);
|
|
Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.1f, 5.0f, 0.00001f);
|
|
player->unk_0D4 = -0.4f;
|
|
player->unk_0A0 += player->vel.y;
|
|
|
|
if (player->unk_0A0 > 300.0f) {
|
|
player->unk_0D4 = 0.0f;
|
|
Math_SmoothStepToF(&player->vel.y, 0.0f, 0.1f, 2.0f, 0);
|
|
}
|
|
if ((gCamCount == 1) && !(gGameFrameCount & 1)) {
|
|
func_effect_8007A900(RAND_FLOAT_CENTERED(20.0f) + player->pos.x, player->unk_068 + 10.0f,
|
|
player->unk_138 - 10.0f, RAND_FLOAT(2.0f) + 3.5f, 255, 16, 1);
|
|
}
|
|
} else {
|
|
D_800C9F3C = 0;
|
|
if ((gCamCount == 1) && !(gGameFrameCount & 3) && (player->unk_1DC == 0)) {
|
|
if ((player->unk_16C > 0.2f) && (player->timer_220 == 0)) {
|
|
func_effect_8007A900(RAND_FLOAT_CENTERED(10.0f) + (player->pos.x - 57.0f), player->unk_068 + 10.0f,
|
|
player->unk_138 - 10.0f, RAND_FLOAT(1.0f) + 1.5f, 255, 15, 0);
|
|
}
|
|
if ((player->unk_170 > 0.2f) && (player->timer_220 == 0)) {
|
|
func_effect_8007A900(RAND_FLOAT_CENTERED(10.0f) + (player->pos.x + 57.0f), player->unk_068 + 10.0f,
|
|
player->unk_138 - 10.0f, RAND_FLOAT(1.0f) + 1.5f, 255, 15, 0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_80045E7C(Player* player) {
|
|
player->unk_130 = Math_ModF(player->unk_130, 360.0f);
|
|
if (player->unk_1DC == 0) {
|
|
if (player->unk_130 > 0.0f) {
|
|
player->unk_130 -= player->unk_130 * 0.1f;
|
|
if (player->unk_130 < 0.1f) {
|
|
player->unk_130 = 0.0f;
|
|
}
|
|
}
|
|
if (player->unk_130 < 0.0f) {
|
|
player->unk_130 -= player->unk_130 * 0.1f;
|
|
if (player->unk_130 > -0.1f) {
|
|
player->unk_130 = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
if (player->timer_1E0 != 0) {
|
|
player->timer_1E0--;
|
|
}
|
|
if (player->timer_1E4 != 0) {
|
|
player->timer_1E4--;
|
|
}
|
|
if (player->timer_1E8 != 0) {
|
|
player->timer_1E8--;
|
|
}
|
|
if (player->unk_1DC != 0) {
|
|
player->timer_1E4 = 0;
|
|
player->timer_1E0 = 0;
|
|
player->unk_130 += player->unk_1EC;
|
|
if (player->unk_12C > 0.0f) {
|
|
player->unk_12C -= 8.0f;
|
|
if (player->unk_12C < 0.0f) {
|
|
player->unk_12C = 0.0f;
|
|
}
|
|
}
|
|
if (player->unk_12C < 0.0f) {
|
|
player->unk_12C += 8.0f;
|
|
if (player->unk_12C > 0.0f) {
|
|
player->unk_12C = 0.0f;
|
|
}
|
|
}
|
|
if (player->timer_1E8 == 0) {
|
|
D_ctx_801779A8[player->num] = 25.0f;
|
|
if (player->unk_1EC > 0) {
|
|
player->unk_1EC -= 2;
|
|
}
|
|
if (player->unk_1EC < 0) {
|
|
player->unk_1EC += 2;
|
|
}
|
|
if (player->unk_1EC == 0) {
|
|
player->unk_1DC = 0;
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x1100000A);
|
|
}
|
|
}
|
|
if ((player->timer_1E8 >= 5) && (player->unk_1F4 == 0) && (player->unk_1DC != 9)) {
|
|
if (player->unk_1EC > 0) {
|
|
player->unk_170 = 1.3f;
|
|
}
|
|
if (player->unk_1EC < 0) {
|
|
player->unk_16C = 1.3f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_800460E0(Player* player, f32* hitboxData, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) {
|
|
s32 i;
|
|
s32 count;
|
|
|
|
Matrix_RotateY(gCalcMatrix, -arg6 * M_DTOR, 0);
|
|
count = *hitboxData++;
|
|
if (count != 0) {
|
|
for (i = 0; i < count; i++, hitboxData += 6) {
|
|
Vec3f spf94;
|
|
Vec3f sp88;
|
|
Vec3f sp7C;
|
|
Hitbox* hitbox = (Hitbox*) hitboxData;
|
|
|
|
spf94.x = player->pos.x;
|
|
spf94.y = arg3;
|
|
spf94.z = player->unk_138;
|
|
|
|
sp88.x = spf94.x - arg2;
|
|
sp88.y = spf94.y - arg3;
|
|
sp88.z = spf94.z - arg4;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp88, &sp7C);
|
|
if (func_play_800A78C4(hitbox, arg2, arg3, arg4, sp7C.x + arg2, sp7C.y + arg3, sp7C.z + arg4)) {
|
|
player->unk_068 = arg3 + 20.0f + 3.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_80046260(Player* player) {
|
|
Object_80* obj80;
|
|
s32 i;
|
|
|
|
for (i = 0, obj80 = gObjects80; i < ARRAY_COUNT(gObjects80); i++, obj80++) {
|
|
if ((obj80->obj.status == OBJ_ACTIVE) && (obj80->obj.id == OBJ_80_58) &&
|
|
((player->unk_138 - 2000.0f) < obj80->obj.pos.z) && (obj80->obj.pos.y < player->pos.y)) {
|
|
func_tank_800460E0(player, obj80->info.hitbox, obj80->obj.pos.x, obj80->obj.pos.y, obj80->obj.pos.z,
|
|
obj80->obj.rot.x, obj80->obj.rot.y, obj80->obj.rot.z);
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_80046358(Player* player) {
|
|
f32 spD4;
|
|
f32 spD0;
|
|
f32 spCC;
|
|
s32 pad[35];
|
|
Vec3f sp34 = { 0.0f, -10.0f, 0.0f };
|
|
s32 pad1;
|
|
s32 pad2;
|
|
|
|
player->unk_064 = player->pos.x;
|
|
player->unk_06C = player->unk_138 + -20.0f;
|
|
player->unk_068 = gGroundLevel + 3.0f;
|
|
player->unk_248 = 0.0f;
|
|
player->unk_24C = 0.0f;
|
|
player->unk_070 = 0.0f;
|
|
Ground_801B6E20(player->unk_064, player->unk_06C + player->unk_144, &spD4, &spD0, &spCC);
|
|
player->unk_068 = spD0 + 2.0f;
|
|
player->unk_248 = spD4;
|
|
player->unk_24C = spCC;
|
|
}
|
|
|
|
void func_tank_8004641C(Player* player, s32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) {
|
|
s32 pad1;
|
|
s32 pad2;
|
|
f32 sp84;
|
|
f32 sp80;
|
|
f32 sp7C;
|
|
Vec3f sp70;
|
|
Vec3f sp64;
|
|
Vec3f sp58;
|
|
Vec3f sp4C;
|
|
|
|
Matrix_RotateY(gCalcMatrix, -arg6 * M_DTOR, 0);
|
|
sp70.x = player->vel.x;
|
|
sp70.y = player->vel.y;
|
|
sp70.z = player->vel.z;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp70, &sp4C);
|
|
sp70.x = player->pos.x - arg2;
|
|
sp70.y = player->pos.y - arg3;
|
|
sp70.z = player->unk_138 - arg4;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp70, &sp64);
|
|
sp84 = sp64.x + arg2;
|
|
sp80 = sp64.y + arg3;
|
|
sp7C = sp64.z + arg4;
|
|
if (func_play_800A8054(arg1, arg2, arg3, arg4, sp84, sp80, sp7C, &sp58, &sp4C)) {
|
|
if (D_MA_801BE250[27] < arg3 + sp58.y) {
|
|
D_MA_801BE250[27] = arg3 + sp58.y;
|
|
if (arg1 == OBJ_80_67) {
|
|
player->unk_1DC = 0;
|
|
D_800C9F04 = 1;
|
|
}
|
|
}
|
|
D_MA_801BE250[28] = sp58.x;
|
|
D_MA_801BE250[29] = sp58.z;
|
|
} else if ((arg1 == OBJ_80_67) && (D_MA_801BE250[27] == 0.0f) &&
|
|
func_play_800A8054(arg1, arg2 + 20.0f, arg3, arg4, sp84, sp80, sp7C, &sp58, &sp4C)) {
|
|
player->unk_1DC = 9;
|
|
player->timer_1E8 = 15;
|
|
if ((arg6 > 90.0f) && (arg6 < 270.0f)) {
|
|
player->unk_1EC = player->unk_1F0 = 20;
|
|
} else {
|
|
player->unk_1EC = player->unk_1F0 = -20;
|
|
}
|
|
}
|
|
if (func_play_800A8054(arg1, arg2, arg3, arg4, sp84, arg3, sp7C, &sp58, &sp4C) && (D_800C9F10 <= arg3 + sp58.y)) {
|
|
D_800C9F10 = arg3 + sp58.y;
|
|
player->unk_064 = player->pos.x;
|
|
player->unk_068 = D_800C9F10 - 2.0f;
|
|
player->unk_248 = sp58.x;
|
|
player->unk_24C = sp58.z;
|
|
}
|
|
}
|
|
|
|
static f32 D_800C9F4C[5] = { 0.0f, -1.0f, 1.0f, 0.5f, -0.5f };
|
|
|
|
void func_tank_80046704(Player* player) {
|
|
s32 pad[7];
|
|
s16 i;
|
|
Object_80* obj80;
|
|
f32 temp1;
|
|
f32 temp2;
|
|
|
|
if (D_800C9F00 > 0) {
|
|
D_800C9F00--;
|
|
}
|
|
if (1) {}
|
|
for (i = 0, obj80 = gObjects80; i < ARRAY_COUNT(gObjects80); i++, obj80++) {
|
|
if ((obj80->obj.status == OBJ_ACTIVE) && ((player->unk_138 - 2000.0f) < obj80->obj.pos.z)) {
|
|
if ((obj80->obj.id == OBJ_80_69) || (obj80->obj.id == OBJ_80_70) || (obj80->obj.id == OBJ_80_71) ||
|
|
(obj80->obj.id == OBJ_80_72) || (obj80->obj.id == OBJ_80_73) || (obj80->obj.id == OBJ_80_67)) {
|
|
temp1 = obj80->obj.pos.x - player->pos.x;
|
|
temp2 = obj80->obj.pos.z - player->unk_138;
|
|
|
|
if (sqrtf(SQ(temp1) + SQ(temp2)) < 2000.0f) {
|
|
func_tank_8004641C(player, obj80->obj.id, obj80->obj.pos.x, obj80->obj.pos.y, obj80->obj.pos.z,
|
|
obj80->obj.rot.x, obj80->obj.rot.y, obj80->obj.rot.z);
|
|
}
|
|
} else if (obj80->obj.id == OBJ_80_74) {
|
|
if (((player->pos.x - 820.0f) <= obj80->obj.pos.x) && (obj80->obj.pos.x <= (player->pos.x + 820.0f)) &&
|
|
((player->pos.y - 50.0f) <= obj80->obj.pos.y) && (obj80->obj.pos.y <= (player->pos.y + 50.0f)) &&
|
|
(player->unk_138 <= obj80->obj.pos.z) && (obj80->obj.pos.z <= (player->unk_138 + 960.0f))) {
|
|
D_MA_801BE250[27] = obj80->obj.pos.y;
|
|
player->unk_064 = player->pos.x;
|
|
player->unk_068 = D_MA_801BE250[27] - 3.0f;
|
|
}
|
|
}
|
|
if ((obj80->obj.id == OBJ_80_59) || (obj80->obj.id == OBJ_80_60) || (obj80->obj.id == OBJ_80_61) ||
|
|
(obj80->obj.id == OBJ_80_63) || (obj80->obj.id == OBJ_80_105) || (obj80->obj.id == OBJ_80_66) ||
|
|
(obj80->obj.id == OBJ_80_67) || (obj80->obj.id == OBJ_80_68)) {
|
|
s32 temp_v0;
|
|
s32 sp94;
|
|
|
|
temp_v0 = func_tank_80046E40(player, obj80->info.hitbox, &sp94, obj80->obj.pos.x, obj80->obj.pos.y,
|
|
obj80->obj.pos.z, obj80->obj.rot.x, obj80->obj.rot.y, obj80->obj.rot.z,
|
|
0.0f, 0.0f, 0.0f);
|
|
switch (temp_v0) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
Math_SmoothStepToF(&player->unk_0D0, 15.0f, 0.3f, 3.5f, 0.001f);
|
|
Math_SmoothStepToF(&player->unk_08C, 0, 0.3f, 3.5f, 0.001f);
|
|
if (temp_v0 == 1) {
|
|
player->vel.x = -10.0f;
|
|
} else {
|
|
player->vel.x = 10.0f;
|
|
}
|
|
player->pos.x = player->unk_090.x;
|
|
player->unk_0D8.x = 2.0f * D_800C9F4C[temp_v0];
|
|
player->pos.x += (D_800C9F4C[temp_v0] * 5.0f);
|
|
break;
|
|
case 3:
|
|
if ((obj80->obj.id == OBJ_80_59) || (obj80->obj.id == OBJ_80_60) ||
|
|
(obj80->obj.id == OBJ_80_63) || (obj80->obj.id == OBJ_80_66) ||
|
|
(obj80->obj.id == OBJ_80_68)) {
|
|
Player_ApplyDamage(player, temp_v0, 5);
|
|
}
|
|
player->unk_0D0 = -(D_800C9F00 * 1.5f);
|
|
player->vel.z = D_800C9F00 * 1.5f;
|
|
D_800C9F00 = 12;
|
|
AUDIO_PLAY_SFX(0x09008015, player->sfxSource, 0);
|
|
break;
|
|
}
|
|
if (obj80->obj.id == OBJ_80_59) {
|
|
if (((player->pos.x - 230.0f) <= obj80->obj.pos.x) &&
|
|
(obj80->obj.pos.x <= (player->pos.x + 230.0f)) &&
|
|
((80.0f <= player->pos.y - obj80->obj.pos.y)) &&
|
|
((player->pos.y - obj80->obj.pos.y) < 210.0f) &&
|
|
((player->unk_138 - 220.0f) <= obj80->obj.pos.z) &&
|
|
(obj80->obj.pos.z <= (player->unk_138 + 220.0f))) {
|
|
|
|
if (!(((player->pos.x - 210.0f) <= obj80->obj.pos.x) &&
|
|
(obj80->obj.pos.x <= (player->pos.x + 210.0f))) &&
|
|
(D_MA_801BE250[27] == 0.f) && (player->vel.y < 0.f)) {
|
|
player->unk_1DC = 9;
|
|
player->timer_1E8 = 15;
|
|
if ((player->pos.x - 200.0f) <= obj80->obj.pos.x) {
|
|
player->unk_1EC = player->unk_1F0 = 20;
|
|
} else {
|
|
player->unk_1EC = player->unk_1F0 = -20;
|
|
}
|
|
} else {
|
|
D_800C9F04 = 1;
|
|
D_MA_801BE250[27] = obj80->obj.pos.y + 206.0f;
|
|
player->unk_1DC = 0;
|
|
}
|
|
}
|
|
if (((player->pos.x - 220.0f) <= obj80->obj.pos.x) &&
|
|
(obj80->obj.pos.x <= (player->pos.x + 220.0f)) &&
|
|
((player->unk_138 - 220.0f) <= obj80->obj.pos.z) &&
|
|
(obj80->obj.pos.z <= (player->unk_138 + 220.0f)) && (player->pos.y >= 200.0f)) {
|
|
player->unk_068 = obj80->obj.pos.y + 204.0f;
|
|
}
|
|
} else if ((obj80->obj.id == OBJ_80_105) && Macbeth_801A3C20(player->unk_138)) {
|
|
if (((player->pos.x - 200.0f) < D_MA_801BE250[21]) &&
|
|
(D_MA_801BE250[21] < (player->pos.x + 200.0f))) {
|
|
player->unk_068 = D_MA_801BE250[22] - 1.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 func_tank_80046E40(Player* player, f32* hitboxData, s32* index, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot,
|
|
f32 zRot, f32 arg9, f32 argA, f32 argB) {
|
|
s32 spB4;
|
|
s32 i;
|
|
f32 var_fa0;
|
|
f32 var_fv0;
|
|
f32 var_fv1;
|
|
f32 spA0;
|
|
Vec3f sp94;
|
|
Vec3f sp88;
|
|
|
|
spB4 = *hitboxData++;
|
|
if (spB4 != 0) {
|
|
for (i = 0; i < spB4; i++, hitboxData += 6) {
|
|
spA0 = 0;
|
|
if (hitboxData[0] == HITBOX_TYPE_2) {
|
|
Matrix_RotateZ(gCalcMatrix, -hitboxData[3] * M_DTOR, 0);
|
|
Matrix_RotateX(gCalcMatrix, -hitboxData[1] * M_DTOR, 1);
|
|
Matrix_RotateY(gCalcMatrix, -hitboxData[2] * M_DTOR, 1);
|
|
Matrix_RotateZ(gCalcMatrix, -zRot * M_DTOR, 1);
|
|
Matrix_RotateX(gCalcMatrix, -xRot * M_DTOR, 1);
|
|
Matrix_RotateY(gCalcMatrix, -yRot * M_DTOR, 1);
|
|
hitboxData += 4;
|
|
spA0 = 1.0f;
|
|
} else {
|
|
if (hitboxData[0] == HITBOX_TYPE_3) {
|
|
hitboxData++;
|
|
}
|
|
Matrix_RotateZ(gCalcMatrix, -zRot * M_DTOR, 0);
|
|
Matrix_RotateX(gCalcMatrix, -xRot * M_DTOR, 1);
|
|
Matrix_RotateY(gCalcMatrix, -yRot * M_DTOR, 1);
|
|
}
|
|
if ((arg9 != 0) || (argA != 0) || (argB != 0)) {
|
|
Matrix_RotateZ(gCalcMatrix, -argB * M_DTOR, 1);
|
|
Matrix_RotateX(gCalcMatrix, -arg9 * M_DTOR, 1);
|
|
Matrix_RotateY(gCalcMatrix, -argA * M_DTOR, 1);
|
|
}
|
|
if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) {
|
|
var_fv0 = player->hit1.x;
|
|
var_fv1 = player->hit1.y;
|
|
var_fa0 = player->hit1.z;
|
|
} else {
|
|
sp94.x = player->hit1.x - xPos;
|
|
sp94.y = player->hit1.y - yPos;
|
|
sp94.z = player->hit1.z - zPos;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88);
|
|
var_fv0 = sp88.x + xPos;
|
|
var_fv1 = sp88.y + yPos;
|
|
var_fa0 = sp88.z + zPos;
|
|
}
|
|
if (func_play_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) {
|
|
*index = i + 1;
|
|
return 1;
|
|
}
|
|
if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) {
|
|
var_fv0 = player->hit2.x;
|
|
var_fv1 = player->hit2.y;
|
|
var_fa0 = player->hit2.z;
|
|
} else {
|
|
sp94.x = player->hit2.x - xPos;
|
|
sp94.y = player->hit2.y - yPos;
|
|
sp94.z = player->hit2.z - zPos;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88);
|
|
var_fv0 = sp88.x + xPos;
|
|
var_fv1 = sp88.y + yPos;
|
|
var_fa0 = sp88.z + zPos;
|
|
}
|
|
if (func_play_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) {
|
|
*index = i + 1;
|
|
return 2;
|
|
}
|
|
if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) {
|
|
var_fv0 = player->hit3.x;
|
|
var_fv1 = player->hit3.y;
|
|
var_fa0 = player->hit3.z;
|
|
} else {
|
|
sp94.x = player->hit3.x - xPos;
|
|
sp94.y = player->hit3.y - yPos;
|
|
sp94.z = player->hit3.z - zPos;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88);
|
|
var_fv0 = sp88.x + xPos;
|
|
var_fv1 = sp88.y + yPos;
|
|
var_fa0 = sp88.z + zPos;
|
|
}
|
|
if (func_play_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) {
|
|
*index = i + 1;
|
|
if (hitboxData[-1] == HITBOX_TYPE_3) {
|
|
return -1;
|
|
} else {
|
|
return 3;
|
|
}
|
|
}
|
|
if (hitboxData[-1] == HITBOX_TYPE_3) {
|
|
return 0;
|
|
}
|
|
if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) {
|
|
var_fv0 = player->hit4.x;
|
|
var_fv1 = player->hit4.y;
|
|
var_fa0 = player->hit4.z;
|
|
} else {
|
|
sp94.x = player->hit4.x - xPos;
|
|
sp94.y = player->hit4.y - yPos;
|
|
sp94.z = player->hit4.z - zPos;
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88);
|
|
var_fv0 = sp88.x + xPos;
|
|
var_fv1 = sp88.y + yPos;
|
|
var_fa0 = sp88.z + zPos;
|
|
}
|
|
if (func_play_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) {
|
|
*index = i + 1;
|
|
return 4;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void func_tank_80047504(Player* player) {
|
|
s32 pad;
|
|
|
|
player->unk_204 = 1;
|
|
func_tank_80045130(player);
|
|
D_800C9F14 = 0;
|
|
func_tank_80045678(player);
|
|
func_tank_80045348(player);
|
|
if (!player->unk_2B4) {
|
|
if (D_800C9F14 != 0) {
|
|
if (D_800C9F14 >= 2) {
|
|
player->unk_2BC += 2.0f;
|
|
} else {
|
|
player->unk_2BC += 1.0f;
|
|
}
|
|
if (player->unk_2BC > 90.0f) {
|
|
player->unk_2BC = 90.0f;
|
|
player->unk_2B4 = true;
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01004024);
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01008016);
|
|
}
|
|
} else {
|
|
if (player->unk_2BC > 0.0f) {
|
|
player->unk_2B4 = true;
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01004024);
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x01008016);
|
|
}
|
|
}
|
|
} else {
|
|
player->unk_2BC -= 1.0f;
|
|
if (player->unk_2BC <= 0.0f) {
|
|
player->unk_2B4 = false;
|
|
player->unk_2BC = 0.0f;
|
|
}
|
|
}
|
|
func_play_800B41E0(player);
|
|
func_tank_80045E7C(player);
|
|
func_tank_80044868(player);
|
|
D_800C9F04 = 0;
|
|
func_play_800ADF58(player);
|
|
func_play_800AD7F0(player);
|
|
if (gCurrentLevel != LEVEL_MACBETH) {
|
|
func_play_800A8BA4(player);
|
|
} else {
|
|
player->unk_064 = player->pos.x;
|
|
player->unk_06C = player->unk_138 + -10.0f;
|
|
player->unk_068 = gGroundLevel - 4.0f;
|
|
player->unk_248 = 0.0f;
|
|
player->unk_24C = 0.0f;
|
|
player->unk_070 = 0.0f;
|
|
func_tank_800481F4(player);
|
|
}
|
|
if (gCurrentLevel == LEVEL_TITANIA) {
|
|
func_tank_80046358(player);
|
|
func_tank_80046260(player);
|
|
}
|
|
func_play_800B415C(player);
|
|
if ((player->shields <= 0) && (player->timer_220 != 0)) {
|
|
func_play_800B41EC(player);
|
|
}
|
|
}
|
|
|
|
// lots of fake stuff here
|
|
void func_tank_80047754(Player* player) {
|
|
u8 sp2F = false;
|
|
|
|
if ((D_MA_801BE2F0[5] == 0) && (Macbeth_801A3300(player, player->unk_138, player->unk_0E8) == 0)) {
|
|
if (((player->pos.x - 110.0f) < D_MA_801BE250[9]) && (D_MA_801BE250[9] < (player->pos.x + 110.0f)) &&
|
|
((player->pos.y - 60.0f) < (D_MA_801BE250[2] + 30.0f)) &&
|
|
((D_MA_801BE250[2] + 30.0f) < (player->pos.y + 60.f))) {
|
|
func_tank_80047D38(player, D_MA_801BE250[2] + 29.0f);
|
|
player->unk_0E4 = D_MA_801BE250[3];
|
|
func_tank_80047FBC(player);
|
|
sp2F = true;
|
|
} else {
|
|
if (((player->pos.x - 150.0f) < D_MA_801BE250[9]) && (D_MA_801BE250[9] < (player->pos.x + 150.0f)) &&
|
|
((player->pos.y - 60.0f) < (D_MA_801BE250[2] + 30.0f)) &&
|
|
((D_MA_801BE250[2] + 30.0f) < (player->pos.y + 60.0f))) {
|
|
func_tank_80047E7C(player, D_MA_801BE250[9], D_MA_801BE250[2] + 30.0f);
|
|
}
|
|
if (1) {}
|
|
}
|
|
}
|
|
if (Macbeth_801A3C20(player->unk_138)) {
|
|
player->unk_0E4 = D_MA_801BE250[23];
|
|
if (((player->pos.x - 200.0f) < D_MA_801BE250[21]) && (D_MA_801BE250[21] < (player->pos.x + 200.0f))) {
|
|
if (((player->pos.y - 60.0f) < D_MA_801BE250[22]) && (D_MA_801BE250[22] < (player->pos.y + 60.0f))) {
|
|
func_tank_80047D38(player, D_MA_801BE250[22]);
|
|
} else {
|
|
if ((100.0f < (D_MA_801BE250[22] - player->pos.y)) && ((D_MA_801BE250[22] - player->pos.y) < 130.0f)) {
|
|
player->unk_0A0 = 999.0f;
|
|
player->pos.y = player->unk_090.y - 1.0f;
|
|
}
|
|
goto label_29;
|
|
}
|
|
if (!(((player->pos.x - 65.0f) < D_MA_801BE250[21]) && (D_MA_801BE250[21] < (player->pos.x + 65.0f)))) {
|
|
if (!(((player->pos.x - 100.0f) < D_MA_801BE250[21]) &&
|
|
(D_MA_801BE250[21] < (player->pos.x + 100.0f)))) {
|
|
player->unk_1D4 = 9;
|
|
Math_SmoothStepToF(&player->pos.y, D_MA_801BE250[22] + 100.0f, 0.5f, 20.0f, 0);
|
|
player->vel.y = 2.0f;
|
|
Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.5f, 20.0f, 0);
|
|
Math_SmoothStepToF(&player->pos.x, D_MA_801BE250[21], 0.02f, 30.0f, 0);
|
|
Math_SmoothStepToF(&player->unk_12C, -30.0f, 1.0f, 10.0f, 0);
|
|
D_MA_801BE250[13] += 0; // fake?
|
|
}
|
|
player->unk_188 = 0;
|
|
if (player->pos.x < D_MA_801BE250[21]) {
|
|
player->vel.x = 0.0f;
|
|
player->pos.x += 8.0f;
|
|
} else {
|
|
player->vel.x = 0.0f;
|
|
player->pos.x -= 8.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
label_29:
|
|
|
|
if (((D_MA_801BE2F0[5] == 1) || (player->unk_138 < -116467.875f)) &&
|
|
(Macbeth_801A3790(player, player->unk_138, player->unk_0E8) == 0)) {
|
|
if (((player->pos.x - 110.0f) < D_MA_801BE250[19]) && (D_MA_801BE250[19] < (player->pos.x + 110.0f)) &&
|
|
((player->pos.y - 60.0f) < (D_MA_801BE250[12] + 30.0f)) &&
|
|
((D_MA_801BE250[12] + 30.0f) < (player->pos.y + 60.0f))) {
|
|
sp2F = true;
|
|
func_tank_80047D38(player, D_MA_801BE250[12] + 29.0f);
|
|
player->unk_0E4 = D_MA_801BE250[13]; // not fake, but weird
|
|
player->unk_0E4 = D_MA_801BE250[13];
|
|
func_tank_80047FBC(player);
|
|
} else {
|
|
if (((player->pos.x - 150.0f) < D_MA_801BE250[19]) && (D_MA_801BE250[19] < (player->pos.x + 150.0f)) &&
|
|
((player->pos.y - 60.0f) < (D_MA_801BE250[12] + 30.0f)) &&
|
|
((D_MA_801BE250[12] + 30.0f) < (player->pos.y + 60.0f))) {
|
|
func_tank_80047E7C(player, D_MA_801BE250[19], D_MA_801BE250[12] + 30.0f);
|
|
}
|
|
}
|
|
}
|
|
if (!sp2F) {
|
|
if (!D_MA_801BE250) {}
|
|
|
|
func_tank_80046704(player);
|
|
}
|
|
}
|
|
|
|
void func_tank_80047D38(Player* player, f32 arg1) {
|
|
if ((player->unk_16C > 0.2f) && (player->unk_170 > 0.2f) && (player->timer_220 == 0) && (player->vel.y >= 0.0f)) {
|
|
return;
|
|
}
|
|
if ((player->pos.y - 5.0f) < arg1) {
|
|
if (player->vel.y < -10.0f) {
|
|
AUDIO_PLAY_SFX(0x09008015, player->sfxSource, 0);
|
|
player->unk_1F4 = 10;
|
|
}
|
|
D_800C9F04 = 1;
|
|
player->unk_1D4 = 1;
|
|
Math_SmoothStepToF(&player->pos.y, arg1, 0.5f, 30.0f, 0.02f);
|
|
player->unk_068 = arg1 - 1.0f;
|
|
D_800C9F00 = 0;
|
|
player->vel.y = 0.0f;
|
|
}
|
|
}
|
|
|
|
void func_tank_80047E7C(Player* player, f32 arg1, f32 arg2) {
|
|
player->unk_188 = 0.0f;
|
|
if (player->pos.x < arg1) {
|
|
if (player->unk_12C >= -10.0f) {
|
|
Math_SmoothStepToF(&player->unk_12C, 30.0f, 0.5f, 20.0f, 0);
|
|
} else {
|
|
Math_SmoothStepToF(&player->pos.y, arg2, 0.5f, 30.0f, 0);
|
|
if (player->unk_1DC == 0) {
|
|
player->unk_1DC = 9;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1EC = player->unk_1F0 = -20;
|
|
}
|
|
}
|
|
} else {
|
|
if (player->unk_12C <= 10.0f) {
|
|
Math_SmoothStepToF(&player->unk_12C, -30.0f, 0.5f, 20.0f, 0);
|
|
} else {
|
|
Math_SmoothStepToF(&player->pos.y, arg2, 0.5f, 30.0f, 0);
|
|
if (player->unk_1DC == 0) {
|
|
player->unk_1DC = 9;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1EC = player->unk_1F0 = 20;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void func_tank_80047FBC(Player* player) {
|
|
f32 temp_fv0;
|
|
f32 temp_fv0_2;
|
|
|
|
if (!(D_800C9F08 & 1)) {
|
|
Math_SmoothStepToF(&player->unk_0EC, -((player->vel.z / 5.0f) * 4.0f), 0.4f, 8.0f, 0.01f);
|
|
if (player->unk_0EC >= 3.0f) {
|
|
if (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_7) {
|
|
AUDIO_PLAY_SFX(0x19000065, player->sfxSource, 0);
|
|
}
|
|
D_800C9F08 |= 1;
|
|
}
|
|
} else {
|
|
Math_SmoothStepToF(&player->unk_0EC, (player->vel.z / 5.0f) * 4.0f, 0.4f, 8.0f, 0.01f);
|
|
if (player->unk_0EC <= -3.0f) {
|
|
D_800C9F08 &= (u8) ~1;
|
|
}
|
|
}
|
|
if (!(D_800C9F08 & 8)) {
|
|
if (-player->vel.z / 5.0f > 3.0f) {
|
|
player->pos.y += 3.0f;
|
|
} else {
|
|
player->pos.y += -player->vel.z / 5.0f;
|
|
}
|
|
D_800C9F08 |= 8;
|
|
} else {
|
|
if (-player->vel.z / 5.0f > 2.0f) {
|
|
player->pos.y -= 2.0f;
|
|
} else {
|
|
player->pos.y -= -player->vel.z / 5.0f;
|
|
}
|
|
D_800C9F08 &= (u8) ~8;
|
|
}
|
|
}
|
|
|
|
void func_tank_800481F4(Player* player) {
|
|
s32 pad[17];
|
|
s32 i;
|
|
s32 temp_v0;
|
|
Actor* actor;
|
|
Boss* boss;
|
|
Object_4C* obj4C;
|
|
Object_80* obj80;
|
|
s32 sp98;
|
|
s32 pad2;
|
|
f32 var_fv1;
|
|
|
|
func_play_800A887C(player);
|
|
func_tank_800444BC(player);
|
|
if (player->timer_498 == 0) {
|
|
for (i = 0, obj80 = gObjects80; i < ARRAY_COUNT(gObjects80); i++, obj80++) {
|
|
if ((obj80->obj.status == OBJ_ACTIVE) && (obj80->obj.id != OBJ_80_58) && (obj80->obj.id != OBJ_80_105) &&
|
|
(obj80->obj.id != OBJ_80_59) && (obj80->obj.id != OBJ_80_60) && (obj80->obj.id != OBJ_80_63) &&
|
|
(obj80->obj.id != OBJ_80_66) && (obj80->obj.id != OBJ_80_67) && (obj80->obj.id != OBJ_80_68) &&
|
|
(obj80->obj.id != OBJ_80_70) && (obj80->obj.id != OBJ_80_72) && (obj80->obj.id != OBJ_80_71) &&
|
|
(obj80->obj.id != OBJ_80_73) && (obj80->obj.id != OBJ_80_74) && (obj80->obj.id != OBJ_80_69) &&
|
|
((player->unk_138 - 2000.0f) < obj80->obj.pos.z)) {
|
|
var_fv1 = obj80->obj.rot.y;
|
|
if (obj80->info.action == (ObjectFunc) func_enmy_80066EA8) {
|
|
var_fv1 = 0.0f;
|
|
}
|
|
temp_v0 =
|
|
func_play_800A7974(player, obj80->info.hitbox, &sp98, obj80->obj.pos.x, obj80->obj.pos.y,
|
|
obj80->obj.pos.z, obj80->obj.rot.x, var_fv1, obj80->obj.rot.z, 0.0f, 0.0f, 0.0f);
|
|
if (temp_v0 != 0) {
|
|
if (temp_v0 < 0) {
|
|
if (temp_v0 == -1) {
|
|
D_ctx_80178540 = 40;
|
|
D_ctx_80178570 = 20;
|
|
D_ctx_80178574 = 20;
|
|
D_ctx_80178578 = 20;
|
|
player->unk_23C = 80;
|
|
if (player->unk_22C == 0) {
|
|
AUDIO_PLAY_SFX(0x19000001, player->sfxSource, 0);
|
|
}
|
|
player->unk_22C += 2;
|
|
if (player->unk_22C >= 4) {
|
|
player->unk_22C = 4;
|
|
}
|
|
} else if (temp_v0 == -2) {
|
|
AUDIO_PLAY_SFX(0x19000001, player->sfxSource, 0);
|
|
}
|
|
} else {
|
|
Player_ApplyDamage(player, temp_v0, obj80->info.damage);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (i = 0, boss = gBosses; i < ARRAY_COUNT(gBosses); i++, boss++) {
|
|
if (boss->obj.status == OBJ_ACTIVE) {
|
|
temp_v0 = func_play_800A7974(player, boss->info.hitbox, &sp98, boss->obj.pos.x, boss->obj.pos.y,
|
|
boss->obj.pos.z, boss->obj.rot.x, boss->obj.rot.y, boss->obj.rot.z, 0.0f,
|
|
0.0f, 0.0f);
|
|
if (temp_v0 != 0) {
|
|
Player_ApplyDamage(player, temp_v0, boss->info.damage);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (i = 0, actor = gActors; i < ARRAY_COUNT(gActors); i++, actor++) {
|
|
if ((actor->obj.status == OBJ_ACTIVE) && (actor->timer_0C2 == 0)) {
|
|
if (actor->obj.id == OBJ_ACTOR_EVENT) {
|
|
temp_v0 = func_play_800A7974(player, actor->info.hitbox, &sp98, actor->obj.pos.x, actor->obj.pos.y,
|
|
actor->obj.pos.z, actor->obj.rot.x, actor->obj.rot.y, actor->obj.rot.z,
|
|
actor->vwork[29].x, actor->vwork[29].y,
|
|
actor->vwork[29].z + actor->unk_0F4.z);
|
|
if (temp_v0 != 0) {
|
|
Player_ApplyDamage(player, temp_v0, actor->info.damage);
|
|
actor->unk_0D0 = 3;
|
|
actor->unk_0D4 = player->num + 1;
|
|
}
|
|
} else if (actor->obj.id == OBJ_ACTOR_207) {
|
|
if (func_tank_80046E40(player, actor->info.hitbox, &sp98, actor->obj.pos.x, actor->obj.pos.y,
|
|
actor->obj.pos.z, actor->obj.rot.x, actor->obj.rot.y, actor->obj.rot.z, 0.0f,
|
|
0.0f, 0.0f) != 0) {
|
|
if (player->pos.x < actor->obj.pos.x) {
|
|
player->unk_0D8.x = (actor->vel.z > 5.0f) ? -5.0f : -1.5f;
|
|
player->unk_1DC = 8;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1EC = player->unk_1F0 = 20;
|
|
} else {
|
|
player->unk_0D8.x = (actor->vel.z > 5.0f) ? 5.0f : 1.5f;
|
|
player->unk_1DC = 8;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1EC = player->unk_1F0 = -20;
|
|
}
|
|
Math_SmoothStepToF(&player->unk_0D0, 15.0f, 0.3f, 3.5f, 0.001f);
|
|
Math_SmoothStepToF(&player->unk_08C, 0, 0.3f, 3.5f, 0.001f);
|
|
player->vel.x = 0.0f;
|
|
player->vel.y = 30.0f;
|
|
player->pos.x = player->unk_090.x;
|
|
actor->unk_0D0 = 3;
|
|
Player_ApplyDamage(player, 0, 5);
|
|
player->timer_498 = 1;
|
|
}
|
|
} else if ((actor->obj.id >= 205) && (actor->obj.id < 214)) {
|
|
if (func_tank_80046E40(player, actor->info.hitbox, &sp98, actor->fwork[25] + actor->obj.pos.x,
|
|
actor->fwork[8] + actor->obj.pos.y + 25.0f, actor->obj.pos.z,
|
|
actor->fwork[29], actor->fwork[26], actor->obj.rot.z, 0.0f, 0.0f,
|
|
0.0f) != 0) {
|
|
Math_SmoothStepToF(&player->unk_0D0, 15.0f, 0.3f, 3.5f, 0.001f);
|
|
Math_SmoothStepToF(&player->unk_08C, 0, 0.3f, 3.5f, 0.001f);
|
|
if (player->pos.x < (actor->fwork[23] + actor->obj.pos.x)) {
|
|
player->unk_0D8.x = (actor->vel.z > 5.0f) ? -5.0f : -1.5f;
|
|
player->unk_1DC = 8;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1EC = player->unk_1F0 = 20;
|
|
} else {
|
|
player->unk_0D8.x = (actor->vel.z > 5.0f) ? 5.0f : 1.5f;
|
|
player->unk_1DC = 8;
|
|
player->timer_1E8 = 15;
|
|
player->unk_1EC = player->unk_1F0 = -20;
|
|
}
|
|
player->vel.x = 0.0f;
|
|
player->vel.y = 30.0f;
|
|
player->pos.x = player->unk_090.x;
|
|
actor->unk_0D0 = 3;
|
|
if (actor->info.damage != 0) {
|
|
Player_ApplyDamage(player, 0, 20);
|
|
} else {
|
|
actor->unk_0D0 = -1;
|
|
}
|
|
}
|
|
} else {
|
|
temp_v0 = func_play_800A7974(player, actor->info.hitbox, &sp98, actor->obj.pos.x, actor->obj.pos.y,
|
|
actor->obj.pos.z, actor->obj.rot.x, actor->obj.rot.y, actor->obj.rot.z,
|
|
0.0f, 0.0f, 0.0f);
|
|
if (temp_v0 != 0) {
|
|
actor->unk_0D0 = 3;
|
|
if ((actor->obj.id == OBJ_ACTOR_225) || (actor->obj.id == OBJ_ACTOR_190)) {
|
|
actor->unk_0D0 = -1;
|
|
}
|
|
if (actor->info.damage) {
|
|
Player_ApplyDamage(player, temp_v0, actor->info.damage);
|
|
if (actor->obj.id == OBJ_ACTOR_225) {
|
|
player->unk_0D8.y = 0.0f;
|
|
}
|
|
} else {
|
|
actor->unk_0D0 = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (i = 0, obj4C = gObjects4C; i < ARRAY_COUNT(gObjects4C); i++, obj4C++) {
|
|
if (obj4C->obj.status == OBJ_ACTIVE) {
|
|
if ((player->unk_138 - 200.0f) < obj4C->obj.pos.z) {
|
|
temp_v0 = func_play_800A7974(player, obj4C->info.hitbox, &sp98, obj4C->obj.pos.x, obj4C->obj.pos.y,
|
|
obj4C->obj.pos.z, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
|
|
if (temp_v0 != 0) {
|
|
if ((obj4C->obj.id == OBJ_4C_163) || (obj4C->obj.id == OBJ_4C_161) ||
|
|
(obj4C->obj.id == OBJ_4C_162)) {
|
|
obj4C->unk_46 = 1;
|
|
player->unk_1F4 = 6;
|
|
player->unk_21C = 0;
|
|
} else if (obj4C->obj.id == OBJ_4C_169) {
|
|
obj4C->unk_46 = 1;
|
|
} else {
|
|
Player_ApplyDamage(player, temp_v0, obj4C->info.damage);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func_play_800A86E4(player);
|
|
}
|