Merge remote-tracking branch 'origin/develop' into develop-ackbar

This commit is contained in:
Demur Rumed
2026-06-09 21:59:41 +00:00
682 changed files with 19344 additions and 10950 deletions
+2 -2
View File
@@ -26,7 +26,7 @@ GameState* gGameState;
// Forward declared, because this in a C++ header.
int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height,
uint8_t resize);
uint8_t resize, bool forceFixedAspect);
void gfx_texture_cache_clear();
void GameState_FaultPrint(void) {
@@ -260,7 +260,7 @@ void GameState_Update(GameState* gameState) {
if (gPauseLinkFrameBuffer == -1) {
gPauseLinkFrameBuffer = gfx_create_framebuffer(PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT,
PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT, true);
PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT, true, true);
}
GameState_SetFrameBuffer(gfxCtx);
+1 -1
View File
@@ -1472,7 +1472,7 @@ s32 func_8002DEEC(Player* player) {
}
void func_8002DF18(PlayState* play, Player* player) {
func_8006DC68(play, player);
Horse_InitPlayerHorse(play, player);
}
s32 func_8002DF38(PlayState* play, Actor* actor, u8 csAction) {
+6 -4
View File
@@ -8,6 +8,7 @@
#include "soh/frame_interpolation.h"
#include "soh/Enhancements/controls/Mouse.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
s16 Camera_ChangeSettingFlags(Camera* camera, s16 setting, s16 flags);
s32 Camera_ChangeModeFlags(Camera* camera, s16 mode, u8 flags);
@@ -4542,9 +4543,9 @@ s32 Camera_Subj4(Camera* camera) {
}
anim->unk_28 = temp_f16;
// camera->player->actor.world.pos = *eyeNext;
// camera->player->actor.world.pos.y = camera->playerGroundY;
// camera->player->actor.shape.rot.y = sp64.yaw;
camera->player->actor.world.pos = *eyeNext;
camera->player->actor.world.pos.y = camera->playerGroundY;
camera->player->actor.shape.rot.y = sp64.yaw;
temp_f16 = ((240.0f * temp_f16) * (anim->unk_24 * 0.416667f));
temp_a0 = temp_f16 + anim->unk_30;
at->x = eye->x + (Math_SinS(temp_a0) * 10.0f);
@@ -7363,7 +7364,8 @@ s32 Camera_UpdateWater(Camera* camera) {
s32 Camera_UpdateHotRoom(Camera* camera) {
camera->distortionFlags &= ~DISTORTION_HOT_ROOM;
if (camera->play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3) {
if (GameInteractor_Should(VB_HOT_ROOM_DISTORTION,
camera->play->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3)) {
camera->distortionFlags |= DISTORTION_HOT_ROOM;
}
+1 -5
View File
@@ -3,7 +3,6 @@
#include "objects/gameplay_keep/gameplay_keep.h"
#include "overlays/effects/ovl_Effect_Ss_Dead_Sound/z_eff_ss_dead_sound.h"
#include "textures/icon_item_static/icon_item_static.h"
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/OTRGlobals.h"
@@ -781,11 +780,8 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
}
}
if (this->unk_15A > 0) {
if (GameInteractor_Should(VB_ITEM00_TIMER_TICK, this->unk_15A > 0, this)) {
this->unk_15A--;
if (CVarGetInteger(CVAR_CHEAT("DropsDontDie"), 0) && (this->unk_154 <= 0)) {
this->unk_15A++;
}
}
if ((this->unk_15A > 0) && (this->unk_15A < 41) && (this->unk_154 <= 0)) {
+14 -14
View File
@@ -4,7 +4,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
s32 func_8006CFC0(s32 scene) {
s32 Horse_CanSpawn(s32 scene) {
s32 validScenes[] = { SCENE_HYRULE_FIELD, SCENE_LAKE_HYLIA, SCENE_GERUDO_VALLEY, SCENE_GERUDOS_FORTRESS,
SCENE_LON_LON_RANCH };
s32 i;
@@ -18,7 +18,7 @@ s32 func_8006CFC0(s32 scene) {
return 0;
}
void func_8006D074(PlayState* play) {
void Horse_ResetHorseData(PlayState* play) {
gSaveContext.horseData.scene = SCENE_HYRULE_FIELD;
gSaveContext.horseData.pos.x = -1840;
gSaveContext.horseData.pos.y = 72;
@@ -26,7 +26,7 @@ void func_8006D074(PlayState* play) {
gSaveContext.horseData.angle = -27353;
}
void func_8006D0AC(PlayState* play) {
void Horse_FixLakeHyliaPosition(PlayState* play) {
if (gSaveContext.horseData.scene == SCENE_LAKE_HYLIA) {
gSaveContext.horseData.scene = SCENE_LAKE_HYLIA;
gSaveContext.horseData.pos.x = -2065;
@@ -43,7 +43,7 @@ typedef struct {
/* 0x0A */ s16 type;
} HorseSpawn;
void func_8006D0EC(PlayState* play, Player* player) {
void Horse_SetupInGameplay(PlayState* play, Player* player) {
s32 i;
HorseSpawn horseSpawns[] = {
{ SCENE_HYRULE_FIELD, -460, 100, 6640, 0, 2 }, { SCENE_LAKE_HYLIA, -1929, -1025, 768, 0, 2 },
@@ -87,7 +87,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.scene,
Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
if (func_8006CFC0(gSaveContext.horseData.scene)) {
if (Horse_CanSpawn(gSaveContext.horseData.scene)) {
Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.horseData.pos.x,
gSaveContext.horseData.pos.y, gSaveContext.horseData.pos.z, 0,
gSaveContext.horseData.angle, 0, 1);
@@ -100,7 +100,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
// "Horse_SetNormal():%d set spot is no good."
osSyncPrintf("Horse_SetNormal():%d セットスポットまずいです。\n", gSaveContext.horseData.scene);
osSyncPrintf(VT_RST);
func_8006D074(play);
Horse_ResetHorseData(play);
}
} else if ((play->sceneNum == SCENE_LON_LON_RANCH) && !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) &&
(DREG(1) == 0)) {
@@ -136,7 +136,7 @@ typedef struct {
/* 0x10 */ s16 type;
} struct_8011F9B8;
void func_8006D684(PlayState* play, Player* player) {
void Horse_SetupInCutscene(PlayState* play, Player* player) {
s32 pad;
s32 i;
Vec3s spawnPos;
@@ -247,17 +247,17 @@ void func_8006D684(PlayState* play, Player* player) {
}
}
void func_8006DC68(PlayState* play, Player* player) {
void Horse_InitPlayerHorse(PlayState* play, Player* player) {
if (LINK_IS_ADULT) {
if (!func_8006CFC0(gSaveContext.horseData.scene)) {
if (!Horse_CanSpawn(gSaveContext.horseData.scene)) {
osSyncPrintf(VT_COL(RED, WHITE));
// "Horse_Set_Check():%d set spot is no good."
osSyncPrintf("Horse_Set_Check():%d セットスポットまずいです。\n", gSaveContext.horseData.scene);
osSyncPrintf(VT_RST);
func_8006D074(play);
Horse_ResetHorseData(play);
}
if (func_8006CFC0(play->sceneNum)) {
if (Horse_CanSpawn(play->sceneNum)) {
if ((gSaveContext.sceneSetupIndex > 3) ||
((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11 ||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12 ||
@@ -266,15 +266,15 @@ void func_8006DC68(PlayState* play, Player* player) {
(gSaveContext.respawnFlag == 0)) ||
((play->sceneNum == SCENE_LON_LON_RANCH) && ((gSaveContext.eventInf[0] & 0xF) == 6) &&
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {
func_8006D684(play, player);
Horse_SetupInCutscene(play, player);
} else {
func_8006D0EC(play, player);
Horse_SetupInGameplay(play, player);
}
}
}
}
void func_8006DD9C(Actor* actor, Vec3f* arg1, s16 arg2) {
void Horse_RotateToPoint(Actor* actor, Vec3f* arg1, s16 arg2) {
s16 x = Math_Vec3f_Yaw(&actor->world.pos, arg1) - actor->world.rot.y;
if (x > arg2) {
+5
View File
@@ -7,6 +7,7 @@
#include <assert.h>
#include "soh/OTRGlobals.h"
#include "soh/Enhancements/cosmetics/cosmeticsTypes.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
MapData* gMapData;
@@ -761,6 +762,10 @@ void Minimap_DrawCompassIcons(PlayState* play) {
}
CLOSE_DISPS(play->state.gfxCtx);
if (play->interfaceCtx.minimapAlpha >= 0xAA) {
GameInteractor_ExecuteOnMinimapDrawCompassIcons();
}
}
void Minimap_Draw(PlayState* play) {
+4 -2
View File
@@ -1711,7 +1711,9 @@ void Interface_InitHorsebackArchery(PlayState* play) {
gSaveContext.minigameState = 1;
interfaceCtx->unk_23C = interfaceCtx->unk_240 = interfaceCtx->unk_242 = 0;
gSaveContext.minigameScore = sHBAScoreTier = 0;
interfaceCtx->hbaAmmo = 20;
if (GameInteractor_Should(VB_SET_HORSEBACK_ARCHERY_AMMO, true, interfaceCtx)) {
interfaceCtx->hbaAmmo = 20;
}
}
void func_800849EC(PlayState* play) {
@@ -1910,7 +1912,7 @@ u8 Item_Give(PlayState* play, u8 item) {
osSyncPrintf(VT_RST);
if (item == ITEM_MEDALLION_WATER) {
func_8006D0AC(play);
Horse_FixLakeHyliaPosition(play);
}
return Return_Item(item, MOD_NONE, ITEM_NONE);
+20 -13
View File
@@ -1598,21 +1598,28 @@ void Player_DrawGetItemIceTrap(PlayState* play, Player* this, Vec3f* refPos, s32
} else if (iceTrapScale < 0.8f) {
iceTrapScale += 0.2f;
}
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScrollEx(play->state.gfxCtx, 0, 0, (0 - play->gameplayFrames) % 128, 32, 32, 1, 0,
(play->gameplayFrames * -2) % 128, 32, 32, 0, -1, 0, -2));
Matrix_Translate(0.0f, -40.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(iceTrapScale, iceTrapScale, iceTrapScale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, 255);
gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL);
// Draw the ice only after a bit so it doesn't spoil the fact that it's a trap
if (iceTrapScale >= 0.01) {
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScrollEx(play->state.gfxCtx, 0, 0, (0 - play->gameplayFrames) % 128, 32, 32, 1, 0,
(play->gameplayFrames * -2) % 128, 32, 32, 0, -1, 0, -2));
Matrix_Translate(0.0f, -40.0f, 0.0f, MTXMODE_APPLY);
Matrix_Scale(iceTrapScale, iceTrapScale, iceTrapScale, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 50, 100, 255);
gSPDisplayList(POLY_XLU_DISP++, gEffIceFragment3DL);
// Reset matrix for the fake item model because we're animating the size of the ice block around it before
// this.
Matrix_Translate(refPos->x + (3.3f * Math_SinS(this->actor.shape.rot.y)), refPos->y + height,
refPos->z + ((3.3f + (IREG(90) / 10.0f)) * Math_CosS(this->actor.shape.rot.y)),
MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
}
// Reset matrix for the fake item model because we're animating the size of the ice block around it before this.
Matrix_Translate(refPos->x + (3.3f * Math_SinS(this->actor.shape.rot.y)), refPos->y + height,
refPos->z + ((3.3f + (IREG(90) / 10.0f)) * Math_CosS(this->actor.shape.rot.y)), MTXMODE_NEW);
Matrix_RotateZYX(0, play->gameplayFrames * 1000, 0, MTXMODE_APPLY);
Matrix_Scale(0.2f, 0.2f, 0.2f, MTXMODE_APPLY);
// Draw fake item model.
if (this->getItemEntry.drawFunc != NULL) {
this->getItemEntry.drawFunc(play, &this->getItemEntry);
+4
View File
@@ -902,6 +902,10 @@ void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animati
if (frame < 0) {
frame = 0;
}
// SOH [Alt Assets] Check if animData is null (can happen if animation data segment failed to load)
if (animData == NULL) {
return;
}
memcpy(ram, (uintptr_t)animData + (((sizeof(Vec3s) * limbCount + 2) * frame)), sizeof(Vec3s) * limbCount + 2);
}
}