From 23c23f5d3384e1bbd562b5c559e31ca4c82e71b4 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 4 Aug 2023 14:34:06 -0700 Subject: [PATCH 01/14] decomp some more pokemon_3 thanks to jiang --- asm/pokemon_3.s | 442 --------------------------- include/constants/evolution_status.h | 13 + include/luminous_cave.h | 36 +++ include/pokemon.h | 4 +- include/pokemon_3.h | 11 + src/dungeon_ai_leader.c | 1 + src/luminous_cave.c | 85 ++---- src/pokemon_1.c | 75 +++++ src/pokemon_3.c | 218 ++++++++++++- 9 files changed, 377 insertions(+), 508 deletions(-) create mode 100644 include/constants/evolution_status.h create mode 100644 include/luminous_cave.h create mode 100644 src/pokemon_1.c diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index c625c3bf3..55354d1ca 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -5,448 +5,6 @@ .text - thumb_func_start sub_808F468 -sub_808F468: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - mov r8, r0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x14] - movs r0, 0 - strh r0, [r4, 0x4] - movs r0, 0x1 - str r0, [sp, 0x18] - add r7, sp, 0xC -_0808F488: - ldr r1, [sp, 0x18] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x41 - bne _0808F49C - movs r0, 0x41 - adds r1, r7, 0 - bl GetPokemonEvolveConditions - b _0808F4A2 -_0808F49C: - adds r1, r7, 0 - bl GetPokemonEvolveConditions -_0808F4A2: - ldrh r0, [r7, 0x2] - cmp r0, 0 - beq _0808F4B6 - mov r2, r8 - movs r3, 0x8 - ldrsh r1, [r2, r3] - movs r2, 0 - ldrsh r0, [r7, r2] - cmp r1, r0 - beq _0808F4C2 -_0808F4B6: - ldr r3, [sp, 0x18] - adds r3, 0x1 - str r3, [sp, 0x18] - ldr r0, _0808F4D4 - cmp r3, r0 - ble _0808F488 -_0808F4C2: - movs r0, 0xD4 - lsls r0, 1 - ldr r1, [sp, 0x18] - cmp r1, r0 - bne _0808F4D8 - movs r0, 0x4 - strh r0, [r4, 0x4] - b _0808F6EC - .align 2, 0 -_0808F4D4: .4byte 0x000001a7 -_0808F4D8: - movs r2, 0x1 - str r2, [sp, 0x18] - movs r3, 0x8 - mov r10, r3 -_0808F4E0: - movs r0, 0 - mov r9, r0 - ldr r1, [sp, 0x18] - lsls r0, r1, 16 - asrs r0, 16 - str r0, [sp, 0x1C] - adds r1, r7, 0 - bl GetPokemonEvolveConditions - ldrh r0, [r7, 0x2] - cmp r0, 0 - bne _0808F4FA - b _0808F6DE -_0808F4FA: - mov r2, r8 - movs r3, 0x8 - ldrsh r1, [r2, r3] - movs r2, 0 - ldrsh r0, [r7, r2] - cmp r1, r0 - beq _0808F50A - b _0808F6DE -_0808F50A: - ldr r0, [sp, 0x1C] - bl GetFriendArea - lsls r0, 24 - lsrs r5, r0, 24 - mov r3, r8 - movs r1, 0x8 - ldrsh r0, [r3, r1] - bl GetFriendArea - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0 - mov r1, sp - movs r2, 0 - movs r3, 0 - bl sub_8092638 - mov r0, sp - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _0808F544 - ldrh r0, [r4, 0x4] - movs r1, 0x20 - orrs r0, r1 - strh r0, [r4, 0x4] - movs r2, 0x1 - mov r9, r2 - b _0808F566 -_0808F544: - mov r0, sp - movs r3, 0x2 - ldrsh r1, [r0, r3] - cmp r5, r6 - bne _0808F550 - subs r1, 0x1 -_0808F550: - mov r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, r1 - bgt _0808F566 - ldrh r0, [r4, 0x4] - movs r1, 0x40 - orrs r0, r1 - strh r0, [r4, 0x4] - movs r3, 0x1 - mov r9, r3 -_0808F566: - ldrh r0, [r7, 0x2] - cmp r0, 0x1 - bne _0808F588 - ldrh r2, [r4, 0x4] - ands r0, r2 - cmp r0, 0 - beq _0808F576 - b _0808F6DE -_0808F576: - mov r0, r8 - ldrb r1, [r0, 0x3] - movs r3, 0x4 - ldrsh r0, [r7, r3] - cmp r1, r0 - bge _0808F5E6 - movs r0, 0x2 - orrs r0, r2 - b _0808F5C8 -_0808F588: - cmp r0, 0x2 - bne _0808F5A8 - mov r2, r8 - movs r3, 0x14 - ldrsh r1, [r2, r3] - movs r2, 0x4 - ldrsh r0, [r7, r2] - cmp r1, r0 - bge _0808F5E6 - ldrh r0, [r4, 0x4] - movs r1, 0x10 - orrs r0, r1 - strh r0, [r4, 0x4] - movs r3, 0x1 - mov r9, r3 - b _0808F5E6 -_0808F5A8: - cmp r0, 0x3 - bne _0808F5E6 - ldr r0, [sp, 0x14] - cmp r0, 0 - beq _0808F5D0 - ldrb r0, [r4] - movs r2, 0x4 - ldrsh r1, [r7, r2] - cmp r0, r1 - beq _0808F5E6 - ldrb r0, [r4, 0x1] - cmp r0, r1 - beq _0808F5E6 - ldrh r0, [r4, 0x4] - mov r3, r10 - orrs r0, r3 -_0808F5C8: - strh r0, [r4, 0x4] - movs r0, 0x1 - mov r9, r0 - b _0808F5E6 -_0808F5D0: - ldrb r0, [r7, 0x4] - bl FindItemInInventory - cmp r0, 0 - bge _0808F5E6 - ldrh r0, [r4, 0x4] - mov r1, r10 - orrs r0, r1 - strh r0, [r4, 0x4] - movs r2, 0x1 - mov r9, r2 -_0808F5E6: - ldrh r0, [r7, 0x6] - cmp r0, 0x4 - bne _0808F604 - ldr r3, [sp, 0x14] - cmp r3, 0 - beq _0808F600 - ldrb r0, [r4] - cmp r0, 0x76 - beq _0808F6CA - ldrb r0, [r4, 0x1] - cmp r0, 0x76 - beq _0808F6CA - b _0808F666 -_0808F600: - movs r0, 0x76 - b _0808F672 -_0808F604: - cmp r0, 0x5 - bne _0808F614 - mov r3, r8 - ldrb r0, [r3, 0x18] - ldrb r1, [r3, 0x1A] - cmp r0, r1 - bhi _0808F6CA - b _0808F6DE -_0808F614: - cmp r0, 0x6 - bne _0808F624 - mov r2, r8 - ldrb r0, [r2, 0x18] - ldrb r3, [r2, 0x1A] - cmp r0, r3 - bcc _0808F6CA - b _0808F6DE -_0808F624: - cmp r0, 0x7 - bne _0808F634 - mov r1, r8 - ldrb r0, [r1, 0x18] - ldrb r2, [r1, 0x1A] - cmp r0, r2 - beq _0808F6CA - b _0808F6DE -_0808F634: - cmp r0, 0x8 - bne _0808F650 - ldr r3, [sp, 0x14] - cmp r3, 0 - beq _0808F64C - ldrb r0, [r4] - cmp r0, 0x30 - beq _0808F6CA - ldrb r0, [r4, 0x1] - cmp r0, 0x30 - beq _0808F6CA - b _0808F666 -_0808F64C: - movs r0, 0x30 - b _0808F672 -_0808F650: - cmp r0, 0x9 - bne _0808F684 - ldr r3, [sp, 0x14] - cmp r3, 0 - beq _0808F670 - ldrb r0, [r4] - cmp r0, 0x31 - beq _0808F6CA - ldrb r0, [r4, 0x1] - cmp r0, 0x31 - beq _0808F6CA -_0808F666: - ldrh r0, [r4, 0x4] - mov r1, r10 - orrs r0, r1 - strh r0, [r4, 0x4] - b _0808F6DE -_0808F670: - movs r0, 0x31 -_0808F672: - bl FindItemInInventory - cmp r0, 0 - bge _0808F6CA - ldrh r0, [r4, 0x4] - mov r2, r10 - orrs r0, r2 - strh r0, [r4, 0x4] - b _0808F6DE -_0808F684: - cmp r0, 0xB - bne _0808F694 - ldrb r1, [r4, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0808F6CA - b _0808F6DE -_0808F694: - cmp r0, 0xC - bne _0808F6A4 - ldrb r1, [r4, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0808F6CA - b _0808F6DE -_0808F6A4: - cmp r0, 0xA - bne _0808F6CA - ldr r3, [sp, 0x14] - cmp r3, 0 - beq _0808F6BC - ldrb r0, [r4] - cmp r0, 0x2F - beq _0808F6CA - ldrb r0, [r4, 0x1] - cmp r0, 0x2F - beq _0808F6CA - b _0808F6DE -_0808F6BC: - movs r0, 0x2F - bl FindItemInInventory - cmp r0, 0 - bge _0808F6CA - movs r0, 0x1 - mov r9, r0 -_0808F6CA: - mov r1, r9 - cmp r1, 0 - bne _0808F6DE - ldrh r0, [r4, 0x4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4, 0x4] - mov r2, sp - ldrh r2, [r2, 0x1C] - strh r2, [r4, 0x6] -_0808F6DE: - ldr r3, [sp, 0x18] - adds r3, 0x1 - str r3, [sp, 0x18] - ldr r0, _0808F6FC - cmp r3, r0 - bgt _0808F6EC - b _0808F4E0 -_0808F6EC: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808F6FC: .4byte 0x000001a7 - thumb_func_end sub_808F468 - - thumb_func_start sub_808F700 -sub_808F700: - push {r4,lr} - sub sp, 0x8 - mov r4, sp - mov r1, sp - movs r2, 0 - bl sub_808F468 - ldrh r1, [r4, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0808F71C - movs r0, 0x1 - b _0808F72A -_0808F71C: - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _0808F728 - movs r0, 0 - b _0808F72A -_0808F728: - movs r0, 0x2 -_0808F72A: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_808F700 - - thumb_func_start sub_808F734 -sub_808F734: - push {r4-r7,lr} - sub sp, 0x58 - adds r5, r0, 0 - lsls r4, r1, 16 - asrs r4, 16 - movs r6, 0 - mov r0, sp - adds r1, r5, 0 - movs r2, 0x58 - bl memcpy - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_808F798 - adds r7, r0, 0 - movs r0, 0x9E - lsls r0, 1 - cmp r4, r0 - bne _0808F782 - mov r0, sp - strb r6, [r0, 0x2] - add r0, sp, 0x28 - strb r6, [r0] - add r4, sp, 0x4C - ldr r5, _0808F794 - adds r0, r5, 0 - bl GetMonSpecies - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0xA - bl BoundedCopyStringtoBuffer - mov r0, sp - adds r1, r5, 0 - bl sub_808F798 - adds r6, r0, 0 -_0808F782: - cmp r6, 0 - beq _0808F78A - bl sub_8097848 -_0808F78A: - adds r0, r7, 0 - add sp, 0x58 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0808F794: .4byte 0x0000013d - thumb_func_end sub_808F734 - thumb_func_start sub_808F798 sub_808F798: push {r4-r6,lr} diff --git a/include/constants/evolution_status.h b/include/constants/evolution_status.h new file mode 100644 index 000000000..103c01e86 --- /dev/null +++ b/include/constants/evolution_status.h @@ -0,0 +1,13 @@ +#ifndef GUARD_CONSTANTS_EVOLUTION_STATUS_H +#define GUARD_CONSTANTS_EVOLUTION_STATUS_H + + +#define EVOLUTION_GOOD 1 +#define EVOLUTION_LACK_LEVEL 1 << 1 +#define EVOLUTION_NO_MORE 1 << 2 +#define EVOLUTION_LACK_ITEM 1 << 3 +#define EVOLUTION_LACK_IQ 1 << 4 +#define EVOLUTION_LACK_FRIEND_AREA 1 << 5 +#define EVOLUTION_LACK_ROOM 1 << 6 + +#endif // GUARD_CONSTANTS_EVOLUTION_STATUS_H diff --git a/include/luminous_cave.h b/include/luminous_cave.h new file mode 100644 index 000000000..7e3a5a7ee --- /dev/null +++ b/include/luminous_cave.h @@ -0,0 +1,36 @@ +#ifndef GUARD_LUMINOUS_CAVE_H +#define GUARD_LUMINOUS_CAVE_H + +#include "menu.h" +#include "text.h" + +struct unkStruct_203B2B0 +{ + // size: 0x174 + bool8 evolutionComplete; + struct EvolveStatus evolveStatus; + struct PokemonStruct *pokeStruct; + /* 0x10 */ bool8 pokeRenamed; + /* 0x14 */ u32 evoItem1_InvIndex; // inventory index of item + /* 0x18 */ u32 evoItem2_InvIndex; // inventory index of item + struct Item chosenItem; + u32 state; + u32 fallbackState; + u32 menuAction1; + u32 menuAction2; + u32 menuAction3; + struct MenuItem unk34[8]; + u16 unk74[0x8]; + struct MenuStruct unk84; + u8 fillD4[0x104 - 0xD4]; + struct OpenedFile *unk104; + u8 *unk108; + u16 unk10C; + u16 unk10E; + u8 unk110; + u8 unk111; + u8 unk112; + struct UnkTextStruct2 unk114[4]; +}; + +#endif // GUARD_LUMINOUS_CAVE_H diff --git a/include/pokemon.h b/include/pokemon.h index 408752444..b27c6f1a4 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -104,13 +104,13 @@ struct unkStruct_203B45C struct PreEvolution { /* 0x0 */ s16 evolveFrom; - /* 0x2 */ s16 evolveType; + /* 0x2 */ u16 evolveType; }; // size: 0x4 struct EvolutionRequirements { - /* 0x0 */ u16 mainRequirement; + /* 0x0 */ s16 mainRequirement; /* 0x2 */ u16 additionalRequirement; }; diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 87f7cc7ec..76fc1295e 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -1,10 +1,21 @@ #ifndef GUARD_POKEMON_3_H #define GUARD_POKEMON_3_H +struct EvolveStatus +{ + u8 evoItem1; + u8 evoItem2; + u8 unk6; + u16 evolutionConditionStatus; + s16 targetEvolveSpecies; +}; + s16 GetBaseSpeciesNoUnown(s16 index); bool8 TacticsTargetLeader(u8 tactic); bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex); void SetIQSkill(u8 *param_1, u32 skillIndex); bool8 IsIQSkillSet(u8 *IQSkillFlags, u32 IQSkill); +void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatus, u8 param_3); +u32 sub_808F734(struct PokemonStruct *pokemon, s16 _species); #endif diff --git a/src/dungeon_ai_leader.c b/src/dungeon_ai_leader.c index 581905f4b..feb07657b 100644 --- a/src/dungeon_ai_leader.c +++ b/src/dungeon_ai_leader.c @@ -6,6 +6,7 @@ #include "dungeon_ai_targeting.h" #include "dungeon_leader.h" #include "dungeon_visibility.h" +#include "pokemon.h" #include "pokemon_3.h" bool8 TargetLeader(struct Entity *pokemon) diff --git a/src/luminous_cave.c b/src/luminous_cave.c index be176eadc..2ed6da597 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -1,9 +1,12 @@ #include "global.h" #include "constants/bg_music.h" #include "constants/colors.h" +#include "constants/evolution_status.h" +#include "input.h" #include "item.h" #include "memory.h" #include "pokemon.h" +#include "pokemon_3.h" #include "random.h" #include "text1.h" #include "text2.h" @@ -15,40 +18,7 @@ #include "code_8012A18_1.h" #include "code_801B3C0.h" #include "code_80118A4.h" - -struct unkStruct_203B2B0 -{ - // size: 0x174 - bool8 evolutionComplete; - u8 fill1[0x3]; - u8 evoItem1_itemIndex; - u8 evoItem2_ItemIndex; - u8 unk6; - u16 evolutionConditionStatus; - /* 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 Item chosenItem; - u32 state; - u32 fallbackState; - u32 menuAction1; - u32 menuAction2; - u32 menuAction3; - struct MenuItem unk34[8]; - u16 unk74[0x8]; - struct MenuStruct unk84; - u8 fillD4[0x104 - 0xD4]; - struct OpenedFile *unk104; - u8 *unk108; - u16 unk10C; - u16 unk10E; - u8 unk110; - u8 unk111; - u8 unk112; - struct UnkTextStruct2 unk114[4]; -}; +#include "luminous_cave.h" EWRAM_DATA_2 struct unkStruct_203B2B0 *gUnknown_203B2B0 = {0}; extern struct UnkTextStruct2 gUnknown_80DCA00; @@ -195,10 +165,10 @@ extern void nullsub_104(); void sub_8024DBC(void); void sub_8024E30(void); void sub_801AEE4(u32, u32); -void sub_808F734(struct PokemonStruct *, s16); +u32 sub_801602C(u32 r0, u8 *name); +extern s32 sub_80144A4(s32 *); +extern s32 sub_801A8AC(void); extern void sub_8099690(u32); -extern void sub_808F468(struct PokemonStruct *, u8 *, u32); - bool8 LuminousCave_HasOnly1Member(void); enum @@ -226,17 +196,6 @@ enum LUMINOUS_CAVE_CANT_EVOLVE_YET = 0x1D, }; -enum evolutionStatus -{ - EVOLUTION_GOOD = 1, - EVOLUTION_LACK_LEVEL = 1 << 1, - EVOLUTION_NO_MORE = 1 << 2, - EVOLUTION_LACK_ITEM = 1 << 3, - EVOLUTION_LACK_IQ = 1 << 4, - EVOLUTION_LACK_FRIEND_AREA = 1 << 5, - EVOLUTION_LACK_ROOM = 1 << 6, -}; - u32 sub_802465C(void) { struct OpenedFile *faceFile; @@ -436,19 +395,19 @@ void UpdateLuminousCaveDialogue(void) case LUMINOUS_CAVE_LET_US_BEGIN: sub_8025254(); - if((gUnknown_203B2B0->evolutionConditionStatus & EVOLUTION_GOOD)) + if((gUnknown_203B2B0->evolveStatus.evolutionConditionStatus & EVOLUTION_GOOD)) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CHANGED_APPEARANCE; - else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_NO_MORE) + else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_NO_MORE) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_ANYMORE; - else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_LEVEL) + else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_LEVEL) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_LEVEL; - else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_IQ) + else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_IQ) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_IQ; - else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_FRIEND_AREA) + else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_FRIEND_AREA) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_FRIEND_AREA; - else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_ROOM) + else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_ROOM) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ROOM; - else if(gUnknown_203B2B0->evolutionConditionStatus == EVOLUTION_LACK_ITEM) + else if(gUnknown_203B2B0->evolveStatus.evolutionConditionStatus == EVOLUTION_LACK_ITEM) gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_LACK_ITEM; else gUnknown_203B2B0->fallbackState = LUMINOUS_CAVE_CANT_EVOLVE_YET; @@ -464,11 +423,11 @@ void UpdateLuminousCaveDialogue(void) case LUMINOUS_CAVE_EVOLVED: monName = GetMonSpecies(gUnknown_203B2B0->pokeStruct->speciesNum); strcpy(gAvailablePokemonNames,monName); - monName = GetMonSpecies(gUnknown_203B2B0->targetSpecies); + monName = GetMonSpecies(gUnknown_203B2B0->evolveStatus.targetEvolveSpecies); strcpy(gAvailablePokemonNames + 0x50,monName); gUnknown_203B2B0->evolutionComplete = TRUE; sub_80977D0(); - sub_808F734(gUnknown_203B2B0->pokeStruct,gUnknown_203B2B0->targetSpecies); + sub_808F734(gUnknown_203B2B0->pokeStruct,gUnknown_203B2B0->evolveStatus.targetEvolveSpecies); nullsub_104(); gUnknown_203B2B0->pokeStruct = GetPlayerPokemonStruct(); if (gUnknown_203B2B0->evoItem1_InvIndex != INVENTORY_SIZE) { @@ -874,20 +833,20 @@ void LuminousCave_AdvancetoFallbackState(void) void sub_8025254(void) { if(gUnknown_203B2B0->evoItem1_InvIndex == INVENTORY_SIZE) - gUnknown_203B2B0->evoItem1_itemIndex = 0; + gUnknown_203B2B0->evolveStatus.evoItem1 = 0; else { - gUnknown_203B2B0->evoItem1_itemIndex = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem1_InvIndex].id; + gUnknown_203B2B0->evolveStatus.evoItem1 = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem1_InvIndex].id; } if(gUnknown_203B2B0->evoItem2_InvIndex == INVENTORY_SIZE) - gUnknown_203B2B0->evoItem2_ItemIndex = 0; + gUnknown_203B2B0->evolveStatus.evoItem2 = 0; else { - gUnknown_203B2B0->evoItem2_ItemIndex = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem2_InvIndex].id; + gUnknown_203B2B0->evolveStatus.evoItem2 = gTeamInventoryRef->teamItems[gUnknown_203B2B0->evoItem2_InvIndex].id; } - gUnknown_203B2B0->unk6 = RandInt(0xFF); - sub_808F468(gUnknown_203B2B0->pokeStruct, &gUnknown_203B2B0->evoItem1_itemIndex, 1); + gUnknown_203B2B0->evolveStatus.unk6 = RandInt(0xFF); + sub_808F468(gUnknown_203B2B0->pokeStruct, &gUnknown_203B2B0->evolveStatus, 1); } bool8 LuminousCave_HasOnly1Member(void) diff --git a/src/pokemon_1.c b/src/pokemon_1.c new file mode 100644 index 000000000..ff10f023d --- /dev/null +++ b/src/pokemon_1.c @@ -0,0 +1,75 @@ +#include "global.h" +#include "pokemon.h" + +extern struct MonsterDataEntry *gMonsterParameters; +extern bool8 *gFriendAreas; +void SetDefaultIQSkills(u8 *param_1, bool8 enableSelfCurer); +void sub_808E490(struct Move* a1, s32 species); +void BoundedCopyStringtoBuffer(u8 *, u8 *, u32); +void sub_80980B4(s32); +u8 sub_80923D4(s32); + +#define DUNGEON_JOIN_LOCATION_LEADER 64 +#define DUNGEON_JOIN_LOCATION_PARTNER 65 + + void sub_808CE74(s16 _species, bool8 _isLeader, u8* name) + { + struct PokemonStruct pokemon; + struct PokemonStruct *temp; + u8 name_buffer[20]; + u32 friendArea; + s32 i; + s32 species = _species; + bool32 isLeader = _isLeader << 24; + + pokemon.unk0 = 3; + if (isLeader) { + pokemon.isTeamLeader = TRUE; + pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_LEADER; + } + else { + pokemon.isTeamLeader = FALSE; + pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_PARTNER; + } + pokemon.unkHasNextStage = 1; + pokemon.pokeHP = GetBaseHP(species); + pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); + pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); + pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); + pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); + pokemon.IQ = 1; + pokemon.unkC[0].unk0 = 0; + pokemon.unkC[1].unk0 = 0; + SetDefaultIQSkills((u8*)&pokemon.IQSkills, FALSE); + pokemon.speciesNum = species; + pokemon.heldItem.id = ITEM_NOTHING; + pokemon.heldItem.quantity = 0; + pokemon.unk1C = 0; + pokemon.unk24 = 0; + pokemon.dungeonLocation.floor = 0; + sub_808E490(pokemon.moves, species); + + if (name == NULL) { + CopyMonsterNametoBuffer(name_buffer, species); + BoundedCopyStringtoBuffer(pokemon.name, name_buffer, POKEMON_NAME_LENGTH); + } + else { + s32 j; + for (j = 0; j < POKEMON_NAME_LENGTH; j++) { + pokemon.name[j] = name[j]; + } + } + friendArea = gMonsterParameters[species].friendArea; + for (i = 0; i < NUM_MONSTERS; i++) { + temp = &gRecruitedPokemonRef->pokemon[i]; + if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { + u8 speciesFriendArea = sub_80923D4(i); + if (speciesFriendArea == friendArea) { + gRecruitedPokemonRef->pokemon[i] = pokemon; + gFriendAreas[speciesFriendArea] = TRUE; + sub_80980B4(species); + break; + } + } + } + } diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 929ce3495..133eca18e 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -1,11 +1,16 @@ #include "global.h" -#include "pokemon_3.h" #include "pokemon.h" +#include "pokemon_3.h" #include "random.h" +#include "constants/evolve_type.h" +#include "constants/evolution_status.h" #include "constants/iq_skill.h" #include "constants/tactic.h" #include "sprite.h" +#include "text_util.h" +#include "friend_area.h" +#include "luminous_cave.h" extern u8 *gIQSkillNames[]; extern u32 gIQSkillDescriptions[]; @@ -53,7 +58,11 @@ extern void sub_808F448(struct unkStruct_8094924*, struct unkStruct_808E6F4*); extern void sub_80941FC(struct unkStruct_8094924*, void*); extern void sub_809447C(struct unkStruct_8094924*, void*); extern void sub_808F428(struct unkStruct_8094924*, struct unkStruct_808E6F4*); +s16 GetPokemonEvolveConditions(s16 index, struct unkEvolve *r1); +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); +u32 sub_808F798(struct PokemonStruct *, s16); +void sub_8097848(void); bool8 sub_808E668(s16 species, s16* a2, s16* a3) { @@ -903,3 +912,210 @@ void sub_808F448(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2) SaveIntegerBits(a1, &a2->unk0, 10); SaveIntegerBits(a1, &a2->unk2, 5); } + +void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatus, u8 param_3) +{ + bool8 evolFlag; + u8 friendArea; + u8 uVar2; + s32 numPokemon; + struct unkStruct_8092638 local_40; // sp 0x0 + struct unkEvolve evolveConditions; // r7 + s32 index, index2; +#ifndef NONMATCHING + register s32 defaultReason asm("sl"); +#else + s32 defaultReason; +#endif + + evolveStatus->evolutionConditionStatus = 0; + for(index = MONSTER_BULBASAUR; index < 0x1A8; index++) + { + if ((s16)index == MONSTER_ALAKAZAM) { + GetPokemonEvolveConditions(MONSTER_ALAKAZAM, &evolveConditions); + } + else { + GetPokemonEvolveConditions(index, &evolveConditions); + } + if(((evolveConditions.preEvolution.evolveType != EVOLVE_TYPE_NONE) && (param_1->speciesNum == evolveConditions.preEvolution.evolveFrom))) + break; + }; + if (index == 0x1a8) { + evolveStatus->evolutionConditionStatus = EVOLUTION_NO_MORE; + } + else { + for(index = MONSTER_BULBASAUR, defaultReason = EVOLUTION_LACK_ITEM; index < 0x1A8; index++) + { + evolFlag = FALSE; + index2 = (s16)index; + GetPokemonEvolveConditions(index2, &evolveConditions); + if ((evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_NONE) || (param_1->speciesNum != evolveConditions.preEvolution.evolveFrom)) continue; + friendArea = ((u8 (*)(s32))GetFriendArea)(index2); // UB + uVar2 = GetFriendArea(param_1->speciesNum); + sub_8092638(friendArea,&local_40,0,0); + if (!local_40.hasFriendArea) { + evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_FRIEND_AREA; + evolFlag = TRUE; + } + else { + numPokemon = local_40.unk2; + if (friendArea == uVar2) { + numPokemon--; + } + if (local_40.numPokemon <= numPokemon) { + evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_ROOM; + evolFlag = TRUE; + } + } + if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_LEVEL) { + if ((evolveStatus->evolutionConditionStatus & EVOLUTION_GOOD)) continue; + if (param_1->unkHasNextStage < evolveConditions.evolutionRequirements.mainRequirement) { + evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_LEVEL; + evolFlag = TRUE; + } + } + else if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_IQ) { + if (param_1->IQ < evolveConditions.evolutionRequirements.mainRequirement) { + evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_IQ; + evolFlag = TRUE; + } + } + else if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_ITEM) { + if (param_3 != 0) { + if ((evolveStatus->evoItem1 != evolveConditions.evolutionRequirements.mainRequirement) && + (evolveStatus->evoItem2 != evolveConditions.evolutionRequirements.mainRequirement)) { + evolveStatus->evolutionConditionStatus |= defaultReason; + evolFlag = TRUE; + } + } + else + { + if (FindItemInInventory(evolveConditions.evolutionRequirements.mainRequirement) < 0) { + evolveStatus->evolutionConditionStatus |= defaultReason; + evolFlag = TRUE; + } + } + } + if (evolveConditions.evolutionRequirements.additionalRequirement == 4) { + if (param_3 != 0) { + if ((evolveStatus->evoItem1 != ITEM_LINK_CABLE) && (evolveStatus->evoItem2 != ITEM_LINK_CABLE)) + { + evolveStatus->evolutionConditionStatus |= defaultReason; + continue; + } + } + else + { + if (-1 < FindItemInInventory(ITEM_LINK_CABLE)) goto _0808F6CA; + evolveStatus->evolutionConditionStatus |= defaultReason; + continue; + } + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 5) { + if ((param_1->offense).att[0] > (param_1->offense).def[0]) goto _0808F6CA; + else continue; + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 6) { + if ((param_1->offense).att[0] < (param_1->offense).def[0]) goto _0808F6CA; + else continue; + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 7) { + if ((param_1->offense).att[0] == (param_1->offense).def[0]) goto _0808F6CA; + else continue; + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 8) + { + if (param_3 != 0) { + if ((evolveStatus->evoItem1 != ITEM_SUN_RIBBON) && (evolveStatus->evoItem2 != ITEM_SUN_RIBBON)) + { + evolveStatus->evolutionConditionStatus |= defaultReason; + continue; + } + else goto _0808F6CA; + } + else { + if (-1 < FindItemInInventory(ITEM_SUN_RIBBON)) goto _0808F6CA; + evolveStatus->evolutionConditionStatus |= defaultReason; + continue; + } + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 9) { + if (param_3 != 0) { + if ((evolveStatus->evoItem1 != ITEM_LUNAR_RIBBON) && (evolveStatus->evoItem2 != ITEM_LUNAR_RIBBON)) + { + evolveStatus->evolutionConditionStatus |= defaultReason; + continue; + } + else goto _0808F6CA; + } + else + { + if (-1 < FindItemInInventory(ITEM_LUNAR_RIBBON)) goto _0808F6CA; + evolveStatus->evolutionConditionStatus |= defaultReason; + continue; + } + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 0xb) { + if ((evolveStatus->unk6 & 1) == 0) goto _0808F6CA; + else continue; + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 0xc) { + if ((evolveStatus->unk6 & 1)) goto _0808F6CA; + else continue; + } + else if (evolveConditions.evolutionRequirements.additionalRequirement == 10) { + if (param_3 != 0) { + if ((evolveStatus->evoItem1 == ITEM_BEAUTY_SCARF) || (evolveStatus->evoItem2 == ITEM_BEAUTY_SCARF)) goto _0808F6CA; + else continue; + } + else + { + if ( FindItemInInventory(ITEM_BEAUTY_SCARF) < 0) evolFlag = TRUE; + } + } + _0808F6CA: + if (!evolFlag) { + evolveStatus->evolutionConditionStatus |= EVOLUTION_GOOD; + evolveStatus->targetEvolveSpecies = index2; + } + } + } +} + +u8 sub_808F700(struct PokemonStruct *pokemon) +{ + struct EvolveStatus evolveStatus; + + sub_808F468(pokemon, &evolveStatus, 0); + if ((evolveStatus.evolutionConditionStatus & EVOLUTION_GOOD)) { + return 1; + } + else if ((evolveStatus.evolutionConditionStatus & EVOLUTION_NO_MORE)) { + return 2; + } + else { + return 0; + } +} + +u32 sub_808F734(struct PokemonStruct *pokemon, s16 _species) +{ + u32 uVar1; + int iVar3; + struct PokemonStruct pokeStruct; + s32 species = _species; + + iVar3 = 0; + pokeStruct = *pokemon; + uVar1 = sub_808F798(pokemon, species); + if (species == MONSTER_NINJASK) { + pokeStruct.isTeamLeader = FALSE; + pokeStruct.heldItem.id = ITEM_NOTHING; + BoundedCopyStringtoBuffer(pokeStruct.name, GetMonSpecies(MONSTER_SHEDINJA),POKEMON_NAME_LENGTH); + iVar3 = sub_808F798(&pokeStruct,MONSTER_SHEDINJA); + } + if (iVar3 != 0) { + sub_8097848(); + } + return uVar1; +} From 4f21cb26eae07262cd952b90aefac67837d04c69 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 4 Aug 2023 15:59:55 -0700 Subject: [PATCH 02/14] more documentation of pokemonStruct based on other decomp func tries --- include/pokemon.h | 26 +++++----- src/code_8094F88.c | 12 ++--- src/debug_menu4.c | 6 +-- src/pokemon.c | 122 +++++++++++++++++++++++---------------------- src/pokemon_1.c | 75 ---------------------------- src/pokemon_3.c | 34 ++++++------- src/pokemon_mid.c | 26 +++++----- 7 files changed, 113 insertions(+), 188 deletions(-) delete mode 100644 src/pokemon_1.c diff --git a/include/pokemon.h b/include/pokemon.h index b27c6f1a4..4c64a0cdb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -20,7 +20,7 @@ struct Offense // size: 0x4 struct unkPokeSubStruct_C { - u8 unk0; + u8 level; u8 fill1[3]; }; @@ -29,17 +29,16 @@ struct PokemonStruct { u16 unk0; // recruited?? /* 0x2 */ bool8 isTeamLeader; - /* 0x3 */ u8 unkHasNextStage; // set to a random value? + /* 0x3 */ u8 level; /* 0x4 */ struct DungeonLocation dungeonLocation; /* 0x8 */ s16 speciesNum; // species # struct unkPokeSubStruct_C unkC[2]; /* 0x14 */ s16 IQ; /* 0x16 */ u16 pokeHP; /* 0x18 */ struct Offense offense; - u32 unk1C; + /* 0x1C */ u32 currExp; /* 0x20 */ u32 IQSkills; - u8 unk24; - u8 fill25[3]; + /* 0x24 */ u8 tacticIndex; /* 0x28 */ struct BulkItem heldItem; /* 0x2C */ struct Move moves[MAX_MON_MOVES]; /* 0x4C */ u8 name[POKEMON_NAME_LENGTH]; @@ -56,7 +55,7 @@ struct unkStruct_808E6F4 struct EvolveStage { /* 0x0 */ s16 speciesNum; - /* 0x2 */ u8 unkHasNextStage; + /* 0x2 */ u8 level; }; // size: 0x24 @@ -70,24 +69,23 @@ struct unkStruct_8094184 struct PokemonStruct2 { u16 unk0; // corresponds to unk0 in PokemonStruct - /* 0x2 */ bool8 isTeamLeader; // unk2 - /* 0x3 */ u8 unkHasNextStage; // unk3 - /* 0x4 */ struct DungeonLocation dungeonLocation; // unk4 - /* 0x8 */ u16 IQ; // IQ (other offset) + /* 0x2 */ bool8 isTeamLeader; + /* 0x3 */ u8 level; + /* 0x4 */ struct DungeonLocation dungeonLocation; + /* 0x8 */ u16 IQ; s16 unkA; u16 unkC; - /* 0xE */ s16 speciesNum; // speciesNum (other offset) + /* 0xE */ s16 speciesNum; u16 unk10; // pokeHP u16 unk12; // pokeHP /* 0x14 */ struct Offense offense; // offense (other offset) - u32 unk18; // unk1C + /* 0x18 */ u32 currExp; /* 0x1C */ struct unkStruct_8094184 moves; /* 0x40 */ struct Item itemSlot; // heldItem u32 unk44; // some struct u32 unk48; // some struct (same type as 44) /* 0x4C */ u32 IQSkills; // unk20 - u8 unk50; // unk24 - u8 fill51[3]; + /* 0x50 */ u8 tacticIndex; struct unkStruct_808E6F4 unk54; /* 0x58 */ u8 name[POKEMON_NAME_LENGTH]; // name (other offset) }; diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 123eef2da..40a48c9e0 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -346,7 +346,7 @@ u32 sub_80954CC(u8 *a, u32 b) memset(temp, 0, sizeof(struct PokemonStruct)); RestoreIntegerBits(&backup, &temp->unk0, 2); RestoreIntegerBits(&backup, &temp->isTeamLeader, 1); - RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); + RestoreIntegerBits(&backup, &temp->level, 7); RestoreDungeonLocation(&backup, &temp->dungeonLocation); RestoreIntegerBits(&backup, &temp->speciesNum, 9); xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]); @@ -357,9 +357,9 @@ u32 sub_80954CC(u8 *a, u32 b) RestoreIntegerBits(&backup, &temp->offense.att[1], 8); RestoreIntegerBits(&backup, &temp->offense.def[0], 8); RestoreIntegerBits(&backup, &temp->offense.def[1], 8); - RestoreIntegerBits(&backup, &temp->unk1C, 0x18); + RestoreIntegerBits(&backup, &temp->currExp, 0x18); RestoreIntegerBits(&backup, &temp->IQSkills, 0x18); - RestoreIntegerBits(&backup, &temp->unk24, 4); + RestoreIntegerBits(&backup, &temp->tacticIndex, 4); RestoreHeldItem(&backup, &temp->heldItem); RestorePokemonMoves(&backup, temp->moves); RestoreIntegerBits(&backup, temp->name, 0x50); @@ -388,7 +388,7 @@ u32 sub_8095624(u8 *a, u32 b) temp = &gUnknown_203B484->unk4; SaveIntegerBits(&backup, &temp->unk0, 2); SaveIntegerBits(&backup, &temp->isTeamLeader, 1); - SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); + SaveIntegerBits(&backup, &temp->level, 7); SaveDungeonLocation(&backup, &temp->dungeonLocation); SaveIntegerBits(&backup, &temp->speciesNum, 9); xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]); @@ -399,9 +399,9 @@ u32 sub_8095624(u8 *a, u32 b) SaveIntegerBits(&backup, &temp->offense.att[1], 8); SaveIntegerBits(&backup, &temp->offense.def[0], 8); SaveIntegerBits(&backup, &temp->offense.def[1], 8); - SaveIntegerBits(&backup, &temp->unk1C, 0x18); + SaveIntegerBits(&backup, &temp->currExp, 0x18); SaveIntegerBits(&backup, &temp->IQSkills, 0x18); - SaveIntegerBits(&backup, &temp->unk24, 4); + SaveIntegerBits(&backup, &temp->tacticIndex, 4); SaveHeldItem(&backup, &temp->heldItem); SavePokemonMoves(&backup, temp->moves); SaveIntegerBits(&backup, temp->name, 0x50); diff --git a/src/debug_menu4.c b/src/debug_menu4.c index 17d180b27..a21d2a90a 100644 --- a/src/debug_menu4.c +++ b/src/debug_menu4.c @@ -146,7 +146,7 @@ void sub_803AD88(void) sUnknown_203B3F8->unk70 = 3; sUnknown_203B3F8->unk68 = 1; sUnknown_203B3F8->unk6C = 100; - sUnknown_203B3F8->unk64 = sUnknown_203B3F8->pokemon->unkHasNextStage; + sUnknown_203B3F8->unk64 = sUnknown_203B3F8->pokemon->level; sUnknown_203B3F8->unk74 = 3; sUnknown_203B3F8->unk78 = &sUnknown_203B3F8->unkE0[3]; sUnknown_203B3F8->unk7C = 44; @@ -256,7 +256,7 @@ void sub_803AFE8(void) default: break; case 3: - sUnknown_203B3F8->pokemon->unkHasNextStage = sUnknown_203B3F8->unk60; + sUnknown_203B3F8->pokemon->level = sUnknown_203B3F8->unk60; // Fallthrough is needed to match case 2: sub_803ACD0(2); @@ -276,4 +276,4 @@ void sub_803B034(void) sub_803ACD0(2); break; } -} \ No newline at end of file +} diff --git a/src/pokemon.c b/src/pokemon.c index bbd331e35..18daecf7a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -47,63 +47,65 @@ void InitializeRecruitedPokemon(void) } } -// void sub_808CE74(s32 _species, u8 a2, u8* a3) -// { -// struct PokemonStruct pokemon; -// u8 name_buffer[20]; -// u8 friend_area; -// s32 i; -// register s16 species asm("r7") = (s16)_species; -// s32 cond = a2 << 24; - -// pokemon.unk0 = 3; -// if (cond) { -// pokemon.unk2 = 1; -// pokemon.unk4.unk4 = 64; -// } -// else { -// pokemon.unk2 = 1; -// pokemon.unk4.unk4 = 65; -// } -// pokemon.unkHasNextStage = 1; -// pokemon.pokeHP = GetBaseHP(species); -// pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); -// pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); -// pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); -// pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); -// pokemon.IQ = 1; -// pokemon.unkC[0].unk0 = 0; -// pokemon.unkC[1].unk0 = 0; -// SetDefaultIQSkills((u8*)&pokemon.IQSkills, 0); -// pokemon.speciesNum = species; -// pokemon.heldItem.id = 0; -// pokemon.heldItem.quantity = 0; -// pokemon.unk1C = 0; -// pokemon.unk24 = 0; -// pokemon.unk4.unk5 = 0; -// sub_808E490(pokemon.moves, species); - -// // mostly incorrect below this: -// if (!a3) { -// CopyMonsterNametoBuffer(name_buffer, species); -// BoundedCopyStringtoBuffer(pokemon.name, name_buffer, 10); -// } -// else { -// s32 j; -// for (j = 0; j < 10; j++) { -// pokemon.name[j] = a3[j]; -// } -// } -// friend_area = gMonsterParameters[species].friend_area; -// for (i = 0; i < 413; i++) { -// if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { -// u8 species_friend_area = sub_80923D4(i); -// if (species_friend_area == friend_area) { -// gRecruitedPokemonRef->pokemon[i] = pokemon; -// gFriendAreas[species_friend_area] = 1; -// sub_80980B4(species); -// break; -// } -// } -// } -// } +// https://decomp.me/scratch/wQbZB + // void sub_808CE74(s16 _species, bool8 _isLeader, u8* name) + // { + // struct PokemonStruct pokemon; + // struct PokemonStruct *temp; + // u8 name_buffer[20]; + // u32 friendArea; + // s32 i; + // s32 species = _species; + // bool32 isLeader = _isLeader << 24; + // + // pokemon.unk0 = 3; + // if (isLeader) { + // pokemon.isTeamLeader = TRUE; + // pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_LEADER; + // } + // else { + // pokemon.isTeamLeader = FALSE; + // pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_PARTNER; + // } + // pokemon.level = 1; + // pokemon.pokeHP = GetBaseHP(species); + // pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); + // pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); + // pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); + // pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); + // pokemon.IQ = 1; + // pokemon.unkC[0].level = 0; + // pokemon.unkC[1].level = 0; + // SetDefaultIQSkills((u8*)&pokemon.IQSkills, FALSE); + // pokemon.speciesNum = species; + // pokemon.heldItem.id = ITEM_NOTHING; + // pokemon.heldItem.quantity = 0; + // pokemon.currExp = 0; + // pokemon.tacticIndex = 0; // TACTIC_LETS_GO_TOGETHER + // pokemon.dungeonLocation.floor = 0; + // sub_808E490(pokemon.moves, species); + // + // if (name == NULL) { + // CopyMonsterNametoBuffer(name_buffer, species); + // BoundedCopyStringtoBuffer(pokemon.name, name_buffer, POKEMON_NAME_LENGTH); + // } + // else { + // s32 j; + // for (j = 0; j < POKEMON_NAME_LENGTH; j++) { + // pokemon.name[j] = name[j]; + // } + // } + // friendArea = gMonsterParameters[species].friendArea; + // for (i = 0; i < NUM_MONSTERS; i++) { + // temp = &gRecruitedPokemonRef->pokemon[i]; + // if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { + // u8 speciesFriendArea = sub_80923D4(i); + // if (speciesFriendArea == friendArea) { + // gRecruitedPokemonRef->pokemon[i] = pokemon; + // gFriendAreas[speciesFriendArea] = TRUE; + // sub_80980B4(species); + // break; + // } + // } + // } + // } diff --git a/src/pokemon_1.c b/src/pokemon_1.c deleted file mode 100644 index ff10f023d..000000000 --- a/src/pokemon_1.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "global.h" -#include "pokemon.h" - -extern struct MonsterDataEntry *gMonsterParameters; -extern bool8 *gFriendAreas; -void SetDefaultIQSkills(u8 *param_1, bool8 enableSelfCurer); -void sub_808E490(struct Move* a1, s32 species); -void BoundedCopyStringtoBuffer(u8 *, u8 *, u32); -void sub_80980B4(s32); -u8 sub_80923D4(s32); - -#define DUNGEON_JOIN_LOCATION_LEADER 64 -#define DUNGEON_JOIN_LOCATION_PARTNER 65 - - void sub_808CE74(s16 _species, bool8 _isLeader, u8* name) - { - struct PokemonStruct pokemon; - struct PokemonStruct *temp; - u8 name_buffer[20]; - u32 friendArea; - s32 i; - s32 species = _species; - bool32 isLeader = _isLeader << 24; - - pokemon.unk0 = 3; - if (isLeader) { - pokemon.isTeamLeader = TRUE; - pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_LEADER; - } - else { - pokemon.isTeamLeader = FALSE; - pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_PARTNER; - } - pokemon.unkHasNextStage = 1; - pokemon.pokeHP = GetBaseHP(species); - pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); - pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); - pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); - pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); - pokemon.IQ = 1; - pokemon.unkC[0].unk0 = 0; - pokemon.unkC[1].unk0 = 0; - SetDefaultIQSkills((u8*)&pokemon.IQSkills, FALSE); - pokemon.speciesNum = species; - pokemon.heldItem.id = ITEM_NOTHING; - pokemon.heldItem.quantity = 0; - pokemon.unk1C = 0; - pokemon.unk24 = 0; - pokemon.dungeonLocation.floor = 0; - sub_808E490(pokemon.moves, species); - - if (name == NULL) { - CopyMonsterNametoBuffer(name_buffer, species); - BoundedCopyStringtoBuffer(pokemon.name, name_buffer, POKEMON_NAME_LENGTH); - } - else { - s32 j; - for (j = 0; j < POKEMON_NAME_LENGTH; j++) { - pokemon.name[j] = name[j]; - } - } - friendArea = gMonsterParameters[species].friendArea; - for (i = 0; i < NUM_MONSTERS; i++) { - temp = &gRecruitedPokemonRef->pokemon[i]; - if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { - u8 speciesFriendArea = sub_80923D4(i); - if (speciesFriendArea == friendArea) { - gRecruitedPokemonRef->pokemon[i] = pokemon; - gFriendAreas[speciesFriendArea] = TRUE; - sub_80980B4(species); - break; - } - } - } - } diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 133eca18e..07ae1fb8d 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -691,7 +691,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2) } } else { - pokemon->unkHasNextStage = 0; + pokemon->level = 0; } SavePokemonStruct(&backup, pokemon); } @@ -754,7 +754,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2) void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon) { - SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7); + SaveIntegerBits(a1, &pokemon->level, 7); SaveIntegerBits(a1, &pokemon->speciesNum, 9); SaveDungeonLocation(a1, &pokemon->dungeonLocation); xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]); @@ -765,9 +765,9 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem SaveIntegerBits(a1, &pokemon->offense.att[1], 8); SaveIntegerBits(a1, &pokemon->offense.def[0], 8); SaveIntegerBits(a1, &pokemon->offense.def[1], 8); - SaveIntegerBits(a1, &pokemon->unk1C, 24); + SaveIntegerBits(a1, &pokemon->currExp, 24); SaveIntegerBits(a1, &pokemon->IQSkills, 24); - SaveIntegerBits(a1, &pokemon->unk24, 4); + SaveIntegerBits(a1, &pokemon->tacticIndex, 4); SaveHeldItem(a1, &pokemon->heldItem); SavePokemonMoves(a1, pokemon->moves); SaveIntegerBits(a1, pokemon->name, 80); @@ -778,8 +778,8 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po memset(pokemon, 0, sizeof(struct PokemonStruct)); pokemon->unk0 = 0; pokemon->isTeamLeader = 0; - RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7); - if (pokemon->unkHasNextStage) { + RestoreIntegerBits(a1, &pokemon->level, 7); + if (pokemon->level) { pokemon->unk0 |= 1; } RestoreIntegerBits(a1, &pokemon->speciesNum, 9); @@ -792,9 +792,9 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po RestoreIntegerBits(a1, &pokemon->offense.att[1], 8); RestoreIntegerBits(a1, &pokemon->offense.def[0], 8); RestoreIntegerBits(a1, &pokemon->offense.def[1], 8); - RestoreIntegerBits(a1, &pokemon->unk1C, 24); + RestoreIntegerBits(a1, &pokemon->currExp, 24); RestoreIntegerBits(a1, &pokemon->IQSkills, 24); - RestoreIntegerBits(a1, &pokemon->unk24, 4); + RestoreIntegerBits(a1, &pokemon->tacticIndex, 4); RestoreHeldItem(a1, &pokemon->heldItem); RestorePokemonMoves(a1, pokemon->moves); RestoreIntegerBits(a1, pokemon->name, 80); @@ -816,7 +816,7 @@ s32 SavePokemonStruct2(u8* a1, s32 size) SaveIntegerBits(&backup, &pokemon2->unk0, 2); SaveIntegerBits(&backup, pokemon2->isTeamLeader ? &data_u8_neg1 : &data_u8_zero, 1); - SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); + SaveIntegerBits(&backup, &pokemon2->level, 7); SaveDungeonLocation(&backup, &pokemon2->dungeonLocation); SaveIntegerBits(&backup, &pokemon2->IQ, 10); @@ -829,13 +829,13 @@ s32 SavePokemonStruct2(u8* a1, s32 size) SaveIntegerBits(&backup, &pokemon2->offense.att[1], 8); SaveIntegerBits(&backup, &pokemon2->offense.def[0], 8); SaveIntegerBits(&backup, &pokemon2->offense.def[1], 8); - SaveIntegerBits(&backup, &pokemon2->unk18, 24); + SaveIntegerBits(&backup, &pokemon2->currExp, 24); sub_8094184(&backup, &pokemon2->moves); SaveItemSlot(&backup, &pokemon2->itemSlot); sub_809449C(&backup, &pokemon2->unk44); sub_809449C(&backup, &pokemon2->unk48); SaveIntegerBits(&backup, &pokemon2->IQSkills, 24); - SaveIntegerBits(&backup, &pokemon2->unk50, 4); + SaveIntegerBits(&backup, &pokemon2->tacticIndex, 4); sub_808F448(&backup, &pokemon2->unk54); SaveIntegerBits(&backup, &pokemon2->name, 80); } @@ -864,7 +864,7 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) else { pokemon2->isTeamLeader = FALSE; } - RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); + RestoreIntegerBits(&backup, &pokemon2->level, 7); RestoreDungeonLocation(&backup, &pokemon2->dungeonLocation); RestoreIntegerBits(&backup, &pokemon2->IQ, 10); @@ -877,13 +877,13 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) RestoreIntegerBits(&backup, &pokemon2->offense.att[1], 8); RestoreIntegerBits(&backup, &pokemon2->offense.def[0], 8); RestoreIntegerBits(&backup, &pokemon2->offense.def[1], 8); - RestoreIntegerBits(&backup, &pokemon2->unk18, 24); + RestoreIntegerBits(&backup, &pokemon2->currExp, 24); sub_80941FC(&backup, &pokemon2->moves); RestoreItemSlot(&backup, &pokemon2->itemSlot); sub_809447C(&backup, &pokemon2->unk44); sub_809447C(&backup, &pokemon2->unk48); RestoreIntegerBits(&backup, &pokemon2->IQSkills, 24); - RestoreIntegerBits(&backup, &pokemon2->unk50, 4); + RestoreIntegerBits(&backup, &pokemon2->tacticIndex, 4); sub_808F428(&backup, &pokemon2->unk54); RestoreIntegerBits(&backup, &pokemon2->name, 80); } @@ -893,12 +893,12 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC) { - RestoreIntegerBits(a1, &unkC->unk0, 7); + RestoreIntegerBits(a1, &unkC->level, 7); } void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC) { - SaveIntegerBits(a1, &unkC->unk0, 7); + SaveIntegerBits(a1, &unkC->level, 7); } void sub_808F428(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2) @@ -969,7 +969,7 @@ void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatu } if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_LEVEL) { if ((evolveStatus->evolutionConditionStatus & EVOLUTION_GOOD)) continue; - if (param_1->unkHasNextStage < evolveConditions.evolutionRequirements.mainRequirement) { + if (param_1->level < evolveConditions.evolutionRequirements.mainRequirement) { evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_LEVEL; evolFlag = TRUE; } diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 7f30686c2..597215a65 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -524,7 +524,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po u32 somestruct2_80943A0; a1->unk0 = pokemon->unk0; - a1->unkHasNextStage = pokemon->unkHasNextStage; + a1->level = pokemon->level; a1->IQ = pokemon->IQ; a1->IQSkills = pokemon->IQSkills; sub_808E6F4(&a1->unk54); @@ -532,7 +532,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po a1->isTeamLeader = pokemon->isTeamLeader; a1->unkA = a3; a1->speciesNum = pokemon->speciesNum; - a1->unk50 = pokemon->unk24; + a1->tacticIndex = pokemon->tacticIndex; a1->unk12 = pokemon->pokeHP; a1->unk10 = pokemon->pokeHP; @@ -541,7 +541,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po a1->offense.def[i] = pokemon->offense.def[i]; } - a1->unk18 = pokemon->unk1C; + a1->currExp = pokemon->currExp; CopyAndResetMoves(&a1->moves, &pokemon->moves); for (i = 0; i < POKEMON_NAME_LENGTH; i++) { @@ -578,13 +578,13 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct s32 i; pokemon->unk0 = a2->unk0; - pokemon->unkHasNextStage = a2->unkHasNextStage; + pokemon->level = a2->level; pokemon->IQ = a2->IQ; pokemon->IQSkills = a2->IQSkills; pokemon->dungeonLocation = a2->dungeonLocation; pokemon->isTeamLeader = a2->isTeamLeader; pokemon->speciesNum = a2->speciesNum; - pokemon->unk24 = a2->unk50; + pokemon->tacticIndex = a2->tacticIndex; pokemon->pokeHP = a2->unk12; for (i = 0; i < 2; i++) { @@ -592,7 +592,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct pokemon->offense.def[i] = a2->offense.def[i]; } - pokemon->unk1C = a2->unk18; + pokemon->currExp = a2->currExp; CopyBareMoveData(pokemon->moves, &a2->moves); for (i = 0; i < POKEMON_NAME_LENGTH; i++) { @@ -771,7 +771,7 @@ s32 sub_808E218(struct unkStruct_808E218_arg* a1, struct PokemonStruct* pokemon) ptr = DecompressMoveID(ptr, &result); value = *ptr++; - if (value > evolve_sequence[i].unkHasNextStage) { + if (value > evolve_sequence[i].level) { break; } @@ -815,14 +815,14 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) s32 i; a2[0].specesNum = pokemon->speciesNum; - a2[0].unkHasNextStage = pokemon->unkHasNextStage; + a2[0].level = pokemon->level; count = 1; species = pokemon->speciesNum; i = 0; for (; i < 2; i++) { - if (!pokemon->unkC[i].unk0) { + if (!pokemon->unkC[i].level) { break; } species = GetPokemonEvolveFrom(species); @@ -830,7 +830,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) break; } a2[1 + i].speciesNum = species; - a2[1 + i].unkHasNextStage = pokemon->unkC[i].unk0; + a2[1 + i].level = pokemon->unkC[i].level; // wrong increment order: count++; } @@ -843,7 +843,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) struct unkPokeSubStruct_C* has_next_stage; a2[0].speciesNum = pokemon->speciesNum; - a2[0].unkHasNextStage = pokemon->unkHasNextStage; + a2[0].level = pokemon->level; count = 1; species = pokemon->speciesNum; @@ -852,7 +852,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) stage = &a2[1]; for (; i < 2; i++) { - if (!has_next_stage->unk0) { + if (!has_next_stage->level) { break; } species = GetPokemonEvolveFrom(species); @@ -860,7 +860,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) break; } stage->speciesNum = species; - stage->unkHasNextStage = has_next_stage->unk0; + stage->level = has_next_stage->level; stage++; count++; has_next_stage++; From 0fc0e6279f9d8322bd8203d3eeb18f9b385c7de4 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 4 Aug 2023 17:26:04 -0700 Subject: [PATCH 03/14] more rework of funcs given more knowledge --- src/code_80958E8_1.c | 1 + src/debug_menu1.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index 055bd9a32..2a27a47d5 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -7,6 +7,7 @@ #include "code_80958E8.h" #include "team_inventory.h" #include "random.h" +#include "pokemon.h" struct unkStruct_8096AF8 { diff --git a/src/debug_menu1.c b/src/debug_menu1.c index 684a5eeed..47d7a01b3 100644 --- a/src/debug_menu1.c +++ b/src/debug_menu1.c @@ -187,4 +187,4 @@ void sub_803A3BC(void) sp_0x80 = r9; WriteSavetoPak(&sp_0x80, 1); -} \ No newline at end of file +} From ef9adf4db06e250e77287f1e126079f5e59e635a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 5 Aug 2023 12:43:46 -0700 Subject: [PATCH 04/14] More ground script work --- asm/code_809D148.s | 36 -------- asm/ground_script.s | 74 +---------------- include/ground_script.h | 5 +- src/code_80A26CC.c | 90 +++++++++++++------- src/ground_map.c | 2 +- src/ground_script.c | 178 ++++++++++++++++++++++------------------ 6 files changed, 162 insertions(+), 223 deletions(-) diff --git a/asm/code_809D148.s b/asm/code_809D148.s index b334680db..0d44ee538 100644 --- a/asm/code_809D148.s +++ b/asm/code_809D148.s @@ -641,40 +641,4 @@ _0809D6D2: bx r1 thumb_func_end sub_809D684 - thumb_func_start sub_809D6D8 -sub_809D6D8: - lsls r1, 16 - asrs r1, 14 - adds r0, 0x14 - adds r0, r1 - str r2, [r0] - bx lr - thumb_func_end sub_809D6D8 - - thumb_func_start sub_809D6E4 -sub_809D6E4: - push {r4,lr} - lsls r2, 16 - asrs r2, 16 - lsls r4, r2, 2 - adds r3, r0, 0 - adds r3, 0x14 - adds r3, r4 - ldr r3, [r3] - str r3, [r1] - strh r2, [r1, 0x4] - ldrh r2, [r0, 0x10] - strh r2, [r1, 0x6] - ldrb r0, [r0, 0x12] - strb r0, [r1, 0x8] - adds r0, r3, 0 - cmp r0, 0 - beq _0809D708 - movs r0, 0x1 -_0809D708: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809D6E4 - .align 2,0 diff --git a/asm/ground_script.s b/asm/ground_script.s index 62a505d94..c43e41ce7 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -8642,76 +8642,4 @@ _080A24F4: bx r1 thumb_func_end sub_80A2460 - thumb_func_start sub_80A2500 -sub_80A2500: - push {r4,lr} - adds r4, r0, 0 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _080A2524 - lsls r4, 16 - asrs r4, 16 - movs r2, 0x2 - ldrsh r0, [r1, r2] - bl sub_80A8BBC - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_809AB4C -_080A2524: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80A2500 - - thumb_func_start sub_80A252C -sub_80A252C: - push {r4,lr} - adds r4, r0, 0 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _080A2550 - lsls r4, 16 - asrs r4, 16 - movs r2, 0x2 - ldrsh r0, [r1, r2] - bl sub_80A8BBC - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_809ABB4 -_080A2550: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80A252C - - thumb_func_start sub_80A2558 -sub_80A2558: - push {r4,lr} - adds r4, r0, 0 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _080A257C - lsls r4, 16 - asrs r4, 16 - movs r2, 0x2 - ldrsh r0, [r1, r2] - bl sub_80A8BBC - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_809AC18 -_080A257C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80A2558 - - .align 2,0 + .align 2,0 diff --git a/include/ground_script.h b/include/ground_script.h index a2fa16dae..5c0308e2b 100644 --- a/include/ground_script.h +++ b/include/ground_script.h @@ -18,7 +18,7 @@ struct GroundScript_ExecutePP_1_sub /* 0xE */ u8 unkE; /* 0xF */ u8 fillF; /* 0x10 */ u32 unk10; - /* 0x14 */ u32 unk14; + /* 0x14 */ u8 *unk14; /* 0x18 */ u8 fill18[0x22 - 0x18]; /* 0x22 */ u16 unk22; /* 0x24 */ u16 unk24; @@ -32,6 +32,7 @@ struct GroundScript_ExecutePP_1_sub2 Callback callbacks[10]; // IDK the size.. }; +// size: 0x110 struct GroundScript_ExecutePP_1 { struct GroundScript_ExecutePP_1_sub2 *unk0; @@ -40,7 +41,7 @@ struct GroundScript_ExecutePP_1 u32 unkC; u16 unk10; u8 unk12; - u8 fill18[0x24 - 0x13]; + u8 *unk14[4]; struct GroundScript_ExecutePP_1_sub unk24; struct GroundScript_ExecutePP_1_sub unk84; u16 unkE4; diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index 592fca149..7a1ce0c40 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -15,6 +15,36 @@ extern const u8 *gUnknown_8117000[]; extern void sub_809AC18(s32, s32); extern void sub_809ABB4(s32, s32); +extern void sub_809AB4C(s32, s32); + +s16 sub_80A8BBC(s16); + +void sub_80A2500(s32 param_1, s16 *param_2) +{ + s16 temp; + if (*param_2 == 1) { + temp = param_1; + sub_809AB4C(temp, sub_80A8BBC(param_2[1])); + } +} + +void sub_80A252C(s32 param_1, s16 *param_2) +{ + s16 temp; + if (*param_2 == 1) { + temp = param_1; + sub_809ABB4(temp, sub_80A8BBC(param_2[1])); + } +} + +void sub_80A2558(s32 param_1, s16 *param_2) +{ + s16 temp; + if (*param_2 == 1) { + temp = param_1; + sub_809AC18(temp, sub_80A8BBC(param_2[1])); + } +} void sub_80A2584(s16 r0, s16 r1) { @@ -32,29 +62,29 @@ void sub_80A2598(s16 r0, s16 r1) u32 sub_80A25AC(u16 param_1) { - if (sub_8098F88() != 0) { - return param_1; - } - else - { - if (param_1 == 0x32) { - return 0x32; - } - else if (!sub_80023E4(0xc)) { - return 999; - } - else if (sub_80023E4(0xd)) { - return 0x13; - } - else if (param_1 != 1) { + if (sub_8098F88() != 0) { return param_1; } else { - sub_8001658(0,0x28); - return 1; + if (param_1 == 0x32) { + return 0x32; + } + else if (!sub_80023E4(0xc)) { + return 999; + } + else if (sub_80023E4(0xd)) { + return 0x13; + } + else if (param_1 != 1) { + return param_1; + } + else + { + sub_8001658(0,0x28); + return 1; + } } - } } struct unkStruct_80A2608 *sub_80A2608(s16 index) @@ -98,19 +128,19 @@ s32 sub_80A2668(u32 r0) u32 sub_80A2688(u8 r0) { - u32 uVar1; - - uVar1 = r0 - 0x4B; + u32 uVar1; - // u8 cast is needed for only this compare - if ((u8)uVar1 < 0x17) - return uVar1; - else if(r0 == 0x2F) - return 0x17; - else if (r0 == 0x30) - return 0x18; - else - return -1; + uVar1 = r0 - 0x4B; + + // u8 cast is needed for only this compare + if ((u8)uVar1 < 0x17) + return uVar1; + else if(r0 == 0x2F) + return 0x17; + else if (r0 == 0x30) + return 0x18; + else + return -1; } s16 sub_80A26B8(s16 r0) diff --git a/src/ground_map.c b/src/ground_map.c index ff5926406..ba64b249a 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -19,7 +19,7 @@ extern void sub_80A5EBC(void); extern void sub_80A2D00(void *); extern void sub_80015C0(u32, u32); extern void sub_80A5EDC(u32); -extern void sub_809D754(void *, struct DebugLocation *); +extern void sub_809D754(struct GroundScript_ExecutePP_1 *, struct DebugLocation *); extern void sub_80A2D68(void *); extern void nullsub_121(void); extern void sub_80A2D88(void *); diff --git a/src/ground_script.c b/src/ground_script.c index ec94a290d..6f845c8f6 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -16,13 +16,11 @@ extern u8 gUnknown_811656C[]; extern struct DebugLocation gUnknown_81165C8; -extern u8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *); extern void sub_809D520(void *); extern void sub_809D568(void *); extern u8 sub_80AC378(void); extern u8 sub_80AD290(void); extern u8 sub_80A8B74(void); -extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32 index); extern u8 sub_809A750(void); extern u8 *sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32); void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); @@ -36,6 +34,23 @@ struct FunctionScript extern struct FunctionScript gFunctionScriptTable[]; +void sub_809D6D8(struct GroundScript_ExecutePP_1 *param_1, s16 index, u8 *param_3) +{ + param_1->unk14[index] = param_3; +} + +bool8 sub_809D6E4(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 _index) +{ + u8 *scriptPtr; + s32 index = _index; + + scriptPtr = param_1->unk14[index]; + script->scriptPointer = scriptPtr; + script->scriptType = index; + script->unk6 = param_1->unk10; + script->unk8 = param_1->unk12; + return scriptPtr != NULL; +} void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_ExecutePP_3 *script, s16 index) { @@ -54,109 +69,110 @@ void sub_809D710(struct GroundScript_ExecutePP_1 *param_1, struct GroundScript_E bool8 sub_809D754(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused) { - sub_809D568(¶m_1->unk24); - sub_809D568(¶m_1->unk84); - return TRUE; + sub_809D568(¶m_1->unk24); + sub_809D568(¶m_1->unk84); + return TRUE; } bool8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *unused) { - sub_809D568(¶m_1->unk24); - sub_809D568(¶m_1->unk84); - param_1->unk24.unk2 = 4; - return TRUE; + sub_809D568(¶m_1->unk24); + sub_809D568(¶m_1->unk84); + param_1->unk24.unk2 = 4; + return TRUE; } bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused) { - if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) { - return FALSE; - } - switch(param_3->scriptType) { - case 2: - case 3: - if (param_1->unk24.scriptType == 1) { - memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); + if ((param_3 == NULL) || (param_3->scriptPointer == NULL)) { + return FALSE; + } + switch(param_3->scriptType) { + case 2: + case 3: + if (param_1->unk24.scriptType == 1) { + param_1->unk84 = param_1->unk24; + break; + } + if (param_1->unk24.scriptType == 5) { + sub_809D568(¶m_1->unk84); + } break; - } - if (param_1->unk24.scriptType == 5) { + case 5: + if (param_1->unk24.scriptType != 2) { + // "execute script type error B" + FatalError(&gUnknown_8116538, gUnknown_8116544); + } + if (param_1->unk84.scriptType != -1) { + // "execute script type error C" + FatalError(&gUnknown_8116560, gUnknown_811656C); + } + param_1->unk84 = param_1->unk24; + break; + case 0: + if (param_1->unk24.scriptType != 1) goto _0809D84A; + param_1->unk84 = param_1->unk24; + break; + case 1: + _0809D84A: sub_809D568(¶m_1->unk84); - } - break; - case 5: - if (param_1->unk24.scriptType != 2) { - // "execute script type error B" - FatalError(&gUnknown_8116538, gUnknown_8116544); - } - if (param_1->unk84.scriptType != -1) { - // "execute script type error C" - FatalError(&gUnknown_8116560, gUnknown_811656C); - } - memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); - break; - case 0: - if (param_1->unk24.scriptType != 1) goto _0809D84A; - memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); - break; - case 1: -_0809D84A: - sub_809D568(¶m_1->unk84); - break; - default: - // "execute script type error %d" - FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType); - } - sub_809D568(¶m_1->unk24); - if (param_2 != NULL) { - param_1->unkC = param_2[0]; - } - else { - sub_809D520(¶m_1->unkC); - } - param_1->unk24.scriptType = param_3->scriptType; - param_1->unk24.unk2 = 3; - param_1->unk24.unkC = param_3->unk6; - param_1->unk24.unkE = param_3->unk8; - param_1->unk24.scriptPointer1 = param_3->scriptPointer; - param_1->unk24.scriptPointer2 = param_3->scriptPointer; - param_1->unk24.unk10 = 0; - param_1->unk24.unk14 = 0; + break; + default: + // "execute script type error %d" + FatalError(&gUnknown_8116588, gUnknown_8116594, param_3->scriptType); + } + sub_809D568(¶m_1->unk24); + if (param_2 != NULL) { + param_1->unkC = param_2[0]; + } + else { + sub_809D520(¶m_1->unkC); + } + param_1->unk24.scriptType = param_3->scriptType; + param_1->unk24.unk2 = 3; + param_1->unk24.unkC = param_3->unk6; + param_1->unk24.unkE = param_3->unk8; + param_1->unk24.scriptPointer1 = param_3->scriptPointer; + param_1->unk24.scriptPointer2 = param_3->scriptPointer; + param_1->unk24.unk10 = 0; + param_1->unk24.unk14 = NULL; - if (param_1->unk0->callbacks[5] != 0) { - param_1->unk0->callbacks[5](param_1->unk4, ¶m_1->unk24.unk26); - } - return TRUE; + if (param_1->unk0->callbacks[5] != 0) { + param_1->unk0->callbacks[5](param_1->unk4, ¶m_1->unk24.unk26); + } + return TRUE; } bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 index, struct DebugLocation *debug) { - struct GroundScript_ExecutePP_3 auStack28; - - sub_809D6E4(param_1,&auStack28,index); - return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug); + struct GroundScript_ExecutePP_3 auStack28; + + sub_809D6E4(param_1,&auStack28,index); + return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug); } u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2) { - s32 param_2_s32; + s32 param_2_s32; - param_2_s32 = param_2; - - if ((param_2 == 0) && (sub_809A750() == 0)) { - param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0); - return 0; - } - else { - param_1->unk24.unk22 = param_2_s32; - param_1->unk24.unk2 = 2; - gUnknown_2039A36 = 1; - return 1; - } + param_2_s32 = param_2; + + if ((param_2 == 0) && (sub_809A750() == 0)) { + param_1->unk24.scriptPointer1 = sub_80A2460(param_1, 0); + return 0; + } + else { + param_1->unk24.unk22 = param_2_s32; + param_1->unk24.unk2 = 2; + gUnknown_2039A36 = 1; + return 1; + } } -u8 GroundScript_Cancel(struct GroundScript_ExecutePP_1 *r0) +bool8 GroundScript_Cancel(struct GroundScript_ExecutePP_1 *r0) { + // NOTE: Will always return TRUE return sub_809D770(r0, &gUnknown_81165C8); } From 85d6dd724a16e38d311867b39e2bfe8252628151 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 6 Aug 2023 15:43:39 -0700 Subject: [PATCH 05/14] clean up more wigglytuff --- asm/code_801EE10_mid.s | 292 ----------------- asm/dungeon_2.s | 50 --- include/friend_area.h | 1 + include/wigglytuff_shop.h | 9 + ld_script.txt | 3 - src/code_801D760.c | 3 +- src/code_8021774.c | 445 ------------------------- src/code_8021774_pre.c | 136 -------- src/code_8057824_1.c | 3 +- src/dungeon_2_1.c | 32 ++ src/friend_area.c | 6 +- src/wigglytuff_shop.c | 674 +++++++++++++++++++++++++++++++++++++- src/wonder_mail_3_mid.c | 3 +- sym_ewram2.txt | 15 - 14 files changed, 713 insertions(+), 959 deletions(-) delete mode 100644 asm/code_801EE10_mid.s delete mode 100644 src/code_8021774.c delete mode 100644 src/code_8021774_pre.c diff --git a/asm/code_801EE10_mid.s b/asm/code_801EE10_mid.s deleted file mode 100644 index 16d4c47fe..000000000 --- a/asm/code_801EE10_mid.s +++ /dev/null @@ -1,292 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8021410 -sub_8021410: - push {r4,lr} - ldr r4, _08021490 - ldr r0, [r4] - adds r0, 0xDC - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xDD - strb r2, [r0] - ldr r0, [r4] - adds r0, 0xDE - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - adds r0, 0xDF - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - adds r0, 0x5A - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x74] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x8A - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x74] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x8C - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x7C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08021490: .4byte gUnknown_203B280 - thumb_func_end sub_8021410 - - thumb_func_start sub_8021494 -sub_8021494: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xA8 - ldr r4, _08021568 - ldr r0, [r4] - ldr r0, [r0, 0x74] - bl sub_8008C54 - ldr r0, [r4] - ldr r0, [r0, 0x74] - bl sub_80073B8 - ldr r2, _0802156C - ldr r0, [r4] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r3, [r4] - adds r0, r3, 0 - adds r0, 0xDE - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0x4 - adds r1, r3, 0 - adds r1, 0x5E - movs r5, 0 - ldrsh r2, [r1, r5] - adds r2, 0x1 - movs r1, 0x7 - str r1, [sp] - ldr r1, [r3, 0x74] - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x1 - bl sub_8012BC4 - movs r0, 0 - mov r9, r0 - ldr r0, [r4] - adds r0, 0x5A - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r9, r0 - blt _080214FC - b _08021646 -_080214FC: - mov r8, r4 - add r2, sp, 0x58 - mov r10, r2 -_08021502: - mov r3, r8 - ldr r2, [r3] - adds r0, r2, 0 - adds r0, 0x5E - movs r5, 0 - ldrsh r1, [r0, r5] - subs r0, 0x2 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r1 - add r0, r9 - adds r0, r2, r0 - ldrb r5, [r0] - adds r7, r5, 0 - ldr r6, [r2, 0x3C] - cmp r6, 0x2 - bne _0802159C - add r0, sp, 0x8 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_8092578 - adds r0, r5, 0 - bl GetFriendAreaPrice - ldr r1, _08021570 - ldr r1, [r1] - movs r5, 0x98 - lsls r5, 2 - adds r1, r5 - ldr r1, [r1] - cmp r0, r1 - bgt _08021574 - mov r1, r8 - ldr r0, [r1] - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - mov r2, r8 - ldr r0, [r2] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - add r2, sp, 0x8 - bl xxx_call_draw_string - b _08021632 - .align 2, 0 -_08021568: .4byte gUnknown_203B280 -_0802156C: .4byte gUnknown_80DC494 -_08021570: .4byte gTeamInventoryRef -_08021574: - mov r0, r10 - ldr r1, _08021598 - add r2, sp, 0x8 - bl sprintfStatic - mov r3, r8 - ldr r0, [r3] - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - mov r5, r8 - ldr r0, [r5] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - b _080215FE - .align 2, 0 -_08021598: .4byte gUnknown_80DC4A4 -_0802159C: - cmp r6, 0 - bne _0802160C - ldr r0, _080215D4 - ldr r0, [r0] - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080215D8 - adds r0, r2, 0 - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r4, r0, 0 - adds r0, r5, 0 - bl GetFriendAreaName - adds r2, r0, 0 - mov r1, r8 - ldr r0, [r1] - ldr r3, [r0, 0x74] - str r6, [sp] - movs r0, 0x8 - adds r1, r4, 0 - bl xxx_call_draw_string - b _08021632 - .align 2, 0 -_080215D4: .4byte gFriendAreas -_080215D8: - adds r0, r5, 0 - bl GetFriendAreaName - adds r2, r0, 0 - mov r0, r10 - ldr r1, _08021608 - bl sprintfStatic - mov r2, r8 - ldr r0, [r2] - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r1, r0, 0 - mov r3, r8 - ldr r0, [r3] - ldr r3, [r0, 0x74] - str r6, [sp] -_080215FE: - movs r0, 0x8 - mov r2, r10 - bl xxx_call_draw_string - b _08021632 - .align 2, 0 -_08021608: .4byte gUnknown_80DC4AC -_0802160C: - adds r0, r2, 0 - adds r0, 0x40 - mov r1, r9 - bl sub_8013800 - adds r4, r0, 0 - adds r0, r7, 0 - bl GetFriendAreaName - adds r2, r0, 0 - mov r5, r8 - ldr r0, [r5] - ldr r3, [r0, 0x74] - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - adds r1, r4, 0 - bl xxx_call_draw_string -_08021632: - movs r0, 0x1 - add r9, r0 - mov r1, r8 - ldr r0, [r1] - adds r0, 0x5A - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r9, r0 - bge _08021646 - b _08021502 -_08021646: - ldr r0, _08021660 - ldr r0, [r0] - ldr r0, [r0, 0x74] - bl sub_80073E0 - add sp, 0xA8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08021660: .4byte gUnknown_203B280 - thumb_func_end sub_8021494 - - .align 2,0 diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s index 4fccc19ff..3891e3998 100644 --- a/asm/dungeon_2.s +++ b/asm/dungeon_2.s @@ -656,54 +656,4 @@ _08090880: bx r1 thumb_func_end sub_8090820 - thumb_func_start sub_8090888 -sub_8090888: - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r6, 0 - b _0809089C -_08090892: - ldrb r0, [r4] - cmp r0, 0xA - bne _0809089A - adds r6, 0x1 -_0809089A: - adds r4, 0x1 -_0809089C: - ldrb r0, [r4] - cmp r0, 0 - bne _08090892 - ldrb r7, [r5] - b _080908AE -_080908A6: - movs r0, 0xA - strb r0, [r4] - adds r4, 0x1 - adds r6, 0x1 -_080908AE: - adds r0, r6, 0 - movs r1, 0x3 - bl __modsi3 - cmp r0, 0 - bne _080908A6 - adds r1, r7, 0 - lsls r0, r1, 24 - cmp r0, 0 - beq _080908CE -_080908C2: - strb r1, [r4] - adds r4, 0x1 - adds r5, 0x1 - ldrb r1, [r5] - cmp r1, 0 - bne _080908C2 -_080908CE: - movs r0, 0 - strb r0, [r4] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8090888 - .align 2,0 diff --git a/include/friend_area.h b/include/friend_area.h index b9430be04..3f7d9959e 100644 --- a/include/friend_area.h +++ b/include/friend_area.h @@ -29,6 +29,7 @@ void UnlockFriendArea(u8 index); u8 *GetFriendAreaDescription(u8 index); u8 GetFriendAreaUnlockCondition(u8 index); s32 GetFriendAreaPrice(u8 index); +void sub_8092578(u8 *buffer, u8 index, bool8 printPrice); const char *GetFriendAreaName(u8 index); void sub_809249C(u8 friendArea, u8 clear); void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); diff --git a/include/wigglytuff_shop.h b/include/wigglytuff_shop.h index 1bf1dcdc3..a03785d5d 100644 --- a/include/wigglytuff_shop.h +++ b/include/wigglytuff_shop.h @@ -66,5 +66,14 @@ enum WigglytuffStates WIGGLYTUFF_CHECK_LEGENDARY = 0x1C, }; +bool8 sub_80211AC(u32 mode, u32 param_2); +bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3); +u32 sub_8021274(u8 param_1); +u8 sub_802132C(void); +void sub_8021354(bool8 param_1); +void sub_80213A0(void); +void sub_8021494(void); +u32 sub_80217EC(void); +void sub_8021830(void); #endif // GUARD_WIGGLYTUFF_SHOP_H diff --git a/ld_script.txt b/ld_script.txt index 7814ecd1b..b3fe169e7 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,9 +107,6 @@ SECTIONS { asm/code_801EE10.o(.text); src/code_801EE10_mid.o(.text); src/gulpin_shop_1.o(.text); - src/code_8021774_pre.o(.text); - asm/code_801EE10_mid.o(.text); - src/code_8021774.o(.text); src/wigglytuff_shop.o(.text); src/code_8023144_pre.o(.text); asm/code_8023144.o(.text); diff --git a/src/code_801D760.c b/src/code_801D760.c index 0e10d1d1a..677e8cfff 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -17,6 +17,7 @@ #include "menu_input.h" #include "code_8021774.h" #include "code_80118A4.h" +#include "wigglytuff_shop.h" struct unkStruct_203B258 { @@ -151,7 +152,7 @@ void sub_801D3A8(void) sub_801BEEC(gUnknown_203B250->index); break; case 10: - sub_8021774(gUnknown_203B250->currFriendAreaLocation, 1, 2); + sub_8021774(gUnknown_203B250->currFriendAreaLocation, TRUE, 2); break; case 11: InitializeJobListMenu(0); diff --git a/src/code_8021774.c b/src/code_8021774.c deleted file mode 100644 index f385b92bf..000000000 --- a/src/code_8021774.c +++ /dev/null @@ -1,445 +0,0 @@ -#include "constants/friend_area.h" -#include "global.h" -#include "input.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "pokemon.h" -#include "exclusive_pokemon.h" -#include "friend_area.h" -#include "code_800D090.h" -#include "menu_input.h" -#include "code_8021774.h" -#include "code_80118A4.h" - -struct unkStruct_203B28C -{ - struct MenuInputStructSub unk0; - u8 friendArea; - u8 unkD; - s16 unkE[0x10]; - u32 unk30[0x10]; - s32 unk70; - s32 unk74; - struct UnkTextStruct2 *unk78; - struct UnkTextStruct2 unk7C[4]; - u8 unkDC[4]; -}; -extern struct unkStruct_203B28C *gUnknown_203B28C; - -struct unkStruct_203B280 -{ - u8 unk0[NUM_FRIEND_AREAS]; - u32 unk3C; - struct MenuInputStruct unk40; - s32 unk74; - struct UnkTextStruct2 *unk78; - struct UnkTextStruct2 unk7C[4]; - u8 unkDC[4]; -}; -extern struct unkStruct_203B280 *gUnknown_203B280; - - - -extern struct UnkTextStruct2 gUnknown_80DC4BC; -extern struct UnkTextStruct2 gUnknown_80DC4D8; -s16 GetBaseSpeciesNoUnown(s16 index); -s32 sub_8021B58(s16 param_1); - -extern u8 gUnknown_80DC518[]; -extern u8 gUnknown_80DC4F0[]; -extern u8 *gUnknown_80D49BC[]; -extern u8 gUnknown_80DC524[]; -extern void sub_8008C54(u32); -extern void sub_8092578(u8 *buffer, u8 index, u8 r2); - -extern void sub_8021878(void); -extern void sub_8021894(void); -extern void sub_8021A60(void); -void sub_8021820(void); -u8 sub_80023E4(u32); - -s32 sub_8021664(void) -{ - s32 index; - s32 counter; - - counter = 0; - switch(gUnknown_203B280->unk3C) - { - case 0: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - gUnknown_203B280->unk0[counter] = index; - counter++; - } - break; - case 1: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if(gFriendAreas[index]) - { - gUnknown_203B280->unk0[counter] = index; - counter++; - } - } - break; - case 2: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if (gFriendAreas[index] == 0) { - switch(GetFriendAreaUnlockCondition(index)) - { - case UNLOCK_SHOP_STORY: - gUnknown_203B280->unk0[counter] = index; - counter++; - break; - case UNLOCK_SHOP_POST_GAME: - if(sub_80023E4(6) != 0) { - gUnknown_203B280->unk0[counter] = index; - counter++; - } - break; - } - } - } - break; - } - return counter; -} - - -u8 sub_8021700(u32 mode) -{ - s32 index; - - switch(mode) - { - case 0: - return FALSE; - case 1: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if (gFriendAreas[index] != 0) { - return FALSE; - } - } - break; - case 2: - for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) - { - if (gFriendAreas[index] == 0) { - switch(GetFriendAreaUnlockCondition(index)) - { - case UNLOCK_SHOP_STORY: - return FALSE; - case UNLOCK_SHOP_POST_GAME: - if(sub_80023E4(6) != 0) { - return FALSE; - } - break; - } - } - } - break; - } - return TRUE; -} - - -bool8 sub_8021774(u8 friendArea, u8 param_2, s32 param_3) -{ - gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8); - gUnknown_203B28C->friendArea = friendArea; - gUnknown_203B28C->unkD = param_2; - sub_801317C(&gUnknown_203B28C->unk0); - sub_8021A60(); - gUnknown_203B28C->unk74 = param_3; - gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3]; - sub_8006518(gUnknown_203B28C->unk7C); - gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8; - sub_8021820(); - return TRUE; -} - -u32 sub_80217EC(void) -{ - switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74)) - { - case 2: - PlayMenuSoundEffect(1); - return 2; - case 1: - PlayMenuSoundEffect(0); - return 3; - default: - return 0; - } -} - -void sub_8021820(void) -{ - sub_8021878(); - sub_8021894(); -} - -void sub_8021830(void) -{ - if(gUnknown_203B28C) - { - gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B28C->unk7C, 1, 1); - MemoryFree(gUnknown_203B28C); - gUnknown_203B28C = NULL; - } -} - -void sub_8021878(void) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B28C->unk7C, 1, 1); -} - -void sub_8021894(void) -{ - u8 *string; - s32 iVar1; - u32 y; - u32 x; - s32 index; - u8 buffer1 [256]; - u8 buffer2 [100]; - - sub_80073B8(gUnknown_203B28C->unk74); - sub_8092578(buffer1,gUnknown_203B28C->friendArea,0); - xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0); - string = GetFriendAreaDescription(gUnknown_203B28C->friendArea); - xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0); - if (gUnknown_203B28C->unkD != 0) { - xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0); - } - else { - xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants - } - sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4); - if (gUnknown_203B28C->unkD != 0) { - sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4); - } - else { - sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4); - } - sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4); - sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4); - sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4); - for(index = 0; index < gUnknown_203B28C->unk70; index++) - { - iVar1 = index % 3; - x = iVar1 * 0x3f + 7; - iVar1 = index / 3; - y = iVar1 * 0xc + 0x47; - sub_808D930(buffer2, gUnknown_203B28C->unkE[index]); - switch(gUnknown_203B28C->unk30[index]) - { - case 0: - xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ??? - break; - case 1: - xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s - break; - case 2: - sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR} - xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0); - break; - } - } - sub_80073E0(gUnknown_203B28C->unk74); -} - -// https://decomp.me/scratch/P2BiC -// 99.40% matching (Seth) -#ifndef NONMATCHING -NAKED -void sub_8021A60(void) -{ - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tldr r2, _08021B4C\n" - "\tldr r1, [r2]\n" - "\tmovs r0, 0\n" - "\tstr r0, [r1, 0x70]\n" - "\tmovs r6, 0\n" - "\tadds r4, r2, 0\n" - "\tmovs r3, 0\n" -"_08021A70:\n" - "\tldr r1, [r4]\n" - "\tlsls r2, r6, 1\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xE\n" - "\tadds r0, r2\n" - "\tstrh r3, [r0]\n" - "\tlsls r0, r6, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tstr r3, [r1]\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0xF\n" - "\tble _08021A70\n" - "\tmovs r6, 0\n" - "\tldr r7, _08021B4C\n" -"_08021A8E:\n" - "\tlsls r0, r6, 16\n" - "\tasrs r5, r0, 16\n" - "\tldr r4, [r7]\n" - "\tadds r0, r5, 0\n" - "\tbl GetFriendArea\n" - "\tldrb r1, [r4, 0xC]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r1, r0\n" - "\tbne _08021AC4\n" - "\tadds r0, r5, 0\n" - "\tbl GetBaseSpeciesNoUnown\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r5, r0\n" - "\tbne _08021AC4\n" - "\tldr r3, [r7]\n" - "\tldr r1, [r3, 0x70]\n" - "\tlsls r2, r1, 1\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0xE\n" - "\tadds r0, r2\n" - "\tstrh r5, [r0]\n" - "\tadds r1, 0x1\n" - "\tstr r1, [r3, 0x70]\n" -"_08021AC4:\n" - "\tadds r6, 0x1\n" - "\tldr r0, _08021B50\n" - "\tcmp r6, r0\n" - "\tble _08021A8E\n" - "\tmovs r6, 0\n" -"_08021ACE:\n" - "\tlsls r0, r6, 16\n" - "\tasrs r4, r0, 16\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8098134\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08021AFC\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8021B58\n" - "\tadds r2, r0, 0\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tcmp r2, r0\n" - "\tbeq _08021AFC\n" - "\tldr r0, _08021B4C\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [r1]\n" -"_08021AFC:\n" - "\tadds r6, 0x1\n" - "\tldr r0, _08021B50\n" - "\tcmp r6, r0\n" - "\tble _08021ACE\n" - "\tmovs r6, 0\n" - "\tldr r4, _08021B54\n" -"_08021B08:\n" - "\tmovs r0, 0x58\n" - "\tadds r1, r6, 0\n" - "\tmuls r1, r0\n" - "\tldr r0, [r4]\n" - "\tadds r2, r0, r1\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _08021B3C\n" - "\tmovs r1, 0x8\n" - "\tldrsh r0, [r2, r1]\n" - "\tbl sub_8021B58\n" - "\tadds r2, r0, 0\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tcmp r2, r0\n" - "\tbeq _08021B3C\n" - "\tldr r0, _08021B4C\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x2\n" - "\tstr r0, [r1]\n" -"_08021B3C:\n" - "\tadds r6, 0x1\n" - "\tmovs r0, 0xCE\n" - "\tlsls r0, 1\n" - "\tcmp r6, r0\n" - "\tble _08021B08\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08021B4C: .4byte gUnknown_203B28C\n" -"_08021B50: .4byte 0x000001a7\n" -"_08021B54: .4byte gRecruitedPokemonRef"); - -} -#else -void sub_8021A60(void) -{ - s32 sVar4; - s32 iVar6; - s32 index; - struct PokemonStruct *pokeStruct; - - gUnknown_203B28C->unk70 = 0; - for(index = 0; index < 0x10; index++) - { - gUnknown_203B28C->unkE[index] = 0; - gUnknown_203B28C->unk30[index] = 0; - } - for(index = 0; index < 0x1A8; index++) - { - if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) && - ((s16)index == GetBaseSpeciesNoUnown(index))) { - iVar6 = gUnknown_203B28C->unk70; - gUnknown_203B28C->unkE[iVar6] = index; - gUnknown_203B28C->unk70 = iVar6 + 1; - } - } - for(index = 0; index < 0x1A8; index++) - { - if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) { - gUnknown_203B28C->unk30[sVar4] = 1; - } - } - for(index = 0; index < 0x19d; index++) - { - pokeStruct = &gRecruitedPokemonRef->pokemon[index]; - if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && - (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { - gUnknown_203B28C->unk30[sVar4] = 2; - } - } - return; -} -#endif - -s32 sub_8021B58(s16 species) -{ - s32 baseSpecies; - int index; - - baseSpecies = GetBaseSpeciesNoUnown(species); - for(index = 0; index < gUnknown_203B28C->unk70; index++) - { - if (baseSpecies == gUnknown_203B28C->unkE[index]) return index; - } - return -1; -} - diff --git a/src/code_8021774_pre.c b/src/code_8021774_pre.c deleted file mode 100644 index d0e47fffa..000000000 --- a/src/code_8021774_pre.c +++ /dev/null @@ -1,136 +0,0 @@ -#include "global.h" -#include "code_80118A4.h" -#include "code_801EE10_mid.h" -#include "code_8021774_pre.h" -#include "constants/friend_area.h" -#include "constants/input.h" -#include "friend_area.h" -#include "input.h" -#include "memory.h" -#include "text1.h" -#include "text2.h" -#include "item.h" -#include "team_inventory.h" -#include "menu_input.h" - -// size: 0xE0 -struct unkStruct_203B280 -{ - u8 unk0[NUM_FRIEND_AREAS]; - u32 unk3C; - struct MenuInputStruct unk40; - s32 unk74; - struct UnkTextStruct2 *unk78; - struct UnkTextStruct2 unk7C[4]; - u8 unkDC[4]; -}; - -extern struct unkStruct_203B280 *gUnknown_203B280; -extern u32 gUnknown_203B284; -extern u16 gUnknown_203B288; -extern u16 gUnknown_203B28A; - -extern struct UnkTextStruct2 gUnknown_80DC47C; -extern struct UnkTextStruct2 gUnknown_80DC464; - -u8 sub_8021700(u32 mode); -s32 sub_8021664(void); -extern void sub_8021410(void); - -bool8 sub_80211AC(u32 param_1, u32 param_2) -{ - if(sub_8021700(param_1)) - { - return FALSE; - } - else { - gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8); - gUnknown_203B280->unk3C = param_1; - gUnknown_203B280->unk74 = param_2; - gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74]; - sub_8006518(gUnknown_203B280->unk7C); - gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C; - gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B280->unk7C, 1, 1); - sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2); - if(gUnknown_203B284 == gUnknown_203B280->unk3C) - { - gUnknown_203B280->unk40.menuIndex = gUnknown_203B288; - gUnknown_203B280->unk40.unk1E = gUnknown_203B28A; - sub_8013984(&gUnknown_203B280->unk40); - } - sub_8021410(); - sub_8021494(); - return TRUE; - } -} - -u32 sub_8021274(bool8 param_1) -{ - if (param_1 == 0) { - sub_8013660(&gUnknown_203B280->unk40); - return 0; - } - switch(GetKeyPress(&gUnknown_203B280->unk40)) - { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - if ((gUnknown_203B280->unk3C == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventoryRef->teamMoney)) - { - PlayMenuSoundEffect(2); - } - else - { - PlayMenuSoundEffect(0); - } - return 3; - case INPUT_START_BUTTON: - PlayMenuSoundEffect(4); - return 4; - default: - if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) { - sub_8021410(); - sub_8021494(); - return 1; - } - else { - return 0; - } - } -} - -u8 sub_802132C(void) -{ - return gUnknown_203B280->unk0[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex]; -} - -void sub_8021354(bool8 param_1) -{ - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B280->unk7C,0,0); - gUnknown_203B280->unk40.unk22 = sub_8021664(); - sub_8013984(&gUnknown_203B280->unk40); - sub_8021410(); - sub_8021494(); - if (param_1) { - AddMenuCursorSprite(&gUnknown_203B280->unk40); - } -} - -void sub_80213A0(void) -{ - if(gUnknown_203B280) - { - gUnknown_203B284 = gUnknown_203B280->unk3C; - gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex; - gUnknown_203B28A = gUnknown_203B280->unk40.unk1E; - gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B280->unk7C, 1, 1); - MemoryFree(gUnknown_203B280); - gUnknown_203B280 = NULL; - } -} diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 7301385f0..514231ee6 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -390,7 +390,6 @@ extern u8 JirachiFriendAreaSearch(void); extern u8 sub_80860A8(u32); extern void sub_8049ED4(); -extern void sub_8092578(u8 *buffer, u8 index, u8 r2); extern void sub_8052D44(s16 *, struct Entity *, struct Entity *); extern void SetMessageArgument(u8 *, struct Entity *, u32); extern struct Entity *GetLeader(); @@ -3736,7 +3735,7 @@ void JirachiWish(void) PlaySoundEffect(0xd4); LeaderEntity = GetLeader(); SetMessageArgument(gAvailablePokemonNames,LeaderEntity,0); - sub_8092578(gUnknown_202DE58,friendArea,0); + sub_8092578(gUnknown_202DE58,friendArea,FALSE); // Obtained the friend area! DisplayDungeonDialogue(&gUnknown_8105B68); } diff --git a/src/dungeon_2_1.c b/src/dungeon_2_1.c index 1c641a0c4..3e014030e 100644 --- a/src/dungeon_2_1.c +++ b/src/dungeon_2_1.c @@ -12,6 +12,38 @@ extern u8 *gUnknown_8108084[]; s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c + +void sub_8090888(u8 *param_1, u8 *param_2) +{ + s32 iVar3; + + iVar3 = 0; + + if(*param_1 != 0) + { + do { + if (*param_1 == 0xA) { + iVar3++; + } + param_1++; + } while (*param_1 != 0); + } + + while (iVar3 % 3) { + *param_1 = 0xA; + param_1++; + iVar3++; + } + + while (*param_2 != 0) { + *param_1 = *param_2; + param_1++; + param_2++; + } + + *param_1 = 0; +} + u32 sub_80908D8(struct DungeonLocation *dungeon) { if ((dungeon->id < DUNGEON_OUT_ON_RESCUE) && (dungeon->floor < gDungeonFloorCount[dungeon->id])) { diff --git a/src/friend_area.c b/src/friend_area.c index 4911e6375..8113ddcbd 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -515,11 +515,11 @@ void sub_8092558(u8 *buffer, u8 index) sprintfStatic(buffer, &gUnknown_81098A4, gFriendAreaNames[index]); } -void sub_8092578(u8 *buffer, u8 index, u8 r2) +void sub_8092578(u8 *buffer, u8 index, bool8 printPrice) { // I think this is when we buy the friend area from wigglytuff u8 priceBuffer[0x14]; - if(r2) + if(printPrice) { sub_8090FEC(gFriendAreaSettings[index].price, priceBuffer, 1); sprintfStatic(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, priceBuffer); @@ -574,7 +574,7 @@ void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u param_2->unk8 = iVar4; param_2->hasFriendArea = gFriendAreas[counter]; - if (param_2->hasFriendArea != 0) { + if (param_2->hasFriendArea) { param_2->unk2 = 0; param_2->numPokemon = gFriendAreaSettings[counter].num_pokemon; diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index 1c9a1e7cb..42f09add8 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -1,6 +1,12 @@ #include "global.h" #include "constants/friend_area.h" #include "pokemon.h" +#include "constants/input.h" +#include "file_system.h" +#include "menu.h" +#include "pokemon.h" +#include "pokemon_3.h" +#include "input.h" #include "team_inventory.h" #include "text1.h" #include "text2.h" @@ -10,17 +16,44 @@ #include "wigglytuff_shop.h" #include "felicity_bank.h" #include "code_80130A8.h" -#include "code_8021774_pre.h" #include "code_801EE10_mid.h" #include "code_8021774.h" #include "code_80118A4.h" +#include "code_800D090.h" +#include "event_flag.h" -extern struct UnkTextStruct2 gUnknown_80DC534; -extern struct UnkTextStruct2 gUnknown_80DC564; -extern struct UnkTextStruct2 gUnknown_80DC54C; -extern struct UnkTextStruct2 gUnknown_80DC534; +struct unkStruct_203B280 +{ + /* 0x0 */ u8 friendAreas[NUM_FRIEND_AREAS]; + /* 0x3C */ u32 mode; + struct MenuInputStruct unk40; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +EWRAM_DATA_2 struct unkStruct_203B280 *gUnknown_203B280 = {0}; +EWRAM_DATA_2 u32 gUnknown_203B284 = {0}; +EWRAM_DATA_2 u16 gUnknown_203B288 = {0}; +EWRAM_DATA_2 u16 gUnknown_203B28A = {0}; + +struct unkStruct_203B28C +{ + struct MenuInputStructSub unk0; + /* 0xC */ u8 friendArea; + bool8 unkD; + s16 unkE[0x10]; + u32 unk30[0x10]; + /* 0x70 */ s32 numPokemoninFriendArea; + s32 unk74; + struct UnkTextStruct2 *unk78; + struct UnkTextStruct2 unk7C[4]; + u8 unkDC[4]; +}; +EWRAM_DATA_2 struct unkStruct_203B28C *gUnknown_203B28C = {0}; EWRAM_DATA_2 struct WigglytuffShop *gWigglytuffShop = {0}; +extern u8 *gFriendAreas; extern u8 gUnknown_202E628[]; extern u32 gUnknown_202DE30[2]; @@ -35,13 +68,31 @@ extern const u8 *gUnknown_80D4928[]; extern const u8 *gUnknown_80D4934[]; extern const u8 *gUnknown_80D4970[]; extern const u8 *gUnknown_80D4978[]; +extern struct UnkTextStruct2 gUnknown_80DC464; +extern struct UnkTextStruct2 gUnknown_80DC47C; +extern struct UnkTextStruct2 gUnknown_80DC4BC; +extern struct UnkTextStruct2 gUnknown_80DC4D8; +extern struct UnkTextStruct2 gUnknown_80DC534; +extern struct UnkTextStruct2 gUnknown_80DC54C; +extern struct UnkTextStruct2 gUnknown_80DC564; + +extern u8 *gUnknown_80D49BC[]; +extern u8 gUnknown_80DC4A4[]; +extern u8 gUnknown_80DC494[]; +extern u8 gUnknown_80DC4AC[]; +extern u8 gUnknown_80DC4F0[]; +extern u8 gUnknown_80DC518[]; +extern u8 gUnknown_80DC524[]; u8 sub_8021700(u32); void sub_8092578(u8 *buffer, u8 index, u8 r2); +extern void DrawTeamMoneyBox(u32); +extern void sub_803AA34(); +extern u8 sub_803ABC8(void); +extern u8 sub_802132C(void); extern void sub_8022380(void); bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4); void sub_8023354(u8 param_1); -extern bool8 sub_80023E4(u32); extern void CreateWigglytuffConfirmFriendAreaMenu(void); extern u8 sub_8099B94(void); extern void sub_8099AFC(u32, u32, u32); @@ -65,6 +116,609 @@ void SetWigglytuffState(s32); void sub_8021D5C(void); void UpdateWigglytuffDialogue(void); +extern void sub_8008C54(u32); +//extern void sub_80073B8(u32); +//extern void sub_80073E0(u32); +//void sub_800792C(u32, u32, u32, u32, u32); +//void sub_8007A78(u32, u32, u32, u32, u32); + +void sub_8021878(void); +void sub_8021894(void); +void sub_8021820(void); +void sub_8021A60(void); +s32 sub_8021664(void); +void sub_8021410(void); + +extern void PlayMenuSoundEffect(u32); + +bool8 sub_80211AC(u32 mode, u32 param_2) +{ + if(sub_8021700(mode)) + { + return FALSE; + } + else { + gUnknown_203B280 = MemoryAlloc(sizeof(struct unkStruct_203B280), 8); + gUnknown_203B280->mode = mode; + gUnknown_203B280->unk74 = param_2; + gUnknown_203B280->unk78 = &gUnknown_203B280->unk7C[gUnknown_203B280->unk74]; + sub_8006518(gUnknown_203B280->unk7C); + gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC47C; + gUnknown_203B280->unk78->unk14 = gUnknown_203B280->unkDC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C, 1, 1); + sub_8013818(&gUnknown_203B280->unk40, sub_8021664(), 10, param_2); + if(gUnknown_203B284 == gUnknown_203B280->mode) + { + gUnknown_203B280->unk40.menuIndex = gUnknown_203B288; + gUnknown_203B280->unk40.unk1E = gUnknown_203B28A; + sub_8013984(&gUnknown_203B280->unk40); + } + sub_8021410(); + sub_8021494(); + return TRUE; + } +} + +u32 sub_8021274(u8 param_1) +{ + if (param_1 == 0) { + sub_8013660(&gUnknown_203B280->unk40); + return 0; + } + switch(GetKeyPress(&gUnknown_203B280->unk40)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + if ((gUnknown_203B280->mode == 2) && (GetFriendAreaPrice(sub_802132C()) > gTeamInventoryRef->teamMoney)) + { + PlayMenuSoundEffect(2); + } + else + { + PlayMenuSoundEffect(0); + } + return 3; + case INPUT_START_BUTTON: + PlayMenuSoundEffect(4); + return 4; + default: + if (sub_80138B8(&gUnknown_203B280->unk40, 1) != 0) { + sub_8021410(); + sub_8021494(); + return 1; + } + else { + return 0; + } + } +} + +u8 sub_802132C(void) +{ + return gUnknown_203B280->friendAreas[gUnknown_203B280->unk40.unk1E * gUnknown_203B280->unk40.unk1C + gUnknown_203B280->unk40.menuIndex]; +} + +void sub_8021354(bool8 param_1) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C,0,0); + gUnknown_203B280->unk40.unk22 = sub_8021664(); + sub_8013984(&gUnknown_203B280->unk40); + sub_8021410(); + sub_8021494(); + if (param_1) { + AddMenuCursorSprite(&gUnknown_203B280->unk40); + } +} + +void sub_80213A0(void) +{ + if(gUnknown_203B280) + { + gUnknown_203B284 = gUnknown_203B280->mode; + gUnknown_203B288 = gUnknown_203B280->unk40.menuIndex; + gUnknown_203B28A = gUnknown_203B280->unk40.unk1E; + gUnknown_203B280->unk7C[gUnknown_203B280->unk74] = gUnknown_80DC464; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B280->unk7C, 1, 1); + MemoryFree(gUnknown_203B280); + gUnknown_203B280 = NULL; + } +} + +NAKED +void sub_8021410(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _08021490\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDC\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDD\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDE\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0xDF\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x7C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x5A\n" + "\tmovs r1, 0\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, 0x74]\n" + "\tlsls r1, r3, 1\n" + "\tadds r1, r3\n" + "\tlsls r1, 3\n" + "\tadds r1, r2, r1\n" + "\tadds r1, 0x8A\n" + "\tasrs r3, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r2, 0x74]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tlsls r0, 3\n" + "\tadds r2, r0\n" + "\tadds r3, 0x2\n" + "\tadds r2, 0x8C\n" + "\tstrh r3, [r2]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x7C\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" +"_08021490: .4byte gUnknown_203B280"); + +} + +void sub_8021494(void) +{ + u8 friendAreaIndex; + s32 index; + u8 buffer1 [80]; + u8 buffer2 [80]; + + sub_8008C54(gUnknown_203B280->unk74); + sub_80073B8(gUnknown_203B280->unk74); + xxx_call_draw_string(10,0,gUnknown_80DC494,gUnknown_203B280->unk74,0); // Friend Areas + sub_8012BC4(gUnknown_203B280->unkDC[2] * 8 + 4,0,(gUnknown_203B280->unk40).unk1E + 1,1,7,gUnknown_203B280->unk74); + + for(index = 0; index < (gUnknown_203B280->unk40).unk1A; index++) + { + friendAreaIndex = gUnknown_203B280->friendAreas[(gUnknown_203B280->unk40).unk1E * (gUnknown_203B280->unk40).unk1C + index]; + if (gUnknown_203B280->mode == 2) { + sub_8092578(buffer1,friendAreaIndex,TRUE); + + if (GetFriendAreaPrice(friendAreaIndex) <= gTeamInventoryRef->teamMoney) { + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer1,gUnknown_203B280->unk74,0); + } + else { + sprintfStatic(buffer2,gUnknown_80DC4A4,buffer1); // {RED} %s {END} + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer2,gUnknown_203B280->unk74,0); + } + } + else if (gUnknown_203B280->mode == 0) { + if (gFriendAreas[friendAreaIndex] == 1) { + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),GetFriendAreaName(friendAreaIndex),gUnknown_203B280->unk74,0); + } + else + { + sprintfStatic(buffer2,gUnknown_80DC4AC,GetFriendAreaName(friendAreaIndex)); // {GREEN} %s {END} + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),buffer2,gUnknown_203B280->unk74,0); + } + } + else { + xxx_call_draw_string(8,sub_8013800(&gUnknown_203B280->unk40,index),GetFriendAreaName(friendAreaIndex),gUnknown_203B280->unk74,0); + } + } + sub_80073E0(gUnknown_203B280->unk74); +} + +s32 sub_8021664(void) +{ + s32 index; + s32 counter; + + counter = 0; + switch(gUnknown_203B280->mode) + { + case 0: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + gUnknown_203B280->friendAreas[counter] = index; + counter++; + } + break; + case 1: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if(gFriendAreas[index]) + { + gUnknown_203B280->friendAreas[counter] = index; + counter++; + } + } + break; + case 2: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] == 0) { + switch(GetFriendAreaUnlockCondition(index)) + { + case UNLOCK_SHOP_STORY: + gUnknown_203B280->friendAreas[counter] = index; + counter++; + break; + case UNLOCK_SHOP_POST_GAME: + if(sub_80023E4(6) != 0) { + gUnknown_203B280->friendAreas[counter] = index; + counter++; + } + break; + } + } + } + break; + } + return counter; +} + + +u8 sub_8021700(u32 mode) +{ + s32 index; + + switch(mode) + { + case 0: + return FALSE; + case 1: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] != 0) { + return FALSE; + } + } + break; + case 2: + for(index = BOUNTIFUL_SEA; index < NUM_FRIEND_AREAS; index++) + { + if (gFriendAreas[index] == 0) { + switch(GetFriendAreaUnlockCondition(index)) + { + case UNLOCK_SHOP_STORY: + return FALSE; + case UNLOCK_SHOP_POST_GAME: + if(sub_80023E4(6) != 0) { + return FALSE; + } + break; + } + } + } + break; + } + return TRUE; +} + +bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3) +{ + gUnknown_203B28C = MemoryAlloc(sizeof(struct unkStruct_203B28C), 8); + gUnknown_203B28C->friendArea = friendArea; + gUnknown_203B28C->unkD = param_2; + sub_801317C(&gUnknown_203B28C->unk0); + sub_8021A60(); + gUnknown_203B28C->unk74 = param_3; + gUnknown_203B28C->unk78 = &gUnknown_203B28C->unk7C[param_3]; + sub_8006518(gUnknown_203B28C->unk7C); + gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4D8; + sub_8021820(); + return TRUE; +} + +u32 sub_80217EC(void) +{ + switch(sub_8012A64(&gUnknown_203B28C->unk0, gUnknown_203B28C->unk74)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + return 0; + } +} + +void sub_8021820(void) +{ + sub_8021878(); + sub_8021894(); +} + +void sub_8021830(void) +{ + if(gUnknown_203B28C) + { + gUnknown_203B28C->unk7C[gUnknown_203B28C->unk74] = gUnknown_80DC4BC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B28C->unk7C, 1, 1); + MemoryFree(gUnknown_203B28C); + gUnknown_203B28C = NULL; + } +} + +void sub_8021878(void) +{ + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B28C->unk7C, 1, 1); +} + +void sub_8021894(void) +{ + u8 *string; + u32 y; + u32 x; + s32 index; + u8 buffer1 [256]; + u8 buffer2 [100]; + + sub_80073B8(gUnknown_203B28C->unk74); + sub_8092578(buffer1,gUnknown_203B28C->friendArea,FALSE); + xxx_call_draw_string(0x14,0,buffer1,gUnknown_203B28C->unk74,0); + string = GetFriendAreaDescription(gUnknown_203B28C->friendArea); + xxx_call_draw_string(10,0x14,string,gUnknown_203B28C->unk74,0); + if (gUnknown_203B28C->unkD != 0) { + xxx_call_draw_string(0x20,0x3c,gUnknown_80DC4F0,gUnknown_203B28C->unk74,0); + } + else { + xxx_call_draw_string(0x20,0x3c,gUnknown_80DC518,gUnknown_203B28C->unk74,0); // Inhabitants + } + sub_800792C(gUnknown_203B28C->unk74,4,0x40,0x14,4); + if (gUnknown_203B28C->unkD != 0) { + sub_800792C(gUnknown_203B28C->unk74,0xb8,0x40,0x14,4); + } + else { + sub_800792C(gUnknown_203B28C->unk74,0x5e,0x40,0x6e,4); + } + sub_800792C(gUnknown_203B28C->unk74,4,0x82,200,4); + sub_8007A78(gUnknown_203B28C->unk74,3,0x40,0x43,4); + sub_8007A78(gUnknown_203B28C->unk74,0xcc,0x40,0x43,4); + for(index = 0; index < gUnknown_203B28C->numPokemoninFriendArea; index++) + { + x = (index % 3) * 63 + 7; + y = (index / 3) * 12 + 0x47; + sub_808D930(buffer2, gUnknown_203B28C->unkE[index]); + switch(gUnknown_203B28C->unk30[index]) + { + case 0: // Not recruited/seen + xxx_call_draw_string(x,y,*gUnknown_80D49BC,gUnknown_203B28C->unk74,0); // ??? + break; + case 1: // Seen but not recruited + xxx_call_draw_string(x,y,buffer2,gUnknown_203B28C->unk74,0); // %s + break; + case 2: + sprintfStatic(buffer1,gUnknown_80DC524,buffer2); // {CYAN} %s {END_COLOR} + xxx_call_draw_string(x,y,buffer1,gUnknown_203B28C->unk74,0); + break; + } + } + sub_80073E0(gUnknown_203B28C->unk74); +} + +// https://decomp.me/scratch/P2BiC +// 99.40% matching (Seth) +#ifndef NONMATCHING +NAKED +void sub_8021A60(void) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tldr r2, _08021B4C\n" + "\tldr r1, [r2]\n" + "\tmovs r0, 0\n" + "\tstr r0, [r1, 0x70]\n" + "\tmovs r6, 0\n" + "\tadds r4, r2, 0\n" + "\tmovs r3, 0\n" +"_08021A70:\n" + "\tldr r1, [r4]\n" + "\tlsls r2, r6, 1\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0xE\n" + "\tadds r0, r2\n" + "\tstrh r3, [r0]\n" + "\tlsls r0, r6, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tstr r3, [r1]\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0xF\n" + "\tble _08021A70\n" + "\tmovs r6, 0\n" + "\tldr r7, _08021B4C\n" +"_08021A8E:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r5, r0, 16\n" + "\tldr r4, [r7]\n" + "\tadds r0, r5, 0\n" + "\tbl GetFriendArea\n" + "\tldrb r1, [r4, 0xC]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r1, r0\n" + "\tbne _08021AC4\n" + "\tadds r0, r5, 0\n" + "\tbl GetBaseSpeciesNoUnown\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r5, r0\n" + "\tbne _08021AC4\n" + "\tldr r3, [r7]\n" + "\tldr r1, [r3, 0x70]\n" + "\tlsls r2, r1, 1\n" + "\tadds r0, r3, 0\n" + "\tadds r0, 0xE\n" + "\tadds r0, r2\n" + "\tstrh r5, [r0]\n" + "\tadds r1, 0x1\n" + "\tstr r1, [r3, 0x70]\n" +"_08021AC4:\n" + "\tadds r6, 0x1\n" + "\tldr r0, _08021B50\n" + "\tcmp r6, r0\n" + "\tble _08021A8E\n" + "\tmovs r6, 0\n" +"_08021ACE:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r4, r0, 16\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8098134\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08021AFC\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8021B58\n" + "\tadds r2, r0, 0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r2, r0\n" + "\tbeq _08021AFC\n" + "\tldr r0, _08021B4C\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [r1]\n" +"_08021AFC:\n" + "\tadds r6, 0x1\n" + "\tldr r0, _08021B50\n" + "\tcmp r6, r0\n" + "\tble _08021ACE\n" + "\tmovs r6, 0\n" + "\tldr r4, _08021B54\n" +"_08021B08:\n" + "\tmovs r0, 0x58\n" + "\tadds r1, r6, 0\n" + "\tmuls r1, r0\n" + "\tldr r0, [r4]\n" + "\tadds r2, r0, r1\n" + "\tldrb r1, [r2]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _08021B3C\n" + "\tmovs r1, 0x8\n" + "\tldrsh r0, [r2, r1]\n" + "\tbl sub_8021B58\n" + "\tadds r2, r0, 0\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r2, r0\n" + "\tbeq _08021B3C\n" + "\tldr r0, _08021B4C\n" + "\tldr r1, [r0]\n" + "\tlsls r0, r2, 2\n" + "\tadds r1, 0x30\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x2\n" + "\tstr r0, [r1]\n" +"_08021B3C:\n" + "\tadds r6, 0x1\n" + "\tmovs r0, 0xCE\n" + "\tlsls r0, 1\n" + "\tcmp r6, r0\n" + "\tble _08021B08\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08021B4C: .4byte gUnknown_203B28C\n" +"_08021B50: .4byte 0x000001a7\n" +"_08021B54: .4byte gRecruitedPokemonRef"); + +} +#else +void sub_8021A60(void) +{ + s32 sVar4; + s32 iVar6; + s32 index; + struct PokemonStruct *pokeStruct; + + gUnknown_203B28C->unk70 = 0; + for(index = 0; index < 0x10; index++) + { + gUnknown_203B28C->unkE[index] = 0; + gUnknown_203B28C->unk30[index] = 0; + } + for(index = 0; index < 0x1A8; index++) + { + if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) && + ((s16)index == GetBaseSpeciesNoUnown(index))) { + iVar6 = gUnknown_203B28C->unk70; + gUnknown_203B28C->unkE[iVar6] = index; + gUnknown_203B28C->unk70 = iVar6 + 1; + } + } + for(index = 0; index < 0x1A8; index++) + { + if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 1; + } + } + for(index = 0; index < 0x19d; index++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[index]; + if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && + (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 2; + } + } + return; +} +#endif + +s32 sub_8021B58(s16 species) +{ + s32 baseSpecies; + int index; + + baseSpecies = GetBaseSpeciesNoUnown(species); + for(index = 0; index < gUnknown_203B28C->numPokemoninFriendArea; index++) + { + if (baseSpecies == gUnknown_203B28C->unkE[index]) return index; + } + return -1; +} + bool8 CreateWigglytuffShop(bool32 isAsleep) { char *string; @@ -248,16 +902,16 @@ void UpdateWigglytuffDialogue(void) break; case BUY_FRIEND_AREA: CreateWigglytuffConfirmFriendAreaMenu(); - sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE); gUnknown_202DE30[0] = gWigglytuffShop->friendAreaPrice; sub_8014248(gWigglytuffDialogue[gWigglytuffShop->isAsleep][5],0,5,gWigglytuffShop->unk1C,0,4,0,gWigglytuffShop->unkCC,0xc); break; case FRIEND_AREA_INFO: - sub_8021774(gWigglytuffShop->chosenFriendArea,0,2); + sub_8021774(gWigglytuffShop->chosenFriendArea,FALSE,2); break; case CONFIRM_BUY_FRIEND_AREA: gWigglytuffShop->fallbackState = WIGGLYTUFF_UNKD; - sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][6],0,gWigglytuffShop->unkCC,0x10d); break; case WIGGLYTUFF_UNKD: @@ -324,7 +978,7 @@ void UpdateWigglytuffDialogue(void) } string = GetMonSpecies(gWigglytuffShop->chosenSpecies); strcpy(gAvailablePokemonNames,string); - sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,0); + sub_8092578(gUnknown_202E628,gWigglytuffShop->chosenFriendArea,FALSE); sub_80141B4(gWigglytuffDialogue[gWigglytuffShop->isAsleep][14],0,gWigglytuffShop->unkCC,0x10d); break; case WIGGLYTUFF_CHECK_HAS_FRIEND_AREA: diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 5e45adb5b..38c300871 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -125,7 +125,6 @@ extern void ProceedToNextRewardSceneState(void); extern void sub_802F300(void); extern s32 sub_808D544(u32); extern u32 sub_801B60C(u32, u8, u8); -extern void sub_8092578(u8 *buffer, u8 index, u8 r2); void HandleMissionReward(void); const u8 *sub_80974A0(s16 index); @@ -555,7 +554,7 @@ void HandleMissionReward(void) SetRewardSceneState(PREP_ITEM_REWARD); } else { - sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,0); + sub_8092578(gUnknown_202E628,gUnknown_203B310->unk10->friendAreaReward,FALSE); if (gUnknown_203B310->displayClientDialogueSprite) { sub_80141B4(gUnknown_80E04B4,0,&gUnknown_203B310->faceFile,0x10d); gUnknown_203B310->nextState = UNLOCK_FRIEND_AREA; diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 6e238b0c2..1d4ccca02 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -228,21 +228,6 @@ gUnknown_203B278: /* 203B278 */ .include "src/gulpin_shop_1.o" -gUnknown_203B280: /* 203B280 */ - .space 0x4 - -gUnknown_203B284: /* 203B284 */ - .space 0x4 - -gUnknown_203B288: /* 203B288 */ - .space 0x2 - -gUnknown_203B28A: /* 203B28A */ - .space 0x2 - -gUnknown_203B28C: /* 203B28C */ - .space 0x4 - .include "src/wigglytuff_shop.o" gUnknown_203B294: /* 203B294 */ From 092a13c017d65ef6785911a0f9404ec074cde6de Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 6 Aug 2023 18:15:52 -0700 Subject: [PATCH 06/14] match sub_8021A60 thanks to jiang --- src/wigglytuff_shop.c | 205 ++++++++---------------------------------- 1 file changed, 36 insertions(+), 169 deletions(-) diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index 42f09add8..0d37aa243 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -21,6 +21,7 @@ #include "code_80118A4.h" #include "code_800D090.h" #include "event_flag.h" +#include "exclusive_pokemon.h" struct unkStruct_203B280 { @@ -128,6 +129,7 @@ void sub_8021820(void); void sub_8021A60(void); s32 sub_8021664(void); void sub_8021410(void); +s32 sub_8021B58(s16 species); extern void PlayMenuSoundEffect(u32); @@ -532,179 +534,44 @@ void sub_8021894(void) sub_80073E0(gUnknown_203B28C->unk74); } -// https://decomp.me/scratch/P2BiC -// 99.40% matching (Seth) -#ifndef NONMATCHING -NAKED void sub_8021A60(void) { - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tldr r2, _08021B4C\n" - "\tldr r1, [r2]\n" - "\tmovs r0, 0\n" - "\tstr r0, [r1, 0x70]\n" - "\tmovs r6, 0\n" - "\tadds r4, r2, 0\n" - "\tmovs r3, 0\n" -"_08021A70:\n" - "\tldr r1, [r4]\n" - "\tlsls r2, r6, 1\n" - "\tadds r0, r1, 0\n" - "\tadds r0, 0xE\n" - "\tadds r0, r2\n" - "\tstrh r3, [r0]\n" - "\tlsls r0, r6, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tstr r3, [r1]\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0xF\n" - "\tble _08021A70\n" - "\tmovs r6, 0\n" - "\tldr r7, _08021B4C\n" -"_08021A8E:\n" - "\tlsls r0, r6, 16\n" - "\tasrs r5, r0, 16\n" - "\tldr r4, [r7]\n" - "\tadds r0, r5, 0\n" - "\tbl GetFriendArea\n" - "\tldrb r1, [r4, 0xC]\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r1, r0\n" - "\tbne _08021AC4\n" - "\tadds r0, r5, 0\n" - "\tbl GetBaseSpeciesNoUnown\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r5, r0\n" - "\tbne _08021AC4\n" - "\tldr r3, [r7]\n" - "\tldr r1, [r3, 0x70]\n" - "\tlsls r2, r1, 1\n" - "\tadds r0, r3, 0\n" - "\tadds r0, 0xE\n" - "\tadds r0, r2\n" - "\tstrh r5, [r0]\n" - "\tadds r1, 0x1\n" - "\tstr r1, [r3, 0x70]\n" -"_08021AC4:\n" - "\tadds r6, 0x1\n" - "\tldr r0, _08021B50\n" - "\tcmp r6, r0\n" - "\tble _08021A8E\n" - "\tmovs r6, 0\n" -"_08021ACE:\n" - "\tlsls r0, r6, 16\n" - "\tasrs r4, r0, 16\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8098134\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08021AFC\n" - "\tadds r0, r4, 0\n" - "\tbl sub_8021B58\n" - "\tadds r2, r0, 0\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tcmp r2, r0\n" - "\tbeq _08021AFC\n" - "\tldr r0, _08021B4C\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [r1]\n" -"_08021AFC:\n" - "\tadds r6, 0x1\n" - "\tldr r0, _08021B50\n" - "\tcmp r6, r0\n" - "\tble _08021ACE\n" - "\tmovs r6, 0\n" - "\tldr r4, _08021B54\n" -"_08021B08:\n" - "\tmovs r0, 0x58\n" - "\tadds r1, r6, 0\n" - "\tmuls r1, r0\n" - "\tldr r0, [r4]\n" - "\tadds r2, r0, r1\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0x1\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _08021B3C\n" - "\tmovs r1, 0x8\n" - "\tldrsh r0, [r2, r1]\n" - "\tbl sub_8021B58\n" - "\tadds r2, r0, 0\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tcmp r2, r0\n" - "\tbeq _08021B3C\n" - "\tldr r0, _08021B4C\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 2\n" - "\tadds r1, 0x30\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x2\n" - "\tstr r0, [r1]\n" -"_08021B3C:\n" - "\tadds r6, 0x1\n" - "\tmovs r0, 0xCE\n" - "\tlsls r0, 1\n" - "\tcmp r6, r0\n" - "\tble _08021B08\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08021B4C: .4byte gUnknown_203B28C\n" -"_08021B50: .4byte 0x000001a7\n" -"_08021B54: .4byte gRecruitedPokemonRef"); + s32 sVar4; + s32 iVar6; + s32 index; + struct PokemonStruct *pokeStruct; + gUnknown_203B28C->numPokemoninFriendArea = 0; + for(index = 0; index < 0x10; index++) + { + gUnknown_203B28C->unkE[index] = 0; + gUnknown_203B28C->unk30[index] = 0; + } + for(index = 0; index < 0x1A8; index++) + { + s32 index2 = (s16)index; + if ((gUnknown_203B28C->friendArea == GetFriendArea(index2)) && + (index2 == GetBaseSpeciesNoUnown(index2))) { + iVar6 = gUnknown_203B28C->numPokemoninFriendArea; + gUnknown_203B28C->unkE[iVar6] = index2; + gUnknown_203B28C->numPokemoninFriendArea = iVar6 + 1; + } + } + for(index = 0; index < 0x1A8; index++) + { + if ((sub_8098134(index)) && (sVar4 = sub_8021B58(index), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 1; + } + } + for(index = 0; index < 0x19d; index++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[index]; + if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && + (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { + gUnknown_203B28C->unk30[sVar4] = 2; + } + } } -#else -void sub_8021A60(void) -{ - s32 sVar4; - s32 iVar6; - s32 index; - struct PokemonStruct *pokeStruct; - - gUnknown_203B28C->unk70 = 0; - for(index = 0; index < 0x10; index++) - { - gUnknown_203B28C->unkE[index] = 0; - gUnknown_203B28C->unk30[index] = 0; - } - for(index = 0; index < 0x1A8; index++) - { - if ((gUnknown_203B28C->friendArea == GetFriendArea((s16)index)) && - ((s16)index == GetBaseSpeciesNoUnown(index))) { - iVar6 = gUnknown_203B28C->unk70; - gUnknown_203B28C->unkE[iVar6] = index; - gUnknown_203B28C->unk70 = iVar6 + 1; - } - } - for(index = 0; index < 0x1A8; index++) - { - if ((sub_8098134(index) != '\0') && (sVar4 = sub_8021B58(index), sVar4 != -1)) { - gUnknown_203B28C->unk30[sVar4] = 1; - } - } - for(index = 0; index < 0x19d; index++) - { - pokeStruct = &gRecruitedPokemonRef->pokemon[index]; - if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && - (sVar4 = sub_8021B58(pokeStruct->speciesNum), sVar4 != -1)) { - gUnknown_203B28C->unk30[sVar4] = 2; - } - } - return; -} -#endif s32 sub_8021B58(s16 species) { From c374c094d9ea7504ecd34737f316da75bafe16c2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 7 Aug 2023 15:08:53 -0700 Subject: [PATCH 07/14] add more things to headers and clean up --- include/friend_area.h | 3 ++- include/pokemon_3.h | 9 +++++++++ include/wigglytuff_shop.h | 2 +- src/code_80118A4.c | 3 +-- src/code_801C620.c | 9 ++++----- src/code_801D760.c | 2 +- src/code_801EE10_1.c | 2 +- src/code_8023144.c | 8 ++++---- src/code_803B050.c | 6 +++--- src/code_8057824_1.c | 2 +- src/code_8086A3C.c | 3 +-- src/code_80958E8.c | 2 +- src/code_80A26CC.c | 2 +- src/event_flag.c | 3 ++- src/friend_area.c | 8 ++++---- src/friend_area_action_menu_1.c | 2 +- src/friend_list_menu.c | 5 ++++- src/load_screen.c | 2 +- src/party_list_menu.c | 2 +- src/pokemon_3.c | 25 ++++++++++++------------- src/pokemon_mid.c | 2 +- src/rescue_team_info.c | 2 +- src/wigglytuff_shop.c | 8 ++++---- src/wonder_mail_2.c | 2 +- 24 files changed, 62 insertions(+), 52 deletions(-) diff --git a/include/friend_area.h b/include/friend_area.h index 3f7d9959e..6d9c8b1e7 100644 --- a/include/friend_area.h +++ b/include/friend_area.h @@ -23,6 +23,7 @@ void LoadFriendAreas(void); bool8 *GetBoughtFriendAreas(void); void InitializeFriendAreas(void); u8 sub_80923D4(s32 target); +void sub_809249C(u8 friendArea, bool8 clear); bool8 HasAllFriendAreas(void); bool8 GetFriendAreaStatus(u8 index); void UnlockFriendArea(u8 index); @@ -32,7 +33,7 @@ s32 GetFriendAreaPrice(u8 index); void sub_8092578(u8 *buffer, u8 index, bool8 printPrice); const char *GetFriendAreaName(u8 index); void sub_809249C(u8 friendArea, u8 clear); -void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, bool8 checkLeader, bool8 checkDungeon); u32 SaveFriendAreas(u8 *r0, u32 r1); u32 ReadSavedFriendAreas(u8 *r0, s32 r1); diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 76fc1295e..84d2c49fe 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -10,11 +10,20 @@ struct EvolveStatus s16 targetEvolveSpecies; }; +bool8 HasRecruitedMon(s16 species_); +s16 GetBaseSpecies(s16 index); s16 GetBaseSpeciesNoUnown(s16 index); bool8 TacticsTargetLeader(u8 tactic); bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex); +s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ); +void CopyTacticsNameToBuffer(char *buffer, u8 tactic); +u8 *GetIQSkillName(u8 skill); +u8 *GetIQSkillDescription(u8 skill); +u8 *GetTacticsDescription(u8 tactic); +void ToggleIQSkill(u8 *param_1, u32 skillIndex); void SetIQSkill(u8 *param_1, u32 skillIndex); bool8 IsIQSkillSet(u8 *IQSkillFlags, u32 IQSkill); +void SetDefaultIQSkills(u8 *param_1, bool8 enableSelfCurer); void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatus, u8 param_3); u32 sub_808F734(struct PokemonStruct *pokemon, s16 _species); diff --git a/include/wigglytuff_shop.h b/include/wigglytuff_shop.h index a03785d5d..76559bcc1 100644 --- a/include/wigglytuff_shop.h +++ b/include/wigglytuff_shop.h @@ -68,7 +68,7 @@ enum WigglytuffStates bool8 sub_80211AC(u32 mode, u32 param_2); bool8 sub_8021774(u8 friendArea, bool8 param_2, s32 param_3); -u32 sub_8021274(u8 param_1); +u32 sub_8021274(bool8 param_1); u8 sub_802132C(void); void sub_8021354(bool8 param_1); void sub_80213A0(void); diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 735333137..14ad17e15 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -10,8 +10,7 @@ #include "config.h" #include "game_options.h" #include "sprite.h" - -extern bool8 sub_80023E4(u8); +#include "event_flag.h" extern struct GameOptions *gGameOptionsRef; diff --git a/src/code_801C620.c b/src/code_801C620.c index 450691618..b9cfd70fc 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -153,9 +153,9 @@ extern void sub_801CC38(void); extern void sub_80140B4(struct UnkTextStruct2 *); extern u32 sub_8097DF0(char *, struct subStruct_203B240 **); extern void sub_8013F84(void); -extern char * GetIQSkillDescription(u8 r0); -extern s32 GetNumAvailableIQSkills(u8 *param_1, s32 pokeIQ); -extern char * GetIQSkillName(u8 r0); +extern void PlayMenuSoundEffect(u32); +extern void sub_8013C68(u32 *); +extern void xxx_format_and_draw(u32, u32, const u8 *, u32, u32); extern u32 sub_80095E4(s16, u32); extern void sub_801C440(void); extern void sub_801C4C8(void); @@ -170,7 +170,6 @@ void sub_801C6E4(void); void sub_801C848(void); u32 sub_801C308(u8); -void ToggleIQSkill(u8 *param_1, u32 skillIndex); s32 sub_801C390(void); void sub_801C3F8(void); @@ -1266,4 +1265,4 @@ void sub_801D220(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B250->unkB8, 1, 1); -} \ No newline at end of file +} diff --git a/src/code_801D760.c b/src/code_801D760.c index 677e8cfff..9e1b6261d 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -18,6 +18,7 @@ #include "code_8021774.h" #include "code_80118A4.h" #include "wigglytuff_shop.h" +#include "event_flag.h" struct unkStruct_203B258 { @@ -104,7 +105,6 @@ struct unk_203B250 *gUnknown_203B250; extern bool8 HasNoAcceptedJobs(void); extern bool8 sub_8024108(u32); extern bool8 sub_8096E2C(void); -extern bool8 sub_80023E4(u32); extern u32 sub_801DCC4(void); extern u32 sub_8027074(void); extern void sub_80227B8(struct PokemonStruct *); diff --git a/src/code_801EE10_1.c b/src/code_801EE10_1.c index af575b31d..8a2873eda 100644 --- a/src/code_801EE10_1.c +++ b/src/code_801EE10_1.c @@ -9,6 +9,7 @@ #include "text_util.h" #include "menu_input.h" #include "code_80118A4.h" +#include "event_flag.h" struct unkStruct_203B2AC { @@ -49,7 +50,6 @@ extern struct unkStruct_3001B60 *gUnknown_3001B60; extern struct UnkTextStruct2 gUnknown_80DC9B0; extern struct UnkTextStruct2 gUnknown_80DC9C8; -extern bool8 sub_80023E4(u32); extern void sub_808FF20(u32 *, struct PokemonStruct *, bool8); extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); extern void sub_802452C(void); diff --git a/src/code_8023144.c b/src/code_8023144.c index 387a724ae..ea793b150 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -17,6 +17,7 @@ #include "code_80130A8.h" #include "code_801B3C0.h" #include "code_80118A4.h" +#include "exclusive_pokemon.h" struct unkStruct_3001B5C { @@ -47,7 +48,6 @@ extern struct UnkTextStruct2 gUnknown_80DC904; void sub_8023758(void); void sub_80237E0(void); -extern bool8 sub_8098134(s32); extern void sub_8023730(void); extern u8 sub_8023704(u8); extern void sub_8023420(void); @@ -68,7 +68,7 @@ extern void sub_801B048(void); void GetGummiItemStatBoost(struct PokemonStruct* pokemon, u8 id, bool8 checkBoostFlags, struct Gummi* gummi); extern void sub_8099690(u32); -s32 GetNumAvailableIQSkills(u8 *iqSkillBuffer, s32 pokeIQ); +extern void sub_801A928(void); void sub_8022D2C(void) { s32 index; @@ -460,7 +460,7 @@ void sub_8023420(void) extern u8 gUnknown_80DC934[]; -bool8 HasRecruitedMon(s16 species_); +extern void sub_8008C54(u32); extern u8 gUnknown_80DC93C[]; void sub_80234BC(void) @@ -485,7 +485,7 @@ void sub_80234BC(void) { y = sub_8013800(&gUnknown_3001B5C->input,index); species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->input.unk1E * gUnknown_3001B5C->input.unk1C + index)]; - sub_8092638(GetFriendArea(species),&auStack_2c,0,0); + sub_8092638(GetFriendArea(species),&auStack_2c,FALSE,FALSE); color = COLOR_WHITE_2; if (auStack_2c.hasFriendArea) { color = HasRecruitedMon(species) ? COLOR_CYAN : COLOR_GREEN; diff --git a/src/code_803B050.c b/src/code_803B050.c index 87d7f43d8..2112892c4 100644 --- a/src/code_803B050.c +++ b/src/code_803B050.c @@ -1,5 +1,8 @@ #include "global.h" #include "pokemon.h" +#include "pokemon_3.h" +#include "event_flag.h" +#include "exclusive_pokemon.h" extern s16 gUnknown_80E8126[]; @@ -7,9 +10,6 @@ extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern struct PokemonStruct *sub_808D378(void); extern bool8 sub_803C0DC(s16); -extern bool8 sub_8098134(s16); -extern s16 GetBaseSpecies(s16); -extern bool8 sub_80023E4(u32); bool8 sub_803C110(s16 index) { diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 514231ee6..401b1067b 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -13,6 +13,7 @@ #include "friend_area.h" #include "item.h" #include "pokemon.h" +#include "pokemon_3.h" #include "position_util.h" #include "exclusive_pokemon.h" @@ -330,7 +331,6 @@ extern void IncreaseEntityPixelPos(struct Entity *, u32, u32); extern void sub_8042B0C(struct Entity *); extern void DisplayDungeonDialogue(u32 *); extern void sub_803E708(u32, u32); -extern u8 HasRecruitedMon(u32); extern u8 sub_806FD18(struct Entity *); extern void sub_80861D4(struct Entity *, u32, s32 direction); extern void sub_806FDF4(struct Entity *, struct Entity *, struct Entity **); diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index 99bb14818..8a45f0e00 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -7,13 +7,12 @@ #include "dungeon_music.h" #include "dungeon_pokemon_attributes.h" #include "pokemon.h" +#include "pokemon_3.h" #include "dungeon_util_1.h" #include "dungeon_util.h" #include "exclusive_pokemon.h" -extern void SetDefaultIQSkills(u8 *param_1, u8 param_2); extern u8 sub_8044B28(void); -extern u8 HasRecruitedMon(u32); extern u8 gUnknown_202E038[]; extern void sub_8085374(); extern void sub_80855E4(void *); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 6b4f3cba5..f00ed9adf 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -8,10 +8,10 @@ #include "dungeon.h" #include "code_80958E8.h" #include "pokemon.h" +#include "pokemon_3.h" #include "code_8094F88.h" extern bool8 sub_809017C(struct DungeonLocation *); -extern s16 GetBaseSpecies(s16); extern u8 sub_803C1D0(struct DungeonLocation *, u8); extern bool8 sub_803C0DC(s16); extern void ResetMailboxSlot(u8); diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index 7a1ce0c40..ac99669cd 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -1,7 +1,7 @@ #include "global.h" #include "code_80A26CC.h" +#include "event_flag.h" -extern bool8 sub_80023E4(u32); extern u8 sub_80973F4(s16); extern u8 sub_8097384(s16); s16 sub_80A26B8(s16); diff --git a/src/event_flag.c b/src/event_flag.c index e7e7d18c2..72bde62f2 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -11,6 +11,8 @@ #include "friend_area.h" #include "team_inventory.h" #include "code_8097670.h" +#include "pokemon.h" +#include "pokemon_3.h" extern u8 gUnknown_2000A88[0x400]; @@ -51,7 +53,6 @@ extern u32 sub_8001658(u32, s32); extern void sub_80018D8(u32, u32, u32); extern void sub_809733C(u32, u32); extern void sub_80973A8(u32, u32); -extern u8 HasRecruitedMon(u32); extern void sub_800199C(u32, s32, u32, s32); extern s32 sub_8001784(u32, s32, u16); diff --git a/src/friend_area.c b/src/friend_area.c index 8113ddcbd..652fc4ba4 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -464,7 +464,7 @@ NAKED void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3) } #endif -void sub_809249C(u8 friendArea, u8 clear) +void sub_809249C(u8 friendArea, bool8 clear) { s32 index; bool32 dungeonCheck; @@ -558,7 +558,7 @@ bool8 HasAllFriendAreas(void) return TRUE; } -void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4) +void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, bool8 checkLeader, bool8 checkDungeon) { struct PokemonStruct *pokeStruct; s32 counter; @@ -582,8 +582,8 @@ void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u { pokeStruct = &gRecruitedPokemonRef->pokemon[iVar4]; if (((((u8)pokeStruct->unk0 & 1) != 0) && - ((param_3 == 0 || (!pokeStruct->isTeamLeader)))) && - ((param_4 == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) { + ((checkLeader == 0 || (!pokeStruct->isTeamLeader)))) && + ((checkDungeon == 0 || ((pokeStruct->dungeonLocation).id != DUNGEON_JOIN_LOCATION_PARTNER)))) { param_2->unk2++; } } diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index cb7de6cdf..fd65b68a9 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -12,6 +12,7 @@ #include "code_801EE10_1.h" #include "code_801B3C0.h" #include "code_80118A4.h" +#include "event_flag.h" extern struct unkStruct_203B2BC *gUnknown_203B2BC; extern struct TeamInventory *gTeamInventoryRef; @@ -25,7 +26,6 @@ extern void sub_8099690(u32); extern void sub_8027EB8(); extern void sub_808D31C(struct PokemonStruct *); -extern bool8 sub_80023E4(u32); extern struct PokemonStruct *sub_808D3F8(void); extern struct PokemonStruct *sub_808D3BC(void); extern u32 sub_801F890(void); diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 27405ae49..4c7e11bf5 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -14,6 +14,7 @@ #include "code_8012A18_1.h" #include "code_801B3C0.h" #include "code_80118A4.h" +#include "event_flag.h" // there might be more overlap with unkStruct_203B2BC // I was working on the moves and put the data that seemed to correspond to that @@ -137,7 +138,9 @@ extern void sub_801F808(u16 *); extern void sub_8099690(u32); extern void sub_801F8D0(void); extern u32 sub_801F890(void); -extern bool8 sub_80023E4(u32); +extern void sub_80160D8(void); +extern u32 sub_8016080(void); +extern s32 sub_80144A4(s32 *); void sub_8025434(s32); void sub_802544C(void); diff --git a/src/load_screen.c b/src/load_screen.c index 4dbfa17fd..7c13ffa90 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -14,6 +14,7 @@ #include "code_800D090.h" #include "code_8094F88.h" #include "menu_input.h" +#include "event_flag.h" extern const struct FileArchive gTitleMenuFileArchive; @@ -44,7 +45,6 @@ void sub_80397B4(void); extern void sub_80920D8(u8 *); extern struct PokemonStruct *GetPlayerPokemonStruct(void); -extern bool8 sub_80023E4(u32); extern u8 *sub_8098FB4(); extern u8 *GetDungeonLocationInfo(void); extern u32 GetNumAdventures(void); diff --git a/src/party_list_menu.c b/src/party_list_menu.c index ca0a365e1..c0c909dbd 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -15,6 +15,7 @@ #include "code_80130A8.h" #include "code_801B3C0.h" #include "code_80118A4.h" +#include "event_flag.h" struct unkStruct_203B2B8 { @@ -165,7 +166,6 @@ ALIGNED(4) static const u8 fill0[] = "pksdir0"; extern u32 sub_8026F04(struct PokemonStruct *); extern void sub_8026074(s32); bool8 CanTakePokemonHeldItem(struct PokemonStruct *r0); -extern bool8 sub_80023E4(u8); extern struct PokemonStruct *sub_808D3F8(void); extern struct PokemonStruct *sub_808D3BC(void); extern void sub_801F214(void); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 07ae1fb8d..01c45e6a6 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -13,8 +13,8 @@ #include "luminous_cave.h" extern u8 *gIQSkillNames[]; -extern u32 gIQSkillDescriptions[]; -extern u32 gTacticsDescriptions[]; +extern u8 *gIQSkillDescriptions[]; +extern u8 *gTacticsDescriptions[]; extern u8 *gTactics[]; extern bool8 gTacticsTargetLeader[]; @@ -60,7 +60,6 @@ extern void sub_809447C(struct unkStruct_8094924*, void*); extern void sub_808F428(struct unkStruct_8094924*, struct unkStruct_808E6F4*); s16 GetPokemonEvolveConditions(s16 index, struct unkEvolve *r1); -void sub_8092638(u8 friendArea, struct unkStruct_8092638 *param_2, u8 param_3, u8 param_4); u32 sub_808F798(struct PokemonStruct *, s16); void sub_8097848(void); @@ -120,7 +119,7 @@ bool8 HasRecruitedMon(s16 species_) { return FALSE; } -s32 GetBaseSpecies(s16 index) { +s16 GetBaseSpecies(s16 index) { if (index == MONSTER_CASTFORM_SNOWY) return MONSTER_CASTFORM; if (index == MONSTER_CASTFORM_SUNNY) @@ -462,24 +461,24 @@ void sub_808E9EC(struct PokemonStruct *r0, struct unkStruct_808E9EC *r1) } #endif -u8 *GetIQSkillName(u8 r0) +u8 *GetIQSkillName(u8 skill) { - return gIQSkillNames[r0]; + return gIQSkillNames[skill]; } -void CopyTacticsNameToBuffer(char *r0, u8 r1) +void CopyTacticsNameToBuffer(char *buffer, u8 tactic) { - strncpy(r0, gTactics[r1], 0x14); + strncpy(buffer, gTactics[tactic], 0x14); } -u32 GetIQSkillDescription(u8 r0) +u8 *GetIQSkillDescription(u8 skill) { - return gIQSkillDescriptions[r0]; + return gIQSkillDescriptions[skill]; } -u32 GetTacticsDescription(u8 r0) +u8 *GetTacticsDescription(u8 tactic) { - return gTacticsDescriptions[r0]; + return gTacticsDescriptions[tactic]; } bool8 TacticsTargetLeader(u8 tactic) @@ -952,7 +951,7 @@ void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatu if ((evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_NONE) || (param_1->speciesNum != evolveConditions.preEvolution.evolveFrom)) continue; friendArea = ((u8 (*)(s32))GetFriendArea)(index2); // UB uVar2 = GetFriendArea(param_1->speciesNum); - sub_8092638(friendArea,&local_40,0,0); + sub_8092638(friendArea,&local_40,FALSE,FALSE); if (!local_40.hasFriendArea) { evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_FRIEND_AREA; evolFlag = TRUE; diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 597215a65..af5e9e983 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -1,5 +1,6 @@ #include "global.h" #include "pokemon.h" +#include "pokemon_3.h" #include "file_system.h" #include "item.h" #include "moves.h" @@ -29,7 +30,6 @@ extern u16 gLevelCurrentPokeId; extern struct LevelData gLevelCurrentData[]; -extern s16 GetBaseSpecies(s16); extern int sprintf(char *, const char *, ...); extern u32 ReturnIntFromChar(u8 r0); extern void CopyAndResetMoves(void*, void*); diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index 9d0153b5f..64bb35509 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -2,11 +2,11 @@ #include "rescue_team_info.h" #include "code_8092334.h" #include "text_util.h" +#include "event_flag.h" EWRAM_DATA_2 struct RescueTeamData *gRescueTeamInfoRef = {0}; EWRAM_DATA struct RescueTeamData gRescueTeamInfo = {0}; -extern bool8 sub_80023E4(u32); extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size); extern const u8 *gRescueTeamRanks[]; diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index 0d37aa243..c0bdc2aa3 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -162,9 +162,9 @@ bool8 sub_80211AC(u32 mode, u32 param_2) } } -u32 sub_8021274(u8 param_1) +u32 sub_8021274(bool8 param_1) { - if (param_1 == 0) { + if (!param_1) { sub_8013660(&gUnknown_203B280->unk40); return 0; } @@ -563,7 +563,7 @@ void sub_8021A60(void) gUnknown_203B28C->unk30[sVar4] = 1; } } - for(index = 0; index < 0x19d; index++) + for(index = 0; index < NUM_MONSTERS; index++) { pokeStruct = &gRecruitedPokemonRef->pokemon[index]; if (((*(u8 *)&pokeStruct->unk0 & 1) != 0) && @@ -816,7 +816,7 @@ void UpdateWigglytuffDialogue(void) sub_8023354(1); break; case DISPLAY_POKEMON_FRIEND_AREA_INFO: - sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,0,0); + sub_8092638(gWigglytuffShop->chosenFriendArea,&uStack_14,FALSE,FALSE); if (uStack_14.hasFriendArea) { gWigglytuffShop->fallbackState = WIGGLYTUFF_CHECK_HAS_FRIEND_AREA; } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index a6de86d4a..1f8b12215 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -12,6 +12,7 @@ #include "code_8094F88.h" #include "menu_input.h" #include "code_80130A8.h" +#include "event_flag.h" struct unkStruct_203B2C8 { @@ -52,7 +53,6 @@ extern void sub_802B624(void); extern void sub_802F204(struct unkStruct_802F204 *, u32); extern void sub_803C37C(struct DungeonLocation *, u32, u8 *); extern u32 GetDungeonTeamRankPts(struct DungeonLocation *, u32); -extern bool8 sub_80023E4(u32); ALIGNED(4) const char gRescueTeamNamePlaceholder[] = "????"; From 9bf38c7e47ae34b20f4a54ad0b0920a2c73780af Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 14 Aug 2023 10:46:55 -0700 Subject: [PATCH 08/14] Match CreateRescueTitle and CreateRescueDescription thanks to @jiang --- asm/code_803B050.s | 1225 ----------------------------- asm/friend_area_action_menu.s | 301 ------- include/code_802C39C.h | 18 +- include/code_8094F88.h | 11 +- include/code_80958E8.h | 2 +- include/constants/wonder_mail.h | 14 + include/friend_area_action_menu.h | 24 +- include/pokemon.h | 4 + include/wonder_mail.h | 5 +- ld_script.txt | 1 - src/code_803B050.c | 457 ++++++++++- src/code_8094F88.c | 18 +- src/code_80958E8.c | 14 +- src/code_80958E8_1.c | 44 +- src/code_80958E8_mid.c | 8 +- src/code_80972F4.c | 18 +- src/friend_area_action_menu.c | 652 ++++++++++++++- src/friend_area_action_menu_1.c | 492 ------------ src/friend_list_menu.c | 2 +- src/friend_rescue.c | 2 +- src/mailbox.c | 8 +- src/mailbox_8095F8C.c | 4 +- src/party_list_menu.c | 4 +- src/pelipper_board.c | 4 +- src/pokemon_3.c | 8 +- src/post_office_guide.c | 6 +- src/rescue_password_menu.c | 4 +- src/thank_you_wonder_mail.c | 2 +- src/wonder_mail.c | 2 +- src/wonder_mail_2.c | 4 +- src/wonder_mail_2_mid.c | 2 +- src/wonder_mail_3.c | 12 +- src/wonder_mail_3_mid.c | 2 +- src/wonder_mail_4.c | 10 +- src/wonder_mail_5.c | 20 +- src/wonder_mail_802DF88.c | 20 +- 36 files changed, 1260 insertions(+), 2164 deletions(-) delete mode 100644 asm/friend_area_action_menu.s diff --git a/asm/code_803B050.s b/asm/code_803B050.s index 46652267c..87a88ef9d 100644 --- a/asm/code_803B050.s +++ b/asm/code_803B050.s @@ -864,1229 +864,4 @@ _0803B6A8: bx r1 thumb_func_end sub_803B66C - thumb_func_start sub_803B6B0 -sub_803B6B0: - push {r4,lr} - sub sp, 0x4 - lsls r2, 24 - ldr r4, _0803B6D0 - lsrs r2, 22 - adds r2, r4 - ldr r2, [r2] - movs r4, 0 - str r4, [sp] - bl xxx_call_draw_string - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0803B6D0: .4byte gUnknown_80E8B94 - thumb_func_end sub_803B6B0 - - thumb_func_start CreateRescueTitle -CreateRescueTitle: - push {r4-r7,lr} - sub sp, 0x144 - adds r7, r0, 0 - ldr r1, [r7, 0x48] - adds r0, 0x43 - ldrb r2, [r0] - ldr r3, [r7] - movs r0, 0xA - bl sub_803B6B0 - adds r0, r7, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0xC - bls _0803B6F4 - b _0803B86C -_0803B6F4: - lsls r0, 2 - ldr r1, _0803B700 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803B700: .4byte _0803B704 - .align 2, 0 -_0803B704: - .4byte _0803B73E - .4byte _0803B748 - .4byte _0803B754 - .4byte _0803B738 - .4byte _0803B7A4 - .4byte _0803B7B0 - .4byte _0803B7C8 - .4byte _0803B760 - .4byte _0803B86C - .4byte _0803B818 - .4byte _0803B7E0 - .4byte _0803B788 - .4byte _0803B76A -_0803B738: - ldr r1, [r7, 0x48] - ldr r2, [r7, 0x4C] - b _0803B7CC -_0803B73E: - ldr r1, [r7, 0x48] - ldr r2, _0803B744 - b _0803B7CC - .align 2, 0 -_0803B744: .4byte gMankeyMission -_0803B748: - ldr r1, [r7, 0x48] - ldr r2, _0803B750 - b _0803B7CC - .align 2, 0 -_0803B750: .4byte gSmeargleMission -_0803B754: - ldr r1, [r7, 0x48] - ldr r2, _0803B75C - b _0803B7CC - .align 2, 0 -_0803B75C: .4byte gMedichamMission -_0803B760: - ldr r1, [r7, 0x8] - add r0, sp, 0x4 - bl PrintYellowDungeonNametoBuffer - b _0803B850 -_0803B76A: - ldr r4, _0803B780 - ldrb r1, [r7, 0x14] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803B784 - add r0, sp, 0x4 - adds r2, r4, 0 - b _0803B84C - .align 2, 0 -_0803B780: .4byte gUnknown_202DE58 -_0803B784: .4byte gUnknown_80E8830 -_0803B788: - ldr r4, _0803B79C - ldrb r1, [r7, 0x14] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803B7A0 - add r0, sp, 0x4 - adds r2, r4, 0 - b _0803B84C - .align 2, 0 -_0803B79C: .4byte gUnknown_202DE58 -_0803B7A0: .4byte gUnknown_80E8848 -_0803B7A4: - ldr r1, [r7, 0x48] - ldr r2, _0803B7AC - b _0803B7CC - .align 2, 0 -_0803B7AC: .4byte gUnknown_80E885C -_0803B7B0: - ldr r1, [r7, 0x48] - ldr r3, _0803B7C4 - ldr r2, [r7, 0x4] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r3, 0x4 - adds r0, r3 - ldr r2, [r0] - b _0803B7CC - .align 2, 0 -_0803B7C4: .4byte gUnknown_80E9F8C -_0803B7C8: - ldr r1, [r7, 0x48] - ldr r2, _0803B7DC -_0803B7CC: - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x15 - bl xxx_call_draw_string - b _0803B8B4 - .align 2, 0 -_0803B7DC: .4byte gUnknown_80E886C -_0803B7E0: - ldr r0, [r7, 0x8] - ldr r4, [r0, 0x4] - ldrb r0, [r0] - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r5, _0803B810 - adds r0, r5, 0 - bl strcpy - ldr r1, _0803B814 - movs r0, 0x3 - ands r4, r0 - lsls r4, 2 - adds r4, r1 - ldr r1, [r4] - add r0, sp, 0x4 - adds r2, r5, 0 - b _0803B84C - .align 2, 0 -_0803B810: .4byte gAvailablePokemonNames -_0803B814: .4byte gUnknown_80EAE5C -_0803B818: - ldr r0, [r7, 0x8] - ldr r4, [r0, 0x4] - ldrb r0, [r0] - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r6, _0803B864 - adds r0, r6, 0 - bl strcpy - ldr r5, _0803B868 - adds r0, r4, 0 - movs r1, 0xA - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r5 - ldr r1, [r0] - add r0, sp, 0x4 - adds r2, r6, 0 -_0803B84C: - bl sprintfStatic -_0803B850: - ldr r1, [r7, 0x48] - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x15 - add r2, sp, 0x4 - bl xxx_call_draw_string - b _0803B8B4 - .align 2, 0 -_0803B864: .4byte gAvailablePokemonNames -_0803B868: .4byte gUnknown_80E910C -_0803B86C: - ldr r0, [r7, 0x8] - ldr r4, [r0, 0x4] - ldrb r0, [r0] - adds r4, r0 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r6, _0803B8E8 - adds r0, r6, 0 - bl strcpy - ldr r5, _0803B8EC - adds r0, r4, 0 - movs r1, 0xF - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r5 - ldr r1, [r0] - add r0, sp, 0x4 - adds r2, r6, 0 - bl sprintfStatic - ldr r1, [r7, 0x48] - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x15 - add r2, sp, 0x4 - bl xxx_call_draw_string -_0803B8B4: - adds r0, r7, 0 - adds r0, 0x40 - ldrb r1, [r0] - adds r6, r0, 0 - cmp r1, 0x7 - bne _0803B916 - ldr r5, [r7, 0xC] - cmp r5, 0 - bne _0803B8F0 - bl sub_8016028 - movs r4, 0xB2 - subs r4, r0 - movs r1, 0x10 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r2, r0, 0 - ldr r1, [r7, 0x48] - ldr r3, [r7] - str r5, [sp] - adds r0, r4, 0 - bl xxx_call_draw_string - b _0803B956 - .align 2, 0 -_0803B8E8: .4byte gAvailablePokemonNames -_0803B8EC: .4byte gUnknown_80E8C98 -_0803B8F0: - add r4, sp, 0xCC - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0xA - bl sub_80922B4 - bl sub_8016028 - adds r1, r0, 0 - movs r0, 0xB2 - subs r0, r1 - ldr r1, [r7, 0x48] - ldr r3, [r7] - movs r2, 0 - str r2, [sp] - adds r2, r4, 0 - bl xxx_call_draw_string - b _0803B956 -_0803B916: - adds r0, r7, 0 - adds r0, 0x42 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0803B93C - add r4, sp, 0xE0 - ldr r1, [r7, 0x8] - adds r0, r4, 0 - bl PrintDungeonLocationtoBuffer - ldr r1, _0803B938 - add r0, sp, 0x4 - adds r2, r4, 0 - bl sprintfStatic - b _0803B944 - .align 2, 0 -_0803B938: .4byte gUnknown_80E8884 -_0803B93C: - ldr r1, [r7, 0x8] - add r0, sp, 0x4 - bl PrintDungeonLocationtoBuffer -_0803B944: - ldr r1, [r7, 0x48] - adds r1, 0xC - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x1D - add r2, sp, 0x4 - bl xxx_call_draw_string -_0803B956: - ldrb r0, [r6] - cmp r0, 0x7 - bne _0803B962 - ldr r0, [r7, 0x8] - movs r1, 0 - b _0803B968 -_0803B962: - ldr r0, [r7, 0x8] - ldr r1, [r7, 0x54] - ldrb r1, [r1, 0x1] -_0803B968: - bl sub_803C1D0 - lsls r0, 24 - lsrs r0, 24 - bl sub_803C1F0 - adds r2, r0, 0 - ldr r1, [r7, 0x48] - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0xB4 - bl xxx_call_draw_string - add sp, 0x144 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CreateRescueTitle - - thumb_func_start CreateRescueDescription -CreateRescueDescription: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x1FC - adds r7, r0, 0 - movs r0, 0 - mov r9, r0 - ldr r2, _0803B9E0 - ldr r3, [r7] - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r1, _0803B9E4 - adds r0, r7, 0 - adds r0, 0x44 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldr r3, [r7] - mov r1, r9 - str r1, [sp] - movs r0, 0x6C - movs r1, 0 - bl xxx_call_draw_string - movs r0, 0x10 - mov r9, r0 - adds r0, r7, 0 - adds r0, 0x41 - ldrb r0, [r0] - cmp r0, 0x10 - bls _0803B9D6 - b _0803BCC0 -_0803B9D6: - lsls r0, 2 - ldr r1, _0803B9E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803B9E0: .4byte gUnknown_80E888C -_0803B9E4: .4byte gUnknown_80E8BCC -_0803B9E8: .4byte _0803B9EC - .align 2, 0 -_0803B9EC: - .4byte _0803BA34 - .4byte _0803BA3C - .4byte _0803BA44 - .4byte _0803BA30 - .4byte _0803BA4C - .4byte _0803BA6C - .4byte _0803BA8C - .4byte _0803BAA0 - .4byte _0803BBF0 - .4byte _0803BAE8 - .4byte _0803BAF0 - .4byte _0803BAF8 - .4byte _0803BCC0 - .4byte _0803BC58 - .4byte _0803BB74 - .4byte _0803BB10 - .4byte _0803BB10 -_0803BA30: - ldr r2, [r7, 0x50] - b _0803BAFA -_0803BA34: - ldr r2, _0803BA38 - b _0803BAFA - .align 2, 0 -_0803BA38: .4byte gMankeyMissionDescription -_0803BA3C: - ldr r2, _0803BA40 - b _0803BAFA - .align 2, 0 -_0803BA40: .4byte gSmeargleMissionDescription -_0803BA44: - ldr r2, _0803BA48 - b _0803BAFA - .align 2, 0 -_0803BA48: .4byte gMedichamMissionDescription -_0803BA4C: - ldr r4, _0803BA64 - ldrb r1, [r7, 0x14] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803BA68 - add r0, sp, 0x4 - adds r2, r4, 0 - bl sprintfStatic - b _0803BACC - .align 2, 0 -_0803BA64: .4byte gUnknown_202DE58 -_0803BA68: .4byte gUnknown_80E8968 -_0803BA6C: - ldr r4, _0803BA84 - ldrb r1, [r7, 0x14] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803BA88 - add r0, sp, 0x4 - adds r2, r4, 0 - bl sprintfStatic - b _0803BACC - .align 2, 0 -_0803BA84: .4byte gUnknown_202DE58 -_0803BA88: .4byte gUnknown_80E89B0 -_0803BA8C: - ldr r1, _0803BA9C - ldr r0, [r7, 0x4] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r2, [r0] - b _0803BAFA - .align 2, 0 -_0803BA9C: .4byte gUnknown_80E9920 -_0803BAA0: - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r4, _0803BAE0 - adds r0, r4, 0 - bl strcpy - ldr r2, _0803BAE4 - ldr r1, [r7, 0x4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r2, 0x8 - adds r0, r2 - ldr r1, [r0] - add r0, sp, 0x4 - adds r2, r4, 0 - adds r3, r4, 0 - bl sprintfStatic -_0803BACC: - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - b _0803BD42 - .align 2, 0 -_0803BAE0: .4byte gAvailablePokemonNames -_0803BAE4: .4byte gUnknown_80E9F8C -_0803BAE8: - ldr r2, _0803BAEC - b _0803BAFA - .align 2, 0 -_0803BAEC: .4byte gUnknown_80E89FC -_0803BAF0: - ldr r2, _0803BAF4 - b _0803BAFA - .align 2, 0 -_0803BAF4: .4byte gUnknown_80E8A40 -_0803BAF8: - ldr r2, _0803BB0C -_0803BAFA: - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - b _0803BD42 - .align 2, 0 -_0803BB0C: .4byte gUnknown_80E8A7C -_0803BB10: - ldr r0, [r7, 0x8] - ldr r5, [r0, 0x4] - ldrb r4, [r0] - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r0, 0x1] - adds r5, r0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _0803BB68 - mov r8, r0 - ldrb r1, [r7, 0x14] - movs r2, 0 - bl sub_8090DC4 - ldr r6, _0803BB6C - adds r0, r4, 0 - movs r1, 0x16 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r6 - ldr r1, [r0] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - movs r6, 0 - str r6, [sp] - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - movs r1, 0xC - add r9, r1 - ldr r4, _0803BB70 - adds r0, r5, 0 - movs r1, 0x16 - b _0803BD1A - .align 2, 0 -_0803BB68: .4byte gUnknown_202DE58 -_0803BB6C: .4byte gUnknown_80EB3F8 -_0803BB70: .4byte gUnknown_80EB72C -_0803BB74: - ldr r0, [r7, 0x8] - ldr r5, [r0, 0x4] - ldrb r4, [r0] - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r0, 0x1] - adds r5, r0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r0, _0803BBE4 - mov r8, r0 - bl strcpy - ldr r6, _0803BBE8 - adds r0, r4, 0 - movs r1, 0x14 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r6 - ldr r1, [r0] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - movs r4, 0 - str r4, [sp] - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - movs r1, 0xC - add r9, r1 - ldr r1, _0803BBEC - movs r0, 0x3 - ands r5, r0 - lsls r5, 2 - adds r5, r1 - ldr r1, [r5] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - str r4, [sp] - b _0803BD32 - .align 2, 0 -_0803BBE4: .4byte gAvailablePokemonNames -_0803BBE8: .4byte gUnknown_80EAEB8 -_0803BBEC: .4byte gUnknown_80EB198 -_0803BBF0: - ldr r0, [r7, 0x8] - ldr r5, [r0, 0x4] - ldrb r4, [r0] - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r0, 0x1] - adds r5, r0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r0, _0803BC4C - mov r8, r0 - bl strcpy - ldr r6, _0803BC50 - adds r0, r4, 0 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r6 - ldr r1, [r0] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - movs r6, 0 - str r6, [sp] - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - movs r1, 0xC - add r9, r1 - ldr r4, _0803BC54 - adds r0, r5, 0 - movs r1, 0x6 - b _0803BD1A - .align 2, 0 -_0803BC4C: .4byte gAvailablePokemonNames -_0803BC50: .4byte gUnknown_80EB220 -_0803BC54: .4byte gUnknown_80EB2F0 -_0803BC58: - ldr r0, [r7, 0x8] - ldr r5, [r0, 0x4] - ldrb r4, [r0] - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r0, 0x1] - adds r5, r0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r0, _0803BCB4 - mov r8, r0 - bl strcpy - ldr r6, _0803BCB8 - adds r0, r4, 0 - movs r1, 0x2D - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r6 - ldr r1, [r0] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - movs r6, 0 - str r6, [sp] - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - movs r1, 0xC - add r9, r1 - ldr r4, _0803BCBC - adds r0, r5, 0 - movs r1, 0xA - b _0803BD1A - .align 2, 0 -_0803BCB4: .4byte gAvailablePokemonNames -_0803BCB8: .4byte gUnknown_80E91D4 -_0803BCBC: .4byte gUnknown_80E9820 -_0803BCC0: - ldr r0, [r7, 0x8] - ldr r5, [r0, 0x4] - ldrb r4, [r0] - adds r4, r5, r4 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r0, 0x1] - adds r5, r0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0x10 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r0, _0803BD78 - mov r8, r0 - bl strcpy - ldr r6, _0803BD7C - adds r0, r4, 0 - movs r1, 0xD - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r6 - ldr r1, [r0] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - movs r6, 0 - str r6, [sp] - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - movs r1, 0xC - add r9, r1 - ldr r4, _0803BD80 - adds r0, r5, 0 - movs r1, 0xD -_0803BD1A: - bl __umodsi3 - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r1, [r0] - add r0, sp, 0x4 - mov r2, r8 - bl sprintfStatic - ldr r3, [r7] - str r6, [sp] -_0803BD32: - movs r0, 0xA - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - movs r0, 0xC - negs r0, r0 - add r9, r0 -_0803BD42: - movs r1, 0x1C - add r9, r1 - ldr r2, _0803BD84 - ldr r3, [r7] - movs r0, 0 - mov r8, r0 - str r0, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - ldr r1, [r7, 0xC] - cmp r1, 0 - bne _0803BD88 - movs r1, 0x10 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r2, r0, 0 - ldr r3, [r7] - mov r0, r8 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - bl xxx_call_draw_string - b _0803BDBC - .align 2, 0 -_0803BD78: .4byte gAvailablePokemonNames -_0803BD7C: .4byte gUnknown_80E8DE4 -_0803BD80: .4byte gUnknown_80E8FB0 -_0803BD84: .4byte gUnknown_80E8AC8 -_0803BD88: - add r6, sp, 0x158 - adds r0, r6, 0 - movs r2, 0xA - bl sub_80922B4 - add r4, sp, 0x16C - movs r0, 0x10 - ldrsh r1, [r7, r0] - adds r0, r4, 0 - bl sub_808D930 - add r5, sp, 0x130 - ldr r1, _0803BDE8 - adds r0, r5, 0 - adds r2, r6, 0 - adds r3, r4, 0 - bl sprintfStatic - ldr r3, [r7] - mov r1, r8 - str r1, [sp] - movs r0, 0x44 - mov r1, r9 - adds r2, r5, 0 - bl xxx_call_draw_string -_0803BDBC: - movs r0, 0xC - add r9, r0 - ldr r2, _0803BDEC - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - adds r0, r7, 0 - adds r0, 0x42 - ldrb r1, [r0] - adds r5, r0, 0 - cmp r1, 0x6 - bhi _0803BEB8 - lsls r0, r1, 2 - ldr r1, _0803BDF0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803BDE8: .4byte gUnknown_80E8AD0 -_0803BDEC: .4byte gUnknown_80E8AE0 -_0803BDF0: .4byte _0803BDF4 - .align 2, 0 -_0803BDF4: - .4byte _0803BE10 - .4byte _0803BE30 - .4byte _0803BE18 - .4byte _0803BE48 - .4byte _0803BE80 - .4byte _0803BE60 - .4byte _0803BEB8 -_0803BE10: - ldr r2, _0803BE14 - b _0803BE4A - .align 2, 0 -_0803BE14: .4byte gUnknown_80E8AEC -_0803BE18: - ldr r4, _0803BE28 - ldrb r1, [r7, 0x14] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803BE2C - b _0803BE94 - .align 2, 0 -_0803BE28: .4byte gUnknown_202DE58 -_0803BE2C: .4byte gUnknown_80E8AFC -_0803BE30: - ldr r4, _0803BE40 - ldrb r1, [r7, 0x14] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803BE44 - b _0803BE94 - .align 2, 0 -_0803BE40: .4byte gUnknown_202DE58 -_0803BE44: .4byte gUnknown_80E8B10 -_0803BE48: - ldr r2, _0803BE5C -_0803BE4A: - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - bl xxx_call_draw_string - b _0803BEC8 - .align 2, 0 -_0803BE5C: .4byte gUnknown_80E8B20 -_0803BE60: - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r4, _0803BE78 - adds r0, r4, 0 - bl strcpy - ldr r1, _0803BE7C - b _0803BE94 - .align 2, 0 -_0803BE78: .4byte gAvailablePokemonNames -_0803BE7C: .4byte gUnknown_80E8B2C -_0803BE80: - movs r1, 0x12 - ldrsh r0, [r7, r1] - bl GetMonSpecies - adds r1, r0, 0 - ldr r4, _0803BEB0 - adds r0, r4, 0 - bl strcpy - ldr r1, _0803BEB4 -_0803BE94: - add r0, sp, 0x4 - adds r2, r4, 0 - bl sprintfStatic - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - b _0803BEC8 - .align 2, 0 -_0803BEB0: .4byte gAvailablePokemonNames -_0803BEB4: .4byte gUnknown_80E8B40 -_0803BEB8: - ldr r2, _0803BEF8 - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - bl xxx_call_draw_string -_0803BEC8: - movs r0, 0xC - add r9, r0 - ldr r2, _0803BEFC - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - ldrb r0, [r5] - cmp r0, 0x1 - bne _0803BF04 - add r4, sp, 0x180 - ldr r1, [r7, 0x8] - adds r0, r4, 0 - bl PrintDungeonLocationtoBuffer - ldr r1, _0803BF00 - add r0, sp, 0x4 - adds r2, r4, 0 - bl sprintfStatic - b _0803BF0C - .align 2, 0 -_0803BEF8: .4byte gSpecialMissionText -_0803BEFC: .4byte gPlaceText -_0803BF00: .4byte gUnknown_80E8884 -_0803BF04: - ldr r1, [r7, 0x8] - add r0, sp, 0x4 - bl PrintDungeonLocationtoBuffer -_0803BF0C: - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - ldrb r0, [r5] - cmp r0, 0 - bne _0803BF28 - ldr r0, [r7, 0x8] - movs r1, 0 - b _0803BF2E -_0803BF28: - ldr r0, [r7, 0x8] - ldr r1, [r7, 0x54] - ldrb r1, [r1, 0x1] -_0803BF2E: - bl sub_803C1D0 - lsls r0, 24 - lsrs r4, r0, 24 - movs r1, 0xC - add r9, r1 - ldr r2, _0803BF88 - ldr r3, [r7] - movs r6, 0 - str r6, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - adds r0, r4, 0 - bl sub_803C1F0 - adds r2, r0, 0 - ldr r3, [r7] - str r6, [sp] - movs r0, 0x44 - mov r1, r9 - bl xxx_call_draw_string - movs r0, 0xC - add r9, r0 - ldr r2, _0803BF8C - ldr r3, [r7] - str r6, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - adds r0, r7, 0 - adds r0, 0x2E - ldrb r2, [r0] - adds r5, r0, 0 - cmp r2, 0x4 - bhi _0803C02C - lsls r0, r2, 2 - ldr r1, _0803BF90 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803BF88: .4byte gDifficultyText -_0803BF8C: .4byte gRewardText -_0803BF90: .4byte _0803BF94 - .align 2, 0 -_0803BF94: - .4byte _0803BFA8 - .4byte _0803BFBC - .4byte _0803BFD0 - .4byte _0803BFD0 - .4byte _0803C00C -_0803BFA8: - ldr r1, _0803BFB8 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r2, [r7, 0x30] - add r0, sp, 0x4 - b _0803BFEE - .align 2, 0 -_0803BFB8: .4byte gMissionRewardText -_0803BFBC: - ldr r1, _0803BFCC - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldr r2, [r7, 0x30] - add r0, sp, 0x4 - b _0803BFEE - .align 2, 0 -_0803BFCC: .4byte gMissionRewardText -_0803BFD0: - ldr r4, _0803C004 - adds r0, r7, 0 - adds r0, 0x34 - ldrb r1, [r0] - adds r0, r4, 0 - movs r2, 0 - bl sub_8090DC4 - ldr r1, _0803C008 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - add r0, sp, 0x4 - adds r2, r4, 0 -_0803BFEE: - bl sprintfStatic - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - add r2, sp, 0x4 - bl xxx_call_draw_string - b _0803C040 - .align 2, 0 -_0803C004: .4byte gUnknown_202DE58 -_0803C008: .4byte gMissionRewardText -_0803C00C: - ldr r1, _0803C028 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0x44 - mov r1, r9 - bl xxx_call_draw_string - b _0803C040 - .align 2, 0 -_0803C028: .4byte gMissionRewardText -_0803C02C: - ldr r1, _0803C0D4 - lsls r0, r2, 2 - adds r0, r1 - ldr r2, [r0] - ldr r3, [r7] - str r6, [sp] - movs r0, 0x44 - mov r1, r9 - bl xxx_call_draw_string -_0803C040: - movs r1, 0xC - add r9, r1 - adds r0, r7, 0 - adds r0, 0x41 - ldrb r1, [r0] - adds r0, r1, 0 - subs r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bls _0803C0C6 - cmp r1, 0x3 - beq _0803C0C6 - ldr r0, [r7, 0x54] - ldrb r0, [r0] - cmp r0, 0x5 - bne _0803C0C6 - ldr r2, _0803C0D8 - ldr r3, [r7] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - mov r1, r9 - bl xxx_call_draw_string - add r0, sp, 0x1E4 - ldr r1, [r7, 0x54] - bl sub_803D414 - movs r4, 0 -_0803C07C: - cmp r4, 0xC - bne _0803C084 - movs r0, 0xC - add r9, r0 -_0803C084: - movs r5, 0x7 - cmp r4, 0x3 - ble _0803C09C - movs r5, 0x6 - cmp r4, 0x7 - ble _0803C09C - movs r5, 0x7 - cmp r4, 0xF - ble _0803C09C - cmp r4, 0x13 - bgt _0803C09C - movs r5, 0x6 -_0803C09C: - adds r0, r4, 0 - movs r1, 0xC - bl __modsi3 - adds r1, r0, 0 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, 0x54 - add r1, sp, 0x1E4 - adds r1, r4 - ldrb r2, [r1] - ldr r1, [r7] - str r1, [sp] - mov r1, r9 - adds r3, r5, 0 - bl sub_8012C60 - adds r4, 0x1 - cmp r4, 0x17 - ble _0803C07C -_0803C0C6: - add sp, 0x1FC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803C0D4: .4byte gMissionRewardText -_0803C0D8: .4byte gUnknown_80E8B7C - thumb_func_end CreateRescueDescription - - thumb_func_start sub_803C0DC -sub_803C0DC: - push {lr} - lsls r0, 16 - asrs r0, 16 - bl GetBaseSpecies - lsls r0, 16 - asrs r2, r0, 16 - ldr r1, _0803C0F0 - b _0803C102 - .align 2, 0 -_0803C0F0: .4byte gUnknown_80E80E0 -_0803C0F4: - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, r2 - bne _0803C100 - movs r0, 0 - b _0803C10C -_0803C100: - adds r1, 0x2 -_0803C102: - movs r3, 0 - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _0803C0F4 - movs r0, 0x1 -_0803C10C: - pop {r1} - bx r1 - thumb_func_end sub_803C0DC - .align 2,0 diff --git a/asm/friend_area_action_menu.s b/asm/friend_area_action_menu.s deleted file mode 100644 index f8fe42030..000000000 --- a/asm/friend_area_action_menu.s +++ /dev/null @@ -1,301 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - @ Menu that gets created when you talk to friend - thumb_func_start CreateFriendActionMenu -CreateFriendActionMenu: - push {r4-r7,lr} - ldr r3, _080274E4 - ldr r4, _080274E8 - ldr r0, [r4] - movs r1, 0x8 - ldrsh r2, [r0, r1] - movs r1, 0x58 - muls r2, r1 - ldr r1, [r3] - adds r5, r1, r2 - movs r2, 0xB6 - lsls r2, 1 - adds r0, r2 - movs r1, 0 - movs r2, 0x14 - bl MemoryFill16 - ldrh r0, [r5] - lsrs r0, 1 - movs r6, 0x1 - ands r0, r6 - cmp r0, 0 - beq _080274F4 - ldr r2, [r4] - movs r3, 0x8E - lsls r3, 1 - adds r1, r2, r3 - ldr r0, _080274EC - str r0, [r1] - movs r0, 0x90 - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x7 - str r0, [r1] - adds r0, r5, 0 - bl sub_8027D9C - lsls r0, 24 - cmp r0, 0 - bne _080274B6 - ldr r0, [r4] - movs r1, 0xB6 - lsls r1, 1 - adds r0, r1 - strh r6, [r0] -_080274B6: - movs r7, 0x1 - movs r0, 0x8 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _08027552 - ldrb r0, [r5, 0x2] - cmp r0, 0 - bne _08027552 - ldr r3, [r4] - movs r2, 0x8 - movs r4, 0x92 - lsls r4, 1 - adds r1, r3, r4 - ldr r0, _080274F0 - str r0, [r1] - movs r1, 0x94 - lsls r1, 1 - adds r0, r3, r1 - str r2, [r0] - b _08027550 - .align 2, 0 -_080274E4: .4byte gRecruitedPokemonRef -_080274E8: .4byte gUnknown_203B2BC -_080274EC: .4byte gFriendActionStandby -_080274F0: .4byte gFriendActionMakeLeader -_080274F4: - ldr r2, [r4] - movs r3, 0x8E - lsls r3, 1 - adds r1, r2, r3 - ldr r0, _08027658 - str r0, [r1] - movs r0, 0x90 - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x6 - str r0, [r1] - movs r1, 0x8 - ldrsh r0, [r2, r1] - bl sub_808D750 - lsls r0, 24 - cmp r0, 0 - bne _08027522 - ldr r0, [r4] - movs r2, 0xB6 - lsls r2, 1 - adds r0, r2 - strh r6, [r0] -_08027522: - movs r7, 0x1 - ldr r2, [r4] - movs r3, 0x92 - lsls r3, 1 - adds r1, r2, r3 - ldr r0, _0802765C - str r0, [r1] - movs r0, 0x94 - lsls r0, 1 - adds r1, r2, r0 - movs r0, 0x9 - str r0, [r1] - adds r0, r5, 0 - bl sub_8027DCC - lsls r0, 24 - cmp r0, 0 - bne _08027550 - ldr r0, [r4] - movs r1, 0xB7 - lsls r1, 1 - adds r0, r1 - strh r7, [r0] -_08027550: - movs r7, 0x2 -_08027552: - ldr r4, _08027660 - ldr r2, [r4] - lsls r3, r7, 3 - movs r6, 0x8E - lsls r6, 1 - adds r0, r2, r6 - adds r0, r3 - ldr r1, _08027664 - str r1, [r0] - movs r5, 0x90 - lsls r5, 1 - adds r2, r5 - adds r2, r3 - movs r0, 0xA - str r0, [r2] - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _08027588 - ldr r0, [r4] - lsls r1, r7, 1 - movs r2, 0xB6 - lsls r2, 1 - adds r0, r2 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] -_08027588: - adds r7, 0x1 - ldr r2, [r4] - lsls r3, r7, 3 - adds r0, r2, r6 - adds r0, r3 - ldr r1, _08027668 - str r1, [r0] - adds r2, r5 - adds r2, r3 - movs r0, 0xB - str r0, [r2] - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - bgt _080275AE - ldr r0, [r4] - ldrb r0, [r0, 0x14] - cmp r0, 0 - bne _080275BE -_080275AE: - ldr r0, [r4] - lsls r1, r7, 1 - movs r3, 0xB6 - lsls r3, 1 - adds r0, r3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0] -_080275BE: - adds r7, 0x1 - ldr r4, _08027660 - ldr r5, [r4] - lsls r1, r7, 3 - movs r0, 0x8E - lsls r0, 1 - adds r3, r5, r0 - adds r2, r3, r1 - ldr r0, _0802766C - str r0, [r2] - movs r2, 0x90 - lsls r2, 1 - adds r6, r5, r2 - adds r1, r6, r1 - movs r0, 0x4 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _08027670 - str r0, [r2] - adds r1, r6, r1 - movs r0, 0xC - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r2, r3, r1 - ldr r0, _08027674 - str r0, [r2] - adds r1, r6, r1 - movs r0, 0x5 - str r0, [r1] - adds r7, 0x1 - lsls r1, r7, 3 - adds r3, r1 - movs r0, 0 - str r0, [r3] - adds r1, r6, r1 - movs r0, 0x1 - str r0, [r1] - movs r3, 0 - mov r12, r4 - cmp r3, r7 - bge _08027636 - adds r4, r6, 0 - movs r0, 0xB6 - lsls r0, 1 - adds r2, r5, r0 -_0802761E: - ldrh r0, [r2] - cmp r0, 0 - bne _0802762C - ldr r1, [r4] - ldr r0, [r5, 0x70] - cmp r1, r0 - beq _080276A0 -_0802762C: - adds r4, 0x8 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, r7 - blt _0802761E -_08027636: - movs r3, 0 - cmp r3, r7 - bge _080276A0 - mov r2, r12 - ldr r1, [r2] - movs r4, 0xB6 - lsls r4, 1 - adds r0, r1, r4 - ldrh r0, [r0] - cmp r0, 0 - bne _08027678 - movs r2, 0x90 - lsls r2, 1 - adds r0, r1, r2 - ldr r0, [r0] - str r0, [r1, 0x70] - b _080276A0 - .align 2, 0 -_08027658: .4byte gFriendActionJoinTeam -_0802765C: .4byte gFriendActionSayFarewell -_08027660: .4byte gUnknown_203B2BC -_08027664: .4byte gFriendActionGive -_08027668: .4byte gFriendActionTake -_0802766C: .4byte gFriendActionSummary -_08027670: .4byte gFriendActionMoves -_08027674: .4byte gFriendActionCheckIQ -_08027678: - adds r3, 0x1 - cmp r3, r7 - bge _080276A0 - mov r4, r12 - ldr r2, [r4] - lsls r0, r3, 1 - movs r4, 0xB6 - lsls r4, 1 - adds r1, r2, r4 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08027678 - lsls r0, r3, 3 - movs r3, 0x90 - lsls r3, 1 - adds r1, r2, r3 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x70] -_080276A0: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CreateFriendActionMenu - - .align 2,0 diff --git a/include/code_802C39C.h b/include/code_802C39C.h index 18b50f1cc..5f1971bc3 100644 --- a/include/code_802C39C.h +++ b/include/code_802C39C.h @@ -1,24 +1,22 @@ struct unkStruct_802C39C { /* 0x0 */ u32 unk0[2]; - /* 0x8 */ struct DungeonLocation *dungeon; + /* 0x8 */ struct WonderMailSub *unk8; /* 0xC */ u8 *playerName; /* 0x10 */ s16 clientSpecies; /* 0x12 */ s16 targetSpecies; /* 0x14 */ u8 targetItem; /* 0x15 */ u8 fill15[0x2E - 0x15]; - u8 unk2E; - u8 fill2F[0x34 - 0x2F]; - u8 unk34; + /* 0x2E */ u8 rewardType; + u8 *unk30; + /* 0x34 */ u8 rewardItem; u8 fill35[0x38 - 0x35]; /* 0x38 */ u8 unk38[0x40 - 0x38]; - u8 unk40; - u8 unk41; - u8 unk42; + u8 mailTitleType; + u8 mailDescriptionType; + u8 mailMissionType; u8 unk43; - u8 unk44; - u8 unk45; - u8 fill46[0x48 - 0x46]; + u8 mailStatus; // mail status (suspend / take job / done) /* 0x48 */ u32 y; /* 0x4C */ u8 *unk4C; /* 0x50 */ u8 *unk50[2]; diff --git a/include/code_8094F88.h b/include/code_8094F88.h index fd796329a..beadbb71b 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -3,13 +3,18 @@ #include "item.h" +struct WonderMailSub +{ + /* 0x4 */ struct DungeonLocation dungeon; + u32 seed; +}; + // size: 0x30 struct unkStruct_203B480 { /* 0x0 */ u8 mailType; /* 0x1 */ u8 missionType; - /* 0x4 */ struct DungeonLocation dungeon; - /* 0x8 */ u32 unk8; + struct WonderMailSub unk4; /* 0xC */ s16 clientSpecies; /* 0xE */ s16 targetSpecies; union unk10_temp @@ -67,4 +72,4 @@ s32 GetFirstIndexofMailType(u8 mailType); void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); -#endif \ No newline at end of file +#endif diff --git a/include/code_80958E8.h b/include/code_80958E8.h index 4a6f15e23..345e562a3 100644 --- a/include/code_80958E8.h +++ b/include/code_80958E8.h @@ -5,7 +5,7 @@ struct subStruct_203B490 { // size: 0xC struct DungeonLocation dungeon; - u32 unk4; + u32 seed; u32 unk8; }; diff --git a/include/constants/wonder_mail.h b/include/constants/wonder_mail.h index 14da1ec48..ed5d50b3c 100644 --- a/include/constants/wonder_mail.h +++ b/include/constants/wonder_mail.h @@ -47,9 +47,23 @@ enum WonderMailMissionTypes WONDER_MAIL_MISSION_TYPE_UNK6 = 6, }; +enum MissionTypes +{ + MISSION_TYPE_FRIEND_RESCUE, + MISSION_TYPE_FIND_ITEM, + MISSION_TYPE_DELIVER_ITEM, + MISSION_TYPE_RESCUE_CLIENT, + MISSION_TYPE_RESCUE_TARGET, + MISSION_TYPE_ESCORT_CLIENT, + MISSION_TYPE_SPECIAL_MISSION +}; + +#define MAIL_STATUS_SUSPENDED 0 + #define NUM_POKEMON_NEWS 56 // 50 normal + 6 special issues #define PASSWORD_BUFFER_SIZE 54 #define MAX_ITEM_REWARDS 3 + #endif //GUARD_CONSTANTS_WONDER_MAIL_H diff --git a/include/friend_area_action_menu.h b/include/friend_area_action_menu.h index 399d0b4d4..742ef6cfe 100644 --- a/include/friend_area_action_menu.h +++ b/include/friend_area_action_menu.h @@ -17,7 +17,7 @@ struct unkStruct_203B2BC u32 moveIndex; // some sort of move index u16 moveID; struct Move moves[8]; - u16 moveIDs[4]; // some list of move IDs + u16 moveIDs[MAX_MON_MOVES]; // some list of move IDs u32 menuAction1; u32 menuAction2; u32 menuAction3; @@ -33,7 +33,29 @@ struct unkStruct_203B2BC enum FriendAreaActionMenuStates { FRIEND_AREA_ACTION_MENU_INIT, + FRIEND_AREA_ACTION_MENU_MAIN, + FRIEND_AREA_ACTION_MENU_MAIN_2, + FRIEND_AREA_ACTION_MENU_SUMMARY = 4, + FRIEND_AREA_ACTION_MENU_CHECK_IQ = 5, + FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT = 8, + FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM, FRIEND_AREA_ACTION_MENU_EXIT = 0x11, }; +enum FriendAreaActionMenuActions { + FRIEND_AREA_ACTION_MENU_ACTION_NONE = 1, + FRIEND_AREA_ACTION_MENU_ACTION_YES, + FRIEND_AREA_ACTION_MENU_ACTION_NO, + FRIEND_AREA_ACTION_MENU_ACTION_INFO = 4, + FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY = 4, + FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ, + FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM, + FRIEND_AREA_ACTION_MENU_ACTION_STANDBY, + FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER, + FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL, + FRIEND_AREA_ACTION_MENU_ACTION_GIVE, + FRIEND_AREA_ACTION_MENU_ACTION_TAKE, + FRIEND_AREA_ACTION_MENU_ACTION_MOVES, +}; + #endif diff --git a/include/pokemon.h b/include/pokemon.h index 4c64a0cdb..2ed0a6f1c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -24,6 +24,10 @@ struct unkPokeSubStruct_C u8 fill1[3]; }; +enum PokemonUnk0Flags { + FLAG_ON_TEAM = 2, +}; + // size: 0x58 struct PokemonStruct { diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 5f6982e9b..2bd15648b 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -25,14 +25,13 @@ struct unkStruct_802F204 }; // size: 0x14 + struct WonderMail { /* 0x0 */ u8 mailType; // mail type /* 0x1 */ u8 missionType; // mission type u8 unk2; - u8 unk3; - /* 0x4 */ struct DungeonLocation dungeon; - u32 unk8; + /* 0x4 */ struct WonderMailSub unk4; /* 0xC */ s16 clientSpecies; // client pokemon /* 0xE */ s16 targetSpecies; // target /* 0x10 */ u8 targetItem; // item to find/deliver diff --git a/ld_script.txt b/ld_script.txt index b3fe169e7..153b90dc2 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -117,7 +117,6 @@ SECTIONS { src/friend_list_menu.o(.text); src/party_list_menu.o(.text); src/friend_area_action_menu.o(.text); - asm/friend_area_action_menu.o(.text); src/friend_area_action_menu_1.o(.text); src/wonder_mail.o(.text); src/thank_you_wonder_mail.o(.text); diff --git a/src/code_803B050.c b/src/code_803B050.c index 2112892c4..88cd259e2 100644 --- a/src/code_803B050.c +++ b/src/code_803B050.c @@ -1,15 +1,470 @@ #include "global.h" +#include "constants/wonder_mail.h" #include "pokemon.h" #include "pokemon_3.h" #include "event_flag.h" #include "exclusive_pokemon.h" +#include "code_8094F88.h" +#include "code_802C39C.h" +#include "text_util.h" +#include "text2.h" +#include "code_800D090.h" +#include "menu_input.h" +struct unkStruct_80E9920 +{ + s16 unkA; + s16 unkB; + u8 *text; +}; + +struct unkStruct_80E9F8C +{ + s16 unkA; + s16 unkB; + u8 *text1; + u8 *text2; +}; + +extern s16 gUnknown_80E80E0[]; extern s16 gUnknown_80E8126[]; +extern u8 gUnknown_80E888C[]; +extern u8 *gUnknown_80E8BCC[]; +extern u8 gMankeyMissionDescription[]; +extern u8 gSmeargleMissionDescription[]; +extern u8 gMedichamMissionDescription[]; +extern u8 gUnknown_202DE58[]; +extern u8 gUnknown_80E8968[]; +extern u8 gUnknown_80E89B0[]; +extern u8 gAvailablePokemonNames[]; +extern u8 gDifficultyText[]; +extern u8 gPlaceText[]; +extern u8 gUnknown_80E8AD0[]; +extern u8 gUnknown_80E8AE0[]; +extern u8 gUnknown_80E8AEC[]; +extern u8 gUnknown_80E8B10[]; +extern u8 gUnknown_80E8AFC[]; +extern u8 gUnknown_80E8B20[]; +extern u8 gUnknown_80E8B40[]; +extern u8 gUnknown_80E8B2C[]; +extern u8 *gUnknown_80EB220[]; +extern u8 gRewardText[]; +extern u8 *gMissionRewardText[]; +extern u8 gUnknown_80E8B7C[]; +extern u8 *gUnknown_80EB2F0[]; +extern u8 gUnknown_80E89FC[]; +extern u8 gUnknown_80E8A40[]; +extern u8 gUnknown_80E8A7C[]; +extern u8 *gUnknown_80E8DE4[]; +extern u8 *gUnknown_80E8FB0[]; +extern u8 *gUnknown_80E91D4[]; +extern u8 *gUnknown_80E9820[10]; +extern u8 *gUnknown_80EAEB8[]; +extern u8 gSpecialMissionText[]; +extern u8 *gUnknown_80EB198[]; +extern u8 *gUnknown_80EB3F8[]; +extern u8 *gUnknown_80EB72C[22]; +extern u8 gUnknown_80E8AC8[]; +extern u8 gUnknown_80E8884[]; +extern u8 gMankeyMission[]; +extern u8 gSmeargleMission[]; +extern u8 gMedichamMission[]; +extern u8 gUnknown_80E8830[]; +extern u8 gUnknown_80E8848[]; +extern u8 gUnknown_80E885C[]; +extern u8 gUnknown_80E8AC8[]; +extern u8 *gUnknown_80E910C[]; +extern u8 *gUnknown_80E8C98[]; +extern u8 gUnknown_80E886C[]; +extern u8 *gUnknown_80EAE5C[]; +extern struct unkStruct_80E9F8C gUnknown_80E9F8C[10]; +extern struct unkStruct_80E9920 gUnknown_80E9920[10]; +extern u8 *gUnknown_80E8B94[]; extern struct PokemonStruct *GetPlayerPokemonStruct(void); extern struct PokemonStruct *sub_808D378(void); -extern bool8 sub_803C0DC(s16); +s32 sub_8016028(void); +extern void PrintDungeonLocationtoBuffer(u8 *, void *); +extern void PrintYellowDungeonNametoBuffer(u8 *, void *); +extern u8 sub_803C1D0(struct WonderMailSub *, u8); +extern u8 *sub_803C1F0(u8); +void sub_803D414(u8 *, u8 *); + +void sub_803B6B0(s32 x, s32 y, u8 index, u32 param_4) +{ + xxx_call_draw_string(x,y,gUnknown_80E8B94[index],param_4,0); +} + +void CreateRescueTitle(struct unkStruct_802C39C *param_1) +{ + char buf_1 [200]; + char buf_2 [20]; + char buf_3 [100]; + u8 *monName; + u8 uVar1; + + sub_803B6B0(10,param_1->y,param_1->unk43,param_1->unk0[0]); + switch(param_1->mailTitleType) { + case 3: + xxx_call_draw_string(0x15,param_1->y,param_1->unk4C,param_1->unk0[0],0); + break; + case 0: + xxx_call_draw_string(0x15,param_1->y,gMankeyMission,param_1->unk0[0],0); + break; + case 1: + xxx_call_draw_string(0x15,param_1->y,gSmeargleMission,param_1->unk0[0],0); + break; + case 2: + xxx_call_draw_string(0x15,param_1->y,gMedichamMission,param_1->unk0[0],0); + break; + case 7: + PrintYellowDungeonNametoBuffer(buf_1, param_1->unk8); + xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0); + break; + case 12: + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80E8830,gUnknown_202DE58); + xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0); + break; + case 11: + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80E8848,gUnknown_202DE58); + xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0); + break; + case 4: + xxx_call_draw_string(0x15,param_1->y,gUnknown_80E885C,param_1->unk0[0],0); + break; + case 5: + xxx_call_draw_string(0x15,param_1->y,gUnknown_80E9F8C[param_1->unk0[1]].text1,param_1->unk0[0],0); + break; + case 6: + xxx_call_draw_string(0x15,param_1->y,gUnknown_80E886C,param_1->unk0[0],0); + break; + case 10: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80EAE5C[(bVar2 & 3)],gAvailablePokemonNames); + xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0); + break; + } + case 9: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E910C[(bVar2 % 0xA)],gAvailablePokemonNames); + xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0); + break; + } + default: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E8C98[(bVar2 % 0xf)],gAvailablePokemonNames); + xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0); + break; + } + } + + if (param_1->mailTitleType == 7) { + if (param_1->playerName == NULL) { + xxx_call_draw_string(0xb2 - sub_8016028(),param_1->y,GetMonSpecies(param_1->clientSpecies),param_1->unk0[0],0); + } + else { + sub_80922B4(buf_2,param_1->playerName,POKEMON_NAME_LENGTH); + xxx_call_draw_string(0xb2 - sub_8016028(),param_1->y,buf_2,param_1->unk0[0],0); + } + } + else { + if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) { + PrintDungeonLocationtoBuffer(buf_3, param_1->unk8); + sprintfStatic(buf_1,gUnknown_80E8884,buf_3); // Near %s + } + else { + PrintDungeonLocationtoBuffer(buf_1, param_1->unk8); + } + xxx_call_draw_string(0x1d,param_1->y + 0xc,buf_1,param_1->unk0[0],0); + } + if (param_1->mailTitleType == 7) { + uVar1 = sub_803C1D0(param_1->unk8,0); + } + else { + uVar1 = sub_803C1D0(param_1->unk8,param_1->unk50[1][1]); + } + xxx_call_draw_string(0xb4,param_1->y,sub_803C1F0(uVar1),param_1->unk0[0],0); +} + +void CreateRescueDescription(struct unkStruct_802C39C *param_1) +{ + u8 uVar3; + int x; + int counter; + u32 color; + s32 y; + char buf_1 [300]; + char buf_2 [40]; + char buf_3 [20]; + char buf_4 [20]; + char buf_5 [100]; + u8 local_34 [24]; + u8 *monName; + + y = 0; + + xxx_call_draw_string(10,y,gUnknown_80E888C,param_1->unk0[0],0); + xxx_call_draw_string(0x6c,y,gUnknown_80E8BCC[param_1->mailStatus],param_1->unk0[0],0); + y += 0x10; + switch(param_1->mailDescriptionType) { + case 3: + xxx_call_draw_string(10,y,param_1->unk50[0],param_1->unk0[0],0); + break; + case 0: + xxx_call_draw_string(10,y,gMankeyMissionDescription,param_1->unk0[0],0); + break; + case 1: + xxx_call_draw_string(10,y,gSmeargleMissionDescription,param_1->unk0[0],0); + break; + case 2: + xxx_call_draw_string(10,y,gMedichamMissionDescription,param_1->unk0[0],0); + break; + case 4: + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80E8968,gUnknown_202DE58); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + break; + case 5: + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80E89B0,gUnknown_202DE58); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + break; + case 6: + xxx_call_draw_string(10,y,gUnknown_80E9920[param_1->unk0[1]].text,param_1->unk0[0],0); + break; + case 7: + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E9F8C[param_1->unk0[1]].text2,gAvailablePokemonNames,gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + break; + case 9: + xxx_call_draw_string(10,y,gUnknown_80E89FC,param_1->unk0[0],0); // This is a rescue through communication. Get a friend to help you! + break; + case 10: + xxx_call_draw_string(10,y,gUnknown_80E8A40,param_1->unk0[0],0); // This is a rescue through communication. Rescue a friend! + break; + case 11: + xxx_call_draw_string(10,y,gUnknown_80E8A7C,param_1->unk0[0],0); // This is a rescue through communication. Send your thanks to a friend! + break; + case 15: + case 16: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80EB3F8[(bVar2 % 0x16)],gUnknown_202DE58); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y += 0xC; + sprintfStatic(buf_1,gUnknown_80EB72C[(bVar3 % 0x16)],gUnknown_202DE58); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y -= 0xC; + break; + } + case 14: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80EAEB8[(bVar2 % 0x14)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y += 0xC; + sprintfStatic(buf_1,(gUnknown_80EB198)[(bVar3 & 3)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y -= 0xC; + break; + } + case 8: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80EB220[(bVar2 % 6)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y += 0xC; + sprintfStatic(buf_1,gUnknown_80EB2F0[(bVar3 % 0x6)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y -= 0xC; + break; + } + case 13: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E91D4[(bVar2 % 0x2d)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y += 0xC; + sprintfStatic(buf_1,gUnknown_80E9820[(bVar3 % 10)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y -= 0xC; + break; + } + default: { + u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id; + u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor; + monName = GetMonSpecies(param_1->clientSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E8DE4[(bVar2 % 0xd)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y += 0xC; + sprintfStatic(buf_1,gUnknown_80E8FB0[(bVar3 % 0xd)],gAvailablePokemonNames); + xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0); + y -= 0xC; + break; + } + } + y += 0x1C; + xxx_call_draw_string(10,y,gUnknown_80E8AC8,param_1->unk0[0],0); + if (param_1->playerName == NULL) { + xxx_call_draw_string(0x44,y,GetMonSpecies(param_1->clientSpecies),param_1->unk0[0],0); + } + else { + sub_80922B4(buf_3,param_1->playerName,POKEMON_NAME_LENGTH); + sub_808D930(buf_4,param_1->clientSpecies); + sprintfStatic(buf_2,gUnknown_80E8AD0,buf_3,buf_4); + xxx_call_draw_string(0x44,y,buf_2,param_1->unk0[0],0); + } + + y += 0xC; + xxx_call_draw_string(10,y,gUnknown_80E8AE0,param_1->unk0[0],0); + switch(param_1->mailMissionType) { + case MISSION_TYPE_FRIEND_RESCUE: + xxx_call_draw_string(0x44,y,gUnknown_80E8AEC,param_1->unk0[0],0); // Friend Rescue + break; + case MISSION_TYPE_DELIVER_ITEM: + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80E8AFC,gUnknown_202DE58); // Deliver #C4%s#R. + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case MISSION_TYPE_FIND_ITEM: + sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0); + sprintfStatic(buf_1,gUnknown_80E8B10,gUnknown_202DE58); // Find #C4%s#R. + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case MISSION_TYPE_RESCUE_CLIENT: + xxx_call_draw_string(0x44,y,gUnknown_80E8B20,param_1->unk0[0],0); // Help me. + break; + case MISSION_TYPE_ESCORT_CLIENT: + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E8B2C,gAvailablePokemonNames); // Escort to #C6%s#R. + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case MISSION_TYPE_RESCUE_TARGET: + monName = GetMonSpecies(param_1->targetSpecies); + strcpy(gAvailablePokemonNames,monName); + sprintfStatic(buf_1,gUnknown_80E8B40,gAvailablePokemonNames); + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case MISSION_TYPE_SPECIAL_MISSION: + default: + xxx_call_draw_string(0x44,y,gSpecialMissionText,param_1->unk0[0],0); + break; + } + y += 0xC; + xxx_call_draw_string(10,y,gPlaceText,param_1->unk0[0],0); + + // NOTE: check with TRUE is needed to match + if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) { + PrintDungeonLocationtoBuffer(buf_5,param_1->unk8); + sprintfStatic(buf_1,gUnknown_80E8884,buf_5); // Near %s + } + else { + PrintDungeonLocationtoBuffer(buf_1,param_1->unk8); + } + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + if (param_1->mailMissionType == MISSION_TYPE_FRIEND_RESCUE) { + uVar3 = sub_803C1D0(param_1->unk8, 0); + } + else { + uVar3 = sub_803C1D0(param_1->unk8,param_1->unk50[1][1]); + } + + y += 0xC; + xxx_call_draw_string(10,y,gDifficultyText,param_1->unk0[0],0); + xxx_call_draw_string(0x44,y,sub_803C1F0(uVar3),param_1->unk0[0],0); + y += 0xC; + xxx_call_draw_string(10,y,gRewardText,param_1->unk0[0],0); + + switch(param_1->rewardType) { + case 0: + sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],param_1->unk30); + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case 1: + sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],param_1->unk30); + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case 2: // Item + case 3: // Item + ? + sub_8090DC4(gUnknown_202DE58,param_1->rewardItem,0); + sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],gUnknown_202DE58); + xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0); + break; + case 4: // Friend Area + xxx_call_draw_string(0x44,y,gMissionRewardText[param_1->rewardType],param_1->unk0[0],0); + break; + default: + xxx_call_draw_string(0x44,y,gMissionRewardText[param_1->rewardType],param_1->unk0[0],0); + break; + } + + // Draw the Password + y += 0xC; + if (((2 < (u8)(param_1->mailDescriptionType - 9)) && (param_1->mailDescriptionType != 3)) && (*param_1->unk50[1] == 5)) + { + xxx_call_draw_string(10,y,gUnknown_80E8B7C,param_1->unk0[0],0); // Wonder Mail: + sub_803D414(local_34,param_1->unk50[1]); + for(counter = 0; counter < 24; counter++) + { + if (counter == 12) { + y += 12; + } + color = 7; + if (((3 < counter) && (color = 6, 7 < counter)) && ((color = 7))) + { + if(counter > 15) + { + if(counter < 20) + { + color = 6; + } + } + + } + x = counter % 12; + sub_8012C60(x * 10 + 0x54,y,local_34[counter],color,param_1->unk0[0]); + } + } +} + +bool8 sub_803C0DC(s16 species) +{ + s32 baseSpecies; + s32 index; + + baseSpecies = GetBaseSpecies(species); + index = 0; + if (gUnknown_80E80E0[index] != MONSTER_NONE) + { + while(gUnknown_80E80E0[index] != MONSTER_NONE) { + if (gUnknown_80E80E0[index] == baseSpecies) { + return FALSE; + } + index++; + } + } + return TRUE; +} bool8 sub_803C110(s16 index) { diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 40a48c9e0..e1747577a 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -296,15 +296,15 @@ void sub_809542C(struct unkStruct_809542C *param_1) gUnknown_203B480->mailType = 1; preload = gUnknown_203B480; uVar4 = param_1->unk4; - preload->dungeon = param_1->unk0; - preload->unk8 = uVar4; + preload->unk4.dungeon = param_1->unk0; + preload->unk4.seed = uVar4; sub_8094D28(Rand32Bit()); gUnknown_203B480->unk10.unk10 = sub_8094E4C(); gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum; PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct()); CopyStringtoBuffer(gUnknown_203B480->playerName, buffer); gUnknown_203B480->unk24 = sub_8011C34(); - gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeon.id); + gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->unk4.dungeon.id); } void sub_8095494(struct unkStruct_809542C *param_1, u8 index) @@ -316,8 +316,8 @@ void sub_8095494(struct unkStruct_809542C *param_1, u8 index) mail = gUnknown_203B480; mail += index; - temp = mail->dungeon; - uVar1 = mail->unk8; + temp = mail->unk4.dungeon; + uVar1 = mail->unk4.seed; param_1->unk0 = temp; param_1->unk4 = uVar1; } @@ -420,8 +420,8 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) u8 temp; RestoreIntegerBits(a, &b->mailType, 4); - RestoreDungeonLocation(a, &b->dungeon); - RestoreIntegerBits(a, &b->unk8, 0x18); + RestoreDungeonLocation(a, &b->unk4.dungeon); + RestoreIntegerBits(a, &b->unk4.seed, 0x18); RestoreIntegerBits(a, &b->clientSpecies, 0x9); RestoreIntegerBits(a, &b->unk10.unk10, 0x20); RestoreIntegerBits(a, &b->playerName, 0x50); @@ -445,8 +445,8 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) zero = 0; SaveIntegerBits(a, &b->mailType, 4); - SaveDungeonLocation(a, &b->dungeon); - SaveIntegerBits(a, &b->unk8, 0x18); + SaveDungeonLocation(a, &b->unk4.dungeon); + SaveIntegerBits(a, &b->unk4.seed, 0x18); SaveIntegerBits(a, &b->clientSpecies, 0x9); SaveIntegerBits(a, &b->unk10.unk10, 0x20); SaveIntegerBits(a, &b->playerName, 0x50); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index f00ed9adf..06d6196eb 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -58,7 +58,7 @@ void InitializeMailJobsNews(void) { gUnknown_203B490->unk230[index].dungeon.id = 99; gUnknown_203B490->unk230[index].dungeon.floor = 1; - gUnknown_203B490->unk230[index].unk4 = 0; + gUnknown_203B490->unk230[index].seed = 0; gUnknown_203B490->unk230[index].unk8 = 0; } } @@ -85,17 +85,17 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; else { - if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->dungeon.id) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->unk4.dungeon.id) == 0) return FALSE; if(data->unk2 > 9) return FALSE; - if(sub_809095C(data->dungeon.id)) + if(sub_809095C(data->unk4.dungeon.id)) return FALSE; - if(data->dungeon.floor >= GetDungeonFloorCount(data->dungeon.id)) + if(data->unk4.dungeon.floor >= GetDungeonFloorCount(data->unk4.dungeon.id)) return FALSE; - if(sub_809017C(&data->dungeon)) + if(sub_809017C(&data->unk4.dungeon)) return FALSE; if(data->clientSpecies == MONSTER_NONE) @@ -127,7 +127,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; // Item finding - if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon.id, data->targetItem) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->unk4.dungeon.id, data->targetItem) == 0) return FALSE; if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS) @@ -144,7 +144,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) { if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL) return FALSE; - if(sub_803C1D0(&data->dungeon, data->missionType) == 0) + if(sub_803C1D0(&data->unk4.dungeon, data->missionType) == 0) return FALSE; } return TRUE; diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index 2a27a47d5..a104189f0 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -42,8 +42,8 @@ void SortPelipperJobs(void) { if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) { - if((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) || - ((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.floor))) + if((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) || + ((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.floor))) { mail = gUnknown_203B490->pelipperBoardJobs[index1]; gUnknown_203B490->pelipperBoardJobs[index1] = gUnknown_203B490->pelipperBoardJobs[index2]; @@ -72,9 +72,9 @@ void GeneratePelipperJobs(void) mail->mailType = MAIL_TYPE_UNK2; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 1; - mail->dungeon.id = DUNGEON_UPROAR_FOREST; - mail->dungeon.floor = 10; - mail->unk8 = Rand32Bit() & 0xffffff; + mail->unk4.dungeon.id = DUNGEON_UPROAR_FOREST; + mail->unk4.dungeon.floor = 10; + mail->unk4.seed = Rand32Bit() & 0xffffff; mail->clientSpecies = MONSTER_WYNAUT; mail->targetSpecies = MONSTER_MANKEY; mail->targetItem = 0; @@ -90,9 +90,9 @@ void GeneratePelipperJobs(void) mail->mailType = MAIL_TYPE_UNK3; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 2; - mail->dungeon.id = DUNGEON_HOWLING_FOREST; - mail->dungeon.floor = 15; - mail->unk8 = Rand32Bit() & 0xffffff; + mail->unk4.dungeon.id = DUNGEON_HOWLING_FOREST; + mail->unk4.dungeon.floor = 15; + mail->unk4.seed = Rand32Bit() & 0xffffff; mail->clientSpecies = MONSTER_SMEARGLE; mail->targetSpecies = MONSTER_SMEARGLE; mail->targetItem = 0; @@ -107,9 +107,9 @@ void GeneratePelipperJobs(void) mail->mailType = MAIL_TYPE_UNK4; mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; mail->unk2 = 3; - mail->dungeon.id = DUNGEON_WISH_CAVE; - mail->dungeon.floor = 20; - mail->unk8 = Rand32Bit() & 0xffffff; + mail->unk4.dungeon.id = DUNGEON_WISH_CAVE; + mail->unk4.dungeon.floor = 20; + mail->unk4.seed = Rand32Bit() & 0xffffff; mail->clientSpecies = MONSTER_MEDICHAM; mail->targetSpecies = MONSTER_MEDICHAM; mail->targetItem = 0; @@ -136,9 +136,9 @@ bool8 IsMailinJobSlot(struct WonderMail *mail) if(jobSlot->mailType != MAIL_TYPE_NONE) if(mail->missionType == jobSlot->missionType) if(mail->unk2 == jobSlot->unk2) - if(mail->dungeon.id == jobSlot->dungeon.id) - if(mail->dungeon.floor == jobSlot->dungeon.floor) - if(mail->unk8 == jobSlot->unk8) + if(mail->unk4.dungeon.id == jobSlot->unk4.dungeon.id) + if(mail->unk4.dungeon.floor == jobSlot->unk4.dungeon.floor) + if(mail->unk4.seed == jobSlot->unk4.seed) if(mail->clientSpecies == jobSlot->clientSpecies) if(mail->targetSpecies == jobSlot->targetSpecies) if(mail->targetItem == jobSlot->targetItem) @@ -157,8 +157,8 @@ bool8 sub_809693C(struct WonderMail *mail) bool8 escortMission; s32 index; - dungeonIndex = mail->dungeon.id; - floor = mail->dungeon.floor; + dungeonIndex = mail->unk4.dungeon.id; + floor = mail->unk4.dungeon.floor; escortMission = FALSE; if (!IsValidWonderMail(mail)) { return FALSE; @@ -204,7 +204,7 @@ s32 CountJobsinDungeon(u8 dungeon) for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); - if ((mail->dungeon.id == dungeon) && + if ((mail->unk4.dungeon.id == dungeon) && (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { count++; } @@ -222,7 +222,7 @@ bool8 sub_8096A08(u8 dungeon, u8 *param_2) for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { mail = GetJobSlotInfo(index); - if(mail->dungeon.id == dungeon) + if(mail->unk4.dungeon.id == dungeon) if(mail->mailType == MAIL_TYPE_TAKEN_JOB) if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) { @@ -281,7 +281,7 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) param_1->unk0 = FALSE; param_1->clientSpecies = jobSlot->clientSpecies; param_1->targetSpecies = MONSTER_NONE; - if (jobSlot->dungeon.id == dungeon) { + if (jobSlot->unk4.dungeon.id == dungeon) { switch(jobSlot->missionType) { case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { @@ -322,7 +322,7 @@ s16 sub_8096B98(u8 dungeon) mail = GetJobSlotInfo(index); if(mail->mailType == MAIL_TYPE_TAKEN_JOB) if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - if(mail->dungeon.id == dungeon) + if(mail->unk4.dungeon.id == dungeon) return mail->targetSpecies; } return 0; @@ -368,7 +368,7 @@ bool8 sub_8096C08(u8 *jobIndex) void ResetJobSlot(u8 index) { gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->jobSlots[index].dungeon.id = 99; - gUnknown_203B490->jobSlots[index].dungeon.floor = 0; + gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99; + gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; gUnknown_203B490->jobSlots[index].rewardType = MONEY1; } diff --git a/src/code_80958E8_mid.c b/src/code_80958E8_mid.c index 991798864..6dd4af98f 100644 --- a/src/code_80958E8_mid.c +++ b/src/code_80958E8_mid.c @@ -72,8 +72,8 @@ bool8 GenerateMailJobDungeonInfo(struct WonderMail *mail) } if (flag) { - mail->dungeon.id = dungeon; - mail->dungeon.floor = floor; + mail->unk4.dungeon.id = dungeon; + mail->unk4.dungeon.floor = floor; return TRUE; } floor++; @@ -96,11 +96,11 @@ bool8 sub_8095E38(struct WonderMail *mail, u8 dungeon, u32 floor, u8 param_4) { if (mail->mailType != MAIL_TYPE_NONE) { if ((mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) && (param_4 == 1)) { - if (mail->dungeon.id == dungeon) { + if (mail->unk4.dungeon.id == dungeon) { return TRUE; } } - else if ((mail->dungeon.id == dungeon) && (mail->dungeon.floor == floor)) { + else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) { return TRUE; } } diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 483f96218..78a9afeac 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -49,9 +49,9 @@ bool8 sub_8096F50(struct WonderMail *mail) for(index = 0; index < 0x10; index++) { temp = &gUnknown_203B490->unk230[index]; - if(temp->dungeon.id == mail->dungeon.id) - if(temp->dungeon.floor == mail->dungeon.floor) - if(temp->unk4 == mail->unk8) + if(temp->dungeon.id == mail->unk4.dungeon.id) + if(temp->dungeon.floor == mail->unk4.dungeon.floor) + if(temp->seed == mail->unk4.seed) if(temp->unk8 == temp2) return TRUE; } @@ -96,7 +96,7 @@ u32 RestoreMailInfo(u8 *r0, u32 size) for(index = 0; index < 0x10; index++) { RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); - RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18); RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon); } nullsub_102(&backup); @@ -140,7 +140,7 @@ u32 SaveMailInfo(u8 *r0, u32 size) for(index = 0; index < 0x10; index++) { SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); - SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18); SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon); } nullsub_102(&backup); @@ -158,8 +158,8 @@ void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) RestoreIntegerBits(a, &b->rewardType, 4); RestoreIntegerBits(a, &b->itemReward, 8); RestoreIntegerBits(a, &b->friendAreaReward, 6); - RestoreIntegerBits(a, &b->unk8, 0x18); - RestoreDungeonLocation(a, &b->dungeon); + RestoreIntegerBits(a, &b->unk4.seed, 0x18); + RestoreDungeonLocation(a, &b->unk4.dungeon); } void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) @@ -173,8 +173,8 @@ void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) SaveIntegerBits(a, &b->rewardType, 4); SaveIntegerBits(a, &b->itemReward, 8); SaveIntegerBits(a, &b->friendAreaReward, 6); - SaveIntegerBits(a, &b->unk8, 0x18); - SaveDungeonLocation(a, &b->dungeon); + SaveIntegerBits(a, &b->unk4.seed, 0x18); + SaveDungeonLocation(a, &b->unk4.dungeon); } void sub_80972F4(void) diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index c4c8adb2c..4593d5e29 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/dungeon.h" #include "memory.h" #include "text1.h" #include "text2.h" @@ -12,6 +13,7 @@ #include "code_80130A8.h" #include "code_801EE10_1.h" #include "code_801B3C0.h" +#include "event_flag.h" extern struct unkStruct_203B2BC *gUnknown_203B2BC; @@ -42,6 +44,33 @@ extern void sub_8027CA0(); extern void sub_8027D00(); extern void CreateFriendActionMenu(); extern void sub_80276A8(); +bool8 sub_8027D9C(struct PokemonStruct *pokeStruct); +extern u8 sub_8027DCC(struct PokemonStruct *); +extern u32 sub_801EF38(u8 r0); +extern void sub_801F214(); + +extern void PlaySound(u32); +extern void nullsub_104(); +extern void sub_8099690(u32); + +extern void sub_808D31C(struct PokemonStruct *); +extern struct PokemonStruct *sub_808D3F8(void); +extern struct PokemonStruct *sub_808D3BC(void); +extern u32 sub_801F890(void); +extern void sub_801F8D0(void); +extern u8 gUnknown_202DE58[]; +extern u32 sub_801F194(void); +extern u32 sub_801BF48(void); +extern void sub_801BF98(void); +extern u32 sub_80244E4(void); +extern void sub_802453C(void); +extern bool8 sub_808D750(s16 index_); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern void sub_808ED00(void); + +u32 sub_8027E18(struct PokemonStruct *); +u8 sub_8027E4C(struct PokemonStruct *r0); +void sub_8027EB8(void); const struct UnkTextStruct2 gUnknown_80DD6EC = { @@ -132,25 +161,25 @@ u32 sub_80270A4(void) { switch(gUnknown_203B2BC->state) { case FRIEND_AREA_ACTION_MENU_INIT: - SetFriendAreaActionMenuState(1); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN); break; - case 1: - case 2: + case FRIEND_AREA_ACTION_MENU_MAIN: + case FRIEND_AREA_ACTION_MENU_MAIN_2: sub_80277FC(); break; case 3: sub_80278B4(); break; - case 4: + case FRIEND_AREA_ACTION_MENU_SUMMARY: sub_8027A40(); break; - case 5: + case FRIEND_AREA_ACTION_MENU_CHECK_IQ: sub_8027A5C(); break; - case 8: + case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT: sub_8027A78(); break; - case 9: + case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM: sub_8027AE4(); break; case 10: @@ -232,10 +261,10 @@ void sub_8027274(void) case FRIEND_AREA_ACTION_MENU_INIT: case FRIEND_AREA_ACTION_MENU_EXIT: break; - case 1: + case FRIEND_AREA_ACTION_MENU_MAIN: sub_8023868(1,0,0,7); break; - case 2: + case FRIEND_AREA_ACTION_MENU_MAIN_2: sub_8023B7C(1); break; case 3: @@ -243,10 +272,10 @@ void sub_8027274(void) sub_8023DA4(); sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,gUnknown_203B2BC->unk16C,gUnknown_203B2BC->menuAction1,2); break; - case 4: + case FRIEND_AREA_ACTION_MENU_SUMMARY: sub_8024458(gUnknown_203B2BC->targetPoke,2); break; - case 5: + case FRIEND_AREA_ACTION_MENU_CHECK_IQ: sub_801BEEC(gUnknown_203B2BC->targetPoke); break; case 10: @@ -270,11 +299,11 @@ void sub_8027274(void) case 0xf: sub_801F1B0(1,0); break; - case 8: + case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT: sub_8027794(); sub_8014248(gFriendAreaActionSayFarewellPrompt,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101); break; - case 9: + case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM: sub_8027794(); sub_8014248(gFriendAreaActionSayFarewellConfirm,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101); break; @@ -283,16 +312,609 @@ void sub_8027274(void) sub_801F808(gUnknown_203B2BC->moveIDs); break; case 6: - gUnknown_203B2BC->fallbackState = 2; + gUnknown_203B2BC->fallbackState = FRIEND_AREA_ACTION_MENU_MAIN_2; // The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was // returned to the Toolbox sub_80141B4(gUnknown_80DD8A0,0,0,0x101); break; case 7: - gUnknown_203B2BC->fallbackState = 2; + gUnknown_203B2BC->fallbackState = FRIEND_AREA_ACTION_MENU_MAIN_2; // The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was // returned to storage sub_80141B4(gUnknown_80DD8D0,0,0,0x101); break; } } + +extern u8 gFriendActionStandby[]; +extern u8 gFriendActionMakeLeader[]; +extern u8 gFriendActionJoinTeam[]; +extern u8 gFriendActionSayFarewell[]; +extern u8 gFriendActionGive[]; +extern u8 gFriendActionTake[]; +extern u8 gFriendActionSummary[]; +extern u8 gFriendActionMoves[]; +extern u8 gFriendActionCheckIQ[]; +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D4970[]; +extern u8 gUnknown_80DD958[]; + + +void CreateFriendActionMenu(void) +{ + int index; + s32 loopMax; + struct PokemonStruct *pokeStruct; + + loopMax = 0; + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); + + if((pokeStruct->unk0 >> 1) % 2) + { + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionStandby; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_STANDBY; + if(!sub_8027D9C(pokeStruct)) + { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + if(sub_80023E4(8) && !pokeStruct->isTeamLeader) + { + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionMakeLeader; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER; + loopMax += 1; + } + } + else + { + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionJoinTeam; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM; + if(!sub_808D750(gUnknown_203B2BC->targetPoke)) + { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionSayFarewell; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL; + if(!sub_8027DCC(pokeStruct)) + { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + + } + + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_GIVE; + if(GetNumberOfFilledInventorySlots() == 0) + { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionTake; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_TAKE; + if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE || gUnknown_203B2BC->item2.id == ITEM_NOTHING) + { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionSummary; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionMoves; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_MOVES; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionCheckIQ; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = 0; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE; + + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2BC->unk16C[index] == 0) + { + if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction1) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2BC->unk16C[index] == 0) + { + gUnknown_203B2BC->menuAction1 = gUnknown_203B2BC->menuItems[index].menuAction; + break; + } + } +} + +void sub_80276A8(void) +{ + int index; + s32 loopMax; + + loopMax = 0; + MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); + gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_GIVE; + if (GetNumberOfFilledInventorySlots() == 0) { + gUnknown_203B2BC->unk16C[loopMax] = 1; + } + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_INFO; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = 0; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE; + + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2BC->unk16C[index] == 0) + { + if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2) + return; + } + } + + for(index = 0; index < loopMax; index++) + { + if(gUnknown_203B2BC->unk16C[index] == 0) + { + gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction; + break; + } + } +} + +void sub_8027794(void) +{ + s32 loopMax = 0; + + MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); + gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_YES; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NO; + loopMax += 1; + gUnknown_203B2BC->menuItems[loopMax].text = NULL; + gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE; +} + +void sub_80277FC(void) +{ + struct PokemonStruct *pokeStruct; + + switch(sub_8023A94(TRUE)) { + case 0: + case 1: + break; + case 3: + gUnknown_203B2BC->targetPoke = sub_8023B44(); + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + gUnknown_203B2BC->pokeStruct = pokeStruct; + gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader; + PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); + SetFriendAreaActionMenuState(3); + break; + case 4: + gUnknown_203B2BC->targetPoke = sub_8023B44(); + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + gUnknown_203B2BC->pokeStruct = pokeStruct; + gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader; + PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); + SetFriendAreaActionMenuState(4); + break; + case 2: + sub_8023C60(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT); + break; + } +} + +void sub_80278B4(void) +{ + struct PokemonStruct *playerStruct; + struct PokemonStruct *pokeStruct1; + struct PokemonStruct *pokeStruct2; + u32 menuAction; + + menuAction = 0; + sub_8023A94(FALSE); + if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != FRIEND_AREA_ACTION_MENU_ACTION_NONE)) { + gUnknown_203B2BC->menuAction1 = menuAction; + } + switch(menuAction) { + case FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM: + if (sub_808D750(gUnknown_203B2BC->targetPoke)) { +#ifdef NONMATCHING + pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; +#else + register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]); + struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; + size_t addr = offset + (size_t)p; + pokeStruct1 = (struct PokemonStruct*)addr; +#endif + pokeStruct1->unk0 |= FLAG_ON_TEAM; + nullsub_104(); + } + sub_808ED00(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_STANDBY: + gUnknown_203B2BC->pokeStruct->unk0 &= ~(FLAG_ON_TEAM); + nullsub_104(); + sub_808ED00(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER: + pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + playerStruct = GetPlayerPokemonStruct(); + if (!pokeStruct2->isTeamLeader) { + playerStruct->isTeamLeader = FALSE; + pokeStruct2->isTeamLeader = TRUE; + nullsub_104(); + } + sub_808ED00(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_MOVES: + SetFriendAreaActionMenuState(0xe); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_GIVE: + SetFriendAreaActionMenuState(10); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_TAKE: + PlaySound(0x14d); + if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2BC->item2); + } + FillInventoryGaps(); + gUnknown_203B2BC->item2.id = ITEM_NOTHING; + gUnknown_203B2BC->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); + nullsub_104(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SUMMARY); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_CHECK_IQ); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_NONE: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + } +} + +void sub_8027A40(void) +{ + switch(sub_80244E4()) + { + case 2: + case 3: + sub_802453C(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case 0: + case 1: + break; + } +} + +void sub_8027A5C(void) +{ + switch(sub_801BF48()) + { + case 2: + case 3: + sub_801BF98(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case 0: + case 1: + break; + } +} + +static inline bool8 sub_8027A78_sub(void) { + if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE) + return TRUE; + else + return FALSE; +} + +void sub_8027A78(void) +{ + s32 menuAction; + if(sub_80144A4(&menuAction) == 0) + { + switch(menuAction) + { + case FRIEND_AREA_ACTION_MENU_ACTION_NONE: + case FRIEND_AREA_ACTION_MENU_ACTION_NO: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_YES: + if (sub_8027A78_sub()) + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM); + else + { + sub_8027EB8(); + sub_808D31C(gUnknown_203B2BC->pokeStruct); + } + break; + } + } +} + +void sub_8027AE4(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + switch(menuAction) + { + case FRIEND_AREA_ACTION_MENU_ACTION_NONE: + case FRIEND_AREA_ACTION_MENU_ACTION_NO: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_YES: + sub_8027EB8(); + sub_808D31C(gUnknown_203B2BC->pokeStruct); + break; + } + } +} + +void sub_8027B28(void) +{ + switch(sub_801A6E8(TRUE)) + { + case 3: + gUnknown_203B2BC->id = sub_801A8AC(); + gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id; + gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity; + SetFriendAreaActionMenuState(0xc); + break; + case 4: + gUnknown_203B2BC->id = sub_801A8AC(); + gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id; + gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity; + sub_8099690(0); + SetFriendAreaActionMenuState(0xd); + break; + case 2: + sub_801A928(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case 0: + case 1: + break; + } +} + +void sub_8027BD8(void) +{ + s32 menuAction; + + menuAction = 0; + sub_801A6E8(FALSE); + if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != FRIEND_AREA_ACTION_MENU_ACTION_NONE)) { + gUnknown_203B2BC->menuAction2 = menuAction; + } + switch(menuAction) + { + case FRIEND_AREA_ACTION_MENU_ACTION_GIVE: + PlaySound(0x14d); + ShiftItemsDownFrom(gUnknown_203B2BC->id); + FillInventoryGaps(); + if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2BC->item2); + } + GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive); + sub_801A928(); + nullsub_104(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_INFO: + sub_8099690(0); + SetFriendAreaActionMenuState(0xd); + break; + case FRIEND_AREA_ACTION_MENU_ACTION_NONE: + SetFriendAreaActionMenuState(0xb); + break; + } +} + +void sub_8027C84() +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + SetFriendAreaActionMenuState(0xB); + case 0: + case 1: + break; + } +} + +void sub_8027CA0(void) +{ + switch(sub_801EF38(1)) + { + case 3: + case 4: + gUnknown_203B2BC->moveIndex = sub_801F194(); + gUnknown_203B2BC->moveID = gUnknown_203B2BC->moves[gUnknown_203B2BC->moveIndex].id; + SetFriendAreaActionMenuState(0x10); + break; + case 2: + sub_801F214(); + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + case 0: + case 1: + break; + } +} + +void sub_8027D00(void) +{ + switch(sub_801F890()) + { + case 2: + case 3: + sub_801F8D0(); + SetFriendAreaActionMenuState(0xF); + break; + case 0: + case 1: + break; + } +} + +void FriendAreaActionMenu_GotoFallbackState(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState); + } +} + +void sub_8027D40(u32 r0, struct BulkItem *heldItem) +{ + + struct Item slot; + struct unkStruct_8090F58 a3; + + sub_8008C54(r0); + sub_80073B8(r0); + HeldItemToSlot(&slot, heldItem); + a3.unk0 = 0; + a3.unk4 = 0; + a3.unk8 = 1; + slot.flags = ITEM_FLAG_EXISTS; + sub_8090E14(gUnknown_202DE58, &slot, &a3); + xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0); + sub_80073E0(r0); +} + +bool8 sub_8027D9C(struct PokemonStruct *pokeStruct) +{ + u32 var1; + if(!pokeStruct->isTeamLeader) + { + var1 = 0; + if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) + var1 = 1; + if(var1 != 0) + { + if(!sub_80023E4(8)) + return FALSE; + } + } + else + return FALSE; + return TRUE; +} + +bool8 sub_8027DCC(struct PokemonStruct *pokeStruct) +{ + u32 var1; + if(sub_808D3BC() != pokeStruct) + if(sub_808D3F8() != pokeStruct) + if(!pokeStruct->isTeamLeader) + { + var1 = 0; + if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) + var1 = 1; + if(var1 != 0) + { + if(sub_80023E4(8)) + goto check; + } + else + { + check: + if(sub_8027E18(pokeStruct) != 3) + return TRUE; + } + } + return FALSE; +} + +u32 sub_8027E18(struct PokemonStruct *pokeStruct) +{ + if(pokeStruct->heldItem.id == ITEM_NOTHING) + return 0; + else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) + return 1; + else if(sub_8027E4C(pokeStruct)) + return 2; + else + return 3; +} + +bool8 sub_8027E4C(struct PokemonStruct *pokeStruct) +{ + if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.id)) + return FALSE; + else + { + if(IsThrowableItem(pokeStruct->heldItem.id)) + { + if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] + pokeStruct->heldItem.quantity > 0x3e7) + return FALSE; + } + else if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] > 0x3e6) + { + return FALSE; + } + } + return TRUE; +} + +void sub_8027EB8(void) +{ + switch(sub_8027E18(gUnknown_203B2BC->pokeStruct)) + { + case 1: + PlaySound(0x14d); + AddHeldItemToInventory(&gUnknown_203B2BC->item2); + FillInventoryGaps(); + gUnknown_203B2BC->item2.id = ITEM_NOTHING; + gUnknown_203B2BC->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2); + SetFriendAreaActionMenuState(6); + break; + case 2: + PlaySound(0x14d); + if(IsThrowableItem(gUnknown_203B2BC->item2.id)) + gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += gUnknown_203B2BC->item2.quantity; + else + gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += 1; + gUnknown_203B2BC->item2.id = ITEM_NOTHING; + gUnknown_203B2BC->item2.quantity = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2); + SetFriendAreaActionMenuState(7); + break; + case 0: + default: + SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); + break; + } +} diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index fd65b68a9..bd7ef4ba0 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -57,495 +57,3 @@ ALIGNED(4) const u8 gFriendActionCheckIQ[] = "Check IQ"; ALIGNED(4) const u8 gUnknown_80DD958[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} "); static const u8 filler[] = "pksdir0"; - - -extern u8 *gUnknown_80D4920[]; -extern u8 *gUnknown_80D4928[]; -extern u8 *gUnknown_80D4970[]; - -void sub_80276A8(void) -{ - int index; - s32 loopMax; - - loopMax = 0; - MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); - gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive; - gUnknown_203B2BC->menuItems[loopMax].menuAction = 10; - if (GetNumberOfFilledInventorySlots() == 0) { - gUnknown_203B2BC->unk16C[loopMax] = 1; - } - loopMax += 1; - gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970; - gUnknown_203B2BC->menuItems[loopMax].menuAction = 4; - loopMax += 1; - gUnknown_203B2BC->menuItems[loopMax].text = 0; - gUnknown_203B2BC->menuItems[loopMax].menuAction = 1; - - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B2BC->unk16C[index] == 0) - { - if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2) - return; - } - } - - for(index = 0; index < loopMax; index++) - { - if(gUnknown_203B2BC->unk16C[index] == 0) - { - gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction; - break; - } - } -} - -void sub_8027794(void) -{ - s32 loopMax = 0; - - MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C)); - gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920; - gUnknown_203B2BC->menuItems[loopMax].menuAction = 0x2; - loopMax += 1; - gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928; - gUnknown_203B2BC->menuItems[loopMax].menuAction = 3; - loopMax += 1; - gUnknown_203B2BC->menuItems[loopMax].text = NULL; - gUnknown_203B2BC->menuItems[loopMax].menuAction = 1; -} - -void sub_80277FC(void) -{ - struct PokemonStruct *pokeStruct; - - switch(sub_8023A94(TRUE)) { - case 0: - case 1: - break; - case 3: - gUnknown_203B2BC->targetPoke = sub_8023B44(); - pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; - gUnknown_203B2BC->pokeStruct = pokeStruct; - gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader; - PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); - SetFriendAreaActionMenuState(3); - break; - case 4: - gUnknown_203B2BC->targetPoke = sub_8023B44(); - pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; - gUnknown_203B2BC->pokeStruct = pokeStruct; - gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader; - PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); - SetFriendAreaActionMenuState(4); - break; - case 2: - sub_8023C60(); - SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT); - break; - } -} - -void sub_80278B4(void) -{ - struct PokemonStruct *playerStruct; - struct PokemonStruct *pokeStruct1; - struct PokemonStruct *pokeStruct2; - u32 menuAction; - - menuAction = 0; - sub_8023A94(FALSE); - if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) { - gUnknown_203B2BC->menuAction1 = menuAction; - } - switch(menuAction) { - case 6: - if (sub_808D750(gUnknown_203B2BC->targetPoke)) { -#ifdef NONMATCHING - pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; -#else - register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]); - struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; - size_t addr = offset + (size_t)p; - pokeStruct1 = (struct PokemonStruct*)addr; -#endif - pokeStruct1->unk0 |= 2; - nullsub_104(); - } - sub_808ED00(); - SetFriendAreaActionMenuState(2); - break; - case 7: - gUnknown_203B2BC->pokeStruct->unk0 &= 0xfffd; - nullsub_104(); - sub_808ED00(); - SetFriendAreaActionMenuState(2); - break; - case 8: - pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; - playerStruct = GetPlayerPokemonStruct(); - if (!pokeStruct2->isTeamLeader) { - playerStruct->isTeamLeader = FALSE; - pokeStruct2->isTeamLeader = TRUE; - nullsub_104(); - } - sub_808ED00(); - SetFriendAreaActionMenuState(2); - break; - case 9: - SetFriendAreaActionMenuState(8); - break; - case 0xc: - SetFriendAreaActionMenuState(0xe); - break; - case 10: - SetFriendAreaActionMenuState(10); - break; - case 0xb: - PlaySound(0x14d); - if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2BC->item2); - } - FillInventoryGaps(); - gUnknown_203B2BC->item2.id = ITEM_NOTHING; - gUnknown_203B2BC->item2.quantity = 0; - GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2); - nullsub_104(); - SetFriendAreaActionMenuState(2); - break; - case 4: - SetFriendAreaActionMenuState(4); - break; - case 5: - SetFriendAreaActionMenuState(5); - break; - case 1: - SetFriendAreaActionMenuState(2); - break; - } -} - -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->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE) - return TRUE; - else - return FALSE; -} - -void sub_8027A78(void) -{ - s32 menuAction; - if(sub_80144A4(&menuAction) == 0) - { - switch(menuAction) - { - case 1: - case 3: - SetFriendAreaActionMenuState(2); - break; - case 2: - if (sub_8027A78_sub()) - SetFriendAreaActionMenuState(9); - else - { - sub_8027EB8(); - sub_808D31C(gUnknown_203B2BC->pokeStruct); - } - break; - } - } -} - -void sub_8027AE4(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - switch(menuAction) - { - case 1: - case 3: - SetFriendAreaActionMenuState(2); - break; - case 2: - sub_8027EB8(); - sub_808D31C(gUnknown_203B2BC->pokeStruct); - break; - } - } -} - -void sub_8027B28(void) -{ - switch(sub_801A6E8(TRUE)) - { - case 3: - gUnknown_203B2BC->id = sub_801A8AC(); - gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id; - gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity; - SetFriendAreaActionMenuState(0xc); - break; - case 4: - gUnknown_203B2BC->id = sub_801A8AC(); - gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id; - gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity; - sub_8099690(0); - SetFriendAreaActionMenuState(0xd); - break; - case 2: - sub_801A928(); - SetFriendAreaActionMenuState(2); - break; - case 0: - case 1: - break; - } -} - -void sub_8027BD8(void) -{ - s32 menuAction; - - menuAction = 0; - sub_801A6E8(FALSE); - if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) { - gUnknown_203B2BC->menuAction2 = menuAction; - } - switch(menuAction) - { - case 10: - PlaySound(0x14d); - ShiftItemsDownFrom(gUnknown_203B2BC->id); - FillInventoryGaps(); - if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) { - AddHeldItemToInventory(&gUnknown_203B2BC->item2); - } - GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive); - sub_801A928(); - nullsub_104(); - SetFriendAreaActionMenuState(2); - break; - case 4: - sub_8099690(0); - SetFriendAreaActionMenuState(0xd); - break; - case 1: - SetFriendAreaActionMenuState(0xb); - break; - } -} - -void sub_8027C84() -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - SetFriendAreaActionMenuState(0xB); - case 0: - case 1: - break; - } -} - -void sub_8027CA0(void) -{ - switch(sub_801EF38(1)) - { - case 3: - case 4: - gUnknown_203B2BC->moveIndex = sub_801F194(); - gUnknown_203B2BC->moveID = gUnknown_203B2BC->moves[gUnknown_203B2BC->moveIndex].id; - SetFriendAreaActionMenuState(0x10); - break; - case 2: - sub_801F214(); - SetFriendAreaActionMenuState(0x2); - break; - case 0: - case 1: - break; - } -} - -void sub_8027D00(void) -{ - switch(sub_801F890()) - { - case 2: - case 3: - sub_801F8D0(); - SetFriendAreaActionMenuState(0xF); - break; - case 0: - case 1: - break; - } -} - -void FriendAreaActionMenu_GotoFallbackState(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState); - } -} - -void sub_8027D40(u32 r0, struct BulkItem *heldItem) -{ - - struct Item slot; - struct unkStruct_8090F58 a3; - - sub_8008C54(r0); - sub_80073B8(r0); - HeldItemToSlot(&slot, heldItem); - a3.unk0 = 0; - a3.unk4 = 0; - a3.unk8 = 1; - slot.flags = ITEM_FLAG_EXISTS; - sub_8090E14(gUnknown_202DE58, &slot, &a3); - xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0); - sub_80073E0(r0); -} - -bool8 sub_8027D9C(struct PokemonStruct *pokeStruct) -{ - u32 var1; - if(!pokeStruct->isTeamLeader) - { - var1 = 0; - if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) - var1 = 1; - if(var1 != 0) - { - if(!sub_80023E4(8)) - return FALSE; - } - } - else - return FALSE; - return TRUE; -} - -bool8 sub_8027DCC(struct PokemonStruct *pokeStruct) -{ - u32 var1; - if(sub_808D3BC() != pokeStruct) - if(sub_808D3F8() != pokeStruct) - if(!pokeStruct->isTeamLeader) - { - var1 = 0; - if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER) - var1 = 1; - if(var1 != 0) - { - if(sub_80023E4(8)) - goto check; - } - else - { - check: - if(sub_8027E18(pokeStruct) != 3) - return TRUE; - } - } - return FALSE; -} - -u32 sub_8027E18(struct PokemonStruct *pokeStruct) -{ - if(pokeStruct->heldItem.id == ITEM_NOTHING) - return 0; - else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE) - return 1; - else if(sub_8027E4C(pokeStruct)) - return 2; - else - return 3; -} - -bool8 sub_8027E4C(struct PokemonStruct *pokeStruct) -{ - if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.id)) - return FALSE; - else - { - if(IsThrowableItem(pokeStruct->heldItem.id)) - { - if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] + pokeStruct->heldItem.quantity > 0x3e7) - return FALSE; - } - else if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] > 0x3e6) - { - return FALSE; - } - } - return TRUE; -} - -void sub_8027EB8(void) -{ - switch(sub_8027E18(gUnknown_203B2BC->pokeStruct)) - { - case 1: - PlaySound(0x14d); - AddHeldItemToInventory(&gUnknown_203B2BC->item2); - FillInventoryGaps(); - gUnknown_203B2BC->item2.id = ITEM_NOTHING; - gUnknown_203B2BC->item2.quantity = 0; - GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2); - SetFriendAreaActionMenuState(6); - break; - case 2: - PlaySound(0x14d); - if(IsThrowableItem(gUnknown_203B2BC->item2.id)) - gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += gUnknown_203B2BC->item2.quantity; - else - gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += 1; - gUnknown_203B2BC->item2.id = ITEM_NOTHING; - gUnknown_203B2BC->item2.quantity = 0; - GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2); - SetFriendAreaActionMenuState(7); - break; - case 0: - default: - SetFriendAreaActionMenuState(2); - break; - } -} - diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 4c7e11bf5..9e12fffdf 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -536,7 +536,7 @@ void sub_8025A84(void) sub_8025434(0xA); break; case 9: - gUnknown_203B2B4->pokeStruct->unk0 &= 0xfffd; + gUnknown_203B2B4->pokeStruct->unk0 &= ~(FLAG_ON_TEAM); nullsub_104(); sub_808ED00(); sub_8023C60(); diff --git a/src/friend_rescue.c b/src/friend_rescue.c index 980212976..b0cfd8235 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -1165,7 +1165,7 @@ void sub_8032828(void) else gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING; gUnknown_203B33C->unk53C.quantity = 1; - gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0); + gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); gUnknown_203B33C->unk53C.itemRewards[1] = 0; gUnknown_203B33C->unk53C.itemRewards[2] = 0; gUnknown_203B33C->unk53C.friendAreaReward = 0; diff --git a/src/mailbox.c b/src/mailbox.c index 7fcffdb3b..7c3e15c5e 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -231,7 +231,7 @@ void sub_802E1AC(void) case MAIL_INFO: sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC); gUnknown_203B304->unkC.unk0[0] = 3; - gUnknown_203B304->unkC.unk44 = 0; + gUnknown_203B304->unkC.mailStatus = MAIL_STATUS_SUSPENDED; sub_802DE84(&gUnknown_203B304->unkC); break; case JOB_LIST_MENU: @@ -404,7 +404,7 @@ void sub_802E578(void) mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); if(mail->mailType == 1) { - gUnknown_203B304->mailIndex = mail->dungeon.floor; + gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor; gUnknown_203B304->fallbackState = MAIL_MENU_1; SetMailboxState(DISPLAY_SEL_PKMN_NEWS); } @@ -466,7 +466,7 @@ void HandleMailActionMenu(void) case 6: PlaySound(0x133); mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - ReceivePKMNNews(mail->dungeon.floor); + ReceivePKMNNews(mail->unk4.dungeon.floor); ResetMailboxSlot(gUnknown_203B304->mailboxIndex); sub_8096078(); if(HasNoMailinMailbox()) @@ -482,7 +482,7 @@ void HandleMailActionMenu(void) case 7: PlayMenuSoundEffect(0); mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); - gUnknown_203B304->mailIndex = mail->dungeon.floor; + gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor; gUnknown_203B304->fallbackState = MAIL_MENU_1; SetMailboxState(DISPLAY_SEL_PKMN_NEWS); break; diff --git a/src/mailbox_8095F8C.c b/src/mailbox_8095F8C.c index e052d5596..95c25528f 100644 --- a/src/mailbox_8095F8C.c +++ b/src/mailbox_8095F8C.c @@ -62,7 +62,7 @@ void ResetMailbox(void) void ResetMailboxSlot(u8 index) { gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->mailboxSlots[index].dungeon.id = 99; - gUnknown_203B490->mailboxSlots[index].dungeon.floor = 0; + gUnknown_203B490->mailboxSlots[index].unk4.dungeon.id = 99; + gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor = 0; gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1; } diff --git a/src/party_list_menu.c b/src/party_list_menu.c index c0c909dbd..003c3d9b1 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -638,14 +638,14 @@ void sub_80268CC(void) pokeStruct = (struct PokemonStruct*)addr; #endif - pokeStruct->unk0 |= 2; + pokeStruct->unk0 |= FLAG_ON_TEAM; nullsub_104(); } sub_808ED00(); sub_8026074(5); break; case 7: - gUnknown_203B2B8->pokeStruct->unk0 &= 0xfffd; + gUnknown_203B2B8->pokeStruct->unk0 &= ~(FLAG_ON_TEAM); nullsub_104(); sub_808ED00(); sub_8026074(6); diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 0ba24684c..3d2cfbe35 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -220,7 +220,7 @@ void sub_802EA58(void) case PELIPPER_JOB_INFO: sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC); gPelipperBoard->unkC.unk0[0] = 3; - gPelipperBoard->unkC.unk44 = 0; + gPelipperBoard->unkC.mailStatus = MAIL_STATUS_SUSPENDED; sub_802DE84(&gPelipperBoard->unkC); break; case PELIPPER_JOB_LIST_MENU: @@ -467,4 +467,4 @@ void CreatePelipperAcceptedStatusBox(u32 r0) xxx_call_draw_string(0x16, 0xD, gPelipperStatusSlash, r0, 0); // "/" sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0); sub_80073E0(r0); -} \ No newline at end of file +} diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 01c45e6a6..f686e4464 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -682,7 +682,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2) pokemon = &gRecruitedPokemonRef->pokemon[i]; if (pokemon->unk0 & 1) { - if (pokemon->unk0 & 2) { + if (pokemon->unk0 & FLAG_ON_TEAM) { buffer[count++] = i; } if (pokemon->isTeamLeader) { @@ -730,7 +730,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2) RestoreIntegerBits(&backup, &data_u8, 1); RestorePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]); if (data_u8 & 1) { - gRecruitedPokemonRef->team[i].unk0 = 3; + gRecruitedPokemonRef->team[i].unk0 = 3; // FLAG_ON_TEAM (2) + ??? (1) } else { gRecruitedPokemonRef->team[i].unk0 = 0; @@ -740,12 +740,12 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2) for (i = 0; i < 6; i++) { RestoreIntegerBits(&backup, &data_s16, 16); if ((u16)data_s16 < NUM_MONSTERS) { - gRecruitedPokemonRef->pokemon[data_s16].unk0 |= 2; + gRecruitedPokemonRef->pokemon[data_s16].unk0 |= FLAG_ON_TEAM; } } RestoreIntegerBits(&backup, &data_s16, 16); if ((u16)data_s16 < NUM_MONSTERS) { - gRecruitedPokemonRef->pokemon[data_s16].isTeamLeader = 1; + gRecruitedPokemonRef->pokemon[data_s16].isTeamLeader = TRUE; } nullsub_102(&backup); return backup.unk8; diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 7aedc418e..95e6015b8 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -605,7 +605,7 @@ void DisplayMissionObjectives(void) mail = GetMailatIndex(local_94); sub_803B6B0(10,16,3,gUnknown_203B330->unk10); // %dF - sprintfStatic(buffer,gUnknown_80E1F3C,mail->dungeon.floor); + sprintfStatic(buffer,gUnknown_80E1F3C,mail->unk4.dungeon.floor); xxx_call_draw_string(0x15,16,buffer,gUnknown_203B330->unk10,0); // Rescue #C6%s#R sprintfStatic(buffer,gUnknown_80E1F40,GetMonSpecies(mail->clientSpecies)); @@ -624,11 +624,11 @@ void DisplayMissionObjectives(void) for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) { jobInfo = GetJobSlotInfo(jobSlotIdx); - if ((((jobInfo->dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) + if ((((jobInfo->unk4.dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) ) && (jobInfo->mailType != MAIL_TYPE_SUSPENDED_JOB)) && (jobInfo->mailType != MAIL_TYPE_UNK7)) { sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10); if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { - sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->dungeon.floor); + sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->unk4.dungeon.floor); xxx_call_draw_string(21,yCoord,buffer1,gUnknown_203B330->unk10,0); } switch(jobInfo->missionType) diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 2a5abf37a..160f7986e 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -635,8 +635,8 @@ u32 ConvertMenutoRescuePasswordState(u32 unused) u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *param_3) { if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) || - (param_3->dungeon.floor >= GetDungeonFloorCount(param_3->dungeon.id)) || - (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_MAX < param_3->clientSpecies) || + (param_3->unk4.dungeon.floor >= GetDungeonFloorCount(param_3->unk4.dungeon.id)) || + (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || (IsInvalidItemReward(param_3->item.id))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; } diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 2491eb539..a2de589f6 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -1396,7 +1396,7 @@ void UpdateThankYouMailText(void) else gUnknown_203B2C4->unk53C.itemRewards[0] = ITEM_NOTHING; // unk558 gUnknown_203B2C4->unk53C.quantity = 1; // unk55B - gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0); // unk560 + gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); // unk560 gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559 gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 29c2e8168..9ae061215 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -1162,7 +1162,7 @@ void sub_8028FDC(void) { case 8: mail = GetMailatIndex(gUnknown_203B2C0->mailIndex); - if(!sub_80A2824(mail->dungeon.id)) + if(!sub_80A2824(mail->unk4.dungeon.id)) { SetFriendRescueCounterState(CANT_GO_TO_DUNGEON); } diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 1f8b12215..9f9f235aa 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -175,8 +175,8 @@ void sub_802B3E0(void) gUnknown_203B2C8->unk114.moneyReward = 0; sub_8097790(); mail = GetMailatIndex(gUnknown_203B2C8->unk1); - sub_803C37C(&mail->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards); - gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0); + sub_803C37C(&mail->unk4.dungeon, 0, gUnknown_203B2C8->unk114.itemRewards); + gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); gUnknown_203B2C8->unk114.itemRewards[1] = ITEM_NOTHING; gUnknown_203B2C8->unk114.itemRewards[2] = ITEM_NOTHING; gUnknown_203B2C8->unk114.quantity = 10; diff --git a/src/wonder_mail_2_mid.c b/src/wonder_mail_2_mid.c index 9a5981ce5..0d72dffec 100644 --- a/src/wonder_mail_2_mid.c +++ b/src/wonder_mail_2_mid.c @@ -80,7 +80,7 @@ void CreateMailMenu(void) y = sub_8013800(&gUnknown_203B2D8->input, index); sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38); PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); - sprintfStatic(buffer, GetPokemonMailHeadline(mail->dungeon.floor), gAvailablePokemonNames); + sprintfStatic(buffer, GetPokemonMailHeadline(mail->unk4.dungeon.floor), gAvailablePokemonNames); xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0); } else { diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index ded2caabc..ae1e0389a 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -189,7 +189,7 @@ void sub_802CAA4(void) { { case 5: gUnknown_203B2F0->unk10C[loopMax].text = gUnknown_80DFD70; // Take Job - if(sub_809693C(mail) || !sub_80A2824(mail->dungeon.id)) + if(sub_809693C(mail) || !sub_80A2824(mail->unk4.dungeon.id)) { gUnknown_203B2F0->unk10C[loopMax].menuAction = -1; } @@ -679,7 +679,7 @@ void sub_802D2A8(void) MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->mail->unk14,0x28); MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->mail->unk18,0x78); } - switch(gUnknown_203B2F8->mail->wonderMail.dungeon.id) + switch(gUnknown_203B2F8->mail->wonderMail.unk4.dungeon.id) { // NOTE: subtract 1 from each of the case as the input?? case DUNGEON_ODDITY_CAVE: // 0x2B @@ -730,7 +730,7 @@ void sub_802D2A8(void) case 0x10: sub_803B35C(&gUnknown_203B2F8->mail->wonderMail,&gUnknown_203B2F8->unk14); gUnknown_203B2F8->unk14.unk0[0] = 3; - gUnknown_203B2F8->unk14.unk44 = 0; + gUnknown_203B2F8->unk14.mailStatus = MAIL_STATUS_SUSPENDED; gUnknown_203B2F8->unk14.unk50[0] = gUnknown_203B2F8->mail->unk18; sub_802DE84(&gUnknown_203B2F8->unk14); break; @@ -928,7 +928,7 @@ void sub_802D940(void) { // Delete case 2: - if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id))) + if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id))) { sub_802D1A0(7); } @@ -1008,7 +1008,7 @@ bool8 sub_802DAA8(void) return TRUE; } else { - if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)) return FALSE; + if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id)) return FALSE; return TRUE; } } @@ -1028,7 +1028,7 @@ _0802DAE8: { mailType = mail->mailType; if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) || - ((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->dungeon.id)))) goto _0802DAE8; + ((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->unk4.dungeon.id)))) goto _0802DAE8; } return FALSE; } diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 38c300871..5a31ed538 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -347,7 +347,7 @@ void sub_802F088(void) temp = sub_803B344(gUnknown_203B30C->unk4); sub_803B35C(&temp->mail, &gUnknown_203B30C->unk8); gUnknown_203B30C->unk8.unk0[0] = 3; - gUnknown_203B30C->unk8.unk44 = 0; + gUnknown_203B30C->unk8.mailStatus = MAIL_STATUS_SUSPENDED; gUnknown_203B30C->unk8.unk50[0] = temp->unk18; sub_802DE84(&gUnknown_203B30C->unk8); } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index d884485fd..85a8dda30 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -265,17 +265,17 @@ void sub_803092C(void) mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + index]); local.unk0[0] = gUnknown_203B320->unk58; local.y = sub_8013800(&gUnknown_203B320->input,index); - local.unk40 = 7; - local.unk42 = 0; - local.unk44 = 0; + local.mailTitleType = 7; + local.mailMissionType = MISSION_TYPE_FRIEND_RESCUE; + local.mailStatus = MAIL_STATUS_SUSPENDED; - local.dungeon = &mail->dungeon; + local.unk8 = &mail->unk4; local.playerName = mail->playerName; local.clientSpecies = mail->clientSpecies; local.targetSpecies = mail->clientSpecies; local.targetItem = ITEM_NOTHING; - local.unk2E = 5; + local.rewardType = 5; switch(mail->mailType) { diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index 75b18f059..79dd8696b 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -117,33 +117,33 @@ void sub_8030E48(void) mail = &gUnknown_203B480[gUnknown_203B324->mailIndex]; sub_80073B8(gUnknown_203B324->unk10); stack.unk0[0] = gUnknown_203B324->unk10; - stack.unk40 = 7; - stack.unk42 = 0; - stack.unk44 = 0; - stack.dungeon = &mail->dungeon; + stack.mailTitleType = 7; + stack.mailMissionType = MISSION_TYPE_FRIEND_RESCUE; + stack.mailStatus = MAIL_STATUS_SUSPENDED; + stack.unk8 = &mail->unk4; stack.playerName = mail->playerName; stack.clientSpecies = mail->clientSpecies; stack.targetSpecies = mail->clientSpecies; stack.targetItem = ITEM_NOTHING; if (mail->item.id == ITEM_NOTHING) { - stack.unk2E = 5; + stack.rewardType = 5; } else { - stack.unk2E = 2; - stack.unk34 = mail->item.id; + stack.rewardType = 2; + stack.rewardItem = mail->item.id; } switch(mail->mailType) { case 2: case WONDER_MAIL_TYPE_AOK: - stack.unk41 = 10; + stack.mailDescriptionType = 10; break; case 5: - stack.unk41 = 11; + stack.mailDescriptionType = 11; break; case WONDER_MAIL_TYPE_NONE: default: - stack.unk41 = 9; + stack.mailDescriptionType = 9; break; } CreateRescueDescription(&stack); diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index 60c10bd84..e5f3e73d5 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -14,11 +14,7 @@ struct unkStruct_203B2FC // size: 0xA8 /* 0x0 */ u32 state; /* 0x4 */ u32 fallbackState; - u32 unk8; - s16 unkC; - s16 unkE; - u8 unk10; - u8 fill11[0x30 - 0x11]; + struct unkStruct_802F204 unk8; u8 jobSlotIndex; struct WonderMail *jobInfo; struct OpenedFile *faceFile; @@ -38,7 +34,7 @@ struct unkStruct_203B300 { // size: 0x7C struct MenuInputStructSub unk0; - struct unkStruct_802C39C *unkC; + struct unkStruct_802C39C *mail; u32 unk10; struct UnkTextStruct2 *unk14; struct UnkTextStruct2 unk18[4]; @@ -109,13 +105,13 @@ extern void sub_802DC28(u32); extern void sub_802F2C0(void); extern void sub_802DC28(u32); extern u32 sub_802F298(void); -extern void sub_802F204(u32 *, u32); +extern void sub_802F204(struct unkStruct_802F204*, u32); extern void sub_802DC40(void); extern void sub_802DC9C(void); struct WonderMail *GetJobSlotInfo(u8); extern void sub_8096AF8(u8 *, u32, u32); extern void sub_8096EEC(void); -extern void sub_803C21C(struct WonderMail *, u32 *); +extern void sub_803C21C(struct WonderMail *, struct unkStruct_802F204*); extern u32 sub_802C598(s32); extern void sub_802C688(void); extern void sub_8096C80(void); @@ -306,12 +302,12 @@ void sub_802DE60(void) } } -u32 sub_802DE84(struct unkStruct_802C39C *r0) +u32 sub_802DE84(struct unkStruct_802C39C *mail) { gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8); - gUnknown_203B300->unkC = r0; + gUnknown_203B300->mail = mail; sub_801317C(&gUnknown_203B300->unk0); - gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0]; + gUnknown_203B300->unk10 = gUnknown_203B300->mail->unk0[0]; gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10]; sub_8006518(gUnknown_203B300->unk18); gUnknown_203B300->unk18[gUnknown_203B300->unk10] = gUnknown_80E0264; @@ -361,6 +357,6 @@ void sub_802DF6C(void) void sub_802DF88(void) { sub_80073B8(gUnknown_203B300->unk10); - CreateRescueDescription(gUnknown_203B300->unkC); + CreateRescueDescription(gUnknown_203B300->mail); sub_80073E0(gUnknown_203B300->unk10); } From f3527fe8de3d325cec0515af37b50b593000bc53 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 14 Aug 2023 11:23:28 -0700 Subject: [PATCH 09/14] code cleanup --- src/code_8094F88.c | 32 +++++++++++++------------------- src/other_menus.c | 9 ++++----- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/code_8094F88.c b/src/code_8094F88.c index e1747577a..e4678aafe 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -66,7 +66,7 @@ void sub_8095118(void) struct unkStruct_203B480 *unused; MemoryFill8((u8*)gUnknown_203B480,0, 0x20 * sizeof(struct unkStruct_203B480)); - MemoryFill8((u8*)gUnknown_203B484,0, 0x5c); + MemoryFill8((u8*)gUnknown_203B484,0, sizeof(struct unkStruct_203B484)); for(index = 0; index < 0x20; index++){ // NOTE: we use a temp variable here to force the match @@ -124,12 +124,6 @@ bool8 sub_80951BC(struct unkStruct_203B480 *mail) } } -struct unkStruct_809542C -{ - struct DungeonLocation unk0; - u32 unk4; -}; - bool8 sub_80951FC(struct unkStruct_203B480 *param_1) { bool8 bVar1 = gUnknown_203B480[1].mailType != 0; @@ -281,9 +275,9 @@ s32 sub_8095400(u32 param_1) return -1; } -void sub_809542C(struct unkStruct_809542C *param_1) +void sub_809542C(struct WonderMailSub *param_1) { - u32 uVar4; + u32 seed; #ifndef NONMATCHING register struct unkStruct_203B480 *preload asm("r2"); @@ -295,9 +289,9 @@ void sub_809542C(struct unkStruct_809542C *param_1) gUnknown_203B480->mailType = 1; preload = gUnknown_203B480; - uVar4 = param_1->unk4; - preload->unk4.dungeon = param_1->unk0; - preload->unk4.seed = uVar4; + seed = param_1->seed; + preload->unk4.dungeon = param_1->dungeon; + preload->unk4.seed = seed; sub_8094D28(Rand32Bit()); gUnknown_203B480->unk10.unk10 = sub_8094E4C(); gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum; @@ -307,19 +301,19 @@ void sub_809542C(struct unkStruct_809542C *param_1) gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->unk4.dungeon.id); } -void sub_8095494(struct unkStruct_809542C *param_1, u8 index) +void sub_8095494(struct WonderMailSub *param_1, u8 index) { - u32 uVar1; - struct DungeonLocation temp; + u32 seed; + struct DungeonLocation dungeon; struct unkStruct_203B480 *mail; mail = gUnknown_203B480; mail += index; - temp = mail->unk4.dungeon; - uVar1 = mail->unk4.seed; - param_1->unk0 = temp; - param_1->unk4 = uVar1; + dungeon = mail->unk4.dungeon; + seed = mail->unk4.seed; + param_1->dungeon = dungeon; + param_1->seed = seed; } u32 sub_80954B4(void) diff --git a/src/other_menus.c b/src/other_menus.c index 70621e277..9dba09ec4 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -34,9 +34,8 @@ struct unkStruct_203B35C struct PokemonStruct unk2BC; struct unkStruct_203B480 unk314; struct PokemonStruct unk344; - s32 unk39C; - u8 fill3A0[0x450 - 0x3A0]; - s32 unk450; + u8 unk39C[0xB4]; + u8 unk450[0xB4]; }; EWRAM_DATA_2 struct unkStruct_203B35C *gUnknown_203B35C = {0}; @@ -470,8 +469,8 @@ void sub_8036FDC(s32 param_1) sub_800641C(0,1,1); ResetSprites(FALSE); if (gUnknown_203B35C == NULL) { - gUnknown_203B35C = MemoryAlloc(0x504,8); - MemoryFill8((u8 *)gUnknown_203B35C,0,0x504); + gUnknown_203B35C = MemoryAlloc(sizeof(struct unkStruct_203B35C),8); + MemoryFill8((u8 *)gUnknown_203B35C,0,sizeof(struct unkStruct_203B35C)); } gUnknown_203B35C->unk0 = param_1; From 4c60221b549f336844a902de60b832845a4086e2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 19 Aug 2023 14:16:00 -0700 Subject: [PATCH 10/14] dump some more data and cleanup --- data/data_80F5668.s | 84 +++++++++++++++++++++++++++++++-- data/data_8115EB8.s | 3 +- include/code_802C39C.h | 3 +- include/constants/wonder_mail.h | 18 +++++++ src/code_803B050.c | 20 ++++---- src/code_8057824.c | 2 +- src/code_805A120.c | 4 +- src/move_util.c | 13 ++++- src/status_actions.c | 2 +- src/wonder_mail_3.c | 2 +- src/wonder_mail_3_mid.c | 2 +- 11 files changed, 130 insertions(+), 23 deletions(-) diff --git a/data/data_80F5668.s b/data/data_80F5668.s index 93eb7dec5..a85480954 100644 --- a/data/data_80F5668.s +++ b/data/data_80F5668.s @@ -2,7 +2,7 @@ .global gDungeonMusic gDungeonMusic: @ 80F5668 - .incbin "baserom.gba", 0xF5668, 0x98 + .2byte 0x72, 0x7d, 0x0e, 0x78, 0x0f, 0x71, 0x6f, 0x14, 0x66, 0x19, 0x68, 0x73, 0x6c, 0x16, 0x7d, 0x7d, 0x7d, 0x7d, 0x0d, 0x15, 0x0f, 0x7e, 0x21, 0x27, 0x7b, 0x7c, 0x17, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x1a, 0x6e, 0x6e, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x1a, 0x7f, 0x23, 0x23, 0x23, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d .global gUnknown_80F5700 gUnknown_80F5700: @ 80F5700 @@ -41,6 +41,82 @@ gUnknown_80F57D4: @ 80F57D4 gUnknown_80F58F4: @ 80F58F4 .incbin "baserom.gba", 0xF58F4, 0x84 - .global gUnknown_80F5978 -gUnknown_80F5978: @ 80F5978 - .incbin "baserom.gba", 0xF5978, 0x4C + .global gSecretPowerTable +gSecretPowerTable: @ 80F5978 + .byte 0x03 + .byte 0x00 + .byte 0x06 + .byte 0x07 + .byte 0x07 + .byte 0x06 + .byte 0x06 + .byte 0x07 + .byte 0x08 + .byte 0x06 + .byte 0x00 + .byte 0x05 + .byte 0x08 + .byte 0x08 + .byte 0x00 + .byte 0x08 + .byte 0x08 + .byte 0x07 + .byte 0x07 + .byte 0x07 + .byte 0x00 + .byte 0x05 + .byte 0x06 + .byte 0x08 + .byte 0x06 + .byte 0x00 + .byte 0x00 + .byte 0x08 + .byte 0x06 + .byte 0x01 + .byte 0x07 + .byte 0x07 + .byte 0x01 + .byte 0x01 + .byte 0x06 + .byte 0x08 + .byte 0x08 + .byte 0x07 + .byte 0x06 + .byte 0x06 + .byte 0x06 + .byte 0x00 + .byte 0x06 + .byte 0x06 + .byte 0x05 + .byte 0x08 + .byte 0x06 + .byte 0x06 + .byte 0x06 + .byte 0x03 + .byte 0x00 + .byte 0x00 + .byte 0x05 + .byte 0x02 + .byte 0x07 + .byte 0x06 + .byte 0x00 + .byte 0x08 + .byte 0x08 + .byte 0x06 + .byte 0x00 + .byte 0x07 + .byte 0x00 + .byte 0x00 + .byte 0x06 + .byte 0x01 + .byte 0x06 + .byte 0x06 + .byte 0x08 + .byte 0x08 + .byte 0x06 + .byte 0x08 + .byte 0x08 + .byte 0x03 + .byte 0x03 + .byte 0x06 + diff --git a/data/data_8115EB8.s b/data/data_8115EB8.s index cccdae6f7..791fcad46 100644 --- a/data/data_8115EB8.s +++ b/data/data_8115EB8.s @@ -2,5 +2,6 @@ .global gUnknown_8115EB8 gUnknown_8115EB8: @ 8115EB8 - .incbin "baserom.gba", 0x115EB8, 0xA4 + .string "pksdir0" + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/include/code_802C39C.h b/include/code_802C39C.h index 5f1971bc3..30e3df042 100644 --- a/include/code_802C39C.h +++ b/include/code_802C39C.h @@ -19,5 +19,6 @@ struct unkStruct_802C39C u8 mailStatus; // mail status (suspend / take job / done) /* 0x48 */ u32 y; /* 0x4C */ u8 *unk4C; - /* 0x50 */ u8 *unk50[2]; + u8 *unk50; + /* 0x54 */ struct WonderMail *mail; }; diff --git a/include/constants/wonder_mail.h b/include/constants/wonder_mail.h index ed5d50b3c..39416ca8d 100644 --- a/include/constants/wonder_mail.h +++ b/include/constants/wonder_mail.h @@ -37,6 +37,24 @@ enum WonderMailTypes { WONDER_MAIL_TYPE_OKD = 7, }; +// Used in CreateRescueTitle and CreateRescueDescription +enum MailStatuses { + MAIL_STATUS_SUSPENDED, + MAIL_STATUS_TAKE_JOB, + MAIL_STATUS_DONE +}; + +// Used in CreateRescueTitle and CreateRescueDescription +enum MissionTypes { + MISSION_TYPE_FRIEND_RESCUE, + MISSION_TYPE_FIND_ITEM, + MISSION_TYPE_DELIVER_ITEM, + MISSION_TYPE_RESCUE_CLIENT, + MISSION_TYPE_RESCUE_TARGET, + MISSION_TYPE_ESCORT_CLIENT, + MISSION_TYPE_SPECIAL_MISSION +}; + enum WonderMailMissionTypes { WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT = 0, diff --git a/src/code_803B050.c b/src/code_803B050.c index 88cd259e2..080689574 100644 --- a/src/code_803B050.c +++ b/src/code_803B050.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/colors.h" #include "constants/wonder_mail.h" #include "pokemon.h" #include "pokemon_3.h" @@ -10,6 +11,7 @@ #include "text2.h" #include "code_800D090.h" #include "menu_input.h" +#include "wonder_mail.h" struct unkStruct_80E9920 { @@ -89,7 +91,7 @@ extern void PrintDungeonLocationtoBuffer(u8 *, void *); extern void PrintYellowDungeonNametoBuffer(u8 *, void *); extern u8 sub_803C1D0(struct WonderMailSub *, u8); extern u8 *sub_803C1F0(u8); -void sub_803D414(u8 *, u8 *); +void sub_803D414(u8 *, struct WonderMail *); void sub_803B6B0(s32 x, s32 y, u8 index, u32 param_4) { @@ -190,7 +192,7 @@ void CreateRescueTitle(struct unkStruct_802C39C *param_1) uVar1 = sub_803C1D0(param_1->unk8,0); } else { - uVar1 = sub_803C1D0(param_1->unk8,param_1->unk50[1][1]); + uVar1 = sub_803C1D0(param_1->unk8,param_1->mail->missionType); } xxx_call_draw_string(0xb4,param_1->y,sub_803C1F0(uVar1),param_1->unk0[0],0); } @@ -217,7 +219,7 @@ void CreateRescueDescription(struct unkStruct_802C39C *param_1) y += 0x10; switch(param_1->mailDescriptionType) { case 3: - xxx_call_draw_string(10,y,param_1->unk50[0],param_1->unk0[0],0); + xxx_call_draw_string(10,y,param_1->unk50,param_1->unk0[0],0); break; case 0: xxx_call_draw_string(10,y,gMankeyMissionDescription,param_1->unk0[0],0); @@ -386,7 +388,7 @@ void CreateRescueDescription(struct unkStruct_802C39C *param_1) uVar3 = sub_803C1D0(param_1->unk8, 0); } else { - uVar3 = sub_803C1D0(param_1->unk8,param_1->unk50[1][1]); + uVar3 = sub_803C1D0(param_1->unk8,param_1->mail->missionType); } y += 0xC; @@ -420,23 +422,23 @@ void CreateRescueDescription(struct unkStruct_802C39C *param_1) // Draw the Password y += 0xC; - if (((2 < (u8)(param_1->mailDescriptionType - 9)) && (param_1->mailDescriptionType != 3)) && (*param_1->unk50[1] == 5)) + if (((2 < (u8)(param_1->mailDescriptionType - 9)) && (param_1->mailDescriptionType != 3)) && (param_1->mail->mailType == 5)) { xxx_call_draw_string(10,y,gUnknown_80E8B7C,param_1->unk0[0],0); // Wonder Mail: - sub_803D414(local_34,param_1->unk50[1]); + sub_803D414(local_34,param_1->mail); for(counter = 0; counter < 24; counter++) { if (counter == 12) { y += 12; } - color = 7; - if (((3 < counter) && (color = 6, 7 < counter)) && ((color = 7))) + color = COLOR_WHITE_2; + if (((3 < counter) && (color = COLOR_YELLOW, 7 < counter)) && ((color = COLOR_WHITE_2))) { if(counter > 15) { if(counter < 20) { - color = 6; + color = COLOR_YELLOW; } } diff --git a/src/code_8057824.c b/src/code_8057824.c index 99971bde4..26a94fa35 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -22,7 +22,7 @@ typedef bool8 (*MoveCallback)(struct Entity *pokemon, struct Entity *target, struct Move *move, s32 param_4); struct NaturePowerMove { - s16 moveID; + u16 moveID; u16 unk2; MoveCallback move; }; diff --git a/src/code_805A120.c b/src/code_805A120.c index d1f8fbb9d..9a0090747 100644 --- a/src/code_805A120.c +++ b/src/code_805A120.c @@ -51,7 +51,7 @@ extern s16 gUnknown_80F4E00; extern u8 *gUnknown_80FD128[]; extern u8 *gUnknown_80FAD2C[]; extern u32 gUnknown_80F4F64; -extern u8 gUnknown_80F5978[]; +extern u8 gSecretPowerTable[]; extern s16 gUnknown_80F4E74; extern s16 gUnknown_80F4E06; extern s16 gUnknown_80F4E94[]; @@ -1271,7 +1271,7 @@ bool8 SecretPowerMoveAction(struct Entity * pokemon, struct Entity * target, str if ( sub_8055640(pokemon, target, move, 0x100, param_4) != 0) { flag = TRUE; if (sub_805727C(pokemon,target,gUnknown_80F4E06) != 0) { - switch(gUnknown_80F5978[gDungeon->tileset]) { + switch(gSecretPowerTable[gDungeon->tileset]) { case 0: PoisonedStatusTarget(pokemon,target,FALSE); break; diff --git a/src/move_util.c b/src/move_util.c index 635257fb4..6553672ae 100644 --- a/src/move_util.c +++ b/src/move_util.c @@ -13,7 +13,16 @@ extern bool8 sub_8044B28(void); extern void sub_80429C8(struct Entity *r0); -extern u16 gNaturePowerMoveTable[]; + +typedef bool8 (*MoveCallback)(struct Entity *pokemon, struct Entity *target, struct Move *move, s32 param_4); +struct NaturePowerMove +{ + u16 moveID; + u16 unk2; + MoveCallback move; +}; + +extern struct NaturePowerMove gNaturePowerMoveTable[76]; bool8 sub_805755C(struct Entity* pokemon,u16 param_2); u32 sub_8057144(struct Entity * pokemon) @@ -104,7 +113,7 @@ bool8 sub_80571F0(struct Entity * pokemon, struct Move *move) if (0x4a < tileset) { tileset = 0x4a; } - if (gNaturePowerMoveTable[tileset << 2] == MOVE_EARTHQUAKE) return FALSE; + if (gNaturePowerMoveTable[tileset].moveID == MOVE_EARTHQUAKE) return FALSE; } } return TRUE; diff --git a/src/status_actions.c b/src/status_actions.c index 28b5c24f7..56e030059 100644 --- a/src/status_actions.c +++ b/src/status_actions.c @@ -158,7 +158,7 @@ typedef bool8 (*MoveCallback)(struct Entity *pokemon, struct Entity *target, str struct NaturePowerMove { - s16 moveID; + u16 moveID; u16 unk2; MoveCallback move; }; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index ae1e0389a..d4098bbcf 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -731,7 +731,7 @@ void sub_802D2A8(void) sub_803B35C(&gUnknown_203B2F8->mail->wonderMail,&gUnknown_203B2F8->unk14); gUnknown_203B2F8->unk14.unk0[0] = 3; gUnknown_203B2F8->unk14.mailStatus = MAIL_STATUS_SUSPENDED; - gUnknown_203B2F8->unk14.unk50[0] = gUnknown_203B2F8->mail->unk18; + gUnknown_203B2F8->unk14.unk50 = gUnknown_203B2F8->mail->unk18; sub_802DE84(&gUnknown_203B2F8->unk14); break; } diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index 5a31ed538..27f6eaf0a 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -348,7 +348,7 @@ void sub_802F088(void) sub_803B35C(&temp->mail, &gUnknown_203B30C->unk8); gUnknown_203B30C->unk8.unk0[0] = 3; gUnknown_203B30C->unk8.mailStatus = MAIL_STATUS_SUSPENDED; - gUnknown_203B30C->unk8.unk50[0] = temp->unk18; + gUnknown_203B30C->unk8.unk50 = temp->unk18; sub_802DE84(&gUnknown_203B30C->unk8); } } From 817e0c3984f031f326cf875acf00ce8ce1c56ad7 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 20 Aug 2023 13:41:04 -0700 Subject: [PATCH 11/14] finish off another file --- asm/code_801D760.s | 185 -- asm/code_80428A0.s | 2 +- asm/code_805D8C8.s | 2912 ------------------------------- asm/code_805D8C8_1.s | 2696 ++++++++++++++++++++++++++++ include/code_8077274_1.h | 2 +- include/constants/wonder_mail.h | 11 - include/dungeon_entity.h | 2 +- include/dungeon_global_data.h | 12 +- ld_script.txt | 3 +- src/code_801D760.c | 122 ++ src/code_8057824.c | 18 +- src/code_805D8C8.c | 139 ++ src/code_806CD90.c | 3 +- src/code_8077274_1.c | 15 +- src/status_actions.c | 2 +- 15 files changed, 2990 insertions(+), 3134 deletions(-) delete mode 100644 asm/code_801D760.s create mode 100644 asm/code_805D8C8_1.s create mode 100644 src/code_805D8C8.c diff --git a/asm/code_801D760.s b/asm/code_801D760.s deleted file mode 100644 index 1bcd5ba57..000000000 --- a/asm/code_801D760.s +++ /dev/null @@ -1,185 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_801DB54 -sub_801DB54: - push {r4,lr} - ldr r4, _0801DBD0 - ldr r0, [r4] - adds r0, 0x9C - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0x9D - strb r2, [r0] - ldr r0, [r4] - adds r0, 0x9E - movs r1, 0x8 - strb r1, [r0] - ldr r0, [r4] - adds r0, 0x9F - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x3C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - movs r1, 0x1A - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - lsls r0, 16 - ldr r2, [r4] - ldr r3, [r2, 0x34] - lsls r1, r3, 1 - adds r1, r3 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x4A - asrs r3, r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r1, [r2, 0x34] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, r0 - adds r3, 0x2 - adds r2, 0x4C - strh r3, [r2] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x3C - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801DBD0: .4byte gUnknown_203B258 - thumb_func_end sub_801DB54 - - thumb_func_start sub_801DBD4 -sub_801DBD4: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - ldr r5, _0801DCB4 - ldr r0, [r5] - ldr r0, [r0, 0x34] - bl sub_8008C54 - ldr r0, [r5] - ldr r0, [r0, 0x34] - bl sub_80073B8 - ldr r2, _0801DCB8 - ldr r0, [r5] - ldr r3, [r0, 0x34] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x9E - ldrb r4, [r0] - lsls r4, 3 - subs r4, 0x2 - movs r0, 0x1E - ldrsh r2, [r1, r0] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x34] - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r6, 0 - ldr r0, [r5] - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r6, r0 - bge _0801DC9C - adds r7, r5, 0 - mov r8, r6 -_0801DC34: - ldr r0, [r7] - ldrh r2, [r0, 0x1E] - ldrh r1, [r0, 0x1C] - adds r3, r2, 0 - muls r3, r1 - adds r1, r3, 0 - adds r1, r6 - lsls r1, 16 - asrs r1, 16 - lsls r5, r1, 1 - adds r5, r1 - lsls r5, 2 - ldr r1, _0801DCBC - adds r5, r1 - movs r2, 0x4 - ldrsh r1, [r5, r2] - lsls r4, r1, 3 - subs r4, r1 - lsls r4, 2 - ldr r1, _0801DCC0 - adds r4, r1 - adds r1, r6, 0 - bl sub_8013800 - adds r1, r0, 0 - ldr r2, [r4] - ldr r0, [r7] - ldr r3, [r0, 0x34] - mov r0, r8 - str r0, [sp] - movs r0, 0x8 - bl xxx_call_draw_string - ldr r0, [r7] - adds r1, r6, 0 - bl sub_8013800 - adds r1, r0, 0 - ldr r2, [r5, 0x8] - ldr r0, [r7] - ldr r3, [r0, 0x34] - mov r0, r8 - str r0, [sp] - movs r0, 0x3E - bl xxx_call_draw_string - adds r6, 0x1 - ldr r0, [r7] - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r6, r0 - blt _0801DC34 -_0801DC9C: - ldr r0, _0801DCB4 - ldr r0, [r0] - ldr r0, [r0, 0x34] - bl sub_80073E0 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0801DCB4: .4byte gUnknown_203B258 -_0801DCB8: .4byte gUnknown_80DBFA0 -_0801DCBC: .4byte gUnknown_811BAF4 -_0801DCC0: .4byte gUnknown_81188F0 - thumb_func_end sub_801DBD4 - - - .align 2,0 diff --git a/asm/code_80428A0.s b/asm/code_80428A0.s index 0a78dde9c..4ec03d1f6 100644 --- a/asm/code_80428A0.s +++ b/asm/code_80428A0.s @@ -1665,7 +1665,7 @@ _080438AC: adds r2, r4, 0 bl sub_8083AB0 _08043926: - bl sub_80688CC + bl CloseAllSpriteFiles bl sub_8049820 ldr r0, _08043994 ldr r0, [r0] diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index 9ccda1981..82ea0d12e 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -21648,2916 +21648,4 @@ _08068760: .4byte 0x00003a14 _08068764: .4byte 0x00008f88 thumb_func_end sub_8068658 - thumb_func_start sub_8068768 -sub_8068768: - push {r4,r5,lr} - movs r5, 0 -_0806876C: - ldr r0, _080687A4 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _080687A8 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - cmp r4, 0 - beq _08068796 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08068796 - ldr r0, [r4, 0x70] - movs r1, 0x4 - ldrsh r0, [r0, r1] - movs r1, 0 - bl sub_8068838 -_08068796: - adds r5, 0x1 - cmp r5, 0x13 - ble _0806876C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080687A4: .4byte gDungeon -_080687A8: .4byte 0x000135cc - thumb_func_end sub_8068768 - - thumb_func_start sub_80687AC -sub_80687AC: - ldr r0, _080687C4 - ldr r1, [r0] - ldr r0, _080687C8 - adds r2, r1, r0 - movs r0, 0x80 - lsls r0, 3 - str r0, [r2] - ldr r0, _080687CC - adds r1, r0 - movs r0, 0xA - str r0, [r1] - bx lr - .align 2, 0 -_080687C4: .4byte gDungeon -_080687C8: .4byte 0x000037f0 -_080687CC: .4byte 0x000037f4 - thumb_func_end sub_80687AC - - thumb_func_start sub_80687D0 -sub_80687D0: - lsls r0, 16 - ldr r1, _080687E4 - ldr r1, [r1] - asrs r0, 14 - ldr r2, _080687E8 - adds r1, r2 - adds r1, r0 - ldr r0, [r1] - bx lr - .align 2, 0 -_080687E4: .4byte gDungeon -_080687E8: .4byte 0x00017b44 - thumb_func_end sub_80687D0 - - thumb_func_start sub_80687EC -sub_80687EC: - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 16 - asrs r2, r0, 16 - ldr r5, _08068828 - ldr r0, [r5] - lsls r4, r2, 2 - ldr r1, _0806882C - adds r0, r1 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - bne _08068820 - ldr r1, _08068830 - mov r0, sp - bl sprintf - ldr r1, _08068834 - mov r0, sp - bl OpenFileAndGetFileDataPtr - ldr r1, [r5] - ldr r2, _0806882C - adds r1, r2 - adds r1, r4 - str r0, [r1] -_08068820: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08068828: .4byte gDungeon -_0806882C: .4byte 0x00017b44 -_08068830: .4byte gUnknown_8106EA0 -_08068834: .4byte gMonsterFileArchive - thumb_func_end sub_80687EC - - thumb_func_start sub_8068838 -sub_8068838: - push {r4,lr} - lsls r0, 16 - asrs r4, r0, 16 - lsls r1, 24 - cmp r1, 0 - bne _08068864 - movs r0, 0xCF - lsls r0, 1 - cmp r4, r0 - beq _0806885E - adds r0, 0x3 - cmp r4, r0 - beq _0806885E - adds r0, 0x1 - cmp r4, r0 - beq _0806885E - adds r0, 0x1 - cmp r4, r0 - bne _08068864 -_0806885E: - bl sub_80688B0 - b _0806887A -_08068864: - adds r0, r4, 0 - bl sub_80687EC - ldr r1, _08068880 - adds r0, r4, r1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3 - bhi _0806887A - bl sub_8068884 -_0806887A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08068880: .4byte 0xfffffe88 - thumb_func_end sub_8068838 - - thumb_func_start sub_8068884 -sub_8068884: - push {lr} - movs r0, 0xBC - lsls r0, 1 - bl sub_80687EC - ldr r0, _080688A8 - bl sub_80687EC - movs r0, 0xBD - lsls r0, 1 - bl sub_80687EC - ldr r0, _080688AC - bl sub_80687EC - pop {r0} - bx r0 - .align 2, 0 -_080688A8: .4byte 0x00000179 -_080688AC: .4byte 0x0000017b - thumb_func_end sub_8068884 - - thumb_func_start sub_80688B0 -sub_80688B0: - push {lr} - ldr r0, _080688C8 - ldr r0, [r0] - movs r1, 0xE0 - lsls r1, 6 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - bl sub_80687EC - pop {r0} - bx r0 - .align 2, 0 -_080688C8: .4byte gDungeon - thumb_func_end sub_80688B0 - - thumb_func_start sub_80688CC -sub_80688CC: - push {r4-r6,lr} - movs r5, 0 - ldr r6, _08068900 -_080688D2: - ldr r0, [r6] - lsls r4, r5, 2 - ldr r1, _08068904 - adds r0, r1 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080688F2 - bl CloseFile - ldr r0, [r6] - ldr r1, _08068904 - adds r0, r1 - adds r0, r4 - movs r1, 0 - str r1, [r0] -_080688F2: - adds r5, 0x1 - ldr r0, _08068908 - cmp r5, r0 - ble _080688D2 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08068900: .4byte gDungeon -_08068904: .4byte 0x00017b44 -_08068908: .4byte 0x000001a7 - thumb_func_end sub_80688CC - - thumb_func_start sub_806890C -sub_806890C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x64 - movs r0, 0 - mov r8, r0 - mov r10, r0 - ldr r6, _08068A60 - add r5, sp, 0x8 -_08068922: - movs r0, 0x58 - mov r1, r10 - muls r1, r0 - adds r0, r1, 0 - ldr r2, [r6] - adds r7, r2, r0 - ldrh r1, [r7] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068A1C - lsrs r0, r1, 1 - movs r3, 0x1 - ands r0, r3 - cmp r0, 0 - beq _08068A1C - movs r0, 0x64 - mov r4, r8 - muls r4, r0 - ldr r0, _08068A64 - adds r0, r4 - mov r9, r0 - adds r0, r2, r0 - mov r1, r10 - bl xxx_pokemonstruct_index_to_pokemon2_808DE30 - ldr r0, _08068A68 - ldr r0, [r0] - ldr r1, _08068A6C - adds r0, r1 - ldrb r0, [r0] - bl IsLevelResetTo1 - lsls r0, 24 - cmp r0, 0 - beq _08068A06 - movs r0, 0x80 - lsls r0, 1 - str r0, [sp, 0x60] - movs r2, 0x8 - ldrsh r1, [r7, r2] - add r0, sp, 0x60 - str r0, [sp] - movs r3, 0 - str r3, [sp, 0x4] - add r0, sp, 0x8 - movs r2, 0 - bl sub_808CFD0 - ldr r0, [r6] - adds r0, r4 - ldrb r1, [r5, 0x3] - ldr r2, _08068A70 - adds r0, r2 - strb r1, [r0] - ldr r1, [r6] - adds r1, r4 - ldrh r2, [r5, 0x14] - movs r3, 0x8E - lsls r3, 8 - adds r0, r1, r3 - strh r2, [r0] - ldrh r2, [r5, 0x16] - adds r3, 0x8 - adds r0, r1, r3 - strh r2, [r0] - ldrh r2, [r5, 0x16] - adds r3, 0x2 - adds r0, r1, r3 - strh r2, [r0] - ldrb r0, [r5, 0x18] - ldr r2, _08068A74 - adds r1, r2 - strb r0, [r1] - ldr r0, [r6] - adds r0, r4 - ldrb r1, [r5, 0x19] - adds r3, 0x3 - adds r0, r3 - strb r1, [r0] - ldr r0, [r6] - adds r0, r4 - ldrb r1, [r5, 0x1A] - adds r2, 0x2 - adds r0, r2 - strb r1, [r0] - ldr r0, [r6] - adds r0, r4 - ldrb r1, [r5, 0x1B] - adds r3, 0x2 - adds r0, r3 - strb r1, [r0] - ldr r2, [r6] - ldr r1, _08068A78 - adds r0, r2, r1 - adds r0, r4 - ldr r1, [sp, 0x24] - str r1, [r0] - adds r2, r4 - adds r3, 0x35 - adds r1, r2, r3 - ldr r0, [sp, 0x28] - str r0, [r1] - add r0, sp, 0x2C - ldrb r0, [r0] - ldr r1, _08068A7C - adds r2, r1 - strb r0, [r2] - ldr r0, [r6] - add r0, r9 - adds r0, 0x1C - add r1, sp, 0x34 - bl CopyAndResetMoves -_08068A06: - ldr r0, [r6] - adds r0, r4 - ldr r2, _08068A80 - adds r0, r2 - mov r3, r8 - strh r3, [r0] - movs r0, 0x1 - add r8, r0 - mov r1, r8 - cmp r1, 0x4 - beq _08068A2A -_08068A1C: - movs r2, 0x1 - add r10, r2 - movs r0, 0xCE - lsls r0, 1 - cmp r10, r0 - bgt _08068A2A - b _08068922 -_08068A2A: - mov r3, r8 - cmp r3, 0x3 - bgt _08068A50 - ldr r4, _08068A60 - ldr r3, _08068A64 - movs r2, 0 - movs r0, 0x64 - mov r1, r8 - muls r1, r0 -_08068A3C: - ldr r0, [r4] - adds r0, r1 - adds r0, r3 - strh r2, [r0] - adds r1, 0x64 - movs r0, 0x1 - add r8, r0 - mov r0, r8 - cmp r0, 0x3 - ble _08068A3C -_08068A50: - add sp, 0x64 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08068A60: .4byte gRecruitedPokemonRef -_08068A64: .4byte 0x00008df8 -_08068A68: .4byte gDungeon -_08068A6C: .4byte 0x00000644 -_08068A70: .4byte 0x00008dfb -_08068A74: .4byte 0x00008e0c -_08068A78: .4byte 0x00008e10 -_08068A7C: .4byte 0x00008e48 -_08068A80: .4byte 0x00008e04 - thumb_func_end sub_806890C - - thumb_func_start sub_8068A84 -sub_8068A84: - push {r4-r7,lr} - adds r6, r0, 0 - movs r4, 0 - movs r5, 0 - ldr r7, _08068AE0 -_08068A8E: - movs r0, 0x64 - muls r0, r5 - ldr r1, _08068AE4 - adds r0, r1 - ldr r1, [r7] - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068AB2 - movs r1, 0xE - ldrsh r0, [r2, r1] - bl GetBodySize - lsls r0, 24 - lsrs r0, 24 - adds r4, r0 -_08068AB2: - adds r5, 0x1 - cmp r5, 0x3 - ble _08068A8E - movs r1, 0x8 - ldrsh r0, [r6, r1] - bl GetBodySize - lsls r0, 24 - lsrs r0, 24 - adds r4, r0 - cmp r4, 0x6 - ble _08068B04 - ldr r0, _08068AE8 - adds r1, r6, 0 - movs r2, 0 - bl PrintColoredPokeNameToBuffer - ldrb r0, [r6, 0x4] - cmp r0, 0x4A - bne _08068AF0 - ldr r0, _08068AEC - b _08068BB2 - .align 2, 0 -_08068AE0: .4byte gRecruitedPokemonRef -_08068AE4: .4byte 0x00008df8 -_08068AE8: .4byte gAvailablePokemonNames -_08068AEC: .4byte gUnknown_80FE0F4 -_08068AF0: - cmp r0, 0x47 - bne _08068AFC - ldr r0, _08068AF8 - b _08068BB2 - .align 2, 0 -_08068AF8: .4byte gUnknown_80FE0F8 -_08068AFC: - ldr r0, _08068B00 - b _08068BB2 - .align 2, 0 -_08068B00: .4byte gUnknown_80FE0AC -_08068B04: - movs r5, 0 - ldr r2, _08068B6C -_08068B08: - movs r0, 0x64 - muls r0, r5 - ldr r1, _08068B70 - adds r0, r1 - ldr r1, [r2] - adds r4, r1, r0 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08068B80 - adds r0, r4, 0 - adds r1, r6, 0 - ldr r2, _08068B74 - bl xxx_pokemonstruct_to_pokemon2_808DE50 - ldrh r0, [r4] - movs r1, 0x1 - movs r2, 0 - orrs r1, r0 - strh r1, [r4] - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x19 - bgt _08068B3E - movs r0, 0x1A - strh r0, [r4, 0x8] -_08068B3E: - ldrh r0, [r4] - movs r1, 0x2 - orrs r0, r1 - strh r0, [r4] - strh r5, [r4, 0xC] - adds r0, r4, 0 - adds r0, 0x40 - strb r2, [r0, 0x2] - strb r2, [r0, 0x1] - strb r2, [r0] - ldr r0, _08068B78 - adds r1, r6, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - ldrb r0, [r6, 0x4] - cmp r0, 0x4A - beq _08068BB0 - cmp r0, 0x47 - beq _08068BD0 - ldr r0, _08068B7C - b _08068BB2 - .align 2, 0 -_08068B6C: .4byte gRecruitedPokemonRef -_08068B70: .4byte 0x00008df8 -_08068B74: .4byte 0x000055aa -_08068B78: .4byte gAvailablePokemonNames -_08068B7C: .4byte gUnknown_80FE134 -_08068B80: - adds r5, 0x1 - cmp r5, 0x3 - ble _08068B08 - ldr r0, _08068B9C - adds r1, r6, 0 - movs r2, 0x6 - bl PrintColoredPokeNameToBuffer - ldrb r0, [r6, 0x4] - cmp r0, 0x4A - bne _08068BA4 - ldr r0, _08068BA0 - b _08068BB2 - .align 2, 0 -_08068B9C: .4byte gAvailablePokemonNames -_08068BA0: .4byte gUnknown_80FE0F4 -_08068BA4: - cmp r0, 0x47 - bne _08068BC4 - ldr r0, _08068BAC - b _08068BB2 - .align 2, 0 -_08068BAC: .4byte gUnknown_80FE0F8 -_08068BB0: - ldr r0, _08068BC0 -_08068BB2: - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - b _08068BD0 - .align 2, 0 -_08068BC0: .4byte gUnknown_80FE168 -_08068BC4: - ldr r0, _08068BD8 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage -_08068BD0: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08068BD8: .4byte gUnknown_80FE0AC - thumb_func_end sub_8068A84 - - thumb_func_start sub_8068BDC -sub_8068BDC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r4, _08068CC4 - add sp, r4 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x220] - movs r1, 0 - mov r0, sp - adds r0, 0x39 -_08068BF6: - strb r1, [r0] - subs r0, 0x1 - cmp r0, sp - bge _08068BF6 - movs r6, 0 - ldr r0, _08068CC8 - mov r8, r0 - movs r7, 0x1 -_08068C06: - movs r0, 0x64 - muls r0, r6 - ldr r1, _08068CCC - adds r0, r1 - mov r2, r8 - ldr r1, [r2] - adds r4, r1, r0 - ldrb r1, [r4] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _08068C50 - movs r3, 0xA - ldrsh r0, [r4, r3] - bl sub_806A564 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08068C50 - adds r4, 0x40 - ldrb r1, [r4] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _08068C50 - ldrb r0, [r4, 0x2] - cmp r0, 0x69 - bne _08068C50 - adds r0, r4, 0 - bl GetMoneyValue - bl AddToTeamMoney - strb r5, [r4, 0x2] - strb r5, [r4, 0x1] - strb r5, [r4] -_08068C50: - adds r6, 0x1 - cmp r6, 0x3 - ble _08068C06 - movs r6, 0 - movs r5, 0x1 -_08068C5A: - ldr r1, _08068CC8 - movs r0, 0x64 - muls r0, r6 - ldr r2, _08068CCC - adds r0, r2 - ldr r1, [r1] - adds r4, r1, r0 - ldrb r1, [r4] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _08068CFE - movs r3, 0xA - ldrsh r0, [r4, r3] - bl sub_806A564 - lsls r0, 24 - cmp r0, 0 - bne _08068CFE - ldr r1, _08068CD0 - adds r0, r1, 0 - ldrh r2, [r4, 0xE] - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bhi _08068C96 - movs r0, 0xBC - lsls r0, 1 - strh r0, [r4, 0xE] -_08068C96: - movs r3, 0xA - ldrsh r0, [r4, r3] - bl sub_806A58C - lsls r0, 24 - cmp r0, 0 - beq _08068CE8 - ldr r0, _08068CD4 - ldr r0, [r0] - ldr r1, _08068CD8 - adds r0, r1 - ldrb r0, [r0] - bl IsLevelResetTo1 - lsls r0, 24 - cmp r0, 0 - beq _08068CDC - movs r2, 0xA - ldrsh r0, [r4, r2] - adds r1, r4, 0 - bl sub_808DFDC - b _08068CFE - .align 2, 0 -_08068CC4: .4byte 0xfffffdd8 -_08068CC8: .4byte gRecruitedPokemonRef -_08068CCC: .4byte 0x00008df8 -_08068CD0: .4byte 0xfffffe87 -_08068CD4: .4byte gDungeon -_08068CD8: .4byte 0x00000644 -_08068CDC: - movs r3, 0xA - ldrsh r0, [r4, r3] - adds r1, r4, 0 - bl xxx_pokemon2_to_pokemonstruct_index_808DF2C - b _08068CFE -_08068CE8: - ldr r0, [sp, 0x220] - cmp r0, 0 - beq _08068CFE - movs r1, 0xE - ldrsh r0, [r4, r1] - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - add r0, sp - strb r5, [r0] -_08068CFE: - adds r6, 0x1 - cmp r6, 0x3 - ble _08068C5A - movs r1, 0 -_08068D06: - lsls r0, r1, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, sp - add r0, r8 - ldrb r0, [r0] - adds r1, 0x1 - str r1, [sp, 0x224] - cmp r0, 0 - bne _08068D1C - b _08068F08 -_08068D1C: - mov r0, r8 - add r1, sp, 0x1F0 - movs r2, 0x1 - movs r3, 0x1 - bl sub_8092404 - mov r0, r8 - add r1, sp, 0x214 - movs r2, 0 - movs r3, 0 - bl sub_8092638 - movs r7, 0 - add r1, sp, 0x1F0 - ldrh r0, [r1] - ldr r2, _08068E10 - cmp r0, r2 - beq _08068D60 - ldr r0, _08068E14 - ldr r3, [r0] - adds r5, r2, 0 - add r2, sp, 0x3C - movs r4, 0x58 -_08068D4A: - ldrh r0, [r1] - muls r0, r4 - adds r0, r3, r0 - stm r2!, {r0} - adds r1, 0x2 - adds r7, 0x1 - cmp r7, 0x14 - bgt _08068D60 - ldrh r0, [r1] - cmp r0, r5 - bne _08068D4A -_08068D60: - movs r6, 0 - ldr r2, _08068E14 - mov r10, r2 - movs r3, 0 - mov r9, r3 -_08068D6A: - movs r0, 0x64 - muls r0, r6 - ldr r1, _08068E18 - adds r0, r1 - mov r2, r10 - ldr r1, [r2] - adds r5, r1, r0 - ldrb r1, [r5] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068DD6 - movs r3, 0xA - ldrsh r0, [r5, r3] - bl sub_806A5A4 - lsls r0, 24 - cmp r0, 0 - beq _08068DD6 - movs r1, 0xE - ldrsh r0, [r5, r1] - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - cmp r0, r8 - bne _08068DD6 - ldr r2, [sp, 0x220] - cmp r2, 0 - beq _08068DD6 - add r4, sp, 0x3C - lsls r0, r7, 2 - adds r4, r0 - add r0, sp, 0x90 - movs r1, 0x58 - muls r1, r6 - adds r0, r1 - str r0, [r4] - adds r1, r5, 0 - bl xxx_pokemon2_to_pokemonstruct_808DF44 - ldr r2, [r4] - ldrh r0, [r2] - movs r3, 0x80 - lsls r3, 7 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] - ldr r0, [r4] - mov r1, r9 - strb r1, [r0, 0xC] - ldr r0, [r4] - strb r1, [r0, 0x10] - adds r7, 0x1 -_08068DD6: - adds r6, 0x1 - cmp r6, 0x3 - ble _08068D6A - add r0, sp, 0x214 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r7, r0 - bgt _08068E1C - cmp r7, 0 - bgt _08068DEC - b _08068F08 -_08068DEC: - add r5, sp, 0x3C - movs r3, 0x80 - lsls r3, 7 - adds r6, r3, 0 - adds r4, r7, 0 -_08068DF6: - ldr r1, [r5] - ldrh r0, [r1] - ands r0, r6 - cmp r0, 0 - beq _08068E06 - adds r0, r1, 0 - bl sub_808D1DC -_08068E06: - adds r5, 0x4 - subs r4, 0x1 - cmp r4, 0 - bne _08068DF6 - b _08068F08 - .align 2, 0 -_08068E10: .4byte 0x0000ffff -_08068E14: .4byte gRecruitedPokemonRef -_08068E18: .4byte 0x00008df8 -_08068E1C: - ldr r0, _08068E78 - mov r1, r8 - movs r2, 0 - bl sub_8092578 - ldr r0, _08068E7C - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - add r4, sp, 0x3C -_08068E34: - add r0, sp, 0x214 - movs r2, 0 - ldrsh r1, [r0, r2] - subs r1, r7, r1 - mov r0, r8 - adds r2, r7, 0 - adds r3, r4, 0 - bl sub_8067A80 - movs r6, 0 - cmp r6, r7 - bge _08068E8E - movs r5, 0x80 - lsls r5, 8 - adds r3, r4, 0 -_08068E52: - ldr r2, [r3] - ldrh r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068E86 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _08068E86 - ldrb r0, [r2, 0x4] - subs r0, 0x44 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08068E80 - movs r0, 0x1 - b _08068E82 - .align 2, 0 -_08068E78: .4byte gUnknown_202DE58 -_08068E7C: .4byte gUnknown_80FE1A4 -_08068E80: - movs r0, 0 -_08068E82: - cmp r0, 0 - bne _08068E8E -_08068E86: - adds r3, 0x4 - adds r6, 0x1 - cmp r6, r7 - blt _08068E52 -_08068E8E: - cmp r6, r7 - beq _08068EA2 - ldr r0, _08068F24 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0x1 - bne _08068E34 -_08068EA2: - cmp r7, 0 - ble _08068ED4 - movs r3, 0x80 - lsls r3, 8 - mov r9, r3 - adds r3, r4, 0 - movs r0, 0x1 - mov r8, r0 - movs r5, 0 - adds r6, r7, 0 -_08068EB6: - ldr r2, [r3] - ldrh r1, [r2] - mov r0, r8 - ands r0, r1 - cmp r0, 0 - beq _08068ECC - mov r0, r9 - ands r0, r1 - cmp r0, 0 - beq _08068ECC - strh r5, [r2] -_08068ECC: - adds r3, 0x4 - subs r6, 0x1 - cmp r6, 0 - bne _08068EB6 -_08068ED4: - cmp r7, 0 - ble _08068F08 - movs r1, 0x80 - lsls r1, 7 - adds r5, r1, 0 - adds r6, r7, 0 -_08068EE0: - ldr r2, [r4] - ldrh r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068F00 - adds r0, r1, 0 - ands r0, r5 - cmp r0, 0 - beq _08068F00 - adds r0, r2, 0 - bl sub_808D1DC - ldr r1, [r4] - movs r0, 0 - strh r0, [r1] -_08068F00: - adds r4, 0x4 - subs r6, 0x1 - cmp r6, 0 - bne _08068EE0 -_08068F08: - ldr r1, [sp, 0x224] - cmp r1, 0x39 - bgt _08068F10 - b _08068D06 -_08068F10: - movs r3, 0x8A - lsls r3, 2 - add sp, r3 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08068F24: .4byte gUnknown_80FE20C - thumb_func_end sub_8068BDC - - thumb_func_start sub_8068F28 -sub_8068F28: - push {r4-r7,lr} - movs r6, 0 - ldr r7, _08068F5C -_08068F2E: - movs r0, 0x64 - muls r0, r6 - ldr r1, _08068F60 - adds r0, r1 - ldr r1, [r7] - adds r4, r1, r0 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068F74 - movs r1, 0xA - ldrsh r0, [r4, r1] - bl sub_806A564 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _08068F64 - movs r0, 0 - strh r0, [r4] - b _08068F74 - .align 2, 0 -_08068F5C: .4byte gRecruitedPokemonRef -_08068F60: .4byte 0x00008df8 -_08068F64: - movs r1, 0xA - ldrsh r0, [r4, r1] - bl sub_806A538 - lsls r0, 24 - cmp r0, 0 - beq _08068F74 - strh r5, [r4] -_08068F74: - adds r6, 0x1 - cmp r6, 0x3 - ble _08068F2E - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8068F28 - - thumb_func_start sub_8068F80 -sub_8068F80: - push {r4,r5,lr} - bl GetLeader - adds r5, r0, 0 - ldr r0, _08068FD4 - ldr r4, [r0] - ldr r1, _08068FD8 - adds r0, r4, r1 - movs r1, 0 - strb r1, [r0] - ldr r2, _08068FDC - adds r0, r4, r2 - strb r1, [r0] - adds r2, 0x6 - adds r0, r4, r2 - strb r1, [r0] - adds r0, r4, 0 - adds r0, 0xC0 - str r1, [r0] - cmp r5, 0 - beq _08068FCC - adds r0, r5, 0 - bl GetTileAtEntitySafe - ldrh r0, [r0] - lsrs r0, 5 - movs r1, 0x1 - ands r0, r1 - movs r2, 0xD3 - lsls r2, 3 - adds r1, r4, r2 - strb r0, [r1] - adds r2, 0x1 - adds r1, r4, r2 - strb r0, [r1] - adds r0, r5, 0x4 - bl sub_804AC20 -_08068FCC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08068FD4: .4byte gDungeon -_08068FD8: .4byte 0x0000066c -_08068FDC: .4byte 0x0000066d - thumb_func_end sub_8068F80 - - thumb_func_start sub_8068FE0 -sub_8068FE0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x84 - mov r8, r0 - str r2, [sp, 0x74] - lsls r1, 16 - asrs r1, 16 - mov r9, r1 - ldr r7, [r0, 0x70] - bl GetTileAtEntitySafe - adds r4, r0, 0 - ldr r0, [sp, 0x74] - cmp r0, 0 - bne _0806900E - mov r0, sp - bl sub_80457DC - mov r1, sp - str r1, [sp, 0x74] -_0806900E: - ldr r0, [r4, 0x10] - cmp r0, r8 - bne _08069018 - movs r0, 0 - str r0, [r4, 0x10] -_08069018: - mov r2, r8 - movs r3, 0x4 - ldrsh r0, [r2, r3] - movs r3, 0x6 - ldrsh r1, [r2, r3] - bl sub_80402AC - movs r5, 0 - adds r6, r7, 0 - adds r6, 0xC8 - movs r0, 0xB0 - adds r0, r7 - mov r10, r0 - mov r1, r8 - adds r1, 0x22 - str r1, [sp, 0x80] - mov r2, r8 - adds r2, 0x20 - str r2, [sp, 0x7C] - adds r3, r7, 0 - adds r3, 0x40 - str r3, [sp, 0x78] -_08069044: - ldr r0, _080690E4 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _080690E8 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - cmp r4, 0 - beq _08069072 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08069072 - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0x80 - ldr r0, [r1] - cmp r0, r8 - bne _08069072 - movs r0, 0 - str r0, [r1] -_08069072: - adds r5, 0x1 - cmp r5, 0x13 - ble _08069044 - ldrb r0, [r6] - cmp r0, 0x2 - bne _0806908A - ldr r0, _080690E4 - ldr r0, [r0] - ldr r3, _080690EC - adds r0, r3 - movs r1, 0 - strb r1, [r0] -_0806908A: - mov r1, r10 - ldrb r0, [r1] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080690A2 - adds r0, r7, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_080690A2: - mov r0, r8 - bl sub_8078084 - movs r0, 0 - ldr r2, [sp, 0x80] - strb r0, [r2] - ldr r3, [sp, 0x7C] - strb r0, [r3] - ldr r1, _080690F0 - str r0, [r1] - ldr r1, [sp, 0x78] - ldrb r0, [r1] - cmp r0, 0x41 - bne _080690FC - ldr r3, _080690E4 - ldr r2, [r3] - ldr r1, _080690F4 - adds r0, r2, r1 - ldrb r1, [r0] - cmp r1, 0 - bne _080690FC - movs r0, 0x1 - strb r0, [r2, 0x10] - strh r1, [r7, 0xE] - ldr r0, [r3] - ldr r2, _080690F8 - adds r0, r2 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument - b _08069484 - .align 2, 0 -_080690E4: .4byte gDungeon -_080690E8: .4byte 0x000135cc -_080690EC: .4byte 0x000037fc -_080690F0: .4byte gLeaderPointer -_080690F4: .4byte 0x0000065c -_080690F8: .4byte 0x000005f4 -_080690FC: - ldrb r0, [r7, 0x7] - cmp r0, 0 - bne _08069104 - b _0806928E -_08069104: - movs r0, 0x3C - movs r1, 0x49 - bl sub_803E708 - bl sub_80532B4 - ldr r5, _08069198 - ldr r2, [r5] - ldrb r0, [r2, 0x6] - cmp r0, 0 - bne _080691C8 - ldr r3, _0806919C - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _080691E0 - movs r0, 0x87 - lsls r0, 2 - cmp r9, r0 - beq _080691E0 - adds r0, 0x6 - cmp r9, r0 - beq _080691E0 - subs r0, 0x4 - cmp r9, r0 - beq _080691E0 - ldr r1, _080691A0 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080691E0 - ldr r6, _080691A4 - adds r0, r2, r6 - movs r1, 0 - ldrsb r1, [r0, r1] - cmp r1, 0 - blt _080691E0 - adds r3, 0xA - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080691E0 - cmp r1, 0 - ble _080691B4 - ldr r0, _080691A8 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl sub_8052B8C - adds r4, r0, 0 - cmp r4, 0x1 - bne _080691E0 - ldr r0, _080691AC - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - ldr r0, [r5] - strb r4, [r0, 0x4] - ldr r0, [r5] - strb r4, [r0, 0x6] - ldr r0, [r5] - ldr r1, _080691B0 - adds r0, r1 - strb r4, [r0] - ldr r1, [r5] - adds r1, r6 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] - b _08069484 - .align 2, 0 -_08069198: .4byte gDungeon -_0806919C: .4byte 0x0000066e -_080691A0: .4byte 0x00003a0d -_080691A4: .4byte 0x0000067b -_080691A8: .4byte gUnknown_80FE268 -_080691AC: .4byte gUnknown_80FE28C -_080691B0: .4byte 0x00000654 -_080691B4: - ldr r0, _080691C4 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - b _080691E0 - .align 2, 0 -_080691C4: .4byte gUnknown_80FE2D0 -_080691C8: - movs r1, 0x1 - strb r1, [r2, 0x4] - ldr r0, [r5] - strb r1, [r0, 0x6] - ldr r0, [r5] - ldr r2, _080691DC - adds r0, r2 - strb r1, [r0] - b _08069484 - .align 2, 0 -_080691DC: .4byte 0x00000654 -_080691E0: - mov r0, r9 - ldr r1, [sp, 0x74] - mov r2, r8 - bl sub_8083AB0 - ldr r0, _080691F8 - cmp r9, r0 - bne _0806928E - movs r6, 0 - movs r5, 0 - b _080691FE - .align 2, 0 -_080691F8: .4byte 0x0000021f -_080691FC: - adds r5, 0x1 -_080691FE: - cmp r5, 0x3 - bgt _08069228 - ldr r0, _080692C4 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r3, _080692C8 - adds r0, r3 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080691FC - ldr r6, [r4, 0x70] - adds r0, r6, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x41 - bne _080691FC -_08069228: - cmp r6, 0 - beq _0806928E - ldr r5, _080692CC - ldrb r0, [r6, 0xA] - movs r1, 0x64 - muls r1, r0 - ldr r2, _080692D0 - adds r1, r2 - ldr r2, [r5] - adds r4, r2, r1 - adds r1, r6, 0 - bl sub_806C264 - movs r3, 0xA - ldrsh r0, [r4, r3] - bl sub_806A58C - lsls r0, 24 - cmp r0, 0 - beq _0806928A - ldr r0, _080692C4 - ldr r0, [r0] - ldr r1, _080692D4 - adds r0, r1 - ldrb r0, [r0] - bl IsLevelResetTo1 - lsls r0, 24 - cmp r0, 0 - bne _0806926E - movs r2, 0xA - ldrsh r0, [r4, r2] - adds r1, r4, 0 - bl xxx_pokemon2_to_pokemonstruct_index_808DF2C -_0806926E: - bl IsMakuhitaTrainingMaze - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0806928A - movs r3, 0xA - ldrsh r1, [r4, r3] - movs r0, 0x58 - muls r0, r1 - ldr r1, [r5] - adds r0, r1 - adds r0, 0x28 - strb r2, [r0] -_0806928A: - movs r0, 0 - strh r0, [r4] -_0806928E: - ldrb r0, [r7, 0x6] - cmp r0, 0 - beq _080692DC - movs r5, 0 - movs r1, 0xB4 - lsls r1, 1 - adds r0, r7, r1 - movs r2, 0x98 - adds r2, r7 - mov r10, r2 - ldrb r3, [r0] - cmp r5, r3 - bge _0806930A - ldr r4, _080692D8 - subs r1, 0x1 - adds r2, r7, r1 - movs r3, 0 - adds r1, r0, 0 -_080692B2: - ldrb r0, [r2] - adds r0, r5 - adds r0, r4 - strb r3, [r0] - adds r5, 0x1 - ldrb r0, [r1] - cmp r5, r0 - blt _080692B2 - b _0806930A - .align 2, 0 -_080692C4: .4byte gDungeon -_080692C8: .4byte 0x0001357c -_080692CC: .4byte gRecruitedPokemonRef -_080692D0: .4byte 0x00008df8 -_080692D4: .4byte 0x00000644 -_080692D8: .4byte gUnknown_202EE76 -_080692DC: - movs r5, 0 - movs r1, 0xB4 - lsls r1, 1 - adds r0, r7, r1 - movs r2, 0x98 - adds r2, r7 - mov r10, r2 - ldrb r3, [r0] - cmp r5, r3 - bge _0806930A - ldr r4, _0806932C - subs r1, 0x1 - adds r2, r7, r1 - movs r3, 0 - adds r1, r0, 0 -_080692FA: - ldrb r0, [r2] - adds r0, r5 - adds r0, r4 - strb r3, [r0] - adds r5, 0x1 - ldrb r0, [r1] - cmp r5, r0 - blt _080692FA -_0806930A: - ldr r1, [sp, 0x78] - ldrb r0, [r1] - cmp r0, 0x4A - bne _08069338 - ldr r2, _08069330 - ldr r1, [r2] - movs r0, 0x2 - strb r0, [r1, 0x10] - ldr r0, [r2] - ldr r2, _08069334 - adds r0, r2 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument - b _08069352 - .align 2, 0 -_0806932C: .4byte gUnknown_202EE70 -_08069330: .4byte gDungeon -_08069334: .4byte 0x000005f4 -_08069338: - cmp r0, 0x47 - bne _08069352 - ldr r2, _08069494 - ldr r1, [r2] - movs r0, 0x3 - strb r0, [r1, 0x10] - ldr r0, [r2] - ldr r3, _08069498 - adds r0, r3 - mov r1, r8 - movs r2, 0 - bl SetMessageArgument -_08069352: - bl GetLeader - cmp r0, 0 - beq _080693C6 - movs r0, 0x87 - lsls r0, 2 - cmp r9, r0 - beq _080693C6 - ldrb r0, [r7, 0x7] - cmp r0, 0 - bne _080693C6 - ldr r4, _08069494 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - cmp r0, 0 - bne _080693C6 - adds r0, r7, 0 - adds r0, 0xA4 - ldrb r1, [r0] - movs r2, 0 - movs r0, 0xFA - lsls r0, 1 - cmp r9, r0 - bne _08069384 - movs r2, 0x1 -_08069384: - mov r0, r8 - bl sub_8084E00 - ldr r1, _0806949C - adds r0, r1, 0 - ldrh r2, [r7, 0x4] - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bhi _080693C6 - bl IsBossFight - lsls r0, 24 - cmp r0, 0 - bne _080693C6 - ldrb r0, [r7, 0x6] - cmp r0, 0 - beq _080693CC - ldr r0, [r4] - ldr r3, _080694A0 - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _080694A4 - ldr r1, [r0] - mov r0, r8 - bl sub_805239C - bl sub_803E178 - bl sub_8049ED4 -_080693C6: - ldrb r0, [r7, 0x6] - cmp r0, 0 - bne _08069466 -_080693CC: - ldr r6, _080694A8 - ldrb r0, [r7, 0xA] - movs r1, 0x64 - muls r1, r0 - ldr r2, _080694AC - adds r1, r2 - ldr r2, [r6] - adds r4, r2, r1 - adds r1, r7, 0 - bl sub_806C264 - movs r3, 0xA - ldrsh r0, [r4, r3] - bl sub_806A58C - lsls r0, 24 - cmp r0, 0 - beq _08069462 - ldr r5, _08069494 - ldr r0, [r5] - ldr r1, _080694B0 - adds r0, r1 - ldrb r0, [r0] - bl IsLevelResetTo1 - lsls r0, 24 - cmp r0, 0 - bne _0806940E - movs r2, 0xA - ldrsh r0, [r4, r2] - adds r1, r4, 0 - bl xxx_pokemon2_to_pokemonstruct_index_808DF2C -_0806940E: - bl IsMakuhitaTrainingMaze - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0806942A - movs r3, 0xA - ldrsh r1, [r4, r3] - movs r0, 0x58 - muls r0, r1 - ldr r1, [r6] - adds r0, r1 - adds r0, 0x28 - strb r2, [r0] -_0806942A: - ldrb r1, [r7, 0x7] - negs r0, r1 - orrs r0, r1 - lsrs r1, r0, 31 - ldr r0, [r5] - ldr r2, _080694B4 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _08069448 - ldr r3, [sp, 0x78] - ldrb r0, [r3] - cmp r0, 0x41 - bne _08069448 - movs r1, 0x1 -_08069448: - cmp r1, 0 - bne _08069462 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0x58 - muls r1, r0 - ldr r0, _080694A8 - ldr r0, [r0] - adds r1, r0 - ldrh r2, [r1] - ldr r0, _080694B8 - ands r0, r2 - strh r0, [r1] -_08069462: - movs r0, 0 - strh r0, [r4] -_08069466: - mov r1, r10 - ldr r0, [r1] - bl DeletePokemonDungeonSprite - ldr r0, _080694BC - movs r2, 0 - str r2, [r0] - ldr r0, _08069494 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0xC] - mov r3, r8 - str r2, [r3] - bl sub_8045ACC -_08069484: - add sp, 0x84 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08069494: .4byte gDungeon -_08069498: .4byte 0x000005f4 -_0806949C: .4byte 0xfffffe5f -_080694A0: .4byte 0x000037fe -_080694A4: .4byte gUnknown_80FA580 -_080694A8: .4byte gRecruitedPokemonRef -_080694AC: .4byte 0x00008df8 -_080694B0: .4byte 0x00000644 -_080694B4: .4byte 0x0000065c -_080694B8: .4byte 0x0000fffd -_080694BC: .4byte gLeaderPointer - thumb_func_end sub_8068FE0 - - thumb_func_start sub_80694C0 -sub_80694C0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - adds r7, r1, 0 - mov r8, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - adds r0, r7, 0 - mov r1, r8 - bl GetTileSafe - mov r10, r0 - ldr r5, [r4, 0x70] - adds r6, r5, 0 - adds r6, 0xB0 - ldrb r0, [r6] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080694FC - adds r0, r5, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_080694FC: - ldrb r0, [r6] - cmp r0, 0x7 - beq _0806950A - cmp r0, 0x5 - beq _0806950A - cmp r0, 0x2 - bne _08069512 -_0806950A: - adds r0, r4, 0 - adds r1, r4, 0 - bl SendImmobilizeEndMessage -_08069512: - movs r0, 0x4 - ldrsh r2, [r4, r0] - cmp r7, r2 - bne _08069522 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r8, r0 - beq _080695DE -_08069522: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _08069552 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _08069552 - adds r1, r0, 0 - adds r0, r2, 0 - bl GetTileSafe - adds r1, r0, 0 - ldr r0, [r1, 0x10] - cmp r0, r4 - bne _08069546 - movs r0, 0 - str r0, [r1, 0x10] -_08069546: - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl sub_80402AC -_08069552: - ldrh r0, [r4, 0x4] - strh r0, [r4, 0x8] - ldrh r0, [r4, 0x6] - strh r0, [r4, 0xA] - strh r7, [r4, 0x4] - mov r0, r8 - strh r0, [r4, 0x6] - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _0806956E - ldr r0, _0806959C - strh r7, [r0] - mov r1, r8 - strh r1, [r0, 0x2] -_0806956E: - mov r2, r10 - str r4, [r2, 0x10] - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _08069588 - ldr r0, _080695A0 - strh r7, [r0] - mov r1, r8 - strh r1, [r0, 0x2] - ldr r0, _080695A4 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x1] -_08069588: - adds r0, r7, 0 - mov r1, r8 - bl sub_80402AC - mov r2, r9 - cmp r2, 0 - beq _080695A8 - cmp r2, 0x1 - beq _080695C4 - b _080695CE - .align 2, 0 -_0806959C: .4byte gUnknown_203B410 -_080695A0: .4byte gUnknown_202EE0C -_080695A4: .4byte gDungeon -_080695A8: - ldr r0, [r5, 0x70] - str r0, [r5, 0x74] - ldr r0, [r5, 0x6C] - str r0, [r5, 0x70] - ldr r0, [r5, 0x68] - str r0, [r5, 0x6C] - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080695CE - ldr r0, [r4, 0x8] - str r0, [r5, 0x68] - b _080695CE -_080695C4: - ldr r0, [r4, 0x4] - str r0, [r5, 0x68] - str r0, [r5, 0x6C] - str r0, [r5, 0x70] - str r0, [r5, 0x74] -_080695CE: - mov r1, r10 - ldrb r0, [r1, 0x9] - adds r1, r4, 0 - adds r1, 0x25 - strb r0, [r1] - adds r0, r4, 0 - bl sub_806CF98 -_080695DE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80694C0 - - thumb_func_start sub_80695EC -sub_80695EC: - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - ldr r1, [r4, 0x70] - adds r5, r1, 0 - adds r0, r1, 0 - adds r0, 0xB0 - ldrb r0, [r0] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08069612 - adds r0, r1, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_08069612: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r6, r0 - bne _08069622 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r7, r0 - beq _08069658 -_08069622: - ldrh r0, [r4, 0x4] - strh r0, [r4, 0x8] - ldrh r0, [r4, 0x6] - strh r0, [r4, 0xA] - strh r6, [r4, 0x4] - strh r7, [r4, 0x6] - ldr r0, [r5, 0x70] - str r0, [r5, 0x74] - ldr r0, [r5, 0x6C] - str r0, [r5, 0x70] - ldr r0, [r5, 0x68] - str r0, [r5, 0x6C] - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08069648 - ldr r0, [r4, 0x8] - str r0, [r5, 0x68] -_08069648: - adds r0, r6, 0 - adds r1, r7, 0 - bl GetTile - ldrb r1, [r0, 0x9] - adds r0, r4, 0 - adds r0, 0x25 - strb r1, [r0] -_08069658: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80695EC - - thumb_func_start sub_8069660 -sub_8069660: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x70] - adds r5, r0, 0 - adds r5, 0x46 - ldrb r1, [r5] - adds r0, r4, 0 - bl sub_8070F80 - lsls r0, 24 - cmp r0, 0 - bne _0806967C - movs r0, 0 - b _0806969E -_0806967C: - movs r1, 0x4 - ldrsh r0, [r4, r1] - ldr r1, _080696A4 - ldrb r2, [r5] - lsls r2, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetTile - ldr r0, [r0, 0x10] -_0806969E: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080696A4: .4byte gAdjacentTileOffsets - thumb_func_end sub_8069660 - - thumb_func_start sub_80696A8 -sub_80696A8: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x70] - adds r5, r0, 0 - adds r5, 0x46 - ldrb r1, [r5] - adds r0, r4, 0 - bl CanAttackInDirection - lsls r0, 24 - cmp r0, 0 - beq _080696F4 - movs r1, 0x4 - ldrsh r0, [r4, r1] - ldr r1, _080696F0 - ldrb r2, [r5] - lsls r2, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetTile - ldr r1, [r0, 0x10] - cmp r1, 0 - beq _080696F4 - ldr r0, [r1] - cmp r0, 0x1 - bne _080696F4 - adds r0, r1, 0 - b _080696F6 - .align 2, 0 -_080696F0: .4byte gAdjacentTileOffsets -_080696F4: - movs r0, 0 -_080696F6: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80696A8 - - thumb_func_start sub_80696FC -sub_80696FC: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r3, [r4, 0x70] - ldr r5, _08069764 - adds r3, 0x46 - ldrb r0, [r3] - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0] - ldrh r1, [r4, 0x4] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08069768 - ldr r2, [sp] - ands r2, r1 - orrs r2, r0 - str r2, [sp] - ldrb r0, [r3] - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x6] - adds r0, r1 - lsls r0, 16 - ldr r1, _0806976C - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - asrs r1, 16 - bl GetTile - adds r5, r0, 0 - adds r0, r4, 0 - mov r1, sp - bl sub_80705F0 - lsls r0, 24 - cmp r0, 0 - bne _08069770 - ldr r1, [r5, 0x10] - cmp r1, 0 - beq _08069770 - ldr r0, [r1] - cmp r0, 0x1 - bne _08069770 - adds r0, r1, 0 - b _08069772 - .align 2, 0 -_08069764: .4byte gAdjacentTileOffsets -_08069768: .4byte 0xffff0000 -_0806976C: .4byte 0x0000ffff -_08069770: - movs r0, 0 -_08069772: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80696FC - - thumb_func_start sub_806977C -sub_806977C: - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r0, [r4, 0x70] - ldr r7, _0806982C - adds r5, r0, 0 - adds r5, 0x46 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - ldrh r0, [r0] - ldrh r1, [r4, 0x4] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08069830 - ldr r2, [sp] - ands r2, r1 - orrs r2, r0 - str r2, [sp] - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x6] - adds r0, r1 - lsls r0, 16 - ldr r1, _08069834 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - asrs r1, 16 - bl GetTile - mov r6, sp - adds r0, r4, 0 - mov r1, sp - bl sub_80705F0 - lsls r0, 24 - cmp r0, 0 - bne _08069838 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - movs r1, 0 - ldrsh r0, [r0, r1] - lsls r0, 1 - ldrh r2, [r4, 0x4] - adds r0, r2 - mov r1, sp - strh r0, [r1] - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - movs r1, 0x2 - ldrsh r0, [r0, r1] - lsls r0, 1 - ldrh r2, [r4, 0x6] - adds r0, r2 - strh r0, [r6, 0x2] - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r6, r2] - bl GetTile - adds r5, r0, 0 - adds r0, r4, 0 - mov r1, sp - bl sub_80705F0 - lsls r0, 24 - cmp r0, 0 - bne _08069838 - ldr r1, [r5, 0x10] - cmp r1, 0 - beq _08069838 - ldr r0, [r1] - cmp r0, 0x1 - bne _08069838 - adds r0, r1, 0 - b _0806983A - .align 2, 0 -_0806982C: .4byte gAdjacentTileOffsets -_08069830: .4byte 0xffff0000 -_08069834: .4byte 0x0000ffff -_08069838: - movs r0, 0 -_0806983A: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806977C - - thumb_func_start sub_8069844 -sub_8069844: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - mov r8, r1 - ldr r5, [r1, 0x70] - adds r0, r6, 0x2 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument_2 - ldrh r0, [r5, 0x2] - strh r0, [r6] - movs r1, 0xE - ldrsh r0, [r5, r1] - str r0, [r6, 0x24] - movs r2, 0x10 - ldrsh r0, [r5, r2] - str r0, [r6, 0x28] - ldrb r0, [r5, 0x9] - str r0, [r6, 0x2C] - ldr r0, [r5, 0x18] - str r0, [r6, 0x30] - movs r2, 0 -_08069874: - adds r1, r6, 0 - adds r1, 0x34 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x14 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x36 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x16 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x16 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x5C - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x18 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x5E - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x1 - ble _08069874 - ldrb r2, [r5, 0x7] - adds r1, r6, 0 - adds r1, 0x38 - movs r0, 0 - strb r2, [r1] - adds r2, r6, 0 - adds r2, 0x39 - strb r0, [r2] - adds r3, r6, 0 - adds r3, 0x3A - strb r0, [r3] - adds r4, r6, 0 - adds r4, 0x3B - strb r0, [r4] - movs r7, 0x3C - adds r7, r6 - mov r12, r7 - strb r0, [r7] - adds r0, r5, 0 - adds r0, 0x60 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806995C - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0806995C - adds r1, r5, 0 - adds r1, 0x62 - ldrb r0, [r1] - cmp r0, 0x13 - bne _08069908 - ldr r0, _080699A4 - ldrb r0, [r0] - ldrb r7, [r2] - adds r0, r7 - strb r0, [r2] -_08069908: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08069918 - ldr r0, _080699A8 - ldrb r0, [r0] - ldrb r7, [r2] - adds r0, r7 - strb r0, [r2] -_08069918: - ldrb r0, [r1] - cmp r0, 0x21 - bne _08069928 - ldr r0, _080699AC - ldrb r0, [r0] - ldrb r2, [r3] - adds r0, r2 - strb r0, [r3] -_08069928: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08069938 - ldr r0, _080699A8 - ldrb r0, [r0] - ldrb r7, [r3] - adds r0, r7 - strb r0, [r3] -_08069938: - ldrb r0, [r1] - cmp r0, 0x1E - bne _08069948 - ldr r0, _080699B0 - ldrb r0, [r0] - ldrb r2, [r4] - adds r0, r2 - strb r0, [r4] -_08069948: - ldrb r0, [r1] - cmp r0, 0x22 - bne _0806995C - ldr r0, _080699B4 - ldrb r0, [r0] - mov r7, r12 - ldrb r7, [r7] - adds r0, r7 - mov r1, r12 - strb r0, [r1] -_0806995C: - adds r0, r5, 0 - adds r0, 0x94 - ldrb r1, [r0] - adds r0, r6, 0 - adds r0, 0x54 - strb r1, [r0] - ldr r0, [r5, 0x60] - str r0, [r6, 0x20] - ldrh r0, [r5, 0xC] - movs r1, 0 - strh r0, [r6, 0x3E] - ldr r0, [r5, 0x40] - str r0, [r6, 0x1C] - adds r0, r6, 0 - adds r0, 0x44 - strb r1, [r0] - adds r0, 0x4 - strb r1, [r0] - adds r0, r5, 0 - adds r0, 0x8C - ldr r0, [r0] - str r0, [r6, 0x50] - ldr r0, _080699B8 - ldr r0, [r0] - ldr r2, _080699BC - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _080699C0 - adds r0, r5, 0 - bl sub_806A4DC - adds r1, r6, 0 - adds r1, 0x4C - b _080699C6 - .align 2, 0 -_080699A4: .4byte gUnknown_810AC60 -_080699A8: .4byte gUnknown_810AC68 -_080699AC: .4byte gUnknown_810AC62 -_080699B0: .4byte gUnknown_810AC64 -_080699B4: .4byte gUnknown_810AC66 -_080699B8: .4byte gDungeon -_080699BC: .4byte 0x0000065a -_080699C0: - adds r1, r6, 0 - adds r1, 0x4C - movs r0, 0x3 -_080699C6: - strb r0, [r1] - movs r4, 0 - movs r7, 0x10 - ldrsh r0, [r5, r7] - cmp r0, 0 - bge _080699D4 - adds r0, 0x3 -_080699D4: - movs r2, 0xE - ldrsh r1, [r5, r2] - asrs r0, 2 - cmp r1, r0 - bgt _080699E8 - adds r1, r6, 0 - adds r1, 0x58 - movs r0, 0x6 - strb r0, [r1] - movs r4, 0x1 -_080699E8: - ldr r0, _08069A24 - ldr r0, [r0] - ldr r7, _08069A28 - adds r0, r7 - ldrb r0, [r0] - cmp r0, 0 - beq _08069A02 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0xB - strb r1, [r0] - adds r4, 0x1 -_08069A02: - movs r1, 0x9E - lsls r1, 1 - adds r0, r5, r1 - ldr r0, [r0] - bl RoundUpFixedPoint - cmp r0, 0 - bne _08069A38 - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _08069A2C - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x13 - b _08069A34 - .align 2, 0 -_08069A24: .4byte gDungeon -_08069A28: .4byte 0x00000676 -_08069A2C: - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x3B -_08069A34: - strb r1, [r0] - adds r4, 0x1 -_08069A38: - mov r2, r8 - ldr r0, [r2, 0x70] - movs r7, 0x82 - lsls r7, 1 - adds r2, r0, r7 - ldr r0, [r2] - cmp r0, 0x1 - ble _08069A54 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x1B - strb r1, [r0] - adds r4, 0x1 -_08069A54: - ldr r0, [r2] - cmp r0, 0 - bgt _08069A66 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x28 - strb r1, [r0] - adds r4, 0x1 -_08069A66: - ldr r0, [r5, 0x2C] - cmp r0, 0xFF - ble _08069AAE - ldr r0, [r5, 0x30] - cmp r0, 0xFF - ble _08069AAE - ldr r0, [r5, 0x34] - cmp r0, 0xFF - ble _08069AAE - ldr r0, [r5, 0x38] - cmp r0, 0xFF - ble _08069AAE - movs r1, 0x1C - ldrsh r0, [r5, r1] - cmp r0, 0x9 - ble _08069AAE - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r0, 0x9 - ble _08069AAE - movs r7, 0x20 - ldrsh r0, [r5, r7] - cmp r0, 0x9 - ble _08069AAE - movs r1, 0x22 - ldrsh r0, [r5, r1] - cmp r0, 0x9 - ble _08069AAE - movs r2, 0x24 - ldrsh r0, [r5, r2] - cmp r0, 0x9 - ble _08069AAE - movs r7, 0x26 - ldrsh r0, [r5, r7] - cmp r0, 0x9 - bgt _08069ABA -_08069AAE: - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x37 - strb r1, [r0] - adds r4, 0x1 -_08069ABA: - adds r0, r5, 0 - adds r0, 0xA8 - ldrb r1, [r0] - cmp r1, 0 - beq _08069AD2 - cmp r4, 0xB - bgt _08069AD2 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - strb r1, [r0] - adds r4, 0x1 -_08069AD2: - adds r0, r5, 0 - adds r0, 0xAC - ldrb r1, [r0] - cmp r1, 0 - beq _08069AEC - cmp r4, 0xB - bgt _08069AEC - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x6 - strb r1, [r0] - adds r4, 0x1 -_08069AEC: - adds r0, r5, 0 - adds r0, 0xB0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B06 - cmp r4, 0xB - bgt _08069B06 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0xB - strb r1, [r0] - adds r4, 0x1 -_08069B06: - adds r0, r5, 0 - adds r0, 0xBC - ldrb r1, [r0] - cmp r1, 0 - beq _08069B20 - cmp r4, 0xB - bgt _08069B20 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x13 - strb r1, [r0] - adds r4, 0x1 -_08069B20: - adds r0, r5, 0 - adds r0, 0xC0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B3A - cmp r4, 0xB - bgt _08069B3A - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x1B - strb r1, [r0] - adds r4, 0x1 -_08069B3A: - adds r0, r5, 0 - adds r0, 0xC4 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B54 - cmp r4, 0xB - bgt _08069B54 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x28 - strb r1, [r0] - adds r4, 0x1 -_08069B54: - adds r0, r5, 0 - adds r0, 0xC8 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B6E - cmp r4, 0xB - bgt _08069B6E - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x37 - strb r1, [r0] - adds r4, 0x1 -_08069B6E: - adds r0, r5, 0 - adds r0, 0xD0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B88 - cmp r4, 0xB - bgt _08069B88 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x3B - strb r1, [r0] - adds r4, 0x1 -_08069B88: - adds r0, r5, 0 - adds r0, 0xDC - ldrb r1, [r0] - cmp r1, 0 - beq _08069BA2 - cmp r4, 0xB - bgt _08069BA2 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x3E - strb r1, [r0] - adds r4, 0x1 -_08069BA2: - adds r0, r5, 0 - adds r0, 0xE0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069BBC - cmp r4, 0xB - bgt _08069BBC - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x43 - strb r1, [r0] - adds r4, 0x1 -_08069BBC: - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r1, [r0] - cmp r1, 0 - beq _08069BD6 - cmp r4, 0xB - bgt _08069BD6 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x46 - strb r1, [r0] - adds r4, 0x1 -_08069BD6: - adds r0, r5, 0 - adds r0, 0xE8 - ldrb r1, [r0] - cmp r1, 0 - beq _08069BF0 - cmp r4, 0xB - bgt _08069BF0 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x4A - strb r1, [r0] - adds r4, 0x1 -_08069BF0: - adds r0, r5, 0 - adds r0, 0xEC - ldrb r1, [r0] - cmp r1, 0 - beq _08069C0A - cmp r4, 0xB - bgt _08069C0A - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x4E - strb r1, [r0] - adds r4, 0x1 -_08069C0A: - movs r1, 0x89 - lsls r1, 1 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C26 - cmp r4, 0xB - bgt _08069C26 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x50 - strb r1, [r0] - adds r4, 0x1 -_08069C26: - adds r0, r5, 0 - adds r0, 0xF0 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C40 - cmp r4, 0xB - bgt _08069C40 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x51 - strb r1, [r0] - adds r4, 0x1 -_08069C40: - adds r0, r5, 0 - adds r0, 0xF1 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C5A - cmp r4, 0xB - bgt _08069C5A - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x52 - strb r1, [r0] - adds r4, 0x1 -_08069C5A: - adds r0, r5, 0 - adds r0, 0xF4 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C74 - cmp r4, 0xB - bgt _08069C74 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x53 - strb r1, [r0] - adds r4, 0x1 -_08069C74: - adds r0, r5, 0 - adds r0, 0xF5 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C8E - cmp r4, 0xB - bgt _08069C8E - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x54 - strb r1, [r0] - adds r4, 0x1 -_08069C8E: - mov r0, r8 - bl ShouldMonsterRunAway - lsls r0, 24 - cmp r0, 0 - beq _08069CAA - cmp r4, 0xB - bgt _08069CAA - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x55 - strb r1, [r0] - adds r4, 0x1 -_08069CAA: - adds r0, r5, 0 - adds r0, 0xFD - ldrb r0, [r0] - cmp r0, 0 - beq _08069CC4 - cmp r4, 0xB - bgt _08069CC4 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x56 - strb r1, [r0] - adds r4, 0x1 -_08069CC4: - mov r0, r8 - movs r1, 0 - bl sub_8070828 - cmp r0, 0x1 - ble _08069CE0 - cmp r4, 0xB - bgt _08069CE0 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x57 - strb r1, [r0] - adds r4, 0x1 -_08069CE0: - adds r0, r5, 0 - adds r0, 0xF2 - ldrb r0, [r0] - cmp r0, 0 - beq _08069CFA - cmp r4, 0xB - bgt _08069D0E - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x58 - strb r1, [r0] - adds r4, 0x1 -_08069CFA: - cmp r4, 0xB - bgt _08069D0E - adds r1, r6, 0 - adds r1, 0x58 - movs r2, 0 -_08069D04: - adds r0, r1, r4 - strb r2, [r0] - adds r4, 0x1 - cmp r4, 0xB - ble _08069D04 -_08069D0E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8069844 - - thumb_func_start sub_8069D18 -sub_8069D18: - push {r4,r5,lr} - ldr r3, [r1, 0x70] - ldr r4, _08069D48 - adds r3, 0x46 - ldrb r2, [r3] - lsls r2, 2 - adds r2, r4 - ldrh r2, [r2] - ldrh r5, [r1, 0x4] - adds r2, r5 - strh r2, [r0] - ldrb r2, [r3] - lsls r2, 2 - adds r2, r4 - ldrh r2, [r2, 0x2] - ldrh r1, [r1, 0x6] - adds r2, r1 - strh r2, [r0, 0x2] - ldrb r1, [r3] - movs r0, 0x1 - ands r0, r1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08069D48: .4byte gAdjacentTileOffsets - thumb_func_end sub_8069D18 - - thumb_func_start sub_8069D4C -sub_8069D4C: - push {r4-r6,lr} - sub sp, 0xC - adds r5, r0, 0 - ldr r4, [r1, 0x70] - ldrh r0, [r4, 0x2] - strh r0, [r5] - ldr r0, [r1, 0x4] - str r0, [r5, 0x4] - adds r0, r4, 0 - adds r0, 0xF7 - ldrb r0, [r0] - cmp r0, 0 - beq _08069D6A - ldrh r0, [r4, 0x12] - b _08069D6C -_08069D6A: - ldrh r0, [r4, 0x10] -_08069D6C: - strh r0, [r5, 0x8] - ldrb r0, [r4, 0x9] - strh r0, [r5, 0xE] - movs r0, 0x2 - ldrsh r1, [r4, r0] - ldrb r2, [r4, 0x9] - mov r0, sp - bl GetPokemonLevelData - ldr r0, [sp] - str r0, [r5, 0x10] - ldrb r0, [r4, 0x14] - strb r0, [r5, 0xA] - ldrb r0, [r4, 0x15] - strb r0, [r5, 0xB] - ldrb r0, [r4, 0x16] - strb r0, [r5, 0xC] - ldrb r0, [r4, 0x17] - strb r0, [r5, 0xD] - ldr r0, [r4, 0x60] - str r0, [r5, 0x1C] - adds r1, r5, 0 - adds r1, 0x20 - movs r2, 0x8C - lsls r2, 1 - adds r0, r4, r2 - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - ldm r0!, {r2,r3,r6} - stm r1!, {r2,r3,r6} - movs r3, 0x9E - lsls r3, 1 - adds r0, r4, r3 - ldr r0, [r0] - str r0, [r5, 0x14] - movs r6, 0xA0 - lsls r6, 1 - adds r0, r4, r6 - ldr r0, [r0] - str r0, [r5, 0x18] - ldr r0, [r4, 0x3C] - str r0, [r5, 0x44] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8069D4C - .align 2, 0 diff --git a/asm/code_805D8C8_1.s b/asm/code_805D8C8_1.s new file mode 100644 index 000000000..aed681cc6 --- /dev/null +++ b/asm/code_805D8C8_1.s @@ -0,0 +1,2696 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_806890C +sub_806890C: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x64 + movs r0, 0 + mov r8, r0 + mov r10, r0 + ldr r6, _08068A60 + add r5, sp, 0x8 +_08068922: + movs r0, 0x58 + mov r1, r10 + muls r1, r0 + adds r0, r1, 0 + ldr r2, [r6] + adds r7, r2, r0 + ldrh r1, [r7] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08068A1C + lsrs r0, r1, 1 + movs r3, 0x1 + ands r0, r3 + cmp r0, 0 + beq _08068A1C + movs r0, 0x64 + mov r4, r8 + muls r4, r0 + ldr r0, _08068A64 + adds r0, r4 + mov r9, r0 + adds r0, r2, r0 + mov r1, r10 + bl xxx_pokemonstruct_index_to_pokemon2_808DE30 + ldr r0, _08068A68 + ldr r0, [r0] + ldr r1, _08068A6C + adds r0, r1 + ldrb r0, [r0] + bl IsLevelResetTo1 + lsls r0, 24 + cmp r0, 0 + beq _08068A06 + movs r0, 0x80 + lsls r0, 1 + str r0, [sp, 0x60] + movs r2, 0x8 + ldrsh r1, [r7, r2] + add r0, sp, 0x60 + str r0, [sp] + movs r3, 0 + str r3, [sp, 0x4] + add r0, sp, 0x8 + movs r2, 0 + bl sub_808CFD0 + ldr r0, [r6] + adds r0, r4 + ldrb r1, [r5, 0x3] + ldr r2, _08068A70 + adds r0, r2 + strb r1, [r0] + ldr r1, [r6] + adds r1, r4 + ldrh r2, [r5, 0x14] + movs r3, 0x8E + lsls r3, 8 + adds r0, r1, r3 + strh r2, [r0] + ldrh r2, [r5, 0x16] + adds r3, 0x8 + adds r0, r1, r3 + strh r2, [r0] + ldrh r2, [r5, 0x16] + adds r3, 0x2 + adds r0, r1, r3 + strh r2, [r0] + ldrb r0, [r5, 0x18] + ldr r2, _08068A74 + adds r1, r2 + strb r0, [r1] + ldr r0, [r6] + adds r0, r4 + ldrb r1, [r5, 0x19] + adds r3, 0x3 + adds r0, r3 + strb r1, [r0] + ldr r0, [r6] + adds r0, r4 + ldrb r1, [r5, 0x1A] + adds r2, 0x2 + adds r0, r2 + strb r1, [r0] + ldr r0, [r6] + adds r0, r4 + ldrb r1, [r5, 0x1B] + adds r3, 0x2 + adds r0, r3 + strb r1, [r0] + ldr r2, [r6] + ldr r1, _08068A78 + adds r0, r2, r1 + adds r0, r4 + ldr r1, [sp, 0x24] + str r1, [r0] + adds r2, r4 + adds r3, 0x35 + adds r1, r2, r3 + ldr r0, [sp, 0x28] + str r0, [r1] + add r0, sp, 0x2C + ldrb r0, [r0] + ldr r1, _08068A7C + adds r2, r1 + strb r0, [r2] + ldr r0, [r6] + add r0, r9 + adds r0, 0x1C + add r1, sp, 0x34 + bl CopyAndResetMoves +_08068A06: + ldr r0, [r6] + adds r0, r4 + ldr r2, _08068A80 + adds r0, r2 + mov r3, r8 + strh r3, [r0] + movs r0, 0x1 + add r8, r0 + mov r1, r8 + cmp r1, 0x4 + beq _08068A2A +_08068A1C: + movs r2, 0x1 + add r10, r2 + movs r0, 0xCE + lsls r0, 1 + cmp r10, r0 + bgt _08068A2A + b _08068922 +_08068A2A: + mov r3, r8 + cmp r3, 0x3 + bgt _08068A50 + ldr r4, _08068A60 + ldr r3, _08068A64 + movs r2, 0 + movs r0, 0x64 + mov r1, r8 + muls r1, r0 +_08068A3C: + ldr r0, [r4] + adds r0, r1 + adds r0, r3 + strh r2, [r0] + adds r1, 0x64 + movs r0, 0x1 + add r8, r0 + mov r0, r8 + cmp r0, 0x3 + ble _08068A3C +_08068A50: + add sp, 0x64 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08068A60: .4byte gRecruitedPokemonRef +_08068A64: .4byte 0x00008df8 +_08068A68: .4byte gDungeon +_08068A6C: .4byte 0x00000644 +_08068A70: .4byte 0x00008dfb +_08068A74: .4byte 0x00008e0c +_08068A78: .4byte 0x00008e10 +_08068A7C: .4byte 0x00008e48 +_08068A80: .4byte 0x00008e04 + thumb_func_end sub_806890C + + thumb_func_start sub_8068A84 +sub_8068A84: + push {r4-r7,lr} + adds r6, r0, 0 + movs r4, 0 + movs r5, 0 + ldr r7, _08068AE0 +_08068A8E: + movs r0, 0x64 + muls r0, r5 + ldr r1, _08068AE4 + adds r0, r1 + ldr r1, [r7] + adds r2, r1, r0 + ldrb r1, [r2] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08068AB2 + movs r1, 0xE + ldrsh r0, [r2, r1] + bl GetBodySize + lsls r0, 24 + lsrs r0, 24 + adds r4, r0 +_08068AB2: + adds r5, 0x1 + cmp r5, 0x3 + ble _08068A8E + movs r1, 0x8 + ldrsh r0, [r6, r1] + bl GetBodySize + lsls r0, 24 + lsrs r0, 24 + adds r4, r0 + cmp r4, 0x6 + ble _08068B04 + ldr r0, _08068AE8 + adds r1, r6, 0 + movs r2, 0 + bl PrintColoredPokeNameToBuffer + ldrb r0, [r6, 0x4] + cmp r0, 0x4A + bne _08068AF0 + ldr r0, _08068AEC + b _08068BB2 + .align 2, 0 +_08068AE0: .4byte gRecruitedPokemonRef +_08068AE4: .4byte 0x00008df8 +_08068AE8: .4byte gAvailablePokemonNames +_08068AEC: .4byte gUnknown_80FE0F4 +_08068AF0: + cmp r0, 0x47 + bne _08068AFC + ldr r0, _08068AF8 + b _08068BB2 + .align 2, 0 +_08068AF8: .4byte gUnknown_80FE0F8 +_08068AFC: + ldr r0, _08068B00 + b _08068BB2 + .align 2, 0 +_08068B00: .4byte gUnknown_80FE0AC +_08068B04: + movs r5, 0 + ldr r2, _08068B6C +_08068B08: + movs r0, 0x64 + muls r0, r5 + ldr r1, _08068B70 + adds r0, r1 + ldr r1, [r2] + adds r4, r1, r0 + ldrb r1, [r4] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + bne _08068B80 + adds r0, r4, 0 + adds r1, r6, 0 + ldr r2, _08068B74 + bl xxx_pokemonstruct_to_pokemon2_808DE50 + ldrh r0, [r4] + movs r1, 0x1 + movs r2, 0 + orrs r1, r0 + strh r1, [r4] + movs r1, 0x8 + ldrsh r0, [r4, r1] + cmp r0, 0x19 + bgt _08068B3E + movs r0, 0x1A + strh r0, [r4, 0x8] +_08068B3E: + ldrh r0, [r4] + movs r1, 0x2 + orrs r0, r1 + strh r0, [r4] + strh r5, [r4, 0xC] + adds r0, r4, 0 + adds r0, 0x40 + strb r2, [r0, 0x2] + strb r2, [r0, 0x1] + strb r2, [r0] + ldr r0, _08068B78 + adds r1, r6, 0 + movs r2, 0x6 + bl PrintColoredPokeNameToBuffer + ldrb r0, [r6, 0x4] + cmp r0, 0x4A + beq _08068BB0 + cmp r0, 0x47 + beq _08068BD0 + ldr r0, _08068B7C + b _08068BB2 + .align 2, 0 +_08068B6C: .4byte gRecruitedPokemonRef +_08068B70: .4byte 0x00008df8 +_08068B74: .4byte 0x000055aa +_08068B78: .4byte gAvailablePokemonNames +_08068B7C: .4byte gUnknown_80FE134 +_08068B80: + adds r5, 0x1 + cmp r5, 0x3 + ble _08068B08 + ldr r0, _08068B9C + adds r1, r6, 0 + movs r2, 0x6 + bl PrintColoredPokeNameToBuffer + ldrb r0, [r6, 0x4] + cmp r0, 0x4A + bne _08068BA4 + ldr r0, _08068BA0 + b _08068BB2 + .align 2, 0 +_08068B9C: .4byte gAvailablePokemonNames +_08068BA0: .4byte gUnknown_80FE0F4 +_08068BA4: + cmp r0, 0x47 + bne _08068BC4 + ldr r0, _08068BAC + b _08068BB2 + .align 2, 0 +_08068BAC: .4byte gUnknown_80FE0F8 +_08068BB0: + ldr r0, _08068BC0 +_08068BB2: + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + b _08068BD0 + .align 2, 0 +_08068BC0: .4byte gUnknown_80FE168 +_08068BC4: + ldr r0, _08068BD8 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage +_08068BD0: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08068BD8: .4byte gUnknown_80FE0AC + thumb_func_end sub_8068A84 + + thumb_func_start sub_8068BDC +sub_8068BDC: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + ldr r4, _08068CC4 + add sp, r4 + lsls r0, 24 + lsrs r0, 24 + str r0, [sp, 0x220] + movs r1, 0 + mov r0, sp + adds r0, 0x39 +_08068BF6: + strb r1, [r0] + subs r0, 0x1 + cmp r0, sp + bge _08068BF6 + movs r6, 0 + ldr r0, _08068CC8 + mov r8, r0 + movs r7, 0x1 +_08068C06: + movs r0, 0x64 + muls r0, r6 + ldr r1, _08068CCC + adds r0, r1 + mov r2, r8 + ldr r1, [r2] + adds r4, r1, r0 + ldrb r1, [r4] + adds r0, r7, 0 + ands r0, r1 + cmp r0, 0 + beq _08068C50 + movs r3, 0xA + ldrsh r0, [r4, r3] + bl sub_806A564 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0 + bne _08068C50 + adds r4, 0x40 + ldrb r1, [r4] + adds r0, r7, 0 + ands r0, r1 + cmp r0, 0 + beq _08068C50 + ldrb r0, [r4, 0x2] + cmp r0, 0x69 + bne _08068C50 + adds r0, r4, 0 + bl GetMoneyValue + bl AddToTeamMoney + strb r5, [r4, 0x2] + strb r5, [r4, 0x1] + strb r5, [r4] +_08068C50: + adds r6, 0x1 + cmp r6, 0x3 + ble _08068C06 + movs r6, 0 + movs r5, 0x1 +_08068C5A: + ldr r1, _08068CC8 + movs r0, 0x64 + muls r0, r6 + ldr r2, _08068CCC + adds r0, r2 + ldr r1, [r1] + adds r4, r1, r0 + ldrb r1, [r4] + adds r0, r5, 0 + ands r0, r1 + cmp r0, 0 + beq _08068CFE + movs r3, 0xA + ldrsh r0, [r4, r3] + bl sub_806A564 + lsls r0, 24 + cmp r0, 0 + bne _08068CFE + ldr r1, _08068CD0 + adds r0, r1, 0 + ldrh r2, [r4, 0xE] + adds r0, r2 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x2 + bhi _08068C96 + movs r0, 0xBC + lsls r0, 1 + strh r0, [r4, 0xE] +_08068C96: + movs r3, 0xA + ldrsh r0, [r4, r3] + bl sub_806A58C + lsls r0, 24 + cmp r0, 0 + beq _08068CE8 + ldr r0, _08068CD4 + ldr r0, [r0] + ldr r1, _08068CD8 + adds r0, r1 + ldrb r0, [r0] + bl IsLevelResetTo1 + lsls r0, 24 + cmp r0, 0 + beq _08068CDC + movs r2, 0xA + ldrsh r0, [r4, r2] + adds r1, r4, 0 + bl sub_808DFDC + b _08068CFE + .align 2, 0 +_08068CC4: .4byte 0xfffffdd8 +_08068CC8: .4byte gRecruitedPokemonRef +_08068CCC: .4byte 0x00008df8 +_08068CD0: .4byte 0xfffffe87 +_08068CD4: .4byte gDungeon +_08068CD8: .4byte 0x00000644 +_08068CDC: + movs r3, 0xA + ldrsh r0, [r4, r3] + adds r1, r4, 0 + bl xxx_pokemon2_to_pokemonstruct_index_808DF2C + b _08068CFE +_08068CE8: + ldr r0, [sp, 0x220] + cmp r0, 0 + beq _08068CFE + movs r1, 0xE + ldrsh r0, [r4, r1] + bl GetFriendArea + lsls r0, 24 + lsrs r0, 24 + add r0, sp + strb r5, [r0] +_08068CFE: + adds r6, 0x1 + cmp r6, 0x3 + ble _08068C5A + movs r1, 0 +_08068D06: + lsls r0, r1, 24 + lsrs r0, 24 + mov r8, r0 + mov r0, sp + add r0, r8 + ldrb r0, [r0] + adds r1, 0x1 + str r1, [sp, 0x224] + cmp r0, 0 + bne _08068D1C + b _08068F08 +_08068D1C: + mov r0, r8 + add r1, sp, 0x1F0 + movs r2, 0x1 + movs r3, 0x1 + bl sub_8092404 + mov r0, r8 + add r1, sp, 0x214 + movs r2, 0 + movs r3, 0 + bl sub_8092638 + movs r7, 0 + add r1, sp, 0x1F0 + ldrh r0, [r1] + ldr r2, _08068E10 + cmp r0, r2 + beq _08068D60 + ldr r0, _08068E14 + ldr r3, [r0] + adds r5, r2, 0 + add r2, sp, 0x3C + movs r4, 0x58 +_08068D4A: + ldrh r0, [r1] + muls r0, r4 + adds r0, r3, r0 + stm r2!, {r0} + adds r1, 0x2 + adds r7, 0x1 + cmp r7, 0x14 + bgt _08068D60 + ldrh r0, [r1] + cmp r0, r5 + bne _08068D4A +_08068D60: + movs r6, 0 + ldr r2, _08068E14 + mov r10, r2 + movs r3, 0 + mov r9, r3 +_08068D6A: + movs r0, 0x64 + muls r0, r6 + ldr r1, _08068E18 + adds r0, r1 + mov r2, r10 + ldr r1, [r2] + adds r5, r1, r0 + ldrb r1, [r5] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08068DD6 + movs r3, 0xA + ldrsh r0, [r5, r3] + bl sub_806A5A4 + lsls r0, 24 + cmp r0, 0 + beq _08068DD6 + movs r1, 0xE + ldrsh r0, [r5, r1] + bl GetFriendArea + lsls r0, 24 + lsrs r0, 24 + cmp r0, r8 + bne _08068DD6 + ldr r2, [sp, 0x220] + cmp r2, 0 + beq _08068DD6 + add r4, sp, 0x3C + lsls r0, r7, 2 + adds r4, r0 + add r0, sp, 0x90 + movs r1, 0x58 + muls r1, r6 + adds r0, r1 + str r0, [r4] + adds r1, r5, 0 + bl xxx_pokemon2_to_pokemonstruct_808DF44 + ldr r2, [r4] + ldrh r0, [r2] + movs r3, 0x80 + lsls r3, 7 + adds r1, r3, 0 + orrs r0, r1 + strh r0, [r2] + ldr r0, [r4] + mov r1, r9 + strb r1, [r0, 0xC] + ldr r0, [r4] + strb r1, [r0, 0x10] + adds r7, 0x1 +_08068DD6: + adds r6, 0x1 + cmp r6, 0x3 + ble _08068D6A + add r0, sp, 0x214 + movs r2, 0 + ldrsh r0, [r0, r2] + cmp r7, r0 + bgt _08068E1C + cmp r7, 0 + bgt _08068DEC + b _08068F08 +_08068DEC: + add r5, sp, 0x3C + movs r3, 0x80 + lsls r3, 7 + adds r6, r3, 0 + adds r4, r7, 0 +_08068DF6: + ldr r1, [r5] + ldrh r0, [r1] + ands r0, r6 + cmp r0, 0 + beq _08068E06 + adds r0, r1, 0 + bl sub_808D1DC +_08068E06: + adds r5, 0x4 + subs r4, 0x1 + cmp r4, 0 + bne _08068DF6 + b _08068F08 + .align 2, 0 +_08068E10: .4byte 0x0000ffff +_08068E14: .4byte gRecruitedPokemonRef +_08068E18: .4byte 0x00008df8 +_08068E1C: + ldr r0, _08068E78 + mov r1, r8 + movs r2, 0 + bl sub_8092578 + ldr r0, _08068E7C + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + add r4, sp, 0x3C +_08068E34: + add r0, sp, 0x214 + movs r2, 0 + ldrsh r1, [r0, r2] + subs r1, r7, r1 + mov r0, r8 + adds r2, r7, 0 + adds r3, r4, 0 + bl sub_8067A80 + movs r6, 0 + cmp r6, r7 + bge _08068E8E + movs r5, 0x80 + lsls r5, 8 + adds r3, r4, 0 +_08068E52: + ldr r2, [r3] + ldrh r1, [r2] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08068E86 + adds r0, r5, 0 + ands r0, r1 + cmp r0, 0 + beq _08068E86 + ldrb r0, [r2, 0x4] + subs r0, 0x44 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bhi _08068E80 + movs r0, 0x1 + b _08068E82 + .align 2, 0 +_08068E78: .4byte gUnknown_202DE58 +_08068E7C: .4byte gUnknown_80FE1A4 +_08068E80: + movs r0, 0 +_08068E82: + cmp r0, 0 + bne _08068E8E +_08068E86: + adds r3, 0x4 + adds r6, 0x1 + cmp r6, r7 + blt _08068E52 +_08068E8E: + cmp r6, r7 + beq _08068EA2 + ldr r0, _08068F24 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl sub_8052B8C + cmp r0, 0x1 + bne _08068E34 +_08068EA2: + cmp r7, 0 + ble _08068ED4 + movs r3, 0x80 + lsls r3, 8 + mov r9, r3 + adds r3, r4, 0 + movs r0, 0x1 + mov r8, r0 + movs r5, 0 + adds r6, r7, 0 +_08068EB6: + ldr r2, [r3] + ldrh r1, [r2] + mov r0, r8 + ands r0, r1 + cmp r0, 0 + beq _08068ECC + mov r0, r9 + ands r0, r1 + cmp r0, 0 + beq _08068ECC + strh r5, [r2] +_08068ECC: + adds r3, 0x4 + subs r6, 0x1 + cmp r6, 0 + bne _08068EB6 +_08068ED4: + cmp r7, 0 + ble _08068F08 + movs r1, 0x80 + lsls r1, 7 + adds r5, r1, 0 + adds r6, r7, 0 +_08068EE0: + ldr r2, [r4] + ldrh r1, [r2] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08068F00 + adds r0, r1, 0 + ands r0, r5 + cmp r0, 0 + beq _08068F00 + adds r0, r2, 0 + bl sub_808D1DC + ldr r1, [r4] + movs r0, 0 + strh r0, [r1] +_08068F00: + adds r4, 0x4 + subs r6, 0x1 + cmp r6, 0 + bne _08068EE0 +_08068F08: + ldr r1, [sp, 0x224] + cmp r1, 0x39 + bgt _08068F10 + b _08068D06 +_08068F10: + movs r3, 0x8A + lsls r3, 2 + add sp, r3 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08068F24: .4byte gUnknown_80FE20C + thumb_func_end sub_8068BDC + + thumb_func_start sub_8068F28 +sub_8068F28: + push {r4-r7,lr} + movs r6, 0 + ldr r7, _08068F5C +_08068F2E: + movs r0, 0x64 + muls r0, r6 + ldr r1, _08068F60 + adds r0, r1 + ldr r1, [r7] + adds r4, r1, r0 + ldrb r1, [r4] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08068F74 + movs r1, 0xA + ldrsh r0, [r4, r1] + bl sub_806A564 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0 + beq _08068F64 + movs r0, 0 + strh r0, [r4] + b _08068F74 + .align 2, 0 +_08068F5C: .4byte gRecruitedPokemonRef +_08068F60: .4byte 0x00008df8 +_08068F64: + movs r1, 0xA + ldrsh r0, [r4, r1] + bl sub_806A538 + lsls r0, 24 + cmp r0, 0 + beq _08068F74 + strh r5, [r4] +_08068F74: + adds r6, 0x1 + cmp r6, 0x3 + ble _08068F2E + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8068F28 + + thumb_func_start sub_8068F80 +sub_8068F80: + push {r4,r5,lr} + bl GetLeader + adds r5, r0, 0 + ldr r0, _08068FD4 + ldr r4, [r0] + ldr r1, _08068FD8 + adds r0, r4, r1 + movs r1, 0 + strb r1, [r0] + ldr r2, _08068FDC + adds r0, r4, r2 + strb r1, [r0] + adds r2, 0x6 + adds r0, r4, r2 + strb r1, [r0] + adds r0, r4, 0 + adds r0, 0xC0 + str r1, [r0] + cmp r5, 0 + beq _08068FCC + adds r0, r5, 0 + bl GetTileAtEntitySafe + ldrh r0, [r0] + lsrs r0, 5 + movs r1, 0x1 + ands r0, r1 + movs r2, 0xD3 + lsls r2, 3 + adds r1, r4, r2 + strb r0, [r1] + adds r2, 0x1 + adds r1, r4, r2 + strb r0, [r1] + adds r0, r5, 0x4 + bl sub_804AC20 +_08068FCC: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08068FD4: .4byte gDungeon +_08068FD8: .4byte 0x0000066c +_08068FDC: .4byte 0x0000066d + thumb_func_end sub_8068F80 + + thumb_func_start sub_8068FE0 +sub_8068FE0: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x84 + mov r8, r0 + str r2, [sp, 0x74] + lsls r1, 16 + asrs r1, 16 + mov r9, r1 + ldr r7, [r0, 0x70] + bl GetTileAtEntitySafe + adds r4, r0, 0 + ldr r0, [sp, 0x74] + cmp r0, 0 + bne _0806900E + mov r0, sp + bl sub_80457DC + mov r1, sp + str r1, [sp, 0x74] +_0806900E: + ldr r0, [r4, 0x10] + cmp r0, r8 + bne _08069018 + movs r0, 0 + str r0, [r4, 0x10] +_08069018: + mov r2, r8 + movs r3, 0x4 + ldrsh r0, [r2, r3] + movs r3, 0x6 + ldrsh r1, [r2, r3] + bl sub_80402AC + movs r5, 0 + adds r6, r7, 0 + adds r6, 0xC8 + movs r0, 0xB0 + adds r0, r7 + mov r10, r0 + mov r1, r8 + adds r1, 0x22 + str r1, [sp, 0x80] + mov r2, r8 + adds r2, 0x20 + str r2, [sp, 0x7C] + adds r3, r7, 0 + adds r3, 0x40 + str r3, [sp, 0x78] +_08069044: + ldr r0, _080690E4 + ldr r0, [r0] + lsls r1, r5, 2 + ldr r2, _080690E8 + adds r0, r2 + adds r0, r1 + ldr r4, [r0] + cmp r4, 0 + beq _08069072 + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _08069072 + ldr r0, [r4, 0x70] + adds r1, r0, 0 + adds r1, 0x80 + ldr r0, [r1] + cmp r0, r8 + bne _08069072 + movs r0, 0 + str r0, [r1] +_08069072: + adds r5, 0x1 + cmp r5, 0x13 + ble _08069044 + ldrb r0, [r6] + cmp r0, 0x2 + bne _0806908A + ldr r0, _080690E4 + ldr r0, [r0] + ldr r3, _080690EC + adds r0, r3 + movs r1, 0 + strb r1, [r0] +_0806908A: + mov r1, r10 + ldrb r0, [r1] + subs r0, 0x3 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bhi _080690A2 + adds r0, r7, 0 + adds r0, 0x9C + ldr r0, [r0] + bl sub_8076CB4 +_080690A2: + mov r0, r8 + bl sub_8078084 + movs r0, 0 + ldr r2, [sp, 0x80] + strb r0, [r2] + ldr r3, [sp, 0x7C] + strb r0, [r3] + ldr r1, _080690F0 + str r0, [r1] + ldr r1, [sp, 0x78] + ldrb r0, [r1] + cmp r0, 0x41 + bne _080690FC + ldr r3, _080690E4 + ldr r2, [r3] + ldr r1, _080690F4 + adds r0, r2, r1 + ldrb r1, [r0] + cmp r1, 0 + bne _080690FC + movs r0, 0x1 + strb r0, [r2, 0x10] + strh r1, [r7, 0xE] + ldr r0, [r3] + ldr r2, _080690F8 + adds r0, r2 + mov r1, r8 + movs r2, 0 + bl SetMessageArgument + b _08069484 + .align 2, 0 +_080690E4: .4byte gDungeon +_080690E8: .4byte 0x000135cc +_080690EC: .4byte 0x000037fc +_080690F0: .4byte gLeaderPointer +_080690F4: .4byte 0x0000065c +_080690F8: .4byte 0x000005f4 +_080690FC: + ldrb r0, [r7, 0x7] + cmp r0, 0 + bne _08069104 + b _0806928E +_08069104: + movs r0, 0x3C + movs r1, 0x49 + bl sub_803E708 + bl sub_80532B4 + ldr r5, _08069198 + ldr r2, [r5] + ldrb r0, [r2, 0x6] + cmp r0, 0 + bne _080691C8 + ldr r3, _0806919C + adds r0, r2, r3 + ldrb r0, [r0] + cmp r0, 0 + bne _080691E0 + movs r0, 0x87 + lsls r0, 2 + cmp r9, r0 + beq _080691E0 + adds r0, 0x6 + cmp r9, r0 + beq _080691E0 + subs r0, 0x4 + cmp r9, r0 + beq _080691E0 + ldr r1, _080691A0 + adds r0, r2, r1 + ldrb r0, [r0] + cmp r0, 0 + bne _080691E0 + ldr r6, _080691A4 + adds r0, r2, r6 + movs r1, 0 + ldrsb r1, [r0, r1] + cmp r1, 0 + blt _080691E0 + adds r3, 0xA + adds r0, r2, r3 + ldrb r0, [r0] + cmp r0, 0x1 + beq _080691E0 + cmp r1, 0 + ble _080691B4 + ldr r0, _080691A8 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl sub_8052B8C + adds r4, r0, 0 + cmp r4, 0x1 + bne _080691E0 + ldr r0, _080691AC + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + ldr r0, [r5] + strb r4, [r0, 0x4] + ldr r0, [r5] + strb r4, [r0, 0x6] + ldr r0, [r5] + ldr r1, _080691B0 + adds r0, r1 + strb r4, [r0] + ldr r1, [r5] + adds r1, r6 + ldrb r0, [r1] + subs r0, 0x1 + strb r0, [r1] + b _08069484 + .align 2, 0 +_08069198: .4byte gDungeon +_0806919C: .4byte 0x0000066e +_080691A0: .4byte 0x00003a0d +_080691A4: .4byte 0x0000067b +_080691A8: .4byte gUnknown_80FE268 +_080691AC: .4byte gUnknown_80FE28C +_080691B0: .4byte 0x00000654 +_080691B4: + ldr r0, _080691C4 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + b _080691E0 + .align 2, 0 +_080691C4: .4byte gUnknown_80FE2D0 +_080691C8: + movs r1, 0x1 + strb r1, [r2, 0x4] + ldr r0, [r5] + strb r1, [r0, 0x6] + ldr r0, [r5] + ldr r2, _080691DC + adds r0, r2 + strb r1, [r0] + b _08069484 + .align 2, 0 +_080691DC: .4byte 0x00000654 +_080691E0: + mov r0, r9 + ldr r1, [sp, 0x74] + mov r2, r8 + bl sub_8083AB0 + ldr r0, _080691F8 + cmp r9, r0 + bne _0806928E + movs r6, 0 + movs r5, 0 + b _080691FE + .align 2, 0 +_080691F8: .4byte 0x0000021f +_080691FC: + adds r5, 0x1 +_080691FE: + cmp r5, 0x3 + bgt _08069228 + ldr r0, _080692C4 + ldr r0, [r0] + lsls r1, r5, 2 + ldr r3, _080692C8 + adds r0, r3 + adds r0, r1 + ldr r4, [r0] + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _080691FC + ldr r6, [r4, 0x70] + adds r0, r6, 0 + adds r0, 0x40 + ldrb r0, [r0] + cmp r0, 0x41 + bne _080691FC +_08069228: + cmp r6, 0 + beq _0806928E + ldr r5, _080692CC + ldrb r0, [r6, 0xA] + movs r1, 0x64 + muls r1, r0 + ldr r2, _080692D0 + adds r1, r2 + ldr r2, [r5] + adds r4, r2, r1 + adds r1, r6, 0 + bl sub_806C264 + movs r3, 0xA + ldrsh r0, [r4, r3] + bl sub_806A58C + lsls r0, 24 + cmp r0, 0 + beq _0806928A + ldr r0, _080692C4 + ldr r0, [r0] + ldr r1, _080692D4 + adds r0, r1 + ldrb r0, [r0] + bl IsLevelResetTo1 + lsls r0, 24 + cmp r0, 0 + bne _0806926E + movs r2, 0xA + ldrsh r0, [r4, r2] + adds r1, r4, 0 + bl xxx_pokemon2_to_pokemonstruct_index_808DF2C +_0806926E: + bl IsMakuhitaTrainingMaze + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0 + bne _0806928A + movs r3, 0xA + ldrsh r1, [r4, r3] + movs r0, 0x58 + muls r0, r1 + ldr r1, [r5] + adds r0, r1 + adds r0, 0x28 + strb r2, [r0] +_0806928A: + movs r0, 0 + strh r0, [r4] +_0806928E: + ldrb r0, [r7, 0x6] + cmp r0, 0 + beq _080692DC + movs r5, 0 + movs r1, 0xB4 + lsls r1, 1 + adds r0, r7, r1 + movs r2, 0x98 + adds r2, r7 + mov r10, r2 + ldrb r3, [r0] + cmp r5, r3 + bge _0806930A + ldr r4, _080692D8 + subs r1, 0x1 + adds r2, r7, r1 + movs r3, 0 + adds r1, r0, 0 +_080692B2: + ldrb r0, [r2] + adds r0, r5 + adds r0, r4 + strb r3, [r0] + adds r5, 0x1 + ldrb r0, [r1] + cmp r5, r0 + blt _080692B2 + b _0806930A + .align 2, 0 +_080692C4: .4byte gDungeon +_080692C8: .4byte 0x0001357c +_080692CC: .4byte gRecruitedPokemonRef +_080692D0: .4byte 0x00008df8 +_080692D4: .4byte 0x00000644 +_080692D8: .4byte gUnknown_202EE76 +_080692DC: + movs r5, 0 + movs r1, 0xB4 + lsls r1, 1 + adds r0, r7, r1 + movs r2, 0x98 + adds r2, r7 + mov r10, r2 + ldrb r3, [r0] + cmp r5, r3 + bge _0806930A + ldr r4, _0806932C + subs r1, 0x1 + adds r2, r7, r1 + movs r3, 0 + adds r1, r0, 0 +_080692FA: + ldrb r0, [r2] + adds r0, r5 + adds r0, r4 + strb r3, [r0] + adds r5, 0x1 + ldrb r0, [r1] + cmp r5, r0 + blt _080692FA +_0806930A: + ldr r1, [sp, 0x78] + ldrb r0, [r1] + cmp r0, 0x4A + bne _08069338 + ldr r2, _08069330 + ldr r1, [r2] + movs r0, 0x2 + strb r0, [r1, 0x10] + ldr r0, [r2] + ldr r2, _08069334 + adds r0, r2 + mov r1, r8 + movs r2, 0 + bl SetMessageArgument + b _08069352 + .align 2, 0 +_0806932C: .4byte gUnknown_202EE70 +_08069330: .4byte gDungeon +_08069334: .4byte 0x000005f4 +_08069338: + cmp r0, 0x47 + bne _08069352 + ldr r2, _08069494 + ldr r1, [r2] + movs r0, 0x3 + strb r0, [r1, 0x10] + ldr r0, [r2] + ldr r3, _08069498 + adds r0, r3 + mov r1, r8 + movs r2, 0 + bl SetMessageArgument +_08069352: + bl GetLeader + cmp r0, 0 + beq _080693C6 + movs r0, 0x87 + lsls r0, 2 + cmp r9, r0 + beq _080693C6 + ldrb r0, [r7, 0x7] + cmp r0, 0 + bne _080693C6 + ldr r4, _08069494 + ldr r0, [r4] + ldrb r0, [r0, 0x10] + cmp r0, 0 + bne _080693C6 + adds r0, r7, 0 + adds r0, 0xA4 + ldrb r1, [r0] + movs r2, 0 + movs r0, 0xFA + lsls r0, 1 + cmp r9, r0 + bne _08069384 + movs r2, 0x1 +_08069384: + mov r0, r8 + bl sub_8084E00 + ldr r1, _0806949C + adds r0, r1, 0 + ldrh r2, [r7, 0x4] + adds r0, r2 + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0x2 + bhi _080693C6 + bl IsBossFight + lsls r0, 24 + cmp r0, 0 + bne _080693C6 + ldrb r0, [r7, 0x6] + cmp r0, 0 + beq _080693CC + ldr r0, [r4] + ldr r3, _080694A0 + adds r0, r3 + movs r1, 0x1 + strb r1, [r0] + ldr r0, _080694A4 + ldr r1, [r0] + mov r0, r8 + bl sub_805239C + bl sub_803E178 + bl sub_8049ED4 +_080693C6: + ldrb r0, [r7, 0x6] + cmp r0, 0 + bne _08069466 +_080693CC: + ldr r6, _080694A8 + ldrb r0, [r7, 0xA] + movs r1, 0x64 + muls r1, r0 + ldr r2, _080694AC + adds r1, r2 + ldr r2, [r6] + adds r4, r2, r1 + adds r1, r7, 0 + bl sub_806C264 + movs r3, 0xA + ldrsh r0, [r4, r3] + bl sub_806A58C + lsls r0, 24 + cmp r0, 0 + beq _08069462 + ldr r5, _08069494 + ldr r0, [r5] + ldr r1, _080694B0 + adds r0, r1 + ldrb r0, [r0] + bl IsLevelResetTo1 + lsls r0, 24 + cmp r0, 0 + bne _0806940E + movs r2, 0xA + ldrsh r0, [r4, r2] + adds r1, r4, 0 + bl xxx_pokemon2_to_pokemonstruct_index_808DF2C +_0806940E: + bl IsMakuhitaTrainingMaze + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0 + bne _0806942A + movs r3, 0xA + ldrsh r1, [r4, r3] + movs r0, 0x58 + muls r0, r1 + ldr r1, [r6] + adds r0, r1 + adds r0, 0x28 + strb r2, [r0] +_0806942A: + ldrb r1, [r7, 0x7] + negs r0, r1 + orrs r0, r1 + lsrs r1, r0, 31 + ldr r0, [r5] + ldr r2, _080694B4 + adds r0, r2 + ldrb r0, [r0] + cmp r0, 0 + bne _08069448 + ldr r3, [sp, 0x78] + ldrb r0, [r3] + cmp r0, 0x41 + bne _08069448 + movs r1, 0x1 +_08069448: + cmp r1, 0 + bne _08069462 + movs r0, 0xA + ldrsh r1, [r4, r0] + movs r0, 0x58 + muls r1, r0 + ldr r0, _080694A8 + ldr r0, [r0] + adds r1, r0 + ldrh r2, [r1] + ldr r0, _080694B8 + ands r0, r2 + strh r0, [r1] +_08069462: + movs r0, 0 + strh r0, [r4] +_08069466: + mov r1, r10 + ldr r0, [r1] + bl DeletePokemonDungeonSprite + ldr r0, _080694BC + movs r2, 0 + str r2, [r0] + ldr r0, _08069494 + ldr r1, [r0] + movs r0, 0x1 + strb r0, [r1, 0xC] + mov r3, r8 + str r2, [r3] + bl sub_8045ACC +_08069484: + add sp, 0x84 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08069494: .4byte gDungeon +_08069498: .4byte 0x000005f4 +_0806949C: .4byte 0xfffffe5f +_080694A0: .4byte 0x000037fe +_080694A4: .4byte gUnknown_80FA580 +_080694A8: .4byte gRecruitedPokemonRef +_080694AC: .4byte 0x00008df8 +_080694B0: .4byte 0x00000644 +_080694B4: .4byte 0x0000065c +_080694B8: .4byte 0x0000fffd +_080694BC: .4byte gLeaderPointer + thumb_func_end sub_8068FE0 + + thumb_func_start sub_80694C0 +sub_80694C0: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + adds r4, r0, 0 + adds r7, r1, 0 + mov r8, r2 + lsls r3, 24 + lsrs r3, 24 + mov r9, r3 + adds r0, r7, 0 + mov r1, r8 + bl GetTileSafe + mov r10, r0 + ldr r5, [r4, 0x70] + adds r6, r5, 0 + adds r6, 0xB0 + ldrb r0, [r6] + subs r0, 0x3 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bhi _080694FC + adds r0, r5, 0 + adds r0, 0x9C + ldr r0, [r0] + bl sub_8076CB4 +_080694FC: + ldrb r0, [r6] + cmp r0, 0x7 + beq _0806950A + cmp r0, 0x5 + beq _0806950A + cmp r0, 0x2 + bne _08069512 +_0806950A: + adds r0, r4, 0 + adds r1, r4, 0 + bl SendImmobilizeEndMessage +_08069512: + movs r0, 0x4 + ldrsh r2, [r4, r0] + cmp r7, r2 + bne _08069522 + movs r1, 0x6 + ldrsh r0, [r4, r1] + cmp r8, r0 + beq _080695DE +_08069522: + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _08069552 + movs r1, 0x6 + ldrsh r0, [r4, r1] + cmp r0, 0 + blt _08069552 + adds r1, r0, 0 + adds r0, r2, 0 + bl GetTileSafe + adds r1, r0, 0 + ldr r0, [r1, 0x10] + cmp r0, r4 + bne _08069546 + movs r0, 0 + str r0, [r1, 0x10] +_08069546: + movs r1, 0x4 + ldrsh r0, [r4, r1] + movs r2, 0x6 + ldrsh r1, [r4, r2] + bl sub_80402AC +_08069552: + ldrh r0, [r4, 0x4] + strh r0, [r4, 0x8] + ldrh r0, [r4, 0x6] + strh r0, [r4, 0xA] + strh r7, [r4, 0x4] + mov r0, r8 + strh r0, [r4, 0x6] + ldrb r0, [r5, 0x7] + cmp r0, 0 + beq _0806956E + ldr r0, _0806959C + strh r7, [r0] + mov r1, r8 + strh r1, [r0, 0x2] +_0806956E: + mov r2, r10 + str r4, [r2, 0x10] + ldrb r0, [r5, 0x7] + cmp r0, 0 + beq _08069588 + ldr r0, _080695A0 + strh r7, [r0] + mov r1, r8 + strh r1, [r0, 0x2] + ldr r0, _080695A4 + ldr r1, [r0] + movs r0, 0 + strb r0, [r1, 0x1] +_08069588: + adds r0, r7, 0 + mov r1, r8 + bl sub_80402AC + mov r2, r9 + cmp r2, 0 + beq _080695A8 + cmp r2, 0x1 + beq _080695C4 + b _080695CE + .align 2, 0 +_0806959C: .4byte gUnknown_203B410 +_080695A0: .4byte gUnknown_202EE0C +_080695A4: .4byte gDungeon +_080695A8: + ldr r0, [r5, 0x70] + str r0, [r5, 0x74] + ldr r0, [r5, 0x6C] + str r0, [r5, 0x70] + ldr r0, [r5, 0x68] + str r0, [r5, 0x6C] + adds r0, r5, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x1 + beq _080695CE + ldr r0, [r4, 0x8] + str r0, [r5, 0x68] + b _080695CE +_080695C4: + ldr r0, [r4, 0x4] + str r0, [r5, 0x68] + str r0, [r5, 0x6C] + str r0, [r5, 0x70] + str r0, [r5, 0x74] +_080695CE: + mov r1, r10 + ldrb r0, [r1, 0x9] + adds r1, r4, 0 + adds r1, 0x25 + strb r0, [r1] + adds r0, r4, 0 + bl sub_806CF98 +_080695DE: + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80694C0 + + thumb_func_start sub_80695EC +sub_80695EC: + push {r4-r7,lr} + adds r4, r0, 0 + adds r6, r1, 0 + adds r7, r2, 0 + ldr r1, [r4, 0x70] + adds r5, r1, 0 + adds r0, r1, 0 + adds r0, 0xB0 + ldrb r0, [r0] + subs r0, 0x3 + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x1 + bhi _08069612 + adds r0, r1, 0 + adds r0, 0x9C + ldr r0, [r0] + bl sub_8076CB4 +_08069612: + movs r1, 0x4 + ldrsh r0, [r4, r1] + cmp r6, r0 + bne _08069622 + movs r1, 0x6 + ldrsh r0, [r4, r1] + cmp r7, r0 + beq _08069658 +_08069622: + ldrh r0, [r4, 0x4] + strh r0, [r4, 0x8] + ldrh r0, [r4, 0x6] + strh r0, [r4, 0xA] + strh r6, [r4, 0x4] + strh r7, [r4, 0x6] + ldr r0, [r5, 0x70] + str r0, [r5, 0x74] + ldr r0, [r5, 0x6C] + str r0, [r5, 0x70] + ldr r0, [r5, 0x68] + str r0, [r5, 0x6C] + adds r0, r5, 0 + adds r0, 0xE4 + ldrb r0, [r0] + cmp r0, 0x1 + beq _08069648 + ldr r0, [r4, 0x8] + str r0, [r5, 0x68] +_08069648: + adds r0, r6, 0 + adds r1, r7, 0 + bl GetTile + ldrb r1, [r0, 0x9] + adds r0, r4, 0 + adds r0, 0x25 + strb r1, [r0] +_08069658: + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80695EC + + thumb_func_start sub_8069660 +sub_8069660: + push {r4,r5,lr} + adds r4, r0, 0 + ldr r0, [r4, 0x70] + adds r5, r0, 0 + adds r5, 0x46 + ldrb r1, [r5] + adds r0, r4, 0 + bl sub_8070F80 + lsls r0, 24 + cmp r0, 0 + bne _0806967C + movs r0, 0 + b _0806969E +_0806967C: + movs r1, 0x4 + ldrsh r0, [r4, r1] + ldr r1, _080696A4 + ldrb r2, [r5] + lsls r2, 2 + adds r2, r1 + movs r3, 0 + ldrsh r1, [r2, r3] + adds r0, r1 + movs r3, 0x6 + ldrsh r1, [r4, r3] + movs r3, 0x2 + ldrsh r2, [r2, r3] + adds r1, r2 + bl GetTile + ldr r0, [r0, 0x10] +_0806969E: + pop {r4,r5} + pop {r1} + bx r1 + .align 2, 0 +_080696A4: .4byte gAdjacentTileOffsets + thumb_func_end sub_8069660 + + thumb_func_start sub_80696A8 +sub_80696A8: + push {r4,r5,lr} + adds r4, r0, 0 + ldr r0, [r4, 0x70] + adds r5, r0, 0 + adds r5, 0x46 + ldrb r1, [r5] + adds r0, r4, 0 + bl CanAttackInDirection + lsls r0, 24 + cmp r0, 0 + beq _080696F4 + movs r1, 0x4 + ldrsh r0, [r4, r1] + ldr r1, _080696F0 + ldrb r2, [r5] + lsls r2, 2 + adds r2, r1 + movs r3, 0 + ldrsh r1, [r2, r3] + adds r0, r1 + movs r3, 0x6 + ldrsh r1, [r4, r3] + movs r3, 0x2 + ldrsh r2, [r2, r3] + adds r1, r2 + bl GetTile + ldr r1, [r0, 0x10] + cmp r1, 0 + beq _080696F4 + ldr r0, [r1] + cmp r0, 0x1 + bne _080696F4 + adds r0, r1, 0 + b _080696F6 + .align 2, 0 +_080696F0: .4byte gAdjacentTileOffsets +_080696F4: + movs r0, 0 +_080696F6: + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end sub_80696A8 + + thumb_func_start sub_80696FC +sub_80696FC: + push {r4,r5,lr} + sub sp, 0x4 + adds r4, r0, 0 + ldr r3, [r4, 0x70] + ldr r5, _08069764 + adds r3, 0x46 + ldrb r0, [r3] + lsls r0, 2 + adds r0, r5 + ldrh r0, [r0] + ldrh r1, [r4, 0x4] + adds r0, r1 + lsls r0, 16 + lsrs r0, 16 + ldr r1, _08069768 + ldr r2, [sp] + ands r2, r1 + orrs r2, r0 + str r2, [sp] + ldrb r0, [r3] + lsls r0, 2 + adds r0, r5 + ldrh r0, [r0, 0x2] + ldrh r1, [r4, 0x6] + adds r0, r1 + lsls r0, 16 + ldr r1, _0806976C + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + movs r2, 0 + ldrsh r0, [r0, r2] + asrs r1, 16 + bl GetTile + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, sp + bl sub_80705F0 + lsls r0, 24 + cmp r0, 0 + bne _08069770 + ldr r1, [r5, 0x10] + cmp r1, 0 + beq _08069770 + ldr r0, [r1] + cmp r0, 0x1 + bne _08069770 + adds r0, r1, 0 + b _08069772 + .align 2, 0 +_08069764: .4byte gAdjacentTileOffsets +_08069768: .4byte 0xffff0000 +_0806976C: .4byte 0x0000ffff +_08069770: + movs r0, 0 +_08069772: + add sp, 0x4 + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end sub_80696FC + + thumb_func_start sub_806977C +sub_806977C: + push {r4-r7,lr} + sub sp, 0x4 + adds r4, r0, 0 + ldr r0, [r4, 0x70] + ldr r7, _0806982C + adds r5, r0, 0 + adds r5, 0x46 + ldrb r0, [r5] + lsls r0, 2 + adds r0, r7 + ldrh r0, [r0] + ldrh r1, [r4, 0x4] + adds r0, r1 + lsls r0, 16 + lsrs r0, 16 + ldr r1, _08069830 + ldr r2, [sp] + ands r2, r1 + orrs r2, r0 + str r2, [sp] + ldrb r0, [r5] + lsls r0, 2 + adds r0, r7 + ldrh r0, [r0, 0x2] + ldrh r1, [r4, 0x6] + adds r0, r1 + lsls r0, 16 + ldr r1, _08069834 + ands r1, r2 + orrs r1, r0 + str r1, [sp] + mov r0, sp + movs r2, 0 + ldrsh r0, [r0, r2] + asrs r1, 16 + bl GetTile + mov r6, sp + adds r0, r4, 0 + mov r1, sp + bl sub_80705F0 + lsls r0, 24 + cmp r0, 0 + bne _08069838 + ldrb r0, [r5] + lsls r0, 2 + adds r0, r7 + movs r1, 0 + ldrsh r0, [r0, r1] + lsls r0, 1 + ldrh r2, [r4, 0x4] + adds r0, r2 + mov r1, sp + strh r0, [r1] + ldrb r0, [r5] + lsls r0, 2 + adds r0, r7 + movs r1, 0x2 + ldrsh r0, [r0, r1] + lsls r0, 1 + ldrh r2, [r4, 0x6] + adds r0, r2 + strh r0, [r6, 0x2] + mov r0, sp + movs r1, 0 + ldrsh r0, [r0, r1] + movs r2, 0x2 + ldrsh r1, [r6, r2] + bl GetTile + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, sp + bl sub_80705F0 + lsls r0, 24 + cmp r0, 0 + bne _08069838 + ldr r1, [r5, 0x10] + cmp r1, 0 + beq _08069838 + ldr r0, [r1] + cmp r0, 0x1 + bne _08069838 + adds r0, r1, 0 + b _0806983A + .align 2, 0 +_0806982C: .4byte gAdjacentTileOffsets +_08069830: .4byte 0xffff0000 +_08069834: .4byte 0x0000ffff +_08069838: + movs r0, 0 +_0806983A: + add sp, 0x4 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_806977C + + thumb_func_start sub_8069844 +sub_8069844: + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r6, r0, 0 + mov r8, r1 + ldr r5, [r1, 0x70] + adds r0, r6, 0x2 + adds r1, r5, 0 + movs r2, 0 + bl SetMessageArgument_2 + ldrh r0, [r5, 0x2] + strh r0, [r6] + movs r1, 0xE + ldrsh r0, [r5, r1] + str r0, [r6, 0x24] + movs r2, 0x10 + ldrsh r0, [r5, r2] + str r0, [r6, 0x28] + ldrb r0, [r5, 0x9] + str r0, [r6, 0x2C] + ldr r0, [r5, 0x18] + str r0, [r6, 0x30] + movs r2, 0 +_08069874: + adds r1, r6, 0 + adds r1, 0x34 + adds r1, r2 + adds r0, r5, 0 + adds r0, 0x14 + adds r0, r2 + ldrb r0, [r0] + strb r0, [r1] + adds r1, r6, 0 + adds r1, 0x36 + adds r1, r2 + adds r0, r5, 0 + adds r0, 0x16 + adds r0, r2 + ldrb r0, [r0] + strb r0, [r1] + adds r1, r6, 0 + adds r1, 0x16 + adds r1, r2 + adds r0, r5, 0 + adds r0, 0x5C + adds r0, r2 + ldrb r0, [r0] + strb r0, [r1] + adds r1, r6, 0 + adds r1, 0x18 + adds r1, r2 + adds r0, r5, 0 + adds r0, 0x5E + adds r0, r2 + ldrb r0, [r0] + strb r0, [r1] + adds r2, 0x1 + cmp r2, 0x1 + ble _08069874 + ldrb r2, [r5, 0x7] + adds r1, r6, 0 + adds r1, 0x38 + movs r0, 0 + strb r2, [r1] + adds r2, r6, 0 + adds r2, 0x39 + strb r0, [r2] + adds r3, r6, 0 + adds r3, 0x3A + strb r0, [r3] + adds r4, r6, 0 + adds r4, 0x3B + strb r0, [r4] + movs r7, 0x3C + adds r7, r6 + mov r12, r7 + strb r0, [r7] + adds r0, r5, 0 + adds r0, 0x60 + ldrb r1, [r0] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _0806995C + movs r0, 0x8 + ands r0, r1 + cmp r0, 0 + bne _0806995C + adds r1, r5, 0 + adds r1, 0x62 + ldrb r0, [r1] + cmp r0, 0x13 + bne _08069908 + ldr r0, _080699A4 + ldrb r0, [r0] + ldrb r7, [r2] + adds r0, r7 + strb r0, [r2] +_08069908: + ldrb r0, [r1] + cmp r0, 0x2B + bne _08069918 + ldr r0, _080699A8 + ldrb r0, [r0] + ldrb r7, [r2] + adds r0, r7 + strb r0, [r2] +_08069918: + ldrb r0, [r1] + cmp r0, 0x21 + bne _08069928 + ldr r0, _080699AC + ldrb r0, [r0] + ldrb r2, [r3] + adds r0, r2 + strb r0, [r3] +_08069928: + ldrb r0, [r1] + cmp r0, 0x2B + bne _08069938 + ldr r0, _080699A8 + ldrb r0, [r0] + ldrb r7, [r3] + adds r0, r7 + strb r0, [r3] +_08069938: + ldrb r0, [r1] + cmp r0, 0x1E + bne _08069948 + ldr r0, _080699B0 + ldrb r0, [r0] + ldrb r2, [r4] + adds r0, r2 + strb r0, [r4] +_08069948: + ldrb r0, [r1] + cmp r0, 0x22 + bne _0806995C + ldr r0, _080699B4 + ldrb r0, [r0] + mov r7, r12 + ldrb r7, [r7] + adds r0, r7 + mov r1, r12 + strb r0, [r1] +_0806995C: + adds r0, r5, 0 + adds r0, 0x94 + ldrb r1, [r0] + adds r0, r6, 0 + adds r0, 0x54 + strb r1, [r0] + ldr r0, [r5, 0x60] + str r0, [r6, 0x20] + ldrh r0, [r5, 0xC] + movs r1, 0 + strh r0, [r6, 0x3E] + ldr r0, [r5, 0x40] + str r0, [r6, 0x1C] + adds r0, r6, 0 + adds r0, 0x44 + strb r1, [r0] + adds r0, 0x4 + strb r1, [r0] + adds r0, r5, 0 + adds r0, 0x8C + ldr r0, [r0] + str r0, [r6, 0x50] + ldr r0, _080699B8 + ldr r0, [r0] + ldr r2, _080699BC + adds r0, r2 + ldrb r0, [r0] + cmp r0, 0 + beq _080699C0 + adds r0, r5, 0 + bl sub_806A4DC + adds r1, r6, 0 + adds r1, 0x4C + b _080699C6 + .align 2, 0 +_080699A4: .4byte gUnknown_810AC60 +_080699A8: .4byte gUnknown_810AC68 +_080699AC: .4byte gUnknown_810AC62 +_080699B0: .4byte gUnknown_810AC64 +_080699B4: .4byte gUnknown_810AC66 +_080699B8: .4byte gDungeon +_080699BC: .4byte 0x0000065a +_080699C0: + adds r1, r6, 0 + adds r1, 0x4C + movs r0, 0x3 +_080699C6: + strb r0, [r1] + movs r4, 0 + movs r7, 0x10 + ldrsh r0, [r5, r7] + cmp r0, 0 + bge _080699D4 + adds r0, 0x3 +_080699D4: + movs r2, 0xE + ldrsh r1, [r5, r2] + asrs r0, 2 + cmp r1, r0 + bgt _080699E8 + adds r1, r6, 0 + adds r1, 0x58 + movs r0, 0x6 + strb r0, [r1] + movs r4, 0x1 +_080699E8: + ldr r0, _08069A24 + ldr r0, [r0] + ldr r7, _08069A28 + adds r0, r7 + ldrb r0, [r0] + cmp r0, 0 + beq _08069A02 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0xB + strb r1, [r0] + adds r4, 0x1 +_08069A02: + movs r1, 0x9E + lsls r1, 1 + adds r0, r5, r1 + ldr r0, [r0] + bl RoundUpFixedPoint + cmp r0, 0 + bne _08069A38 + ldrb r0, [r5, 0x7] + cmp r0, 0 + beq _08069A2C + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x13 + b _08069A34 + .align 2, 0 +_08069A24: .4byte gDungeon +_08069A28: .4byte 0x00000676 +_08069A2C: + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x3B +_08069A34: + strb r1, [r0] + adds r4, 0x1 +_08069A38: + mov r2, r8 + ldr r0, [r2, 0x70] + movs r7, 0x82 + lsls r7, 1 + adds r2, r0, r7 + ldr r0, [r2] + cmp r0, 0x1 + ble _08069A54 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x1B + strb r1, [r0] + adds r4, 0x1 +_08069A54: + ldr r0, [r2] + cmp r0, 0 + bgt _08069A66 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x28 + strb r1, [r0] + adds r4, 0x1 +_08069A66: + ldr r0, [r5, 0x2C] + cmp r0, 0xFF + ble _08069AAE + ldr r0, [r5, 0x30] + cmp r0, 0xFF + ble _08069AAE + ldr r0, [r5, 0x34] + cmp r0, 0xFF + ble _08069AAE + ldr r0, [r5, 0x38] + cmp r0, 0xFF + ble _08069AAE + movs r1, 0x1C + ldrsh r0, [r5, r1] + cmp r0, 0x9 + ble _08069AAE + movs r2, 0x1E + ldrsh r0, [r5, r2] + cmp r0, 0x9 + ble _08069AAE + movs r7, 0x20 + ldrsh r0, [r5, r7] + cmp r0, 0x9 + ble _08069AAE + movs r1, 0x22 + ldrsh r0, [r5, r1] + cmp r0, 0x9 + ble _08069AAE + movs r2, 0x24 + ldrsh r0, [r5, r2] + cmp r0, 0x9 + ble _08069AAE + movs r7, 0x26 + ldrsh r0, [r5, r7] + cmp r0, 0x9 + bgt _08069ABA +_08069AAE: + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x37 + strb r1, [r0] + adds r4, 0x1 +_08069ABA: + adds r0, r5, 0 + adds r0, 0xA8 + ldrb r1, [r0] + cmp r1, 0 + beq _08069AD2 + cmp r4, 0xB + bgt _08069AD2 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + strb r1, [r0] + adds r4, 0x1 +_08069AD2: + adds r0, r5, 0 + adds r0, 0xAC + ldrb r1, [r0] + cmp r1, 0 + beq _08069AEC + cmp r4, 0xB + bgt _08069AEC + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x6 + strb r1, [r0] + adds r4, 0x1 +_08069AEC: + adds r0, r5, 0 + adds r0, 0xB0 + ldrb r1, [r0] + cmp r1, 0 + beq _08069B06 + cmp r4, 0xB + bgt _08069B06 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0xB + strb r1, [r0] + adds r4, 0x1 +_08069B06: + adds r0, r5, 0 + adds r0, 0xBC + ldrb r1, [r0] + cmp r1, 0 + beq _08069B20 + cmp r4, 0xB + bgt _08069B20 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x13 + strb r1, [r0] + adds r4, 0x1 +_08069B20: + adds r0, r5, 0 + adds r0, 0xC0 + ldrb r1, [r0] + cmp r1, 0 + beq _08069B3A + cmp r4, 0xB + bgt _08069B3A + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x1B + strb r1, [r0] + adds r4, 0x1 +_08069B3A: + adds r0, r5, 0 + adds r0, 0xC4 + ldrb r1, [r0] + cmp r1, 0 + beq _08069B54 + cmp r4, 0xB + bgt _08069B54 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x28 + strb r1, [r0] + adds r4, 0x1 +_08069B54: + adds r0, r5, 0 + adds r0, 0xC8 + ldrb r1, [r0] + cmp r1, 0 + beq _08069B6E + cmp r4, 0xB + bgt _08069B6E + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x37 + strb r1, [r0] + adds r4, 0x1 +_08069B6E: + adds r0, r5, 0 + adds r0, 0xD0 + ldrb r1, [r0] + cmp r1, 0 + beq _08069B88 + cmp r4, 0xB + bgt _08069B88 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x3B + strb r1, [r0] + adds r4, 0x1 +_08069B88: + adds r0, r5, 0 + adds r0, 0xDC + ldrb r1, [r0] + cmp r1, 0 + beq _08069BA2 + cmp r4, 0xB + bgt _08069BA2 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x3E + strb r1, [r0] + adds r4, 0x1 +_08069BA2: + adds r0, r5, 0 + adds r0, 0xE0 + ldrb r1, [r0] + cmp r1, 0 + beq _08069BBC + cmp r4, 0xB + bgt _08069BBC + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x43 + strb r1, [r0] + adds r4, 0x1 +_08069BBC: + adds r0, r5, 0 + adds r0, 0xE4 + ldrb r1, [r0] + cmp r1, 0 + beq _08069BD6 + cmp r4, 0xB + bgt _08069BD6 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x46 + strb r1, [r0] + adds r4, 0x1 +_08069BD6: + adds r0, r5, 0 + adds r0, 0xE8 + ldrb r1, [r0] + cmp r1, 0 + beq _08069BF0 + cmp r4, 0xB + bgt _08069BF0 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x4A + strb r1, [r0] + adds r4, 0x1 +_08069BF0: + adds r0, r5, 0 + adds r0, 0xEC + ldrb r1, [r0] + cmp r1, 0 + beq _08069C0A + cmp r4, 0xB + bgt _08069C0A + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + adds r1, 0x4E + strb r1, [r0] + adds r4, 0x1 +_08069C0A: + movs r1, 0x89 + lsls r1, 1 + adds r0, r5, r1 + ldrb r0, [r0] + cmp r0, 0 + beq _08069C26 + cmp r4, 0xB + bgt _08069C26 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x50 + strb r1, [r0] + adds r4, 0x1 +_08069C26: + adds r0, r5, 0 + adds r0, 0xF0 + ldrb r0, [r0] + cmp r0, 0 + beq _08069C40 + cmp r4, 0xB + bgt _08069C40 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x51 + strb r1, [r0] + adds r4, 0x1 +_08069C40: + adds r0, r5, 0 + adds r0, 0xF1 + ldrb r0, [r0] + cmp r0, 0 + beq _08069C5A + cmp r4, 0xB + bgt _08069C5A + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x52 + strb r1, [r0] + adds r4, 0x1 +_08069C5A: + adds r0, r5, 0 + adds r0, 0xF4 + ldrb r0, [r0] + cmp r0, 0 + beq _08069C74 + cmp r4, 0xB + bgt _08069C74 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x53 + strb r1, [r0] + adds r4, 0x1 +_08069C74: + adds r0, r5, 0 + adds r0, 0xF5 + ldrb r0, [r0] + cmp r0, 0 + beq _08069C8E + cmp r4, 0xB + bgt _08069C8E + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x54 + strb r1, [r0] + adds r4, 0x1 +_08069C8E: + mov r0, r8 + bl ShouldMonsterRunAway + lsls r0, 24 + cmp r0, 0 + beq _08069CAA + cmp r4, 0xB + bgt _08069CAA + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x55 + strb r1, [r0] + adds r4, 0x1 +_08069CAA: + adds r0, r5, 0 + adds r0, 0xFD + ldrb r0, [r0] + cmp r0, 0 + beq _08069CC4 + cmp r4, 0xB + bgt _08069CC4 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x56 + strb r1, [r0] + adds r4, 0x1 +_08069CC4: + mov r0, r8 + movs r1, 0 + bl sub_8070828 + cmp r0, 0x1 + ble _08069CE0 + cmp r4, 0xB + bgt _08069CE0 + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x57 + strb r1, [r0] + adds r4, 0x1 +_08069CE0: + adds r0, r5, 0 + adds r0, 0xF2 + ldrb r0, [r0] + cmp r0, 0 + beq _08069CFA + cmp r4, 0xB + bgt _08069D0E + adds r0, r6, 0 + adds r0, 0x58 + adds r0, r4 + movs r1, 0x58 + strb r1, [r0] + adds r4, 0x1 +_08069CFA: + cmp r4, 0xB + bgt _08069D0E + adds r1, r6, 0 + adds r1, 0x58 + movs r2, 0 +_08069D04: + adds r0, r1, r4 + strb r2, [r0] + adds r4, 0x1 + cmp r4, 0xB + ble _08069D04 +_08069D0E: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8069844 + + thumb_func_start sub_8069D18 +sub_8069D18: + push {r4,r5,lr} + ldr r3, [r1, 0x70] + ldr r4, _08069D48 + adds r3, 0x46 + ldrb r2, [r3] + lsls r2, 2 + adds r2, r4 + ldrh r2, [r2] + ldrh r5, [r1, 0x4] + adds r2, r5 + strh r2, [r0] + ldrb r2, [r3] + lsls r2, 2 + adds r2, r4 + ldrh r2, [r2, 0x2] + ldrh r1, [r1, 0x6] + adds r2, r1 + strh r2, [r0, 0x2] + ldrb r1, [r3] + movs r0, 0x1 + ands r0, r1 + pop {r4,r5} + pop {r1} + bx r1 + .align 2, 0 +_08069D48: .4byte gAdjacentTileOffsets + thumb_func_end sub_8069D18 + + thumb_func_start sub_8069D4C +sub_8069D4C: + push {r4-r6,lr} + sub sp, 0xC + adds r5, r0, 0 + ldr r4, [r1, 0x70] + ldrh r0, [r4, 0x2] + strh r0, [r5] + ldr r0, [r1, 0x4] + str r0, [r5, 0x4] + adds r0, r4, 0 + adds r0, 0xF7 + ldrb r0, [r0] + cmp r0, 0 + beq _08069D6A + ldrh r0, [r4, 0x12] + b _08069D6C +_08069D6A: + ldrh r0, [r4, 0x10] +_08069D6C: + strh r0, [r5, 0x8] + ldrb r0, [r4, 0x9] + strh r0, [r5, 0xE] + movs r0, 0x2 + ldrsh r1, [r4, r0] + ldrb r2, [r4, 0x9] + mov r0, sp + bl GetPokemonLevelData + ldr r0, [sp] + str r0, [r5, 0x10] + ldrb r0, [r4, 0x14] + strb r0, [r5, 0xA] + ldrb r0, [r4, 0x15] + strb r0, [r5, 0xB] + ldrb r0, [r4, 0x16] + strb r0, [r5, 0xC] + ldrb r0, [r4, 0x17] + strb r0, [r5, 0xD] + ldr r0, [r4, 0x60] + str r0, [r5, 0x1C] + adds r1, r5, 0 + adds r1, 0x20 + movs r2, 0x8C + lsls r2, 1 + adds r0, r4, r2 + ldm r0!, {r2,r3,r6} + stm r1!, {r2,r3,r6} + ldm r0!, {r2,r3,r6} + stm r1!, {r2,r3,r6} + ldm r0!, {r2,r3,r6} + stm r1!, {r2,r3,r6} + movs r3, 0x9E + lsls r3, 1 + adds r0, r4, r3 + ldr r0, [r0] + str r0, [r5, 0x14] + movs r6, 0xA0 + lsls r6, 1 + adds r0, r4, r6 + ldr r0, [r0] + str r0, [r5, 0x18] + ldr r0, [r4, 0x3C] + str r0, [r5, 0x44] + add sp, 0xC + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_8069D4C + + .align 2,0 diff --git a/include/code_8077274_1.h b/include/code_8077274_1.h index 08519a955..fd8d3c2eb 100644 --- a/include/code_8077274_1.h +++ b/include/code_8077274_1.h @@ -2,7 +2,7 @@ #define GUARD_CODE_8077274_1_H void MuzzleTarget(struct Entity *pokemon, struct Entity *target); -void sub_8078E18(struct Entity * pokemon, struct Entity * target); +void TransformStatusTarget(struct Entity * pokemon, struct Entity * target); void MobileStatusTarget(struct Entity * pokemon, struct Entity * target); void ExposeStatusTarget(struct Entity * pokemon, struct Entity * target, s16 param_3); void IdentityItemHolders(struct Entity *pokemon, struct Entity *target); diff --git a/include/constants/wonder_mail.h b/include/constants/wonder_mail.h index 39416ca8d..25a5c6c62 100644 --- a/include/constants/wonder_mail.h +++ b/include/constants/wonder_mail.h @@ -65,17 +65,6 @@ enum WonderMailMissionTypes WONDER_MAIL_MISSION_TYPE_UNK6 = 6, }; -enum MissionTypes -{ - MISSION_TYPE_FRIEND_RESCUE, - MISSION_TYPE_FIND_ITEM, - MISSION_TYPE_DELIVER_ITEM, - MISSION_TYPE_RESCUE_CLIENT, - MISSION_TYPE_RESCUE_TARGET, - MISSION_TYPE_ESCORT_CLIENT, - MISSION_TYPE_SPECIAL_MISSION -}; - #define MAIL_STATUS_SUSPENDED 0 diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 450e53f96..0df119344 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -272,7 +272,7 @@ struct Entity // gets assigned the current counter value as its spawn index. /* 0x26 */ u16 spawnGenID; /* 0x28*/ struct EntitySpriteInfo spriteInfo; - struct OpenedFile *unk64; + struct OpenedFile *sprite; s16 unk68; u8 unk6A; u8 unk6B; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index b4b3c0161..174685e37 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -120,7 +120,8 @@ struct Dungeon u8 unk678; u8 unk679; u8 unk67A; - u8 unk67B[0x68A - 0x67B]; + u8 unk67B[0x688 - 0x67B]; + s16 unk688; /* 0x68A */ u8 unk68A; u8 fill68B[0x699 - 0x68B]; u8 unk699; @@ -128,12 +129,15 @@ struct Dungeon /* 0x69C */ struct EntityInfo unk69C[4]; u8 fillEBC[0x363C - 0xEBC]; /* 0x363C */ u8 expYieldRankings[NUM_MONSTERS]; - u8 fill37E3[0x37F4 - 0x37D9]; + u8 fill37D9[0x37F0 - 0x37D9]; + /* 0x37F0 */ u32 unk37F0; /* 0x37F4 */ s32 unk37F4; /* 0x37F8 */ bool8 plusIsActive[2]; // Index 0: Enemy , Index 1: Team /* 0x37FA */ bool8 minusIsActive[2]; // Index 0: Enemy , Index 1: Team /* 0x37FC */ bool8 decoyActive; - u8 fill37FD[0x3904 - 0x37FD]; + u8 fill37FD[0x3800 - 0x37FD]; + s16 unk3800; + u8 fill3802[0x3904 - 0x3802]; /* 0x3904 */ s16 unk3904; u8 fill3906[0x3A08 - 0x3906]; /* 0x3A08 */ u8 unk3A08; @@ -201,7 +205,7 @@ struct Dungeon /* 0x17B3C */ u32 unk17B3C; u8 fill17B40[0x17B44 - 0x17B40]; /* 0x17B44 */ struct OpenedFile *sprites[MONSTER_MAX + 1]; - u8 fill181E4[0x181E8 - 0x181E4]; + /* 0x181E4 */ struct OpenedFile *paletFile; /* 0x181E8 */ struct Position cameraPos; /* 0x181EC */ struct Position cameraPosMirror; /* 0x181F0 */ struct Position cameraPixelPos; diff --git a/ld_script.txt b/ld_script.txt index 153b90dc2..9a925ec21 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -99,7 +99,6 @@ SECTIONS { src/code_801B3C0.o(.text); src/code_801C620.o(.text); src/code_801D760.o(.text); - asm/code_801D760.o(.text); src/options_menu.o(.text); src/hints_menu.o(.text); src/gulpin_shop.o(.text); @@ -199,6 +198,8 @@ SECTIONS { src/status_actions.o(.text); src/move_checks.o(.text); asm/code_805D8C8.o(.text); + src/code_805D8C8.o(.text); + asm/code_805D8C8_1.o(.text); src/targeting.o(.text); src/code_8069E0C.o(.text); asm/code_8069E0C.o(.text); diff --git a/src/code_801D760.c b/src/code_801D760.c index 9e1b6261d..8f2d1954e 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -34,6 +34,32 @@ extern struct unkStruct_203B258 *gUnknown_203B258; extern struct UnkTextStruct2 gUnknown_80DBF88; extern struct UnkTextStruct2 gUnknown_80DBF70; +struct unkStruct_811BAF4 +{ + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + u8 *text; +}; + +extern struct unkStruct_811BAF4 gUnknown_811BAF4[10]; + +struct unkStruct_81188F0 +{ + u8 *text1; + u8 *text2; + u8 *text3; + u8 *text4; + u32 unk1; + u32 unk2; + u32 unk3; +}; + +extern struct unkStruct_81188F0 gUnknown_81188F0[10]; +extern u8 gUnknown_80DBFA0[]; // Field + + extern void sub_801DB54(); extern void sub_801DBD4(); @@ -576,3 +602,99 @@ void sub_801DB0C(void) gUnknown_203B258 = NULL; } } + +NAKED +void sub_801DB54(void) +{ + asm_unified( + "\tpush {r4,lr}\n" + "\tldr r4, _0801DBD0\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9C\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9D\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9E\n" + "\tmovs r1, 0x8\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x9F\n" + "\tstrb r2, [r0]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x3C\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\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" +"_0801DBD0: .4byte gUnknown_203B258"); +} + +void sub_801DBD4(void) +{ + struct unkStruct_811BAF4 *temp; + struct unkStruct_81188F0 *temp2; + s32 y; +#ifndef NONMATCHING + register s32 x asm("r4"); +#else + register s32 x; +#endif + s16 index; + int counter; + + sub_8008C54(gUnknown_203B258->unk34); + sub_80073B8(gUnknown_203B258->unk34); + xxx_call_draw_string(10,0,gUnknown_80DBFA0,gUnknown_203B258->unk34,0); // Field + x = gUnknown_203B258->unk9C[2] * 8 - 2; + sub_8012BC4(x,0,gUnknown_203B258->input.unk1E + 1,2,7,gUnknown_203B258->unk34); + for(counter = 0; counter < gUnknown_203B258->input.unk1A; counter++) + { + index = gUnknown_203B258->input.unk1E * gUnknown_203B258->input.unk1C + counter; + temp = &gUnknown_811BAF4[index]; + temp2 = &gUnknown_81188F0[temp->unk4]; + y = sub_8013800(&gUnknown_203B258->input, counter); + xxx_call_draw_string(8,y,temp2->text1,gUnknown_203B258->unk34,0); + y = sub_8013800(&gUnknown_203B258->input,counter); + xxx_call_draw_string(0x3e,y,temp->text,gUnknown_203B258->unk34,0); + } + sub_80073E0(gUnknown_203B258->unk34); +} diff --git a/src/code_8057824.c b/src/code_8057824.c index 26a94fa35..421e933e5 100644 --- a/src/code_8057824.c +++ b/src/code_8057824.c @@ -502,18 +502,18 @@ bool8 sub_8057C88(struct Entity *pokemon, struct Entity *target, struct Move * m return flag; } -s32 sub_8057CD0(struct Entity * pokemon, struct Entity * target, struct Move * move, u32 param_4) +bool32 sub_8057CD0(struct Entity * pokemon, struct Entity * target, struct Move * move, u32 param_4) { - u32 uVar1; - s32 iVar2; + u32 weather; + s32 flag; - uVar1 = GetApparentWeather(pokemon); - iVar2 = sub_80556BC(pokemon,target,gUnknown_80F51E4[uVar1],move, - gUnknown_80F51EC[uVar1],param_4); - if (iVar2 != 0) { - iVar2 = 1; + weather = GetApparentWeather(pokemon); + flag = sub_80556BC(pokemon,target,gUnknown_80F51E4[weather],move, + gUnknown_80F51EC[weather],param_4); + if (flag) { + flag = TRUE; } - return iVar2; + return flag; } bool8 WhirlpoolMoveAction(struct Entity * pokemon, struct Entity * target, struct Move * move, u32 param_4) diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c new file mode 100644 index 000000000..e0c374ac9 --- /dev/null +++ b/src/code_805D8C8.c @@ -0,0 +1,139 @@ +#include "global.h" +#include "file_system.h" +#include "dungeon_global_data.h" +#include "dungeon_util.h" + +extern struct FileArchive gMonsterFileArchive; +extern u8 gUnknown_8106EA0[]; // ax%03d +extern int sprintf(char *, const char *, ...); +void sub_8068838(s16, bool32); +void sub_80688B0(void); +void sub_8068884(void); + +void sub_8068768(void) +{ + struct Entity *entity; + int index; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeon->allPokemon[index]; + if ((entity != NULL) && EntityExists(entity)) { + sub_8068838(entity->info->apparentID, FALSE); + } + } +} + +void sub_80687AC(void) +{ + gDungeon->unk37F0 = 0x400; + gDungeon->unk37F4 = 0xA; +} + +struct OpenedFile *sub_80687D0(s16 _id) +{ + s32 id = _id; + return gDungeon->sprites[id]; +} + +// 85.94 matching (Seth) +// https://decomp.me/scratch/CI98Y +// +#ifdef NONMATCING +void sub_80687EC(s32 _id) +{ + u8 name [12]; + s16 id = _id; + + if (gDungeon->sprites[id] == NULL) { + sprintf(name,gUnknown_8106EA0); + gDungeon->sprites[id] = OpenFileAndGetFileDataPtr(name,&gMonsterFileArchive); + } +} +#else +NAKED +void sub_80687EC(s32 _id) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tsub sp, 0xC\n" + "\tlsls r0, 16\n" + "\tasrs r2, r0, 16\n" + "\tldr r5, _08068828\n" + "\tldr r0, [r5]\n" + "\tlsls r4, r2, 2\n" + "\tldr r1, _0806882C\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tldr r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _08068820\n" + "\tldr r1, _08068830\n" + "\tmov r0, sp\n" + "\tbl sprintf\n" + "\tldr r1, _08068834\n" + "\tmov r0, sp\n" + "\tbl OpenFileAndGetFileDataPtr\n" + "\tldr r1, [r5]\n" + "\tldr r2, _0806882C\n" + "\tadds r1, r2\n" + "\tadds r1, r4\n" + "\tstr r0, [r1]\n" +"_08068820:\n" + "\tadd sp, 0xC\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08068828: .4byte gDungeon\n" +"_0806882C: .4byte 0x00017b44\n" +"_08068830: .4byte gUnknown_8106EA0\n" +"_08068834: .4byte gMonsterFileArchive"); +} +#endif + +void sub_8068838(s16 id, bool32 _param_2) +{ + s32 id_s32 = id; + bool8 param_2 = _param_2; + + + if ((param_2 == 0) && + ((id_s32 == MONSTER_DEOXYS_NORMAL) || (id_s32 == MONSTER_DEOXYS_ATTACK) || (id_s32 == MONSTER_DEOXYS_DEFENSE) || (id_s32 == MONSTER_DEOXYS_SPEED))) { + sub_80688B0(); + } + else { + sub_80687EC(id_s32); + if ((u16)(id_s32 - MONSTER_CASTFORM) < 4) { + sub_8068884(); + } + } +} + +void sub_8068884(void) +{ + sub_80687EC(MONSTER_CASTFORM); + sub_80687EC(MONSTER_CASTFORM_SNOWY); + sub_80687EC(MONSTER_CASTFORM_SUNNY); + sub_80687EC(MONSTER_CASTFORM_RAINY); +} + +void sub_80688B0(void) +{ + sub_80687EC(gDungeon->unk3800); +} + +void CloseAllSpriteFiles(void) +{ + s32 index; + + for(index = 0; index < 0x1A8; index++) + { + if (gDungeon->sprites[index] != NULL) { + CloseFile(gDungeon->sprites[index]); + gDungeon->sprites[index] = NULL; + } + } +} + + diff --git a/src/code_806CD90.c b/src/code_806CD90.c index 9c5df0198..b065fb93c 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -15,6 +15,7 @@ extern void sub_806CCB4(struct Entity *, u8); extern void sub_803E46C(u32); extern bool8 sub_808DA44(s32 a1_, u32 a2_); extern u32 sub_806CF98(struct Entity *); +extern struct OpenedFile *sub_80687D0(s16); void sub_806CDD4(struct Entity *, u8, u32); extern const u8 gUnknown_8106EEF[]; @@ -71,7 +72,7 @@ void sub_806CCB4(struct Entity *entity, u8 param_2) sVar1 = entity->unk68; if (info->waitingStatus != STATUS_DECOY && !flag) - sub_80053AC(&entity->spriteInfo, entity->unk64, entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE); + sub_80053AC(&entity->spriteInfo, entity->sprite, entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE); else sub_80053AC(&entity->spriteInfo, sub_80687D0(MONSTER_DECOY), entity->unk6A, entity->direction, sVar1, Rand32Bit() & 3, FALSE); diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index 358133b1c..e46e3f954 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -174,6 +174,7 @@ extern void EntityUpdateStatusSprites(struct Entity *); extern void sub_8042A74(struct Entity *r0); extern void sub_807EC28(bool8); extern s32 sub_8069F54(struct Entity *param_1, s16 param_2); +extern struct OpenedFile *sub_80687D0(s16); extern void sub_806A898(struct Entity *, u32, u32); extern void HealTargetHP(struct Entity *pokemon, struct Entity *r1, s16, s16, u32); extern void sub_806CE68(struct Entity *, s32); @@ -236,7 +237,7 @@ void MuzzleTarget(struct Entity *pokemon, struct Entity *target) } } -void sub_8078E18(struct Entity * pokemon, struct Entity * target) +void TransformStatusTarget(struct Entity * pokemon, struct Entity * target) { s16 species; s32 iVar5; @@ -279,7 +280,7 @@ void sub_8078E18(struct Entity * pokemon, struct Entity * target) sub_80522F4(pokemon, target, *gUnknown_80FBEE4); else { entityInfo->apparentID = apparentID; - target->unk64 = iVar9; + target->sprite = iVar9; entityInfo->transformStatus = STATUS_TRANSFORMED; entityInfo->transformStatusTurns = CalculateStatusTurns(target, gUnknown_80F4EFC, TRUE) + 1; sub_806CF98(target); @@ -480,7 +481,7 @@ void RestorePPTarget(struct Entity * pokemon,struct Entity * target, s32 param_3 { movePtr = &entityInfo->moves[index]; movePtr1 = movePtr; - if ((movePtr->moveFlags & MOVE_FLAG_EXISTS) != 0) { + if ((movePtr->moveFlags & MOVE_FLAG_EXISTS)) { PP = movePtr->PP; basePP = GetMoveBasePP(movePtr1); if (PP < basePP) { @@ -1124,7 +1125,7 @@ void sub_8079F20(struct Entity * pokemon, struct Entity * target, u8 param_3, u8 if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags2 & MOVE_FLAG_EXISTS)) { bVar8 = TRUE; moveUnsealed = TRUE; - move->moveFlags2 &= 0xfe; + move->moveFlags2 &= ~(MOVE_FLAG_EXISTS); } } @@ -1158,8 +1159,8 @@ void sub_807A0CC(struct Entity * pokemon, struct Entity * target) for(index = 0; index < MAX_MON_MOVES; index++) { move = &entityInfo->moves[index]; - if ((move->moveFlags & MOVE_FLAG_EXISTS) != 0) { - move->moveFlags2 = move->moveFlags2 & 0xfe; + if ((move->moveFlags & MOVE_FLAG_EXISTS)) { + move->moveFlags2 &= ~(MOVE_FLAG_EXISTS); } } EntityUpdateStatusSprites(target); @@ -1506,7 +1507,7 @@ void SendTransformEndMessage(struct Entity * pokemon, struct Entity *target) break; case STATUS_TRANSFORMED: entityInfo->apparentID = sub_8069F54(target, entityInfo->id); - target->unk64 = sub_80687D0(entityInfo->apparentID); + target->sprite = sub_80687D0(entityInfo->apparentID); uVar3 = sub_806CEBC(target); sub_806CCB4(target,uVar3); SendMessage(target,*gUnknown_80FAB6C); diff --git a/src/status_actions.c b/src/status_actions.c index 56e030059..216a9253c 100644 --- a/src/status_actions.c +++ b/src/status_actions.c @@ -218,7 +218,7 @@ bool8 TransformMoveAction(struct Entity * pokemon, struct Entity * target, struc } else { move->PP = 0; - sub_8078E18(pokemon,target); + TransformStatusTarget(pokemon,target); return TRUE; } } From 7350b4e5ea333fa517b0c822489c050060eed12e Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 21 Aug 2023 08:43:26 -0700 Subject: [PATCH 12/14] decomp two more funcs --- asm/dungeon_2.s | 61 +--------------------------------------- asm/dungeon_music.s | 35 ----------------------- include/dungeon_random.h | 3 ++ ld_script.txt | 1 - src/dungeon_2_1.c | 28 ++++++++++++++++++ src/dungeon_music.c | 8 ------ src/dungeon_random.c | 24 ++++++++++++++++ 7 files changed, 56 insertions(+), 104 deletions(-) delete mode 100644 asm/dungeon_music.s diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s index 3891e3998..e69b537df 100644 --- a/asm/dungeon_2.s +++ b/asm/dungeon_2.s @@ -597,63 +597,4 @@ _0809080E: bx r1 thumb_func_end sub_809034C - thumb_func_start sub_8090820 -sub_8090820: - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - movs r4, 0 - ldr r0, _08090868 - ldr r0, [r0] - mov r12, r0 - movs r7, 0x1 -_08090830: - movs r0, 0x58 - muls r0, r4 - mov r2, r12 - adds r1, r2, r0 - ldrh r2, [r1] - adds r0, r7, 0 - ands r0, r2 - cmp r0, 0 - beq _08090874 - lsrs r0, r2, 1 - ands r0, r7 - cmp r0, 0 - beq _08090874 - movs r3, 0 - movs r5, 0x1 - adds r2, r1, 0 - adds r2, 0x2C -_08090852: - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0809086C - ldrh r0, [r2, 0x2] - cmp r0, r6 - bne _0809086C - movs r0, 0x1 - b _08090880 - .align 2, 0 -_08090868: .4byte gRecruitedPokemonRef -_0809086C: - adds r2, 0x8 - adds r3, 0x1 - cmp r3, 0x3 - ble _08090852 -_08090874: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _08090830 - movs r0, 0 -_08090880: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8090820 - - .align 2,0 + .align 2,0 diff --git a/asm/dungeon_music.s b/asm/dungeon_music.s deleted file mode 100644 index d5182810e..000000000 --- a/asm/dungeon_music.s +++ /dev/null @@ -1,35 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80840A4 -sub_80840A4: - ldr r3, _080840C8 - ldr r0, [r3] - ldr r2, _080840CC - adds r1, r0, 0 - muls r1, r2 - adds r1, 0x1 - lsrs r0, r1, 16 - muls r1, r2 - adds r1, 0x1 - str r1, [r3] - ldr r2, _080840D0 - ands r1, r2 - orrs r0, r1 - ldr r1, _080840D4 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - bx lr - .align 2, 0 -_080840C8: .4byte gUnknown_203B458 -_080840CC: .4byte 0x5d588b65 -_080840D0: .4byte 0xffff0000 -_080840D4: .4byte 0x00ffffff - thumb_func_end sub_80840A4 - - .align 2,0 diff --git a/include/dungeon_random.h b/include/dungeon_random.h index 29720bbbe..48adf47e7 100644 --- a/include/dungeon_random.h +++ b/include/dungeon_random.h @@ -1,6 +1,9 @@ #ifndef GUARD_DUNGEON_RANDOM_H #define GUARD_DUNGEON_RANDOM_H +void sub_808408C(u32 param_1); +u32 sub_80840A4(void); +void InitDungeonRNG(u32 value); s32 DungeonRand16Bit(void); s32 DungeonRandInt(s32 cap); s32 DungeonRandRange(s32 low, s32 high); diff --git a/ld_script.txt b/ld_script.txt index 9a925ec21..453f23870 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -242,7 +242,6 @@ SECTIONS { src/dungeon_leader.o(.text); asm/code_8083654.o(.text); src/dungeon_music.o(.text); - asm/dungeon_music.o(.text); src/dungeon_random.o(.text); src/code_808417C.o(.text); asm/code_808417C.o(.text); diff --git a/src/dungeon_2_1.c b/src/dungeon_2_1.c index 3e014030e..74807c2ae 100644 --- a/src/dungeon_2_1.c +++ b/src/dungeon_2_1.c @@ -13,6 +13,34 @@ extern u8 *gUnknown_8108084[]; s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c +bool8 sub_8090820(u16 moveID) +{ + struct PokemonStruct *pokeStruct; + struct Move *move; + s32 moveIndex; + s32 index; + s32 one; + + for(index = 0; index < 0x19d; index++) + { + pokeStruct = &gRecruitedPokemonRef->pokemon[index]; + one = 1; + if (pokeStruct->unk0 & 1) + { + if(pokeStruct->unk0 >> 1 & one){ + for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + move = &pokeStruct->moves[moveIndex]; + if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->id == moveID)) { + return TRUE; + } + } + } + } + } + return FALSE; +} + void sub_8090888(u8 *param_1, u8 *param_2) { s32 iVar3; diff --git a/src/dungeon_music.c b/src/dungeon_music.c index 3e5a4b51d..0f298e8c4 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -17,8 +17,6 @@ struct unkStruct_202EE10 extern struct unkStruct_202EE10 gUnknown_202EE10; -EWRAM_DATA_2 u32 gUnknown_203B458 = {0}; - extern u8 *gUnknown_80FE6F4[]; extern u8 gUnknown_810AC60; // 0xC extern u8 gUnknown_810AC62; // 0xC @@ -355,9 +353,3 @@ void UpdateDungeonMusic(void) } } } - - -void sub_808408C(u32 param_1) -{ - gUnknown_203B458 = (1 | param_1) & 0xffffff; -} diff --git a/src/dungeon_random.c b/src/dungeon_random.c index bcfc04e6e..0705828f3 100644 --- a/src/dungeon_random.c +++ b/src/dungeon_random.c @@ -2,6 +2,30 @@ #include "dungeon_random.h" EWRAM_DATA_2 u32 gDungeonRngState = {0}; +EWRAM_DATA_2 u32 gUnknown_203B458 = {0}; + +void sub_808408C(u32 param_1) +{ + gUnknown_203B458 = (1 | param_1) & 0xffffff; +} + +u32 sub_80840A4(void) +{ + u32 r0; + u32 r1; + + r1 = gUnknown_203B458 * 0x5d588b65; + r1++; + r0 = r1 >> 16; + r1 *= 0x5d588b65; + r1++; + gUnknown_203B458 = r1; + r1 &= 0xffff0000; + r0 |= r1; + r0 &= 0x0ffffff; + r0 |= 1; + return r0; +} void InitDungeonRNG(u32 value) { From 9e5619529ddf364dc2cd27b2ca5c979ee473ddc3 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 21 Aug 2023 09:06:01 -0700 Subject: [PATCH 13/14] finish decomping friend_area_action_menu --- ld_script.txt | 2 -- src/friend_area_action_menu.c | 42 +++++++++++------------ src/friend_area_action_menu_1.c | 59 --------------------------------- 3 files changed, 21 insertions(+), 82 deletions(-) delete mode 100644 src/friend_area_action_menu_1.c diff --git a/ld_script.txt b/ld_script.txt index 453f23870..3dad4f23f 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -116,7 +116,6 @@ SECTIONS { src/friend_list_menu.o(.text); src/party_list_menu.o(.text); src/friend_area_action_menu.o(.text); - src/friend_area_action_menu_1.o(.text); src/wonder_mail.o(.text); src/thank_you_wonder_mail.o(.text); src/wonder_mail_2.o(.text); @@ -393,7 +392,6 @@ SECTIONS { src/friend_list_menu.o(.rodata); src/party_list_menu.o(.rodata); src/friend_area_action_menu.o(.rodata); - src/friend_area_action_menu_1.o(.rodata); src/wonder_mail.o(.rodata); src/thank_you_wonder_mail.o(.rodata); src/wonder_mail_2.o(.rodata); diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index 4593d5e29..beb261a4d 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -14,19 +14,22 @@ #include "code_801EE10_1.h" #include "code_801B3C0.h" #include "event_flag.h" +#include "moves.h" extern struct unkStruct_203B2BC *gUnknown_203B2BC; -extern void sub_8027D40(u32, struct BulkItem *); +extern u8 *gUnknown_80D4920[]; +extern u8 *gUnknown_80D4928[]; +extern u8 *gUnknown_80D4970[]; + extern void sub_8024458(s16, u32); extern void sub_801BEEC(s16); -extern void GetLinkedSequence(u32, struct Move *, u16*); extern void sub_801F808(u16*); -extern void sub_8027794(); extern void sub_801F1B0(u32, u32); -extern void unk_CopyMoves4To8(struct Move *, struct Move *); extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32); +void sub_8027D40(u32, struct BulkItem *heldItem); +void sub_8027794(void); extern void SetFriendAreaActionMenuState(u32); extern void sub_802719C(); extern void sub_8027274(); @@ -49,6 +52,7 @@ extern u8 sub_8027DCC(struct PokemonStruct *); extern u32 sub_801EF38(u8 r0); extern void sub_801F214(); +extern void SetFriendAreaActionMenuState(u32); extern void PlaySound(u32); extern void nullsub_104(); extern void sub_8099690(u32); @@ -145,6 +149,18 @@ ALIGNED(4) const u8 gUnknown_80DD8A0[] = _( ALIGNED(4) const u8 gUnknown_80DD8D0[] = _( "{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n{CENTER_ALIGN}sent to storage."); +ALIGNED(4) const u8 gFriendActionStandby[] = "Stand By"; +ALIGNED(4) const u8 gFriendActionMakeLeader[] = "Make Leader"; +ALIGNED(4) const u8 gFriendActionJoinTeam[] = "Join Team"; +ALIGNED(4) const u8 gFriendActionSayFarewell[] = "Say Farewell"; +ALIGNED(4) const u8 gFriendActionGive[] = "Give"; +ALIGNED(4) const u8 gFriendActionTake[] = "Take"; +ALIGNED(4) const u8 gFriendActionSummary[] = "Summary"; +ALIGNED(4) const u8 gFriendActionMoves[] = "Moves"; +ALIGNED(4) const u8 gFriendActionCheckIQ[] = "Check IQ"; + +ALIGNED(4) const u8 gUnknown_80DD958[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} "); +static const u8 filler[] = "pksdir0"; u32 sub_8027074(void) { @@ -326,21 +342,6 @@ void sub_8027274(void) } } -extern u8 gFriendActionStandby[]; -extern u8 gFriendActionMakeLeader[]; -extern u8 gFriendActionJoinTeam[]; -extern u8 gFriendActionSayFarewell[]; -extern u8 gFriendActionGive[]; -extern u8 gFriendActionTake[]; -extern u8 gFriendActionSummary[]; -extern u8 gFriendActionMoves[]; -extern u8 gFriendActionCheckIQ[]; -extern u8 *gUnknown_80D4920[]; -extern u8 *gUnknown_80D4928[]; -extern u8 *gUnknown_80D4970[]; -extern u8 gUnknown_80DD958[]; - - void CreateFriendActionMenu(void) { int index; @@ -413,7 +414,6 @@ void CreateFriendActionMenu(void) gUnknown_203B2BC->menuItems[loopMax].text = 0; gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE; - for(index = 0; index < loopMax; index++) { if(gUnknown_203B2BC->unk16C[index] == 0) @@ -452,7 +452,6 @@ void sub_80276A8(void) gUnknown_203B2BC->menuItems[loopMax].text = 0; gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE; - for(index = 0; index < loopMax; index++) { if(gUnknown_203B2BC->unk16C[index] == 0) @@ -918,3 +917,4 @@ void sub_8027EB8(void) break; } } + diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c deleted file mode 100644 index bd7ef4ba0..000000000 --- a/src/friend_area_action_menu_1.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "global.h" -#include "constants/dungeon.h" -#include "memory.h" -#include "text2.h" -#include "item.h" -#include "team_inventory.h" -#include "pokemon.h" -#include "friend_area_action_menu.h" -#include "menu_input.h" -#include "kecleon_bros.h" -#include "code_80130A8.h" -#include "code_801EE10_1.h" -#include "code_801B3C0.h" -#include "code_80118A4.h" -#include "event_flag.h" - -extern struct unkStruct_203B2BC *gUnknown_203B2BC; -extern struct TeamInventory *gTeamInventoryRef; - -extern u32 sub_801EF38(u8 r0); -extern void sub_801F214(); - -extern void SetFriendAreaActionMenuState(u32); -extern void nullsub_104(); -extern void sub_8099690(u32); - -extern void sub_8027EB8(); -extern void sub_808D31C(struct PokemonStruct *); -extern struct PokemonStruct *sub_808D3F8(void); -extern struct PokemonStruct *sub_808D3BC(void); -extern u32 sub_801F890(void); -extern void sub_801F8D0(void); -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); - -extern bool8 sub_808D750(s16 index_); -extern struct PokemonStruct *GetPlayerPokemonStruct(void); -extern void sub_808ED00(); - -ALIGNED(4) const u8 gFriendActionStandby[] = "Stand By"; -ALIGNED(4) const u8 gFriendActionMakeLeader[] = "Make Leader"; -ALIGNED(4) const u8 gFriendActionJoinTeam[] = "Join Team"; -ALIGNED(4) const u8 gFriendActionSayFarewell[] = "Say Farewell"; -ALIGNED(4) const u8 gFriendActionGive[] = "Give"; -ALIGNED(4) const u8 gFriendActionTake[] = "Take"; -ALIGNED(4) const u8 gFriendActionSummary[] = "Summary"; -ALIGNED(4) const u8 gFriendActionMoves[] = "Moves"; -ALIGNED(4) const u8 gFriendActionCheckIQ[] = "Check IQ"; - -ALIGNED(4) const u8 gUnknown_80DD958[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} "); -static const u8 filler[] = "pksdir0"; From 5e6a668bbdd5edb4a2751aa7796f0a07ce6918ec Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 30 Aug 2023 19:38:28 -0700 Subject: [PATCH 14/14] address review comments --- include/pokemon_3.h | 2 +- src/code_801D760.c | 2 +- src/friend_area_action_menu.c | 2 +- src/pokemon_3.c | 12 ++++++------ src/rescue_password_menu.c | 2 +- src/wigglytuff_shop.c | 4 ---- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 84d2c49fe..eb62866e4 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -10,7 +10,7 @@ struct EvolveStatus s16 targetEvolveSpecies; }; -bool8 HasRecruitedMon(s16 species_); +bool8 HasRecruitedMon(s16 species); s16 GetBaseSpecies(s16 index); s16 GetBaseSpeciesNoUnown(s16 index); bool8 TacticsTargetLeader(u8 tactic); diff --git a/src/code_801D760.c b/src/code_801D760.c index 8f2d1954e..b1047f1e8 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -676,7 +676,7 @@ void sub_801DBD4(void) #ifndef NONMATCHING register s32 x asm("r4"); #else - register s32 x; + s32 x; #endif s16 index; int counter; diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index beb261a4d..dac7208c6 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -533,7 +533,7 @@ void sub_80278B4(void) case FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM: if (sub_808D750(gUnknown_203B2BC->targetPoke)) { #ifdef NONMATCHING - pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + pokeStruct1 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; #else register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]); struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; diff --git a/src/pokemon_3.c b/src/pokemon_3.c index f686e4464..a4f7e54fb 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -104,14 +104,14 @@ void sub_808E6F4(struct unkStruct_808E6F4* a1) a1->unk2 = 2; } -bool8 HasRecruitedMon(s16 species_) { - s32 species = species_; +bool8 HasRecruitedMon(s16 species) { + s32 species_s32 = species; s32 i = 0; struct PokemonStruct *pokemon = gRecruitedPokemonRef->pokemon; for (i = 0; i < NUM_MONSTERS; i++) { if (((u8)pokemon->unk0 & 1)) { - if(pokemon->speciesNum == species) + if(pokemon->speciesNum == species_s32) return TRUE; } pokemon++; @@ -928,7 +928,7 @@ void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatu #endif evolveStatus->evolutionConditionStatus = 0; - for(index = MONSTER_BULBASAUR; index < 0x1A8; index++) + for(index = MONSTER_BULBASAUR; index <= MONSTER_MAX; index++) { if ((s16)index == MONSTER_ALAKAZAM) { GetPokemonEvolveConditions(MONSTER_ALAKAZAM, &evolveConditions); @@ -939,11 +939,11 @@ void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatu if(((evolveConditions.preEvolution.evolveType != EVOLVE_TYPE_NONE) && (param_1->speciesNum == evolveConditions.preEvolution.evolveFrom))) break; }; - if (index == 0x1a8) { + if (index == MONSTER_MAX + 1) { evolveStatus->evolutionConditionStatus = EVOLUTION_NO_MORE; } else { - for(index = MONSTER_BULBASAUR, defaultReason = EVOLUTION_LACK_ITEM; index < 0x1A8; index++) + for(index = MONSTER_BULBASAUR, defaultReason = EVOLUTION_LACK_ITEM; index <= MONSTER_MAX; index++) { evolFlag = FALSE; index2 = (s16)index; diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 160f7986e..fd7c50a36 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -636,7 +636,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *para { if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) || (param_3->unk4.dungeon.floor >= GetDungeonFloorCount(param_3->unk4.dungeon.id)) || - (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || + (param_3->clientSpecies == MONSTER_NONE) || (MONSTER_MAX < param_3->clientSpecies) || (IsInvalidItemReward(param_3->item.id))) { return PASSWORD_ENTRY_INCORRECT_PASSWORD; } diff --git a/src/wigglytuff_shop.c b/src/wigglytuff_shop.c index c0bdc2aa3..925c4597b 100644 --- a/src/wigglytuff_shop.c +++ b/src/wigglytuff_shop.c @@ -118,10 +118,6 @@ void sub_8021D5C(void); void UpdateWigglytuffDialogue(void); extern void sub_8008C54(u32); -//extern void sub_80073B8(u32); -//extern void sub_80073E0(u32); -//void sub_800792C(u32, u32, u32, u32, u32); -//void sub_8007A78(u32, u32, u32, u32, u32); void sub_8021878(void); void sub_8021894(void);