From 0da8b4c6dc642f6011051073edd4b21ede3ee25a Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Thu, 23 Apr 2026 06:37:00 -0700 Subject: [PATCH] implement agitha rewards --- include/d/actor/d_a_npc_ins.h | 5 +- src/d/actor/d_a_npc_ins.cpp | 22 ++ src/dusk/imgui/ImGuiMenuRandomizer.cpp | 7 + .../randomizer/game/randomizer_context.cpp | 12 +- .../randomizer/game/randomizer_context.hpp | 1 + .../randomizer/generator/data/locations.yaml | 296 +++++++++--------- 6 files changed, 194 insertions(+), 149 deletions(-) diff --git a/include/d/actor/d_a_npc_ins.h b/include/d/actor/d_a_npc_ins.h index 3f8b40a9a0..6155eaf136 100644 --- a/include/d/actor/d_a_npc_ins.h +++ b/include/d/actor/d_a_npc_ins.h @@ -120,7 +120,10 @@ public: BOOL chkAction(actionFunc action) { return action == mAction; } static eventFunc mEvtSeqList[1]; - +#if TARGET_PC + // Keep track of last given bug for rando + static u8 mGivenInsectId; +#endif private: /* 0xB48 */ Z2Creature mSound; /* 0xBD8 */ J3DModel* mpUmbrellaModel; diff --git a/src/d/actor/d_a_npc_ins.cpp b/src/d/actor/d_a_npc_ins.cpp index f3636747b6..a545bf8986 100644 --- a/src/d/actor/d_a_npc_ins.cpp +++ b/src/d/actor/d_a_npc_ins.cpp @@ -11,6 +11,13 @@ #include "d/d_msg_object.h" #include + + +#if TARGET_PC +#include "dusk/randomizer/game/randomizer_context.hpp" +#include "dusk/randomizer/game/verify_item_functions.h" +#endif + enum Ins_RES_File_ID { /* BCK */ /* 0x06 */ BCK_INS_F_HAPPY = 0x6, @@ -292,6 +299,10 @@ daNpcIns_c::eventFunc daNpcIns_c::mEvtSeqList[1] = { NULL, }; +#if TARGET_PC +u8 daNpcIns_c::mGivenInsectId = 0xFF; +#endif + static insect_param_data const l_insectParams[24] = { {0x0191, 0x709, 0, 0}, {0x0192, 0x709, 0, 0}, @@ -1259,6 +1270,9 @@ int daNpcIns_c::waitPresent(void* param_1) { daPy_py_c* player = daPy_getPlayerActorClass(); player->changeOriginalDemo(); player->changeDemoMode(0x25, 2, type, 0); +#if TARGET_PC + mGivenInsectId = type; +#endif } else { mInsectMsgNo = 0x719; } @@ -1487,6 +1501,14 @@ int daNpcIns_c::talk(void* param_1) { OS_REPORT("会話終了時 イベントID=%d アイテムNo=%d\n", eventID, itemNo); if (eventID == 1) { +#if TARGET_PC + // In rando, get the randomzied bug reward + if (randomizer_IsActive()) { + itemNo = randomizer_GetContext().mBugRewardOverrides[mGivenInsectId]; + itemNo = static_cast(verifyProgressiveItem(itemNo)); + mGivenInsectId = 0xFF; + } +#endif mItemID = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 0, -1, -1, NULL, NULL); if (mItemID != fpcM_ERROR_PROCESS_ID_e) { diff --git a/src/dusk/imgui/ImGuiMenuRandomizer.cpp b/src/dusk/imgui/ImGuiMenuRandomizer.cpp index 5debd32330..df20f72e7e 100644 --- a/src/dusk/imgui/ImGuiMenuRandomizer.cpp +++ b/src/dusk/imgui/ImGuiMenuRandomizer.cpp @@ -71,6 +71,13 @@ namespace dusk { randoData.mFreestandingItemOverrides[stage][flag] = itemId; } + // Bug Rewards + if (location->HasCategories("Bug Reward")) { + u8 bugItemId = metaData[0]["Bug Item Id"].as(); + u8 itemId = location->GetCurrentItem()->GetID(); + randoData.mBugRewardOverrides[bugItemId] = itemId; + } + // Items that we lookup just by calling their location name if (location->HasCategories("Location Name Lookup")) { const auto& locationName = metaData.as(); diff --git a/src/dusk/randomizer/game/randomizer_context.cpp b/src/dusk/randomizer/game/randomizer_context.cpp index fdcca75269..aa8ddaecb9 100644 --- a/src/dusk/randomizer/game/randomizer_context.cpp +++ b/src/dusk/randomizer/game/randomizer_context.cpp @@ -61,6 +61,9 @@ std::optional RandomizerContext::WriteToFile() { } } + const std::unordered_map u16BugRewardOverrides(this->mBugRewardOverrides.begin(), this->mBugRewardOverrides.end()); + out["mBugRewardOverrides"] = u16BugRewardOverrides; + out["mItemLocations"] = this->mItemLocations; out["mStartHour"] = static_cast(this->mStartHour); @@ -137,7 +140,14 @@ std::optional RandomizerContext::LoadFromHash(const std::string& ha } } - // Items For Present Demos + // Bug Rewards + for (const auto& bugNode : in["mBugRewardOverrides"]) { + u8 bugItemId = bugNode.first.as(); + u8 itemId = bugNode.second.as(); + this->mBugRewardOverrides[bugItemId] = itemId; + } + + // Items we call by location name for (const auto& locationNode : in["mItemLocations"]) { const auto& locationName = locationNode.first.as(); int itemId = locationNode.second.as(); diff --git a/src/dusk/randomizer/game/randomizer_context.hpp b/src/dusk/randomizer/game/randomizer_context.hpp index 63829216cd..26ce604ab1 100644 --- a/src/dusk/randomizer/game/randomizer_context.hpp +++ b/src/dusk/randomizer/game/randomizer_context.hpp @@ -27,6 +27,7 @@ public: std::unordered_map> mTreasureChestOverrides{}; std::unordered_map> mPoeOverrides{}; std::unordered_map> mFreestandingItemOverrides{}; + std::unordered_map mBugRewardOverrides{}; std::unordered_map mItemLocations{}; u8 mStartHour{0}; u8 mMapBits{}; diff --git a/src/dusk/randomizer/generator/data/locations.yaml b/src/dusk/randomizer/generator/data/locations.yaml index d7737b1161..99ecb99552 100644 --- a/src/dusk/randomizer/generator/data/locations.yaml +++ b/src/dusk/randomizer/generator/data/locations.yaml @@ -2170,15 +2170,15 @@ Metadata: - None -- Name: Agitha Female Ant Reward - Original Item: Purple Rupee +- Name: Agitha Male Beetle Reward + Original Item: Orange Rupee Categories: - Overworld - Npc - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xC0 - Name: Agitha Female Beetle Reward Original Item: Purple Rupee @@ -2188,127 +2188,7 @@ - Castle Town - Bug Reward Metadata: - - None - -- Name: Agitha Female Butterfly Reward - Original Item: Purple Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Dayfly Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Dragonfly Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Grasshopper Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Ladybug Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Mantis Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Phasmid Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Pill Bug Reward - Original Item: Purple Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Snail Reward - Original Item: Purple Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Female Stag Beetle Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Male Ant Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None - -- Name: Agitha Male Beetle Reward - Original Item: Orange Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None + - Bug Item Id: 0xC1 - Name: Agitha Male Butterfly Reward Original Item: Orange Rupee @@ -2318,9 +2198,9 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xC2 -- Name: Agitha Male Dayfly Reward +- Name: Agitha Female Butterfly Reward Original Item: Purple Rupee Categories: - Overworld @@ -2328,9 +2208,9 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xC3 -- Name: Agitha Male Dragonfly Reward +- Name: Agitha Male Stag Beetle Reward Original Item: Purple Rupee Categories: - Overworld @@ -2338,7 +2218,17 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xC4 + +- Name: Agitha Female Stag Beetle Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xC5 - Name: Agitha Male Grasshopper Reward Original Item: Progressive Wallet @@ -2348,27 +2238,17 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xC6 -- Name: Agitha Male Ladybug Reward - Original Item: Purple Rupee +- Name: Agitha Female Grasshopper Reward + Original Item: Orange Rupee Categories: - Overworld - Npc - Castle Town - Bug Reward Metadata: - - None - -- Name: Agitha Male Mantis Reward - Original Item: Purple Rupee - Categories: - - Overworld - - Npc - - Castle Town - - Bug Reward - Metadata: - - None + - Bug Item Id: 0xC7 - Name: Agitha Male Phasmid Reward Original Item: Progressive Wallet @@ -2378,7 +2258,17 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xC8 + +- Name: Agitha Female Phasmid Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xC9 - Name: Agitha Male Pill Bug Reward Original Item: Orange Rupee @@ -2388,7 +2278,57 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xCA + +- Name: Agitha Female Pill Bug Reward + Original Item: Purple Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xCB + +- Name: Agitha Male Mantis Reward + Original Item: Purple Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xCC + +- Name: Agitha Female Mantis Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xCD + +- Name: Agitha Male Ladybug Reward + Original Item: Purple Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xCE + +- Name: Agitha Female Ladybug Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xCF - Name: Agitha Male Snail Reward Original Item: Purple Rupee @@ -2398,15 +2338,77 @@ - Castle Town - Bug Reward Metadata: - - None + - Bug Item Id: 0xD0 -- Name: Agitha Male Stag Beetle Reward +- Name: Agitha Female Snail Reward Original Item: Purple Rupee Categories: - Overworld - Npc - Castle Town - Bug Reward + Metadata: + - Bug Item Id: 0xD1 + +- Name: Agitha Male Dragonfly Reward + Original Item: Purple Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xD2 + +- Name: Agitha Female Dragonfly Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xD3 + +- Name: Agitha Male Ant Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xD4 + +- Name: Agitha Female Ant Reward + Original Item: Purple Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xD5 + +- Name: Agitha Male Dayfly Reward + Original Item: Purple Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xD6 + +- Name: Agitha Female Dayfly Reward + Original Item: Orange Rupee + Categories: + - Overworld + - Npc + - Castle Town + - Bug Reward + Metadata: + - Bug Item Id: 0xD7 # HD Only Location # - Name: Agitha 12 Golden Bugs Reward