Skip to content

Commit

Permalink
Finish adjusting Kafei letter in mail. Last to do it pendant.
Browse files Browse the repository at this point in the history
  • Loading branch information
PhlexPlexico committed Feb 17, 2024
1 parent c868f01 commit f3c8910
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 24 deletions.
17 changes: 9 additions & 8 deletions code/include/rnd/savefile.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@ namespace rnd {
void SaveFile_LoadExtSaveData(u32 saveNumber);
u8 SaveFile_GetIsSceneDiscovered(u8 sceneNum);
extern "C" void SaveFile_SaveExtSaveData();
extern "C" void SaveFile_RemoveStoredDeed(u16, u8);
extern "C" void SaveFile_RemoveStoredTradeItem(u16, u8);
extern "C" void SaveFile_RemoveTradeItemFromSlot(u16, u8);
extern "C" u8 SaveFile_GetItemCurrentlyInSlot(u8);

typedef struct {
typedef struct {
u32 version; // Needs to always be the first field of the structure
u32 playtimeSeconds;
u32 isNewFile;
Expand Down Expand Up @@ -95,12 +96,12 @@ namespace rnd {
union FairyCollectRegister {
u8 raw;

BitField<0, 1, u8> nct;
BitField<1, 1, u8> woodfall;
BitField<2, 1, u8> snowhead;
BitField<3, 1, u8> great_bay;
BitField<4, 1, u8> ikana;
BitField<5, 3, u8> unused;
BitField<0, 2, u8> nct;
BitField<2, 1, u8> woodfall;
BitField<3, 1, u8> snowhead;
BitField<4, 1, u8> great_bay;
BitField<5, 1, u8> ikana;
BitField<6, 2, u8> unused;
};
FairyCollectRegister fairyRewards;
union TingleCollectRegister {
Expand Down
8 changes: 6 additions & 2 deletions code/mm.ld
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,9 @@ SECTIONS{
*(.patch_CheckMoTRequirement)
}

/* .patch_TradeItemDeleteMoonsTear 0x3B5280 : {
.patch_TradeItemDeleteMoonsTear 0x3B5214 : {
*(.patch_TradeItemDeleteMoonsTear)
} */
}

.patch_OverrideWalletSpiderHouseTwo 0x3BF078 : {
*(.patch_OverrideWalletSpiderHouseTwo)
Expand Down Expand Up @@ -427,6 +427,10 @@ SECTIONS{
*(.patch_LoadExtData)
}

.patch_RemoveKafeiItemFromExtSlot 0x4AD1B8 : {
*(.patch_RemoveKafeiItemFromExtSlot)
}

.patch_IncomingGetItemID 0x4B1394 : {
*(.patch_IncomingGetItemID)
}
Expand Down
43 changes: 40 additions & 3 deletions code/source/asm/trade_item_hooks.s
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,56 @@ hook_RemoveTradeItemFromInventory:
cpy r0,r2
mov r1,#0x5
sub r0,r0,#0x1
bl SaveFile_RemoveStoredDeed
bl SaveFile_RemoveStoredTradeItem
pop {r0-r12,lr}
beq 0x477748
bx lr

.global hook_RemoveMoonTearFromInventory
hook_RemoveMoonTearFromInventory:
push {r0-r12,lr}
mov r2, #0x97
cpy r0,r2
mov r1,#0x5
sub r0,r0,#0x1
bl SaveFile_RemoveStoredTradeItem
pop {r0-r12,lr}
cpy r5,r1
bx lr

.global hook_RemoveTradeItemFromExtSlot
hook_RemoveTradeItemFromExtSlot:
push {r0-r12}
push {r0-r12, lr}
bl SaveFile_RemoveTradeItemFromSlot
pop {r0-r12}
pop {r0-r12, lr}
cpy r2,r1
bx lr

.global hook_RemoveKafeiItemFromExtSlot
hook_RemoveKafeiItemFromExtSlot:
push {r0-r12, lr}
bl SaveFile_GetItemCurrentlyInSlot
cmp r0,#0x2F
beq changeLetter
cmp r0,#0x30
beq changePendant
pop {r0-r12, lr}
cpy r5,r0
bx lr
changeLetter:
mov r0,#0xAA
mov r1,#0x11
bl SaveFile_RemoveStoredTradeItem
pop {r0-r12,lr}
b 0x4AD1C4
changePendant:
mov r0,#0xAB
mov r1,#0x11
bl SaveFile_RemoveStoredTradeItem
pop {r0-r12,lr}
b 0x4AD1C4


.global hook_SwapStoredTradeItems
hook_SwapStoredTradeItems:
push {r0-r12, lr}
Expand Down
8 changes: 5 additions & 3 deletions code/source/asm/trade_item_patches.s
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ patch_DoNotRemoveTradeItems:
.section .patch_TradeItemDeleteMoonsTear
.global patch_TradeItemDeleteMoonsTear
patch_TradeItemDeleteMoonsTear:
mov r2,#0x96
bl hook_RemoveTradeItemFromInventory
mov r2,#0x97
bl hook_RemoveMoonTearFromInventory

.section .patch_TradeItemDeleteLandTitleDeed
.global patch_TradeItemDeleteLandTitleDeed
Expand All @@ -32,6 +30,10 @@ patch_TradeItemDeleteSwampTitleDeed:
patch_TradeItemDeleteMountainTitleDeed:
bleq hook_RemoveTradeItemFromInventory

.section .patch_RemoveKafeiItemFromExtSlot
.global patch_RemoveKafeiItemFromExtSlot
patch_RemoveKafeiItemFromExtSlot:
bl hook_RemoveKafeiItemFromExtSlot

.section .patch_SwapStoredTradeItems
.global patch_SwapStoredTradeItems
Expand Down
14 changes: 10 additions & 4 deletions code/source/rnd/item_override.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -729,10 +729,16 @@ namespace rnd {
void ItemOverride_GetFairyRewardItem(game::GlobalContext* gctx, game::act::GreatFairy* fromActor,
s16 incomingItemId) {
int fairyEntrance = game::GetCommonData().sub1.entrance;
if (fairyEntrance == 0x4600 && gExtSaveData.fairyRewards.nct != 1) {
gExtSaveData.fairyRewards.nct = 1;
ItemOverride_PushPendingFairyRewardItem(gctx, fromActor, 0x86);
ItemOverride_PushPendingFairyRewardItem(gctx, fromActor, 0x0E);
if (fairyEntrance == 0x4600) {
if (gExtSaveData.fairyRewards.nct == 0) {
ItemOverride_PushPendingFairyRewardItem(gctx, fromActor, 0x0E);
gExtSaveData.fairyRewards.nct = 1;
return;
} else if (gExtSaveData.fairyRewards.nct == 1 && game::HasMask(game::ItemId::DekuMask)) {
ItemOverride_PushPendingFairyRewardItem(gctx, fromActor, 0x86);
gExtSaveData.fairyRewards.nct = 2;
return;
}
return;
} else if (fairyEntrance == 0x4610 && gExtSaveData.fairyRewards.woodfall != 1) {
gExtSaveData.fairyRewards.woodfall = 1;
Expand Down
30 changes: 26 additions & 4 deletions code/source/rnd/savefile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ namespace rnd {

saveData.inventory.masks[5] = game::ItemId::DekuMask;
rnd::util::GetPointer<void(game::ItemId)>(0x22b14c)(game::ItemId::BremenMask);
rnd::util::GetPointer<void(game::ItemId)>(0x22b14c)(game::ItemId::Bottle);
saveData.inventory.masks[11] = game::ItemId::GoronMask;
saveData.inventory.masks[17] = game::ItemId::ZoraMask;
saveData.inventory.masks[23] = game::ItemId::FierceDeityMask;
Expand Down Expand Up @@ -135,7 +136,7 @@ namespace rnd {
// saveData.inventory.collect_register.song_of_healing = 1; // until happy mask salesman is overridden
saveData.player.owl_statue_flags.clock_town = 1;
#ifdef ENABLE_DEBUG
gSettingsContext.startingKokiriSword = 0;
gSettingsContext.startingKokiriSword = 3;
gSettingsContext.startingShield = 0;
#endif
SaveFile_SetStartingInventory();
Expand Down Expand Up @@ -907,13 +908,27 @@ namespace rnd {
extDataUnmount(fsa);
}

extern "C" void SaveFile_RemoveStoredDeed(u16 item, u8 slot) {
extern "C" void SaveFile_RemoveStoredTradeItem(u16 item, u8 slot) {
// This is a get item ID, we need to translate it to the regular item ID.
#if defined ENABLE_DEBUG || defined DEBUG_PRINT
rnd::util::Print("%s: Item and slot are %#04x %u\n", __func__, item, slot);
#endif
if (slot != 5 && slot != 17) return;
ItemRow* gidItemRow = ItemTable_GetItemRowFromIndex(item);
game::ItemId firstItem = game::ItemId::None;
for (int i = 0; i < 4; i++) {

for (int i = 0; i < 9; i++) {
if (gidItemRow->itemId != (u8)gExtSaveData.collectedTradeItems[i] && firstItem == game::ItemId::None) {
firstItem = gExtSaveData.collectedTradeItems[i];
if (slot == 17 && i > 5 && i < 8) {
#if defined ENABLE_DEBUG || defined DEBUG_PRINT
rnd::util::Print("%s: Slot is 17 and our found item is %#04x\n", __func__,
gExtSaveData.collectedTradeItems[i]);
#endif
firstItem = gExtSaveData.collectedTradeItems[i];
}

else if (slot == 5 && i < 5)
firstItem = gExtSaveData.collectedTradeItems[i];
}
if (gidItemRow->itemId == (u8)gExtSaveData.collectedTradeItems[i]) {
gExtSaveData.collectedTradeItems[i] = game::ItemId::None;
Expand All @@ -934,6 +949,13 @@ namespace rnd {
}
}
}

extern "C" u8 SaveFile_GetItemCurrentlyInSlot(u8 slot) {
#if defined ENABLE_DEBUG || defined DEBUG_PRINT
rnd::util::Print("%s: Current slot is %#04x\n", __func__, game::GetCommonData().save.inventory.items[slot]);
#endif
return (u8)game::GetCommonData().save.inventory.items[slot];
}
// SaveFile_DrawAndShowUIMessage() {

// }
Expand Down

0 comments on commit f3c8910

Please sign in to comment.