mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-07 23:10:22 +00:00
Actor Struct Changes (and a few related things) (#617)
* reformat header * type -> category * done for now i think * some more stuff * first -> head * focus * flag comment * ground -> floor * remove asm, name wrapper funcs * name func, format * review * targetPriority, format * git subrepo pull --force tools/ZAPD subrepo: subdir: "tools/ZAPD" merged: "0305ec2c2" upstream: origin: "https://github.com/zeldaret/ZAPD.git" branch: "master" commit: "0305ec2c2" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * comment * review * feet flags * horse shadow
This commit is contained in:
parent
20206fba0d
commit
00a5edea71
697 changed files with 8157 additions and 7942 deletions
|
@ -22,7 +22,7 @@ void EnOkuta_ProjectileFly(EnOkuta* this, GlobalContext* globalCtx);
|
|||
|
||||
const ActorInit En_Okuta_InitVars = {
|
||||
ACTOR_EN_OKUTA,
|
||||
ACTORTYPE_ENEMY,
|
||||
ACTORCAT_ENEMY,
|
||||
FLAGS,
|
||||
OBJECT_OKUTA,
|
||||
sizeof(EnOkuta),
|
||||
|
@ -120,7 +120,7 @@ static DamageTable sDamageTable = {
|
|||
|
||||
static InitChainEntry sInitChain[] = {
|
||||
ICHAIN_S8(naviEnemyId, 66, ICHAIN_CONTINUE),
|
||||
ICHAIN_F32(unk_4C, 6500, ICHAIN_STOP),
|
||||
ICHAIN_F32(targetArrowOffset, 6500, ICHAIN_STOP),
|
||||
};
|
||||
|
||||
void EnOkuta_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
@ -141,24 +141,24 @@ void EnOkuta_Init(Actor* thisx, GlobalContext* globalCtx) {
|
|||
if ((this->numShots == 0xFF) || (this->numShots == 0)) {
|
||||
this->numShots = 1;
|
||||
}
|
||||
thisx->groundY =
|
||||
BgCheck_EntityRaycastFloor4(&globalCtx->colCtx, &thisx->floorPoly, &sp30, thisx, &thisx->posRot.pos);
|
||||
thisx->floorHeight =
|
||||
BgCheck_EntityRaycastFloor4(&globalCtx->colCtx, &thisx->floorPoly, &sp30, thisx, &thisx->world.pos);
|
||||
//! @bug calls WaterBox_GetSurfaceImpl directly
|
||||
if (!WaterBox_GetSurfaceImpl(globalCtx, &globalCtx->colCtx, thisx->posRot.pos.x, thisx->posRot.pos.z, &ySurface,
|
||||
if (!WaterBox_GetSurfaceImpl(globalCtx, &globalCtx->colCtx, thisx->world.pos.x, thisx->world.pos.z, &ySurface,
|
||||
&outWaterBox) ||
|
||||
(ySurface <= thisx->groundY)) {
|
||||
(ySurface <= thisx->floorHeight)) {
|
||||
Actor_Kill(thisx);
|
||||
} else {
|
||||
thisx->initPosRot.pos.y = ySurface;
|
||||
thisx->home.pos.y = ySurface;
|
||||
}
|
||||
EnOkuta_SetupWaitToAppear(this);
|
||||
} else {
|
||||
ActorShape_Init(&thisx->shape, 1100.0f, ActorShadow_DrawFunc_Circle, 18.0f);
|
||||
ActorShape_Init(&thisx->shape, 1100.0f, ActorShadow_DrawCircle, 18.0f);
|
||||
thisx->flags &= ~1;
|
||||
thisx->flags |= 0x10;
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, thisx, &sProjectileColliderInit);
|
||||
Actor_ChangeType(globalCtx, &globalCtx->actorCtx, thisx, ACTORTYPE_PROP);
|
||||
Actor_ChangeCategory(globalCtx, &globalCtx->actorCtx, thisx, ACTORCAT_PROP);
|
||||
this->timer = 30;
|
||||
thisx->shape.rot.y = 0;
|
||||
this->actionFunc = EnOkuta_ProjectileFly;
|
||||
|
@ -176,7 +176,7 @@ void EnOkuta_SpawnBubbles(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
s32 i;
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
EffectSsBubble_Spawn(globalCtx, &this->actor.posRot.pos, -10.0f, 10.0f, 30.0f, 0.25f);
|
||||
EffectSsBubble_Spawn(globalCtx, &this->actor.world.pos, -10.0f, 10.0f, 30.0f, 0.25f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -189,17 +189,17 @@ void EnOkuta_SpawnDust(Vec3f* pos, Vec3f* velocity, s16 scaleStep, GlobalContext
|
|||
}
|
||||
|
||||
void EnOkuta_SpawnSplash(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
EffectSsGSplash_Spawn(globalCtx, &this->actor.initPosRot.pos, NULL, NULL, 0, 1300);
|
||||
EffectSsGSplash_Spawn(globalCtx, &this->actor.home.pos, NULL, NULL, 0, 1300);
|
||||
}
|
||||
|
||||
void EnOkuta_SpawnRipple(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
Vec3f pos;
|
||||
|
||||
pos.x = this->actor.posRot.pos.x;
|
||||
pos.y = this->actor.initPosRot.pos.y;
|
||||
pos.z = this->actor.posRot.pos.z;
|
||||
pos.x = this->actor.world.pos.x;
|
||||
pos.y = this->actor.home.pos.y;
|
||||
pos.z = this->actor.world.pos.z;
|
||||
if ((globalCtx->gameplayFrames % 7) == 0 &&
|
||||
((this->actionFunc != EnOkuta_Shoot) || ((this->actor.posRot.pos.y - this->actor.initPosRot.pos.y) < 50.0f))) {
|
||||
((this->actionFunc != EnOkuta_Shoot) || ((this->actor.world.pos.y - this->actor.home.pos.y) < 50.0f))) {
|
||||
EffectSsGRipple_Spawn(globalCtx, &pos, 250, 650, 0);
|
||||
}
|
||||
}
|
||||
|
@ -208,12 +208,12 @@ void EnOkuta_SetupWaitToAppear(EnOkuta* this) {
|
|||
this->actor.draw = NULL;
|
||||
this->actor.flags &= ~1;
|
||||
this->actionFunc = EnOkuta_WaitToAppear;
|
||||
this->actor.posRot.pos.y = this->actor.initPosRot.pos.y;
|
||||
this->actor.world.pos.y = this->actor.home.pos.y;
|
||||
}
|
||||
|
||||
void EnOkuta_SetupAppear(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
this->actor.draw = EnOkuta_Draw;
|
||||
this->actor.shape.rot.y = this->actor.yawTowardsLink;
|
||||
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
|
||||
this->actor.flags |= 1;
|
||||
Animation_PlayOnce(&this->skelAnime, &D_06003C64);
|
||||
EnOkuta_SpawnBubbles(this, globalCtx);
|
||||
|
@ -236,7 +236,7 @@ void EnOkuta_SetupShoot(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
if (this->actionFunc != EnOkuta_Shoot) {
|
||||
this->timer = this->numShots;
|
||||
}
|
||||
this->jumpHeight = this->actor.yDistToLink + 20.0f;
|
||||
this->jumpHeight = this->actor.yDistToPlayer + 20.0f;
|
||||
this->jumpHeight = CLAMP_MIN(this->jumpHeight, 10.0f);
|
||||
if (this->jumpHeight > 50.0f) {
|
||||
EnOkuta_SpawnSplash(this, globalCtx);
|
||||
|
@ -274,14 +274,14 @@ void EnOkuta_SpawnProjectile(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
f32 sin = Math_SinS(this->actor.shape.rot.y);
|
||||
f32 cos = Math_CosS(this->actor.shape.rot.y);
|
||||
|
||||
pos.x = this->actor.posRot.pos.x + (25.0f * sin);
|
||||
pos.y = this->actor.posRot.pos.y - 6.0f;
|
||||
pos.z = this->actor.posRot.pos.z + (25.0f * cos);
|
||||
pos.x = this->actor.world.pos.x + (25.0f * sin);
|
||||
pos.y = this->actor.world.pos.y - 6.0f;
|
||||
pos.z = this->actor.world.pos.z + (25.0f * cos);
|
||||
if (Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_OKUTA, pos.x, pos.y, pos.z, this->actor.shape.rot.x,
|
||||
this->actor.shape.rot.y, this->actor.shape.rot.z, 0x10) != NULL) {
|
||||
pos.x = this->actor.posRot.pos.x + (40.0f * sin);
|
||||
pos.z = this->actor.posRot.pos.z + (40.0f * cos);
|
||||
pos.y = this->actor.posRot.pos.y;
|
||||
pos.x = this->actor.world.pos.x + (40.0f * sin);
|
||||
pos.z = this->actor.world.pos.z + (40.0f * cos);
|
||||
pos.y = this->actor.world.pos.y;
|
||||
velocity.x = 1.5f * sin;
|
||||
velocity.y = 0.0f;
|
||||
velocity.z = 1.5f * cos;
|
||||
|
@ -291,8 +291,8 @@ void EnOkuta_SpawnProjectile(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
|
||||
void EnOkuta_WaitToAppear(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
this->actor.posRot.pos.y = this->actor.initPosRot.pos.y;
|
||||
if ((this->actor.xzDistToLink < 480.0f) && (this->actor.xzDistToLink > 200.0f)) {
|
||||
this->actor.world.pos.y = this->actor.home.pos.y;
|
||||
if ((this->actor.xzDistToPlayer < 480.0f) && (this->actor.xzDistToPlayer > 200.0f)) {
|
||||
EnOkuta_SetupAppear(this, globalCtx);
|
||||
}
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ void EnOkuta_Appear(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
s32 pad;
|
||||
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
if (this->actor.xzDistToLink < 160.0f) {
|
||||
if (this->actor.xzDistToPlayer < 160.0f) {
|
||||
EnOkuta_SetupHide(this);
|
||||
} else {
|
||||
EnOkuta_SetupWaitToShoot(this);
|
||||
|
@ -325,7 +325,7 @@ void EnOkuta_Appear(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
void EnOkuta_Hide(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
|
||||
Math_ApproachF(&this->actor.posRot.pos.y, this->actor.initPosRot.pos.y, 0.5f, 30.0f);
|
||||
Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 30.0f);
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_OCTAROCK_BUBLE);
|
||||
EnOkuta_SpawnBubbles(this, globalCtx);
|
||||
|
@ -345,7 +345,7 @@ void EnOkuta_WaitToShoot(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
s16 temp_v0_2;
|
||||
s32 phi_v1;
|
||||
|
||||
this->actor.posRot.pos.y = this->actor.initPosRot.pos.y;
|
||||
this->actor.world.pos.y = this->actor.home.pos.y;
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
if (Animation_OnFrame(&this->skelAnime, 0.0f)) {
|
||||
if (this->timer != 0) {
|
||||
|
@ -355,19 +355,19 @@ void EnOkuta_WaitToShoot(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
if (Animation_OnFrame(&this->skelAnime, 0.5f)) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_OCTAROCK_FLOAT);
|
||||
}
|
||||
if (this->actor.xzDistToLink < 160.0f || this->actor.xzDistToLink > 560.0f) {
|
||||
if (this->actor.xzDistToPlayer < 160.0f || this->actor.xzDistToPlayer > 560.0f) {
|
||||
EnOkuta_SetupHide(this);
|
||||
} else {
|
||||
temp_v0_2 = Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsLink, 3, 0x71C, 0x38E);
|
||||
temp_v0_2 = Math_SmoothStepToS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x71C, 0x38E);
|
||||
phi_v1 = ABS(temp_v0_2);
|
||||
if ((phi_v1 < 0x38E) && (this->timer == 0) && (this->actor.yDistToLink < 200.0f)) {
|
||||
if ((phi_v1 < 0x38E) && (this->timer == 0) && (this->actor.yDistToPlayer < 200.0f)) {
|
||||
EnOkuta_SetupShoot(this, globalCtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnOkuta_Shoot(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsLink, 3, 0x71C);
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 3, 0x71C);
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
if (this->timer != 0) {
|
||||
this->timer--;
|
||||
|
@ -381,8 +381,7 @@ void EnOkuta_Shoot(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
f32 curFrame = this->skelAnime.curFrame;
|
||||
|
||||
if (curFrame < 13.0f) {
|
||||
this->actor.posRot.pos.y =
|
||||
(sinf((0.08333f * M_PI) * curFrame) * this->jumpHeight) + this->actor.initPosRot.pos.y;
|
||||
this->actor.world.pos.y = (sinf((0.08333f * M_PI) * curFrame) * this->jumpHeight) + this->actor.home.pos.y;
|
||||
}
|
||||
if (Animation_OnFrame(&this->skelAnime, 6.0f)) {
|
||||
EnOkuta_SpawnProjectile(this, globalCtx);
|
||||
|
@ -394,7 +393,7 @@ void EnOkuta_Shoot(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_OCTAROCK_LAND);
|
||||
}
|
||||
}
|
||||
if (this->actor.xzDistToLink < 160.0f) {
|
||||
if (this->actor.xzDistToPlayer < 160.0f) {
|
||||
EnOkuta_SetupHide(this);
|
||||
}
|
||||
}
|
||||
|
@ -403,7 +402,7 @@ void EnOkuta_WaitToDie(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
EnOkuta_SetupDie(this);
|
||||
}
|
||||
Math_ApproachF(&this->actor.posRot.pos.y, this->actor.initPosRot.pos.y, 0.5f, 5.0f);
|
||||
Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 5.0f);
|
||||
}
|
||||
|
||||
void EnOkuta_Die(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
|
@ -417,11 +416,11 @@ void EnOkuta_Die(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
this->timer++;
|
||||
}
|
||||
Math_ApproachF(&this->actor.posRot.pos.y, this->actor.initPosRot.pos.y, 0.5f, 5.0f);
|
||||
Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 5.0f);
|
||||
if (this->timer == 5) {
|
||||
pos.x = this->actor.posRot.pos.x;
|
||||
pos.y = this->actor.posRot.pos.y + 40.0f;
|
||||
pos.z = this->actor.posRot.pos.z;
|
||||
pos.x = this->actor.world.pos.x;
|
||||
pos.y = this->actor.world.pos.y + 40.0f;
|
||||
pos.z = this->actor.world.pos.z;
|
||||
velocity.x = 0.0f;
|
||||
velocity.y = -0.5f;
|
||||
velocity.z = 0.0f;
|
||||
|
@ -440,13 +439,13 @@ void EnOkuta_Die(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
Actor_SetScale(&this->actor, (((this->timer - 5) * 0.04f) + 0.8f) * 0.01f);
|
||||
} else {
|
||||
if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.0005f)) {
|
||||
Audio_PlaySoundAtPosition(globalCtx, &this->actor.posRot.pos, 30, NA_SE_EN_OCTAROCK_BUBLE);
|
||||
Item_DropCollectibleRandom(globalCtx, &this->actor, &this->actor.posRot.pos, 0x70);
|
||||
Audio_PlaySoundAtPosition(globalCtx, &this->actor.world.pos, 30, NA_SE_EN_OCTAROCK_BUBLE);
|
||||
Item_DropCollectibleRandom(globalCtx, &this->actor, &this->actor.world.pos, 0x70);
|
||||
for (i = 0; i < 20; i++) {
|
||||
velocity.x = (Rand_ZeroOne() - 0.5f) * 7.0f;
|
||||
velocity.y = Rand_ZeroOne() * 7.0f;
|
||||
velocity.z = (Rand_ZeroOne() - 0.5f) * 7.0f;
|
||||
EffectSsDtBubble_SpawnCustomColor(globalCtx, &this->actor.posRot.pos, &velocity, &accel, &primColor,
|
||||
EffectSsDtBubble_SpawnCustomColor(globalCtx, &this->actor.world.pos, &velocity, &accel, &primColor,
|
||||
&envColor, Rand_S16Offset(100, 50), 25, 0);
|
||||
}
|
||||
Actor_Kill(&this->actor);
|
||||
|
@ -467,13 +466,13 @@ void EnOkuta_Freeze(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
if ((this->timer >= 64) && (this->timer & 1)) {
|
||||
temp_v1 = (this->timer - 64) >> 1;
|
||||
pos.y = (this->actor.posRot.pos.y - 32.0f) + (8.0f * (8 - temp_v1));
|
||||
pos.x = this->actor.posRot.pos.x + ((temp_v1 & 2) ? 10.0f : -10.0f);
|
||||
pos.z = this->actor.posRot.pos.z + ((temp_v1 & 1) ? 10.0f : -10.0f);
|
||||
pos.y = (this->actor.world.pos.y - 32.0f) + (8.0f * (8 - temp_v1));
|
||||
pos.x = this->actor.world.pos.x + ((temp_v1 & 2) ? 10.0f : -10.0f);
|
||||
pos.z = this->actor.world.pos.z + ((temp_v1 & 1) ? 10.0f : -10.0f);
|
||||
EffectSsEnIce_SpawnFlyingVec3f(globalCtx, &this->actor, &pos, 150, 150, 150, 250, 235, 245, 255,
|
||||
(Rand_ZeroOne() * 0.2f) + 1.9f);
|
||||
}
|
||||
Math_ApproachF(&this->actor.posRot.pos.y, this->actor.initPosRot.pos.y, 0.5f, 5.0f);
|
||||
Math_ApproachF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.5f, 5.0f);
|
||||
}
|
||||
|
||||
void EnOkuta_ProjectileFly(EnOkuta* this, GlobalContext* globalCtx) {
|
||||
|
@ -485,7 +484,7 @@ void EnOkuta_ProjectileFly(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
if (this->timer == 0) {
|
||||
this->actor.gravity = -1.0f;
|
||||
}
|
||||
this->actor.initPosRot.rot.z += 0x1554;
|
||||
this->actor.home.rot.z += 0x1554;
|
||||
if (this->actor.bgCheckFlags & 0x20) {
|
||||
this->actor.gravity = -1.0f;
|
||||
this->actor.speedXZ -= 0.1f;
|
||||
|
@ -493,7 +492,7 @@ void EnOkuta_ProjectileFly(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
}
|
||||
if ((this->actor.bgCheckFlags & 8) || (this->actor.bgCheckFlags & 1) || (this->collider.base.atFlags & AT_HIT) ||
|
||||
this->collider.base.acFlags & AC_HIT || this->collider.base.ocFlags1 & OC1_HIT ||
|
||||
this->actor.groundY == BGCHECK_Y_MIN) {
|
||||
this->actor.floorHeight == BGCHECK_Y_MIN) {
|
||||
if ((player->currentShield == PLAYER_SHIELD_DEKU ||
|
||||
(player->currentShield == PLAYER_SHIELD_HYLIAN && LINK_IS_ADULT)) &&
|
||||
this->collider.base.atFlags & AT_HIT && this->collider.base.atFlags & AT_TYPE_ENEMY &&
|
||||
|
@ -502,14 +501,14 @@ void EnOkuta_ProjectileFly(EnOkuta* this, GlobalContext* globalCtx) {
|
|||
this->collider.base.atFlags |= AT_TYPE_PLAYER;
|
||||
this->collider.info.toucher.dmgFlags = 2;
|
||||
func_800D20CC(&player->shieldMf, &sp40, 0);
|
||||
this->actor.posRot.rot.y = sp40.y + 0x8000;
|
||||
this->actor.world.rot.y = sp40.y + 0x8000;
|
||||
this->timer = 30;
|
||||
} else {
|
||||
pos.x = this->actor.posRot.pos.x;
|
||||
pos.y = this->actor.posRot.pos.y + 11.0f;
|
||||
pos.z = this->actor.posRot.pos.z;
|
||||
pos.x = this->actor.world.pos.x;
|
||||
pos.y = this->actor.world.pos.y + 11.0f;
|
||||
pos.z = this->actor.world.pos.z;
|
||||
EffectSsHahen_SpawnBurst(globalCtx, &pos, 6.0f, 0, 1, 2, 15, 7, 10, D_06003380);
|
||||
Audio_PlaySoundAtPosition(globalCtx, &this->actor.posRot.pos, 20, NA_SE_EN_OCTAROCK_ROCK);
|
||||
Audio_PlaySoundAtPosition(globalCtx, &this->actor.world.pos, 20, NA_SE_EN_OCTAROCK_ROCK);
|
||||
Actor_Kill(&this->actor);
|
||||
}
|
||||
} else if (this->timer == -300) {
|
||||
|
@ -591,15 +590,15 @@ void EnOkuta_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|||
if (!(player->stateFlags1 & 0x300000C0)) {
|
||||
if (this->actor.params == 0) {
|
||||
EnOkuta_ColliderCheck(this, globalCtx2);
|
||||
if (!WaterBox_GetSurfaceImpl(globalCtx2, &globalCtx2->colCtx, this->actor.posRot.pos.x,
|
||||
this->actor.posRot.pos.z, &ySurface, &outWaterBox) ||
|
||||
(ySurface < this->actor.groundY)) {
|
||||
if (!WaterBox_GetSurfaceImpl(globalCtx2, &globalCtx2->colCtx, this->actor.world.pos.x,
|
||||
this->actor.world.pos.z, &ySurface, &outWaterBox) ||
|
||||
(ySurface < this->actor.floorHeight)) {
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
this->actor.initPosRot.pos.y = ySurface;
|
||||
this->actor.home.pos.y = ySurface;
|
||||
}
|
||||
}
|
||||
this->actionFunc(this, globalCtx2);
|
||||
|
@ -611,27 +610,25 @@ void EnOkuta_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|||
} else {
|
||||
sp34 = false;
|
||||
Actor_MoveForward(&this->actor);
|
||||
Math_Vec3f_Copy(&sp38, &this->actor.posRot.pos);
|
||||
func_8002E4B4(globalCtx2, &this->actor, 10.0f, 15.0f, 30.0f, 5);
|
||||
Math_Vec3f_Copy(&sp38, &this->actor.world.pos);
|
||||
Actor_UpdateBgCheckInfo(globalCtx2, &this->actor, 10.0f, 15.0f, 30.0f, 5);
|
||||
if ((this->actor.bgCheckFlags & 8) &&
|
||||
SurfaceType_IsIgnoredByProjectiles(&globalCtx2->colCtx, this->actor.wallPoly,
|
||||
this->actor.wallPolySource)) {
|
||||
SurfaceType_IsIgnoredByProjectiles(&globalCtx2->colCtx, this->actor.wallPoly, this->actor.wallBgId)) {
|
||||
sp34 = true;
|
||||
this->actor.bgCheckFlags &= ~8;
|
||||
}
|
||||
if ((this->actor.bgCheckFlags & 1) &&
|
||||
SurfaceType_IsIgnoredByProjectiles(&globalCtx2->colCtx, this->actor.floorPoly,
|
||||
this->actor.floorPolySource)) {
|
||||
SurfaceType_IsIgnoredByProjectiles(&globalCtx2->colCtx, this->actor.floorPoly, this->actor.floorBgId)) {
|
||||
sp34 = true;
|
||||
this->actor.bgCheckFlags &= ~1;
|
||||
}
|
||||
if (sp34 && !(this->actor.bgCheckFlags & 9)) {
|
||||
Math_Vec3f_Copy(&this->actor.posRot.pos, &sp38);
|
||||
Math_Vec3f_Copy(&this->actor.world.pos, &sp38);
|
||||
}
|
||||
}
|
||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||
if ((this->actionFunc == EnOkuta_Appear) || (this->actionFunc == EnOkuta_Hide)) {
|
||||
this->collider.dim.pos.y = this->actor.posRot.pos.y + (this->skelAnime.jointTable->y * this->actor.scale.y);
|
||||
this->collider.dim.pos.y = this->actor.world.pos.y + (this->skelAnime.jointTable->y * this->actor.scale.y);
|
||||
this->collider.dim.radius = sOctorockColliderInit.dim.radius * this->actor.scale.x * 100.0f;
|
||||
}
|
||||
if (this->actor.params == 0x10) {
|
||||
|
@ -645,7 +642,7 @@ void EnOkuta_Update(Actor* thisx, GlobalContext* globalCtx) {
|
|||
}
|
||||
CollisionCheck_SetOC(globalCtx2, &globalCtx2->colChkCtx, &this->collider.base);
|
||||
}
|
||||
Actor_SetHeight(&this->actor, 15.0f);
|
||||
Actor_SetFocus(&this->actor, 15.0f);
|
||||
if ((this->actor.params == 0) && (this->actor.draw != NULL)) {
|
||||
EnOkuta_SpawnRipple(this, globalCtx2);
|
||||
}
|
||||
|
@ -725,7 +722,7 @@ void EnOkuta_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
|||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_okuta.c", 1653);
|
||||
|
||||
Matrix_Mult(&globalCtx->mf_11DA0, MTXMODE_APPLY);
|
||||
Matrix_RotateZ(this->actor.initPosRot.rot.z * (M_PI / 0x8000), MTXMODE_APPLY);
|
||||
Matrix_RotateZ(this->actor.home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY);
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_en_okuta.c", 1657),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, D_06003380);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue