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:
engineer124 2022-03-10 10:37:27 +11:00 committed by GitHub
parent e7940e3bed
commit fe32df0e82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
71 changed files with 1190 additions and 1147 deletions

View File

@ -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>

View File

@ -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);

View File

@ -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;

View File

@ -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,

View File

@ -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;
}

View File

@ -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 } };

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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) {

View File

@ -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;

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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) {

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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)) {

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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",

View File

@ -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",),

View File

@ -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),

View File

@ -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

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
407 asm/non_matchings/code/z_actor/func_800BE568.s func_800BE568 0x800BE568 0x19
408 asm/non_matchings/code/z_actor/func_800BE5CC.s func_800BE5CC 0x800BE5CC 0x1C
409 asm/non_matchings/code/z_actor/func_800BE63C.s func_800BE63C 0x800BE63C 0x11
410 asm/non_matchings/code/z_actor/func_800BE680.s asm/non_matchings/code/z_actor/Actor_DrawDamageEffects.s func_800BE680 Actor_DrawDamageEffects 0x800BE680 0x453
411 asm/non_matchings/code/z_actor/Actor_SpawnIceEffects.s Actor_SpawnIceEffects 0x800BF7CC 0x75
412 asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultPrint.s ActorOverlayTable_FaultPrint 0x800BF9A0 0x36
413 asm/non_matchings/code/z_actor_dlftbls/ActorOverlayTable_FaultAddrConv.s ActorOverlayTable_FaultAddrConv 0x800BFA78 0x1C