From ea36235ecdb29eae4c141b1fc0bd46c3748e930d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 9 Jun 2023 15:39:22 -0700 Subject: [PATCH] more decomp work --- asm/code_801EE10_1.s | 399 ------------------------------------ asm/code_8097318.s | 123 ----------- include/constants/dungeon.h | 3 + include/pokemon.h | 4 +- include/pokemon_3.h | 1 + ld_script.txt | 2 - src/code_8023144.c | 194 ++++++++++++++++++ src/code_80972F4.c | 256 ++++++++++++++++++++++- src/code_809747C.c | 193 ----------------- src/pokemon_3.c | 2 +- src/pokemon_mid.c | 19 +- 11 files changed, 466 insertions(+), 730 deletions(-) delete mode 100644 asm/code_8097318.s delete mode 100644 src/code_809747C.c diff --git a/asm/code_801EE10_1.s b/asm/code_801EE10_1.s index bf1877a8d..beedcfd3d 100644 --- a/asm/code_801EE10_1.s +++ b/asm/code_801EE10_1.s @@ -5,405 +5,6 @@ .text - thumb_func_start sub_8023420 -sub_8023420: - push {r4,r5,lr} - ldr r4, _080234A8 - ldr r0, [r4] - movs r1, 0xFE - lsls r1, 2 - adds r0, r1 - movs r2, 0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080234AC - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - adds r1, 0x1 - adds r0, r1 - movs r1, 0xC - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080234B0 - adds r0, r1 - strb r2, [r0] - ldr r0, [r4] - ldr r2, _080234B4 - adds r0, r2 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0xC - bl sub_80095E4 - adds r0, 0x2 - ldr r3, [r4] - movs r2, 0xE4 - lsls r2, 2 - adds r5, r3, r2 - ldr r2, [r5] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 3 - adds r1, r3, r1 - ldr r2, _080234B8 - adds r1, r2 - lsls r0, 16 - lsrs r0, 16 - strh r0, [r1] - ldr r2, [r5] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 3 - adds r3, r1 - movs r1, 0xEA - lsls r1, 2 - adds r3, r1 - strh r0, [r3] - bl ResetUnusedInputStruct - ldr r0, [r4] - movs r2, 0xE6 - lsls r2, 2 - adds r0, r2 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080234A8: .4byte gUnknown_3001B5C -_080234AC: .4byte 0x000003f9 -_080234B0: .4byte 0x000003fb -_080234B4: .4byte 0x00000376 -_080234B8: .4byte 0x000003a6 - thumb_func_end sub_8023420 - - thumb_func_start sub_80234BC -sub_80234BC: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x178 - ldr r5, _0802368C - ldr r0, [r5] - movs r4, 0xE4 - lsls r4, 2 - adds r0, r4 - ldr r0, [r0] - bl sub_8008C54 - ldr r0, [r5] - adds r0, r4 - ldr r0, [r0] - bl sub_80073B8 - ldr r2, _08023690 - ldr r0, [r5] - adds r0, r4 - ldr r3, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r3, [r5] - ldr r1, _08023694 - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0x4 - ldr r2, _08023698 - adds r1, r3, r2 - movs r6, 0 - ldrsh r2, [r1, r6] - adds r2, 0x1 - movs r1, 0x7 - str r1, [sp] - adds r3, r4 - ldr r1, [r3] - str r1, [sp, 0x4] - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r0, 0 - mov r10, r0 - ldr r0, [r5] - ldr r1, _0802369C - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r10, r0 - blt _08023532 - b _0802366C -_08023532: - ldr r3, _0802368C - ldr r0, [r3] - movs r6, 0xD7 - lsls r6, 2 - adds r0, r6 - mov r1, r10 - bl sub_8013800 - mov r8, r0 - ldr r0, _0802368C - ldr r1, [r0] - ldr r2, _08023698 - adds r0, r1, r2 - movs r3, 0 - ldrsh r2, [r0, r3] - adds r6, 0x1C - adds r0, r1, r6 - movs r3, 0 - ldrsh r0, [r0, r3] - muls r0, r2 - add r0, r10 - lsls r0, 1 - adds r1, 0xC - adds r1, r0 - movs r6, 0 - ldrsh r5, [r1, r6] - adds r0, r5, 0 - bl GetFriendArea - lsls r0, 24 - lsrs r0, 24 - add r4, sp, 0x16C - adds r1, r4, 0 - movs r2, 0 - movs r3, 0 - bl sub_8092638 - movs r7, 0x7 - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _08023594 - adds r0, r5, 0 - bl HasRecruitedMon - lsls r0, 24 - movs r7, 0x4 - cmp r0, 0 - beq _08023594 - movs r7, 0x5 -_08023594: - adds r0, r5, 0 - movs r1, 0 - bl GetDexInternalNo - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - movs r1, 0xA - bl __modsi3 - adds r2, r0, 0 - adds r2, 0x30 - lsls r2, 24 - lsrs r2, 24 - ldr r6, _0802368C - ldr r0, [r6] - movs r1, 0xE4 - lsls r1, 2 - mov r9, r1 - add r0, r9 - ldr r0, [r0] - str r0, [sp] - movs r0, 0x14 - mov r1, r8 - adds r3, r7, 0 - bl sub_8012C60 - cmp r4, 0x9 - ble _08023628 - adds r0, r4, 0 - movs r1, 0xA - bl __divsi3 - adds r4, r0, 0 - movs r1, 0xA - bl __modsi3 - adds r2, r0, 0 - adds r2, 0x30 - lsls r2, 24 - lsrs r2, 24 - ldr r0, [r6] - movs r3, 0xE4 - lsls r3, 2 - adds r0, r3 - ldr r0, [r0] - str r0, [sp] - movs r0, 0xD - mov r1, r8 - adds r3, r7, 0 - bl sub_8012C60 - cmp r4, 0x9 - ble _08023628 - adds r0, r4, 0 - movs r1, 0xA - bl __divsi3 - movs r1, 0xA - bl __modsi3 - adds r2, r0, 0 - adds r2, 0x30 - lsls r2, 24 - lsrs r2, 24 - ldr r0, [r6] - add r0, r9 - ldr r0, [r0] - str r0, [sp] - movs r0, 0x6 - mov r1, r8 - adds r3, r7, 0 - bl sub_8012C60 -_08023628: - add r4, sp, 0x108 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_808D930 - add r0, sp, 0x8 - ldr r1, _080236A0 - adds r2, r7, 0 - adds r3, r4, 0 - bl sprintfStatic - ldr r6, _0802368C - ldr r0, [r6] - movs r1, 0xE4 - lsls r1, 2 - adds r0, r1 - ldr r3, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x24 - mov r1, r8 - add r2, sp, 0x8 - bl xxx_call_draw_string - movs r2, 0x1 - add r10, r2 - ldr r0, [r6] - ldr r3, _0802369C - adds r0, r3 - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r10, r0 - bge _0802366C - b _08023532 -_0802366C: - ldr r0, _0802368C - ldr r0, [r0] - movs r1, 0xE4 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_80073E0 - add sp, 0x178 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802368C: .4byte gUnknown_3001B5C -_08023690: .4byte gUnknown_80DC934 -_08023694: .4byte 0x000003fa -_08023698: .4byte 0x0000037a -_0802369C: .4byte 0x00000376 -_080236A0: .4byte gUnknown_80DC93C - thumb_func_end sub_80234BC - - thumb_func_start sub_80236A4 -sub_80236A4: - push {r4,r5,lr} - ldr r0, _080236FC - ldr r1, [r0] - movs r0, 0 - str r0, [r1, 0x8] - movs r5, 0 -_080236B0: - lsls r0, r5, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _080236E2 - adds r0, r4, 0 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r0, 16 - cmp r4, r0 - bne _080236E2 - ldr r0, _080236FC - ldr r3, [r0] - ldr r1, [r3, 0x8] - lsls r2, r1, 1 - adds r0, r3, 0 - adds r0, 0xC - adds r0, r2 - strh r5, [r0] - adds r1, 0x1 - str r1, [r3, 0x8] -_080236E2: - adds r5, 0x1 - ldr r0, _08023700 - cmp r5, r0 - ble _080236B0 - bl sub_8023730 - ldr r0, _080236FC - ldr r0, [r0] - ldr r0, [r0, 0x8] - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080236FC: .4byte gUnknown_3001B5C -_08023700: .4byte 0x000001a7 - thumb_func_end sub_80236A4 - - thumb_func_start sub_8023704 -sub_8023704: - push {r4,lr} - movs r4, 0 -_08023708: - lsls r0, r4, 16 - asrs r0, 16 - bl sub_8098134 - lsls r0, 24 - cmp r0, 0 - beq _0802371A - movs r0, 0 - b _08023724 -_0802371A: - adds r4, 0x1 - ldr r0, _0802372C - cmp r4, r0 - ble _08023708 - movs r0, 0x1 -_08023724: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0802372C: .4byte 0x000001a7 - thumb_func_end sub_8023704 - - thumb_func_start sub_8023730 -sub_8023730: - push {lr} - ldr r0, _08023744 - ldr r0, [r0] - ldr r0, [r0, 0x4] - cmp r0, 0x1 - beq _08023748 - cmp r0, 0x2 - beq _0802374E - b _08023752 - .align 2, 0 -_08023744: .4byte gUnknown_3001B5C -_08023748: - bl sub_8023758 - b _08023752 -_0802374E: - bl sub_80237E0 -_08023752: - pop {r0} - bx r0 - thumb_func_end sub_8023730 - thumb_func_start sub_8023758 sub_8023758: push {r4-r7,lr} diff --git a/asm/code_8097318.s b/asm/code_8097318.s deleted file mode 100644 index cd9e11dbc..000000000 --- a/asm/code_8097318.s +++ /dev/null @@ -1,123 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80973A8 -sub_80973A8: - push {r4-r6,lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r0, 0xD - beq _080973EE - lsls r5, r0, 16 - cmp r6, 0 - beq _080973E2 - bl sub_80A26B8 - lsls r0, 16 - asrs r4, r0, 16 - lsrs r2, r5, 16 - movs r0, 0 - movs r1, 0x2B - movs r3, 0 - bl sub_800199C - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _080973E2 - movs r0, 0 - movs r1, 0x12 - adds r2, r4, 0 - bl sub_80018D8 -_080973E2: - lsrs r2, r5, 16 - movs r0, 0 - movs r1, 0x2C - adds r3, r6, 0 - bl sub_800199C -_080973EE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80973A8 - - thumb_func_start sub_80973F4 -sub_80973F4: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097402 - movs r0, 0 - b _08097414 -_08097402: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2D - bl sub_8001784 - cmp r0, 0 - beq _08097414 - movs r0, 0x1 -_08097414: - pop {r1} - bx r1 - thumb_func_end sub_80973F4 - - thumb_func_start sub_8097418 -sub_8097418: - push {r4-r7,lr} - lsls r0, 16 - asrs r5, r0, 16 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r5, 0xD - beq _08097470 - lsls r6, r5, 16 - cmp r7, 0 - beq _08097464 - lsrs r2, r6, 16 - movs r0, 0 - movs r1, 0x2C - movs r3, 0 - bl sub_800199C - cmp r5, 0x1E - bgt _08097464 - lsls r0, r5, 3 - ldr r1, _08097478 - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - cmp r0, 0xFF - beq _0809744C - bl sub_8097FA8 -_0809744C: - ldrb r0, [r4, 0x5] - cmp r0, 0xFF - beq _08097456 - bl sub_8097FA8 -_08097456: - cmp r5, 0x9 - bne _08097460 - movs r0, 0x1F - bl sub_8097FA8 -_08097460: - bl sub_8097FF8 -_08097464: - lsrs r2, r6, 16 - movs r0, 0 - movs r1, 0x2D - adds r3, r7, 0 - bl sub_800199C -_08097470: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08097478: .4byte gStoryMissionText - thumb_func_end sub_8097418 - - .align 2,0 diff --git a/include/constants/dungeon.h b/include/constants/dungeon.h index 7a4c7bd44..d9aa5ced1 100644 --- a/include/constants/dungeon.h +++ b/include/constants/dungeon.h @@ -3,6 +3,9 @@ #define NUM_DUNGEON_MAZE (NUM_DUNGEONS - DUNGEON_NORMAL_MAZE_2) +// Not sure why I need to +1 the difference... +#define NUM_BASIC_DUNGEON_MAZE (DUNGEON_STEEL_MAZE - DUNGEON_NORMAL_MAZE_2) + 1 + enum DungeonID { DUNGEON_TINY_WOODS = 0, diff --git a/include/pokemon.h b/include/pokemon.h index e2e19709f..8fcbc6189 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -209,7 +209,7 @@ bool8 CanMove(s16 index); u8 GetChanceAsleep(s16 index); u32 GetWeight(s16 index); u32 GetSize(s16 index); -u8 GetFriendArea(s16 index); +u8 GetFriendArea(s32 index); u16 GetBaseHP(s16 index); bool8 IsToolboxEnabled(s16 index); u8 GetUnk12(s16 index); @@ -218,7 +218,7 @@ u16 GetBaseOffensiveStat(s16 index, u32 r1); u16 GetBaseDefensiveStat(s16 index, u32 r1); u8 GetPokemonType(s32 index, u32 typeIndex); u8 GetPokemonAbility(s16 index, u32 abilityIndex); -s16 GetDexInternalNo(s16 index, u32 r1); +s16 GetDexInternalNo(s32 index, u32 r1); s16 GetRecruitRate(s16 index); s16 GetAlphabetParentNo(s16 index, s32 r1); s16 GetInternalNo(s16 index); diff --git a/include/pokemon_3.h b/include/pokemon_3.h index 6d579a8e5..87f7cc7ec 100644 --- a/include/pokemon_3.h +++ b/include/pokemon_3.h @@ -1,6 +1,7 @@ #ifndef GUARD_POKEMON_3_H #define GUARD_POKEMON_3_H +s16 GetBaseSpeciesNoUnown(s16 index); bool8 TacticsTargetLeader(u8 tactic); bool8 HasIQForSkill(s32 pokeIQ, u8 IQSkillIndex); void SetIQSkill(u8 *param_1, u32 skillIndex); diff --git a/ld_script.txt b/ld_script.txt index 897757750..2728bc155 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -307,8 +307,6 @@ SECTIONS { src/code_80958E8_1.o(.text); asm/code_8096AF8.o(.text); src/code_80972F4.o(.text); - asm/code_8097318.o(.text); - src/code_809747C.o(.text); src/code_8097670.o(.text); asm/code_8097670.o(.text); src/code_8097DD0.o(.text); diff --git a/src/code_8023144.c b/src/code_8023144.c index 05f3b6f93..1df8bb243 100644 --- a/src/code_8023144.c +++ b/src/code_8023144.c @@ -4,6 +4,7 @@ #include "memory.h" #include "menu.h" #include "pokemon.h" +#include "pokemon_3.h" #include "team_inventory.h" #include "text.h" #include "input.h" @@ -42,6 +43,10 @@ extern u16 gUnknown_203B29E; extern struct UnkTextStruct2 gUnknown_80DC91C; 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_8013818(void *, u32, u32, u32); extern void sub_8013984(u8 *); @@ -408,3 +413,192 @@ void sub_80233A0(void) gUnknown_3001B5C = NULL; } } + +NAKED +void sub_8023420(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tldr r4, _080234A8\n" + "\tldr r0, [r4]\n" + "\tmovs r1, 0xFE\n" + "\tlsls r1, 2\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _080234AC\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tadds r1, 0x1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0xC\n" + "\tstrb r1, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r1, _080234B0\n" + "\tadds r0, r1\n" + "\tstrb r2, [r0]\n" + "\tldr r0, [r4]\n" + "\tldr r2, _080234B4\n" + "\tadds r0, r2\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tmovs r1, 0xC\n" + "\tbl sub_80095E4\n" + "\tadds r0, 0x2\n" + "\tldr r3, [r4]\n" + "\tmovs r2, 0xE4\n" + "\tlsls r2, 2\n" + "\tadds r5, r3, r2\n" + "\tldr r2, [r5]\n" + "\tlsls r1, r2, 1\n" + "\tadds r1, r2\n" + "\tlsls r1, 3\n" + "\tadds r1, r3, r1\n" + "\tldr r2, _080234B8\n" + "\tadds r1, r2\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r1]\n" + "\tldr r2, [r5]\n" + "\tlsls r1, r2, 1\n" + "\tadds r1, r2\n" + "\tlsls r1, 3\n" + "\tadds r3, r1\n" + "\tmovs r1, 0xEA\n" + "\tlsls r1, 2\n" + "\tadds r3, r1\n" + "\tstrh r0, [r3]\n" + "\tbl ResetUnusedInputStruct\n" + "\tldr r0, [r4]\n" + "\tmovs r2, 0xE6\n" + "\tlsls r2, 2\n" + "\tadds r0, r2\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x1\n" + "\tbl sub_800641C\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_080234A8: .4byte gUnknown_3001B5C\n" +"_080234AC: .4byte 0x000003f9\n" +"_080234B0: .4byte 0x000003fb\n" +"_080234B4: .4byte 0x00000376\n" +"_080234B8: .4byte 0x000003a6"); +} + +extern u8 gUnknown_80DC934[]; + +struct unkStruct_8092638 +{ + u32 unk0; + u8 unk4; + u32 unk5; +}; +extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +void sub_808D930(u8 *buffer, s32 index); +extern s32 sub_8013800(void *, u32); +bool8 HasRecruitedMon(s16 species_); +extern u8 gUnknown_80DC93C[]; +void sprintfStatic(char *buffer, const char *text, ...); + +void sub_80234BC(void) +{ + u8 cVar2; + u32 y; + s32 uVar3; + s32 iVar4; + s32 species; + u32 color; + s32 index; + u8 buffer2 [256]; + u8 buffer1 [100]; + struct unkStruct_8092638 auStack_2c; + + sub_8008C54(gUnknown_3001B5C->unk390); + sub_80073B8(gUnknown_3001B5C->unk390); + xxx_call_draw_string(10,0,gUnknown_80DC934,gUnknown_3001B5C->unk390,0); // Pokemon + sub_8012BC4(gUnknown_3001B5C->unk3F8[2] * 8 + 4,0, + gUnknown_3001B5C->unk37A + 1,2,7,gUnknown_3001B5C->unk390); + for(index = 0; index < gUnknown_3001B5C->unk376; index++) + { + y = sub_8013800(&gUnknown_3001B5C->unk35C,index); + species = gUnknown_3001B5C->unkC[(gUnknown_3001B5C->unk37A * gUnknown_3001B5C->unk378 + index)]; + sub_8092638(GetFriendArea(species),&auStack_2c,0,0); + color = 7; + if (auStack_2c.unk4 != 0) { + color = HasRecruitedMon(species) ? 5 : 4; + } + iVar4 = GetDexInternalNo(species,0); + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0x14,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + iVar4 /= 10; + cVar2 = (iVar4 % 10) + 0x30; + sub_8012C60(0xd,y,cVar2,color,gUnknown_3001B5C->unk390); + if (9 < iVar4) { + uVar3 = iVar4 / 10; + cVar2 = (uVar3 % 10) + 0x30; + sub_8012C60(6,y,cVar2,color,gUnknown_3001B5C->unk390); + } + } + sub_808D930(buffer1,species); + sprintfStatic(buffer2,gUnknown_80DC93C,color,buffer1); // {COLOR_2}%c%s + xxx_call_draw_string(0x24,y,buffer2,gUnknown_3001B5C->unk390,0); + } + sub_80073E0(gUnknown_3001B5C->unk390); +} + +u32 sub_80236A4(void) +{ + s16 index_s32; + int index; + s32 temp; + + gUnknown_3001B5C->unk8 = 0; + for(index = 0; index < 0x1a8; index++) + { + index_s32 = index; + if ((sub_8098134(index_s32)) && + (index_s32 == GetBaseSpeciesNoUnown(index_s32))) { + temp = gUnknown_3001B5C->unk8; + gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8] = index; + gUnknown_3001B5C->unk8 = temp + 1; + } + } + sub_8023730(); + return gUnknown_3001B5C->unk8; +} + +bool8 sub_8023704(u8 unused) +{ + s32 index; + + for(index = 0; index < 0x1a8; index++) + { + if (sub_8098134((s16)index)) + return FALSE; + } + return TRUE; +} + +void sub_8023730(void) +{ + switch(gUnknown_3001B5C->unk4) + { + case 1: + sub_8023758(); + break; + case 2: + sub_80237E0(); + break; + + } +} diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 685cd0d2a..8e463a75f 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -1,17 +1,44 @@ #include "global.h" +#include "constants/dungeon.h" #include "pokemon.h" #include "wonder_mail.h" #include "code_80958E8.h" +#include "dungeon.h" + +struct MissionText +{ + u8 *text; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +}; +extern struct MissionText gStoryMissionText[]; +extern const char gFinalScenarioText[]; +extern const char gMeetNinetalesText[]; +extern const char gAvoidCaptureText[]; +extern const u8 gUnknown_8109CC0[]; +extern const u8 gDummyScenarioText[]; +extern u8 sub_80A270C(); + +extern void sub_8097FA8(u32); +extern void sub_8097FF8(void); +extern u8 sub_80A2728(s16); +extern bool8 sub_8001D08(u32, u32 ,s32); +extern u32 sub_8001784(u32, u32, u16); +extern void sub_800199C(u8, u8, u16, s32); +extern bool8 sub_80023E4(u32); void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); extern s32 sub_8096EB0(struct WonderMail *); extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -extern void sub_80015C0(u32, u32); +extern void sub_80015C0(u8, u8); extern u32 sub_8001784(u32, u32, u16); extern void GeneratePelipperJobs(void); -extern void sub_800199C(u32, s32, u32, s32); +s16 sub_80A26B8(s16); +extern void sub_80018D8(u8, u8, u32); bool8 sub_8096F50(struct WonderMail *mail) { @@ -221,3 +248,228 @@ bool32 sub_8097384(s16 param_1) } return iVar1; } + +void sub_80973A8(s16 param_1,u32 param_2) +{ + s32 sVar1; + s32 param_1_s32 = param_1; + u8 param_2_u32 = param_2; + + if (param_1_s32 != 0xd) { + if (param_2_u32 != 0) { + sVar1 = sub_80A26B8(param_1); + sub_800199C(0,0x2b,param_1_s32,0); + if (sVar1 != -1) { + sub_80018D8(0,0x12,sVar1); + } + } + sub_800199C(0,0x2c,param_1_s32,param_2_u32); + } +} + +s32 sub_80973F4(s32 param_1) +{ + s32 iVar1; + s16 param_1_u16 = param_1; + + if (param_1_u16 == 0xd) { + iVar1 = 0; + } + else { + s32 param_1_s32 = param_1_u16; + u16 param_1_temp = param_1_s32; + iVar1 = sub_8001784(0,0x2d,param_1_temp); + if (iVar1 != 0) { + iVar1 = 1; + } + } + return iVar1; +} + +void sub_8097418(s16 index,u32 param_2) +{ + int index_s32 = index; + u8 param_2_u8 = param_2; + if (index_s32 != 0xd) { + if ((param_2_u8 != 0) && (sub_800199C(0,0x2c,index_s32,0), index_s32 < 0x1f)) { + struct MissionText *mt = &gStoryMissionText[index_s32]; + if (mt->unk4 != 0xFF) { + sub_8097FA8(mt->unk4); + } + if (mt->unk5 != 0xFF) { + sub_8097FA8(mt->unk5); + } + if (index_s32 == 9) { + sub_8097FA8(0x1f); + } + sub_8097FF8(); + } + sub_800199C(0,0x2d,index_s32,param_2_u8); + } +} + +const u8 *sub_809747C(s16 index) +{ + if(index == 0xD) + { + return gDummyScenarioText; + } + else + { + return GetDungeonName1(sub_80A270C(index)); + } +} + +const u8 *sub_80974A0(s16 index) +{ + if(index == 0xD) + { + return gDummyScenarioText; + } + else + { + return GetDungeonName1(sub_80A270C(index)); + } +} + +const u8 *GetCurrentMissionText(s16 index) +{ + if(index < 0x1F) + { + struct MissionText *mt = &gStoryMissionText[index]; + return mt->text; + } + else + { + return gUnknown_8109CC0; + } +} + +void sub_80974E8(void) +{ + sub_80015C0(0, 0x2E); + sub_80015C0(0, 0x2F); +} + +void nullsub_208(void) +{ +} + +bool8 sub_8097504(s16 mazeIndex) +{ + s32 mazeIndex_s32; + +#ifndef NONMATCHING + register s32 mazeIndex_s32_1 asm("r1"); +#else + s32 mazeIndex_s32_1; +#endif + s32 uVar3; + + mazeIndex_s32 = mazeIndex; + mazeIndex_s32_1 = mazeIndex_s32; + + if(mazeIndex_s32 < 17) + { + switch(mazeIndex_s32) { + case 2: + case 10: + case 11: + case 12: + uVar3 = 14; + break; + case 0: + case 1: + case 5: + case 7: + case 9: + case 14: + uVar3 = 15; + break; + case 3: + case 4: + case 6: + case 8: + return TRUE; + case 13: + uVar3 = 6; + break; + default: + return TRUE; + } + } + else + { + if (mazeIndex_s32_1 > 22) return FALSE; + if (mazeIndex_s32_1 == 22) return FALSE; + if (mazeIndex_s32_1 == 21) return FALSE; + uVar3 = 6; + } + + if (!sub_80023E4(uVar3)) { + return FALSE; + } + else { + return TRUE; + } +} + +// TODO: this should probably be bool8 but can't get a match just yet +bool32 IsMazeCompleted(s16 mazeIndex) +{ + bool32 mazeCompletion; + + mazeCompletion = sub_8001784(0, 0x2e, mazeIndex); + if (mazeCompletion) { + mazeCompletion = TRUE; + } + return mazeCompletion; +} + +void sub_80975A8(s16 param_1,u8 param_2) +{ + u16 param_1_u16 = param_1; + sub_800199C(0,0x2e,param_1_u16,param_2); +} + +const u8 *sub_80975C4(s16 index) +{ + return GetDungeonName1(sub_80A2728(index)); +} + +const char *sub_80975DC(u32 r0) +{ + // TODO: slight hack but matches + r0 <<= 16; + if((0xffe90000 + r0) >> 16 < 2) + if(sub_8001D08(0x3, 0xE, -1)) + return gMeetNinetalesText; + else + return gAvoidCaptureText; + else + return gFinalScenarioText; +} + +bool8 HasCompletedAllMazes(void) +{ + s32 index; + for(index = 0; index < NUM_BASIC_DUNGEON_MAZE; index++) + { + if(!(bool8)IsMazeCompleted(index)) + return FALSE; + } + return TRUE; +} + +bool8 sub_8097640(void) +{ + if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) + { + sub_800199C(0, 0x2E, 0x1F, 1); + return TRUE; + } + else + { + return FALSE; + } +} diff --git a/src/code_809747C.c b/src/code_809747C.c deleted file mode 100644 index 85576a46a..000000000 --- a/src/code_809747C.c +++ /dev/null @@ -1,193 +0,0 @@ -#include "global.h" -#include "dungeon.h" - - -struct MissionText -{ - u8 *text; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; -}; - -extern struct MissionText gStoryMissionText[]; -extern const u8 gUnknown_8109CC0[]; -extern const u8 gDummyScenarioText[]; -extern const char gFinalScenarioText[]; -extern const char gMeetNinetalesText[]; -extern const char gAvoidCaptureText[]; - -extern u8 sub_80A270C(); -extern void sub_80015C0(u8, u8); -extern u8 sub_80A2728(s16); -extern bool8 sub_8001D08(u32, u32 ,s32); -extern u32 sub_8001784(u32, u32, u16); -extern void sub_800199C(u32, u32, u32, u32); -extern bool8 sub_80023E4(u32); - -const u8 *sub_809747C(s16 index) -{ - if(index == 0xD) - { - return gDummyScenarioText; - } - else - { - return GetDungeonName1(sub_80A270C(index)); - } -} - -const u8 *sub_80974A0(s16 index) -{ - if(index == 0xD) - { - return gDummyScenarioText; - } - else - { - return GetDungeonName1(sub_80A270C(index)); - } -} - -const u8 *GetCurrentMissionText(s16 index) -{ - if(index < 0x1F) - { - struct MissionText *mt = &gStoryMissionText[index]; - return mt->text; - } - else - { - return gUnknown_8109CC0; - } -} - -void sub_80974E8(void) -{ - sub_80015C0(0, 0x2E); - sub_80015C0(0, 0x2F); -} - -void nullsub_208(void) -{ -} - -bool8 sub_8097504(s16 mazeIndex) -{ - s32 mazeIndex_s32; - -#ifndef NONMATCHING - register s32 mazeIndex_s32_1 asm("r1"); -#else - s32 mazeIndex_s32_1; -#endif - s32 uVar3; - - mazeIndex_s32 = mazeIndex; - mazeIndex_s32_1 = mazeIndex_s32; - - if(mazeIndex_s32 < 17) - { - switch(mazeIndex_s32) { - case 2: - case 10: - case 11: - case 12: - uVar3 = 14; - break; - case 0: - case 1: - case 5: - case 7: - case 9: - case 14: - uVar3 = 15; - break; - case 3: - case 4: - case 6: - case 8: - return TRUE; - case 13: - uVar3 = 6; - break; - default: - return TRUE; - } - } - else - { - if (mazeIndex_s32_1 > 22) return FALSE; - if (mazeIndex_s32_1 == 22) return FALSE; - if (mazeIndex_s32_1 == 21) return FALSE; - uVar3 = 6; - } - - if (!sub_80023E4(uVar3)) { - return FALSE; - } - else { - return TRUE; - } -} - -// TODO: this should probably be bool8 but can't get a match just yet -bool32 IsMazeCompleted(s16 mazeIndex) -{ - bool32 mazeCompletion; - - mazeCompletion = sub_8001784(0, 0x2e, mazeIndex); - if (mazeCompletion) { - mazeCompletion = TRUE; - } - return mazeCompletion; -} - -void sub_80975A8(s16 param_1,u8 param_2) -{ - u16 param_1_u16 = param_1; - sub_800199C(0,0x2e,param_1_u16,param_2); -} - -const u8 *sub_80975C4(s16 index) -{ - return GetDungeonName1(sub_80A2728(index)); -} - -const char *sub_80975DC(u32 r0) -{ - // TODO: slight hack but matches - r0 <<= 16; - if((0xffe90000 + r0) >> 16 < 2) - if(sub_8001D08(0x3, 0xE, -1)) - return gMeetNinetalesText; - else - return gAvoidCaptureText; - else - return gFinalScenarioText; -} - -bool8 HasCompletedAllMazes(void) -{ - s32 index; - for(index = 0; index < 17; index++) - { - if(!(bool8)IsMazeCompleted(index)) - return FALSE; - } - return TRUE; -} - -bool8 sub_8097640(void) -{ - if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) - { - sub_800199C(0, 0x2E, 0x1F, 1); - return TRUE; - } - else - { - return FALSE; - } -} diff --git a/src/pokemon_3.c b/src/pokemon_3.c index de11d4a11..5b0ba490b 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -192,7 +192,7 @@ s32 GetBaseSpecies(s16 index) { return index; } -s32 GetBaseSpeciesNoUnown(s16 index) { +s16 GetBaseSpeciesNoUnown(s16 index) { register s32 a1_ asm("r2") = index; if (index == MONSTER_CASTFORM_SNOWY) { return MONSTER_CASTFORM; diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index bc56660ac..66c3b938d 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -246,20 +246,21 @@ void CopyCyanMonsterNametoBuffer(u8 *buffer, s16 index) sprintfStatic(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // {COLOR_2 CYAN}%s{END_COLOR_TEXT_2} } -void sub_808D930(u8 *buffer, s16 index) +void sub_808D930(u8 *buffer, s32 index) { char *unownString; s32 unownIndex; const char *preload; + s16 index_s16 = index; - if (GetBaseSpecies(index) == MONSTER_UNOWN) { + if (GetBaseSpecies(index_s16) == MONSTER_UNOWN) { preload = gUnknown_8107630; // %s%c unownString = GetMonSpecies(MONSTER_UNOWN); - unownIndex = GetUnownIndex(index); + unownIndex = GetUnownIndex(index_s16); sprintfStatic(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!? } else { - sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index].species); // %s + sprintfStatic(buffer,gUnknown_8107638, gMonsterParameters[index_s16].species); // %s } } @@ -376,9 +377,10 @@ u32 GetSize(s16 index) return gMonsterParameters[index].size; } -u8 GetFriendArea(s16 index) +u8 GetFriendArea(s32 index) { - return gMonsterParameters[index].friendArea; + s16 index_s32 = index; + return gMonsterParameters[index_s32].friendArea; } u16 GetBaseHP(s16 index) @@ -422,9 +424,10 @@ u8 GetPokemonAbility(s16 index, u32 abilityIndex) return gMonsterParameters[index].abilities[abilityIndex]; } -s16 GetDexInternalNo(s16 index, u32 r1) +s16 GetDexInternalNo(s32 index, u32 r1) { - return gMonsterParameters[index].dexInternal[r1]; + s16 index_s16 = index; + return gMonsterParameters[index_s16].dexInternal[r1]; } s16 GetRecruitRate(s16 index)