mirror of https://github.com/zeldaret/mm.git
En_Tanron5 (#653)
* En_Tanron5 * Stuff * PR * Fix * Use x/z instead of x/y * BSS * Merge * bss
This commit is contained in:
parent
863d6b9378
commit
10995051e0
|
|
@ -5,9 +5,14 @@
|
|||
|
||||
#define VEC_SET(V,X,Y,Z) V.x=X;V.y=Y;V.z=Z
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 x;
|
||||
/* 0x02 */ s16 z;
|
||||
} Vec2s; // size = 0x04
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ f32 x;
|
||||
/* 0x04 */ f32 y;
|
||||
/* 0x04 */ f32 z;
|
||||
} Vec2f; // size = 0x08
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
3
spec
3
spec
|
|
@ -4833,8 +4833,7 @@ beginseg
|
|||
name "ovl_En_Tanron5"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.o"
|
||||
include "build/data/ovl_En_Tanron5/ovl_En_Tanron5.data.o"
|
||||
include "build/data/ovl_En_Tanron5/ovl_En_Tanron5.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Tanron5/ovl_En_Tanron5_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ s32 func_80C0A740(BgIkninSusceil* this, GlobalContext* globalCtx) {
|
|||
|
||||
Actor_OffsetOfPointInActorCoords(&this->dyna.actor, &offset, &player->actor.world.pos);
|
||||
|
||||
return (D_80C0B0E8.x < offset.z) && (offset.z < D_80C0B0E8.y) && (offset.x > -240.0f) && (offset.x < D_80C0B0E4);
|
||||
return (D_80C0B0E8.x < offset.z) && (offset.z < D_80C0B0E8.z) && (offset.x > -240.0f) && (offset.x < D_80C0B0E4);
|
||||
}
|
||||
|
||||
void func_80C0A804(BgIkninSusceil* this, GlobalContext* globalCtx) {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
* Description: Fishing Pond Elements (Owner, Fish, Props, Effects...)
|
||||
*/
|
||||
|
||||
#include "prevent_bss_reordering.h"
|
||||
#include "z_en_fishing.h"
|
||||
#include "objects/object_fish/object_fish.h"
|
||||
#include "overlays/actors/ovl_En_Kanban/z_en_kanban.h"
|
||||
|
|
|
|||
|
|
@ -471,13 +471,13 @@ s32 func_80B25490(EnRacedog* this, Vec2f* arg1) {
|
|||
f32 temp;
|
||||
|
||||
xDistToTopFront = this->actor.world.pos.x - arg1[0].x;
|
||||
zDistToTopFront = this->actor.world.pos.z - arg1[0].y;
|
||||
zDistToTopFront = this->actor.world.pos.z - arg1[0].z;
|
||||
xDistToBottomFront = this->actor.world.pos.x - arg1[1].x;
|
||||
zDistToBottomFront = this->actor.world.pos.z - arg1[1].y;
|
||||
zDistToBottomFront = this->actor.world.pos.z - arg1[1].z;
|
||||
xDistToBottomBack = this->actor.world.pos.x - arg1[2].x;
|
||||
zDistToBottomBack = this->actor.world.pos.z - arg1[2].y;
|
||||
zDistToBottomBack = this->actor.world.pos.z - arg1[2].z;
|
||||
xDistToTopBack = this->actor.world.pos.x - arg1[3].x;
|
||||
zDistToTopBack = this->actor.world.pos.z - arg1[3].y;
|
||||
zDistToTopBack = this->actor.world.pos.z - arg1[3].z;
|
||||
|
||||
temp_f0 = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront));
|
||||
temp = (((xDistToBottomFront * zDistToBottomBack) - (xDistToBottomBack * zDistToBottomFront)));
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ void func_80B708C0(EnRailSkb* this, GlobalContext* globalCtx) {
|
|||
s32 func_80B70AB4(Vec2f arg0, Vec2f arg1) {
|
||||
s32 phi_v1;
|
||||
|
||||
if ((arg1.x * arg0.y) < (arg0.x * arg1.y)) {
|
||||
if ((arg1.x * arg0.z) < (arg0.x * arg1.z)) {
|
||||
phi_v1 = 1;
|
||||
} else {
|
||||
phi_v1 = -1;
|
||||
|
|
@ -213,9 +213,9 @@ s32 func_80B70B04(EnRailSkb* this, Vec3f pos) {
|
|||
s32 j;
|
||||
|
||||
sp60.x = this->unk_230[0].z - pos.z;
|
||||
sp60.y = this->unk_230[0].x - pos.x;
|
||||
sp60.z = this->unk_230[0].x - pos.x;
|
||||
sp58.x = this->unk_230[1].z - pos.z;
|
||||
sp58.y = this->unk_230[1].x - pos.x;
|
||||
sp58.z = this->unk_230[1].x - pos.x;
|
||||
j = 1;
|
||||
temp_s3 = func_80B70AB4(sp60, sp58);
|
||||
|
||||
|
|
@ -229,9 +229,9 @@ s32 func_80B70B04(EnRailSkb* this, Vec3f pos) {
|
|||
}
|
||||
|
||||
sp60.x = this->unk_230[i].z - pos.z;
|
||||
sp60.y = this->unk_230[i].x - pos.x;
|
||||
sp60.z = this->unk_230[i].x - pos.x;
|
||||
sp58.x = this->unk_230[j].z - pos.z;
|
||||
sp58.y = this->unk_230[j].x - pos.x;
|
||||
sp58.z = this->unk_230[j].x - pos.x;
|
||||
|
||||
if (func_80B70AB4(sp60, sp58) != temp_s3) {
|
||||
ret = false;
|
||||
|
|
|
|||
|
|
@ -817,7 +817,7 @@ void func_809964DC(EnSkb* this, GlobalContext* globalCtx) {
|
|||
s32 func_80996544(Vec2f arg0, Vec2f arg1) {
|
||||
s32 ret;
|
||||
|
||||
if ((arg1.x * arg0.y) < (arg0.x * arg1.y)) {
|
||||
if ((arg1.x * arg0.z) < (arg0.x * arg1.z)) {
|
||||
ret = 1;
|
||||
} else {
|
||||
ret = -1;
|
||||
|
|
@ -840,9 +840,9 @@ s32 func_80996594(EnSkb* this, GlobalContext* globalCtx) {
|
|||
worldX = this->actor.world.pos.x;
|
||||
|
||||
sp60.x = D_80997468[0].z - worldZ;
|
||||
sp60.y = D_80997468[0].x - worldX;
|
||||
sp60.z = D_80997468[0].x - worldX;
|
||||
sp58.x = D_80997468[1].z - worldZ;
|
||||
sp58.y = D_80997468[1].x - worldX;
|
||||
sp58.z = D_80997468[1].x - worldX;
|
||||
j = 1;
|
||||
temp_s2 = func_80996544(sp60, sp58);
|
||||
|
||||
|
|
@ -856,9 +856,9 @@ s32 func_80996594(EnSkb* this, GlobalContext* globalCtx) {
|
|||
j = 0;
|
||||
}
|
||||
sp60.x = D_80997468[i].z - worldZ;
|
||||
sp60.y = D_80997468[i].x - worldX;
|
||||
sp60.z = D_80997468[i].x - worldX;
|
||||
sp58.x = D_80997468[j].z - worldZ;
|
||||
sp58.y = D_80997468[j].x - worldX;
|
||||
sp58.z = D_80997468[j].x - worldX;
|
||||
if (func_80996544(sp60, sp58) != temp_s2) {
|
||||
sp54 = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@
|
|||
*/
|
||||
|
||||
#include "z_en_tanron5.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "objects/object_boss02/object_boss02.h"
|
||||
#include "overlays/actors/ovl_Boss_02/z_boss_02.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
|
||||
|
||||
|
|
@ -15,7 +18,11 @@ void EnTanron5_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|||
void EnTanron5_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnTanron5_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
#if 0
|
||||
void func_80BE5818(Actor* thisx, GlobalContext* globalCtx);
|
||||
void func_80BE5C10(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
s32 D_80BE5D80 = 0;
|
||||
|
||||
const ActorInit En_Tanron5_InitVars = {
|
||||
ACTOR_EN_TANRON5,
|
||||
ACTORCAT_BOSS,
|
||||
|
|
@ -28,32 +35,493 @@ const ActorInit En_Tanron5_InitVars = {
|
|||
(ActorFunc)EnTanron5_Draw,
|
||||
};
|
||||
|
||||
// static ColliderCylinderInit sCylinderInit = {
|
||||
static ColliderCylinderInit D_80BE5DA4 = {
|
||||
{ COLTYPE_NONE, AT_ON | AT_TYPE_ALL, AC_ON | AC_TYPE_PLAYER | AC_TYPE_ENEMY | AC_TYPE_OTHER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
|
||||
{ ELEMTYPE_UNK2, { 0xF7CFFFFF, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
|
||||
static ColliderCylinderInit sCylinderInit = {
|
||||
{
|
||||
COLTYPE_NONE,
|
||||
AT_ON | AT_TYPE_ALL,
|
||||
AC_ON | AC_TYPE_PLAYER | AC_TYPE_ENEMY | AC_TYPE_OTHER,
|
||||
OC1_ON | OC1_TYPE_ALL,
|
||||
OC2_TYPE_1,
|
||||
COLSHAPE_CYLINDER,
|
||||
},
|
||||
{
|
||||
ELEMTYPE_UNK2,
|
||||
{ 0xF7CFFFFF, 0x00, 0x00 },
|
||||
{ 0xF7CFFFFF, 0x00, 0x00 },
|
||||
TOUCH_ON | TOUCH_SFX_NORMAL,
|
||||
BUMP_ON,
|
||||
OCELEM_ON,
|
||||
},
|
||||
{ 70, 450, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
#endif
|
||||
f32 D_80BE5DD0 = 1.0f;
|
||||
|
||||
extern ColliderCylinderInit D_80BE5DA4;
|
||||
Vec2s D_80BE5DD4[] = {
|
||||
{ 0x4B0, 0x9C4 }, { -0x4B0, 0x9C4 }, { 0x4B0, -0x9C4 }, { -0x4B0, -0x9C4 }, { 0x9C4, 0x4B0 },
|
||||
{ -0x9C4, 0x4B0 }, { 0x9C4, -0x4B0 }, { -0x9C4, -0x4B0 }, { 0x3E8, 0x3E8 }, { -0x3E8, 0x3E8 },
|
||||
{ 0x3E8, -0x3E8 }, { -0x3E8, -0x3E8 }, { 0x000, -0x3E8 }, { 0x000, 0x3E8 }, { 0x3E8, 0x000 },
|
||||
{ -0x3E8, 0x000 }, { 0x000, -0x7D0 }, { 0x000, 0x7D0 }, { 0x7D0, 0x000 }, { -0x7D0, 0x000 },
|
||||
};
|
||||
|
||||
extern UNK_TYPE D_06007A88;
|
||||
extern UNK_TYPE D_06007D18;
|
||||
Gfx* D_80BE5E24[] = {
|
||||
object_boss02_DL_007D18, object_boss02_DL_007D18, object_boss02_DL_007D18, object_boss02_DL_007D18,
|
||||
object_boss02_DL_007D18, object_boss02_DL_007D18, object_boss02_DL_007D18, object_boss02_DL_007D18,
|
||||
object_boss02_DL_007D18, object_boss02_DL_007D18, object_boss02_DL_007D18, object_boss02_DL_007D18,
|
||||
object_boss02_DL_006FD0, object_boss02_DL_006FD0, object_boss02_DL_006FD0, object_boss02_DL_006FD0,
|
||||
object_boss02_DL_006FD0, object_boss02_DL_006FD0, object_boss02_DL_006FD0, object_boss02_DL_006FD0,
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/func_80BE4930.s")
|
||||
f32 D_80BE5E74[] = {
|
||||
0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f,
|
||||
0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f, 0.09f,
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/func_80BE4A2C.s")
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3f unk_00;
|
||||
/* 0x0C */ f32 unk_0C;
|
||||
/* 0x10 */ f32 unk_10;
|
||||
/* 0x14 */ f32 unk_14;
|
||||
/* 0x18 */ Vec3f unk_18;
|
||||
/* 0x24 */ u8 unk_24;
|
||||
/* 0x26 */ s16 unk_26;
|
||||
/* 0x28 */ UNK_TYPE1 unk28[0x4];
|
||||
/* 0x2C */ s16 unk_2C;
|
||||
/* 0x2E */ UNK_TYPE1 unk2E[0x6];
|
||||
/* 0x34 */ f32 unk_34;
|
||||
/* 0x38 */ f32 unk_38;
|
||||
} EnTanron5Effect; // size = 0x3C
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/EnTanron5_Init.s")
|
||||
void func_80BE4930(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) {
|
||||
s16 i;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/EnTanron5_Destroy.s")
|
||||
for (i = 0; i < 150; i++, effect++) {
|
||||
if (effect->unk_24 == 0) {
|
||||
effect->unk_24 = 1;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/EnTanron5_Update.s")
|
||||
effect->unk_00 = *arg1;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/func_80BE5818.s")
|
||||
effect->unk_0C = randPlusMinusPoint5Scaled(10.0f);
|
||||
effect->unk_10 = Rand_ZeroFloat(2.0f) + 3.0f;
|
||||
effect->unk_14 = randPlusMinusPoint5Scaled(10.0f);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/EnTanron5_Draw.s")
|
||||
effect->unk_18.y = -0.15f;
|
||||
effect->unk_18.x = 0.0f;
|
||||
effect->unk_18.z = 0.0f;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Tanron5/func_80BE5C10.s")
|
||||
effect->unk_2C = Rand_ZeroFloat(100.0f) + 200.0f;
|
||||
effect->unk_26 = 0;
|
||||
effect->unk_34 = arg2;
|
||||
effect->unk_38 = 2.0f * arg2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_80BE4A2C(EnTanron5Effect* effect, Vec3f* arg1, f32 arg2) {
|
||||
s16 i;
|
||||
|
||||
for (i = 0; i < 150; i++, effect++) {
|
||||
if (effect->unk_24 == 0) {
|
||||
effect->unk_24 = 2;
|
||||
|
||||
effect->unk_00 = *arg1;
|
||||
|
||||
effect->unk_0C = randPlusMinusPoint5Scaled(30.0f);
|
||||
effect->unk_10 = Rand_ZeroFloat(7.0f);
|
||||
effect->unk_14 = randPlusMinusPoint5Scaled(30.0f);
|
||||
|
||||
effect->unk_18.y = -0.3f;
|
||||
effect->unk_18.x = 0.0f;
|
||||
effect->unk_18.z = 0.0f;
|
||||
|
||||
effect->unk_2C = Rand_ZeroFloat(70.0f) + 150.0f;
|
||||
effect->unk_26 = 0;
|
||||
effect->unk_34 = arg2;
|
||||
effect->unk_38 = 2.0f * arg2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnTanron5_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnTanron5* this = THIS;
|
||||
|
||||
if (ENTANRON5_GET(&this->actor) >= ENTANRON5_100) {
|
||||
D_80BE5D80++;
|
||||
if (D_80BE5D80 > 60) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
return;
|
||||
}
|
||||
|
||||
this->unk_198 = randPlusMinusPoint5Scaled(0x2000);
|
||||
this->unk_19A = randPlusMinusPoint5Scaled(0x2000);
|
||||
|
||||
if (ENTANRON5_GET(&this->actor) < ENTANRON5_107) {
|
||||
Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.025f) + 0.085f) * D_80BE5DD0);
|
||||
} else {
|
||||
Actor_SetScale(&this->actor, (Rand_ZeroFloat(0.015f) + 0.01f) * D_80BE5DD0);
|
||||
}
|
||||
|
||||
this->actor.speedXZ = (Rand_ZeroFloat(10.0f) + 10.0f) * D_80BE5DD0;
|
||||
this->actor.velocity.y = (Rand_ZeroFloat(10.0f) + 15.0f) * D_80BE5DD0;
|
||||
this->actor.gravity = -2.5f * D_80BE5DD0;
|
||||
this->actor.terminalVelocity = -1000.0f * D_80BE5DD0;
|
||||
this->actor.update = func_80BE5818;
|
||||
|
||||
if (ENTANRON5_GET(&this->actor) >= ENTANRON5_110) {
|
||||
this->actor.draw = func_80BE5C10;
|
||||
this->unk_1A0 = Rand_ZeroFloat(1.999f);
|
||||
Actor_SetScale(&this->actor, D_80BE5DD0 * 0.03f);
|
||||
this->unk_144 = 250;
|
||||
this->actor.shape.rot.x = this->actor.shape.rot.y = this->actor.shape.rot.z = 0;
|
||||
} else {
|
||||
this->unk_148 = object_boss02_DL_007A88;
|
||||
this->unk_144 = 150;
|
||||
}
|
||||
} else if (ENTANRON5_GET(&this->actor) == ENTANRON5_0) {
|
||||
EnTanron5* child;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80BE5E74); i++) {
|
||||
child =
|
||||
(EnTanron5*)Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_TANRON5, D_80BE5DD4[i].x,
|
||||
this->actor.world.pos.y, D_80BE5DD4[i].z, 0, Rand_ZeroFloat(0x10000), 0, i + 1);
|
||||
|
||||
child->actor.parent = this->actor.parent;
|
||||
child->unk_19C = D_80BE5E74[i];
|
||||
|
||||
Actor_SetScale(&child->actor, child->unk_19C);
|
||||
|
||||
child->unk_148 = D_80BE5E24[i];
|
||||
if (child->unk_148 == object_boss02_DL_006FD0) {
|
||||
child->actor.shape.rot.y = 0;
|
||||
}
|
||||
|
||||
Collider_InitAndSetCylinder(globalCtx, &child->collider, &child->actor, &sCylinderInit);
|
||||
}
|
||||
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
} else {
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 50.0f, 150.0f, 100.0f, 4);
|
||||
this->actor.world.pos.y = this->actor.floorHeight + -20.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void EnTanron5_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnTanron5* this = THIS;
|
||||
|
||||
if (ENTANRON5_GET(&this->actor) >= ENTANRON5_100) {
|
||||
D_80BE5D80--;
|
||||
}
|
||||
}
|
||||
|
||||
void EnTanron5_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
EnTanron5* this = THIS;
|
||||
Boss02* boss02 = (Boss02*)this->actor.parent;
|
||||
Player* player = GET_PLAYER(globalCtx2);
|
||||
s32 i;
|
||||
s32 phi_v0;
|
||||
s32 spC4;
|
||||
Vec3f spB8;
|
||||
|
||||
if (this->unk_1A0 >= 3) {
|
||||
this->unk_1A0++;
|
||||
Actor_SetScale(&this->actor, 0.0f);
|
||||
if (this->unk_1A0 >= 40) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
// required
|
||||
}
|
||||
|
||||
if (this->unk_144 != 0) {
|
||||
this->unk_144--;
|
||||
}
|
||||
|
||||
if (boss02->actor.update != NULL) {
|
||||
D_80BE5DD0 = boss02->unk_01AC;
|
||||
} else {
|
||||
D_80BE5DD0 = 1.0f;
|
||||
}
|
||||
|
||||
Actor_SetScale(&this->actor, this->unk_19C * D_80BE5DD0);
|
||||
|
||||
if (this->unk_148 == object_boss02_DL_007D18) {
|
||||
this->collider.dim.radius = 65.0f * D_80BE5DD0;
|
||||
this->collider.dim.height = 380.0f * D_80BE5DD0;
|
||||
} else if (this->unk_1A0 == 0) {
|
||||
this->collider.dim.radius = 85.0f * D_80BE5DD0;
|
||||
this->collider.dim.height = 200.0f * D_80BE5DD0;
|
||||
} else if (this->unk_1A0 == 1) {
|
||||
this->collider.dim.radius = 95.0f * D_80BE5DD0;
|
||||
this->collider.dim.height = 100.0f * D_80BE5DD0;
|
||||
} else if (this->unk_1A0 == 2) {
|
||||
this->collider.dim.radius = 95.0f * D_80BE5DD0;
|
||||
this->collider.dim.height = 30.0f * D_80BE5DD0;
|
||||
}
|
||||
|
||||
if (this->unk_144 == 0) {
|
||||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
ColliderInfo* acHitInfo = this->collider.info.acHitInfo;
|
||||
Actor* ac = this->collider.base.ac;
|
||||
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
spC4 = 10;
|
||||
|
||||
if (func_801690CC(globalCtx)) {
|
||||
this->unk_144 = 1;
|
||||
} else {
|
||||
this->unk_144 = 5;
|
||||
spC4 = (s32)Rand_ZeroFloat(2.99f) + 10;
|
||||
}
|
||||
|
||||
if ((KREG(19) != 0) || ((acHitInfo->toucher.dmgFlags & 0x05000202) && (D_80BE5DD0 < 0.5f)) ||
|
||||
(ac->id == ACTOR_BOSS_02)) {
|
||||
if (this->unk_148 == object_boss02_DL_007D18) {
|
||||
Math_Vec3f_Copy(&spB8, &this->actor.world.pos);
|
||||
spB8.y += D_80BE5DD0 * 300.0f;
|
||||
|
||||
for (i = 3; i < spC4; i++) {
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_TANRON5, spB8.x, spB8.y, spB8.z,
|
||||
Rand_ZeroFloat(0x10000), Rand_ZeroFloat(0x10000), 0, i + 100);
|
||||
}
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
func_80BE4A2C(globalCtx->specialEffects, &spB8, Rand_ZeroFloat(3.0f) + 6.0f);
|
||||
}
|
||||
|
||||
this->actor.world.pos.y -= D_80BE5DD0 * 130.0f;
|
||||
} else {
|
||||
f32 spAC;
|
||||
f32 spA8;
|
||||
Vec3f sp9C;
|
||||
|
||||
if (this->unk_1A0 == 0) {
|
||||
spAC = 180.0f;
|
||||
this->unk_19C *= 1.4f;
|
||||
} else if (this->unk_1A0 == 1) {
|
||||
spAC = 230.0f;
|
||||
this->unk_19C *= 1.37f;
|
||||
} else if (this->unk_1A0 == 2) {
|
||||
spAC = 780.0f;
|
||||
this->unk_19C *= 1.5f;
|
||||
}
|
||||
|
||||
this->actor.world.pos.y -= D_80BE5DD0 * spAC;
|
||||
Actor_SetScale(&this->actor, this->unk_19C * D_80BE5DD0);
|
||||
Math_Vec3f_Copy(&spB8, &this->actor.world.pos);
|
||||
|
||||
for (i = 0; i < spC4; i++) {
|
||||
if (this->unk_1A0 == 0) {
|
||||
spA8 = 100.0f;
|
||||
spAC = 180.0f;
|
||||
} else if (this->unk_1A0 == 1) {
|
||||
spA8 = 200.0f;
|
||||
spAC = 100.0f;
|
||||
} else if (this->unk_1A0 == 2) {
|
||||
spA8 = 250.0f;
|
||||
spAC = 50.0f;
|
||||
}
|
||||
|
||||
sp9C.x = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.x;
|
||||
sp9C.z = (randPlusMinusPoint5Scaled(spA8) * D_80BE5DD0) + spB8.z;
|
||||
sp9C.y = this->actor.floorHeight + (spAC * D_80BE5DD0);
|
||||
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_TANRON5, sp9C.x, sp9C.y, sp9C.z,
|
||||
Rand_ZeroFloat(0x10000), Rand_ZeroFloat(0x10000), 0, i + 100);
|
||||
|
||||
if (i < 8) {
|
||||
func_80BE4A2C(globalCtx->specialEffects, &sp9C, Rand_ZeroFloat(3.0f) + 6.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Rand_ZeroOne() < 0.333f) {
|
||||
phi_v0 = 0x4000;
|
||||
} else if (Rand_ZeroOne() < 0.5f) {
|
||||
phi_v0 = -0x8000;
|
||||
} else {
|
||||
phi_v0 = -0x4000;
|
||||
}
|
||||
|
||||
this->actor.shape.rot.y += phi_v0;
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_BIG_BOMB_EXPLOSION);
|
||||
func_800BC848(&this->actor, globalCtx, 4, 4);
|
||||
this->unk_1A0++;
|
||||
} else {
|
||||
Vec3f sp90;
|
||||
ColliderInfo* info = this->collider.info.acHitInfo;
|
||||
|
||||
sp90.x = info->bumper.hitPos.x;
|
||||
sp90.y = info->bumper.hitPos.y;
|
||||
sp90.z = info->bumper.hitPos.z;
|
||||
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_IT_SHIELD_REFLECT_SW);
|
||||
CollisionCheck_SpawnShieldParticlesMetal(globalCtx, &sp90);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||
if (this->unk_148 == object_boss02_DL_006FD0) {
|
||||
this->collider.dim.pos.y = this->actor.floorHeight;
|
||||
}
|
||||
|
||||
if ((this->unk_148 == object_boss02_DL_007D18) || (D_80BE5DD0 < 0.5f)) {
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
} else {
|
||||
f32 xDiff = player->actor.world.pos.x - this->actor.world.pos.x;
|
||||
f32 yDiff = player->actor.world.pos.z - this->actor.world.pos.z;
|
||||
|
||||
if ((fabsf(xDiff) < 120.0f) && (fabsf(yDiff) < 120.0f)) {
|
||||
if (fabsf(yDiff) < fabsf(xDiff)) {
|
||||
if (xDiff > 0.0f) {
|
||||
player->actor.prevPos.x = player->actor.world.pos.x = this->actor.world.pos.x + 120.0f;
|
||||
} else {
|
||||
player->actor.prevPos.x = player->actor.world.pos.x = this->actor.world.pos.x - 120.0f;
|
||||
}
|
||||
} else if (yDiff > 0.0f) {
|
||||
player->actor.prevPos.z = player->actor.world.pos.z = this->actor.world.pos.z + 120.0f;
|
||||
} else {
|
||||
player->actor.prevPos.z = player->actor.world.pos.z = this->actor.world.pos.z - 120.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
void func_80BE5818(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
f32 sp6C;
|
||||
s32 i;
|
||||
Vec3f sp5C;
|
||||
EnTanron5* this = THIS;
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
|
||||
if ((ENTANRON5_GET(&this->actor) < ENTANRON5_110) && (this->unk_1A0 != 0)) {
|
||||
this->unk_1A0++;
|
||||
this->actor.world.pos.y -= 2.0f * D_80BE5DD0;
|
||||
if (this->unk_1A0 == 40) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (DECR(this->unk_144) == 0) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
|
||||
if (this->actor.speedXZ > 0.02f) {
|
||||
Actor_MoveWithGravity(&this->actor);
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 50.0f, 150.0f, 100.0f, 4);
|
||||
}
|
||||
|
||||
if (ENTANRON5_GET(&this->actor) < ENTANRON5_110) {
|
||||
this->actor.shape.rot.x += this->unk_198;
|
||||
this->actor.shape.rot.y += this->unk_19A;
|
||||
sp6C = 1225.0f;
|
||||
|
||||
if (this->actor.bgCheckFlags & 1) {
|
||||
if (ENTANRON5_GET(&this->actor) < ENTANRON5_108) {
|
||||
Math_Vec3f_Copy(&sp5C, &this->actor.world.pos);
|
||||
sp5C.y = this->actor.floorHeight;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
func_80BE4930(globalCtx->specialEffects, &sp5C, Rand_ZeroFloat(1.0f) + 2.0f);
|
||||
}
|
||||
this->unk_1A0++;
|
||||
} else {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sp6C = 400.0f;
|
||||
this->unk_198 += 0x2000;
|
||||
if (this->actor.bgCheckFlags & 1) {
|
||||
this->unk_198 = 0;
|
||||
this->actor.speedXZ = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->unk_1A1 == 0) {
|
||||
if ((D_80BE5DD0 > 0.5f) &&
|
||||
((ENTANRON5_GET(&this->actor) < ENTANRON5_108) || (ENTANRON5_GET(&this->actor) >= ENTANRON5_110))) {
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
Vec3f temp;
|
||||
|
||||
temp.x = player->actor.world.pos.x - this->actor.world.pos.x;
|
||||
temp.y = (player->actor.world.pos.y + 10.0f) - this->actor.world.pos.y;
|
||||
temp.z = player->actor.world.pos.z - this->actor.world.pos.z;
|
||||
|
||||
if (SQXYZ(temp) < sp6C) {
|
||||
if (ENTANRON5_GET(&this->actor) >= ENTANRON5_110) {
|
||||
if (this->unk_1A0 == 0) {
|
||||
Item_Give(globalCtx, ITEM_ARROWS_10);
|
||||
} else {
|
||||
Item_Give(globalCtx, ITEM_MAGIC_LARGE);
|
||||
}
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
play_sound(NA_SE_SY_GET_ITEM);
|
||||
} else {
|
||||
this->unk_1A1 = 20;
|
||||
func_800B8D50(globalCtx, NULL, 5.0f, this->actor.world.rot.y, 0.0f, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this->unk_1A1--;
|
||||
}
|
||||
}
|
||||
|
||||
void EnTanron5_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnTanron5* this = THIS;
|
||||
|
||||
if ((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) {
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, this->unk_148);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80BE5C10(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnTanron5* this = THIS;
|
||||
TexturePtr texture;
|
||||
s32 phi_v0;
|
||||
|
||||
if ((this->unk_144 > 50) || (this->unk_144 & 1)) {
|
||||
phi_v0 = true;
|
||||
} else {
|
||||
phi_v0 = false;
|
||||
}
|
||||
|
||||
if (((-500.0f * D_80BE5DD0) < this->actor.projectedPos.z) && phi_v0) {
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
if (this->unk_1A0 == 0) {
|
||||
texture = gameplay_keep_Tex_05BEF0;
|
||||
} else {
|
||||
texture = gameplay_keep_Tex_0617C0;
|
||||
}
|
||||
|
||||
POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(texture));
|
||||
|
||||
Matrix_InsertTranslation(0.0f, 200.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_InsertZRotation_s(this->unk_198, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_05F6F0);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,9 +5,24 @@
|
|||
|
||||
struct EnTanron5;
|
||||
|
||||
#define ENTANRON5_GET(thisx) ((thisx)->params)
|
||||
|
||||
#define ENTANRON5_0 0
|
||||
#define ENTANRON5_100 100
|
||||
#define ENTANRON5_107 107
|
||||
#define ENTANRON5_108 108
|
||||
#define ENTANRON5_110 110
|
||||
|
||||
typedef struct EnTanron5 {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ char unk_144[0x60];
|
||||
/* 0x0144 */ s16 unk_144;
|
||||
/* 0x0148 */ Gfx* unk_148;
|
||||
/* 0x014C */ ColliderCylinder collider;
|
||||
/* 0x0198 */ s16 unk_198;
|
||||
/* 0x019A */ s16 unk_19A;
|
||||
/* 0x019C */ f32 unk_19C;
|
||||
/* 0x01A0 */ u8 unk_1A0;
|
||||
/* 0x01A1 */ u8 unk_1A1;
|
||||
} EnTanron5; // size = 0x1A4
|
||||
|
||||
extern const ActorInit En_Tanron5_InitVars;
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ void func_809372D0(ObjBean* this) {
|
|||
|
||||
sp34 = Math3D_Vec3fMagnitude(&actor->velocity);
|
||||
temp_f2 = D_80938FF8[this->unk_1DE].x;
|
||||
temp_f12 = D_80938FF8[this->unk_1DE].y;
|
||||
temp_f12 = D_80938FF8[this->unk_1DE].z;
|
||||
if (sp34 < (actor->speedXZ * 8.0f)) {
|
||||
temp_f2 = ((temp_f2 - 2.0f) * 0.1f) + 2.0f;
|
||||
temp_f12 *= 0.4f;
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ s32 ObjOshihiki_CheckWall(GlobalContext* globalCtx, s16 angle, f32 direction, Ob
|
|||
maxDist = maxDists[D_80918940[i]];
|
||||
|
||||
faceVtxOffset.x = (sFaceVtx[i].x * this->dyna.actor.scale.x * 10.0f) + sFaceDirection[i].x;
|
||||
faceVtxOffset.y = (sFaceVtx[i].y * this->dyna.actor.scale.y * 10.0f) + sFaceDirection[i].y;
|
||||
faceVtxOffset.y = (sFaceVtx[i].z * this->dyna.actor.scale.y * 10.0f) + sFaceDirection[i].z;
|
||||
faceVtxOffset.z = 0.0f;
|
||||
|
||||
ObjOshihiki_RotateXZ(&faceVtx, &faceVtxOffset, sn, cs);
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ s32 func_80A21370(ObjSkateblock* this, GlobalContext* globalCtx) {
|
|||
floor->bgId = BG_ACTOR_MAX;
|
||||
|
||||
sp8C.x = this->dyna.actor.world.pos.x + ((D_80A22A1C[i].x * this->dyna.actor.scale.x) + D_80A22A44[i].x);
|
||||
sp8C.z = this->dyna.actor.world.pos.z + ((D_80A22A1C[i].y * this->dyna.actor.scale.z) + D_80A22A44[i].y);
|
||||
sp8C.z = this->dyna.actor.world.pos.z + ((D_80A22A1C[i].z * this->dyna.actor.scale.z) + D_80A22A44[i].z);
|
||||
|
||||
floor->height =
|
||||
BgCheck_EntityRaycastFloor6(&globalCtx->colCtx, &floor->poly, &floor->bgId, &this->dyna.actor, &sp8C, 0.0f);
|
||||
|
|
@ -244,7 +244,7 @@ s32 func_80A216D4(ObjSkateblock* this, GlobalContext* globalCtx, f32 arg2, Vec3f
|
|||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80A22A6C); i++) {
|
||||
spBC.x = (D_80A22A6C[i].x * this->dyna.actor.scale.x) + D_80A22A94[i].x;
|
||||
spBC.y = (D_80A22A6C[i].y * this->dyna.actor.scale.y) + D_80A22A94[i].y;
|
||||
spBC.y = (D_80A22A6C[i].z * this->dyna.actor.scale.y) + D_80A22A94[i].z;
|
||||
spBC.z = 0.0f;
|
||||
|
||||
func_80A212F0(&spD4, &spBC, sp96);
|
||||
|
|
|
|||
|
|
@ -1719,12 +1719,6 @@ D_06004550 = 0x06004550;
|
|||
D_06000168 = 0x06000168;
|
||||
D_06000E68 = 0x06000E68;
|
||||
|
||||
// ovl_En_Tanron5
|
||||
|
||||
D_06006FD0 = 0x06006FD0;
|
||||
D_06007A88 = 0x06007A88;
|
||||
D_06007D18 = 0x06007D18;
|
||||
|
||||
// ovl_En_Test3
|
||||
|
||||
D_0600CB60 = 0x0600CB60;
|
||||
|
|
|
|||
Loading…
Reference in New Issue