From 265ecb9cea00e2d183c5faf5204bf47009645b09 Mon Sep 17 00:00:00 2001 From: briaguya Date: Sat, 28 May 2022 12:57:36 -0400 Subject: [PATCH 1/4] i wonder what's going on here --- soh/soh/Enhancements/randomizer.cpp | 6 +++++- soh/soh/Enhancements/randomizer.h | 3 ++- soh/soh/OTRGlobals.cpp | 9 +++++++-- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 20 ++++++++++++++++++- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/soh/soh/Enhancements/randomizer.cpp b/soh/soh/Enhancements/randomizer.cpp index 213e79d3139..bbeb10a209d 100644 --- a/soh/soh/Enhancements/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer.cpp @@ -553,6 +553,10 @@ GetItemID Randomizer::GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, G return GetItemFromGet(this->itemLocations[GetCheckFromSceneAndParams(sceneNum, actorParams)], ogItemId); } +GetItemID Randomizer::GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ, GetItemID ogItemId) { + return GetItemFromGet(this->itemLocations[GetCheckFromSceneAndParams(sceneNum, actorParams, homePosX, homePosY, homePosZ)], ogItemId); +} + GetItemID Randomizer::GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId) { switch(randoGet) { case UNKNOWN_GET: @@ -769,7 +773,7 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 actorId, GetItemID ogItemId) { return UNKNOWN_CHECK; } -RandomizerCheck Randomizer::GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams) { +RandomizerCheck Randomizer::GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ) { if (!gSaveContext.n64ddFlag) { return UNKNOWN_CHECK; } diff --git a/soh/soh/Enhancements/randomizer.h b/soh/soh/Enhancements/randomizer.h index 07bc65e54a1..4c700074faf 100644 --- a/soh/soh/Enhancements/randomizer.h +++ b/soh/soh/Enhancements/randomizer.h @@ -12,7 +12,7 @@ class Randomizer { std::unordered_map itemLocations; GetItemID GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId); RandomizerCheck GetCheckFromActor(s16 actorId, GetItemID ogItemId); - RandomizerCheck GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams); + RandomizerCheck GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams, f32 homePosX = 0, f32 homePosY = 0, f32 homePosZ = 0); public: Randomizer(); @@ -22,6 +22,7 @@ class Randomizer { void ParseItemLocations(std::string spoilerfilename); GetItemID GetItemFromActor(s16 actorId, GetItemID ogItemId); GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, GetItemID ogItemId); + GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ, GetItemID ogItemId); }; #endif diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index b69985ddb34..c0181d3e5dd 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -997,11 +997,11 @@ extern "C" int Controller_ShouldRumble(size_t i) { } extern "C" void LoadItemLocations() { - return OTRGlobals::Instance->gRandomizer->LoadItemLocations(); + OTRGlobals::Instance->gRandomizer->LoadItemLocations(); } extern "C" void ParseItemLocations(const char* spoilerfilename) { - return OTRGlobals::Instance->gRandomizer->ParseItemLocations(spoilerfilename); + OTRGlobals::Instance->gRandomizer->ParseItemLocations(spoilerfilename); } extern "C" GetItemID GetItemFromActor(s16 actorId, GetItemID ogItemId) { @@ -1010,4 +1010,9 @@ extern "C" GetItemID GetItemFromActor(s16 actorId, GetItemID ogItemId) { extern "C" GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, GetItemID ogItemId) { return OTRGlobals::Instance->gRandomizer->GetItemFromSceneAndParams(sceneNum, actorParams, ogItemId); +} + +extern "C" GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ, GetItemID ogItemId) { + // the position values are broken here + return OTRGlobals::Instance->gRandomizer->GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, homePosX, homePosY, homePosZ, ogItemId); } \ No newline at end of file diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c index 58a92abcdc8..b5be8db027f 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -388,6 +388,21 @@ s32 EnBox_GetRandomizedItemId(s16 actorParams, s16 sceneNum) { return 0 - itemId; } +s32 EnBox_GetRandomizedItemIdTestDefinitelyDeleteThis(s16 actorParams, s16 sceneNum, Vec3f homePos) { + // KF_MIDOS_TOP_LEFT_CHEST + if(actorParams == 22944) { + f32 blargX = homePos.x; + f32 blargY = homePos.y; + f32 blargZ = homePos.z; + // all the position values are fine here + s32 itemId = GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, blargX, blargY, blargZ, actorParams >> 5 & 0x7F); + return 0 - itemId; + } else { + s32 itemId = GetItemFromSceneAndParams(sceneNum, actorParams, actorParams >> 5 & 0x7F); + return 0 - itemId; + } +} + /** * Chest is ready to be open */ @@ -429,8 +444,11 @@ void EnBox_WaitOpen(EnBox* this, GlobalContext* globalCtx) { func_8002DBD0(&this->dyna.actor, &sp4C, &player->actor.world.pos); if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f && Player_IsFacingActor(&this->dyna.actor, 0x3000, globalCtx)) { + // func_8002F554(&this->dyna.actor, globalCtx, + // EnBox_GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum)); func_8002F554(&this->dyna.actor, globalCtx, - EnBox_GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum)); + EnBox_GetRandomizedItemIdTestDefinitelyDeleteThis(this->dyna.actor.params, globalCtx->sceneNum, this->dyna.actor.home.pos)); + } if (Flags_GetTreasure(globalCtx, this->dyna.actor.params & 0x1F)) { EnBox_SetupAction(this, EnBox_Open); From b3d0034ef4569d4e2b6ddd95c2793d4e0d4691c3 Mon Sep 17 00:00:00 2001 From: briaguya Date: Sat, 28 May 2022 14:11:03 -0400 Subject: [PATCH 2/4] use ints instead --- soh/soh/Enhancements/randomizer.cpp | 4 ++-- soh/soh/Enhancements/randomizer.h | 4 ++-- soh/soh/OTRGlobals.cpp | 2 +- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 6 +----- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/soh/soh/Enhancements/randomizer.cpp b/soh/soh/Enhancements/randomizer.cpp index bbeb10a209d..c81916b5eae 100644 --- a/soh/soh/Enhancements/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer.cpp @@ -553,7 +553,7 @@ GetItemID Randomizer::GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, G return GetItemFromGet(this->itemLocations[GetCheckFromSceneAndParams(sceneNum, actorParams)], ogItemId); } -GetItemID Randomizer::GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ, GetItemID ogItemId) { +GetItemID Randomizer::GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, s32 homePosX, s32 homePosY, s32 homePosZ, GetItemID ogItemId) { return GetItemFromGet(this->itemLocations[GetCheckFromSceneAndParams(sceneNum, actorParams, homePosX, homePosY, homePosZ)], ogItemId); } @@ -773,7 +773,7 @@ RandomizerCheck Randomizer::GetCheckFromActor(s16 actorId, GetItemID ogItemId) { return UNKNOWN_CHECK; } -RandomizerCheck Randomizer::GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ) { +RandomizerCheck Randomizer::GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams, s32 homePosX, s32 homePosY, s32 homePosZ) { if (!gSaveContext.n64ddFlag) { return UNKNOWN_CHECK; } diff --git a/soh/soh/Enhancements/randomizer.h b/soh/soh/Enhancements/randomizer.h index 4c700074faf..b7c365c34bc 100644 --- a/soh/soh/Enhancements/randomizer.h +++ b/soh/soh/Enhancements/randomizer.h @@ -12,7 +12,7 @@ class Randomizer { std::unordered_map itemLocations; GetItemID GetItemFromGet(RandomizerGet randoGet, GetItemID ogItemId); RandomizerCheck GetCheckFromActor(s16 actorId, GetItemID ogItemId); - RandomizerCheck GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams, f32 homePosX = 0, f32 homePosY = 0, f32 homePosZ = 0); + RandomizerCheck GetCheckFromSceneAndParams(s16 sceneNum, s16 actorParams, s32 homePosX = 0, s32 homePosY = 0, s32 homePosZ = 0); public: Randomizer(); @@ -22,7 +22,7 @@ class Randomizer { void ParseItemLocations(std::string spoilerfilename); GetItemID GetItemFromActor(s16 actorId, GetItemID ogItemId); GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, GetItemID ogItemId); - GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ, GetItemID ogItemId); + GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, s32 homePosX, s32 homePosY, s32 homePosZ, GetItemID ogItemId); }; #endif diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index c0181d3e5dd..cd6af51fbc1 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1012,7 +1012,7 @@ extern "C" GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, Ge return OTRGlobals::Instance->gRandomizer->GetItemFromSceneAndParams(sceneNum, actorParams, ogItemId); } -extern "C" GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, f32 homePosX, f32 homePosY, f32 homePosZ, GetItemID ogItemId) { +extern "C" GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, s32 homePosX, s32 homePosY, s32 homePosZ, GetItemID ogItemId) { // the position values are broken here return OTRGlobals::Instance->gRandomizer->GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, homePosX, homePosY, homePosZ, ogItemId); } \ No newline at end of file diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c index b5be8db027f..7da8af4ad35 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -391,11 +391,7 @@ s32 EnBox_GetRandomizedItemId(s16 actorParams, s16 sceneNum) { s32 EnBox_GetRandomizedItemIdTestDefinitelyDeleteThis(s16 actorParams, s16 sceneNum, Vec3f homePos) { // KF_MIDOS_TOP_LEFT_CHEST if(actorParams == 22944) { - f32 blargX = homePos.x; - f32 blargY = homePos.y; - f32 blargZ = homePos.z; - // all the position values are fine here - s32 itemId = GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, blargX, blargY, blargZ, actorParams >> 5 & 0x7F); + s32 itemId = GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, (s32)homePos.x, (s32)homePos.y, (s32)homePos.z, actorParams >> 5 & 0x7F); return 0 - itemId; } else { s32 itemId = GetItemFromSceneAndParams(sceneNum, actorParams, actorParams >> 5 & 0x7F); From c987a286e4e9e250b7991caa23e54e023d6a2f90 Mon Sep 17 00:00:00 2001 From: briaguya Date: Sat, 28 May 2022 14:37:49 -0400 Subject: [PATCH 3/4] remove temporary code from testing --- soh/soh/OTRGlobals.cpp | 2 +- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 16 +--------------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index cd6af51fbc1..055891ae599 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1012,7 +1012,7 @@ extern "C" GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, Ge return OTRGlobals::Instance->gRandomizer->GetItemFromSceneAndParams(sceneNum, actorParams, ogItemId); } +// use an explicit (s32) cast on the position values from the Vec3f when calling extern "C" GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, s32 homePosX, s32 homePosY, s32 homePosZ, GetItemID ogItemId) { - // the position values are broken here return OTRGlobals::Instance->gRandomizer->GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, homePosX, homePosY, homePosZ, ogItemId); } \ No newline at end of file diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c index 7da8af4ad35..5bca0367ab2 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -388,17 +388,6 @@ s32 EnBox_GetRandomizedItemId(s16 actorParams, s16 sceneNum) { return 0 - itemId; } -s32 EnBox_GetRandomizedItemIdTestDefinitelyDeleteThis(s16 actorParams, s16 sceneNum, Vec3f homePos) { - // KF_MIDOS_TOP_LEFT_CHEST - if(actorParams == 22944) { - s32 itemId = GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, (s32)homePos.x, (s32)homePos.y, (s32)homePos.z, actorParams >> 5 & 0x7F); - return 0 - itemId; - } else { - s32 itemId = GetItemFromSceneAndParams(sceneNum, actorParams, actorParams >> 5 & 0x7F); - return 0 - itemId; - } -} - /** * Chest is ready to be open */ @@ -440,11 +429,8 @@ void EnBox_WaitOpen(EnBox* this, GlobalContext* globalCtx) { func_8002DBD0(&this->dyna.actor, &sp4C, &player->actor.world.pos); if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f && Player_IsFacingActor(&this->dyna.actor, 0x3000, globalCtx)) { - // func_8002F554(&this->dyna.actor, globalCtx, - // EnBox_GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum)); func_8002F554(&this->dyna.actor, globalCtx, - EnBox_GetRandomizedItemIdTestDefinitelyDeleteThis(this->dyna.actor.params, globalCtx->sceneNum, this->dyna.actor.home.pos)); - + EnBox_GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum)); } if (Flags_GetTreasure(globalCtx, this->dyna.actor.params & 0x1F)) { EnBox_SetupAction(this, EnBox_Open); From 602215f8e3a80fbc628abc04303b5a06d920618c Mon Sep 17 00:00:00 2001 From: briaguya Date: Sat, 28 May 2022 14:40:55 -0400 Subject: [PATCH 4/4] minor whitespace cleanup --- soh/soh/OTRGlobals.cpp | 2 +- soh/src/overlays/actors/ovl_En_Box/z_en_box.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 055891ae599..8e9b8631c73 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1015,4 +1015,4 @@ extern "C" GetItemID GetItemFromSceneAndParams(s16 sceneNum, s16 actorParams, Ge // use an explicit (s32) cast on the position values from the Vec3f when calling extern "C" GetItemID GetItemFromSceneParamsAndHomePos(s16 sceneNum, s16 actorParams, s32 homePosX, s32 homePosY, s32 homePosZ, GetItemID ogItemId) { return OTRGlobals::Instance->gRandomizer->GetItemFromSceneParamsAndHomePos(sceneNum, actorParams, homePosX, homePosY, homePosZ, ogItemId); -} \ No newline at end of file +} diff --git a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c index 5bca0367ab2..58a92abcdc8 100644 --- a/soh/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/soh/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -430,7 +430,7 @@ void EnBox_WaitOpen(EnBox* this, GlobalContext* globalCtx) { if (sp4C.z > -50.0f && sp4C.z < 0.0f && fabsf(sp4C.y) < 10.0f && fabsf(sp4C.x) < 20.0f && Player_IsFacingActor(&this->dyna.actor, 0x3000, globalCtx)) { func_8002F554(&this->dyna.actor, globalCtx, - EnBox_GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum)); + EnBox_GetRandomizedItemId(this->dyna.actor.params, globalCtx->sceneNum)); } if (Flags_GetTreasure(globalCtx, this->dyna.actor.params & 0x1F)) { EnBox_SetupAction(this, EnBox_Open);