Show item name and player in ap item pickup notification
This commit is contained in:
@@ -70,5 +70,5 @@ DEFINE_HOOK(OnFileDropped, (std::string filePath));
|
|||||||
DEFINE_HOOK(OnAssetAltChange, ());
|
DEFINE_HOOK(OnAssetAltChange, ());
|
||||||
DEFINE_HOOK(OnKaleidoUpdate, ());
|
DEFINE_HOOK(OnKaleidoUpdate, ());
|
||||||
|
|
||||||
DEFINE_HOOK(OnRandomizerItemGivenHooks, (uint32_t rc));
|
DEFINE_HOOK(OnRandomizerItemGivenHooks, (uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped));
|
||||||
DEFINE_HOOK(OnArchipelagoItemRecieved, (uint32_t rc));
|
DEFINE_HOOK(OnArchipelagoItemRecieved, (uint32_t rc));
|
||||||
|
|||||||
@@ -304,8 +304,8 @@ void GameInteractor_ExecuteOnKaleidoUpdate() {
|
|||||||
|
|
||||||
// Mark: Randomizer
|
// Mark: Randomizer
|
||||||
|
|
||||||
void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc) {
|
void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped) {
|
||||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnRandomizerItemGivenHooks>(rc);
|
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnRandomizerItemGivenHooks>(rc, gi, isGiSkipped);
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Archipelago
|
// MARK: Archipelago
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ void GameInteractor_RegisterOnAssetAltChange(void (*fn)(void));
|
|||||||
void GameInteractor_ExecuteOnKaleidoUpdate();
|
void GameInteractor_ExecuteOnKaleidoUpdate();
|
||||||
|
|
||||||
// Mark: - Randomizer
|
// Mark: - Randomizer
|
||||||
void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc);
|
void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped);
|
||||||
|
|
||||||
// Mark: - Archipelago
|
// Mark: - Archipelago
|
||||||
void GameInteractor_ExecuteOnArchipelagoItemRecieved(uint32_t rc);
|
void GameInteractor_ExecuteOnArchipelagoItemRecieved(uint32_t rc);
|
||||||
|
|||||||
@@ -307,6 +307,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
|
|||||||
GetItemEntry getItemEntry;
|
GetItemEntry getItemEntry;
|
||||||
RandomizerCheck rc = randomizerQueuedChecks.front();
|
RandomizerCheck rc = randomizerQueuedChecks.front();
|
||||||
auto loc = Rando::Context::GetInstance()->GetItemLocation(rc);
|
auto loc = Rando::Context::GetInstance()->GetItemLocation(rc);
|
||||||
|
uint8_t isGiSkipped = 0;
|
||||||
|
|
||||||
if (rc == RC_ARCHIPELAGO_RECIEVED_ITEM) {
|
if (rc == RC_ARCHIPELAGO_RECIEVED_ITEM) {
|
||||||
getItemEntry = Rando::Context::GetInstance()->GetArchipelagoGIEntry();
|
getItemEntry = Rando::Context::GetInstance()->GetArchipelagoGIEntry();
|
||||||
@@ -324,6 +325,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
|
|||||||
randomizerQueuedItemEntry = getItemEntry;
|
randomizerQueuedItemEntry = getItemEntry;
|
||||||
SPDLOG_INFO("Queueing Item mod {} item {} from RC {}", getItemEntry.modIndex, getItemEntry.itemId,
|
SPDLOG_INFO("Queueing Item mod {} item {} from RC {}", getItemEntry.modIndex, getItemEntry.itemId,
|
||||||
static_cast<uint32_t>(rc));
|
static_cast<uint32_t>(rc));
|
||||||
|
|
||||||
if (
|
if (
|
||||||
// Skipping ItemGet animation incompatible with checks that require closing a text box to finish
|
// Skipping ItemGet animation incompatible with checks that require closing a text box to finish
|
||||||
rc != RC_HF_OCARINA_OF_TIME_ITEM && rc != RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST &&
|
rc != RC_HF_OCARINA_OF_TIME_ITEM && rc != RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST &&
|
||||||
@@ -342,10 +344,12 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
|
|||||||
getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN ||
|
getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN ||
|
||||||
getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER))))) {
|
getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER))))) {
|
||||||
Item_DropCollectible(gPlayState, &spawnPos, ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000);
|
Item_DropCollectible(gPlayState, &spawnPos, ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000);
|
||||||
|
|
||||||
|
isGiSkipped = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractor_ExecuteOnRandomizerItemGivenHooks((uint32_t)rc);
|
GameInteractor_ExecuteOnRandomizerItemGivenHooks((uint32_t)rc, getItemEntry, isGiSkipped);
|
||||||
|
|
||||||
randomizerQueuedChecks.pop();
|
randomizerQueuedChecks.pop();
|
||||||
}
|
}
|
||||||
@@ -1048,6 +1052,9 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
|||||||
.suffix = SohUtils::GetItemName(item00->itemEntry.itemId),
|
.suffix = SohUtils::GetItemName(item00->itemEntry.itemId),
|
||||||
});
|
});
|
||||||
} else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) {
|
} else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) {
|
||||||
|
if (!(item00->itemEntry.getItemId == RG_ARCHIPELAGO_ITEM_PROGRESSIVE ||
|
||||||
|
item00->itemEntry.getItemId == RG_ARCHIPELAGO_ITEM_USEFUL ||
|
||||||
|
item00->itemEntry.getItemId == RG_ARCHIPELAGO_ITEM_JUNK)) {
|
||||||
Notification::Emit({
|
Notification::Emit({
|
||||||
.message = "You found ",
|
.message = "You found ",
|
||||||
.suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
|
.suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
|
||||||
@@ -1055,6 +1062,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
|||||||
.english,
|
.english,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This is typically called when you close the text box after getting an item, in case a previous
|
// This is typically called when you close the text box after getting an item, in case a previous
|
||||||
// function hid the interface.
|
// function hid the interface.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "soh/Enhancements/randomizer/context.h"
|
#include "soh/Enhancements/randomizer/context.h"
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/Notification/Notification.h"
|
||||||
#include "soh/ShipInit.hpp"
|
#include "soh/ShipInit.hpp"
|
||||||
#include "soh/SaveManager.h"
|
#include "soh/SaveManager.h"
|
||||||
|
|
||||||
@@ -352,11 +353,21 @@ void InitArchipelagoData(bool isDebug) {
|
|||||||
|
|
||||||
void RegisterArchipelago() {
|
void RegisterArchipelago() {
|
||||||
COND_HOOK(GameInteractor::OnRandomizerItemGivenHooks, IS_ARCHIPELAGO,
|
COND_HOOK(GameInteractor::OnRandomizerItemGivenHooks, IS_ARCHIPELAGO,
|
||||||
[](uint32_t rc) {
|
[](uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped) {
|
||||||
if (rc == RC_ARCHIPELAGO_RECIEVED_ITEM) {
|
if (rc == RC_ARCHIPELAGO_RECIEVED_ITEM) {
|
||||||
gSaveContext.ship.quest.data.archipelago.lastReceivedItemIndex++;
|
gSaveContext.ship.quest.data.archipelago.lastReceivedItemIndex++;
|
||||||
} else {
|
} else {
|
||||||
ArchipelagoClient::GetInstance().CheckLocation((RandomizerCheck)rc);
|
ArchipelagoClient::GetInstance().CheckLocation((RandomizerCheck)rc);
|
||||||
|
|
||||||
|
if (isGiSkipped && gi.modIndex == MOD_RANDOMIZER &&
|
||||||
|
(gi.getItemId == RG_ARCHIPELAGO_ITEM_PROGRESSIVE || gi.getItemId == RG_ARCHIPELAGO_ITEM_USEFUL ||
|
||||||
|
gi.getItemId == RG_ARCHIPELAGO_ITEM_JUNK)) {
|
||||||
|
Notification::Emit({
|
||||||
|
.prefix = std::string(gSaveContext.ship.quest.data.archipelago.locations[rc].itemName),
|
||||||
|
.message = " for ",
|
||||||
|
.suffix = std::string(gSaveContext.ship.quest.data.archipelago.locations[rc].playerName)
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user