mirror of
https://github.com/zeldaret/mm.git
synced 2024-11-23 12:59:44 +00:00
En_Trt2 (#448)
* Trt2 * Whoops * PR * PR * PR * Merge * Merge * Merge * bgcheck * I got trolled >:
This commit is contained in:
parent
850823c2ee
commit
c840e04c27
3
spec
3
spec
@ -3589,8 +3589,7 @@ beginseg
|
|||||||
name "ovl_En_Trt2"
|
name "ovl_En_Trt2"
|
||||||
compress
|
compress
|
||||||
include "build/src/overlays/actors/ovl_En_Trt2/z_en_trt2.o"
|
include "build/src/overlays/actors/ovl_En_Trt2/z_en_trt2.o"
|
||||||
include "build/data/ovl_En_Trt2/ovl_En_Trt2.data.o"
|
include "build/src/overlays/actors/ovl_En_Trt2/ovl_En_Trt2_reloc.o"
|
||||||
include "build/data/ovl_En_Trt2/ovl_En_Trt2.reloc.o"
|
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
beginseg
|
beginseg
|
||||||
|
@ -5,8 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "z_en_trt2.h"
|
#include "z_en_trt2.h"
|
||||||
|
#include "objects/object_trt/object_trt.h"
|
||||||
|
|
||||||
#define FLAGS 0x00000009
|
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8)
|
||||||
|
|
||||||
#define THIS ((EnTrt2*)thisx)
|
#define THIS ((EnTrt2*)thisx)
|
||||||
|
|
||||||
@ -14,10 +15,25 @@ void EnTrt2_Init(Actor* thisx, GlobalContext* globalCtx);
|
|||||||
void EnTrt2_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
void EnTrt2_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||||
void EnTrt2_Update(Actor* thisx, GlobalContext* globalCtx);
|
void EnTrt2_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||||
|
|
||||||
|
void func_80AD46F8(EnTrt2* this);
|
||||||
|
s32 func_80AD475C(EnTrt2* this, Path* path, s32 arg2);
|
||||||
|
s16 func_80AD48F8(Path* path, s32 arg1, Vec3f* arg2, f32* arg3);
|
||||||
|
f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3);
|
||||||
|
void func_80AD4A78(EnTrt2* this, GlobalContext* globalCtx);
|
||||||
|
s32 func_80AD4B08(GlobalContext* globalCtx);
|
||||||
void func_80AD4DB4(EnTrt2* this, GlobalContext* globalCtx);
|
void func_80AD4DB4(EnTrt2* this, GlobalContext* globalCtx);
|
||||||
void func_80AD4FE4(EnTrt2* this, GlobalContext* globalCtx);
|
void func_80AD4FE4(EnTrt2* this, GlobalContext* globalCtx);
|
||||||
|
void func_80AD5234(EnTrt2* this, GlobalContext* globalCtx);
|
||||||
|
void func_80AD56E8(Actor* thisx, GlobalContext* globalCtx);
|
||||||
|
|
||||||
|
static ActorAnimationEntryS sAnimations[] = {
|
||||||
|
{ &object_trt_Anim_00DE68, 1.0f, 0, -1, 2, 0 }, { &object_trt_Anim_00EE98, 1.0f, 0, -1, 2, 0 },
|
||||||
|
{ &object_trt_Anim_00FD34, 1.0f, 0, -1, 0, 0 }, { &object_trt_Anim_0030EC, 1.0f, 0, -1, 2, 0 },
|
||||||
|
{ &object_trt_Anim_003D78, 1.0f, 0, -1, 2, 0 }, { &object_trt_Anim_00D52C, 1.0f, 0, -1, 0, 0 },
|
||||||
|
{ &object_trt_Anim_000A44, 1.0f, 0, -1, 0, 0 }, { &object_trt_Anim_001EF4, 1.0f, 0, -1, 0, 0 },
|
||||||
|
{ &object_trt_Anim_002224, 1.0f, 0, -1, 0, 0 }, { &object_trt_Anim_002CB0, 1.0f, 0, -1, 0, 0 },
|
||||||
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
const ActorInit En_Trt2_InitVars = {
|
const ActorInit En_Trt2_InitVars = {
|
||||||
ACTOR_EN_TRT2,
|
ACTOR_EN_TRT2,
|
||||||
ACTORCAT_NPC,
|
ACTORCAT_NPC,
|
||||||
@ -30,18 +46,29 @@ const ActorInit En_Trt2_InitVars = {
|
|||||||
(ActorFunc)NULL,
|
(ActorFunc)NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
// static ColliderCylinderInit sCylinderInit = {
|
static ColliderCylinderInit sCylinderInit = {
|
||||||
static ColliderCylinderInit D_80AD58A0 = {
|
{
|
||||||
{ COLTYPE_NONE, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
|
COLTYPE_NONE,
|
||||||
{ ELEMTYPE_UNK1, { 0x00000000, 0x00, 0x00 }, { 0x00000000, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
|
AT_NONE,
|
||||||
|
AC_NONE,
|
||||||
|
OC1_ON | OC1_TYPE_ALL,
|
||||||
|
OC2_TYPE_1,
|
||||||
|
COLSHAPE_CYLINDER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ELEMTYPE_UNK1,
|
||||||
|
{ 0x00000000, 0x00, 0x00 },
|
||||||
|
{ 0x00000000, 0x00, 0x00 },
|
||||||
|
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||||
|
BUMP_NONE,
|
||||||
|
OCELEM_ON,
|
||||||
|
},
|
||||||
{ 32, 56, 30, { 0, 0, 0 } },
|
{ 32, 56, 30, { 0, 0, 0 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
// sColChkInfoInit
|
static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE };
|
||||||
static CollisionCheckInfoInit2 D_80AD58CC = { 1, 0, 0, 0, MASS_IMMOVABLE };
|
|
||||||
|
|
||||||
// static DamageTable sDamageTable = {
|
static DamageTable sDamageTable = {
|
||||||
static DamageTable D_80AD58D8 = {
|
|
||||||
/* Deku Nut */ DMG_ENTRY(1, 0x0),
|
/* Deku Nut */ DMG_ENTRY(1, 0x0),
|
||||||
/* Deku Stick */ DMG_ENTRY(1, 0x0),
|
/* Deku Stick */ DMG_ENTRY(1, 0x0),
|
||||||
/* Horse trample */ DMG_ENTRY(1, 0x0),
|
/* Horse trample */ DMG_ENTRY(1, 0x0),
|
||||||
@ -76,111 +103,833 @@ static DamageTable D_80AD58D8 = {
|
|||||||
/* Powder Keg */ DMG_ENTRY(1, 0x0),
|
/* Powder Keg */ DMG_ENTRY(1, 0x0),
|
||||||
};
|
};
|
||||||
|
|
||||||
// static InitChainEntry sInitChain[] = {
|
void func_80AD3380(SkelAnime* skelAnime, ActorAnimationEntryS* animation, s32 arg2) {
|
||||||
static InitChainEntry D_80AD5964[] = {
|
f32 phi_f0;
|
||||||
|
|
||||||
|
animation += arg2;
|
||||||
|
|
||||||
|
if (animation->frameCount < 0) {
|
||||||
|
phi_f0 = Animation_GetLastFrame(animation->animationSeg);
|
||||||
|
} else {
|
||||||
|
phi_f0 = animation->frameCount;
|
||||||
|
}
|
||||||
|
Animation_Change(skelAnime, animation->animationSeg, animation->playbackSpeed, animation->frame, phi_f0,
|
||||||
|
animation->mode, animation->transitionRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD341C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
this->collider.dim.pos.x = this->actor.world.pos.x;
|
||||||
|
this->collider.dim.pos.y = this->actor.world.pos.y;
|
||||||
|
this->collider.dim.pos.z = this->actor.world.pos.z;
|
||||||
|
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||||
|
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD349C(EnTrt2* this) {
|
||||||
|
if ((gSaveContext.weekEventReg[85] & 0x10) && !(gSaveContext.weekEventReg[84] & 0x40)) {
|
||||||
|
this->unk_3A8 = 0x88F;
|
||||||
|
} else if (this->unk_3A8 == 0) {
|
||||||
|
this->unk_3A8 = 0x84B;
|
||||||
|
} else if (gSaveContext.weekEventReg[16] & 0x10) {
|
||||||
|
this->unk_3A8 = 0x838;
|
||||||
|
} else if (gSaveContext.weekEventReg[17] & 1) {
|
||||||
|
this->unk_3A8 = 0x84D;
|
||||||
|
} else {
|
||||||
|
this->unk_3A8 = 0x849;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3530(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
s16 phi_a1;
|
||||||
|
f32 sp30;
|
||||||
|
|
||||||
|
func_80AD46F8(this);
|
||||||
|
if (this->path != NULL) {
|
||||||
|
phi_a1 = func_80AD48F8(this->path, this->unk_1E4, &this->actor.world.pos, &sp30);
|
||||||
|
if (this->actor.bgCheckFlags & 8) {
|
||||||
|
phi_a1 = this->actor.wallYaw;
|
||||||
|
}
|
||||||
|
Math_SmoothStepToS(&this->actor.world.rot.y, phi_a1, 4, 1000, 1);
|
||||||
|
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||||
|
if (func_80AD475C(this, this->path, this->unk_1E4)) {
|
||||||
|
if (this->unk_1E4 >= (this->path->count - 1)) {
|
||||||
|
this->unk_1E4 = 0;
|
||||||
|
} else {
|
||||||
|
this->unk_1E4++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Math_ApproachF(&this->actor.speedXZ, 1.5f, 0.2f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Actor_MoveWithGravity(&this->actor);
|
||||||
|
|
||||||
|
if (DECR(this->unk_3AE) == 0) {
|
||||||
|
this->unk_3AE = Rand_S16Offset(20, 20);
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 7);
|
||||||
|
this->unk_3B2 = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3664(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) {
|
||||||
|
ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor);
|
||||||
|
if (this->unk_3D9 == 0) {
|
||||||
|
this->unk_3B2 = 1;
|
||||||
|
} else {
|
||||||
|
this->unk_3B2 = 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ActorCutscene_SetIntentToPlay(this->unk_3DA);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD36EC(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Vec3s sp30;
|
||||||
|
f32 sp2C;
|
||||||
|
|
||||||
|
if (this->path != NULL) {
|
||||||
|
sp2C = func_80AD49B8(this->path, this->unk_1E4, &this->actor.world.pos, &sp30);
|
||||||
|
this->actor.shape.rot.y += 0x1000;
|
||||||
|
Math_ApproachF(&this->actor.velocity.y, 0.5f, 0.2f, 1.0f);
|
||||||
|
if (sp2C < 5.0f) {
|
||||||
|
if (this->unk_1E4 >= (this->path->count - 1)) {
|
||||||
|
this->unk_1E4 = 0;
|
||||||
|
this->unk_3D9 = 1;
|
||||||
|
this->actor.velocity.y = 0.0f;
|
||||||
|
this->path = func_8013D648(globalCtx, this->path->unk1, -1);
|
||||||
|
ActorCutscene_Stop(this->unk_3DA);
|
||||||
|
this->unk_3DA = ActorCutscene_GetAdditionalCutscene(this->unk_3DA);
|
||||||
|
ActorCutscene_SetIntentToPlay(this->unk_3DA);
|
||||||
|
this->unk_3B2 = 0;
|
||||||
|
} else {
|
||||||
|
this->unk_1E4++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Actor_MoveWithGravity(&this->actor);
|
||||||
|
func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG);
|
||||||
|
if ((this->actor.shape.rot.y >= 0x2800) && (this->actor.shape.rot.y < 0x3800)) {
|
||||||
|
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOTAKE_ROLL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD381C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if ((CURRENT_DAY == 2) || (CURRENT_DAY == 3)) {
|
||||||
|
if (func_80AD4B08(globalCtx) == 1) {
|
||||||
|
this->actor.world.pos.y -= 50.0f;
|
||||||
|
this->unk_3D9 = 0;
|
||||||
|
this->unk_3B2 = 0;
|
||||||
|
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||||
|
this->actor.flags |= ACTOR_FLAG_10;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD38B8(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Vec3s sp30;
|
||||||
|
|
||||||
|
if (this->unk_3D9 == 2) {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->path != NULL) {
|
||||||
|
func_80AD49B8(this->path, this->unk_1E4, &this->actor.world.pos, &sp30);
|
||||||
|
Math_SmoothStepToS(&this->actor.world.rot.y, sp30.y, 4, 1000, 1);
|
||||||
|
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||||
|
Math_SmoothStepToS(&this->actor.shape.rot.x, sp30.x, 4, 1000, 1);
|
||||||
|
this->actor.world.rot.x = -this->actor.shape.rot.x;
|
||||||
|
if (func_80AD475C(this, this->path, this->unk_1E4)) {
|
||||||
|
if (this->unk_1E4 >= (this->path->count - 1)) {
|
||||||
|
ActorCutscene_Stop(this->unk_3DA);
|
||||||
|
this->unk_3D9 = 2;
|
||||||
|
} else {
|
||||||
|
this->unk_1E4++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->actor.bgCheckFlags & 8) {
|
||||||
|
if (this->unk_1E4 >= (this->path->count - 1)) {
|
||||||
|
ActorCutscene_Stop(this->unk_3DA);
|
||||||
|
this->unk_3D9 = 2;
|
||||||
|
} else {
|
||||||
|
sp30.y = this->actor.wallYaw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Math_ApproachF(&this->actor.speedXZ, 5.0f, 0.2f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Actor_MoveWithoutGravity(&this->actor);
|
||||||
|
func_800B9010(&this->actor, NA_SE_EN_KOTAKE_FLY - SFX_FLAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3A24(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
func_80AD46F8(this);
|
||||||
|
if (this->actor.speedXZ > 0.05f) {
|
||||||
|
Math_ApproachF(&this->actor.speedXZ, 0.0f, 0.2f, 1.0f);
|
||||||
|
} else if (DECR(this->unk_3AE) == 0) {
|
||||||
|
this->unk_3AE = Rand_S16Offset(100, 50);
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 6);
|
||||||
|
this->unk_3B2 = 4;
|
||||||
|
}
|
||||||
|
Actor_MoveWithGravity(&this->actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3AE4(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if (this->actor.world.pos.y < this->actor.home.pos.y) {
|
||||||
|
Math_ApproachF(&this->actor.velocity.y, 0.5f, 0.2f, 0.1f);
|
||||||
|
} else {
|
||||||
|
this->actor.velocity.y = 0.0f;
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 6);
|
||||||
|
this->unk_3B2 = 4;
|
||||||
|
}
|
||||||
|
Actor_MoveWithGravity(&this->actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3B6C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if (DECR(this->unk_3B0) == 0) {
|
||||||
|
this->unk_3B0 = 10;
|
||||||
|
this->actor.velocity.y = -1.0f;
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 8);
|
||||||
|
this->unk_3B2 = 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3BE4(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
s16 sp2E = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
|
||||||
|
|
||||||
|
Math_ScaledStepToS(&this->unk_3C0, sp2E, 400);
|
||||||
|
Math_SmoothStepToS(&this->unk_3C0, sp2E, 4, 10000, 0);
|
||||||
|
this->actor.world.rot.y += this->unk_3C0;
|
||||||
|
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||||
|
if (this->actor.world.pos.y < 5.0f) {
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 9);
|
||||||
|
this->unk_3B2 = 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3C94(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if (this->actor.world.pos.y < 5.0f) {
|
||||||
|
func_80AD4A78(this, globalCtx);
|
||||||
|
if (this->actor.bgCheckFlags & 1) {
|
||||||
|
this->unk_3B2 = 0xF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3CEC(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
u8 sp27 = Message_GetState(&globalCtx->msgCtx);
|
||||||
|
|
||||||
|
func_80AD46F8(this);
|
||||||
|
if (this->unk_3D8) {
|
||||||
|
func_801518B0(globalCtx, this->unk_3A8, &this->actor);
|
||||||
|
this->unk_3D8 = false;
|
||||||
|
} else if ((sp27 == 5) && func_80147624(globalCtx)) {
|
||||||
|
globalCtx->msgCtx.unk11F22 = 0x43;
|
||||||
|
globalCtx->msgCtx.unk12023 = 4;
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 6);
|
||||||
|
this->unk_3B2 = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3DA4(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
this->actor.velocity.y = 0.0f;
|
||||||
|
func_801518B0(globalCtx, this->unk_3A8, &this->actor);
|
||||||
|
|
||||||
|
if (this->unk_3A8 == 0x838) {
|
||||||
|
this->unk_3B2 = 11;
|
||||||
|
return;
|
||||||
|
} else if (this->unk_3A8 == 0x88F) {
|
||||||
|
if (func_80114E90()) {
|
||||||
|
this->unk_3B2 = 11;
|
||||||
|
} else {
|
||||||
|
this->unk_3B2 = 10;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this->unk_3B2 = 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3E34(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
|
||||||
|
if (func_80114E90()) {
|
||||||
|
globalCtx->msgCtx.unk11F22 = 0x43;
|
||||||
|
globalCtx->msgCtx.unk12023 = 4;
|
||||||
|
this->unk_3B2 = 12;
|
||||||
|
} else {
|
||||||
|
gSaveContext.weekEventReg[85] |= 0x10;
|
||||||
|
this->unk_3A8 = 0x88E;
|
||||||
|
func_801518B0(globalCtx, this->unk_3A8, &this->actor);
|
||||||
|
this->unk_3B2 = 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3EF0(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
u8 temp_v0 = Message_GetState(&globalCtx->msgCtx);
|
||||||
|
|
||||||
|
if (temp_v0 == 6) {
|
||||||
|
if (func_80147624(globalCtx)) {
|
||||||
|
if ((func_80114E90() && !(gSaveContext.weekEventReg[84] & 0x40)) ||
|
||||||
|
!(gSaveContext.weekEventReg[12] & 0x10)) {
|
||||||
|
this->unk_3B2 = 12;
|
||||||
|
} else {
|
||||||
|
gSaveContext.weekEventReg[85] |= 0x10;
|
||||||
|
this->unk_3A8 = 0x88E;
|
||||||
|
func_801518B0(globalCtx, this->unk_3A8, &this->actor);
|
||||||
|
this->unk_3B2 = 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ((temp_v0 == 5) && func_80147624(globalCtx)) {
|
||||||
|
globalCtx->msgCtx.unk11F22 = 0x43;
|
||||||
|
globalCtx->msgCtx.unk12023 = 4;
|
||||||
|
this->unk_3B2 = 12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD3FF4(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if (Actor_HasParent(&this->actor, globalCtx)) {
|
||||||
|
if (!(gSaveContext.weekEventReg[12] & 0x10)) {
|
||||||
|
gSaveContext.weekEventReg[12] |= 0x10;
|
||||||
|
}
|
||||||
|
gSaveContext.weekEventReg[84] |= 0x40;
|
||||||
|
this->actor.parent = NULL;
|
||||||
|
this->unk_3B2 = 14;
|
||||||
|
} else if (gSaveContext.weekEventReg[12] & 0x10) {
|
||||||
|
Actor_PickUp(&this->actor, globalCtx, GI_POTION_RED, 300.0f, 300.0f);
|
||||||
|
} else {
|
||||||
|
Actor_PickUp(&this->actor, globalCtx, GI_BOTTLE_POTION_RED, 300.0f, 300.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD40AC(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if ((Message_GetState(&globalCtx->msgCtx) == 6) && func_80147624(globalCtx)) {
|
||||||
|
func_800B85E0(&this->actor, globalCtx, 400.0f, -1);
|
||||||
|
this->unk_3B2 = 13;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4110(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
|
||||||
|
this->unk_3A8 = 0x84C;
|
||||||
|
func_80151938(globalCtx, this->unk_3A8);
|
||||||
|
this->unk_3B2 = 10;
|
||||||
|
} else {
|
||||||
|
func_800B85E0(&this->actor, globalCtx, 400.0f, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD417C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
|
||||||
|
if (this->unk_3A8 == 0x84B) {
|
||||||
|
func_80AD349C(this);
|
||||||
|
func_80AD3DA4(this, globalCtx);
|
||||||
|
} else {
|
||||||
|
globalCtx->msgCtx.unk11F22 = 0x43;
|
||||||
|
globalCtx->msgCtx.unk12023 = 4;
|
||||||
|
if (this->unk_3A8 == 0x84C) {
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 6);
|
||||||
|
this->path = func_8013D648(globalCtx, ENTRT2_GET_FC00(&this->actor), 0x3F);
|
||||||
|
this->unk_3B2 = 18;
|
||||||
|
} else if (this->unk_3A8 == 0x88F) {
|
||||||
|
this->unk_3A8 = 0x88E;
|
||||||
|
func_801518B0(globalCtx, this->unk_3A8, &this->actor);
|
||||||
|
} else {
|
||||||
|
this->actor.textId = 0;
|
||||||
|
this->unk_3B2 = 15;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4298(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
|
||||||
|
if (ActorCutscene_GetCanPlayNext(this->unk_3DA)) {
|
||||||
|
ActorCutscene_StartAndSetUnkLinkFields(this->unk_3DA, &this->actor);
|
||||||
|
player->stateFlags1 |= 0x20;
|
||||||
|
this->unk_3B2 = 6;
|
||||||
|
} else {
|
||||||
|
if (ActorCutscene_GetCurrentIndex() == 0x7C) {
|
||||||
|
ActorCutscene_Stop(0x7C);
|
||||||
|
}
|
||||||
|
ActorCutscene_SetIntentToPlay(this->unk_3DA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD431C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
|
||||||
|
player->stateFlags1 &= ~0x20;
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD434C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
this->actor.shape.rot.y += 0x1000;
|
||||||
|
Math_ApproachF(&this->actor.velocity.y, 1.5f, 0.2f, 0.1f);
|
||||||
|
|
||||||
|
if (this->actor.world.pos.y > 200.0f) {
|
||||||
|
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||||
|
this->unk_3B2 = 0x13;
|
||||||
|
ActorCutscene_Stop(this->unk_3DA);
|
||||||
|
} else {
|
||||||
|
s32 i;
|
||||||
|
Vec3f sp68;
|
||||||
|
Vec3f sp5C = { 0.0f, 0.5f, 0.0f };
|
||||||
|
|
||||||
|
for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i -= 2) {
|
||||||
|
sp68.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
|
||||||
|
sp68.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
|
||||||
|
sp68.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
|
||||||
|
func_800B3030(globalCtx, &sp68, &sp5C, &sp5C, 100, 0, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
func_800B9010(&this->actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
|
||||||
|
}
|
||||||
|
} else if (this->actor.world.pos.y < 5.0f) {
|
||||||
|
func_80AD4A78(this, globalCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
Actor_MoveWithGravity(&this->actor);
|
||||||
|
|
||||||
|
if ((this->actor.shape.rot.y >= 0x2800) && (this->actor.shape.rot.y < 0x3800)) {
|
||||||
|
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_KOTAKE_ROLL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4550(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
u8 sp23 = Message_GetState(&globalCtx->msgCtx);
|
||||||
|
|
||||||
|
if ((player->transformation != PLAYER_FORM_HUMAN) && (player->transformation != PLAYER_FORM_FIERCE_DEITY)) {
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 7);
|
||||||
|
this->unk_3B2 = 17;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((sp23 == 5) && func_80147624(globalCtx)) {
|
||||||
|
globalCtx->msgCtx.unk11F22 = 0x43;
|
||||||
|
globalCtx->msgCtx.unk12023 = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4608(EnTrt2* this) {
|
||||||
|
s16 temp = this->unk_3B6 - 1;
|
||||||
|
|
||||||
|
if (temp != 0) {
|
||||||
|
this->unk_3B6 = temp;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = this->unk_3B8 + 1;
|
||||||
|
if (temp >= 3) {
|
||||||
|
this->unk_3B8 = 0;
|
||||||
|
this->unk_3B6 = (s32)(Rand_ZeroOne() * 60.0f) + 20;
|
||||||
|
} else {
|
||||||
|
this->unk_3B8 = temp;
|
||||||
|
this->unk_3B6 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD469C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_trt_Skel_00FEF0, &object_trt_Anim_000A44, NULL, NULL, 0);
|
||||||
|
this->actor.draw = func_80AD56E8;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD46F8(EnTrt2* this) {
|
||||||
|
if ((this->actor.home.pos.y + 60.0f) < this->actor.world.pos.y) {
|
||||||
|
this->actor.velocity.y = -0.2f;
|
||||||
|
} else if (this->actor.world.pos.y <= (this->actor.home.pos.y + 50.0f)) {
|
||||||
|
this->actor.velocity.y = 0.2f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 func_80AD475C(EnTrt2* this, Path* path, s32 arg2) {
|
||||||
|
Vec3s* points;
|
||||||
|
s32 count;
|
||||||
|
f32 phi_f12;
|
||||||
|
s32 ret;
|
||||||
|
f32 phi_f14;
|
||||||
|
s32 arg = arg2;
|
||||||
|
f32 sp44;
|
||||||
|
f32 sp40;
|
||||||
|
f32 sp3C;
|
||||||
|
Vec3f sp30;
|
||||||
|
|
||||||
|
points = Lib_SegmentedToVirtual(path->points);
|
||||||
|
count = path->count;
|
||||||
|
ret = false;
|
||||||
|
Math_Vec3s_ToVec3f(&sp30, &points[arg]);
|
||||||
|
|
||||||
|
if (arg == 0) {
|
||||||
|
phi_f12 = points[1].x - points[0].x;
|
||||||
|
phi_f14 = points[1].z - points[0].z;
|
||||||
|
} else if ((count - 1) == arg) {
|
||||||
|
phi_f12 = points[count - 1].x - points[count - 2].x;
|
||||||
|
phi_f14 = points[count - 1].z - points[count - 2].z;
|
||||||
|
} else {
|
||||||
|
phi_f12 = points[arg + 1].x - points[arg - 1].x;
|
||||||
|
phi_f14 = points[arg + 1].z - points[arg - 1].z;
|
||||||
|
}
|
||||||
|
|
||||||
|
func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C);
|
||||||
|
|
||||||
|
if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) {
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
s16 func_80AD48F8(Path* path, s32 arg1, Vec3f* arg2, f32* arg3) {
|
||||||
|
Vec3s* points;
|
||||||
|
f32 phi_f14;
|
||||||
|
f32 phi_f12;
|
||||||
|
|
||||||
|
if (path != NULL) {
|
||||||
|
points = Lib_SegmentedToVirtual(path->points);
|
||||||
|
points = &points[arg1];
|
||||||
|
phi_f14 = points->x - arg2->x;
|
||||||
|
phi_f12 = points->z - arg2->z;
|
||||||
|
} else {
|
||||||
|
phi_f14 = 0.0f;
|
||||||
|
phi_f12 = 0.0f;
|
||||||
|
}
|
||||||
|
*arg3 = SQ(phi_f14) + SQ(phi_f12);
|
||||||
|
return RADF_TO_BINANG(Math_Acot2F(phi_f12, phi_f14));
|
||||||
|
}
|
||||||
|
|
||||||
|
f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) {
|
||||||
|
s32 pad;
|
||||||
|
Vec3f sp20;
|
||||||
|
Vec3s* temp_v1;
|
||||||
|
|
||||||
|
if (path != NULL) {
|
||||||
|
temp_v1 = Lib_SegmentedToVirtual(path->points);
|
||||||
|
temp_v1 = &temp_v1[arg1];
|
||||||
|
|
||||||
|
sp20.x = temp_v1->x;
|
||||||
|
sp20.y = temp_v1->y;
|
||||||
|
sp20.z = temp_v1->z;
|
||||||
|
}
|
||||||
|
arg3->y = Math_Vec3f_Yaw(arg2, &sp20);
|
||||||
|
arg3->x = Math_Vec3f_Pitch(arg2, &sp20);
|
||||||
|
return sp20.y - arg2->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4A78(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Vec3f sp34;
|
||||||
|
|
||||||
|
sp34.x = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.x;
|
||||||
|
sp34.y = this->actor.world.pos.y;
|
||||||
|
sp34.z = randPlusMinusPoint5Scaled(15.0f) + this->actor.world.pos.z;
|
||||||
|
Actor_SpawnFloorDustRing(globalCtx, &this->actor, &sp34, 50.0f, 0, 2.0f, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 func_80AD4B08(GlobalContext* globalCtx) {
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
s32 ret;
|
||||||
|
|
||||||
|
if (SurfaceType_GetSceneExitIndex(&globalCtx->colCtx, player->actor.floorPoly, player->actor.floorBgId) == 0x15) {
|
||||||
|
ret = true;
|
||||||
|
} else {
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 func_80AD4B4C(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
s32 sp24 = false;
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
|
||||||
|
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
|
||||||
|
sp24 = true;
|
||||||
|
this->actor.speedXZ = 0.0f;
|
||||||
|
func_80AD349C(this);
|
||||||
|
this->unk_3B4 = this->unk_3B2;
|
||||||
|
if (this->actor.bgCheckFlags & 1) {
|
||||||
|
if ((player->transformation != PLAYER_FORM_HUMAN) && (player->transformation != PLAYER_FORM_FIERCE_DEITY)) {
|
||||||
|
this->unk_3A8 = 0x84F;
|
||||||
|
}
|
||||||
|
func_80AD3DA4(this, globalCtx);
|
||||||
|
} else if ((player->transformation == PLAYER_FORM_HUMAN) ||
|
||||||
|
(player->transformation == PLAYER_FORM_FIERCE_DEITY)) {
|
||||||
|
this->unk_3B2 = 16;
|
||||||
|
this->actor.velocity.y = 1.5f;
|
||||||
|
} else {
|
||||||
|
this->unk_3A8 = 0x84F;
|
||||||
|
this->unk_3D8 = true;
|
||||||
|
func_80AD3380(&this->skelAnime, sAnimations, 7);
|
||||||
|
this->unk_3B2 = 7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sp24;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 func_80AD4C4C(EnTrt2* this) {
|
||||||
|
if (this->actor.bgCheckFlags & 1) {
|
||||||
|
if (this->actor.xzDistToPlayer < 100.0f) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if ((this->actor.xzDistToPlayer > 50.0f) && (this->actor.xzDistToPlayer < 200.0f)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 func_80AD4CCC(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
s16 sp1E = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
|
||||||
|
if (((this->unk_3B2 == 4) || (this->unk_3B2 == 5)) && this->actor.isTargeted && !(this->actor.bgCheckFlags & 1) &&
|
||||||
|
((player->transformation == PLAYER_FORM_HUMAN) || (player->transformation == PLAYER_FORM_FIERCE_DEITY))) {
|
||||||
|
this->actor.speedXZ = 0.0f;
|
||||||
|
this->actor.velocity.y = 1.5f;
|
||||||
|
this->unk_3B2 = 16;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (func_80AD4C4C(this) && this->actor.isTargeted && (sp1E < 0x4000) && (sp1E > -0x4000)) {
|
||||||
|
func_800B863C(&this->actor, globalCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4DB4(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
static Vec3f D_80AD5904 = { 0.0f, 50.0f, 0.0 };
|
||||||
|
|
||||||
|
this->actor.flags &= ~ACTOR_FLAG_10;
|
||||||
|
Actor_SetObjectDependency(globalCtx, &this->actor);
|
||||||
|
Actor_SetScale(&this->actor, 0.008f);
|
||||||
|
this->path = func_8013D648(globalCtx, ENTRT2_GET_FC00(&this->actor), 0x3F);
|
||||||
|
this->unk_3AE = Rand_S16Offset(100, 50);
|
||||||
|
this->unk_3B0 = 10;
|
||||||
|
this->unk_3A8 = 0;
|
||||||
|
|
||||||
|
this->actor.world.pos.x += D_80AD5904.x;
|
||||||
|
this->actor.world.pos.y += D_80AD5904.y;
|
||||||
|
this->actor.world.pos.z += D_80AD5904.z;
|
||||||
|
|
||||||
|
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 20.0f);
|
||||||
|
func_80AD469C(this, globalCtx);
|
||||||
|
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||||
|
this->actor.colChkInfo.cylRadius = 50;
|
||||||
|
|
||||||
|
this->unk_3C0 = 0;
|
||||||
|
this->unk_3D8 = false;
|
||||||
|
this->unk_3DA = this->actor.cutscene;
|
||||||
|
this->unk_3B6 = 20;
|
||||||
|
this->unk_3B8 = 0;
|
||||||
|
this->unk_3BC = func_80AD4608;
|
||||||
|
|
||||||
|
if (gSaveContext.weekEventReg[12] & 8) {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSaveContext.weekEventReg[84] & 0x40) {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((globalCtx->sceneNum == SCENE_20SICHITAI) || (globalCtx->sceneNum == SCENE_20SICHITAI2)) {
|
||||||
|
if (gSaveContext.day == 2) {
|
||||||
|
if (!(gSaveContext.weekEventReg[15] & 0x80)) {
|
||||||
|
gSaveContext.weekEventReg[15] |= 0x80;
|
||||||
|
this->unk_3B2 = 3;
|
||||||
|
} else {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (gSaveContext.day == 2) {
|
||||||
|
if (gSaveContext.weekEventReg[15] & 0x80) {
|
||||||
|
this->unk_3B2 = 4;
|
||||||
|
} else {
|
||||||
|
Actor_MarkForDeath(&this->actor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (gSaveContext.day == 3) {
|
||||||
|
this->unk_3B2 = 4;
|
||||||
|
}
|
||||||
|
this->actionFunc = func_80AD4FE4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void func_80AD4FE4(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
static EnTrt2UnkFunc2 D_80AD5910[] = {
|
||||||
|
func_80AD3664, func_80AD36EC, func_80AD38B8, func_80AD381C, func_80AD3530, func_80AD3A24, func_80AD434C,
|
||||||
|
func_80AD3CEC, func_80AD3BE4, func_80AD3C94, func_80AD417C, func_80AD3EF0, func_80AD3FF4, func_80AD4110,
|
||||||
|
func_80AD40AC, func_80AD4550, func_80AD3B6C, func_80AD3AE4, func_80AD4298, func_80AD431C, func_80AD3E34,
|
||||||
|
};
|
||||||
|
|
||||||
|
this->unk_3BC(this);
|
||||||
|
|
||||||
|
D_80AD5910[this->unk_3B2](this, globalCtx);
|
||||||
|
Actor_MoveWithGravity(&this->actor);
|
||||||
|
|
||||||
|
if (globalCtx->sceneNum != SCENE_20SICHITAI) {
|
||||||
|
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 26.0f, 10.0f, 0.0f, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
Actor_SetFocus(&this->actor, 90.0f);
|
||||||
|
SkelAnime_Update(&this->skelAnime);
|
||||||
|
}
|
||||||
|
|
||||||
|
static InitChainEntry sInitChain[] = {
|
||||||
ICHAIN_U8(targetMode, 3, ICHAIN_CONTINUE),
|
ICHAIN_U8(targetMode, 3, ICHAIN_CONTINUE),
|
||||||
ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP),
|
ICHAIN_F32(targetArrowOffset, 500, ICHAIN_STOP),
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
void EnTrt2_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
|
||||||
extern ColliderCylinderInit D_80AD58A0;
|
Collider_InitCylinder(globalCtx, &this->collider);
|
||||||
extern CollisionCheckInfoInit2 D_80AD58CC;
|
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||||
extern DamageTable D_80AD58D8;
|
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
|
||||||
extern InitChainEntry D_80AD5964[];
|
Actor_ProcessInitChain(&this->actor, sInitChain);
|
||||||
|
this->actionFunc = func_80AD4DB4;
|
||||||
|
}
|
||||||
|
|
||||||
extern UNK_TYPE D_06000A44;
|
void EnTrt2_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3380.s")
|
SkelAnime_Free(&this->skelAnime, globalCtx);
|
||||||
|
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD341C.s")
|
void EnTrt2_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD349C.s")
|
if ((this->unk_3B2 != 6) && (this->unk_3B2 != 10) && (this->unk_3B2 != 13) && (this->unk_3B2 != 14) &&
|
||||||
|
(this->unk_3B2 != 16) && (this->unk_3B2 != 8) && (this->unk_3B2 != 9)) {
|
||||||
|
func_80AD4B4C(this, globalCtx);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3530.s")
|
this->actionFunc(this, globalCtx);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3664.s")
|
func_80AD341C(this, globalCtx);
|
||||||
|
func_80AD5234(this, globalCtx);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD36EC.s")
|
if ((this->unk_3B2 != 6) && (this->unk_3B2 != 10) && (this->unk_3B2 != 13) && (this->unk_3B2 != 14) &&
|
||||||
|
(this->unk_3B2 != 16) && (this->unk_3B2 != 8) && (this->unk_3B2 != 9)) {
|
||||||
|
func_80AD4CCC(this, globalCtx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD381C.s")
|
void func_80AD5234(EnTrt2* this, GlobalContext* globalCtx) {
|
||||||
|
Player* player = GET_PLAYER(globalCtx);
|
||||||
|
Vec3f sp40;
|
||||||
|
Vec3f sp34;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD38B8.s")
|
Math_SmoothStepToS(&this->unk_3D6, this->actor.yawTowardsPlayer - this->actor.shape.rot.y, 4, 0x38E0, 1);
|
||||||
|
this->unk_3D6 = CLAMP(this->unk_3D6, -0x38E0, 0x38E0);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3A24.s")
|
sp40 = player->actor.world.pos;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3AE4.s")
|
if (this->unk_3B2 == 8) {
|
||||||
|
sp40.y = player->bodyPartsPos[7].y + 3.0f;
|
||||||
|
} else {
|
||||||
|
sp40.y = player->bodyPartsPos[7].y + 45.0f;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3B6C.s")
|
sp34 = this->actor.world.pos;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3BE4.s")
|
Math_SmoothStepToS(&this->unk_3D4, Math_Vec3f_Pitch(&sp34, &sp40), 4, 0x1C70, 1);
|
||||||
|
this->unk_3D4 = CLAMP(this->unk_3D4, -0x1C70, 0x1C70);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3C94.s")
|
void func_80AD5394(s16 arg0, s16 arg1, Vec3f* arg2, Vec3s* arg3, s32 arg4) {
|
||||||
|
Vec3f sp7C;
|
||||||
|
Vec3f sp70 = gZeroVec3f;
|
||||||
|
Vec3s sp68;
|
||||||
|
MtxF sp28;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3CEC.s")
|
Matrix_MultiplyVector3fByState(&sp70, &sp7C);
|
||||||
|
Matrix_CopyCurrentState(&sp28);
|
||||||
|
func_8018219C(&sp28, &sp68, 0);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3DA4.s")
|
*arg2 = sp7C;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3E34.s")
|
if (arg4) {
|
||||||
|
sp68.x += arg0;
|
||||||
|
sp68.y += arg1;
|
||||||
|
Math_SmoothStepToS(&arg3->x, sp68.x, 4, 0x1FFE, 1);
|
||||||
|
Math_SmoothStepToS(&arg3->y, sp68.y, 4, 0x1FFE, 1);
|
||||||
|
Math_SmoothStepToS(&arg3->z, sp68.z, 4, 0x1FFE, 1);
|
||||||
|
} else {
|
||||||
|
arg3->x = sp68.x;
|
||||||
|
arg3->y = sp68.y;
|
||||||
|
arg3->z = sp68.z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3EF0.s")
|
s32 EnTrt2_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
|
||||||
|
Actor* thisx) {
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD3FF4.s")
|
if ((limbIndex == 8) || (limbIndex == 13) || (limbIndex == 19)) {
|
||||||
|
rot->y += (s16)Math_SinS(this->unk_33C[limbIndex]) * 200;
|
||||||
|
rot->z += (s16)Math_CosS(this->unk_372[limbIndex]) * 200;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD40AC.s")
|
void EnTrt2_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
Vec3f sp30 = { 0.0f, -30.0f, 0.0f };
|
||||||
|
s32 phi_v0 = false;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4110.s")
|
if (this->unk_3B2 >= 8) {
|
||||||
|
phi_v0 = true;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD417C.s")
|
if (limbIndex == 21) {
|
||||||
|
func_80AD5394(this->unk_3D4, this->unk_3D6, &this->unk_3C8, &this->unk_3C2, phi_v0);
|
||||||
|
Matrix_InsertTranslation(this->unk_3C8.x, this->unk_3C8.y, this->unk_3C8.z, MTXMODE_NEW);
|
||||||
|
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateY(this->unk_3C2.y, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertXRotation_s(this->unk_3C2.x, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertZRotation_s(this->unk_3C2.z, MTXMODE_APPLY);
|
||||||
|
Matrix_MultiplyVector3fByState(&sp30, &this->actor.focus.pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4298.s")
|
void EnTrt2_UnkDraw(GlobalContext* globalCtx, s32 limbIndex, Actor* thisx) {
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD431C.s")
|
if (limbIndex == 21) {
|
||||||
|
Matrix_InsertTranslation(this->unk_3C8.x, this->unk_3C8.y, this->unk_3C8.z, MTXMODE_NEW);
|
||||||
|
Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateY(this->unk_3C2.y, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertXRotation_s(this->unk_3C2.x, MTXMODE_APPLY);
|
||||||
|
Matrix_InsertZRotation_s(this->unk_3C2.z, MTXMODE_APPLY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD434C.s")
|
void func_80AD56E8(Actor* thisx, GlobalContext* globalCtx) {
|
||||||
|
static TexturePtr D_80AD5978[] = {
|
||||||
|
object_trt_Tex_00B0B8,
|
||||||
|
object_trt_Tex_00B8B8,
|
||||||
|
object_trt_Tex_00C0B8,
|
||||||
|
};
|
||||||
|
s32 pad;
|
||||||
|
EnTrt2* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4550.s")
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4608.s")
|
func_8012C28C(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD469C.s")
|
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8]));
|
||||||
|
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80AD5978[this->unk_3B8]));
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD46F8.s")
|
SkelAnime_DrawTransformFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable,
|
||||||
|
this->skelAnime.dListCount, EnTrt2_OverrideLimbDraw, EnTrt2_PostLimbDraw,
|
||||||
|
EnTrt2_UnkDraw, &this->actor);
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD475C.s")
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD48F8.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD49B8.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4A78.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4B08.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4B4C.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4C4C.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4CCC.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4DB4.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD4FE4.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/EnTrt2_Init.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/EnTrt2_Destroy.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/EnTrt2_Update.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD5234.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD5394.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD54C8.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD5584.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD566C.s")
|
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Trt2/func_80AD56E8.s")
|
|
||||||
|
@ -6,11 +6,39 @@
|
|||||||
struct EnTrt2;
|
struct EnTrt2;
|
||||||
|
|
||||||
typedef void (*EnTrt2ActionFunc)(struct EnTrt2*, GlobalContext*);
|
typedef void (*EnTrt2ActionFunc)(struct EnTrt2*, GlobalContext*);
|
||||||
|
typedef void (*EnTrt2UnkFunc)(struct EnTrt2*);
|
||||||
|
typedef void (*EnTrt2UnkFunc2)(struct EnTrt2*, GlobalContext*);
|
||||||
|
|
||||||
|
#define ENTRT2_GET_FC00(thisx) (((thisx)->params & 0xFC00) >> 0xA)
|
||||||
|
|
||||||
typedef struct EnTrt2 {
|
typedef struct EnTrt2 {
|
||||||
/* 0x0000 */ Actor actor;
|
/* 0x000 */ Actor actor;
|
||||||
/* 0x0144 */ EnTrt2ActionFunc actionFunc;
|
/* 0x144 */ EnTrt2ActionFunc actionFunc;
|
||||||
/* 0x0148 */ char unk_148[0x294];
|
/* 0x148 */ UNK_TYPE1 unk_148[8];
|
||||||
|
/* 0x150 */ SkelAnime skelAnime;
|
||||||
|
/* 0x194 */ ColliderCylinder collider;
|
||||||
|
/* 0x1E0 */ Path* path;
|
||||||
|
/* 0x1E4 */ s32 unk_1E4;
|
||||||
|
/* 0x1E8 */ UNK_TYPE1 unk_1E8[0x154];
|
||||||
|
/* 0x33C */ s16 unk_33C[27];
|
||||||
|
/* 0x372 */ s16 unk_372[27];
|
||||||
|
/* 0x3A8 */ u16 unk_3A8;
|
||||||
|
/* 0x3AA */ UNK_TYPE1 unk_3AA[4];
|
||||||
|
/* 0x3AE */ s16 unk_3AE;
|
||||||
|
/* 0x3B0 */ s16 unk_3B0;
|
||||||
|
/* 0x3B2 */ s16 unk_3B2;
|
||||||
|
/* 0x3B4 */ s16 unk_3B4;
|
||||||
|
/* 0x3B6 */ s16 unk_3B6;
|
||||||
|
/* 0x3B8 */ s16 unk_3B8;
|
||||||
|
/* 0x3BC */ EnTrt2UnkFunc unk_3BC;
|
||||||
|
/* 0x3C0 */ s16 unk_3C0;
|
||||||
|
/* 0x3C2 */ Vec3s unk_3C2;
|
||||||
|
/* 0x3C8 */ Vec3f unk_3C8;
|
||||||
|
/* 0x3D4 */ s16 unk_3D4;
|
||||||
|
/* 0x3D6 */ s16 unk_3D6;
|
||||||
|
/* 0x3D8 */ u8 unk_3D8;
|
||||||
|
/* 0x3D9 */ u8 unk_3D9;
|
||||||
|
/* 0x3DA */ s16 unk_3DA;
|
||||||
} EnTrt2; // size = 0x3DC
|
} EnTrt2; // size = 0x3DC
|
||||||
|
|
||||||
extern const ActorInit En_Trt2_InitVars;
|
extern const ActorInit En_Trt2_InitVars;
|
||||||
|
@ -12206,9 +12206,9 @@
|
|||||||
0x80AD5150:("EnTrt2_Update",),
|
0x80AD5150:("EnTrt2_Update",),
|
||||||
0x80AD5234:("func_80AD5234",),
|
0x80AD5234:("func_80AD5234",),
|
||||||
0x80AD5394:("func_80AD5394",),
|
0x80AD5394:("func_80AD5394",),
|
||||||
0x80AD54C8:("func_80AD54C8",),
|
0x80AD54C8:("EnTrt2_OverrideLimbDraw",),
|
||||||
0x80AD5584:("func_80AD5584",),
|
0x80AD5584:("EnTrt2_PostLimbDraw",),
|
||||||
0x80AD566C:("func_80AD566C",),
|
0x80AD566C:("EnTrt2_UnkDraw",),
|
||||||
0x80AD56E8:("func_80AD56E8",),
|
0x80AD56E8:("func_80AD56E8",),
|
||||||
0x80AD5BB0:("ObjTokeiStep_SetSysMatrix",),
|
0x80AD5BB0:("ObjTokeiStep_SetSysMatrix",),
|
||||||
0x80AD5BE8:("ObjTokeiStep_AddQuake",),
|
0x80AD5BE8:("ObjTokeiStep_AddQuake",),
|
||||||
|
@ -2067,11 +2067,6 @@ D_0600B2B0 = 0x0600B2B0;
|
|||||||
D_0600FEF0 = 0x0600FEF0;
|
D_0600FEF0 = 0x0600FEF0;
|
||||||
D_06000A44 = 0x06000A44;
|
D_06000A44 = 0x06000A44;
|
||||||
|
|
||||||
// ovl_En_Trt2
|
|
||||||
|
|
||||||
D_06000A44 = 0x06000A44;
|
|
||||||
D_0600FEF0 = 0x0600FEF0;
|
|
||||||
|
|
||||||
// ovl_En_Tru
|
// ovl_En_Tru
|
||||||
|
|
||||||
D_0601A820 = 0x0601A820;
|
D_0601A820 = 0x0601A820;
|
||||||
|
Loading…
Reference in New Issue
Block a user