From 1f238a122d84f8fa32ffdc5c911f88ff48b6ba26 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Mon, 22 Jul 2024 12:24:30 -0600 Subject: [PATCH] Adjust overrides for tokensanity to ensure proper IDs are being given. (#90) --- code/include/rnd/item_override.h | 2 +- code/mm.ld | 7 +++++-- code/source/asm/item_override_hooks.s | 17 ++++++++++++++--- code/source/asm/item_override_patches.s | 5 +++++ code/source/rnd/item_override.cpp | 10 ++++++---- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/code/include/rnd/item_override.h b/code/include/rnd/item_override.h index 3e7e85c..31d77bb 100644 --- a/code/include/rnd/item_override.h +++ b/code/include/rnd/item_override.h @@ -453,7 +453,7 @@ namespace rnd { bool ItemOverride_CheckTingleMaps(u16, game::GlobalContext*); u32 ItemOverride_GetGaboraExtData(); u32 ItemOverride_GetOshExtData(); - u8 ItemOverride_OverrideSkullToken(game::GlobalContext*, game::act::Actor*); + u8 ItemOverride_OverrideSkullToken(game::act::Actor*); u8 ItemOverride_CheckBossStatus(); } extern "C" u32 rActiveItemGraphicId; diff --git a/code/mm.ld b/code/mm.ld index caca879..431cee1 100644 --- a/code/mm.ld +++ b/code/mm.ld @@ -335,14 +335,17 @@ SECTIONS{ *(.patch_OverrideItemID) } - .patch_TwinmoldConsistentDamage 0x28E544 : { - *(.patch_TwinmoldConsistentDamage) + .patch_RemoveAddingSkulltulaTokenIfOverridden 0x23975C : { + *(.patch_RemoveAddingSkulltulaTokenIfOverridden) } .patch_EnteringLocation 0x23AA54 : { *(.patch_EnteringLocation) } + .patch_TwinmoldConsistentDamage 0x28E544 : { + *(.patch_TwinmoldConsistentDamage) + } .patch_FasterBlockMovement 0x2AC634 : { *(.patch_FasterBlockMovement) diff --git a/code/source/asm/item_override_hooks.s b/code/source/asm/item_override_hooks.s index da2a198..5c7751b 100644 --- a/code/source/asm/item_override_hooks.s +++ b/code/source/asm/item_override_hooks.s @@ -134,7 +134,18 @@ noOverrideItemID: cpy r0,r7 b 0x23110C - +.global hook_RemoveAddingSkulltulaTokenIfOverridden +hook_RemoveAddingSkulltulaTokenIfOverridden: + push {r1} + ldr r1,.rActiveItemRow_addr + ldr r1,[r1] + cmp r1,#0x0 + pop {r1} + bne doNotIncreaseSkulltulaCount + cmp r0, #0x27 + b 0x239760 +doNotIncreaseSkulltulaCount: + bx lr .global hook_DarmaniRewardCheck hook_DarmaniRewardCheck: @@ -284,7 +295,7 @@ hook_ChangeSOHToCustomText: .global hook_SkulltulaOverrideOne hook_SkulltulaOverrideOne: push {r0-r12,lr} - cpy r1,r5 + cpy r0,r5 bl ItemOverride_OverrideSkullToken cmp r0,#0x0 pop {r0-r12,lr} @@ -297,7 +308,7 @@ skulltulaOverridden: .global hook_SkulltulaOverrideTwo hook_SkulltulaOverrideTwo: push {r0-r12,lr} - cpy r1,r5 + cpy r0,r4 bl ItemOverride_OverrideSkullToken cmp r0,#0x0 pop {r0-r12,lr} diff --git a/code/source/asm/item_override_patches.s b/code/source/asm/item_override_patches.s index f9515f5..fe921fd 100644 --- a/code/source/asm/item_override_patches.s +++ b/code/source/asm/item_override_patches.s @@ -47,6 +47,11 @@ OverrideTextID_patch: OverrideItemID_patch: b hook_OverrideItemID +.section .patch_RemoveAddingSkulltulaTokenIfOverridden +.global patch_RemoveAddingSkulltulaTokenIfOverridden +patch_RemoveAddingSkulltulaTokenIfOverridden: + b hook_RemoveAddingSkulltulaTokenIfOverridden + .section .patch_RemoveGoronMaskCheckDarmani .global patch_RemoveGoronMaskCheckDarmani patch_RemoveGoronMaskCheckDarmani: diff --git a/code/source/rnd/item_override.cpp b/code/source/rnd/item_override.cpp index 128c37e..91a05bf 100644 --- a/code/source/rnd/item_override.cpp +++ b/code/source/rnd/item_override.cpp @@ -748,7 +748,8 @@ namespace rnd { gExtSaveData.givenItemChecks.letterToKafeiGiven == 1) || (incomingGetItemId == (s16)GetItemID::GI_PENDANT_OF_MEMORIES && gExtSaveData.givenItemChecks.pendantGiven == 1)) { - player->get_item_id = (s16)GetItemID::GI_FISHING_HOLE_PASS; + if (incomingGetItemId != 0x44 && incomingGetItemId != 0x6D && incomingGetItemId != 0x52) + player->get_item_id = (s16)GetItemID::GI_FISHING_HOLE_PASS; ItemOverride_Clear(); return; } @@ -812,8 +813,8 @@ namespace rnd { rActiveItemRow->effectArg1 = override.key.all >> 16; rActiveItemRow->effectArg2 = override.key.all & 0xFFFF; } - - player->get_item_id = incomingNegative ? -baseItemId : baseItemId; + if (incomingGetItemId != 0x44 && incomingGetItemId != 0x6D && incomingGetItemId != 0x52) + player->get_item_id = incomingNegative ? -baseItemId : baseItemId; // Weird edge case with the way text and masks are handled with Couples' Mask. // Set the text and apply it later in a different patch. if (incomingGetItemId == 0x85) { @@ -1045,7 +1046,8 @@ namespace rnd { return (u32)gExtSaveData.givenItemChecks.enOshGivenItem; } - u8 ItemOverride_OverrideSkullToken(game::GlobalContext* gctx, game::act::Actor* actor) { + u8 ItemOverride_OverrideSkullToken(game::act::Actor* actor) { + game::GlobalContext* gctx = GetContext().gctx; s16 getItemId = gctx->scene == game::SceneId::SwampSpiderHouse ? 0x44 : 0x6D; ItemOverride_GetItem(gctx, actor, gctx->GetPlayerActor(), getItemId); if (rActiveItemRow != NULL) {