Merge pull request #15 from garrettjoecox/a-few-more-hats

A few misc changes
This commit is contained in:
Caladius 2023-11-28 14:27:10 -05:00 committed by GitHub
commit 18961d9496
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 162 additions and 82 deletions

View file

@ -1064,6 +1064,20 @@ static CollisionPoly snowballPoly;
static Vec3f snowballPos; static Vec3f snowballPos;
static f32 raycastResult; static f32 raycastResult;
static u32 iceBlockParams[] = {
0x214,
0x1,
0x11,
0x11,
0x10,
0x12,
0x12,
0x12,
0x20,
0x23,
0x123,
};
void RegisterSnowballs() { void RegisterSnowballs() {
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneSpawnActors>([]() { GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneSpawnActors>([]() {
if (gPlayState->sceneNum != SCENE_HYRULE_FIELD && gPlayState->sceneNum != SCENE_KAKARIKO_VILLAGE) { if (gPlayState->sceneNum != SCENE_HYRULE_FIELD && gPlayState->sceneNum != SCENE_KAKARIKO_VILLAGE) {
@ -1092,6 +1106,55 @@ void RegisterSnowballs() {
} }
} }
}); });
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneSpawnActors>([]() {
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() { void InitMods() {

View file

@ -1681,7 +1681,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Matrix_MultVec3f(&sZeroVec, D_80160000); Matrix_MultVec3f(&sZeroVec, D_80160000);
} }
if (CVarGetInteger("gLetItSnow", 0)) { if (CVarGetInteger("gLetItSnow", 0) && !(this->stateFlags1 & PLAYER_STATE1_FIRST_PERSON)) {
if (limbIndex == PLAYER_LIMB_HEAD) { if (limbIndex == PLAYER_LIMB_HEAD) {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);

View file

@ -308,7 +308,7 @@ void BgSpot08Iceblock_Init(Actor* thisx, PlayState* play) {
break; 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); Actor_Kill(&this->dyna.actor);
return; return;
} }

View file

@ -9,6 +9,7 @@
#include "assets/objects/object_ganon_anime1/object_ganon_anime1.h" #include "assets/objects/object_ganon_anime1/object_ganon_anime1.h"
#include "assets/objects/object_ganon_anime2/object_ganon_anime2.h" #include "assets/objects/object_ganon_anime2/object_ganon_anime2.h"
#include "assets/scenes/dungeons/ganon_boss/ganon_boss_scene.h" #include "assets/scenes/dungeons/ganon_boss/ganon_boss_scene.h"
#include "soh_assets.h"
#include "soh/frame_interpolation.h" #include "soh/frame_interpolation.h"
#include "soh/Enhancements/boss-rush/BossRush.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); 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) { void BossGanon_InitRand(s32 seedInit0, s32 seedInit1, s32 seedInit2) {

View file

@ -1,6 +1,7 @@
#include "z_en_bom_chu.h" #include "z_en_bom_chu.h"
#include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_En_Bom/z_en_bom.h"
#include "objects/gameplay_keep/gameplay_keep.h" #include "objects/gameplay_keep/gameplay_keep.h"
#include "soh_assets.h"
#define FLAGS ACTOR_FLAG_UPDATE_WHILE_CULLED #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); G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gBombchuDL); 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); CLOSE_DISPS(play->state.gfxCtx);
} }

View file

@ -10,6 +10,7 @@
#include "objects/object_dekunuts/object_dekunuts.h" #include "objects/object_dekunuts/object_dekunuts.h"
#include "objects/object_hintnuts/object_hintnuts.h" #include "objects/object_hintnuts/object_hintnuts.h"
#include "objects/object_shopnuts/object_shopnuts.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_dns/object_dns.h"
#include "objects/object_dnk/object_dnk.h" #include "objects/object_dnk/object_dnk.h"
@ -47,7 +48,7 @@ static ColliderCylinderInit sCylinderInit = {
}, },
{ {
ELEMTYPE_UNK0, ELEMTYPE_UNK0,
{ 0xFFCFFFFF, 0x00, 0x08 }, { 0xFFCFFFFF, 0x02, 0x08 },
{ 0xFFCFFFFF, 0x00, 0x00 }, { 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_WOOD, TOUCH_ON | TOUCH_SFX_WOOD,
BUMP_ON, BUMP_ON,
@ -72,6 +73,8 @@ void EnNutsball_Init(Actor* thisx, PlayState* play) {
EnNutsball* this = (EnNutsball*)thisx; EnNutsball* this = (EnNutsball*)thisx;
s32 pad; s32 pad;
this->collider.info.toucher.effect = 2;
ActorShape_Init(&this->actor.shape, 400.0f, ActorShadow_DrawCircle, 13.0f); ActorShape_Init(&this->actor.shape, 400.0f, ActorShadow_DrawCircle, 13.0f);
Collider_InitCylinder(play, &this->collider); Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
@ -141,8 +144,8 @@ void func_80ABBBA8(EnNutsball* this, PlayState* play) {
sp40.y = this->actor.world.pos.y + 4; sp40.y = this->actor.world.pos.y + 4;
sp40.z = this->actor.world.pos.z; sp40.z = this->actor.world.pos.z;
EffectSsHahen_SpawnBurst(play, &sp40, 6.0f, 0, 7, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL); EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x / 10);
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); Actor_Kill(&this->actor);
} else { } else {
if (this->timer == -300) { if (this->timer == -300) {
@ -176,17 +179,19 @@ void EnNutsball_Draw(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
if (CVarGetInteger("gNewDrops", 0) != 0) { if (CVarGetInteger("gNewDrops", 0) || CVarGetInteger("gLetItSnow", 0)) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, f32 scale = 12.0f;
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 6),
1 * (play->state.frames * 6), 32, 32, 1, 1 * (play->state.frames * 6), gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, (1 * -2) % 128, 32, 32));
1 * (play->state.frames * 6), 32, 32));
Matrix_Scale(25.0f,25.0f,25.0f,MTXMODE_APPLY);
Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY); Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), Matrix_Translate(0.0f, -445.946f, 0.0f, MTXMODE_APPLY);
G_MTX_MODELVIEW | G_MTX_LOAD); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
gSPDisplayList(POLY_OPA_DISP++, sDListsNew[thisx->params]);
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 { } else {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);

View file

@ -2,6 +2,7 @@
#include "objects/object_okuta/object_okuta.h" #include "objects/object_okuta/object_okuta.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.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) #define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_HOSTILE)
@ -45,7 +46,7 @@ static ColliderCylinderInit sProjectileColliderInit = {
}, },
{ {
ELEMTYPE_UNK0, ELEMTYPE_UNK0,
{ 0xFFCFFFFF, 0x00, 0x08 }, { 0xFFCFFFFF, 0x02, 0x08 },
{ 0xFFCFFFFF, 0x00, 0x00 }, { 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_HARD, TOUCH_ON | TOUCH_SFX_HARD,
BUMP_ON, BUMP_ON,
@ -519,38 +520,12 @@ void EnOkuta_ProjectileFly(EnOkuta* this, PlayState* play) {
f32 temp_f20; f32 temp_f20;
f32 temp_f22; f32 temp_f22;
s32 i; s32 i;
for (s16 i = 0; i < ARRAY_COUNT(sEffectScales); i++) { EffectSsIcePiece_SpawnBurst(play, &this->actor.world.pos, this->actor.scale.x / 10);
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);
}
} else { } else {
EffectSsHahen_SpawnBurst(play, &pos, 6.0f, 0, 1, 2, 15, 7, 10, gOctorokProjectileDL); 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); Actor_Kill(&this->actor);
} }
} else if (this->timer == -300) { } else if (this->timer == -300) {
@ -763,17 +738,19 @@ void EnOkuta_Draw(Actor* thisx, PlayState* play) {
} else { } else {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
if (CVarGetInteger("gNewDrops", 0) != 0) { if (CVarGetInteger("gNewDrops", 0) || CVarGetInteger("gLetItSnow", 0)) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, f32 scale = 12.0f;
Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 6),
1 * (play->state.frames * 6), 32, 32, 1, 1 * (play->state.frames * 6), gSPSegment(POLY_OPA_DISP++, 0x08, Gfx_TwoTexScroll(play->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, (1 * -2) % 128, 32, 32));
1 * (play->state.frames * 6), 32, 32));
Matrix_Scale(7.0f,7.0f,7.0f,MTXMODE_APPLY); Matrix_RotateX(thisx->home.rot.z * 9.58738e-05f, MTXMODE_APPLY);
Matrix_RotateX(thisx->home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY); Matrix_Translate(0.0f, -445.946f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
G_MTX_MODELVIEW | G_MTX_LOAD);
gSPDisplayList(POLY_OPA_DISP++, gSilverRockDL); 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 { } else {
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
Matrix_RotateZ(this->actor.home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY); Matrix_RotateZ(this->actor.home.rot.z * (M_PI / 0x8000), MTXMODE_APPLY);

View file

@ -2476,6 +2476,7 @@ s32 EnOssan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
break; break;
} }
case 1:
case 3: { case 3: {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
Matrix_Push(); Matrix_Push();
@ -2489,6 +2490,18 @@ s32 EnOssan_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
break; 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: { default: {
OPEN_DISPS(play->state.gfxCtx); OPEN_DISPS(play->state.gfxCtx);
Matrix_Push(); 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])); 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); CLOSE_DISPS(play->state.gfxCtx);
return 0; return 0;
@ -2571,8 +2594,8 @@ void EnOssan_DrawKokiriShopkeeper(Actor* thisx, PlayState* play) {
Gfx_SetupDL_25Opa(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); 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++, 0x08, EnOssan_SetEnvColor(play->state.gfxCtx, 255, 0, 0, 255));
gSPSegment(POLY_OPA_DISP++, 0x09, EnOssan_SetEnvColor(play->state.gfxCtx, 110, 170, 20, 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)); gSPSegment(POLY_OPA_DISP++, 0x0C, EnOssan_EndDList(play->state.gfxCtx));
SkelAnime_DrawSkeletonOpa(play, &this->skelAnime, EnOssan_OverrideLimbDrawKokiriShopkeeper, NULL, this); 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); Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sBombchuShopkeeperEyeTextures[this->eyeTextureIdx])); 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_DrawCursor(play, this, this->cursorX, this->cursorY, this->cursorZ, this->drawCursor);
EnOssan_DrawStickDirectionPrompts(play, this); EnOssan_DrawStickDirectionPrompts(play, this);

View file

@ -2229,21 +2229,6 @@ void EnZf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot,
Matrix_MultVec3f(&zeroVec, &this->bodyPartsPos[bodyPart]); 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[] = { static Gfx D_80B4A2F8[] = {

View file

@ -178,19 +178,19 @@ void EffectSsBomb2_Update(PlayState* play, u32 index, EffectSs* this) {
divisor = this->life - 13; divisor = this->life - 13;
this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor); this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor);
this->rPrimColorG = func_80027DD4(this->rPrimColorG, 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->rPrimColorA = func_80027DD4(this->rPrimColorA, 255, divisor);
this->rEnvColorR = func_80027DD4(this->rEnvColorR, 150, divisor); this->rEnvColorR = func_80027DD4(this->rEnvColorR, 255, divisor);
this->rEnvColorG = func_80027DD4(this->rEnvColorG, 0, divisor); this->rEnvColorG = func_80027DD4(this->rEnvColorG, 255, divisor);
this->rEnvColorB = func_80027DD4(this->rEnvColorB, 0, divisor); this->rEnvColorB = func_80027DD4(this->rEnvColorB, 255, divisor);
} else if ((this->life < 14) && (this->life > -1)) { } else if ((this->life < 14) && (this->life > -1)) {
divisor = this->life + 1; divisor = this->life + 1;
this->rPrimColorR = func_80027DD4(this->rPrimColorR, 50, divisor); this->rPrimColorR = func_80027DD4(this->rPrimColorR, 255, divisor);
this->rPrimColorG = func_80027DD4(this->rPrimColorG, 50, divisor); this->rPrimColorG = func_80027DD4(this->rPrimColorG, 255, divisor);
this->rPrimColorB = func_80027DD4(this->rPrimColorB, 50, divisor); this->rPrimColorB = func_80027DD4(this->rPrimColorB, 255, divisor);
this->rPrimColorA = func_80027DD4(this->rPrimColorA, 150, divisor); this->rPrimColorA = func_80027DD4(this->rPrimColorA, 255, divisor);
this->rEnvColorR = func_80027DD4(this->rEnvColorR, 10, divisor); this->rEnvColorR = func_80027DD4(this->rEnvColorR, 255, divisor);
this->rEnvColorG = func_80027DD4(this->rEnvColorG, 10, divisor); this->rEnvColorG = func_80027DD4(this->rEnvColorG, 255, divisor);
this->rEnvColorB = func_80027DD4(this->rEnvColorB, 10, divisor); this->rEnvColorB = func_80027DD4(this->rEnvColorB, 255, divisor);
} }
} }