mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-03 14:34:32 +00:00
EnJj and object_jj OK (#741)
* Shift to new branch * object_jj decomped * docs * Documented blinking, various other things * more naming * Most stuff in the object named * implement eye enums * delete asm * Changes from Fig's review * Apply suggestions from code review Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com> Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
This commit is contained in:
parent
1639417327
commit
ed4021a6fe
22 changed files with 532 additions and 761 deletions
|
@ -5,23 +5,31 @@
|
|||
*/
|
||||
|
||||
#include "z_en_jj.h"
|
||||
#include "objects/object_jj/object_jj.h"
|
||||
#include "overlays/actors/ovl_Eff_Dust/z_eff_dust.h"
|
||||
|
||||
#define FLAGS 0x00000030
|
||||
|
||||
#define THIS ((EnJj*)thisx)
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ JABUJABU_EYE_OPEN,
|
||||
/* 1 */ JABUJABU_EYE_HALF,
|
||||
/* 2 */ JABUJABU_EYE_CLOSED,
|
||||
/* 3 */ JABUJABU_EYE_MAX
|
||||
} EnJjEyeState;
|
||||
|
||||
void EnJj_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnJj_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnJj_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnJj_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
extern UNK_TYPE D_06000A1C;
|
||||
extern UNK_TYPE D_06001830;
|
||||
extern UNK_TYPE D_06001F4C;
|
||||
extern UNK_TYPE D_0600B9A8;
|
||||
extern UNK_TYPE D_0600BA8C;
|
||||
void EnJj_UpdateStaticCollision(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnJj_WaitToOpenMouth(EnJj* this, GlobalContext* globalCtx);
|
||||
void EnJj_WaitForFish(EnJj* this, GlobalContext* globalCtx);
|
||||
void EnJj_BeginCutscene(EnJj* this, GlobalContext* globalCtx);
|
||||
void EnJj_RemoveDust(EnJj* this, GlobalContext* globalCtx);
|
||||
|
||||
/*
|
||||
const ActorInit En_Jj_InitVars = {
|
||||
ACTOR_EN_JJ,
|
||||
ACTORCAT_ITEMACTION,
|
||||
|
@ -34,7 +42,13 @@ const ActorInit En_Jj_InitVars = {
|
|||
(ActorFunc)EnJj_Draw,
|
||||
};
|
||||
|
||||
static ColliderCylinderInit D_80A88CB4 = {
|
||||
static s32 sUnused = 0;
|
||||
|
||||
#include "z_en_jj_cutscene_data.c" EARLY
|
||||
|
||||
static s32 sUnused2[] = { 0, 0 };
|
||||
|
||||
static ColliderCylinderInit sCylinderInit = {
|
||||
{
|
||||
COLTYPE_NONE,
|
||||
AT_NONE,
|
||||
|
@ -53,29 +67,263 @@ static ColliderCylinderInit D_80A88CB4 = {
|
|||
},
|
||||
{ 170, 150, 0, { 0, 0, 0 } },
|
||||
};
|
||||
*/
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87800.s")
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/EnJj_Init.s")
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_VEC3F_DIV1000(scale, 87, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneScale, 3300, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(uncullZoneDownward, 1100, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/EnJj_Destroy.s")
|
||||
void EnJj_SetupAction(EnJj* this, EnJjActionFunc actionFunc) {
|
||||
this->actionFunc = actionFunc;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87B1C.s")
|
||||
void EnJj_Init(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
EnJj* this = THIS;
|
||||
CollisionHeader* colHeader = NULL;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87B9C.s")
|
||||
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||
ActorShape_Init(&this->dyna.actor.shape, 0.0f, NULL, 0.0f);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87BEC.s")
|
||||
switch (this->dyna.actor.params) {
|
||||
case JABUJABU_MAIN:
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gJabuJabuSkel, &gJabuJabuAnim, this->jointTable,
|
||||
this->morphTable, 22);
|
||||
Animation_PlayLoop(&this->skelAnime, &gJabuJabuAnim);
|
||||
this->unk_30A = 0;
|
||||
this->eyeIndex = 0;
|
||||
this->blinkTimer = 0;
|
||||
this->extraBlinkCounter = 0;
|
||||
this->extraBlinkTotal = 0;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87C30.s")
|
||||
if (gSaveContext.eventChkInf[3] & 0x400) { // Fish given
|
||||
EnJj_SetupAction(this, EnJj_WaitToOpenMouth);
|
||||
} else {
|
||||
EnJj_SetupAction(this, EnJj_WaitForFish);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87CEC.s")
|
||||
this->bodyCollisionActor = (DynaPolyActor*)Actor_SpawnAsChild(
|
||||
&globalCtx->actorCtx, &this->dyna.actor, globalCtx, ACTOR_EN_JJ, this->dyna.actor.world.pos.x - 10.0f,
|
||||
this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, this->dyna.actor.world.rot.y, 0,
|
||||
JABUJABU_COLLISION);
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
CollisionHeader_GetVirtual(&gJabuJabuHeadCol, &colHeader);
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->dyna.actor, &sCylinderInit);
|
||||
this->dyna.actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87D94.s")
|
||||
case JABUJABU_COLLISION:
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
CollisionHeader_GetVirtual(&gJabuJabuBodyCol, &colHeader);
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
func_8003ECA8(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
|
||||
this->dyna.actor.update = EnJj_UpdateStaticCollision;
|
||||
this->dyna.actor.draw = NULL;
|
||||
Actor_SetScale(&this->dyna.actor, 0.087f);
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87EF0.s")
|
||||
case JABUJABU_UNUSED_COLLISION:
|
||||
DynaPolyActor_Init(&this->dyna, 0);
|
||||
CollisionHeader_GetVirtual(&gJabuJabuUnusedCol, &colHeader);
|
||||
this->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, &this->dyna.actor, colHeader);
|
||||
this->dyna.actor.update = EnJj_UpdateStaticCollision;
|
||||
this->dyna.actor.draw = NULL;
|
||||
Actor_SetScale(&this->dyna.actor, 0.087f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/func_80A87F44.s")
|
||||
void EnJj_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnJj* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/EnJj_Update.s")
|
||||
switch (this->dyna.actor.params) {
|
||||
case JABUJABU_MAIN:
|
||||
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
|
||||
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Jj/EnJj_Draw.s")
|
||||
case JABUJABU_COLLISION:
|
||||
case JABUJABU_UNUSED_COLLISION:
|
||||
DynaPoly_DeleteBgActor(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Blink routine. Blinks at the end of each randomised blinkTimer cycle. If extraBlinkCounter is not zero, blink that
|
||||
* many more times before resuming random blinkTimer cycles. extraBlinkTotal can be set to a positive number to blink
|
||||
* that many extra times at the end of every blinkTimer cycle, but the actor always sets it to zero, so only one
|
||||
* multiblink happens when extraBlinkCounter is nonzero.
|
||||
*/
|
||||
void EnJj_Blink(EnJj* this) {
|
||||
if (this->blinkTimer > 0) {
|
||||
this->blinkTimer--;
|
||||
} else {
|
||||
this->eyeIndex++;
|
||||
if (this->eyeIndex >= JABUJABU_EYE_MAX) {
|
||||
this->eyeIndex = JABUJABU_EYE_OPEN;
|
||||
if (this->extraBlinkCounter > 0) {
|
||||
this->extraBlinkCounter--;
|
||||
} else {
|
||||
this->blinkTimer = Rand_S16Offset(20, 20);
|
||||
this->extraBlinkCounter = this->extraBlinkTotal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnJj_OpenMouth(EnJj* this, GlobalContext* globalCtx) {
|
||||
DynaPolyActor* bodyCollisionActor = this->bodyCollisionActor;
|
||||
|
||||
if (this->mouthOpenAngle >= -5200) {
|
||||
this->mouthOpenAngle -= 102;
|
||||
|
||||
if (this->mouthOpenAngle < -2600) {
|
||||
func_8003EBF8(globalCtx, &globalCtx->colCtx.dyna, bodyCollisionActor->bgId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnJj_WaitToOpenMouth(EnJj* this, GlobalContext* globalCtx) {
|
||||
if (this->dyna.actor.xzDistToPlayer < 300.0f) {
|
||||
EnJj_SetupAction(this, EnJj_OpenMouth);
|
||||
}
|
||||
}
|
||||
|
||||
void EnJj_WaitForFish(EnJj* this, GlobalContext* globalCtx) {
|
||||
static Vec3f feedingSpot = { -1589.0f, 53.0f, -43.0f };
|
||||
Player* player = PLAYER;
|
||||
|
||||
if ((Math_Vec3f_DistXZ(&feedingSpot, &player->actor.world.pos) < 300.0f) &&
|
||||
globalCtx->isPlayerDroppingFish(globalCtx)) {
|
||||
this->cutsceneCountdownTimer = 100;
|
||||
EnJj_SetupAction(this, EnJj_BeginCutscene);
|
||||
}
|
||||
|
||||
this->collider.dim.pos.x = -1245;
|
||||
this->collider.dim.pos.y = 20;
|
||||
this->collider.dim.pos.z = -48;
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
void EnJj_BeginCutscene(EnJj* this, GlobalContext* globalCtx) {
|
||||
DynaPolyActor* bodyCollisionActor = this->bodyCollisionActor;
|
||||
|
||||
if (this->cutsceneCountdownTimer > 0) {
|
||||
this->cutsceneCountdownTimer--;
|
||||
} else {
|
||||
EnJj_SetupAction(this, EnJj_RemoveDust);
|
||||
globalCtx->csCtx.segment = &D_80A88164;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
func_8003EBF8(globalCtx, &globalCtx->colCtx.dyna, bodyCollisionActor->bgId);
|
||||
func_8005B1A4(ACTIVE_CAM);
|
||||
gSaveContext.eventChkInf[3] |= 0x400;
|
||||
func_80078884(NA_SE_SY_CORRECT_CHIME);
|
||||
}
|
||||
}
|
||||
|
||||
void EnJj_CutsceneUpdate(EnJj* this, GlobalContext* globalCtx) {
|
||||
switch (globalCtx->csCtx.npcActions[2]->action) {
|
||||
case 1:
|
||||
if (this->unk_30A & 2) {
|
||||
this->eyeIndex = 0;
|
||||
this->blinkTimer = Rand_S16Offset(20, 20);
|
||||
this->extraBlinkCounter = 0;
|
||||
this->extraBlinkTotal = 0;
|
||||
this->unk_30A ^= 2;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_30A |= 1;
|
||||
|
||||
if (!(this->unk_30A & 8)) {
|
||||
this->dust = Actor_SpawnAsChild(&globalCtx->actorCtx, &this->dyna.actor, globalCtx, ACTOR_EFF_DUST,
|
||||
-1100.0f, 105.0f, -27.0f, 0, 0, 0, EFF_DUST_TYPE_0);
|
||||
this->unk_30A |= 8;
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (!(this->unk_30A & 2)) {
|
||||
this->eyeIndex = 0;
|
||||
this->blinkTimer = 0;
|
||||
this->extraBlinkCounter = 1;
|
||||
this->extraBlinkTotal = 0;
|
||||
this->unk_30A |= 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (this->unk_30A & 1) {
|
||||
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_JABJAB_BREATHE - SFX_FLAG);
|
||||
|
||||
if (this->mouthOpenAngle >= -5200) {
|
||||
this->mouthOpenAngle -= 102;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnJj_RemoveDust(EnJj* this, GlobalContext* globalCtx) {
|
||||
Actor* dust;
|
||||
|
||||
if (!(this->unk_30A & 4)) {
|
||||
this->unk_30A |= 4;
|
||||
dust = this->dust;
|
||||
|
||||
if (dust != NULL) {
|
||||
Actor_Kill(dust);
|
||||
this->dyna.actor.child = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnJj_UpdateStaticCollision(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void EnJj_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnJj* this = THIS;
|
||||
|
||||
if ((globalCtx->csCtx.state != 0) && (globalCtx->csCtx.npcActions[2] != NULL)) {
|
||||
EnJj_CutsceneUpdate(this, globalCtx);
|
||||
} else {
|
||||
this->actionFunc(this, globalCtx);
|
||||
|
||||
if (this->skelAnime.curFrame == 41.0f) {
|
||||
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_JABJAB_GROAN);
|
||||
}
|
||||
}
|
||||
|
||||
EnJj_Blink(this);
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
Actor_SetScale(&this->dyna.actor, 0.087f);
|
||||
|
||||
// Head
|
||||
this->skelAnime.jointTable[10].z = this->mouthOpenAngle;
|
||||
}
|
||||
|
||||
static u64* sEyeTextures[] = {
|
||||
gJabuJabuEyeOpenTex,
|
||||
gJabuJabuEyeHalfTex,
|
||||
gJabuJabuEyeClosedTex,
|
||||
};
|
||||
|
||||
void EnJj_Draw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
EnJj* this = THIS;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_jj.c", 879);
|
||||
|
||||
func_800943C8(globalCtx->state.gfxCtx);
|
||||
Matrix_Translate(0.0f, (cosf(this->skelAnime.curFrame * (M_PI / 41.0f)) * 10.0f) - 10.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(10.0f, 10.0f, 10.0f, MTXMODE_APPLY);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex]));
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
0, 0, this);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_jj.c", 898);
|
||||
}
|
||||
|
|
|
@ -6,11 +6,33 @@
|
|||
|
||||
struct EnJj;
|
||||
|
||||
typedef void (*EnJjActionFunc)(struct EnJj*, GlobalContext*);
|
||||
|
||||
typedef struct EnJj {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x014C */ char unk_14C[0x1C8];
|
||||
/* 0x0000 */ DynaPolyActor dyna;
|
||||
/* 0x0164 */ SkelAnime skelAnime;
|
||||
/* 0x01A8 */ Vec3s jointTable[22];
|
||||
/* 0x022C */ Vec3s morphTable[22];
|
||||
/* 0x02B0 */ ColliderCylinder collider;
|
||||
/* 0x02FC */ EnJjActionFunc actionFunc;
|
||||
/* 0x0300 */ DynaPolyActor* bodyCollisionActor;
|
||||
/* 0x0304 */ Actor* dust;
|
||||
/* 0x0308 */ s16 mouthOpenAngle;
|
||||
/* 0x030A */ u16 unk_30A;
|
||||
/* 0x030C */ s16 cutsceneCountdownTimer;
|
||||
/* 0x030E */ u8 eyeIndex;
|
||||
/* 0x030F */ u8 blinkTimer;
|
||||
/* 0x0310 */ u8 extraBlinkCounter;
|
||||
/* 0x0311 */ u8 extraBlinkTotal;
|
||||
} EnJj; // size = 0x0314
|
||||
|
||||
typedef enum {
|
||||
/* -1 */ JABUJABU_MAIN = -1, // Head, drawn body, handles updating
|
||||
/* 0 */ JABUJABU_COLLISION, // Static collision for body
|
||||
/* 1 */ JABUJABU_UNUSED_COLLISION // Shaped like a screen
|
||||
} EnJjType;
|
||||
|
||||
|
||||
extern const ActorInit En_Jj_InitVars;
|
||||
|
||||
#endif
|
||||
|
|
158
src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.c
Normal file
158
src/overlays/actors/ovl_En_Jj/z_en_jj_cutscene_data.c
Normal file
|
@ -0,0 +1,158 @@
|
|||
#include "z_en_jj.h"
|
||||
#include "z64cutscene_commands.h"
|
||||
|
||||
// clang-format off
|
||||
static CutsceneData D_80A88164[] = {
|
||||
CS_BEGIN_CUTSCENE(26, 1629),
|
||||
CS_PLAYER_ACTION_LIST(4),
|
||||
CS_PLAYER_ACTION(0x0005, 0, 240, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, 1.1393037e-29f, 0.0f, 1.4e-45f),
|
||||
CS_PLAYER_ACTION(0x0003, 240, 255, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, 1.1393037e-29f, 0.0f, 1.4e-45f),
|
||||
CS_PLAYER_ACTION(0x0006, 255, 285, 0x0000, 0x4000, 0x0000, -1732, 52, -44, -1732, 52, -44, 1.1393037e-29f, 0.0f, 1.4e-45f),
|
||||
CS_PLAYER_ACTION(0x0020, 285, 300, 0x0000, 0xC000, 0x0000, -1732, 52, -44, -1537, 109, -44, 1.1393037e-29f, 0.0f, 1.4e-45f),
|
||||
CS_NPC_ACTION_LIST(68, 4),
|
||||
CS_NPC_ACTION(0x0001, 0, 234, 0x0000, 0x4000, 0x0000, -1665, 52, -44, -1665, 52, -44, 1.1393037e-29f, 0.0f, 1.4e-45f),
|
||||
CS_NPC_ACTION(0x0002, 234, 241, 0x41F8, 0x0000, 0x0000, -1665, 52, -44, -1603, 130, -47, 8.857142448425293f, 11.142857551574707f, -8.857142448425293f),
|
||||
CS_NPC_ACTION(0x0002, 241, 280, 0x4031, 0x0000, 0x0000, -1603, 130, -47, -549, 130, -52, 27.0256404876709f, 0.0f, -27.0256404876709f),
|
||||
CS_NPC_ACTION(0x0003, 280, 300, 0x0000, 0x0000, 0x0000, -549, 130, -52, -549, 130, -52, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION_LIST(67, 5),
|
||||
CS_NPC_ACTION(0x0001, 0, 93, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION(0x0003, 93, 121, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION(0x0001, 121, 146, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION(0x0002, 146, 241, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION(0x0001, 241, 441, 0x0000, 0x0000, 0x0000, 0, 51, 124, 0, 51, 124, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION_LIST(69, 3),
|
||||
CS_NPC_ACTION(0x0001, 0, 90, 0x0000, 0x0000, 0x0000, 0, -33, 9, 0, -33, 9, 0.0f, 0.0f, 0.0f),
|
||||
CS_NPC_ACTION(0x0002, 90, 330, 0x0000, 0x0000, 0x0000, 0, -33, 9, 0, -62, 22, 0.0f, -0.12083332985639572f, 0.0f),
|
||||
CS_NPC_ACTION(0x0003, 330, 380, 0x0000, 0x0000, 0x0000, 0, -62, 22, 0, -62, 22, 0.0f, 0.0f, 0.0f),
|
||||
CS_MISC_LIST(1),
|
||||
CS_MISC(0x000C, 1095, 1161, 0x0000, 0x00000000, 0xFFFFFFD2, 0x00000000, 0xFFFFFFD0, 0xFFFFFFD2, 0x00000000, 0xFFFFFFD0, 0x00000000, 0x00000000, 0x00000000),
|
||||
CS_SCENE_TRANS_FX(0x0009, 0, 10),
|
||||
CS_PLAYER_ACTION_LIST(1),
|
||||
CS_PLAYER_ACTION(0x0035, 300, 1629, 0x0000, 0x0000, 0x0000, -1630, 52, -52, -1630, 52, -52, 0.0f, 0.0f, 0.0f),
|
||||
CS_CAM_POS_LIST(0, 1091),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x015C),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x016D),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x017E),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x0223),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 45.399944f, -1641, 95, -41, 0x7065),
|
||||
CS_CAM_POS_LIST(60, 1151),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1532, 251, 222, 0x015C),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1532, 251, 222, 0x016D),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1532, 251, 222, 0x017E),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1532, 251, 222, 0x0223),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 45.399944f, -1532, 251, 222, 0x7065),
|
||||
CS_CAM_POS_LIST(90, 351),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1698, 382, 455, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1698, 382, 455, 0xAC34),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1698, 382, 455, 0x4428),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1694, 380, 451, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0xAC10),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0x0164),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 32.99989700317383f, -1694, 380, 451, 0xAD78),
|
||||
CS_CAM_POS_LIST(220, 392),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0xAC34),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x4428),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0xAC10),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1641, 95, -41, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 45.399944f, -1641, 95, -41, 0x0000),
|
||||
CS_CAM_POS_LIST(240, 1331),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0xAC34),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0x4428),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 45.599945068359375f, -1810, 65, -15, 0xAC10),
|
||||
CS_CAM_POS_LIST(280, 1371),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0xAC34),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0x4428),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 45.599945068359375f, -1531, 95, -7, 0xAC10),
|
||||
CS_CAM_POS_LIST(310, 1421),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1717, 83, -59, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1717, 83, -59, 0xAC34),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1649, 177, -59, 0x4428),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1533, 224, -59, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -1243, 180, -59, 0xAC10),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -953, 71, -55, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -953, 71, -55, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 45.399944f, -953, 71, -55, 0x0164),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 45.399944f, -953, 71, -55, 0xAD78),
|
||||
CS_CAM_POS_LIST(355, 1466),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0xAC34),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x4428),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0xAC10),
|
||||
CS_CAM_POS(CS_CMD_CONTINUE, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000),
|
||||
CS_CAM_POS(CS_CMD_STOP, 0x00, 0, 60.60000228881836f, -1830, 103, 18, 0x0000),
|
||||
CS_CAM_FOCUS_POINT_LIST(0, 1120),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1724, -5, -45, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1724, -5, -45, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 45.399944f, -1724, -5, -45, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1724, -5, -45, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 45.399944f, -1724, -5, -45, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT_LIST(60, 1180),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1440, 241, 134, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1440, 241, 134, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 45.399944f, -1440, 241, 134, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1440, 241, 134, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 45.399944f, -1440, 241, 134, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT_LIST(90, 380),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1610, 348, 373, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1610, 348, 373, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 50, 45.399944f, -1610, 348, 373, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 35.399906158447266f, -1614, 338, 367, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0x0164),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 32.99989700317383f, -1614, 338, 367, 0xAD78),
|
||||
CS_CAM_FOCUS_POINT_LIST(220, 421),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1724, -5, -45, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 70, 45.399944f, -1724, -5, -45, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 5, 45.399944f, -1724, -5, -45, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 6, 45.79994583129883f, -1593, 150, -146, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1531, 152, -75, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -1531, 152, -75, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 45.399944f, -1531, 152, -75, 0x0000),
|
||||
CS_CAM_FOCUS_POINT_LIST(240, 1360),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 45.599945068359375f, -1712, 74, -37, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 45.599945068359375f, -1712, 74, -37, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT_LIST(280, 1400),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 45.599945068359375f, -1619, 99, -50, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 45.599945068359375f, -1619, 99, -50, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT_LIST(310, 1450),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x0B, 30, 90.99960327148438f, -1610, 141, -59, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x09, 10, 90.79960632324219f, -1599, 114, -57, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0xFC, 10, 90.39961242675781f, -1528, 192, -54, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 10, 90.599609375f, -1427, 164, -54, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0xCB, 10, 90.39961242675781f, -1138, 119, -37, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x20, 10, 90.39961242675781f, -832, 50, -51, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 45.399944f, -836, 35, -51, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 45.399944f, -836, 35, -51, 0x0164),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 45.399944f, -836, 35, -51, 0xAD78),
|
||||
CS_CAM_FOCUS_POINT_LIST(355, 1495),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.60000228881836f, -1706, 111, -6, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.60000228881836f, -1706, 111, -6, 0xAC34),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 10, 60.60000228881836f, -1706, 111, -6, 0x4428),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 10, 60.60000228881836f, -1721, 82, -42, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 1000, 60.60000228881836f, -1721, 82, -42, 0xAC10),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_CONTINUE, 0x00, 30, 60.60000228881836f, -1721, 82, -42, 0x0000),
|
||||
CS_CAM_FOCUS_POINT(CS_CMD_STOP, 0x00, 30, 60.60000228881836f, -1721, 82, -42, 0x0000),
|
||||
CS_SCENE_TRANS_FX(0x000B, 335, 342),
|
||||
CS_TERMINATOR(JABU_JABU_INTRO, 345, 395),
|
||||
CS_NPC_ACTION_LIST(62, 1),
|
||||
CS_NPC_ACTION(0x0001, 305, 494, 0x0000, 0x0000, 0x0000, -1399, 452, -53, -1399, 452, -53, 0.0f, 0.0f, 0.0f),
|
||||
CS_END(),
|
||||
};
|
||||
// clang-format on
|
|
@ -350,7 +350,7 @@ void MagicFire_UpdateBeforeCast(Actor* thisx, GlobalContext* globalCtx) {
|
|||
if (this->actionTimer > 0) {
|
||||
this->actionTimer--;
|
||||
} else {
|
||||
this->actor.update = &MagicFire_Update;
|
||||
this->actor.update = MagicFire_Update;
|
||||
func_8002F7DC(&player->actor, NA_SE_PL_MAGIC_FIRE);
|
||||
}
|
||||
this->actor.world.pos = player->actor.world.pos;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue