mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-03 22:44:30 +00:00
z_en_reeba
doc (#1442)
* `z_en_reeba` doc Fields and funcs now ID'd. * Update z_en_reeba.c one more func ID'd. * `z_en_reeba`: change name of "rotYSwitch" * `z_en_reeba`: added enums, changed stunTimer also added translation for an osSyncPrintf * Update z_en_reeba.c revised DMGEFF enum * `z_en_reeba` revised * `z_en_reeba`: merge, case-switch whitespacing * `z_en_reeba`: revisions switch case formatted `isBig` bool to `type` enum
This commit is contained in:
parent
1a20d0d76d
commit
75eb3c5c81
3 changed files with 220 additions and 197 deletions
|
@ -118,13 +118,13 @@ void EnEncount1_SpawnLeevers(EnEncount1* this, PlayState* play) {
|
||||||
while ((this->curNumSpawn < this->maxCurSpawns) && (this->curNumSpawn < spawnLimit) && (this->timer == 0)) {
|
while ((this->curNumSpawn < this->maxCurSpawns) && (this->curNumSpawn < spawnLimit) && (this->timer == 0)) {
|
||||||
spawnDist = sLeeverDists[this->leeverIndex];
|
spawnDist = sLeeverDists[this->leeverIndex];
|
||||||
spawnAngle = sLeeverAngles[this->leeverIndex] + player->actor.shape.rot.y;
|
spawnAngle = sLeeverAngles[this->leeverIndex] + player->actor.shape.rot.y;
|
||||||
spawnParams = LEEVER_SMALL;
|
spawnParams = LEEVER_TYPE_SMALL;
|
||||||
|
|
||||||
if ((this->killCount >= 10) && (this->bigLeever == NULL)) {
|
if ((this->killCount >= 10) && (this->bigLeever == NULL)) {
|
||||||
this->killCount = this->numLeeverSpawns = 0;
|
this->killCount = this->numLeeverSpawns = 0;
|
||||||
spawnAngle = sLeeverAngles[0];
|
spawnAngle = sLeeverAngles[0];
|
||||||
spawnDist = sLeeverDists[2];
|
spawnDist = sLeeverDists[2];
|
||||||
spawnParams = LEEVER_BIG;
|
spawnParams = LEEVER_TYPE_BIG;
|
||||||
}
|
}
|
||||||
|
|
||||||
spawnPos.x = player->actor.world.pos.x + Math_SinS(spawnAngle) * spawnDist;
|
spawnPos.x = player->actor.world.pos.x + Math_SinS(spawnAngle) * spawnDist;
|
||||||
|
@ -144,7 +144,7 @@ void EnEncount1_SpawnLeevers(EnEncount1* this, PlayState* play) {
|
||||||
if (1) {}
|
if (1) {}
|
||||||
if (leever != NULL) {
|
if (leever != NULL) {
|
||||||
this->curNumSpawn++;
|
this->curNumSpawn++;
|
||||||
leever->unk_280 = this->leeverIndex++;
|
leever->aimType = this->leeverIndex++;
|
||||||
if (this->leeverIndex >= 5) {
|
if (this->leeverIndex >= 5) {
|
||||||
this->leeverIndex = 0;
|
this->leeverIndex = 0;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +153,7 @@ void EnEncount1_SpawnLeevers(EnEncount1* this, PlayState* play) {
|
||||||
this->timer = 150;
|
this->timer = 150;
|
||||||
this->numLeeverSpawns = 0;
|
this->numLeeverSpawns = 0;
|
||||||
}
|
}
|
||||||
if (spawnParams != LEEVER_SMALL) {
|
if (spawnParams != LEEVER_TYPE_SMALL) {
|
||||||
this->timer = 300;
|
this->timer = 300;
|
||||||
this->bigLeever = leever;
|
this->bigLeever = leever;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,52 +17,62 @@ void EnReeba_Destroy(Actor* thisx, PlayState* play);
|
||||||
void EnReeba_Update(Actor* thisx, PlayState* play2);
|
void EnReeba_Update(Actor* thisx, PlayState* play2);
|
||||||
void EnReeba_Draw(Actor* thisx, PlayState* play);
|
void EnReeba_Draw(Actor* thisx, PlayState* play);
|
||||||
|
|
||||||
void func_80AE4F40(EnReeba* this, PlayState* play);
|
void EnReeba_SetupSurface(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5054(EnReeba* this, PlayState* play);
|
void EnReeba_Surface(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5270(EnReeba* this, PlayState* play);
|
void EnReeba_Move(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5688(EnReeba* this, PlayState* play);
|
void EnReeba_SetupSink(EnReeba* this, PlayState* play);
|
||||||
void func_80AE56E0(EnReeba* this, PlayState* play);
|
void EnReeba_Sink(EnReeba* this, PlayState* play);
|
||||||
void func_80AE538C(EnReeba* this, PlayState* play);
|
void EnReeba_SetupMoveBig(EnReeba* this, PlayState* play);
|
||||||
void func_80AE53AC(EnReeba* this, PlayState* play);
|
void EnReeba_MoveBig(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5E48(EnReeba* this, PlayState* play);
|
void EnReeba_StunRecover(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5854(EnReeba* this, PlayState* play);
|
void EnReeba_Damaged(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5C38(EnReeba* this, PlayState* play);
|
void EnReeba_Die(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5938(EnReeba* this, PlayState* play);
|
void EnReeba_Stunned(EnReeba* this, PlayState* play);
|
||||||
void func_80AE5A9C(EnReeba* this, PlayState* play);
|
void EnReeba_StunDie(EnReeba* this, PlayState* play);
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
/* 0x00 */ LEEVER_DMGEFF_NONE, // used by anything that cant kill the Leever
|
||||||
|
/* 0x01 */ LEEVER_DMGEFF_UNK, // used by "unknown 1" attack
|
||||||
|
/* 0x03 */ LEEVER_DMGEFF_ICE = 3,
|
||||||
|
/* 0x0B */ LEEVER_DMGEFF_UNUSED = 11, // not used in the damage table, but still checked for.
|
||||||
|
/* 0x0C */ LEEVER_DMGEFF_BOOMERANG,
|
||||||
|
/* 0x0D */ LEEVER_DMGEFF_HOOKSHOT,
|
||||||
|
/* 0x0E */ LEEVER_DMGEFF_OTHER
|
||||||
|
} LeeverDamageEffect;
|
||||||
|
|
||||||
static DamageTable sDamageTable = {
|
static DamageTable sDamageTable = {
|
||||||
/* Deku nut */ DMG_ENTRY(0, 0x0),
|
/* Deku nut */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Deku stick */ DMG_ENTRY(2, 0xE),
|
/* Deku stick */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Slingshot */ DMG_ENTRY(1, 0xE),
|
/* Slingshot */ DMG_ENTRY(1, LEEVER_DMGEFF_OTHER),
|
||||||
/* Explosive */ DMG_ENTRY(2, 0xE),
|
/* Explosive */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Boomerang */ DMG_ENTRY(1, 0xC),
|
/* Boomerang */ DMG_ENTRY(1, LEEVER_DMGEFF_BOOMERANG),
|
||||||
/* Normal arrow */ DMG_ENTRY(2, 0xE),
|
/* Normal arrow */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Hammer swing */ DMG_ENTRY(2, 0xE),
|
/* Hammer swing */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Hookshot */ DMG_ENTRY(2, 0xD),
|
/* Hookshot */ DMG_ENTRY(2, LEEVER_DMGEFF_HOOKSHOT),
|
||||||
/* Kokiri sword */ DMG_ENTRY(1, 0xE),
|
/* Kokiri sword */ DMG_ENTRY(1, LEEVER_DMGEFF_OTHER),
|
||||||
/* Master sword */ DMG_ENTRY(4, 0xE),
|
/* Master sword */ DMG_ENTRY(4, LEEVER_DMGEFF_OTHER),
|
||||||
/* Giant's Knife */ DMG_ENTRY(6, 0xE),
|
/* Giant's Knife */ DMG_ENTRY(6, LEEVER_DMGEFF_OTHER),
|
||||||
/* Fire arrow */ DMG_ENTRY(2, 0xE),
|
/* Fire arrow */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Ice arrow */ DMG_ENTRY(4, 0x3),
|
/* Ice arrow */ DMG_ENTRY(4, LEEVER_DMGEFF_ICE),
|
||||||
/* Light arrow */ DMG_ENTRY(2, 0xE),
|
/* Light arrow */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Unk arrow 1 */ DMG_ENTRY(2, 0xE),
|
/* Unk arrow 1 */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Unk arrow 2 */ DMG_ENTRY(2, 0xE),
|
/* Unk arrow 2 */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Unk arrow 3 */ DMG_ENTRY(2, 0xE),
|
/* Unk arrow 3 */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Fire magic */ DMG_ENTRY(0, 0x0),
|
/* Fire magic */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Ice magic */ DMG_ENTRY(4, 0x3),
|
/* Ice magic */ DMG_ENTRY(4, LEEVER_DMGEFF_ICE),
|
||||||
/* Light magic */ DMG_ENTRY(0, 0x0),
|
/* Light magic */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Shield */ DMG_ENTRY(0, 0x0),
|
/* Shield */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Mirror Ray */ DMG_ENTRY(0, 0x0),
|
/* Mirror Ray */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Kokiri spin */ DMG_ENTRY(2, 0xE),
|
/* Kokiri spin */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Giant spin */ DMG_ENTRY(8, 0xE),
|
/* Giant spin */ DMG_ENTRY(8, LEEVER_DMGEFF_OTHER),
|
||||||
/* Master spin */ DMG_ENTRY(4, 0xE),
|
/* Master spin */ DMG_ENTRY(4, LEEVER_DMGEFF_OTHER),
|
||||||
/* Kokiri jump */ DMG_ENTRY(2, 0xE),
|
/* Kokiri jump */ DMG_ENTRY(2, LEEVER_DMGEFF_OTHER),
|
||||||
/* Giant jump */ DMG_ENTRY(8, 0xE),
|
/* Giant jump */ DMG_ENTRY(8, LEEVER_DMGEFF_OTHER),
|
||||||
/* Master jump */ DMG_ENTRY(4, 0xE),
|
/* Master jump */ DMG_ENTRY(4, LEEVER_DMGEFF_OTHER),
|
||||||
/* Unknown 1 */ DMG_ENTRY(0, 0x1),
|
/* Unknown 1 */ DMG_ENTRY(0, LEEVER_DMGEFF_UNK),
|
||||||
/* Unblockable */ DMG_ENTRY(0, 0x0),
|
/* Unblockable */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Hammer jump */ DMG_ENTRY(0, 0x0),
|
/* Hammer jump */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
/* Unknown 2 */ DMG_ENTRY(0, 0x0),
|
/* Unknown 2 */ DMG_ENTRY(0, LEEVER_DMGEFF_NONE),
|
||||||
};
|
};
|
||||||
|
|
||||||
ActorInit En_Reeba_InitVars = {
|
ActorInit En_Reeba_InitVars = {
|
||||||
|
@ -112,13 +122,14 @@ void EnReeba_Init(Actor* thisx, PlayState* play) {
|
||||||
this->actor.colChkInfo.health = 4;
|
this->actor.colChkInfo.health = 4;
|
||||||
Collider_InitCylinder(play, &this->collider);
|
Collider_InitCylinder(play, &this->collider);
|
||||||
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
|
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
|
||||||
this->isBig = this->actor.params;
|
this->type = this->actor.params;
|
||||||
this->scale = 0.04f;
|
this->scale = 0.04f;
|
||||||
|
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
this->collider.dim.radius = 35;
|
this->collider.dim.radius = 35;
|
||||||
this->collider.dim.height = 45;
|
this->collider.dim.height = 45;
|
||||||
this->scale *= 1.5f;
|
this->scale *= 1.5f;
|
||||||
|
// "Reeba Boss Appears %f"
|
||||||
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ リーバぼす登場 ☆☆☆☆☆ %f\n" VT_RST, this->scale);
|
osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ リーバぼす登場 ☆☆☆☆☆ %f\n" VT_RST, this->scale);
|
||||||
this->actor.colChkInfo.health = 20;
|
this->actor.colChkInfo.health = 20;
|
||||||
this->collider.info.toucher.effect = 4;
|
this->collider.info.toucher.effect = 4;
|
||||||
|
@ -126,7 +137,7 @@ void EnReeba_Init(Actor* thisx, PlayState* play) {
|
||||||
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
|
Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->actor.shape.yOffset = this->unk_284 = this->scale * -27500.0f;
|
this->actor.shape.yOffset = this->yOffsetTarget = this->scale * -27500.0f;
|
||||||
ActorShape_Init(&this->actor.shape, this->actor.shape.yOffset, ActorShadow_DrawCircle, 0.0f);
|
ActorShape_Init(&this->actor.shape, this->actor.shape.yOffset, ActorShadow_DrawCircle, 0.0f);
|
||||||
this->actor.colChkInfo.damageTable = &sDamageTable;
|
this->actor.colChkInfo.damageTable = &sDamageTable;
|
||||||
Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f,
|
Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f,
|
||||||
|
@ -140,7 +151,7 @@ void EnReeba_Init(Actor* thisx, PlayState* play) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->actionfunc = func_80AE4F40;
|
this->actionfunc = EnReeba_SetupSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnReeba_Destroy(Actor* thisx, PlayState* play) {
|
void EnReeba_Destroy(Actor* thisx, PlayState* play) {
|
||||||
|
@ -156,7 +167,7 @@ void EnReeba_Destroy(Actor* thisx, PlayState* play) {
|
||||||
if (spawner->curNumSpawn > 0) {
|
if (spawner->curNumSpawn > 0) {
|
||||||
spawner->curNumSpawn--;
|
spawner->curNumSpawn--;
|
||||||
}
|
}
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
spawner->bigLeever = NULL;
|
spawner->bigLeever = NULL;
|
||||||
spawner->timer = 600;
|
spawner->timer = 600;
|
||||||
}
|
}
|
||||||
|
@ -164,7 +175,7 @@ void EnReeba_Destroy(Actor* thisx, PlayState* play) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE4F40(EnReeba* this, PlayState* play) {
|
void EnReeba_SetupSurface(EnReeba* this, PlayState* play) {
|
||||||
f32 frames = Animation_GetLastFrame(&object_reeba_Anim_0001E4);
|
f32 frames = Animation_GetLastFrame(&object_reeba_Anim_0001E4);
|
||||||
Player* player = GET_PLAYER(play);
|
Player* player = GET_PLAYER(play);
|
||||||
s16 playerSpeed;
|
s16 playerSpeed;
|
||||||
|
@ -172,27 +183,28 @@ void func_80AE4F40(EnReeba* this, PlayState* play) {
|
||||||
Animation_Change(&this->skelanime, &object_reeba_Anim_0001E4, 2.0f, 0.0f, frames, ANIMMODE_LOOP, -10.0f);
|
Animation_Change(&this->skelanime, &object_reeba_Anim_0001E4, 2.0f, 0.0f, frames, ANIMMODE_LOOP, -10.0f);
|
||||||
|
|
||||||
playerSpeed = fabsf(player->linearVelocity);
|
playerSpeed = fabsf(player->linearVelocity);
|
||||||
this->unk_278 = 20 - playerSpeed * 2;
|
this->waitTimer = 20 - playerSpeed * 2;
|
||||||
if (this->unk_278 < 0) {
|
if (this->waitTimer < 0) {
|
||||||
this->unk_278 = 2;
|
this->waitTimer = 2;
|
||||||
}
|
}
|
||||||
if (this->unk_278 > 20) {
|
if (this->waitTimer > 20) {
|
||||||
this->unk_278 = 20;
|
this->waitTimer = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->actor.flags &= ~ACTOR_FLAG_27;
|
this->actor.flags &= ~ACTOR_FLAG_27;
|
||||||
this->actor.world.pos.y = this->actor.floorHeight;
|
this->actor.world.pos.y = this->actor.floorHeight;
|
||||||
|
|
||||||
if (this->isBig) {
|
|
||||||
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_BIG_APPEAR);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_BIG_APPEAR);
|
||||||
} else {
|
} else {
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_APPEAR);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_APPEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->actionfunc = func_80AE5054;
|
this->actionfunc = EnReeba_Surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5054(EnReeba* this, PlayState* play) {
|
void EnReeba_Surface(EnReeba* this, PlayState* play) {
|
||||||
Player* player = GET_PLAYER(play);
|
Player* player = GET_PLAYER(play);
|
||||||
f32 playerLinearVel;
|
f32 playerLinearVel;
|
||||||
|
|
||||||
|
@ -203,17 +215,17 @@ void func_80AE5054(EnReeba* this, PlayState* play) {
|
||||||
500, 10, true);
|
500, 10, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->unk_278 == 0) {
|
if (this->waitTimer == 0) {
|
||||||
Math_ApproachF(&this->actor.shape.shadowScale, 12.0f, 1.0f, 1.0f);
|
Math_ApproachF(&this->actor.shape.shadowScale, 12.0f, 1.0f, 1.0f);
|
||||||
if (this->actor.shape.yOffset < 0.0f) {
|
if (this->actor.shape.yOffset < 0.0f) {
|
||||||
Math_ApproachZeroF(&this->actor.shape.yOffset, 1.0f, this->unk_288);
|
Math_ApproachZeroF(&this->actor.shape.yOffset, 1.0f, this->yOffsetStep);
|
||||||
Math_ApproachF(&this->unk_288, 300.0f, 1.0f, 5.0f);
|
Math_ApproachF(&this->yOffsetStep, 300.0f, 1.0f, 5.0f);
|
||||||
} else {
|
} else {
|
||||||
this->unk_288 = 0.0f;
|
this->yOffsetStep = 0.0f;
|
||||||
this->actor.shape.yOffset = 0.0f;
|
this->actor.shape.yOffset = 0.0f;
|
||||||
playerLinearVel = player->linearVelocity;
|
playerLinearVel = player->linearVelocity;
|
||||||
|
|
||||||
switch (this->unk_280) {
|
switch (this->aimType) {
|
||||||
case 0:
|
case 0:
|
||||||
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
||||||
break;
|
break;
|
||||||
|
@ -231,18 +243,18 @@ void func_80AE5054(EnReeba* this, PlayState* play) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
this->actionfunc = func_80AE538C;
|
this->actionfunc = EnReeba_SetupMoveBig;
|
||||||
} else {
|
} else {
|
||||||
this->unk_272 = 130;
|
this->moveTimer = 130;
|
||||||
this->actor.speedXZ = Rand_ZeroFloat(4.0f) + 6.0f;
|
this->actor.speedXZ = Rand_ZeroFloat(4.0f) + 6.0f;
|
||||||
this->actionfunc = func_80AE5270;
|
this->actionfunc = EnReeba_Move;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5270(EnReeba* this, PlayState* play) {
|
void EnReeba_Move(EnReeba* this, PlayState* play) {
|
||||||
s32 surfaceType;
|
s32 surfaceType;
|
||||||
|
|
||||||
SkelAnime_Update(&this->skelanime);
|
SkelAnime_Update(&this->skelanime);
|
||||||
|
@ -255,22 +267,22 @@ void func_80AE5270(EnReeba* this, PlayState* play) {
|
||||||
|
|
||||||
if ((surfaceType != FLOOR_TYPE_4) && (surfaceType != FLOOR_TYPE_7)) {
|
if ((surfaceType != FLOOR_TYPE_4) && (surfaceType != FLOOR_TYPE_7)) {
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
this->actionfunc = func_80AE5688;
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
} else if ((this->unk_272 == 0) || (this->actor.xzDistToPlayer < 30.0f) || (this->actor.xzDistToPlayer > 400.0f) ||
|
} else if ((this->moveTimer == 0) || (this->actor.xzDistToPlayer < 30.0f) ||
|
||||||
(this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
|
(this->actor.xzDistToPlayer > 400.0f) || (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
|
||||||
this->actionfunc = func_80AE5688;
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
} else if (this->unk_274 == 0) {
|
} else if (this->sfxTimer == 0) {
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_MOVE);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_MOVE);
|
||||||
this->unk_274 = 10;
|
this->sfxTimer = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE538C(EnReeba* this, PlayState* play) {
|
void EnReeba_SetupMoveBig(EnReeba* this, PlayState* play) {
|
||||||
this->actor.flags |= ACTOR_FLAG_0 | ACTOR_FLAG_2;
|
this->actor.flags |= ACTOR_FLAG_0 | ACTOR_FLAG_2;
|
||||||
this->actionfunc = func_80AE53AC;
|
this->actionfunc = EnReeba_MoveBig;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE53AC(EnReeba* this, PlayState* play) {
|
void EnReeba_MoveBig(EnReeba* this, PlayState* play) {
|
||||||
f32 speed;
|
f32 speed;
|
||||||
s16 yawDiff;
|
s16 yawDiff;
|
||||||
s16 yaw;
|
s16 yaw;
|
||||||
|
@ -286,10 +298,10 @@ void func_80AE53AC(EnReeba* this, PlayState* play) {
|
||||||
|
|
||||||
if (((surfaceType != FLOOR_TYPE_4) && (surfaceType != FLOOR_TYPE_7)) || (this->actor.xzDistToPlayer > 400.0f) ||
|
if (((surfaceType != FLOOR_TYPE_4) && (surfaceType != FLOOR_TYPE_7)) || (this->actor.xzDistToPlayer > 400.0f) ||
|
||||||
(this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
|
(this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) {
|
||||||
this->actionfunc = func_80AE5688;
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
} else {
|
} else {
|
||||||
if ((this->actor.xzDistToPlayer < 70.0f) && (this->unk_270 == 0)) {
|
if ((this->actor.xzDistToPlayer < 70.0f) && (this->bigLeeverTimer == 0)) {
|
||||||
this->unk_270 = 30;
|
this->bigLeeverTimer = 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
speed = (this->actor.xzDistToPlayer - 20.0f) / ((Rand_ZeroOne() * 50.0f) + 150.0f);
|
speed = (this->actor.xzDistToPlayer - 20.0f) / ((Rand_ZeroOne() * 50.0f) + 150.0f);
|
||||||
|
@ -301,136 +313,136 @@ void func_80AE53AC(EnReeba* this, PlayState* play) {
|
||||||
this->actor.speedXZ = -3.0f;
|
this->actor.speedXZ = -3.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
yawDiff = (this->unk_270 == 0) ? this->actor.yawTowardsPlayer : -this->actor.yawTowardsPlayer;
|
yawDiff = (this->bigLeeverTimer == 0) ? this->actor.yawTowardsPlayer : -this->actor.yawTowardsPlayer;
|
||||||
yawDiff -= this->actor.world.rot.y;
|
yawDiff -= this->actor.world.rot.y;
|
||||||
yaw = (yawDiff > 0) ? ((yawDiff / 31.0f) + 10.0f) : ((yawDiff / 31.0f) - 10.0f);
|
yaw = (yawDiff > 0) ? ((yawDiff / 31.0f) + 10.0f) : ((yawDiff / 31.0f) - 10.0f);
|
||||||
this->actor.world.rot.y += yaw * 2.0f;
|
this->actor.world.rot.y += yaw * 2.0f;
|
||||||
|
|
||||||
if (this->unk_274 == 0) {
|
if (this->sfxTimer == 0) {
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_MOVE);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_MOVE);
|
||||||
this->unk_274 = 20;
|
this->sfxTimer = 20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE561C(EnReeba* this, PlayState* play) {
|
void EnReeba_Bumped(EnReeba* this, PlayState* play) {
|
||||||
Math_ApproachZeroF(&this->actor.speedXZ, 1.0f, 0.3f);
|
Math_ApproachZeroF(&this->actor.speedXZ, 1.0f, 0.3f);
|
||||||
|
|
||||||
if (this->unk_272 == 0) {
|
if (this->moveTimer == 0) {
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
this->actionfunc = func_80AE538C;
|
this->actionfunc = EnReeba_SetupMoveBig;
|
||||||
} else {
|
} else {
|
||||||
this->actionfunc = func_80AE5688;
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5688(EnReeba* this, PlayState* play) {
|
void EnReeba_SetupSink(EnReeba* this, PlayState* play) {
|
||||||
this->unk_27E = 0;
|
this->stunType = LEEVER_STUN_NONE;
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_AKINDONUTS_HIDE);
|
||||||
this->actor.flags |= ACTOR_FLAG_27;
|
this->actor.flags |= ACTOR_FLAG_27;
|
||||||
this->actor.flags &= ~(ACTOR_FLAG_0 | ACTOR_FLAG_2);
|
this->actor.flags &= ~(ACTOR_FLAG_0 | ACTOR_FLAG_2);
|
||||||
this->actionfunc = func_80AE56E0;
|
this->actionfunc = EnReeba_Sink;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE56E0(EnReeba* this, PlayState* play) {
|
void EnReeba_Sink(EnReeba* this, PlayState* play) {
|
||||||
Math_ApproachZeroF(&this->actor.shape.shadowScale, 1.0f, 0.3f);
|
Math_ApproachZeroF(&this->actor.shape.shadowScale, 1.0f, 0.3f);
|
||||||
Math_ApproachZeroF(&this->actor.speedXZ, 0.1f, 0.3f);
|
Math_ApproachZeroF(&this->actor.speedXZ, 0.1f, 0.3f);
|
||||||
SkelAnime_Update(&this->skelanime);
|
SkelAnime_Update(&this->skelanime);
|
||||||
|
|
||||||
if ((this->unk_284 + 10.0f) <= this->actor.shape.yOffset) {
|
if ((this->yOffsetTarget + 10.0f) <= this->actor.shape.yOffset) {
|
||||||
if ((play->gameplayFrames % 4) == 0) {
|
if ((play->gameplayFrames % 4) == 0) {
|
||||||
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 8.0f,
|
Actor_SpawnFloorDustRing(play, &this->actor, &this->actor.world.pos, this->actor.shape.shadowScale, 1, 8.0f,
|
||||||
500, 10, true);
|
500, 10, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Math_ApproachF(&this->actor.shape.yOffset, this->unk_284, 1.0f, this->unk_288);
|
Math_ApproachF(&this->actor.shape.yOffset, this->yOffsetTarget, 1.0f, this->yOffsetStep);
|
||||||
Math_ApproachF(&this->unk_288, 300.0f, 1.0f, 5.0f);
|
Math_ApproachF(&this->yOffsetStep, 300.0f, 1.0f, 5.0f);
|
||||||
} else {
|
} else {
|
||||||
Actor_Kill(&this->actor);
|
Actor_Kill(&this->actor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE57F0(EnReeba* this, PlayState* play) {
|
void EnReeba_SetupDamaged(EnReeba* this, PlayState* play) {
|
||||||
this->unk_276 = 14;
|
this->damagedTimer = 14;
|
||||||
this->actor.speedXZ = -8.0f;
|
this->actor.speedXZ = -8.0f;
|
||||||
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
||||||
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
|
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
|
||||||
this->actionfunc = func_80AE5854;
|
this->actionfunc = EnReeba_Damaged;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5854(EnReeba* this, PlayState* play) {
|
void EnReeba_Damaged(EnReeba* this, PlayState* play) {
|
||||||
SkelAnime_Update(&this->skelanime);
|
SkelAnime_Update(&this->skelanime);
|
||||||
|
|
||||||
if (this->actor.speedXZ < 0.0f) {
|
if (this->actor.speedXZ < 0.0f) {
|
||||||
this->actor.speedXZ += 1.0f;
|
this->actor.speedXZ += 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->unk_276 == 0) {
|
if (this->damagedTimer == 0) {
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
this->unk_270 = 30;
|
this->bigLeeverTimer = 30;
|
||||||
this->actionfunc = func_80AE538C;
|
this->actionfunc = EnReeba_SetupMoveBig;
|
||||||
} else {
|
} else {
|
||||||
this->actionfunc = func_80AE5688;
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE58EC(EnReeba* this, PlayState* play) {
|
void EnReeba_SetupStunned(EnReeba* this, PlayState* play) {
|
||||||
this->unk_278 = 14;
|
this->waitTimer = 14;
|
||||||
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
||||||
this->actor.speedXZ = -8.0f;
|
this->actor.speedXZ = -8.0f;
|
||||||
this->actor.flags |= ACTOR_FLAG_27;
|
this->actor.flags |= ACTOR_FLAG_27;
|
||||||
this->actor.flags &= ~(ACTOR_FLAG_0 | ACTOR_FLAG_2);
|
this->actor.flags &= ~(ACTOR_FLAG_0 | ACTOR_FLAG_2);
|
||||||
this->actionfunc = func_80AE5938;
|
this->actionfunc = EnReeba_Stunned;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5938(EnReeba* this, PlayState* play) {
|
void EnReeba_Stunned(EnReeba* this, PlayState* play) {
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
f32 scale;
|
f32 scale;
|
||||||
|
|
||||||
if (this->unk_278 != 0) {
|
if (this->waitTimer != 0) {
|
||||||
if (this->actor.speedXZ < 0.0f) {
|
if (this->actor.speedXZ < 0.0f) {
|
||||||
this->actor.speedXZ += 1.0f;
|
this->actor.speedXZ += 1.0f;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this->actor.speedXZ = 0.0f;
|
this->actor.speedXZ = 0.0f;
|
||||||
|
|
||||||
if ((this->unk_27E == 4) || (this->actor.colChkInfo.health != 0)) {
|
if ((this->stunType == LEEVER_STUN_OTHER) || (this->actor.colChkInfo.health != 0)) {
|
||||||
if (this->unk_27E == 2) {
|
if (this->stunType == LEEVER_STUN_ICE) {
|
||||||
pos.x = this->actor.world.pos.x + Rand_CenteredFloat(20.0f);
|
pos.x = this->actor.world.pos.x + Rand_CenteredFloat(20.0f);
|
||||||
pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f);
|
pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f);
|
||||||
pos.z = this->actor.world.pos.z + Rand_CenteredFloat(20.0f);
|
pos.z = this->actor.world.pos.z + Rand_CenteredFloat(20.0f);
|
||||||
scale = 3.0f;
|
scale = 3.0f;
|
||||||
|
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
scale = 6.0f;
|
scale = 6.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
EffectSsEnIce_SpawnFlyingVec3f(play, &this->actor, &pos, 150, 150, 150, 250, 235, 245, 255, scale);
|
EffectSsEnIce_SpawnFlyingVec3f(play, &this->actor, &pos, 150, 150, 150, 250, 235, 245, 255, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->unk_278 = 66;
|
this->waitTimer = 66;
|
||||||
this->actionfunc = func_80AE5E48;
|
this->actionfunc = EnReeba_StunRecover;
|
||||||
} else {
|
} else {
|
||||||
this->unk_278 = 30;
|
this->waitTimer = 30;
|
||||||
this->actionfunc = func_80AE5A9C;
|
this->actionfunc = EnReeba_StunDie;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5A9C(EnReeba* this, PlayState* play) {
|
void EnReeba_StunDie(EnReeba* this, PlayState* play) {
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
f32 scale;
|
f32 scale;
|
||||||
|
|
||||||
if (this->unk_278 != 0) {
|
if (this->waitTimer != 0) {
|
||||||
if ((this->unk_27E == 2) && ((this->unk_278 & 0xF) == 0)) {
|
if ((this->stunType == LEEVER_STUN_ICE) && ((this->waitTimer & 0xF) == 0)) {
|
||||||
pos.x = this->actor.world.pos.x + Rand_CenteredFloat(20.0f);
|
pos.x = this->actor.world.pos.x + Rand_CenteredFloat(20.0f);
|
||||||
pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f);
|
pos.y = this->actor.world.pos.y + Rand_CenteredFloat(20.0f);
|
||||||
pos.z = this->actor.world.pos.z + Rand_CenteredFloat(20.0f);
|
pos.z = this->actor.world.pos.z + Rand_CenteredFloat(20.0f);
|
||||||
|
|
||||||
scale = 3.0f;
|
scale = 3.0f;
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
scale = 6.0f;
|
scale = 6.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,25 +451,25 @@ void func_80AE5A9C(EnReeba* this, PlayState* play) {
|
||||||
} else {
|
} else {
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD);
|
||||||
Enemy_StartFinishingBlow(play, &this->actor);
|
Enemy_StartFinishingBlow(play, &this->actor);
|
||||||
this->actionfunc = func_80AE5C38;
|
this->actionfunc = EnReeba_Die;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5BC4(EnReeba* this, PlayState* play) {
|
void EnReeba_SetupDie(EnReeba* this, PlayState* play) {
|
||||||
this->actor.speedXZ = -8.0f;
|
this->actor.speedXZ = -8.0f;
|
||||||
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
|
||||||
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
|
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_OPA, 8);
|
||||||
this->unk_278 = 14;
|
this->waitTimer = 14;
|
||||||
this->actor.flags &= ~ACTOR_FLAG_0;
|
this->actor.flags &= ~ACTOR_FLAG_0;
|
||||||
this->actionfunc = func_80AE5C38;
|
this->actionfunc = EnReeba_Die;
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5C38(EnReeba* this, PlayState* play) {
|
void EnReeba_Die(EnReeba* this, PlayState* play) {
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
Vec3f accel = { 0.0f, 0.0f, 0.0f };
|
Vec3f accel = { 0.0f, 0.0f, 0.0f };
|
||||||
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
|
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
if (this->unk_278 != 0) {
|
if (this->waitTimer != 0) {
|
||||||
if (this->actor.speedXZ < 0.0f) {
|
if (this->actor.speedXZ < 0.0f) {
|
||||||
this->actor.speedXZ += 1.0f;
|
this->actor.speedXZ += 1.0f;
|
||||||
}
|
}
|
||||||
|
@ -474,7 +486,7 @@ void func_80AE5C38(EnReeba* this, PlayState* play) {
|
||||||
|
|
||||||
EffectSsDeadDb_Spawn(play, &pos, &velocity, &accel, 120, 0, 255, 255, 255, 255, 255, 0, 0, 1, 9, true);
|
EffectSsDeadDb_Spawn(play, &pos, &velocity, &accel, 120, 0, 255, 255, 255, 255, 255, 0, 0, 1, 9, true);
|
||||||
|
|
||||||
if (!this->isBig) {
|
if (this->type == LEEVER_TYPE_SMALL) {
|
||||||
Item_DropCollectibleRandom(play, &this->actor, &pos, 0xE0);
|
Item_DropCollectibleRandom(play, &this->actor, &pos, 0xE0);
|
||||||
} else {
|
} else {
|
||||||
Item_DropCollectibleRandom(play, &this->actor, &pos, 0xC0);
|
Item_DropCollectibleRandom(play, &this->actor, &pos, 0xC0);
|
||||||
|
@ -483,7 +495,7 @@ void func_80AE5C38(EnReeba* this, PlayState* play) {
|
||||||
if (this->actor.parent != NULL) {
|
if (this->actor.parent != NULL) {
|
||||||
EnEncount1* spawner = (EnEncount1*)this->actor.parent;
|
EnEncount1* spawner = (EnEncount1*)this->actor.parent;
|
||||||
|
|
||||||
if ((spawner->actor.update != NULL) && !this->isBig) {
|
if ((spawner->actor.update != NULL) && this->type == LEEVER_TYPE_SMALL) {
|
||||||
if (spawner->killCount < 10) {
|
if (spawner->killCount < 10) {
|
||||||
spawner->killCount++;
|
spawner->killCount++;
|
||||||
}
|
}
|
||||||
|
@ -499,81 +511,87 @@ void func_80AE5C38(EnReeba* this, PlayState* play) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5E48(EnReeba* this, PlayState* play) {
|
void EnReeba_StunRecover(EnReeba* this, PlayState* play) {
|
||||||
if (this->unk_278 < 37) {
|
if (this->waitTimer < 37) {
|
||||||
this->actor.shape.rot.x = Rand_CenteredFloat(3000.0f);
|
this->actor.shape.rot.x = Rand_CenteredFloat(3000.0f);
|
||||||
this->actor.shape.rot.z = Rand_CenteredFloat(3000.0f);
|
this->actor.shape.rot.z = Rand_CenteredFloat(3000.0f);
|
||||||
|
|
||||||
if (this->unk_278 == 0) {
|
if (this->waitTimer == 0) {
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
this->actionfunc = func_80AE538C;
|
this->actionfunc = EnReeba_SetupMoveBig;
|
||||||
} else {
|
} else {
|
||||||
this->actionfunc = func_80AE5688;
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void func_80AE5EDC(EnReeba* this, PlayState* play) {
|
void EnReeba_CheckDamage(EnReeba* this, PlayState* play) {
|
||||||
if (this->collider.base.acFlags & AC_HIT) {
|
if (this->collider.base.acFlags & AC_HIT) {
|
||||||
this->collider.base.acFlags &= ~AC_HIT;
|
this->collider.base.acFlags &= ~AC_HIT;
|
||||||
|
|
||||||
if ((this->actionfunc != func_80AE5C38) && (this->actionfunc != func_80AE5854)) {
|
if ((this->actionfunc != EnReeba_Die) && (this->actionfunc != EnReeba_Damaged)) {
|
||||||
this->actor.shape.rot.x = this->actor.shape.rot.z = 0;
|
this->actor.shape.rot.x = this->actor.shape.rot.z = 0;
|
||||||
this->unk_27E = 0;
|
this->stunType = LEEVER_STUN_NONE;
|
||||||
|
|
||||||
switch (this->actor.colChkInfo.damageEffect) {
|
switch (this->actor.colChkInfo.damageEffect) {
|
||||||
case 11: // none
|
|
||||||
case 12: // boomerang
|
case LEEVER_DMGEFF_UNUSED:
|
||||||
if ((this->actor.colChkInfo.health > 1) && (this->unk_27E != 4)) {
|
case LEEVER_DMGEFF_BOOMERANG:
|
||||||
this->unk_27E = 4;
|
if ((this->actor.colChkInfo.health > 1) && (this->stunType != LEEVER_STUN_OTHER)) {
|
||||||
|
this->stunType = LEEVER_STUN_OTHER;
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_JR_FREEZE);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_JR_FREEZE);
|
||||||
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
|
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
|
||||||
80);
|
80);
|
||||||
this->actionfunc = func_80AE58EC;
|
this->actionfunc = EnReeba_SetupStunned;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
case 13: // hookshot/longshot
|
case LEEVER_DMGEFF_HOOKSHOT:
|
||||||
if ((this->actor.colChkInfo.health > 2) && (this->unk_27E != 4)) {
|
if ((this->actor.colChkInfo.health > 2) && (this->stunType != LEEVER_STUN_OTHER)) {
|
||||||
this->unk_27E = 4;
|
this->stunType = LEEVER_STUN_OTHER;
|
||||||
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
|
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
|
||||||
80);
|
80);
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_JR_FREEZE);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_GOMA_JR_FREEZE);
|
||||||
this->actionfunc = func_80AE58EC;
|
this->actionfunc = EnReeba_SetupStunned;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
case 14:
|
case LEEVER_DMGEFF_OTHER:
|
||||||
this->unk_27C = 6;
|
this->unkDamageField = 6;
|
||||||
Actor_ApplyDamage(&this->actor);
|
Actor_ApplyDamage(&this->actor);
|
||||||
if (this->actor.colChkInfo.health == 0) {
|
if (this->actor.colChkInfo.health == 0) {
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DEAD);
|
||||||
Enemy_StartFinishingBlow(play, &this->actor);
|
Enemy_StartFinishingBlow(play, &this->actor);
|
||||||
this->actionfunc = func_80AE5BC4;
|
this->actionfunc = EnReeba_SetupDie;
|
||||||
} else {
|
} else {
|
||||||
if (this->actionfunc == func_80AE5E48) {
|
if (this->actionfunc == EnReeba_StunRecover) {
|
||||||
this->actor.shape.rot.x = this->actor.shape.rot.z = 0;
|
this->actor.shape.rot.x = this->actor.shape.rot.z = 0;
|
||||||
}
|
}
|
||||||
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DAMAGE);
|
Actor_PlaySfx(&this->actor, NA_SE_EN_RIVA_DAMAGE);
|
||||||
this->actionfunc = func_80AE57F0;
|
this->actionfunc = EnReeba_SetupDamaged;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // ice arrows/ice magic
|
|
||||||
|
case LEEVER_DMGEFF_ICE:
|
||||||
Actor_ApplyDamage(&this->actor);
|
Actor_ApplyDamage(&this->actor);
|
||||||
this->unk_27C = 2;
|
this->unkDamageField = 2;
|
||||||
this->unk_27E = 2;
|
this->stunType = LEEVER_STUN_ICE;
|
||||||
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 80);
|
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA, 80);
|
||||||
this->actionfunc = func_80AE58EC;
|
this->actionfunc = EnReeba_SetupStunned;
|
||||||
break;
|
break;
|
||||||
case 1: // unknown
|
|
||||||
if (this->unk_27E != 4) {
|
case LEEVER_DMGEFF_UNK:
|
||||||
this->unk_27E = 4;
|
if (this->stunType != LEEVER_STUN_OTHER) {
|
||||||
|
this->stunType = LEEVER_STUN_OTHER;
|
||||||
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
|
Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_OPA,
|
||||||
80);
|
80);
|
||||||
this->actionfunc = func_80AE58EC;
|
this->actionfunc = EnReeba_SetupStunned;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -584,28 +602,28 @@ void EnReeba_Update(Actor* thisx, PlayState* play2) {
|
||||||
EnReeba* this = (EnReeba*)thisx;
|
EnReeba* this = (EnReeba*)thisx;
|
||||||
Player* player = GET_PLAYER(play);
|
Player* player = GET_PLAYER(play);
|
||||||
|
|
||||||
func_80AE5EDC(this, play);
|
EnReeba_CheckDamage(this, play);
|
||||||
this->actionfunc(this, play);
|
this->actionfunc(this, play);
|
||||||
Actor_SetScale(&this->actor, this->scale);
|
Actor_SetScale(&this->actor, this->scale);
|
||||||
|
|
||||||
if (this->unk_270 != 0) {
|
if (this->bigLeeverTimer != 0) {
|
||||||
this->unk_270--;
|
this->bigLeeverTimer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->unk_272 != 0) {
|
if (this->moveTimer != 0) {
|
||||||
this->unk_272--;
|
this->moveTimer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->unk_278 != 0) {
|
if (this->waitTimer != 0) {
|
||||||
this->unk_278--;
|
this->waitTimer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->unk_274 != 0) {
|
if (this->sfxTimer != 0) {
|
||||||
this->unk_274--;
|
this->sfxTimer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->unk_276 != 0) {
|
if (this->damagedTimer != 0) {
|
||||||
this->unk_276--;
|
this->damagedTimer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
Actor_MoveForward(&this->actor);
|
Actor_MoveForward(&this->actor);
|
||||||
|
@ -616,25 +634,26 @@ void EnReeba_Update(Actor* thisx, PlayState* play2) {
|
||||||
if (this->collider.base.atFlags & AT_BOUNCED) {
|
if (this->collider.base.atFlags & AT_BOUNCED) {
|
||||||
this->collider.base.atFlags &= ~AT_BOUNCED;
|
this->collider.base.atFlags &= ~AT_BOUNCED;
|
||||||
|
|
||||||
if ((this->actionfunc == func_80AE5270) || (this->actionfunc == func_80AE53AC)) {
|
if ((this->actionfunc == EnReeba_Move) || (this->actionfunc == EnReeba_MoveBig)) {
|
||||||
this->actor.speedXZ = 8.0f;
|
this->actor.speedXZ = 8.0f;
|
||||||
this->actor.world.rot.y *= -1.0f;
|
this->actor.world.rot.y *= -1.0f;
|
||||||
this->unk_272 = 14;
|
this->moveTimer = 14;
|
||||||
this->actionfunc = func_80AE561C;
|
this->actionfunc = EnReeba_Bumped;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->collider.base.atFlags & AT_HIT) {
|
if (this->collider.base.atFlags & AT_HIT) {
|
||||||
this->collider.base.atFlags &= ~AT_HIT;
|
this->collider.base.atFlags &= ~AT_HIT;
|
||||||
if ((this->collider.base.at == &player->actor) && !this->isBig && (this->actionfunc != func_80AE56E0)) {
|
if ((this->collider.base.at == &player->actor) && this->type == LEEVER_TYPE_SMALL &&
|
||||||
this->actionfunc = func_80AE5688;
|
(this->actionfunc != EnReeba_Sink)) {
|
||||||
|
this->actionfunc = EnReeba_SetupSink;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->actor.focus.pos = this->actor.world.pos;
|
this->actor.focus.pos = this->actor.world.pos;
|
||||||
|
|
||||||
if (!this->isBig) {
|
if (this->type == LEEVER_TYPE_SMALL) {
|
||||||
this->actor.focus.pos.y += 15.0f;
|
this->actor.focus.pos.y += 15.0f;
|
||||||
} else {
|
} else {
|
||||||
this->actor.focus.pos.y += 30.0f;
|
this->actor.focus.pos.y += 30.0f;
|
||||||
|
@ -643,13 +662,13 @@ void EnReeba_Update(Actor* thisx, PlayState* play2) {
|
||||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||||
|
|
||||||
if ((this->actor.shape.yOffset >= -700.0f) && (this->actor.colChkInfo.health > 0) &&
|
if ((this->actor.shape.yOffset >= -700.0f) && (this->actor.colChkInfo.health > 0) &&
|
||||||
(this->actionfunc != func_80AE56E0)) {
|
(this->actionfunc != EnReeba_Sink)) {
|
||||||
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
|
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
|
||||||
|
|
||||||
if (!(this->actor.shape.yOffset < 0.0f)) {
|
if (!(this->actor.shape.yOffset < 0.0f)) {
|
||||||
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
|
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
|
||||||
|
|
||||||
if ((this->actionfunc == func_80AE5270) || (this->actionfunc == func_80AE53AC)) {
|
if ((this->actionfunc == EnReeba_Move) || (this->actionfunc == EnReeba_MoveBig)) {
|
||||||
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
|
CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -664,7 +683,7 @@ void EnReeba_Draw(Actor* thisx, PlayState* play) {
|
||||||
|
|
||||||
Gfx_SetupDL_25Opa(play->state.gfxCtx);
|
Gfx_SetupDL_25Opa(play->state.gfxCtx);
|
||||||
|
|
||||||
if (this->isBig) {
|
if (this->type != LEEVER_TYPE_SMALL) {
|
||||||
gDPSetPrimColor(POLY_OPA_DISP++, 0x0, 0x01, 155, 55, 255, 255);
|
gDPSetPrimColor(POLY_OPA_DISP++, 0x0, 0x01, 155, 55, 255, 255);
|
||||||
} else {
|
} else {
|
||||||
gDPSetPrimColor(POLY_OPA_DISP++, 0x0, 0x01, 255, 255, 255, 255);
|
gDPSetPrimColor(POLY_OPA_DISP++, 0x0, 0x01, 255, 255, 255, 255);
|
||||||
|
|
|
@ -15,24 +15,28 @@ typedef struct EnReeba {
|
||||||
/* 0x01FC */ Vec3s morphTable[18];
|
/* 0x01FC */ Vec3s morphTable[18];
|
||||||
/* 0x0268 */ char unk_268[0x4];
|
/* 0x0268 */ char unk_268[0x4];
|
||||||
/* 0x026C */ EnReebaActionFunc actionfunc;
|
/* 0x026C */ EnReebaActionFunc actionfunc;
|
||||||
/* 0x0270 */ s16 unk_270;
|
/* 0x0270 */ s16 bigLeeverTimer; // big Leever uses to close and make distance from Link.
|
||||||
/* 0x0272 */ s16 unk_272;
|
/* 0x0272 */ s16 moveTimer;
|
||||||
/* 0x0274 */ s16 unk_274;
|
/* 0x0274 */ s16 sfxTimer; // delay between moving sfx. 2x if big Leever.
|
||||||
/* 0x0276 */ s16 unk_276;
|
/* 0x0276 */ s16 damagedTimer;
|
||||||
/* 0x0278 */ s16 unk_278;
|
/* 0x0278 */ s16 waitTimer;
|
||||||
/* 0x027A */ s16 isBig;
|
/* 0x027A */ s16 type;
|
||||||
/* 0x027C */ s16 unk_27C;
|
/* 0x027C */ s16 unkDamageField; // set when hit with ice and most other weapons. Never read.
|
||||||
/* 0x027E */ s16 unk_27E;
|
/* 0x027E */ s16 stunType;
|
||||||
/* 0x0280 */ s16 unk_280;
|
/* 0x0280 */ s16 aimType; // incremented by the spawner. Dictates rotateY modification
|
||||||
/* 0x0284 */ f32 unk_284;
|
/* 0x0284 */ f32 yOffsetTarget;
|
||||||
/* 0x0288 */ f32 unk_288;
|
/* 0x0288 */ f32 yOffsetStep;
|
||||||
/* 0x028C */ f32 scale;
|
/* 0x028C */ f32 scale;
|
||||||
/* 0x0290 */ ColliderCylinder collider;
|
/* 0x0290 */ ColliderCylinder collider;
|
||||||
} EnReeba; // size = 0x02DC
|
} EnReeba; // size = 0x02DC
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* 0 */ LEEVER_SMALL,
|
/* 0 */ LEEVER_TYPE_SMALL,
|
||||||
/* 1 */ LEEVER_BIG
|
/* 1 */ LEEVER_TYPE_BIG
|
||||||
} LeeverParam;
|
} LeeverType;
|
||||||
|
|
||||||
|
#define LEEVER_STUN_NONE 0
|
||||||
|
#define LEEVER_STUN_ICE 2
|
||||||
|
#define LEEVER_STUN_OTHER 4
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue