diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp index 686375658..a8242f963 100644 --- a/soh/soh/Enhancements/mods.cpp +++ b/soh/soh/Enhancements/mods.cpp @@ -1064,6 +1064,20 @@ static CollisionPoly snowballPoly; static Vec3f snowballPos; static f32 raycastResult; +static u32 iceBlockParams[] = { + 0x214, + 0x1, + 0x11, + 0x11, + 0x10, + 0x12, + 0x12, + 0x12, + 0x20, + 0x23, + 0x123, +}; + void RegisterSnowballs() { GameInteractor::Instance->RegisterGameHook([]() { if (gPlayState->sceneNum != SCENE_HYRULE_FIELD && gPlayState->sceneNum != SCENE_KAKARIKO_VILLAGE) { @@ -1092,6 +1106,55 @@ void RegisterSnowballs() { } } }); + + GameInteractor::Instance->RegisterGameHook([]() { + if (gPlayState->sceneNum != SCENE_LAKE_HYLIA) { + return; + } + + int actorsSpawned = 0; + + Vec3f spawnedIceBlockPos[20]; + + while (actorsSpawned < 20) { + Vec3f iceBlockPos; + iceBlockPos.x = (float)(Random( + (-4200) + 10000, + (3000) + 10000 + ) - (float)10000.0f); + iceBlockPos.y = -1313.0; + iceBlockPos.z = (float)(Random( + (2600) + 10000, + (9000) + 10000 + ) - (float)10000.0f); + + raycastResult = BgCheck_AnyRaycastFloor1(&gPlayState->colCtx, &snowballPoly, &iceBlockPos); + + if (raycastResult > BGCHECK_Y_MIN) { + + bool overlaps = false; + for (int i = 0; i < actorsSpawned; i++) { + if (Math_Vec3f_DistXZ(&spawnedIceBlockPos[i], &iceBlockPos) < 300.0f) { + overlaps = true; + break; + } + } + + if (overlaps) { + continue; + } + + if (LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_RAISED_LAKE_HYLIA_WATER)) { + iceBlockPos.y = raycastResult; + } + + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_BG_SPOT08_ICEBLOCK, iceBlockPos.x, iceBlockPos.y, + iceBlockPos.z, 0, (s16)Random(0, 0xFFFF), 0, RandomElement(iceBlockParams), 0); + spawnedIceBlockPos[actorsSpawned] = iceBlockPos; + actorsSpawned++; + } + } + }); } void InitMods() { diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 9628b28f2..e298b700e 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -1681,7 +1681,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve Matrix_MultVec3f(&sZeroVec, D_80160000); } - if (CVarGetInteger("gLetItSnow", 0)) { + if (CVarGetInteger("gLetItSnow", 0) && !(this->stateFlags1 & PLAYER_STATE1_FIRST_PERSON)) { if (limbIndex == PLAYER_LIMB_HEAD) { OPEN_DISPS(play->state.gfxCtx); diff --git a/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c b/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c index d7b45c9b6..00f44fe82 100644 --- a/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c +++ b/soh/src/overlays/actors/ovl_Bg_Spot08_Iceblock/z_bg_spot08_iceblock.c @@ -308,7 +308,7 @@ void BgSpot08Iceblock_Init(Actor* thisx, PlayState* play) { break; } - if (LINK_AGE_IN_YEARS == YEARS_CHILD) { + if (LINK_AGE_IN_YEARS == YEARS_CHILD && play->sceneNum == SCENE_ZORAS_FOUNTAIN) { Actor_Kill(&this->dyna.actor); return; } diff --git a/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c b/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c index 6b8d2df5c..e25eb1a9c 100644 --- a/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c +++ b/soh/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c @@ -9,6 +9,7 @@ #include "assets/objects/object_ganon_anime1/object_ganon_anime1.h" #include "assets/objects/object_ganon_anime2/object_ganon_anime2.h" #include "assets/scenes/dungeons/ganon_boss/ganon_boss_scene.h" +#include "soh_assets.h" #include "soh/frame_interpolation.h" #include "soh/Enhancements/boss-rush/BossRush.h" @@ -3388,6 +3389,21 @@ void BossGanon_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* Matrix_MultVec3f(&sp1C, &this->unk_214); } + + if (limbIndex == 14) { + OPEN_DISPS(play->state.gfxCtx); + Matrix_Push(); + Matrix_RotateZYX(7749, 0, -11956, MTXMODE_APPLY); + Matrix_Translate(675.676f, -229.730f, 148.649f, MTXMODE_APPLY); + Matrix_Scale(1.014f, 1.014f, 1.014f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + Color_RGBA8 color = { 255, 0, 0, 255 }; + gDPSetEnvColor(POLY_OPA_DISP++, color.r, color.g, color.b, color.a); + gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL); + Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); + } } void BossGanon_InitRand(s32 seedInit0, s32 seedInit1, s32 seedInit2) { diff --git a/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index 02ff9140d..68bfd8e3a 100644 --- a/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -1,6 +1,7 @@ #include "z_en_bom_chu.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "objects/gameplay_keep/gameplay_keep.h" +#include "soh_assets.h" #define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED @@ -529,5 +530,15 @@ void EnBomChu_Draw(Actor* thisx, PlayState* play) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gBombchuDL); + if (CVarGetInteger("gLetItSnow", 0)) { + Matrix_Push(); + Matrix_RotateZYX(0, -3100, 17047, MTXMODE_APPLY); + Matrix_Translate(445.946f, -27.027f, 608.108f, MTXMODE_APPLY); + Matrix_Scale(0.541f, 0.541f, 0.541f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL); + Matrix_Pop(); + } + CLOSE_DISPS(play->state.gfxCtx); } diff --git a/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index d2500afaf..29f2a1c0b 100644 --- a/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/soh/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -10,6 +10,7 @@ #include "objects/object_dekunuts/object_dekunuts.h" #include "objects/object_hintnuts/object_hintnuts.h" #include "objects/object_shopnuts/object_shopnuts.h" +#include "assets/objects/gameplay_keep/gameplay_keep.h" #include "objects/object_dns/object_dns.h" #include "objects/object_dnk/object_dnk.h" @@ -47,7 +48,7 @@ static ColliderCylinderInit sCylinderInit = { }, { ELEMTYPE_UNK0, - { 0xFFCFFFFF, 0x00, 0x08 }, + { 0xFFCFFFFF, 0x02, 0x08 }, { 0xFFCFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_WOOD, BUMP_ON, @@ -72,6 +73,8 @@ void EnNutsball_Init(Actor* thisx, PlayState* play) { EnNutsball* this = (EnNutsball*)thisx; s32 pad; + this->collider.info.toucher.effect = 2; + ActorShape_Init(&this->actor.shape, 400.0f, ActorShadow_DrawCircle, 13.0f); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); @@ -141,8 +144,8 @@ void func_80ABBBA8(EnNutsball* this, PlayState* play) { sp40.y = this->actor.world.pos.y + 4; sp40.z = this->actor.world.pos.z; - EffectSsHahen_SpawnBurst(play, &sp40, 6.0f, 0, 7, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EN_OCTAROCK_ROCK); + EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x / 10); + SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_ICE_BROKEN); Actor_Kill(&this->actor); } else { if (this->timer == -300) { @@ -176,17 +179,19 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - if (CVarGetInteger("gNewDrops", 0) != 0) { + if (CVarGetInteger("gNewDrops", 0) || CVarGetInteger("gLetItSnow", 0)) { Gfx_SetupDL_25Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 6), - 1 * (play->state.frames * 6), 32, 32, 1, 1 * (play->state.frames * 6), - 1 * (play->state.frames * 6), 32, 32)); - Matrix_Scale(25.0f,25.0f,25.0f,MTXMODE_APPLY); + f32 scale = 12.0f; + + gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, (1 * -2) % 128, 32, 32)); + Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(POLY_OPA_DISP++, sDListsNew[thisx->params]); + Matrix_Translate(0.0f, -445.946f, 0.0f, MTXMODE_APPLY); + Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 50, 100, 255); + gSPDisplayList(POLY_OPA_DISP++, gEffIceFragment3DL); } else { Gfx_SetupDL_25Opa(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); diff --git a/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c b/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c index 017d1e9ae..fd46ca603 100644 --- a/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c +++ b/soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c @@ -2,6 +2,7 @@ #include "objects/object_okuta/object_okuta.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "assets/objects/gameplay_keep/gameplay_keep.h" #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE) @@ -45,7 +46,7 @@ static ColliderCylinderInit sProjectileColliderInit = { }, { ELEMTYPE_UNK0, - { 0xFFCFFFFF, 0x00, 0x08 }, + { 0xFFCFFFFF, 0x02, 0x08 }, { 0xFFCFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_HARD, BUMP_ON, @@ -519,38 +520,12 @@ void EnOkuta_ProjectileFly(EnOkuta* this, PlayState* play) { f32 temp_f20; f32 temp_f22; s32 i; - for (s16 i = 0; i < ARRAY_COUNT(sEffectScales); i++) { - phi_s0 += 10000; - - temp_f20 = Rand_ZeroOne() * 5.0f; - pos.x = (Math_SinS(phi_s0) * temp_f20) + this->actor.world.pos.x; - pos.y = (Rand_ZeroOne() * 40.0f) + this->actor.world.pos.y + 5.0f; - pos.z = (Math_CosS(phi_s0) * temp_f20) + this->actor.world.pos.z; - - temp_f20 = (Rand_ZeroOne() * 5.0f) + 2.0f; - velocity.x = Math_SinS(phi_s0) * temp_f20; - temp_f22 = Rand_ZeroOne(); - velocity.y = (Rand_ZeroOne() * i * 2.5f) + (temp_f22 * 5.0f); - velocity.z = Math_CosS(phi_s0) * temp_f20; - - if (i == 0) { - phi_v0 = 41; - gravity = -450; - } else if (i < 4) { - phi_v0 = 37; - gravity = -380; - } else { - phi_v0 = 69; - gravity = -320; - } - EffectSsKakera_Spawn(play, &pos, &velocity, &this->actor.world.pos, gravity, phi_v0, 30, 5, 0, - sEffectScales[i]/5, 3, 0, 70, 1, OBJECT_GAMEPLAY_FIELD_KEEP, gSilverRockFragmentsDL); - } + EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x / 10); } else { EffectSsHahen_SpawnBurst(play, &pos, 6.0f, 0, 1, 2, 15, 7, 10, gOctorokProjectileDL); } - SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_EN_OCTAROCK_ROCK); + SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 20, NA_SE_PL_ICE_BROKEN); Actor_Kill(&this->actor); } } else if (this->timer == -300) { @@ -763,17 +738,19 @@ void EnOkuta_Draw(Actor* thisx, PlayState* play) { } else { OPEN_DISPS(play->state.gfxCtx); - if (CVarGetInteger("gNewDrops", 0) != 0) { + if (CVarGetInteger("gNewDrops", 0) || CVarGetInteger("gLetItSnow", 0)) { Gfx_SetupDL_25Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, - Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 6), - 1 * (play->state.frames * 6), 32, 32, 1, 1 * (play->state.frames * 6), - 1 * (play->state.frames * 6), 32, 32)); - Matrix_Scale(7.0f,7.0f,7.0f,MTXMODE_APPLY); - Matrix_RotateX(thisx->home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), - G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(POLY_OPA_DISP++, gSilverRockDL); + f32 scale = 12.0f; + + gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, (1 * -2) % 128, 32, 32)); + + Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY); + Matrix_Translate(0.0f, -445.946f, 0.0f, MTXMODE_APPLY); + Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 50, 100, 255); + gSPDisplayList(POLY_OPA_DISP++, gEffIceFragment3DL); } else { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZ(this->actor.home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY); diff --git a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 668b176d5..f3c47e25e 100644 --- a/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -2476,6 +2476,7 @@ s32 EnOssan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot CLOSE_DISPS(play->state.gfxCtx); break; } + case 1: case 3: { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -2489,6 +2490,18 @@ s32 EnOssan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot CLOSE_DISPS(play->state.gfxCtx); break; } + case 2: { + OPEN_DISPS(play->state.gfxCtx); + Matrix_Push(); + Matrix_RotateZYX(-16163, 0, 2878, MTXMODE_APPLY); + Matrix_Translate(905.406f, 0.0f, -27.027f, MTXMODE_APPLY); + Matrix_Scale(1.318f, 1.318f, 1.318f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL); + Matrix_Pop(); + CLOSE_DISPS(play->state.gfxCtx); + break; + } default: { OPEN_DISPS(play->state.gfxCtx); Matrix_Push(); @@ -2543,6 +2556,16 @@ s32 EnOssan_OverrideLimbDrawKokiriShopkeeper(PlayState* play, s32 limbIndex, Gfx gSPSegment(POLY_OPA_DISP++, 0x0A, SEGMENTED_TO_VIRTUAL(sKokiriShopkeeperEyeTextures[this->eyeTextureIdx])); } + if (limbIndex == 9) { + Matrix_Push(); + Matrix_RotateZYX(13948, 0, -1550, MTXMODE_APPLY); + Matrix_Translate(1837.838f, 0.000f, 540.541f, MTXMODE_APPLY); + Matrix_Scale(1.068f, 1.068f, 1.068f, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gSantaHatGenericDL); + Matrix_Pop(); + } + CLOSE_DISPS(play->state.gfxCtx); return 0; @@ -2571,8 +2594,8 @@ void EnOssan_DrawKokiriShopkeeper(Actor* thisx, PlayState* play) { Gfx_SetupDL_25Opa(play->state.gfxCtx); gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); - gSPSegment(POLY_OPA_DISP++, 0x08, EnOssan_SetEnvColor(play->state.gfxCtx, 0, 130, 70, 255)); - gSPSegment(POLY_OPA_DISP++, 0x09, EnOssan_SetEnvColor(play->state.gfxCtx, 110, 170, 20, 255)); + gSPSegment(POLY_OPA_DISP++, 0x08, EnOssan_SetEnvColor(play->state.gfxCtx, 255, 0, 0, 255)); + gSPSegment(POLY_OPA_DISP++, 0x09, EnOssan_SetEnvColor(play->state.gfxCtx, 255, 0, 0, 255)); gSPSegment(POLY_OPA_DISP++, 0x0C, EnOssan_EndDList(play->state.gfxCtx)); SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnOssan_OverrideLimbDrawKokiriShopkeeper, NULL, this); @@ -2683,7 +2706,7 @@ void EnOssan_DrawBombchuShopkeeper(Actor* thisx, PlayState* play) { Gfx_SetupDL_25Opa(play->state.gfxCtx); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sBombchuShopkeeperEyeTextures[this->eyeTextureIdx])); - SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, NULL, this); + SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, NULL, EnOssan_PostLimbDraw, this); EnOssan_DrawCursor(play, this, this->cursorX, this->cursorY, this->cursorZ, this->drawCursor); EnOssan_DrawStickDirectionPrompts(play, this); diff --git a/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c b/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c index 620bf67a5..02afe7c9b 100644 --- a/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c +++ b/soh/src/overlays/actors/ovl_En_Zf/z_en_zf.c @@ -2229,21 +2229,6 @@ void EnZf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Matrix_MultVec3f(&zeroVec, &this->bodyPartsPos[bodyPart]); } } - - if (CVarGetInteger("gLetItSnow", 0)) { - if (limbIndex == 9) { - OPEN_DISPS(play->state.gfxCtx); - Matrix_Push(); - Matrix_RotateZYX(0, 0, -22584, MTXMODE_APPLY); - Matrix_Translate(0.0f, 270.27f, 0.0f, MTXMODE_APPLY); - Matrix_Scale(0.628f, 0.628f, 0.628f, MTXMODE_APPLY); - gDPSetEnvColor(POLY_OPA_DISP++, 255, 0, 0, 255); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gPaperCrownGenericDL); - Matrix_Pop(); - CLOSE_DISPS(play->state.gfxCtx); - } - } } static Gfx D_80B4A2F8[] = { diff --git a/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c b/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c index 12d5c38cc..cceafe7ed 100644 --- a/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c +++ b/soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c @@ -178,19 +178,19 @@ void EffectSsBomb2_Update(PlayState* play, u32 index, EffectSs* this) { divisor = this->life - 13; this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor); this->rPrimColorG = func_80027DD4(this->rPrimColorG, 255, divisor); - this->rPrimColorB = func_80027DD4(this->rPrimColorB, 150, divisor); + this->rPrimColorB = func_80027DD4(this->rPrimColorB, 255, divisor); this->rPrimColorA = func_80027DD4(this->rPrimColorA, 255, divisor); - this->rEnvColorR = func_80027DD4(this->rEnvColorR, 150, divisor); - this->rEnvColorG = func_80027DD4(this->rEnvColorG, 0, divisor); - this->rEnvColorB = func_80027DD4(this->rEnvColorB, 0, divisor); + this->rEnvColorR = func_80027DD4(this->rEnvColorR, 255, divisor); + this->rEnvColorG = func_80027DD4(this->rEnvColorG, 255, divisor); + this->rEnvColorB = func_80027DD4(this->rEnvColorB, 255, divisor); } else if ((this->life < 14) && (this->life > -1)) { divisor = this->life + 1; - this->rPrimColorR = func_80027DD4(this->rPrimColorR, 50, divisor); - this->rPrimColorG = func_80027DD4(this->rPrimColorG, 50, divisor); - this->rPrimColorB = func_80027DD4(this->rPrimColorB, 50, divisor); - this->rPrimColorA = func_80027DD4(this->rPrimColorA, 150, divisor); - this->rEnvColorR = func_80027DD4(this->rEnvColorR, 10, divisor); - this->rEnvColorG = func_80027DD4(this->rEnvColorG, 10, divisor); - this->rEnvColorB = func_80027DD4(this->rEnvColorB, 10, divisor); + this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor); + this->rPrimColorG = func_80027DD4(this->rPrimColorG, 255, divisor); + this->rPrimColorB = func_80027DD4(this->rPrimColorB, 255, divisor); + this->rPrimColorA = func_80027DD4(this->rPrimColorA, 255, divisor); + this->rEnvColorR = func_80027DD4(this->rEnvColorR, 255, divisor); + this->rEnvColorG = func_80027DD4(this->rEnvColorG, 255, divisor); + this->rEnvColorB = func_80027DD4(this->rEnvColorB, 255, divisor); } }