En_Tanron5 (#653)

* En_Tanron5

* Stuff

* PR

* Fix

* Use x/z instead of x/y

* BSS

* Merge

* bss
This commit is contained in:
Maide 2022-03-26 01:19:14 +00:00 committed by GitHub
parent 863d6b9378
commit 10995051e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 528 additions and 46 deletions

View File

@ -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
View File

@ -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

View File

@ -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) {

View File

@ -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"

View File

@ -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)));

View File

@ -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;

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;