summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordjevangelia <263709373+djevangelia@users.noreply.github.com>2026-07-31 18:56:30 +0200
committerGitHub <noreply@github.com>2026-07-31 16:56:30 +0000
commit5a57a0cbc3b644660852e95358737a9520f749f5 (patch)
tree622e4806593823df860542c3aeb3909fbb006176
parent988b5366514b7a2031535aa9675f90e27624f2be (diff)
Decomp, naming (OnePointCS, itemAction, blure, wall/floor types) (#7007)
-rw-r--r--soh/include/functions.h26
-rw-r--r--soh/include/z64bgcheck.h59
-rw-r--r--soh/include/z64camera.h12
-rw-r--r--soh/soh/Enhancements/Fixes/FixVineFall.cpp6
-rw-r--r--soh/soh/Enhancements/debugger/colViewer.cpp2
-rw-r--r--soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h2
-rw-r--r--soh/src/code/db_camera.c4
-rw-r--r--soh/src/code/z_bgcheck.c27
-rw-r--r--soh/src/code/z_camera.c4
-rw-r--r--soh/src/code/z_eff_blure.c98
-rw-r--r--soh/src/code/z_effect_soft_sprite.c21
-rw-r--r--soh/src/code/z_onepointdemo.c116
-rw-r--r--soh/src/code/z_player_lib.c45
-rw-r--r--soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c6
-rw-r--r--soh/src/overlays/actors/ovl_En_In/z_en_in.c4
-rw-r--r--soh/src/overlays/actors/ovl_En_Sw/z_en_sw.c2
-rw-r--r--soh/src/overlays/actors/ovl_En_Test/z_en_test.c2
-rw-r--r--soh/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c2
-rw-r--r--soh/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c4
-rw-r--r--soh/src/overlays/actors/ovl_player_actor/z_player.c122
-rw-r--r--soh/src/overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.c28
-rw-r--r--soh/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c12
22 files changed, 348 insertions, 256 deletions
diff --git a/soh/include/functions.h b/soh/include/functions.h
index 1bec60eb8..b74aaa148 100644
--- a/soh/include/functions.h
+++ b/soh/include/functions.h
@@ -224,9 +224,9 @@ void EffectSs_Insert(PlayState* play, EffectSs* effectSs);
void EffectSs_Spawn(PlayState* play, s32 type, s32 priority, void* initParams);
void EffectSs_UpdateAll(PlayState* play);
void EffectSs_DrawAll(PlayState* play);
-s16 func_80027DD4(s16 arg0, s16 arg1, s32 arg2);
-s16 func_80027E34(s16 arg0, s16 arg1, f32 arg2);
-u8 func_80027E84(u8 arg0, u8 arg1, f32 arg2);
+s16 EffectSs_LerpInv(s16 a, s16 b, s32 weightInv);
+s16 EffectSs_LerpS16(s16 a, s16 b, f32 weight);
+u8 EffectSs_LerpU8(u8 a, u8 b, f32 weight);
void EffectSs_DrawGEffect(PlayState* play, EffectSs* this, void* texture);
void EffectSsDust_Spawn(PlayState* play, u16 drawFlags, Vec3f* pos, Vec3f* velocity, Vec3f* accel,
Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life,
@@ -683,7 +683,7 @@ u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly,
u32 SurfaceType_GetFloorType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
u32 func_80041D70(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
u32 func_80041D94(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
-s32 func_80041DB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
+s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
s32 func_80041DE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
s32 func_80041E18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
s32 func_80041E4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId);
@@ -1047,8 +1047,8 @@ VecSph* OLib_Vec3fToVecSphGeo(VecSph* arg0, Vec3f* arg1);
VecSph* OLib_Vec3fDiffToVecSphGeo(VecSph* arg0, Vec3f* a, Vec3f* b);
Vec3f* OLib_Vec3fDiffRad(Vec3f* dest, Vec3f* a, Vec3f* b);
void OnePointCutscene_SetCsCamPoints(Camera* camera, s16 actionParameters, s16 initTimer, CutsceneCameraPoint* atPoints, CutsceneCameraPoint* eyePoints);
-s16 OnePointCutscene_Init(PlayState* play, s16 csId, s16 timer, Actor* actor, s16 camIdx);
-s16 OnePointCutscene_EndCutscene(PlayState* play, s16 camIdx);
+s16 OnePointCutscene_Init(PlayState* play, s16 csId, s16 timer, Actor* actor, s16 parentCamId);
+s16 OnePointCutscene_EndCutscene(PlayState* play, s16 subCamId);
s32 OnePointCutscene_Attention(PlayState* play, Actor* actor);
s32 OnePointCutscene_AttentionSetSfx(PlayState* play, Actor* actor, s32 sfxId);
void OnePointCutscene_EnableAttention(void);
@@ -1114,13 +1114,13 @@ s32 Player_TryCsAction(PlayState* play, Actor* actor, s32 csAction);
s32 Player_InCsMode(PlayState* play);
s32 Player_CheckHostileLockOn(Player* player);
s32 Player_IsChildWithHylianShield(Player* player);
-s32 Player_ActionToModelGroup(Player* player, s32 actionParam);
+s32 Player_ActionToModelGroup(Player* player, s32 itemAction);
void Player_SetModelsForHoldingShield(Player* player);
void Player_SetModels(Player* player, s32 modelGroup);
void Player_SetModelGroup(Player* player, s32 modelGroup);
void func_8008EC70(Player* player);
void Player_SetEquipmentData(PlayState* play, Player* player);
-void Player_UpdateBottleHeld(PlayState* play, Player* player, s32 item, s32 actionParam);
+void Player_UpdateBottleHeld(PlayState* play, Player* player, s32 item, s32 itemAction);
void func_80837C0C(PlayState* play, Player* this, s32 arg2, f32 arg3, f32 arg4, s16 arg5, s32 arg6);
void Player_ReleaseLockOn(Player* player);
void Player_ClearZTargeting(Player* player);
@@ -1132,21 +1132,21 @@ u8 Player_GetMask(PlayState* play);
Player* Player_UnsetMask(PlayState* play);
s32 Player_HasMirrorShieldEquipped(PlayState* play);
s32 Player_HasMirrorShieldSetToDraw(PlayState* play);
-s32 Player_ActionToMagicSpell(Player* player, s32 actionParam);
+s32 Player_ActionToMagicSpell(Player* player, s32 itemAction);
void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotRange);
s32 Player_HoldsHookshot(Player* player);
s32 Player_HoldsBow(Player* player);
s32 Player_HoldsSlingshot(Player* player);
s32 func_8008F128(Player* player);
-s32 Player_ActionToMeleeWeapon(s32 actionParam);
+s32 Player_ActionToMeleeWeapon(s32 itemAction);
s32 Player_GetMeleeWeaponHeld(Player* player);
s32 Player_HoldsTwoHandedWeapon(Player* player);
s32 Player_HoldsBrokenKnife(Player* player);
-s32 Player_ActionToBottle(Player* player, s32 actionParam);
+s32 Player_ActionToBottle(Player* player, s32 itemAction);
s32 Player_GetBottleHeld(Player* player);
-s32 Player_ActionToExplosive(Player* player, s32 actionParam);
+s32 Player_ActionToExplosive(Player* player, s32 itemAction);
s32 Player_GetExplosiveHeld(Player* player);
-s32 func_8008F2BC(Player* player, s32 actionParam);
+s32 func_8008F2BC(Player* player, s32 itemAction);
s32 Player_GetEnvironmentalHazard(PlayState* play);
void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, s32 tunic,
s32 boots, s32 face, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, void* this);
diff --git a/soh/include/z64bgcheck.h b/soh/include/z64bgcheck.h
index 5314f98cd..4ef178810 100644
--- a/soh/include/z64bgcheck.h
+++ b/soh/include/z64bgcheck.h
@@ -71,6 +71,65 @@ typedef struct {
// 0x0000_00FF = CamData index
} WaterBox; // size = 0x10
+typedef enum FloorType {
+ /* 0 */ FLOOR_TYPE_0,
+ /* 1 */ FLOOR_TYPE_1,
+ /* 2 */ FLOOR_TYPE_2,
+ /* 3 */ FLOOR_TYPE_3,
+ /* 4 */ FLOOR_TYPE_4,
+ /* 5 */ FLOOR_TYPE_5,
+ /* 6 */ FLOOR_TYPE_6,
+ /* 7 */ FLOOR_TYPE_7,
+ /* 8 */ FLOOR_TYPE_8,
+ /* 9 */ FLOOR_TYPE_9,
+ /* 10 */ FLOOR_TYPE_10,
+ /* 11 */ FLOOR_TYPE_11,
+ /* 12 */ FLOOR_TYPE_12
+} FloorType;
+
+typedef enum WallType {
+ /* 0 */ WALL_TYPE_0,
+ /* 1 */ WALL_TYPE_1,
+ /* 2 */ WALL_TYPE_2,
+ /* 3 */ WALL_TYPE_3,
+ /* 4 */ WALL_TYPE_4,
+ /* 5 */ WALL_TYPE_5,
+ /* 6 */ WALL_TYPE_6,
+ /* 7 */ WALL_TYPE_7,
+ /* 8 */ WALL_TYPE_8,
+ /* 9 */ WALL_TYPE_9,
+ /* 10 */ WALL_TYPE_10,
+ /* 11 */ WALL_TYPE_11,
+ /* 12 */ WALL_TYPE_12,
+ /* 32 */ WALL_TYPE_MAX = 32
+} WallType;
+
+#define WALL_FLAG_0 (1 << 0)
+#define WALL_FLAG_LADDER (1 << 1)
+#define WALL_FLAG_LADDER_TOP (1 << 2)
+#define WALL_FLAG_CLIMBABLE (1 << 3)
+#define WALL_FLAG_CRAWLSPACE_1 (1 << 4)
+#define WALL_FLAG_CRAWLSPACE_2 (1 << 5)
+#define WALL_FLAG_GRABBABLE (1 << 6) // Grabbable dynapoly such as blocks
+#define WALL_FLAG_CRAWLSPACE (WALL_FLAG_CRAWLSPACE_1 | WALL_FLAG_CRAWLSPACE_2)
+
+typedef enum FloorProperty {
+ /* 0 */ FLOOR_PROPERTY_0,
+ /* 5 */ FLOOR_PROPERTY_5 = 5,
+ /* 6 */ FLOOR_PROPERTY_6,
+ /* 7 */ FLOOR_PROPERTY_7,
+ /* 8 */ FLOOR_PROPERTY_8,
+ /* 9 */ FLOOR_PROPERTY_9,
+ /* 11 */ FLOOR_PROPERTY_11 = 11,
+ /* 12 */ FLOOR_PROPERTY_12
+} FloorProperty;
+
+typedef enum FloorEffect {
+ /* 0 */ FLOOR_EFFECT_0,
+ /* 1 */ FLOOR_EFFECT_1, // Slope/sliding
+ /* 2 */ FLOOR_EFFECT_2 // Transition
+} FloorEffect;
+
typedef struct {
u32 data[2];
diff --git a/soh/include/z64camera.h b/soh/include/z64camera.h
index 885bec2b1..624ae6abb 100644
--- a/soh/include/z64camera.h
+++ b/soh/include/z64camera.h
@@ -12,8 +12,14 @@
#define NUM_CAMS 4
-#define CAM_ID_MAIN 0
-#define CAM_ID_SUB_FIRST 1
+// Camera IDs are indices into `PlayState.cameraPtrs`
+#define CAM_ID_MAIN 0 // The index of the main camera
+#define CAM_ID_SUB_FIRST 1 // The index sub cameras start at
+#define CAM_ID_NONE -1 // Used to indicate no camera. Can be used to default to the active camera in some scenarios
+
+#define SUB_CAM_ID_DONE 0 // Used in some actors for variables holding sub camera IDs to indicate "subcam is finished"
+
+// Older decomp names
#define SUBCAM_FREE 0
#define SUBCAM_NONE -1
#define SUBCAM_ACTIVE -1
@@ -107,7 +113,7 @@ typedef enum {
/* 0x05 */ CAM_MODE_CLIMB,
/* 0x06 */ CAM_MODE_FIRST_PERSON, // "SUBJECT"
/* 0x07 */ CAM_MODE_AIM_ADULT,
- /* 0x08 */ CAM_MODE_BOWARROWZ,
+ /* 0x08 */ CAM_MODE_Z_AIM,
/* 0x09 */ CAM_MODE_HOOKSHOT, // "FOOKSHOT"
/* 0x0A */ CAM_MODE_AIM_BOOMERANG,
/* 0x0B */ CAM_MODE_AIM_CHILD, // "PACHINCO"
diff --git a/soh/soh/Enhancements/Fixes/FixVineFall.cpp b/soh/soh/Enhancements/Fixes/FixVineFall.cpp
index f51891673..e8a55135e 100644
--- a/soh/soh/Enhancements/Fixes/FixVineFall.cpp
+++ b/soh/soh/Enhancements/Fixes/FixVineFall.cpp
@@ -3,6 +3,7 @@
extern "C" {
#include "functions.h"
+#include "z64bgcheck.h"
}
static void RegisterFixVineFall() {
@@ -22,7 +23,7 @@ static void RegisterFixVineFall() {
* margin to make sure it still hits a climbable poly. Then update the flags
* in touchedWallFlags again and proceed as normal.
*/
- if (*touchedWallFlags & 8) {
+ if (*touchedWallFlags & WALL_FLAG_CLIMBABLE) {
Vec3f checkPosA;
Vec3f checkPosB;
Vec3f raycastResult;
@@ -62,7 +63,8 @@ static void RegisterFixVineFall() {
player->actor.wallYaw = Math_Atan2S(wallPoly->normal.z, wallPoly->normal.x);
*yawDiff = player->actor.shape.rot.y - (s16)(player->actor.wallYaw + 0x8000);
- *touchedWallFlags = func_80041DB8(&play->colCtx, player->actor.wallPoly, player->actor.wallBgId);
+ *touchedWallFlags =
+ SurfaceType_GetWallFlags(&play->colCtx, player->actor.wallPoly, player->actor.wallBgId);
}
}
});
diff --git a/soh/soh/Enhancements/debugger/colViewer.cpp b/soh/soh/Enhancements/debugger/colViewer.cpp
index 64995b2f5..31ee5bf16 100644
--- a/soh/soh/Enhancements/debugger/colViewer.cpp
+++ b/soh/soh/Enhancements/debugger/colViewer.cpp
@@ -401,7 +401,7 @@ void DrawDynapoly(std::vector<Gfx>& dl, CollisionHeader* col, int32_t bgId) {
} else if (SurfaceType_GetFloorType(&gPlayState->colCtx, poly, bgId) != 0 ||
SurfaceType_IsWallDamage(&gPlayState->colCtx, poly, bgId)) {
color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorSpecialSurface.Value"), { 192, 255, 192, 255 });
- } else if (SurfaceType_GetFloorEffect(&gPlayState->colCtx, poly, bgId) == 0x01) {
+ } else if (SurfaceType_GetFloorEffect(&gPlayState->colCtx, poly, bgId) == FLOOR_EFFECT_1) {
color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorSlope.Value"), { 255, 255, 128, 255 });
} else {
color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorNormal.Value"), { 255, 255, 255, 255 });
diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
index 0ae138df4..1fb09e267 100644
--- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
+++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
@@ -2496,7 +2496,7 @@ typedef enum {
// #### `result`
// ```c
- // SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == 2
+ // SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2
// ```
// #### `args`
// - `*int16_t` - original next entrance index (`play->setupExitList[exitIndex - 1]`)
diff --git a/soh/src/code/db_camera.c b/soh/src/code/db_camera.c
index 364721160..2cfe47003 100644
--- a/soh/src/code/db_camera.c
+++ b/soh/src/code/db_camera.c
@@ -2065,14 +2065,14 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
sDbCamAnim.unk_04 = 0;
} else if (CHECK_BTN_ALL(sPlayState->state.input[2].press.button, BTN_CLEFT)) {
sDbCamAnim.unk_0A = 0;
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
Letterbox_SetSizeTarget(0);
D_8016110C = 0;
return 2;
}
if (func_800B91B0(cam, dbCamera) == 0) {
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
Letterbox_SetSizeTarget(0);
Audio_PlaySoundGeneral(NA_SE_SY_GET_RUPY, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
diff --git a/soh/src/code/z_bgcheck.c b/soh/src/code/z_bgcheck.c
index 7339ef9d6..536947a05 100644
--- a/soh/src/code/z_bgcheck.c
+++ b/soh/src/code/z_bgcheck.c
@@ -29,9 +29,16 @@
#define COLPOLY_IGNORE_ENTITY (1 << 1)
#define COLPOLY_IGNORE_PROJECTILES (1 << 2)
-// func_80041DB8, SurfaceType wall properties
-s32 D_80119D90[32] = {
- 0, 1, 3, 5, 8, 16, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+// SurfaceType_GetWallFlags, SurfaceType wall types
+s32 D_80119D90[WALL_TYPE_MAX] = {
+ 0, // WALL_TYPE_0
+ WALL_FLAG_0, // WALL_TYPE_1
+ WALL_FLAG_0 | WALL_FLAG_LADDER, // WALL_TYPE_2
+ WALL_FLAG_0 | WALL_FLAG_LADDER_TOP, // WALL_TYPE_3
+ WALL_FLAG_CLIMBABLE, // WALL_TYPE_4
+ WALL_FLAG_CRAWLSPACE_1, // WALL_TYPE_5
+ WALL_FLAG_CRAWLSPACE_2, // WALL_TYPE_6
+ WALL_FLAG_GRABBABLE, // WALL_TYPE_7
};
// SurfaceType_GetSfx
@@ -4002,7 +4009,7 @@ u32 func_80041D70(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
}
/**
- * SurfaceType Get Wall Property (Internal)
+ * SurfaceType Get Wall Type (Internal)
*/
u32 func_80041D94(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 21 & 0x1F;
@@ -4011,9 +4018,9 @@ u32 func_80041D94(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
/**
* SurfaceType Get Wall Flags
*/
-s32 func_80041DB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
+s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
if (GameInteractor_Should(VB_SURFACE_IS_CLIMBABLE, false)) {
- return (1 << 3) | D_80119D90[func_80041D94(colCtx, poly, bgId)];
+ return WALL_FLAG_CLIMBABLE | D_80119D90[func_80041D94(colCtx, poly, bgId)];
} else {
return D_80119D90[func_80041D94(colCtx, poly, bgId)];
}
@@ -4023,21 +4030,21 @@ s32 func_80041DB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
* SurfaceType Is Wall Flag (1 << 0) Set
*/
s32 func_80041DE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return (func_80041DB8(colCtx, poly, bgId) & 1) ? true : false;
+ return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_0) ? true : false;
}
/**
* SurfaceType Is Wall Flag (1 << 1) Set
*/
s32 func_80041E18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return (func_80041DB8(colCtx, poly, bgId) & 2) ? true : false;
+ return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_LADDER) ? true : false;
}
/**
* SurfaceType Is Wall Flag (1 << 2) Set
*/
s32 func_80041E4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
- return (func_80041DB8(colCtx, poly, bgId) & 4) ? true : false;
+ return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_LADDER_TOP) ? true : false;
}
/**
@@ -4085,7 +4092,7 @@ u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId)
}
/**
- * SurfaceType get terrain slope surface
+ * SurfaceType get terrain slope surface or transition
*/
u32 SurfaceType_GetFloorEffect(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) {
return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 4 & 3;
diff --git a/soh/src/code/z_camera.c b/soh/src/code/z_camera.c
index e2886629e..663b4602d 100644
--- a/soh/src/code/z_camera.c
+++ b/soh/src/code/z_camera.c
@@ -7864,7 +7864,7 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 flags) {
break;
case CAM_MODE_TARGET:
case CAM_MODE_TALK:
- case CAM_MODE_BOWARROWZ:
+ case CAM_MODE_Z_AIM:
case CAM_MODE_HANGZ:
case CAM_MODE_PUSHPULL:
modeChangeFlags = 2;
@@ -7898,7 +7898,7 @@ s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 flags) {
}
modeChangeFlags |= 1;
break;
- case CAM_MODE_BOWARROWZ:
+ case CAM_MODE_Z_AIM:
case CAM_MODE_HANGZ:
case CAM_MODE_PUSHPULL:
modeChangeFlags |= 1;
diff --git a/soh/src/code/z_eff_blure.c b/soh/src/code/z_eff_blure.c
index f63f8a80c..28534cb6b 100644
--- a/soh/src/code/z_eff_blure.c
+++ b/soh/src/code/z_eff_blure.c
@@ -72,7 +72,7 @@ void EffectBlure_AddVertex(EffectBlure* this, Vec3f* p1, Vec3f* p2) {
}
}
-// dumb doo doo command to change the type of an object's blur on the fly. Link's Swords with unique trail colors.
+// SoH: dumb doo doo command to change the type of a weapon's blur on the fly. Link's Swords with unique trail colors.
void EffectBlure_ChangeType(EffectBlure* this, int type) {
this->trailType = type;
}
@@ -434,9 +434,9 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3
switch (this->calcMode) {
case 1:
- vec1->x = func_80027E34(elem->p1.x, elem->p2.x, ratio);
- vec1->y = func_80027E34(elem->p1.y, elem->p2.y, ratio);
- vec1->z = func_80027E34(elem->p1.z, elem->p2.z, ratio);
+ vec1->x = EffectSs_LerpS16(elem->p1.x, elem->p2.x, ratio);
+ vec1->y = EffectSs_LerpS16(elem->p1.y, elem->p2.y, ratio);
+ vec1->z = EffectSs_LerpS16(elem->p1.z, elem->p2.z, ratio);
vec2->x = elem->p2.x;
vec2->y = elem->p2.y;
vec2->z = elem->p2.z;
@@ -446,19 +446,19 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3
vec1->x = elem->p1.x;
vec1->y = elem->p1.y;
vec1->z = elem->p1.z;
- vec2->x = func_80027E34(elem->p2.x, elem->p1.x, ratio);
- vec2->y = func_80027E34(elem->p2.y, elem->p1.y, ratio);
- vec2->z = func_80027E34(elem->p2.z, elem->p1.z, ratio);
+ vec2->x = EffectSs_LerpS16(elem->p2.x, elem->p1.x, ratio);
+ vec2->y = EffectSs_LerpS16(elem->p2.y, elem->p1.y, ratio);
+ vec2->z = EffectSs_LerpS16(elem->p2.z, elem->p1.z, ratio);
break;
case 3:
ratio *= 0.5f;
- vec1->x = func_80027E34(elem->p1.x, elem->p2.x, ratio);
- vec1->y = func_80027E34(elem->p1.y, elem->p2.y, ratio);
- vec1->z = func_80027E34(elem->p1.z, elem->p2.z, ratio);
- vec2->x = func_80027E34(elem->p2.x, elem->p1.x, ratio);
- vec2->y = func_80027E34(elem->p2.y, elem->p1.y, ratio);
- vec2->z = func_80027E34(elem->p2.z, elem->p1.z, ratio);
+ vec1->x = EffectSs_LerpS16(elem->p1.x, elem->p2.x, ratio);
+ vec1->y = EffectSs_LerpS16(elem->p1.y, elem->p2.y, ratio);
+ vec1->z = EffectSs_LerpS16(elem->p1.z, elem->p2.z, ratio);
+ vec2->x = EffectSs_LerpS16(elem->p2.x, elem->p1.x, ratio);
+ vec2->y = EffectSs_LerpS16(elem->p2.y, elem->p1.y, ratio);
+ vec2->z = EffectSs_LerpS16(elem->p2.z, elem->p1.z, ratio);
ratio *= 2.0f;
break;
@@ -494,14 +494,14 @@ void EffectBlure_GetComputedValues(EffectBlure* this, s32 index, f32 ratio, Vec3
color1->r = color1->g = color1->b = color1->a = 255;
color2->r = color2->g = color2->b = color2->a = 255;
} else {
- color1->r = func_80027E84(this->p1StartColor.r, this->p1EndColor.r, ratio);
- color1->g = func_80027E84(this->p1StartColor.g, this->p1EndColor.g, ratio);
- color1->b = func_80027E84(this->p1StartColor.b, this->p1EndColor.b, ratio);
- color1->a = func_80027E84(this->p1StartColor.a, this->p1EndColor.a, ratio);
- color2->r = func_80027E84(this->p2StartColor.r, this->p2EndColor.r, ratio);
- color2->g = func_80027E84(this->p2StartColor.g, this->p2EndColor.g, ratio);
- color2->b = func_80027E84(this->p2StartColor.b, this->p2EndColor.b, ratio);
- color2->a = func_80027E84(this->p2StartColor.a, this->p2EndColor.a, ratio);
+ color1->r = EffectSs_LerpU8(this->p1StartColor.r, this->p1EndColor.r, ratio);
+ color1->g = EffectSs_LerpU8(this->p1StartColor.g, this->p1EndColor.g, ratio);
+ color1->b = EffectSs_LerpU8(this->p1StartColor.b, this->p1EndColor.b, ratio);
+ color1->a = EffectSs_LerpU8(this->p1StartColor.a, this->p1EndColor.a, ratio);
+ color2->r = EffectSs_LerpU8(this->p2StartColor.r, this->p2EndColor.r, ratio);
+ color2->g = EffectSs_LerpU8(this->p2StartColor.g, this->p2EndColor.g, ratio);
+ color2->b = EffectSs_LerpU8(this->p2StartColor.b, this->p2EndColor.b, ratio);
+ color2->a = EffectSs_LerpU8(this->p2StartColor.a, this->p2EndColor.a, ratio);
}
}
@@ -752,18 +752,18 @@ void EffectBlure_DrawElemHermiteInterpolation(EffectBlure* this, EffectBlureElem
vtx[j1].v.ob[0] = Math_FNearbyIntF(sp158.x);
vtx[j1].v.ob[1] = Math_FNearbyIntF(sp158.y);
vtx[j1].v.ob[2] = Math_FNearbyIntF(sp158.z);
- vtx[j1].v.cn[0] = func_80027E84(sp1A4.r, sp19C.r, temp_f28);
- vtx[j1].v.cn[1] = func_80027E84(sp1A4.g, sp19C.g, temp_f28);
- vtx[j1].v.cn[2] = func_80027E84(sp1A4.b, sp19C.b, temp_f28);
- vtx[j1].v.cn[3] = func_80027E84(sp1A4.a, sp19C.a, temp_f28);
+ vtx[j1].v.cn[0] = EffectSs_LerpU8(sp1A4.r, sp19C.r, temp_f28);
+ vtx[j1].v.cn[1] = EffectSs_LerpU8(sp1A4.g, sp19C.g, temp_f28);
+ vtx[j1].v.cn[2] = EffectSs_LerpU8(sp1A4.b, sp19C.b, temp_f28);
+ vtx[j1].v.cn[3] = EffectSs_LerpU8(sp1A4.a, sp19C.a, temp_f28);
vtx[j2].v.ob[0] = Math_FNearbyIntF(sp14C.x);
vtx[j2].v.ob[1] = Math_FNearbyIntF(sp14C.y);
vtx[j2].v.ob[2] = Math_FNearbyIntF(sp14C.z);
- vtx[j2].v.cn[0] = func_80027E84(sp1A0.r, sp198.r, temp_f28);
- vtx[j2].v.cn[1] = func_80027E84(sp1A0.g, sp198.g, temp_f28);
- vtx[j2].v.cn[2] = func_80027E84(sp1A0.b, sp198.b, temp_f28);
- vtx[j2].v.cn[3] = func_80027E84(sp1A0.a, sp198.a, temp_f28);
+ vtx[j2].v.cn[0] = EffectSs_LerpU8(sp1A0.r, sp198.r, temp_f28);
+ vtx[j2].v.cn[1] = EffectSs_LerpU8(sp1A0.g, sp198.g, temp_f28);
+ vtx[j2].v.cn[2] = EffectSs_LerpU8(sp1A0.b, sp198.b, temp_f28);
+ vtx[j2].v.cn[3] = EffectSs_LerpU8(sp1A0.a, sp198.a, temp_f28);
}
gSPVertex(POLY_XLU_DISP++, vtx, 16, 0);
@@ -1097,9 +1097,9 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) {
switch (this->calcMode) {
case 1:
- vtx[j].v.ob[0] = func_80027E34(elem->p1.x, elem->p2.x, ratio);
- vtx[j].v.ob[1] = func_80027E34(elem->p1.y, elem->p2.y, ratio);
- vtx[j].v.ob[2] = func_80027E34(elem->p1.z, elem->p2.z, ratio);
+ vtx[j].v.ob[0] = EffectSs_LerpS16(elem->p1.x, elem->p2.x, ratio);
+ vtx[j].v.ob[1] = EffectSs_LerpS16(elem->p1.y, elem->p2.y, ratio);
+ vtx[j].v.ob[2] = EffectSs_LerpS16(elem->p1.z, elem->p2.z, ratio);
vtx[j + 1].v.ob[0] = elem->p2.x;
vtx[j + 1].v.ob[1] = elem->p2.y;
vtx[j + 1].v.ob[2] = elem->p2.z;
@@ -1108,18 +1108,18 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) {
vtx[j].v.ob[0] = elem->p1.x;
vtx[j].v.ob[1] = elem->p1.y;
vtx[j].v.ob[2] = elem->p1.z;
- vtx[j + 1].v.ob[0] = func_80027E34(elem->p2.x, elem->p1.x, ratio);
- vtx[j + 1].v.ob[1] = func_80027E34(elem->p2.y, elem->p1.y, ratio);
- vtx[j + 1].v.ob[2] = func_80027E34(elem->p2.z, elem->p1.z, ratio);
+ vtx[j + 1].v.ob[0] = EffectSs_LerpS16(elem->p2.x, elem->p1.x, ratio);
+ vtx[j + 1].v.ob[1] = EffectSs_LerpS16(elem->p2.y, elem->p1.y, ratio);
+ vtx[j + 1].v.ob[2] = EffectSs_LerpS16(elem->p2.z, elem->p1.z, ratio);
break;
case 3:
ratio = ratio * 0.5f;
- vtx[j].v.ob[0] = func_80027E34(elem->p1.x, elem->p2.x, ratio);
- vtx[j].v.ob[1] = func_80027E34(elem->p1.y, elem->p2.y, ratio);
- vtx[j].v.ob[2] = func_80027E34(elem->p1.z, elem->p2.z, ratio);
- vtx[j + 1].v.ob[0] = func_80027E34(elem->p2.x, elem->p1.x, ratio);
- vtx[j + 1].v.ob[1] = func_80027E34(elem->p2.y, elem->p1.y, ratio);
- vtx[j + 1].v.ob[2] = func_80027E34(elem->p2.z, elem->p1.z, ratio);
+ vtx[j].v.ob[0] = EffectSs_LerpS16(elem->p1.x, elem->p2.x, ratio);
+ vtx[j].v.ob[1] = EffectSs_LerpS16(elem->p1.y, elem->p2.y, ratio);
+ vtx[j].v.ob[2] = EffectSs_LerpS16(elem->p1.z, elem->p2.z, ratio);
+ vtx[j + 1].v.ob[0] = EffectSs_LerpS16(elem->p2.x, elem->p1.x, ratio);
+ vtx[j + 1].v.ob[1] = EffectSs_LerpS16(elem->p2.y, elem->p1.y, ratio);
+ vtx[j + 1].v.ob[2] = EffectSs_LerpS16(elem->p2.z, elem->p1.z, ratio);
ratio = ratio + ratio;
break;
case 0:
@@ -1136,19 +1136,19 @@ void EffectBlure_Draw(void* thisx, GraphicsContext* gfxCtx) {
vtx[j].v.flag = 0;
vtx[j].v.tc[0] = 0;
vtx[j].v.tc[1] = 0;
- vtx[j].v.cn[0] = func_80027E84(this->p1StartColor.r, this->p1EndColor.r, ratio);
- vtx[j].v.cn[1] = func_80027E84(this->p1StartColor.g, this->p1EndColor.g, ratio);
- vtx[j].v.cn[2] = func_80027E84(this->p1StartColor.b, this->p1EndColor.b, ratio);
- vtx[j].v.cn[3] = func_80027E84(this->p1StartColor.a, this->p1EndColor.a, ratio);
+ vtx[j].v.cn[0] = EffectSs_LerpU8(this->p1StartColor.r, this->p1EndColor.r, ratio);
+ vtx[j].v.cn[1] = EffectSs_LerpU8(this->p1StartColor.g, this->p1EndColor.g, ratio);
+ vtx[j].v.cn[2] = EffectSs_LerpU8(this->p1StartColor.b, this->p1EndColor.b, ratio);
+ vtx[j].v.cn[3] = EffectSs_LerpU8(this->p1StartColor.a, this->p1EndColor.a, ratio);
j++;
vtx[j].v.flag = 0;
vtx[j].v.tc[0] = 0;
vtx[j].v.tc[1] = 0;
- vtx[j].v.cn[0] = func_80027E84(this->p2StartColor.r, this->p2EndColor.r, ratio);
- vtx[j].v.cn[1] = func_80027E84(this->p2StartColor.g, this->p2EndColor.g, ratio);
- vtx[j].v.cn[2] = func_80027E84(this->p2StartColor.b, this->p2EndColor.b, ratio);
- vtx[j].v.cn[3] = func_80027E84(this->p2StartColor.a, this->p2EndColor.a, ratio);
+ vtx[j].v.cn[0] = EffectSs_LerpU8(this->p2StartColor.r, this->p2EndColor.r, ratio);
+ vtx[j].v.cn[1] = EffectSs_LerpU8(this->p2StartColor.g, this->p2EndColor.g, ratio);
+ vtx[j].v.cn[2] = EffectSs_LerpU8(this->p2StartColor.b, this->p2EndColor.b, ratio);
+ vtx[j].v.cn[3] = EffectSs_LerpU8(this->p2StartColor.a, this->p2EndColor.a, ratio);
j++;
}
}
diff --git a/soh/src/code/z_effect_soft_sprite.c b/soh/src/code/z_effect_soft_sprite.c
index 06263304c..ee3882f8e 100644
--- a/soh/src/code/z_effect_soft_sprite.c
+++ b/soh/src/code/z_effect_soft_sprite.c
@@ -330,16 +330,25 @@ void EffectSs_DrawAll(PlayState* play) {
}
}
-s16 func_80027DD4(s16 arg0, s16 arg1, s32 arg2) {
- s16 ret = (arg2 == 0) ? arg1 : (arg0 + (s32)((arg1 - arg0) / (f32)arg2));
+/**
+ * Lerp from `a` (weightInv == inf) to `b` (weightInv == 1 or 0).
+ */
+s16 EffectSs_LerpInv(s16 a, s16 b, s32 weightInv) {
+ s16 ret = (weightInv == 0) ? b : (a + (s32)((b - a) / (f32)weightInv));
return ret;
}
-s16 func_80027E34(s16 arg0, s16 arg1, f32 arg2) {
- return (arg1 - arg0) * arg2 + arg0;
+/**
+ * Lerp from `a` (weight == 0) to `b` (weight == 1).
+ */
+s16 EffectSs_LerpS16(s16 a, s16 b, f32 weight) {
+ return (b - a) * weight + a;
}
-u8 func_80027E84(u8 arg0, u8 arg1, f32 arg2) {
- return arg2 * ((f32)arg1 - (f32)arg0) + arg0;
+/**
+ * Lerp from `a` (weight == 0) to `b` (weight == 1).
+ */
+u8 EffectSs_LerpU8(u8 a, u8 b, f32 weight) {
+ return weight * ((f32)b - (f32)a) + a;
}
diff --git a/soh/src/code/z_onepointdemo.c b/soh/src/code/z_onepointdemo.c
index 3b3f87fc8..c036f7652 100644
--- a/soh/src/code/z_onepointdemo.c
+++ b/soh/src/code/z_onepointdemo.c
@@ -1184,116 +1184,116 @@ s32 OnePointCutscene_RemoveCamera(PlayState* play, s16 camIdx) {
return nextCamIdx;
}
-#define vChildCamIdx temp2
-#define vCsStatus temp1
-#define vCurCamIdx temp2
-#define vNextCamIdx temp1
+#define vChildCamId temp2
+#define vSubCamStatus temp1
+#define vCurCamId temp2
+#define vNextCamId temp1
/**
* Creates a cutscene subcamera with the specified ID, duration, and targeted actor. The camera is placed into the
* cutscene queue in front of the specified camera, then all lower priority demos in front of it are removed from the
* queue.
*/
-s16 OnePointCutscene_Init(PlayState* play, s16 csId, s16 timer, Actor* actor, s16 parentCamIdx) {
+s16 OnePointCutscene_Init(PlayState* play, s16 csId, s16 timer, Actor* actor, s16 parentCamId) {
+ Camera* subCam;
+ s16 subCamId;
s16 temp1;
s16 temp2;
- s16 csCamIdx;
- Camera* csCam;
if (actor != NULL && actor->id != ACTOR_PLAYER) {
if (!GameInteractor_Should(VB_PLAY_ONEPOINT_ACTOR_CS, true, actor)) {
- return SUBCAM_NONE;
+ return CAM_ID_NONE;
}
} else {
if (!GameInteractor_Should(VB_PLAY_ONEPOINT_CS, true, &csId)) {
- return SUBCAM_NONE;
+ return CAM_ID_NONE;
}
}
- if (parentCamIdx == SUBCAM_ACTIVE) {
- parentCamIdx = play->activeCamera;
+ if (parentCamId == CAM_ID_NONE) {
+ parentCamId = play->activeCamera;
}
- csCamIdx = Play_CreateSubCamera(play);
- if (csCamIdx == SUBCAM_NONE) {
+ subCamId = Play_CreateSubCamera(play);
+ if (subCamId == CAM_ID_NONE) {
osSyncPrintf(VT_COL(RED, WHITE) "onepoint demo: error: too many cameras ... give up! type=%d\n" VT_RST, csId);
- return SUBCAM_NONE;
+ return CAM_ID_NONE;
}
// Inserts the cutscene camera into the cutscene queue in front of parentCam
- vChildCamIdx = play->cameraPtrs[parentCamIdx]->childCamIdx;
- vCsStatus = CAM_STAT_ACTIVE;
- if (vChildCamIdx >= CAM_ID_SUB_FIRST) {
- OnePointCutscene_SetAsChild(play, vChildCamIdx, csCamIdx);
- vCsStatus = CAM_STAT_WAIT;
+ vChildCamId = play->cameraPtrs[parentCamId]->childCamIdx;
+ vSubCamStatus = CAM_STAT_ACTIVE;
+ if (vChildCamId >= CAM_ID_SUB_FIRST) {
+ OnePointCutscene_SetAsChild(play, vChildCamId, subCamId);
+ vSubCamStatus = CAM_STAT_WAIT;
} else {
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
}
- OnePointCutscene_SetAsChild(play, csCamIdx, parentCamIdx);
+ OnePointCutscene_SetAsChild(play, subCamId, parentCamId);
- csCam = play->cameraPtrs[csCamIdx];
+ subCam = play->cameraPtrs[subCamId];
- csCam->timer = timer;
- csCam->target = actor;
+ subCam->timer = timer;
+ subCam->target = actor;
- csCam->at = play->view.lookAt;
- csCam->eye = play->view.eye;
- csCam->fov = play->view.fovy;
+ subCam->at = play->view.lookAt;
+ subCam->eye = play->view.eye;
+ subCam->fov = play->view.fovy;
- csCam->csId = csId;
+ subCam->csId = csId;
- if (parentCamIdx == CAM_ID_MAIN) {
- Play_ChangeCameraStatus(play, parentCamIdx, CAM_STAT_UNK3);
+ if (parentCamId == CAM_ID_MAIN) {
+ Play_ChangeCameraStatus(play, parentCamId, CAM_STAT_UNK3);
} else {
- Play_ChangeCameraStatus(play, parentCamIdx, CAM_STAT_WAIT);
+ Play_ChangeCameraStatus(play, parentCamId, CAM_STAT_WAIT);
}
- OnePointCutscene_SetInfo(play, csCamIdx, csId, actor, timer);
- Play_ChangeCameraStatus(play, csCamIdx, vCsStatus);
+ OnePointCutscene_SetInfo(play, subCamId, csId, actor, timer);
+ Play_ChangeCameraStatus(play, subCamId, vSubCamStatus);
// Removes all lower priority cutscenes in front of this cutscene from the queue.
- vCurCamIdx = csCamIdx;
- vNextCamIdx = play->cameraPtrs[csCamIdx]->childCamIdx;
+ vCurCamId = subCamId;
+ vNextCamId = play->cameraPtrs[subCamId]->childCamIdx;
- while (vNextCamIdx >= CAM_ID_SUB_FIRST) {
- s16 nextCsId = play->cameraPtrs[vNextCamIdx]->csId;
- s16 thisCsId = play->cameraPtrs[csCamIdx]->csId;
+ while (vNextCamId >= CAM_ID_SUB_FIRST) {
+ s16 nextCsId = play->cameraPtrs[vNextCamId]->csId;
+ s16 thisCsId = play->cameraPtrs[subCamId]->csId;
if ((nextCsId / 100) < (thisCsId / 100)) {
osSyncPrintf(VT_COL(YELLOW, BLACK) "onepointdemo camera[%d]: killed 'coz low priority (%d < %d)\n" VT_RST,
- vNextCamIdx, nextCsId, thisCsId);
- if (play->cameraPtrs[vNextCamIdx]->csId != 5010) {
- if ((vNextCamIdx = OnePointCutscene_RemoveCamera(play, vNextCamIdx)) != SUBCAM_NONE) {
- Play_ChangeCameraStatus(play, vNextCamIdx, CAM_STAT_ACTIVE);
+ vNextCamId, nextCsId, thisCsId);
+ if (play->cameraPtrs[vNextCamId]->csId != 5010) {
+ if ((vNextCamId = OnePointCutscene_RemoveCamera(play, vNextCamId)) != CAM_ID_NONE) {
+ Play_ChangeCameraStatus(play, vNextCamId, CAM_STAT_ACTIVE);
}
} else {
- vCurCamIdx = vNextCamIdx;
- OnePointCutscene_EndCutscene(play, vNextCamIdx);
+ vCurCamId = vNextCamId;
+ OnePointCutscene_EndCutscene(play, vNextCamId);
}
} else {
- vCurCamIdx = vNextCamIdx;
+ vCurCamId = vNextCamId;
}
- vNextCamIdx = play->cameraPtrs[vCurCamIdx]->childCamIdx;
+ vNextCamId = play->cameraPtrs[vCurCamId]->childCamIdx;
}
- return csCamIdx;
+ return subCamId;
}
/**
- * Ends the cutscene in camIdx by setting its timer to 0. For attention cutscenes, it is set to 5 instead.
+ * Ends the cutscene in subCamId by setting its timer to 0. For attention cutscenes, it is set to 5 instead.
*/
-s16 OnePointCutscene_EndCutscene(PlayState* play, s16 camIdx) {
- if (camIdx == SUBCAM_ACTIVE) {
- camIdx = play->activeCamera;
+s16 OnePointCutscene_EndCutscene(PlayState* play, s16 subCamId) {
+ if (subCamId == CAM_ID_NONE) {
+ subCamId = play->activeCamera;
}
- if (play->cameraPtrs[camIdx] != NULL) {
- osSyncPrintf("onepointdemo camera[%d]: delete timer=%d next=%d\n", camIdx, play->cameraPtrs[camIdx]->timer,
- play->cameraPtrs[camIdx]->parentCamIdx);
- if (play->cameraPtrs[camIdx]->csId == 5010) {
- play->cameraPtrs[camIdx]->timer = 5;
+ if (play->cameraPtrs[subCamId] != NULL) {
+ osSyncPrintf("onepointdemo camera[%d]: delete timer=%d next=%d\n", subCamId, play->cameraPtrs[subCamId]->timer,
+ play->cameraPtrs[subCamId]->parentCamIdx);
+ if (play->cameraPtrs[subCamId]->csId == 5010) {
+ play->cameraPtrs[subCamId]->timer = 5;
} else {
- play->cameraPtrs[camIdx]->timer = 0;
+ play->cameraPtrs[subCamId]->timer = 0;
}
}
- return camIdx;
+ return subCamId;
}
#define vTargetCat temp1
diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c
index 36fec39b9..fe2f783f0 100644
--- a/soh/src/code/z_player_lib.c
+++ b/soh/src/code/z_player_lib.c
@@ -495,7 +495,7 @@ void Player_SetBootData(PlayState* play, Player* this) {
}
}
-// Custom method used to determine if we're using a custom model for link
+// SoH: Custom method used to determine if we're using a custom model for link
uint8_t Player_IsCustomLinkModel() {
return (LINK_IS_ADULT && ResourceGetIsCustomByName(gLinkAdultSkel)) ||
(LINK_IS_CHILD && ResourceGetIsCustomByName(gLinkChildSkel));
@@ -529,8 +529,8 @@ s32 Player_IsChildWithHylianShield(Player* this) {
return gSaveContext.linkAge != 0 && (this->currentShield == PLAYER_SHIELD_HYLIAN);
}
-s32 Player_ActionToModelGroup(Player* this, s32 actionParam) {
- s32 modelGroup = sActionModelGroups[actionParam];
+s32 Player_ActionToModelGroup(Player* this, s32 itemAction) {
+ s32 modelGroup = sActionModelGroups[itemAction];
if ((modelGroup == PLAYER_MODELGROUP_SWORD_AND_SHIELD) && Player_IsChildWithHylianShield(this)) {
// child, using kokiri sword with hylian shield equipped
@@ -686,16 +686,16 @@ void Player_SetEquipmentData(PlayState* play, Player* this) {
}
}
-void Player_UpdateBottleHeld(PlayState* play, Player* this, s32 item, s32 actionParam) {
+void Player_UpdateBottleHeld(PlayState* play, Player* this, s32 item, s32 itemAction) {
Inventory_UpdateBottleItem(play, item, this->heldItemButton);
if (item != ITEM_BOTTLE) {
this->heldItemId = item;
- this->heldItemAction = actionParam;
+ this->heldItemAction = itemAction;
}
if (GameInteractor_Should(VB_PLAYER_UPDATE_BOTTLE_HELD, true, this)) {
- this->itemAction = actionParam;
+ this->itemAction = itemAction;
}
}
@@ -817,8 +817,8 @@ s32 Player_HasMirrorShieldSetToDraw(PlayState* play) {
return (this->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) && (this->currentShield == PLAYER_SHIELD_MIRROR);
}
-s32 Player_ActionToMagicSpell(Player* this, s32 actionParam) {
- s32 magicSpell = actionParam - PLAYER_IA_MAGIC_SPELL_15;
+s32 Player_ActionToMagicSpell(Player* this, s32 itemAction) {
+ s32 magicSpell = itemAction - PLAYER_IA_MAGIC_SPELL_15;
if ((magicSpell >= 0) && (magicSpell < 6)) {
return magicSpell;
@@ -831,6 +831,7 @@ s32 Player_HoldsHookshot(Player* this) {
return (this->heldItemAction == PLAYER_IA_HOOKSHOT) || (this->heldItemAction == PLAYER_IA_LONGSHOT);
}
+// SoH
s32 Player_HoldsBow(Player* this) {
switch (this->heldItemAction) {
case PLAYER_IA_BOW:
@@ -843,6 +844,7 @@ s32 Player_HoldsBow(Player* this) {
}
}
+// SoH
s32 Player_HoldsSlingshot(Player* this) {
return this->heldItemAction == PLAYER_IA_SLINGSHOT;
}
@@ -851,8 +853,8 @@ s32 func_8008F128(Player* this) {
return Player_HoldsHookshot(this) && (this->heldActor == NULL);
}
-s32 Player_ActionToMeleeWeapon(s32 actionParam) {
- s32 sword = actionParam - PLAYER_IA_FISHING_POLE;
+s32 Player_ActionToMeleeWeapon(s32 itemAction) {
+ s32 sword = itemAction - PLAYER_IA_FISHING_POLE;
if ((sword > 0) && (sword < 6)) {
return sword;
@@ -867,9 +869,9 @@ s32 Player_GetMeleeWeaponHeld(Player* this) {
s32 Player_HoldsTwoHandedWeapon(Player* this) {
if ((this->heldItemAction >= PLAYER_IA_SWORD_BIGGORON) && (this->heldItemAction <= PLAYER_IA_HAMMER)) {
- return 1;
+ return true;
} else {
- return 0;
+ return false;
}
}
@@ -877,8 +879,8 @@ s32 Player_HoldsBrokenKnife(Player* this) {
return (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && (gSaveContext.swordHealth <= 0.0f);
}
-s32 Player_ActionToBottle(Player* this, s32 actionParam) {
- s32 bottle = actionParam - PLAYER_IA_BOTTLE;
+s32 Player_ActionToBottle(Player* this, s32 itemAction) {
+ s32 bottle = itemAction - PLAYER_IA_BOTTLE;
if ((bottle >= 0) && (bottle < 13)) {
return bottle;
@@ -891,8 +893,8 @@ s32 Player_GetBottleHeld(Player* this) {
return Player_ActionToBottle(this, this->heldItemAction);
}
-s32 Player_ActionToExplosive(Player* this, s32 actionParam) {
- s32 explosive = actionParam - PLAYER_IA_BOMB;
+s32 Player_ActionToExplosive(Player* this, s32 itemAction) {
+ s32 explosive = itemAction - PLAYER_IA_BOMB;
if ((explosive >= 0) && (explosive < 2)) {
return explosive;
@@ -905,11 +907,11 @@ s32 Player_GetExplosiveHeld(Player* this) {
return Player_ActionToExplosive(this, this->heldItemAction);
}
-s32 func_8008F2BC(Player* this, s32 actionParam) {
+s32 func_8008F2BC(Player* this, s32 itemAction) {
s32 sword = 0;
- if (actionParam != PLAYER_IA_SWORD_CS) {
- sword = actionParam - PLAYER_IA_SWORD_MASTER;
+ if (itemAction != PLAYER_IA_SWORD_CS) {
+ sword = itemAction - PLAYER_IA_SWORD_MASTER;
if ((sword < 0) || (sword >= 3)) {
goto return_neg;
}
@@ -1731,7 +1733,8 @@ void Player_DrawHookshotReticle(PlayState* play, Player* this, f32 hookshotRange
}
}
-Vec3f D_801260D4 = { 1100.0f, -700.0f, 0.0f };
+// Coordinates of the player focus position, in the head limb's own model space.
+Vec3f sPlayerFocusOffsetFromHead = { 1100.0f, -700.0f, 0.0f };
f32 sMeleeWeaponLengths[] = {
0.0f, 4000.0f, 3000.0f, 5500.0f, 0.0f, 2500.0f,
@@ -1981,7 +1984,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Matrix_Get(&this->shieldMf);
}
} else if (limbIndex == PLAYER_LIMB_HEAD) {
- Matrix_MultVec3f(&D_801260D4, &this->actor.focus.pos);
+ Matrix_MultVec3f(&sPlayerFocusOffsetFromHead, &this->actor.focus.pos);
} else {
Vec3f* vec = &sLeftRightFootLimbModelFootPos[(gSaveContext.linkAge)];
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 ebfd3da93..0ea719071 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
@@ -280,7 +280,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
if (BgCheck_EntityLineTest1(&play->colCtx, &posA, &posB, &posUpDown, &polyUpDown, true, true, true, true,
&bgIdUpDown) &&
- !(func_80041DB8(&play->colCtx, polyUpDown, bgIdUpDown) & 0x30) && // && not crawl space?
+ !(SurfaceType_GetWallFlags(&play->colCtx, polyUpDown, bgIdUpDown) & WALL_FLAG_CRAWLSPACE) &&
!SurfaceType_IsIgnoredByProjectiles(&play->colCtx, polyUpDown, bgIdUpDown)) {
// forwards
posB.x = (this->axisForwards.x * lineLength) + posA.x;
@@ -289,7 +289,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
if (BgCheck_EntityLineTest1(&play->colCtx, &posA, &posB, &posSide, &polySide, true, true, true, true,
&bgIdSide) &&
- !(func_80041DB8(&play->colCtx, polySide, bgIdSide) & 0x30) &&
+ !(SurfaceType_GetWallFlags(&play->colCtx, polySide, bgIdSide) & WALL_FLAG_CRAWLSPACE) &&
!SurfaceType_IsIgnoredByProjectiles(&play->colCtx, polySide, bgIdSide)) {
EnBomChu_UpdateFloorPoly(this, polySide, play);
this->actor.world.pos = posSide;
@@ -328,7 +328,7 @@ void EnBomChu_Move(EnBomChu* this, PlayState* play) {
if (BgCheck_EntityLineTest1(&play->colCtx, &posA, &posB, &posSide, &polySide, true, true, true, true,
&bgIdSide) &&
- !(func_80041DB8(&play->colCtx, polySide, bgIdSide) & 0x30) &&
+ !(SurfaceType_GetWallFlags(&play->colCtx, polySide, bgIdSide) & WALL_FLAG_CRAWLSPACE) &&
!SurfaceType_IsIgnoredByProjectiles(&play->colCtx, polySide, bgIdSide)) {
EnBomChu_UpdateFloorPoly(this, polySide, play);
this->actor.world.pos = posSide;
diff --git a/soh/src/overlays/actors/ovl_En_In/z_en_in.c b/soh/src/overlays/actors/ovl_En_In/z_en_in.c
index 686218842..5746daf5e 100644
--- a/soh/src/overlays/actors/ovl_En_In/z_en_in.c
+++ b/soh/src/overlays/actors/ovl_En_In/z_en_in.c
@@ -475,7 +475,7 @@ void func_80A79C78(EnIn* this, PlayState* play) {
player->actor.freezeTimer = 10;
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
Letterbox_SetSizeTarget(0x20);
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
}
static s32 D_80A7B998 = 0;
@@ -803,7 +803,7 @@ void func_80A7AA40(EnIn* this, PlayState* play) {
this->unk_1FC = 0;
play->csCtx.frames = 0;
Letterbox_SetSizeTarget(0x20);
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
this->actionFunc = func_80A7ABD4;
}
diff --git a/soh/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/soh/src/overlays/actors/ovl_En_Sw/z_en_sw.c
index 3eacc734d..84be76f0a 100644
--- a/soh/src/overlays/actors/ovl_En_Sw/z_en_sw.c
+++ b/soh/src/overlays/actors/ovl_En_Sw/z_en_sw.c
@@ -125,7 +125,7 @@ CollisionPoly* func_80B0C020(PlayState* play, Vec3f* arg1, Vec3f* arg2, Vec3f* a
return NULL;
}
- if (func_80041DB8(&play->colCtx, sp3C, *arg4) & 0x30) {
+ if (SurfaceType_GetWallFlags(&play->colCtx, sp3C, *arg4) & WALL_FLAG_CRAWLSPACE) {
return NULL;
}
diff --git a/soh/src/overlays/actors/ovl_En_Test/z_en_test.c b/soh/src/overlays/actors/ovl_En_Test/z_en_test.c
index c0ee75d75..e75e9db0b 100644
--- a/soh/src/overlays/actors/ovl_En_Test/z_en_test.c
+++ b/soh/src/overlays/actors/ovl_En_Test/z_en_test.c
@@ -1730,7 +1730,7 @@ void EnTest_Update(Actor* thisx, PlayState* play) {
} else if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) {
floorProperty = func_80041EA4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId);
- if ((floorProperty == 5) || (floorProperty == 0xC) ||
+ if ((floorProperty == FLOOR_PROPERTY_5) || (floorProperty == FLOOR_PROPERTY_12) ||
SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 9) {
Actor_Kill(&this->actor);
GameInteractor_ExecuteOnEnemyDefeat(&this->actor);
diff --git a/soh/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c b/soh/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
index c1a357c5d..8aafae767 100644
--- a/soh/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
+++ b/soh/src/overlays/actors/ovl_En_Zl1/z_en_zl1.c
@@ -185,7 +185,7 @@ void func_80B4B010(EnZl1* this, PlayState* play) {
Play_CameraSetAtEye(play, this->subCamId, &vec1, &vec2);
Play_CameraSetFov(play, this->subCamId, 30.0f);
Letterbox_SetSizeTarget(0x20);
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
player->actor.world.pos = playerPos;
player->actor.speedXZ = 0.0f;
this->unk_1E2 = 0;
diff --git a/soh/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c b/soh/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
index c2d53e812..c8bb6cc82 100644
--- a/soh/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
+++ b/soh/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c
@@ -336,7 +336,7 @@ s32 EnZl4_SetupFromLegendCs(EnZl4* this, PlayState* play) {
EnZl4_SetCsCameraMove(play, 5);
Letterbox_SetSizeTarget(0x20);
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
this->talkTimer2 = 0;
return true;
}
@@ -1147,7 +1147,7 @@ void EnZl4_Cutscene(EnZl4* this, PlayState* play) {
this->mouthExpression = ZL4_MOUTH_SURPRISED;
Audio_PlayFanfare(NA_BGM_APPEAR);
EnZl4_SetCsCameraAngle(play, 0);
- Interface_ChangeHudVisibilityMode(2);
+ Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING_ALT);
Letterbox_SetSizeTarget(0x20);
this->talkState = 0;
this->csState++;
diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c
index db256f6ba..6c35ff249 100644
--- a/soh/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c
@@ -539,7 +539,7 @@ static u32 sConveyorSpeed = 0;
static s16 sIsFloorConveyor = false;
static s16 sConveyorYaw = 0;
static f32 sYDistToFloor = 0.0f;
-static s32 sPrevFloorProperty = 0; // floor property from the previous frame
+static s32 sPrevFloorProperty = FLOOR_PROPERTY_0; // floor property from the previous frame
static s32 sShapeYawToTouchedWall = 0;
static s32 sWorldYawToTouchedWall = 0;
static s16 sFloorShapePitch = 0;
@@ -4943,7 +4943,7 @@ s32 Player_ActionHandler_12(Player* this, PlayState* play) {
return 0;
}
- if ((this->actor.wallBgId != BGCHECK_SCENE) && (sTouchedWallFlags & 0x40)) {
+ if ((this->actor.wallBgId != BGCHECK_SCENE) && (sTouchedWallFlags & WALL_FLAG_GRABBABLE)) {
if (this->ledgeClimbDelayTimer >= 6) {
this->stateFlags2 |= PLAYER_STATE2_DO_ACTION_CLIMB;
if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A)) {
@@ -5118,7 +5118,7 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol
(this->csAction == PLAYER_CSACTION_NONE) && !(this->stateFlags1 & PLAYER_STATE1_LOADING) &&
(((poly != NULL) &&
(exitIndex = SurfaceType_GetSceneExitIndex(&play->colCtx, poly, bgId), exitIndex != 0)) ||
- (func_8083816C(sFloorType) && (this->floorProperty == 12)))) {
+ (func_8083816C(sFloorType) && (this->floorProperty == FLOOR_PROPERTY_12)))) {
sp34 = this->unk_A84 - (s32)this->actor.world.pos.y;
@@ -5161,7 +5161,7 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol
Scene_SetTransitionForNextEntrance(play);
} else {
if (GameInteractor_Should(VB_SET_VOIDOUT_FROM_SURFACE,
- SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == 2,
+ SurfaceType_GetFloorEffect(&play->colCtx, poly, bgId) == FLOOR_EFFECT_2,
play->setupExitList[exitIndex - 1])) {
gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = play->nextEntranceIndex;
if (GameInteractor_Should(VB_TRIGGER_VOIDOUT, true, this)) {
@@ -5221,13 +5221,13 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol
if (play->transitionTrigger == TRANS_TRIGGER_OFF) {
if ((this->actor.world.pos.y < -4000.0f) ||
- (((this->floorProperty == 5) || (this->floorProperty == 12)) &&
+ (((this->floorProperty == FLOOR_PROPERTY_5) || (this->floorProperty == FLOOR_PROPERTY_12)) &&
((sYDistToFloor < 100.0f) || (this->fallDistance > 400.0f) ||
((play->sceneNum != SCENE_SHADOW_TEMPLE) && (this->fallDistance > 200.0f)))) ||
((play->sceneNum == SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) && (this->fallDistance > 320.0f))) {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
- if (this->floorProperty == 5) {
+ if (this->floorProperty == FLOOR_PROPERTY_5) {
Play_TriggerRespawn(play);
} else if (GameInteractor_Should(VB_TRIGGER_VOIDOUT, true, this)) {
Play_TriggerVoidOut(play);
@@ -5237,7 +5237,7 @@ s32 Player_HandleExitsAndVoids(PlayState* play, Player* this, CollisionPoly* pol
} else {
func_80838F5C(play, this);
this->av2.actionVar2 = 9999;
- if (this->floorProperty == 5) {
+ if (this->floorProperty == FLOOR_PROPERTY_5) {
this->av1.actionVar1 = -1;
} else {
this->av1.actionVar1 = 1;
@@ -5723,8 +5723,8 @@ s32 func_8083A6AC(Player* this, PlayState* play) {
sp54 = Math3D_UDistPlaneToPos(nx, ny, nz, sp84->dist, &this->actor.world.pos);
- sp50 = (sPrevFloorProperty == 6);
- if (!sp50 && (func_80041DB8(&play->colCtx, sp84, sp80) & 8)) {
+ sp50 = (sPrevFloorProperty == FLOOR_PROPERTY_6);
+ if (!sp50 && (SurfaceType_GetWallFlags(&play->colCtx, sp84, sp80) & WALL_FLAG_CLIMBABLE)) {
sp50 = 1;
}
@@ -5777,7 +5777,7 @@ void func_8083AA10(Player* this, PlayState* play) {
if (!(this->stateFlags1 & (PLAYER_STATE1_IN_WATER | PLAYER_STATE1_IN_CUTSCENE)) &&
!(this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) {
if (!func_80838FB8(play, this)) {
- if (sPrevFloorProperty == 8) {
+ if (sPrevFloorProperty == FLOOR_PROPERTY_8) {
this->actor.world.pos.x = this->actor.prevPos.x;
this->actor.world.pos.z = this->actor.prevPos.z;
return;
@@ -5786,7 +5786,7 @@ void func_8083AA10(Player* this, PlayState* play) {
if (!(this->stateFlags3 & PLAYER_STATE3_MIDAIR) && !(this->skelAnime.movementFlags & 0x80) &&
(Player_Action_8084411C != this->actionFunc) && (Player_Action_80844A44 != this->actionFunc)) {
- if ((sPrevFloorProperty == 7) || (this->meleeWeaponState != 0)) {
+ if ((sPrevFloorProperty == FLOOR_PROPERTY_7) || (this->meleeWeaponState != 0)) {
Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos);
Player_ZeroSpeedXZ(this);
return;
@@ -5796,7 +5796,7 @@ void func_8083AA10(Player* this, PlayState* play) {
this->actor.velocity.y = 1.0f;
if (GameInteractor_Should(VB_SET_STATIC_PREV_FLOOR_TYPE, true, this)) {
- sPrevFloorProperty = 9;
+ sPrevFloorProperty = FLOOR_PROPERTY_9;
}
return;
}
@@ -5809,11 +5809,12 @@ void func_8083AA10(Player* this, PlayState* play) {
this->floorSfxOffset = this->prevFloorSfxOffset;
if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_LEAVE) &&
- !(this->stateFlags1 & PLAYER_STATE1_IN_WATER) && (sPrevFloorProperty != 6) &&
- (sPrevFloorProperty != 9) && (sYDistToFloor > 20.0f) && (this->meleeWeaponState == 0) &&
- (ABS(sp5C) < 0x2000) && (this->linearVelocity > 3.0f)) {
+ !(this->stateFlags1 & PLAYER_STATE1_IN_WATER) && (sPrevFloorProperty != FLOOR_PROPERTY_6) &&
+ (sPrevFloorProperty != FLOOR_PROPERTY_9) && (sYDistToFloor > 20.0f) &&
+ (this->meleeWeaponState == 0) && (ABS(sp5C) < 0x2000) && (this->linearVelocity > 3.0f)) {
- if ((sPrevFloorProperty == 11) && !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) {
+ if ((sPrevFloorProperty == FLOOR_PROPERTY_11) &&
+ !(this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) {
sp40 = func_808396F4(play, this, &D_8085451C, &sp44, &sp58, &sp54);
sp3C = this->actor.world.pos.y;
@@ -5831,7 +5832,7 @@ void func_8083AA10(Player* this, PlayState* play) {
return;
}
- if ((sPrevFloorProperty == 9) || (sYDistToFloor <= this->ageProperties->unk_34) ||
+ if ((sPrevFloorProperty == FLOOR_PROPERTY_9) || (sYDistToFloor <= this->ageProperties->unk_34) ||
!func_8083A6AC(this, play)) {
Player_AnimPlayLoop(play, this, &gPlayerAnim_link_normal_landing_wait);
return;
@@ -6344,7 +6345,7 @@ s32 Player_ActionHandler_10(Player* this, PlayState* play) {
if (CHECK_BTN_ALL(sControlInput->press.button, BTN_A) &&
(play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_2) && (sFloorType != 7) &&
- (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) != 1)) {
+ (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) != FLOOR_EFFECT_1)) {
controlStickDirection = this->controlStickDirections[this->controlStickDataIndex];
if (controlStickDirection <= PLAYER_STICK_DIR_FORWARD) {
@@ -7221,7 +7222,7 @@ s32 Player_HandleSlopes(PlayState* play, Player* this, CollisionPoly* floorPoly)
s16 velYawToDownwardSlope;
if (!Player_InBlockingCsMode(play, this) && (Player_Action_SlideOnSlope != this->actionFunc) &&
- (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) == 1)) {
+ (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) == FLOOR_EFFECT_1)) {
// Get direction of movement relative to the downward direction of the slope
playerVelYaw = Math_Atan2S(this->actor.velocity.z, this->actor.velocity.x);
Player_GetSlopeDirection(floorPoly, &slopeNormal, &downwardSlopeYaw);
@@ -7496,9 +7497,9 @@ s32 func_8083EC18(Player* this, PlayState* play, u32 wallFlags) {
if (this->yDistToLedge >= 79.0f) {
if (!(this->stateFlags1 & PLAYER_STATE1_IN_WATER) || (this->currentBoots == PLAYER_BOOTS_IRON) ||
(this->actor.yDistToWater < this->ageProperties->unk_2C)) {
- s32 sp8C = (wallFlags & 8) ? 2 : 0;
+ s32 sp8C = (wallFlags & WALL_FLAG_CLIMBABLE) ? 2 : 0;
- if ((sp8C != 0) || (wallFlags & 2) ||
+ if ((sp8C != 0) || (wallFlags & WALL_FLAG_LADDER) ||
func_80041E4C(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId)) {
f32 phi_f20;
CollisionPoly* wallPoly = this->actor.wallPoly;
@@ -7564,7 +7565,7 @@ s32 func_8083EC18(Player* this, PlayState* play, u32 wallFlags) {
this->stateFlags1 |= PLAYER_STATE1_CLIMBING_LADDER;
this->stateFlags1 &= ~PLAYER_STATE1_IN_WATER;
- if ((sp8C != 0) || (wallFlags & 2)) {
+ if ((sp8C != 0) || (wallFlags & WALL_FLAG_LADDER)) {
if ((this->av1.actionVar1 = sp8C) != 0) {
if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) {
anim = &gPlayerAnim_link_normal_Fclimb_startA;
@@ -7610,15 +7611,15 @@ void Player_SetupDismountLadder(Player* this, LinkAnimationHeader* anim, PlaySta
* @return true if Player chooses to enter crawlspace
*/
s32 Player_TryEnteringCrawlspace(Player* this, PlayState* play, u32 interactWallFlags) {
- CollisionPoly* wallPoly;
- Vec3f wallVertices[3];
- f32 xVertex1;
- f32 xVertex2;
- f32 zVertex1;
- f32 zVertex2;
- s32 i;
+ if (!LINK_IS_ADULT && !(this->stateFlags1 & PLAYER_STATE1_IN_WATER) && (interactWallFlags & WALL_FLAG_CRAWLSPACE)) {
+ CollisionPoly* wallPoly;
+ Vec3f wallVertices[3];
+ f32 xVertex1;
+ f32 xVertex2;
+ f32 zVertex1;
+ f32 zVertex2;
+ s32 i;
- if (!LINK_IS_ADULT && !(this->stateFlags1 & PLAYER_STATE1_IN_WATER) && (interactWallFlags & 0x30)) {
if (!GameInteractor_Should(VB_CRAWL, true)) {
return false;
}
@@ -7713,7 +7714,7 @@ s32 func_8083F360(PlayState* play, Player* this, f32 arg1, f32 arg2, f32 arg3, f
this->actor.bgCheckFlags |= 0x200;
this->actor.wallBgId = wallBgId;
- sTouchedWallFlags = func_80041DB8(&play->colCtx, wallPoly, wallBgId);
+ sTouchedWallFlags = SurfaceType_GetWallFlags(&play->colCtx, wallPoly, wallBgId);
wallPolyNormalX = COLPOLY_GET_NORMAL(wallPoly->normal.x);
wallPolyNormalZ = COLPOLY_GET_NORMAL(wallPoly->normal.z);
@@ -7745,7 +7746,8 @@ s32 func_8083F524(PlayState* play, Player* this) {
s32 Player_TryLeavingCrawlspace(Player* this, PlayState* play) {
s16 yawToWall;
- if ((this->linearVelocity != 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && (sTouchedWallFlags & 0x30)) {
+ if ((this->linearVelocity != 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) &&
+ (sTouchedWallFlags & WALL_FLAG_CRAWLSPACE)) {
// The exit wallYaws will always point inward on the crawlline
// Interacting with the exit wall in front will have a yaw diff of 0x8000
@@ -7805,12 +7807,12 @@ s32 Player_ActionHandler_5(Player* this, PlayState* play) {
if (((this->linearVelocity > 0.0f) && func_8083EC18(this, play, sTouchedWallFlags)) ||
Player_TryEnteringCrawlspace(this, play, sTouchedWallFlags)) {
- return 1;
+ return true;
}
if (!func_808332B8(this) &&
((this->linearVelocity == 0.0f) || !(this->stateFlags2 & PLAYER_STATE2_DO_ACTION_CLIMB)) &&
- (sTouchedWallFlags & 0x40) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
+ (sTouchedWallFlags & WALL_FLAG_GRABBABLE) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) &&
(this->yDistToLedge >= 39.0f)) {
this->stateFlags2 |= PLAYER_STATE2_DO_ACTION_GRAB;
@@ -7822,7 +7824,7 @@ s32 Player_ActionHandler_5(Player* this, PlayState* play) {
if (wallPolyActor->actor.id == ACTOR_BG_HEAVY_BLOCK) {
if (Player_GetStrength() < PLAYER_STR_GOLD_G) {
- return 0;
+ return false;
}
Player_SetupWaitForPutAway(play, this, func_8083A0F4);
@@ -7833,7 +7835,7 @@ s32 Player_ActionHandler_5(Player* this, PlayState* play) {
this->yaw = this->actor.wallYaw + 0x8000;
func_80832224(this);
- return 1;
+ return true;
}
this->unk_3C4 = &wallPolyActor->actor;
@@ -7843,12 +7845,12 @@ s32 Player_ActionHandler_5(Player* this, PlayState* play) {
func_8083F72C(this, &gPlayerAnim_link_normal_push_wait, play);
- return 1;
+ return true;
}
}
}
- return 0;
+ return false;
}
s32 func_8083F9D0(PlayState* play, Player* this) {
@@ -7896,7 +7898,7 @@ void func_8083FB7C(Player* this, PlayState* play) {
s32 func_8083FBC0(Player* this, PlayState* play) {
if (!CHECK_BTN_ALL(sControlInput->press.button, BTN_A) &&
(this->actor.bgCheckFlags & BGCHECKFLAG_PLAYER_WALL_INTERACT) &&
- ((sTouchedWallFlags & 8) || (sTouchedWallFlags & 2) ||
+ ((sTouchedWallFlags & WALL_FLAG_CLIMBABLE) || (sTouchedWallFlags & WALL_FLAG_LADDER) ||
func_80041E4C(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId))) {
return false;
}
@@ -11290,7 +11292,7 @@ void Player_ProcessSceneCollision(PlayState* play, Player* this) {
yawDiff = this->actor.shape.rot.y - (s16)(this->actor.wallYaw + 0x8000);
- sTouchedWallFlags = func_80041DB8(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId);
+ sTouchedWallFlags = SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId);
GameInteractor_Should(VB_REVALIDATE_CLIMBED_WALL, true, play, this, &sTouchedWallFlags, &yawDiff);
@@ -11501,7 +11503,7 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
}
} else if (this->stateFlags1 & (PLAYER_STATE1_PARALLEL | PLAYER_STATE1_LOCK_ON_FORCED_TO_RELEASE)) {
if (func_8002DD78(this) || func_808334B4(this)) {
- camMode = CAM_MODE_BOWARROWZ;
+ camMode = CAM_MODE_Z_AIM;
} else if (this->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER) {
camMode = CAM_MODE_CLIMBZ;
} else {
@@ -12185,7 +12187,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
Collider_ResetQuadAT(play, &this->shieldQuad.base);
}
-static Vec3f D_80854838 = { 0.0f, 0.0f, -30.0f };
+static Vec3f sDogSpawnOffset = { 0.0f, 0.0f, -30.0f };
s32 Player_UpdateNoclip(Player* this, PlayState* play);
@@ -12194,8 +12196,7 @@ void Player_Update(Actor* thisx, PlayState* play) {
Player* this = (Player*)thisx;
s32 dogParams;
s32 pad;
- Input sp44;
- Actor* dog;
+ Input input;
if (Player_UpdateNoclip(this, play)) {
if (gSaveContext.dogParams < 0) {
@@ -12204,8 +12205,10 @@ void Player_Update(Actor* thisx, PlayState* play) {
!CVarGetInteger(CVAR_ENHANCEMENT("DogFollowsEverywhere"), 0)) {
gSaveContext.dogParams = 0;
} else {
+ Actor* dog;
+
gSaveContext.dogParams &= 0x7FFF;
- Player_GetRelativePosition(this, &this->actor.world.pos, &D_80854838, &sDogSpawnPos);
+ Player_GetRelativePosition(this, &this->actor.world.pos, &sDogSpawnOffset, &sDogSpawnPos);
dogParams = gSaveContext.dogParams;
dog = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_DOG, sDogSpawnPos.x, sDogSpawnPos.y, sDogSpawnPos.z,
@@ -12226,12 +12229,12 @@ void Player_Update(Actor* thisx, PlayState* play) {
}
if (this->stateFlags1 & (PLAYER_STATE1_INPUT_DISABLED | PLAYER_STATE1_IN_CUTSCENE)) {
- memset(&sp44, 0, sizeof(sp44));
+ memset(&input, 0, sizeof(input));
} else {
- sp44 = play->state.input[0];
+ input = play->state.input[0];
if (this->textboxBtnCooldownTimer != 0) {
- sp44.cur.button &= ~(BTN_A | BTN_B | BTN_CUP);
- sp44.press.button &= ~(BTN_A | BTN_B | BTN_CUP);
+ input.cur.button &= ~(BTN_A | BTN_B | BTN_CUP);
+ input.press.button &= ~(BTN_A | BTN_B | BTN_CUP);
}
}
@@ -12245,7 +12248,7 @@ void Player_Update(Actor* thisx, PlayState* play) {
}
}
- Player_UpdateCommon(this, play, &sp44);
+ Player_UpdateCommon(this, play, &input);
}
MREG(52) = this->actor.world.pos.x;
@@ -12253,6 +12256,8 @@ void Player_Update(Actor* thisx, PlayState* play) {
MREG(54) = this->actor.world.pos.z;
MREG(55) = this->actor.world.rot.y;
+ // SoH: Everything below
+
// Make Link normal size when going through doors and crawlspaces and when climbing ladders.
// Otherwise Link can glitch out, being in unloaded rooms or falling OoB.
if (this->stateFlags1 & PLAYER_STATE1_CLIMBING_LADDER || this->stateFlags1 & PLAYER_STATE1_IN_CUTSCENE ||
@@ -12880,10 +12885,10 @@ s32 func_8084B4D4(PlayState* play, Player* this) {
func_8084B498(this);
this->unk_6AD = 4;
Player_ActionHandler_13(this, play);
- return 1;
+ return true;
}
- return 0;
+ return false;
}
void Player_Action_Talk(Player* this, PlayState* play) {
@@ -14711,7 +14716,7 @@ void Player_Action_SlideOnSlope(Player* this, PlayState* play) {
xzSpeedIncrStep = SQ(xzSpeedTarget) * 0.015f;
xzSpeedDecrStep = slopeNormal.y * 0.01f;
- if (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) != 1) {
+ if (SurfaceType_GetFloorEffect(&play->colCtx, floorPoly, this->actor.floorBgId) != FLOOR_EFFECT_1) {
xzSpeedTarget = 0;
xzSpeedDecrStep = slopeNormal.y * 10.0f;
}
@@ -14909,7 +14914,7 @@ void Player_Action_8084FBF4(Player* this, PlayState* play) {
* With Noclip enabled, another button combination can be pressed to set all "temp clear" flags
* in the current room. To do so hold L and press D-pad left.
*
- * @return true if Noclip is disabled, false if enabled
+ * @return true if Noclip is disabled, false if enabled
*/
s32 Player_UpdateNoclip(Player* this, PlayState* play) {
sControlInput = &play->state.input[0];
@@ -14921,7 +14926,7 @@ s32 Player_UpdateNoclip(Player* this, PlayState* play) {
sNoclipEnabled ^= 1;
if (sNoclipEnabled) {
- Camera_ChangeMode(Play_GetCamera(play, 0), CAM_MODE_BOWARROWZ);
+ Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), CAM_MODE_Z_AIM);
}
}
@@ -16473,7 +16478,7 @@ s32 Player_StartFishing(PlayState* play) {
func_80832564(play, this);
Player_UseItem(play, this, ITEM_FISHING_POLE);
- return 1;
+ return true;
}
s32 func_80852F38(PlayState* play, Player* this) {
@@ -16524,15 +16529,16 @@ s32 Player_InflictDamage(PlayState* play, s32 damage) {
return Player_InflictDamageModified(play, damage, true);
}
+// SoH
s32 Player_InflictDamageModified(PlayState* play, s32 damage, u8 modified) {
Player* this = GET_PLAYER(play);
if (!Player_InBlockingCsMode(play, this) && !func_80837B18_modified(play, this, damage, modified)) {
this->stateFlags2 &= ~PLAYER_STATE2_GRABBED_BY_ENEMY;
- return 1;
+ return true;
}
- return 0;
+ return false;
}
/**
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..0106bde95 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
@@ -176,21 +176,21 @@ void EffectSsBomb2_Update(PlayState* play, u32 index, EffectSs* this) {
if ((this->life < 23) && (this->life > 13)) {
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->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->rPrimColorR = EffectSs_LerpInv(this->rPrimColorR, 255, divisor);
+ this->rPrimColorG = EffectSs_LerpInv(this->rPrimColorG, 255, divisor);
+ this->rPrimColorB = EffectSs_LerpInv(this->rPrimColorB, 150, divisor);
+ this->rPrimColorA = EffectSs_LerpInv(this->rPrimColorA, 255, divisor);
+ this->rEnvColorR = EffectSs_LerpInv(this->rEnvColorR, 150, divisor);
+ this->rEnvColorG = EffectSs_LerpInv(this->rEnvColorG, 0, divisor);
+ this->rEnvColorB = EffectSs_LerpInv(this->rEnvColorB, 0, 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 = EffectSs_LerpInv(this->rPrimColorR, 50, divisor);
+ this->rPrimColorG = EffectSs_LerpInv(this->rPrimColorG, 50, divisor);
+ this->rPrimColorB = EffectSs_LerpInv(this->rPrimColorB, 50, divisor);
+ this->rPrimColorA = EffectSs_LerpInv(this->rPrimColorA, 150, divisor);
+ this->rEnvColorR = EffectSs_LerpInv(this->rEnvColorR, 10, divisor);
+ this->rEnvColorG = EffectSs_LerpInv(this->rEnvColorG, 10, divisor);
+ this->rEnvColorB = EffectSs_LerpInv(this->rEnvColorB, 10, divisor);
}
}
diff --git a/soh/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c b/soh/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
index 86ed36d8a..3c1a4ef18 100644
--- a/soh/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
+++ b/soh/src/overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.c
@@ -112,11 +112,11 @@ void EffectSsHitMark_Update(PlayState* play, u32 index, EffectSs* this) {
if (this->rTexIdx != 0) {
colorIdx = this->rType * 4 + 2;
- this->rPrimColorR = func_80027DD4(this->rPrimColorR, sColors[colorIdx].r, this->life + 1);
- this->rPrimColorG = func_80027DD4(this->rPrimColorG, sColors[colorIdx].g, this->life + 1);
- this->rPrimColorB = func_80027DD4(this->rPrimColorB, sColors[colorIdx].b, this->life + 1);
- this->rEnvColorR = func_80027DD4(this->rEnvColorR, sColors[colorIdx + 1].r, this->life + 1);
- this->rEnvColorG = func_80027DD4(this->rEnvColorG, sColors[colorIdx + 1].g, this->life + 1);
- this->rEnvColorB = func_80027DD4(this->rEnvColorB, sColors[colorIdx + 1].b, this->life + 1);
+ this->rPrimColorR = EffectSs_LerpInv(this->rPrimColorR, sColors[colorIdx].r, this->life + 1);
+ this->rPrimColorG = EffectSs_LerpInv(this->rPrimColorG, sColors[colorIdx].g, this->life + 1);
+ this->rPrimColorB = EffectSs_LerpInv(this->rPrimColorB, sColors[colorIdx].b, this->life + 1);
+ this->rEnvColorR = EffectSs_LerpInv(this->rEnvColorR, sColors[colorIdx + 1].r, this->life + 1);
+ this->rEnvColorG = EffectSs_LerpInv(this->rEnvColorG, sColors[colorIdx + 1].g, this->life + 1);
+ this->rEnvColorB = EffectSs_LerpInv(this->rEnvColorB, sColors[colorIdx + 1].b, this->life + 1);
}
}