mirror of
https://github.com/zeldaret/mm.git
synced 2024-11-23 12:59:44 +00:00
Document Actor_DrawDamageEffects
(#645)
* Being documenting `Actor_DrawDamageEffects` and apply to actors * More doc progress * Small cleanup * Document display lists * more cleanup * Fix Typo * PR Review * Shock -> Spark * Missed one * Missed another * Fix dust textures * Remove `_tex` from `light_orb_tex` (so that it matches convention) * electric stun -> electric spark * Fix mistake * Fix float * spark -> sparks where applicable * Missed even more shocks... * Name `drawDmgEffTimer` for consistency * Fix BSS
This commit is contained in:
parent
e7940e3bed
commit
fe32df0e82
@ -903,12 +903,12 @@
|
||||
<DList Name="gameplay_keep_DL_023130" Offset="0x23130" />
|
||||
<DList Name="gOwlStatueWhiteFlashDL" Offset="0x23210" />
|
||||
<DList Name="gameplay_keep_DL_023288" Offset="0x23288" />
|
||||
<DList Name="gameplay_keep_DL_023348" Offset="0x23348" />
|
||||
<DList Name="gameplay_keep_DL_0233B8" Offset="0x233B8" />
|
||||
<DList Name="gameplay_keep_DL_023428" Offset="0x23428" />
|
||||
<DList Name="gameplay_keep_DL_023480" Offset="0x23480" />
|
||||
<DList Name="gameplay_keep_DL_0234F0" Offset="0x234F0" />
|
||||
<Texture Name="gameplay_keep_Tex_023508" OutName="tex_023508" Format="i8" Width="64" Height="64" Offset="0x23508" />
|
||||
<DList Name="gLightOrb1DL" Offset="0x23348" />
|
||||
<DList Name="gLightOrb2DL" Offset="0x233B8" />
|
||||
<DList Name="gLightOrbVtxDL" Offset="0x23428" />
|
||||
<DList Name="gElectricSparkDL" Offset="0x23480" />
|
||||
<DList Name="gElectricSparkVtxDL" Offset="0x234F0" />
|
||||
<Texture Name="gLightOrbTex" OutName="light_orb" Format="i8" Width="64" Height="64" Offset="0x23508" />
|
||||
<Texture Name="gameplay_keep_Tex_024510" OutName="tex_024510" Format="i8" Width="64" Height="32" Offset="0x24510" />
|
||||
<Texture Name="gameplay_keep_Tex_024D10" OutName="tex_024D10" Format="i8" Width="64" Height="32" Offset="0x24D10" />
|
||||
<DList Name="gameplay_keep_DL_025850" Offset="0x25850" />
|
||||
@ -1082,7 +1082,7 @@
|
||||
<Texture Name="gameplay_keep_Tex_0443B0" OutName="tex_0443B0" Format="i8" Width="32" Height="32" Offset="0x443B0" />
|
||||
<Texture Name="gameplay_keep_Tex_0447B0" OutName="tex_0447B0" Format="i8" Width="32" Height="32" Offset="0x447B0" />
|
||||
<Texture Name="gameplay_keep_Tex_044BB0" OutName="tex_044BB0" Format="i8" Width="32" Height="32" Offset="0x44BB0" />
|
||||
<Texture Name="gameplay_keep_Tex_044FB0" OutName="tex_044FB0" Format="i8" Width="32" Height="32" Offset="0x44FB0" />
|
||||
<Texture Name="gFrozenIceTex" OutName="frozen_ice" Format="i8" Width="32" Height="32" Offset="0x44FB0" />
|
||||
<Texture Name="gameplay_keep_Tex_0453B0" OutName="tex_0453B0" Format="i8" Width="32" Height="32" Offset="0x453B0" />
|
||||
<DList Name="gameplay_keep_DL_048DF0" Offset="0x48DF0" />
|
||||
<Texture Name="gameplay_keep_TLUT_04A460" OutName="tlut_04A460" Format="rgba16" Width="16" Height="16" Offset="0x4A460" />
|
||||
@ -1108,13 +1108,13 @@
|
||||
<DList Name="gameplay_keep_DL_04F250" Offset="0x4F250" />
|
||||
<Texture Name="gameplay_keep_Tex_04F2C0" OutName="tex_04F2C0" Format="ia16" Width="32" Height="64" Offset="0x4F2C0" />
|
||||
<DList Name="gameplay_keep_DL_050550" Offset="0x50550" />
|
||||
<DList Name="gameplay_keep_DL_050648" Offset="0x50648" />
|
||||
<DList Name="gameplay_keep_DL_0506E0" Offset="0x506E0" />
|
||||
<DList Name="gFrozenIceDL" Offset="0x50648" />
|
||||
<DList Name="gFrozenIceVtxDL" Offset="0x506E0" />
|
||||
<DList Name="gameplay_keep_DL_050D10" Offset="0x50D10" />
|
||||
<Texture Name="gameplay_keep_Tex_050E80" OutName="tex_050E80" Format="i4" Width="32" Height="32" Offset="0x50E80" />
|
||||
<DList Name="gameplay_keep_DL_0510B0" Offset="0x510B0" />
|
||||
<DList Name="gameplay_keep_DL_051180" Offset="0x51180" />
|
||||
<DList Name="gameplay_keep_DL_051238" Offset="0x51238" />
|
||||
<DList Name="gFrozenSteamDL" Offset="0x51180" />
|
||||
<DList Name="gFrozenSteamVtxDL" Offset="0x51238" />
|
||||
<Animation Name="gameplay_keep_Anim_05140C" Offset="0x5140C" />
|
||||
<DList Name="gameplay_keep_DL_051420" Offset="0x51420" />
|
||||
<DList Name="gameplay_keep_DL_0514C0" Offset="0x514C0" />
|
||||
@ -1405,23 +1405,28 @@
|
||||
<Texture Name="gameplay_keep_Tex_08CEE0" OutName="tex_08CEE0" Format="ci8" Width="32" Height="32" Offset="0x8CEE0" />
|
||||
<Texture Name="gameplay_keep_Tex_08D2E0" OutName="tex_08D2E0" Format="rgba16" Width="8" Height="16" Offset="0x8D2E0" />
|
||||
<Texture Name="gameplay_keep_Tex_08D3E0" OutName="tex_08D3E0" Format="i8" Width="64" Height="32" Offset="0x8D3E0" />
|
||||
<Texture Name="gDust1Tex" OutName="tex_08DBE0" Format="i8" Width="32" Height="32" Offset="0x8DBE0" />
|
||||
<Texture Name="gDust2Tex" OutName="tex_08DFE0" Format="i8" Width="32" Height="32" Offset="0x8DFE0" />
|
||||
<Texture Name="gDust3Tex" OutName="tex_08E3E0" Format="i8" Width="32" Height="32" Offset="0x8E3E0" />
|
||||
<Texture Name="gDust4Tex" OutName="tex_08E7E0" Format="i8" Width="32" Height="32" Offset="0x8E7E0" />
|
||||
<Texture Name="gDust5Tex" OutName="tex_08EBE0" Format="i8" Width="32" Height="32" Offset="0x8EBE0" />
|
||||
<Texture Name="gDust6Tex" OutName="tex_08EFE0" Format="i8" Width="32" Height="32" Offset="0x8EFE0" />
|
||||
<Texture Name="gDust7Tex" OutName="tex_08F3E0" Format="i8" Width="32" Height="32" Offset="0x8F3E0" />
|
||||
<Texture Name="gDust8Tex" OutName="tex_08F7E0" Format="i8" Width="32" Height="32" Offset="0x8F7E0" />
|
||||
|
||||
<!-- Dust Textures -->
|
||||
<Texture Name="gDust1Tex" OutName="dust_1" Format="i8" Width="32" Height="32" Offset="0x8DBE0" />
|
||||
<Texture Name="gDust2Tex" OutName="dust_2" Format="i8" Width="32" Height="32" Offset="0x8DFE0" />
|
||||
<Texture Name="gDust3Tex" OutName="dust_3" Format="i8" Width="32" Height="32" Offset="0x8E3E0" />
|
||||
<Texture Name="gDust4Tex" OutName="dust_4" Format="i8" Width="32" Height="32" Offset="0x8E7E0" />
|
||||
<Texture Name="gDust5Tex" OutName="dust_5" Format="i8" Width="32" Height="32" Offset="0x8EBE0" />
|
||||
<Texture Name="gDust6Tex" OutName="dust_6" Format="i8" Width="32" Height="32" Offset="0x8EFE0" />
|
||||
<Texture Name="gDust7Tex" OutName="dust_7" Format="i8" Width="32" Height="32" Offset="0x8F3E0" />
|
||||
<Texture Name="gDust8Tex" OutName="dust_8" Format="i8" Width="32" Height="32" Offset="0x8F7E0" />
|
||||
|
||||
<Texture Name="gameplay_keep_Tex_08FBE0" OutName="tex_08FBE0" Format="i8" Width="32" Height="64" Offset="0x8FBE0" />
|
||||
<Texture Name="gameplay_keep_Tex_0903E0" OutName="tex_0903E0" Format="i8" Width="32" Height="64" Offset="0x903E0" />
|
||||
<Texture Name="gameplay_keep_Tex_090BE0" OutName="tex_090BE0" Format="i8" Width="32" Height="64" Offset="0x90BE0" />
|
||||
<Texture Name="gameplay_keep_Tex_0913E0" OutName="tex_0913E0" Format="i8" Width="32" Height="64" Offset="0x913E0" />
|
||||
<Texture Name="gameplay_keep_Tex_091BE0" OutName="tex_091BE0" Format="ia8" Width="16" Height="16" Offset="0x91BE0" />
|
||||
<Texture Name="gameplay_keep_Tex_091CE0" OutName="tex_091CE0" Format="ia8" Width="16" Height="16" Offset="0x91CE0" />
|
||||
<Texture Name="gameplay_keep_Tex_091DE0" OutName="tex_091DE0" Format="i4" Width="32" Height="32" Offset="0x91DE0" />
|
||||
<Texture Name="gameplay_keep_Tex_091FE0" OutName="tex_091FE0" Format="i4" Width="32" Height="32" Offset="0x91FE0" />
|
||||
<Texture Name="gameplay_keep_Tex_0921E0" OutName="tex_0921E0" Format="i4" Width="32" Height="32" Offset="0x921E0" />
|
||||
<Texture Name="gameplay_keep_Tex_0923E0" OutName="tex_0923E0" Format="i4" Width="32" Height="32" Offset="0x923E0" />
|
||||
|
||||
<!-- Electric spark textures from Zora-Form attack -->
|
||||
<Texture Name="gElectricSpark1Tex" OutName="electric_spark_1" Format="i4" Width="32" Height="32" Offset="0x91DE0" />
|
||||
<Texture Name="gElectricSpark2Tex" OutName="electric_spark_2" Format="i4" Width="32" Height="32" Offset="0x91FE0" />
|
||||
<Texture Name="gElectricSpark3Tex" OutName="electric_spark_3" Format="i4" Width="32" Height="32" Offset="0x921E0" />
|
||||
<Texture Name="gElectricSpark4Tex" OutName="electric_spark_4" Format="i4" Width="32" Height="32" Offset="0x923E0" />
|
||||
</File>
|
||||
</Root>
|
||||
|
@ -799,7 +799,7 @@ void func_800BE504(Actor* actor, ColliderCylinder* collider);
|
||||
void func_800BE568(Actor* actor, ColliderSphere* collider);
|
||||
void func_800BE5CC(Actor* actor, ColliderJntSph* collider, s32 colliderIndex);
|
||||
s32 func_800BE63C(struct EnBox* chest);
|
||||
void func_800BE680(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s16 arg3, f32 effectScale, f32 steamScale, f32 effectAlpha, u8 mode);
|
||||
void Actor_DrawDamageEffects(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s16 limbPosCount, f32 effectScale, f32 frozenSteamScale, f32 effectAlpha, u8 type);
|
||||
void Actor_SpawnIceEffects(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s32 limbPosCount, s32 effectsPerLimb, f32 scale, f32 scaleRange);
|
||||
|
||||
void ActorOverlayTable_FaultPrint(void* arg0, void* arg1);
|
||||
|
@ -428,7 +428,6 @@ extern Color_RGBA8 actorDefaultHitColor;
|
||||
// extern UNK_TYPE2 D_801AEE4C;
|
||||
extern Gfx D_801AEF88[];
|
||||
extern Gfx D_801AEFA0[];
|
||||
// extern UNK_TYPE1 D_801AEFA8;
|
||||
// extern UNK_TYPE1 D_801AEFB8;
|
||||
// extern UNK_TYPE1 D_801AEFBC;
|
||||
// extern UNK_TYPE1 D_801AEFC0;
|
||||
|
@ -387,6 +387,18 @@ typedef struct ActorContext {
|
||||
/* 0x26C */ Input unk_26C;
|
||||
} ActorContext; // size = 0x284
|
||||
|
||||
typedef enum {
|
||||
/* 00 */ ACTOR_DRAW_DMGEFF_FIRE,
|
||||
/* 01 */ ACTOR_DRAW_DMGEFF_BLUE_FIRE,
|
||||
/* 10 */ ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX = 10,
|
||||
/* 11 */ ACTOR_DRAW_DMGEFF_FROZEN_SFX,
|
||||
/* 20 */ ACTOR_DRAW_DMGEFF_LIGHT_ORBS = 20,
|
||||
/* 21 */ ACTOR_DRAW_DMGEFF_BLUE_LIGHT_ORBS,
|
||||
/* 30 */ ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL = 30,
|
||||
/* 31 */ ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM,
|
||||
/* 32 */ ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE
|
||||
} ActorDrawDamageEffectType;
|
||||
|
||||
typedef enum {
|
||||
/* 0x000 */ ACTOR_PLAYER,
|
||||
/* 0x001 */ ACTOR_EN_TEST,
|
||||
|
@ -4446,39 +4446,42 @@ s32 func_800BE63C(struct EnBox* chest) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TexturePtr D_801AEFA8[] = {
|
||||
gameplay_keep_Tex_091DE0,
|
||||
gameplay_keep_Tex_091FE0,
|
||||
gameplay_keep_Tex_0921E0,
|
||||
gameplay_keep_Tex_0923E0,
|
||||
TexturePtr sElectricSparkTextures[] = {
|
||||
gElectricSpark1Tex,
|
||||
gElectricSpark2Tex,
|
||||
gElectricSpark3Tex,
|
||||
gElectricSpark4Tex,
|
||||
};
|
||||
|
||||
// Draw common damageEffects
|
||||
void func_800BE680(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s16 arg3, f32 effectScale, f32 steamScale,
|
||||
f32 effectAlpha, u8 mode) {
|
||||
/**
|
||||
* Draw common damage effects applied to each limb provided in limbPos
|
||||
*/
|
||||
void Actor_DrawDamageEffects(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s16 limbPosCount, f32 effectScale,
|
||||
f32 frozenSteamScale, f32 effectAlpha, u8 type) {
|
||||
if (effectAlpha > 0.001f) {
|
||||
s32 temp_v1_3;
|
||||
s16 i;
|
||||
MtxF* temp_s3;
|
||||
s32 twoTexScrollParam;
|
||||
s16 limbIndex;
|
||||
MtxF* currentMatrix;
|
||||
f32 alpha;
|
||||
f32 sp124;
|
||||
f32 sp120;
|
||||
f32 sp11C;
|
||||
f32 sp118;
|
||||
Vec3f* limbAux = limbPos;
|
||||
u32 sp110 = globalCtx->gameplayFrames;
|
||||
f32 sp74;
|
||||
f32 frozenScale;
|
||||
f32 lightOrbsScale;
|
||||
f32 electricSparksScale;
|
||||
f32 steamScale;
|
||||
Vec3f* limbPosStart = limbPos;
|
||||
u32 gameplayFrames = globalCtx->gameplayFrames;
|
||||
f32 effectAlphaScaled;
|
||||
|
||||
temp_s3 = Matrix_GetCurrentState();
|
||||
currentMatrix = Matrix_GetCurrentState();
|
||||
|
||||
// Apply sfx along with damage effect
|
||||
if ((actor != NULL) && (effectAlpha > 0.05f) && (globalCtx->gameOverCtx.state == 0)) {
|
||||
if (mode == 0) {
|
||||
if (type == ACTOR_DRAW_DMGEFF_FIRE) {
|
||||
Actor_PlaySfxAtPos(actor, NA_SE_EV_BURN_OUT - SFX_FLAG);
|
||||
} else if (mode == 1) {
|
||||
} else if (type == ACTOR_DRAW_DMGEFF_BLUE_FIRE) {
|
||||
Actor_PlaySfxAtPos(actor, NA_SE_EN_COMMON_EXTINCT_LEV - SFX_FLAG);
|
||||
} else if (mode == 0xB) {
|
||||
} else if (type == ACTOR_DRAW_DMGEFF_FROZEN_SFX) {
|
||||
Actor_PlaySfxAtPos(actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
} else if ((mode == 0x14) || (mode == 0x15)) {
|
||||
} else if ((type == ACTOR_DRAW_DMGEFF_LIGHT_ORBS) || (type == ACTOR_DRAW_DMGEFF_BLUE_LIGHT_ORBS)) {
|
||||
Actor_PlaySfxAtPos(actor, NA_SE_EN_COMMON_DEADLIGHT - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -4487,58 +4490,60 @@ void func_800BE680(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s16
|
||||
|
||||
func_8012C2DC(globalCtx->state.gfxCtx);
|
||||
|
||||
switch (mode) {
|
||||
case 0xA:
|
||||
case 0xB:
|
||||
sp124 = ((KREG(19) * 0.01f) + 2.3f) * effectScale;
|
||||
sp118 = ((KREG(28) * 0.0001f) + 0.035f) * steamScale;
|
||||
switch (type) {
|
||||
case ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX:
|
||||
case ACTOR_DRAW_DMGEFF_FROZEN_SFX:
|
||||
frozenScale = ((KREG(19) * 0.01f) + 2.3f) * effectScale;
|
||||
steamScale = ((KREG(28) * 0.0001f) + 0.035f) * frozenSteamScale;
|
||||
func_800BCC68(limbPos, globalCtx);
|
||||
|
||||
// Setup to draw ice over frozen actor
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, sp110 & 0xFF, 0x20, 0x10, 1, 0,
|
||||
(sp110 * 2) & 0xFF, 0x40, 0x20));
|
||||
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, gameplayFrames & 0xFF, 32, 16, 1, 0,
|
||||
(gameplayFrames * 2) & 0xFF, 64, 32));
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 170, 255, 255, 255);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gFrozenIceDL);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_050648);
|
||||
effectAlphaScaled = effectAlpha * 255.0f;
|
||||
|
||||
sp74 = effectAlpha * 255.0f;
|
||||
for (i = 0; i < arg3; i++) {
|
||||
alpha = i & 3;
|
||||
alpha = sp74 - (30.0f * alpha);
|
||||
if (sp74 < (30.0f * (i & 3))) {
|
||||
// Apply and draw ice over each limb of frozen actor
|
||||
for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
|
||||
alpha = limbIndex & 3;
|
||||
alpha = effectAlphaScaled - (30.0f * alpha);
|
||||
if (effectAlphaScaled < (30.0f * (limbIndex & 3))) {
|
||||
alpha = 0.0f;
|
||||
}
|
||||
if (alpha > 255.0f) {
|
||||
alpha = 255.0f;
|
||||
}
|
||||
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, KREG(20) + 0xC8, KREG(21) + 0xC8, KREG(22) + 0xFF, (u8)alpha);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, KREG(20) + 200, KREG(21) + 200, KREG(22) + 255, (u8)alpha);
|
||||
|
||||
Matrix_InsertTranslation(limbPos->x, limbPos->y, limbPos->z, MTXMODE_NEW);
|
||||
Matrix_Scale(sp124, sp124, sp124, MTXMODE_APPLY);
|
||||
if (i & 1) {
|
||||
Matrix_Scale(frozenScale, frozenScale, frozenScale, MTXMODE_APPLY);
|
||||
|
||||
if (limbIndex & 1) {
|
||||
Matrix_InsertYRotation_f(M_PI, MTXMODE_APPLY);
|
||||
}
|
||||
if (i & 2) {
|
||||
|
||||
if (limbIndex & 2) {
|
||||
Matrix_InsertZRotation_f(M_PI, MTXMODE_APPLY);
|
||||
}
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0506E0);
|
||||
|
||||
limbPos++;
|
||||
gSPDisplayList(POLY_XLU_DISP++, gFrozenIceVtxDL);
|
||||
}
|
||||
|
||||
limbPos = limbAux;
|
||||
limbPos = limbPosStart; // reset limbPos
|
||||
|
||||
// Setup to draw steam over frozen actor
|
||||
|
||||
gDPSetColorDither(POLY_XLU_DISP++, G_CD_BAYER);
|
||||
|
||||
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_PATTERN);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_051180);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamDL);
|
||||
|
||||
alpha = effectAlpha * 100.0f;
|
||||
if (alpha > 100.0f) {
|
||||
@ -4547,158 +4552,165 @@ void func_800BE680(GlobalContext* globalCtx, Actor* actor, Vec3f limbPos[], s16
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, (u8)alpha);
|
||||
|
||||
for (i = 0; i < arg3; i++) {
|
||||
temp_v1_3 = ((i * 3) + sp110);
|
||||
// Apply and draw steam over each limb of frozen actor
|
||||
for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
|
||||
twoTexScrollParam = ((limbIndex * 3) + gameplayFrames);
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, temp_v1_3 * 3, temp_v1_3 * -0xC, 0x20, 0x40,
|
||||
1, 0, 0, 0x20, 0x20));
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, twoTexScrollParam * 3,
|
||||
twoTexScrollParam * -12, 32, 64, 1, 0, 0, 32, 32));
|
||||
|
||||
Matrix_InsertTranslation(limbPos->x, limbPos->y, limbPos->z, MTXMODE_NEW);
|
||||
Matrix_NormalizeXYZ(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale(sp118, sp118, 1.0f, MTXMODE_APPLY);
|
||||
Matrix_Scale(steamScale, steamScale, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_051238);
|
||||
|
||||
limbPos++;
|
||||
gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamVtxDL);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x0:
|
||||
case 0x1:
|
||||
if (mode == 0) {
|
||||
case ACTOR_DRAW_DMGEFF_FIRE:
|
||||
case ACTOR_DRAW_DMGEFF_BLUE_FIRE:
|
||||
if (type == ACTOR_DRAW_DMGEFF_FIRE) {
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 10, 0, 0);
|
||||
} else {
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 255, 255, 0);
|
||||
mode = 0xFF;
|
||||
// Reuse type for blue primitive color
|
||||
type = 255;
|
||||
}
|
||||
|
||||
Matrix_SetCurrentState(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale((effectScale * 0.005f) * 1.35f, (effectScale * 0.005f), (effectScale * 0.005f) * 1.35f,
|
||||
MTXMODE_APPLY);
|
||||
|
||||
sp74 = effectAlpha * 255.0f;
|
||||
effectAlphaScaled = effectAlpha * 255.0f;
|
||||
|
||||
for (i = 0; i < arg3; i++) {
|
||||
alpha = i & 3;
|
||||
alpha = sp74 - 30.0f * alpha;
|
||||
if (sp74 < 30.0f * (i & 3)) {
|
||||
// Apply and draw fire on every limb
|
||||
for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
|
||||
alpha = limbIndex & 3;
|
||||
alpha = effectAlphaScaled - 30.0f * alpha;
|
||||
if (effectAlphaScaled < 30.0f * (limbIndex & 3)) {
|
||||
alpha = 0.0f;
|
||||
}
|
||||
if (alpha > 255.0f) {
|
||||
alpha = 255.0f;
|
||||
}
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, mode, (u8)alpha);
|
||||
// Use type for blue primitive color
|
||||
// = 0 for ACTOR_DRAW_DMGEFF_FIRE
|
||||
// = 255 for ACTOR_DRAW_DMGEFF_BLUE_FIRE
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 255, type, (u8)alpha);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 0x20, 0x40, 1, 0,
|
||||
((i * 10 + sp110) * -0x14) & 0x1FF, 0x20, 0x80));
|
||||
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0,
|
||||
((limbIndex * 10 + gameplayFrames) * -20) & 0x1FF, 32, 128));
|
||||
|
||||
Matrix_InsertYRotation_f(M_PI, MTXMODE_APPLY);
|
||||
temp_s3->mf[3][0] = limbPos->x;
|
||||
temp_s3->mf[3][1] = limbPos->y;
|
||||
temp_s3->mf[3][2] = limbPos->z;
|
||||
currentMatrix->mf[3][0] = limbPos->x;
|
||||
currentMatrix->mf[3][1] = limbPos->y;
|
||||
currentMatrix->mf[3][2] = limbPos->z;
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gGameplayKeepDrawFlameDL);
|
||||
|
||||
limbPos++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x14:
|
||||
case 0x15:
|
||||
sp120 = ((KREG(19) * 0.01f) + 4.0f) * effectScale;
|
||||
case ACTOR_DRAW_DMGEFF_LIGHT_ORBS:
|
||||
case ACTOR_DRAW_DMGEFF_BLUE_LIGHT_ORBS:
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023348);
|
||||
// Setup to draw light orbs on actor
|
||||
|
||||
lightOrbsScale = ((KREG(19) * 0.01f) + 4.0f) * effectScale;
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
|
||||
|
||||
alpha = effectAlpha * 255.0f;
|
||||
if (alpha > 255.0f) {
|
||||
alpha = 255.0f;
|
||||
}
|
||||
|
||||
if (mode == 0x15) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (u8)(sREG(16) + 0xFF), (u8)(sREG(17) + 0xFF),
|
||||
(u8)(sREG(18) + 0xFF), (u8)alpha);
|
||||
if (type == ACTOR_DRAW_DMGEFF_BLUE_LIGHT_ORBS) {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (u8)(sREG(16) + 255), (u8)(sREG(17) + 255),
|
||||
(u8)(sREG(18) + 255), (u8)alpha);
|
||||
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, (u8)sREG(19), (u8)(sREG(20) + 0xFF), (u8)(sREG(21) + 0xFF), 0x80);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, (u8)sREG(19), (u8)(sREG(20) + 255), (u8)(sREG(21) + 255), 128);
|
||||
} else {
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 200, (u8)alpha);
|
||||
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 100, 128);
|
||||
}
|
||||
Matrix_SetCurrentState(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale(sp120, sp120, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
for (i = 0; i < arg3; i++) {
|
||||
Matrix_SetCurrentState(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale(lightOrbsScale, lightOrbsScale, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
// Apply and draw a light orb over each limb of frozen actor
|
||||
for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
|
||||
Matrix_InsertZRotation_f(randPlusMinusPoint5Scaled(2 * M_PI), MTXMODE_APPLY);
|
||||
temp_s3->mf[3][0] = limbPos->x;
|
||||
temp_s3->mf[3][1] = limbPos->y;
|
||||
temp_s3->mf[3][2] = limbPos->z;
|
||||
currentMatrix->mf[3][0] = limbPos->x;
|
||||
currentMatrix->mf[3][1] = limbPos->y;
|
||||
currentMatrix->mf[3][2] = limbPos->z;
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023428);
|
||||
|
||||
limbPos++;
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x1E:
|
||||
case 0x1F:
|
||||
case 0x20:
|
||||
if (mode == 0x1E) {
|
||||
sp11C = (KREG(19) * 0.01f + 1.0f) * effectScale;
|
||||
} else if (mode == 0x1F) {
|
||||
sp11C = (KREG(19) * 0.01f + 1.5f) * effectScale;
|
||||
case ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL:
|
||||
case ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM:
|
||||
case ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE:
|
||||
if (type == ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL) {
|
||||
electricSparksScale = (KREG(19) * 0.01f + 1.0f) * effectScale;
|
||||
} else if (type == ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM) {
|
||||
electricSparksScale = (KREG(19) * 0.01f + 1.5f) * effectScale;
|
||||
} else {
|
||||
sp11C = (KREG(19) * 0.01f + 2.0f) * effectScale;
|
||||
electricSparksScale = (KREG(19) * 0.01f + 2.0f) * effectScale;
|
||||
}
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_801AEFA8[globalCtx->gameplayFrames & 3]));
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
Lib_SegmentedToVirtual(sElectricSparkTextures[globalCtx->gameplayFrames % 4]));
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023480);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gElectricSparkDL);
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (u8)(sREG(16) + 0xFF), (u8)(sREG(17) + 0xFF),
|
||||
(u8)(sREG(18) + 0x96), (u8)(sREG(19) + 0xFF));
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, (u8)(sREG(16) + 255), (u8)(sREG(17) + 255), (u8)(sREG(18) + 150),
|
||||
(u8)(sREG(19) + 255));
|
||||
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, (u8)(sREG(20) + 0xFF), (u8)(sREG(21) + 0xFF), (u8)sREG(22),
|
||||
(u8)sREG(23));
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, (u8)(sREG(20) + 255), (u8)(sREG(21) + 255), (u8)sREG(22), (u8)sREG(23));
|
||||
|
||||
Matrix_SetCurrentState(&globalCtx->billboardMtxF);
|
||||
Matrix_Scale(sp11C, sp11C, sp11C, MTXMODE_APPLY);
|
||||
Matrix_Scale(electricSparksScale, electricSparksScale, electricSparksScale, MTXMODE_APPLY);
|
||||
|
||||
for (i = 0; i < arg3; i++) {
|
||||
// Every limb draws two electric sparks at random orientations
|
||||
for (limbIndex = 0; limbIndex < limbPosCount; limbIndex++, limbPos++) {
|
||||
// first electric spark
|
||||
Matrix_RotateStateAroundXAxis(Rand_ZeroFloat(2 * M_PI));
|
||||
Matrix_InsertZRotation_f(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
|
||||
temp_s3->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x;
|
||||
temp_s3->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y;
|
||||
temp_s3->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z;
|
||||
currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x;
|
||||
currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y;
|
||||
currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z;
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0234F0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gElectricSparkVtxDL);
|
||||
|
||||
// second electric spark
|
||||
Matrix_RotateStateAroundXAxis(Rand_ZeroFloat(2 * M_PI));
|
||||
Matrix_InsertZRotation_f(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
|
||||
temp_s3->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x;
|
||||
temp_s3->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y;
|
||||
temp_s3->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z;
|
||||
currentMatrix->mf[3][0] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->x;
|
||||
currentMatrix->mf[3][1] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->y;
|
||||
currentMatrix->mf[3][2] = randPlusMinusPoint5Scaled((f32)sREG(24) + 30.0f) + limbPos->z;
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0234F0);
|
||||
|
||||
limbPos++;
|
||||
gSPDisplayList(POLY_XLU_DISP++, gElectricSparkVtxDL);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "interface/parameter_static/parameter_static.h"
|
||||
#include "prevent_bss_reordering.h"
|
||||
|
||||
static s16 sHeartsPrimColors[3][3] = { { 255, 70, 50 }, { 255, 190, 0 }, { 100, 100, 255 } };
|
||||
static s16 sHeartsEnvColors[3][3] = { { 50, 40, 60 }, { 255, 0, 0 }, { 0, 0, 255 } };
|
||||
|
@ -1591,7 +1591,7 @@ void func_809DD2F8(GlobalContext* globalCtx) {
|
||||
for (i = 0, flag = false; i < ARRAY_COUNT(D_809E0438); i++, effect++) {
|
||||
if (effect->unk_24 == 4) {
|
||||
if (!flag) { //! @bug - dev forgot to set flag to 1, should only apply to first entry?
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023348);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 128);
|
||||
}
|
||||
|
||||
@ -1603,7 +1603,7 @@ void func_809DD2F8(GlobalContext* globalCtx) {
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023428);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -642,7 +642,7 @@ void Boss06_Draw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
this->actor.world.pos.y + 84.0f + this->unk_1B4,
|
||||
(this->actor.world.pos.z - 2.0f) + spE0, MTXMODE_NEW);
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023348);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrb1DL);
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)((140.0f * sp68) + 115.0f), temp_s2);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 205, (u8)((100.0f * sp68) + 65.0f), 128);
|
||||
|
||||
@ -650,7 +650,7 @@ void Boss06_Draw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
Matrix_InsertZRotation_s(globalCtx->gameplayFrames * 64, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023428);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
@ -655,7 +655,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
break;
|
||||
}
|
||||
|
||||
gSPDisplayList(POLY_XLU_DISP++, &gameplay_keep_DL_023348);
|
||||
gSPDisplayList(POLY_XLU_DISP++, &gLightOrb1DL);
|
||||
|
||||
Matrix_InsertMatrix(&globalCtx->billboardMtxF, MTXMODE_APPLY);
|
||||
|
||||
@ -667,7 +667,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
if (this->actor.params == DEMO_KANKYO_TYPE_GIANTS) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_bubble_DL_001000);
|
||||
} else {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_023428);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrbVtxDL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -477,8 +477,8 @@ s32 EnAm_UpdateDamage(EnAm* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
this->enemyCollider.base.atFlags &= ~AT_HIT;
|
||||
if (this->actor.colChkInfo.damageEffect == 0x4) {
|
||||
this->effectScale = 0.7f;
|
||||
this->effectAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.7f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, this->enemyCollider.info.bumper.hitPos.x,
|
||||
this->enemyCollider.info.bumper.hitPos.y, this->enemyCollider.info.bumper.hitPos.z, 0, 0, 0,
|
||||
CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -521,9 +521,9 @@ void EnAm_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->actor.flags |= ACTOR_FLAG_1000000;
|
||||
CollisionCheck_SetAT(globalCtx, &globalCtx->colChkCtx, &this->enemyCollider.base);
|
||||
}
|
||||
Math_StepToF(&this->effectAlpha, 0.0f, 0.05f);
|
||||
this->effectScale = (this->effectAlpha + 1.0f) * 0.35f;
|
||||
this->effectScale = (this->effectScale > 0.7f) ? 0.7f : this->effectScale;
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.35f;
|
||||
this->drawDmgEffScale = (this->drawDmgEffScale > 0.7f) ? 0.7f : this->drawDmgEffScale;
|
||||
}
|
||||
|
||||
void EnAm_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
@ -566,6 +566,7 @@ void EnAm_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
POLY_OPA_DISP = &gfx[2];
|
||||
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, NULL, EnAm_PostLimbDraw,
|
||||
&this->actor);
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, 13, this->effectScale, 0.0f, this->effectAlpha, 20);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
0.0f, this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -20,8 +20,8 @@ typedef struct EnAm {
|
||||
/* 0x023A */ s16 unkFlag;
|
||||
/* 0x023C */ s16 armosYaw; // Yaw of Armos
|
||||
/* 0x0240 */ f32 speed; // Hopping speed of Armos
|
||||
/* 0x0244 */ f32 effectAlpha;
|
||||
/* 0x0248 */ f32 effectScale;
|
||||
/* 0x0244 */ f32 drawDmgEffAlpha;
|
||||
/* 0x0248 */ f32 drawDmgEffScale;
|
||||
/* 0x024C */ Vec3f limbPos[13];
|
||||
/* 0x02E8 */ ColliderCylinder enemyCollider; // Collider for when Armos is Hostile
|
||||
/* 0x0334 */ ColliderCylinder interactCollider; // Collider for when an interactable Armos is docile
|
||||
|
@ -43,11 +43,6 @@ const ActorInit En_Bigokuta_InitVars = {
|
||||
(ActorFunc)EnBigokuta_Draw,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
BIGOCTO_DRAWEFFECT_ICE = 10,
|
||||
BIGOCTO_DRAWEFFECT_LIGHT_ORBS = 20,
|
||||
} EnBigokutaDrawEffect;
|
||||
|
||||
static ColliderCylinderInit sShellCylinderInit = {
|
||||
{
|
||||
COLTYPE_HARD,
|
||||
@ -373,8 +368,8 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, GlobalContext* globalCtx) {
|
||||
if (this->timer != 0) {
|
||||
this->timer--;
|
||||
if (this->timer == 0) {
|
||||
this->drawEffect = 0;
|
||||
this->drawEffectAlpha = 0.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
|
||||
EnBigokuta_SetupDeathEffects(this);
|
||||
}
|
||||
@ -388,7 +383,7 @@ void EnBigokuta_PlayDeathCutscene(EnBigokuta* this, GlobalContext* globalCtx) {
|
||||
player->stateFlags1 |= 0x20;
|
||||
}
|
||||
|
||||
if (this->drawEffect == BIGOCTO_DRAWEFFECT_ICE) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->timer = 3;
|
||||
} else {
|
||||
EnBigokuta_SetupDeathEffects(this);
|
||||
@ -466,8 +461,8 @@ void EnBigokuta_PlayDeathEffects(EnBigokuta* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
if (this->drawEffectAlpha > 0.0f) {
|
||||
this->drawEffectAlpha = this->actor.scale.y * 30.30303f;
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
this->drawDmgEffAlpha = this->actor.scale.y * 30.30303f;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -494,14 +489,14 @@ void EnBigokuta_CheckOneHitKill(EnBigokuta* this, GlobalContext* globalCtx) {
|
||||
|
||||
if (this->bodyCollider.base.acFlags & AC_HIT) {
|
||||
if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x1000) { // Ice Arrow
|
||||
this->drawEffect = BIGOCTO_DRAWEFFECT_ICE;
|
||||
this->drawEffectScale = 1.2f;
|
||||
this->drawEffectSteamScale = 1.8000001f;
|
||||
this->drawEffectAlpha = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 1.2f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.8000001f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
} else if (this->bodyCollider.info.acHitInfo->toucher.dmgFlags & 0x2000) { // Light Arrow
|
||||
this->drawEffect = BIGOCTO_DRAWEFFECT_LIGHT_ORBS;
|
||||
this->drawEffectScale = 1.2f;
|
||||
this->drawEffectAlpha = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffScale = 1.2f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->bodyCollider.info.bumper.hitPos.x, this->bodyCollider.info.bumper.hitPos.y,
|
||||
this->bodyCollider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -546,12 +541,12 @@ void EnBigokuta_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Actor_SetFocus(&this->actor, 82.5f);
|
||||
}
|
||||
|
||||
if (this->drawEffectAlpha > 0.0f) {
|
||||
if (this->drawEffect != BIGOCTO_DRAWEFFECT_ICE) {
|
||||
Math_StepToF(&this->drawEffectAlpha, 0.0f, 0.05f);
|
||||
this->drawEffectScale = (this->drawEffectAlpha + 1.0f) * 0.6f;
|
||||
this->drawEffectScale = CLAMP_MAX(this->drawEffectScale, 1.2f);
|
||||
} else if (!Math_StepToF(&this->drawEffectSteamScale, 1.2f, 0.030000001f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.6f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.2f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.2f, 0.030000001f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -676,7 +671,8 @@ void EnBigokuta_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->skelAnime.dListCount, NULL, EnBigokuta_PostLimbDraw, &this->actor, &gfx[2]);
|
||||
}
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawEffectScale,
|
||||
this->drawEffectSteamScale, this->drawEffectAlpha, this->drawEffect);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -37,15 +37,15 @@ typedef struct EnBigokuta {
|
||||
/* 0x0144 */ EnBigokutaUnkFunc unkFunc; // possibly something to do with photographing
|
||||
/* 0x0148 */ SkelAnime skelAnime;
|
||||
/* 0x018C */ EnBigokutaActionFunc actionFunc;
|
||||
/* 0x0190 */ u8 drawEffect;
|
||||
/* 0x0190 */ u8 drawDmgEffType;
|
||||
/* 0x0192 */ s16 timer;
|
||||
/* 0x0194 */ s16 camId;
|
||||
/* 0x0196 */ s16 cutscene;
|
||||
/* 0x0198 */ Vec3s jointTable[BIGOKUTA_LIMB_MAX];
|
||||
/* 0x0210 */ Vec3s morphTable[BIGOKUTA_LIMB_MAX];
|
||||
/* 0x0288 */ f32 drawEffectAlpha;
|
||||
/* 0x028C */ f32 drawEffectScale;
|
||||
/* 0x0290 */ f32 drawEffectSteamScale; // only affects DRAWEFFECT_ICE
|
||||
/* 0x0288 */ f32 drawDmgEffAlpha;
|
||||
/* 0x028C */ f32 drawDmgEffScale;
|
||||
/* 0x0290 */ f32 drawDmgEffFrozenSteamScale; // only affects DRAWEFFECT_ICE
|
||||
/* 0x0294 */ Vec3f playerPos;
|
||||
/* 0x02A0 */ Vec3f playerHoldPos;
|
||||
/* 0x02AC */ Vec3f camAt;
|
||||
|
@ -1136,8 +1136,8 @@ s32 EnBigpo_ApplyDamage(EnBigpo* this, GlobalContext* globalCtx) {
|
||||
|
||||
// light arrows
|
||||
if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk21C = 4.0f;
|
||||
this->unk220 = 1.0f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 1.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, this->collider.info.bumper.hitPos.x,
|
||||
this->collider.info.bumper.hitPos.y, this->collider.info.bumper.hitPos.z, 0, 0, 0,
|
||||
CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -1201,15 +1201,15 @@ void EnBigpo_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &thisCollider->base);
|
||||
}
|
||||
|
||||
if (this->unk21C > 0.0f) {
|
||||
Math_StepToF(&this->unk21C, 0.0f, 0.05f);
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
if (this->mainColor.a != 255) { // NOT fully visible
|
||||
if (this->mainColor.a * (1.0f / 255.0f) < this->mainColor.a) {
|
||||
this->unk21C = this->mainColor.a * (1.0f / 255.0f);
|
||||
this->drawDmgEffAlpha = this->mainColor.a * (1.0f / 255.0f);
|
||||
}
|
||||
}
|
||||
this->unk220 = ((this->unk21C + 1.0f) * 0.5f);
|
||||
this->unk220 = CLAMP_MAX(this->unk220, 1.0f);
|
||||
this->drawDmgEffScale = ((this->drawDmgEffAlpha + 1.0f) * 0.5f);
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1318,8 +1318,9 @@ void EnBigpo_DrawMainBigpo(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
// 71.428566f might be 500/7 context unknown
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, 9, this->actor.scale.x * 71.428566f * this->unk220, 0,
|
||||
this->unk21C, 0x14);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->actor.scale.x * 71.428566f * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha,
|
||||
ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
|
||||
|
||||
Matrix_SetCurrentState(&this->drawMtxF);
|
||||
EnBigpo_DrawLantern(&this->actor, globalCtx);
|
||||
|
@ -40,9 +40,8 @@ typedef struct EnBigpo {
|
||||
/* 0x212 */ s16 hoverHeightCycleTimer; // sin wave up and down bobbing
|
||||
/* 0x214 */ f32 fireRadius; // distance from center during conjunction cutscene
|
||||
/* 0x218 */ f32 savedHeight; // actual height while flying moves as part of bobbing
|
||||
// both unk21C and unk220 are passed to func_800BE680, probably need that to know what they are
|
||||
/* 0x21C */ f32 unk21C; // tied to color alpha, decremented to zero
|
||||
/* 0x220 */ f32 unk220; // created from unk21C
|
||||
/* 0x21C */ f32 drawDmgEffAlpha;
|
||||
/* 0x220 */ f32 drawDmgEffScale;
|
||||
/* 0x224 */ Vec3f limbPos[9];
|
||||
/* 0x290 */ Color_RGBA8 mainColor;
|
||||
/* 0x294 */ Color_RGBA8 lanternColor;
|
||||
|
@ -906,22 +906,22 @@ void EnBigslime_GekkoSfxInsideBigslime(EnBigslime* this, u16 sfxId) {
|
||||
}
|
||||
|
||||
void EnBigslime_GekkoFreeze(EnBigslime* this) {
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_FROZEN;
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->gekkoCollider.base.colType = COLTYPE_HIT3;
|
||||
this->gekkoCollider.info.elemType = ELEMTYPE_UNK0;
|
||||
this->stunTimer = 2;
|
||||
this->unk_38C = 0.75f;
|
||||
this->unk_390 = 1.125f;
|
||||
this->unk_388 = 1.0f;
|
||||
this->gekkoDrawDmgEffScale = 0.75f;
|
||||
this->gekkoDrawDmgEffFrozenSteamScale = 1.125f;
|
||||
this->gekkoDrawDmgEffAlpha = 1.0f;
|
||||
this->actor.flags &= ~ACTOR_FLAG_200;
|
||||
}
|
||||
|
||||
void EnBigslime_GekkoThaw(EnBigslime* this, GlobalContext* globalCtx) {
|
||||
if (this->gekkoDrawEffect == GEKKO_DRAW_EFFECT_FROZEN) {
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_THAW;
|
||||
if (this->gekkoDrawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->gekkoCollider.base.colType = COLTYPE_HIT6;
|
||||
this->gekkoCollider.info.elemType = ELEMTYPE_UNK1;
|
||||
this->unk_388 = 0.0f;
|
||||
this->gekkoDrawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.3f, 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_200;
|
||||
}
|
||||
@ -2211,7 +2211,7 @@ void EnBigslime_SetupStunGekko(EnBigslime* this) {
|
||||
void EnBigslime_StunGekko(EnBigslime* this, GlobalContext* globalCtx) {
|
||||
this->stunTimer--;
|
||||
if (this->stunTimer == 0) {
|
||||
if (this->gekkoDrawEffect == GEKKO_DRAW_EFFECT_FROZEN) {
|
||||
if (this->gekkoDrawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
EnBigslime_GekkoThaw(this, globalCtx);
|
||||
EnBigslime_SetupDamageGekko(this, false);
|
||||
} else {
|
||||
@ -2615,7 +2615,7 @@ void EnBigslime_ApplyDamageEffectBigslime(EnBigslime* this, GlobalContext* globa
|
||||
void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, GlobalContext* globalCtx) {
|
||||
if (this->gekkoCollider.base.acFlags & AC_HIT) {
|
||||
this->gekkoCollider.base.acFlags &= ~AC_HIT;
|
||||
if ((this->gekkoDrawEffect != GEKKO_DRAW_EFFECT_FROZEN) ||
|
||||
if ((this->gekkoDrawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->gekkoCollider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
EnBigslime_EndThrowMinislime(this);
|
||||
if (this->actor.colChkInfo.damageEffect != BIGSLIME_DMGEFF_HOOKSHOT) {
|
||||
@ -2627,12 +2627,12 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, GlobalContext* globalCt
|
||||
EnBigslime_GekkoThaw(this, globalCtx);
|
||||
if ((this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_FIRE) ||
|
||||
(this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_LIGHT)) {
|
||||
this->unk_388 = 4.0f;
|
||||
this->unk_38C = 0.75f;
|
||||
this->gekkoDrawDmgEffAlpha = 4.0f;
|
||||
this->gekkoDrawDmgEffScale = 0.75f;
|
||||
if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_FIRE) {
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_THAW;
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else {
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_LIGHT_ORBS;
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->gekkoCollider.info.bumper.hitPos.x,
|
||||
this->gekkoCollider.info.bumper.hitPos.y,
|
||||
@ -2645,9 +2645,9 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, GlobalContext* globalCt
|
||||
} else if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_ELECTRIC_STUN) {
|
||||
this->stunTimer = 40;
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_ELECTRIC_STUN;
|
||||
this->unk_38C = 0.75f;
|
||||
this->unk_388 = 2.0f;
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->gekkoDrawDmgEffScale = 0.75f;
|
||||
this->gekkoDrawDmgEffAlpha = 2.0f;
|
||||
EnBigslime_SetupStunGekko(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_STUN ||
|
||||
this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_DEKU_STUN) {
|
||||
@ -2662,12 +2662,12 @@ void EnBigslime_ApplyDamageEffectGekko(EnBigslime* this, GlobalContext* globalCt
|
||||
EnBigslime_GekkoThaw(this, globalCtx);
|
||||
if ((this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_FIRE) ||
|
||||
(this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_LIGHT)) {
|
||||
this->unk_388 = 3.0f;
|
||||
this->unk_38C = 0.75f;
|
||||
this->gekkoDrawDmgEffAlpha = 3.0f;
|
||||
this->gekkoDrawDmgEffScale = 0.75f;
|
||||
if (this->actor.colChkInfo.damageEffect == BIGSLIME_DMGEFF_FIRE) {
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_THAW;
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else {
|
||||
this->gekkoDrawEffect = GEKKO_DRAW_EFFECT_LIGHT_ORBS;
|
||||
this->gekkoDrawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->gekkoCollider.info.bumper.hitPos.x,
|
||||
this->gekkoCollider.info.bumper.hitPos.y,
|
||||
@ -2755,12 +2755,13 @@ void EnBigslime_UpdateEffects(EnBigslime* this) {
|
||||
}
|
||||
|
||||
// update actor damage draw effects
|
||||
if (this->unk_388 > 0.0f) {
|
||||
if ((this->gekkoDrawEffect != GEKKO_DRAW_EFFECT_FROZEN) && (this->actionFunc != EnBigslime_PlayCutscene)) {
|
||||
Math_StepToF(&this->unk_388, 0.0f, 0.05f);
|
||||
this->unk_38C = 0.375f * (this->unk_388 + 1.0f);
|
||||
this->unk_38C = CLAMP_MAX(this->unk_38C, 0.75f);
|
||||
} else if (!Math_StepToF(&this->unk_390, 0.75f, 0.01875f)) {
|
||||
if (this->gekkoDrawDmgEffAlpha > 0.0f) {
|
||||
if ((this->gekkoDrawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
(this->actionFunc != EnBigslime_PlayCutscene)) {
|
||||
Math_StepToF(&this->gekkoDrawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->gekkoDrawDmgEffScale = 0.375f * (this->gekkoDrawDmgEffAlpha + 1.0f);
|
||||
this->gekkoDrawDmgEffScale = CLAMP_MAX(this->gekkoDrawDmgEffScale, 0.75f);
|
||||
} else if (!Math_StepToF(&this->gekkoDrawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -3074,9 +3075,9 @@ void EnBigslime_DrawGekko(Actor* thisx, GlobalContext* globalCtx) {
|
||||
} else if ((this->actionFunc == EnBigslime_CutsceneDefeat) || (this->actionFunc == EnBigslime_GekkoDespawn)) {
|
||||
func_800AE434(globalCtx, &gekkoDamageColor, 20, 20);
|
||||
} else if (this->actionFunc == EnBigslime_StunGekko) {
|
||||
if (this->gekkoDrawEffect == GEKKO_DRAW_EFFECT_FROZEN) {
|
||||
if (this->gekkoDrawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
func_800AE434(globalCtx, &gekkoDamageColor, this->stunTimer, 80);
|
||||
} else if (this->gekkoDrawEffect == GEKKO_DRAW_EFFECT_ELECTRIC_STUN) {
|
||||
} else if (this->gekkoDrawDmgEffType == ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL) {
|
||||
func_800AE434(globalCtx, &gekkoStunColor, this->stunTimer, 40);
|
||||
} else {
|
||||
func_800AE434(globalCtx, &gekkoStunColor, this->stunTimer, 40);
|
||||
@ -3109,10 +3110,10 @@ void EnBigslime_DrawGekko(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
EnBigslime_DrawShatteringEffects(this, globalCtx);
|
||||
|
||||
// Draw actor damage effects
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->gekkoScale * (999.99991f / 7.0f) * this->unk_38C, this->unk_390, this->unk_388,
|
||||
this->gekkoDrawEffect);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->gekkoScale * (999.99991f / 7.0f) * this->gekkoDrawDmgEffScale,
|
||||
this->gekkoDrawDmgEffFrozenSteamScale, this->gekkoDrawDmgEffAlpha,
|
||||
this->gekkoDrawDmgEffType);
|
||||
}
|
||||
|
||||
void EnBigslime_DrawShatteringEffects(EnBigslime* this, GlobalContext* globalCtx) {
|
||||
|
@ -64,7 +64,7 @@ typedef struct EnBigslime {
|
||||
u8 numGekkoMeleeAttacks; // The Gekko will melee-attack link at 1-3 times at each position while engulfed in bigslime
|
||||
};
|
||||
/* 0x02B4 */ u8 shockwaveAlpha;
|
||||
/* 0x02B5 */ u8 gekkoDrawEffect;
|
||||
/* 0x02B5 */ u8 gekkoDrawDmgEffType;
|
||||
/* 0x02B6 */ s16 gekkoYaw;
|
||||
/* 0x02B8 */ s16 cutscene;
|
||||
/* 0x02BA */ union { // multi-use timer
|
||||
@ -107,9 +107,9 @@ typedef struct EnBigslime {
|
||||
Vec3f subCamDistToFrog; // Used to zoom into frogs as Gekko despawns/Frog spawns
|
||||
};
|
||||
/* 0x02F8 */ Vec3f limbPos[12];
|
||||
/* 0x0388 */ f32 unk_388; // used as arg to func_800BE680
|
||||
/* 0x038C */ f32 unk_38C; // used as arg to func_800BE680
|
||||
/* 0x0390 */ f32 unk_390; // used as arg to func_800BE680
|
||||
/* 0x0388 */ f32 gekkoDrawDmgEffAlpha;
|
||||
/* 0x038C */ f32 gekkoDrawDmgEffScale;
|
||||
/* 0x0390 */ f32 gekkoDrawDmgEffFrozenSteamScale;
|
||||
/* 0x0394 */ f32 gekkoScale;
|
||||
/* 0x0398 */ f32 vtxSurfacePerturbation[BIGSLIME_NUM_VTX];
|
||||
/* 0x0620 */ f32 vtxScaleX;
|
||||
|
@ -147,21 +147,21 @@ void EnDekunuts_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_808BD348(EnDekunuts* this) {
|
||||
this->unk_18E = 10;
|
||||
this->unk_214 = 0.55f;
|
||||
this->unk_218 = 0.82500005f;
|
||||
this->unk_210 = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.82500005f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->collider.base.colType = COLTYPE_HIT3;
|
||||
this->unk_190 = 80;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
|
||||
}
|
||||
|
||||
void func_808BD3B4(EnDekunuts* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_18E == 10) {
|
||||
this->unk_18E = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider.base.colType = COLTYPE_HIT6;
|
||||
this->unk_210 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_21C, 8, 2, 0.2f, 0.2f);
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 8, 2, 0.2f, 0.2f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -568,7 +568,8 @@ void func_808BE73C(EnDekunuts* this, GlobalContext* globalCtx) {
|
||||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
Actor_SetDropFlag(&this->actor, &this->collider.info);
|
||||
if ((this->unk_18E != 10) || !(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
func_808BD3B4(this, globalCtx);
|
||||
if ((this->actor.colChkInfo.mass == 50) || (this->actor.params != ENDEKUNUTS_GET_FF00_0)) {
|
||||
if ((this->actor.params != ENDEKUNUTS_GET_FF00_1) && !Actor_ApplyDamage(&this->actor)) {
|
||||
@ -599,20 +600,20 @@ void func_808BE73C(EnDekunuts* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_210 = 4.0f;
|
||||
this->unk_214 = 0.55f;
|
||||
this->unk_18E = 0;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_210 = 4.0f;
|
||||
this->unk_214 = 0.55f;
|
||||
this->unk_18E = 20;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.info.bumper.hitPos.x, this->collider.info.bumper.hitPos.y,
|
||||
this->collider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_SMALL_LIGHT_RAYS);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->unk_18E = 32;
|
||||
this->unk_210 = 4.0f;
|
||||
this->unk_214 = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
}
|
||||
|
||||
func_808BE294(this, 1);
|
||||
@ -649,12 +650,13 @@ void EnDekunuts_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
if (this->unk_210 > 0.0f) {
|
||||
if (this->unk_18E != 10) {
|
||||
Math_StepToF(&this->unk_210, 0.0f, 0.05f);
|
||||
this->unk_214 = (this->unk_210 + 1.0f) * 0.275f;
|
||||
this->unk_214 = CLAMP_MAX(this->unk_214, 0.55f);
|
||||
} else if ((this->unk_18E == 10) && !Math_StepToF(&this->unk_218, 0.55f, (33.0f / 1600.0f))) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f);
|
||||
} else if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, (33.0f / 1600.0f))) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -709,12 +711,12 @@ void EnDekunuts_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLis
|
||||
|
||||
if (value != -1) {
|
||||
if (value < 3) {
|
||||
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->unk_21C[value]);
|
||||
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->limbPos[value]);
|
||||
} else {
|
||||
Matrix_GetStateTranslation(&this->unk_21C[value]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[value]);
|
||||
ptr1 = &D_808BEFA4[0];
|
||||
ptr2 = &this->unk_21C[value + 1];
|
||||
for (i = value + 1; i < ARRAY_COUNT(this->unk_21C); i++) {
|
||||
ptr2 = &this->limbPos[value + 1];
|
||||
for (i = value + 1; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
Matrix_MultiplyVector3fByState(ptr1, ptr2);
|
||||
ptr1++, ptr2++;
|
||||
}
|
||||
@ -738,6 +740,6 @@ void EnDekunuts_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
func_800AE5A0(globalCtx);
|
||||
}
|
||||
Gfx_DrawDListOpa(globalCtx, object_dekunuts_DL_001E50);
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_21C, 8, this->unk_214, this->unk_218, this->unk_210,
|
||||
this->unk_18E);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
@ -22,16 +22,16 @@ typedef struct EnDekunuts {
|
||||
/* 0x188 */ EnDekunutsActionFunc actionFunc;
|
||||
/* 0x18C */ u8 unk_18C;
|
||||
/* 0x18D */ u8 unk_18D;
|
||||
/* 0x18E */ u8 unk_18E;
|
||||
/* 0x18E */ u8 drawDmgEffType;
|
||||
/* 0x190 */ s16 unk_190;
|
||||
/* 0x192 */ s16 unk_192;
|
||||
/* 0x194 */ s16 unk_194;
|
||||
/* 0x196 */ Vec3s jointTable[10];
|
||||
/* 0x1D2 */ Vec3s morphTable[10];
|
||||
/* 0x210 */ f32 unk_210;
|
||||
/* 0x214 */ f32 unk_214;
|
||||
/* 0x218 */ f32 unk_218;
|
||||
/* 0x21C */ Vec3f unk_21C[8];
|
||||
/* 0x210 */ f32 drawDmgEffAlpha;
|
||||
/* 0x214 */ f32 drawDmgEffScale;
|
||||
/* 0x218 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x21C */ Vec3f limbPos[8];
|
||||
/* 0x27C */ ColliderCylinder collider;
|
||||
} EnDekunuts; // size = 0x2C8
|
||||
|
||||
|
@ -376,22 +376,22 @@ void func_8089ABF4(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_8089AC70(EnDinofos* this) {
|
||||
this->unk_28A = 10;
|
||||
this->unk_2B4 = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->colliderJntSph.base.colType = COLTYPE_HIT3;
|
||||
this->unk_2B8 = 0.82500005f;
|
||||
this->unk_2B0 = 1.0f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.82500005f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->unk_290 = 80;
|
||||
this->actor.flags &= ~ACTOR_FLAG_400;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
|
||||
}
|
||||
|
||||
void func_8089ACEC(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_28A == 10) {
|
||||
this->unk_28A = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->colliderJntSph.base.colType = COLTYPE_HIT0;
|
||||
this->unk_2B0 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_2D4, 12, 2, 0.3f, 0.2f);
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 12, 2, 0.3f, 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_400;
|
||||
}
|
||||
}
|
||||
@ -1048,9 +1048,9 @@ void func_8089CB10(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
|
||||
for (i = 6; i < ARRAY_COUNT(this->colliderJntSphElement); i++) {
|
||||
worldSphere = &this->colliderJntSph.elements[i].dim.worldSphere;
|
||||
worldSphere->center.x = this->unk_34C.x;
|
||||
worldSphere->center.y = this->unk_34C.y;
|
||||
worldSphere->center.z = this->unk_34C.z;
|
||||
worldSphere->center.x = this->limbPos[10].x;
|
||||
worldSphere->center.y = this->limbPos[10].y;
|
||||
worldSphere->center.z = this->limbPos[10].z;
|
||||
}
|
||||
|
||||
if (globalCtx->sceneNum == SCENE_MITURIN) {
|
||||
@ -1086,7 +1086,7 @@ void func_8089CBEC(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
sp7C.y = randPlusMinusPoint5Scaled(0.6f) + 1.4f;
|
||||
sp7C.z = 0.9f * temp_f22;
|
||||
func_800B9010(&this->actor, NA_SE_EN_DODO_J_FIRE - SFX_FLAG);
|
||||
EffectSsDFire_Spawn(globalCtx, &this->unk_34C, &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8);
|
||||
EffectSsDFire_Spawn(globalCtx, &this->limbPos[10], &sp88, &sp7C, 30, 22, 255 - (temp_s0 * 20), 20, 3, 8);
|
||||
|
||||
for (end = 6, i = 3; i > 0; i--) {
|
||||
if (this->unk_290 < (20 + -(i * 2))) {
|
||||
@ -1099,9 +1099,9 @@ void func_8089CBEC(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
dim = &this->colliderJntSph.elements[i].dim;
|
||||
temp_s3 = (s32)(cos_rad((this->unk_290 + ((i - 5) << 1)) * (M_PI / 20)) * 0x2C00) + this->actor.shape.rot.y;
|
||||
|
||||
dim->worldSphere.center.x = (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z) + (s32)this->unk_34C.x;
|
||||
dim->worldSphere.center.y = (s32)this->unk_34C.y + (s32)dim->modelSphere.center.y;
|
||||
dim->worldSphere.center.z = (s32)(Math_CosS(temp_s3) * dim->modelSphere.center.z) + (s32)this->unk_34C.z;
|
||||
dim->worldSphere.center.x = (s32)this->limbPos[10].x + (s32)(Math_SinS(temp_s3) * dim->modelSphere.center.z);
|
||||
dim->worldSphere.center.y = (s32)this->limbPos[10].y + (s32)dim->modelSphere.center.y;
|
||||
dim->worldSphere.center.z = (s32)this->limbPos[10].z + (s32)(Math_CosS(temp_s3) * dim->modelSphere.center.z);
|
||||
}
|
||||
|
||||
if (this->unk_290 != 0) {
|
||||
@ -1151,8 +1151,8 @@ void func_8089D018(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
this->unk_288 = temp_v0;
|
||||
}
|
||||
|
||||
if (this->unk_2B0 > 0.0f) {
|
||||
this->unk_2B0 = this->unk_288 * (1.0f / 255.0f);
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
this->drawDmgEffAlpha = this->unk_288 * (1.0f / 255.0f);
|
||||
}
|
||||
|
||||
this->actor.shape.shadowAlpha = this->unk_288;
|
||||
@ -1260,7 +1260,8 @@ s32 func_8089D60C(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((this->unk_28A == 10) && (this->colliderJntSph.elements[i].info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
(this->colliderJntSph.elements[i].info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1311,22 +1312,22 @@ s32 func_8089D60C(EnDinofos* this, GlobalContext* globalCtx) {
|
||||
if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->unk_290 = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
|
||||
this->unk_2B4 = 0.55f;
|
||||
this->unk_2B0 = 2.0f;
|
||||
this->unk_28A = 31;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
func_8089C784(this);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_2B0 = 4.0f;
|
||||
this->unk_2B4 = 0.55f;
|
||||
this->unk_28A = 0;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_2B0 = 4.0f;
|
||||
this->unk_2B4 = 0.55f;
|
||||
this->unk_28A = 20;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->colliderJntSph.elements[i].info.bumper.hitPos.x,
|
||||
this->colliderJntSph.elements[i].info.bumper.hitPos.y,
|
||||
@ -1359,7 +1360,7 @@ void EnDinofos_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
if (this->actionFunc != func_8089C7B8) {
|
||||
if ((this->actor.depthInWater > 0.0f) && (this->actor.depthInWater < 10.0f)) {
|
||||
if (!((globalCtx->gameplayFrames % 4) & 1)) {
|
||||
Math_Vec3f_Copy(&sp30, &this->unk_2D4[1 + (globalCtx->gameplayFrames % 4)]);
|
||||
Math_Vec3f_Copy(&sp30, &this->limbPos[1 + (globalCtx->gameplayFrames % 4)]);
|
||||
sp30.y = this->actor.world.pos.y + this->actor.depthInWater;
|
||||
EffectSsGRipple_Spawn(globalCtx, &sp30, 100, 320, 0);
|
||||
}
|
||||
@ -1373,7 +1374,7 @@ void EnDinofos_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
Math_ScaledStepToS(&this->unk_28E, 0, 2000);
|
||||
}
|
||||
|
||||
Math_Vec3f_Copy(&this->actor.focus.pos, &this->unk_304);
|
||||
Math_Vec3f_Copy(&this->actor.focus.pos, &this->limbPos[4]);
|
||||
this->actor.focus.rot.y = this->actor.shape.rot.y + this->unk_28E;
|
||||
if (this->colliderJntSph.base.acFlags & AC_ON) {
|
||||
CollisionCheck_SetAC(globalCtx, &globalCtx->colChkCtx, &this->colliderJntSph.base);
|
||||
@ -1388,12 +1389,12 @@ void EnDinofos_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
CollisionCheck_SetAT(globalCtx, &globalCtx->colChkCtx, &this->colliderQuad.base);
|
||||
}
|
||||
|
||||
if (this->unk_2B0 > 0.0f) {
|
||||
if (this->unk_28A != 10) {
|
||||
Math_StepToF(&this->unk_2B0, 0.0f, 0.05f);
|
||||
this->unk_2B4 = (this->unk_2B0 + 1.0f) * (11.0f / 40.0f);
|
||||
this->unk_2B4 = CLAMP_MAX(this->unk_2B4, 0.55f);
|
||||
} else if (!Math_StepToF(&this->unk_2B8, 0.55f, 0.01375f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * (11.0f / 40.0f);
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1428,7 +1429,7 @@ void func_8089DC84(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
|
||||
Collider_UpdateSpheres(limbIndex, &this->colliderJntSph);
|
||||
if (D_8089E3B0[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_2D4[D_8089E3B0[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_8089E3B0[limbIndex]]);
|
||||
}
|
||||
|
||||
if ((limbIndex == 14) && (this->unk_292 != this->unk_290) &&
|
||||
@ -1460,7 +1461,7 @@ void func_8089DC84(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
sp4C.x -= sp48->mf[3][0];
|
||||
sp4C.y -= sp48->mf[3][1];
|
||||
sp4C.z -= sp48->mf[3][2];
|
||||
EffectSsDFire_Spawn(globalCtx, &this->unk_34C, &sp4C, &gZeroVec3f, 30, 22, 255 - (sp58 * 20), 20, 3, 8);
|
||||
EffectSsDFire_Spawn(globalCtx, &this->limbPos[10], &sp4C, &gZeroVec3f, 30, 22, 255 - (sp58 * 20), 20, 3, 8);
|
||||
this->unk_292 = this->unk_290;
|
||||
}
|
||||
}
|
||||
@ -1495,8 +1496,8 @@ void EnDinofos_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->skelAnime.dListCount, func_8089DC4C, func_8089DC84, &this->actor, POLY_XLU_DISP);
|
||||
}
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2D4, 12, this->unk_2B4, this->unk_2B8, this->unk_2B0,
|
||||
this->unk_28A);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ typedef struct EnDinofos {
|
||||
/* 0x284 */ EnDinofosActionFunc actionFunc;
|
||||
/* 0x288 */ u8 unk_288;
|
||||
/* 0x289 */ u8 unk_289;
|
||||
/* 0x28A */ u8 unk_28A;
|
||||
/* 0x28A */ u8 drawDmgEffType;
|
||||
/* 0x28B */ u8 unk_28B;
|
||||
/* 0x28C */ s16 unk_28C;
|
||||
/* 0x28E */ s16 unk_28E;
|
||||
@ -28,20 +28,15 @@ typedef struct EnDinofos {
|
||||
/* 0x2A4 */ f32 unk_2A4;
|
||||
/* 0x2A8 */ f32 unk_2A8;
|
||||
/* 0x2AC */ f32 unk_2AC;
|
||||
/* 0x2B0 */ f32 unk_2B0;
|
||||
/* 0x2B4 */ f32 unk_2B4;
|
||||
/* 0x2B8 */ f32 unk_2B8;
|
||||
/* 0x2B0 */ f32 drawDmgEffAlpha;
|
||||
/* 0x2B4 */ f32 drawDmgEffScale;
|
||||
/* 0x2B8 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x2BC */ Vec3f unk_2BC;
|
||||
/* 0x2C8 */ Vec3f unk_2C8;
|
||||
/* 0x2D4 */ Vec3f unk_2D4[4];
|
||||
/* 0x304 */ Vec3f unk_304;
|
||||
/* 0x310 */ UNK_TYPE1 unk_310[0x3C];
|
||||
/* 0x34C */ Vec3f unk_34C;
|
||||
/* 0x358 */ UNK_TYPE1 unk_358[0xC];
|
||||
/* 0x2D4 */ Vec3f limbPos[12];
|
||||
/* 0x364 */ ColliderJntSph colliderJntSph;
|
||||
/* 0x384 */ ColliderJntSphElement colliderJntSphElement[9];
|
||||
/* 0x5C4 */ ColliderQuad colliderQuad;
|
||||
|
||||
} EnDinofos; // size = 0x644
|
||||
|
||||
extern const ActorInit En_Dinofos_InitVars;
|
||||
|
@ -399,13 +399,13 @@ void func_80876B08(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
|
||||
void func_80876BD0(EnDodongo* this, GlobalContext* globalCtx, s32 arg2) {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_300 = 0;
|
||||
this->unk_340 = 0.75f;
|
||||
this->unk_33C = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_300 = 20;
|
||||
this->unk_340 = 0.75f;
|
||||
this->unk_33C = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider1.elements[arg2].info.bumper.hitPos.x,
|
||||
this->collider1.elements[arg2].info.bumper.hitPos.y,
|
||||
@ -414,24 +414,24 @@ void func_80876BD0(EnDodongo* this, GlobalContext* globalCtx, s32 arg2) {
|
||||
}
|
||||
|
||||
void func_80876CAC(EnDodongo* this) {
|
||||
this->unk_300 = 10;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->collider1.base.colType = COLTYPE_HIT3;
|
||||
this->unk_340 = 0.75f;
|
||||
this->unk_344 = 1.125f;
|
||||
this->unk_33C = 1.0f;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.125f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->timer = 80;
|
||||
this->actor.flags &= ~ACTOR_FLAG_400;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 80);
|
||||
}
|
||||
|
||||
void func_80876D28(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_300 == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->timer = 0;
|
||||
this->actor.colorFilterTimer = 0;
|
||||
this->unk_300 = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider1.base.colType = COLTYPE_HIT0;
|
||||
this->unk_33C = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, &this->unk_348[0], 9, 2, this->unk_334 * 0.3f,
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, &this->limbPos[0], 9, 2, this->unk_334 * 0.3f,
|
||||
this->unk_334 * 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_400;
|
||||
}
|
||||
@ -448,7 +448,7 @@ void func_80876DC4(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
f32 temp_f22;
|
||||
f32 temp_f20;
|
||||
|
||||
Math_Vec3f_Copy(&sp68, &this->unk_348[0]);
|
||||
Math_Vec3f_Copy(&sp68, &this->limbPos[0]);
|
||||
sp66 = (Rand_Next() >> 0x12) + this->actor.shape.rot.y;
|
||||
temp_f20 = Math_CosS(sp66);
|
||||
temp_f22 = Math_SinS(sp66);
|
||||
@ -496,8 +496,8 @@ void func_80876DC4(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
sp74.z = (Rand_ZeroFloat(0.1f) + 0.15f) * -temp_f22 * this->unk_334;
|
||||
func_800B0EB0(globalCtx, &sp68, &sp80, &sp74, &this->unk_32C, &this->unk_330, sp64, sp62, 0x14);
|
||||
|
||||
sp68.x = this->unk_348[0].x + (temp_f20 * 6.0f * this->unk_334);
|
||||
sp68.z = this->unk_348[0].z - (temp_f22 * 6.0f * this->unk_334);
|
||||
sp68.x = this->limbPos[0].x + (temp_f20 * 6.0f * this->unk_334);
|
||||
sp68.z = this->limbPos[0].z - (temp_f22 * 6.0f * this->unk_334);
|
||||
sp80.x *= -1.0f;
|
||||
sp80.z = sp80.z * -1.0f;
|
||||
sp74.x = (Rand_ZeroFloat(0.1f) + 0.15f) * -temp_f20 * this->unk_334;
|
||||
@ -622,9 +622,9 @@ void func_808777A8(EnDodongo* this) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->collider3Elements); i++) {
|
||||
sph = &this->collider3.elements[i].dim.worldSphere;
|
||||
|
||||
sph->center.x = this->unk_348[0].x;
|
||||
sph->center.y = this->unk_348[0].y;
|
||||
sph->center.z = this->unk_348[0].z;
|
||||
sph->center.x = this->limbPos[0].x;
|
||||
sph->center.y = this->limbPos[0].y;
|
||||
sph->center.z = this->limbPos[0].z;
|
||||
sph->radius = 0;
|
||||
}
|
||||
|
||||
@ -658,10 +658,10 @@ void func_8087784C(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
temp_f12 = Math_CosS(this->actor.shape.rot.y) * this->unk_334;
|
||||
|
||||
for (i = 0; i < end; i++, element++) {
|
||||
element->dim.worldSphere.center.x = this->unk_348[0].x + (element->dim.modelSphere.center.z * temp_f2);
|
||||
element->dim.worldSphere.center.x = this->limbPos[0].x + (element->dim.modelSphere.center.z * temp_f2);
|
||||
element->dim.worldSphere.center.y =
|
||||
this->unk_348[0].y + (element->dim.modelSphere.center.y * this->unk_334);
|
||||
element->dim.worldSphere.center.z = this->unk_348[0].z + (element->dim.modelSphere.center.z * temp_f12);
|
||||
this->limbPos[0].y + (element->dim.modelSphere.center.y * this->unk_334);
|
||||
element->dim.worldSphere.center.z = this->limbPos[0].z + (element->dim.modelSphere.center.z * temp_f12);
|
||||
element->dim.worldSphere.radius = element->dim.modelSphere.radius;
|
||||
}
|
||||
|
||||
@ -669,7 +669,7 @@ void func_8087784C(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
D_80879348.x = 2.5f * temp_f2;
|
||||
D_80879348.y = this->unk_334 * 1.4f;
|
||||
D_80879348.z = 2.5f * temp_f12;
|
||||
EffectSsDFire_Spawn(globalCtx, &this->unk_348[0], &D_80879354, &D_80879348, this->unk_334 * 100.0f,
|
||||
EffectSsDFire_Spawn(globalCtx, &this->limbPos[0], &D_80879354, &D_80879348, this->unk_334 * 100.0f,
|
||||
this->unk_334 * 35.0f, 0xFF - (frame * 10), 5, 0, 8);
|
||||
} else if ((this->skelAnime.curFrame >= 2.0f) && (this->skelAnime.curFrame <= 20.0f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EN_DODO_J_BREATH - SFX_FLAG);
|
||||
@ -772,13 +772,13 @@ void func_80877E60(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
sp5E = this->unk_334 * 50.0f;
|
||||
sp5C = this->unk_334 * 5.0f;
|
||||
Math_Vec3f_Copy(&sp64, &this->unk_348[0]);
|
||||
Math_Vec3f_Copy(&sp64, &this->limbPos[0]);
|
||||
func_800B0DE0(globalCtx, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
|
||||
sp64.x -= Math_CosS(this->actor.shape.rot.y) * 6.0f * this->unk_334;
|
||||
sp64.z += Math_SinS(this->actor.shape.rot.y) * 6.0f * this->unk_334;
|
||||
func_800B0DE0(globalCtx, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
|
||||
sp64.x = (2.0f * this->unk_348[0].x) - sp64.x;
|
||||
sp64.z = (2.0f * this->unk_348[0].z) - sp64.z;
|
||||
sp64.x = (2.0f * this->limbPos[0].x) - sp64.x;
|
||||
sp64.z = (2.0f * this->limbPos[0].z) - sp64.z;
|
||||
func_800B0DE0(globalCtx, &sp64, &gZeroVec3f, &D_80879360, &D_8087936C, &D_8087936C, sp5E, sp5C);
|
||||
}
|
||||
}
|
||||
@ -953,7 +953,8 @@ void EnDodongo_UpdateDamage(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if ((i != ARRAY_COUNT(this->collider2Elements)) &&
|
||||
((this->unk_300 != 10) || !(this->collider2.elements[i].info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
|
||||
((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->collider2.elements[i].info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
|
||||
func_80876D28(this, globalCtx);
|
||||
Math_Vec3s_ToVec3f(&sp3C, &this->collider2.elements[i].info.bumper.hitPos);
|
||||
if (this->actor.colChkInfo.damageEffect == 0xF) {
|
||||
@ -976,7 +977,8 @@ void EnDodongo_UpdateDamage(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if ((i != ARRAY_COUNT(this->collider1Elements)) &&
|
||||
((this->unk_300 != 10) || !(this->collider1.elements[i].info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
|
||||
((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->collider1.elements[i].info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
|
||||
func_80876D28(this, globalCtx);
|
||||
if (this->actor.colChkInfo.damageEffect != 0xF) {
|
||||
if (!Actor_ApplyDamage(&this->actor)) {
|
||||
@ -1000,9 +1002,9 @@ void EnDodongo_UpdateDamage(EnDodongo* this, GlobalContext* globalCtx) {
|
||||
this->timer = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 0xFF, 0, 40);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
this->unk_300 = 30;
|
||||
this->unk_340 = 0.75f;
|
||||
this->unk_33C = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
func_80878594(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 3) {
|
||||
func_80876CAC(this);
|
||||
@ -1043,12 +1045,12 @@ void EnDodongo_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
CollisionCheck_SetAT(globalCtx, &globalCtx->colChkCtx, &this->collider3.base);
|
||||
}
|
||||
|
||||
if (this->unk_33C > 0.0f) {
|
||||
if (this->unk_300 != 10) {
|
||||
Math_StepToF(&this->unk_33C, 0.0f, 0.05f);
|
||||
this->unk_340 = (this->unk_33C + 1.0f) * 0.375f;
|
||||
this->unk_340 = (this->unk_340 > 0.75f) ? 0.75f : this->unk_340;
|
||||
} else if (!Math_StepToF(&this->unk_344, 0.75f, 0.01875f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.375f;
|
||||
this->drawDmgEffScale = (this->drawDmgEffScale > 0.75f) ? 0.75f : this->drawDmgEffScale;
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1079,20 +1081,20 @@ void EnDodongo_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
|
||||
Collider_UpdateSpheres(limbIndex, &this->collider1);
|
||||
Collider_UpdateSpheres(limbIndex, &this->collider2);
|
||||
if (D_80879388[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_348[D_80879388[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_80879388[limbIndex]]);
|
||||
}
|
||||
|
||||
if (limbIndex == 7) {
|
||||
Matrix_MultiplyVector3fByState(&D_80879370, &this->unk_308);
|
||||
Matrix_MultiplyVector3fByState(&D_8087937C, &this->unk_348[0]);
|
||||
Matrix_MultiplyVector3fByState(&D_8087937C, &this->limbPos[0]);
|
||||
Matrix_GetStateTranslation(&this->actor.focus.pos);
|
||||
Matrix_GetStateTranslationAndScaledY(-200.0f, &this->unk_348[1]);
|
||||
Matrix_GetStateTranslationAndScaledY(-200.0f, &this->limbPos[1]);
|
||||
} else if (limbIndex == 13) {
|
||||
Matrix_GetStateTranslationAndScaledX(1600.0f, &this->unk_320);
|
||||
}
|
||||
|
||||
if ((limbIndex == 30) && (this->actionFunc == func_80878424) && (this->timer != this->unk_304)) {
|
||||
EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, &this->unk_348[4]);
|
||||
EffectBlure_AddVertex(Effect_GetByIndex(this->unk_338), &this->unk_320, &this->limbPos[4]);
|
||||
this->unk_304 = this->timer;
|
||||
}
|
||||
}
|
||||
@ -1103,6 +1105,7 @@ void EnDodongo_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, EnDodongo_OverrideLimbDraw,
|
||||
EnDodongo_PostLimbDraw, &this->actor);
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_348, ARRAY_COUNT(this->unk_348), this->unk_340 * this->unk_334,
|
||||
this->unk_344 * this->unk_334, this->unk_33C, this->unk_300);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale * this->unk_334, this->drawDmgEffFrozenSteamScale * this->unk_334,
|
||||
this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ typedef struct EnDodongo {
|
||||
/* 0x188 */ Vec3s jointTable[31];
|
||||
/* 0x242 */ Vec3s morphTable[31];
|
||||
/* 0x2FC */ EnDodongoActionFunc actionFunc;
|
||||
/* 0x300 */ u8 unk_300;
|
||||
/* 0x300 */ u8 drawDmgEffType;
|
||||
/* 0x302 */ s16 timer;
|
||||
/* 0x304 */ s16 unk_304;
|
||||
/* 0x306 */ s16 unk_306;
|
||||
@ -24,10 +24,10 @@ typedef struct EnDodongo {
|
||||
/* 0x330 */ Color_RGBA8 unk_330;
|
||||
/* 0x334 */ f32 unk_334;
|
||||
/* 0x338 */ s32 unk_338;
|
||||
/* 0x33C */ f32 unk_33C;
|
||||
/* 0x340 */ f32 unk_340;
|
||||
/* 0x344 */ f32 unk_344;
|
||||
/* 0x348 */ Vec3f unk_348[9];
|
||||
/* 0x33C */ f32 drawDmgEffAlpha;
|
||||
/* 0x340 */ f32 drawDmgEffScale;
|
||||
/* 0x344 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x348 */ Vec3f limbPos[9];
|
||||
/* 0x3B4 */ ColliderJntSph collider1;
|
||||
/* 0x3D4 */ ColliderJntSphElement collider1Elements[10];
|
||||
/* 0x654 */ ColliderJntSph collider2;
|
||||
|
@ -168,10 +168,10 @@ void EnFirefly_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void EnFirefly_SpawnIceEffects(EnFirefly* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_18F == 0xA) {
|
||||
this->unk_18F = 0;
|
||||
this->unk_2E8.x = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, &this->unk_2F8, 3, 2, 0.2f, 0.2f);
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, &this->limbPos[0], 3, 2, 0.2f, 0.2f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,24 +340,24 @@ void EnFirefly_SetupFall(EnFirefly* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->actor.colChkInfo.damageEffect == 3) {
|
||||
this->unk_18F = 0xA;
|
||||
this->unk_2E8.x = 1.0f;
|
||||
this->unk_2E8.y = 0.55f;
|
||||
this->unk_2E8.z = 0.82500005f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.82500005f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_18F = 0x14;
|
||||
this->unk_2E8.x = 4.0f;
|
||||
this->unk_2E8.y = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, this->collider.info.bumper.hitPos.x,
|
||||
this->collider.info.bumper.hitPos.y, this->collider.info.bumper.hitPos.z, 0, 0, 0,
|
||||
CLEAR_TAG_SMALL_LIGHT_RAYS);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_18F = 0;
|
||||
this->unk_2E8.x = 4.0f;
|
||||
this->unk_2E8.y = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
}
|
||||
|
||||
if (this->unk_2E8.x > 0.0f) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
this->auraType = KEESE_AURA_NONE;
|
||||
}
|
||||
|
||||
@ -374,7 +374,7 @@ void EnFirefly_Fall(EnFirefly* this, GlobalContext* globalCtx) {
|
||||
Math_StepToF(&this->actor.speedXZ, 0.0f, 0.5f);
|
||||
|
||||
if (!(this->actor.flags & ACTOR_FLAG_8000)) {
|
||||
if (this->unk_18F != 0xA) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_ScaledStepToS(&this->actor.shape.rot.x, 0x6800, 0x200);
|
||||
this->actor.shape.rot.y -= 0x300;
|
||||
}
|
||||
@ -566,8 +566,8 @@ void EnFirefly_Stunned(EnFirefly* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
this->actor.colorFilterTimer = 40;
|
||||
|
||||
if (this->unk_2E8.x > 0.0f) {
|
||||
this->unk_2E8.x = 2.0f;
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -638,9 +638,9 @@ void EnFirefly_UpdateDamage(EnFirefly* this, GlobalContext* globalCtx) {
|
||||
EnFirefly_SetupStunned(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->timer = 40;
|
||||
this->unk_18F = 0x1F;
|
||||
this->unk_2E8.x = 2.0f;
|
||||
this->unk_2E8.y = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
EnFirefly_SetupStunned(this);
|
||||
} else {
|
||||
Enemy_StartFinishingBlow(globalCtx, &this->actor);
|
||||
@ -710,12 +710,12 @@ void EnFirefly_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
|
||||
if (this->unk_2E8.x > 0.0f) {
|
||||
if (this->unk_18F != 0xA) {
|
||||
Math_StepToF(&this->unk_2E8.x, 0.0f, 0.05f);
|
||||
this->unk_2E8.y = (this->unk_2E8.x + 1.0f) * 0.275f;
|
||||
this->unk_2E8.y = CLAMP_MAX(this->unk_2E8.y, 0.55f);
|
||||
} else if (!Math_StepToF(&this->unk_2E8.z, 0.55f, 0.01375f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -793,11 +793,11 @@ void EnFirefly_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
|
||||
}
|
||||
|
||||
if (limbIndex == 15) {
|
||||
Matrix_GetStateTranslation(&this->unk_2F8);
|
||||
Matrix_GetStateTranslation(&this->limbPos[0]);
|
||||
} else if (limbIndex == 21) {
|
||||
Matrix_GetStateTranslation(&this->unk_304);
|
||||
Matrix_GetStateTranslation(&this->limbPos[1]);
|
||||
} else if (limbIndex == 10) {
|
||||
Matrix_GetStateTranslation(&this->unk_310);
|
||||
Matrix_GetStateTranslation(&this->limbPos[2]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -830,8 +830,9 @@ void EnFirefly_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
POLY_OPA_DISP = gfx;
|
||||
}
|
||||
|
||||
func_800BE680(globalCtx, NULL, &this->unk_2F8, 3, this->unk_2E8.y * this->actor.scale.y * 200.0f, this->unk_2E8.z,
|
||||
this->unk_2E8.x, this->unk_18F);
|
||||
Actor_DrawDamageEffects(globalCtx, NULL, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale * this->actor.scale.y * 200.0f, this->drawDmgEffFrozenSteamScale,
|
||||
this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
this->unk_2F4 = globalCtx->gameplayFrames;
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
@ -24,17 +24,17 @@ typedef struct EnFirefly {
|
||||
/* 0x18C */ u8 auraType;
|
||||
/* 0x18D */ u8 currentType;
|
||||
/* 0x18E */ u8 isInvisible;
|
||||
/* 0x18F */ u8 unk_18F;
|
||||
/* 0x18F */ u8 drawDmgEffType;
|
||||
/* 0x190 */ s16 timer;
|
||||
/* 0x192 */ s16 targetPitch;
|
||||
/* 0x194 */ Vec3s jointTable[28];
|
||||
/* 0x23C */ Vec3s morphTable[28];
|
||||
/* 0x2E4 */ f32 maxAltitude;
|
||||
/* 0x2E8 */ Vec3f unk_2E8;
|
||||
/* 0x2E8 */ f32 drawDmgEffAlpha;
|
||||
/* 0x2E8 */ f32 drawDmgEffScale;
|
||||
/* 0x2E8 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x2F4 */ u32 unk_2F4;
|
||||
/* 0x2F8 */ Vec3f unk_2F8;
|
||||
/* 0x304 */ Vec3f unk_304;
|
||||
/* 0x310 */ Vec3f unk_310;
|
||||
/* 0x2F8 */ Vec3f limbPos[3];
|
||||
/* 0x31C */ ColliderSphere collider;
|
||||
} EnFirefly; // size = 0x374
|
||||
|
||||
|
@ -233,10 +233,10 @@ void func_808D0930(EnFloormas* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_808D09CC(EnFloormas* this) {
|
||||
this->unk_18C = 10;
|
||||
this->unk_2C8 = 0.55f;
|
||||
this->unk_2CC = 0.82500005f;
|
||||
this->unk_2C4 = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.82500005f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->collider.base.colType = COLTYPE_HIT3;
|
||||
this->unk_18E = 80;
|
||||
this->actor.flags &= ~(ACTOR_FLAG_200 | ACTOR_FLAG_400);
|
||||
@ -244,11 +244,11 @@ void func_808D09CC(EnFloormas* this) {
|
||||
}
|
||||
|
||||
void func_808D0A48(EnFloormas* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_18C == 10) {
|
||||
this->unk_18C = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider.base.colType = COLTYPE_HIT0;
|
||||
this->unk_2C4 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_2D0, ARRAY_COUNT(this->unk_2D0), 2,
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2,
|
||||
this->actor.scale.x * 30.000002f, this->actor.scale.x * 20.0f);
|
||||
if (this->actor.scale.x > 0.009f) {
|
||||
this->actor.flags |= ACTOR_FLAG_400;
|
||||
@ -556,7 +556,7 @@ void func_808D19D4(EnFloormas* this) {
|
||||
Actor* parent;
|
||||
|
||||
this->actor.colorFilterTimer = 0;
|
||||
this->unk_2C4 = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SetScale(&this->actor, 0.004f);
|
||||
this->actor.flags |= ACTOR_FLAG_10;
|
||||
if CHECK_FLAG_ALL (this->actor.flags, ACTOR_FLAG_80) {
|
||||
@ -896,7 +896,7 @@ void func_808D2A20(EnFloormas* this) {
|
||||
EnFloormas* parent = (EnFloormas*)this->actor.parent;
|
||||
EnFloormas* child = (EnFloormas*)this->actor.child;
|
||||
|
||||
this->unk_2C4 = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
|
||||
if ((parent->actionFunc == func_808D2AA8) && (child->actionFunc == func_808D2AA8)) {
|
||||
func_808D2AB8(parent);
|
||||
@ -1009,16 +1009,17 @@ void func_808D2E34(EnFloormas* this, GlobalContext* globalCtx) {
|
||||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
Actor_SetDropFlag(&this->actor, &this->collider.info);
|
||||
if ((this->unk_18C != 10) || !(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if (this->actor.colChkInfo.damageEffect == 0xE) {
|
||||
func_808D0908(this);
|
||||
this->actor.colorFilterTimer = 0;
|
||||
this->actor.colChkInfo.damage = 4;
|
||||
this->unk_192 = -1600;
|
||||
this->actor.gravity = -1.0f;
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->unk_2C8 = 0.55f;
|
||||
this->unk_18C = 20;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
}
|
||||
|
||||
if (this->collider.base.colType != COLTYPE_HARD) {
|
||||
@ -1053,19 +1054,19 @@ void func_808D2E34(EnFloormas* this, GlobalContext* globalCtx) {
|
||||
this->unk_18E = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
this->unk_2C8 = 0.55f;
|
||||
this->unk_2C4 = 2.0f;
|
||||
this->unk_18C = 31;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
|
||||
func_808D2D6C(this);
|
||||
} else {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->unk_2C8 = 0.55f;
|
||||
this->unk_18C = 0;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->unk_2C8 = 0.55f;
|
||||
this->unk_18C = 20;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.55f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.info.bumper.hitPos.x, this->collider.info.bumper.hitPos.y,
|
||||
this->collider.info.bumper.hitPos.z, 0, 0, 0,
|
||||
@ -1133,12 +1134,12 @@ void EnFloormas_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
if (this->unk_2C4 > 0.0f) {
|
||||
if (this->unk_18C != 10) {
|
||||
Math_StepToF(&this->unk_2C4, 0.0f, 0.05f);
|
||||
this->unk_2C8 = (this->unk_2C4 + 1.0f) * 0.275f;
|
||||
this->unk_2C8 = CLAMP_MAX(this->unk_2C8, 0.55f);
|
||||
} else if (!Math_StepToF(&this->unk_2CC, 0.55f, 0.01375f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.275f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.55f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.55f, 0.01375f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1161,12 +1162,12 @@ void EnFloormas_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLis
|
||||
EnFloormas* this = THIS;
|
||||
|
||||
if (D_808D393C[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_2D0[D_808D393C[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_808D393C[limbIndex]]);
|
||||
}
|
||||
|
||||
if (limbIndex == 19) {
|
||||
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->unk_2D0[9]);
|
||||
Matrix_GetStateTranslationAndScaledX(-1000.0f, &this->unk_2D0[10]);
|
||||
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->limbPos[9]);
|
||||
Matrix_GetStateTranslationAndScaledX(-1000.0f, &this->limbPos[10]);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1203,9 +1204,10 @@ void EnFloormas_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2D0, ARRAY_COUNT(this->unk_2D0),
|
||||
100.0f * (this->unk_2C8 * this->actor.scale.x), 100.0f * (this->unk_2CC * this->actor.scale.x),
|
||||
this->unk_2C4, this->unk_18C);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
100.0f * (this->drawDmgEffScale * this->actor.scale.x),
|
||||
100.0f * (this->drawDmgEffFrozenSteamScale * this->actor.scale.x), this->drawDmgEffAlpha,
|
||||
this->drawDmgEffType);
|
||||
}
|
||||
|
||||
void func_808D3754(Actor* thisx, GlobalContext* globalCtx) {
|
||||
@ -1227,7 +1229,8 @@ void func_808D3754(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2D0, ARRAY_COUNT(this->unk_2D0),
|
||||
this->unk_2C8 * this->actor.scale.x * 100.0f, this->unk_2CC * this->actor.scale.x * 100.0f,
|
||||
this->unk_2C4, this->unk_18C);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale * this->actor.scale.x * 100.0f,
|
||||
this->drawDmgEffFrozenSteamScale * this->actor.scale.x * 100.0f, this->drawDmgEffAlpha,
|
||||
this->drawDmgEffType);
|
||||
}
|
||||
|
@ -21,17 +21,17 @@ typedef struct EnFloormas {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ SkelAnime skelAnime;
|
||||
/* 0x0188 */ EnFloormasActionFunc actionFunc;
|
||||
/* 0x018C */ u8 unk_18C;
|
||||
/* 0x018C */ u8 drawDmgEffType;
|
||||
/* 0x018E */ s16 unk_18E;
|
||||
/* 0x0190 */ s16 unk_190;
|
||||
/* 0x0192 */ s16 unk_192;
|
||||
/* 0x0194 */ s16 unk_194;
|
||||
/* 0x0196 */ Vec3s jointTable[25];
|
||||
/* 0x022C */ Vec3s morphTable[25];
|
||||
/* 0x02C4 */ f32 unk_2C4;
|
||||
/* 0x02C8 */ f32 unk_2C8;
|
||||
/* 0x02CC */ f32 unk_2CC;
|
||||
/* 0x02D0 */ Vec3f unk_2D0[11];
|
||||
/* 0x02C4 */ f32 drawDmgEffAlpha;
|
||||
/* 0x02C8 */ f32 drawDmgEffScale;
|
||||
/* 0x02CC */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x02D0 */ Vec3f limbPos[11];
|
||||
/* 0x0354 */ ColliderCylinder collider;
|
||||
} EnFloormas; // size = 0x3A0
|
||||
|
||||
|
@ -227,9 +227,9 @@ void EnFz_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
this->unk_BA4 = 0;
|
||||
this->unk_BA0 = 0.0f;
|
||||
this->unk_B9C = 0.0f;
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
func_80932784(this, globalCtx);
|
||||
}
|
||||
|
||||
@ -416,8 +416,8 @@ void func_80932C98(EnFz* this, GlobalContext* globalCtx) {
|
||||
this->collider1.base.acFlags &= ~AC_HIT;
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
case 4:
|
||||
this->unk_BA4 = 0x28;
|
||||
this->unk_B9C = 1.0f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
|
||||
case 15:
|
||||
Actor_ApplyDamage(&this->actor);
|
||||
@ -773,16 +773,16 @@ void func_80933B38(EnFz* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_80933B48(EnFz* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_BA4 != 0) {
|
||||
if (this->unk_BA4 > 0) {
|
||||
this->unk_BA4--;
|
||||
if (this->drawDmgEffTimer != 0) {
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->unk_BA4 < 20) {
|
||||
Math_SmoothStepToF(&this->unk_BA0, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->unk_B9C = this->unk_BA4 * 0.05f;
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_BA0, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -862,17 +862,17 @@ void EnFz_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
func_80934464(this, globalCtx);
|
||||
|
||||
if (this->unk_BA4 > 0) {
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
s32 pad2[6];
|
||||
Vec3f sp58;
|
||||
Vec3f sp4C;
|
||||
Vec3f limbPos[2];
|
||||
s32 pad3;
|
||||
|
||||
sp4C = this->actor.world.pos;
|
||||
sp58 = this->actor.world.pos;
|
||||
sp4C.y += 20.0f;
|
||||
sp58.y += 40.0f;
|
||||
func_800BE680(globalCtx, NULL, &sp4C, 2, this->unk_BA0 * 4.0f, 0.5f, this->unk_B9C, 20);
|
||||
limbPos[0] = this->actor.world.pos;
|
||||
limbPos[1] = this->actor.world.pos;
|
||||
limbPos[0].y += 20.0f;
|
||||
limbPos[1].y += 40.0f;
|
||||
Actor_DrawDamageEffects(globalCtx, NULL, limbPos, ARRAY_COUNT(limbPos), this->drawDmgEffScale * 4.0f, 0.5f,
|
||||
this->drawDmgEffAlpha, ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
@ -1004,7 +1004,7 @@ void func_80934464(EnFz* this, GlobalContext* globalCtx) {
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
|
||||
if (flag == 0) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_051180);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamDL);
|
||||
flag++;
|
||||
}
|
||||
|
||||
@ -1018,7 +1018,7 @@ void func_80934464(EnFz* this, GlobalContext* globalCtx) {
|
||||
Matrix_Scale(ptr->unk_30, ptr->unk_30, 1.0f, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_051238);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gFrozenSteamVtxDL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,9 +43,9 @@ typedef struct EnFz {
|
||||
/* 0x22C */ Vec3f unk_22C;
|
||||
/* 0x238 */ f32 unk_238;
|
||||
/* 0x23C */ EnFzStruct unk_23C[40];
|
||||
/* 0xB9C */ f32 unk_B9C;
|
||||
/* 0xBA0 */ f32 unk_BA0;
|
||||
/* 0xBA4 */ s16 unk_BA4;
|
||||
/* 0xB9C */ f32 drawDmgEffAlpha;
|
||||
/* 0xBA0 */ f32 drawDmgEffScale;
|
||||
/* 0xBA4 */ s16 drawDmgEffTimer;
|
||||
/* 0xBA8 */ f32 unk_BA8;
|
||||
/* 0xBAC */ f32 unk_BAC;
|
||||
/* 0xBB0 */ f32 unk_BB0;
|
||||
|
@ -162,7 +162,7 @@ void EnHintSkb_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->unk_3DE = 0;
|
||||
this->unk_3E0 = 0;
|
||||
this->unk_3DC = 0;
|
||||
this->unk_3E9 = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
func_80C1FE0C(this);
|
||||
}
|
||||
|
||||
@ -340,10 +340,10 @@ void func_80C20540(EnHintSkb* this) {
|
||||
}
|
||||
|
||||
void func_80C20590(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3E2 == 0) {
|
||||
this->unk_3E2 = 0;
|
||||
this->unk_2D8 = 0.0f;
|
||||
this->unk_2D4 = 0.0f;
|
||||
if (this->drawDmgEffTimer == 0) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -354,7 +354,7 @@ void func_80C20590(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD);
|
||||
func_80C20484(this);
|
||||
}
|
||||
} else if (this->unk_3E2 == 1) {
|
||||
} else if (this->drawDmgEffTimer == 1) {
|
||||
func_80C21468(this, globalCtx);
|
||||
}
|
||||
}
|
||||
@ -367,10 +367,10 @@ void func_80C2066C(EnHintSkb* this) {
|
||||
}
|
||||
|
||||
void func_80C2069C(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3E2 == 0) {
|
||||
this->unk_3E2 = 0;
|
||||
this->unk_2D8 = 0.0f;
|
||||
this->unk_2D4 = 0.0f;
|
||||
if (this->drawDmgEffTimer == 0) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -636,10 +636,10 @@ void func_80C20E90(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
if (this->unk_3E2 >= 2) {
|
||||
if (this->drawDmgEffTimer > 1) {
|
||||
func_80C21468(this, globalCtx);
|
||||
}
|
||||
this->unk_3E2 = 0;
|
||||
this->drawDmgEffTimer = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -655,10 +655,10 @@ void func_80C20E90(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
case 11:
|
||||
this->unk_3E9 = 30;
|
||||
this->unk_3E2 = 40;
|
||||
this->unk_2D4 = 1.0f;
|
||||
this->unk_2D8 = 0.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
|
||||
func_80C2011C(this);
|
||||
break;
|
||||
@ -669,10 +669,10 @@ void func_80C20E90(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_3E2 = 80;
|
||||
this->unk_3E9 = 0;
|
||||
this->unk_2D4 = 1.0f;
|
||||
this->unk_2D8 = 0.0f;
|
||||
this->drawDmgEffTimer = 80;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
this->unk_3E8 |= 1;
|
||||
@ -681,21 +681,21 @@ void func_80C20E90(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
case 3:
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
this->unk_3E2 = 80;
|
||||
this->drawDmgEffTimer = 80;
|
||||
} else {
|
||||
this->unk_3E2 = 3;
|
||||
this->drawDmgEffTimer = 3;
|
||||
}
|
||||
this->unk_3E9 = 11;
|
||||
this->unk_2D4 = 1.0f;
|
||||
this->unk_2D8 = 0.5f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
func_80C20540(this);
|
||||
break;
|
||||
case 4:
|
||||
this->unk_3E2 = 40;
|
||||
this->unk_3E9 = 20;
|
||||
this->unk_2D4 = 1.0f;
|
||||
this->unk_2D8 = 0.5f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -747,20 +747,20 @@ void func_80C21250(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_80C21320(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3E2 > 0) {
|
||||
this->unk_3E2--;
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->actionFunc != func_80C20590) {
|
||||
if (this->unk_3E2 < 20) {
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
if (this->actionFunc == func_80C2069C) {
|
||||
Math_SmoothStepToF(&this->unk_2D8, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_2D8, 0.0f, 0.5f, 0.01f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.01f, 0.0f);
|
||||
}
|
||||
this->unk_2D4 = this->unk_3E2 * 0.05f;
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_2D8, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -782,21 +782,21 @@ void func_80C21468(EnHintSkb* this, GlobalContext* globalCtx) {
|
||||
s32 i;
|
||||
|
||||
if (this->unk_3E8 & 2) {
|
||||
phi_s4 = ARRAY_COUNT(this->unk_22C) - 1;
|
||||
phi_s4 = ARRAY_COUNT(this->limbPos) - 1;
|
||||
} else {
|
||||
phi_s4 = ARRAY_COUNT(this->unk_22C);
|
||||
phi_s4 = ARRAY_COUNT(this->limbPos);
|
||||
}
|
||||
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN);
|
||||
|
||||
for (i = 0; i < phi_s4; i++) {
|
||||
temp_s1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_22C[i]);
|
||||
temp_s1 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]);
|
||||
|
||||
sp84.x = Math_SinS(temp_s1) * 3.0f;
|
||||
sp84.z = Math_CosS(temp_s1) * 3.0f;
|
||||
sp84.y = (Rand_ZeroOne() * 4.0f) + 4.0f;
|
||||
|
||||
EffectSsEnIce_Spawn(globalCtx, &this->unk_22C[i], 0.6f, &sp84, &D_80C21E4C, &D_80C21E44, &D_80C21E48, 30);
|
||||
EffectSsEnIce_Spawn(globalCtx, &this->limbPos[i], 0.6f, &sp84, &D_80C21E4C, &D_80C21E44, &D_80C21E48, 30);
|
||||
}
|
||||
}
|
||||
|
||||
@ -879,15 +879,15 @@ void EnHintSkb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
|
||||
Actor_SpawnBodyParts(&this->actor, globalCtx, 1, dList);
|
||||
}
|
||||
|
||||
if (this->unk_3E2 != 0) {
|
||||
if (this->drawDmgEffTimer != 0) {
|
||||
if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) ||
|
||||
(limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) ||
|
||||
(limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) {
|
||||
Matrix_GetStateTranslation(&this->unk_22C[this->unk_2DC]);
|
||||
this->unk_2DC++;
|
||||
Matrix_GetStateTranslation(&this->limbPos[this->limbCount]);
|
||||
this->limbCount++;
|
||||
} else if ((limbIndex == 11) && !(this->unk_3E8 & 2)) {
|
||||
Matrix_MultiplyVector3fByState(&D_80C21E70, &this->unk_22C[this->unk_2DC]);
|
||||
this->unk_2DC++;
|
||||
Matrix_MultiplyVector3fByState(&D_80C21E70, &this->limbPos[this->limbCount]);
|
||||
this->limbCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -896,13 +896,13 @@ void EnHintSkb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
|
||||
void EnHintSkb_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnHintSkb* this = THIS;
|
||||
|
||||
this->unk_2DC = 0;
|
||||
this->limbCount = 0;
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, EnHintSkb_OverrideLimbDraw,
|
||||
EnHintSkb_PostLimbDraw, &this->actor);
|
||||
if (this->unk_3E2 > 0) {
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_22C, this->unk_2DC, this->unk_2D8, 0.5f, this->unk_2D4,
|
||||
this->unk_3E9);
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, this->limbCount, this->drawDmgEffScale, 0.5f,
|
||||
this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
||||
if (this->unk_3E8 & 4) {
|
||||
|
@ -15,21 +15,21 @@ typedef struct EnHintSkb {
|
||||
/* 0x0164 */ ColliderJntSphElement colliderElement[2];
|
||||
/* 0x01E4 */ SkelAnime skelAnime;
|
||||
/* 0x0228 */ EnHintSkbActionFunc actionFunc;
|
||||
/* 0x022C */ Vec3f unk_22C[14];
|
||||
/* 0x02D4 */ f32 unk_2D4;
|
||||
/* 0x02D8 */ f32 unk_2D8;
|
||||
/* 0x02DC */ s32 unk_2DC;
|
||||
/* 0x022C */ Vec3f limbPos[14];
|
||||
/* 0x02D4 */ f32 drawDmgEffAlpha;
|
||||
/* 0x02D8 */ f32 drawDmgEffScale;
|
||||
/* 0x02DC */ s32 limbCount;
|
||||
/* 0x02E0 */ Vec3s jointTable[20];
|
||||
/* 0x0358 */ Vec3s morphtable[20];
|
||||
/* 0x03D0 */ UNK_TYPE1 unk3D0[0xC];
|
||||
/* 0x03DC */ s16 unk_3DC;
|
||||
/* 0x03DE */ s16 unk_3DE;
|
||||
/* 0x03E0 */ s16 unk_3E0;
|
||||
/* 0x03E2 */ s16 unk_3E2;
|
||||
/* 0x03E2 */ s16 drawDmgEffTimer;
|
||||
/* 0x03E4 */ s16 unk_3E4;
|
||||
/* 0x03E6 */ u16 unk_3E6;
|
||||
/* 0x03E8 */ u8 unk_3E8;
|
||||
/* 0x03E9 */ u8 unk_3E9;
|
||||
/* 0x03E9 */ u8 drawDmgEffType;
|
||||
} EnHintSkb; // size = 0x3EC
|
||||
|
||||
extern const ActorInit En_Hint_Skb_InitVars;
|
||||
|
@ -163,10 +163,10 @@ void func_80AD6F34(EnKame* this) {
|
||||
}
|
||||
|
||||
void func_80AD6F9C(EnKame* this) {
|
||||
this->unk_29D = 10;
|
||||
this->unk_2B4 = 0.6f;
|
||||
this->unk_2B8 = 0.90000004f;
|
||||
this->unk_2B0 = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 0.6f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.90000004f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->collider.base.colType = COLTYPE_HIT3;
|
||||
this->unk_2A2 = 80;
|
||||
this->actor.flags &= ~ACTOR_FLAG_400;
|
||||
@ -174,11 +174,11 @@ void func_80AD6F9C(EnKame* this) {
|
||||
}
|
||||
|
||||
void func_80AD7018(EnKame* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_29D == 10) {
|
||||
this->unk_29D = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider.base.colType = COLTYPE_HIT6;
|
||||
this->unk_2B0 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_2C8, 10, 2, 0.3f, 0.2f);
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 10, 2, 0.3f, 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_400;
|
||||
}
|
||||
}
|
||||
@ -617,7 +617,8 @@ void func_80AD84C0(EnKame* this, GlobalContext* globalCtx) {
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
|
||||
Actor_SetDropFlag(&this->actor, &this->collider.info);
|
||||
if ((this->unk_29D == 10) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -644,9 +645,9 @@ void func_80AD84C0(EnKame* this, GlobalContext* globalCtx) {
|
||||
this->unk_2A2 = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
this->unk_2B4 = 0.6f;
|
||||
this->unk_2B0 = 2.0f;
|
||||
this->unk_29D = 30;
|
||||
this->drawDmgEffScale = 0.6f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
func_80AD7FA4(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 1) {
|
||||
this->unk_2A2 = 40;
|
||||
@ -662,13 +663,13 @@ void func_80AD84C0(EnKame* this, GlobalContext* globalCtx) {
|
||||
func_80AD7FA4(this);
|
||||
} else {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_2B4 = 0.6f;
|
||||
this->unk_2B0 = 4.0f;
|
||||
this->unk_29D = 0;
|
||||
this->drawDmgEffScale = 0.6f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_2B4 = 0.6f;
|
||||
this->unk_2B0 = 4.0f;
|
||||
this->unk_29D = 20;
|
||||
this->drawDmgEffScale = 0.6f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.info.bumper.hitPos.x, this->collider.info.bumper.hitPos.y,
|
||||
this->collider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -732,16 +733,16 @@ void EnKame_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
|
||||
if (this->unk_2B0 > 0.0f) {
|
||||
if (this->unk_29D != 10) {
|
||||
Math_StepToF(&this->unk_2B0, 0.0f, 0.05f);
|
||||
this->unk_2B4 = (this->unk_2B0 + 1.0f) * 0.3f;
|
||||
if (this->unk_2B4 > 0.6f) {
|
||||
this->unk_2B4 = 0.6f;
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.3f;
|
||||
if (this->drawDmgEffScale > 0.6f) {
|
||||
this->drawDmgEffScale = 0.6f;
|
||||
} else {
|
||||
this->unk_2B4 = this->unk_2B4;
|
||||
this->drawDmgEffScale = this->drawDmgEffScale;
|
||||
}
|
||||
} else if (!Math_StepToF(&this->unk_2B8, 0.6f, 0.015000001f)) {
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.6f, 0.015000001f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -769,7 +770,7 @@ void func_80AD8AF8(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
EnKame* this = THIS;
|
||||
|
||||
if (D_80AD8EA4[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_2C8[D_80AD8EA4[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_80AD8EA4[limbIndex]]);
|
||||
}
|
||||
|
||||
if (limbIndex == 1) {
|
||||
@ -782,7 +783,7 @@ void func_80AD8AF8(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s*
|
||||
}
|
||||
|
||||
ptr2 = D_80AD8E68;
|
||||
ptr = &this->unk_2C8[5];
|
||||
ptr = &this->limbPos[5];
|
||||
for (i = 0; i < ARRAY_COUNT(D_80AD8E68); i++) {
|
||||
Matrix_MultiplyVector3fByState(ptr2, ptr);
|
||||
ptr2++;
|
||||
@ -807,8 +808,8 @@ void EnKame_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime1.skeleton, this->skelAnime1.jointTable,
|
||||
this->skelAnime1.dListCount, func_80AD8A48, func_80AD8AF8, &this->actor);
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2C8, 10, this->unk_2B4, this->unk_2B8, this->unk_2B0,
|
||||
this->unk_29D);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
if (this->actor.shape.shadowDraw == NULL) {
|
||||
ActorShadow_DrawCircle(&this->actor, NULL, globalCtx);
|
||||
|
@ -17,7 +17,7 @@ typedef struct EnKame {
|
||||
/* 0x0280 */ Vec3s morphTable2[4];
|
||||
/* 0x0298 */ EnKameActionFunc actionFunc;
|
||||
/* 0x029C */ u8 unk_29C;
|
||||
/* 0x029D */ u8 unk_29D;
|
||||
/* 0x029D */ u8 drawDmgEffType;
|
||||
/* 0x029E */ s16 unk_29E;
|
||||
/* 0x02A0 */ s16 unk_2A0;
|
||||
/* 0x02A2 */ s16 unk_2A2;
|
||||
@ -25,11 +25,11 @@ typedef struct EnKame {
|
||||
/* 0x02A6 */ s16 unk_2A6;
|
||||
/* 0x02A8 */ f32 unk_2A8;
|
||||
/* 0x02AC */ f32 unk_2AC;
|
||||
/* 0x02B0 */ f32 unk_2B0;
|
||||
/* 0x02B4 */ f32 unk_2B4;
|
||||
/* 0x02B8 */ f32 unk_2B8;
|
||||
/* 0x02B0 */ f32 drawDmgEffAlpha;
|
||||
/* 0x02B4 */ f32 drawDmgEffScale;
|
||||
/* 0x02B8 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x02BC */ Vec3f unk_2BC;
|
||||
/* 0x02C8 */ Vec3f unk_2C8[10];
|
||||
/* 0x02C8 */ Vec3f limbPos[10];
|
||||
/* 0x0340 */ ColliderCylinder collider;
|
||||
} EnKame; // size = 0x38C
|
||||
|
||||
|
@ -175,39 +175,39 @@ void EnKarebaba_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
void func_808F1374(EnKarebaba* this, GlobalContext* globalCtx) {
|
||||
s32 phi_a3;
|
||||
|
||||
if (this->unk_1EC == 10) {
|
||||
this->unk_1EC = 0;
|
||||
this->unk_1F0 = 0.0f;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.params == ENKAREBABA_2) {
|
||||
phi_a3 = 1;
|
||||
} else {
|
||||
phi_a3 = 4;
|
||||
}
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_1FC, phi_a3, 4, 0.3f, 0.2f);
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, phi_a3, 4, 0.3f, 0.2f);
|
||||
}
|
||||
}
|
||||
|
||||
void func_808F13FC(EnKarebaba* this, GlobalContext* globalCtx) {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_1EC = 0;
|
||||
this->unk_1F4 = 0.75f;
|
||||
this->unk_1F0 = 3.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 3.0f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_1F4 = 0.75f;
|
||||
this->unk_1EC = 20;
|
||||
this->unk_1F0 = 3.0f;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 3.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, this->collider2.info.bumper.hitPos.x,
|
||||
this->collider2.info.bumper.hitPos.y, this->collider2.info.bumper.hitPos.z, 0, 0, 0,
|
||||
CLEAR_TAG_SMALL_LIGHT_RAYS);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 3) {
|
||||
this->unk_1EC = 10;
|
||||
this->unk_1F4 = 0.75f;
|
||||
this->unk_1F0 = 1.0f;
|
||||
this->unk_1F8 = 1.125f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.125f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->unk_1EC = 31;
|
||||
this->unk_1F4 = 0.75f;
|
||||
this->unk_1F0 = 3.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 3.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@ -371,7 +371,7 @@ void func_808F1A58(EnKarebaba* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_808F1BF8(EnKarebaba* this) {
|
||||
if (this->unk_1EC != 10) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->unk_1EE = 0;
|
||||
this->actor.gravity = -0.8f;
|
||||
this->actor.velocity.y = 4.0f;
|
||||
@ -393,7 +393,7 @@ void func_808F1C84(EnKarebaba* this, GlobalContext* globalCtx) {
|
||||
f32 temp_f22;
|
||||
f32 temp_f24;
|
||||
|
||||
if (this->unk_1EC == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->unk_1EE--;
|
||||
if (this->unk_1EE == 0) {
|
||||
this->actor.gravity = -0.8f;
|
||||
@ -446,14 +446,14 @@ void func_808F1FAC(EnKarebaba* this) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_DEKU_JR_DEAD);
|
||||
this->actor.flags |= (ACTOR_FLAG_10 | ACTOR_FLAG_20);
|
||||
this->actor.flags &= ~ACTOR_FLAG_1;
|
||||
if (this->unk_1EC == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->unk_1EE = 3;
|
||||
}
|
||||
this->actionFunc = func_808F200C;
|
||||
}
|
||||
|
||||
void func_808F200C(EnKarebaba* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_1EC == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->unk_1EE--;
|
||||
if (this->unk_1EE == 0) {
|
||||
func_808F1374(this, globalCtx);
|
||||
@ -481,7 +481,7 @@ void func_808F20FC(EnKarebaba* this, GlobalContext* globalCtx) {
|
||||
func_800BC154(globalCtx, &globalCtx->actorCtx, &this->actor, 8);
|
||||
this->unk_1EE = 200;
|
||||
this->actor.flags &= ~ACTOR_FLAG_20;
|
||||
this->unk_1F0 = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
this->actionFunc = func_808F21A4;
|
||||
}
|
||||
|
||||
@ -530,7 +530,7 @@ void func_808F238C(EnKarebaba* this) {
|
||||
this->unk_1EE = 200;
|
||||
this->actor.parent = NULL;
|
||||
this->actor.shape.shadowScale = 0.0f;
|
||||
this->unk_1F0 = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos);
|
||||
this->actionFunc = func_808F254C;
|
||||
}
|
||||
@ -580,16 +580,16 @@ void EnKarebaba_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
|
||||
this->actionFunc(this, globalCtx);
|
||||
|
||||
if (this->unk_1F0 > 0.0f) {
|
||||
if (this->unk_1EC != 10) {
|
||||
Math_StepToF(&this->unk_1F0, 0.0f, 0.05f);
|
||||
this->unk_1F4 = (this->unk_1F0 + 1.0f) * 0.375f;
|
||||
if (this->unk_1F4 > 0.75f) {
|
||||
this->unk_1F4 = 0.75f;
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.375f;
|
||||
if (this->drawDmgEffScale > 0.75f) {
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
} else {
|
||||
this->unk_1F4 = this->unk_1F4;
|
||||
this->drawDmgEffScale = this->drawDmgEffScale;
|
||||
}
|
||||
} else if (!Math_StepToF(&this->unk_1F8, 0.75f, 0.01875f)) {
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -646,13 +646,13 @@ void EnKarebaba_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnKarebaba* this = THIS;
|
||||
s32 i;
|
||||
s32 sp94;
|
||||
s16 phi_a3;
|
||||
s16 limbCount;
|
||||
f32 sp8C = 0.01f;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
Math_Vec3f_Copy(this->unk_1FC, &this->actor.world.pos);
|
||||
Math_Vec3f_Copy(this->limbPos, &this->actor.world.pos);
|
||||
|
||||
if (this->actionFunc == func_808F21A4) {
|
||||
if ((this->unk_1EE > 40) || (this->unk_1EE & 1)) {
|
||||
@ -691,7 +691,7 @@ void EnKarebaba_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, D_808F2E2C[i]);
|
||||
|
||||
Matrix_GetStateTranslation(&this->unk_1FC[1 + i]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[1 + i]);
|
||||
if ((i == 0) && (this->actionFunc == func_808F1C84)) {
|
||||
Matrix_GetStateTranslation(&this->actor.focus.pos);
|
||||
}
|
||||
@ -719,19 +719,19 @@ void EnKarebaba_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_dekubaba_DL_001828);
|
||||
|
||||
Matrix_GetStateTranslation(&this->unk_1FC[3]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[3]);
|
||||
}
|
||||
|
||||
func_800AE5A0(globalCtx);
|
||||
|
||||
if (this->actor.params == ENKAREBABA_2) {
|
||||
phi_a3 = 1;
|
||||
limbCount = 1;
|
||||
} else {
|
||||
phi_a3 = 4;
|
||||
limbCount = ARRAY_COUNT(this->limbPos);
|
||||
}
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_1FC, phi_a3, this->unk_1F4, this->unk_1F8, this->unk_1F0,
|
||||
this->unk_1EC);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, limbCount, this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
if (this->unk_22C != 0) {
|
||||
func_808F280C(this, globalCtx);
|
||||
|
@ -19,12 +19,12 @@ typedef struct EnKarebaba {
|
||||
/* 0x0188 */ EnKarebabaActionFunc actionFunc;
|
||||
/* 0x018C */ Vec3s jointTable[8];
|
||||
/* 0x01BC */ Vec3s morphTable[8];
|
||||
/* 0x01EC */ u8 unk_1EC;
|
||||
/* 0x01EC */ u8 drawDmgEffType;
|
||||
/* 0x01EE */ s16 unk_1EE;
|
||||
/* 0x01F0 */ f32 unk_1F0;
|
||||
/* 0x01F4 */ f32 unk_1F4;
|
||||
/* 0x01F8 */ f32 unk_1F8;
|
||||
/* 0x01FC */ Vec3f unk_1FC[4];
|
||||
/* 0x01F0 */ f32 drawDmgEffAlpha;
|
||||
/* 0x01F4 */ f32 drawDmgEffScale;
|
||||
/* 0x01F8 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x01FC */ Vec3f limbPos[4];
|
||||
/* 0x022C */ CollisionPoly* unk_22C;
|
||||
/* 0x0230 */ ColliderCylinder collider1;
|
||||
/* 0x027C */ ColliderCylinder collider2;
|
||||
|
@ -231,21 +231,21 @@ u8 EnPametfrog_Vec3fNormalize(Vec3f* vec) {
|
||||
}
|
||||
|
||||
void EnPametfrog_Freeze(EnPametfrog* this) {
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_FROZEN;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->collider.base.colType = COLTYPE_HIT3;
|
||||
this->collider.elements->info.elemType = ELEMTYPE_UNK0;
|
||||
this->unk_2C8 = 0.75f;
|
||||
this->unk_2CC = 1.125f;
|
||||
this->unk_2C4 = 1.0f;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.125f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
}
|
||||
|
||||
void EnPametfrog_Thaw(EnPametfrog* this, GlobalContext* globalCtx) {
|
||||
this->freezeTimer = 0;
|
||||
if (this->drawEffect == GEKKO_DRAW_EFFECT_FROZEN) {
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_THAW;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider.base.colType = COLTYPE_HIT6;
|
||||
this->collider.elements->info.elemType = ELEMTYPE_UNK1;
|
||||
this->unk_2C4 = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.3f, 0.2f);
|
||||
}
|
||||
}
|
||||
@ -387,13 +387,13 @@ void EnPametfrog_JumpOnGround(EnPametfrog* this, GlobalContext* globalCtx) {
|
||||
|
||||
void EnPametfrog_ApplyMagicArrowEffects(EnPametfrog* this, GlobalContext* globalCtx) {
|
||||
if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_FIRE) {
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_THAW;
|
||||
this->unk_2C4 = 3.0f;
|
||||
this->unk_2C8 = 0.75f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 3.0f;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_LIGHT) {
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_LIGHT_ORBS;
|
||||
this->unk_2C8 = 0.75f;
|
||||
this->unk_2C4 = 3.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 3.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.elements[0].info.bumper.hitPos.x, this->collider.elements[0].info.bumper.hitPos.y,
|
||||
this->collider.elements[0].info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -406,9 +406,9 @@ void EnPametfrog_ApplyElectricStun(EnPametfrog* this) {
|
||||
this->freezeTimer = 40;
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_ELECTRIC_STUN;
|
||||
this->unk_2C8 = 0.75f;
|
||||
this->unk_2C4 = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
}
|
||||
|
||||
void EnPametfrog_ApplyStun(EnPametfrog* this) {
|
||||
@ -1265,7 +1265,7 @@ void EnPametfrog_TransitionGekkoSnapper(EnPametfrog* this, GlobalContext* global
|
||||
void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, GlobalContext* globalCtx) {
|
||||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
if ((this->drawEffect != GEKKO_DRAW_EFFECT_FROZEN) ||
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->collider.elements->info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if (this->actor.params == GEKKO_PRE_SNAPPER) {
|
||||
if (Actor_ApplyDamage(&this->actor) == 0) {
|
||||
@ -1286,13 +1286,13 @@ void EnPametfrog_ApplyDamageEffect(EnPametfrog* this, GlobalContext* globalCtx)
|
||||
} else {
|
||||
EnPametfrog_Thaw(this, globalCtx);
|
||||
if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_FIRE) {
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_THAW;
|
||||
this->unk_2C8 = 0.75f;
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == GEKKO_DMGEFF_LIGHT) {
|
||||
this->drawEffect = GEKKO_DRAW_EFFECT_LIGHT_ORBS;
|
||||
this->unk_2C8 = 0.75f;
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.elements[0].info.bumper.hitPos.x,
|
||||
this->collider.elements[0].info.bumper.hitPos.y,
|
||||
@ -1357,13 +1357,14 @@ void EnPametfrog_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
if (this->unk_2C4 > 0.0f) {
|
||||
if ((this->drawEffect != GEKKO_DRAW_EFFECT_FROZEN) && (this->actionFunc != EnPametfrog_PlayCutscene)) {
|
||||
Math_StepToF(&this->unk_2C4, 0.0f, 0.05f);
|
||||
unk2C4 = ((this->unk_2C4 + 1.0f) * 0.375f);
|
||||
this->unk_2C8 = unk2C4;
|
||||
this->unk_2C8 = unk2C4 > 0.75f ? 0.75f : this->unk_2C8;
|
||||
} else if (!Math_StepToF(&this->unk_2CC, 0.75f, (3.0f / 160.0f))) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
(this->actionFunc != EnPametfrog_PlayCutscene)) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
unk2C4 = ((this->drawDmgEffAlpha + 1.0f) * 0.375f);
|
||||
this->drawDmgEffScale = unk2C4;
|
||||
this->drawDmgEffScale = unk2C4 > 0.75f ? 0.75f : this->drawDmgEffScale;
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, (3.0f / 160.0f))) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1420,6 +1421,6 @@ void EnPametfrog_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Matrix_RotateY(this->spinYaw, MTXMODE_APPLY);
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
NULL, EnPametfrog_PostLimbDraw, &this->actor);
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->unk_2C8, this->unk_2CC,
|
||||
this->unk_2C4, this->drawEffect);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
@ -20,13 +20,6 @@ typedef enum {
|
||||
/* 0x9 */ GEKKO_DEFEAT,
|
||||
} EnPametfrogState;
|
||||
|
||||
typedef enum {
|
||||
/* 00 */ GEKKO_DRAW_EFFECT_THAW,
|
||||
/* 10 */ GEKKO_DRAW_EFFECT_FROZEN = 10,
|
||||
/* 20 */ GEKKO_DRAW_EFFECT_LIGHT_ORBS = 20,
|
||||
/* 30 */ GEKKO_DRAW_EFFECT_ELECTRIC_STUN = 30,
|
||||
} EnPametfrogDrawEffectType;
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ GEKKO_LIMB_NONE,
|
||||
/* 0x01 */ GEKKO_LIMB_ROOT,
|
||||
@ -61,7 +54,7 @@ typedef struct EnPametfrog {
|
||||
/* 0x188 */ Vec3s jointTable[GEKKO_LIMB_MAX];
|
||||
/* 0x218 */ Vec3s morphTable[GEKKO_LIMB_MAX];
|
||||
/* 0x2A8 */ EnPametfrogActionFunc actionFunc;
|
||||
/* 0x2AC */ u8 drawEffect;
|
||||
/* 0x2AC */ u8 drawDmgEffType;
|
||||
/* 0x2AD */ u8 wallPauseTimer; // Gekko stops 10 times along wall/ceiling after being blown off of Snapper
|
||||
/* 0x2AE */ u8 unk_2AE; // True/False
|
||||
/* 0x2B0 */ s16 cutscene;
|
||||
@ -72,9 +65,9 @@ typedef struct EnPametfrog {
|
||||
/* 0x2BA */ s16 subCamId;
|
||||
/* 0x2BC */ s16 freezeTimer;
|
||||
/* 0x2C0 */ f32 wallRotation;
|
||||
/* 0x2C4 */ f32 unk_2C4;
|
||||
/* 0x2C8 */ f32 unk_2C8;
|
||||
/* 0x2CC */ f32 unk_2CC;
|
||||
/* 0x2C4 */ f32 drawDmgEffAlpha;
|
||||
/* 0x2C8 */ f32 drawDmgEffScale;
|
||||
/* 0x2CC */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x2D0 */ Vec3f unk_2D0; // MtxF zx/zy/zz
|
||||
/* 0x2DC */ Vec3f unk_2DC; // MtxF yx/yy/yz: wallNorm/floorNorm/Base of Gekko walking???
|
||||
/* 0x2E8 */ Vec3f unk_2E8; // MtxF xx/xy/xz
|
||||
|
@ -227,21 +227,21 @@ void EnPeehat_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_80897170(EnPeehat* this) {
|
||||
this->unk_2AE = 10;
|
||||
this->unk_2CC = 1.1f;
|
||||
this->unk_2D0 = 1.6500001f;
|
||||
this->unk_2C8 = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 1.1f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.6500001f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->colliderSphere.base.colType = COLTYPE_HIT3;
|
||||
this->unk_2B0 = 80;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
|
||||
}
|
||||
|
||||
void func_808971DC(EnPeehat* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_2AE == 10) {
|
||||
this->unk_2AE = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->colliderSphere.base.colType = COLTYPE_HIT6;
|
||||
this->unk_2C8 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_2EC, ARRAY_COUNT(this->unk_2EC), 2, 0.5f, 0.35f);
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.5f, 0.35f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -685,7 +685,8 @@ void func_8089874C(EnPeehat* this, GlobalContext* globalCtx) {
|
||||
|
||||
if (this->colliderSphere.base.acFlags & AC_HIT) {
|
||||
this->colliderSphere.base.acFlags &= ~AC_HIT;
|
||||
if ((this->unk_2AE != 10) || !(this->colliderSphere.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->colliderSphere.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if (!Actor_ApplyDamage(&this->actor)) {
|
||||
Enemy_StartFinishingBlow(globalCtx, &this->actor);
|
||||
}
|
||||
@ -698,9 +699,9 @@ void func_8089874C(EnPeehat* this, GlobalContext* globalCtx) {
|
||||
this->unk_2B0 = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 255, 0, 40);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
this->unk_2CC = 1.1f;
|
||||
this->unk_2C8 = 2.0f;
|
||||
this->unk_2AE = 32;
|
||||
this->drawDmgEffScale = 1.1f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
|
||||
func_80898414(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 1) {
|
||||
this->unk_2B0 = 40;
|
||||
@ -716,13 +717,13 @@ void func_8089874C(EnPeehat* this, GlobalContext* globalCtx) {
|
||||
func_80898414(this);
|
||||
} else {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_2C8 = 4.0f;
|
||||
this->unk_2CC = 2.1f;
|
||||
this->unk_2AE = 0;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 2.1f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_2C8 = 4.0f;
|
||||
this->unk_2CC = 1.1f;
|
||||
this->unk_2AE = 20;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 1.1f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->colliderSphere.info.bumper.hitPos.x, this->colliderSphere.info.bumper.hitPos.y,
|
||||
this->colliderSphere.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -731,8 +732,10 @@ void func_8089874C(EnPeehat* this, GlobalContext* globalCtx) {
|
||||
func_808984E0(this);
|
||||
}
|
||||
}
|
||||
} else if ((this->unk_2AE == 10) && (this->colliderCylinder.base.acFlags & AC_HIT) &&
|
||||
((this->unk_2AE != 10) || !(this->colliderCylinder.info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
|
||||
} else if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
(this->colliderCylinder.base.acFlags & AC_HIT) &&
|
||||
((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->colliderCylinder.info.acHitInfo->toucher.dmgFlags & 0xDB0B3))) {
|
||||
func_808971DC(this, globalCtx);
|
||||
this->actor.colorFilterTimer = 0;
|
||||
func_80897648(this);
|
||||
@ -812,17 +815,17 @@ void EnPeehat_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
Math_StepToF(&this->unk_2C4, 0.0f, 0.001f);
|
||||
}
|
||||
|
||||
if (this->unk_2C8 > 0.0f) {
|
||||
if (this->unk_2AE != 10) {
|
||||
Math_StepToF(&this->unk_2C8, 0.0f, 0.05f);
|
||||
if (this->unk_2AE == 0) {
|
||||
this->unk_2CC = (this->unk_2C8 + 1.0f) * 1.05f;
|
||||
this->unk_2CC = CLAMP_MAX(this->unk_2CC, 2.1f);
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) {
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 1.05f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 2.1f);
|
||||
} else {
|
||||
this->unk_2CC = (this->unk_2C8 + 1.0f) * 0.55f;
|
||||
this->unk_2CC = CLAMP_MAX(this->unk_2CC, 1.1f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.55f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 1.1f);
|
||||
}
|
||||
} else if (!Math_StepToF(&this->unk_2D0, 1.1f, 0.0275f)) {
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 1.1f, 0.0275f)) {
|
||||
func_800B9010(thisx, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -879,8 +882,8 @@ void EnPeehat_PostLimbDraw(GlobalContext* globalCtx2, s32 limbIndex, Gfx** dList
|
||||
Gfx* gfx;
|
||||
|
||||
if (index != -1) {
|
||||
Matrix_GetStateTranslationAndScaledX(2000.0f, &this->unk_2EC[index]);
|
||||
Matrix_GetStateTranslationAndScaledX(4000.0f, &this->unk_2EC[index + 1]);
|
||||
Matrix_GetStateTranslationAndScaledX(2000.0f, &this->limbPos[index]);
|
||||
Matrix_GetStateTranslationAndScaledX(4000.0f, &this->limbPos[index + 1]);
|
||||
}
|
||||
|
||||
if (limbIndex == 4) {
|
||||
@ -888,7 +891,7 @@ void EnPeehat_PostLimbDraw(GlobalContext* globalCtx2, s32 limbIndex, Gfx** dList
|
||||
Matrix_GetStateTranslationAndScaledZ(-5500.0f, &this->unk_2D4[1]);
|
||||
} else if ((limbIndex == 3) && (thisx->params == 0)) {
|
||||
Vec3f* vec = &D_80899570[0];
|
||||
Vec3f* vec2 = &this->unk_2EC[12];
|
||||
Vec3f* vec2 = &this->limbPos[12];
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(D_80899570); i++, vec++, vec2++) {
|
||||
Matrix_MultiplyVector3fByState(vec, vec2);
|
||||
@ -937,12 +940,12 @@ void EnPeehat_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Collider_SetTrisVertices(&this->colliderTris, 1, &sp40, &sp58, &sp4C);
|
||||
}
|
||||
|
||||
if (this->unk_2AE == 0) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_2EC); i++) {
|
||||
this->unk_2EC[i].y -= 50.0f;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
this->limbPos[i].y -= 50.0f;
|
||||
}
|
||||
}
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2EC, ARRAY_COUNT(this->unk_2EC), this->unk_2CC, this->unk_2D0,
|
||||
this->unk_2C8, this->unk_2AE);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ typedef struct EnPeehat {
|
||||
/* 0x2A8 */ EnPeehatActionFunc actionFunc;
|
||||
/* 0x2AC */ u8 unk_2AC;
|
||||
/* 0x2AD */ s8 unk_2AD;
|
||||
/* 0x2AE */ u8 unk_2AE;
|
||||
/* 0x2AE */ u8 drawDmgEffType;
|
||||
/* 0x2B0 */ s16 unk_2B0;
|
||||
/* 0x2B2 */ s16 unk_2B2;
|
||||
/* 0x2B4 */ s16 unk_2B4;
|
||||
@ -24,11 +24,11 @@ typedef struct EnPeehat {
|
||||
/* 0x2BC */ f32 unk_2BC;
|
||||
/* 0x2C0 */ f32 unk_2C0;
|
||||
/* 0x2C4 */ f32 unk_2C4;
|
||||
/* 0x2C8 */ f32 unk_2C8;
|
||||
/* 0x2CC */ f32 unk_2CC;
|
||||
/* 0x2D0 */ f32 unk_2D0;
|
||||
/* 0x2C8 */ f32 drawDmgEffAlpha;
|
||||
/* 0x2CC */ f32 drawDmgEffScale;
|
||||
/* 0x2D0 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x2D4 */ Vec3f unk_2D4[2];
|
||||
/* 0x2EC */ Vec3f unk_2EC[18];
|
||||
/* 0x2EC */ Vec3f limbPos[18];
|
||||
/* 0x3C4 */ ColliderCylinder colliderCylinder;
|
||||
/* 0x410 */ ColliderSphere colliderSphere;
|
||||
/* 0x468 */ ColliderTris colliderTris;
|
||||
|
@ -872,8 +872,8 @@ void func_80B1C408(EnPoSisters* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_2F0 = 4.0f;
|
||||
this->unk_2F4 = 0.5f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.info.bumper.hitPos.x, this->collider.info.bumper.hitPos.y,
|
||||
this->collider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -922,17 +922,17 @@ void EnPoSisters_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->actor.shape.shadowAlpha = this->unk_229;
|
||||
Actor_SetFocus(&this->actor, 40.0f);
|
||||
|
||||
if (this->unk_2F0 > 0.0f) {
|
||||
Math_StepToF(&this->unk_2F0, 0.0f, 0.05f);
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
if (this->unk_229 != 255) {
|
||||
temp_f2 = this->unk_229 * (1.0f / 255);
|
||||
if (temp_f2 < this->unk_229) {
|
||||
this->unk_2F0 = temp_f2;
|
||||
this->drawDmgEffAlpha = temp_f2;
|
||||
}
|
||||
}
|
||||
|
||||
this->unk_2F4 = (this->unk_2F0 + 1.0f) * 0.25f;
|
||||
this->unk_2F4 = CLAMP_MAX(this->unk_2F4, 0.5f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.25f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.5f);
|
||||
}
|
||||
|
||||
if (this->unk_191 & (0x10 | 0x8 | 0x4 | 0x2 | 0x1)) {
|
||||
@ -1057,14 +1057,14 @@ void EnPoSisters_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||
f32 temp_f2;
|
||||
|
||||
if (D_80B1DB08[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_28C[D_80B1DB08[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_80B1DB08[limbIndex]]);
|
||||
} else if (limbIndex == 9) {
|
||||
Matrix_GetStateTranslationAndScaledY(-2500.0f, &this->unk_28C[4]);
|
||||
Matrix_GetStateTranslationAndScaledY(3000.0f, &this->unk_28C[5]);
|
||||
Matrix_GetStateTranslationAndScaledY(-2500.0f, &this->limbPos[4]);
|
||||
Matrix_GetStateTranslationAndScaledY(3000.0f, &this->limbPos[5]);
|
||||
} else if (limbIndex == 10) {
|
||||
Matrix_GetStateTranslationAndScaledY(-4000.0f, &this->unk_28C[6]);
|
||||
Matrix_GetStateTranslationAndScaledY(-4000.0f, &this->limbPos[6]);
|
||||
} else if (limbIndex == 11) {
|
||||
Matrix_GetStateTranslationAndScaledX(3000.0f, &this->unk_28C[7]);
|
||||
Matrix_GetStateTranslationAndScaledX(3000.0f, &this->limbPos[7]);
|
||||
}
|
||||
|
||||
if ((this->actionFunc == func_80B1BA90) && (this->unk_192 >= 8) && (limbIndex == 9)) {
|
||||
@ -1179,8 +1179,9 @@ void EnPoSisters_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(POLY_XLU_DISP++, gGameplayKeepDrawFlameDL);
|
||||
}
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_28C, ARRAY_COUNT(this->unk_28C),
|
||||
this->actor.scale.x * 142.857131958f * this->unk_2F4, 0.0f, this->unk_2F0, 20);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->actor.scale.x * 142.857131958f * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha,
|
||||
ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -30,10 +30,10 @@ typedef struct EnPoSisters {
|
||||
/* 0x0228 */ u8 unk_228;
|
||||
/* 0x0229 */ u8 unk_229;
|
||||
/* 0x022C */ Vec3f unk_22C[8];
|
||||
/* 0x028C */ Vec3f unk_28C[8];
|
||||
/* 0x028C */ Vec3f limbPos[8];
|
||||
/* 0x02EC */ f32 unk_2EC;
|
||||
/* 0x02F0 */ f32 unk_2F0;
|
||||
/* 0x02F4 */ f32 unk_2F4;
|
||||
/* 0x02F0 */ f32 drawDmgEffAlpha;
|
||||
/* 0x02F4 */ f32 drawDmgEffScale;
|
||||
/* 0x02F8 */ LightNode* lightNode;
|
||||
/* 0x02FC */ LightInfo lightInfo;
|
||||
/* 0x030C */ ColliderCylinder collider;
|
||||
|
@ -707,8 +707,8 @@ void func_80B2E438(EnPoh* this, GlobalContext* globalCtx) {
|
||||
func_80B2D924(this);
|
||||
} else {
|
||||
if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_298 = 4.0f;
|
||||
this->unk_29C = 0.45f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.45f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->colliderCylinder.info.bumper.hitPos.x,
|
||||
this->colliderCylinder.info.bumper.hitPos.y,
|
||||
@ -834,16 +834,16 @@ void EnPoh_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
|
||||
func_80B2E8E0(this);
|
||||
this->actor.shape.shadowAlpha = this->unk_197;
|
||||
if (this->unk_298 > 0.0f) {
|
||||
Math_StepToF(&this->unk_298, 0.0f, 0.05f);
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
if (this->unk_197 != 255) {
|
||||
if (this->unk_197 * (1.0f / 255.0f) < this->unk_197) {
|
||||
this->unk_298 = this->unk_197 * (1.0f / 255.0f);
|
||||
this->drawDmgEffAlpha = this->unk_197 * (1.0f / 255.0f);
|
||||
}
|
||||
}
|
||||
|
||||
this->unk_29C = (this->unk_298 + 1.0f) * (9.0f / 40.0f);
|
||||
this->unk_29C = CLAMP_MAX(this->unk_29C, 0.45f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * (9.0f / 40.0f);
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.45f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -899,18 +899,18 @@ void EnPoh_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
|
||||
temp_s3 = D_80B2F71C[limbIndex];
|
||||
if (temp_s3 != -1) {
|
||||
if (temp_s3 < 4) {
|
||||
Matrix_GetStateTranslation(&this->unk_2A0[temp_s3]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[temp_s3]);
|
||||
} else if (temp_s3 == 4) {
|
||||
Matrix_GetStateTranslationAndScaledX(2000.0f, &this->unk_2A0[temp_s3]);
|
||||
Matrix_GetStateTranslationAndScaledX(2000.0f, &this->limbPos[temp_s3]);
|
||||
} else {
|
||||
s32 i;
|
||||
Vec3f* vec = &this->unk_2A0[temp_s3 + 2];
|
||||
Vec3f* vec = &this->limbPos[temp_s3 + 2];
|
||||
Vec3f* vec2 = &D_80B2F734[0];
|
||||
|
||||
Matrix_GetStateTranslationAndScaledX(-2000.0f, &this->unk_2A0[temp_s3]);
|
||||
Matrix_GetStateTranslationAndScaledY(-2000.0f, &this->unk_2A0[temp_s3 + 1]);
|
||||
Matrix_GetStateTranslationAndScaledX(-2000.0f, &this->limbPos[temp_s3]);
|
||||
Matrix_GetStateTranslationAndScaledY(-2000.0f, &this->limbPos[temp_s3 + 1]);
|
||||
|
||||
for (i = temp_s3 + 2; i < ARRAY_COUNT(this->unk_2A0); i++, vec++, vec2++) {
|
||||
for (i = temp_s3 + 2; i < ARRAY_COUNT(this->limbPos); i++, vec++, vec2++) {
|
||||
Matrix_MultiplyVector3fByState(vec2, vec);
|
||||
}
|
||||
}
|
||||
@ -958,8 +958,9 @@ void EnPoh_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
gSPDisplayList(&gfx[3], object_po_DL_002D28);
|
||||
|
||||
POLY_OPA_DISP = &gfx[4];
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2A0, 10, this->actor.scale.x * 100.0f * this->unk_29C, 0.0f,
|
||||
this->unk_298, 20);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->actor.scale.x * 100.0f * this->drawDmgEffScale, 0.0f, this->drawDmgEffAlpha,
|
||||
ACTOR_DRAW_DMGEFF_LIGHT_ORBS);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -26,9 +26,9 @@ typedef struct EnPoh {
|
||||
/* 0x019B */ u8 unk_19B;
|
||||
/* 0x019C */ Vec3s jointTable[21];
|
||||
/* 0x021A */ Vec3s morphTable[21];
|
||||
/* 0x0298 */ f32 unk_298;
|
||||
/* 0x029C */ f32 unk_29C;
|
||||
/* 0x02A0 */ Vec3f unk_2A0[10];
|
||||
/* 0x0298 */ f32 drawDmgEffAlpha;
|
||||
/* 0x029C */ f32 drawDmgEffScale;
|
||||
/* 0x02A0 */ Vec3f limbPos[10];
|
||||
/* 0x0318 */ LightNode* lightNode;
|
||||
/* 0x031C */ LightInfo lightInfo;
|
||||
/* 0x032C */ ColliderCylinder colliderCylinder;
|
||||
|
@ -457,15 +457,15 @@ void func_80A33098(EnPr* this, GlobalContext* globalCtx) {
|
||||
if (this->collider.base.acFlags & AC_HIT) {
|
||||
this->collider.base.acFlags &= ~AC_HIT;
|
||||
if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_22E = 40;
|
||||
this->unk_230 = 20;
|
||||
this->drawDmgEffAlpha = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, this->actor.focus.pos.x,
|
||||
this->actor.focus.pos.y, this->actor.focus.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
}
|
||||
|
||||
if ((player->stateFlags1 & 0x8000000) && (this->actor.colChkInfo.damageEffect == 5)) {
|
||||
this->unk_22E = 40;
|
||||
this->unk_230 = 31;
|
||||
this->drawDmgEffAlpha = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_MEDIUM;
|
||||
}
|
||||
|
||||
if ((this->unk_206 != 6) && (this->unk_206 != 7)) {
|
||||
@ -580,9 +580,9 @@ void EnPr_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec
|
||||
|
||||
if ((limbIndex == 0) || (limbIndex == 1) || (limbIndex == 2) || (limbIndex == 3) || (limbIndex == 4) ||
|
||||
(limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) || (limbIndex == 8) || (limbIndex == 9)) {
|
||||
Matrix_GetStateTranslation(&this->unk_23C[this->unk_228]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[this->unk_228]);
|
||||
this->unk_228++;
|
||||
if (this->unk_228 >= ARRAY_COUNT(this->unk_23C)) {
|
||||
if (this->unk_228 >= ARRAY_COUNT(this->limbPos)) {
|
||||
this->unk_228 = 0;
|
||||
}
|
||||
}
|
||||
@ -613,12 +613,13 @@ void EnPr_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->skelAnime.dListCount, NULL, NULL, &this->actor, POLY_XLU_DISP);
|
||||
}
|
||||
|
||||
if (this->unk_22E != 0) {
|
||||
f32 temp = this->unk_22E * 0.05f;
|
||||
if (this->drawDmgEffAlpha != 0) {
|
||||
f32 drawDmgEffAlpha = this->drawDmgEffAlpha * 0.05f;
|
||||
|
||||
this->unk_238 = 0.8f;
|
||||
this->unk_234 = 0.8f;
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_23C, 10, 0.8f, 0.8f, temp, this->unk_230);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 0.8f, 0.8f,
|
||||
drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
@ -33,11 +33,11 @@ typedef struct EnPr {
|
||||
/* 0x0220 */ UNK_TYPE1 unk220[0x8];
|
||||
/* 0x0228 */ s32 unk_228;
|
||||
/* 0x022C */ s16 unk_22C;
|
||||
/* 0x022E */ s16 unk_22E;
|
||||
/* 0x0230 */ s16 unk_230;
|
||||
/* 0x022E */ s16 drawDmgEffAlpha;
|
||||
/* 0x0230 */ s16 drawDmgEffType;
|
||||
/* 0x0234 */ f32 unk_234;
|
||||
/* 0x0238 */ f32 unk_238;
|
||||
/* 0x023C */ Vec3f unk_23C[10];
|
||||
/* 0x023C */ Vec3f limbPos[10];
|
||||
/* 0x02B4 */ f32 unk_2B4;
|
||||
/* 0x02B8 */ f32 unk_2B8;
|
||||
/* 0x02BC */ f32 unk_2BC;
|
||||
|
@ -287,7 +287,7 @@ void EnRailSkb_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->unk_2E4 = -1;
|
||||
this->unk_3FC = 0;
|
||||
this->unk_3FA = 0;
|
||||
this->unk_403 = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->unk_3FE = 0;
|
||||
|
||||
if (this->actor.parent == NULL) {
|
||||
@ -351,10 +351,10 @@ void func_80B71114(EnRailSkb* this) {
|
||||
}
|
||||
|
||||
void func_80B7114C(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3F0 == 0) {
|
||||
this->unk_3F0 = 0;
|
||||
this->unk_2F0 = 0.0f;
|
||||
this->unk_2EC = 0.0f;
|
||||
if (this->drawDmgEffTimer == 0) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -365,7 +365,7 @@ void func_80B7114C(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->actor.world.pos, 40, NA_SE_EN_STALKID_DEAD);
|
||||
func_80B71488(this);
|
||||
}
|
||||
} else if (this->unk_3F0 == 1) {
|
||||
} else if (this->drawDmgEffTimer == 1) {
|
||||
func_80B726B4(this, globalCtx);
|
||||
}
|
||||
}
|
||||
@ -375,10 +375,10 @@ void func_80B71228(EnRailSkb* this) {
|
||||
}
|
||||
|
||||
void func_80B7123C(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3F0 == 0) {
|
||||
this->unk_3F0 = 0;
|
||||
this->unk_2F0 = 0.0f;
|
||||
this->unk_2EC = 0.0f;
|
||||
if (this->drawDmgEffTimer == 0) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -671,8 +671,8 @@ void func_80B71DF0(EnRailSkb* this) {
|
||||
this->actor.draw = EnRailSkb_Draw;
|
||||
this->actor.shape.shadowAlpha = 0;
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
} else if ((this->actionFunc == func_80B7114C) && (this->unk_3F0 >= 2)) {
|
||||
this->unk_3F0 = 0;
|
||||
} else if ((this->actionFunc == func_80B7114C) && (this->drawDmgEffTimer > 1)) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
}
|
||||
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 11);
|
||||
@ -855,20 +855,20 @@ void func_80B72430(EnRailSkb* this, GlobalContext* globalCtx, s32 arg2) {
|
||||
}
|
||||
|
||||
void func_80B725C0(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3F0 > 0) {
|
||||
this->unk_3F0--;
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->actionFunc != func_80B7114C) {
|
||||
if (this->unk_3F0 < 20) {
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
if (this->actionFunc == func_80B7123C) {
|
||||
Math_SmoothStepToF(&this->unk_2F0, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_2F0, 0.0f, 0.5f, 0.01f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.01f, 0.0f);
|
||||
}
|
||||
this->unk_2EC = this->unk_3F0 * 0.05f;
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_2F0, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -883,21 +883,21 @@ void func_80B726B4(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
s16 yaw;
|
||||
|
||||
if (this->unk_402 & 2) {
|
||||
end = ARRAY_COUNT(this->unk_234) - 1;
|
||||
end = ARRAY_COUNT(this->limbPos) - 1;
|
||||
} else {
|
||||
end = ARRAY_COUNT(this->unk_234);
|
||||
end = ARRAY_COUNT(this->limbPos);
|
||||
}
|
||||
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN);
|
||||
|
||||
for (i = 0; i < end; i++) {
|
||||
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_234[i]);
|
||||
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]);
|
||||
|
||||
sp84.x = Math_SinS(yaw) * 3.0f;
|
||||
sp84.z = Math_CosS(yaw) * 3.0f;
|
||||
sp84.y = (Rand_ZeroOne() * 4.0f) + 4.0f;
|
||||
|
||||
EffectSsEnIce_Spawn(globalCtx, &this->unk_234[i], 0.6f, &sp84, &D_80B734B8, &D_80B734B0, &D_80B734B4, 30);
|
||||
EffectSsEnIce_Spawn(globalCtx, &this->limbPos[i], 0.6f, &sp84, &D_80B734B8, &D_80B734B0, &D_80B734B4, 30);
|
||||
}
|
||||
}
|
||||
|
||||
@ -964,10 +964,10 @@ void func_80B72970(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
return;
|
||||
|
||||
default:
|
||||
if (this->unk_3F0 >= 2) {
|
||||
if (this->drawDmgEffTimer >= 2) {
|
||||
func_80B726B4(this, globalCtx);
|
||||
}
|
||||
this->unk_3F0 = 0;
|
||||
this->drawDmgEffTimer = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -981,10 +981,10 @@ void func_80B72970(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
case 11:
|
||||
this->unk_3F0 = 40;
|
||||
this->unk_403 = 30;
|
||||
this->unk_2EC = 1.0f;
|
||||
this->unk_2F0 = 0.0f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0, 120, 0, 40);
|
||||
func_80B710AC(this);
|
||||
break;
|
||||
@ -995,10 +995,10 @@ void func_80B72970(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_3F0 = 80;
|
||||
this->unk_403 = 0;
|
||||
this->unk_2EC = 1.0f;
|
||||
this->unk_2F0 = 0.0f;
|
||||
this->drawDmgEffTimer = 80;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -1009,22 +1009,22 @@ void func_80B72970(EnRailSkb* this, GlobalContext* globalCtx) {
|
||||
case 3:
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
this->unk_3F0 = 80;
|
||||
this->drawDmgEffTimer = 80;
|
||||
} else {
|
||||
this->unk_3F0 = 3;
|
||||
this->drawDmgEffTimer = 3;
|
||||
}
|
||||
this->unk_403 = 11;
|
||||
this->unk_2EC = 1.0f;
|
||||
this->unk_2F0 = 0.5f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
func_80B71114(this);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
this->unk_3F0 = 40;
|
||||
this->unk_403 = 20;
|
||||
this->unk_2EC = 1.0f;
|
||||
this->unk_2F0 = 0.5f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -1125,15 +1125,15 @@ void EnRailSkb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
|
||||
Actor_SpawnBodyParts(&this->actor, globalCtx, 1, dList);
|
||||
}
|
||||
|
||||
if (this->unk_3F0 != 0) {
|
||||
if (this->drawDmgEffTimer != 0) {
|
||||
if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) ||
|
||||
(limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) ||
|
||||
(limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) {
|
||||
Matrix_GetStateTranslation(&this->unk_234[this->unk_2DC]);
|
||||
this->unk_2DC++;
|
||||
Matrix_GetStateTranslation(&this->limbPos[this->limbCount]);
|
||||
this->limbCount++;
|
||||
} else if ((limbIndex == 11) && !(this->unk_402 & 2)) {
|
||||
Matrix_MultiplyVector3fByState(&D_80B734D0, &this->unk_234[this->unk_2DC]);
|
||||
this->unk_2DC++;
|
||||
Matrix_MultiplyVector3fByState(&D_80B734D0, &this->limbPos[this->limbCount]);
|
||||
this->limbCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1142,13 +1142,13 @@ void EnRailSkb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList
|
||||
void EnRailSkb_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnRailSkb* this = THIS;
|
||||
|
||||
this->unk_2DC = 0;
|
||||
this->limbCount = 0;
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, EnRailSkb_OverrideLimbDraw,
|
||||
EnRailSkb_PostLimbDraw, &this->actor);
|
||||
if (this->unk_3F0 > 0) {
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_234, this->unk_2DC, this->unk_2F0, 0.5f, this->unk_2EC,
|
||||
this->unk_403);
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, this->limbCount, this->drawDmgEffScale, 0.5f,
|
||||
this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
||||
if ((this->unk_402 & 0x40) && !(this->unk_402 & 0x80)) {
|
||||
|
@ -19,17 +19,17 @@ typedef struct EnRailSkb {
|
||||
/* 0x228 */ EnRailSkbActionFunc actionFunc;
|
||||
/* 0x22C */ ObjHakaisi* unk_22C;
|
||||
/* 0x230 */ Vec3s* unk_230;
|
||||
/* 0x234 */ Vec3f unk_234[14];
|
||||
/* 0x2DC */ s32 unk_2DC;
|
||||
/* 0x234 */ Vec3f limbPos[14];
|
||||
/* 0x2DC */ s32 limbCount;
|
||||
/* 0x2E0 */ s32 unk_2E0;
|
||||
/* 0x2E4 */ s32 unk_2E4;
|
||||
/* 0x2E8 */ s32 unk_2E8;
|
||||
/* 0x2EC */ f32 unk_2EC;
|
||||
/* 0x2F0 */ f32 unk_2F0;
|
||||
/* 0x2EC */ f32 drawDmgEffAlpha;
|
||||
/* 0x2F0 */ f32 drawDmgEffScale;
|
||||
/* 0x2F4 */ Vec3s jointTable[20];
|
||||
/* 0x36C */ Vec3s morphTable[20];
|
||||
/* 0x3E4 */ UNK_TYPE1 unk3E4[0xC];
|
||||
/* 0x3F0 */ s16 unk_3F0;
|
||||
/* 0x3F0 */ s16 drawDmgEffTimer;
|
||||
/* 0x3F2 */ s16 unk_3F2;
|
||||
/* 0x3F4 */ s16 unk_3F4;
|
||||
/* 0x3F6 */ s16 unk_3F6;
|
||||
@ -39,7 +39,7 @@ typedef struct EnRailSkb {
|
||||
/* 0x3FE */ s16 unk_3FE;
|
||||
/* 0x400 */ u16 unk_400;
|
||||
/* 0x402 */ u8 unk_402;
|
||||
/* 0x403 */ u8 unk_403;
|
||||
/* 0x403 */ u8 drawDmgEffType;
|
||||
} EnRailSkb; // size = 0x404
|
||||
|
||||
extern const ActorInit En_Rail_Skb_InitVars;
|
||||
|
@ -255,7 +255,7 @@ void EnRailgibud_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnRailgibud_SpawnOtherGibdosAndSetPositionAndRotation(this, globalCtx);
|
||||
this->playerStunWaitTimer = 0;
|
||||
this->timeInitialized = gSaveContext.time;
|
||||
this->effectType = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->type = EN_RAILGIBUD_TYPE_GIBDO;
|
||||
this->textId = 0;
|
||||
this->isInvincible = false;
|
||||
@ -577,7 +577,8 @@ void EnRailgibud_Damage(EnRailgibud* this, GlobalContext* globalCtx) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->unk_405 = -1;
|
||||
this->actor.world.rot.y = this->actor.shape.rot.y;
|
||||
if ((this->effectTimer > 0) && (this->effectType == 0) && (this->type == EN_RAILGIBUD_TYPE_GIBDO)) {
|
||||
if ((this->drawDmgEffTimer > 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) &&
|
||||
(this->type == EN_RAILGIBUD_TYPE_GIBDO)) {
|
||||
this->actor.hintId = 0x2A;
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable,
|
||||
GIBDO_LIMB_MAX);
|
||||
@ -592,7 +593,7 @@ void EnRailgibud_SetupStunned(EnRailgibud* this) {
|
||||
this->actor.world.rot.y = this->actor.shape.rot.y;
|
||||
this->stunTimer = 10;
|
||||
|
||||
if (this->effectTimer != 0) {
|
||||
if (this->drawDmgEffTimer != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
|
||||
} else {
|
||||
Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
|
||||
@ -649,7 +650,7 @@ void EnRailgibud_Dead(EnRailgibud* this, GlobalContext* globalCtx) {
|
||||
this->deathTimer++;
|
||||
}
|
||||
|
||||
if ((this->deathTimer == 20) && (this->effectTimer > 0) && (this->effectType == 0) &&
|
||||
if ((this->deathTimer == 20) && (this->drawDmgEffTimer > 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) &&
|
||||
(this->type == EN_RAILGIBUD_TYPE_GIBDO)) {
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable,
|
||||
GIBDO_LIMB_MAX);
|
||||
@ -810,9 +811,9 @@ void EnRailgibud_UpdateDamage(EnRailgibud* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
EnRailgibud_SetupDamage(this);
|
||||
}
|
||||
this->effectType = 0;
|
||||
this->effectTimer = 180;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffTimer = 180;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
break;
|
||||
|
||||
case EN_RAILGIBUD_DMGEFF_LIGHT_ARROW:
|
||||
@ -822,17 +823,17 @@ void EnRailgibud_UpdateDamage(EnRailgibud* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
EnRailgibud_SetupDamage(this);
|
||||
}
|
||||
this->effectType = 20;
|
||||
this->effectTimer = 60;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffTimer = 60;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
break;
|
||||
|
||||
case EN_RAILGIBUD_DMGEFF_ZORA_MAGIC:
|
||||
if ((this->actionFunc != EnRailgibud_Grab) &&
|
||||
((this->actionFunc != EnRailgibud_Stunned) || (this->stunTimer == 0))) {
|
||||
this->effectType = 30;
|
||||
this->effectTimer = 40;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
EnRailgibud_SetupStunned(this);
|
||||
}
|
||||
break;
|
||||
@ -911,15 +912,15 @@ void EnRailgibud_MoveGrabbedPlayerAwayFromWall(EnRailgibud* this, GlobalContext*
|
||||
}
|
||||
|
||||
void EnRailgibud_UpdateEffect(EnRailgibud* this, GlobalContext* globalCtx) {
|
||||
if (this->effectTimer > 0) {
|
||||
this->effectTimer--;
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->effectTimer < 20) {
|
||||
Math_SmoothStepToF(&this->effectScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->effectAlpha = this->effectTimer * 0.05f;
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->effectScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1050,7 +1051,7 @@ void EnRailgibud_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||
Gfx** gfx) {
|
||||
EnRailgibud* this = THIS;
|
||||
|
||||
if ((this->effectTimer != 0) &&
|
||||
if ((this->drawDmgEffTimer != 0) &&
|
||||
((limbIndex == GIBDO_LIMB_LEFT_THIGH) || (limbIndex == GIBDO_LIMB_LEFT_SHIN) ||
|
||||
(limbIndex == GIBDO_LIMB_LEFT_FOOT) || (limbIndex == GIBDO_LIMB_RIGHT_THIGH) ||
|
||||
(limbIndex == GIBDO_LIMB_RIGHT_SHIN) || (limbIndex == GIBDO_LIMB_RIGHT_FOOT) ||
|
||||
@ -1089,9 +1090,9 @@ void EnRailgibud_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnRailgibud_PostLimbDraw, &this->actor, POLY_XLU_DISP);
|
||||
}
|
||||
|
||||
if (this->effectTimer > 0) {
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->effectScale, 0.5f,
|
||||
this->effectAlpha, this->effectType);
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale, 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
@ -23,8 +23,8 @@ typedef struct EnRailgibud {
|
||||
/* 0x0294 */ Vec3s* points;
|
||||
/* 0x0298 */ s32 currentPoint;
|
||||
/* 0x029C */ s32 pathCount;
|
||||
/* 0x02A0 */ f32 effectAlpha;
|
||||
/* 0x02A4 */ f32 effectScale;
|
||||
/* 0x02A0 */ f32 drawDmgEffAlpha;
|
||||
/* 0x02A4 */ f32 drawDmgEffScale;
|
||||
/* 0x02A8 */ Vec3s jointTable[GIBDO_LIMB_MAX];
|
||||
/* 0x0344 */ Vec3s morphTable[GIBDO_LIMB_MAX];
|
||||
/* 0x03E0 */ Vec3s headRotation;
|
||||
@ -44,14 +44,14 @@ typedef struct EnRailgibud {
|
||||
s16 sinkTimer;
|
||||
};
|
||||
/* 0x03F4 */ s16 grabWaitTimer; // Cannot grab the player if this is non-zero
|
||||
/* 0x03F6 */ s16 effectTimer;
|
||||
/* 0x03F6 */ s16 drawDmgEffTimer;
|
||||
/* 0x03F8 */ s16 type;
|
||||
/* 0x03FA */ s16 isInvincible;
|
||||
/* 0x03FC */ u16 actorActionCommand;
|
||||
/* 0x03FE */ u16 csAction;
|
||||
/* 0x0400 */ u16 textId;
|
||||
/* 0x0402 */ s16 timeInitialized; // unused other than setting it
|
||||
/* 0x0404 */ u8 effectType;
|
||||
/* 0x0404 */ u8 drawDmgEffType;
|
||||
/* 0x0405 */ s8 unk_405; // related to player->unk_ADD
|
||||
} EnRailgibud; // size = 0x408
|
||||
|
||||
|
@ -1172,9 +1172,9 @@ void EnRd_UpdateDamage(EnRd* this, GlobalContext* globalCtx) {
|
||||
switch (this->damageEffect) {
|
||||
case EN_RD_DMGEFF_ZORA_MAGIC:
|
||||
if ((this->actionFunc != EnRd_Grab) && ((this->actionFunc != EnRd_Stunned) || (this->stunTimer == 0))) {
|
||||
this->effectTimer = 40;
|
||||
this->effectType = 30;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
EnRd_SetupStunned(this);
|
||||
}
|
||||
return;
|
||||
@ -1185,20 +1185,20 @@ void EnRd_UpdateDamage(EnRd* this, GlobalContext* globalCtx) {
|
||||
|
||||
case EN_RD_DMGEFF_FIRE_ARROW:
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
|
||||
this->effectTimer = 180;
|
||||
this->effectType = 0;
|
||||
this->drawDmgEffTimer = 180;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->stunnedBySunsSong = false;
|
||||
this->sunsSongStunTimer = 0;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
break;
|
||||
|
||||
case EN_RD_DMGEFF_LIGHT_ARROW:
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 40);
|
||||
this->effectTimer = 60;
|
||||
this->effectType = 20;
|
||||
this->drawDmgEffTimer = 60;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->stunnedBySunsSong = false;
|
||||
this->sunsSongStunTimer = 0;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
break;
|
||||
|
||||
case EN_RD_DMGEFF_DAMAGE:
|
||||
@ -1243,15 +1243,15 @@ void EnRd_UpdateCollision(EnRd* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void EnRd_UpdateEffect(EnRd* this, GlobalContext* globalCtx) {
|
||||
if (this->effectTimer > 0) {
|
||||
this->effectTimer--;
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->effectTimer < 20) {
|
||||
Math_SmoothStepToF(&this->effectScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->effectAlpha = this->effectTimer * 0.05f;
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->effectScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1308,7 +1308,7 @@ s32 EnRd_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList,
|
||||
void EnRd_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) {
|
||||
EnRd* this = THIS;
|
||||
|
||||
if ((this->effectTimer != 0) &&
|
||||
if ((this->drawDmgEffTimer != 0) &&
|
||||
((limbIndex == REDEAD_LIMB_LEFT_THIGH) || (limbIndex == REDEAD_LIMB_LEFT_SHIN) ||
|
||||
(limbIndex == REDEAD_LIMB_LEFT_FOOT) || (limbIndex == REDEAD_LIMB_RIGHT_THIGH) ||
|
||||
(limbIndex == REDEAD_LIMB_RIGHT_SHIN) || (limbIndex == REDEAD_LIMB_RIGHT_FOOT) ||
|
||||
@ -1357,8 +1357,8 @@ void EnRd_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
if (this->effectTimer > 0) {
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->effectScale, 0.5f,
|
||||
this->effectAlpha, this->effectType);
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale, 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
}
|
||||
|
@ -38,8 +38,8 @@ typedef struct EnRd {
|
||||
/* 0x0190 */ ColliderCylinder collider;
|
||||
/* 0x01DC */ Vec3f limbPos[15];
|
||||
/* 0x0290 */ s32 limbIndex;
|
||||
/* 0x0294 */ f32 effectAlpha;
|
||||
/* 0x0298 */ f32 effectScale;
|
||||
/* 0x0294 */ f32 drawDmgEffAlpha;
|
||||
/* 0x0298 */ f32 drawDmgEffScale;
|
||||
/* 0x029C */ Vec3s jointTable[REDEAD_LIMB_MAX];
|
||||
/* 0x0338 */ Vec3s morphTable[REDEAD_LIMB_MAX];
|
||||
/* 0x03D4 */ s16 headShakeTimer;
|
||||
@ -59,8 +59,8 @@ typedef struct EnRd {
|
||||
s16 danceEndTimer;
|
||||
s16 pirouetteRotationalVelocity;
|
||||
};
|
||||
/* 0x03E6 */ s16 effectTimer;
|
||||
/* 0x03E8 */ u8 effectType;
|
||||
/* 0x03E6 */ s16 drawDmgEffTimer;
|
||||
/* 0x03E8 */ u8 drawDmgEffType;
|
||||
/* 0x03E9 */ u8 stunnedBySunsSong;
|
||||
/* 0x03EA */ u8 grabDamageTimer;
|
||||
/* 0x03EB */ u8 grabState;
|
||||
|
@ -170,43 +170,43 @@ void EnRr_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
void func_808FA01C(EnRr* this, GlobalContext* globalCtx, ColliderCylinder* collider) {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_220 = 0.85f;
|
||||
this->unk_21C = 4.0f;
|
||||
this->unk_1E0 = 0;
|
||||
this->drawDmgEffScale = 0.85f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_220 = 0.85f;
|
||||
this->unk_21C = 4.0f;
|
||||
this->unk_1E0 = 20;
|
||||
this->drawDmgEffScale = 0.85f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, collider->info.bumper.hitPos.x,
|
||||
collider->info.bumper.hitPos.y, collider->info.bumper.hitPos.z, 0, 0, 0,
|
||||
CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->unk_220 = 0.85f;
|
||||
this->unk_21C = 4.0f;
|
||||
this->unk_1E0 = 30;
|
||||
this->drawDmgEffScale = 0.85f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
}
|
||||
}
|
||||
|
||||
void func_808FA11C(EnRr* this) {
|
||||
this->unk_1E0 = 10;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->collider1.base.colType = COLTYPE_HIT3;
|
||||
this->collider1.info.elemType = ELEMTYPE_UNK0;
|
||||
this->unk_1EE = 80;
|
||||
this->unk_220 = 0.85f;
|
||||
this->unk_224 = 1.2750001f;
|
||||
this->unk_21C = 1.0f;
|
||||
this->drawDmgEffScale = 0.85f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.2750001f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->actor.flags &= ~ACTOR_FLAG_400;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
|
||||
}
|
||||
|
||||
void func_808FA19C(EnRr* this, GlobalContext* globalCtx) {
|
||||
this->unk_1EE = 0;
|
||||
if (this->unk_1E0 == 10) {
|
||||
this->unk_1E0 = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider1.base.colType = COLTYPE_HIT0;
|
||||
this->collider1.info.elemType = ELEMTYPE_UNK1;
|
||||
this->unk_21C = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_234, 20, 2, this->actor.scale.y * 23.333334f,
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 20, 2, this->actor.scale.y * 23.333334f,
|
||||
this->actor.scale.y * 20.000002f);
|
||||
this->actor.flags |= ACTOR_FLAG_400;
|
||||
}
|
||||
@ -456,7 +456,8 @@ s32 func_808FAA94(EnRr* this, GlobalContext* globalCtx) {
|
||||
this->collider1.base.acFlags &= ~AC_HIT;
|
||||
this->collider2.base.acFlags &= ~AC_HIT;
|
||||
|
||||
if ((this->unk_1E0 == 10) && (sp2C->info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) &&
|
||||
(sp2C->info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -672,7 +673,7 @@ void func_808FB398(EnRr* this, GlobalContext* globalCtx) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this->unk_1E0 == 30) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL) {
|
||||
if (this->unk_1EC & 2) {
|
||||
phi_v1 = 1000;
|
||||
} else {
|
||||
@ -854,12 +855,12 @@ void EnRr_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
Math_StepToF(&this->unk_210, 1.0f, 0.2f);
|
||||
}
|
||||
|
||||
if (this->unk_21C > 0.0f) {
|
||||
if (this->unk_1E0 != 10) {
|
||||
Math_StepToF(&this->unk_21C, 0.0f, 0.05f);
|
||||
this->unk_220 = (this->unk_21C + 1.0f) * 0.425f;
|
||||
this->unk_220 = CLAMP_MAX(this->unk_220, 0.85f);
|
||||
} else if (!Math_StepToF(&this->unk_224, 0.85f, 0.02125f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.425f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.85f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.85f, 0.02125f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -890,7 +891,7 @@ void EnRr_Draw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
Matrix_Scale((1.0f + this->unk_324[0].unk_10) * this->unk_324[0].unk_08, 1.0f,
|
||||
(1.0f + this->unk_324[0].unk_10) * this->unk_324[0].unk_08, MTXMODE_APPLY);
|
||||
|
||||
vecPtr = &this->unk_234[0];
|
||||
vecPtr = &this->limbPos[0];
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
|
||||
@ -932,8 +933,9 @@ void EnRr_Draw(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_rr_DL_000470);
|
||||
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_234, ARRAY_COUNT(this->unk_234),
|
||||
this->actor.scale.y * 66.66667f * this->unk_220, this->unk_224, this->unk_21C, this->unk_1E0);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->actor.scale.y * 66.66667f * this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale,
|
||||
this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ typedef struct EnRr {
|
||||
/* 0x144 */ EnRrActionFunc actionFunc;
|
||||
/* 0x148 */ ColliderCylinder collider1;
|
||||
/* 0x194 */ ColliderCylinder collider2;
|
||||
/* 0x1E0 */ u8 unk_1E0;
|
||||
/* 0x1E0 */ u8 drawDmgEffType;
|
||||
/* 0x1E1 */ u8 unk_1E1;
|
||||
/* 0x1E2 */ u8 unk_1E2;
|
||||
/* 0x1E4 */ s16 unk_1E4;
|
||||
@ -54,11 +54,11 @@ typedef struct EnRr {
|
||||
/* 0x210 */ f32 unk_210;
|
||||
/* 0x214 */ f32 unk_214;
|
||||
/* 0x218 */ f32 unk_218;
|
||||
/* 0x21C */ f32 unk_21C;
|
||||
/* 0x220 */ f32 unk_220;
|
||||
/* 0x224 */ f32 unk_224;
|
||||
/* 0x21C */ f32 drawDmgEffAlpha;
|
||||
/* 0x220 */ f32 drawDmgEffScale;
|
||||
/* 0x224 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x228 */ Vec3f unk_228;
|
||||
/* 0x234 */ Vec3f unk_234[20];
|
||||
/* 0x234 */ Vec3f limbPos[20];
|
||||
/* 0x324 */ EnRrStruct unk_324[5];
|
||||
} EnRr; // size = 0x3C4
|
||||
|
||||
|
@ -754,10 +754,10 @@ void func_809962D4(EnSkb* this) {
|
||||
}
|
||||
|
||||
void func_8099630C(EnSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3D2 == 0) {
|
||||
this->unk_3D2 = 0;
|
||||
this->unk_230 = 0.0f;
|
||||
this->unk_22C = 0.0f;
|
||||
if (this->drawDmgEffTimer == 0) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -766,7 +766,7 @@ void func_8099630C(EnSkb* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
func_809961E4(this, globalCtx);
|
||||
}
|
||||
} else if (this->unk_3D2 == 1) {
|
||||
} else if (this->drawDmgEffTimer == 1) {
|
||||
func_80996BEC(this, globalCtx);
|
||||
}
|
||||
}
|
||||
@ -776,10 +776,10 @@ void func_809963C4(EnSkb* this) {
|
||||
}
|
||||
|
||||
void func_809963D8(EnSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3D2 == 0) {
|
||||
this->unk_3D2 = 0;
|
||||
this->unk_230 = 0.0f;
|
||||
this->unk_22C = 0.0f;
|
||||
if (this->drawDmgEffTimer == 0) {
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 8);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -885,10 +885,10 @@ void func_8099672C(EnSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->actionFunc == func_8099630C) {
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
default:
|
||||
if (this->unk_3D2 >= 2) {
|
||||
if (this->drawDmgEffTimer > 1) {
|
||||
func_80996BEC(this, globalCtx);
|
||||
}
|
||||
this->unk_3D2 = 0;
|
||||
this->drawDmgEffTimer = 0;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
@ -909,10 +909,10 @@ void func_8099672C(EnSkb* this, GlobalContext* globalCtx) {
|
||||
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
case 11:
|
||||
this->unk_3E6 = 30;
|
||||
this->unk_3D2 = 40;
|
||||
this->unk_22C = 1.0f;
|
||||
this->unk_230 = 0.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0, 0x78, 0, 40);
|
||||
func_80995E08(this);
|
||||
break;
|
||||
@ -923,10 +923,10 @@ void func_8099672C(EnSkb* this, GlobalContext* globalCtx) {
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_3D2 = 0x50;
|
||||
this->unk_3E6 = 0;
|
||||
this->unk_22C = 1.0f;
|
||||
this->unk_230 = 0.0f;
|
||||
this->drawDmgEffTimer = 80;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
|
||||
this->unk_3D8 |= 1;
|
||||
func_80995F98(this);
|
||||
@ -935,22 +935,22 @@ void func_8099672C(EnSkb* this, GlobalContext* globalCtx) {
|
||||
case 3:
|
||||
if (this->actor.colChkInfo.health != 0) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
this->unk_3D2 = 0x50;
|
||||
this->drawDmgEffTimer = 80;
|
||||
} else {
|
||||
this->unk_3D2 = 3;
|
||||
this->drawDmgEffTimer = 3;
|
||||
}
|
||||
this->unk_3E6 = 0xB;
|
||||
this->unk_22C = 1.0f;
|
||||
this->unk_230 = 0.5f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
|
||||
func_809962D4(this);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
this->unk_3D2 = 0x28;
|
||||
this->unk_3E6 = 0x14;
|
||||
this->unk_22C = 1.0f;
|
||||
this->unk_230 = 0.5f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 0xFF, 0, 8);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_STALKID_DAMAGE);
|
||||
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimations, 3);
|
||||
@ -1015,29 +1015,29 @@ void func_80996BEC(EnSkb* this, GlobalContext* globalCtx) {
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->actor.world.pos, 30, NA_SE_EV_ICE_BROKEN);
|
||||
|
||||
for (i = 0; i < end; i++) {
|
||||
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_234[i]);
|
||||
yaw = Math_Vec3f_Yaw(&this->actor.world.pos, &this->limbPos[i]);
|
||||
sp84.x = Math_SinS(yaw) * 3.0f;
|
||||
sp84.z = Math_CosS(yaw) * 3.0f;
|
||||
sp84.y = (Rand_ZeroOne() * 4.0f) + 4.0f;
|
||||
EffectSsEnIce_Spawn(globalCtx, &this->unk_234[i], 0.6f, &sp84, &D_80997558, &D_80997550, &D_80997554, 30);
|
||||
EffectSsEnIce_Spawn(globalCtx, &this->limbPos[i], 0.6f, &sp84, &D_80997558, &D_80997550, &D_80997554, 30);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80996D68(EnSkb* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_3D2 > 0) {
|
||||
this->unk_3D2--;
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->actionFunc != func_8099630C) {
|
||||
if (this->unk_3D2 < 20) {
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
if (this->actionFunc == func_809963D8) {
|
||||
Math_SmoothStepToF(&this->unk_230, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_230, 0.0f, 0.5f, 0.01f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.01f, 0.0f);
|
||||
}
|
||||
this->unk_22C = this->unk_3D2 * 0.05f;
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->unk_230, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1108,15 +1108,15 @@ void EnSkb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
|
||||
Actor_SpawnBodyParts(&this->actor, globalCtx, 1, dList);
|
||||
}
|
||||
|
||||
if (this->unk_3D2 != 0) {
|
||||
if (this->drawDmgEffTimer != 0) {
|
||||
if ((limbIndex == 2) || (limbIndex == 4) || (limbIndex == 5) || (limbIndex == 6) || (limbIndex == 7) ||
|
||||
(limbIndex == 8) || (limbIndex == 9) || (limbIndex == 13) || (limbIndex == 14) || (limbIndex == 15) ||
|
||||
(limbIndex == 16) || (limbIndex == 17) || (limbIndex == 18)) {
|
||||
Matrix_GetStateTranslation(&this->unk_234[this->unk_2DC]);
|
||||
this->unk_2DC++;
|
||||
Matrix_GetStateTranslation(&this->limbPos[this->limbCount]);
|
||||
this->limbCount++;
|
||||
} else if ((limbIndex == 11) && !(this->unk_3D8 & 2)) {
|
||||
Matrix_MultiplyVector3fByState(&D_80997564, &this->unk_234[this->unk_2DC]);
|
||||
this->unk_2DC++;
|
||||
Matrix_MultiplyVector3fByState(&D_80997564, &this->limbPos[this->limbCount]);
|
||||
this->limbCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1124,13 +1124,13 @@ void EnSkb_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Ve
|
||||
void EnSkb_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnSkb* this = THIS;
|
||||
|
||||
this->unk_2DC = 0;
|
||||
this->limbCount = 0;
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSkb_OverrideLimbDraw,
|
||||
EnSkb_PostLimbDraw, &this->actor);
|
||||
if (this->unk_3D2 > 0) {
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_234, this->unk_2DC, this->unk_230, 0.5f, this->unk_22C,
|
||||
this->unk_3E6);
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, this->limbCount, this->drawDmgEffScale, 0.5f,
|
||||
this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
||||
if (this->unk_3D8 & 0x40) {
|
||||
|
@ -15,14 +15,14 @@ typedef struct EnSkb {
|
||||
/* 0x0188 */ ColliderJntSph collider;
|
||||
/* 0x01A8 */ ColliderJntSphElement colliderElements[2];
|
||||
/* 0x0228 */ EnSkbActionFunc actionFunc;
|
||||
/* 0x022C */ f32 unk_22C;
|
||||
/* 0x0230 */ f32 unk_230;
|
||||
/* 0x0234 */ Vec3f unk_234[14];
|
||||
/* 0x02DC */ s32 unk_2DC;
|
||||
/* 0x022C */ f32 drawDmgEffAlpha;
|
||||
/* 0x0230 */ f32 drawDmgEffScale;
|
||||
/* 0x0234 */ Vec3f limbPos[14];
|
||||
/* 0x02DC */ s32 limbCount;
|
||||
/* 0x02E0 */ Vec3s jointTable[20];
|
||||
/* 0x0358 */ Vec3s morphTable[20];
|
||||
/* 0x03D0 */ s16 unk_3D0;
|
||||
/* 0x03D2 */ s16 unk_3D2;
|
||||
/* 0x03D2 */ s16 drawDmgEffTimer;
|
||||
/* 0x03D4 */ s16 unk_3D4;
|
||||
/* 0x03D6 */ s16 unk_3D6;
|
||||
/* 0x03D8 */ s16 unk_3D8;
|
||||
@ -33,7 +33,7 @@ typedef struct EnSkb {
|
||||
/* 0x03E2 */ s16 unk_3E2;
|
||||
/* 0x03E4 */ u8 unk_3E4;
|
||||
/* 0x03E5 */ u8 unk_3E5;
|
||||
/* 0x03E6 */ u8 unk_3E6;
|
||||
/* 0x03E6 */ u8 drawDmgEffType;
|
||||
} EnSkb; // size = 0x3E8
|
||||
|
||||
extern const ActorInit En_Skb_InitVars;
|
||||
|
@ -274,15 +274,15 @@ s32 func_808A576C(EnSt* this) {
|
||||
s16 phi_s2 = (s16)((s16)(Rand_ZeroOne() * 1000.0f) % 12) * 0x1555;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++, phi_s2 += 0x1555) {
|
||||
if (this->unk_18E != 10) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->unk_31C[i] = (Rand_ZeroOne() * 16.0f) + 8.0f;
|
||||
} else {
|
||||
this->unk_31C[i] = 80;
|
||||
}
|
||||
this->unk_334[i] = this->unk_31C[i];
|
||||
this->unk_2DC[i] = 0.90000004f;
|
||||
this->drawDmgEffFrozenSteamScales[i] = 0.90000004f;
|
||||
|
||||
if ((this->unk_18E == 0) || (this->unk_18E == 1)) {
|
||||
if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_BLUE_FIRE)) {
|
||||
this->unk_358[i].y = ((Rand_ZeroOne() - 0.5f) * 40.0f) - 10.0f;
|
||||
} else {
|
||||
this->unk_358[i].y = ((Rand_ZeroOne() - 0.5f) * 30.0f) + 10.0f;
|
||||
@ -298,29 +298,30 @@ s32 func_808A576C(EnSt* this) {
|
||||
|
||||
s32 func_808A5988(EnSt* this, GlobalContext* globalCtx, s32 arg2) {
|
||||
s32 ret = false;
|
||||
u8 sp53;
|
||||
Vec3f sp44;
|
||||
f32 sp40;
|
||||
u8 drawDmgEffType;
|
||||
Vec3f limbPos[1];
|
||||
f32 drawDmgEffAlpha;
|
||||
|
||||
if (arg2 < this->unk_31A) {
|
||||
if (this->unk_31C[arg2] != 0) {
|
||||
sp40 = (f32)this->unk_31C[arg2] / this->unk_334[arg2];
|
||||
sp53 = this->unk_18E;
|
||||
drawDmgEffAlpha = (f32)this->unk_31C[arg2] / this->unk_334[arg2];
|
||||
drawDmgEffType = this->drawDmgEffType;
|
||||
|
||||
Math_ApproachF(&this->unk_2DC[arg2], 0.6f, 0.3f, 0.5f);
|
||||
Math_Vec3f_Copy(&sp44, &this->actor.world.pos);
|
||||
Math_ApproachF(&this->drawDmgEffFrozenSteamScales[arg2], 0.6f, 0.3f, 0.5f);
|
||||
Math_Vec3f_Copy(&limbPos[0], &this->actor.world.pos);
|
||||
|
||||
sp44.x += this->unk_358[arg2].x;
|
||||
sp44.y += this->unk_358[arg2].y;
|
||||
sp44.z += this->unk_358[arg2].z;
|
||||
limbPos[0].x += this->unk_358[arg2].x;
|
||||
limbPos[0].y += this->unk_358[arg2].y;
|
||||
limbPos[0].z += this->unk_358[arg2].z;
|
||||
|
||||
if (sp53 == 10) {
|
||||
if (drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
if ((this->unk_334[arg2] - this->unk_31C[arg2]) < 20) {
|
||||
sp53 = 11;
|
||||
drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
|
||||
}
|
||||
sp40 = 1.0f;
|
||||
drawDmgEffAlpha = 1.0f;
|
||||
}
|
||||
func_800BE680(globalCtx, &this->actor, &sp44, 1, 0.6f, this->unk_2DC[arg2], sp40, sp53);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, limbPos, ARRAY_COUNT(limbPos), 0.6f,
|
||||
this->drawDmgEffFrozenSteamScales[arg2], drawDmgEffAlpha, drawDmgEffType);
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
@ -556,7 +557,7 @@ s32 func_808A6580(EnSt* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->collider3.base.acFlags & AC_HIT) {
|
||||
if (this->unk_18E == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
// clang-format off
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { this->unk_31C[i] = 0; }
|
||||
// clang-format on
|
||||
@ -579,7 +580,7 @@ s32 func_808A6580(EnSt* this, GlobalContext* globalCtx) {
|
||||
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
}
|
||||
|
||||
if (this->unk_18E == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
// clang-format off
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) { this->unk_31C[i] = 0; }
|
||||
// clang-format on
|
||||
@ -594,7 +595,7 @@ s32 func_808A6580(EnSt* this, GlobalContext* globalCtx) {
|
||||
break;
|
||||
|
||||
case 5:
|
||||
this->unk_18E = 30;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->unk_312 = 40;
|
||||
func_808A576C(this);
|
||||
Actor_SetColorFilter(&this->actor, 0, 200, 0, this->unk_312);
|
||||
@ -622,30 +623,30 @@ s32 func_808A6580(EnSt* this, GlobalContext* globalCtx) {
|
||||
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
case 4:
|
||||
this->unk_18E = 20;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->unk_318 = 20;
|
||||
func_808A576C(this);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_18E = 10;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->unk_318 = 0;
|
||||
func_808A576C(this);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_18E = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->unk_318 = 20;
|
||||
func_808A576C(this);
|
||||
break;
|
||||
|
||||
default:
|
||||
this->unk_18E = 1;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_BLUE_FIRE;
|
||||
this->unk_318 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (this->unk_18E != 10) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimations, 7);
|
||||
this->unk_2CC = 0.0f;
|
||||
this->unk_2D4 = 0.0f;
|
||||
@ -757,7 +758,7 @@ void func_808A6E24(EnSt* this, GlobalContext* globalCtx) {
|
||||
s32 i;
|
||||
s32 count = 0;
|
||||
|
||||
if (this->unk_18E == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_31C); i++) {
|
||||
if (DECR(this->unk_31C[i]) == 0) {
|
||||
count++;
|
||||
@ -766,7 +767,7 @@ void func_808A6E24(EnSt* this, GlobalContext* globalCtx) {
|
||||
|
||||
if (count == ARRAY_COUNT(this->unk_31C)) {
|
||||
SubS_ChangeAnimationByInfoS(&this->skelAnime, sAnimations, 7);
|
||||
this->unk_18E = 1;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_BLUE_FIRE;
|
||||
this->unk_2CC = 0.0f;
|
||||
this->unk_2D4 = 0.0f;
|
||||
this->actor.gravity = -1.0f;
|
||||
@ -828,7 +829,7 @@ void func_808A701C(EnSt* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
} else if (DECR(this->unk_318) == 0) {
|
||||
this->unk_18C |= 0x40;
|
||||
if (this->unk_18E == 1) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_BLUE_FIRE) {
|
||||
func_808A576C(this);
|
||||
this->unk_318 = 10;
|
||||
}
|
||||
@ -873,7 +874,7 @@ void EnSt_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->actionFunc = func_808A6E24;
|
||||
} else if (DECR(this->unk_312) == 0) {
|
||||
this->actionFunc(this, globalCtx);
|
||||
if (this->unk_18E != 10) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
}
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 30.0f, 12.0f, 0.0f, 5);
|
||||
@ -884,7 +885,7 @@ void EnSt_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
idx += this->actor.world.rot.y;
|
||||
this->actor.shape.rot.y = idx;
|
||||
|
||||
if (this->unk_18E == 30) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL) {
|
||||
if (this->unk_312 == 1) {
|
||||
s32 i;
|
||||
|
||||
|
@ -18,7 +18,7 @@ typedef struct EnSt {
|
||||
/* 0x144 */ SkelAnime skelAnime;
|
||||
/* 0x188 */ EnStActionFunc actionFunc;
|
||||
/* 0x18C */ u16 unk_18C;
|
||||
/* 0x18E */ u8 unk_18E;
|
||||
/* 0x18E */ u8 drawDmgEffType;
|
||||
/* 0x190 */ ColliderCylinder collider1;
|
||||
/* 0x1DC */ ColliderCylinder collider2;
|
||||
/* 0x228 */ ColliderCylinder collider3;
|
||||
@ -30,7 +30,7 @@ typedef struct EnSt {
|
||||
/* 0x2D0 */ f32 unk_2D0;
|
||||
/* 0x2D4 */ f32 unk_2D4;
|
||||
/* 0x2D8 */ f32 unk_2D8;
|
||||
/* 0x2DC */ f32 unk_2DC[12];
|
||||
/* 0x2DC */ f32 drawDmgEffFrozenSteamScales[12];
|
||||
/* 0x30C */ s16 unk_30C;
|
||||
/* 0x30E */ s16 unk_30E;
|
||||
/* 0x310 */ s16 unk_310;
|
||||
|
@ -176,14 +176,15 @@ s32 func_808D8B58(EnSw* this) {
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_464); i++, phi_s2 += 0x1555) {
|
||||
if (this->unk_412 != 10) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->unk_464[i] = (Rand_ZeroOne() * 16.0f) + 8.0f;
|
||||
} else {
|
||||
this->unk_464[i] = 80;
|
||||
}
|
||||
this->unk_47C[i] = this->unk_464[i];
|
||||
this->unk_418[i] = 0.45000002f;
|
||||
if ((this->unk_412 == 0) || (this->unk_412 == 1) || (this->unk_412 == 10)) {
|
||||
this->drawDmgEffFrozenSteamScales[i] = 0.45000002f;
|
||||
if ((this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) || (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_BLUE_FIRE) ||
|
||||
(this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) {
|
||||
this->unk_380[i].y = (Rand_ZeroOne() - 0.5f) * 20.0f;
|
||||
} else {
|
||||
this->unk_380[i].y = ((Rand_ZeroOne() - 0.5f) * 20.0f) + 10.0f;
|
||||
@ -197,26 +198,27 @@ s32 func_808D8B58(EnSw* this) {
|
||||
|
||||
s32 func_808D8D60(EnSw* this, GlobalContext* globalCtx, s32 arg2) {
|
||||
s32 ret = false;
|
||||
u8 sp53;
|
||||
Vec3f sp44;
|
||||
f32 sp40;
|
||||
u8 drawDmgEffType;
|
||||
Vec3f limbPos[1];
|
||||
f32 drawDmgEffAlpha;
|
||||
|
||||
if (arg2 < this->unk_462) {
|
||||
if (this->unk_464[arg2] != 0) {
|
||||
sp40 = (f32)this->unk_464[arg2] / this->unk_47C[arg2];
|
||||
sp53 = this->unk_412;
|
||||
Math_ApproachF(&this->unk_418[arg2], 0.3f, 0.3f, 0.5f);
|
||||
Math_Vec3f_Copy(&sp44, &this->actor.world.pos);
|
||||
sp44.x += this->unk_380[arg2].x;
|
||||
sp44.y += this->unk_380[arg2].y;
|
||||
sp44.z += this->unk_380[arg2].z;
|
||||
if (sp53 == 10) {
|
||||
drawDmgEffAlpha = (f32)this->unk_464[arg2] / this->unk_47C[arg2];
|
||||
drawDmgEffType = this->drawDmgEffType;
|
||||
Math_ApproachF(&this->drawDmgEffFrozenSteamScales[arg2], 0.3f, 0.3f, 0.5f);
|
||||
Math_Vec3f_Copy(&limbPos[0], &this->actor.world.pos);
|
||||
limbPos[0].x += this->unk_380[arg2].x;
|
||||
limbPos[0].y += this->unk_380[arg2].y;
|
||||
limbPos[0].z += this->unk_380[arg2].z;
|
||||
if (drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
if ((this->unk_47C[arg2] - this->unk_464[arg2]) < 20) {
|
||||
sp53 = 11;
|
||||
drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_SFX;
|
||||
}
|
||||
sp40 = 1.0f;
|
||||
drawDmgEffAlpha = 1.0f;
|
||||
}
|
||||
func_800BE680(globalCtx, &this->actor, &sp44, 1, 0.3f, this->unk_418[arg2], sp40, sp53);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, limbPos, ARRAY_COUNT(limbPos), 0.3f,
|
||||
this->drawDmgEffFrozenSteamScales[arg2], drawDmgEffAlpha, drawDmgEffType);
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
@ -665,7 +667,7 @@ s32 func_808DA08C(EnSw* this, GlobalContext* globalCtx) {
|
||||
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
}
|
||||
|
||||
if (this->unk_412 == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
// clang-format off
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_464); i++) { this->unk_464[i] = 0; }
|
||||
// clang-format on
|
||||
@ -681,36 +683,36 @@ s32 func_808DA08C(EnSw* this, GlobalContext* globalCtx) {
|
||||
|
||||
switch (this->actor.colChkInfo.damageEffect) {
|
||||
case 4:
|
||||
this->unk_412 = 20;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->unk_45C = 20;
|
||||
func_808D8B58(this);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
this->unk_412 = 10;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->unk_45C = 0;
|
||||
func_808D8B58(this);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
this->unk_412 = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->unk_45C = 20;
|
||||
func_808D8B58(this);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
this->unk_412 = 30;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->unk_45C = 20;
|
||||
func_808D8B58(this);
|
||||
break;
|
||||
|
||||
default:
|
||||
this->unk_412 = 1;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_BLUE_FIRE;
|
||||
this->unk_45C = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ENSW_GET_3(&this->actor) && (this->unk_412 != 10)) {
|
||||
if (!ENSW_GET_3(&this->actor) && (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX)) {
|
||||
func_808D9E44(this);
|
||||
}
|
||||
this->unk_458 = 20;
|
||||
@ -856,7 +858,7 @@ void func_808DA6FC(EnSw* this, GlobalContext* globalCtx) {
|
||||
#endif
|
||||
|
||||
void func_808DA89C(EnSw* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_412 == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
s32 i;
|
||||
s32 count;
|
||||
s16 phi_a0;
|
||||
@ -877,7 +879,7 @@ void func_808DA89C(EnSw* this, GlobalContext* globalCtx) {
|
||||
if (!ENSW_GET_3(&this->actor)) {
|
||||
func_808D9E44(this);
|
||||
}
|
||||
this->unk_412 = 1;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_BLUE_FIRE;
|
||||
func_808D8ED0(this, globalCtx);
|
||||
}
|
||||
return;
|
||||
@ -1065,7 +1067,7 @@ void func_808DAEB4(EnSw* this, GlobalContext* globalCtx) {
|
||||
phi_a0 = DECR(this->unk_45C);
|
||||
if (phi_a0 == 0) {
|
||||
this->unk_410 |= 2;
|
||||
if (!ENSW_GET_3(&this->actor) && (this->unk_412 == 1)) {
|
||||
if (!ENSW_GET_3(&this->actor) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_BLUE_FIRE)) {
|
||||
func_808D8B58(this);
|
||||
this->unk_45C = 10;
|
||||
} else {
|
||||
@ -1249,7 +1251,7 @@ void EnSw_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->actionFunc(this, globalCtx);
|
||||
}
|
||||
|
||||
if ((this->unk_412 != 10) || (this->unk_45A != 0)) {
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) || (this->unk_45A != 0)) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
}
|
||||
|
||||
|
@ -25,9 +25,9 @@ typedef struct EnSw {
|
||||
/* 0x0374 */ Vec3f unk_374;
|
||||
/* 0x0380 */ Vec3f unk_380[12];
|
||||
/* 0x0410 */ u16 unk_410;
|
||||
/* 0x0412 */ u8 unk_412;
|
||||
/* 0x0412 */ u8 drawDmgEffType;
|
||||
/* 0x0414 */ f32 unk_414;
|
||||
/* 0x0418 */ f32 unk_418[12];
|
||||
/* 0x0418 */ f32 drawDmgEffFrozenSteamScales[12];
|
||||
/* 0x0448 */ f32 unk_448;
|
||||
/* 0x044C */ f32 unk_44C;
|
||||
/* 0x0450 */ f32 unk_450;
|
||||
|
@ -242,14 +242,14 @@ void EnTalkGibud_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
this->grabState = EN_TALK_GIBUD_GRAB_START;
|
||||
this->grabWaitTimer = 0;
|
||||
this->itemActionParam = PLAYER_AP_NONE;
|
||||
this->effectTimer = 0;
|
||||
this->effectType = 0;
|
||||
this->drawDmgEffTimer = 0;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->isTalking = false;
|
||||
this->type = EN_TALK_GIBUD_TYPE_GIBDO;
|
||||
this->requestedItemIndex = EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx);
|
||||
this->switchFlag = EN_TALK_GIBUD_SWITCH_FLAG(thisx);
|
||||
this->effectAlpha = 0.0f;
|
||||
this->effectScale = 0.0f;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
this->drawDmgEffScale = 0.0f;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
this->limbPos[i] = gZeroVec3f;
|
||||
@ -522,7 +522,7 @@ void EnTalkGibud_SetupStunned(EnTalkGibud* this) {
|
||||
this->actor.speedXZ = 0.0f;
|
||||
this->actor.world.rot.y = this->actor.shape.rot.y;
|
||||
|
||||
if (this->effectTimer != 0) {
|
||||
if (this->drawDmgEffTimer != 0) {
|
||||
Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
|
||||
} else {
|
||||
Actor_SetColorFilter(&this->actor, 0, 0xC8, 0, 0x28);
|
||||
@ -563,7 +563,8 @@ void EnTalkGibud_Damage(EnTalkGibud* this, GlobalContext* globalCtx) {
|
||||
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
|
||||
this->unk_3F7 = -1;
|
||||
this->actor.world.rot.y = this->actor.shape.rot.y;
|
||||
if ((this->effectTimer > 0) && (this->effectType == 0) && (this->type == EN_TALK_GIBUD_TYPE_GIBDO)) {
|
||||
if ((this->drawDmgEffTimer > 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) &&
|
||||
(this->type == EN_TALK_GIBUD_TYPE_GIBDO)) {
|
||||
this->actor.hintId = 0x2A;
|
||||
this->actor.flags &= ~(ACTOR_FLAG_8 | ACTOR_FLAG_1);
|
||||
this->actor.flags |= (ACTOR_FLAG_4 | ACTOR_FLAG_1);
|
||||
@ -597,7 +598,7 @@ void EnTalkGibud_Dead(EnTalkGibud* this, GlobalContext* globalCtx) {
|
||||
this->deathTimer++;
|
||||
}
|
||||
|
||||
if ((this->deathTimer == 20) && (this->effectTimer > 0) && (this->effectType == 0) &&
|
||||
if ((this->deathTimer == 20) && (this->drawDmgEffTimer > 0) && (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FIRE) &&
|
||||
(this->type == EN_TALK_GIBUD_TYPE_GIBDO)) {
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &gRedeadSkel, NULL, this->jointTable, this->morphTable,
|
||||
GIBDO_LIMB_MAX);
|
||||
@ -1040,9 +1041,9 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
EnTalkGibud_SetupDamage(this);
|
||||
}
|
||||
this->effectTimer = 180;
|
||||
this->effectType = 0;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffTimer = 180;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
break;
|
||||
|
||||
case EN_TALK_GIBUD_DMGEFF_LIGHT_ARROW:
|
||||
@ -1052,17 +1053,17 @@ void EnTalkGibud_UpdateDamage(EnTalkGibud* this, GlobalContext* globalCtx) {
|
||||
} else {
|
||||
EnTalkGibud_SetupDamage(this);
|
||||
}
|
||||
this->effectTimer = 60;
|
||||
this->effectType = 20;
|
||||
this->effectAlpha = 1.0f;
|
||||
this->drawDmgEffTimer = 60;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
break;
|
||||
|
||||
case EN_TALK_GIBUD_DMGEFF_ZORA_MAGIC:
|
||||
if (this->actionFunc != EnTalkGibud_Grab &&
|
||||
(this->actionFunc != EnTalkGibud_Stunned || this->stunTimer == 0)) {
|
||||
this->effectAlpha = 1.0f;
|
||||
this->effectTimer = 40;
|
||||
this->effectType = 30;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffTimer = 40;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
EnTalkGibud_SetupStunned(this);
|
||||
}
|
||||
break;
|
||||
@ -1117,15 +1118,15 @@ void EnTalkGibud_MoveGrabbedPlayerAwayFromWall(EnTalkGibud* this, GlobalContext*
|
||||
}
|
||||
|
||||
void EnTalkGibud_UpdateEffect(EnTalkGibud* this, GlobalContext* globalCtx) {
|
||||
if (this->effectTimer > 0) {
|
||||
this->effectTimer--;
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
this->drawDmgEffTimer--;
|
||||
}
|
||||
|
||||
if (this->effectTimer < 20) {
|
||||
Math_SmoothStepToF(&this->effectScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->effectAlpha = this->effectTimer * 0.05f;
|
||||
if (this->drawDmgEffTimer < 20) {
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.0f, 0.5f, 0.03f, 0.0f);
|
||||
this->drawDmgEffAlpha = this->drawDmgEffTimer * 0.05f;
|
||||
} else {
|
||||
Math_SmoothStepToF(&this->effectScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
Math_SmoothStepToF(&this->drawDmgEffScale, 0.5f, 0.1f, 0.02f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1164,7 +1165,7 @@ void EnTalkGibud_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||
Gfx** gfx) {
|
||||
EnTalkGibud* this = THIS;
|
||||
|
||||
if ((this->effectTimer != 0) &&
|
||||
if ((this->drawDmgEffTimer != 0) &&
|
||||
((limbIndex == GIBDO_LIMB_LEFT_THIGH) || (limbIndex == GIBDO_LIMB_LEFT_SHIN) ||
|
||||
(limbIndex == GIBDO_LIMB_LEFT_FOOT) || (limbIndex == GIBDO_LIMB_RIGHT_THIGH) ||
|
||||
(limbIndex == GIBDO_LIMB_RIGHT_SHIN) || (limbIndex == GIBDO_LIMB_RIGHT_FOOT) ||
|
||||
@ -1203,9 +1204,9 @@ void EnTalkGibud_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnTalkGibud_PostLimbDraw, &this->actor, POLY_XLU_DISP);
|
||||
}
|
||||
|
||||
if (this->effectTimer > 0) {
|
||||
func_800BE680(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->effectScale, 0.5f,
|
||||
this->effectAlpha, this->effectType);
|
||||
if (this->drawDmgEffTimer > 0) {
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale, 0.5f, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
@ -21,8 +21,8 @@ typedef struct EnTalkGibud {
|
||||
/* 0x290 */ s32 requestedItemIndex;
|
||||
/* 0x294 */ s32 itemActionParam;
|
||||
/* 0x298 */ s32 switchFlag;
|
||||
/* 0x29C */ f32 effectAlpha;
|
||||
/* 0x2A0 */ f32 effectScale;
|
||||
/* 0x29C */ f32 drawDmgEffAlpha;
|
||||
/* 0x2A0 */ f32 drawDmgEffScale;
|
||||
/* 0x2A4 */ Vec3s jointTable[GIBDO_LIMB_MAX];
|
||||
/* 0x340 */ Vec3s morphTable[GIBDO_LIMB_MAX];
|
||||
/* 0x3DC */ s16 textId;
|
||||
@ -38,10 +38,10 @@ typedef struct EnTalkGibud {
|
||||
};
|
||||
/* 0x3EC */ s16 grabState;
|
||||
/* 0x3EE */ s16 grabWaitTimer; // Cannot grab the player if this is non-zero
|
||||
/* 0x3F0 */ s16 effectTimer;
|
||||
/* 0x3F0 */ s16 drawDmgEffTimer;
|
||||
/* 0x3F2 */ s16 type;
|
||||
/* 0x3F4 */ s16 isTalking;
|
||||
/* 0x3F6 */ u8 effectType;
|
||||
/* 0x3F6 */ u8 drawDmgEffType;
|
||||
/* 0x3F7 */ s8 unk_3F7; // related to player->unk_ADD
|
||||
} EnTalkGibud; // size = 0x3F8
|
||||
|
||||
|
@ -443,19 +443,19 @@ void func_80C11338(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_80C11454(EnThiefbird* this) {
|
||||
this->unk_18C = 10;
|
||||
this->unk_3D8 = 0.5f;
|
||||
this->unk_3DC = 0.75f;
|
||||
this->unk_3D4 = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->actor.flags &= ~ACTOR_FLAG_200;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
|
||||
}
|
||||
|
||||
void func_80C114C0(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_18C == 10) {
|
||||
this->unk_18C = 0;
|
||||
this->unk_3D4 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_350, 11, 2, 0.2f, 0.2f);
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 11, 2, 0.2f, 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_200;
|
||||
}
|
||||
}
|
||||
@ -611,7 +611,7 @@ void func_80C11D14(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
this->unk_18E--;
|
||||
}
|
||||
|
||||
if (this->unk_18C == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
if (this->unk_18E < 38) {
|
||||
func_80C114C0(this, globalCtx);
|
||||
this->actor.speedXZ = 4.0f;
|
||||
@ -646,8 +646,8 @@ void func_80C11DF0(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if ((this->actor.bgCheckFlags & 1) || (this->actor.floorHeight == BGCHECK_Y_MIN)) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_350); i++) {
|
||||
func_800B3030(globalCtx, &this->unk_350[i], &gZeroVec3f, &gZeroVec3f, 0x8C, 0, 0);
|
||||
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
func_800B3030(globalCtx, &this->limbPos[i], &gZeroVec3f, &gZeroVec3f, 0x8C, 0, 0);
|
||||
}
|
||||
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->actor.world.pos, 11, NA_SE_EN_EXTINCT);
|
||||
@ -713,7 +713,7 @@ void func_80C1215C(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
this->unk_18E--;
|
||||
}
|
||||
|
||||
if (this->unk_18C == 10) {
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
if (this->unk_18E < 38) {
|
||||
func_80C114C0(this, globalCtx);
|
||||
this->actor.speedXZ = 4.0f;
|
||||
@ -877,10 +877,10 @@ void func_80C127F4(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
Math_SmoothStepToS(&this->actor.shape.rot.y, Actor_YawBetweenActors(&this->actor, &this->unk_3EC->actor), 3,
|
||||
0x2000, 0x100);
|
||||
}
|
||||
temp_v0 = Math_Vec3f_Pitch(&this->unk_350[9], &this->unk_3EC->actor.world.pos);
|
||||
temp_v0 = Math_Vec3f_Pitch(&this->limbPos[9], &this->unk_3EC->actor.world.pos);
|
||||
temp_v0 = CLAMP(temp_v0, -0x3000, 0x3000);
|
||||
Math_SmoothStepToS(&this->actor.shape.rot.x, temp_v0, 4, 0x800, 0x80);
|
||||
temp_f0 = Actor_DistanceToPoint(&this->unk_3EC->actor, &this->unk_350[9]);
|
||||
temp_f0 = Actor_DistanceToPoint(&this->unk_3EC->actor, &this->limbPos[9]);
|
||||
this->actor.speedXZ = (0.02f * temp_f0) + 2.0f;
|
||||
this->actor.speedXZ = CLAMP_MAX(this->actor.speedXZ, 4.0f);
|
||||
if ((this->unk_3EC->actor.speedXZ <= 0.0f) && (temp_f0 < 40.0f)) {
|
||||
@ -933,22 +933,22 @@ void func_80C12B1C(EnThiefbird* this, GlobalContext* globalCtx) {
|
||||
if (this->actor.colChkInfo.damageEffect == 3) {
|
||||
func_80C11454(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_18C = 20;
|
||||
this->unk_3D8 = 0.5f;
|
||||
this->unk_3D4 = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
if (i != ARRAY_COUNT(this->colliderElements)) {
|
||||
sph = &this->collider.elements[i];
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, sph->info.bumper.hitPos.x,
|
||||
sph->info.bumper.hitPos.y, sph->info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
}
|
||||
} else if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_18C = 0;
|
||||
this->unk_3D8 = 0.5f;
|
||||
this->unk_3D4 = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->unk_18C = 0x1E;
|
||||
this->unk_3D8 = 0.5f;
|
||||
this->unk_3D4 = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
}
|
||||
|
||||
if (this->unk_3E8 != 0) {
|
||||
@ -1020,12 +1020,12 @@ void EnThiefbird_Update(Actor* thisx, GlobalContext* globalCtx2) {
|
||||
}
|
||||
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
if (this->unk_3D4 > 0.0f) {
|
||||
if (this->unk_18C != 10) {
|
||||
Math_StepToF(&this->unk_3D4, 0.0f, 0.05f);
|
||||
this->unk_3D8 = (this->unk_3D4 + 1.0f) * 0.25f;
|
||||
this->unk_3D8 = CLAMP_MAX(this->unk_3D8, 0.5f);
|
||||
} else if (!Math_StepToF(&this->unk_3DC, 0.5f, 0.0125f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.25f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.5f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.5f, 0.0125f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1099,11 +1099,11 @@ void EnThiefbird_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dLi
|
||||
idx = D_80C13698[limbIndex];
|
||||
if (idx != -1) {
|
||||
if (idx == 9) {
|
||||
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->unk_350[idx]);
|
||||
Matrix_GetStateTranslationAndScaledX(1000.0f, &this->limbPos[idx]);
|
||||
} else {
|
||||
Matrix_GetStateTranslation(&this->unk_350[idx]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[idx]);
|
||||
if ((idx == 3) || (idx == 5)) {
|
||||
Matrix_GetStateTranslationAndScaledX(2000.0f, &this->unk_350[idx + 1]);
|
||||
Matrix_GetStateTranslationAndScaledX(2000.0f, &this->limbPos[idx + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1151,7 +1151,7 @@ void EnThiefbird_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
func_800AE5A0(globalCtx);
|
||||
}
|
||||
func_80C13354(this, globalCtx);
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_350, 11, this->unk_3D8, this->unk_3DC, this->unk_3D4,
|
||||
this->unk_18C);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
Math_Vec3s_ToVec3f(&this->actor.focus.pos, &this->collider.elements[1].dim.worldSphere.center);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ typedef struct EnThiefbird {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ SkelAnime skelAnime;
|
||||
/* 0x0188 */ EnThiefbirdActionFunc actionFunc;
|
||||
/* 0x018C */ u8 unk_18C;
|
||||
/* 0x018C */ u8 drawDmgEffType;
|
||||
/* 0x018E */ s16 unk_18E;
|
||||
/* 0x0190 */ s16 unk_190;
|
||||
/* 0x0192 */ s16 unk_192;
|
||||
@ -31,10 +31,10 @@ typedef struct EnThiefbird {
|
||||
/* 0x0208 */ Vec3s morphTable[17];
|
||||
/* 0x0270 */ ColliderJntSph collider;
|
||||
/* 0x0290 */ ColliderJntSphElement colliderElements[3];
|
||||
/* 0x0350 */ Vec3f unk_350[11];
|
||||
/* 0x03D4 */ f32 unk_3D4;
|
||||
/* 0x03D8 */ f32 unk_3D8;
|
||||
/* 0x03DC */ f32 unk_3DC;
|
||||
/* 0x0350 */ Vec3f limbPos[11];
|
||||
/* 0x03D4 */ f32 drawDmgEffAlpha;
|
||||
/* 0x03D8 */ f32 drawDmgEffScale;
|
||||
/* 0x03DC */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x03E0 */ f32 unk_3E0;
|
||||
/* 0x03E4 */ Gfx* unk_3E4;
|
||||
/* 0x03E8 */ Gfx* unk_3E8;
|
||||
|
@ -242,15 +242,15 @@ void func_80893BCC(EnTite* this, GlobalContext* globalCtx) {
|
||||
u32 surface = func_800C9BB8(&globalCtx->colCtx, this->actor.floorPoly, this->actor.floorBgId);
|
||||
|
||||
if ((surface == COLPOLY_SURFACE_GROUND) || (surface == COLPOLY_SURFACE_SAND)) {
|
||||
for (i = 5; i < ARRAY_COUNT(this->unk_2D0); i++) {
|
||||
func_800BBFB0(globalCtx, &this->unk_2D0[i], 1.0f, 2, 80, 15, 1);
|
||||
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
func_800BBFB0(globalCtx, &this->limbPos[i], 1.0f, 2, 80, 15, 1);
|
||||
}
|
||||
} else if (surface == COLPOLY_SURFACE_SNOW) {
|
||||
Vec3f* ptr;
|
||||
|
||||
for (i = 5; i < ARRAY_COUNT(this->unk_2D0); i++) {
|
||||
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
for (j = 0; j < 2; j++) {
|
||||
ptr = &this->unk_2D0[i];
|
||||
ptr = &this->limbPos[i];
|
||||
sp7C.x = ptr->x + randPlusMinusPoint5Scaled(1.0f);
|
||||
sp7C.y = ptr->y + randPlusMinusPoint5Scaled(1.0f);
|
||||
sp7C.z = ptr->z + randPlusMinusPoint5Scaled(1.0f);
|
||||
@ -264,22 +264,22 @@ void func_80893BCC(EnTite* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_80893DD4(EnTite* this) {
|
||||
this->unk_2BB = 10;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->collider.base.colType = COLTYPE_HIT3;
|
||||
this->unk_2BC = 80;
|
||||
this->unk_2C8 = 0.5f;
|
||||
this->unk_2CC = 0.75f;
|
||||
this->unk_2C4 = 1.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
this->drawDmgEffFrozenSteamScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
Actor_SetColorFilter(&this->actor, 0x4000, 255, 0, 80);
|
||||
this->actor.flags &= ~ACTOR_FLAG_200;
|
||||
}
|
||||
|
||||
void func_80893E54(EnTite* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_2BB == 10) {
|
||||
this->unk_2BB = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider.base.colType = COLTYPE_HIT6;
|
||||
this->unk_2C4 = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_2D0, 9, 2, 0.2f, 0.2f);
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 9, 2, 0.2f, 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_200;
|
||||
}
|
||||
}
|
||||
@ -643,8 +643,8 @@ void func_80895020(EnTite* this, GlobalContext* globalCtx) {
|
||||
this->actor.speedXZ = 0.0f;
|
||||
|
||||
ptr = &this->unk_33C[0];
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_2D0); i++, ptr++) {
|
||||
Math_Vec3f_Diff(&this->unk_2D0[i], &this->actor.world.pos, &sp74);
|
||||
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++, ptr++) {
|
||||
Math_Vec3f_Diff(&this->limbPos[i], &this->actor.world.pos, &sp74);
|
||||
temp_f0 = Math3D_Vec3fMagnitude(&sp74);
|
||||
if (temp_f0 > 1.0f) {
|
||||
temp_f0 = 1.2f / temp_f0;
|
||||
@ -664,14 +664,14 @@ void func_808951B8(EnTite* this, GlobalContext* globalCtx) {
|
||||
Math_SmoothStepToS(&this->actor.world.rot.z, 0x4000, 4, 0x1000, 0x400);
|
||||
|
||||
if (this->unk_2BC == 0) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_2D0); i++) {
|
||||
func_800B3030(globalCtx, &this->unk_2D0[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 1);
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->unk_2D0[i], 11, NA_SE_EN_EXTINCT);
|
||||
for (i = 0; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
func_800B3030(globalCtx, &this->limbPos[i], &gZeroVec3f, &gZeroVec3f, 40, 7, 1);
|
||||
SoundSource_PlaySfxAtFixedWorldPos(globalCtx, &this->limbPos[i], 11, NA_SE_EN_EXTINCT);
|
||||
}
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
} else {
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_33C); i++) {
|
||||
Math_Vec3f_Sum(&this->unk_2D0[i], &this->unk_33C[i], &this->unk_2D0[i]);
|
||||
Math_Vec3f_Sum(&this->limbPos[i], &this->unk_33C[i], &this->limbPos[i]);
|
||||
this->unk_33C[i].y += this->actor.gravity;
|
||||
}
|
||||
}
|
||||
@ -940,7 +940,8 @@ void func_80895FF8(EnTite* this, GlobalContext* globalCtx) {
|
||||
|
||||
Actor_SetDropFlag(&this->actor, &this->collider.info);
|
||||
|
||||
if ((this->unk_2BB != 10) || !(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) {
|
||||
func_80893E54(this, globalCtx);
|
||||
if (this->actor.shape.yOffset < 0.0f) {
|
||||
func_80895DE8(this);
|
||||
@ -956,9 +957,9 @@ void func_80895FF8(EnTite* this, GlobalContext* globalCtx) {
|
||||
this->unk_2BC = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 200, 0, 40);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
this->unk_2BB = 32;
|
||||
this->unk_2C8 = 0.5f;
|
||||
this->unk_2C4 = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
func_80894DD0(this);
|
||||
return;
|
||||
}
|
||||
@ -982,13 +983,13 @@ void func_80895FF8(EnTite* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_2BB = 0;
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->unk_2C8 = 0.5f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_2BB = 0x14;
|
||||
this->unk_2C4 = 4.0f;
|
||||
this->unk_2C8 = 0.5f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
this->drawDmgEffScale = 0.5f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG,
|
||||
this->collider.info.bumper.hitPos.x, this->collider.info.bumper.hitPos.y,
|
||||
this->collider.info.bumper.hitPos.z, 0, 0, 0, CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -1031,8 +1032,8 @@ void func_808963B4(EnTite* this, GlobalContext* globalCtx) {
|
||||
Vec3f sp48;
|
||||
|
||||
if (this->actor.bgCheckFlags & 0x40) {
|
||||
for (i = 5; i < ARRAY_COUNT(this->unk_2D0); i++) {
|
||||
Math_Vec3f_Copy(&sp48, &this->unk_2D0[i]);
|
||||
for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) {
|
||||
Math_Vec3f_Copy(&sp48, &this->limbPos[i]);
|
||||
sp48.y = this->actor.world.pos.y + this->actor.depthInWater;
|
||||
EffectSsGRipple_Spawn(globalCtx, &sp48, 0, 220, 0);
|
||||
}
|
||||
@ -1040,7 +1041,7 @@ void func_808963B4(EnTite* this, GlobalContext* globalCtx) {
|
||||
s32 temp = globalCtx->gameplayFrames & 7;
|
||||
|
||||
if (!(temp & 1) && (this->actor.depthInWater < 10.0f)) {
|
||||
Math_Vec3f_Copy(&sp48, &this->unk_2D0[5 + (temp >> 1)]);
|
||||
Math_Vec3f_Copy(&sp48, &this->limbPos[5 + (temp >> 1)]);
|
||||
sp48.y = this->actor.world.pos.y + this->actor.depthInWater;
|
||||
EffectSsGRipple_Spawn(globalCtx, &sp48, 0, 220, 0);
|
||||
}
|
||||
@ -1083,12 +1084,12 @@ void EnTite_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
|
||||
if (this->unk_2C4 > 0.0f) {
|
||||
if (this->unk_2BB != 10) {
|
||||
Math_StepToF(&this->unk_2C4, 0.0f, 0.05f);
|
||||
this->unk_2C8 = (this->unk_2C4 + 1.0f) * 0.25f;
|
||||
this->unk_2C8 = CLAMP_MAX(this->unk_2C8, 0.5f);
|
||||
} else if (!Math_StepToF(&this->unk_2CC, 0.5f, 0.0125f)) {
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.25f;
|
||||
this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.5f);
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.5f, 0.0125f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1120,14 +1121,14 @@ void EnTite_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, V
|
||||
if (this->unk_2BA == 0) {
|
||||
idx = D_80896B70[limbIndex];
|
||||
if (idx != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_2D0[idx]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[idx]);
|
||||
if (idx >= 1) {
|
||||
Matrix_GetStateTranslationAndScaledX(2500.0f, &this->unk_2D0[idx + 4]);
|
||||
Matrix_GetStateTranslationAndScaledX(2500.0f, &this->limbPos[idx + 4]);
|
||||
}
|
||||
}
|
||||
} else if (this->unk_2BA > 0) {
|
||||
if (D_80896B8C[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_2D0[D_80896B8C[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_80896B8C[limbIndex]]);
|
||||
}
|
||||
|
||||
if (limbIndex == 24) {
|
||||
@ -1137,9 +1138,9 @@ void EnTite_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, V
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
matrix = Matrix_GetCurrentState();
|
||||
matrix->wx = this->unk_2D0[D_80896B8C[limbIndex]].x;
|
||||
matrix->wy = this->unk_2D0[D_80896B8C[limbIndex]].y;
|
||||
matrix->wz = this->unk_2D0[D_80896B8C[limbIndex]].z;
|
||||
matrix->wx = this->limbPos[D_80896B8C[limbIndex]].x;
|
||||
matrix->wy = this->limbPos[D_80896B8C[limbIndex]].y;
|
||||
matrix->wz = this->limbPos[D_80896B8C[limbIndex]].z;
|
||||
Matrix_InsertZRotation_s(this->actor.world.rot.z, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
@ -1172,8 +1173,8 @@ void EnTite_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
SkelAnime_DrawOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, EnTite_OverrideLimbDraw,
|
||||
EnTite_PostLimbDraw, &this->actor);
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2D0, ARRAY_COUNT(this->unk_2D0), this->unk_2C8, this->unk_2CC,
|
||||
this->unk_2C4, this->unk_2BB);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale,
|
||||
this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
@ -24,14 +24,14 @@ typedef struct EnTite {
|
||||
/* 0x02B8 */ u8 unk_2B8;
|
||||
/* 0x02B9 */ u8 unk_2B9;
|
||||
/* 0x02BA */ s8 unk_2BA;
|
||||
/* 0x02BB */ u8 unk_2BB;
|
||||
/* 0x02BB */ u8 drawDmgEffType;
|
||||
/* 0x02BC */ s16 unk_2BC;
|
||||
/* 0x02BE */ s16 unk_2BE;
|
||||
/* 0x02C0 */ s32 unk_2C0;
|
||||
/* 0x02C4 */ f32 unk_2C4;
|
||||
/* 0x02C8 */ f32 unk_2C8;
|
||||
/* 0x02CC */ f32 unk_2CC;
|
||||
/* 0x02D0 */ Vec3f unk_2D0[9];
|
||||
/* 0x02C4 */ f32 drawDmgEffAlpha;
|
||||
/* 0x02C8 */ f32 drawDmgEffScale;
|
||||
/* 0x02CC */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x02D0 */ Vec3f limbPos[9];
|
||||
/* 0x033C */ Vec3f unk_33C[9];
|
||||
/* 0x03A8 */ Gfx* unk_3A8;
|
||||
/* 0x03AC */ ColliderSphere collider;
|
||||
|
@ -360,10 +360,10 @@ void EnWf_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
void func_809907D4(EnWf* this) {
|
||||
this->unk_2B0 = 0.75f;
|
||||
this->unk_2B4 = 1.125f;
|
||||
this->unk_2AC = 1.0f;
|
||||
this->unk_296 = 10;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffFrozenSteamScale = 1.125f;
|
||||
this->drawDmgEffAlpha = 1.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX;
|
||||
this->collider2.base.colType = COLTYPE_HIT3;
|
||||
this->collider3.base.colType = COLTYPE_HIT3;
|
||||
this->unk_2A0 = 80;
|
||||
@ -372,12 +372,12 @@ void func_809907D4(EnWf* this) {
|
||||
}
|
||||
|
||||
void func_80990854(EnWf* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_296 == 10) {
|
||||
this->unk_296 = 0;
|
||||
if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->collider2.base.colType = COLTYPE_HIT5;
|
||||
this->collider3.base.colType = COLTYPE_HIT5;
|
||||
this->unk_2AC = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->unk_2B8, 10, 2, 0.3f, 0.2f);
|
||||
this->drawDmgEffAlpha = 0.0f;
|
||||
Actor_SpawnIceEffects(globalCtx, &this->actor, this->limbPos, 10, 2, 0.3f, 0.2f);
|
||||
this->actor.flags |= ACTOR_FLAG_400;
|
||||
}
|
||||
}
|
||||
@ -1410,7 +1410,7 @@ void func_8099386C(EnWf* this, GlobalContext* globalCtx) {
|
||||
this->collider3.base.acFlags &= ~AC_HIT;
|
||||
this->collider1.base.atFlags &= ~AT_ON;
|
||||
|
||||
if (((this->unk_296 != 10) ||
|
||||
if (((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) ||
|
||||
!(collider->info.acHitInfo->toucher.dmgFlags &
|
||||
(0x80000 | 0x40000 | 0x10000 | 0x8000 | 0x2000 | 0x1000 | 0x80 | 0x20 | 0x10 | 0x2 | 0x1))) &&
|
||||
(this->actor.colChkInfo.damageEffect != 0xF)) {
|
||||
@ -1428,9 +1428,9 @@ void func_8099386C(EnWf* this, GlobalContext* globalCtx) {
|
||||
} else if (this->actor.colChkInfo.damageEffect == 5) {
|
||||
this->unk_2A0 = 40;
|
||||
Actor_SetColorFilter(&this->actor, 0, 0xFF, 0, 40);
|
||||
this->unk_296 = 30;
|
||||
this->unk_2B0 = 0.75f;
|
||||
this->unk_2AC = 2.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_SMALL;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 2.0f;
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_COMMON_FREEZE);
|
||||
func_809923B0(this);
|
||||
} else if (this->actor.colChkInfo.damageEffect == 3) {
|
||||
@ -1442,13 +1442,13 @@ void func_8099386C(EnWf* this, GlobalContext* globalCtx) {
|
||||
func_809923B0(this);
|
||||
} else {
|
||||
if (this->actor.colChkInfo.damageEffect == 2) {
|
||||
this->unk_296 = 0;
|
||||
this->unk_2B0 = 0.75f;
|
||||
this->unk_2AC = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FIRE;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
} else if (this->actor.colChkInfo.damageEffect == 4) {
|
||||
this->unk_296 = 20;
|
||||
this->unk_2B0 = 0.75f;
|
||||
this->unk_2AC = 4.0f;
|
||||
this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS;
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
this->drawDmgEffAlpha = 4.0f;
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_CLEAR_TAG, collider->info.bumper.hitPos.x,
|
||||
collider->info.bumper.hitPos.y, collider->info.bumper.hitPos.z, 0, 0, 0,
|
||||
CLEAR_TAG_LARGE_LIGHT_RAYS);
|
||||
@ -1517,16 +1517,16 @@ void EnWf_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
Actor_SetFocus(&this->actor, 25.0f);
|
||||
|
||||
if (this->unk_2AC > 0.0f) {
|
||||
if (this->unk_296 != 10) {
|
||||
Math_StepToF(&this->unk_2AC, 0.0f, 0.05f);
|
||||
this->unk_2B0 = (this->unk_2AC + 1.0f) * 0.375f;
|
||||
if (this->unk_2B0 > 0.75f) {
|
||||
this->unk_2B0 = 0.75f;
|
||||
if (this->drawDmgEffAlpha > 0.0f) {
|
||||
if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) {
|
||||
Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f);
|
||||
this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.375f;
|
||||
if (this->drawDmgEffScale > 0.75f) {
|
||||
this->drawDmgEffScale = 0.75f;
|
||||
} else {
|
||||
this->unk_2B0 = this->unk_2B0;
|
||||
this->drawDmgEffScale = this->drawDmgEffScale;
|
||||
}
|
||||
} else if (!Math_StepToF(&this->unk_2B4, 0.75f, 0.01875f)) {
|
||||
} else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.75f, 0.01875f)) {
|
||||
func_800B9010(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
|
||||
}
|
||||
}
|
||||
@ -1551,7 +1551,7 @@ void EnWf_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec
|
||||
Collider_UpdateSpheres(limbIndex, &this->collider1);
|
||||
|
||||
if (D_809942FC[limbIndex] != -1) {
|
||||
Matrix_GetStateTranslation(&this->unk_2B8[D_809942FC[limbIndex]]);
|
||||
Matrix_GetStateTranslation(&this->limbPos[D_809942FC[limbIndex]]);
|
||||
}
|
||||
|
||||
if (limbIndex == 6) {
|
||||
@ -1580,8 +1580,9 @@ void EnWf_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable,
|
||||
this->skelAnime.dListCount, EnWf_OverrideLimbDraw, EnWf_PostLimbDraw, &this->actor);
|
||||
func_800BE680(globalCtx, &this->actor, this->unk_2B8, 10, this->unk_2B0, this->unk_2B4, this->unk_2AC,
|
||||
this->unk_296);
|
||||
Actor_DrawDamageEffects(globalCtx, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos),
|
||||
this->drawDmgEffScale, this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha,
|
||||
this->drawDmgEffType);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,7 @@ typedef struct EnWf {
|
||||
/* 0x0290 */ EnWfActionFunc actionFunc;
|
||||
/* 0x0294 */ u8 unk_294;
|
||||
/* 0x0295 */ u8 unk_295;
|
||||
/* 0x0296 */ u8 unk_296;
|
||||
/* 0x0296 */ u8 drawDmgEffType;
|
||||
/* 0x0298 */ s16 unk_298;
|
||||
/* 0x029A */ s16 unk_29A;
|
||||
/* 0x029C */ s16 unk_29C;
|
||||
@ -26,10 +26,10 @@ typedef struct EnWf {
|
||||
/* 0x02A2 */ u16 unk_2A2;
|
||||
/* 0x02A4 */ f32 unk_2A4;
|
||||
/* 0x02A8 */ f32 unk_2A8;
|
||||
/* 0x02AC */ f32 unk_2AC;
|
||||
/* 0x02B0 */ f32 unk_2B0;
|
||||
/* 0x02B4 */ f32 unk_2B4;
|
||||
/* 0x02B8 */ Vec3f unk_2B8[10];
|
||||
/* 0x02AC */ f32 drawDmgEffAlpha;
|
||||
/* 0x02B0 */ f32 drawDmgEffScale;
|
||||
/* 0x02B4 */ f32 drawDmgEffFrozenSteamScale;
|
||||
/* 0x02B8 */ Vec3f limbPos[10];
|
||||
/* 0x0330 */ ColliderJntSph collider1;
|
||||
/* 0x0350 */ ColliderJntSphElement collider1Elements[4];
|
||||
/* 0x0450 */ ColliderCylinder collider2;
|
||||
|
@ -437,6 +437,7 @@ animdict = {
|
||||
"func_80114E90": "Interface_HasEmptyBottle",
|
||||
"func_80114F2C": "Interface_HasItemInBottle",
|
||||
"func_80123C90": "Player_SetEquipmentData",
|
||||
"func_800BE680": "Actor_DrawDamageEffects",
|
||||
"func_8013E2D4": "SubS_StartActorCutscene",
|
||||
"func_8013E3B8": "SubS_FillCutscenesList",
|
||||
"func_8013AED4": "SubS_UpdateFlags",
|
||||
@ -445,7 +446,7 @@ animdict = {
|
||||
"func_8013D5E8": "SubS_AngleDiffLessEqual",
|
||||
"func_8012F22C": "Inventory_GetSkullTokenCount",
|
||||
|
||||
# Structs members
|
||||
# Struct members
|
||||
"skelAnime.unk03": "skelAnime.taper",
|
||||
"skelAnime.animCurrentSeg": "skelAnime.animation",
|
||||
"skelAnime.initialFrame": "skelAnime.startFrame",
|
||||
|
@ -893,7 +893,7 @@
|
||||
0x800BE568:("func_800BE568",),
|
||||
0x800BE5CC:("func_800BE5CC",),
|
||||
0x800BE63C:("func_800BE63C",),
|
||||
0x800BE680:("func_800BE680",),
|
||||
0x800BE680:("Actor_DrawDamageEffects",),
|
||||
0x800BF7CC:("Actor_SpawnIceEffects",),
|
||||
0x800BF9A0:("ActorOverlayTable_FaultPrint",),
|
||||
0x800BFA78:("ActorOverlayTable_FaultAddrConv",),
|
||||
|
@ -443,7 +443,7 @@
|
||||
0x801AEE38:("D_801AEE38","struct_801AEE38","[14]",0x150),
|
||||
0x801AEF88:("D_801AEF88","UNK_TYPE1","",0x1),
|
||||
0x801AEFA0:("D_801AEFA0","UNK_TYPE1","",0x1),
|
||||
0x801AEFA8:("D_801AEFA8","UNK_TYPE1","",0x1),
|
||||
0x801AEFA8:("sElectricSparkTextures","UNK_TYPE1","",0x1),
|
||||
0x801AEFB8:("D_801AEFB8","UNK_TYPE1","",0x1),
|
||||
0x801AEFBC:("D_801AEFBC","UNK_TYPE1","",0x1),
|
||||
0x801AEFC0:("D_801AEFC0","UNK_TYPE1","",0x1),
|
||||
|
@ -407,7 +407,7 @@ asm/non_matchings/code/z_actor/func_800BE504.s,func_800BE504,0x800BE504,0x19
|
||||
asm/non_matchings/code/z_actor/func_800BE568.s,func_800BE568,0x800BE568,0x19
|
||||
asm/non_matchings/code/z_actor/func_800BE5CC.s,func_800BE5CC,0x800BE5CC,0x1C
|
||||
asm/non_matchings/code/z_actor/func_800BE63C.s,func_800BE63C,0x800BE63C,0x11
|
||||
asm/non_matchings/code/z_actor/func_800BE680.s,func_800BE680,0x800BE680,0x453
|
||||
asm/non_matchings/code/z_actor/Actor_DrawDamageEffects.s,Actor_DrawDamageEffects,0x800BE680,0x453
|
||||
asm/non_matchings/code/z_actor/Actor_SpawnIceEffects.s,Actor_SpawnIceEffects,0x800BF7CC,0x75
|
||||
asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultPrint.s,ActorOverlayTable_FaultPrint,0x800BF9A0,0x36
|
||||
asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultAddrConv.s,ActorOverlayTable_FaultAddrConv,0x800BFA78,0x1C
|
||||
|
|
Loading…
Reference in New Issue
Block a user