diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/debug_menu_mid.c | 1 | ||||
-rw-r--r-- | src/friend_area.c | 8 | ||||
-rw-r--r-- | src/friend_area_action_menu_1.c | 77 | ||||
-rw-r--r-- | src/friend_list_menu.c | 446 | ||||
-rw-r--r-- | src/items.c | 2 | ||||
-rw-r--r-- | src/kangaskhan_storage_2.c | 1 | ||||
-rw-r--r-- | src/kangaskhan_storage_3.c | 2 | ||||
-rw-r--r-- | src/kecleon_items_1.c | 541 | ||||
-rw-r--r-- | src/kecleon_items_2.c | 15 | ||||
-rw-r--r-- | src/load_screen.c | 4 | ||||
-rw-r--r-- | src/luminous_cave.c | 850 | ||||
-rw-r--r-- | src/thank_you_wonder_mail.c | 6 | ||||
-rw-r--r-- | src/wonder_mail_3_mid.c | 4 |
13 files changed, 1934 insertions, 23 deletions
diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 31d7bbf..bc67ef6 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -70,7 +70,6 @@ extern void sub_8012EA4(u32 *, u32); extern void sub_80073E0(u32); extern void sub_8013C68(u32 *); extern void xxx_call_draw_string(s32, u32, const char *, u32, u32); -extern bool8 IsNotMoneyOrUsedTMItem(u8); extern u32 sub_801CA08(u32); extern u8 sub_801CB24(); extern void sub_801CBB8(); diff --git a/src/friend_area.c b/src/friend_area.c index 4854c23..15a527e 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -15,7 +15,7 @@ extern const char gUnknown_81098A4; extern const char gUnknown_81098AC; extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *r2, ...); -extern void sub_8090FEC(u32, u32 *r1, u32); +extern void sub_8090FEC(u32, u8 *r1, u32); const struct FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] = { @@ -605,11 +605,11 @@ void sub_8092558(u8 *buffer, u8 index) void sub_8092578(u8 *buffer, u8 index, u8 r2) { // I think this is when we buy the friend area from wigglytuff - u32 temp[5]; + u8 priceBuffer[0x14]; if(r2) { - sub_8090FEC(gFriendAreaSettings[index].price, (&temp[0]), 1); - ExpandPlaceholdersBuffer(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, temp); + sub_8090FEC(gFriendAreaSettings[index].price, priceBuffer, 1); + ExpandPlaceholdersBuffer(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, priceBuffer); } else { diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index 6856d5f..6c4d40f 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -10,8 +10,8 @@ extern struct unkStruct_203B2BC *gUnknown_203B2BC; extern struct TeamInventory *gTeamInventory_203B460; -u32 sub_801B410(); -void sub_801B450(); +extern u32 sub_801B410(); +extern void sub_801B450(); extern u32 sub_801EF38(u8 r0); extern void sub_801F214(); @@ -29,9 +29,6 @@ extern u32 sub_801A6E8(u32); extern s32 sub_80144A4(s32 *); extern void sub_8027EB8(); extern void sub_808D31C(struct PokemonStruct *); -u32 sub_8027E18(struct PokemonStruct *); -bool8 IsNotMoneyOrUsedTMItem(u8 id); -u8 sub_8027E4C(struct PokemonStruct *r0); extern u8 sub_80023E4(u32); extern struct PokemonStruct *sub_808D3F8(void); extern struct PokemonStruct *sub_808D3BC(void); @@ -45,6 +42,74 @@ extern void sub_80073E0(u32); extern u8 gUnknown_202DE58[]; extern u32 sub_801F194(void); +u32 sub_8027E18(struct PokemonStruct *); +u8 sub_8027E4C(struct PokemonStruct *r0); +extern u32 sub_801BF48(void); +extern void sub_801BF98(void); +extern u32 sub_80244E4(void); +extern void sub_802453C(void); + +void sub_8027A40(void) +{ + switch(sub_80244E4()) + { + case 2: + case 3: + sub_802453C(); + SetFriendAreaActionMenuState(2); + break; + case 0: + case 1: + break; + } +} + +void sub_8027A5C(void) +{ + switch(sub_801BF48()) + { + case 2: + case 3: + sub_801BF98(); + SetFriendAreaActionMenuState(2); + break; + case 0: + case 1: + break; + } +} + +static inline bool8 sub_8027A78_sub(void) { + if (gUnknown_203B2BC->unk18->unk4.unk4 == 0x44 || gUnknown_203B2BC->unk18->unk4.unk4 == 0x45) + return TRUE; + else + return FALSE; +} + +void sub_8027A78(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 1: + case 3: + SetFriendAreaActionMenuState(2); + break; + case 2: + if (sub_8027A78_sub()) + SetFriendAreaActionMenuState(9); + else + { + sub_8027EB8(); + sub_808D31C(gUnknown_203B2BC->unk18); + } + break; + } + } +} + void sub_8027AE4(void) { s32 local_8; @@ -194,7 +259,7 @@ void sub_8027D40(u32 r0, struct HeldItem *heldItem) a3.unk0 = 0; a3.unk4 = 0; a3.unk8 = 1; - slot.itemFlags = 1; + slot.itemFlags = ITEM_FLAG_EXISTS; sub_8090E14(gUnknown_202DE58, &slot, &a3); xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0); sub_80073E0(r0); diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c new file mode 100644 index 0000000..9fbf686 --- /dev/null +++ b/src/friend_list_menu.c @@ -0,0 +1,446 @@ +#include "global.h" +#include "item.h" +#include "pokemon.h" +#include "text.h" +#include "team_inventory.h" +#include "constants/move.h" + +struct unkStruct_203B2B8 +{ + // size: 0x280 + u32 state; + u32 unk4; + u8 unk8; + s16 pokeSpecies; + u32 unkC; + struct HeldItem unk10; + struct HeldItem unk14; + struct PokemonStruct *unk18; + u8 fill1C[0x4]; + u32 unk20; + u16 unk24; + struct PokemonMove unk28[4]; + u8 fill48[0x70 - 0x48]; + u32 unk70; + u32 unk74; + u32 unk78; + u32 unk7C; + u8 fill80[0xCC - 0x80]; + u32 unkCC; +}; +extern struct unkStruct_203B2B8 *gUnknown_203B2B8; +extern u8 gAvailablePokemonNames[0x58]; +extern u8 gUnknown_202DEA8[0x58]; +extern u8 gUnknown_202DE58[0x58]; +extern u8 gUnknown_80DD6E0[]; +extern u8 gPartyMenuItemPlaceholder[]; +extern struct UnkTextStruct2 gUnknown_80DD370; + +extern u32 sub_8026F04(struct PokemonStruct *); +extern void GivePokemonItem(s16 index_, struct HeldItem* item); +extern void sub_8026074(u32); +extern void PlaySound(u32); +bool8 sub_8026F38(struct PokemonStruct *r0); +extern u8 sub_80023E4(u8); +extern struct PokemonStruct *sub_808D3F8(void); +extern struct PokemonStruct *sub_808D3BC(void); +extern void sub_801F214(void); +extern u32 sub_801F194(void); +extern u32 sub_801EF38(u32); + + +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_80922B4(u8 *, const u8 *, u32); +extern void ExpandPlaceholdersBuffer(u8 *buffer, const u8 *text, ...); +extern void sub_808D930(u8 *, s16); +extern s32 sub_8008ED0(u8 *); +extern void xxx_call_draw_string(s32 x, s32 y, u8 *, u32, u32); +extern void xxx_format_and_draw(s32, s32, u8 *, ...); +extern s32 sub_80144A4(s32 *); + +extern u32 sub_801F890(void); +extern void sub_801F8D0(void); +extern u32 sub_801B410(void); +extern void sub_801B450(void); + +extern void nullsub_104(void); +extern void sub_801A928(void); +extern void sub_8099690(u32); +extern u32 sub_801A6E8(u32); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, s32 *); + +extern u32 sub_801A8AC(void); +extern u32 sub_8022860(void); +extern void sub_8022908(void); + +extern void sub_801BF98(void); +extern u32 sub_801BF48(void); +extern void sub_802453C(void); +extern u32 sub_80244E4(void); + + +void sub_8026A78(void) +{ + switch(sub_80244E4()) + { + case 2: + case 3: + sub_802453C(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + +void sub_8026A94(void) +{ + switch(sub_801BF48()) + { + case 2: + case 3: + sub_801BF98(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + + +static inline bool8 sub_8026AB0_sub(void) { + if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45) + return TRUE; + else + return FALSE; +} + +void sub_8026AB0(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 1: + case 3: + sub_8026074(2); + break; + case 2: + if (sub_8026AB0_sub()) + sub_8026074(0xD); + else + sub_8026074(8); + break; + } + } +} + +void sub_8026B10(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 1: + case 3: + sub_8026074(2); + break; + case 2: + sub_8026074(8); + break; + } + } +} + + +void sub_8026B48(void) +{ + switch(sub_8022860()) + { + case 2: + case 3: + sub_8022908(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + + +void sub_8026B64(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + gUnknown_203B2B8->unkC = sub_801A8AC(); + gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex; + gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems; + sub_8026074(0x14); + break; + case 4: + gUnknown_203B2B8->unkC = sub_801A8AC(); + gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex; + gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems; + sub_8099690(0); + sub_8026074(0x15); + break; + case 2: + sub_801A928(); + sub_8026074(2); + break; + case 0: + case 1: + break; + } +} + +void sub_8026C14(void) +{ + u32 nextState; + struct unkStruct_8090F58 temp; + int menuAction; + struct ItemSlot slot; + + menuAction = 0; + sub_801A6E8(0); + if ((sub_8012FD8(&gUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&gUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) { + gUnknown_203B2B8->unk74 = menuAction; + } + switch(menuAction) + { + case 0xb: + nextState = 0xF; + PlaySound(0x14d); + ShiftItemsDownFrom(gUnknown_203B2B8->unkC); + FillInventoryGaps(); + if (gUnknown_203B2B8->unk14.itemIndex != '\0') { + sub_8091274(&gUnknown_203B2B8->unk14); + nextState = 0x10; + } + HeldItemToSlot(&slot,&gUnknown_203B2B8->unk10); + temp.unk0 = 0; + temp.unk4 = 0; + temp.unk8 = 1; + slot.itemFlags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DEA8,&slot,&temp); + GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->unk10); + sub_801A928(); + nullsub_104(); + sub_8026074(nextState); + break; + case 4: + sub_8099690(0); + sub_8026074(0x15); + break; + case 1: + sub_8026074(0x13); + break; + } +} + +void sub_8026CF0(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + sub_8026074(0x13); + break; + case 0: + case 1: + break; + } +} + + +void sub_8026D0C(void) +{ + switch(sub_801EF38(1)) + { + case 0: + case 1: + break; + case 3: + case 4: + gUnknown_203B2B8->unk20 = sub_801F194(); + gUnknown_203B2B8->unk24 = gUnknown_203B2B8->unk28[gUnknown_203B2B8->unk20].moveID; + sub_8026074(0x18); + break; + case 2: + sub_801F214(); + sub_8026074(2); + break; + } +} + +void sub_8026D6C(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + sub_8026074(0x17); + break; + case 0: + case 1: + break; + } +} + +void sub_8026D88(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_8026074(gUnknown_203B2B8->unk4); + } +} + +void sub_8026DAC(u32 r0, struct HeldItem *r1) +{ + struct ItemSlot slot; + struct unkStruct_8090F58 temp; + + sub_8008C54(r0); + sub_80073B8(r0); + HeldItemToSlot(&slot, r1); + temp.unk0 = 0; + temp.unk4 = 0; + temp.unk8 = 1; + slot.itemFlags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DE58, &slot, &temp); + xxx_format_and_draw(4, 3, gPartyMenuItemPlaceholder, r0, 0); + sub_80073E0(r0); +} + +void sub_8026E08(u32 r0) +{ + u8 buffer1[40]; + u8 buffer[20]; + s32 x; + + sub_8008C54(r0); + sub_80073B8(r0); + sub_80922B4(gAvailablePokemonNames, gUnknown_203B2B8->unk18->name, POKEMON_NAME_LENGTH); + sub_808D930(buffer, gUnknown_203B2B8->unk18->speciesNum); + ExpandPlaceholdersBuffer(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames); + x = sub_8008ED0(buffer1); + xxx_call_draw_string(((gUnknown_80DD370.unk0c << 3) - x) / 2, 3, buffer1, r0, 0); + sub_80073E0(r0); +} + +u32 sub_8026E88(struct PokemonStruct *r0) +{ + u8 iVar3; + if(r0->unk2 == 0) + { + iVar3 = (r0->unk4.unk4 == 0x41); + if(iVar3 != 0) + if(sub_80023E4(0x8) == 0) + return 0; + } + else + return 0; + return 1; +} + +u32 sub_8026EB8(struct PokemonStruct *r0) +{ + u8 iVar3; + if(sub_808D3BC() != r0) + if(sub_808D3F8() != r0) + if(r0->unk2 == 0) + { + iVar3 = (r0->unk4.unk4 == 0x41); + if(iVar3 != 0) + { + if(sub_80023E4(0x8) != 0) + goto check; + } + else + check: + if(sub_8026F04(r0) != 3) + return 1; + } + return 0; +} + + +u32 sub_8026F04(struct PokemonStruct *r0) +{ + if(r0->heldItem.itemIndex == 0) + return 0; + else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) + return 1; + else if(sub_8026F38(r0)) + return 2; + else + return 3; +} + +bool8 sub_8026F38(struct PokemonStruct *r0) +{ + if(IsNotMoneyOrUsedTMItem(r0->heldItem.itemIndex)) + { + if(IsThrowableItem(r0->heldItem.itemIndex)) + { + if((gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] + r0->heldItem.numItems) > 999) + return FALSE; + } + else + { + if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] > 998) + return FALSE; + } + } + else + return FALSE; + return TRUE; +} + +void sub_8026FA4(void) +{ + switch(sub_8026F04(gUnknown_203B2B8->unk18)) + { + case 1: + PlaySound(0x14d); + sub_8091274(&gUnknown_203B2B8->unk14); + FillInventoryGaps(); + gUnknown_203B2B8->unk14.itemIndex = 0; + gUnknown_203B2B8->unk14.numItems = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14); + sub_8026074(0xA); + break; + case 2: + PlaySound(0x14d); + if(IsThrowableItem(gUnknown_203B2B8->unk14.itemIndex)) + { + gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += gUnknown_203B2B8->unk14.numItems; + } + else + { + gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += 1; + } + + gUnknown_203B2B8->unk14.itemIndex = 0; + gUnknown_203B2B8->unk14.numItems = 0; + GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14); + sub_8026074(0xB); + break; + case 0: + default: + sub_8026074(0x19); + break; + } +} diff --git a/src/items.c b/src/items.c index 86174b9..05033e4 100644 --- a/src/items.c +++ b/src/items.c @@ -339,7 +339,7 @@ void sub_8090E14(u8* ext_buffer, struct ItemSlot* slot, struct unkStruct_8090F58 ExpandPlaceholdersBuffer(buffer, gUnknown_8109778, gItemParametersData[slot->itemIndex].namePointer); } } - else if (slot->itemIndex == 105) { + else if (slot->itemIndex == ITEM_ID_POKE) { ExpandPlaceholdersBuffer(buffer, gUnknown_810977C, GetMoneyValue(slot)); } else { diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c index 3c5099d..9c50251 100644 --- a/src/kangaskhan_storage_2.c +++ b/src/kangaskhan_storage_2.c @@ -33,7 +33,6 @@ extern u8 sub_8012FD8(u32 *r0); extern void sub_8013114(u32 *, s32 *); extern void sub_801CBB8(); -extern bool8 IsNotMoneyOrUsedTMItem(u8); extern bool8 sub_801ADA0(u32); extern void sub_8099690(u32); extern u32 sub_8013BBC(u32 *); diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c index f1ce8ce..1c65da6 100644 --- a/src/kangaskhan_storage_3.c +++ b/src/kangaskhan_storage_3.c @@ -1,4 +1,5 @@ #include "global.h" +#include "item.h" #include "kangaskhan_storage.h" #include "team_inventory.h" @@ -24,7 +25,6 @@ extern void sub_801CBB8(void); extern void sub_8017F10(u32); extern void sub_8012EA4(u32 *, u32); -bool8 IsNotMoneyOrUsedTMItem(u8 id); extern u8 sub_801ADA0(s32); extern void sub_801A928(void); extern void sub_8099690(u32); diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 89cd19f..0dea887 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -8,6 +8,10 @@ #include "team_inventory.h" extern struct unkStruct_203B210 *gUnknown_203B210; +extern u8 gUnknown_80DB8E4[]; +extern u8 gUnknown_80DB8EC[]; +extern u8 gUnknown_80DB92C[]; +extern u8 gUnknown_80DB934[]; extern s32 sub_80144A4(s32 *); void UpdateKecleonStoreState(u32); @@ -18,11 +22,27 @@ extern void sub_8099690(u32); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, u32 *); extern u32 sub_8019EDC(u8); -extern void sub_801A2A8(u32); +extern u32 sub_801A2A8(u8); extern s32 sub_801A8AC(void); -extern u32 sub_801A6E8(u32); +extern u32 sub_801A6E8(u8); extern void sub_801A928(void); extern void DrawTeamMoneyBox(u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern s32 sub_8013800(void *, u32); +extern void ExpandPlaceholdersBuffer(u8 *, u8 *, ...); +extern void xxx_call_draw_string(s32 x, s32, u8 *, u32, u32); +extern void sub_801AE84(void); +extern void sub_8012D08(void *, u32); +extern void sub_801A998(void); +extern void sub_801A9E0(void); +extern void sub_801AEF8(void); +extern bool8 sub_801ADA0(u32); +extern u32 sub_801AEA8(void); + + +extern struct unkStruct_203B224 *gUnknown_203B224; struct unkStruct_203B214 {; @@ -47,6 +67,7 @@ struct unkStruct_203B214 }; extern struct unkStruct_203B214 *gUnknown_203B214; +extern struct unkStruct_203B214 *gUnknown_203B21C; struct ItemSlot_Alt { @@ -67,12 +88,22 @@ extern void sub_8013660(void *); extern struct UnkTextStruct2 gUnknown_80DB8CC; extern struct UnkTextStruct2 gUnknown_80DB8B4; +extern struct UnkTextStruct2 gUnknown_80DB8FC; +extern struct UnkTextStruct2 gUnknown_80DB944; +extern const struct UnkTextStruct2 gUnknown_80DB914; extern u16 gUnknown_203B218; +extern u16 gUnknown_203B220; +extern void sub_801A430(void); +extern void sub_801A4A4(void); extern void sub_8013984(u8 *); extern void sub_801A064(void); extern void sub_801A0D8(void); extern void AddMenuCursorSprite(void *); extern s32 xxx_count_inv_unk230(); +extern u8 sub_801A37C(void); +extern u16 gUnknown_203B228; +extern u16 gUnknown_203B22A; +extern struct UnkTextStruct2 gUnknown_80DB95C; void sub_8019B08(void) { @@ -368,3 +399,509 @@ void sub_801A010(void) gUnknown_203B214 = NULL; } } + +NAKED +void sub_801A064(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0801A0D4\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x20]\n" + "\tadds r0, 0x9C\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x1E]\n" + "\tadds r0, 0x9D\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9E\n" + "\tmovs r1, 0xA\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9F\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x1A\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x34]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x4A\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x34]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x4C\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x3C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0801A0D4: .4byte gUnknown_203B214"); +} + +void sub_801A0D8(void) +{ + struct HeldItem *heldItem; + s32 iVar2; + s32 y; + s32 iVar4; + u8 auStack204 [80]; + struct unkStruct_8090F58 local_7c; + u8 auStack112 [80]; + struct ItemSlot_Alt slot; + u8 temp_calc; + + // Needed for the shifts.. + u32 index_shift; + u32 numItems_shift; + + sub_8008C54(gUnknown_203B214->unk34); + sub_80073B8(gUnknown_203B214->unk34); + xxx_call_draw_string(gUnknown_203B214->unk1E * 8 + 10,0,gUnknown_80DB8E4, + gUnknown_203B214->unk34,0); + + for(iVar4 = 0; iVar4 < gUnknown_203B214->unk1A; iVar4++) + { + temp_calc = (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + iVar4; + heldItem = xxx_get_inv_unk230_at_809185C(temp_calc); + + index_shift = heldItem->itemIndex << 16; + slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | index_shift; + + numItems_shift = heldItem->numItems << 8; + slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | numItems_shift; + + slot.temp.full_bits = (slot.temp.full_bits & 0xffffff00) | (ITEM_FLAG_EXISTS | ITEM_FLAG_FOR_SALE); + + local_7c.unk0 = 1; + local_7c.unk4 = 0; + local_7c.unk6 = 0x58; + local_7c.unk8 = 1; + sub_8090E14(auStack204,(struct ItemSlot *)&slot,&local_7c); + iVar2 = GetStackBuyPrice((struct ItemSlot *)&slot); + if (iVar2 <= gTeamInventory_203B460->teamMoney) { + y = sub_8013800(gUnknown_203B214,iVar4); + xxx_call_draw_string(8,y,auStack204,gUnknown_203B214->unk34,0); + } + else { + ExpandPlaceholdersBuffer(auStack112,gUnknown_80DB8EC,auStack204); + y = sub_8013800(gUnknown_203B214,iVar4); + xxx_call_draw_string(8,y,auStack112,gUnknown_203B214->unk34,0); + } + } + sub_80073E0(gUnknown_203B214->unk34); +} + +u32 sub_801A20C(u32 r0) +{ + if(xxx_count_non_empty_inv_unk250_8091A48() == 0) + { + return 0; + } + else + { + gUnknown_203B21C = MemoryAlloc(sizeof(struct unkStruct_203B214), 0x8); + gUnknown_203B21C->unk34 = r0; + gUnknown_203B21C->unk38 = &gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34]; + sub_8006518(gUnknown_203B21C->unk3C); + gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34] = gUnknown_80DB914; + gUnknown_203B21C->unk38->unk14 = gUnknown_203B21C->unk9C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B21C->unk3C, 1, 1); + sub_8013818(gUnknown_203B21C, xxx_count_non_empty_inv_unk250_8091A48(), 0xA, r0); + gUnknown_203B21C->temp.unk18 = gUnknown_203B220; + sub_8013984((u8 *)gUnknown_203B21C); + sub_801A430(); + sub_801A4A4(); + return 1; + } +} + +u32 sub_801A2A8(u8 r0) +{ + struct ItemSlot_Alt slot; + struct HeldItem *return_var; + u32 r2; + u32 r3; + + if(r0 == 0) + { + sub_8013660(gUnknown_203B21C); + return 0; + } + else + { + switch(GetKeyPress(gUnknown_203B21C)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + return_var = xxx_get_unk250_at_8091A90(sub_801A37C()); + + // NOTE: needs seperate vars to match + r2 = return_var->itemIndex << 16; + slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | r2; + r3 = return_var->numItems << 8; + slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | r3; + + if(GetStackBuyPrice((struct ItemSlot *)&slot) > gTeamInventory_203B460->teamMoney) + { + PlayMenuSoundEffect(2); + } + else + { + PlayMenuSoundEffect(0); + } + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + if(sub_80138B8(gUnknown_203B21C, 1) != 0) + { + sub_801A430(); + sub_801A4A4(); + return 1; + } + else + { + return 0; + } + } + } +} + +u8 sub_801A37C(void) +{ + return (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + gUnknown_203B21C->temp.unk18_u8; +} + +void sub_801A398(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B21C->unk3C, 0, 0); + gUnknown_203B21C->unk22 = xxx_count_non_empty_inv_unk250_8091A48(); + sub_8013984((u8 *)gUnknown_203B21C); + sub_801A430(); + sub_801A4A4(); + if(r0_u8) + AddMenuCursorSprite(gUnknown_203B21C); +} + +void sub_801A3DC(void) +{ + if(gUnknown_203B21C != NULL) + { + gUnknown_203B220 = gUnknown_203B21C->temp.unk18; + gUnknown_203B21C->unk3C[gUnknown_203B21C->unk34] = gUnknown_80DB8FC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B21C->unk3C, 1, 1); + MemoryFree(gUnknown_203B21C); + gUnknown_203B21C = NULL; + } +} + +NAKED +void sub_801A430(void) +{ + asm_unified("\tpush {r4,lr}\n" + "\tldr r4, _0801A4A0\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x20]\n" + "\tadds r0, 0x9C\n" + "\tmovs r2, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldrh r1, [r0, 0x1E]\n" + "\tadds r0, 0x9D\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9E\n" + "\tmovs r1, 0xA\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9F\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0x1A\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 16\n" + "\tldr r2, [r4]\n" + "\tldr r3, [r2, 0x34]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x4A\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x34]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x4C\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x3C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0801A4A0: .4byte gUnknown_203B21C"); +} + +void sub_801A4A4(void) +{ + struct HeldItem *heldItem; + s32 iVar2; + s32 y; + s32 iVar4; + u8 auStack204 [80]; + struct unkStruct_8090F58 local_7c; + u8 auStack112 [80]; + struct ItemSlot_Alt slot; + u8 temp_calc; + + // Needed for the shifts.. + u32 index_shift; + u32 numItems_shift; + + sub_8008C54(gUnknown_203B21C->unk34); + sub_80073B8(gUnknown_203B21C->unk34); + xxx_call_draw_string(gUnknown_203B21C->unk1E * 8 + 10,0,gUnknown_80DB92C, + gUnknown_203B21C->unk34,0); + + for(iVar4 = 0; iVar4 < gUnknown_203B21C->unk1A; iVar4++) + { + temp_calc = (gUnknown_203B21C->unk1E * gUnknown_203B21C->unk1C) + iVar4; + heldItem = xxx_get_unk250_at_8091A90(temp_calc); + + index_shift = heldItem->itemIndex << 16; + slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | index_shift; + + numItems_shift = heldItem->numItems << 8; + slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | numItems_shift; + + slot.temp.full_bits = (slot.temp.full_bits & 0xffffff00) | (ITEM_FLAG_EXISTS | ITEM_FLAG_FOR_SALE); + + local_7c.unk0 = 1; + local_7c.unk4 = 0; + local_7c.unk6 = 0x58; + local_7c.unk8 = 1; + sub_8090E14(auStack204,(struct ItemSlot *)&slot,&local_7c); + iVar2 = GetStackBuyPrice((struct ItemSlot *)&slot); + if (iVar2 <= gTeamInventory_203B460->teamMoney) { + y = sub_8013800(gUnknown_203B21C,iVar4); + xxx_call_draw_string(8,y,auStack204,gUnknown_203B21C->unk34,0); + } + else { + ExpandPlaceholdersBuffer(auStack112,gUnknown_80DB934,auStack204); + y = sub_8013800(gUnknown_203B21C,iVar4); + xxx_call_draw_string(8,y,auStack112,gUnknown_203B21C->unk34,0); + } + } + sub_80073E0(gUnknown_203B21C->unk34); +} + +u32 sub_801A5D8(u32 param_1,int param_2,struct UnkTextStruct2_sub *param_3,u32 param_4) +{ + + if (GetNumberOfFilledInventorySlots() == 0) { + return 0; + } + else { + if (gUnknown_203B224 == NULL) { + gUnknown_203B224 = MemoryAlloc(sizeof(struct unkStruct_203B224),8); + } + gUnknown_203B224->unk0 = param_1; + FillInventoryGaps(); + sub_801AE84(); + + gUnknown_203B224->unk88 = param_2; + gUnknown_203B224->unk8C = &gUnknown_203B224->unk90[param_2]; + + sub_8006518(gUnknown_203B224->unk90); + gUnknown_203B224->unk90[gUnknown_203B224->unk88] = gUnknown_80DB95C; + + gUnknown_203B224->unk8C->unk14 = gUnknown_203B224->unkF0; + if (param_3 != NULL) { + gUnknown_203B224->unk90[gUnknown_203B224->unk88].unk08 = *param_3; + } + sub_8012D08(gUnknown_203B224->unk8C,param_4); + sub_8099690(1); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B224->unk90,1,1); + sub_8013818(&gUnknown_203B224->unk54,GetNumberOfFilledInventorySlots(),param_4,param_2); + gUnknown_203B224->unk6C = gUnknown_203B228; + gUnknown_203B224->unk72 = gUnknown_203B22A; + sub_8013984((u8 *)&gUnknown_203B224->unk54); + sub_801A998(); + sub_801A9E0(); + return 1; + } +} + +u32 sub_801A6E8(u8 param_1) +{ + s32 iVar5; + struct ItemSlot local_10; + + if (param_1 == '\0') { + sub_8013660(&gUnknown_203B224->unk54); + return 0; + } + switch(GetKeyPress(&gUnknown_203B224->unk54)) { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + switch(gUnknown_203B224->unk0) { + case 0: + case 1: + case 2: + if (gUnknown_203B224->unk4[sub_801A8AC()] != 0) + PlayMenuSoundEffect(2); + else + PlayMenuSoundEffect(0); + break; + case 3: + if ((sub_801AEA8() != 0) || (sub_801ADA0(sub_801A8AC()) != '\0')) + PlayMenuSoundEffect(0); + else + PlayMenuSoundEffect(2); + break; + case 4: + local_10 = gTeamInventory_203B460->teamItems[sub_801A8AC()]; + if (CanSellItem(local_10.itemIndex) && (GetStackSellPrice(&local_10) + gTeamInventory_203B460->teamMoney < 100000)) + PlayMenuSoundEffect(0); + else + PlayMenuSoundEffect(2); + break; + case 5: + PlayMenuSoundEffect(0); + break; + } + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + case 5: + case 6: + if (gUnknown_203B224->unk0 != 3) goto _0801A87C; + iVar5 = sub_801A8AC(); + if ((gUnknown_203B224->unk4[iVar5] != 0) || (sub_801ADA0(iVar5) != '\0')) { + PlayMenuSoundEffect(6); + gUnknown_203B224->unk4[iVar5] = gUnknown_203B224->unk4[iVar5] ^ 1; + sub_80138B8(&gUnknown_203B224->unk54,0); + sub_801A9E0(); + return 1; + } + else + { + PlayMenuSoundEffect(2); + goto _0801A87C; + } + case 3: + if (gUnknown_203B224->unk0 != 2) { + PlayMenuSoundEffect(5); + sub_801AEF8(); + sub_801A9E0(); + } + // NOTE: fallthrough needed here + default: +_0801A87C: + if (sub_80138B8(&gUnknown_203B224->unk54,1) != '\0') { + sub_801A998(); + sub_801A9E0(); + return 1; + } + else { + return 0; + } + break; + } +} + +s32 sub_801A8AC(void) +{ + return (gUnknown_203B224->unk72 * gUnknown_203B224->unk70) + gUnknown_203B224->unk6C; +} + +void sub_801A8D0(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; + + sub_8099690(1); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B224->unk90, 0, 0); + FillInventoryGaps(); + gUnknown_203B224->unk76 = GetNumberOfFilledInventorySlots(); + sub_8013984((u8 *)&gUnknown_203B224->unk54); + sub_801A998(); + sub_801A9E0(); + if(r0_u8) + AddMenuCursorSprite((u8 *)&gUnknown_203B224->unk54); +} + +void sub_801A928(void) +{ + if(gUnknown_203B224 != NULL) + { + gUnknown_203B228 = gUnknown_203B224->unk6C; + gUnknown_203B22A = gUnknown_203B224->unk72; + gUnknown_203B224->unk90[gUnknown_203B224->unk88] = gUnknown_80DB944; + sub_8099690(0); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B224->unk90, 1, 1); + MemoryFree(gUnknown_203B224); + gUnknown_203B224 = NULL; + } +} + +void sub_801A998(void) +{ + gUnknown_203B224->unkF0[0] = gUnknown_203B224->unk74; + gUnknown_203B224->unkF0[1] = gUnknown_203B224->unk72; + gUnknown_203B224->unkF0[2] = 0xB; + gUnknown_203B224->unkF0[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B224->unk90, 1, 1); +} diff --git a/src/kecleon_items_2.c b/src/kecleon_items_2.c new file mode 100644 index 0000000..e9107c9 --- /dev/null +++ b/src/kecleon_items_2.c @@ -0,0 +1,15 @@ +#include "global.h" +#include "file_system.h" +#include "memory.h" +#include "pokemon.h" +#include "input.h" +#include "item.h" +#include "kecleon_items.h" +#include "team_inventory.h" + +extern struct unkStruct_203B224 *gUnknown_203B224; + +struct unkStruct_203B224 * sub_801AF98(void) +{ + return gUnknown_203B224; +} diff --git a/src/load_screen.c b/src/load_screen.c index a4e260a..ab092cc 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -98,7 +98,7 @@ extern void sub_8013114(u32 *, u32 *); extern void sub_8095240(u32); extern void sub_80920D8(u8 *); -extern struct PokemonStruct *sub_808D33C(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern u8 sub_80023E4(u32); extern u8 *sub_8098FB4(); extern void ExpandPlaceholdersBuffer(u8 *buffer, const u8 *text, ...); @@ -259,7 +259,7 @@ void DrawLoadScreenText(void) xxx_call_draw_string(64,0,gLoadScreen->formattedTeamName,0,0); // Draw Player Name - playerInfo = sub_808D33C(); + playerInfo = GetPlayerPokemonStruct(); if (playerInfo == NULL) sub_80922B4(playerName, gNoNamePlaceholder, POKEMON_NAME_LENGTH); else diff --git a/src/luminous_cave.c b/src/luminous_cave.c new file mode 100644 index 0000000..a50e92c --- /dev/null +++ b/src/luminous_cave.c @@ -0,0 +1,850 @@ +#include "global.h" +#include "constants/bg_music.h" +#include "input.h" +#include "item.h" +#include "memory.h" +#include "menu.h" +#include "pokemon.h" +#include "random.h" +#include "text.h" +#include "team_inventory.h" + +struct unkStruct_203B2B0 +{ + // size: 0x174 + u8 unk0; + u8 fill1[0x3]; + u8 unk4; + u8 unk5; + u8 unk6; + u16 unk8; + /* 0xA */ s16 targetSpecies; // species # of the evolved pokemon (what we are evolving to) + struct PokemonStruct *pokeStruct; + /* 0x10 */ bool8 pokeRenamed; + /* 0x14 */ u32 evoItem1_InvIndex; // inventory index of item + /* 0x18 */ u32 evoItem2_InvIndex; // inventory index of item + struct ItemSlot unk1C; + u32 state; + u32 fallbackState; + u32 unk28; + u32 unk2C; + u32 unk30; + struct MenuItem unk34[8]; + u16 unk74[0x8]; + u32 unk84; + u8 fill88[0x104 - 0x88]; + struct OpenedFile *unk104; + u8 *unk108; + u16 unk10C; + u16 unk10E; + u8 unk110; + u8 unk111; + u8 unk112; + struct UnkTextStruct2 unk114[4]; +}; + +extern struct unkStruct_203B2B0 *gUnknown_203B2B0; +extern struct UnkTextStruct2 gUnknown_80DCA00; +extern struct UnkTextStruct2 gUnknown_80DC9E8; +extern u8 gPlayerName[]; +extern u8 gAvailablePokemonNames[]; +extern u8 gUnknown_202DFE8[]; +extern u8 gLuminousCaveSeekAwakening[]; +extern u8 gLuminousCaveEvolutionInfo[]; +extern u8 gLuminousCaveAskEvolution[]; +extern u8 gLuminousCaveYeShallReturn[]; +extern u8 gLuminousCaveGiveItem[]; +extern u8 gLuminousCaveGiveAnotherItem[]; +extern u8 gLuminousCaveLackWhatIsNeeded[]; +extern u8 gLuminousCaveOnlyOneItem[]; +extern u8 gLuminousCaveLetUsBegin[]; +extern u8 gLuminousCaveChangedAppearance[]; +extern u8 gLuminousCaveEvolved[]; +extern u8 gLuminousCaveGiveName[]; +extern u8 gLuminousCaveComeAlone[]; +extern u8 gLuminousCaveLackLevel[]; +extern u8 gLuminousCaveCantEvolveAnymore[]; +extern u8 gLuminousCaveLackFriendArea[]; +extern u8 gLuminousCaveLackRoom[]; +extern u8 gLuminousCaveLackIQ[]; +extern u8 gLuminousCaveLackItem[]; +extern u8 gLuminousCaveCantEvolveYet[]; +extern u8 gUnknown_80DCA18[]; +extern u8 *gUnknown_80D4970[]; +extern u8 *gUnknown_80D4934[]; +extern u8 gUnknown_80DCA24[]; +extern u8 gUnknown_80DCA2C[]; + +extern bool8 IsPokemonRenamed(struct PokemonStruct* pokemon); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern void UpdateLuminousCaveState(u32); + +extern void sub_8024E9C(void); +extern void sub_8024F00(void); +extern void sub_8024FD4(void); +extern void sub_80250EC(void); +extern void sub_80251CC(void); +extern void sub_8024F70(void); +extern void sub_8025058(void); +extern void sub_802515C(void); +extern void sub_80251E8(void); +extern void sub_8025204(void); +extern void LuminousCave_AdvancetoFallbackState(void); +extern void sub_8024804(void); +extern void UpdateLuminousCaveDialogue(void); + +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32); +void xxx_call_fade_out_bgm(u16 speed); +void sub_801199C(u16 songIndex); +void ClearItemSlotAt(u32 index); +void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed); +void sub_80977D0(void); +void PlaySound(u32); +void sub_8024CFC(void); +void sub_8025254(void); +void sub_8024D48(void); +extern void sub_801A5D8(u32, u32, u32, u32); +extern void sub_801A8D0(u32); +extern void sub_801A9E0(); +extern void sub_801B3C0(struct ItemSlot *); +extern void nullsub_104(); +void sub_8024DBC(void); +void sub_8024E30(void); +void sub_801AEE4(u32, u32); +extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32); +void sub_808F734(struct PokemonStruct *, s16); +void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); +u32 sub_801602C(u32 r0, u8 *name); +void sub_808D9AC(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum); +extern s32 sub_80144A4(s32 *); +extern u32 sub_801A6E8(u32); +extern s32 sub_801A8AC(void); +extern void sub_8099690(u32); +extern void sub_801A928(void); +extern void PlayMenuSoundEffect(u32); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, u32 *); +extern u32 sub_801B410(void); +extern void sub_801B450(void); +extern u32 sub_8016080(void); +extern void sub_80160D8(void); +extern void sub_808F468(struct PokemonStruct *, u8 *, u32); + +bool8 LuminousCave_HasOnly1Member(void); + +enum +{ + LUMINOUS_CAVE_ENTRY, + LUMINOUS_CAVE_ASK_EVOLVE, + LUMINOUS_CAVE_EVOLVE_INFO, + LUMINOUS_CAVE_SHALL_RETURN, + LUMINOUS_CAVE_GIVE_ITEM_1 = 5, + LUMINOUS_CAVE_GIVE_ITEM_2 = 10, + LUMINOUS_CAVE_LACK_WHAT_NEEDED = 0xF, + LUMINOUS_CAVE_ONLY_ONE_ITEM = 0x10, + LUMINOUS_CAVE_LET_US_BEGIN = 0x11, + LUMINOUS_CAVE_CHANGED_APPEARANCE = 0x12, + LUMINOUS_CAVE_EVOLVED = 0x13, + LUMINOUS_CAVE_PROMPT_NAME = 0x14, + LUMINOUS_CAVE_FINISH_NAME = 0x15, + LUMINOUS_CAVE_COME_ALONE = 0x16, + LUMINOUS_CAVE_LACK_LEVEL = 0x17, + LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE = 0x18, + LUMINOUS_CAVE_LACK_FRIEND_AREA = 0x19, + LUMINOUS_CAVE_LACK_ROOM = 0x1A, + LUMINOUS_CAVE_LACK_IQ = 0x1B, + LUMINOUS_CAVE_LACK_ITEM = 0x1C, + LUMINOUS_CAVE_CANT_EVOLVE_YET = 0x1D, +}; + +u32 sub_802465C(void) +{ + struct OpenedFile *faceFile; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B2B0 = MemoryAlloc(sizeof(struct unkStruct_203B2B0),8); + gUnknown_203B2B0->unk28 = 0; + gUnknown_203B2B0->unk2C = 0; + gUnknown_203B2B0->unk30 = 0; + gUnknown_203B2B0->pokeStruct = GetPlayerPokemonStruct(); + gUnknown_203B2B0->pokeRenamed = IsPokemonRenamed(gUnknown_203B2B0->pokeStruct); + gUnknown_203B2B0->unk0 = 0; + faceFile = GetDialogueSpriteDataPtr(SPECIES_GULPIN); + gUnknown_203B2B0->unk104 = faceFile; + gUnknown_203B2B0->unk108 = faceFile->data; + gUnknown_203B2B0->unk110 = 0; + gUnknown_203B2B0->unk111 = 0; + gUnknown_203B2B0->unk112 = 0; + gUnknown_203B2B0->unk10C = 2; + gUnknown_203B2B0->unk10E = 8; + UpdateLuminousCaveState(LUMINOUS_CAVE_ENTRY); + return 1; +} + +u32 sub_80246F0(void) +{ + switch(gUnknown_203B2B0->state) { + case LUMINOUS_CAVE_ENTRY: + case LUMINOUS_CAVE_ASK_EVOLVE: + sub_8024E9C(); + break; + case LUMINOUS_CAVE_GIVE_ITEM_1: + sub_8024F00(); + break; + case 6: + case 7: + sub_8024FD4(); + break; + case 8: + sub_80250EC(); + break; + case 9: + sub_80251CC(); + break; + case LUMINOUS_CAVE_GIVE_ITEM_2: + sub_8024F70(); + break; + case 0xb: + case 0xc: + sub_8025058(); + break; + case 0xd: + sub_802515C(); + break; + case 0xe: + sub_80251E8(); + break; + case LUMINOUS_CAVE_FINISH_NAME: + sub_8025204(); + break; + case 4: + return 3; + default: + LuminousCave_AdvancetoFallbackState(); + break; + } + return 0; +} + +u8 sub_80247B4(void) +{ + return gUnknown_203B2B0->unk0; +} + +void CleanLuminousCave(void) +{ + if(gUnknown_203B2B0 != NULL) + { + CloseFile(gUnknown_203B2B0->unk104); + MemoryFree(gUnknown_203B2B0); + gUnknown_203B2B0 = NULL; + } +} + +void UpdateLuminousCaveState(u32 newState) +{ + gUnknown_203B2B0->state = newState; + sub_8024804(); + UpdateLuminousCaveDialogue(); +} + +void sub_8024804(void) +{ + s32 iVar4; + + sub_8006518(gUnknown_203B2B0->unk114); + switch(gUnknown_203B2B0->state) { + case 8: + case 0xD: + gUnknown_203B2B0->unk114[2] = gUnknown_80DCA00; + break; + case LUMINOUS_CAVE_LET_US_BEGIN: + case LUMINOUS_CAVE_CHANGED_APPEARANCE: + case LUMINOUS_CAVE_EVOLVED: + case LUMINOUS_CAVE_COME_ALONE: + case LUMINOUS_CAVE_LACK_LEVEL: + case LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE: + case LUMINOUS_CAVE_LACK_FRIEND_AREA: + case LUMINOUS_CAVE_LACK_ROOM: + case LUMINOUS_CAVE_LACK_IQ: + case LUMINOUS_CAVE_LACK_ITEM: + break; + default: + for(iVar4 = 0; iVar4 < 4; iVar4++) + { + gUnknown_203B2B0->unk114[iVar4] = gUnknown_80DC9E8; + } + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2B0->unk114, 1, 1); +} + +void UpdateLuminousCaveDialogue(void) +{ + char *monName; + + switch(gUnknown_203B2B0->state) { + case LUMINOUS_CAVE_ENTRY: + if (LuminousCave_HasOnly1Member()) { + gUnknown_203B2B0->unk28 = 3; + } + else { + gUnknown_203B2B0->unk28 = 1; + } + sub_8024CFC(); + sub_8014248(gLuminousCaveSeekAwakening,0,gUnknown_203B2B0->unk28,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5); + break; + case LUMINOUS_CAVE_ASK_EVOLVE: + sub_8024CFC(); + sub_8014248(gLuminousCaveAskEvolution,0,gUnknown_203B2B0->unk28,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5); + break; + case LUMINOUS_CAVE_EVOLVE_INFO: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_ASK_EVOLVE; + sub_80141B4(gLuminousCaveEvolutionInfo,0,0,0x105); + break; + case LUMINOUS_CAVE_SHALL_RETURN: + gUnknown_203B2B0->fallbackState = 4; + xxx_call_fade_in_new_bgm(MUS_LOADING_SCREEN,0x3c); + sub_80141B4(gLuminousCaveYeShallReturn,0,0,0x305); + break; + + case LUMINOUS_CAVE_GIVE_ITEM_1: + sub_8024D48(); + sub_8014248(gLuminousCaveGiveItem,0,gUnknown_203B2B0->unk2C,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5); + break; + case 6: + sub_801A5D8(2,3,0,10); + break; + case 7: + sub_801A8D0(1); + break; + case LUMINOUS_CAVE_GIVE_ITEM_2: + sub_8024DBC(); + sub_8014248(gLuminousCaveGiveAnotherItem,0,gUnknown_203B2B0->unk2C,gUnknown_203B2B0->unk34,gUnknown_203B2B0->unk74,4,0,0,5); + break; + case 0xb: + sub_801A5D8(2,3,0,10); + sub_801AEE4(gUnknown_203B2B0->evoItem1_InvIndex,1); + sub_801A9E0(); + break; + case 0xc: + sub_801A8D0(1); + sub_801AEE4(gUnknown_203B2B0->evoItem1_InvIndex,1); + sub_801A9E0(); + break; + case 8: + case 0xd: + sub_801A9E0(); + sub_8024E30(); + sub_8012D60(&gUnknown_203B2B0->unk84,gUnknown_203B2B0->unk34,0,gUnknown_203B2B0->unk74, + gUnknown_203B2B0->unk30,2); + break; + case 9: + case 0xe: + sub_801B3C0(&gUnknown_203B2B0->unk1C); + break; + case LUMINOUS_CAVE_LACK_WHAT_NEEDED: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_GIVE_ITEM_1; + sub_80141B4(gLuminousCaveLackWhatIsNeeded,0,0,0x105); + break; + case LUMINOUS_CAVE_ONLY_ONE_ITEM: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_GIVE_ITEM_2; + sub_80141B4(gLuminousCaveOnlyOneItem,0,0,0x105); + break; + case LUMINOUS_CAVE_LET_US_BEGIN: + sub_8025254(); + + if((gUnknown_203B2B0->unk8 & 1) != 0) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CHANGED_APPEARANCE; + else if(gUnknown_203B2B0->unk8 == 4) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE; + else if(gUnknown_203B2B0->unk8 == 2) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_LEVEL; + else if(gUnknown_203B2B0->unk8 == 0x10) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_IQ; + else if(gUnknown_203B2B0->unk8 == 0x20) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_FRIEND_AREA; + else if(gUnknown_203B2B0->unk8 == 0x40) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ROOM; + else if(gUnknown_203B2B0->unk8 == 8) + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ITEM; + else + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_YET; + xxx_call_fade_out_bgm(0x3c); + sub_80141B4(gLuminousCaveLetUsBegin,0,0,0x105); + break; + case LUMINOUS_CAVE_CHANGED_APPEARANCE: + sub_808D9AC(gPlayerName,gUnknown_203B2B0->pokeStruct,5); + PlaySound(0x1ff); + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_EVOLVED; + sub_80141B4(gLuminousCaveChangedAppearance,0,0,0x105); + break; + case LUMINOUS_CAVE_EVOLVED: + monName = GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum); + strcpy(gAvailablePokemonNames,monName); + monName = GetMonSpecies(gUnknown_203B2B0->targetSpecies); + strcpy(gAvailablePokemonNames + 0x50,monName); + gUnknown_203B2B0->unk0 = 1; + sub_80977D0(); + sub_808F734(gUnknown_203B2B0->pokeStruct,gUnknown_203B2B0->targetSpecies); + nullsub_104(); + gUnknown_203B2B0->pokeStruct = GetPlayerPokemonStruct(); + if (gUnknown_203B2B0->evoItem1_InvIndex != INVENTORY_SIZE) { + ClearItemSlotAt(gUnknown_203B2B0->evoItem1_InvIndex); + } + if (gUnknown_203B2B0->evoItem2_InvIndex != INVENTORY_SIZE) { + ClearItemSlotAt(gUnknown_203B2B0->evoItem2_InvIndex); + } + FillInventoryGaps(); + sub_801199C(0x1ff); + PlaySound(0xd2); + if (gUnknown_203B2B0->pokeRenamed) { + BoundedCopyStringtoBuffer(gUnknown_203B2B0->pokeStruct->name,GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum),POKEMON_NAME_LENGTH); + } + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveEvolved,0,0,0x105); + break; + case LUMINOUS_CAVE_COME_ALONE: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveComeAlone,0,0,0x105); + break; + case LUMINOUS_CAVE_LACK_LEVEL: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveLackLevel,0,0,0x105); + break; + case LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveCantEvolveAnymore,0,0,0x105); + break; + case LUMINOUS_CAVE_LACK_FRIEND_AREA: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveLackFriendArea,0,0,0x105); + break; + case LUMINOUS_CAVE_LACK_ROOM: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveLackRoom,0,0,0x105); + break; + case LUMINOUS_CAVE_LACK_IQ: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveLackIQ,0,0,0x105); + break; + case LUMINOUS_CAVE_LACK_ITEM: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveLackItem,0,0,0x105); + break; + case LUMINOUS_CAVE_CANT_EVOLVE_YET: + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_SHALL_RETURN; + sub_80141B4(gLuminousCaveCantEvolveYet,0,0,0x105); + break; + case LUMINOUS_CAVE_PROMPT_NAME: + xxx_call_fade_in_new_bgm(8,0x3c); + gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_FINISH_NAME; + sub_80141B4(gLuminousCaveGiveName,0,0,0x105); + break; + case LUMINOUS_CAVE_FINISH_NAME: + if (gUnknown_203B2B0->pokeRenamed) { + BoundedCopyStringtoBuffer(gUnknown_203B2B0->pokeStruct->name,GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum),POKEMON_NAME_LENGTH); + } + sub_801602C(0,gUnknown_203B2B0->pokeStruct->name); + break; + default: + break; + } +} + +void sub_8024CFC(void) +{ + u8 *nullString; + struct unkStruct_203B2B0 *preload; + u32 defaultAction; + + MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74)); + preload = gUnknown_203B2B0; + nullString = NULL; + preload->unk34[0].text = gUnknown_80DCA18; + preload->unk34[0].menuAction = 3; + defaultAction = 1; + preload->unk34[1].text = *gUnknown_80D4970; + preload->unk34[1].menuAction = 2; + preload->unk34[2].text = *gUnknown_80D4934; + preload->unk34[2].menuAction = defaultAction; + preload->unk34[3].text = nullString; + preload->unk34[3].menuAction = defaultAction; +} + +void sub_8024D48(void) +{ + u8 *nullString; + struct unkStruct_203B2B0 *preload; + u32 defaultAction; + s32 iVar4; + s32 loopMax; + + MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74)); + preload = gUnknown_203B2B0; + nullString = NULL; + preload->unk34[0].text = gUnknown_80DCA24; + preload->unk34[0].menuAction = 4; + defaultAction = 1; + preload->unk34[1].text = gUnknown_80DCA2C; + preload->unk34[1].menuAction = 5; + preload->unk34[2].text = *gUnknown_80D4934; + preload->unk34[2].menuAction = defaultAction; + + loopMax = 3; + + preload->unk34[3].text = nullString; + preload->unk34[3].menuAction = defaultAction; + + for(iVar4 = 0; iVar4 < loopMax; iVar4++) + { + if(gUnknown_203B2B0->unk74[iVar4] == 0) + { + if(gUnknown_203B2B0->unk34[iVar4].menuAction == gUnknown_203B2B0->unk2C) + return; + } + } + + gUnknown_203B2B0->unk2C = 4; +} + +void sub_8024DBC(void) +{ + u8 *nullString; + struct unkStruct_203B2B0 *preload; + u32 defaultAction; + s32 iVar4; + s32 loopMax; + + MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74)); + preload = gUnknown_203B2B0; + nullString = NULL; + preload->unk34[0].text = gUnknown_80DCA24; + preload->unk34[0].menuAction = 4; + defaultAction = 1; + preload->unk34[1].text = gUnknown_80DCA2C; + preload->unk34[1].menuAction = 5; + preload->unk34[2].text = *gUnknown_80D4934; + preload->unk34[2].menuAction = defaultAction; + + loopMax = 3; + + preload->unk34[3].text = nullString; + preload->unk34[3].menuAction = defaultAction; + + for(iVar4 = 0; iVar4 < loopMax; iVar4++) + { + if(gUnknown_203B2B0->unk74[iVar4] == 0) + { + if(gUnknown_203B2B0->unk34[iVar4].menuAction == gUnknown_203B2B0->unk2C) + return; + } + } + + gUnknown_203B2B0->unk2C = 4; +} + +void sub_8024E30(void) +{ + u8 *nullString; + struct unkStruct_203B2B0 *preload; + u32 defaultAction; + s32 iVar4; + s32 loopMax; + + MemoryFill16(gUnknown_203B2B0->unk74, 0, sizeof(gUnknown_203B2B0->unk74)); + preload = gUnknown_203B2B0; + nullString = NULL; + preload->unk34[0].text = gUnknown_80DCA2C; + preload->unk34[0].menuAction = 5; + defaultAction = 1; + preload->unk34[1].text = *gUnknown_80D4970; + preload->unk34[1].menuAction = 2; + + loopMax = 2; + + preload->unk34[2].text = nullString; + preload->unk34[2].menuAction = defaultAction; + + for(iVar4 = 0; iVar4 < loopMax; iVar4++) + { + if(gUnknown_203B2B0->unk74[iVar4] == 0) + { + if(gUnknown_203B2B0->unk34[iVar4].menuAction == gUnknown_203B2B0->unk30) + return; + } + } + + gUnknown_203B2B0->unk30 = 5; +} + +void sub_8024E9C(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + if(menuAction != 1) gUnknown_203B2B0->unk28 = menuAction; + switch(menuAction) + { + case 3: + if(LuminousCave_HasOnly1Member()) + UpdateLuminousCaveState(LUMINOUS_CAVE_GIVE_ITEM_1); + else + UpdateLuminousCaveState(LUMINOUS_CAVE_COME_ALONE); + break; + case 2: + UpdateLuminousCaveState(LUMINOUS_CAVE_EVOLVE_INFO); + break; + case 1: + UpdateLuminousCaveState(LUMINOUS_CAVE_SHALL_RETURN); + break; + } + } +} + +void sub_8024F00(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + if(menuAction != 1) gUnknown_203B2B0->unk2C = menuAction; + switch(menuAction) + { + case 4: + gUnknown_203B2B0->evoItem1_InvIndex = INVENTORY_SIZE; + gUnknown_203B2B0->evoItem2_InvIndex = INVENTORY_SIZE; + UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN); + break; + case 5: + if(GetNumberOfFilledInventorySlots() == 0) + UpdateLuminousCaveState(LUMINOUS_CAVE_LACK_WHAT_NEEDED); + else + UpdateLuminousCaveState(0x6); + break; + case 1: + UpdateLuminousCaveState(LUMINOUS_CAVE_ASK_EVOLVE); + break; + } + } +} + +void sub_8024F70(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + if(menuAction != 1) gUnknown_203B2B0->unk2C = menuAction; + switch(menuAction) + { + case 4: + UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN); + break; + case 5: + if(GetNumberOfFilledInventorySlots() < 2) + UpdateLuminousCaveState(LUMINOUS_CAVE_ONLY_ONE_ITEM); + else + UpdateLuminousCaveState(0xB); + break; + case 1: + UpdateLuminousCaveState(LUMINOUS_CAVE_ASK_EVOLVE); + break; + } + } +} + +void sub_8024FD4(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + gUnknown_203B2B0->evoItem1_InvIndex = sub_801A8AC(); + gUnknown_203B2B0->evoItem2_InvIndex = INVENTORY_SIZE; + gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem1_InvIndex]; + UpdateLuminousCaveState(8); + break; + case 4: + gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[sub_801A8AC()]; + sub_8099690(0); + UpdateLuminousCaveState(9); + break; + case 2: + sub_801A928(); + UpdateLuminousCaveState(LUMINOUS_CAVE_GIVE_ITEM_1); + break; + } +} + +void sub_8025058(void) +{ + switch(sub_801A6E8(1)) + { + case 3: + if(gUnknown_203B2B0->evoItem1_InvIndex != sub_801A8AC()) + { + gUnknown_203B2B0->evoItem2_InvIndex = sub_801A8AC(); + gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem2_InvIndex]; + UpdateLuminousCaveState(0xD); + } + else + PlayMenuSoundEffect(2); + break; + case 4: + gUnknown_203B2B0->unk1C = gTeamInventory_203B460->teamItems[sub_801A8AC()]; + sub_8099690(0); + UpdateLuminousCaveState(0xE); + break; + case 2: + sub_801A928(); + UpdateLuminousCaveState(0xA); + break; + } +} + +void sub_80250EC(void) +{ + s32 menuAction; + menuAction = 0; + sub_801A6E8(0); + + if(!sub_8012FD8(&gUnknown_203B2B0->unk84)) + { + sub_8013114(&gUnknown_203B2B0->unk84, &menuAction); + if(menuAction != 1) gUnknown_203B2B0->unk30 = menuAction; + } + switch(menuAction) + { + case 5: + sub_801A928(); + UpdateLuminousCaveState(0xA); + break; + case 2: + sub_8099690(0); + UpdateLuminousCaveState(0x9); + break; + case 1: + UpdateLuminousCaveState(0x7); + break; + } +} + +void sub_802515C(void) +{ + s32 menuAction; + menuAction = 0; + sub_801A6E8(0); + + if(!sub_8012FD8(&gUnknown_203B2B0->unk84)) + { + sub_8013114(&gUnknown_203B2B0->unk84, &menuAction); + if(menuAction != 1) gUnknown_203B2B0->unk30 = menuAction; + } + switch(menuAction) + { + case 5: + sub_801A928(); + UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN); + break; + case 2: + sub_8099690(0); + UpdateLuminousCaveState(0xE); + break; + case 1: + UpdateLuminousCaveState(0xC); + break; + } +} + +void sub_80251CC(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + UpdateLuminousCaveState(0x7); + break; + case 0: + case 1: + break; + } +} + +void sub_80251E8(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + UpdateLuminousCaveState(0xC); + break; + case 0: + case 1: + break; + } +} + +void sub_8025204(void) +{ + switch(sub_8016080()) + { + case 3: + sub_80160D8(); + gUnknown_203B2B0->pokeRenamed = IsPokemonRenamed(gUnknown_203B2B0->pokeStruct); + UpdateLuminousCaveState(LUMINOUS_CAVE_SHALL_RETURN); + break; + default: + break; + } +} + +void LuminousCave_AdvancetoFallbackState(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateLuminousCaveState(gUnknown_203B2B0->fallbackState); + } +} + +void sub_8025254(void) +{ + if(gUnknown_203B2B0->evoItem1_InvIndex == INVENTORY_SIZE) + gUnknown_203B2B0->unk4 = 0; + else + { + gUnknown_203B2B0->unk4 = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem1_InvIndex].itemIndex; + } + if(gUnknown_203B2B0->evoItem2_InvIndex == INVENTORY_SIZE) + gUnknown_203B2B0->unk5 = 0; + else + { + gUnknown_203B2B0->unk5 = gTeamInventory_203B460->teamItems[gUnknown_203B2B0->evoItem2_InvIndex].itemIndex; + } + + gUnknown_203B2B0->unk6 = RandomCapped(0xFF); + sub_808F468(gUnknown_203B2B0->pokeStruct, &gUnknown_203B2B0->unk4, 1); +} + +bool8 LuminousCave_HasOnly1Member(void) +{ + s32 r3; + s32 iVar3; // loop index + struct PokemonStruct *preload; + + preload = &gRecruitedPokemonRef->pokemon[0]; + r3 = 0; + for(iVar3 = 0; iVar3 < NUM_SPECIES; iVar3++, preload++) + { + if((preload->unk0 >> 1) & 1) + r3++; + } + + if(r3 == 1) + return TRUE; + else + return FALSE; +} diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 501ab15..74a3ca5 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -419,7 +419,7 @@ extern void sub_8031E10(); extern void sub_802F2C0(); extern u32 sub_80144A4(s32 *r0); extern void SetThankYouMailMenuState(u32); -extern struct PokemonStruct *sub_808D33C(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_80922B4(u8 *, u8 *, u32); @@ -1487,7 +1487,7 @@ void UpdateThankYouMailText(void) switch(gUnknown_203B2C4->state) { case 5: - pokeStruct = sub_808D33C(); + pokeStruct = GetPlayerPokemonStruct(); sub_80922B4(auStack180,pokeStruct->name, POKEMON_NAME_LENGTH); ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF250,auStack180); sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d); @@ -1646,7 +1646,7 @@ void UpdateThankYouMailText(void) sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc); break; case THANK_YOU_MAIL_COMMS_CLEANUP: - pokeStruct2 = sub_808D33C(); + pokeStruct2 = GetPlayerPokemonStruct(); sub_80922B4(auStack100, pokeStruct2->name, POKEMON_NAME_LENGTH); ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF63C,auStack100); sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d); diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index f485246..9c54575 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -136,7 +136,7 @@ extern void sub_8013114(u32 *, s32 *); extern u32 sub_802DEE0(void); extern void sub_802DF24(void); extern void sub_808DA34(u8 *buffer, struct PokemonStruct *pokemon); -extern struct PokemonStruct *sub_808D33C(void); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern void sub_802F6FC(void); extern void sub_802F718(void); extern u8 sub_80138B8(u32 *, u32); @@ -368,7 +368,7 @@ u32 sub_802F204(struct unkStruct_802F204 *r0, u8 r1) // NOTE: dumb var to get correct ordering preload = gUnknown_203B310; strcpy(gUnknown_202E5D8, preload->unk10->clientName); - sub_808DA34(gAvailablePokemonNames, sub_808D33C()); + sub_808DA34(gAvailablePokemonNames, GetPlayerPokemonStruct()); gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->unk14); gUnknown_203B310->faceData = NULL; |