mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-06 06:10:21 +00:00
Gerudo objects (#757)
* object_ge1 * more stuff named * object_gla OK, symbols added to C * eff fire fix in gameplay_keep * object_nb OK, fixed gameplay_keep * replaced symbols in EnNb, limb enums * Change EnGeldB limb enums to hex * Use enum in header too * Add descriptions to EnGe2 and EnNb, rearrange xml * Reorder xml * review changes
This commit is contained in:
parent
c04806fc66
commit
8d2a2a8e46
10 changed files with 466 additions and 160 deletions
|
@ -1,5 +1,12 @@
|
|||
/*
|
||||
* File: z_en_ge1.c
|
||||
* Overlay: ovl_En_Ge1
|
||||
* Description: White-clothed Gerudo
|
||||
*/
|
||||
|
||||
#include "z_en_ge1.h"
|
||||
#include "vt.h"
|
||||
#include "objects/object_ge1/object_ge1.h"
|
||||
|
||||
#define FLAGS 0x00000009
|
||||
|
||||
|
@ -13,7 +20,7 @@
|
|||
typedef enum {
|
||||
/* 00 */ GE1_HAIR_BOB,
|
||||
/* 01 */ GE1_HAIR_STRAIGHT,
|
||||
/* 02 */ GE1_HAIR_SPIKEY
|
||||
/* 02 */ GE1_HAIR_SPIKY
|
||||
} EnGe1Hairstyle;
|
||||
|
||||
void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
@ -67,36 +74,31 @@ static ColliderCylinderInit sCylinderInit = {
|
|||
};
|
||||
|
||||
static Gfx* sHairstyleDLists[] = {
|
||||
0x06009198, // Bob
|
||||
0x06009430, // Straight with fringe
|
||||
0x06009690, // Spikey
|
||||
gGerudoWhiteHairstyleBobDL,
|
||||
gGerudoWhiteHairstyleStraightFringeDL,
|
||||
gGerudoWhiteHairstyleSpikyDL,
|
||||
};
|
||||
|
||||
static Vec3f D_80A327A8 = { 600.0f, 700.0f, 0.0f };
|
||||
|
||||
static u64* sEyeTextures[] = {
|
||||
0x06000708, // Mostly Open
|
||||
0x06000F08, // Half
|
||||
0x06001708, // Closed
|
||||
gGerudoWhiteEyeOpenTex,
|
||||
gGerudoWhiteEyeHalfTex,
|
||||
gGerudoWhiteEyeClosedTex,
|
||||
};
|
||||
|
||||
extern AnimationHeader D_06000228; // Idle, arms crossed
|
||||
extern FlexSkeletonHeader D_06000330;
|
||||
extern AnimationHeader D_0600A048; // Clap
|
||||
extern AnimationHeader D_0600A498; // Dismissive gesture
|
||||
|
||||
void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
EnGe1* this = THIS;
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06000330, &D_06000228, this->jointTable, this->morphTable,
|
||||
GE1_LIMB_MAX);
|
||||
Animation_PlayOnce(&this->skelAnime, &D_06000228);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gGerudoWhiteSkel, &gGerudoWhiteIdleAnim, this->jointTable,
|
||||
this->morphTable, GE1_LIMB_MAX);
|
||||
Animation_PlayOnce(&this->skelAnime, &gGerudoWhiteIdleAnim);
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
this->animation = &D_06000228;
|
||||
this->animation = &gGerudoWhiteIdleAnim;
|
||||
this->animFunc = EnGe1_CueUpAnimation;
|
||||
this->actor.targetMode = 6;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
|
@ -107,12 +109,13 @@ void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
switch (this->actor.params & 0xFF) {
|
||||
|
||||
case GE1_TYPE_GATE_GUARD:
|
||||
this->hairstyle = GE1_HAIR_SPIKEY;
|
||||
this->hairstyle = GE1_HAIR_SPIKY;
|
||||
this->actionFunc = EnGe1_GetReaction_GateGuard;
|
||||
break;
|
||||
|
||||
case GE1_TYPE_GATE_OPERATOR:
|
||||
this->hairstyle = GE1_HAIR_STRAIGHT;
|
||||
|
||||
if (EnGe1_CheckCarpentersFreed()) {
|
||||
this->actionFunc = EnGe1_CheckGate_GateOp;
|
||||
} else {
|
||||
|
@ -122,6 +125,7 @@ void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
case GE1_TYPE_NORMAL:
|
||||
this->hairstyle = GE1_HAIR_STRAIGHT;
|
||||
|
||||
if (EnGe1_CheckCarpentersFreed()) {
|
||||
this->actionFunc = EnGe1_SetNormalText;
|
||||
} else {
|
||||
|
@ -169,6 +173,7 @@ void EnGe1_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
this->stateFlags = 0;
|
||||
}
|
||||
|
||||
|
@ -183,23 +188,25 @@ s32 EnGe1_SetTalkAction(EnGe1* this, GlobalContext* globalCtx, u16 textId, f32 a
|
|||
this->actionFunc = actionFunc;
|
||||
this->animFunc = EnGe1_StopFidget;
|
||||
this->stateFlags &= ~GE1_STATE_IDLE_ANIM;
|
||||
this->animation = &D_06000228;
|
||||
Animation_Change(&this->skelAnime, &D_06000228, 1.0f, 0.0f, Animation_GetLastFrame(&D_06000228), ANIMMODE_ONCE,
|
||||
-8.0f);
|
||||
this->animation = &gGerudoWhiteIdleAnim;
|
||||
Animation_Change(&this->skelAnime, &gGerudoWhiteIdleAnim, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&gGerudoWhiteIdleAnim), ANIMMODE_ONCE, -8.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
this->actor.textId = textId;
|
||||
|
||||
if (this->actor.xzDistToPlayer < arg3) {
|
||||
func_8002F2CC(&this->actor, globalCtx, arg3);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void EnGe1_SetAnimationIdle(EnGe1* this) {
|
||||
Animation_Change(&this->skelAnime, &D_06000228, -1.0f, Animation_GetLastFrame(&D_06000228), 0.0f, ANIMMODE_ONCE,
|
||||
8.0f);
|
||||
this->animation = &D_06000228;
|
||||
Animation_Change(&this->skelAnime, &gGerudoWhiteIdleAnim, -1.0f, Animation_GetLastFrame(&gGerudoWhiteIdleAnim),
|
||||
0.0f, ANIMMODE_ONCE, 8.0f);
|
||||
this->animation = &gGerudoWhiteIdleAnim;
|
||||
this->animFunc = EnGe1_CueUpAnimation;
|
||||
}
|
||||
|
||||
|
@ -225,7 +232,7 @@ void EnGe1_KickPlayer(EnGe1* this, GlobalContext* globalCtx) {
|
|||
|
||||
if ((INV_CONTENT(ITEM_HOOKSHOT) == ITEM_NONE) || (INV_CONTENT(ITEM_LONGSHOT) == ITEM_NONE)) {
|
||||
globalCtx->nextEntranceIndex = 0x1A5;
|
||||
} else if (gSaveContext.eventChkInf[12] & 0x80) {
|
||||
} else if (gSaveContext.eventChkInf[12] & 0x80) { // Caught previously
|
||||
globalCtx->nextEntranceIndex = 0x5F8;
|
||||
} else {
|
||||
globalCtx->nextEntranceIndex = 0x3B4;
|
||||
|
@ -254,6 +261,7 @@ void EnGe1_WatchForPlayerFrontOnly(EnGe1* this, GlobalContext* globalCtx) {
|
|||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
EnGe1_SpotPlayer(this, globalCtx);
|
||||
}
|
||||
|
||||
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
|
@ -265,13 +273,16 @@ void EnGe1_ChooseActionFromTextId(EnGe1* this, GlobalContext* globalCtx) {
|
|||
case 0x6001:
|
||||
this->actionFunc = EnGe1_SetNormalText;
|
||||
break;
|
||||
|
||||
case 0x601A:
|
||||
case 0x6019:
|
||||
this->actionFunc = EnGe1_GetReaction_ValleyFloor;
|
||||
break;
|
||||
|
||||
case 0x6018:
|
||||
this->actionFunc = EnGe1_CheckGate_GateOp;
|
||||
break;
|
||||
|
||||
default:
|
||||
this->actionFunc = EnGe1_GetReaction_ValleyFloor;
|
||||
break;
|
||||
|
@ -333,9 +344,9 @@ void EnGe1_Open_GTGGuard(EnGe1* this, GlobalContext* globalCtx) {
|
|||
void EnGe1_SetupOpen_GTGGuard(EnGe1* this, GlobalContext* globalCtx) {
|
||||
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
|
||||
this->actionFunc = EnGe1_Open_GTGGuard;
|
||||
Animation_Change(&this->skelAnime, &D_0600A048, 1.0f, 0.0f, Animation_GetLastFrame(&D_0600A048), ANIMMODE_ONCE,
|
||||
-3.0f);
|
||||
this->animation = &D_0600A048;
|
||||
Animation_Change(&this->skelAnime, &gGerudoWhiteClapAnim, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&gGerudoWhiteClapAnim), ANIMMODE_ONCE, -3.0f);
|
||||
this->animation = &gGerudoWhiteClapAnim;
|
||||
this->animFunc = EnGe1_StopFidget;
|
||||
this->stateFlags &= ~GE1_STATE_IDLE_ANIM;
|
||||
}
|
||||
|
@ -428,9 +439,9 @@ void EnGe1_SetupOpenGate_GateOp(EnGe1* this, GlobalContext* globalCtx) {
|
|||
|
||||
if ((func_8010BDBC(&globalCtx->msgCtx) == 5) && func_80106BC8(globalCtx)) {
|
||||
this->actionFunc = EnGe1_OpenGate_GateOp;
|
||||
Animation_Change(&this->skelAnime, &D_0600A048, 1.0f, 0.0f, Animation_GetLastFrame(&D_0600A048), ANIMMODE_ONCE,
|
||||
-3.0f);
|
||||
this->animation = &D_0600A048;
|
||||
Animation_Change(&this->skelAnime, &gGerudoWhiteClapAnim, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&gGerudoWhiteClapAnim), ANIMMODE_ONCE, -3.0f);
|
||||
this->animation = &gGerudoWhiteClapAnim;
|
||||
this->animFunc = EnGe1_StopFidget;
|
||||
this->stateFlags &= ~GE1_STATE_IDLE_ANIM;
|
||||
}
|
||||
|
@ -466,9 +477,9 @@ void EnGe1_GetReaction_GateGuard(EnGe1* this, GlobalContext* globalCtx) {
|
|||
|
||||
if (EnGe1_SetTalkAction(this, globalCtx, reactionText, 100.0f, EnGe1_Talk_GateGuard)) {
|
||||
this->animFunc = EnGe1_CueUpAnimation;
|
||||
this->animation = &D_0600A498;
|
||||
Animation_Change(&this->skelAnime, &D_0600A498, 1.0f, 0.0f, Animation_GetLastFrame(&D_0600A498), ANIMMODE_ONCE,
|
||||
-8.0f);
|
||||
this->animation = &gGerudoWhiteDismissiveAnim;
|
||||
Animation_Change(&this->skelAnime, &gGerudoWhiteDismissiveAnim, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&gGerudoWhiteDismissiveAnim), ANIMMODE_ONCE, -8.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -516,6 +527,7 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, GlobalContext* globalCtx) {
|
|||
this->actor.flags &= ~0x10000;
|
||||
this->actionFunc = EnGe1_WaitTillItemGiven_Archery;
|
||||
}
|
||||
|
||||
if (this->stateFlags & GE1_STATE_GIVE_QUIVER) {
|
||||
switch (CUR_UPG_VALUE(UPG_QUIVER)) {
|
||||
//! @bug Asschest: the compiler inserts a default assigning *(sp+0x24) to getItemId, which is junk data left
|
||||
|
@ -532,6 +544,7 @@ void EnGe1_BeginGiveItem_Archery(EnGe1* this, GlobalContext* globalCtx) {
|
|||
} else {
|
||||
getItemId = GI_HEART_PIECE;
|
||||
}
|
||||
|
||||
func_8002F434(&this->actor, globalCtx, getItemId, 10000.0f, 50.0f);
|
||||
}
|
||||
|
||||
|
@ -586,9 +599,11 @@ void EnGe1_BeginGame_Archery(EnGe1* this, GlobalContext* globalCtx) {
|
|||
horse->freezeTimer = 1200;
|
||||
}
|
||||
}
|
||||
|
||||
this->actionFunc = EnGe1_WaitDoNothing;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
this->actionFunc = EnGe1_Wait_Archery;
|
||||
func_80106CCC(globalCtx);
|
||||
|
@ -615,11 +630,11 @@ void EnGe1_TalkNoPrize_Archery(EnGe1* this, GlobalContext* globalCtx) {
|
|||
void EnGe1_TalkAfterGame_Archery(EnGe1* this, GlobalContext* globalCtx) {
|
||||
gSaveContext.eventInf[0] &= ~0x100;
|
||||
LOG_NUM("z_common_data.yabusame_total", gSaveContext.minigameScore, "../z_en_ge1.c", 1110);
|
||||
LOG_NUM("z_common_data.memory.information.room_inf[127][ 0 ]", gSaveContext.highScores[0], "../z_en_ge1.c", 1111);
|
||||
LOG_NUM("z_common_data.memory.information.room_inf[127][ 0 ]", gSaveContext.highScores[HS_HBA], "../z_en_ge1.c", 1111);
|
||||
this->actor.flags |= 0x10000;
|
||||
|
||||
if (gSaveContext.highScores[0] < gSaveContext.minigameScore) {
|
||||
gSaveContext.highScores[0] = gSaveContext.minigameScore;
|
||||
if (gSaveContext.highScores[HS_HBA] < gSaveContext.minigameScore) {
|
||||
gSaveContext.highScores[HS_HBA] = gSaveContext.minigameScore;
|
||||
}
|
||||
|
||||
if (gSaveContext.minigameScore < 1000) {
|
||||
|
@ -776,10 +791,12 @@ void EnGe1_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
|
|||
EnGe1* this = THIS;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1419);
|
||||
|
||||
if (limbIndex == GE1_LIMB_HEAD) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, sHairstyleDLists[this->hairstyle]);
|
||||
Matrix_MultVec3f(&D_80A327A8, &this->actor.focus.pos);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1427);
|
||||
}
|
||||
|
||||
|
@ -788,9 +805,11 @@ void EnGe1_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
EnGe1* this = THIS;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1442);
|
||||
|
||||
func_800943C8(globalCtx->state.gfxCtx);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[this->eyeIndex]));
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
EnGe1_OverrideLimbDraw, EnGe1_PostLimbDraw, this);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_ge1.c", 1459);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
/*
|
||||
* File: z_en_ge2.c
|
||||
* Overlay: ovl_En_Ge2
|
||||
* Description: Purple-clothed Gerudo
|
||||
*/
|
||||
|
||||
#include "z_en_ge2.h"
|
||||
#include "vt.h"
|
||||
#include "objects/object_gla/object_gla.h"
|
||||
|
||||
#define FLAGS 0x00000019
|
||||
|
||||
|
@ -90,13 +96,9 @@ static EnGe2ActionFunc sActionFuncs[] = {
|
|||
};
|
||||
|
||||
static AnimationHeader* sAnimations[] = {
|
||||
0x06009ED4, // Walking, spear on shoulder
|
||||
0x060098AC, // Standing, looking left and right
|
||||
0x060098AC,
|
||||
0x060011F4, // Falling to ground
|
||||
0x060098AC,
|
||||
0x06008D60, // Runnng, spear in attack position
|
||||
0x060098AC, 0x060098AC, 0x060098AC,
|
||||
&gGerudoPurpleWalkingAnim, &gGerudoPurpleLookingAboutAnim, &gGerudoPurpleLookingAboutAnim,
|
||||
&gGerudoPurpleFallingToGroundAnim, &gGerudoPurpleLookingAboutAnim, &gGerudoPurpleChargingAnim,
|
||||
&gGerudoPurpleLookingAboutAnim, &gGerudoPurpleLookingAboutAnim, &gGerudoPurpleLookingAboutAnim,
|
||||
};
|
||||
|
||||
static u8 sAnimModes[] = {
|
||||
|
@ -104,9 +106,6 @@ static u8 sAnimModes[] = {
|
|||
ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_LOOP, ANIMMODE_ONCE,
|
||||
};
|
||||
|
||||
extern FlexSkeletonHeader D_06008968;
|
||||
extern AnimationHeader D_06009ED4;
|
||||
|
||||
void EnGe2_ChangeAction(EnGe2* this, s32 i) {
|
||||
this->actionFunc = sActionFuncs[i];
|
||||
Animation_Change(&this->skelAnime, sAnimations[i], 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[i]),
|
||||
|
@ -119,8 +118,8 @@ void EnGe2_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
EnGe2* this = THIS;
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_06008968, NULL, this->jointTable, this->morphTable, 22);
|
||||
Animation_PlayLoop(&this->skelAnime, &D_06009ED4);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gGerudoPurpleSkel, NULL, this->jointTable, this->morphTable, 22);
|
||||
Animation_PlayLoop(&this->skelAnime, &gGerudoPurpleWalkingAnim);
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
|
@ -644,9 +643,9 @@ void EnGe2_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
|
|||
}
|
||||
|
||||
static u64* sEyeTextures[] = {
|
||||
0x06004F78, // Half-open
|
||||
0x06005578, // Quarter-open
|
||||
0x06005BF8, // Closed
|
||||
gGerudoPurpleEyeOpenTex,
|
||||
gGerudoPurpleEyeHalfTex,
|
||||
gGerudoPurpleEyeClosedTex,
|
||||
};
|
||||
|
||||
void EnGe2_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
|
|
@ -7,31 +7,31 @@
|
|||
struct EnGeldB;
|
||||
|
||||
typedef enum {
|
||||
/* 00 */ GELDB_LIMB_NONE,
|
||||
/* 01 */ GELDB_LIMB_ROOT,
|
||||
/* 02 */ GELDB_LIMB_TORSO,
|
||||
/* 03 */ GELDB_LIMB_NECK,
|
||||
/* 04 */ GELDB_LIMB_PONYTAIL,
|
||||
/* 05 */ GELDB_LIMB_VEIL,
|
||||
/* 06 */ GELDB_LIMB_HEAD,
|
||||
/* 07 */ GELDB_LIMB_R_UPPER_ARM,
|
||||
/* 08 */ GELDB_LIMB_R_FOREARM,
|
||||
/* 09 */ GELDB_LIMB_R_WRIST,
|
||||
/* 10 */ GELDB_LIMB_R_HAND,
|
||||
/* 11 */ GELDB_LIMB_R_SWORD,
|
||||
/* 12 */ GELDB_LIMB_L_UPPER_ARM,
|
||||
/* 13 */ GELDB_LIMB_L_FOREARM,
|
||||
/* 14 */ GELDB_LIMB_L_WRIST,
|
||||
/* 15 */ GELDB_LIMB_L_HAND,
|
||||
/* 16 */ GELDB_LIMB_L_SWORD,
|
||||
/* 17 */ GELDB_LIMB_L_THIGH,
|
||||
/* 18 */ GELDB_LIMB_L_SHIN,
|
||||
/* 19 */ GELDB_LIMB_L_FOOT,
|
||||
/* 20 */ GELDB_LIMB_R_THIGH,
|
||||
/* 21 */ GELDB_LIMB_R_SHIN,
|
||||
/* 22 */ GELDB_LIMB_R_FOOT,
|
||||
/* 23 */ GELDB_LIMB_WAIST,
|
||||
/* 24 */ GELDB_LIMB_MAX
|
||||
/* 0x00 */ GELDB_LIMB_NONE,
|
||||
/* 0x01 */ GELDB_LIMB_ROOT,
|
||||
/* 0x02 */ GELDB_LIMB_TORSO,
|
||||
/* 0x03 */ GELDB_LIMB_NECK,
|
||||
/* 0x04 */ GELDB_LIMB_PONYTAIL,
|
||||
/* 0x05 */ GELDB_LIMB_VEIL,
|
||||
/* 0x06 */ GELDB_LIMB_HEAD,
|
||||
/* 0x07 */ GELDB_LIMB_R_UPPER_ARM,
|
||||
/* 0x08 */ GELDB_LIMB_R_FOREARM,
|
||||
/* 0x09 */ GELDB_LIMB_R_WRIST,
|
||||
/* 0x0A */ GELDB_LIMB_R_HAND,
|
||||
/* 0x0B */ GELDB_LIMB_R_SWORD,
|
||||
/* 0x0C */ GELDB_LIMB_L_UPPER_ARM,
|
||||
/* 0x0D */ GELDB_LIMB_L_FOREARM,
|
||||
/* 0x0E */ GELDB_LIMB_L_WRIST,
|
||||
/* 0x0F */ GELDB_LIMB_L_HAND,
|
||||
/* 0x10 */ GELDB_LIMB_L_SWORD,
|
||||
/* 0x11 */ GELDB_LIMB_L_THIGH,
|
||||
/* 0x12 */ GELDB_LIMB_L_SHIN,
|
||||
/* 0x13 */ GELDB_LIMB_L_FOOT,
|
||||
/* 0x14 */ GELDB_LIMB_R_THIGH,
|
||||
/* 0x15 */ GELDB_LIMB_R_SHIN,
|
||||
/* 0x16 */ GELDB_LIMB_R_FOOT,
|
||||
/* 0x17 */ GELDB_LIMB_WAIST,
|
||||
/* 0x18 */ GELDB_LIMB_MAX
|
||||
} EnGeldBLimb;
|
||||
|
||||
typedef void (*EnGeldBActionFunc)(struct EnGeldB*, GlobalContext*);
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
/*
|
||||
* File: z_en_nb.c
|
||||
* Overlay: ovl_En_Nb
|
||||
* Description: Nabooru
|
||||
*/
|
||||
|
||||
#include "z_en_nb.h"
|
||||
#include "vt.h"
|
||||
#include "objects/object_nb/object_nb.h"
|
||||
|
||||
#define FLAGS 0x00000010
|
||||
|
||||
|
@ -52,32 +59,6 @@ void EnNb_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|||
void EnNb_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnNb_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
extern FlexSkeletonHeader D_060181C8;
|
||||
extern AnimationHeader D_06004BB4; // standing up hands on hips
|
||||
extern AnimationHeader D_06006E78;
|
||||
extern AnimationHeader D_06004E60; // getting up from crawlspace
|
||||
extern AnimationHeader D_06004BB4;
|
||||
extern AnimationHeader D_06009238;
|
||||
extern AnimationHeader D_06009694; // hands on hips standing
|
||||
extern AnimationHeader D_0600274C; // raising both arms up transition (giving medallion to link ?)
|
||||
extern AnimationHeader D_06002B4C; // raising both arms up stable (giving medallion to link ?)
|
||||
extern AnimationHeader D_06000410; // clasping hands together
|
||||
extern AnimationHeader D_06001E7C; // looking around ?
|
||||
extern AnimationHeader D_06001350; // i think this is the animation where she is in the purple thing
|
||||
extern AnimationHeader D_06001104; // transition to raising arm up in purple portal
|
||||
extern AnimationHeader D_06008BD0; // falls to the ground
|
||||
extern AnimationHeader D_060046A8; // looking in crawlspace ?
|
||||
extern AnimationHeader D_06003954; // on ground getting up ??
|
||||
extern AnimationHeader D_06004030; // looking behind her to the right
|
||||
extern AnimationHeader D_06002DBC; // freaking out
|
||||
extern AnimationHeader D_060035A8; // looking behind her
|
||||
extern AnimationHeader D_06006320; // sees unk from behind, turns and runs
|
||||
extern AnimationHeader D_06000BC0; // crossed legs
|
||||
extern AnimationHeader D_06005CA4; // crossed legs, turns head and looks behind to the right
|
||||
extern AnimationHeader D_06005614; // crossed legs, looking behind to the right
|
||||
extern Gfx D_06013158[];
|
||||
extern UNK_TYPE D_0600D8E8;
|
||||
|
||||
static ColliderCylinderInitType1 sCylinderInit = {
|
||||
{
|
||||
COLTYPE_HIT0,
|
||||
|
@ -97,10 +78,10 @@ static ColliderCylinderInitType1 sCylinderInit = {
|
|||
{ 25, 80, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
static UNK_PTR sEyeTextures[] = {
|
||||
0x0600B428,
|
||||
0x0600D0E8,
|
||||
0x0600D4E8,
|
||||
static u64* sEyeTextures[] = {
|
||||
gNabooruEyeOpenTex,
|
||||
gNabooruEyeHalfTex,
|
||||
gNabooruEyeClosedTex,
|
||||
};
|
||||
|
||||
static s32 D_80AB4318 = 0;
|
||||
|
@ -322,7 +303,7 @@ void EnNb_SetCurrentAnim(EnNb* this, AnimationHeader* animation, u8 mode, f32 tr
|
|||
}
|
||||
|
||||
void EnNb_SetChamberAnim(EnNb* this, GlobalContext* globalCtx) {
|
||||
EnNb_SetCurrentAnim(this, &D_06009694, 0, 0, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsChamberOfSagesAnim, 0, 0, 0);
|
||||
this->actor.shape.yOffset = -10000.0f;
|
||||
}
|
||||
|
||||
|
@ -385,7 +366,7 @@ void EnNb_SetupDefaultChamberIdle(EnNb* this) {
|
|||
}
|
||||
|
||||
void EnNb_SetupArmRaise(EnNb* this, GlobalContext* globalCtx) {
|
||||
AnimationHeader* animation = &D_0600274C;
|
||||
AnimationHeader* animation = &gNabooruRaisingArmsGivingMedallionAnim;
|
||||
CsCmdActorAction* csCmdNPCAction;
|
||||
|
||||
if (globalCtx->csCtx.state != CS_STATE_IDLE) {
|
||||
|
@ -399,7 +380,7 @@ void EnNb_SetupArmRaise(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_SetupRaisedArmTransition(EnNb* this, s32 animFinished) {
|
||||
AnimationHeader* animation = &D_06002B4C;
|
||||
AnimationHeader* animation = &gNabooruArmsRaisedGivingMedallionAnim;
|
||||
|
||||
if (animFinished) {
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
|
||||
|
@ -466,7 +447,7 @@ void func_80AB19FC(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_SetupLightArrowOrSealingCs(EnNb* this, GlobalContext* globalCtx) {
|
||||
EnNb_SetCurrentAnim(this, &D_06000410, 2, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruPuttingHandsTogetherCastingMagicAnim, 2, 0.0f, 0);
|
||||
this->action = NB_ACTION_7;
|
||||
this->actor.shape.shadowAlpha = 0;
|
||||
}
|
||||
|
@ -579,7 +560,7 @@ void EnNb_DrawTransparency(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_InitKidnap(EnNb* this, GlobalContext* globalCtx) {
|
||||
EnNb_SetCurrentAnim(this, &D_06001E7C, 0, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruTrappedInVortexPushingGroundAnim, 0, 0.0f, 0);
|
||||
this->action = NB_KIDNAPPED;
|
||||
this->actor.shape.shadowAlpha = 0;
|
||||
gSaveContext.eventChkInf[9] |= 0x20;
|
||||
|
@ -627,7 +608,7 @@ void EnNb_SetupCaptureCutsceneState(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_SetRaisedArmCaptureAnim(EnNb* this, s32 animFinished) {
|
||||
AnimationHeader* animation = &D_06001350;
|
||||
AnimationHeader* animation = &gNabooruSuckedByVortexAnim;
|
||||
|
||||
if (animFinished) {
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
|
||||
|
@ -636,7 +617,7 @@ void EnNb_SetRaisedArmCaptureAnim(EnNb* this, s32 animFinished) {
|
|||
}
|
||||
|
||||
void EnNb_SetupLookAroundInKidnap(EnNb* this) {
|
||||
AnimationHeader* animation = &D_06001E7C;
|
||||
AnimationHeader* animation = &gNabooruTrappedInVortexPushingGroundAnim;
|
||||
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP, -8.0f);
|
||||
this->action = NB_KIDNAPPED_LOOK_AROUND;
|
||||
|
@ -644,7 +625,7 @@ void EnNb_SetupLookAroundInKidnap(EnNb* this) {
|
|||
}
|
||||
|
||||
void EnNb_SetupKidnap(EnNb* this) {
|
||||
AnimationHeader* animation = &D_06001104;
|
||||
AnimationHeader* animation = &gNabooruTrappedInVortexRaisingArmAnim;
|
||||
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_ONCE, -8.0f);
|
||||
this->action = NB_PORTAL_FALLTHROUGH;
|
||||
|
@ -707,7 +688,7 @@ void EnNb_SuckedInByPortal(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_SetupConfrontation(EnNb* this, GlobalContext* globalCtx) {
|
||||
AnimationHeader* animation = &D_06008BD0;
|
||||
AnimationHeader* animation = &gNabooruCollapseFromStandingToKneelingTransitionAnim;
|
||||
|
||||
EnNb_SetCurrentAnim(this, animation, 0, 0.0f, 0);
|
||||
this->action = NB_IN_CONFRONTATION;
|
||||
|
@ -766,28 +747,28 @@ void func_80AB26C8(EnNb* this) {
|
|||
|
||||
void func_80AB26DC(EnNb* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
AnimationHeader* animation = &D_06008BD0;
|
||||
f32 frames = Animation_GetLastFrame(animation);
|
||||
AnimationHeader* animation = &gNabooruCollapseFromStandingToKneelingTransitionAnim;
|
||||
f32 lastFrame = Animation_GetLastFrame(animation);
|
||||
|
||||
EnNb_SetupCsPosRot(this, globalCtx, 1);
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, 0.0f);
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, 0.0f);
|
||||
this->action = NB_ACTION_14;
|
||||
this->drawMode = NB_DRAW_KNEEL;
|
||||
this->actor.shape.shadowAlpha = 0xFF;
|
||||
}
|
||||
|
||||
void EnNb_SetupKneel(EnNb* this) {
|
||||
AnimationHeader* animation = &D_06008BD0;
|
||||
f32 frames = Animation_GetLastFrame(animation);
|
||||
AnimationHeader* animation = &gNabooruCollapseFromStandingToKneelingTransitionAnim;
|
||||
f32 lastFrame = Animation_GetLastFrame(animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, 0.0f);
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, 0.0f);
|
||||
this->action = NB_KNEEL;
|
||||
this->drawMode = NB_DRAW_KNEEL;
|
||||
this->actor.shape.shadowAlpha = 0xFF;
|
||||
}
|
||||
|
||||
void EnNb_CheckIfKneeling(EnNb* this, s32 animFinished) {
|
||||
AnimationHeader* animation = &D_060046A8;
|
||||
AnimationHeader* animation = &gNabooruOnAllFoursAnim;
|
||||
|
||||
if (animFinished) {
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
|
||||
|
@ -797,17 +778,17 @@ void EnNb_CheckIfKneeling(EnNb* this, s32 animFinished) {
|
|||
}
|
||||
|
||||
void EnNb_SetupLookRight(EnNb* this) {
|
||||
AnimationHeader* animation = &D_06003954;
|
||||
f32 frames = Animation_GetLastFrame(animation);
|
||||
AnimationHeader* animation = &gNabooruOnAllFoursToOnOneKneeLookingRightTransitionAnim;
|
||||
f32 lastFrame = Animation_GetLastFrame(animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, -8.0f);
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -8.0f);
|
||||
this->action = NB_LOOK_RIGHT;
|
||||
this->drawMode = NB_DRAW_DEFAULT;
|
||||
this->actor.shape.shadowAlpha = 0xFF;
|
||||
}
|
||||
|
||||
void EnNb_CheckIfLookingRight(EnNb* this, s32 animFinished) {
|
||||
AnimationHeader* animation = &D_06004030;
|
||||
AnimationHeader* animation = &gNabooruOnOneKneeLookingRightAnim;
|
||||
|
||||
if (animFinished) {
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
|
||||
|
@ -817,17 +798,17 @@ void EnNb_CheckIfLookingRight(EnNb* this, s32 animFinished) {
|
|||
}
|
||||
|
||||
void EnNb_SetupLookLeft(EnNb* this) {
|
||||
AnimationHeader* animation = &D_06002DBC;
|
||||
f32 frames = Animation_GetLastFrame(animation);
|
||||
AnimationHeader* animation = &gNabooruOnOneKneeTurningHeadRightToLeftTransitionAnim;
|
||||
f32 lastFrame = Animation_GetLastFrame(animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, -8.0f);
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -8.0f);
|
||||
this->action = NB_LOOK_LEFT;
|
||||
this->drawMode = NB_DRAW_LOOK_DIRECTION;
|
||||
this->actor.shape.shadowAlpha = 0xFF;
|
||||
}
|
||||
|
||||
void EnNb_CheckIfLookLeft(EnNb* this, s32 animFinished) {
|
||||
AnimationHeader* animation = &D_060035A8;
|
||||
AnimationHeader* animation = &gNabooruOnOneKneeLookingLeftAnim;
|
||||
|
||||
if (animFinished) {
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(animation), ANIMMODE_LOOP,
|
||||
|
@ -843,10 +824,10 @@ void EnNb_SetupDemo6KInConfrontation(EnNb* this, GlobalContext* globalCtx, s32 a
|
|||
}
|
||||
|
||||
void EnNb_SetupRun(EnNb* this) {
|
||||
AnimationHeader* animation = &D_06006320;
|
||||
f32 frames = Animation_GetLastFrame(animation);
|
||||
AnimationHeader* animation = &gNabooruKneeingToRunningToHitAnim;
|
||||
f32 lastFrame = Animation_GetLastFrame(animation);
|
||||
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, frames, ANIMMODE_ONCE, -8.0f);
|
||||
Animation_Change(&this->skelAnime, animation, 1.0f, 0.0f, lastFrame, ANIMMODE_ONCE, -8.0f);
|
||||
this->action = NB_RUN;
|
||||
this->drawMode = NB_DRAW_LOOK_DIRECTION;
|
||||
this->actor.shape.shadowAlpha = 0xFF;
|
||||
|
@ -975,8 +956,8 @@ void func_80AB2E70(EnNb* this, GlobalContext* globalCtx) {
|
|||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_nb_inConfrontion.c", 572);
|
||||
|
||||
func_80093D18(globalCtx->state.gfxCtx);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&D_0600D8E8));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&D_0600D8E8));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(&gNabooruEyeWideTex));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(&gNabooruEyeWideTex));
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x0C, &D_80116280[2]);
|
||||
SkelAnime_DrawFlexOpa(globalCtx, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, NULL, NULL,
|
||||
|
@ -988,8 +969,8 @@ void func_80AB2E70(EnNb* this, GlobalContext* globalCtx) {
|
|||
s32 func_80AB2FC0(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) {
|
||||
EnNb* this = THIS;
|
||||
|
||||
if (limbIndex == 15) {
|
||||
*dList = D_06013158;
|
||||
if (limbIndex == NB_LIMB_HEAD) {
|
||||
*dList = gNabooruHeadMouthOpenDL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1016,7 +997,7 @@ void func_80AB2FE4(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_SetupCreditsSpawn(EnNb* this, GlobalContext* globalCtx) {
|
||||
EnNb_SetCurrentAnim(this, &D_06000BC0, 0, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruSittingCrossLeggedAnim, 0, 0.0f, 0);
|
||||
this->action = NB_CREDITS_INIT;
|
||||
this->drawMode = NB_DRAW_NOTHING;
|
||||
this->actor.shape.shadowAlpha = 0;
|
||||
|
@ -1030,7 +1011,7 @@ void EnNb_SetAlphaInCredits(EnNb* this) {
|
|||
|
||||
if ((kREG(17) + 10.0f) <= this->alphaTimer) {
|
||||
this->alpha = 255;
|
||||
this->actor.shape.shadowAlpha = 0xFF;
|
||||
this->actor.shape.shadowAlpha = 255;
|
||||
} else {
|
||||
alpha = (*alphaTimer / (kREG(17) + 10.0f)) * 255.0f;
|
||||
this->alpha = alpha;
|
||||
|
@ -1052,13 +1033,13 @@ void EnNb_SetupCreditsSit(EnNb* this) {
|
|||
}
|
||||
|
||||
void EnNb_SetupCreditsHeadTurn(EnNb* this) {
|
||||
EnNb_SetCurrentAnim(this, &D_06005CA4, 2, -8.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruSittingCrossLeggedTurningToLookUpRightTransitionAnim, 2, -8.0f, 0);
|
||||
this->action = NB_CREDITS_HEAD_TURN;
|
||||
}
|
||||
|
||||
void EnNb_CheckIfLookingUp(EnNb* this, s32 animFinished) {
|
||||
if (animFinished) {
|
||||
EnNb_SetCurrentAnim(this, &D_06005614, 0, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruSittingCrossLeggedLookingUpRightAnim, 0, 0.0f, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1122,11 +1103,11 @@ void EnNb_CrawlspaceSpawnCheck(EnNb* this, GlobalContext* globalCtx) {
|
|||
|
||||
// looking into crawlspace
|
||||
if (!(gSaveContext.eventChkInf[9] & 0x10)) {
|
||||
EnNb_SetCurrentAnim(this, &D_06006E78, 0, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruKneeingAtCrawlspaceAnim, 0, 0.0f, 0);
|
||||
this->action = NB_CROUCH_CRAWLSPACE;
|
||||
this->drawMode = NB_DRAW_DEFAULT;
|
||||
} else {
|
||||
EnNb_SetCurrentAnim(this, &D_06004BB4, 0, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsAnim, 0, 0.0f, 0);
|
||||
this->headTurnFlag = 1;
|
||||
this->actor.flags |= 9;
|
||||
this->actor.world.pos = this->finalPos;
|
||||
|
@ -1195,7 +1176,7 @@ void func_80AB36DC(EnNb* this, GlobalContext* globalCtx) {
|
|||
|
||||
void EnNb_CheckNoticed(EnNb* this, GlobalContext* globalCtx) {
|
||||
if (EnNb_GetNoticedStatus(this, globalCtx)) {
|
||||
EnNb_SetCurrentAnim(this, &D_06004E60, 2, -8.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruStandingToWalkingTransitionAnim, 2, -8.0f, 0);
|
||||
this->action = NB_NOTICE_PLAYER;
|
||||
EnNb_SetNoticeSFX(this);
|
||||
}
|
||||
|
@ -1203,7 +1184,7 @@ void EnNb_CheckNoticed(EnNb* this, GlobalContext* globalCtx) {
|
|||
|
||||
void EnNb_SetupIdleCrawlspace(EnNb* this, s32 animFinished) {
|
||||
if (animFinished) {
|
||||
EnNb_SetCurrentAnim(this, &D_06004BB4, 0, -8.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsAnim, 0, -8.0f, 0);
|
||||
this->headTurnFlag = 1;
|
||||
this->actor.flags |= 9;
|
||||
this->action = NB_IDLE_CRAWLSPACE;
|
||||
|
@ -1227,7 +1208,7 @@ void func_80AB3838(EnNb* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnNb_SetupPathMovement(EnNb* this, GlobalContext* globalCtx) {
|
||||
EnNb_SetCurrentAnim(this, &D_06004E60, 2, -8.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruStandingToWalkingTransitionAnim, 2, -8.0f, 0);
|
||||
gSaveContext.eventChkInf[9] |= 0x10;
|
||||
this->action = NB_IN_PATH;
|
||||
this->actor.flags &= ~9;
|
||||
|
@ -1292,12 +1273,12 @@ void EnNb_SetTextIdAsChild(EnNb* this, GlobalContext* globalCtx) {
|
|||
void func_80AB3A7C(EnNb* this, GlobalContext* globalCtx, s32 animFinished) {
|
||||
u16 movementTimer = this->movementTimer;
|
||||
|
||||
if ((u16)(kREG(17) + 0x19) > movementTimer) {
|
||||
if ((u16)(kREG(17) + 25) > movementTimer) {
|
||||
if (animFinished) {
|
||||
EnNb_SetCurrentAnim(this, &D_06009238, 0, 0.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruWalkingAnim, 0, 0.0f, 0);
|
||||
}
|
||||
} else {
|
||||
EnNb_SetCurrentAnim(this, &D_06004BB4, 0, -8.0f, 0);
|
||||
EnNb_SetCurrentAnim(this, &gNabooruStandingHandsOnHipsAnim, 0, -8.0f, 0);
|
||||
this->action = NB_IDLE_AFTER_TALK;
|
||||
}
|
||||
}
|
||||
|
@ -1443,7 +1424,7 @@ void EnNb_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
|
||||
EnNb_SetupCollider(thisx, globalCtx);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &D_060181C8, NULL, this->jointTable, this->morphTable, 19);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gNabooruSkel, NULL, this->jointTable, this->morphTable, NB_LIMB_MAX);
|
||||
|
||||
switch (EnNb_GetType(this)) {
|
||||
case NB_TYPE_DEMO02:
|
||||
|
@ -1473,11 +1454,11 @@ s32 EnNb_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
|
|||
s32 ret = false;
|
||||
|
||||
if (this->headTurnFlag != 0) {
|
||||
if (limbIndex == 8) {
|
||||
if (limbIndex == NB_LIMB_TORSO) {
|
||||
rot->x += unk_300->unk_0E.y;
|
||||
rot->y -= unk_300->unk_0E.x;
|
||||
ret = false;
|
||||
} else if (limbIndex == 15) {
|
||||
} else if (limbIndex == NB_LIMB_HEAD) {
|
||||
rot->x += unk_300->unk_08.y;
|
||||
rot->z += unk_300->unk_08.x;
|
||||
ret = false;
|
||||
|
@ -1490,7 +1471,7 @@ s32 EnNb_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
|
|||
void EnNb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
|
||||
EnNb* this = THIS;
|
||||
|
||||
if (limbIndex == 15) {
|
||||
if (limbIndex == NB_LIMB_HEAD) {
|
||||
Vec3f vec1 = { 0.0f, 10.0f, 0.0f };
|
||||
Vec3f vec2;
|
||||
|
||||
|
|
|
@ -6,14 +6,37 @@
|
|||
|
||||
struct EnNb;
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ NB_LIMB_NONE,
|
||||
/* 0x01 */ NB_LIMB_ROOT,
|
||||
/* 0x02 */ NB_LIMB_L_THIGH,
|
||||
/* 0x03 */ NB_LIMB_L_SHIN,
|
||||
/* 0x04 */ NB_LIMB_L_FOOT,
|
||||
/* 0x05 */ NB_LIMB_R_THIGH,
|
||||
/* 0x06 */ NB_LIMB_R_SHIN,
|
||||
/* 0x07 */ NB_LIMB_R_FOOT,
|
||||
/* 0x08 */ NB_LIMB_TORSO,
|
||||
/* 0x09 */ NB_LIMB_L_UPPER_ARM,
|
||||
/* 0x0A */ NB_LIMB_L_FOREARM,
|
||||
/* 0x0B */ NB_LIMB_L_HAND,
|
||||
/* 0x0C */ NB_LIMB_R_UPPER_ARM,
|
||||
/* 0x0D */ NB_LIMB_R_FOREARM,
|
||||
/* 0x0E */ NB_LIMB_R_HAND,
|
||||
/* 0x0F */ NB_LIMB_HEAD,
|
||||
/* 0x10 */ NB_LIMB_BLANK,
|
||||
/* 0x11 */ NB_LIMB_PONYTAIL,
|
||||
/* 0x12 */ NB_LIMB_WAIST,
|
||||
/* 0x13 */ NB_LIMB_MAX
|
||||
} EnNbLimb;
|
||||
|
||||
typedef void (*EnNbActionFunc)(struct EnNb*, GlobalContext*);
|
||||
typedef void (*EnNbDrawFunc)(struct EnNb*, GlobalContext*);
|
||||
|
||||
typedef struct EnNb {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x014C */ SkelAnime skelAnime;
|
||||
/* 0x0190 */ Vec3s jointTable[19];
|
||||
/* 0x0202 */ Vec3s morphTable[19];
|
||||
/* 0x0190 */ Vec3s jointTable[NB_LIMB_MAX];
|
||||
/* 0x0202 */ Vec3s morphTable[NB_LIMB_MAX];
|
||||
/* 0x0274 */ s16 eyeIdx;
|
||||
/* 0x0276 */ s16 blinkTimer;
|
||||
/* 0x0278 */ s32 action;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue