En_Kendo_Js (#606)

* En_Kendo_Js

* PR

* PR

* PR
This commit is contained in:
Maide 2022-02-19 20:09:27 +00:00 committed by GitHub
parent e353f3bb96
commit 08acf42204
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 744 additions and 79 deletions

View File

@ -2021,8 +2021,8 @@ void func_801229A0(GlobalContext* globalCtx, Player* player);
// void func_80122ED8(void);
// void func_80122EEC(void);
void func_80122F28(Player* player, GlobalContext* globalCtx, Actor* actor);
// void func_80122F9C(void);
// void func_80122FCC(void);
s32 func_80122F9C(GlobalContext* globalCtx);
s32 func_80122FCC(GlobalContext* globalCtx);
// void func_8012300C(void);
void func_8012301C(s32 iParm1, GlobalContext* globalCtx);
void func_80123140(GlobalContext* globalCtx, Player* param_2);
@ -2058,7 +2058,7 @@ s32 func_801240C8(Player* player);
// void func_80124110(void);
// void func_80124148(void);
// void func_80124168(void);
// void func_80124190(void);
s32 func_80124190(Player* player);
// void func_801241B4(void);
// void func_801241E0(void);
// void func_8012420C(void);

View File

@ -879,7 +879,8 @@ typedef struct {
/* 0x1205A */ UNK_TYPE1 pad1205A[0x10];
/* 0x1206A */ s16 unk1206A;
/* 0x1206C */ s32 unk1206C;
/* 0x12070 */ UNK_TYPE1 pad12070[0x8];
/* 0x12070 */ s32 unk12070;
/* 0x12074 */ UNK_TYPE1 pad12074[0x4];
/* 0x12078 */ s32 bankRupeesSelected;
/* 0x1207C */ s32 bankRupees;
/* 0x12080 */ UNK_TYPE1 pad12080[0x31];

3
spec
View File

@ -3975,8 +3975,7 @@ beginseg
name "ovl_En_Kendo_Js"
compress
include "build/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.o"
include "build/data/ovl_En_Kendo_Js/ovl_En_Kendo_Js.data.o"
include "build/data/ovl_En_Kendo_Js/ovl_En_Kendo_Js.reloc.o"
include "build/src/overlays/actors/ovl_En_Kendo_Js/ovl_En_Kendo_Js_reloc.o"
endseg
beginseg

View File

@ -91,7 +91,7 @@ void func_80B401F8(BgGoronOyu* this, GlobalContext* globalCtx) {
if (dist.x >= 0.0f && dist.x <= this->waterBoxXLength && dist.z >= 0.0f && dist.z <= this->waterBoxZLength &&
fabsf(dist.y) < 100.0f && player->actor.depthInWater > 12.0f) {
Actor_PickUp(&this->dyna.actor, globalCtx, 0xBA, this->dyna.actor.xzDistToPlayer,
Actor_PickUp(&this->dyna.actor, globalCtx, GI_MAX, this->dyna.actor.xzDistToPlayer,
fabsf(this->dyna.actor.playerHeightRel));
}
}

View File

@ -768,9 +768,9 @@ void func_809C2A64(EnAob01* this, GlobalContext* globalCtx) {
this->actionFunc = func_809C2BE4;
}
} else if (gSaveContext.weekEventReg[8] & 0x20) {
Actor_PickUp(&this->actor, globalCtx, 4, 300.0f, 300.0f);
Actor_PickUp(&this->actor, globalCtx, GI_RUPEE_RED, 300.0f, 300.0f);
} else {
Actor_PickUp(&this->actor, globalCtx, 12, 300.0f, 300.0f);
Actor_PickUp(&this->actor, globalCtx, GI_HEART_PIECE, 300.0f, 300.0f);
}
}
}

View File

@ -700,7 +700,7 @@ void func_8088DD34(EnElf* this, GlobalContext* globalCtx) {
}
if (this->fairyFlags & 0x2000) {
Actor_PickUp(&this->actor, globalCtx, 0xBA, 80.0f, 60.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MAX, 80.0f, 60.0f);
}
}

View File

@ -882,7 +882,7 @@ void func_8091F5A4(Actor* thisx, GlobalContext* globalCtx) {
func_8091D904(this);
}
} else if (func_8091DDF4(this, globalCtx)) {
Actor_PickUp(&this->actor, globalCtx, 0xBA, 80.0f, 25.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MAX, 80.0f, 25.0f);
}
}
}

View File

@ -411,7 +411,7 @@ void func_808F3B40(EnIn* this, GlobalContext* globalCtx) {
textId = gSaveContext.day != 3 ? 0x3481 : 0x34A4;
this->actor.textId = textId;
} else {
Actor_PickUp(&this->actor, globalCtx, 0x92, 500.0f, 100.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MILK, 500.0f, 100.0f);
}
}
@ -435,7 +435,7 @@ void func_808F3C40(EnIn* this, GlobalContext* globalCtx) {
textId = gSaveContext.day != 3 ? 0x346A : 0x3492;
this->actor.textId = textId;
} else {
Actor_PickUp(&this->actor, globalCtx, 0x92, 500.0f, 100.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MILK, 500.0f, 100.0f);
}
}
@ -759,7 +759,7 @@ s32 func_808F4414(GlobalContext* globalCtx, EnIn* this, s32 arg2) {
if (gSaveContext.rupees >= globalCtx->msgCtx.unk1206C) {
if (Interface_HasEmptyBottle()) {
this->actionFunc = func_808F3C40;
Actor_PickUp(&this->actor, globalCtx, 0x92, 500.0f, 100.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MILK, 500.0f, 100.0f);
func_801159EC(-globalCtx->msgCtx.unk1206C);
ret = true;
} else {
@ -905,7 +905,7 @@ s32 func_808F4414(GlobalContext* globalCtx, EnIn* this, s32 arg2) {
func_808F35D8(this, globalCtx);
if (Interface_HasEmptyBottle()) {
this->actionFunc = func_808F3B40;
Actor_PickUp(&this->actor, globalCtx, 0x92, 500.0f, 100.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MILK, 500.0f, 100.0f);
ret = true;
} else {
func_800E8EA0(globalCtx, &this->actor, 0x347F);
@ -1011,7 +1011,7 @@ s32 func_808F4414(GlobalContext* globalCtx, EnIn* this, s32 arg2) {
if (gSaveContext.rupees >= globalCtx->msgCtx.unk1206C) {
if (Interface_HasEmptyBottle()) {
this->actionFunc = func_808F3C40;
Actor_PickUp(&this->actor, globalCtx, 0x92, 500.0f, 100.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MILK, 500.0f, 100.0f);
func_801159EC(-globalCtx->msgCtx.unk1206C);
ret = true;
} else {
@ -1109,7 +1109,7 @@ s32 func_808F4414(GlobalContext* globalCtx, EnIn* this, s32 arg2) {
func_808F35D8(this, globalCtx);
if (Interface_HasEmptyBottle()) {
this->actionFunc = func_808F3B40;
Actor_PickUp(&this->actor, globalCtx, 0x92, 500.0f, 100.0f);
Actor_PickUp(&this->actor, globalCtx, GI_MILK, 500.0f, 100.0f);
ret = true;
} else {
func_800E8EA0(globalCtx, &this->actor, 0x34A2);

View File

@ -511,9 +511,9 @@ void func_8095E660(EnIshi* this, GlobalContext* globalCtx) {
if ((this->actor.xzDistToPlayer < 90.0f) && (sp30 == 0)) {
if (sp38 == 1) {
Actor_PickUp(&this->actor, globalCtx, 0, 80.0f, 20.0f);
Actor_PickUp(&this->actor, globalCtx, GI_NONE, 80.0f, 20.0f);
} else {
Actor_PickUp(&this->actor, globalCtx, 0, 50.0f, 10.0f);
Actor_PickUp(&this->actor, globalCtx, GI_NONE, 50.0f, 10.0f);
}
}
}

View File

@ -5,8 +5,10 @@
*/
#include "z_en_kendo_js.h"
#include "overlays/actors/ovl_En_Maruta/z_en_maruta.h"
#include "objects/object_js/object_js.h"
#define FLAGS 0x0A000019
#define FLAGS (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_2000000 | ACTOR_FLAG_8000000)
#define THIS ((EnKendoJs*)thisx)
@ -15,7 +17,26 @@ void EnKendoJs_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnKendoJs_Update(Actor* thisx, GlobalContext* globalCtx);
void EnKendoJs_Draw(Actor* thisx, GlobalContext* globalCtx);
#if 0
void func_80B26538(EnKendoJs* this);
void func_80B2654C(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B26AE8(EnKendoJs* this);
void func_80B26AFC(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B2701C(EnKendoJs* this);
void func_80B27030(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B2714C(EnKendoJs* this);
void func_80B27188(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B273D0(EnKendoJs* this);
void func_80B2740C(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B274BC(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B276C4(EnKendoJs* this);
void func_80B276D8(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B27760(EnKendoJs* this);
void func_80B27774(EnKendoJs* this, GlobalContext* globalCtx);
void func_80B2783C(EnKendoJs* this, GlobalContext* globalCtx);
s32 func_80B278C4(GlobalContext* globalCtx, Vec3f arg1);
void func_80B279F0(EnKendoJs* this, GlobalContext* globalCtx, s32 arg2);
void func_80B27A90(EnKendoJs* this, GlobalContext* globalCtx);
const ActorInit En_Kendo_Js_InitVars = {
ACTOR_EN_KENDO_JS,
ACTORCAT_NPC,
@ -28,86 +49,718 @@ const ActorInit En_Kendo_Js_InitVars = {
(ActorFunc)EnKendoJs_Draw,
};
// static ColliderCylinderInit sCylinderInit = {
static ColliderCylinderInit D_80B27C30 = {
{ COLTYPE_NONE, AT_NONE, AC_NONE, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_2, COLSHAPE_CYLINDER, },
{ ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
static ColliderCylinderInit sCylinderInit = {
{
COLTYPE_NONE,
AT_NONE,
AC_NONE,
OC1_ON | OC1_TYPE_ALL,
OC2_TYPE_2,
COLSHAPE_CYLINDER,
},
{
ELEMTYPE_UNK0,
{ 0x00000000, 0x00, 0x00 },
{ 0xF7CFFFFF, 0x00, 0x00 },
TOUCH_NONE | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 18, 30, 0, { 0, 0, 0 } },
};
// sColChkInfoInit
static CollisionCheckInfoInit2 D_80B27C5C = { 0, 0, 0, 0, MASS_IMMOVABLE };
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
#endif
static AnimationInfo sAnimations[] = {
{ &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, 0, -8.0f }, { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, 0, -8.0f },
{ &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, 0, -8.0f }, { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, 2, -8.0f },
{ &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, 0, -8.0f },
};
extern ColliderCylinderInit D_80B27C30;
extern CollisionCheckInfoInit2 D_80B27C5C;
s16 D_80B27CE0[][3] = {
{ 0x2731, 0x2732, 0x2733 },
{ 0x2734, 0x2735, 0x2736 },
{ 0x2737, 0x2738, 0x2739 },
};
extern UNK_TYPE D_0600016C;
extern UNK_TYPE D_06000F4C;
s16 D_80B27CF4[][3] = {
{ 0x2710, 0x2712, 0x2714 },
{ 0x2711, 0x2713, 0x2715 },
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/EnKendoJs_Init.s")
s16 D_80B27D00[] = {
0x271C, 0x271E, 0x2720, 0x2722, 0x2724, 0x2726, 0x2728,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/EnKendoJs_Destroy.s")
s16 D_80B27D10[] = {
0x271B, 0x271D, 0x271F, 0x2721, 0x2723, 0x2725, 0x2727,
};
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26538.s")
void EnKendoJs_Init(Actor* thisx, GlobalContext* globalCtx) {
s32 pad;
EnKendoJs* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B2654C.s")
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26758.s")
Collider_InitCylinder(globalCtx, &this->collider);
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B269A4.s")
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_js_Skel_006990, &object_js_Anim_000F4C, this->jointTable,
this->morphTable, 13);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26AE8.s")
if ((CURRENT_DAY == 3) && !((gSaveContext.time <= CLOCK_TIME(23, 0)) && (gSaveContext.time >= CLOCK_TIME(6, 0)))) {
if (ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) {
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_KANBAN, this->actor.home.pos.x,
this->actor.home.pos.y, this->actor.home.pos.z - 10.0f, this->actor.home.rot.x,
this->actor.home.rot.y, this->actor.home.rot.z, 0x10);
Actor_MarkForDeath(&this->actor);
} else {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 4);
}
} else if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) {
Actor_MarkForDeath(&this->actor);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26AFC.s")
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26BF8.s")
if (ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) {
Path* path = &globalCtx->setupPathList[ENKENDOJS_GET_FF00(&this->actor)];
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26EB4.s")
this->unk_274 = Lib_SegmentedToVirtual(path->points);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26F14.s")
this->actor.flags &= ~ACTOR_FLAG_1;
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 30.0f;
this->actor.child = NULL;
this->unk_28A = 0;
this->unk_28C = 0;
this->unk_28E = 0;
this->unk_286 = 0;
func_80B26538(this);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B26F6C.s")
void EnKendoJs_Destroy(Actor* thisx, GlobalContext* globalCtx) {
EnKendoJs* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B2701C.s")
Collider_DestroyCylinder(globalCtx, &this->collider);
gSaveContext.weekEventReg[82] &= (u8)~8;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27030.s")
void func_80B26538(EnKendoJs* this) {
this->actionFunc = func_80B2654C;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B2714C.s")
void func_80B2654C(EnKendoJs* this, GlobalContext* globalCtx) {
s32 phi_v0;
s32 sp30;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27188.s")
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state) != 0) {
if (CURRENT_DAY != 0) {
sp30 = CURRENT_DAY - 1;
} else {
sp30 = 0;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B273D0.s")
if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) {
func_801518B0(globalCtx, 0x273C, &this->actor);
this->unk_288 = 0x273C;
} else if (gSaveContext.playerForm != PLAYER_FORM_HUMAN) {
switch (gSaveContext.playerForm) {
case PLAYER_FORM_DEKU:
phi_v0 = 0;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B2740C.s")
case PLAYER_FORM_GORON:
phi_v0 = 1;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B274BC.s")
case PLAYER_FORM_ZORA:
phi_v0 = 2;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B276C4.s")
default:
phi_v0 = 0;
break;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B276D8.s")
func_801518B0(globalCtx, D_80B27CE0[phi_v0][sp30], &this->actor);
this->unk_288 = D_80B27CE0[phi_v0][sp30];
} else if ((Player_GetMask(globalCtx) != PLAYER_MASK_NONE) && (Player_GetMask(globalCtx) < PLAYER_MASK_GIANT)) {
u16 sp2E = Player_GetMask(globalCtx) + 0x273C;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27760.s")
if (0) {}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27774.s")
func_801518B0(globalCtx, sp2E, &this->actor);
this->unk_288 = sp2E;
} else {
if (this->unk_28A == 0) {
this->unk_28A = 1;
phi_v0 = 0;
} else {
phi_v0 = 1;
}
func_801518B0(globalCtx, D_80B27CF4[phi_v0][sp30], &this->actor);
this->unk_288 = D_80B27CF4[phi_v0][sp30];
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B2783C.s")
func_80B26AE8(this);
} else {
func_800B8614(&this->actor, globalCtx, 100.0f);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27880.s")
void func_80B26758(EnKendoJs* this, GlobalContext* globalCtx) {
if (func_80147624(globalCtx) && (this->unk_288 == 0x2716)) {
switch (globalCtx->msgCtx.choiceIndex) {
case 0:
if (CUR_EQUIP_VALUE_VOID(EQUIP_SWORD) == EQUIP_SWORD) {
play_sound(NA_SE_SY_ERROR);
func_801518B0(globalCtx, 0x272C, &this->actor);
this->unk_288 = 0x272C;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 2);
} else if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
play_sound(NA_SE_SY_ERROR);
func_801518B0(globalCtx, 0x2718, &this->actor);
this->unk_288 = 0x2718;
} else {
func_8019F208();
func_801159EC(-globalCtx->msgCtx.unk1206C);
func_801518B0(globalCtx, 0x2719, &this->actor);
this->unk_288 = 0x2719;
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B278C4.s")
case 1:
if (CUR_EQUIP_VALUE_VOID(EQUIP_SWORD) == EQUIP_SWORD) {
play_sound(NA_SE_SY_ERROR);
func_801518B0(globalCtx, 0x272C, &this->actor);
this->unk_288 = 0x272C;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 2);
} else if (gSaveContext.rupees < globalCtx->msgCtx.unk12070) {
play_sound(NA_SE_SY_ERROR);
func_801518B0(globalCtx, 0x2718, &this->actor);
this->unk_288 = 0x2718;
} else {
func_8019F208();
func_801159EC(-globalCtx->msgCtx.unk12070);
func_801518B0(globalCtx, 0x273A, &this->actor);
this->unk_288 = 0x273A;
}
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B279AC.s")
case 2:
func_8019F230();
func_801518B0(globalCtx, 0x2717, &this->actor);
this->unk_288 = 0x2717;
}
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B279F0.s")
void func_80B269A4(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27A90.s")
if (!func_80147624(globalCtx)) {
return;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/EnKendoJs_Update.s")
switch (this->unk_288) {
case 0x2710:
case 0x2711:
case 0x2712:
case 0x2713:
case 0x2714:
case 0x2715:
func_801518B0(globalCtx, 0x2716, &this->actor);
this->unk_288 = 0x2716;
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27B54.s")
case 0x2719:
func_801477B4(globalCtx);
player->stateFlags1 |= 0x20;
func_80B2701C(this);
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/func_80B27B8C.s")
case 0x271A:
func_801477B4(globalCtx);
func_80B2714C(this);
break;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Kendo_Js/EnKendoJs_Draw.s")
case 0x273A:
func_801518B0(globalCtx, 0x273B, &this->actor);
this->unk_288 = 0x273B;
break;
case 0x273B:
func_801477B4(globalCtx);
func_80112AFC(globalCtx);
player->stateFlags1 |= 0x20;
func_80B273D0(this);
break;
case 0x272D:
func_801477B4(globalCtx);
gSaveContext.minigameState = 3;
func_80B276C4(this);
func_80B276D8(this, globalCtx);
break;
}
}
void func_80B26AE8(EnKendoJs* this) {
this->actionFunc = func_80B26AFC;
}
void func_80B26AFC(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
switch (Message_GetState(&globalCtx->msgCtx)) {
case 4:
func_80B26758(this, globalCtx);
break;
case 5:
func_80B269A4(this, globalCtx);
break;
case 6:
if (func_80147624(globalCtx)) {
if (this->unk_288 == 0x272C) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
}
if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) {
gSaveContext.minigameState = 3;
}
player->stateFlags1 &= ~0x20;
func_80B26538(this);
}
case 0:
case 1:
case 2:
case 3:
break;
}
}
s32 func_80B26BF8(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
switch (this->unk_284) {
case 0:
if (func_80122FCC(globalCtx)) {
return 0;
}
if ((player->swordState != 0) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
return 1;
}
break;
case 1:
if ((player->stateFlags3 & 0x8000000)) {
return 0;
}
if ((player->swordState != 0) || (player->stateFlags2 & 0x80000)) {
return 1;
}
break;
case 2:
if (func_80122F9C(globalCtx)) {
return 0;
}
if ((player->swordState != 0) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
return 1;
}
this->unk_28E = 0;
break;
case 3:
if ((this->unk_28E == 1) && ((player->swordAnimation == 4) || (player->swordAnimation == 6))) {
this->unk_28E = 0;
return 0;
}
if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
this->unk_28E = 0;
return 1;
}
break;
case 4:
if ((this->unk_28E == 1) && ((player->swordAnimation == 0) || (player->swordAnimation == 2))) {
this->unk_28E = 0;
return 0;
}
if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
this->unk_28E = 0;
return 1;
}
break;
case 5:
if ((this->unk_28E == 1) && (player->swordAnimation == 12)) {
this->unk_28E = 0;
return 0;
}
if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
this->unk_28E = 0;
return 1;
}
break;
case 6:
if ((this->unk_28E == 1) && ((player->swordAnimation == 17) || (player->swordAnimation == 20))) {
this->unk_28E = 0;
return 0;
}
if ((this->unk_28E == 1) || (player->stateFlags3 & 0x8000000) || (player->stateFlags2 & 0x80000)) {
this->unk_28E = 0;
return 1;
}
break;
}
return 2;
}
void func_80B26EB4(EnKendoJs* this, GlobalContext* globalCtx) {
func_801518B0(globalCtx, D_80B27D00[this->unk_284], &this->actor);
this->unk_288 = D_80B27D00[this->unk_284];
this->unk_284++;
}
void func_80B26F14(EnKendoJs* this, GlobalContext* globalCtx) {
func_801518B0(globalCtx, D_80B27D10[this->unk_284], &this->actor);
this->unk_288 = D_80B27D10[this->unk_284];
}
s32 func_80B26F6C(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
switch (this->unk_288) {
case 0x271D:
if (func_80124190(player)) {
func_801518B0(globalCtx, 0x272A, &this->actor);
this->unk_288 = 0x272A;
return true;
}
break;
case 0x2721:
if (this->unk_292 != 0) {
func_801518B0(globalCtx, 0x272B, &this->actor);
this->unk_288 = 0x272B;
return true;
}
break;
}
return false;
}
void func_80B2701C(EnKendoJs* this) {
this->actionFunc = func_80B27030;
}
void func_80B27030(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
Vec3f sp20 = this->actor.world.pos;
sp20.z += 200.0f;
if (func_80B278C4(globalCtx, sp20)) {
this->actor.flags |= ACTOR_FLAG_10000;
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
this->actor.flags &= ~ACTOR_FLAG_10000;
player->stateFlags1 &= ~0x20;
func_80B279F0(this, globalCtx, 0);
func_801518B0(globalCtx, 0x271A, &this->actor);
this->unk_288 = 0x271A;
func_80B26AE8(this);
} else {
func_800B8614(&this->actor, globalCtx, 800.0f);
}
}
}
void func_80B2714C(EnKendoJs* this) {
gSaveContext.weekEventReg[82] |= 8;
this->unk_28C = 1;
this->unk_290 = 0;
this->unk_284 = 0;
this->unk_286 = 1;
this->actionFunc = func_80B27188;
}
void func_80B27188(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if ((Message_GetState(&globalCtx->msgCtx) == 5) && func_80147624(globalCtx)) {
if (this->unk_288 == 0x2729) {
func_80B26F14(this, globalCtx);
} else if (!func_80B26F6C(this, globalCtx)) {
if (this->skelAnime.animation == &object_js_Anim_00016C) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
}
this->unk_286 = 2;
func_801477B4(globalCtx);
player->stateFlags1 &= ~0x20;
}
} else if (this->unk_286 == 2) {
this->unk_286 = 1;
}
if (this->unk_286 == 1) {
switch (func_80B26BF8(this, globalCtx)) {
case 0:
this->unk_286 = 0;
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
player->stateFlags1 |= 0x20;
func_80B26EB4(this, globalCtx);
break;
case 1:
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_ERROR);
this->unk_286 = 0;
player->stateFlags1 |= 0x20;
func_801518B0(globalCtx, 0x2729, &this->actor);
this->unk_288 = 0x2729;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 2);
break;
default:
if (this->unk_28C == 0) {
this->unk_290++;
if (this->unk_290 == 30) {
this->unk_290 = 0;
func_80B279F0(this, globalCtx, 0);
}
}
break;
}
if ((this->skelAnime.animation == &object_js_Anim_0003DC) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 1);
}
if (this->unk_284 == 7) {
gSaveContext.weekEventReg[82] &= (u8)~8;
func_80B26AE8(this);
}
}
}
void func_80B273D0(EnKendoJs* this) {
gSaveContext.weekEventReg[82] |= 8;
this->unk_290 = 120;
this->unk_284 = 0;
this->unk_286 = 1;
this->actionFunc = func_80B2740C;
}
void func_80B2740C(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
Vec3f sp18 = this->actor.world.pos;
sp18.z += 300.0f;
if (func_80B278C4(globalCtx, sp18)) {
this->unk_28C = 0;
player->stateFlags1 &= ~0x20;
this->actionFunc = func_80B274BC;
}
}
void func_80B274BC(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if (this->unk_290 >= 140) {
if (this->unk_284 == 5) {
if (gSaveContext.minigameScore == 30) {
func_801518B0(globalCtx, 0x272D, &this->actor);
this->unk_288 = 0x272D;
} else {
func_801518B0(globalCtx, 0x272E, &this->actor);
this->unk_288 = 0x272E;
}
player->stateFlags1 |= 0x20;
gSaveContext.weekEventReg[82] &= (u8)~8;
func_80B26AE8(this);
return;
}
play_sound(NA_SE_SY_FOUND);
func_80B279F0(this, globalCtx, ((Rand_Next() & 0xFF) % 3) + 1);
func_80B279F0(this, globalCtx, ((Rand_Next() & 0xFF) % 3) + 4);
this->unk_290 = 0;
this->unk_284++;
} else if (this->unk_290 == 120) {
func_80B27A90(this, globalCtx);
this->unk_290++;
} else {
this->unk_290++;
}
if (this->unk_28E == 1) {
if ((player->swordAnimation == 17) || (player->swordAnimation == 20)) {
globalCtx->interfaceCtx.unk_25C = 3;
if (gSaveContext.minigameScore >= 27) {
player->stateFlags1 |= 0x20;
}
} else if (player->swordAnimation == 12) {
globalCtx->interfaceCtx.unk_25C = 2;
} else {
globalCtx->interfaceCtx.unk_25C = 1;
}
Actor_PlaySfxAtPos(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
this->unk_28E = 0;
}
func_80B2783C(this, globalCtx);
}
void func_80B276C4(EnKendoJs* this) {
this->actionFunc = func_80B276D8;
}
void func_80B276D8(EnKendoJs* this, GlobalContext* globalCtx) {
if (Actor_HasParent(&this->actor, globalCtx)) {
this->actor.parent = NULL;
func_80B27760(this);
} else if (!(gSaveContext.weekEventReg[63] & 0x20)) {
Actor_PickUp(&this->actor, globalCtx, GI_HEART_PIECE, 800.0f, 100.0f);
} else {
Actor_PickUp(&this->actor, globalCtx, GI_RUPEE_RED, 800.0f, 100.0f);
}
}
void func_80B27760(EnKendoJs* this) {
this->actionFunc = func_80B27774;
}
void func_80B27774(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
if (!(gSaveContext.weekEventReg[63] & 0x20)) {
gSaveContext.weekEventReg[63] |= 0x20;
func_801518B0(globalCtx, 0x272F, &this->actor);
this->unk_288 = 0x272F;
} else {
func_801518B0(globalCtx, 0x2730, &this->actor);
this->unk_288 = 0x2730;
}
func_80B26AE8(this);
player->stateFlags1 &= ~0x20;
} else {
func_800B85E0(&this->actor, globalCtx, 1000.0f, -1);
}
}
void func_80B2783C(EnKendoJs* this, GlobalContext* globalCtx) {
if (this->actor.cutscene != -1) {
func_800DFB14(globalCtx->cameraPtrs[MAIN_CAM], ActorCutscene_GetCutscene(this->actor.cutscene)->unk4);
}
}
void func_80B27880(EnKendoJs* this, GlobalContext* globalCtx) {
Player* player = GET_PLAYER(globalCtx);
f32 temp_f0 = this->actor.world.pos.z + 70.0f;
if ((ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) && (player->actor.world.pos.z < temp_f0)) {
player->actor.world.pos.z = temp_f0;
}
}
s32 func_80B278C4(GlobalContext* globalCtx, Vec3f arg1) {
Player* player = GET_PLAYER(globalCtx);
f32 temp_f0;
f32 sp28;
s16 sp22 = Math_Vec3f_Yaw(&player->actor.world.pos, &arg1);
temp_f0 = Math_Vec3f_DistXZ(&player->actor.world.pos, &arg1);
if (temp_f0 < 20.0f) {
sp28 = 10.0f;
} else if (temp_f0 < 40.0f) {
sp28 = 40.0f;
} else {
sp28 = 80.0f;
}
globalCtx->actorCtx.unk268 = 1;
func_800B6F20(globalCtx, &globalCtx->actorCtx.unk_26C, sp28, sp22);
if (temp_f0 < 20.0f) {
return true;
} else {
return false;
}
}
void func_80B279AC(EnKendoJs* this, GlobalContext* globalCtx) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
}
void func_80B279F0(EnKendoJs* this, GlobalContext* globalCtx, s32 arg2) {
f32 x = this->unk_274[arg2].x;
f32 y = this->unk_274[arg2].y;
f32 z = this->unk_274[arg2].z;
Actor_SpawnAsChild(&globalCtx->actorCtx, &this->actor, globalCtx, ACTOR_EN_MARUTA, x, y, z, 0, 0, 0, 0);
this->unk_28C++;
}
void func_80B27A90(EnKendoJs* this, GlobalContext* globalCtx) {
Actor* actor = globalCtx->actorCtx.actorLists[ACTORCAT_PROP].first;
while (actor != NULL) {
if (actor->id == ACTOR_EN_MARUTA) {
((EnMaruta*)actor)->unk_220 = 1;
}
actor = actor->next;
}
this->unk_28C = 0;
}
void EnKendoJs_Update(Actor* thisx, GlobalContext* globalCtx) {
EnKendoJs* this = THIS;
this->actionFunc(this, globalCtx);
SkelAnime_Update(&this->skelAnime);
func_800E9250(globalCtx, &this->actor, &this->unk_278, &this->unk_27E, this->actor.focus.pos);
func_80B279AC(this, globalCtx);
func_80B27880(this, globalCtx);
}
s32 EnKendoJs_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
Actor* thisx) {
EnKendoJs* this = THIS;
if (limbIndex == 12) {
rot->y -= this->unk_278.y;
}
return false;
}
void EnKendoJs_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
}
void EnKendoJs_Draw(Actor* thisx, GlobalContext* globalCtx) {
EnKendoJs* this = THIS;
func_8012C28C(globalCtx->state.gfxCtx);
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
EnKendoJs_OverrideLimbDraw, EnKendoJs_PostLimbDraw, &this->actor);
}

View File

@ -7,11 +7,29 @@ struct EnKendoJs;
typedef void (*EnKendoJsActionFunc)(struct EnKendoJs*, GlobalContext*);
#define ENKENDOJS_GET_FF(thisx) ((thisx)->params & 0xFF)
#define ENKENDOJS_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
#define ENKENDOJS_FF_1 1
typedef struct EnKendoJs {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x90];
/* 0x0144 */ ColliderCylinder collider;
/* 0x0190 */ SkelAnime skelAnime;
/* 0x01D4 */ EnKendoJsActionFunc actionFunc;
/* 0x01D8 */ char unk_1D8[0xBC];
/* 0x01D8 */ Vec3s jointTable[13];
/* 0x0226 */ Vec3s morphTable[13];
/* 0x0274 */ Vec3s* unk_274;
/* 0x0278 */ Vec3s unk_278;
/* 0x027E */ Vec3s unk_27E;
/* 0x0284 */ s16 unk_284;
/* 0x0286 */ s16 unk_286;
/* 0x0288 */ s16 unk_288;
/* 0x028A */ s16 unk_28A;
/* 0x028C */ s16 unk_28C;
/* 0x028E */ s16 unk_28E;
/* 0x0290 */ s16 unk_290;
/* 0x0292 */ u8 unk_292;
} EnKendoJs; // size = 0x294
extern const ActorInit En_Kendo_Js_InitVars;

View File

@ -10,7 +10,8 @@ typedef void (*EnMarutaActionFunc)(struct EnMaruta*, GlobalContext*);
typedef struct EnMaruta {
/* 0x0000 */ Actor actor;
/* 0x0144 */ EnMarutaActionFunc actionFunc;
/* 0x0148 */ char unk_148[0xDC];
/* 0x0148 */ char unk_148[0xD8];
/* 0x0220 */ s16 unk_220;
} EnMaruta; // size = 0x224
extern const ActorInit En_Maruta_InitVars;

View File

@ -882,7 +882,7 @@ void func_80B94E34(EnZog* this, GlobalContext* globalCtx) {
}
if (ABS_ALT(this->actor.yawTowardsPlayer - this->actor.world.rot.y) > 0x5000) {
Actor_PickUp(&this->actor, globalCtx, 0, 60.0f, 40.0f);
Actor_PickUp(&this->actor, globalCtx, GI_NONE, 60.0f, 40.0f);
}
if (this->unk_324 > 0) {

View File

@ -518,7 +518,7 @@ void func_80A1C838(ObjFlowerpot* this, GlobalContext* globalCtx) {
s16 temp_v0_3 = this->actor.yawTowardsPlayer - GET_PLAYER(globalCtx)->actor.world.rot.y;
if (ABS_ALT(temp_v0_3) >= 0x5556) {
Actor_PickUp(&this->actor, globalCtx, 0, 36.0f, 30.0f);
Actor_PickUp(&this->actor, globalCtx, GI_NONE, 36.0f, 30.0f);
}
}
}

View File

@ -13330,8 +13330,8 @@
0x80B279F0:("func_80B279F0",),
0x80B27A90:("func_80B27A90",),
0x80B27ACC:("EnKendoJs_Update",),
0x80B27B54:("func_80B27B54",),
0x80B27B8C:("func_80B27B8C",),
0x80B27B54:("EnKendoJs_OverrideLimbDraw",),
0x80B27B8C:("EnKendoJs_PostLimbDraw",),
0x80B27BA4:("EnKendoJs_Draw",),
0x80B28080:("BgBotihasira_Init",),
0x80B28124:("BgBotihasira_Destroy",),

View File

@ -1548,13 +1548,6 @@ D_06001630 = 0x06001630;
D_06004274 = 0x06004274;
D_0600DEE8 = 0x0600DEE8;
// ovl_En_Kendo_Js
D_0600016C = 0x0600016C;
D_060003DC = 0x060003DC;
D_06000F4C = 0x06000F4C;
D_06006990 = 0x06006990;
// ovl_En_Kitan
D_06000CE8 = 0x06000CE8;