From 6317c203801bc332af7777cfb80346d46356e209 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 21 May 2024 15:39:42 -0700 Subject: [PATCH 01/39] more decomp --- asm/code_803D110.s | 134 ----------------------------------------- include/code_803D0D8.h | 4 +- ld_script.txt | 1 - src/code_803D0D8.c | 71 +++++++++++++++++++++- src/code_807E5AC.c | 11 ---- src/trap.c | 9 +++ 6 files changed, 82 insertions(+), 148 deletions(-) delete mode 100644 src/code_807E5AC.c diff --git a/asm/code_803D110.s b/asm/code_803D110.s index ef2f1ca63..8b8ee7069 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -5,140 +5,6 @@ .text - thumb_func_start sub_803D110 -sub_803D110: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x6C - adds r6, r0, 0 - mov r9, r1 - adds r5, r2, 0 - add r7, sp, 0x48 - adds r2, r7, 0 - movs r1, 0 - mov r0, sp - adds r0, 0x69 -_0803D12A: - strb r1, [r0] - subs r0, 0x1 - cmp r0, r2 - bge _0803D12A - movs r4, 0 - cmp r4, r5 - bge _0803D158 -_0803D138: - ldrb r0, [r6] - bl sub_803D0F0 - add r1, sp, 0x10 - adds r1, r4 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0803D150 - movs r0, 0 - b _0803D19A -_0803D150: - adds r6, 0x1 - adds r4, 0x1 - cmp r4, r5 - blt _0803D138 -_0803D158: - lsls r0, r5, 2 - adds r0, r5 - adds r2, r0, 0x5 - cmp r2, 0 - bge _0803D164 - adds r2, 0x7 -_0803D164: - asrs r2, 3 - mov r8, r2 - mov r0, sp - adds r1, r7, 0 - bl xxx_init_struct_8094924_save_809486C - movs r4, 0 - cmp r4, r5 - bge _0803D188 - add r6, sp, 0x10 -_0803D178: - adds r1, r6, r4 - mov r0, sp - movs r2, 0x5 - bl SaveIntegerBits - adds r4, 0x1 - cmp r4, r5 - blt _0803D178 -_0803D188: - mov r0, sp - bl nullsub_102 - mov r0, r9 - adds r1, r7, 0 - mov r2, r8 - bl MemoryCopy8 - movs r0, 0x1 -_0803D19A: - add sp, 0x6C - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_803D110 - - thumb_func_start sub_803D1A8 -sub_803D1A8: - push {r4-r7,lr} - sub sp, 0x48 - adds r7, r0, 0 - adds r5, r2, 0 - lsls r0, r5, 2 - adds r0, r5 - adds r2, r0, 0x5 - cmp r2, 0 - bge _0803D1BC - adds r2, 0x7 -_0803D1BC: - asrs r2, 3 - mov r0, sp - bl xxx_init_struct_8094924_restore_809485C - movs r4, 0 - cmp r4, r5 - bge _0803D1DC - add r6, sp, 0x10 -_0803D1CC: - adds r1, r6, r4 - mov r0, sp - movs r2, 0x5 - bl RestoreIntegerBits - adds r4, 0x1 - cmp r4, r5 - blt _0803D1CC -_0803D1DC: - mov r0, sp - bl nullsub_102 - movs r4, 0 - cmp r4, r5 - bge _0803D1FC - add r6, sp, 0x10 -_0803D1EA: - adds r0, r6, r4 - ldrb r0, [r0] - bl sub_803D100 - strb r0, [r7] - adds r7, 0x1 - adds r4, 0x1 - cmp r4, r5 - blt _0803D1EA -_0803D1FC: - add sp, 0x48 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_803D1A8 - thumb_func_start sub_803D204 sub_803D204: push {r4-r7,lr} diff --git a/include/code_803D0D8.h b/include/code_803D0D8.h index ae279de62..69de868c6 100644 --- a/include/code_803D0D8.h +++ b/include/code_803D0D8.h @@ -4,5 +4,7 @@ u8 sub_803D0D8(void); u8 sub_803D0F0(u8); u8 sub_803D100(u8); +u8 sub_803D110(u8 *param_1, u8 *param_2, s32 size); +void sub_803D1A8(u8 *param_1, u8 *param_2, s32 size); -#endif // GUARD_CODE_803D0D8_H \ No newline at end of file +#endif // GUARD_CODE_803D0D8_H diff --git a/ld_script.txt b/ld_script.txt index 37d2f531b..0a33b03e9 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -275,7 +275,6 @@ SECTIONS { src/code_807CD9C.o(.text); src/weather.o(.text); asm/code_807E5AC.o(.text); - src/code_807E5AC.o(.text); src/trap.o(.text); asm/code_807FCD4.o(.text); src/trap_1.o(.text); diff --git a/src/code_803D0D8.c b/src/code_803D0D8.c index f699ae50c..9a1377e5b 100644 --- a/src/code_803D0D8.c +++ b/src/code_803D0D8.c @@ -1,6 +1,8 @@ #include "global.h" #include "globaldata.h" #include "code_803D0D8.h" +#include "code_8092334.h" +#include "memory.h" static EWRAM_DATA_2 u8 sUnknown_203B408 = {0}; @@ -26,4 +28,71 @@ u8 sub_803D100(u8 r0) return sUnknown_80F42D0[r0]; } -// Probably continues in code_803D110.s \ No newline at end of file +u8 sub_803D110(u8 *param_1, u8 *param_2, s32 size) +{ + s32 index1; + s32 newSize; + s32 save; + unkStruct_8094924 auStack_88; + u8 local_78 [56]; + u8 auStack_40 [36]; + + + for(index1 = 0; index1 < 34; index1++) + { + auStack_40[index1] = 0; + } + + for (index1 = 0; index1 < size; index1++) + { + local_78[index1] = sub_803D0F0(*param_1); + if (local_78[index1] == 0xff) { + return 0; + } + param_1++; + } + + newSize = size * 5 + 5; + if (newSize < 0) { + newSize = size * 5 + 0xc; + } + + newSize >>= 3; + save = newSize; + xxx_init_struct_8094924_save_809486C(&auStack_88,auStack_40, save); + + for(index1 = 0; index1 < size; index1++) + { + SaveIntegerBits(&auStack_88, &local_78[index1], 5); + } + nullsub_102(&auStack_88); + MemoryCopy8(param_2, auStack_40, save); + return 1; +} + +void sub_803D1A8(u8 *param_1, u8 *param_2, s32 size) +{ + s32 index; + s32 newSize; + unkStruct_8094924 auStack_5c; + u8 local_4c [56]; + + newSize = size * 5 + 5; + if (newSize < 0) { + newSize = size * 5 + 0xc; + } + newSize >>= 3; + xxx_init_struct_8094924_restore_809485C(&auStack_5c, param_2, newSize); + for(index = 0; index < size; index++) + { + RestoreIntegerBits(&auStack_5c, &local_4c[index], 5); + } + + nullsub_102(&auStack_5c); + for(index = 0; index < size; index++) + { + *param_1++ = sub_803D100(local_4c[index]); + } +} + +// Probably continues in code_803D110.s diff --git a/src/code_807E5AC.c b/src/code_807E5AC.c deleted file mode 100644 index 2ad284f90..000000000 --- a/src/code_807E5AC.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "global.h" -#include "structs/str_dungeon.h" - -void sub_807FC3C(Position *pos, u32 trapID, u32 param_3) -{ - gDungeon->trapPos.x = pos->x; - gDungeon->trapPos.y = pos->y; - gDungeon->trapID = trapID; - gDungeon->unk13579 = param_3; - gDungeon->unk13570 = 1; -} diff --git a/src/trap.c b/src/trap.c index 6d271f7c9..075c8a17b 100644 --- a/src/trap.c +++ b/src/trap.c @@ -110,6 +110,15 @@ Entity *sub_8045684(u8, Position *, u8); extern void sub_807D148(Entity *pokemon, Entity *target, u32 r2, Position *r3); extern void sub_807DF38(Entity *pokemon, Entity *target, Position *pos, u32, u8 moveType, s16); +void sub_807FC3C(Position *pos, u32 trapID, u32 param_3) +{ + gDungeon->trapPos.x = pos->x; + gDungeon->trapPos.y = pos->y; + gDungeon->trapID = trapID; + gDungeon->unk13579 = param_3; + gDungeon->unk13570 = 1; +} + bool8 CanLayTrap(Position *pos) { struct Tile *tile = GetTileSafe(pos->x, pos->y); From 55f516ec5ee43d2cfb18dbd74c6fc14a62fb2cf2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 07:33:35 -0700 Subject: [PATCH 02/39] Add more ewram and iwram --- asm/code_8094D28.s | 39 ----- asm/code_809A560.s | 282 ---------------------------------- include/code_8077274_1.h | 1 + include/code_8094D28.h | 4 +- include/dungeon_movement.h | 2 + include/ground_main.h | 3 +- include/structs/str_3001B64.h | 48 ++++++ include/trap.h | 29 ++++ ld_script.txt | 2 + src/code_800C9CC.c | 4 +- src/code_8057824_1.c | 5 +- src/code_8075708.c | 2 +- src/code_807CD9C.c | 6 +- src/code_8083288.c | 58 +++---- src/code_8094D28.c | 18 +++ src/code_809A560.c | 45 +----- src/code_809A560_1.c | 170 ++++++++++++++++++++ src/code_809C5C4.c | 2 +- src/cpu.c | 2 +- src/dungeon_ai_items.c | 10 +- src/dungeon_ai_leader.c | 4 +- src/dungeon_map_access.c | 21 +-- src/dungeon_movement.c | 2 +- src/ground_main.c | 2 +- src/ground_sprite.c | 5 +- src/move_actions.c | 1 - src/personality_test1.c | 2 +- src/status_actions.c | 1 - src/trap.c | 27 +--- src/trap_1.c | 22 +-- sym_ewram.txt | 23 +-- sym_ewram2.txt | 17 +- sym_iwram.txt | 16 +- 33 files changed, 370 insertions(+), 505 deletions(-) create mode 100644 include/structs/str_3001B64.h create mode 100644 src/code_8094D28.c create mode 100644 src/code_809A560_1.c diff --git a/asm/code_8094D28.s b/asm/code_8094D28.s index 81210da08..cfb921663 100644 --- a/asm/code_8094D28.s +++ b/asm/code_8094D28.s @@ -5,45 +5,6 @@ .text - thumb_func_start sub_8094D28 -sub_8094D28: - push {r4-r7,lr} - ldr r2, _08094D64 - str r0, [r2] - ldr r1, _08094D68 - movs r0, 0x1 - str r0, [r1] - ldr r7, _08094D6C - adds r5, r2, 0 - adds r4, r1, 0 - ldr r6, _08094D70 -_08094D3C: - ldr r2, [r4] - lsls r3, r2, 2 - adds r3, r5 - subs r0, r2, 0x1 - lsls r0, 2 - adds r0, r5 - ldr r0, [r0] - lsrs r1, r0, 30 - eors r0, r1 - muls r0, r6 - adds r0, r2 - str r0, [r3] - adds r2, 0x1 - str r2, [r4] - cmp r2, r7 - ble _08094D3C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08094D64: .4byte gUnknown_3001198 -_08094D68: .4byte gUnknown_203B470 -_08094D6C: .4byte 0x0000026f -_08094D70: .4byte 0x6c078965 - thumb_func_end sub_8094D28 - thumb_func_start sub_8094D74 sub_8094D74: push {r4-r7,lr} diff --git a/asm/code_809A560.s b/asm/code_809A560.s index 35180f408..07268d41c 100644 --- a/asm/code_809A560.s +++ b/asm/code_809A560.s @@ -3349,286 +3349,4 @@ _0809C394: bx r1 thumb_func_end sub_809B648 - thumb_func_start sub_809C39C -sub_809C39C: - push {lr} - bl sub_801D178 - ldr r1, _0809C3D4 - ldr r1, [r1] - movs r2, 0x86 - lsls r2, 3 - adds r1, r2 - str r0, [r1] - cmp r0, 0x3 - bne _0809C3CC - bl sub_801D1D4 - lsls r0, 24 - lsrs r0, 24 - bl sub_8002694 - lsls r0, 16 - asrs r0, 16 - movs r2, 0x1 - negs r2, r2 - movs r1, 0 - bl GroundMainGroundRequest -_0809C3CC: - bl sub_801D1E0 - pop {r0} - bx r0 - .align 2, 0 -_0809C3D4: .4byte gUnknown_3001B64 - thumb_func_end sub_809C39C - - thumb_func_start sub_809C3D8 -sub_809C3D8: - push {lr} - bl sub_801D178 - ldr r1, _0809C410 - ldr r1, [r1] - movs r2, 0x86 - lsls r2, 3 - adds r1, r2 - str r0, [r1] - cmp r0, 0x3 - bne _0809C408 - bl sub_801D1D4 - lsls r0, 24 - lsrs r0, 24 - bl sub_8002694 - lsls r0, 16 - asrs r0, 16 - movs r2, 0x1 - negs r2, r2 - movs r1, 0 - bl GroundMainGroundRequest -_0809C408: - bl sub_801D1E0 - pop {r0} - bx r0 - .align 2, 0 -_0809C410: .4byte gUnknown_3001B64 - thumb_func_end sub_809C3D8 - - thumb_func_start sub_809C414 -sub_809C414: - push {lr} - bl sub_802540C - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0809C448 - ldr r0, _0809C444 - ldr r0, [r0] - movs r2, 0x86 - lsls r2, 3 - adds r0, r2 - str r1, [r0] - adds r0, r1, 0 - bl sub_8002694 - lsls r0, 16 - asrs r0, 16 - movs r2, 0x1 - negs r2, r2 - movs r1, 0 - bl GroundMainGroundRequest - b _0809C458 - .align 2, 0 -_0809C444: .4byte gUnknown_3001B64 -_0809C448: - ldr r0, _0809C460 - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 3 - adds r0, r1 - movs r1, 0x1 - negs r1, r1 - str r1, [r0] -_0809C458: - bl sub_8025418 - pop {r0} - bx r0 - .align 2, 0 -_0809C460: .4byte gUnknown_3001B64 - thumb_func_end sub_809C414 - - thumb_func_start sub_809C464 -sub_809C464: - push {lr} - bl DeleteTestTracker - bl sub_8001064 - bl sub_809965C - pop {r0} - bx r0 - thumb_func_end sub_809C464 - - thumb_func_start sub_809C478 -sub_809C478: - push {lr} - sub sp, 0x8 - bl sub_80356A0 - cmp r0, 0x3 - bne _0809C492 - ldr r0, _0809C4AC - bl PlaySound - bl InitFlash - bl ClearFlashData -_0809C492: - bl sub_8035758 - add r2, sp, 0x4 - movs r0, 0x3 - mov r1, sp - bl sub_8001B88 - movs r0, 0 - bl sub_80993C0 - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_0809C4AC: .4byte 0x00000313 - thumb_func_end sub_809C478 - - thumb_func_start sub_809C4B0 -sub_809C4B0: - push {r4,r5,lr} - movs r4, 0x1 - negs r4, r4 - ldr r5, _0809C4FC - ldr r0, [r5] - movs r2, 0x86 - lsls r2, 3 - adds r1, r0, r2 - ldr r0, [r1] - cmp r0, 0 - bne _0809C4DE - bl sub_803B168 - lsls r0, 16 - ldr r1, [r5] - ldr r3, _0809C500 - adds r2, r1, r3 - asrs r4, r0, 16 - lsrs r0, 16 - strh r0, [r2] - movs r0, 0x86 - lsls r0, 3 - adds r1, r0 -_0809C4DE: - str r4, [r1] - bl sub_803B1BC - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _0809C4F4 - adds r0, r4, 0 - movs r1, 0 - bl GroundMap_ExecuteEvent -_0809C4F4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809C4FC: .4byte gUnknown_3001B64 -_0809C500: .4byte 0x000005a4 - thumb_func_end sub_809C4B0 - - thumb_func_start sub_809C504 -sub_809C504: - push {r4,lr} - sub sp, 0x4 - mov r0, sp - bl sub_80282DC - adds r4, r0, 0 - cmp r4, 0x1 - bne _0809C530 - mov r0, sp - ldrb r0, [r0] - bl sub_809927C - ldr r0, _0809C52C - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 3 - adds r0, r1 - str r4, [r0] - b _0809C540 - .align 2, 0 -_0809C52C: .4byte gUnknown_3001B64 -_0809C530: - ldr r0, _0809C54C - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 3 - adds r0, r1 - movs r1, 0x1 - negs r1, r1 - str r1, [r0] -_0809C540: - bl sub_80282FC - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C54C: .4byte gUnknown_3001B64 - thumb_func_end sub_809C504 - - thumb_func_start sub_809C550 -sub_809C550: - push {r4,r5,lr} - bl sub_802E90C - adds r4, r0, 0 - movs r5, 0 - bl sub_802E918 - cmp r4, 0x2 - beq _0809C586 - cmp r4, 0x2 - bhi _0809C56C - cmp r4, 0x1 - beq _0809C572 - b _0809C5AC -_0809C56C: - cmp r4, 0x3 - beq _0809C59A - b _0809C5AC -_0809C572: - movs r0, 0x4 - movs r1, 0x1D - movs r2, 0x3 - bl sub_8001CC4 - lsls r0, 24 - cmp r0, 0 - beq _0809C5AC - movs r5, 0x1 - b _0809C5AC -_0809C586: - movs r0, 0x4 - movs r1, 0x1F - movs r2, 0x2 - bl sub_8001CC4 - lsls r0, 24 - cmp r0, 0 - beq _0809C5AC - movs r5, 0x2 - b _0809C5AC -_0809C59A: - movs r0, 0xB - movs r1, 0x33 - movs r2, 0x8 - bl sub_8001CC4 - lsls r0, 24 - cmp r0, 0 - beq _0809C5AC - movs r5, 0x3 -_0809C5AC: - ldr r0, _0809C5C0 - ldr r0, [r0] - movs r1, 0x86 - lsls r1, 3 - adds r0, r1 - str r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809C5C0: .4byte gUnknown_3001B64 - thumb_func_end sub_809C550 - .align 2,0 diff --git a/include/code_8077274_1.h b/include/code_8077274_1.h index 6f9a92ca3..73c2d590a 100644 --- a/include/code_8077274_1.h +++ b/include/code_8077274_1.h @@ -48,5 +48,6 @@ void sub_807A96C(Entity *pokemon, Entity *target); void WakeUpPokemon(Entity * pokemon); void SendThawedMessage(Entity *pokemon, Entity *target); void sub_807AA30(void); +void sub_8079E34(Entity * pokemon, Entity * target, bool8 param_3); #endif // !GUARD_CODE_8077274_1_H diff --git a/include/code_8094D28.h b/include/code_8094D28.h index 7ed781611..e166da1d7 100644 --- a/include/code_8094D28.h +++ b/include/code_8094D28.h @@ -2,7 +2,7 @@ #define GUARD_CODE_8094D28_H // code_8094D28.s -extern void sub_8094D28(s32); +void sub_8094D28(s32 r0); extern s32 sub_8094E4C(void); -#endif // GUARD_CODE_8094D28_H \ No newline at end of file +#endif // GUARD_CODE_8094D28_H diff --git a/include/dungeon_movement.h b/include/dungeon_movement.h index 86ecc90d6..be363c333 100644 --- a/include/dungeon_movement.h +++ b/include/dungeon_movement.h @@ -4,6 +4,8 @@ #include "structs/dungeon_entity.h" #include "structs/map.h" +extern u8 gWalkableTileToCrossableTerrain[8]; + u8 GetCrossableTerrain(s16 species); u8 sub_807034C(s16 id, struct Tile *tile); u8 sub_80703A0(Entity *pokemon, Position *pos); diff --git a/include/ground_main.h b/include/ground_main.h index 7bf59241a..3ab8ea8d6 100644 --- a/include/ground_main.h +++ b/include/ground_main.h @@ -13,5 +13,6 @@ typedef struct unkStruct_811BAF4 bool8 sub_8098F88(void); const char *sub_8098FB4(void); +bool8 GroundMainGroundRequest(s16 r0, u32 r1, s32 r2); -#endif // GUARD_GROUND_MAIN_H \ No newline at end of file +#endif // GUARD_GROUND_MAIN_H diff --git a/include/structs/str_3001B64.h b/include/structs/str_3001B64.h new file mode 100644 index 000000000..54a59db16 --- /dev/null +++ b/include/structs/str_3001B64.h @@ -0,0 +1,48 @@ +#ifndef GUARD_STR_3001B64_H +#define GUARD_STR_3001B64_H + +#include "file_system.h" + +struct unkStruct_3001B64_sub +{ + // size: 0x24 + u16 unk0; + /* 0x2 */ s16 speciesID; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u32 unk8; + u32 unkC; + u32 unk10; + /* 0x14 */ u8 *faceData; + u32 fill18; + u8 unk1C; + u8 fill1D[0x20 - 0x1D]; + /* 0x20 */ OpenedFile *faceFile; +}; + +struct unkStruct_3001B64 +{ + // size: 0x5A8 + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u8 fill10[0x414 - 0x10]; + u32 unk414; + u32 unk418; + u32 unk41C; + u32 unk420; + u32 unk424; + u32 unk428; + u32 unk42C; + u32 unk430; + u32 unk434; + u32 fill438; + struct unkStruct_3001B64_sub unk43C[10]; + u16 unk5A4; +}; + +#endif // GUARD_STR_3001B61_H + diff --git a/include/trap.h b/include/trap.h index e668530bc..ba9ba7fdb 100644 --- a/include/trap.h +++ b/include/trap.h @@ -1,10 +1,39 @@ #ifndef GUARD_TRAP_H #define GUARD_TRAP_H +#include "structs/dungeon_entity.h" +#include "structs/map.h" #include "structs/str_position.h" bool8 CanLayTrap(Position *pos); bool8 LayTrap(Position *pos, u8 trapID, u8 param_3); +bool8 sub_807FD84(Entity *entity); +bool8 sub_807FE04(Position *pos, char param_2); +bool8 sub_807FE44(Position *pos, char param_2); void GetTrapName(u8 *buffer, u8 trapIndex); +void sub_807FE9C(Entity *pokemon, Position *pos, int param_3, char param_4); +void HandleMudTrap(Entity *pokemon, Entity *target); +void HandleStickyTrap(Entity *pokemon, Entity *target); +void HandleGrimyTrap(Entity *pokemon, Entity *target); +void HandleSummonTrap(Entity *pokemon, Position *pos); +void HandlePitfallTrap(Entity *pokemon,Entity *target,Tile *tile); +void HandleWarpTrap(Entity *pokemon, Entity *target); +void HandleSpinTrap(Entity *pokemon, Entity *target); +void HandleSlumberTrap(Entity *pokemon, Entity *target); +void HandleSlowTrap(Entity *pokemon, Entity *target); +void HandlePoisonTrap(Entity *pokemon, Entity *target); +void HandleSelfdestructTrap(Entity *pokemon, Entity *target); +void HandleExplosionTrap(Entity *pokemon, Entity *target); +void HandlePPZeroTrap(Entity *pokemon, Entity *target); +void HandleWonderTile(Entity *pokemon, Entity *target); + +// code_807FCD4.s +extern void HandleSealTrap(Entity *pokemon, Entity *target); +extern void HandleWhirlwindTrap(Entity *entity, Entity *target); +extern void HandlePokemonTrap(Entity *pokemon, Position *pos); + +// trap_1.c +void HandleTripTrap(Entity *pokemon, Entity *target); +void SetTrap(Tile *tile, u8 id); #endif diff --git a/ld_script.txt b/ld_script.txt index 0a33b03e9..937c67d2e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -316,6 +316,7 @@ SECTIONS { src/code_809447C.o(.text); src/code_8092334.o(.text); src/game_options.o(.text); + src/code_8094D28.o(.text); asm/code_8094D28.o(.text); src/play_time.o(.text); src/code_8094F88.o(.text); @@ -340,6 +341,7 @@ SECTIONS { asm/code_8098BDC.o(.text); src/code_809A560.o(.text); asm/code_809A560.o(.text); + src/code_809A560_1.o(.text); src/code_809C5C4.o(.text); asm/code_809C5C4.o(.text); src/code_809D148.o(.text); diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c index 1216320bb..115b2e7c1 100644 --- a/src/code_800C9CC.c +++ b/src/code_800C9CC.c @@ -3,8 +3,8 @@ #include "random.h" #include "reg_control.h" -extern u32 gUnknown_203B0B8; -extern u16 gRawKeyInput; +EWRAM_DATA_2 u32 gUnknown_203B0B8 = {0}; +EWRAM_DATA_2 u16 gRawKeyInput = {0}; void sub_800CB20(void) { diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 1f7a9c701..adc5d44c6 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -18,8 +18,8 @@ #include "pokemon_3.h" #include "pokemon.h" #include "position_util.h" -#include "structs/dungeon_entity.h" -#include "structs/str_dungeon.h" +#include "exclusive_pokemon.h" +#include "trap.h" extern u32 gUnknown_202EDC8; extern u8 gUnknown_202E038[0x50]; @@ -457,7 +457,6 @@ extern void sub_8046860(Entity *, Position *, Item *, u32); extern u32 sub_803D73C(u32); extern void sub_80460F8(Position *, Item *, u8); -extern void sub_807FE04(Position *, u8); void ZapdosReFightDialogue(void) { diff --git a/src/code_8075708.c b/src/code_8075708.c index 9f0afa0b4..8f909e065 100644 --- a/src/code_8075708.c +++ b/src/code_8075708.c @@ -15,10 +15,10 @@ #include "structs/str_dungeon.h" #include "tile_types.h" #include "position_util.h" +#include "trap.h" extern void sub_8049ED4(void); extern void sub_8073D14(Entity *); -extern void sub_807FE9C(Entity *, Position *, u32, u32); void sub_8075680(void) { diff --git a/src/code_807CD9C.c b/src/code_807CD9C.c index aea2f397f..c7ba2336b 100644 --- a/src/code_807CD9C.c +++ b/src/code_807CD9C.c @@ -20,7 +20,7 @@ extern void sub_80426C8(u32, u32); extern void sub_8068FE0(Entity *, u32, Entity *r2); extern void nullsub_93(Position *); extern void sub_80522F4(Entity *, Entity *, u8 *); -extern void sub_806F370(Entity *r0, Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); +extern void sub_806F370(Entity *pokemon, Entity *target, u32, u32, u8 *, u8 moveType, s32, u32, u32, u32); extern void sub_80694C0(Entity *, s32, s32, u32); extern void sub_804535C(Entity *, u32); extern void sub_804AC20(Position *); @@ -35,7 +35,7 @@ extern u8 *gUnknown_80F9CBC[]; extern u8 gAvailablePokemonNames[]; extern u8 *gUnknown_80FCAC0[]; -void sub_807E1A0(Entity *pokemon,Entity *target,u8 param_3,s16 param_4,s32 param_5) +void sub_807E1A0(Entity *pokemon,Entity *target,u8 moveType,s16 param_4,s32 param_5) { EntityInfo *targetInfo; u8 flag; @@ -65,7 +65,7 @@ void sub_807E1A0(Entity *pokemon,Entity *target,u8 param_3,s16 param_4,s32 param newHP /= 2; } } - sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0); + sub_806F370(pokemon,target,newHP,0,&flag,moveType,param_4_s32,0,0,0); } } } diff --git a/src/code_8083288.c b/src/code_8083288.c index 3de6df42e..d9e4cc03c 100644 --- a/src/code_8083288.c +++ b/src/code_8083288.c @@ -1,19 +1,19 @@ #include "global.h" +#include "code_8092334.h" #include "structs/str_position.h" -extern void sub_8082FE0(u32, void *, u32); -extern void sub_8082FA8(void *, void *, u32); +extern void sub_8082FE0(unkStruct_8094924 *, void *, u32 size); +extern void sub_8082FA8(unkStruct_8094924 *, void *, u32); - -void nullsub_98() +void nullsub_98(unkStruct_8094924 *param_1) {} -void sub_808300C(u32 *param_1, u32 *param_2) +void sub_808300C(unkStruct_8094924 *param_1, u8 *param_2) { sub_8082FA8(param_1, param_2, 8); } -void sub_8083018(u32 param_1) +void sub_8083018(unkStruct_8094924 *param_1) { u8 auStack_10 [12]; @@ -21,7 +21,7 @@ void sub_8083018(u32 param_1) auStack_10[8] = 0; } -void sub_8083030(u32 *param_1, u32 param_2) +void sub_8083030(unkStruct_8094924 *param_1, u16 param_2) { u16 uStack_8; @@ -29,7 +29,7 @@ void sub_8083030(u32 *param_1, u32 param_2) sub_8082FA8(param_1,&uStack_8,2); } -void sub_8083048(u32 *param_1, u32 param_2) +void sub_8083048(unkStruct_8094924 *param_1, u32 param_2) { u16 uStack_8; @@ -37,7 +37,7 @@ void sub_8083048(u32 *param_1, u32 param_2) sub_8082FA8(param_1,&uStack_8,2); } -void sub_8083060(u32 *param_1, u32 param_2) +void sub_8083060(unkStruct_8094924 *param_1, u32 param_2) { u8 uStack_8; @@ -45,7 +45,7 @@ void sub_8083060(u32 *param_1, u32 param_2) sub_8082FA8(param_1,&uStack_8,1); } -void sub_8083078(u32 *param_1, u32 param_2) +void sub_8083078(unkStruct_8094924 *param_1, u32 param_2) { u32 uStack_8; @@ -53,7 +53,7 @@ void sub_8083078(u32 *param_1, u32 param_2) sub_8082FA8(param_1,&uStack_8,4); } -void sub_808308C(u32 *param_1, u32 param_2) +void sub_808308C(unkStruct_8094924 *param_1, u32 param_2) { u32 uStack_8; @@ -61,7 +61,7 @@ void sub_808308C(u32 *param_1, u32 param_2) sub_8082FA8(param_1,&uStack_8,4); } -void sub_80830A0(u32 *param_1, u32 param_2) +void sub_80830A0(unkStruct_8094924 *param_1, u32 param_2) { u32 uStack_8; @@ -69,7 +69,7 @@ void sub_80830A0(u32 *param_1, u32 param_2) sub_8082FA8(param_1,&uStack_8,4); } -void sub_80830B4(u32 *param_1, u8 param_2) +void sub_80830B4(unkStruct_8094924 *param_1, u8 param_2) { u8 local_8; @@ -77,13 +77,13 @@ void sub_80830B4(u32 *param_1, u8 param_2) sub_8082FA8(param_1,&local_8,1); } -void SavePosition(u32 *param_1, Position *param_2) +void SavePosition(unkStruct_8094924 *param_1, Position *param_2) { sub_8082FA8(param_1, ¶m_2->x, 1); sub_8082FA8(param_1, ¶m_2->y, 1); } -void sub_80830F8(u32 *param_1, u32 *param_2) +void sub_80830F8(unkStruct_8094924 *param_1, u32 *param_2) { sub_8082FA8(param_1, ¶m_2[0], 1); sub_8082FA8(param_1, ¶m_2[1], 1); @@ -91,18 +91,18 @@ void sub_80830F8(u32 *param_1, u32 *param_2) sub_8082FA8(param_1, ¶m_2[3], 1); } -void sub_808312C(u32 *param_1, u16 *param_2) +void sub_808312C(unkStruct_8094924 *param_1, u16 *param_2) { sub_8082FA8(param_1, ¶m_2[0], 1); sub_8082FA8(param_1, ¶m_2[1], 1); } -void SaveSpeedCounters(u32 *param_1, u32 *speedCounters, u32 numCounters) +void SaveSpeedCounters(unkStruct_8094924 *param_1, u32 *speedCounters, u32 numCounters) { sub_8082FA8(param_1, speedCounters, numCounters); } -u16 sub_8083158(u32 param_1) +u16 sub_8083158(unkStruct_8094924 *param_1) { u16 local_8; @@ -110,7 +110,7 @@ u16 sub_8083158(u32 param_1) return local_8; } -s16 sub_8083170(u32 param_1) +s16 sub_8083170(unkStruct_8094924 *param_1) { s16 local_8; @@ -118,7 +118,7 @@ s16 sub_8083170(u32 param_1) return local_8; } -u8 sub_8083188(u32 param_1) +u8 sub_8083188(unkStruct_8094924 *param_1) { u8 local_8; @@ -126,7 +126,7 @@ u8 sub_8083188(u32 param_1) return local_8; } -u32 sub_80831A0(u32 param_1) +u32 sub_80831A0(unkStruct_8094924 *param_1) { u32 local_8; @@ -134,7 +134,7 @@ u32 sub_80831A0(u32 param_1) return local_8; } -u32 sub_80831B4(u32 param_1) +u32 sub_80831B4(unkStruct_8094924 *param_1) { u32 local_8; @@ -142,7 +142,7 @@ u32 sub_80831B4(u32 param_1) return local_8; } -u32 sub_80831C8(u32 param_1) +u32 sub_80831C8(unkStruct_8094924 *param_1) { u32 local_8; @@ -150,7 +150,7 @@ u32 sub_80831C8(u32 param_1) return local_8; } -bool8 sub_80831DC(u32 param_1) +bool8 sub_80831DC(unkStruct_8094924 *param_1) { u8 local_8; @@ -158,7 +158,7 @@ bool8 sub_80831DC(u32 param_1) return local_8 != 0; } -void sub_80831F8(u32 param_1,u16 *param_2) +void sub_80831F8(unkStruct_8094924 *param_1,u16 *param_2) { param_2[0] = 0; param_2[1] = 0; @@ -167,7 +167,7 @@ void sub_80831F8(u32 param_1,u16 *param_2) } -void sub_8083220(u32 param_1,u32 *param_2) +void sub_8083220(unkStruct_8094924 *param_1,u32 *param_2) { param_2[0] = 0; param_2[1] = 0; @@ -179,7 +179,7 @@ void sub_8083220(u32 param_1,u32 *param_2) sub_8082FE0(param_1,¶m_2[3],1); } -void sub_8083260(u32 param_1,u16 *param_2) +void sub_8083260(unkStruct_8094924 *param_1,u16 *param_2) { param_2[0] = 0; param_2[1] = 0; @@ -187,8 +187,8 @@ void sub_8083260(u32 param_1,u16 *param_2) sub_8082FE0(param_1,¶m_2[1],1); } -void sub_8083288(u32 r0, u16 *r1, u32 r2) +void sub_8083288(unkStruct_8094924 *r0, u16 *r1, u32 size) { - sub_8082FE0(r0, r1, r2); + sub_8082FE0(r0, r1, size); } diff --git a/src/code_8094D28.c b/src/code_8094D28.c new file mode 100644 index 000000000..f8d9453b3 --- /dev/null +++ b/src/code_8094D28.c @@ -0,0 +1,18 @@ +#include "global.h" + +IWRAM_DATA u32 gUnknown_3001198[0x270] = {0}; +EWRAM_DATA_2 s32 gUnknown_203B470 = {0}; +EWRAM_DATA_2 s32 gUnknown_203B474 = {0}; + +void sub_8094D28(s32 r0) { + + gUnknown_3001198[0] = r0; + gUnknown_203B470 = 1; + + for(; gUnknown_203B470 < 0x270; gUnknown_203B470++) + { + gUnknown_3001198[gUnknown_203B470] = + (gUnknown_3001198[gUnknown_203B470 - 1] ^ + (gUnknown_3001198[gUnknown_203B470 - 1] >> 0x1e)) * 0x6c078965 + gUnknown_203B470; + } +} diff --git a/src/code_809A560.c b/src/code_809A560.c index 302bf6fa2..a3c257fcb 100644 --- a/src/code_809A560.c +++ b/src/code_809A560.c @@ -1,50 +1,9 @@ #include "global.h" #include "text1.h" #include "memory.h" -#include "file_system.h" +#include "structs/str_3001B64.h" -struct unkStruct_3001B64_sub -{ - // size: 0x24 - u16 unk0; - /* 0x2 */ s16 speciesID; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u32 unk8; - u32 unkC; - u32 unk10; - /* 0x14 */ u8 *faceData; - u32 fill18; - u8 unk1C; - u8 fill1D[0x20 - 0x1D]; - /* 0x20 */ OpenedFile *faceFile; -}; - -struct unkStruct_3001B64 -{ - // size: 0x5A8 - u32 unk0; - u32 unk4; - u32 unk8; - u32 unkC; - u8 fill10[0x414 - 0x10]; - u32 unk414; - u32 unk418; - u32 unk41C; - u32 unk420; - u32 unk424; - u32 unk428; - u32 unk42C; - u32 unk430; - u32 unk434; - u32 fill438; - struct unkStruct_3001B64_sub unk43C[10]; - u16 unk5A4; -}; - -extern struct unkStruct_3001B64 *gUnknown_3001B64; +IWRAM_DATA struct unkStruct_3001B64 *gUnknown_3001B64 = {0}; extern u16 gUnknown_20399DC; extern u16 gUnknown_20399DE; diff --git a/src/code_809A560_1.c b/src/code_809A560_1.c new file mode 100644 index 000000000..f52c955d4 --- /dev/null +++ b/src/code_809A560_1.c @@ -0,0 +1,170 @@ +#include "global.h" +#include "structs/str_3001B64.h" +#include "code_80118A4.h" +#include "code_801D014.h" +#include "credits2.h" +#include "event_flag.h" +#include "flash.h" +#include "friend_list_menu.h" +#include "ground_main.h" +#include "personality_test1.h" + +extern struct unkStruct_3001B64 *gUnknown_3001B64; + +u32 sub_802E90C(); +void sub_802E918(); +u32 sub_80282DC(u8 *r0); +void sub_809927C(u8); +void sub_80282FC(void); +void sub_80993C0(u32); +void sub_8001064(void); +void sub_809965C(void); + +void sub_809C39C(void) { + gUnknown_3001B64->unk430 = sub_801D178(); + if(gUnknown_3001B64->unk430 == 3) + GroundMainGroundRequest(sub_8002694(sub_801D1D4()), 0, -1); + sub_801D1E0(); +} + +void sub_809C3D8(void) +{ + gUnknown_3001B64->unk430 = sub_801D178(); + if(gUnknown_3001B64->unk430 == 3) + GroundMainGroundRequest(sub_8002694(sub_801D1D4()), 0, -1); + sub_801D1E0(); +} + +void sub_809C414(void) +{ + u8 val; + + val = sub_802540C(); + + if(val != 0) + { + gUnknown_3001B64->unk430 = val; + GroundMainGroundRequest(sub_8002694(val), 0, -1); + } + else +{ + gUnknown_3001B64->unk430 = -1; + } + sub_8025418(); + +} + +void sub_809C464(void) +{ + DeleteTestTracker(); + sub_8001064(); + sub_809965C(); +} + +void sub_809C478(void) +{ + s32 temp; + s32 temp1; + + if(sub_80356A0() == 0x3) + { + PlaySound(0x313); + InitFlash(); + ClearFlashData(); + } + + sub_8035758(); + + sub_8001B88(3, &temp, &temp1); + sub_80993C0(0); +} + +// https://decomp.me/scratch/WyHAL - (84.32% matching - Seth) +NAKED +void sub_809C4B0(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tmovs r4, 0x1\n" + "\tnegs r4, r4\n" + "\tldr r5, _0809C4FC\n" + "\tldr r0, [r5]\n" + "\tmovs r2, 0x86\n" + "\tlsls r2, 3\n" + "\tadds r1, r0, r2\n" + "\tldr r0, [r1]\n" + "\tcmp r0, 0\n" + "\tbne _0809C4DE\n" + "\tbl sub_803B168\n" + "\tlsls r0, 16\n" + "\tldr r1, [r5]\n" + "\tldr r3, _0809C500\n" + "\tadds r2, r1, r3\n" + "\tasrs r4, r0, 16\n" + "\tlsrs r0, 16\n" + "\tstrh r0, [r2]\n" + "\tmovs r0, 0x86\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" +"_0809C4DE:\n" + "\tstr r4, [r1]\n" + "\tbl sub_803B1BC\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tcmp r4, r0\n" + "\tbeq _0809C4F4\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tbl GroundMap_ExecuteEvent\n" +"_0809C4F4:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0809C4FC: .4byte gUnknown_3001B64\n" +"_0809C500: .4byte 0x000005a4"); +} + + +void sub_809C504(void) +{ + u8 temp; + + if(sub_80282DC(&temp) == 1) + { + sub_809927C(temp); + gUnknown_3001B64->unk430 = 1; + } + else + { + gUnknown_3001B64->unk430 = -1; + } + sub_80282FC(); +} + +void sub_809C550(void) +{ + u32 ret; + s32 val; + + ret = sub_802E90C(); + val = 0; + sub_802E918(); + + switch(ret) + { + case 1: + if(sub_8001CC4(4, 0x1D, 0x3)) + val = 1; + break; + case 2: + if(sub_8001CC4(4, 0x1F, 0x2)) + val = 2; + break; + case 3: + if(sub_8001CC4(0xB, 0x33, 0x8)) + val = 3; + break; + } + gUnknown_3001B64->unk430 = val; +} diff --git a/src/code_809C5C4.c b/src/code_809C5C4.c index 7f33870e5..f7909d54c 100644 --- a/src/code_809C5C4.c +++ b/src/code_809C5C4.c @@ -23,7 +23,7 @@ struct unkStruct_3001B68 u8 unk20; }; -extern struct unkStruct_3001B68 *gUnknown_3001B68; +IWRAM_DATA struct unkStruct_3001B68 *gUnknown_3001B68 = {0}; struct unkStruct_20399E0 diff --git a/src/cpu.c b/src/cpu.c index cc0b22d27..862a611ef 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -2,7 +2,7 @@ #include "bg_control.h" #include "cpu.h" -extern u32 gUnknown_202D800; +EWRAM_DATA u32 gUnknown_202D800 = {0}; extern u16 gUnknown_203B0BE[]; extern u16 *gUnknown_2026E3C; extern u8 gUnknown_2026E38; diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index d9143ffce..34573ab45 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -34,10 +34,12 @@ enum ItemTargetFlag ITEM_TARGET_ALLY = 1 << 1 }; -extern s32 gNumPotentialTargets; -extern u32 gPotentialItemTargetWeights[NUM_DIRECTIONS]; -extern u32 gPotentialItemTargetDirections[NUM_DIRECTIONS]; -extern bool8 gTargetAhead[NUM_DIRECTIONS]; +EWRAM_DATA_2 s32 gNumPotentialTargets = {0}; + +EWRAM_DATA u32 gPotentialItemTargetDirections[NUM_DIRECTIONS] = {0}; +EWRAM_DATA bool8 gTargetAhead[NUM_DIRECTIONS] = {0}; +EWRAM_DATA u32 gPotentialItemTargetWeights[NUM_DIRECTIONS] = {0}; + extern TeamInventory *gTeamInventoryRef; void sub_807360C(void) diff --git a/src/dungeon_ai_leader.c b/src/dungeon_ai_leader.c index 57d3955ce..b9b9c1c6a 100644 --- a/src/dungeon_ai_leader.c +++ b/src/dungeon_ai_leader.c @@ -23,6 +23,8 @@ #include "dungeon_visibility.h" #include "pokemon_3.h" #include "pokemon.h" +#include "code_8077274_1.h" +#include "trap.h" extern u8 gUnknown_202F221; extern u8 gUnknown_202F222; @@ -55,7 +57,6 @@ void HandlePickUpPlayerAction(Entity *); void sub_8066E14(Entity * ); void sub_807348C(void); void sub_80732F0(void); -void sub_807FD84(Entity *); void sub_8066BD4(Entity*); void HandleTalkFieldAction(Entity *); void HandleUseMovePlayerAction(Entity *); @@ -67,7 +68,6 @@ void HandleUseItemAction(Entity *); void sub_8066FA4(Entity *); void HandleSetItemAction(Entity *,bool8); void HandleUnsetItemAction(Entity *,bool8); -void sub_807FE9C(Entity *,Position *,u32,u32); extern u8 sub_8044B28(void); extern u8 UseAttack(Entity *); void sub_8052740(u32); diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index 122c1cb1e..e1d10af22 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -7,25 +7,28 @@ #include "tile_types.h" #include "random.h" #include "dungeon_engine.h" +#include "dungeon_movement.h" -extern unkStruct_202F190 gUnknown_202F190; -extern unkStruct_202F190 *gUnknown_203B430; extern unkStruct_202F190 gUnknown_80F69D4; extern unkStruct_202F190 gUnknown_80F69EC; - -extern u8 gUnknown_8108EC0[]; extern u8 gUnknown_80F6A04[]; extern u8 gUnknown_80F6A10[]; extern u8 gUnknown_80F6A28[]; extern u8 gUnknown_80F6A1C[]; extern u8 gUnknown_80F6A34[]; extern u8 gUnknown_80F6A40[]; +extern u8 gUnknown_8108EC0[]; extern const struct FileArchive gDungeonFileArchive; -extern OpenedFile *gUnknown_202F18C; -extern OpenedFile *gDungeonPaletteFile; -extern unkStruct_202EE8C gUnknown_202EE8C[32]; -extern u8 gWalkableTileToCrossableTerrain[8]; +// ewram +EWRAM_DATA OpenedFile *gDungeonPaletteFile = {0}; +EWRAM_DATA unkStruct_202EE8C gUnknown_202EE8C[32] = {0}; +EWRAM_DATA OpenedFile *gUnknown_202F18C = {0}; +EWRAM_DATA unkStruct_202F190 gUnknown_202F190 = {0}; + +// ewram2 +EWRAM_DATA_2 unkStruct_202F190 *gUnknown_203B430 = {0}; + extern u8 sub_8043CE4(u32); extern int sprintf(char *, const char *, ...); @@ -331,4 +334,4 @@ void sub_8049B8C(void) sub_8049BB0(XCoord,YCoord); } } -} \ No newline at end of file +} diff --git a/src/dungeon_movement.c b/src/dungeon_movement.c index 64c938a69..dc847d666 100644 --- a/src/dungeon_movement.c +++ b/src/dungeon_movement.c @@ -16,7 +16,7 @@ #include "pokemon.h" #include "weather.h" -extern u8 gWalkableTileToCrossableTerrain[8]; +EWRAM_DATA u8 gWalkableTileToCrossableTerrain[8] = {0}; u8 GetCrossableTerrain(s16 species) { diff --git a/src/ground_main.c b/src/ground_main.c index d6c96290a..51ab2c738 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -144,7 +144,7 @@ void sub_8098CC8(void) ClearAllItems_8091FB4(); } -bool8 GroundMainGroundRequest(s16 r0, u32 r1, u32 r2) +bool8 GroundMainGroundRequest(s16 r0, u32 r1, s32 r2) { s32 temp; temp = r0; // force a asr shift diff --git a/src/ground_sprite.c b/src/ground_sprite.c index 7f94a6b07..93badefe6 100644 --- a/src/ground_sprite.c +++ b/src/ground_sprite.c @@ -8,6 +8,8 @@ #include "memory.h" #include "sprite.h" +IWRAM_DATA unkStruct_3001B7C *gUnknown_3001B7C = {0}; + extern unkStruct_2039DB0 gUnknown_2039DB0; extern unkStruct_2039DB0 gUnknown_2039DC0; extern u16 gUnknown_2039DCC; @@ -15,7 +17,6 @@ extern u16 gUnknown_2039DCE; extern u8 gUnknown_2039DD0; extern u32 gUnknown_2039DD4; extern OpenedFile *gUnknown_203B4B4; -extern unkStruct_3001B7C *gUnknown_3001B7C; // dungeon_sbin.s extern const struct FileArchive gDungeonFileArchive; @@ -204,4 +205,4 @@ UNUSED static u16 sub_80A65D8(u16 *a0) u16 sub_80A65E0(u32 a0) { return (a0 >> 16) & 0x337F; -} \ No newline at end of file +} diff --git a/src/move_actions.c b/src/move_actions.c index 547de471e..0598e7d48 100644 --- a/src/move_actions.c +++ b/src/move_actions.c @@ -214,7 +214,6 @@ extern u8 sub_806F4A4(Entity *, u32); extern void sub_807DF38(Entity *pokemon, Entity *target, Position *pos, u32, u8 moveType, s16); extern void nullsub_92(Entity *); extern u32 sub_8055864(Entity *pokemon, Entity *target, Move *param_3, s32 param_4, s32 param_5); -void sub_8079E34(Entity * pokemon, Entity * target, bool8 param_3); extern u8 sub_807EAA0(u32, u32); extern void sub_80522F4(Entity *r1, Entity *r2, const char[]); extern s32 sub_80556BC(Entity *, Entity *, u8, Move *, u32, u32); diff --git a/src/personality_test1.c b/src/personality_test1.c index 0e27266bd..9d64b1df2 100644 --- a/src/personality_test1.c +++ b/src/personality_test1.c @@ -409,4 +409,4 @@ static void PersonalityTest_DisplayStarterSprite(void) sub_800836C(1, r6, 14); CloseFile(faceFile); sub_80073E0(1); -} \ No newline at end of file +} diff --git a/src/status_actions.c b/src/status_actions.c index c73a0d8c6..fe1c89d3c 100644 --- a/src/status_actions.c +++ b/src/status_actions.c @@ -51,7 +51,6 @@ extern void sub_8049BB0(s32, s32); extern s16 sub_8057600(Move*, u32); extern u32 sub_8055864(Entity *pokemon, Entity *target, Move *param_3, s32 param_4, s32 param_5); extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3); -extern void sub_807FE04(Position *, u32); extern void sub_807DB74(Entity *); extern void HandleLuminousOrbAction(Entity *pokemon); extern void sub_807D510(Entity *, Entity *); diff --git a/src/trap.c b/src/trap.c index 075c8a17b..25d627e8a 100644 --- a/src/trap.c +++ b/src/trap.c @@ -3,6 +3,7 @@ #include "code_8045A00.h" #include "code_80521D0.h" +#include "code_8077274_1.h" #include "code_808417C.h" #include "constants/trap.h" #include "constants/type.h" @@ -64,37 +65,17 @@ extern Entity* sub_806B7F8(struct unkStruct_806B7F8 *, bool8); void sub_806A9B4(Entity *, u32); -void sub_8079E34(Entity *param_1, Entity *param_2, u32); s16 sub_803D970(u32); bool8 sub_806AA0C(s32, s32); void sub_80421EC(Position *, u32); bool8 sub_8045888(Entity *); -void SetTrap(Tile *, u32); void sub_803E708(u32, u32); u8 sub_8043D10(void); void sub_8068FE0(Entity *, u32, Entity *); void sub_805239C(Entity *, u8 *); void sub_8045C28(Item *, u8 , u8); void sub_8045BF8(u8 *, Item *); -void HandleTripTrap(Entity *pokemon,Entity *target); -void HandleMudTrap(Entity *pokemon,Entity *target); -void HandleStickyTrap(Entity *pokemon,Entity *target); -void HandleGrimyTrap(Entity *pokemon,Entity *target); -void HandleSummonTrap(Entity *pokemon,Position *pos); -void HandlePitfallTrap(Entity *pokemon,Entity *target,Tile *tile); -void HandleWarpTrap(Entity *pokemon,Entity *target); -void HandleWhirlwindTrap(Entity *entity,Entity *target); -void HandleSpinTrap(Entity *pokemon,Entity *target); -void HandleSlumberTrap(Entity *pokemon,Entity *target); -void HandleSlowTrap(Entity *pokemon,Entity *target); -void HandleSealTrap(Entity *pokemon,Entity *target); -void HandlePoisonTrap(Entity *pokemon,Entity *target); -void HandleSelfdestructTrap(Entity *pokemon,Entity *target); -void HandleExplosionTrap(Entity *pokemon,Entity *target); -void HandlePPZeroTrap(Entity *pokemon,Entity *target); -void HandleWonderTile(Entity *pokemon,Entity *target); -void HandlePokemonTrap(Entity *pokemon,Position *pos); void sub_806F324(Entity *,s16,u32,u32); void sub_806F480(Entity *, u32); extern void sub_80421C0(Entity *, u32); @@ -104,7 +85,7 @@ extern u8 sub_803F428(Position *pos); void sub_806A1E8(Entity *pokemon); void sub_8052364(Entity *, Position *, u8 *); void sub_8049ED4(void); -void sub_80522F4(Entity *r0, Entity *r1, const char r2[]); +void sub_80522F4(Entity *pokemon, Entity *target, const char r2[]); u8 sub_803D6FC(void); Entity *sub_8045684(u8, Position *, u8); extern void sub_807D148(Entity *pokemon, Entity *target, u32 r2, Position *r3); @@ -690,7 +671,7 @@ void HandlePPZeroTrap(Entity *param_1,Entity *param_2) } } -void HandleWonderTile(Entity *param_1, Entity *param_2) +void HandleWonderTile(Entity *pokemon, Entity *target) { - sub_8079E34(param_1, param_2, 0); + sub_8079E34(pokemon, target, FALSE); } diff --git a/src/trap_1.c b/src/trap_1.c index 2fcf3c0c2..5e0369f69 100644 --- a/src/trap_1.c +++ b/src/trap_1.c @@ -1,4 +1,6 @@ #include "global.h" +#include "structs/dungeon_entity.h" +#include "structs/map.h" #include "trap.h" #include "code_806CD90.h" #include "code_8092334.h" @@ -10,7 +12,7 @@ extern u8 gUnknown_81071E0[]; extern u8 gUnknown_81071D4[]; -extern void sub_8082FA8(void *, void *, u32); +extern void sub_8082FA8(unkStruct_8094924 *, void *, s32); void sub_8081B60(void *, Tile *); void sub_80830F8(void * , u32*); @@ -70,27 +72,27 @@ void sub_803E708(u32, u32); void sub_80421C0(Entity *, u32); void sub_804687C(Entity *, Position *, Position *, Item *, u32); -void HandleTripTrap(Entity *param_1, Entity *param_2) +void HandleTripTrap(Entity *pokemon, Entity *target) { u32 direction; EntityInfo *info; Position pos; Item item; - if (param_2 != NULL) { - sub_806CDD4(param_2, 6, NUM_DIRECTIONS); + if (target != NULL) { + sub_806CDD4(target, 6, NUM_DIRECTIONS); sub_803E708(0x10, 0x55); - sub_806CE68(param_2, NUM_DIRECTIONS); - info = param_2->info; + sub_806CE68(target, NUM_DIRECTIONS); + info = target->info; if ((info->heldItem).flags & ITEM_FLAG_EXISTS) { item = (info->heldItem); (info->heldItem).flags = 0; FillInventoryGaps(); - sub_80421C0(param_2, 400); + sub_80421C0(target, 400); direction = (info->action).direction & DIRECTION_MASK; - pos.x = (param_2->pos).x + gAdjacentTileOffsets[direction].x; - pos.y = (param_2->pos).y + gAdjacentTileOffsets[direction].y; - sub_804687C(param_1, ¶m_2->pos, &pos, &item, 1); + pos.x = (target->pos).x + gAdjacentTileOffsets[direction].x; + pos.y = (target->pos).y + gAdjacentTileOffsets[direction].y; + sub_804687C(pokemon, &target->pos, &pos, &item, 1); } } } diff --git a/sym_ewram.txt b/sym_ewram.txt index 2ce3fefcf..ba016abff 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -141,8 +141,8 @@ gBldCnt: /* 202D7FC (AgbMain - VBlank_CB) */ gUnknown_202D7FE: /* 202D7FE (AgbMain - sub_800CD64) */ .space 0x2 -gUnknown_202D800: /* 202D800 (sub_800CDA8 - sub_800CDC8) */ - .space 0x8 + .include "src/cpu.o" + .space 0x4 gUnknown_202D808: /* 202D808 (sub_800D2EC - sub_800D59C) */ .space 0x108 @@ -362,14 +362,7 @@ gUnknown_202EE70: /* 202EE70 (sub_804513C - sub_80828E0) */ gUnknown_202EE76: /* 202EE76 (sub_804513C - sub_8082A08) */ .space 0x12 -gDungeonPaletteFile: /* 202EE88 (sub_803E874 - SetDungeonBGColorRGB) */ - .space 0x4 -gUnknown_202EE8C: /* 202EE8C (sub_803E490 - SetDungeonBGColorRGB) */ - .space 0x300 -gUnknown_202F18C: /* 202F18C (LoadDungeonTilesetAssets - sub_8049820) */ - .space 0x4 -gUnknown_202F190: /* 202F190 (GetTileSafe) */ - .space 0x18 + .include "src/dungeon_map_access.o" gUnknown_202F1A8: /* 202F1A8 (sub_8043CE4 - sub_8051A74) */ .space 0x1 @@ -506,8 +499,7 @@ gUnknown_202F30C: /* 202F30C (sub_8067A80 - sub_8067A80) */ gUnknown_202F310: /* 202F310 (sub_8067A80 - sub_8068310) */ .space 0x4 -gWalkableTileToCrossableTerrain: /* 202F314 (LoadDungeonTilesetAssets - GetCrossableTerrain) */ - .space 0x8 + .include "src/dungeon_movement.o" gUnknown_202F31C: /* 202F31C (sub_80723D0 - sub_80725A4) */ .space 0x8 @@ -519,12 +511,7 @@ gUnknown_202F32C: /* 202F32C (xxx_dungeon_8042F6C - sub_8072CF4) */ gUnknown_202F32D: /* 202F32D (sub_8072CF4 - UseAttack) */ .space 0x3 -gPotentialItemTargetDirections: /* 202F330 (DecideUseItem - TargetThrownItem) */ - .space 0x20 -gTargetAhead: /* 202F350 (FindStraightThrowableTargets - TargetThrownItem) */ - .space 0x8 -gPotentialItemTargetWeights: /* 202F358 (DecideUseItem - TargetThrownItem) */ - .space 0x20 + .include "src/dungeon_ai_items.o" gUnknown_202F378: /* 202F378 (sub_8074FB0 - UseAttack) */ .space 0x8 diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 8f0018f3c..d6d163e38 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -72,11 +72,7 @@ gUnknown_203B0B2: /* 203B0B2 */ .include "src/flash.o" .space 0x3 -gUnknown_203B0B8: /* 203B0B8 (sub_800CB20 - sub_800CB50) */ - .space 0x4 - -gRawKeyInput: /* 203B0BC (sub_800CB20 - ReadKeyInput) */ - .space 0x2 +.include "src/code_800C9CC.o" gUnknown_203B0BE: /* 203B0BE (sub_800CDA8) */ .space 0xE @@ -260,8 +256,7 @@ gUnknown_203B420: /* 203B420 (sub_80462AC) */ gUnknown_203B428: /* 203B428 (sub_80462AC) */ .space 0x8 -gUnknown_203B430: /* 203B430 (GetTile - sub_8049840) */ - .space 0x4 + .include "src/dungeon_map_access.o" gUnknown_203B434: /* 203B434 (sub_80521D0 - sub_8072CF4) */ .space 0x4 @@ -272,8 +267,7 @@ gUnknown_203B438: /* 203B438 (sub_8055FA0 - sub_8056F80) */ gUnknown_203B43C: /* 203B43C (sub_8065FB4) */ .space 0x4 -gNumPotentialTargets: /* 203B440 (DecideUseItem - TargetThrownItem) */ - .space 0x4 + .include "src/dungeon_ai_items.o" gUnknown_203B444: /* 203B444 (sub_807DF38) */ .space 0xC @@ -288,13 +282,10 @@ gLeaderPointer: /* 203B450 (xxx_dungeon_8042F6C - sub_8082280) */ .include "src/rescue_team_info.o" .include "src/friend_area.o" .include "src/game_options.o" + .include "src/code_8094D28.o" -gUnknown_203B470: /* 203B470 (sub_8094D28 - sub_8094E4C) */ .space 0x4 -gUnknown_203B474: /* 203B474 (sub_8094E4C) */ - .space 0x8 - .include "src/play_time.o" .include "src/code_8094F88.o" .include "src/code_80958E8.o" diff --git a/sym_iwram.txt b/sym_iwram.txt index 933b16300..8aebecf7f 100644 --- a/sym_iwram.txt +++ b/sym_iwram.txt @@ -14,8 +14,7 @@ gUnknown_3000E94: /* 3000E94 */ gUnknown_3001018: /* 3001018 */ .space 0x180 -gUnknown_3001198: /* 3001198 */ - .space 0x9C0 +.include "src/code_8094D28.o" iwramClearEnd: unk_code_ram: /* 3001B58 */ @@ -28,18 +27,11 @@ gUnknown_3001B5A: /* 3001B5A */ .include "src/code_8023144.o" .include "src/code_8023868.o" - -gUnknown_3001B64: /* 3001B64 */ - .space 0x4 - -gUnknown_3001B68: /* 3001B68 */ - .space 0x4 - +.include "src/code_809A560.o" +.include "src/code_809C5C4.o" .include "src/ground_map.o" .include "src/ground_map_2.o" - -gUnknown_3001B7C: /* 3001B7C */ - .space 0x4 +.include "src/ground_sprite.o" gUnknown_3001B80: /* 3001B80 */ .space 0x4 From b2a0fe8422877efaf940d388eb564c1f5a0d3693 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 08:37:58 -0700 Subject: [PATCH 03/39] more cleanup and move more ram stuff --- asm/{code_80495E4.s => dungeon_map_access.s} | 0 include/dungeon_items.h | 2 ++ include/dungeon_map_access.h | 1 + include/dungeon_util.h | 3 ++ include/dungeon_util_1.h | 4 +++ ld_script.txt | 2 +- src/bg_control.c | 2 +- src/code_80118A4.c | 11 ++++---- src/code_8045A00.c | 3 +- src/code_8057824_1.c | 19 +++---------- src/code_8069E0C.c | 2 +- src/code_807CD9C.c | 7 ++--- src/code_80869E4.c | 6 ++-- src/code_8086A3C.c | 2 -- src/dungeon_ai_attack.c | 8 +++--- src/dungeon_ai_leader.c | 1 - src/dungeon_items.c | 10 +++---- src/dungeon_map_access.c | 2 -- src/dungeon_util_1.c | 4 +-- src/move_actions.c | 6 +--- src/reg_control.c | 28 +++++++++---------- src/save.c | 7 ++--- sym_ewram.txt | 29 ++++---------------- 23 files changed, 61 insertions(+), 98 deletions(-) rename asm/{code_80495E4.s => dungeon_map_access.s} (100%) diff --git a/asm/code_80495E4.s b/asm/dungeon_map_access.s similarity index 100% rename from asm/code_80495E4.s rename to asm/dungeon_map_access.s diff --git a/include/dungeon_items.h b/include/dungeon_items.h index a9cab2bc3..288a1147b 100644 --- a/include/dungeon_items.h +++ b/include/dungeon_items.h @@ -4,5 +4,7 @@ #include "structs/dungeon_entity.h" bool8 HasHeldItem(Entity *pokemon, u8 id); +void sub_8046CE4(Item *item, s32 param_2); +void sub_8046D20(void); #endif diff --git a/include/dungeon_map_access.h b/include/dungeon_map_access.h index 931ace038..45ea6a242 100644 --- a/include/dungeon_map_access.h +++ b/include/dungeon_map_access.h @@ -10,5 +10,6 @@ typedef struct unkStruct_202F190 Tile *GetTile(s32 x, s32 y); Tile *GetTileSafe(s32 x, s32 y); +void sub_804AC20(Position *pos); #endif diff --git a/include/dungeon_util.h b/include/dungeon_util.h index 436182755..b28f72e31 100644 --- a/include/dungeon_util.h +++ b/include/dungeon_util.h @@ -16,5 +16,8 @@ Trap* GetTrapData_1(Entity *entity); Item *GetItemData(Entity *entity); struct Tile *GetTileAtEntitySafe(Entity *entity); Item *GetItemData_1(Entity *entity); +void sub_804535C(Entity *entity, Position32 *pos); +void SetEntityPixelPos(Entity *entity, s32 x, s32 y); +void IncreaseEntityPixelPos(Entity *entity, s32 x, s32 y); #endif diff --git a/include/dungeon_util_1.h b/include/dungeon_util_1.h index d6aad4754..43c55d0a9 100644 --- a/include/dungeon_util_1.h +++ b/include/dungeon_util_1.h @@ -3,9 +3,13 @@ #include "structs/dungeon_entity.h" +typedef void (*DungeonCallback)(Entity *); + Entity *xxx_call_GetLeader(void); Entity *GetPartnerEntity(void); void sub_80854D4(void); +void sub_80855E4(DungeonCallback func); +void sub_808563C(DungeonCallback func); Entity *GetEntityFromClientType(u8 entityType); void sub_80856C8(Entity * pokemon, s32 x, s32 y); void sub_80856E0(Entity * pokemon, s32 direction); diff --git a/ld_script.txt b/ld_script.txt index 937c67d2e..65f89913c 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -221,7 +221,7 @@ SECTIONS { src/code_8048480.o(.text); src/dungeon_ai_item_weight.o(.text); src/dungeon_map_access.o(.text); - asm/code_80495E4.o(.text); + asm/dungeon_map_access.o(.text); src/dungeon_map_access_1.o(.text); src/tile_types.o(.text); asm/code_804AFAC.o(.text); diff --git a/src/bg_control.c b/src/bg_control.c index 77bf4c7f6..0638dda93 100644 --- a/src/bg_control.c +++ b/src/bg_control.c @@ -111,4 +111,4 @@ void sub_800CD64(s32 r0, bool8 r1) void SetBGOBJEnableFlags(u32 mask) { REG_DISPCNT = (REG_DISPCNT & 0xE0FF) | (~(mask << 8) & (DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON)); -} \ No newline at end of file +} diff --git a/src/code_80118A4.c b/src/code_80118A4.c index c8a994aae..4beef9b4c 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -32,10 +32,11 @@ extern struct UnkBgStruct *gUnknown_203B0E4; extern const u16 gUnknown_80D4144[8]; -EWRAM_DATA u32 gUnknown_202DE1C; -EWRAM_DATA s16 gUnknown_202DE20; -EWRAM_DATA s16 gUnknown_202DE22; -EWRAM_DATA s16 gUnknown_202DE24; + +EWRAM_DATA u32 gUnknown_202DE1C = {0}; +EWRAM_DATA s16 gUnknown_202DE20 = {0}; +EWRAM_DATA s16 gUnknown_202DE22 = {0}; +EWRAM_DATA s16 gUnknown_202DE24 = {0}; void nullsub_8(u32); extern void xxx_call_update_bg_vram(void); @@ -238,4 +239,4 @@ void sub_8011A04(void) UNUSED static void sub_8011A2C(u32 a0) { gUnknown_202DE1C = a0; -} \ No newline at end of file +} diff --git a/src/code_8045A00.c b/src/code_8045A00.c index 24ecd2403..e9b2268e5 100644 --- a/src/code_8045A00.c +++ b/src/code_8045A00.c @@ -1,6 +1,7 @@ #include "global.h" #include "code_8045A00.h" #include "constants/item.h" +#include "dungeon_items.h" #include "dungeon_map_access.h" #include "dungeon_random.h" #include "dungeon_util.h" @@ -15,9 +16,7 @@ extern struct unkStruct_8090F58 gUnknown_80F699C; extern struct unkStruct_8090F58 gUnknown_80F69A8; extern struct unkStruct_8090F58 gUnknown_80F6990; -extern bool8 IsNotSpecialItem(u8 id); void sub_8045BF8(u8 *, Item *); -void sub_8046CE4(void *param_1,u32 param_2); extern u32 sub_803D73C(u32); void sub_80460F8(Position *, Item *, u32); diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index adc5d44c6..c320cfaa2 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -6,6 +6,7 @@ #include "constants/direction.h" #include "constants/friend_area.h" #include "constants/weather.h" +#include "dungeon_items.h" #include "dungeon_leader.h" #include "dungeon_map_access.h" #include "dungeon_music.h" @@ -317,14 +318,10 @@ extern bool8 sub_800E9A8(s32); extern void sub_800DC14(u32); extern void sub_8086A3C(Entity *r0); -extern void sub_80854D4(void); -extern void sub_80855E4(void *); extern void sub_8068FE0(Entity *, u32, u32); extern void sub_803E708(u32, u32); extern void sub_8086448(void); -extern void PlaySoundEffect(u32); -extern void IncreaseEntityPixelPos(Entity *, u32, u32); extern void sub_8042B0C(Entity *); extern void sub_803E708(u32, u32); extern u8 sub_806FD18(Entity *); @@ -338,13 +335,12 @@ extern void SetupBossFightHP(Entity *, u32, u32); extern void sub_803E9D0(void); extern void DeoxysScreenFlash(void); extern void sub_8085EB0(); -extern void sub_808563C(void *); void SetupDeoxysFightHP(Entity *r0); void sub_808C550(void); void sub_808C590(Entity *r0); void SetupDeoxysFacingDirection(Entity *r0); -void sub_808C9B0(); +void sub_808C9B0(Entity *); void sub_808C8E0(Entity *param_1); void sub_808C360(void); void KyogreScreenFlash(); @@ -352,7 +348,6 @@ void KyogreScreenFlash(); void sub_808C0CC(); void LugiaScreenFlash(); void LugiaScreenFlash2(); -extern void sub_80861B8(Entity *, u32, u32); void nullsub_99(); @@ -364,10 +359,7 @@ extern void sub_8086A54(Entity *); extern void sub_806BFC0(EntityInfo *, u32); - -extern Entity *xxx_call_GetLeader(void); extern void sub_808BBA8(Entity * ); -extern void sub_80855E4(void *); extern void sub_8041888(u32); extern void sub_80861B8(Entity *, u32, u32); extern void sub_803E708(u32, u32); @@ -387,7 +379,6 @@ extern u8 sub_80860A8(u32); extern void sub_8049ED4(); extern void sub_8052D44(s16 *, Entity *, Entity *); extern void sub_80421C0(Entity *, u32); -extern void sub_8046D20(); extern void sub_808B1CC(u8); extern void sub_80464C8(Entity *, u32 *, Item *); extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32); @@ -421,13 +412,11 @@ void sub_80891F0(void); void sub_8089294(void); void GroudonScreenFlash2(void); -extern u8 sub_8086AE4(u32); - +extern u8 sub_8086AE4(s16); extern void sub_8072008(Entity *, Entity *, s16, u32, u32); extern void sub_8085374(); -extern void sub_80856C8(Entity *, s32, s32); extern void sub_8086A54(Entity *); extern void sub_803F878(u32,s32); @@ -449,7 +438,7 @@ void ZapdosDropInEffect(Entity *param_1); void ZapdosScreenFlash(int param_1); extern s32 sub_8052C68(u32, const u8 *, const u8 *, u32); -extern void sub_80861A8(void); +extern void sub_80861A8(Entity *); extern void sub_8045C28(Item *, u8 , u8 *); extern void EnableJirachiWishWarpTile(void); extern void sub_808BB3C(Position *); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index abb55c0dd..0df1cda77 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -5,6 +5,7 @@ #include "constants/status.h" #include "constants/type.h" #include "constants/weather.h" +#include "dungeon_map_access.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" @@ -41,7 +42,6 @@ extern bool8 sub_8045888(Entity *); extern void sub_806A2BC(Entity *, u8); extern void sub_804178C(u32); extern void sub_803F508(Entity *); -extern void sub_804AC20(Position *); extern void sub_803E46C(u32); extern void sub_803E708(u32 r0, u32 r1); diff --git a/src/code_807CD9C.c b/src/code_807CD9C.c index c7ba2336b..5901728c0 100644 --- a/src/code_807CD9C.c +++ b/src/code_807CD9C.c @@ -6,6 +6,7 @@ #include "constants/type.h" #include "dungeon_ai.h" #include "dungeon_leader.h" +#include "dungeon_map_access.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_util.h" #include "move_util.h" @@ -22,8 +23,6 @@ extern void nullsub_93(Position *); extern void sub_80522F4(Entity *, Entity *, u8 *); extern void sub_806F370(Entity *pokemon, Entity *target, u32, u32, u8 *, u8 moveType, s32, u32, u32, u32); extern void sub_80694C0(Entity *, s32, s32, u32); -extern void sub_804535C(Entity *, u32); -extern void sub_804AC20(Position *); extern void sub_807EC28(bool8); extern void sub_806A5B8(Entity *); @@ -95,8 +94,8 @@ void sub_807E254(Entity *pokemon,Entity *target) nullsub_93(&targetPos); sub_80694C0(pokemon,targetPos.x,targetPos.y,1); sub_80694C0(target,pokemonPos.x,pokemonPos.y,1); - sub_804535C(pokemon,0x0); - sub_804535C(target,0x0); + sub_804535C(pokemon,NULL); + sub_804535C(target,NULL); if (EntityExists(pokemon)) { if (pokemon->info->isTeamLeader) { diff --git a/src/code_80869E4.c b/src/code_80869E4.c index 89cdb40fa..3def370f6 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -3,6 +3,7 @@ #include "code_80869E4.h" #include "constants/direction.h" #include "structs/str_dungeon.h" +#include "dungeon_util.h" #include "dungeon_util_1.h" #include "random.h" @@ -27,12 +28,9 @@ extern void DisplayDungeonDialogue(const u8 *); extern void sub_8085EB0(void); extern void sub_803E748(void); -extern void sub_80855E4(void *); extern s32 GetCameraXPos(void); extern s32 GetCameraYPos(void); extern void sub_803F878(u32, u32); -extern void IncreaseEntityPixelPos(Entity *, u32, u32); -extern void sub_804535C(Entity *, Position32 *); extern void sub_8086A54(Entity *); extern void sub_8086A3C(Entity *); extern void PlaySoundEffect(u32); @@ -544,4 +542,4 @@ void sub_80869E4(Entity *a0, s32 a1, u8 a2, s8 a3) "\tpop {r0}\n" "\tbx r0"); } -#endif // NONMATCHING \ No newline at end of file +#endif // NONMATCHING diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index 28eca49e8..f5324013e 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -17,14 +17,12 @@ extern u8 sub_8044B28(void); extern u8 gUnknown_202E038[]; extern void sub_8085374(); -extern void sub_80855E4(void *); extern void sub_8068FE0(Entity *, u32, u32); extern void DisplayDungeonDialogue(const u8 *); extern void sub_803E708(u32, u32); extern void sub_8086448(void); extern void SkarmoryEntry(Entity *); extern void sub_8086A54(Entity *); -extern void sub_808563C(void *); extern void sub_8087144(); extern void sub_8072008(Entity *pokemon, Entity *r1, u32 r2, u8 r3, u32); extern bool8 sub_8085B80(u8 *); diff --git a/src/dungeon_ai_attack.c b/src/dungeon_ai_attack.c index 82e20a9ae..6a795999b 100644 --- a/src/dungeon_ai_attack.c +++ b/src/dungeon_ai_attack.c @@ -48,10 +48,10 @@ extern const u8 *const gUnknown_80FC718[]; extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; -extern bool8 gCanAttackInDirection[NUM_DIRECTIONS]; -extern s32 gPotentialAttackTargetWeights[NUM_DIRECTIONS]; -extern u8 gPotentialAttackTargetDirections[NUM_DIRECTIONS]; -extern Entity *gPotentialTargets[NUM_DIRECTIONS]; +EWRAM_DATA bool8 gCanAttackInDirection[NUM_DIRECTIONS] = {0}; +EWRAM_DATA u8 gPotentialAttackTargetDirections[NUM_DIRECTIONS] = {0}; +EWRAM_DATA s32 gPotentialAttackTargetWeights[NUM_DIRECTIONS] = {0}; +EWRAM_DATA Entity *gPotentialTargets[NUM_DIRECTIONS] = {0}; extern void sub_8055A00(Entity *, u8, u32, u32, u32); extern void sub_806A9B4(Entity *, u8); diff --git a/src/dungeon_ai_leader.c b/src/dungeon_ai_leader.c index b9b9c1c6a..9098f0820 100644 --- a/src/dungeon_ai_leader.c +++ b/src/dungeon_ai_leader.c @@ -79,7 +79,6 @@ void HandlePickUpAIAction(Entity *pokemon); void HandleThrowItemAIAction(Entity *pokemon); void HandleEatAIAction(Entity *pokemon); bool8 sub_8044B84(void); -void sub_8046D20(void); extern void sub_8074094(Entity *); extern void sub_8071DA4(Entity *); extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3); diff --git a/src/dungeon_items.c b/src/dungeon_items.c index e2ba45dd8..e723dafad 100644 --- a/src/dungeon_items.c +++ b/src/dungeon_items.c @@ -18,7 +18,6 @@ extern u8 *gUnknown_8105360[]; extern u8 *gUnknown_81053A8[]; extern u8 *gUnknown_8105434[]; -extern u8 sub_8046D70(void); extern s32 sub_8052B8C(u32, u8 *, u32); extern void sub_80861A8(void); extern void PrintFieldMessage(u32, u8 *, u32); @@ -30,7 +29,8 @@ extern void PlaySoundEffect(u32); extern void sub_804178C(u32); extern void sub_8040A84(void); -void MusicBoxCreation(void); +static void MusicBoxCreation(void); +static u8 sub_8046D70(void); bool8 HasHeldItem(Entity *pokemon, u8 id) { @@ -51,7 +51,7 @@ bool8 HasHeldItem(Entity *pokemon, u8 id) return TRUE; } -void sub_8046CE4(u8 *param_1,s32 param_2) +void sub_8046CE4(Item *item,s32 param_2) { s32 iVar1; s32 iVar2; @@ -60,12 +60,12 @@ void sub_8046CE4(u8 *param_1,s32 param_2) for(iVar2 = 0; iVar2 < 200; iVar2++) { if (gUnknown_810A3F0[iVar1] <= param_2) { - param_1[1] = iVar1; + item->quantity = iVar1; return; } iVar1 = iVar1 / 2; } - param_1[1] = 1; + item->quantity = 1; } void sub_8046D20(void) diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index e1d10af22..1a1911f75 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -20,13 +20,11 @@ extern u8 gUnknown_80F6A40[]; extern u8 gUnknown_8108EC0[]; extern const struct FileArchive gDungeonFileArchive; -// ewram EWRAM_DATA OpenedFile *gDungeonPaletteFile = {0}; EWRAM_DATA unkStruct_202EE8C gUnknown_202EE8C[32] = {0}; EWRAM_DATA OpenedFile *gUnknown_202F18C = {0}; EWRAM_DATA unkStruct_202F190 gUnknown_202F190 = {0}; -// ewram2 EWRAM_DATA_2 unkStruct_202F190 *gUnknown_203B430 = {0}; extern u8 sub_8043CE4(u32); diff --git a/src/dungeon_util_1.c b/src/dungeon_util_1.c index 451e2dd76..5b81fe1a9 100644 --- a/src/dungeon_util_1.c +++ b/src/dungeon_util_1.c @@ -11,7 +11,6 @@ extern const u8 gUnknown_8107358[25]; -extern void sub_804535C(Entity *, u32); extern s32 GetCameraXPos(void); extern s32 GetCameraYPos(void); extern void sub_803F4A0(u32); @@ -24,7 +23,6 @@ extern void sub_80457DC(Entity *); extern void sub_80861D4(Entity *, u32, s32 direction); extern void sub_80694C0(Entity *, s32, s32, u32); -typedef void (*DungeonCallback)(Entity *); Entity *xxx_call_GetLeader(void) { @@ -167,7 +165,7 @@ Entity *GetEntityFromClientType(u8 entityType) void sub_80856C8(Entity * pokemon, s32 x, s32 y) { sub_80694C0(pokemon, x, y, 1); - sub_804535C(pokemon,0); + sub_804535C(pokemon,NULL); } void sub_80856E0(Entity * pokemon, s32 direction) diff --git a/src/move_actions.c b/src/move_actions.c index 0598e7d48..e67492bda 100644 --- a/src/move_actions.c +++ b/src/move_actions.c @@ -187,19 +187,15 @@ extern u8 gUnknown_202F218; extern u32 gUnknown_202F21C; extern bool8 gUnknown_202F220; -extern void sub_804535C(Entity *, u32); -extern void sub_804AC20(Position *); extern void sub_806A5B8(Entity *entity); extern void sub_80694C0(Entity *, s32, s32, u32); void sub_8075900(Entity *pokemon, u8 r1); extern void sub_80943A0(void*, s32); extern u8 sub_8044B28(void); extern u8 sub_803F428(Position *pos); -extern void IncreaseEntityPixelPos(Entity *, u32, u32); extern void sub_803E46C(u32); extern void sub_807EC28(bool8); extern void sub_806F370(Entity *r0, Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); -extern void SetEntityPixelPos(Entity *, s32, s32); extern void sub_804652C(Entity *, Entity *, Item *, u32, Position *); extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32); extern void sub_8045C28(Item *, u8 , u8); @@ -3070,7 +3066,7 @@ _0805AA5E: #else Position *pos; #endif - sub_804535C(target, 0); + sub_804535C(target, NULL); pos = r9; if (sub_80706A4(target, pos)) { sub_807D148(pokemon,target,0,0); diff --git a/src/reg_control.c b/src/reg_control.c index bf6f3b190..a1ba8db9a 100644 --- a/src/reg_control.c +++ b/src/reg_control.c @@ -6,21 +6,21 @@ #include "reg_control.h" #include "sprite.h" -extern unkStruct_202D648 gUnknown_202D608[8]; -extern unkStruct_202D648 gUnknown_202D648[8]; +EWRAM_DATA unkStruct_202D648 gUnknown_202D608[8] = {0}; +EWRAM_DATA unkStruct_202D648 gUnknown_202D648[8] = {0}; -EWRAM_DATA bool8 gUnknown_203B099; -EWRAM_DATA bool8 gUnknown_203B09A; -EWRAM_DATA bool8 gUnknown_203B09B; -EWRAM_DATA u32 gUnknown_203B09C; -EWRAM_DATA u32 gUnknown_203B0A0; -EWRAM_DATA u32 gUnknown_203B0A4; // Written to but never read -EWRAM_DATA s16 gUnknown_203B0A8; -EWRAM_DATA s16 gUnknown_203B0AA; -EWRAM_DATA s16 gUnknown_203B0AC; -EWRAM_DATA s16 gUnknown_203B0AE; -EWRAM_DATA s16 gUnknown_203B0B0; // Written to but never read -EWRAM_DATA s16 gUnknown_203B0B2; // Written to but never read +EWRAM_DATA_2 bool8 gUnknown_203B099 = {0}; +EWRAM_DATA_2 bool8 gUnknown_203B09A = {0}; +EWRAM_DATA_2 bool8 gUnknown_203B09B = {0}; +EWRAM_DATA_2 u32 gUnknown_203B09C = {0}; +EWRAM_DATA_2 u32 gUnknown_203B0A0 = {0}; +EWRAM_DATA_2 u32 gUnknown_203B0A4 = {0}; // Written to but never read +EWRAM_DATA_2 s16 gUnknown_203B0A8 = {0}; +EWRAM_DATA_2 s16 gUnknown_203B0AA = {0}; +EWRAM_DATA_2 s16 gUnknown_203B0AC = {0}; +EWRAM_DATA_2 s16 gUnknown_203B0AE = {0}; +EWRAM_DATA_2 s16 gUnknown_203B0B0 = {0}; // Written to but never read +EWRAM_DATA_2 s16 gUnknown_203B0B2 = {0}; // Written to but never read static void UpdateBGControlRegisters(void); diff --git a/src/save.c b/src/save.c index 89ae4d843..3c28b04c7 100644 --- a/src/save.c +++ b/src/save.c @@ -12,6 +12,8 @@ #include "random.h" #include "save.h" +EWRAM_DATA s32 gUnknown_202DE28 = {0}; + EWRAM_DATA_2 u32 gUnknown_203B17C = {0}; EWRAM_DATA_2 char *gUnknown_203B180 = {0}; EWRAM_DATA_2 struct UnkStruct_203B184 *gUnknown_203B184 = {0}; @@ -28,10 +30,6 @@ struct unk_struct u32 padding[503]; }; - -extern s32 gUnknown_202DE28; -extern u32 *gUnknown_203B488; - ALIGNED(4) static const char debug_fill8[] = "pksdir0"; ALIGNED(4) const char sGameInternalVersion[] = _("POKE_DUNGEON__05"); @@ -39,7 +37,6 @@ ALIGNED(4) static const char fill_save0[] = _("pksdir0"); ALIGNED(4) static const char fill_save1[] = _("pksdir0"); ALIGNED(4) static const char fill_save2[] = _("pksdir0"); - extern bool8 sub_800DAB0(u16, u8*, s32); extern bool8 sub_800DAB4(u16, u8*, s32); extern bool8 sub_800DAB8(void); diff --git a/sym_ewram.txt b/sym_ewram.txt index ba016abff..28b50df8b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -122,12 +122,7 @@ gUnknown_202D2A0: /* 202D2A0 (sub_8009A1C - sub_8009BE4) */ .include "src/file_system.o" .include "src/decompress.o" .include "src/main.o" - -gUnknown_202D608: /* 202D608 (sub_800B720 - VBlankIntr) */ - .space 0x40 -gUnknown_202D648: /* 202D648 (VBlankIntr - VCountIntr) */ - .space 0x40 - + .include "src/reg_control.o" .include "src/music.o" .space 0x3 @@ -182,17 +177,10 @@ gUnknown_202DE18: /* 202DE18 (sub_800F990 - sub_8010014) */ gUnknown_202DE19: /* 202DE19 (sub_800F990 - sub_8010014) */ .space 0x3 -gUnknown_202DE1C: /* 202DE1C (sub_801180C - sub_8011A2C) */ - .space 0x4 -gUnknown_202DE20: /* 202DE20 (sub_801180C - PlayMenuSoundEffect) */ - .space 0x2 -gUnknown_202DE22: /* 202DE22 (sub_801180C - sub_8011A04) */ - .space 0x2 -gUnknown_202DE24: /* 202DE24 (sub_801180C - sub_8011860) */ - .space 0x4 + .include "src/code_80118A4.o" + .space 0x2 -gUnknown_202DE28: /* 202DE28 (sub_8011C34 - sub_8011C40) */ - .space 0x4 + .include "src/save.o" .align 4 /* gUnknown_202DE30[0] seems to be the s32 value to insert in place of "$d0" (ARG_VALUE_0) in strings */ @@ -516,14 +504,7 @@ gUnknown_202F32D: /* 202F32D (sub_8072CF4 - UseAttack) */ gUnknown_202F378: /* 202F378 (sub_8074FB0 - UseAttack) */ .space 0x8 -gCanAttackInDirection: /* 202F380 (AIConsiderMove - TryAddTargetToAITargetList) */ - .space 0x8 -gPotentialAttackTargetDirections: /* 202F388 (AIConsiderMove - TryAddTargetToAITargetList) */ - .space 0x8 -gPotentialAttackTargetWeights: /* 202F390 (AIConsiderMove - TryAddTargetToAITargetList) */ - .space 0x20 -gPotentialTargets: /* 202F3B0 (AIConsiderMove - TryAddTargetToAITargetList) */ - .space 0x20 + .include "src/dungeon_ai_attack.o" gUnknown_202F3D0: /* 202F3D0 (sub_80867F4 - sub_8086854) */ .space 0x8 From 6978b955c5ad7d8b27cc95b9f8077b4706b4f44e Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 08:51:26 -0700 Subject: [PATCH 04/39] wonder_mail_3_mid is finally split correctly --- ld_script.txt | 4 + src/code_8072F3C.c | 226 +++++++++++++++ src/mission_reward.c | 392 ++++++++++++++++++++++++++ src/wonder_mail_3_mid.c | 611 ---------------------------------------- 4 files changed, 622 insertions(+), 611 deletions(-) create mode 100644 src/code_8072F3C.c create mode 100644 src/mission_reward.c diff --git a/ld_script.txt b/ld_script.txt index 65f89913c..c92a42892 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -160,6 +160,8 @@ SECTIONS { src/mailbox.o(.text); src/pelipper_board.o(.text); src/wonder_mail_3_mid.o(.text); + src/mission_reward.o(.text); + src/code_8072F3C.o(.text); asm/wonder_mail_3_mid.o(.text); src/wonder_mail_3_1.o(.text); src/makuhita_dojo1.o(.text); @@ -500,6 +502,8 @@ SECTIONS { src/mailbox.o(.rodata); src/pelipper_board.o(.rodata); src/wonder_mail_3_mid.o(.rodata); + src/mission_reward.o(.rodata); + src/code_8072F3C.o(.rodata); src/makuhita_dojo1.o(.rodata); src/makuhita_dojo2.o(.rodata); src/wonder_mail_4.o(.rodata); diff --git a/src/code_8072F3C.c b/src/code_8072F3C.c new file mode 100644 index 000000000..3a228b92e --- /dev/null +++ b/src/code_8072F3C.c @@ -0,0 +1,226 @@ +#include "global.h" +#include "globaldata.h" +#include "constants/input.h" +#include "code_80118A4.h" +#include "input.h" +#include "memory.h" +#include "menu_input.h" +#include "text1.h" +#include "text2.h" +#include "structs/struct_sub80095e4.h" + + +struct unkStruct_203B314 +{ + // size: 0x15C + s16 unk0[2]; + u8 fill4[0x5C - 0x4]; + u8 unk5C[2]; + u8 fill5E[0x8A - 0x5E]; + u8 unk8A[2]; + u8 unk8C[0xB8 - 0x8C]; + u8 unkB8; + u8 unkB9; + u8 unkBA; + u8 unkBB; + struct struct_Sub80095E4_2 sBC; +}; + +extern struct unkStruct_203B314 *gUnknown_203B314; + + +const UnkTextStruct2 gUnknown_80E06FC = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +const UnkTextStruct2 gUnknown_80E0714 = { + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x02, + 0x0E, 0x0E, + 0x0E, 0x00, + NULL +}; +const UnkTextStruct2 gUnknown_80E072C = { + 0x00, 0x00, 0x00, 0x00, + 0x06, + 0x02, 0x02, + 0x10, 0x10, + 0x10, 0x00, + NULL +}; + +ALIGNED(4) const u8 gUnknown_80E0744[] = "Dungeons"; +ALIGNED(4) const u8 gUnknown_80E0750[] = {0x83, 0xC2}; +ALIGNED(4) const u8 gUnknown_80E0754[] = {0x83, 0xC0}; + +void sub_802F9C0(void); +void sub_802FA50(void); +const u8 *sub_80974A0(s16 index); +extern bool8 sub_802FCF0(u32); +extern s32 sub_802FBF4(void); + +u32 sub_802F73C(u32 r0, UnkTextStruct2_sub *r1, u32 r2, u8 r3) +{ + if (sub_802FCF0(r0)) + return 0; + + if (gUnknown_203B314 == NULL) + gUnknown_203B314 = MemoryAlloc(sizeof(struct unkStruct_203B314), 8); + + gUnknown_203B314->unkB8 = r3; + gUnknown_203B314->sBC.s0.unk34 = r0; + gUnknown_203B314->sBC.s0.unk38 = &gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34]; + sub_8006518(gUnknown_203B314->sBC.s0.unk3C); + + if (r3 != 0) + gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E072C; + else + gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E0714; + + gUnknown_203B314->sBC.s0.unk38->unk14 = gUnknown_203B314->sBC.unk9C; + + if (r1 != 0) + gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34].unk8 = *r1; + + sub_8012D08(gUnknown_203B314->sBC.s0.unk38, r2); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B314->sBC.s0.unk3C, TRUE, TRUE); + sub_8013818(&gUnknown_203B314->sBC.s0.input, sub_802FBF4(), r2, r0); + sub_802F9C0(); + sub_802FA50(); + return 1; +} + +u32 sub_802F848(s16 param_1) +{ + int index; + s32 param_1_32; + + param_1_32 = param_1; // cast needed + + for( index = 0; index < gUnknown_203B314->sBC.s0.input.unk22; index++ ) { + if (gUnknown_203B314->unk0[index] == param_1_32) { + sub_8013878(&gUnknown_203B314->sBC.s0.input,index); + sub_802F9C0(); + sub_802FA50(); + return 1; + } + } + sub_8013878(&gUnknown_203B314->sBC.s0.input,0); + return 0; +} + +u32 sub_802F8A0(u8 r0) +{ + if(r0 == 0) + { + sub_8013660(&gUnknown_203B314->sBC.s0.input); + return 0; + } + else + { + switch(GetKeyPress(&gUnknown_203B314->sBC.s0.input)) + { + case INPUT_B_BUTTON: + PlayMenuSoundEffect(1); + return 2; + case INPUT_A_BUTTON: + PlayMenuSoundEffect(0); + return 3; + default: + if(sub_80138B8(&gUnknown_203B314->sBC.s0.input, 1) != 0) + { + sub_802F9C0(); + sub_802FA50(); + return 1; + } + else + { + return 0; + } + } + } +} + +s16 sub_802F90C(void) +{ + return gUnknown_203B314->unk0[(gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C) + gUnknown_203B314->sBC.s0.input.menuIndex]; +} + +void sub_802F938(u8 r0) +{ + gUnknown_203B314->sBC.s0.input.unk22 = sub_802FBF4(); + sub_8013984(&gUnknown_203B314->sBC.s0.input); + sub_802F9C0(); + sub_802FA50(); + + if(r0 != 0) + AddMenuCursorSprite(&gUnknown_203B314->sBC.s0.input); +} + +void sub_802F974(void) +{ + if(gUnknown_203B314 != NULL) + { + gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E06FC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B314->sBC.s0.unk3C, TRUE, TRUE); + MemoryFree(gUnknown_203B314); + gUnknown_203B314 = NULL; + } +} + +void sub_802F9C0(void) +{ + gUnknown_203B314->sBC.unk9C[0] = 1; + gUnknown_203B314->sBC.unk9C[1] = 0; + gUnknown_203B314->sBC.unk9C[2] = 8; + gUnknown_203B314->sBC.unk9C[3] = 0; + + SUB_80095E4_CALL(gUnknown_203B314->sBC.s0); +} + +void sub_802FA50(void) +{ + s32 sVar1; + const u8 *text; + u32 y; + u32 y2; + int index; + int counter; + + sub_8008C54(gUnknown_203B314->sBC.s0.unk34); + sub_80073B8(gUnknown_203B314->sBC.s0.unk34); + xxx_call_draw_string(10,0,gUnknown_80E0744,gUnknown_203B314->sBC.s0.unk34,0); + sub_8012BC4(gUnknown_203B314->sBC.unk9C[2] * 8 + 4,0,gUnknown_203B314->sBC.s0.input.unk1E + 1,2,7,gUnknown_203B314->sBC.s0.unk34); + if (gUnknown_203B314->unkB8 != 0) { + for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++) + { + y = sub_8013800(&gUnknown_203B314->sBC.s0.input,counter); + index = gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C + counter; + sVar1 = gUnknown_203B314->unk0[index]; + if (gUnknown_203B314->unk5C[index] != 0) { + xxx_call_draw_string(10,y,gUnknown_80E0750,gUnknown_203B314->sBC.s0.unk34,0); + } + else if (gUnknown_203B314->unk8A[index] != 0) { + xxx_call_draw_string(10,y,gUnknown_80E0754,gUnknown_203B314->sBC.s0.unk34,0); + } + xxx_call_draw_string(0x18,y,sub_80974A0(sVar1),gUnknown_203B314->sBC.s0.unk34,0); + } + } + else { + for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++) + { + y2 = sub_8013800(&gUnknown_203B314->sBC.s0.input,counter); + text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C + counter]); + xxx_call_draw_string(8,y2,text,gUnknown_203B314->sBC.s0.unk34,0); + } + } + sub_80073E0(gUnknown_203B314->sBC.s0.unk34); +} diff --git a/src/mission_reward.c b/src/mission_reward.c new file mode 100644 index 000000000..9dfeaaa77 --- /dev/null +++ b/src/mission_reward.c @@ -0,0 +1,392 @@ +#include "global.h" +#include "globaldata.h" +#include "code_802F204.h" +#include "pokemon.h" +#include "pokemon_mid.h" +#include "rescue_team_info.h" +#include "friend_area.h" +#include "input.h" +#include "items.h" +#include "memory.h" +#include "code_80130A8.h" +#include "code_80118A4.h" +#include "code_801B60C.h" +#include "text1.h" +#include "text2.h" + +struct unkStruct_203B310 +{ + // size: 0x84 + /* 0x0 */ u32 state; + /* 0x4 */ u32 nextState; + /* 0x8 */ bool8 displayClientDialogueSprite; // true to display the dialogue sprite for the client + /* 0x9 */ u8 currTeamRank; // team rank + /* 0xC */ s32 itemRewardIndex; + unkStruct_802F204 *unk10; + /* 0x14 */ OpenedFile *faceFile; + /* 0x18 */ u8 *faceData; + s16 unk1C; + s16 unk1E; + u8 unk20; + u8 unk21; + u8 unk22; + UnkTextStruct2 unk24[4]; +}; +extern struct unkStruct_203B310 *gUnknown_203B310; + + +extern u8 gUnknown_202E038[]; +extern u8 gUnknown_202E628[]; +extern u8 gUnknown_202DEA8[]; +extern u8 gUnknown_202E5D8[]; +extern u8 gAvailablePokemonNames[]; +extern u32 gUnknown_202DE30; + +enum FriendRewardStates +{ + PREP_MONEY_REWARD, + MONEY_REWARD, + PREP_FRIEND_AREA_REWARD, + UNLOCK_FRIEND_AREA, + PREP_ITEM_REWARD, + GIVE_ITEM_REWARD, + NEXT_ITEM, + TEAM_PNTS_REWARD, + NEW_TEAM_RANK, + REWARD_EXIT, +}; + +const UnkTextStruct2 gUnknown_80E041C = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +ALIGNED(4) const u8 gUnknown_80E0434[] = _( + " Here{APOSTROPHE}s your reward!\n" + "{COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} {POKE}!"); + +ALIGNED(4) const u8 gUnknown_80E045C[] = _( + "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1} received\n" + "{CENTER_ALIGN}{COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} {POKE}."); + +ALIGNED(4) const u8 gUnknown_80E0484[] = _( + "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1}{APOSTROPHE}s team received\n" + "{CENTER_ALIGN}{COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} {POKE}."); + +ALIGNED(4) const u8 gUnknown_80E04B4[]= _( + " As your reward{COMMA} you can\n" + "now go to the Friend Area\n" + "{COLOR_1 GREEN}{ARG_FRIEND_AREA}{END_COLOR_TEXT_1}!"); + +ALIGNED(4) const u8 gUnknown_80E04F4[] = _( + "{CENTER_ALIGN}...Oh{COMMA} wait{COMMA} sorry.{EXTRA_MSG}" + "{CENTER_ALIGN}You already have the \n" + "{CENTER_ALIGN}{COLOR_1 GREEN}{ARG_FRIEND_AREA} Friend Area{END_COLOR_TEXT_1}.{EXTRA_MSG}" + "{CENTER_ALIGN}I{APOSTROPHE}m sorry that my reward is\n" + "{CENTER_ALIGN}something you already have.{EXTRA_MSG}" + "{CENTER_ALIGN}In its place{COMMA} {COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1}{COMMA}\n" + "{CENTER_ALIGN}you can have {COLOR_1 LIGHT_BLUE}1{COMMA}000{END_COLOR_TEXT_1} {POKE}."); + +ALIGNED(4) const u8 gUnknown_80E05C0[] = _( + "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1} gained access\n" + "{CENTER_ALIGN}to the Friend Area\n" + "{CENTER_ALIGN}{COLOR_1 GREEN}{ARG_FRIEND_AREA}{END_COLOR_TEXT_1}."); + +ALIGNED(4) const u8 gUnknown_80E05FC[] = _( + "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1}{APOSTROPHE}s team gained access\n" + "{CENTER_ALIGN}to the Friend Area\n" + "{CENTER_ALIGN}{COLOR_1 GREEN}{ARG_FRIEND_AREA}{END_COLOR_TEXT_1}."); + +ALIGNED(4) const u8 gUnknown_80E0640[] = _( + " Here{APOSTROPHE}s your reward!\n" + "The promised {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1}!"); + +ALIGNED(4) const u8 gUnknown_80E0670[] = _( + "{CENTER_ALIGN}Rescue Team {COLOR_1 LIGHT_BLUE}$t{END_COLOR_TEXT_1}\n" + "{CENTER_ALIGN}gained {COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} rescue points."); + +ALIGNED(4) const u8 gUnknown_80E06A8[] = _( + "{CENTER_ALIGN}Congratulations!{EXTRA_MSG}" + "{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE}$t{END_COLOR_TEXT_1} went up in rank\n" + "{CENTER_ALIGN}from the {ARG_POKEMON_2}\n" + "{CENTER_ALIGN}to the {ARG_POKEMON_3}!"); + + +void SetRewardSceneState(u32); +void sub_802F6FC(void); +void ProceedToNextRewardSceneState(void); +void sub_802F300(void); +void HandleMissionReward(void); + +u32 sub_802F204(unkStruct_802F204 *r0, bool8 displayClientSprite) +{ + struct unkStruct_203B310 *preload; + + ResetUnusedInputStruct(); + sub_800641C(NULL, TRUE, TRUE); + gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8); + gUnknown_203B310->unk10 = r0; + gUnknown_203B310->itemRewardIndex = 0; + gUnknown_203B310->displayClientDialogueSprite = displayClientSprite; + + // NOTE: dumb var to get correct ordering + preload = gUnknown_203B310; + strcpy(gUnknown_202E5D8, preload->unk10->clientName); + PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); + + gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->clientSpecies); + gUnknown_203B310->faceData = NULL; + + gUnknown_203B310->unk20 = 0; + gUnknown_203B310->unk21 = 0; + gUnknown_203B310->unk22 = 0; + gUnknown_203B310->unk1C = 2; + gUnknown_203B310->unk1E = 8; + + if(gUnknown_203B310->faceFile != NULL) + { + gUnknown_203B310->faceData = gUnknown_203B310->faceFile->data; + } + + SetRewardSceneState(PREP_MONEY_REWARD); + return 1; +} + +u32 sub_802F298(void) +{ + switch(gUnknown_203B310->state) + { + case REWARD_EXIT: + return 3; + case GIVE_ITEM_REWARD: + sub_802F6FC(); + return 0; + default: + ProceedToNextRewardSceneState(); + return 0; + } +} + +void sub_802F2C0(void) +{ + if(gUnknown_203B310 != NULL) + { + if(gUnknown_203B310->faceFile != 0) + CloseFile(gUnknown_203B310->faceFile); + MemoryFree(gUnknown_203B310); + gUnknown_203B310 = NULL; + } +} + +void SetRewardSceneState(u32 newState) +{ + gUnknown_203B310->state = newState; + sub_802F300(); + HandleMissionReward(); +} + +void sub_802F300(void) +{ + s32 index; + switch(gUnknown_203B310->state) + { + case PREP_MONEY_REWARD: + sub_8006518(gUnknown_203B310->unk24); + for(index = 0; index < 4; index++) + { + gUnknown_203B310->unk24[index] = gUnknown_80E041C; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B310->unk24, TRUE, TRUE); + default: + break; + } +} + +void HandleMissionReward(void) +{ + int moneyReward; + const u8 *rankString; + u8 itemID; + struct unkStruct_8090F58 local_20; + Item item; + + switch(gUnknown_203B310->state) { + case PREP_MONEY_REWARD: + moneyReward = gUnknown_203B310->unk10->moneyReward; + if (moneyReward == 0) { + SetRewardSceneState(PREP_FRIEND_AREA_REWARD); + } + else { + gUnknown_202DE30 = moneyReward; + if (gUnknown_203B310->displayClientDialogueSprite) { + sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d); + gUnknown_203B310->nextState = MONEY_REWARD; + } + else { + SetRewardSceneState(MONEY_REWARD); + } + } + break; + case MONEY_REWARD: + PlaySound(0xcb); + AddToTeamMoney(gUnknown_203B310->unk10->moneyReward); + if (sub_808D544(0) < 2) { + sub_80141B4(gUnknown_80E045C,0,0,0x101); + } + else { + sub_80141B4(gUnknown_80E0484,0,0,0x101); + } + gUnknown_203B310->nextState = PREP_FRIEND_AREA_REWARD; + break; + case PREP_FRIEND_AREA_REWARD: + if (gUnknown_203B310->unk10->friendAreaReward == 0) { + SetRewardSceneState(PREP_ITEM_REWARD); + } + else { + 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; + } + else { + SetRewardSceneState(UNLOCK_FRIEND_AREA); + } + } + break; + case UNLOCK_FRIEND_AREA: + if (GetFriendAreaStatus(gUnknown_203B310->unk10->friendAreaReward)) { + // We already have the friend area + AddToTeamMoney(1000); + sub_80141B4(gUnknown_80E04F4,0,0,0x101); + } + else + { + if (sub_808D544(0) < 2) { + UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward); + PlaySound(0xce); + sub_80141B4(gUnknown_80E05C0,0,0,0x101); + } + else + { + UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward); + PlaySound(0xce); + sub_80141B4(gUnknown_80E05FC,0,0,0x101); + } + } + gUnknown_203B310->nextState = PREP_ITEM_REWARD; + break; + case PREP_ITEM_REWARD: + itemID = gUnknown_203B310->unk10->itemRewards[0]; + if (itemID != ITEM_NOTHING) + { + if (gUnknown_203B310->unk10->moneyReward == 0) { + item.id = itemID; + if (IsThrowableItem(item.id)) { + item.quantity = gUnknown_203B310->unk10->quantity; + } + else { + item.quantity = 0; + } + item.flags = ITEM_FLAG_EXISTS; + local_20.unk0 = 0; + local_20.unk4 = 0; + local_20.unk8 = 1; + sub_8090E14(gUnknown_202DEA8,&item,&local_20); + if (gUnknown_203B310->displayClientDialogueSprite) { + sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d); + gUnknown_203B310->nextState = GIVE_ITEM_REWARD; + } + else + { + SetRewardSceneState(GIVE_ITEM_REWARD); + } + } + else + { + SetRewardSceneState(GIVE_ITEM_REWARD); + } + } + else + SetRewardSceneState(TEAM_PNTS_REWARD); + break; + case GIVE_ITEM_REWARD: + if ((gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex]) == 0) { + SetRewardSceneState(NEXT_ITEM); + } + else { + if ((gUnknown_203B310->itemRewardIndex == 0) && (gUnknown_203B310->unk10->moneyReward == 0)) { + sub_801B60C(0,gUnknown_203B310->unk10->itemRewards[0],gUnknown_203B310->unk10->quantity); + } + else { + sub_801B60C(1,gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex],gUnknown_203B310->unk10->quantity); + } + } + break; + case NEXT_ITEM: + gUnknown_203B310->itemRewardIndex++; + if(gUnknown_203B310->itemRewardIndex < MAX_ITEM_REWARDS) + SetRewardSceneState(GIVE_ITEM_REWARD); + else + SetRewardSceneState(TEAM_PNTS_REWARD); + break; + case TEAM_PNTS_REWARD: + if (gUnknown_203B310->unk10->teamRankPtsReward == 0) { + SetRewardSceneState(REWARD_EXIT); + } + else { + gUnknown_203B310->currTeamRank = GetRescueTeamRank(); + AddToTeamRankPts(gUnknown_203B310->unk10->teamRankPtsReward); + PlaySound(0xcb); + if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) { + gUnknown_203B310->nextState = NEW_TEAM_RANK; + } + else { + gUnknown_203B310->nextState = REWARD_EXIT; + } + gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward; + sub_80141B4(gUnknown_80E0670,0,0,0x101); + } + break; + case NEW_TEAM_RANK: + PlaySound(0xc9); + gUnknown_203B310->nextState = REWARD_EXIT; + rankString = GetTeamRankString(gUnknown_203B310->currTeamRank); + strcpy(gUnknown_202E038,rankString); + rankString = GetTeamRankString(GetRescueTeamRank()); + strcpy(gUnknown_202E038 + 0x50,rankString); + sub_80141B4(gUnknown_80E06A8,0,0,0x101); + break; + case REWARD_EXIT: + break; + } +} + +void sub_802F6FC(void) +{ + switch(sub_801B6AC()) + { + case 2: + case 3: + sub_801B72C(); + SetRewardSceneState(NEXT_ITEM); + break; + case 0: + case 1: + break; + } +} + +void ProceedToNextRewardSceneState(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + SetRewardSceneState(gUnknown_203B310->nextState); + } +} + diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index ded3494e6..e4c06f075 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -1,21 +1,11 @@ #include "global.h" #include "globaldata.h" #include "code_802DE84.h" -#include "code_802F204.h" -#include "constants/input.h" #include "memory.h" #include "text1.h" #include "text2.h" -#include "pokemon.h" -#include "pokemon_mid.h" -#include "rescue_team_info.h" -#include "friend_area.h" -#include "items.h" #include "menu_input.h" #include "structs/str_802C39C.h" -#include "code_80130A8.h" -#include "code_80118A4.h" -#include "code_801B60C.h" #include "common_strings.h" #include "code_803B050.h" #include "wonder_mail_802CDD4.h" @@ -34,64 +24,6 @@ struct unkStruct_203B30C }; static EWRAM_DATA_2 struct unkStruct_203B30C *gUnknown_203B30C = {0}; -struct unkStruct_203B310 -{ - // size: 0x84 - /* 0x0 */ u32 state; - /* 0x4 */ u32 nextState; - /* 0x8 */ bool8 displayClientDialogueSprite; // true to display the dialogue sprite for the client - /* 0x9 */ u8 currTeamRank; // team rank - /* 0xC */ s32 itemRewardIndex; - unkStruct_802F204 *unk10; - /* 0x14 */ OpenedFile *faceFile; - /* 0x18 */ u8 *faceData; - s16 unk1C; - s16 unk1E; - u8 unk20; - u8 unk21; - u8 unk22; - UnkTextStruct2 unk24[4]; -}; -extern struct unkStruct_203B310 *gUnknown_203B310; - -struct unkStruct_203B314 -{ - // size: 0x15C - s16 unk0[2]; - u8 fill4[0x5C - 0x4]; - u8 unk5C[2]; - u8 fill5E[0x8A - 0x5E]; - u8 unk8A[2]; - u8 unk8C[0xB8 - 0x8C]; - u8 unkB8; - u8 unkB9; - u8 unkBA; - u8 unkBB; - struct struct_Sub80095E4_2 sBC; -}; - -extern struct unkStruct_203B314 *gUnknown_203B314; - -enum FriendRewardStates -{ - PREP_MONEY_REWARD, - MONEY_REWARD, - PREP_FRIEND_AREA_REWARD, - UNLOCK_FRIEND_AREA, - PREP_ITEM_REWARD, - GIVE_ITEM_REWARD, - NEXT_ITEM, - TEAM_PNTS_REWARD, - NEW_TEAM_RANK, - REWARD_EXIT, -}; - -extern bool8 sub_802FCF0(u32); -extern void sub_802F9C0(void); -extern void sub_802FA50(void); -extern s32 sub_802FBF4(void); - -extern void SetRewardSceneState(u32); extern void sub_802EFEC(u32); extern void sub_802F148(void); extern void sub_802F184(void); @@ -99,18 +31,6 @@ extern void sub_802F1E8(void); extern void sub_802F004(); extern void sub_802F088(); extern void sub_802F108(void); -extern void sub_802F6FC(void); -extern void ProceedToNextRewardSceneState(void); -extern void sub_802F300(void); -void HandleMissionReward(void); -const u8 *sub_80974A0(s16 index); - -extern u8 gUnknown_202E038[]; -extern u8 gUnknown_202E628[]; -extern u8 gUnknown_202DEA8[]; -extern u8 gUnknown_202E5D8[]; -extern u8 gAvailablePokemonNames[]; -extern u32 gUnknown_202DE30; const UnkTextStruct2 gUnknown_80E03C4 = { 0x00, 0x00, 0x00, 0x00, @@ -138,97 +58,6 @@ const UnkTextStruct2 gUnknown_80E03F4 = { }; const u8 gUnknown_80E040C[] = "Send"; -static const u8 wonder_mail_fill[] = "pksdir0"; -const UnkTextStruct2 gUnknown_80E041C = { - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -ALIGNED(4) const u8 gUnknown_80E0434[] = _( - " Here{APOSTROPHE}s your reward!\n" - "{COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} {POKE}!"); - -ALIGNED(4) const u8 gUnknown_80E045C[] = _( - "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1} received\n" - "{CENTER_ALIGN}{COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} {POKE}."); - -ALIGNED(4) const u8 gUnknown_80E0484[] = _( - "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1}{APOSTROPHE}s team received\n" - "{CENTER_ALIGN}{COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} {POKE}."); - -ALIGNED(4) const u8 gUnknown_80E04B4[]= _( - " As your reward{COMMA} you can\n" - "now go to the Friend Area\n" - "{COLOR_1 GREEN}{ARG_FRIEND_AREA}{END_COLOR_TEXT_1}!"); - -ALIGNED(4) const u8 gUnknown_80E04F4[] = _( - "{CENTER_ALIGN}...Oh{COMMA} wait{COMMA} sorry.{EXTRA_MSG}" - "{CENTER_ALIGN}You already have the \n" - "{CENTER_ALIGN}{COLOR_1 GREEN}{ARG_FRIEND_AREA} Friend Area{END_COLOR_TEXT_1}.{EXTRA_MSG}" - "{CENTER_ALIGN}I{APOSTROPHE}m sorry that my reward is\n" - "{CENTER_ALIGN}something you already have.{EXTRA_MSG}" - "{CENTER_ALIGN}In its place{COMMA} {COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1}{COMMA}\n" - "{CENTER_ALIGN}you can have {COLOR_1 LIGHT_BLUE}1{COMMA}000{END_COLOR_TEXT_1} {POKE}."); - -ALIGNED(4) const u8 gUnknown_80E05C0[] = _( - "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1} gained access\n" - "{CENTER_ALIGN}to the Friend Area\n" - "{CENTER_ALIGN}{COLOR_1 GREEN}{ARG_FRIEND_AREA}{END_COLOR_TEXT_1}."); - -ALIGNED(4) const u8 gUnknown_80E05FC[] = _( - "{CENTER_ALIGN}{COLOR_1 YELLOW_5}{ARG_POKEMON_0}{END_COLOR_TEXT_1}{APOSTROPHE}s team gained access\n" - "{CENTER_ALIGN}to the Friend Area\n" - "{CENTER_ALIGN}{COLOR_1 GREEN}{ARG_FRIEND_AREA}{END_COLOR_TEXT_1}."); - -ALIGNED(4) const u8 gUnknown_80E0640[] = _( - " Here{APOSTROPHE}s your reward!\n" - "The promised {COLOR_1 GREEN}{ARG_MOVE_ITEM_1}{END_COLOR_TEXT_1}!"); - -ALIGNED(4) const u8 gUnknown_80E0670[] = _( - "{CENTER_ALIGN}Rescue Team {COLOR_1 LIGHT_BLUE}$t{END_COLOR_TEXT_1}\n" - "{CENTER_ALIGN}gained {COLOR_1 CYAN}{ARG_VALUE_0}{END_COLOR_TEXT_1} rescue points."); - -ALIGNED(4) const u8 gUnknown_80E06A8[] = _( - "{CENTER_ALIGN}Congratulations!{EXTRA_MSG}" - "{CENTER_ALIGN}{COLOR_1 LIGHT_BLUE}$t{END_COLOR_TEXT_1} went up in rank\n" - "{CENTER_ALIGN}from the {ARG_POKEMON_2}\n" - "{CENTER_ALIGN}to the {ARG_POKEMON_3}!"); - -static const u8 wonder_mail_fill2[] = "pksdir0"; - -const UnkTextStruct2 gUnknown_80E06FC = { - 0x00, 0x00, 0x00, 0x00, - 0x03, - 0x00, 0x00, - 0x00, 0x00, - 0x00, 0x00, - NULL -}; - -const UnkTextStruct2 gUnknown_80E0714 = { - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 0x0E, 0x0E, - 0x0E, 0x00, - NULL -}; -const UnkTextStruct2 gUnknown_80E072C = { - 0x00, 0x00, 0x00, 0x00, - 0x06, - 0x02, 0x02, - 0x10, 0x10, - 0x10, 0x00, - NULL -}; - -ALIGNED(4) const u8 gUnknown_80E0744[] = "Dungeons"; -ALIGNED(4) const u8 gUnknown_80E0750[] = {0x83, 0xC2}; -ALIGNED(4) const u8 gUnknown_80E0754[] = {0x83, 0xC0}; u32 sub_802EF48(void) { @@ -401,443 +230,3 @@ void sub_802F1E8(void) break; } } - - -// THIS IS A NEW FILE: - - - - -u32 sub_802F204(unkStruct_802F204 *r0, bool8 displayClientSprite) -{ - struct unkStruct_203B310 *preload; - - ResetUnusedInputStruct(); - sub_800641C(NULL, TRUE, TRUE); - gUnknown_203B310 = MemoryAlloc(sizeof(struct unkStruct_203B310), 8); - gUnknown_203B310->unk10 = r0; - gUnknown_203B310->itemRewardIndex = 0; - gUnknown_203B310->displayClientDialogueSprite = displayClientSprite; - - // NOTE: dumb var to get correct ordering - preload = gUnknown_203B310; - strcpy(gUnknown_202E5D8, preload->unk10->clientName); - PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct()); - - gUnknown_203B310->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B310->unk10->clientSpecies); - gUnknown_203B310->faceData = NULL; - - gUnknown_203B310->unk20 = 0; - gUnknown_203B310->unk21 = 0; - gUnknown_203B310->unk22 = 0; - gUnknown_203B310->unk1C = 2; - gUnknown_203B310->unk1E = 8; - - if(gUnknown_203B310->faceFile != NULL) - { - gUnknown_203B310->faceData = gUnknown_203B310->faceFile->data; - } - - SetRewardSceneState(PREP_MONEY_REWARD); - return 1; -} - -u32 sub_802F298(void) -{ - switch(gUnknown_203B310->state) - { - case REWARD_EXIT: - return 3; - case GIVE_ITEM_REWARD: - sub_802F6FC(); - return 0; - default: - ProceedToNextRewardSceneState(); - return 0; - } -} - -void sub_802F2C0(void) -{ - if(gUnknown_203B310 != NULL) - { - if(gUnknown_203B310->faceFile != 0) - CloseFile(gUnknown_203B310->faceFile); - MemoryFree(gUnknown_203B310); - gUnknown_203B310 = NULL; - } -} - -void SetRewardSceneState(u32 newState) -{ - gUnknown_203B310->state = newState; - sub_802F300(); - HandleMissionReward(); -} - -void sub_802F300(void) -{ - s32 index; - switch(gUnknown_203B310->state) - { - case PREP_MONEY_REWARD: - sub_8006518(gUnknown_203B310->unk24); - for(index = 0; index < 4; index++) - { - gUnknown_203B310->unk24[index] = gUnknown_80E041C; - } - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B310->unk24, TRUE, TRUE); - default: - break; - } -} - -void HandleMissionReward(void) -{ - int moneyReward; - const u8 *rankString; - u8 itemID; - struct unkStruct_8090F58 local_20; - Item item; - - switch(gUnknown_203B310->state) { - case PREP_MONEY_REWARD: - moneyReward = gUnknown_203B310->unk10->moneyReward; - if (moneyReward == 0) { - SetRewardSceneState(PREP_FRIEND_AREA_REWARD); - } - else { - gUnknown_202DE30 = moneyReward; - if (gUnknown_203B310->displayClientDialogueSprite) { - sub_80141B4(gUnknown_80E0434,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->nextState = MONEY_REWARD; - } - else { - SetRewardSceneState(MONEY_REWARD); - } - } - break; - case MONEY_REWARD: - PlaySound(0xcb); - AddToTeamMoney(gUnknown_203B310->unk10->moneyReward); - if (sub_808D544(0) < 2) { - sub_80141B4(gUnknown_80E045C,0,0,0x101); - } - else { - sub_80141B4(gUnknown_80E0484,0,0,0x101); - } - gUnknown_203B310->nextState = PREP_FRIEND_AREA_REWARD; - break; - case PREP_FRIEND_AREA_REWARD: - if (gUnknown_203B310->unk10->friendAreaReward == 0) { - SetRewardSceneState(PREP_ITEM_REWARD); - } - else { - 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; - } - else { - SetRewardSceneState(UNLOCK_FRIEND_AREA); - } - } - break; - case UNLOCK_FRIEND_AREA: - if (GetFriendAreaStatus(gUnknown_203B310->unk10->friendAreaReward)) { - // We already have the friend area - AddToTeamMoney(1000); - sub_80141B4(gUnknown_80E04F4,0,0,0x101); - } - else - { - if (sub_808D544(0) < 2) { - UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward); - PlaySound(0xce); - sub_80141B4(gUnknown_80E05C0,0,0,0x101); - } - else - { - UnlockFriendArea(gUnknown_203B310->unk10->friendAreaReward); - PlaySound(0xce); - sub_80141B4(gUnknown_80E05FC,0,0,0x101); - } - } - gUnknown_203B310->nextState = PREP_ITEM_REWARD; - break; - case PREP_ITEM_REWARD: - itemID = gUnknown_203B310->unk10->itemRewards[0]; - if (itemID != ITEM_NOTHING) - { - if (gUnknown_203B310->unk10->moneyReward == 0) { - item.id = itemID; - if (IsThrowableItem(item.id)) { - item.quantity = gUnknown_203B310->unk10->quantity; - } - else { - item.quantity = 0; - } - item.flags = ITEM_FLAG_EXISTS; - local_20.unk0 = 0; - local_20.unk4 = 0; - local_20.unk8 = 1; - sub_8090E14(gUnknown_202DEA8,&item,&local_20); - if (gUnknown_203B310->displayClientDialogueSprite) { - sub_80141B4(gUnknown_80E0640,0,&gUnknown_203B310->faceFile,0x10d); - gUnknown_203B310->nextState = GIVE_ITEM_REWARD; - } - else - { - SetRewardSceneState(GIVE_ITEM_REWARD); - } - } - else - { - SetRewardSceneState(GIVE_ITEM_REWARD); - } - } - else - SetRewardSceneState(TEAM_PNTS_REWARD); - break; - case GIVE_ITEM_REWARD: - if ((gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex]) == 0) { - SetRewardSceneState(NEXT_ITEM); - } - else { - if ((gUnknown_203B310->itemRewardIndex == 0) && (gUnknown_203B310->unk10->moneyReward == 0)) { - sub_801B60C(0,gUnknown_203B310->unk10->itemRewards[0],gUnknown_203B310->unk10->quantity); - } - else { - sub_801B60C(1,gUnknown_203B310->unk10->itemRewards[gUnknown_203B310->itemRewardIndex],gUnknown_203B310->unk10->quantity); - } - } - break; - case NEXT_ITEM: - gUnknown_203B310->itemRewardIndex++; - if(gUnknown_203B310->itemRewardIndex < MAX_ITEM_REWARDS) - SetRewardSceneState(GIVE_ITEM_REWARD); - else - SetRewardSceneState(TEAM_PNTS_REWARD); - break; - case TEAM_PNTS_REWARD: - if (gUnknown_203B310->unk10->teamRankPtsReward == 0) { - SetRewardSceneState(REWARD_EXIT); - } - else { - gUnknown_203B310->currTeamRank = GetRescueTeamRank(); - AddToTeamRankPts(gUnknown_203B310->unk10->teamRankPtsReward); - PlaySound(0xcb); - if (gUnknown_203B310->currTeamRank != GetRescueTeamRank()) { - gUnknown_203B310->nextState = NEW_TEAM_RANK; - } - else { - gUnknown_203B310->nextState = REWARD_EXIT; - } - gUnknown_202DE30 = gUnknown_203B310->unk10->teamRankPtsReward; - sub_80141B4(gUnknown_80E0670,0,0,0x101); - } - break; - case NEW_TEAM_RANK: - PlaySound(0xc9); - gUnknown_203B310->nextState = REWARD_EXIT; - rankString = GetTeamRankString(gUnknown_203B310->currTeamRank); - strcpy(gUnknown_202E038,rankString); - rankString = GetTeamRankString(GetRescueTeamRank()); - strcpy(gUnknown_202E038 + 0x50,rankString); - sub_80141B4(gUnknown_80E06A8,0,0,0x101); - break; - case REWARD_EXIT: - break; - } -} - -void sub_802F6FC(void) -{ - switch(sub_801B6AC()) - { - case 2: - case 3: - sub_801B72C(); - SetRewardSceneState(NEXT_ITEM); - break; - case 0: - case 1: - break; - } -} - -void ProceedToNextRewardSceneState(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - SetRewardSceneState(gUnknown_203B310->nextState); - } -} - - - -// THIS IS A NEW FILE: - - - -u32 sub_802F73C(u32 r0, UnkTextStruct2_sub *r1, u32 r2, u8 r3) -{ - if (sub_802FCF0(r0)) - return 0; - - if (gUnknown_203B314 == NULL) - gUnknown_203B314 = MemoryAlloc(sizeof(struct unkStruct_203B314), 8); - - gUnknown_203B314->unkB8 = r3; - gUnknown_203B314->sBC.s0.unk34 = r0; - gUnknown_203B314->sBC.s0.unk38 = &gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34]; - sub_8006518(gUnknown_203B314->sBC.s0.unk3C); - - if (r3 != 0) - gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E072C; - else - gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E0714; - - gUnknown_203B314->sBC.s0.unk38->unk14 = gUnknown_203B314->sBC.unk9C; - - if (r1 != 0) - gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34].unk8 = *r1; - - sub_8012D08(gUnknown_203B314->sBC.s0.unk38, r2); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B314->sBC.s0.unk3C, TRUE, TRUE); - sub_8013818(&gUnknown_203B314->sBC.s0.input, sub_802FBF4(), r2, r0); - sub_802F9C0(); - sub_802FA50(); - return 1; -} - -u32 sub_802F848(s16 param_1) -{ - int index; - s32 param_1_32; - - param_1_32 = param_1; // cast needed - - for( index = 0; index < gUnknown_203B314->sBC.s0.input.unk22; index++ ) { - if (gUnknown_203B314->unk0[index] == param_1_32) { - sub_8013878(&gUnknown_203B314->sBC.s0.input,index); - sub_802F9C0(); - sub_802FA50(); - return 1; - } - } - sub_8013878(&gUnknown_203B314->sBC.s0.input,0); - return 0; -} - -u32 sub_802F8A0(u8 r0) -{ - if(r0 == 0) - { - sub_8013660(&gUnknown_203B314->sBC.s0.input); - return 0; - } - else - { - switch(GetKeyPress(&gUnknown_203B314->sBC.s0.input)) - { - case INPUT_B_BUTTON: - PlayMenuSoundEffect(1); - return 2; - case INPUT_A_BUTTON: - PlayMenuSoundEffect(0); - return 3; - default: - if(sub_80138B8(&gUnknown_203B314->sBC.s0.input, 1) != 0) - { - sub_802F9C0(); - sub_802FA50(); - return 1; - } - else - { - return 0; - } - } - } -} - -s16 sub_802F90C(void) -{ - return gUnknown_203B314->unk0[(gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C) + gUnknown_203B314->sBC.s0.input.menuIndex]; -} - -void sub_802F938(u8 r0) -{ - gUnknown_203B314->sBC.s0.input.unk22 = sub_802FBF4(); - sub_8013984(&gUnknown_203B314->sBC.s0.input); - sub_802F9C0(); - sub_802FA50(); - - if(r0 != 0) - AddMenuCursorSprite(&gUnknown_203B314->sBC.s0.input); -} - -void sub_802F974(void) -{ - if(gUnknown_203B314 != NULL) - { - gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E06FC; - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B314->sBC.s0.unk3C, TRUE, TRUE); - MemoryFree(gUnknown_203B314); - gUnknown_203B314 = NULL; - } -} - -void sub_802F9C0(void) -{ - gUnknown_203B314->sBC.unk9C[0] = 1; - gUnknown_203B314->sBC.unk9C[1] = 0; - gUnknown_203B314->sBC.unk9C[2] = 8; - gUnknown_203B314->sBC.unk9C[3] = 0; - - SUB_80095E4_CALL(gUnknown_203B314->sBC.s0); -} - -void sub_802FA50(void) -{ - s32 sVar1; - const u8 *text; - u32 y; - u32 y2; - int index; - int counter; - - sub_8008C54(gUnknown_203B314->sBC.s0.unk34); - sub_80073B8(gUnknown_203B314->sBC.s0.unk34); - xxx_call_draw_string(10,0,gUnknown_80E0744,gUnknown_203B314->sBC.s0.unk34,0); - sub_8012BC4(gUnknown_203B314->sBC.unk9C[2] * 8 + 4,0,gUnknown_203B314->sBC.s0.input.unk1E + 1,2,7,gUnknown_203B314->sBC.s0.unk34); - if (gUnknown_203B314->unkB8 != 0) { - for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++) - { - y = sub_8013800(&gUnknown_203B314->sBC.s0.input,counter); - index = gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C + counter; - sVar1 = gUnknown_203B314->unk0[index]; - if (gUnknown_203B314->unk5C[index] != 0) { - xxx_call_draw_string(10,y,gUnknown_80E0750,gUnknown_203B314->sBC.s0.unk34,0); - } - else if (gUnknown_203B314->unk8A[index] != 0) { - xxx_call_draw_string(10,y,gUnknown_80E0754,gUnknown_203B314->sBC.s0.unk34,0); - } - xxx_call_draw_string(0x18,y,sub_80974A0(sVar1),gUnknown_203B314->sBC.s0.unk34,0); - } - } - else { - for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++) - { - y2 = sub_8013800(&gUnknown_203B314->sBC.s0.input,counter); - text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C + counter]); - xxx_call_draw_string(8,y2,text,gUnknown_203B314->sBC.s0.unk34,0); - } - } - sub_80073E0(gUnknown_203B314->sBC.s0.unk34); -} From ceabc969896b00792382c7745bfe4badbf8bb583 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 08:55:31 -0700 Subject: [PATCH 05/39] more ram stuff --- src/code_8072F3C.c | 2 +- src/mission_reward.c | 3 +-- sym_ewram2.txt | 9 ++------- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/code_8072F3C.c b/src/code_8072F3C.c index 3a228b92e..633c8a057 100644 --- a/src/code_8072F3C.c +++ b/src/code_8072F3C.c @@ -26,7 +26,7 @@ struct unkStruct_203B314 struct struct_Sub80095E4_2 sBC; }; -extern struct unkStruct_203B314 *gUnknown_203B314; +EWRAM_DATA_2 struct unkStruct_203B314 *gUnknown_203B314 = {0}; const UnkTextStruct2 gUnknown_80E06FC = { diff --git a/src/mission_reward.c b/src/mission_reward.c index 9dfeaaa77..c0f59bc58 100644 --- a/src/mission_reward.c +++ b/src/mission_reward.c @@ -32,8 +32,7 @@ struct unkStruct_203B310 u8 unk22; UnkTextStruct2 unk24[4]; }; -extern struct unkStruct_203B310 *gUnknown_203B310; - +EWRAM_DATA_2 struct unkStruct_203B310 *gUnknown_203B310 = {0}; extern u8 gUnknown_202E038[]; extern u8 gUnknown_202E628[]; diff --git a/sym_ewram2.txt b/sym_ewram2.txt index d6d163e38..0ceb00a8c 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -191,13 +191,8 @@ gUnknown_203B2AA: /* 203B2AA (sub_8023868 - sub_8023C60) */ .include "src/mailbox.o" .include "src/pelipper_board.o" .include "src/wonder_mail_3_mid.o" - -gUnknown_203B310: /* 203B310 (sub_802F204 - ProceedToNextRewardSceneState) */ - .space 0x4 - -gUnknown_203B314: /* 203B314 (sub_802F73C - sub_802FA50) */ - .space 0x4 - +.include "src/mission_reward.o" +.include "src/code_8072F3C.o" .include "src/makuhita_dojo1.o" .include "src/makuhita_dojo2.o" .include "src/wonder_mail_4.o" From ed00b02e02c729e3dd231163c999c6112e2c0b57 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 2 Jun 2024 16:01:27 -0700 Subject: [PATCH 06/39] nonmatch func and combine files --- asm/code_80958E8.s | 229 --------------- include/code_80958E8.h | 4 + include/mailbox_8095F8C.h | 11 - ld_script.txt | 3 - src/code_80958E8.c | 566 +++++++++++++++++++++++++++++++++++++- src/code_80958E8_1.c | 1 - src/code_80958E8_mid.c | 177 ------------ src/mailbox.c | 2 +- src/mailbox_8095F8C.c | 64 ----- src/pokemon_news3.c | 4 +- 10 files changed, 572 insertions(+), 489 deletions(-) delete mode 100644 asm/code_80958E8.s delete mode 100644 include/mailbox_8095F8C.h delete mode 100644 src/code_80958E8_mid.c delete mode 100644 src/mailbox_8095F8C.c diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s deleted file mode 100644 index 64dacbfdd..000000000 --- a/asm/code_80958E8.s +++ /dev/null @@ -1,229 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start GenerateMailJobInfo -GenerateMailJobInfo: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, _08095B44 - add sp, r4 - adds r4, r0, 0 - bl GenerateMailJobDungeonInfo - lsls r0, 24 - cmp r0, 0 - bne _08095B48 - movs r0, 0 - b _08095CCC - .align 2, 0 -_08095B44: .4byte 0xfffffcb0 -_08095B48: - movs r0, 0x5 - strb r0, [r4] - movs r0, 0x8 - bl RandInt - ldr r1, _08095BC8 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r4, 0x1] - cmp r0, 0x2 - bne _08095B6C - bl GetRescueTeamRank - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08095B6C - strb r0, [r4, 0x1] -_08095B6C: - movs r0, 0 - strb r0, [r4, 0x2] - bl Rand32Bit - ldr r1, _08095BCC - ands r1, r0 - str r1, [r4, 0x8] - movs r7, 0 - movs r5, 0x1 - adds r0, r4, 0x4 - mov r8, r0 - movs r1, 0x12 - adds r1, r4 - mov r9, r1 - mov r6, sp -_08095B8A: - lsls r0, r5, 16 - asrs r0, 16 - bl sub_803C110 - lsls r0, 24 - cmp r0, 0 - beq _08095B9E - strh r5, [r6] - adds r6, 0x2 - adds r7, 0x1 -_08095B9E: - adds r5, 0x1 - ldr r0, _08095BD0 - cmp r5, r0 - ble _08095B8A - cmp r7, 0 - beq _08095BD4 - adds r0, r7, 0 - bl RandInt - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r4, 0xC] - adds r0, r7, 0 - bl RandInt - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - b _08095BDC - .align 2, 0 -_08095BC8: .4byte gUnknown_8109984 -_08095BCC: .4byte 0x00ffffff -_08095BD0: .4byte 0x000001a7 -_08095BD4: - movs r0, 0x10 - strh r0, [r4, 0xC] - movs r0, 0x91 - lsls r0, 1 -_08095BDC: - strh r0, [r4, 0xE] - ldrb r0, [r4, 0x1] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _08095BEE - ldrh r0, [r4, 0xC] - strh r0, [r4, 0xE] -_08095BEE: - ldrb r0, [r4, 0x4] - bl sub_8095F28 - strb r0, [r4, 0x10] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08095C10 - strb r0, [r4, 0x1] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0xE] - adds r2, r4, 0 - adds r2, 0x10 - mov r0, r8 - movs r1, 0 - bl sub_803C37C -_08095C10: - ldrb r0, [r4, 0x4] - bl GetMaxItemsAllowed - adds r1, r0, 0 - cmp r1, 0 - bne _08095C28 - ldrb r0, [r4, 0x1] - cmp r0, 0x4 - bne _08095C28 - strb r1, [r4, 0x1] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0xE] -_08095C28: - ldrb r1, [r4, 0x1] - mov r0, r8 - mov r2, r9 - bl sub_803C37C - ldrb r0, [r4, 0x10] - ldrb r1, [r4, 0x12] - cmp r0, r1 - beq _08095C28 - movs r0, 0 - strb r0, [r4, 0x13] - ldrb r0, [r4, 0x1] - cmp r0, 0x2 - beq _08095C90 - cmp r0, 0x2 - bgt _08095C4E - cmp r0, 0x1 - beq _08095C6C - b _08095CCA -_08095C4E: - cmp r0, 0x4 - bgt _08095CCA - bl Rand32Bit - adds r1, r0, 0 - movs r0, 0xE0 - lsls r0, 3 - ands r1, r0 - movs r0, 0xC0 - lsls r0, 2 - cmp r1, r0 - beq _08095CC4 - cmp r1, r0 - bgt _08095CB4 - b _08095CAA -_08095C6C: - bl Rand32Bit - adds r1, r0, 0 - movs r0, 0x70 - ands r1, r0 - cmp r1, 0x10 - beq _08095C80 - cmp r1, 0x30 - beq _08095C88 - b _08095CCA -_08095C80: - adds r0, r4, 0 - bl sub_803C3E0 - b _08095CCA -_08095C88: - adds r0, r4, 0 - bl sub_803C45C - b _08095CCA -_08095C90: - bl Rand32Bit - movs r1, 0xC0 - lsls r1, 6 - ands r1, r0 - movs r0, 0x80 - lsls r0, 5 - cmp r1, r0 - bne _08095CCA - adds r0, r4, 0 - bl sub_803C4F0 - b _08095CCA -_08095CAA: - movs r0, 0x80 - lsls r0, 1 - cmp r1, r0 - beq _08095CBC - b _08095CCA -_08095CB4: - movs r0, 0xC0 - lsls r0, 3 - cmp r1, r0 - bne _08095CCA -_08095CBC: - adds r0, r4, 0 - bl sub_803C580 - b _08095CCA -_08095CC4: - adds r0, r4, 0 - bl sub_803C610 -_08095CCA: - movs r0, 0x1 -_08095CCC: - movs r3, 0xD4 - lsls r3, 2 - add sp, r3 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GenerateMailJobInfo - - .align 2,0 diff --git a/include/code_80958E8.h b/include/code_80958E8.h index 84189f860..a813ab237 100644 --- a/include/code_80958E8.h +++ b/include/code_80958E8.h @@ -31,5 +31,9 @@ unkStruct_203B490 *GetMailInfo(void); void InitializeMailJobsNews(void); bool8 IsValidWonderMail(WonderMail *WonderMailData); bool8 ValidateWonderMail(WonderMail *data); +s32 CountFilledMailboxSlots(void); +WonderMail *GetMailboxSlotInfo(u8 index); +bool8 IsMailSlotEmpty(u8 index); +void ResetMailboxSlot(u8 index); #endif // GUARD_CODE_80958E8_H diff --git a/include/mailbox_8095F8C.h b/include/mailbox_8095F8C.h deleted file mode 100644 index 7ec3e0959..000000000 --- a/include/mailbox_8095F8C.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef GUARD_MAILBOX_8095F8C_H -#define GUARD_MAILBOX_8095F8C_H - -#include "structs/str_wonder_mail.h" - -s32 CountFilledMailboxSlots(void); -WonderMail *GetMailboxSlotInfo(u8 index); -bool8 IsMailSlotEmpty(u8 index); -void ResetMailboxSlot(u8 index); - -#endif // GUARD_MAILBOX_8095F8C_H diff --git a/ld_script.txt b/ld_script.txt index c92a42892..d62b0a56e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -323,9 +323,6 @@ SECTIONS { src/play_time.o(.text); src/code_8094F88.o(.text); src/code_80958E8.o(.text); - asm/code_80958E8.o(.text); - src/code_80958E8_mid.o(.text); - src/mailbox_8095F8C.o(.text); asm/code_80958E8_1.o(.text); src/code_80958E8_1.o(.text); asm/code_8096AF8.o(.text); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index c5ab16bbe..0beac7949 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -3,12 +3,14 @@ #include "code_8094F88.h" #include "code_80958E8.h" #include "code_80958E8_1.h" +#include "code_80A26CC.h" +#include "constants/dungeon.h" #include "constants/friend_area.h" #include "constants/wonder_mail.h" #include "dungeon.h" +#include "random.h" #include "friend_area.h" #include "items.h" -#include "mailbox_8095F8C.h" #include "memory.h" #include "pokemon.h" #include "pokemon_3.h" @@ -16,6 +18,17 @@ extern bool8 sub_809017C(DungeonLocation *); extern void ResetPelipperBoardSlot(u8); +bool8 sub_8095E38(WonderMail *mail, u8 dungeon, u32 floor, u8 param_4); +u8 sub_8095F28(u8 param_1); +bool8 GenerateMailJobDungeonInfo(WonderMail *mail); +extern void sub_803C4F0(WonderMail *); +extern void sub_803C3E0(WonderMail *); +extern void sub_803C45C(WonderMail *); +extern void sub_803C610(WonderMail *); +extern void sub_803C580(WonderMail *); +extern void sub_803C37C(struct DungeonLocation *, u8, u8 *); + +extern u8 gUnknown_8109984[]; static EWRAM_DATA unkStruct_203B490 sUnknown_2039448 = {0}; @@ -149,3 +162,554 @@ bool8 ValidateWonderMail(WonderMail *data) return TRUE; } } + + +// https://decomp.me/scratch/1XsHS (99.96% matching - Seth) +#ifdef NONMATCHING +bool8 GenerateMailJobInfo(WonderMail *mail) +{ + u8 uVar3; + u32 uVar4; + s16 species; + s32 index; + s32 iVar6; + s32 numPokemon; + s16 speciesStack [424]; + register s32 itemCount asm("r1"); + + + if (!GenerateMailJobDungeonInfo(mail)) { + return FALSE; + } + mail->mailType = 5; + iVar6 = RandInt(8); + uVar3 = (gUnknown_8109984)[iVar6]; + mail->missionType = uVar3; + if ((uVar3 == 2) && (GetRescueTeamRank() == 0)) { + mail->missionType = 0; + } + mail->unk2 = 0; + mail->unk4.seed = Rand32Bit() & 0xffffff; + numPokemon = 0; + + + for(index = 1; index < 0x1A8; index++) + { + if (sub_803C110(index) != 0) { + speciesStack[numPokemon] = index; + numPokemon++; + } + } + + if (numPokemon != 0) { + mail->clientSpecies = speciesStack[RandInt(numPokemon)]; + species = speciesStack[RandInt(numPokemon)]; + } + else { + mail->clientSpecies = 0x10; + species = 0x122; + } + mail->targetSpecies = species; + + if (1 < (u8)(mail->missionType - 1)) { + mail->targetSpecies = mail->clientSpecies; + } + + uVar4 = sub_8095F28((mail->unk4.dungeon).id); + mail->targetItem = uVar4; + if ((u8)mail->targetItem == 0) { + mail->missionType = mail->targetItem; + mail->targetSpecies = mail->clientSpecies; + sub_803C37C(&mail->unk4.dungeon,0,&mail->targetItem); + } + itemCount = GetMaxItemsAllowed((mail->unk4.dungeon).id); + if ((itemCount == 0) && (mail->missionType == 4)) { + mail->missionType = itemCount; + mail->targetSpecies = mail->clientSpecies; + } + do { + sub_803C37C(&mail->unk4.dungeon,mail->missionType,&mail->itemReward); + } while (mail->targetItem == mail->itemReward); + mail->friendAreaReward = 0; + + switch(mail->missionType) + { + case 1: + switch(Rand32Bit() & 0x70) + { + case 0x10: + sub_803C3E0(mail); + break; + case 0x30: + sub_803C45C(mail); + break; + } + break; + case 2: + if ((Rand32Bit() & 0x3000) == 0x1000) { + sub_803C4F0(mail); + } + break; + case 3: + case 4: + switch(Rand32Bit() & 0x700) + { + case 0x100: + case 0x600: + sub_803C580(mail); + break; + case 0x300: + sub_803C610(mail); + break; + } + } + return TRUE; +} +#else +NAKED +bool8 GenerateMailJobInfo(WonderMail *mail) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tldr r4, _08095B44\n" + "\tadd sp, r4\n" + "\tadds r4, r0, 0\n" + "\tbl GenerateMailJobDungeonInfo\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08095B48\n" + "\tmovs r0, 0\n" + "\tb _08095CCC\n" + "\t.align 2, 0\n" +"_08095B44: .4byte 0xfffffcb0\n" +"_08095B48:\n" + "\tmovs r0, 0x5\n" + "\tstrb r0, [r4]\n" + "\tmovs r0, 0x8\n" + "\tbl RandInt\n" + "\tldr r1, _08095BC8\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0]\n" + "\tstrb r0, [r4, 0x1]\n" + "\tcmp r0, 0x2\n" + "\tbne _08095B6C\n" + "\tbl GetRescueTeamRank\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08095B6C\n" + "\tstrb r0, [r4, 0x1]\n" +"_08095B6C:\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r4, 0x2]\n" + "\tbl Rand32Bit\n" + "\tldr r1, _08095BCC\n" + "\tands r1, r0\n" + "\tstr r1, [r4, 0x8]\n" + "\tmovs r7, 0\n" + "\tmovs r5, 0x1\n" + "\tadds r0, r4, 0x4\n" + "\tmov r8, r0\n" + "\tmovs r1, 0x12\n" + "\tadds r1, r4\n" + "\tmov r9, r1\n" + "\tmov r6, sp\n" +"_08095B8A:\n" + "\tlsls r0, r5, 16\n" + "\tasrs r0, 16\n" + "\tbl sub_803C110\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08095B9E\n" + "\tstrh r5, [r6]\n" + "\tadds r6, 0x2\n" + "\tadds r7, 0x1\n" +"_08095B9E:\n" + "\tadds r5, 0x1\n" + "\tldr r0, _08095BD0\n" + "\tcmp r5, r0\n" + "\tble _08095B8A\n" + "\tcmp r7, 0\n" + "\tbeq _08095BD4\n" + "\tadds r0, r7, 0\n" + "\tbl RandInt\n" + "\tlsls r0, 1\n" + "\tadd r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0xC]\n" + "\tadds r0, r7, 0\n" + "\tbl RandInt\n" + "\tlsls r0, 1\n" + "\tadd r0, sp\n" + "\tldrh r0, [r0]\n" + "\tb _08095BDC\n" + "\t.align 2, 0\n" +"_08095BC8: .4byte gUnknown_8109984\n" +"_08095BCC: .4byte 0x00ffffff\n" +"_08095BD0: .4byte 0x000001a7\n" +"_08095BD4:\n" + "\tmovs r0, 0x10\n" + "\tstrh r0, [r4, 0xC]\n" + "\tmovs r0, 0x91\n" + "\tlsls r0, 1\n" +"_08095BDC:\n" + "\tstrh r0, [r4, 0xE]\n" + "\tldrb r0, [r4, 0x1]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbls _08095BEE\n" + "\tldrh r0, [r4, 0xC]\n" + "\tstrh r0, [r4, 0xE]\n" +"_08095BEE:\n" + "\tldrb r0, [r4, 0x4]\n" + "\tbl sub_8095F28\n" + "\tstrb r0, [r4, 0x10]\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _08095C10\n" + "\tstrb r0, [r4, 0x1]\n" + "\tldrh r0, [r4, 0xC]\n" + "\tstrh r0, [r4, 0xE]\n" + "\tadds r2, r4, 0\n" + "\tadds r2, 0x10\n" + "\tmov r0, r8\n" + "\tmovs r1, 0\n" + "\tbl sub_803C37C\n" +"_08095C10:\n" + "\tldrb r0, [r4, 0x4]\n" + "\tbl GetMaxItemsAllowed\n" + "\tadds r1, r0, 0\n" + "\tcmp r1, 0\n" + "\tbne _08095C28\n" + "\tldrb r0, [r4, 0x1]\n" + "\tcmp r0, 0x4\n" + "\tbne _08095C28\n" + "\tstrb r1, [r4, 0x1]\n" + "\tldrh r0, [r4, 0xC]\n" + "\tstrh r0, [r4, 0xE]\n" +"_08095C28:\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmov r0, r8\n" + "\tmov r2, r9\n" + "\tbl sub_803C37C\n" + "\tldrb r0, [r4, 0x10]\n" + "\tldrb r1, [r4, 0x12]\n" + "\tcmp r0, r1\n" + "\tbeq _08095C28\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r4, 0x13]\n" + "\tldrb r0, [r4, 0x1]\n" + "\tcmp r0, 0x2\n" + "\tbeq _08095C90\n" + "\tcmp r0, 0x2\n" + "\tbgt _08095C4E\n" + "\tcmp r0, 0x1\n" + "\tbeq _08095C6C\n" + "\tb _08095CCA\n" +"_08095C4E:\n" + "\tcmp r0, 0x4\n" + "\tbgt _08095CCA\n" + "\tbl Rand32Bit\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0xE0\n" + "\tlsls r0, 3\n" + "\tands r1, r0\n" + "\tmovs r0, 0xC0\n" + "\tlsls r0, 2\n" + "\tcmp r1, r0\n" + "\tbeq _08095CC4\n" + "\tcmp r1, r0\n" + "\tbgt _08095CB4\n" + "\tb _08095CAA\n" +"_08095C6C:\n" + "\tbl Rand32Bit\n" + "\tadds r1, r0, 0\n" + "\tmovs r0, 0x70\n" + "\tands r1, r0\n" + "\tcmp r1, 0x10\n" + "\tbeq _08095C80\n" + "\tcmp r1, 0x30\n" + "\tbeq _08095C88\n" + "\tb _08095CCA\n" +"_08095C80:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_803C3E0\n" + "\tb _08095CCA\n" +"_08095C88:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_803C45C\n" + "\tb _08095CCA\n" +"_08095C90:\n" + "\tbl Rand32Bit\n" + "\tmovs r1, 0xC0\n" + "\tlsls r1, 6\n" + "\tands r1, r0\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 5\n" + "\tcmp r1, r0\n" + "\tbne _08095CCA\n" + "\tadds r0, r4, 0\n" + "\tbl sub_803C4F0\n" + "\tb _08095CCA\n" +"_08095CAA:\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 1\n" + "\tcmp r1, r0\n" + "\tbeq _08095CBC\n" + "\tb _08095CCA\n" +"_08095CB4:\n" + "\tmovs r0, 0xC0\n" + "\tlsls r0, 3\n" + "\tcmp r1, r0\n" + "\tbne _08095CCA\n" +"_08095CBC:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_803C580\n" + "\tb _08095CCA\n" +"_08095CC4:\n" + "\tadds r0, r4, 0\n" + "\tbl sub_803C610\n" +"_08095CCA:\n" + "\tmovs r0, 0x1\n" +"_08095CCC:\n" + "\tmovs r3, 0xD4\n" + "\tlsls r3, 2\n" + "\tadd sp, r3\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1" + ); +} +#endif + +bool8 GenerateMailJobDungeonInfo(WonderMail *mail) +{ + s32 counter; + s32 floor; + s32 index; + u8 dungeon; + bool8 flag; + u8 dungeonStack [64]; + s32 counter_1; + s32 cap; + s32 floor_1; + s32 halfFloorCount; + s32 floorCount; + DungeonLocation dungeonLoc; + + + cap = sub_80A29B0(dungeonStack); + if (cap == 0) { + dungeonStack[0] = DUNGEON_TINY_WOODS; + dungeonStack[1] = DUNGEON_THUNDERWAVE_CAVE; + cap = 2; + } + counter = RandInt(cap); + counter_1 = counter; + do { + dungeon = dungeonStack[counter]; + floorCount = GetDungeonFloorCount(dungeon); + halfFloorCount = floorCount / 2; + floor = RandRange(halfFloorCount, floorCount); + floor_1 = floor; + do { + flag = TRUE; + dungeonLoc.id = dungeon; + dungeonLoc.floor = floor; + + if(sub_809017C(&dungeonLoc)) + flag = FALSE; + + for(index = 0; index < 4; index++) + { + if (sub_8095E38(&gUnknown_203B490->mailboxSlots[index],dungeon,floor,1)) { + flag = FALSE; + } + } + + for(index = 0; index < 8; index++) + { + if (sub_8095E38(&gUnknown_203B490->pelipperBoardJobs[index],dungeon,floor,1)) { + flag = FALSE; + } + } + + for(index = 0; index < 8; index++) + { + if (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeon,floor,1)) { + flag = FALSE; + } + } + + if (flag) { + mail->unk4.dungeon.id = dungeon; + mail->unk4.dungeon.floor = floor; + return TRUE; + } + floor++; + if (floor >= floorCount) { + floor = halfFloorCount; + } + } while (floor != floor_1); + + counter++; + if (counter == cap) { + counter = 0; + } + if (counter == counter_1) { + return FALSE; + } + } while( TRUE ); +} + +bool8 sub_8095E38(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->unk4.dungeon.id == dungeon) { + return TRUE; + } + } + else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) { + return TRUE; + } + } + return FALSE; +} + +u8 sub_8095E78(void) +{ + bool8 flag; + s32 index; + s32 friendAreaIndex; + s32 counter; + + u8 friendAreaStack[NUM_FRIEND_AREAS]; + + counter = 0; + for(friendAreaIndex = BOUNTIFUL_SEA; friendAreaIndex < NUM_FRIEND_AREAS; friendAreaIndex++) + { + if ((!gFriendAreas[friendAreaIndex]) && + (GetFriendAreaUnlockCondition(friendAreaIndex) == UNLOCK_WONDER_MAIL)) { + flag = FALSE; + + + for(index = 0; index < 4; index++) + { + if((gUnknown_203B490->mailboxSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->mailboxSlots[index].rewardType == FRIEND_AREA)) + flag = TRUE; + } + + + for(index = 0; index < 8; index++) + { + if((gUnknown_203B490->jobSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->jobSlots[index].rewardType == FRIEND_AREA)) + flag = TRUE; + } + + if (!flag) { + friendAreaStack[counter] = friendAreaIndex; + counter++; + } + } + } + if (counter != 0) { + return friendAreaStack[RandInt(counter)]; + } + else { + return FRIEND_AREA_NONE; + } +} + +u8 sub_8095F28(u8 param_1) +{ + s32 itemID; + s32 counter; + u8 itemStack [NUMBER_OF_ITEM_IDS]; + + counter = 0; + for(itemID = ITEM_STICK; itemID < NUMBER_OF_ITEM_IDS; itemID++) + { + if ((param_1 == 0x63) || + (xxx_bit_lut_lookup_8091E50(param_1, itemID) != 0)) { + if ((!IsThrowableItem(itemID)) && (IsNotMoneyOrUsedTMItem(itemID))) { + itemStack[counter] = itemID; + counter++; + } + } + } + if (counter == 0) { + return ITEM_NOTHING; + } + else { + return itemStack[RandInt(counter)]; + } +} + +s32 CountFilledMailboxSlots(void) +{ + s32 index; + s32 counter; + + counter = 0; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(!IsMailSlotEmpty(index)) + counter++; + } + return counter; +} + +UNUSED static bool8 sub_8095FB0(WonderMail *mail) +{ + s32 index; + + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(gUnknown_203B490->mailboxSlots[index].mailType == MAIL_TYPE_NONE) + { + gUnknown_203B490->mailboxSlots[index] = *mail; + return FALSE; + } + } + return TRUE; +} + +WonderMail *GetMailboxSlotInfo(u8 index) +{ + return &gUnknown_203B490->mailboxSlots[index]; +} + +bool8 IsMailSlotEmpty(u8 index) +{ + if(gUnknown_203B490->mailboxSlots[index].mailType == MAIL_TYPE_NONE) + return TRUE; + else + return FALSE; +} + +void ResetMailbox(void) +{ + s32 index; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + ResetMailboxSlot(index); + } +} + +void ResetMailboxSlot(u8 index) +{ + gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE; + 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/code_80958E8_1.c b/src/code_80958E8_1.c index 623f9075a..b88b4e812 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -10,7 +10,6 @@ #include "random.h" #include "pokemon.h" #include "code_8096AF8.h" -#include "mailbox_8095F8C.h" #include "event_flag.h" #include "rescue_team_info.h" diff --git a/src/code_80958E8_mid.c b/src/code_80958E8_mid.c deleted file mode 100644 index 3d5639a68..000000000 --- a/src/code_80958E8_mid.c +++ /dev/null @@ -1,177 +0,0 @@ -#include "global.h" -#include "constants/dungeon.h" -#include "constants/friend_area.h" -#include "constants/wonder_mail.h" -#include "items.h" -#include "random.h" -#include "friend_area.h" -#include "code_80958E8.h" -#include "code_80A26CC.h" - -bool8 sub_8095E38(WonderMail *mail, u8 dungeon, u32 floor, u8 param_4); -extern s32 GetDungeonFloorCount(u8); -extern bool8 sub_809017C(DungeonLocation *); - -bool8 GenerateMailJobDungeonInfo(WonderMail *mail) -{ - s32 counter; - s32 floor; - s32 index; - u8 dungeon; - bool8 flag; - u8 dungeonStack [64]; - s32 counter_1; - s32 cap; - s32 floor_1; - s32 halfFloorCount; - s32 floorCount; - DungeonLocation dungeonLoc; - - - cap = sub_80A29B0(dungeonStack); - if (cap == 0) { - dungeonStack[0] = DUNGEON_TINY_WOODS; - dungeonStack[1] = DUNGEON_THUNDERWAVE_CAVE; - cap = 2; - } - counter = RandInt(cap); - counter_1 = counter; - do { - dungeon = dungeonStack[counter]; - floorCount = GetDungeonFloorCount(dungeon); - halfFloorCount = floorCount / 2; - floor = RandRange(halfFloorCount, floorCount); - floor_1 = floor; - do { - flag = TRUE; - dungeonLoc.id = dungeon; - dungeonLoc.floor = floor; - - if(sub_809017C(&dungeonLoc)) - flag = FALSE; - - for(index = 0; index < 4; index++) - { - if (sub_8095E38(&gUnknown_203B490->mailboxSlots[index],dungeon,floor,1)) { - flag = FALSE; - } - } - - for(index = 0; index < 8; index++) - { - if (sub_8095E38(&gUnknown_203B490->pelipperBoardJobs[index],dungeon,floor,1)) { - flag = FALSE; - } - } - - for(index = 0; index < 8; index++) - { - if (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeon,floor,1)) { - flag = FALSE; - } - } - - if (flag) { - mail->unk4.dungeon.id = dungeon; - mail->unk4.dungeon.floor = floor; - return TRUE; - } - floor++; - if (floor >= floorCount) { - floor = halfFloorCount; - } - } while (floor != floor_1); - - counter++; - if (counter == cap) { - counter = 0; - } - if (counter == counter_1) { - return FALSE; - } - } while( TRUE ); -} - -bool8 sub_8095E38(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->unk4.dungeon.id == dungeon) { - return TRUE; - } - } - else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) { - return TRUE; - } - } - return FALSE; -} - -u8 sub_8095E78(void) -{ - bool8 flag; - s32 index; - s32 friendAreaIndex; - s32 counter; - - u8 friendAreaStack[NUM_FRIEND_AREAS]; - - counter = 0; - for(friendAreaIndex = BOUNTIFUL_SEA; friendAreaIndex < NUM_FRIEND_AREAS; friendAreaIndex++) - { - if ((!gFriendAreas[friendAreaIndex]) && - (GetFriendAreaUnlockCondition(friendAreaIndex) == UNLOCK_WONDER_MAIL)) { - flag = FALSE; - - - for(index = 0; index < 4; index++) - { - if((gUnknown_203B490->mailboxSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->mailboxSlots[index].rewardType == FRIEND_AREA)) - flag = TRUE; - } - - - for(index = 0; index < 8; index++) - { - if((gUnknown_203B490->jobSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->jobSlots[index].rewardType == FRIEND_AREA)) - flag = TRUE; - } - - if (!flag) { - friendAreaStack[counter] = friendAreaIndex; - counter++; - } - } - } - if (counter != 0) { - return friendAreaStack[RandInt(counter)]; - } - else { - return FRIEND_AREA_NONE; - } -} - -u8 sub_8095F28(u8 param_1) -{ - s32 itemID; - s32 counter; - u8 itemStack [NUMBER_OF_ITEM_IDS]; - - counter = 0; - for(itemID = ITEM_STICK; itemID < NUMBER_OF_ITEM_IDS; itemID++) - { - if ((param_1 == 0x63) || - (xxx_bit_lut_lookup_8091E50(param_1, itemID) != 0)) { - if ((!IsThrowableItem(itemID)) && (IsNotMoneyOrUsedTMItem(itemID))) { - itemStack[counter] = itemID; - counter++; - } - } - } - if (counter == 0) { - return ITEM_NOTHING; - } - else { - return itemStack[RandInt(counter)]; - } -} diff --git a/src/mailbox.c b/src/mailbox.c index d625912de..81a713c1c 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -13,7 +13,7 @@ #include "pokemon_news1.h" #include "pokemon_news2.h" #include "pokemon_news3.h" -#include "mailbox_8095F8C.h" +#include "code_80958E8.h" #include "code_803B050.h" #include "code_80958E8_1.h" #include "wonder_mail_802C4C8.h" diff --git a/src/mailbox_8095F8C.c b/src/mailbox_8095F8C.c deleted file mode 100644 index 395c568b0..000000000 --- a/src/mailbox_8095F8C.c +++ /dev/null @@ -1,64 +0,0 @@ -#include "global.h" -#include "code_80958E8.h" -#include "mailbox_8095F8C.h" - -extern unkStruct_203B490 *gUnknown_203B490; - -s32 CountFilledMailboxSlots(void) -{ - s32 index; - s32 counter; - - counter = 0; - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - if(!IsMailSlotEmpty(index)) - counter++; - } - return counter; -} - -UNUSED static bool8 sub_8095FB0(WonderMail *mail) -{ - s32 index; - - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - if(gUnknown_203B490->mailboxSlots[index].mailType == MAIL_TYPE_NONE) - { - gUnknown_203B490->mailboxSlots[index] = *mail; - return FALSE; - } - } - return TRUE; -} - -WonderMail *GetMailboxSlotInfo(u8 index) -{ - return &gUnknown_203B490->mailboxSlots[index]; -} - -bool8 IsMailSlotEmpty(u8 index) -{ - if(gUnknown_203B490->mailboxSlots[index].mailType == MAIL_TYPE_NONE) - return TRUE; - else - return FALSE; -} - -void ResetMailbox(void) -{ - s32 index; - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - ResetMailboxSlot(index); - } -} - -void ResetMailboxSlot(u8 index) -{ - gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE; - 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/pokemon_news3.c b/src/pokemon_news3.c index 3da672b0f..5f9ae3fe0 100644 --- a/src/pokemon_news3.c +++ b/src/pokemon_news3.c @@ -7,7 +7,7 @@ #include "constants/input.h" #include "constants/mailbox.h" #include "input.h" -#include "mailbox_8095F8C.h" +#include "code_80958E8.h" #include "memory.h" #include "menu_input.h" #include "pokemon_mail.h" @@ -237,4 +237,4 @@ bool8 HasNoMailinMailbox(void) } return TRUE; -} \ No newline at end of file +} From 5438b247a314aed1e68db534ec678ea6fbb7877c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 3 Jun 2024 09:45:45 -0700 Subject: [PATCH 07/39] Thanks @Eebit for matching these three funcs --- asm/code_80958E8_1.s | 96 --------------------------- asm/code_8096AF8.s | 101 ---------------------------- ld_script.txt | 2 - src/code_80958E8.c | 33 +++++++++ src/code_80958E8_1.c | 155 ++++++++++++++++++------------------------- 5 files changed, 97 insertions(+), 290 deletions(-) delete mode 100644 asm/code_80958E8_1.s delete mode 100644 asm/code_8096AF8.s diff --git a/asm/code_80958E8_1.s b/asm/code_80958E8_1.s deleted file mode 100644 index 04a210d1e..000000000 --- a/asm/code_80958E8_1.s +++ /dev/null @@ -1,96 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8096078 -sub_8096078: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r2, 0 - movs r3, 0 - ldr r0, _08096090 - mov r12, r0 - mov r8, r3 - movs r4, 0 - mov r9, r4 - b _080960B6 - .align 2, 0 -_08096090: .4byte gUnknown_203B490 -_08096094: - cmp r2, r3 - ble _080960AA - mov r1, r12 - ldr r0, [r1] - mov r5, r8 - adds r1, r0, r5 - adds r0, r4 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r6,r7} - stm r1!, {r6,r7} -_080960AA: - adds r4, 0x14 - movs r0, 0x14 - add r9, r0 - adds r2, 0x1 - add r8, r0 - adds r3, 0x1 -_080960B6: - cmp r2, 0x3 - bgt _080960E2 - mov r1, r12 - ldr r0, [r1] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080960E2 - ldr r6, _08096110 - mov r1, r9 -_080960CA: - adds r1, 0x14 - adds r4, 0x14 - movs r5, 0x14 - add r9, r5 - adds r2, 0x1 - cmp r2, 0x3 - bgt _080960E2 - ldr r0, [r6] - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080960CA -_080960E2: - cmp r2, 0x4 - bne _08096094 - cmp r3, 0x3 - bgt _08096102 - ldr r4, _08096110 - movs r2, 0 - lsls r0, r3, 2 - adds r0, r3 - lsls r1, r0, 2 -_080960F4: - ldr r0, [r4] - adds r0, r1 - strb r2, [r0] - adds r1, 0x14 - adds r3, 0x1 - cmp r3, 0x3 - ble _080960F4 -_08096102: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08096110: .4byte gUnknown_203B490 - thumb_func_end sub_8096078 - - .align 2,0 diff --git a/asm/code_8096AF8.s b/asm/code_8096AF8.s deleted file mode 100644 index f3db32169..000000000 --- a/asm/code_8096AF8.s +++ /dev/null @@ -1,101 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8096C80 -sub_8096C80: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r2, 0 - movs r3, 0 - ldr r0, _08096C98 - mov r12, r0 - mov r8, r3 - movs r4, 0 - mov r9, r4 - b _08096CC2 - .align 2, 0 -_08096C98: .4byte gUnknown_203B490 -_08096C9C: - cmp r2, r3 - ble _08096CB6 - mov r1, r12 - ldr r0, [r1] - mov r5, r8 - adds r1, r0, r5 - adds r0, r4 - adds r1, 0xF0 - adds r0, 0xF0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r6,r7} - stm r1!, {r6,r7} -_08096CB6: - adds r4, 0x14 - movs r0, 0x14 - add r9, r0 - adds r2, 0x1 - add r8, r0 - adds r3, 0x1 -_08096CC2: - cmp r2, 0x7 - bgt _08096CF2 - mov r1, r12 - ldr r0, [r1] - adds r0, r4 - adds r0, 0xF0 - ldrb r0, [r0] - cmp r0, 0 - bne _08096CF2 - ldr r6, _08096D20 - mov r1, r9 -_08096CD8: - adds r1, 0x14 - adds r4, 0x14 - movs r5, 0x14 - add r9, r5 - adds r2, 0x1 - cmp r2, 0x7 - bgt _08096CF2 - ldr r0, [r6] - adds r0, r1 - adds r0, 0xF0 - ldrb r0, [r0] - cmp r0, 0 - beq _08096CD8 -_08096CF2: - cmp r2, 0x8 - bne _08096C9C - cmp r3, 0x7 - bgt _08096D14 - ldr r4, _08096D20 - movs r2, 0 - lsls r0, r3, 2 - adds r0, r3 - lsls r1, r0, 2 -_08096D04: - ldr r0, [r4] - adds r0, r1 - adds r0, 0xF0 - strb r2, [r0] - adds r1, 0x14 - adds r3, 0x1 - cmp r3, 0x7 - ble _08096D04 -_08096D14: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08096D20: .4byte gUnknown_203B490 - thumb_func_end sub_8096C80 - - .align 2,0 diff --git a/ld_script.txt b/ld_script.txt index d62b0a56e..0c8776cd2 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -323,9 +323,7 @@ SECTIONS { src/play_time.o(.text); src/code_8094F88.o(.text); src/code_80958E8.o(.text); - asm/code_80958E8_1.o(.text); src/code_80958E8_1.o(.text); - asm/code_8096AF8.o(.text); src/code_80972F4.o(.text); src/code_8097504.o(.text); src/code_8097670.o(.text); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 0beac7949..34380eb31 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -713,3 +713,36 @@ void ResetMailboxSlot(u8 index) gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor = 0; gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1; } + +void sub_8096078(void) +{ + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 4; counter1++) + { + if (gUnknown_203B490->mailboxSlots[counter1].mailType != 0) + break; + } + + if (counter1 == 4) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->mailboxSlots[counter2] = gUnknown_203B490->mailboxSlots[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 4; counter2++) + { + gUnknown_203B490->mailboxSlots[counter2].mailType = 0; + } +} diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index b88b4e812..e508ab182 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -294,101 +294,40 @@ void ResetPelipperBoardSlot(u8 index) gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; } -NAKED void sub_80965F4(void) { - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tldr r0, _0809660C\n" - "\tmov r12, r0\n" - "\tmov r8, r3\n" - "\tmovs r4, 0\n" - "\tmov r9, r4\n" - "\tb _08096636\n" - "\t.align 2, 0\n" -"_0809660C: .4byte gUnknown_203B490\n" -"_08096610:\n" - "\tcmp r2, r3\n" - "\tble _0809662A\n" - "\tmov r1, r12\n" - "\tldr r0, [r1]\n" - "\tmov r5, r8\n" - "\tadds r1, r0, r5\n" - "\tadds r0, r4\n" - "\tadds r1, 0x50\n" - "\tadds r0, 0x50\n" - "\tldm r0!, {r5-r7}\n" - "\tstm r1!, {r5-r7}\n" - "\tldm r0!, {r6,r7}\n" - "\tstm r1!, {r6,r7}\n" -"_0809662A:\n" - "\tadds r4, 0x14\n" - "\tmovs r0, 0x14\n" - "\tadd r9, r0\n" - "\tadds r2, 0x1\n" - "\tadd r8, r0\n" - "\tadds r3, 0x1\n" -"_08096636:\n" - "\tcmp r2, 0x7\n" - "\tbgt _08096666\n" - "\tmov r1, r12\n" - "\tldr r0, [r1]\n" - "\tadds r0, r4\n" - "\tadds r0, 0x50\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _08096666\n" - "\tldr r6, _08096694\n" - "\tmov r1, r9\n" -"_0809664C:\n" - "\tadds r1, 0x14\n" - "\tadds r4, 0x14\n" - "\tmovs r5, 0x14\n" - "\tadd r9, r5\n" - "\tadds r2, 0x1\n" - "\tcmp r2, 0x7\n" - "\tbgt _08096666\n" - "\tldr r0, [r6]\n" - "\tadds r0, r1\n" - "\tadds r0, 0x50\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0809664C\n" -"_08096666:\n" - "\tcmp r2, 0x8\n" - "\tbne _08096610\n" - "\tcmp r3, 0x7\n" - "\tbgt _08096688\n" - "\tldr r4, _08096694\n" - "\tmovs r2, 0\n" - "\tlsls r0, r3, 2\n" - "\tadds r0, r3\n" - "\tlsls r1, r0, 2\n" -"_08096678:\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tadds r0, 0x50\n" - "\tstrb r2, [r0]\n" - "\tadds r1, 0x14\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x7\n" - "\tble _08096678\n" -"_08096688:\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08096694: .4byte gUnknown_203B490"); + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 8; counter1++) + { + if (gUnknown_203B490->pelipperBoardJobs[counter1].mailType != 0) + break; + } + + if (counter1 == 8) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->pelipperBoardJobs[counter2] = gUnknown_203B490->pelipperBoardJobs[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 8; counter2++) + { + gUnknown_203B490->pelipperBoardJobs[counter2].mailType = 0; + } } + void SortPelipperJobs(void) { s32 index1; @@ -732,3 +671,37 @@ void ResetJobSlot(u8 index) gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; gUnknown_203B490->jobSlots[index].rewardType = MONEY1; } + +void sub_8096C80(void) +{ + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 8; counter1++) + { + if (gUnknown_203B490->jobSlots[counter1].mailType != 0) + break; + } + + if (counter1 == 8) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->jobSlots[counter2] = gUnknown_203B490->jobSlots[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 8; counter2++) + { + gUnknown_203B490->jobSlots[counter2].mailType = 0; + } +} + From 6aeb342553c5da8cffff87ee07f383e9917df01a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 3 Jun 2024 12:03:04 -0700 Subject: [PATCH 08/39] condense files and cleanup --- include/code_80958E8.h | 31 ++ include/code_80958E8_1.h | 30 -- include/code_8096AF8.h | 15 - ld_script.txt | 1 - src/code_801D014.c | 4 +- src/code_802DB28.c | 3 +- src/code_80958E8.c | 962 +++++++++++++++++++++++++++++++++++++- src/code_80958E8_1.c | 707 ---------------------------- src/code_80972F4.c | 266 ----------- src/code_8097504.c | 1 - src/mailbox.c | 3 +- src/pelipper_board.c | 6 +- src/pokemon_news1.c | 2 +- src/pokemon_news3.c | 2 +- src/post_office_guide2.c | 4 +- src/wonder_mail_802C10C.c | 4 +- src/wonder_mail_802C4C8.c | 4 +- src/wonder_mail_802C860.c | 5 +- src/wonder_mail_802D098.c | 3 +- 19 files changed, 1001 insertions(+), 1052 deletions(-) delete mode 100644 include/code_80958E8_1.h delete mode 100644 include/code_8096AF8.h delete mode 100644 src/code_80958E8_1.c diff --git a/include/code_80958E8.h b/include/code_80958E8.h index a813ab237..0748e9d13 100644 --- a/include/code_80958E8.h +++ b/include/code_80958E8.h @@ -11,6 +11,15 @@ typedef struct subStruct_203B490 /* 0x8 */ s32 checksum; // really dumb checksum that just adds all the fields of WonderMail struct } subStruct_203B490; + +// size: 0x8 +struct unkStruct_8096AF8 +{ + bool8 unk0; + /* 0x2 */ u16 clientSpecies; + /* 0x4 */ u16 targetSpecies; +}; + // size: 0x32C? typedef struct unkStruct_203B490 { @@ -35,5 +44,27 @@ s32 CountFilledMailboxSlots(void); WonderMail *GetMailboxSlotInfo(u8 index); bool8 IsMailSlotEmpty(u8 index); void ResetMailboxSlot(u8 index); +bool8 AcceptJob(WonderMail *mail); +s32 CountJobsinDungeon(u8 dungeon); +WonderMail *GetJobSlotInfo(u8 index); +s32 GetNumAcceptedJobs(void); +bool8 IsJobSlotEmpty(u8 index); +bool8 IsMailinJobSlot(WonderMail *mail); +void ResetJobSlot(u8 index); +bool8 sub_809693C(WonderMail *mail); +void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon); +bool8 sub_8096C08(u8 *jobIndex); +WonderMail *GetPelipperBoardSlotInfo(u8); +bool8 IsPelipperBoardSlotEmpty(u8); +void ResetPelipperBoardSlot(u8); +void sub_80965F4(void); +void sub_8096C80(void); +void ReceivePKMNNews(u8 index); +bool8 CheckPKMNNewsSlot(u8 index); +void SortJobSlots(void); +u8 *sub_8096DD8(void); +u8 *sub_8096DE8(void); +u8 sub_8096E2C(void); +void sub_8096EEC(WonderMail *mail); #endif // GUARD_CODE_80958E8_H diff --git a/include/code_80958E8_1.h b/include/code_80958E8_1.h deleted file mode 100644 index 4a6d6fb5a..000000000 --- a/include/code_80958E8_1.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef GUARD_CODE_80958E8_1_H -#define GUARD_CODE_80958E8_1_H - -#include "structs/str_wonder_mail.h" - -// size: 0x8 -struct unkStruct_8096AF8 -{ - bool8 unk0; - /* 0x2 */ u16 clientSpecies; - /* 0x4 */ u16 targetSpecies; -}; - -bool8 AcceptJob(WonderMail *mail); -s32 CountJobsinDungeon(u8 dungeon); -WonderMail *GetJobSlotInfo(u8 index); -s32 GetNumAcceptedJobs(void); -bool8 IsJobSlotEmpty(u8 index); -bool8 IsMailinJobSlot(WonderMail *mail); -void ResetJobSlot(u8 index); - -bool8 sub_809693C(WonderMail *mail); -void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon); -bool8 sub_8096C08(u8 *jobIndex); - -// code_80958E8_1.s -extern WonderMail *GetPelipperBoardSlotInfo(u8); -extern bool8 IsPelipperBoardSlotEmpty(u8); - -#endif // GUARD_CODE_80958E8_1_H \ No newline at end of file diff --git a/include/code_8096AF8.h b/include/code_8096AF8.h deleted file mode 100644 index 1c9ccd5f3..000000000 --- a/include/code_8096AF8.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef GUARD_CODE_8096AF8_H -#define GUARD_CODE_8096AF8_H - -#include "structs/str_wonder_mail.h" - -extern void sub_8096C80(void); -void ReceivePKMNNews(u8 index); -bool8 CheckPKMNNewsSlot(u8 index); -void SortJobSlots(void); -u8 *sub_8096DD8(void); -u8 *sub_8096DE8(void); -u8 sub_8096E2C(void); -void sub_8096EEC(WonderMail *mail); - -#endif // GUARD_CODE_8096AF8_H diff --git a/ld_script.txt b/ld_script.txt index 0c8776cd2..92ad439b8 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -323,7 +323,6 @@ SECTIONS { src/play_time.o(.text); src/code_8094F88.o(.text); src/code_80958E8.o(.text); - src/code_80958E8_1.o(.text); src/code_80972F4.o(.text); src/code_8097504.o(.text); src/code_8097670.o(.text); diff --git a/src/code_801D014.c b/src/code_801D014.c index e21592520..db3786ec1 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -8,7 +8,7 @@ #include "code_80227B8.h" #include "code_8023868.h" #include "code_8024458.h" -#include "code_8096AF8.h" +#include "code_80958E8.h" #include "common_strings.h" #include "constants/friend_area.h" #include "event_flag.h" @@ -623,4 +623,4 @@ static void LoadTeamRankBadge(u32 a0, u32 a1, u32 a2) teamBadgePic = &teamBadgePic[rank * 128]; sub_8007E20(a0, a1, a2, 16, 16, teamBadgePic, 14); CloseFile(teamBadgeFile); -} \ No newline at end of file +} diff --git a/src/code_802DB28.c b/src/code_802DB28.c index 10be8ac75..fb6f2b3ac 100644 --- a/src/code_802DB28.c +++ b/src/code_802DB28.c @@ -4,8 +4,7 @@ #include "code_802DB28.h" #include "code_802F204.h" #include "code_803C1D0.h" -#include "code_80958E8_1.h" -#include "code_8096AF8.h" +#include "code_80958E8.h" #include "exclusive_pokemon.h" #include "input.h" #include "items.h" diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 34380eb31..e12890f88 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -2,7 +2,7 @@ #include "code_803C1D0.h" #include "code_8094F88.h" #include "code_80958E8.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "code_80A26CC.h" #include "constants/dungeon.h" #include "constants/friend_area.h" @@ -15,18 +15,28 @@ #include "pokemon.h" #include "pokemon_3.h" #include "pokemon_mail.h" +#include "event_flag.h" +#include "rescue_team_info.h" extern bool8 sub_809017C(DungeonLocation *); -extern void ResetPelipperBoardSlot(u8); +extern void sub_803C37C(struct DungeonLocation *, u8, u8 *); + +extern u8 sub_8097318(s16 param_1); + bool8 sub_8095E38(WonderMail *mail, u8 dungeon, u32 floor, u8 param_4); u8 sub_8095F28(u8 param_1); bool8 GenerateMailJobDungeonInfo(WonderMail *mail); -extern void sub_803C4F0(WonderMail *); -extern void sub_803C3E0(WonderMail *); -extern void sub_803C45C(WonderMail *); -extern void sub_803C610(WonderMail *); -extern void sub_803C580(WonderMail *); -extern void sub_803C37C(struct DungeonLocation *, u8, u8 *); +bool8 GenerateMailJobInfo(WonderMail *); +bool8 sub_8096E80(u8); +u8 sub_8095E78(void); +void sub_8096078(void); +bool8 sub_80963B4(void); +void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b); +void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b); +s32 CalculateMailChecksum(WonderMail *mail); + +extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); extern u8 gUnknown_8109984[]; @@ -746,3 +756,939 @@ void sub_8096078(void) gUnknown_203B490->mailboxSlots[counter2].mailType = 0; } } + +static void SortMailboxSlots(void) +{ + s32 r1; + s32 r6; + WonderMail job; + + for(r1 = 0; r1 < NUM_MAILBOX_SLOTS - 1; r1++) + { + for(r6 = r1 + 1; r6 < NUM_MAILBOX_SLOTS; r6++) + { + if(gUnknown_203B490->mailboxSlots[r6].mailType != 0) + { + if((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) || + ((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id == gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) && + (gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.floor > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.floor))) + { + job = gUnknown_203B490->mailboxSlots[r1]; + gUnknown_203B490->mailboxSlots[r1] = gUnknown_203B490->mailboxSlots[r6]; + gUnknown_203B490->mailboxSlots[r6] = job; + } + } + } + } +} + +void sub_80961B4(void) +{ + if (sub_8096E2C() != 0) { + gUnknown_203B490->unk328 = TRUE; + } +} + +bool8 sub_80961D8(void) +{ + s32 num; + s32 index; + u32 floor; + s32 friendAreaReward; + WonderMail *slot; + bool8 flag = FALSE; + + num = CountFilledMailboxSlots(); + index = RandRange(num, NUM_MAILBOX_SLOTS); + if(num >= NUM_MAILBOX_SLOTS) return 0; + if(!gUnknown_203B490->unk328) + return 0; + else + { + gUnknown_203B490->unk328 = flag; + } + floor = 0x38; + if(sub_8001D08(0xA, 0x31, 0x1)) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x35]) + if(!sub_8096E80(0x35)) floor = 0x35; + } + if(sub_80023E4(0xF)) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x34]) + if(!sub_8096E80(0x34)) floor = 0x34; + if(!gUnknown_203B490->PKMNNewsReceived[0x33]) + if(!sub_8096E80(0x33)) floor = 0x33; + if(!gUnknown_203B490->PKMNNewsReceived[0x32]) + if(!sub_8096E80(0x32)) floor = 0x32; + + } + if(GetRescueTeamRank() == LUCARIO_RANK) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x36]) + if(!sub_8096E80(0x36)) floor = 0x36; + } + if(sub_80023E4(6)) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x37]) + if(!sub_8096E80(0x37)) floor = 0x37; + } + + if(floor != 0x38) goto _slot; + if(num > index) goto _08096392; + floor = sub_8096E2C(); + if(!sub_80023E4(0xE) && (floor > 2)) goto _0809638E; + if (floor > 0x31) goto _0809638E; +_slot: + slot = GetMailboxSlotInfo(num); + slot->mailType = 1; + slot->unk4.dungeon.id = NUM_DUNGEONS; + slot->unk4.dungeon.floor = floor; + goto _flag; +_0809638E: + for(; num <= index; num++) + { + slot = GetMailboxSlotInfo(num); + if(GenerateMailJobInfo(slot)) + { + friendAreaReward = sub_8095E78(); + if(!sub_803C1D0(&slot->unk4.dungeon, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE; + slot->rewardType = RandRange(MONEY1, END_REWARDS); + if(slot->rewardType == FRIEND_AREA) + { + if(friendAreaReward == FRIEND_AREA_NONE) + { + slot->rewardType = MONEY1; + flag = TRUE; + } + else + { + slot->friendAreaReward = friendAreaReward; + flag = TRUE; + } + } + else + { +_flag: + flag = TRUE; + } + } else break; + } +_08096392: + if(sub_80963B4()) + flag = TRUE; + sub_8096078(); + SortMailboxSlots(); + return flag; +} + +bool8 sub_80963B4(void) +{ + u8 floor; + s32 num; + WonderMail *slot; + bool8 flag = FALSE; + + floor = sub_8096E2C(); + num = CountFilledMailboxSlots(); + if(num >= NUM_MAILBOX_SLOTS) return FALSE; + if(sub_80023E4(0xE)) + { + if(floor < 0x32) + { + slot = GetMailboxSlotInfo(num); + slot->mailType = 1; + slot->unk4.dungeon.id = NUM_DUNGEONS; + slot->unk4.dungeon.floor = floor; + flag = TRUE; + } + } + return flag; +} + +void sub_80963FC(void) +{ + s32 index; + WonderMail *slot; + + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + slot = GetMailboxSlotInfo(index); + if(slot->mailType != 1) + { + ResetMailboxSlot(index); + } + } + sub_8096078(); + slot = GetMailboxSlotInfo(CountFilledMailboxSlots()); + slot->mailType = 5; + slot->missionType = 0; + slot->unk2 = 0; + slot->unk4.dungeon.id = DUNGEON_MT_STEEL; + slot->unk4.dungeon.floor = 3; + slot->unk4.seed = 0x00ffffff & Rand32Bit(); + slot->clientSpecies = MONSTER_PIDGEY; + slot->targetSpecies = MONSTER_PIDGEY; + slot->targetItem = sub_8095F28(slot->unk4.dungeon.id); + slot->rewardType = MONEY1; + do + { + sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward); + } while (slot->targetItem == slot->itemReward); + slot->friendAreaReward = FRIEND_AREA_NONE; + sub_8096078(); + SortMailboxSlots(); +} + +void sub_8096488(void) +{ + WonderMail *mail; + s32 index; + + for(index = 0; index < NUM_MAILBOX_SLOTS; index++){ + ResetMailboxSlot(index); + } + mail = GetMailboxSlotInfo(0); + mail->mailType = 1; + mail->unk4.dungeon.id = NUM_DUNGEONS; + mail->unk4.dungeon.floor = 0; +} + +bool8 sub_80964B4(void) +{ + if ((!gUnknown_203B490->PKMNNewsReceived[0x35]) && (sub_8096E80(0x35) == 0)) { + return FALSE; + } + else { + return TRUE; + } +} + +bool8 sub_80964E4(void) +{ + if ((!gUnknown_203B490->PKMNNewsReceived[0x36]) && (sub_8096E80(0x36) == 0)) { + return FALSE; + } + else { + return TRUE; + } +} + +s32 CountFilledPelipperBoardSlots(void) +{ + s32 index; + s32 slots; + + slots = 0; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { + if (!IsPelipperBoardSlotEmpty(index)) { + slots++; + } + } + return slots; +} + +UNUSED bool8 sub_8096538(WonderMail *mail) +{ + s32 index; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if(gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) + { + gUnknown_203B490->pelipperBoardJobs[index] = *mail; + return FALSE; + } + } + return TRUE; +} + +WonderMail *GetPelipperBoardSlotInfo(u8 index) +{ + return &gUnknown_203B490->pelipperBoardJobs[index]; +} + + +bool8 IsPelipperBoardSlotEmpty(u8 index) +{ + if (gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) + return TRUE; + else + return FALSE; +} + +void ResetPelipperBoardSlot(u8 index) +{ + gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; + gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.id = 99; + gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.floor = 0; + gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; +} + +void sub_80965F4(void) +{ + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 8; counter1++) + { + if (gUnknown_203B490->pelipperBoardJobs[counter1].mailType != 0) + break; + } + + if (counter1 == 8) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->pelipperBoardJobs[counter2] = gUnknown_203B490->pelipperBoardJobs[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 8; counter2++) + { + gUnknown_203B490->pelipperBoardJobs[counter2].mailType = 0; + } +} + + +void SortPelipperJobs(void) +{ + s32 index1; + s32 index2; + + WonderMail mail; + + for(index1 = 0; index1 < MAX_ACCEPTED_JOBS - 1; index1++) + { + for(index2 = index1 + 1; index2 < MAX_ACCEPTED_JOBS; index2++) + { + if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) + { + 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]; + gUnknown_203B490->pelipperBoardJobs[index2] = mail; + } + } + } + } +} + +void GeneratePelipperJobs(void) +{ + s32 range; + WonderMail *mail; + s32 index; + + range = RandRange(4,8); + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; + } + + index = 0; + if (sub_8097318(0xe) != 0) { + mail = GetPelipperBoardSlotInfo(0); + mail->mailType = MAIL_TYPE_UNK2; + mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; + mail->unk2 = 1; + 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; + mail->rewardType = ITEM; + mail->itemReward = ITEM_REVIVER_SEED; + mail->friendAreaReward = 0; + index = 1; + } + + + if (sub_8097318(0xf) != 0) { + mail = GetPelipperBoardSlotInfo(index); + mail->mailType = MAIL_TYPE_UNK3; + mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; + mail->unk2 = 2; + 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; + mail->rewardType = ITEM; + mail->itemReward = ITEM_REVIVER_SEED; + mail->friendAreaReward = 0; + index++; + } + + if (sub_8097318(0x1c) != 0) { + mail = GetPelipperBoardSlotInfo(index); + mail->mailType = MAIL_TYPE_UNK4; + mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; + mail->unk2 = 3; + 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; + mail->rewardType = ITEM; + mail->itemReward = ITEM_REVIVER_SEED; + mail->friendAreaReward = 0; + index++; + } + for (; index <= range; index++) { + if (!GenerateMailJobInfo(&gUnknown_203B490->pelipperBoardJobs[index])) break; + gUnknown_203B490->pelipperBoardJobs[index].rewardType = RandRange(MONEY, BLANK_4); + } + sub_80965F4(); + SortPelipperJobs(); +} + +bool8 IsMailinJobSlot(WonderMail *mail) +{ + WonderMail *jobSlot; + s32 index; + + for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < MAX_ACCEPTED_JOBS; jobSlot++, index++) + { + if(jobSlot->mailType != MAIL_TYPE_NONE) + if(mail->missionType == jobSlot->missionType) + if(mail->unk2 == jobSlot->unk2) + 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) + if(mail->rewardType == jobSlot->rewardType) + if(mail->itemReward == jobSlot->itemReward) + if(mail->friendAreaReward == jobSlot->friendAreaReward) + return TRUE; + } + return FALSE; +} + +bool8 sub_809693C(WonderMail *mail) +{ + u8 dungeonIndex; + u8 floor; + bool8 escortMission; + s32 index; + + dungeonIndex = mail->unk4.dungeon.id; + floor = mail->unk4.dungeon.floor; + escortMission = FALSE; + if (!IsValidWonderMail(mail)) { + return FALSE; + } + else + { + if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) + escortMission = TRUE; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if ((gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_TAKEN_JOB) && + (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeonIndex,floor,escortMission) != 0)) + { + return TRUE; + } + } + } + return FALSE; +} + +s32 GetNumAcceptedJobs(void) +{ + s32 index; + s32 count; + + count = 0; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if (!IsJobSlotEmpty(index)) { + count++; + } + } + return count; +} + +s32 CountJobsinDungeon(u8 dungeon) +{ + WonderMail *mail; + s32 index; + s32 count; + + count = 0; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + mail = GetJobSlotInfo(index); + if ((mail->unk4.dungeon.id == dungeon) && + (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { + count++; + } + } + return count; +} + +bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon) +{ + WonderMail *mail; + s32 index; + u32 local_14; + s32 temp; + + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + mail = GetJobSlotInfo(index); + if(mail->unk4.dungeon.id == dungeon) + if(mail->mailType == MAIL_TYPE_TAKEN_JOB) + if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) + { + temp = 0xffffff00; + local_14 &= temp; + temp = 0x4A; + local_14 |= temp; + + temp = 0xffff00ff; + local_14 &= temp; + temp = 0x100; + local_14 |= temp; + + sub_808CFD0(pokemon,mail->clientSpecies,NULL,0,(DungeonLocation *) &local_14,NULL); + return TRUE; + } + } + return FALSE; +} + +bool8 AcceptJob(WonderMail *mail) +{ + s32 index; + + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) + { + gUnknown_203B490->jobSlots[index] = *mail; + return FALSE; + } + } + return TRUE; +} + +WonderMail *GetJobSlotInfo(u8 index) +{ + return &gUnknown_203B490->jobSlots[index]; +} + +bool8 IsJobSlotEmpty(u8 index) +{ + if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) + return TRUE; + else + return FALSE; +} + +void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) +{ + WonderMail *jobSlot; + Item *item; + s32 index; + + jobSlot = GetJobSlotInfo(slotIndex); + param_1->unk0 = FALSE; + param_1->clientSpecies = jobSlot->clientSpecies; + param_1->targetSpecies = MONSTER_NONE; + if (jobSlot->unk4.dungeon.id == dungeon) { + switch(jobSlot->missionType) { + case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: + if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { + for(index = 0; index < INVENTORY_SIZE; index++) + { + item = &gTeamInventoryRef->teamItems[index]; + if (((item->flags & ITEM_FLAG_EXISTS)) && (item->id == jobSlot->targetItem)) { + param_1->unk0 = TRUE; + } + } + } + break; + case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT: + case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: + if (jobSlot->mailType == MAIL_TYPE_UNK9) { + param_1->unk0 = TRUE; + } + break; + case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET: + case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: + if (jobSlot->mailType == MAIL_TYPE_UNK9) { + param_1->unk0 = TRUE; + param_1->targetSpecies = jobSlot->targetSpecies; + } + break; + } + } +} + +// Unused +s16 sub_8096B98(u8 dungeon) +{ + WonderMail *mail; + s32 index; + + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + mail = GetJobSlotInfo(index); + if(mail->mailType == MAIL_TYPE_TAKEN_JOB) + if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) + if(mail->unk4.dungeon.id == dungeon) + return mail->targetSpecies; + } + return 0; +} + +void sub_8096BD0(void) +{ + s32 index; + WonderMail *mail; + + for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) + { + switch(mail->mailType) + { + case MAIL_TYPE_UNK7: + case MAIL_TYPE_UNK8: + case MAIL_TYPE_UNK9: + ResetJobSlot(index); + break; + } + } + sub_8096C80(); + SortJobSlots(); +} + +bool8 sub_8096C08(u8 *jobIndex) +{ + s32 index; + WonderMail *mail; + + for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) + { + if(mail->mailType > 4 && mail->unk2 == 4) + { + + *jobIndex = index; + return TRUE; + } + } + return FALSE; +} + +void ResetJobSlot(u8 index) +{ + gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; + gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99; + gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; + gUnknown_203B490->jobSlots[index].rewardType = MONEY1; +} + +void sub_8096C80(void) +{ + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 8; counter1++) + { + if (gUnknown_203B490->jobSlots[counter1].mailType != 0) + break; + } + + if (counter1 == 8) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->jobSlots[counter2] = gUnknown_203B490->jobSlots[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 8; counter2++) + { + gUnknown_203B490->jobSlots[counter2].mailType = 0; + } +} + +void SortJobSlots(void) +{ + s32 r1; + s32 r6; + WonderMail job; + + for(r1 = 0; r1 < MAX_ACCEPTED_JOBS - 1; r1++) + { + for(r6 = r1 + 1; r6 < MAX_ACCEPTED_JOBS; r6++) + { + if(gUnknown_203B490->jobSlots[r6].mailType != 0) + { + if((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id > gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) || + ((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id == gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) && + (gUnknown_203B490->jobSlots[r1].unk4.dungeon.floor > gUnknown_203B490->jobSlots[r6].unk4.dungeon.floor))) + { + job = gUnknown_203B490->jobSlots[r1]; + gUnknown_203B490->jobSlots[r1] = gUnknown_203B490->jobSlots[r6]; + gUnknown_203B490->jobSlots[r6] = job; + } + } + } + } +} + +u8 *sub_8096DD8(void) +{ + return gUnknown_203B490->unk190; +} + +u8 *sub_8096DE8(void) +{ + return gUnknown_203B490->unk1B8; +} + +void ReceivePKMNNews(u8 index) +{ + gUnknown_203B490->PKMNNewsReceived[index] = TRUE; +} + +bool8 CheckPKMNNewsSlot(u8 index) +{ + return gUnknown_203B490->PKMNNewsReceived[index]; +} + +u8 sub_8096E2C(void) +{ + s32 index; + s32 floor = 0; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(gUnknown_203B490->mailboxSlots[index].mailType == 1) + { + if(floor <= gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor) + if( gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor < 0x32) + floor = gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor + 1; + } + } + + for(index = floor; index < 0x32; index++) + { + if(!gUnknown_203B490->PKMNNewsReceived[index]) return index; + } + return 0x38; +} + +bool8 sub_8096E80(u8 floor) +{ + s32 index; + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + if(gUnknown_203B490->mailboxSlots[index].mailType == 1) + { + if(floor == gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor) + return TRUE; + } + } + return FALSE; +} + +s32 CalculateMailChecksum(WonderMail *mail) +{ + s32 sum; + + sum = (mail->unk2 + mail->missionType); + + sum += mail->unk4.dungeon.id; + sum += mail->unk4.dungeon.floor; + + sum += mail->unk4.seed << 0x8; + + sum += mail->clientSpecies << 0xC; + + sum += mail->targetSpecies << 0x10; + + sum += mail->targetItem << 0x18; + + sum += mail->rewardType; + + sum += mail->itemReward; + + sum += mail->friendAreaReward; + + return sum; +} + +void sub_8096EEC(WonderMail *mail) +{ + s32 index; + + for(index = 15; index > 0; index--) + { + gUnknown_203B490->unk230[index] = gUnknown_203B490->unk230[index - 1]; + } + gUnknown_203B490->unk230[0].sub = mail->unk4; + gUnknown_203B490->unk230[0].checksum = CalculateMailChecksum(mail); +} + +bool8 sub_8096F50(WonderMail *mail) +{ + s32 index; + s32 checksum; + subStruct_203B490 *temp; + + checksum = CalculateMailChecksum(mail); + + for (index = 0; index < 0x10; index++) { + temp = &gUnknown_203B490->unk230[index]; + if (temp->sub.dungeon.id == mail->unk4.dungeon.id) + if (temp->sub.dungeon.floor == mail->unk4.dungeon.floor) + if (temp->sub.seed == mail->unk4.seed) + if (temp->checksum == checksum) + return TRUE; + } + + return FALSE; +} + +u32 RestoreMailInfo(u8 *r0, u32 size) +{ + s32 index; + struct unkStruct_8094924 backup; + u32 temp; + + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + RestoreWonderMail(&backup, &gUnknown_203B490->mailboxSlots[index]); + } + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + RestoreWonderMail(&backup, &gUnknown_203B490->pelipperBoardJobs[index]); + } + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + RestoreWonderMail(&backup, &gUnknown_203B490->jobSlots[index]); + } + for(index = 0; index < 0x38; index++) + { + RestoreIntegerBits(&backup, &temp, 1); + if(temp & 1) + gUnknown_203B490->PKMNNewsReceived[index] = TRUE; + else + gUnknown_203B490->PKMNNewsReceived[index] = FALSE; + } + RestoreIntegerBits(&backup, &temp, 1); + if(temp & 1) + gUnknown_203B490->unk328 = TRUE; + else + gUnknown_203B490->unk328 = FALSE; + + RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); + RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); + for(index = 0; index < 0x10; index++) + { + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20); + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18); + RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon); + } + nullsub_102(&backup); + return backup.unk8; +} + +u32 SaveMailInfo(u8 *r0, u32 size) +{ + s32 index; + struct unkStruct_8094924 backup; + u32 temp; + + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + SaveWonderMail(&backup, &gUnknown_203B490->mailboxSlots[index]); + } + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + SaveWonderMail(&backup, &gUnknown_203B490->pelipperBoardJobs[index]); + } + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + SaveWonderMail(&backup, &gUnknown_203B490->jobSlots[index]); + } + for(index = 0; index < 0x38; index++) + { + if(gUnknown_203B490->PKMNNewsReceived[index]) + temp = -1; + else + temp = 0; + SaveIntegerBits(&backup, &temp, 1); + } + if(gUnknown_203B490->unk328) + temp = -1; + else + temp = 0; + SaveIntegerBits(&backup, &temp, 1); + SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); + SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); + for(index = 0; index < 0x10; index++) + { + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20); + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18); + SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon); + } + nullsub_102(&backup); + return backup.unk8; +} + +void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b) +{ + RestoreIntegerBits(a, &b->mailType, 4); + RestoreIntegerBits(a, &b->missionType, 3); + RestoreIntegerBits(a, &b->unk2, 4); + RestoreIntegerBits(a, &b->clientSpecies, 9); + RestoreIntegerBits(a, &b->targetSpecies, 9); + RestoreIntegerBits(a, &b->targetItem, 8); + RestoreIntegerBits(a, &b->rewardType, 4); + RestoreIntegerBits(a, &b->itemReward, 8); + RestoreIntegerBits(a, &b->friendAreaReward, 6); + RestoreIntegerBits(a, &b->unk4.seed, 0x18); + RestoreDungeonLocation(a, &b->unk4.dungeon); +} + +void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b) +{ + SaveIntegerBits(a, &b->mailType, 4); + SaveIntegerBits(a, &b->missionType, 3); + SaveIntegerBits(a, &b->unk2, 4); + SaveIntegerBits(a, &b->clientSpecies, 9); + SaveIntegerBits(a, &b->targetSpecies, 9); + SaveIntegerBits(a, &b->targetItem, 8); + SaveIntegerBits(a, &b->rewardType, 4); + SaveIntegerBits(a, &b->itemReward, 8); + SaveIntegerBits(a, &b->friendAreaReward, 6); + SaveIntegerBits(a, &b->unk4.seed, 0x18); + SaveDungeonLocation(a, &b->unk4.dungeon); +} + diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c deleted file mode 100644 index e508ab182..000000000 --- a/src/code_80958E8_1.c +++ /dev/null @@ -1,707 +0,0 @@ -#include "constants/mailbox.h" -#include "global.h" -#include "constants/friend_area.h" -#include "constants/dungeon.h" -#include "constants/monster.h" -#include "constants/wonder_mail.h" -#include "items.h" -#include "code_80958E8.h" -#include "code_80958E8_1.h" -#include "random.h" -#include "pokemon.h" -#include "code_8096AF8.h" -#include "event_flag.h" -#include "rescue_team_info.h" - -extern u8 sub_8095E38(WonderMail *, u8, u8, bool8); -extern void sub_80965F4(); -u8 sub_8097318(s16 param_1); -extern bool8 GenerateMailJobInfo(WonderMail *); - -bool8 sub_803C1D0(DungeonLocation *, u8); -u8 sub_8095F28(u8); -void sub_803C37C(DungeonLocation *, u8, u8 *); -bool8 sub_8096E80(u8); -u8 sub_8095E78(void); - -void sub_8096078(void); -bool8 sub_80963B4(void); - -static void SortMailboxSlots(void) -{ - s32 r1; - s32 r6; - WonderMail job; - - for(r1 = 0; r1 < NUM_MAILBOX_SLOTS - 1; r1++) - { - for(r6 = r1 + 1; r6 < NUM_MAILBOX_SLOTS; r6++) - { - if(gUnknown_203B490->mailboxSlots[r6].mailType != 0) - { - if((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) || - ((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id == gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) && - (gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.floor > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.floor))) - { - job = gUnknown_203B490->mailboxSlots[r1]; - gUnknown_203B490->mailboxSlots[r1] = gUnknown_203B490->mailboxSlots[r6]; - gUnknown_203B490->mailboxSlots[r6] = job; - } - } - } - } -} - -void sub_80961B4(void) -{ - if (sub_8096E2C() != 0) { - gUnknown_203B490->unk328 = TRUE; - } -} - -bool8 sub_80961D8(void) -{ - s32 num; - s32 index; - u32 floor; - s32 friendAreaReward; - WonderMail *slot; - bool8 flag = FALSE; - - num = CountFilledMailboxSlots(); - index = RandRange(num, NUM_MAILBOX_SLOTS); - if(num >= NUM_MAILBOX_SLOTS) return 0; - if(!gUnknown_203B490->unk328) - return 0; - else - { - gUnknown_203B490->unk328 = flag; - } - floor = 0x38; - if(sub_8001D08(0xA, 0x31, 0x1)) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x35]) - if(!sub_8096E80(0x35)) floor = 0x35; - } - if(sub_80023E4(0xF)) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x34]) - if(!sub_8096E80(0x34)) floor = 0x34; - if(!gUnknown_203B490->PKMNNewsReceived[0x33]) - if(!sub_8096E80(0x33)) floor = 0x33; - if(!gUnknown_203B490->PKMNNewsReceived[0x32]) - if(!sub_8096E80(0x32)) floor = 0x32; - - } - if(GetRescueTeamRank() == LUCARIO_RANK) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x36]) - if(!sub_8096E80(0x36)) floor = 0x36; - } - if(sub_80023E4(6)) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x37]) - if(!sub_8096E80(0x37)) floor = 0x37; - } - - if(floor != 0x38) goto _slot; - if(num > index) goto _08096392; - floor = sub_8096E2C(); - if(!sub_80023E4(0xE) && (floor > 2)) goto _0809638E; - if (floor > 0x31) goto _0809638E; -_slot: - slot = GetMailboxSlotInfo(num); - slot->mailType = 1; - slot->unk4.dungeon.id = NUM_DUNGEONS; - slot->unk4.dungeon.floor = floor; - goto _flag; -_0809638E: - for(; num <= index; num++) - { - slot = GetMailboxSlotInfo(num); - if(GenerateMailJobInfo(slot)) - { - friendAreaReward = sub_8095E78(); - if(!sub_803C1D0(&slot->unk4.dungeon, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE; - slot->rewardType = RandRange(MONEY1, END_REWARDS); - if(slot->rewardType == FRIEND_AREA) - { - if(friendAreaReward == FRIEND_AREA_NONE) - { - slot->rewardType = MONEY1; - flag = TRUE; - } - else - { - slot->friendAreaReward = friendAreaReward; - flag = TRUE; - } - } - else - { -_flag: - flag = TRUE; - } - } else break; - } -_08096392: - if(sub_80963B4()) - flag = TRUE; - sub_8096078(); - SortMailboxSlots(); - return flag; -} - -bool8 sub_80963B4(void) -{ - u8 floor; - s32 num; - WonderMail *slot; - bool8 flag = FALSE; - - floor = sub_8096E2C(); - num = CountFilledMailboxSlots(); - if(num >= NUM_MAILBOX_SLOTS) return FALSE; - if(sub_80023E4(0xE)) - { - if(floor < 0x32) - { - slot = GetMailboxSlotInfo(num); - slot->mailType = 1; - slot->unk4.dungeon.id = NUM_DUNGEONS; - slot->unk4.dungeon.floor = floor; - flag = TRUE; - } - } - return flag; -} - -void sub_80963FC(void) -{ - s32 index; - WonderMail *slot; - - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - slot = GetMailboxSlotInfo(index); - if(slot->mailType != 1) - { - ResetMailboxSlot(index); - } - } - sub_8096078(); - slot = GetMailboxSlotInfo(CountFilledMailboxSlots()); - slot->mailType = 5; - slot->missionType = 0; - slot->unk2 = 0; - slot->unk4.dungeon.id = DUNGEON_MT_STEEL; - slot->unk4.dungeon.floor = 3; - slot->unk4.seed = 0x00ffffff & Rand32Bit(); - slot->clientSpecies = MONSTER_PIDGEY; - slot->targetSpecies = MONSTER_PIDGEY; - slot->targetItem = sub_8095F28(slot->unk4.dungeon.id); - slot->rewardType = MONEY1; - do - { - sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward); - } while (slot->targetItem == slot->itemReward); - slot->friendAreaReward = FRIEND_AREA_NONE; - sub_8096078(); - SortMailboxSlots(); -} - -void sub_8096488(void) -{ - WonderMail *mail; - s32 index; - - for(index = 0; index < NUM_MAILBOX_SLOTS; index++){ - ResetMailboxSlot(index); - } - mail = GetMailboxSlotInfo(0); - mail->mailType = 1; - mail->unk4.dungeon.id = NUM_DUNGEONS; - mail->unk4.dungeon.floor = 0; -} - -bool8 sub_80964B4(void) -{ - if ((!gUnknown_203B490->PKMNNewsReceived[0x35]) && (sub_8096E80(0x35) == 0)) { - return FALSE; - } - else { - return TRUE; - } -} - -bool8 sub_80964E4(void) -{ - if ((!gUnknown_203B490->PKMNNewsReceived[0x36]) && (sub_8096E80(0x36) == 0)) { - return FALSE; - } - else { - return TRUE; - } -} - -s32 CountFilledPelipperBoardSlots(void) -{ - s32 index; - s32 slots; - - slots = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { - if (!IsPelipperBoardSlotEmpty(index)) { - slots++; - } - } - return slots; -} - -UNUSED bool8 sub_8096538(WonderMail *mail) -{ - s32 index; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if(gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) - { - gUnknown_203B490->pelipperBoardJobs[index] = *mail; - return FALSE; - } - } - return TRUE; -} - -WonderMail *GetPelipperBoardSlotInfo(u8 index) -{ - return &gUnknown_203B490->pelipperBoardJobs[index]; -} - - -bool8 IsPelipperBoardSlotEmpty(u8 index) -{ - if (gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) - return TRUE; - else - return FALSE; -} - -void ResetPelipperBoardSlot(u8 index) -{ - gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.id = 99; - gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.floor = 0; - gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; -} - -void sub_80965F4(void) -{ - int counter1; // r5 - int counter2; - - - counter1 = 0; - counter2 = 0; - - do { - for( ; counter1 < 8; counter1++) - { - if (gUnknown_203B490->pelipperBoardJobs[counter1].mailType != 0) - break; - } - - if (counter1 == 8) { - break; - } - - if (counter1 > counter2) { - gUnknown_203B490->pelipperBoardJobs[counter2] = gUnknown_203B490->pelipperBoardJobs[counter1]; - } - counter1++; - counter2++; - } while( 1 ); - - for(; counter2 < 8; counter2++) - { - gUnknown_203B490->pelipperBoardJobs[counter2].mailType = 0; - } -} - - -void SortPelipperJobs(void) -{ - s32 index1; - s32 index2; - - WonderMail mail; - - for(index1 = 0; index1 < MAX_ACCEPTED_JOBS - 1; index1++) - { - for(index2 = index1 + 1; index2 < MAX_ACCEPTED_JOBS; index2++) - { - if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) - { - 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]; - gUnknown_203B490->pelipperBoardJobs[index2] = mail; - } - } - } - } -} - -void GeneratePelipperJobs(void) -{ - s32 range; - WonderMail *mail; - s32 index; - - range = RandRange(4,8); - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; - } - - index = 0; - if (sub_8097318(0xe) != 0) { - mail = GetPelipperBoardSlotInfo(0); - mail->mailType = MAIL_TYPE_UNK2; - mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; - mail->unk2 = 1; - 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; - mail->rewardType = ITEM; - mail->itemReward = ITEM_REVIVER_SEED; - mail->friendAreaReward = 0; - index = 1; - } - - - if (sub_8097318(0xf) != 0) { - mail = GetPelipperBoardSlotInfo(index); - mail->mailType = MAIL_TYPE_UNK3; - mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; - mail->unk2 = 2; - 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; - mail->rewardType = ITEM; - mail->itemReward = ITEM_REVIVER_SEED; - mail->friendAreaReward = 0; - index++; - } - - if (sub_8097318(0x1c) != 0) { - mail = GetPelipperBoardSlotInfo(index); - mail->mailType = MAIL_TYPE_UNK4; - mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; - mail->unk2 = 3; - 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; - mail->rewardType = ITEM; - mail->itemReward = ITEM_REVIVER_SEED; - mail->friendAreaReward = 0; - index++; - } - for (; index <= range; index++) { - if (!GenerateMailJobInfo(&gUnknown_203B490->pelipperBoardJobs[index])) break; - gUnknown_203B490->pelipperBoardJobs[index].rewardType = RandRange(MONEY, BLANK_4); - } - sub_80965F4(); - SortPelipperJobs(); -} - -bool8 IsMailinJobSlot(WonderMail *mail) -{ - WonderMail *jobSlot; - s32 index; - - for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < MAX_ACCEPTED_JOBS; jobSlot++, index++) - { - if(jobSlot->mailType != MAIL_TYPE_NONE) - if(mail->missionType == jobSlot->missionType) - if(mail->unk2 == jobSlot->unk2) - 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) - if(mail->rewardType == jobSlot->rewardType) - if(mail->itemReward == jobSlot->itemReward) - if(mail->friendAreaReward == jobSlot->friendAreaReward) - return TRUE; - } - return FALSE; -} - -bool8 sub_809693C(WonderMail *mail) -{ - u8 dungeonIndex; - u8 floor; - bool8 escortMission; - s32 index; - - dungeonIndex = mail->unk4.dungeon.id; - floor = mail->unk4.dungeon.floor; - escortMission = FALSE; - if (!IsValidWonderMail(mail)) { - return FALSE; - } - else - { - if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - escortMission = TRUE; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if ((gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_TAKEN_JOB) && - (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeonIndex,floor,escortMission) != 0)) - { - return TRUE; - } - } - } - return FALSE; -} - -s32 GetNumAcceptedJobs(void) -{ - s32 index; - s32 count; - - count = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if (!IsJobSlotEmpty(index)) { - count++; - } - } - return count; -} - -s32 CountJobsinDungeon(u8 dungeon) -{ - WonderMail *mail; - s32 index; - s32 count; - - count = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - mail = GetJobSlotInfo(index); - if ((mail->unk4.dungeon.id == dungeon) && - (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { - count++; - } - } - return count; -} - -bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon) -{ - WonderMail *mail; - s32 index; - u32 local_14; - s32 temp; - - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - mail = GetJobSlotInfo(index); - if(mail->unk4.dungeon.id == dungeon) - if(mail->mailType == MAIL_TYPE_TAKEN_JOB) - if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - { - temp = 0xffffff00; - local_14 &= temp; - temp = 0x4A; - local_14 |= temp; - - temp = 0xffff00ff; - local_14 &= temp; - temp = 0x100; - local_14 |= temp; - - sub_808CFD0(pokemon,mail->clientSpecies,NULL,0,(DungeonLocation *) &local_14,NULL); - return TRUE; - } - } - return FALSE; -} - -bool8 AcceptJob(WonderMail *mail) -{ - s32 index; - - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) - { - gUnknown_203B490->jobSlots[index] = *mail; - return FALSE; - } - } - return TRUE; -} - -WonderMail *GetJobSlotInfo(u8 index) -{ - return &gUnknown_203B490->jobSlots[index]; -} - -bool8 IsJobSlotEmpty(u8 index) -{ - if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) - return TRUE; - else - return FALSE; -} - -void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) -{ - WonderMail *jobSlot; - Item *item; - s32 index; - - jobSlot = GetJobSlotInfo(slotIndex); - param_1->unk0 = FALSE; - param_1->clientSpecies = jobSlot->clientSpecies; - param_1->targetSpecies = MONSTER_NONE; - if (jobSlot->unk4.dungeon.id == dungeon) { - switch(jobSlot->missionType) { - case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: - if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { - for(index = 0; index < INVENTORY_SIZE; index++) - { - item = &gTeamInventoryRef->teamItems[index]; - if (((item->flags & ITEM_FLAG_EXISTS)) && (item->id == jobSlot->targetItem)) { - param_1->unk0 = TRUE; - } - } - } - break; - case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT: - case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: - if (jobSlot->mailType == MAIL_TYPE_UNK9) { - param_1->unk0 = TRUE; - } - break; - case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET: - case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: - if (jobSlot->mailType == MAIL_TYPE_UNK9) { - param_1->unk0 = TRUE; - param_1->targetSpecies = jobSlot->targetSpecies; - } - break; - } - } -} - -// Unused -s16 sub_8096B98(u8 dungeon) -{ - WonderMail *mail; - s32 index; - - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - mail = GetJobSlotInfo(index); - if(mail->mailType == MAIL_TYPE_TAKEN_JOB) - if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - if(mail->unk4.dungeon.id == dungeon) - return mail->targetSpecies; - } - return 0; -} - -void sub_8096BD0(void) -{ - s32 index; - WonderMail *mail; - - for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) - { - switch(mail->mailType) - { - case MAIL_TYPE_UNK7: - case MAIL_TYPE_UNK8: - case MAIL_TYPE_UNK9: - ResetJobSlot(index); - break; - } - } - sub_8096C80(); - SortJobSlots(); -} - -bool8 sub_8096C08(u8 *jobIndex) -{ - s32 index; - WonderMail *mail; - - for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) - { - if(mail->mailType > 4 && mail->unk2 == 4) - { - - *jobIndex = index; - return TRUE; - } - } - return FALSE; -} - -void ResetJobSlot(u8 index) -{ - gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99; - gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; - gUnknown_203B490->jobSlots[index].rewardType = MONEY1; -} - -void sub_8096C80(void) -{ - int counter1; // r5 - int counter2; - - - counter1 = 0; - counter2 = 0; - - do { - for( ; counter1 < 8; counter1++) - { - if (gUnknown_203B490->jobSlots[counter1].mailType != 0) - break; - } - - if (counter1 == 8) { - break; - } - - if (counter1 > counter2) { - gUnknown_203B490->jobSlots[counter2] = gUnknown_203B490->jobSlots[counter1]; - } - counter1++; - counter2++; - } while( 1 ); - - for(; counter2 < 8; counter2++) - { - gUnknown_203B490->jobSlots[counter2].mailType = 0; - } -} - diff --git a/src/code_80972F4.c b/src/code_80972F4.c index c1821e005..ef7d202d7 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -1,7 +1,4 @@ #include "global.h" -#include "constants/dungeon.h" -#include "pokemon.h" -#include "code_80958E8.h" #include "dungeon.h" #include "exclusive_pokemon.h" #include "event_flag.h" @@ -14,273 +11,10 @@ ALIGNED(4) const u8 gDummyScenarioText[] = _("{COLOR_1 YELLOW_3}Scenario try dum ALIGNED(4) const u8 gBlankMission[] = _("{COLOR_1 RED_2}???{END_COLOR_TEXT_1}"); extern void sub_800199C(u8, u8, u16, s32); -extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); -extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); extern u32 sub_8001784(u32, u32, u16); extern void GeneratePelipperJobs(void); extern void sub_80018D8(u8, u8, u32); -void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b); -void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b); -s32 CalculateMailChecksum(WonderMail *mail); - -void SortJobSlots(void) -{ - s32 r1; - s32 r6; - WonderMail job; - - for(r1 = 0; r1 < MAX_ACCEPTED_JOBS - 1; r1++) - { - for(r6 = r1 + 1; r6 < MAX_ACCEPTED_JOBS; r6++) - { - if(gUnknown_203B490->jobSlots[r6].mailType != 0) - { - if((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id > gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) || - ((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id == gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) && - (gUnknown_203B490->jobSlots[r1].unk4.dungeon.floor > gUnknown_203B490->jobSlots[r6].unk4.dungeon.floor))) - { - job = gUnknown_203B490->jobSlots[r1]; - gUnknown_203B490->jobSlots[r1] = gUnknown_203B490->jobSlots[r6]; - gUnknown_203B490->jobSlots[r6] = job; - } - } - } - } -} - -u8 *sub_8096DD8(void) -{ - return gUnknown_203B490->unk190; -} - -u8 *sub_8096DE8(void) -{ - return gUnknown_203B490->unk1B8; -} - -void ReceivePKMNNews(u8 index) -{ - gUnknown_203B490->PKMNNewsReceived[index] = TRUE; -} - -bool8 CheckPKMNNewsSlot(u8 index) -{ - return gUnknown_203B490->PKMNNewsReceived[index]; -} - -u8 sub_8096E2C(void) -{ - s32 index; - s32 floor = 0; - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - if(gUnknown_203B490->mailboxSlots[index].mailType == 1) - { - if(floor <= gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor) - if( gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor < 0x32) - floor = gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor + 1; - } - } - - for(index = floor; index < 0x32; index++) - { - if(!gUnknown_203B490->PKMNNewsReceived[index]) return index; - } - return 0x38; -} - -bool8 sub_8096E80(u8 floor) -{ - s32 index; - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - if(gUnknown_203B490->mailboxSlots[index].mailType == 1) - { - if(floor == gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor) - return TRUE; - } - } - return FALSE; -} - -s32 CalculateMailChecksum(WonderMail *mail) -{ - s32 sum; - - sum = (mail->unk2 + mail->missionType); - - sum += mail->unk4.dungeon.id; - sum += mail->unk4.dungeon.floor; - - sum += mail->unk4.seed << 0x8; - - sum += mail->clientSpecies << 0xC; - - sum += mail->targetSpecies << 0x10; - - sum += mail->targetItem << 0x18; - - sum += mail->rewardType; - - sum += mail->itemReward; - - sum += mail->friendAreaReward; - - return sum; -} - -void sub_8096EEC(WonderMail *mail) -{ - s32 index; - - for(index = 15; index > 0; index--) - { - gUnknown_203B490->unk230[index] = gUnknown_203B490->unk230[index - 1]; - } - gUnknown_203B490->unk230[0].sub = mail->unk4; - gUnknown_203B490->unk230[0].checksum = CalculateMailChecksum(mail); -} - -bool8 sub_8096F50(WonderMail *mail) -{ - s32 index; - s32 checksum; - subStruct_203B490 *temp; - - checksum = CalculateMailChecksum(mail); - - for (index = 0; index < 0x10; index++) { - temp = &gUnknown_203B490->unk230[index]; - if (temp->sub.dungeon.id == mail->unk4.dungeon.id) - if (temp->sub.dungeon.floor == mail->unk4.dungeon.floor) - if (temp->sub.seed == mail->unk4.seed) - if (temp->checksum == checksum) - return TRUE; - } - - return FALSE; -} - -u32 RestoreMailInfo(u8 *r0, u32 size) -{ - s32 index; - struct unkStruct_8094924 backup; - u32 temp; - - xxx_init_struct_8094924_restore_809485C(&backup, r0, size); - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - RestoreWonderMail(&backup, &gUnknown_203B490->mailboxSlots[index]); - } - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - RestoreWonderMail(&backup, &gUnknown_203B490->pelipperBoardJobs[index]); - } - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - RestoreWonderMail(&backup, &gUnknown_203B490->jobSlots[index]); - } - for(index = 0; index < 0x38; index++) - { - RestoreIntegerBits(&backup, &temp, 1); - if(temp & 1) - gUnknown_203B490->PKMNNewsReceived[index] = TRUE; - else - gUnknown_203B490->PKMNNewsReceived[index] = FALSE; - } - RestoreIntegerBits(&backup, &temp, 1); - if(temp & 1) - gUnknown_203B490->unk328 = TRUE; - else - gUnknown_203B490->unk328 = FALSE; - - RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); - RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); - for(index = 0; index < 0x10; index++) - { - RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20); - RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18); - RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon); - } - nullsub_102(&backup); - return backup.unk8; -} - -u32 SaveMailInfo(u8 *r0, u32 size) -{ - s32 index; - struct unkStruct_8094924 backup; - u32 temp; - - xxx_init_struct_8094924_save_809486C(&backup, r0, size); - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - SaveWonderMail(&backup, &gUnknown_203B490->mailboxSlots[index]); - } - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - SaveWonderMail(&backup, &gUnknown_203B490->pelipperBoardJobs[index]); - } - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - SaveWonderMail(&backup, &gUnknown_203B490->jobSlots[index]); - } - for(index = 0; index < 0x38; index++) - { - if(gUnknown_203B490->PKMNNewsReceived[index]) - temp = -1; - else - temp = 0; - SaveIntegerBits(&backup, &temp, 1); - } - if(gUnknown_203B490->unk328) - temp = -1; - else - temp = 0; - SaveIntegerBits(&backup, &temp, 1); - SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); - SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); - for(index = 0; index < 0x10; index++) - { - SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20); - SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18); - SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon); - } - nullsub_102(&backup); - return backup.unk8; -} - -void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b) -{ - RestoreIntegerBits(a, &b->mailType, 4); - RestoreIntegerBits(a, &b->missionType, 3); - RestoreIntegerBits(a, &b->unk2, 4); - RestoreIntegerBits(a, &b->clientSpecies, 9); - RestoreIntegerBits(a, &b->targetSpecies, 9); - RestoreIntegerBits(a, &b->targetItem, 8); - RestoreIntegerBits(a, &b->rewardType, 4); - RestoreIntegerBits(a, &b->itemReward, 8); - RestoreIntegerBits(a, &b->friendAreaReward, 6); - RestoreIntegerBits(a, &b->unk4.seed, 0x18); - RestoreDungeonLocation(a, &b->unk4.dungeon); -} - -void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b) -{ - SaveIntegerBits(a, &b->mailType, 4); - SaveIntegerBits(a, &b->missionType, 3); - SaveIntegerBits(a, &b->unk2, 4); - SaveIntegerBits(a, &b->clientSpecies, 9); - SaveIntegerBits(a, &b->targetSpecies, 9); - SaveIntegerBits(a, &b->targetItem, 8); - SaveIntegerBits(a, &b->rewardType, 4); - SaveIntegerBits(a, &b->itemReward, 8); - SaveIntegerBits(a, &b->friendAreaReward, 6); - SaveIntegerBits(a, &b->unk4.seed, 0x18); - SaveDungeonLocation(a, &b->unk4.dungeon); -} - void sub_80972F4(void) { sub_80015C0(0, 0x2B); diff --git a/src/code_8097504.c b/src/code_8097504.c index 5ee3b169d..2c4256629 100644 --- a/src/code_8097504.c +++ b/src/code_8097504.c @@ -13,7 +13,6 @@ extern void sub_800199C(u8, u8, u16, s32); extern u32 sub_8001784(u32, u32, u16); extern void sub_80018D8(u8, u8, u32); - bool8 sub_8097504(s16 mazeIndex) { s32 mazeIndex_s32; diff --git a/src/mailbox.c b/src/mailbox.c index 81a713c1c..838a3ab56 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -15,10 +15,9 @@ #include "pokemon_news3.h" #include "code_80958E8.h" #include "code_803B050.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "wonder_mail_802C4C8.h" #include "wonder_mail_802C860.h" -#include "code_8096AF8.h" EWRAM_DATA_2 struct unkStruct_203B304 *gUnknown_203B304 = {0}; diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 85c60d1dc..9907a1951 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -14,11 +14,10 @@ #include "pelipper_board.h" #include "code_80118A4.h" #include "wonder_mail_802C10C.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "code_803B050.h" #include "wonder_mail_802C4C8.h" #include "wonder_mail_802C860.h" -#include "code_8096AF8.h" EWRAM_DATA_2 struct unkStruct_203B308 *gPelipperBoard = {0}; @@ -80,9 +79,6 @@ extern void sub_802EC10(void); extern void CreatePelipperAcceptedStatusBox(u32); -extern void ResetPelipperBoardSlot(u8); -extern void sub_80965F4(void); - void SetPelipperBoardState(u32); u32 sub_802E864(void) diff --git a/src/pokemon_news1.c b/src/pokemon_news1.c index b15dcfe6a..b4900bff4 100644 --- a/src/pokemon_news1.c +++ b/src/pokemon_news1.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80118A4.h" #include "code_80130A8.h" -#include "code_8096AF8.h" +#include "code_80958E8.h" #include "constants/input.h" #include "input.h" #include "pokemon_mail.h" diff --git a/src/pokemon_news3.c b/src/pokemon_news3.c index 5f9ae3fe0..61017633f 100644 --- a/src/pokemon_news3.c +++ b/src/pokemon_news3.c @@ -3,7 +3,7 @@ #include "code_800D090.h" #include "code_80118A4.h" #include "code_803B050.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "constants/input.h" #include "constants/mailbox.h" #include "input.h" diff --git a/src/post_office_guide2.c b/src/post_office_guide2.c index cf18165ad..92ce18578 100644 --- a/src/post_office_guide2.c +++ b/src/post_office_guide2.c @@ -3,7 +3,7 @@ #include "code_800D090.h" #include "code_80118A4.h" #include "code_8094F88.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "code_80972F4.h" #include "code_80A26CC.h" #include "constants/mailbox.h" @@ -184,4 +184,4 @@ static void DisplayMissionObjectives(void) } sub_80073E0(sUnknown_203B330->unk10); -} \ No newline at end of file +} diff --git a/src/wonder_mail_802C10C.c b/src/wonder_mail_802C10C.c index 199803c9a..7e8dbbc80 100644 --- a/src/wonder_mail_802C10C.c +++ b/src/wonder_mail_802C10C.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80118A4.h" #include "code_803B050.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "constants/input.h" #include "input.h" #include "memory.h" @@ -228,4 +228,4 @@ bool8 HasNoPelipperBoardJobs(void) } return TRUE; -} \ No newline at end of file +} diff --git a/src/wonder_mail_802C4C8.c b/src/wonder_mail_802C4C8.c index 923dbea75..bd1237cc6 100644 --- a/src/wonder_mail_802C4C8.c +++ b/src/wonder_mail_802C4C8.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80118A4.h" #include "code_803B050.h" -#include "code_80958E8_1.h" +#include "code_80958E8.h" #include "constants/input.h" #include "input.h" #include "memory.h" @@ -221,4 +221,4 @@ bool8 HasNoAcceptedJobs(void) } return TRUE; -} \ No newline at end of file +} diff --git a/src/wonder_mail_802C860.c b/src/wonder_mail_802C860.c index ac732cb28..7468c8b24 100644 --- a/src/wonder_mail_802C860.c +++ b/src/wonder_mail_802C860.c @@ -3,8 +3,7 @@ #include "code_80118A4.h" #include "code_803B050.h" #include "code_802DE84.h" -#include "code_80958E8_1.h" -#include "code_8096AF8.h" +#include "code_80958E8.h" #include "code_80A26CC.h" #include "common_strings.h" #include "input.h" @@ -308,4 +307,4 @@ static void sub_802CDB8(void) case 1: break; } -} \ No newline at end of file +} diff --git a/src/wonder_mail_802D098.c b/src/wonder_mail_802D098.c index 5c1ee4649..f3e01c73a 100644 --- a/src/wonder_mail_802D098.c +++ b/src/wonder_mail_802D098.c @@ -3,8 +3,7 @@ #include "code_80130A8.h" #include "code_802DE84.h" #include "code_803B050.h" -#include "code_80958E8_1.h" -#include "code_8096AF8.h" +#include "code_80958E8.h" #include "code_80972F4.h" #include "code_8098BDC.h" #include "common_strings.h" From 6df964fcc92719a06c47287f9baefe8627c7e73a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 3 Jun 2024 13:52:17 -0700 Subject: [PATCH 09/39] name some more funcs and cleanup --- include/code_80958E8.h | 5 +++-- src/code_80958E8.c | 46 +++++++++++++++++++-------------------- src/mailbox.c | 14 +++++------- src/pelipper_board.c | 8 +++---- src/wonder_mail_802C860.c | 2 +- src/wonder_mail_802D098.c | 10 ++++----- 6 files changed, 42 insertions(+), 43 deletions(-) diff --git a/include/code_80958E8.h b/include/code_80958E8.h index 0748e9d13..e709d28c4 100644 --- a/include/code_80958E8.h +++ b/include/code_80958E8.h @@ -44,6 +44,7 @@ s32 CountFilledMailboxSlots(void); WonderMail *GetMailboxSlotInfo(u8 index); bool8 IsMailSlotEmpty(u8 index); void ResetMailboxSlot(u8 index); +void ShiftMailboxSlotsDown(void); bool8 AcceptJob(WonderMail *mail); s32 CountJobsinDungeon(u8 dungeon); WonderMail *GetJobSlotInfo(u8 index); @@ -57,8 +58,8 @@ bool8 sub_8096C08(u8 *jobIndex); WonderMail *GetPelipperBoardSlotInfo(u8); bool8 IsPelipperBoardSlotEmpty(u8); void ResetPelipperBoardSlot(u8); -void sub_80965F4(void); -void sub_8096C80(void); +void ShiftPelipperJobsDown(void); +void ShiftJobSlotsDown(void); void ReceivePKMNNews(u8 index); bool8 CheckPKMNNewsSlot(u8 index); void SortJobSlots(void); diff --git a/src/code_80958E8.c b/src/code_80958E8.c index e12890f88..40caa0bbd 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -29,7 +29,7 @@ bool8 GenerateMailJobDungeonInfo(WonderMail *mail); bool8 GenerateMailJobInfo(WonderMail *); bool8 sub_8096E80(u8); u8 sub_8095E78(void); -void sub_8096078(void); +void ShiftMailboxSlotsDown(void); bool8 sub_80963B4(void); void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b); void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b); @@ -539,21 +539,21 @@ bool8 GenerateMailJobDungeonInfo(WonderMail *mail) if(sub_809017C(&dungeonLoc)) flag = FALSE; - for(index = 0; index < 4; index++) + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) { if (sub_8095E38(&gUnknown_203B490->mailboxSlots[index],dungeon,floor,1)) { flag = FALSE; } } - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { if (sub_8095E38(&gUnknown_203B490->pelipperBoardJobs[index],dungeon,floor,1)) { flag = FALSE; } } - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { if (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeon,floor,1)) { flag = FALSE; @@ -613,14 +613,14 @@ u8 sub_8095E78(void) flag = FALSE; - for(index = 0; index < 4; index++) + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) { if((gUnknown_203B490->mailboxSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->mailboxSlots[index].rewardType == FRIEND_AREA)) flag = TRUE; } - for(index = 0; index < 8; index++) + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { if((gUnknown_203B490->jobSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->jobSlots[index].rewardType == FRIEND_AREA)) flag = TRUE; @@ -724,7 +724,7 @@ void ResetMailboxSlot(u8 index) gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1; } -void sub_8096078(void) +void ShiftMailboxSlotsDown(void) { int counter1; // r5 int counter2; @@ -734,13 +734,13 @@ void sub_8096078(void) counter2 = 0; do { - for( ; counter1 < 4; counter1++) + for( ; counter1 < NUM_MAILBOX_SLOTS; counter1++) { if (gUnknown_203B490->mailboxSlots[counter1].mailType != 0) break; } - if (counter1 == 4) { + if (counter1 == NUM_MAILBOX_SLOTS) { break; } @@ -751,7 +751,7 @@ void sub_8096078(void) counter2++; } while( 1 ); - for(; counter2 < 4; counter2++) + for(; counter2 < NUM_MAILBOX_SLOTS; counter2++) { gUnknown_203B490->mailboxSlots[counter2].mailType = 0; } @@ -877,7 +877,7 @@ _flag: _08096392: if(sub_80963B4()) flag = TRUE; - sub_8096078(); + ShiftMailboxSlotsDown(); SortMailboxSlots(); return flag; } @@ -919,7 +919,7 @@ void sub_80963FC(void) ResetMailboxSlot(index); } } - sub_8096078(); + ShiftMailboxSlotsDown(); slot = GetMailboxSlotInfo(CountFilledMailboxSlots()); slot->mailType = 5; slot->missionType = 0; @@ -936,7 +936,7 @@ void sub_80963FC(void) sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward); } while (slot->targetItem == slot->itemReward); slot->friendAreaReward = FRIEND_AREA_NONE; - sub_8096078(); + ShiftMailboxSlotsDown(); SortMailboxSlots(); } @@ -1024,7 +1024,7 @@ void ResetPelipperBoardSlot(u8 index) gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; } -void sub_80965F4(void) +void ShiftPelipperJobsDown(void) { int counter1; // r5 int counter2; @@ -1034,13 +1034,13 @@ void sub_80965F4(void) counter2 = 0; do { - for( ; counter1 < 8; counter1++) + for( ; counter1 < MAX_ACCEPTED_JOBS; counter1++) { if (gUnknown_203B490->pelipperBoardJobs[counter1].mailType != 0) break; } - if (counter1 == 8) { + if (counter1 == MAX_ACCEPTED_JOBS) { break; } @@ -1051,7 +1051,7 @@ void sub_80965F4(void) counter2++; } while( 1 ); - for(; counter2 < 8; counter2++) + for(; counter2 < MAX_ACCEPTED_JOBS; counter2++) { gUnknown_203B490->pelipperBoardJobs[counter2].mailType = 0; } @@ -1151,7 +1151,7 @@ void GeneratePelipperJobs(void) if (!GenerateMailJobInfo(&gUnknown_203B490->pelipperBoardJobs[index])) break; gUnknown_203B490->pelipperBoardJobs[index].rewardType = RandRange(MONEY, BLANK_4); } - sub_80965F4(); + ShiftPelipperJobsDown(); SortPelipperJobs(); } @@ -1373,7 +1373,7 @@ void sub_8096BD0(void) break; } } - sub_8096C80(); + ShiftJobSlotsDown(); SortJobSlots(); } @@ -1402,7 +1402,7 @@ void ResetJobSlot(u8 index) gUnknown_203B490->jobSlots[index].rewardType = MONEY1; } -void sub_8096C80(void) +void ShiftJobSlotsDown(void) { int counter1; // r5 int counter2; @@ -1412,13 +1412,13 @@ void sub_8096C80(void) counter2 = 0; do { - for( ; counter1 < 8; counter1++) + for( ; counter1 < MAX_ACCEPTED_JOBS; counter1++) { if (gUnknown_203B490->jobSlots[counter1].mailType != 0) break; } - if (counter1 == 8) { + if (counter1 == MAX_ACCEPTED_JOBS) { break; } @@ -1429,7 +1429,7 @@ void sub_8096C80(void) counter2++; } while( 1 ); - for(; counter2 < 8; counter2++) + for(; counter2 < MAX_ACCEPTED_JOBS; counter2++) { gUnknown_203B490->jobSlots[counter2].mailType = 0; } diff --git a/src/mailbox.c b/src/mailbox.c index 838a3ab56..617a29746 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -79,11 +79,9 @@ void sub_802E73C(void); void sub_802E758(void); void sub_802E774(void); void sub_802E7D0(void); -extern void sub_802E088(u32); -extern void CreateMailboxMenu(void); -extern void CreateMailActionMenu(void); -extern void CreateMailAcceptedStatusBox(u32); -extern void sub_8096078(void); +void CreateMailboxMenu(void); +void CreateMailActionMenu(void); +void CreateMailAcceptedStatusBox(u32); u32 sub_802DFB0(void) { @@ -417,10 +415,10 @@ void HandleMailActionMenu(void) case 5: PlaySound(0x133); AcceptJob(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex)); - sub_8096C80(); + ShiftJobSlotsDown(); SortJobSlots(); ResetMailboxSlot(gUnknown_203B304->mailboxIndex); - sub_8096078(); + ShiftMailboxSlotsDown(); if(HasNoMailinMailbox()) { sub_802BEDC(); @@ -441,7 +439,7 @@ void HandleMailActionMenu(void) mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex); ReceivePKMNNews(mail->unk4.dungeon.floor); ResetMailboxSlot(gUnknown_203B304->mailboxIndex); - sub_8096078(); + ShiftMailboxSlotsDown(); if(HasNoMailinMailbox()) { sub_802BEDC(); diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 9907a1951..648320d61 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -362,27 +362,27 @@ void sub_802EDBC(void) case MAIL_TYPE_UNK2: gPelipperBoard->unk4 = 1; ResetPelipperBoardSlot(gPelipperBoard->jobIndex); - sub_80965F4(); + ShiftPelipperJobsDown(); sub_802C2D4(); SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; case MAIL_TYPE_UNK3: gPelipperBoard->unk4 = 2; ResetPelipperBoardSlot(gPelipperBoard->jobIndex); - sub_80965F4(); + ShiftPelipperJobsDown(); sub_802C2D4(); SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; case MAIL_TYPE_UNK4: gPelipperBoard->unk4 = 3; ResetPelipperBoardSlot(gPelipperBoard->jobIndex); - sub_80965F4(); + ShiftPelipperJobsDown(); sub_802C2D4(); SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; default: AcceptJob(mail); - sub_8096C80(); + ShiftJobSlotsDown(); SortJobSlots(); if(HasNoPelipperBoardJobs()) { diff --git a/src/wonder_mail_802C860.c b/src/wonder_mail_802C860.c index 7468c8b24..14a661afa 100644 --- a/src/wonder_mail_802C860.c +++ b/src/wonder_mail_802C860.c @@ -283,7 +283,7 @@ static void sub_802CD38(void) break; case 5: ResetJobSlot(sUnknown_203B2F0->unkC); - sub_8096C80(); + ShiftJobSlotsDown(); if (HasNoAcceptedJobs()) { sub_802C688(); diff --git a/src/wonder_mail_802D098.c b/src/wonder_mail_802D098.c index f3e01c73a..70bfb3223 100644 --- a/src/wonder_mail_802D098.c +++ b/src/wonder_mail_802D098.c @@ -207,12 +207,12 @@ static void sub_802D2A8(void) case RECEIVE_WONDER_MAIL: sUnknown_203B2F8->wonderMailAccepted = TRUE; AcceptJob(&sUnknown_203B2F8->mail->wonderMail); - sub_8096C80(); + ShiftJobSlotsDown(); SortJobSlots(); if (sUnknown_203B2F8->mail->wonderMail.unk2 == 4) { - MemoryCopy8(sub_8096DD8(), sUnknown_203B2F8->mail->unk14, 40); - MemoryCopy8(sub_8096DE8(), sUnknown_203B2F8->mail->unk18, 120); + MemoryCopy8(sub_8096DD8(), sUnknown_203B2F8->mail->unk14, sizeof(gUnknown_203B490->unk190)); + MemoryCopy8(sub_8096DE8(), sUnknown_203B2F8->mail->unk18, sizeof(gUnknown_203B490->unk1B8)); } switch (sUnknown_203B2F8->mail->wonderMail.unk4.dungeon.id) { @@ -417,7 +417,7 @@ static void sub_802D82C(void) switch (menuAction) { case 3: // Yes ResetJobSlot(sUnknown_203B2F8->jobSlotIndex); - sub_8096C80(); + ShiftJobSlotsDown(); sub_802D1A0(RECEIVE_WONDER_MAIL); break; case 6: // New Mail @@ -514,7 +514,7 @@ static void sub_802D9F0(void) case 3: // Yes sub_802C688(); ResetJobSlot(sUnknown_203B2F8->jobSlotIndex); - sub_8096C80(); + ShiftJobSlotsDown(); sub_802D1A0(RECEIVE_WONDER_MAIL); break; } From 1b12aa6c56df2c15ea7de7f6c0d2688320788658 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 4 Jun 2024 10:00:26 -0700 Subject: [PATCH 10/39] decomp sub_8097944 --- asm/code_8097670.s | 386 ----------------------------------------- include/code_8097670.h | 3 +- ld_script.txt | 1 - src/code_8097670.c | 143 ++++++++++++++- src/code_8097DD0.c | 2 - 5 files changed, 144 insertions(+), 391 deletions(-) delete mode 100644 asm/code_8097670.s diff --git a/asm/code_8097670.s b/asm/code_8097670.s deleted file mode 100644 index d6d224f0f..000000000 --- a/asm/code_8097670.s +++ /dev/null @@ -1,386 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8097944 -sub_8097944: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - movs r0, 0x1 - str r0, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - movs r0, 0xD - bl sub_8097710 - lsls r0, 24 - cmp r0, 0 - bne _08097974 - bl HasAllFriendAreas - lsls r0, 24 - cmp r0, 0 - beq _08097974 - movs r0, 0xD - bl sub_80976F8 -_08097974: - movs r4, 0 - ldr r0, _08097B5C - mov r10, r0 - mov r8, r4 -_0809797C: - ldr r1, _08097B60 - ldr r0, [r1] - mov r1, r8 - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080979F6 - movs r0, 0x8 - ldrsh r3, [r2, r0] - mov r1, r10 - ldr r2, [r1] - adds r0, r3, 0 - cmp r3, 0 - bge _0809799E - adds r0, 0x1F -_0809799E: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x1C - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - ldr r0, _08097B60 - mov r9, r0 - mov r12, r8 - movs r7, 0x1 - movs r6, 0x2C - movs r5, 0x3 -_080979C0: - mov r1, r9 - ldr r0, [r1] - add r0, r12 - adds r3, r0, r6 - ldrb r1, [r3] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _080979EE - mov r0, r10 - ldr r2, [r0] - ldrh r3, [r3, 0x2] - lsrs r0, r3, 5 - lsls r0, 2 - adds r2, 0x8C - adds r2, r0 - movs r0, 0x1F - ands r3, r0 - adds r1, r7, 0 - lsls r1, r3 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] -_080979EE: - adds r6, 0x8 - subs r5, 0x1 - cmp r5, 0 - bge _080979C0 -_080979F6: - movs r1, 0x58 - add r8, r1 - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _0809797C - movs r4, 0 - ldr r1, _08097B64 -_08097A08: - cmp r4, 0 - bne _08097A0E - b _08097B80 -_08097A0E: - ldr r0, _08097B68 - cmp r4, r0 - bne _08097A16 - b _08097B80 -_08097A16: - adds r0, 0x1 - cmp r4, r0 - bne _08097A1E - b _08097B80 -_08097A1E: - adds r0, 0x1 - cmp r4, r0 - bne _08097A26 - b _08097B80 -_08097A26: - adds r0, 0x26 - cmp r4, r0 - bne _08097A2E - b _08097B80 -_08097A2E: - adds r0, 0x1 - cmp r4, r0 - bne _08097A36 - b _08097B80 -_08097A36: - adds r0, 0x1 - cmp r4, r0 - bne _08097A3E - b _08097B80 -_08097A3E: - adds r0, 0x1 - cmp r4, r0 - bne _08097A46 - b _08097B80 -_08097A46: - adds r0, 0x1 - cmp r4, r0 - bne _08097A4E - b _08097B80 -_08097A4E: - adds r0, 0x1 - cmp r4, r0 - bne _08097A56 - b _08097B80 -_08097A56: - cmp r4, r1 - bne _08097A5C - b _08097B80 -_08097A5C: - ldr r0, _08097B5C - ldr r5, [r0] - adds r0, r4, 0 - cmp r4, 0 - bge _08097A68 - adds r0, 0x1F -_08097A68: - asrs r0, 5 - lsls r3, r0, 2 - adds r1, r5, 0 - adds r1, 0x54 - adds r1, r3 - lsls r0, 5 - subs r0, r4, r0 - movs r2, 0x1 - lsls r2, r0 - ldr r0, [r1] - ands r0, r2 - cmp r0, 0 - bne _08097A86 - movs r0, 0 - str r0, [sp, 0x4] -_08097A86: - adds r0, r5, 0 - adds r0, 0x1C - adds r0, r3 - ldr r0, [r0] - ands r0, r2 - cmp r0, 0 - beq _08097B7C - cmp r4, 0x92 - bne _08097A9E - movs r0, 0x10 - bl sub_80976F8 -_08097A9E: - cmp r4, 0x91 - bne _08097AA8 - movs r0, 0x11 - bl sub_80976F8 -_08097AA8: - cmp r4, 0x90 - bne _08097AB2 - movs r0, 0x12 - bl sub_80976F8 -_08097AB2: - movs r0, 0xCF - lsls r0, 1 - cmp r4, r0 - bne _08097AC0 - movs r0, 0x13 - bl sub_80976F8 -_08097AC0: - ldr r0, _08097B6C - cmp r4, r0 - bne _08097ACC - movs r0, 0x14 - bl sub_80976F8 -_08097ACC: - movs r0, 0x86 - lsls r0, 1 - cmp r4, r0 - bne _08097ADA - movs r0, 0x15 - bl sub_80976F8 -_08097ADA: - movs r0, 0x87 - lsls r0, 1 - cmp r4, r0 - bne _08097AE8 - movs r0, 0x16 - bl sub_80976F8 -_08097AE8: - ldr r0, _08097B70 - cmp r4, r0 - bne _08097AF4 - movs r0, 0x17 - bl sub_80976F8 -_08097AF4: - movs r0, 0xCD - lsls r0, 1 - cmp r4, r0 - bne _08097B02 - movs r0, 0x18 - bl sub_80976F8 -_08097B02: - ldr r0, _08097B74 - cmp r4, r0 - bne _08097B0E - movs r0, 0x19 - bl sub_80976F8 -_08097B0E: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bne _08097B1C - movs r0, 0x1A - bl sub_80976F8 -_08097B1C: - movs r0, 0x89 - lsls r0, 1 - cmp r4, r0 - bne _08097B2A - movs r0, 0x1B - bl sub_80976F8 -_08097B2A: - movs r0, 0x8A - lsls r0, 1 - cmp r4, r0 - bne _08097B38 - movs r0, 0x1C - bl sub_80976F8 -_08097B38: - cmp r4, 0x97 - bne _08097B42 - movs r0, 0x1D - bl sub_80976F8 -_08097B42: - cmp r4, 0x96 - bne _08097B4C - movs r0, 0x1E - bl sub_80976F8 -_08097B4C: - ldr r0, _08097B78 - cmp r4, r0 - bne _08097B80 - movs r0, 0x1F - bl sub_80976F8 - b _08097B80 - .align 2, 0 -_08097B5C: .4byte gUnknown_203B494 -_08097B60: .4byte gRecruitedPokemonRef -_08097B64: .4byte 0x000001a7 -_08097B68: .4byte 0x00000179 -_08097B6C: .4byte 0x0000010d -_08097B70: .4byte 0x00000113 -_08097B74: .4byte 0x0000019b -_08097B78: .4byte 0x0000019d -_08097B7C: - movs r1, 0 - str r1, [sp] -_08097B80: - adds r4, 0x1 - ldr r1, _08097C0C - cmp r4, r1 - bgt _08097B8A - b _08097A08 -_08097B8A: - ldr r0, [sp] - cmp r0, 0 - beq _08097B96 - movs r0, 0xF - bl sub_80976F8 -_08097B96: - ldr r1, [sp, 0x4] - cmp r1, 0 - beq _08097BA2 - movs r0, 0xE - bl sub_80976F8 -_08097BA2: - movs r3, 0 - movs r4, 0 -_08097BA6: - cmp r4, 0 - beq _08097BE2 - ldr r0, _08097C10 - cmp r4, r0 - beq _08097BE2 - adds r0, 0x1 - cmp r4, r0 - beq _08097BE2 - adds r0, 0x1 - cmp r4, r0 - beq _08097BE2 - ldr r0, _08097C14 - ldr r2, [r0] - adds r0, r4, 0 - cmp r4, 0 - bge _08097BC8 - adds r0, 0x1F -_08097BC8: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x8C - adds r2, r1 - lsls r0, 5 - subs r0, r4, r0 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - beq _08097BE2 - adds r3, 0x1 -_08097BE2: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _08097BA6 - cmp r3, 0 - beq _08097BFC - ldr r0, _08097C14 - ldr r0, [r0] - strh r3, [r0, 0x18] - movs r0, 0x7 - bl sub_80976F8 -_08097BFC: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08097C0C: .4byte 0x000001a7 -_08097C10: .4byte 0x00000163 -_08097C14: .4byte gUnknown_203B494 - thumb_func_end sub_8097944 - - .align 2,0 diff --git a/include/code_8097670.h b/include/code_8097670.h index aa640196e..8a26bfca8 100644 --- a/include/code_8097670.h +++ b/include/code_8097670.h @@ -41,5 +41,6 @@ void sub_8097848(void); s16 sub_8097870(void); s16 sub_8097880(void); s16 sub_80978B8(void); +void sub_8097944(void); -#endif // GUARD_CODE_8097670_H \ No newline at end of file +#endif // GUARD_CODE_8097670_H diff --git a/ld_script.txt b/ld_script.txt index 92ad439b8..bded6c490 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -326,7 +326,6 @@ SECTIONS { src/code_80972F4.o(.text); src/code_8097504.o(.text); src/code_8097670.o(.text); - asm/code_8097670.o(.text); src/code_8097DD0.o(.text); asm/code_8097DD0.o(.text); src/code_8097F40.o(.text); diff --git a/src/code_8097670.c b/src/code_8097670.c index c7a767e05..890d476dc 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -2,6 +2,7 @@ #include "code_8097670.h" #include "pokemon.h" #include "pokemon_3.h" +#include "friend_area.h" static EWRAM_DATA struct unkStruct_203B494 sUnknown_2039778 = {0}; @@ -201,4 +202,144 @@ bool8 sub_8097900(s16 pokeIndex) if (preload->unk1C[iVar2 >> 5] & (1 << (baseSpecies + (iVar2 >> 5) * -0x20))) return TRUE; return FALSE; -} \ No newline at end of file +} + +void sub_8097944(void) +{ + bool8 bVar2; + bool8 bVar3; + int index; + s32 counter; + Move *move; + PokemonStruct1 *pokeStruct; + s32 index1; + s32 temp; + + bVar2 = 1; + bVar3 = 1; + if ((sub_8097710(0xd) == 0) && (HasAllFriendAreas())) { + sub_80976F8(0xd); + } + + for(index = 0; index < 0x19D; index++) + { + +#ifdef NONMATCHING + pokeStruct = &index[gRecruitedPokemonRef->pokemon]; +#else + register size_t offset asm("r1") = offsetof(unkStruct_203B45C, pokemon[index]); + PokemonStruct1* p = gRecruitedPokemonRef->pokemon; + size_t addr = offset + (size_t)p; + pokeStruct = (PokemonStruct1*)addr; +#endif + + + if (((u8)(pokeStruct->unk0) & 1)) { + temp = pokeStruct->speciesNum; + gUnknown_203B494->unk1C[(temp / 32)] |= (1 << (temp + (temp / 32) * -32)); + + for(index1 = 0; index1 < MAX_MON_MOVES; index1++) + { + move = &gRecruitedPokemonRef->pokemon[index].moves[index1]; + if ((move->moveFlags & 1) != 0) { + gUnknown_203B494->unk8C[move->id / 32] |= 1 << (move->id & 0x1f); + } + } + } + } + + for(index = 0; index < 0x1A8; index++) + { + if (index != 0) + if(index != 0x179) + if(index != 0x17a) + if(index != 0x17b) + if(index != 0x1a1) + if(index != 0x1a2) + if(index != 0x1a3) + if(index != 0x1a4) + if(index != 0x1a5) + if(index != 0x1a6) + if(index != 0x1a7) + { + if ((gUnknown_203B494->unk54[(index / 32)] & (1 << (index + (index / 32) * -32))) == 0) { + bVar3 = 0; + } + if ((gUnknown_203B494->unk1C[(index / 32 )] & (1 << (index + (index / 32) * -32))) != 0) + { + if (index == 0x92) { + sub_80976F8(0x10); + } + if (index == 0x91) { + sub_80976F8(0x11); + } + if (index == 0x90) { + sub_80976F8(0x12); + } + if (index == 0x19e) { + sub_80976F8(0x13); + } + if (index == 0x10d) { + sub_80976F8(0x14); + } + if (index == 0x10c) { + sub_80976F8(0x15); + } + if (index == 0x10e) { + sub_80976F8(0x16); + } + if (index == 0x113) { + sub_80976F8(0x17); + } + if (index == 0x19a) { + sub_80976F8(0x18); + } + if (index == 0x19b) { + sub_80976F8(0x19); + } + if (index == 0x19c) { + sub_80976F8(0x1a); + } + if (index == 0x112) { + sub_80976F8(0x1b); + } + if (index == 0x114) { + sub_80976F8(0x1c); + } + if (index == 0x97) { + sub_80976F8(0x1d); + } + if (index == 0x96) { + sub_80976F8(0x1e); + } + if (index == 0x19d) { + sub_80976F8(0x1f); + } + } + else + { + bVar2 = 0; + } + } + } + + if (bVar2) { + sub_80976F8(0xf); + } + if (bVar3) { + sub_80976F8(0xe); + } + counter = 0; + for(index = 0; index < 0x19d; index++) + { + if ((((index != 0) && (index != 0x163)) && (index != 0x164)) && (index != 0x165)) { + if ((gUnknown_203B494->unk8C[(index / 32 )] & (1 << (index + (index / 32) * -32))) != 0) { + counter = counter + 1; + } + } + } + if (counter != 0) { + gUnknown_203B494->unk18 = counter; + sub_80976F8(7); + } +} diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index 58523c00a..d7e6f04e9 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -11,8 +11,6 @@ void ReadPlayTime(struct unkStruct_8094924 *r0); void WriteGameOptions(struct unkStruct_8094924 *param_1); void WritePlayTime(struct unkStruct_8094924 *r0); -extern void sub_8097944(void); - void sub_8097C18(struct unkStruct_8094924 *r0) { sub_8097944(); From 149018635e34976e66220e45f1092e5ba9a417aa Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 4 Jun 2024 10:20:52 -0700 Subject: [PATCH 11/39] more cleanup --- include/code_8097670.h | 2 + src/code_8097670.c | 127 +++++++++++++++++++++++++++++++---------- src/code_8097DD0.c | 68 ---------------------- src/save.c | 2 - 4 files changed, 99 insertions(+), 100 deletions(-) diff --git a/include/code_8097670.h b/include/code_8097670.h index 8a26bfca8..3e75505c0 100644 --- a/include/code_8097670.h +++ b/include/code_8097670.h @@ -42,5 +42,7 @@ s16 sub_8097870(void); s16 sub_8097880(void); s16 sub_80978B8(void); void sub_8097944(void); +u32 sub_8097D60(u8 *r0, u32 size); +u32 sub_8097D98(u8 *r0, u32 size); #endif // GUARD_CODE_8097670_H diff --git a/src/code_8097670.c b/src/code_8097670.c index 890d476dc..3c12ee8fa 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -1,5 +1,6 @@ #include "global.h" #include "code_8097670.h" +#include "exclusive_pokemon.h" #include "pokemon.h" #include "pokemon_3.h" #include "friend_area.h" @@ -11,6 +12,13 @@ EWRAM_DATA_2 struct unkStruct_203B494 *gUnknown_203B494 = {0}; // data_810AE24.s extern const u8 *gAdventureLogText[]; +extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); +void ReadGameOptions(struct unkStruct_8094924 *param_1); +void ReadPlayTime(struct unkStruct_8094924 *r0); +void WriteGameOptions(struct unkStruct_8094924 *param_1); +void WritePlayTime(struct unkStruct_8094924 *r0); + void sub_8097670(void) { gUnknown_203B494 = &sUnknown_2039778; @@ -221,7 +229,7 @@ void sub_8097944(void) sub_80976F8(0xd); } - for(index = 0; index < 0x19D; index++) + for(index = 0; index < NUM_MONSTERS; index++) { #ifdef NONMATCHING @@ -248,71 +256,71 @@ void sub_8097944(void) } } - for(index = 0; index < 0x1A8; index++) + for(index = 0; index < MONSTER_MAX; index++) { - if (index != 0) - if(index != 0x179) - if(index != 0x17a) - if(index != 0x17b) - if(index != 0x1a1) - if(index != 0x1a2) - if(index != 0x1a3) - if(index != 0x1a4) - if(index != 0x1a5) - if(index != 0x1a6) - if(index != 0x1a7) + if (index != MONSTER_NONE) + if(index != MONSTER_CASTFORM_SNOWY) + if(index != MONSTER_CASTFORM_SUNNY) + if(index != MONSTER_CASTFORM_RAINY) + if(index != MONSTER_DEOXYS_ATTACK) + if(index != MONSTER_DEOXYS_DEFENSE) + if(index != MONSTER_DEOXYS_SPEED) + if(index != MONSTER_MUNCHLAX) + if(index != MONSTER_DECOY) + if(index != MONSTER_STATUE) + if(index != MONSTER_RAYQUAZA_CUTSCENE) { if ((gUnknown_203B494->unk54[(index / 32)] & (1 << (index + (index / 32) * -32))) == 0) { bVar3 = 0; } if ((gUnknown_203B494->unk1C[(index / 32 )] & (1 << (index + (index / 32) * -32))) != 0) { - if (index == 0x92) { + if (index == MONSTER_MOLTRES) { sub_80976F8(0x10); } - if (index == 0x91) { + if (index == MONSTER_ZAPDOS) { sub_80976F8(0x11); } - if (index == 0x90) { + if (index == MONSTER_ARTICUNO) { sub_80976F8(0x12); } - if (index == 0x19e) { + if (index == MONSTER_DEOXYS_NORMAL) { sub_80976F8(0x13); } - if (index == 0x10d) { + if (index == MONSTER_ENTEI) { sub_80976F8(0x14); } - if (index == 0x10c) { + if (index == MONSTER_RAIKOU) { sub_80976F8(0x15); } - if (index == 0x10e) { + if (index == MONSTER_SUICUNE) { sub_80976F8(0x16); } - if (index == 0x113) { + if (index == MONSTER_HO_OH) { sub_80976F8(0x17); } - if (index == 0x19a) { + if (index == MONSTER_KYOGRE) { sub_80976F8(0x18); } - if (index == 0x19b) { + if (index == MONSTER_GROUDON) { sub_80976F8(0x19); } - if (index == 0x19c) { + if (index == MONSTER_RAYQUAZA) { sub_80976F8(0x1a); } - if (index == 0x112) { + if (index == MONSTER_LUGIA) { sub_80976F8(0x1b); } - if (index == 0x114) { + if (index == MONSTER_CELEBI) { sub_80976F8(0x1c); } - if (index == 0x97) { + if (index == MONSTER_MEW) { sub_80976F8(0x1d); } - if (index == 0x96) { + if (index == MONSTER_MEWTWO) { sub_80976F8(0x1e); } - if (index == 0x19d) { + if (index == MONSTER_JIRACHI) { sub_80976F8(0x1f); } } @@ -330,7 +338,7 @@ void sub_8097944(void) sub_80976F8(0xe); } counter = 0; - for(index = 0; index < 0x19d; index++) + for(index = 0; index < NUM_MONSTERS; index++) { if ((((index != 0) && (index != 0x163)) && (index != 0x164)) && (index != 0x165)) { if ((gUnknown_203B494->unk8C[(index / 32 )] & (1 << (index + (index / 32) * -32))) != 0) { @@ -343,3 +351,62 @@ void sub_8097944(void) sub_80976F8(7); } } + +void sub_8097C18(struct unkStruct_8094924 *r0) +{ + sub_8097944(); + SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); +} + +void sub_8097CC0(struct unkStruct_8094924 *r0) +{ + RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); +} + +// Save something... +u32 sub_8097D60(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + WriteGameOptions(&backup); + WritePlayTime(&backup); + sub_8097C18(&backup); + WriteExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} + +// Read something... +u32 sub_8097D98(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + ReadGameOptions(&backup); + ReadPlayTime(&backup); + sub_8097CC0(&backup); + ReadExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index d7e6f04e9..7d1277eb4 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -1,72 +1,4 @@ #include "global.h" -#include "code_8092334.h" -#include "code_8097670.h" -#include "pokemon.h" -#include "exclusive_pokemon.h" - -extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); -extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); -void ReadGameOptions(struct unkStruct_8094924 *param_1); -void ReadPlayTime(struct unkStruct_8094924 *r0); -void WriteGameOptions(struct unkStruct_8094924 *param_1); -void WritePlayTime(struct unkStruct_8094924 *r0); - -void sub_8097C18(struct unkStruct_8094924 *r0) -{ - sub_8097944(); - SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); - SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); - SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); - SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); - SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); - SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); - SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); - SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); -} - -void sub_8097CC0(struct unkStruct_8094924 *r0) -{ - RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); - RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); - RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); - RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); - RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); - RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); - RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); - RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); -} - -u32 sub_8097D60(u8 *r0, u32 size) -{ - struct unkStruct_8094924 backup; - xxx_init_struct_8094924_save_809486C(&backup, r0, size); - WriteGameOptions(&backup); - WritePlayTime(&backup); - sub_8097C18(&backup); - WriteExclusivePokemon(&backup); - nullsub_102(&backup); - return backup.unk8; -} - -u32 sub_8097D98(u8 *r0, u32 size) -{ - struct unkStruct_8094924 backup; - xxx_init_struct_8094924_restore_809485C(&backup, r0, size); - ReadGameOptions(&backup); - ReadPlayTime(&backup); - sub_8097CC0(&backup); - ReadExclusivePokemon(&backup); - nullsub_102(&backup); - return backup.unk8; -} bool8 sub_8097DD0(s32 *param_1, s32 *param_2) { diff --git a/src/save.c b/src/save.c index 3c28b04c7..4dae0f545 100644 --- a/src/save.c +++ b/src/save.c @@ -49,8 +49,6 @@ extern u32 sub_80954CC(void* a, s32 b); extern u32 sub_8095624(u8 *, u32); extern u32 RestoreMailInfo(void* a, s32 b); extern u32 SaveMailInfo(u8 *, u32); -extern u32 sub_8097D60(u8 *, u32); -extern u32 sub_8097D98(void* a, s32 b); extern void sub_800135C(void); extern void sub_80958E4(u32 *a, u32 b); extern void sub_80972F4(void); From ab0c556a9b645d760b95363a6321981fec6a5224 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 12 Jun 2024 10:59:02 -0700 Subject: [PATCH 12/39] match sub_806E100 --- asm/code_806CD90.s | 654 ---------------------------------- include/structs/str_dungeon.h | 7 +- src/type_effectiveness.c | 220 ++++++++++++ 3 files changed, 226 insertions(+), 655 deletions(-) diff --git a/asm/code_806CD90.s b/asm/code_806CD90.s index 8310a806e..391106232 100644 --- a/asm/code_806CD90.s +++ b/asm/code_806CD90.s @@ -2120,658 +2120,4 @@ _0806E0F0: bx r1 thumb_func_end sub_806D528 - thumb_func_start sub_806E100 -sub_806E100: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - adds r6, r0, 0 - mov r8, r1 - str r2, [sp, 0x18] - lsls r3, 24 - lsrs r7, r3, 24 - movs r0, 0 - mov r9, r0 - movs r1, 0 - str r1, [sp, 0x20] - mov r2, r8 - ldr r2, [r2, 0x70] - str r2, [sp, 0x24] - ldr r3, [sp, 0x18] - ldr r3, [r3, 0x70] - mov r10, r3 - adds r0, r6, 0 - movs r1, 0x1 - bl sub_800A020 - mov r0, r9 - ldr r4, [sp, 0x48] - strb r0, [r4, 0xD] - strb r0, [r4, 0xE] - movs r1, 0 - str r1, [sp, 0x1C] - ldr r0, [sp, 0x18] - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0806E14E - movs r0, 0x1 - b _0806E61A -_0806E14E: - cmp r7, 0x1 - beq _0806E156 - cmp r7, 0x7 - bne _0806E15A -_0806E156: - movs r2, 0x1 - str r2, [sp, 0x20] -_0806E15A: - ldr r0, [sp, 0x18] - movs r1, 0x35 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E170 - cmp r7, 0 - beq _0806E170 - movs r3, 0x1 - str r3, [sp, 0x1C] -_0806E170: - movs r0, 0x2 - ldr r4, [sp, 0x48] - str r0, [r4, 0x8] - movs r5, 0 - add r0, sp, 0x10 - mov r9, r0 - b _0806E1F2 -_0806E17E: - mov r1, r10 - adds r1, 0x5C - ldr r2, [sp, 0x20] - cmp r2, 0 - beq _0806E1B4 - adds r0, r1, r5 - ldrb r0, [r0] - cmp r0, 0xE - bne _0806E1B4 - mov r0, r10 - adds r0, 0xF5 - ldrb r0, [r0] - cmp r0, 0 - bne _0806E1B4 - movs r4, 0 - ldr r0, _0806E1AC - ldr r0, [r0] - ldr r3, _0806E1B0 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - b _0806E1CA - .align 2, 0 -_0806E1AC: .4byte gDungeon -_0806E1B0: .4byte 0x00000179 -_0806E1B4: - ldr r2, _0806E4E4 - adds r0, r1, r5 - ldrb r1, [r0] - lsls r1, 1 - lsls r0, r7, 3 - adds r0, r7 - lsls r0, 2 - adds r1, r0 - adds r1, r2 - movs r0, 0 - ldrsh r4, [r1, r0] -_0806E1CA: - cmp r4, 0x2 - beq _0806E1DC - lsls r0, r4, 2 - add r0, sp - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E1DC: - lsls r0, r5, 2 - add r0, r9 - str r4, [r0] - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r1, 0x9E - lsls r1, 1 - adds r0, r1 - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_0806E1F2: - cmp r5, 0x1 - bgt _0806E20E - mov r1, sp - ldr r0, _0806E4EC - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r0] - str r0, [r1] - adds r0, r6, 0 - bl sub_800A2A0 - lsls r0, 24 - cmp r0, 0 - beq _0806E17E -_0806E20E: - ldr r2, _0806E4F0 - mov r1, r9 - ldr r0, [r1, 0x4] - lsls r0, 2 - ldr r1, [sp, 0x10] - lsls r1, 4 - adds r0, r1 - adds r0, r2 - ldr r0, [r0] - ldr r2, [sp, 0x48] - str r0, [r2, 0x8] - movs r3, 0x1 - mov r9, r3 - cmp r0, 0x3 - beq _0806E240 - movs r4, 0 - mov r9, r4 - ldr r0, [sp, 0x1C] - cmp r0, 0 - beq _0806E240 - ldr r0, _0806E4F4 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r6] - str r1, [r6, 0x4] -_0806E240: - cmp r7, 0x2 - beq _0806E248 - cmp r7, 0x6 - bne _0806E26C -_0806E248: - ldr r0, [sp, 0x18] - movs r1, 0x2 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E26C - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r2, _0806E4F8 - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E4FC - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E26C: - cmp r7, 0x2 - bne _0806E2A0 - ldr r0, [sp, 0x18] - bl GetFlashFireStatus - lsls r0, 24 - cmp r0, 0 - beq _0806E2A0 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r3, 0xB7 - lsls r3, 1 - adds r0, r3 - movs r4, 0 - movs r5, 0x1 - strb r5, [r0] - adds r0, r6, 0 - movs r1, 0 - bl sub_800A020 - ldr r0, [sp, 0x48] - str r4, [r0, 0x8] - strb r4, [r0, 0xD] - strb r5, [r0, 0xE] - movs r1, 0 - mov r9, r1 -_0806E2A0: - cmp r7, 0x9 - bne _0806E2D2 - ldr r0, [sp, 0x18] - movs r1, 0x37 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E2D2 - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r2, _0806E500 - adds r0, r2 - movs r4, 0 - movs r5, 0x1 - strb r5, [r0] - adds r0, r6, 0 - movs r1, 0 - bl sub_800A020 - ldr r3, [sp, 0x48] - str r4, [r3, 0x8] - strb r4, [r3, 0xD] - strb r5, [r3, 0xE] - mov r9, r4 -_0806E2D2: - cmp r7, 0x3 - bne _0806E340 - mov r0, r8 - movs r1, 0x10 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E340 - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E2F2 - adds r1, 0x3 -_0806E2F2: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E300 - movs r4, 0x1 -_0806E300: - ldr r0, [sp, 0x24] - movs r1, 0x80 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E32A - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r3, 0xB8 - lsls r3, 1 - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E32A: - cmp r5, 0 - beq _0806E340 - mov r0, r8 - bl sub_80428EC - ldr r0, _0806E508 - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E340: - cmp r7, 0x4 - bne _0806E3AC - mov r0, r8 - movs r1, 0x1A - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E3AC - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E360 - adds r1, 0x3 -_0806E360: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E36E - movs r4, 0x1 -_0806E36E: - ldr r0, [sp, 0x24] - movs r1, 0x2 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E396 - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r3, _0806E50C - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E396: - cmp r5, 0 - beq _0806E3AC - mov r0, r8 - bl sub_80428D8 - ldr r0, _0806E510 - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E3AC: - cmp r7, 0xC - bne _0806E41A - mov r0, r8 - movs r1, 0x43 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E41A - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E3CC - adds r1, 0x3 -_0806E3CC: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E3DA - movs r4, 0x1 -_0806E3DA: - ldr r0, [sp, 0x24] - movs r1, 0x10 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E404 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r3, 0xB9 - lsls r3, 1 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E404: - cmp r5, 0 - beq _0806E41A - mov r0, r8 - bl sub_8042978 - ldr r0, _0806E514 - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E41A: - cmp r7, 0x2 - bne _0806E486 - mov r0, r8 - movs r1, 0x46 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E486 - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E43A - adds r1, 0x3 -_0806E43A: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E448 - movs r4, 0x1 -_0806E448: - ldr r0, [sp, 0x24] - movs r1, 0x20 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E470 - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r3, _0806E518 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E470: - cmp r5, 0 - beq _0806E486 - mov r0, r8 - bl sub_804298C - ldr r0, _0806E51C - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E486: - adds r0, r6, 0 - bl sub_800A2A0 - lsls r0, 24 - cmp r0, 0 - bne _0806E4B8 - mov r0, r8 - adds r1, r7, 0 - bl MonsterIsType - lsls r0, 24 - cmp r0, 0 - beq _0806E4B8 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r4, 0xBA - lsls r4, 1 - adds r0, r4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0806E520 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E4B8: - mov r0, r8 - bl GetApparentWeather - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _0806E53E - cmp r7, 0x2 - bne _0806E524 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r1, 0xB6 - lsls r1, 1 - adds r0, r1 - strb r4, [r0] - ldr r2, _0806E520 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C - b _0806E53E - .align 2, 0 -_0806E4E4: .4byte gTypeEffectivenessChart -_0806E4E8: .4byte gDungeon -_0806E4EC: .4byte gUnknown_8106F54 -_0806E4F0: .4byte gUnknown_80F54B4 -_0806E4F4: .4byte gUnknown_8106EFC -_0806E4F8: .4byte 0x0000016d -_0806E4FC: .4byte gUnknown_8106F1C -_0806E500: .4byte 0x0000016f -_0806E504: .4byte gUnknown_8106F0C -_0806E508: .4byte gUnknown_80FEDA8 -_0806E50C: .4byte 0x00000171 -_0806E510: .4byte gUnknown_80FED88 -_0806E514: .4byte gUnknown_80FEDC8 -_0806E518: .4byte 0x00000173 -_0806E51C: .4byte gUnknown_80FEDE8 -_0806E520: .4byte gUnknown_8106F14 -_0806E524: - cmp r7, 0x3 - bne _0806E53E - ldr r0, _0806E560 - ldr r0, [r0] - movs r2, 0xB6 - lsls r2, 1 - adds r0, r2 - strb r4, [r0] - ldr r2, _0806E564 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E53E: - cmp r4, 0x4 - bne _0806E586 - cmp r7, 0x2 - bne _0806E56C - ldr r0, _0806E560 - ldr r0, [r0] - ldr r3, _0806E568 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E564 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C - b _0806E586 - .align 2, 0 -_0806E560: .4byte gDungeon -_0806E564: .4byte gUnknown_8106F1C -_0806E568: .4byte 0x0000016b -_0806E56C: - cmp r7, 0x3 - bne _0806E586 - ldr r0, _0806E62C - ldr r0, [r0] - ldr r2, _0806E630 - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E634 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E586: - cmp r4, 0x3 - bne _0806E5A6 - cmp r7, 0x1 - beq _0806E5A6 - ldr r2, _0806E638 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C - ldr r0, _0806E62C - ldr r0, [r0] - movs r3, 0xB5 - lsls r3, 1 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] -_0806E5A6: - ldr r0, _0806E62C - ldr r1, [r0] - ldr r2, _0806E63C - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _0806E5B8 - cmp r4, 0x6 - bne _0806E5CE -_0806E5B8: - cmp r7, 0x5 - bne _0806E5CE - ldr r3, _0806E640 - adds r1, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E644 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E5CE: - ldr r0, _0806E62C - ldr r1, [r0] - ldr r4, _0806E648 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _0806E5F4 - cmp r7, 0x2 - bne _0806E5F4 - movs r0, 0xBB - lsls r0, 1 - adds r1, r0 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E644 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E5F4: - cmp r7, 0x5 - bne _0806E618 - ldr r0, [sp, 0x24] - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, 0xB - bne _0806E618 - ldr r0, _0806E62C - ldr r0, [r0] - ldr r2, _0806E64C - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E650 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E618: - mov r0, r9 -_0806E61A: - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0806E62C: .4byte gDungeon -_0806E630: .4byte 0x0000016b -_0806E634: .4byte gUnknown_8106F14 -_0806E638: .4byte gUnknown_8106F64 -_0806E63C: .4byte 0x0000e277 -_0806E640: .4byte 0x00000175 -_0806E644: .4byte gUnknown_8106F1C -_0806E648: .4byte 0x0000e278 -_0806E64C: .4byte 0x00000177 -_0806E650: .4byte gUnknown_8106F0C - thumb_func_end sub_806E100 - .align 2, 0 diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 126ae203f..f55bae5d7 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -87,7 +87,12 @@ typedef struct Dungeon u8 fill14[0xB8 - 0x14]; Entity *unkB8; Entity *unkBC; - u8 fillC0[0x16D - 0xC0]; + u8 fillC0[0x13C - 0xC0]; + u8 unk13C[2]; + u8 fill13E[0x16A - 0x13E]; + u8 unk16A; + u8 unk16B; + u8 unk16C; u8 unk16D; u8 fill16E[0x179 - 0x16E]; /* 0x179 */ bool8 pokemonExposed; // True if a Pokémon on the floor has the Exposed status. diff --git a/src/type_effectiveness.c b/src/type_effectiveness.c index af4a9904c..5b0faea7a 100644 --- a/src/type_effectiveness.c +++ b/src/type_effectiveness.c @@ -13,6 +13,226 @@ u32 gTypeEffectivenessMultipliers[] = {0, 1, 2, 4}; + +struct unkStruct_806D010 +{ + s32 unk0; + u32 unk4; + u32 unk8; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; +}; + +struct dumb_struct +{ + u32 *unk0[4]; +}; +extern struct dumb_struct gUnknown_8106F54; + + +extern u32 gUnknown_8106F0C; +extern u32 gUnknown_8106F1C; +extern u32 gUnknown_8106F14; +extern u32 gUnknown_8106F64; +extern u32 gUnknown_8106EFC[2]; + +extern u8 *gUnknown_80FEDE8[]; +extern u8 *gUnknown_80FEDC8[]; +extern u8 *gUnknown_80FEDA8[]; +extern u8 *gUnknown_80FED88[]; + +extern s32 gUnknown_80F54B4[2][4]; + +void sub_80522F4(Entity *, Entity *, u8 *); +void sub_80428D8(Entity *); +void sub_8042978(Entity *); +void sub_804298C(Entity *); +u8 sub_800A2A0(s32 *); +void sub_800A34C(s32 *, s32 *, s32 *); +void sub_800A020(s32 *, u32); +void sub_80428EC(Entity *); + +bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct unkStruct_806D010 *param_5) +{ + bool8 bVar1; + bool8 bVar2; + bool8 bVar3; + bool8 bVar5; + char cVar3; + char cVar4; + char cVar5; + char cVar6; + bool8 bVar4; + EntityInfo *targetInfo; + s32 effectiveness; + s32 index; + struct dumb_struct local_48; + s32 local_38 [2]; + s32 local_2c; + s32 local_28; + EntityInfo *pokemonInfo; + u8 weather; + s32 temp; + + bVar4 = FALSE; + local_28 = FALSE; + pokemonInfo = pokemon->info; + targetInfo = target->info; + sub_800A020(param_1,1); + param_5->unkD = 0; + param_5->unkE = 0; + local_2c = FALSE; + if (!EntityExists(target)) { + return TRUE; + } + else { + if ((type == TYPE_NORMAL) || (type == TYPE_FIGHTING)) { + local_28 = TRUE; + } + if ((HasAbility(target, ABILITY_WONDER_GUARD)) && (type != TYPE_NONE)) { + local_2c = TRUE; + } + param_5->unk8 = 2; + for (index = 0; index < 2; index++) { + local_48 = gUnknown_8106F54; + if (sub_800A2A0(param_1) != '\0') break; + if (((local_28) && (targetInfo->types[index] == TYPE_GHOST)) && (targetInfo->exposed == FALSE)) { + effectiveness = EFFECTIVENESS_IMMUNE; + gDungeon->pokemonExposed = TRUE; + } + else { + effectiveness = gTypeEffectivenessChart[type][targetInfo->types[index]]; + } + if (effectiveness != EFFECTIVENESS_NEUTRAL) { + sub_800A34C(param_1,param_1,local_48.unk0[effectiveness]); + } + local_38[index] = effectiveness; + gDungeon->unk13C[index] = effectiveness; + } + + param_5->unk8 = gUnknown_80F54B4[local_38[0]][local_38[1]]; + bVar4 = TRUE; + if ((param_5->unk8 != 3) && (bVar4 = FALSE, local_2c != 0)) { + temp = gUnknown_8106EFC[1]; + param_1[0] = gUnknown_8106EFC[0]; + param_1[1] = temp; + } + + if (((type == TYPE_FIRE) || (type == TYPE_ICE)) && (HasAbility(target,ABILITY_THICK_FAT))) { + gDungeon->unk16D = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + if ((type == TYPE_FIRE) && (GetFlashFireStatus(target) != '\0')) { + gDungeon->fill16E[0] = TRUE; + sub_800A020(param_1,0); + param_5->unk8 = 0; + param_5->unkD = 0; + param_5->unkE = 1; + bVar4 = '\0'; + } + if ((type == TYPE_GROUND) && (HasAbility(target, ABILITY_LEVITATE))) { + gDungeon->fill16E[1] = TRUE; + sub_800A020(param_1,0); + param_5->unk8 = 0; + param_5->unkD = 0; + param_5->unkE = 1; + bVar4 = '\0'; + } + if ((type == TYPE_WATER) && (HasAbility(pokemon, ABILITY_TORRENT))) { + bVar1 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar3 = SetVisualFlags(pokemonInfo,0x80,bVar1); + if (bVar1) { + gDungeon->fill16E[2] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar3 != '\0') { + sub_80428EC(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FEDA8); + } + } + if ((type == TYPE_GRASS) && (HasAbility(pokemon, ABILITY_OVERGROW))) { + bVar2 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar4 = SetVisualFlags(pokemonInfo,2,bVar2); + if (bVar2) { + gDungeon->fill16E[3] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar4 != '\0') { + sub_80428D8(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FED88); + } + } + if ((type == TYPE_BUG) && (HasAbility(pokemon, ABILITY_SWARM))) { + bVar3 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar5 = SetVisualFlags(pokemonInfo,0x10,bVar3); + if (bVar3) { + gDungeon->fill16E[4] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar5 != '\0') { + sub_8042978(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FEDC8); + } + } + if ((type == TYPE_FIRE) && (HasAbility(pokemon, ABILITY_BLAZE))) { + bVar5 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar6 = SetVisualFlags(pokemonInfo,0x20,bVar5); + if (bVar5) { + gDungeon->fill16E[5] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar6 != '\0') { + sub_804298C(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FEDE8); + } + } + if ((sub_800A2A0(param_1) == '\0') && (MonsterIsType(pokemon, type))) { + gDungeon->fill16E[6] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F14); + } + weather = GetApparentWeather(pokemon); + if (weather == WEATHER_SUNNY) { + if (type == TYPE_FIRE) { + gDungeon->unk16C = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F14); + } + else if (type == TYPE_WATER) { + gDungeon->unk16C = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + } + if (weather == WEATHER_RAIN) { + if (type == TYPE_FIRE) { + gDungeon->unk16B = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + else if (type == TYPE_WATER) { + gDungeon->unk16B = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F14); + } + } + if ((weather == WEATHER_CLOUDY) && (type != TYPE_NORMAL)) { + sub_800A34C(param_1,param_1,&gUnknown_8106F64); + gDungeon->unk16A = TRUE; + } + if (((gDungeon->mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) { + gDungeon->fill16E[7] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + if ((gDungeon->waterSportTurns != 0) && (type == TYPE_FIRE)) { + gDungeon->fill16E[8] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + if ((type == TYPE_ELECTRIC) && (pokemonInfo->charging.chargingStatus == STATUS_CHARGING)) { + gDungeon->fill16E[9] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + } + return bVar4; +} + s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType) { s32 weight = 1; From 2e31bcdeb4950bfca15a76d07444b6f519a3cb40 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 16 Jun 2024 21:51:12 -0700 Subject: [PATCH 13/39] more documentation and move some data to src --- data/data_80F54B4.s | 5 +- data/data_8106A4C.s | 53 ------------- ld_script.txt | 1 + src/code_806CD90.c | 15 ++-- src/type_effectiveness.c | 157 +++++++++++++++++++++------------------ 5 files changed, 98 insertions(+), 133 deletions(-) diff --git a/data/data_80F54B4.s b/data/data_80F54B4.s index 32c311fb9..2537e133a 100644 --- a/data/data_80F54B4.s +++ b/data/data_80F54B4.s @@ -2,7 +2,10 @@ .global gUnknown_80F54B4 gUnknown_80F54B4: @ 80F54B4 - .incbin "baserom.gba", 0xF54B4, 0x40 + .4byte 0, 0, 0, 1 + .4byte 0, 1, 1, 2 + .4byte 0, 1, 2, 3 + .4byte 1, 2, 3, 3 .global gUnknown_80F54F4 gUnknown_80F54F4: @ 80F54F4 diff --git a/data/data_8106A4C.s b/data/data_8106A4C.s index 6f4fb6082..83d1727ed 100644 --- a/data/data_8106A4C.s +++ b/data/data_8106A4C.s @@ -357,57 +357,4 @@ gUnknown_8106EC8: @ 8106EC8 .byte 0x07, 0x07, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05 .byte 0x06, 0x07, 0x07, 0x07, 0x07, 0x0b, 0x07 - .global gUnknown_8106EEF -gUnknown_8106EEF: @ 8106EEF -.byte 0x03, 0x04, 0x05, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 - .global gUnknown_8106EFC -gUnknown_8106EFC: @ 8106EFC - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_8106F04 -gUnknown_8106F04: @ 8106F04 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x01, 0x00 - - .global gUnknown_8106F0C -gUnknown_8106F0C: @ 8106F0C - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x02, 0x00 - - .global gUnknown_8106F14 -gUnknown_8106F14: @ 8106F14 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x80, 0x01, 0x00 - - .global gUnknown_8106F1C -gUnknown_8106F1C: @ 8106F1C - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x80, 0x00, 0x00 - - .global gUnknown_8106F24 -gUnknown_8106F24: @ 8106F24 -.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x01, 0x00 - .global gUnknown_8106F3C - gUnknown_8106F3C: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00 - .global gUnknown_8106F44 - gUnknown_8106F44: - .byte 0x00, 0x00, 0x00, 0x00, 0x66, 0xe6, 0x00, 0x00 - .global gUnknown_8106F4C - gUnknown_8106F4C: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00 - - .global gUnknown_8106F54 -gUnknown_8106F54: @ 8106F54 - .4byte gUnknown_8106F3C - .4byte gUnknown_8106F44 - .4byte gUnknown_8106F04 - .4byte gUnknown_8106F4C - - .global gUnknown_8106F64 -gUnknown_8106F64: @ 8106F64 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0xC0, 0x00, 0x00 diff --git a/ld_script.txt b/ld_script.txt index bded6c490..97394fda4 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -546,6 +546,7 @@ SECTIONS { data/data_80F59C8.o(.rodata); src/charge_move.o(.rodata); data/data_8106A4C.o(.rodata); + src/code_806CD90.o(.rodata); src/type_effectiveness.o(.data); data/data_8106F7C.o(.rodata); src/dungeon_capabilities.o(.rodata); diff --git a/src/code_806CD90.c b/src/code_806CD90.c index c306a729e..e43d0d5da 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -11,8 +11,7 @@ #include "sprite.h" #include "tile_types.h" -// data_8106A4C.s -extern const u8 gUnknown_8106EEF[]; +const u8 gUnknown_8106EEF[] = {0x03, 0x04, 0x05, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 }; // code_803D110.s extern void sub_803E46C(u32); @@ -208,25 +207,25 @@ void sub_806CF60(void) u32 sub_806CF98(Entity *entity) { struct Tile *mapTile; - u32 uVar3; + u32 shadowSize; u16 terrainType; EntityInfo *entityInfo; mapTile = GetTileAtEntitySafe(entity); terrainType = mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY); entityInfo = entity->info; - uVar3 = GetShadowSize(entityInfo->apparentID); + shadowSize = GetShadowSize(entityInfo->apparentID); if (terrainType == (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) return 6; if (terrainType == TERRAIN_TYPE_NORMAL) { if (IsWaterTileset()) - uVar3 = gUnknown_8106EEF[uVar3]; + shadowSize = gUnknown_8106EEF[shadowSize]; } else if (terrainType == TERRAIN_TYPE_SECONDARY && gDungeonWaterType[gDungeon->tileset] != DUNGEON_WATER_TYPE_LAVA) - uVar3 = gUnknown_8106EEF[uVar3]; + shadowSize = gUnknown_8106EEF[shadowSize]; - entityInfo->unk204 = uVar3; - return uVar3; + entityInfo->unk204 = shadowSize; + return shadowSize; } diff --git a/src/type_effectiveness.c b/src/type_effectiveness.c index 5b0faea7a..117323d2f 100644 --- a/src/type_effectiveness.c +++ b/src/type_effectiveness.c @@ -11,6 +11,33 @@ #include "type_chart.h" #include "weather.h" + +u32 gUnknown_8106EFC[] = { 0x00, 0x00 }; +u8 gUnknown_8106F04[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 }; +u8 gUnknown_8106F0C[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00 }; +u8 gUnknown_8106F14[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00 }; +u8 gUnknown_8106F1C[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00 }; +u8 gUnknown_8106F24[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x01, 0x00 }; +u8 gUnknown_8106F3C[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00}; +u8 gUnknown_8106F44[] = {0x00, 0x00, 0x00, 0x00, 0x66, 0xe6, 0x00, 0x00}; +u8 gUnknown_8106F4C[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00}; + + +struct dumb_struct +{ + u8 *unk0[NUM_EFFECTIVENESS]; +}; + +struct dumb_struct gUnknown_8106F54 = { + gUnknown_8106F3C, // IMMUNE + gUnknown_8106F44, // RESIST + gUnknown_8106F04, // NEUTRAL + gUnknown_8106F4C, // SUPER +}; + +u8 gUnknown_8106F64[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00}; u32 gTypeEffectivenessMultipliers[] = {0, 1, 2, 4}; @@ -18,87 +45,75 @@ struct unkStruct_806D010 { s32 unk0; u32 unk4; - u32 unk8; + u32 effectiveness; u8 unkC; u8 unkD; u8 unkE; u8 unkF; }; -struct dumb_struct -{ - u32 *unk0[4]; -}; -extern struct dumb_struct gUnknown_8106F54; - - -extern u32 gUnknown_8106F0C; -extern u32 gUnknown_8106F1C; -extern u32 gUnknown_8106F14; -extern u32 gUnknown_8106F64; -extern u32 gUnknown_8106EFC[2]; extern u8 *gUnknown_80FEDE8[]; extern u8 *gUnknown_80FEDC8[]; extern u8 *gUnknown_80FEDA8[]; extern u8 *gUnknown_80FED88[]; -extern s32 gUnknown_80F54B4[2][4]; +extern s32 gUnknown_80F54B4[NUM_EFFECTIVENESS][NUM_EFFECTIVENESS]; void sub_80522F4(Entity *, Entity *, u8 *); void sub_80428D8(Entity *); void sub_8042978(Entity *); void sub_804298C(Entity *); -u8 sub_800A2A0(s32 *); -void sub_800A34C(s32 *, s32 *, s32 *); +bool8 sub_800A2A0(s32 *); +void sub_800A34C(s32 *, s32 *, const u8 *); void sub_800A020(s32 *, u32); void sub_80428EC(Entity *); bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct unkStruct_806D010 *param_5) { - bool8 bVar1; - bool8 bVar2; - bool8 bVar3; - bool8 bVar5; - char cVar3; - char cVar4; - char cVar5; - char cVar6; + bool8 torrentFlag; + bool8 overgrowFlag; + bool8 swarmFlag; + bool8 blazeFlag; + bool8 torrentVisualFlag; + bool8 overgrowVisualFlag; + bool8 swarmVisualFlag; + bool8 blazeVisualFlag; bool8 bVar4; EntityInfo *targetInfo; s32 effectiveness; s32 index; struct dumb_struct local_48; s32 local_38 [2]; - s32 local_2c; - s32 local_28; + s32 hasWonderGuard; + s32 normalOrFightingType; EntityInfo *pokemonInfo; u8 weather; s32 temp; bVar4 = FALSE; - local_28 = FALSE; + normalOrFightingType = FALSE; pokemonInfo = pokemon->info; targetInfo = target->info; sub_800A020(param_1,1); param_5->unkD = 0; param_5->unkE = 0; - local_2c = FALSE; + hasWonderGuard = FALSE; if (!EntityExists(target)) { return TRUE; } else { if ((type == TYPE_NORMAL) || (type == TYPE_FIGHTING)) { - local_28 = TRUE; + normalOrFightingType = TRUE; } if ((HasAbility(target, ABILITY_WONDER_GUARD)) && (type != TYPE_NONE)) { - local_2c = TRUE; + hasWonderGuard = TRUE; } - param_5->unk8 = 2; + param_5->effectiveness = EFFECTIVENESS_NEUTRAL; for (index = 0; index < 2; index++) { local_48 = gUnknown_8106F54; - if (sub_800A2A0(param_1) != '\0') break; - if (((local_28) && (targetInfo->types[index] == TYPE_GHOST)) && (targetInfo->exposed == FALSE)) { + if (sub_800A2A0(param_1)) break; + if (((normalOrFightingType) && (targetInfo->types[index] == TYPE_GHOST)) && (targetInfo->exposed == FALSE)) { effectiveness = EFFECTIVENESS_IMMUNE; gDungeon->pokemonExposed = TRUE; } @@ -112,9 +127,9 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct gDungeon->unk13C[index] = effectiveness; } - param_5->unk8 = gUnknown_80F54B4[local_38[0]][local_38[1]]; + param_5->effectiveness = gUnknown_80F54B4[local_38[0]][local_38[1]]; bVar4 = TRUE; - if ((param_5->unk8 != 3) && (bVar4 = FALSE, local_2c != 0)) { + if ((param_5->effectiveness != EFFECTIVENESS_SUPER) && (bVar4 = FALSE, hasWonderGuard)) { temp = gUnknown_8106EFC[1]; param_1[0] = gUnknown_8106EFC[0]; param_1[1] = temp; @@ -122,112 +137,112 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct if (((type == TYPE_FIRE) || (type == TYPE_ICE)) && (HasAbility(target,ABILITY_THICK_FAT))) { gDungeon->unk16D = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + sub_800A34C(param_1,param_1,gUnknown_8106F1C); } - if ((type == TYPE_FIRE) && (GetFlashFireStatus(target) != '\0')) { + if ((type == TYPE_FIRE) && (GetFlashFireStatus(target) != FLASH_FIRE_STATUS_NONE)) { gDungeon->fill16E[0] = TRUE; sub_800A020(param_1,0); - param_5->unk8 = 0; + param_5->effectiveness = EFFECTIVENESS_IMMUNE; param_5->unkD = 0; param_5->unkE = 1; - bVar4 = '\0'; + bVar4 = FALSE; } if ((type == TYPE_GROUND) && (HasAbility(target, ABILITY_LEVITATE))) { gDungeon->fill16E[1] = TRUE; sub_800A020(param_1,0); - param_5->unk8 = 0; + param_5->effectiveness = EFFECTIVENESS_IMMUNE; param_5->unkD = 0; param_5->unkE = 1; - bVar4 = '\0'; + bVar4 = FALSE; } if ((type == TYPE_WATER) && (HasAbility(pokemon, ABILITY_TORRENT))) { - bVar1 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; - cVar3 = SetVisualFlags(pokemonInfo,0x80,bVar1); - if (bVar1) { + torrentFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + torrentVisualFlag = SetVisualFlags(pokemonInfo,0x80,torrentFlag); + if (torrentFlag) { gDungeon->fill16E[2] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + sub_800A34C(param_1,param_1,gUnknown_8106F0C); } - if (cVar3 != '\0') { + if (torrentVisualFlag) { sub_80428EC(pokemon); sub_80522F4(pokemon,target,*gUnknown_80FEDA8); } } if ((type == TYPE_GRASS) && (HasAbility(pokemon, ABILITY_OVERGROW))) { - bVar2 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; - cVar4 = SetVisualFlags(pokemonInfo,2,bVar2); - if (bVar2) { + overgrowFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + overgrowVisualFlag = SetVisualFlags(pokemonInfo,2,overgrowFlag); + if (overgrowFlag) { gDungeon->fill16E[3] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + sub_800A34C(param_1,param_1,gUnknown_8106F0C); } - if (cVar4 != '\0') { + if (overgrowVisualFlag) { sub_80428D8(pokemon); sub_80522F4(pokemon,target,*gUnknown_80FED88); } } if ((type == TYPE_BUG) && (HasAbility(pokemon, ABILITY_SWARM))) { - bVar3 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; - cVar5 = SetVisualFlags(pokemonInfo,0x10,bVar3); - if (bVar3) { + swarmFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + swarmVisualFlag = SetVisualFlags(pokemonInfo,0x10,swarmFlag); + if (swarmFlag) { gDungeon->fill16E[4] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + sub_800A34C(param_1,param_1,gUnknown_8106F0C); } - if (cVar5 != '\0') { + if (swarmVisualFlag) { sub_8042978(pokemon); sub_80522F4(pokemon,target,*gUnknown_80FEDC8); } } if ((type == TYPE_FIRE) && (HasAbility(pokemon, ABILITY_BLAZE))) { - bVar5 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; - cVar6 = SetVisualFlags(pokemonInfo,0x20,bVar5); - if (bVar5) { + blazeFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + blazeVisualFlag = SetVisualFlags(pokemonInfo,0x20,blazeFlag); + if (blazeFlag) { gDungeon->fill16E[5] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + sub_800A34C(param_1,param_1,gUnknown_8106F0C); } - if (cVar6 != '\0') { + if (blazeVisualFlag) { sub_804298C(pokemon); sub_80522F4(pokemon,target,*gUnknown_80FEDE8); } } - if ((sub_800A2A0(param_1) == '\0') && (MonsterIsType(pokemon, type))) { + if (!(sub_800A2A0(param_1)) && (MonsterIsType(pokemon, type))) { gDungeon->fill16E[6] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F14); + sub_800A34C(param_1,param_1,gUnknown_8106F14); } weather = GetApparentWeather(pokemon); if (weather == WEATHER_SUNNY) { if (type == TYPE_FIRE) { gDungeon->unk16C = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F14); + sub_800A34C(param_1,param_1,gUnknown_8106F14); } else if (type == TYPE_WATER) { gDungeon->unk16C = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + sub_800A34C(param_1,param_1,gUnknown_8106F1C); } } if (weather == WEATHER_RAIN) { if (type == TYPE_FIRE) { gDungeon->unk16B = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + sub_800A34C(param_1,param_1,gUnknown_8106F1C); } else if (type == TYPE_WATER) { gDungeon->unk16B = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F14); + sub_800A34C(param_1,param_1,gUnknown_8106F14); } } if ((weather == WEATHER_CLOUDY) && (type != TYPE_NORMAL)) { - sub_800A34C(param_1,param_1,&gUnknown_8106F64); + sub_800A34C(param_1,param_1, gUnknown_8106F64); gDungeon->unk16A = TRUE; } if (((gDungeon->mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) { gDungeon->fill16E[7] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + sub_800A34C(param_1,param_1,gUnknown_8106F1C); } if ((gDungeon->waterSportTurns != 0) && (type == TYPE_FIRE)) { gDungeon->fill16E[8] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + sub_800A34C(param_1,param_1,gUnknown_8106F1C); } if ((type == TYPE_ELECTRIC) && (pokemonInfo->charging.chargingStatus == STATUS_CHARGING)) { gDungeon->fill16E[9] = TRUE; - sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + sub_800A34C(param_1,param_1,gUnknown_8106F0C); } } return bVar4; From 09dc26aca0f60797a24e50265b30f00b48db6a15 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 18 Jun 2024 09:57:32 -0700 Subject: [PATCH 14/39] decomp more math funcs --- asm/math.s | 279 ----------------------------------------------------- src/math.c | 166 ++++++++++++++++++++++++++++++- 2 files changed, 164 insertions(+), 281 deletions(-) diff --git a/asm/math.s b/asm/math.s index dd0479918..03bf69661 100644 --- a/asm/math.s +++ b/asm/math.s @@ -5,285 +5,6 @@ .text - thumb_func_start u24_8_div -u24_8_div: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - cmp r1, 0 - bne _08009EB8 - ldr r0, _08009EB4 - b _08009F58 - .align 2, 0 -_08009EB4: .4byte 0x7fffffff -_08009EB8: - cmp r0, 0 - bne _08009EC0 - movs r0, 0 - b _08009F58 -_08009EC0: - lsrs r7, r0, 24 - lsls r6, r0, 8 - mov r10, r1 - movs r0, 0 - mov r9, r0 - movs r5, 0 - movs r4, 0 - movs r1, 0x1 - mov r8, r1 - movs r2, 0x3F - str r2, [sp] -_08009ED6: - lsls r5, 1 - adds r0, r4, 0 - movs r1, 0x80 - lsls r1, 24 - ands r0, r1 - cmp r0, 0 - beq _08009EE8 - mov r2, r8 - orrs r5, r2 -_08009EE8: - movs r1, 0x2 - negs r1, r1 - lsls r4, 1 - adds r0, r7, 0 - movs r2, 0x80 - lsls r2, 24 - ands r0, r2 - cmp r0, 0 - beq _08009EFE - mov r0, r8 - orrs r4, r0 -_08009EFE: - lsls r7, 1 - adds r0, r6, 0 - movs r2, 0x80 - lsls r2, 24 - ands r0, r2 - cmp r0, 0 - beq _08009F10 - mov r0, r8 - orrs r7, r0 -_08009F10: - lsls r6, 1 - ands r6, r1 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - mov r3, r10 - bl u32_pair_less_than - lsls r0, 24 - cmp r0, 0 - bne _08009F3A - adds r0, r4, 0 - movs r1, 0x1 - mov r2, r10 - subs r4, r2 - movs r2, 0 - subs r5, r2 - cmp r0, r4 - bcs _08009F3C - subs r5, 0x1 - b _08009F3C -_08009F3A: - movs r1, 0 -_08009F3C: - mov r0, r9 - lsls r0, 1 - mov r9, r0 - cmp r1, 0 - beq _08009F4C - mov r1, r8 - orrs r0, r1 - mov r9, r0 -_08009F4C: - ldr r2, [sp] - subs r2, 0x1 - str r2, [sp] - cmp r2, 0 - bge _08009ED6 - mov r0, r9 -_08009F58: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end u24_8_div - - thumb_func_start sub_8009F68 -sub_8009F68: - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - adds r4, r6, 0 - cmp r6, 0 - bge _08009F76 - negs r4, r6 -_08009F76: - movs r7, 0x80 - lsls r7, 1 - cmp r4, 0 - beq _08009FA0 -_08009F7E: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _08009F90 - adds r0, r7, 0 - adds r1, r5, 0 - bl s24_8_mul - adds r7, r0, 0 -_08009F90: - adds r0, r5, 0 - adds r1, r5, 0 - bl s24_8_mul - adds r5, r0, 0 - asrs r4, 1 - cmp r4, 0 - bne _08009F7E -_08009FA0: - cmp r6, 0 - bge _08009FB0 - movs r0, 0x80 - lsls r0, 1 - adds r1, r7, 0 - bl s24_8_div - b _08009FB2 -_08009FB0: - adds r0, r7, 0 -_08009FB2: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8009F68 - - thumb_func_start sub_8009FB8 -sub_8009FB8: - push {r4-r7,lr} - adds r5, r0, 0 - adds r6, r1, 0 - cmp r5, 0 - bge _08009FC4 - negs r5, r5 -_08009FC4: - cmp r6, 0 - bge _08009FCA - negs r6, r6 -_08009FCA: - cmp r5, r6 - bge _08009FD4 - adds r4, r5, 0 - adds r5, r6, 0 - adds r6, r4, 0 -_08009FD4: - cmp r6, 0 - beq _0800A016 - movs r7, 0x2 -_08009FDA: - adds r0, r6, 0 - adds r1, r5, 0 - bl s24_8_div - adds r4, r0, 0 - adds r1, r4, 0 - bl s24_8_mul - adds r4, r0, 0 - movs r0, 0x80 - lsls r0, 3 - adds r1, r4, r0 - adds r0, r4, 0 - bl s24_8_div - adds r4, r0, 0 - adds r0, r5, 0 - adds r1, r4, 0 - bl s24_8_mul - lsls r0, 1 - adds r5, r0 - adds r0, r6, 0 - adds r1, r4, 0 - bl s24_8_mul - adds r6, r0, 0 - subs r7, 0x1 - cmp r7, 0 - bge _08009FDA -_0800A016: - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8009FB8 - - thumb_func_start sub_800A020 -sub_800A020: - push {r4,lr} - adds r3, r0, 0 - ldr r4, _0800A044 - lsrs r2, r1, 16 - str r2, [r3] - lsls r0, r1, 16 - str r0, [r3, 0x4] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _0800A03C - orrs r2, r4 - str r2, [r3] -_0800A03C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800A044: .4byte 0xffff0000 - thumb_func_end sub_800A020 - - thumb_func_start sub_800A048 -sub_800A048: - push {lr} - ldrh r1, [r0] - lsls r2, r1, 16 - ldr r0, [r0, 0x4] - lsrs r1, r0, 16 - orrs r2, r1 - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _0800A060 - adds r2, 0x1 -_0800A060: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_800A048 - - thumb_func_start sub_800A068 -sub_800A068: - push {lr} - ldrb r1, [r0] - lsls r2, r1, 24 - ldr r0, [r0, 0x4] - lsrs r1, r0, 8 - orrs r2, r1 - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _0800A080 - adds r2, 0x1 -_0800A080: - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_800A068 - thumb_func_start sub_800A088 sub_800A088: push {lr} diff --git a/src/math.c b/src/math.c index de958007a..e7b4816b7 100644 --- a/src/math.c +++ b/src/math.c @@ -2,10 +2,10 @@ #include "globaldata.h" #include "math.h" -extern u24_8 u24_8_div(u24_8 x, u24_8 y); // decomp in progress: https://decomp.me/scratch/pMyGD - #include "data/math.h" +u24_8 u24_8_div(u24_8 x, u24_8 y); + u32 fast_mod_3(s32 x) { if (x < 0x100) { return gFastMod3Lookup[x]; @@ -159,3 +159,165 @@ u24_8 u24_8_mul(u24_8 x, u24_8 y) { return out_l; } + +u24_8 u24_8_div(u24_8 x, u24_8 y) +{ + bool8 bVar1; + u32 r9; + u32 r2; + u32 r4; + u32 r5; + u32 r6; + u32 r7; + u32 r8; + int counter; + s32 sl; + s32 flag; + s32 save; + + if (y == 0) { + return 0x7fffffff; + } + else if (x == 0) { + return 0; + } + else { + r7 = x >> 0x18; + r6 = x << 8; + sl = y; + r9 = 0; + r5 = 0; + r4 = 0; + r2 = 0; + r8 = 1; + + + for(counter = 0x3f; counter >= 0; counter--) + { + r5 <<= 1; + if ((r4 & 0x80000000) != 0) { + r5 |= r8; + } + flag = -2; + r4 <<= 1; + if ((r7 & 0x80000000) != 0) { + r4 |= r8; + } + r7 <<= 1; + if ((r6 & 0x80000000) != 0) { + r7 |= r8; + } + r6 <<= 1; + r6 &= flag; + if (u32_pair_less_than(r5,r4,0,sl) == 0) { + save = r4; + bVar1 = 1; + r4 = r4 - sl; + r5 = r5 - r2; // WHY???? + if (save < r4) { + r5--; + } + } + else { + bVar1 = 0; + } + r9 <<= 1; + if (bVar1) { + r9 |= r8; + } + } + } + return r9; +} + +s32 sub_8009F68(s32 x, s32 y) +{ + s32 uVar1; + s32 sVar1; + + uVar1 = y; + if (y < 0) { + uVar1 = -y; + } + sVar1 = 0x100; + for (; uVar1 != 0; uVar1 >>= 1) { + if ((uVar1 & 1) != 0) { + sVar1 = s24_8_mul(sVar1, x); + } + x = s24_8_mul(x, x); + } + if (y >= 0) { + return sVar1; + } + else + return s24_8_div(0x100,sVar1); +} + +s32 sub_8009FB8(s32 x, s32 y) +{ + s32 r4; + s32 counter; + + s32 r5; + s32 r6; + + r5 = x; + r6 = y; + + if (r5 < 0) { + r5 = -r5; + } + if (r6 < 0) { + r6 = -r6; + } + if (r5 < r6) { + r4 = r5; + r5 = r6; + r6 = r4; + } + if (r6 != 0) { + for(counter = 2; counter >= 0; counter--) + { + r4 = s24_8_div(r6,r5); + r4 = s24_8_mul(r4,r4); + r4 = s24_8_div(r4,r4 + 0x400); + r5 = r5 + s24_8_mul(r5,r4) * 2; + r6 = s24_8_mul(r6,r4); + } + } + return r5; +} + +void sub_800A020(s32 *param_1, u32 param_2) +{ + register u32 temp asm("r4"); + + temp = 0xffff0000; + param_1[0] = param_2 >> 0x10; + param_1[1] = param_2 << 0x10; + if ((param_2 & 0x8000) != 0) { + param_1[0] |= temp; + } +} + +u32 sub_800A048(u32 *param_1) +{ + u32 uVar1; + + uVar1 = ((u16)param_1[0] << 0x10) | (param_1[1] >> 0x10); + if ((param_1[1] & 0x8000) != 0) { + uVar1++; + } + return uVar1; +} + +UNUSED u32 sub_800A068(u32 *param_1) +{ + u32 uVar1; + + uVar1 = ((u8)param_1[0] << 0x18) | param_1[1] >> 8; + if ((param_1[1] & 0x8000) != 0) { + uVar1++; + } + return uVar1; +} From 1a646d1e9fa81f387fd962c2102de6c232ab05c5 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 20 Jun 2024 21:44:08 -0700 Subject: [PATCH 15/39] name a func and add func to header --- asm/code_2.s | 4 ++-- asm/text.s | 2 +- include/code_8009804.h | 4 ++-- include/math.h | 11 +++++++++++ src/code_2.c | 2 +- src/code_8009804.c | 4 ++-- src/math.c | 2 -- 7 files changed, 19 insertions(+), 10 deletions(-) diff --git a/asm/code_2.s b/asm/code_2.s index 4470cdd9e..2b628c036 100644 --- a/asm/code_2.s +++ b/asm/code_2.s @@ -135,7 +135,7 @@ QuickSave: movs r0, 0 bl xxx_update_some_bg_tiles bl sub_8014144 - bl sub_80097B0 + bl InitFontPalette movs r0, 0x2 bl sub_800CDA8 movs r0, 0 @@ -316,7 +316,7 @@ sub_80008C0: movs r0, 0 bl xxx_update_some_bg_tiles bl sub_8014144 - bl sub_80097B0 + bl InitFontPalette movs r0, 0x2 bl sub_800CDA8 movs r0, 0 diff --git a/asm/text.s b/asm/text.s index d0d5503b1..d085e184c 100644 --- a/asm/text.s +++ b/asm/text.s @@ -3555,7 +3555,7 @@ _08009714: bl CpuCopy adds r0, r6, 0 bl CloseFile - bl sub_80097B0 + bl InitFontPalette ldr r0, _080097AC adds r1, r4, 0 bl OpenFileAndGetFileDataPtr diff --git a/include/code_8009804.h b/include/code_8009804.h index c149b64fb..11de16a16 100644 --- a/include/code_8009804.h +++ b/include/code_8009804.h @@ -17,7 +17,7 @@ struct unkStruct_202D038 void vram_related_8009804(void); -void sub_80097B0(void); +void InitFontPalette(void); void sub_80098A0(void); void sub_80098BC(u32 *, u32 *, u32); void sub_80098F8(u32); @@ -25,4 +25,4 @@ void sub_8009908(void); void sub_80099C0(void); void sub_80099F0(u32); -#endif // GUARD_CODE_8009804_H \ No newline at end of file +#endif // GUARD_CODE_8009804_H diff --git a/include/math.h b/include/math.h index 81cabfc81..2c28b1222 100644 --- a/include/math.h +++ b/include/math.h @@ -99,4 +99,15 @@ s32 s24_8_div(s32 r0, s32 r1); */ u24_8 u24_8_mul(u24_8 x, u24_8 y); +/** + * This function divides two unsigned 24.8 fixed-point numbers. + * + * @param[in] x The first factor. + * @param[in] y The second factor. + * + * @return The quotient `x/y` as an unsigned 24.8 fixed-point number. + */ +u24_8 u24_8_div(u24_8 x, u24_8 y); + + #endif // GUARD_MATH_H diff --git a/src/code_2.c b/src/code_2.c index 4ac3996c4..403413e0e 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -99,7 +99,7 @@ void GameLoop(void) sub_800A8F8(2); ResetSprites(TRUE); xxx_update_some_bg_tiles(0); - sub_80097B0(); + InitFontPalette(); sub_800CDA8(2); sub_800641C(NULL, TRUE, TRUE); gUnknown_2026E4E = 0x1000; diff --git a/src/code_8009804.c b/src/code_8009804.c index a65e08a36..b41d19e61 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -16,7 +16,7 @@ extern struct unkStruct_202D240 gUnknown_202D240[8]; // code_8009804.s extern void sub_8009A1C(u32); -void sub_80097B0(void) +void InitFontPalette(void) { OpenedFile *fontpalFile; s32 i; @@ -137,4 +137,4 @@ void sub_80099F0(u32 a0) UNUSED static void sub_8009A10(u32 *a0) { sub_8009A1C(a0[1]); -} \ No newline at end of file +} diff --git a/src/math.c b/src/math.c index e7b4816b7..7efcb42ab 100644 --- a/src/math.c +++ b/src/math.c @@ -4,8 +4,6 @@ #include "data/math.h" -u24_8 u24_8_div(u24_8 x, u24_8 y); - u32 fast_mod_3(s32 x) { if (x < 0x100) { return gFastMod3Lookup[x]; From 4c35bc306727d774869b5e7df76ecf3dcc3a1b2c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 07:33:35 -0700 Subject: [PATCH 16/39] Add more ewram and iwram --- include/dungeon_movement.h | 2 ++ src/dungeon_map_access.c | 1 + 2 files changed, 3 insertions(+) diff --git a/include/dungeon_movement.h b/include/dungeon_movement.h index be363c333..ffd4593bb 100644 --- a/include/dungeon_movement.h +++ b/include/dungeon_movement.h @@ -6,6 +6,8 @@ extern u8 gWalkableTileToCrossableTerrain[8]; +extern u8 gWalkableTileToCrossableTerrain[8]; + u8 GetCrossableTerrain(s16 species); u8 sub_807034C(s16 id, struct Tile *tile); u8 sub_80703A0(Entity *pokemon, Position *pos); diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index 1a1911f75..018c93845 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -20,6 +20,7 @@ extern u8 gUnknown_80F6A40[]; extern u8 gUnknown_8108EC0[]; extern const struct FileArchive gDungeonFileArchive; +// ewram EWRAM_DATA OpenedFile *gDungeonPaletteFile = {0}; EWRAM_DATA unkStruct_202EE8C gUnknown_202EE8C[32] = {0}; EWRAM_DATA OpenedFile *gUnknown_202F18C = {0}; From 17cc897b5fae6b17cad2f95dc9050c000a8e0075 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 08:37:58 -0700 Subject: [PATCH 17/39] more cleanup and move more ram stuff --- src/dungeon_map_access.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/dungeon_map_access.c b/src/dungeon_map_access.c index 018c93845..1a1911f75 100644 --- a/src/dungeon_map_access.c +++ b/src/dungeon_map_access.c @@ -20,7 +20,6 @@ extern u8 gUnknown_80F6A40[]; extern u8 gUnknown_8108EC0[]; extern const struct FileArchive gDungeonFileArchive; -// ewram EWRAM_DATA OpenedFile *gDungeonPaletteFile = {0}; EWRAM_DATA unkStruct_202EE8C gUnknown_202EE8C[32] = {0}; EWRAM_DATA OpenedFile *gUnknown_202F18C = {0}; From ee650b595dcdb05970634d61cfa59ddce8bbe8a1 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 May 2024 08:51:26 -0700 Subject: [PATCH 18/39] wonder_mail_3_mid is finally split correctly --- src/code_8072F3C.c | 1 - src/mission_reward.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/code_8072F3C.c b/src/code_8072F3C.c index 633c8a057..459d9b3ee 100644 --- a/src/code_8072F3C.c +++ b/src/code_8072F3C.c @@ -28,7 +28,6 @@ struct unkStruct_203B314 EWRAM_DATA_2 struct unkStruct_203B314 *gUnknown_203B314 = {0}; - const UnkTextStruct2 gUnknown_80E06FC = { 0x00, 0x00, 0x00, 0x00, 0x03, diff --git a/src/mission_reward.c b/src/mission_reward.c index c0f59bc58..0694d0e59 100644 --- a/src/mission_reward.c +++ b/src/mission_reward.c @@ -32,6 +32,7 @@ struct unkStruct_203B310 u8 unk22; UnkTextStruct2 unk24[4]; }; + EWRAM_DATA_2 struct unkStruct_203B310 *gUnknown_203B310 = {0}; extern u8 gUnknown_202E038[]; From d0c61ddf41529e7a36b448058a74412c43d22c68 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 2 Jun 2024 16:01:27 -0700 Subject: [PATCH 19/39] nonmatch func and combine files --- src/code_80958E8.c | 7 +- src/code_80958E8_1.c | 732 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 737 insertions(+), 2 deletions(-) create mode 100644 src/code_80958E8_1.c diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 40caa0bbd..57ff1ff68 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -29,7 +29,6 @@ bool8 GenerateMailJobDungeonInfo(WonderMail *mail); bool8 GenerateMailJobInfo(WonderMail *); bool8 sub_8096E80(u8); u8 sub_8095E78(void); -void ShiftMailboxSlotsDown(void); bool8 sub_80963B4(void); void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b); void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b); @@ -37,6 +36,11 @@ s32 CalculateMailChecksum(WonderMail *mail); extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); +extern void sub_803C4F0(WonderMail *); +extern void sub_803C3E0(WonderMail *); +extern void sub_803C45C(WonderMail *); +extern void sub_803C610(WonderMail *); +extern void sub_803C580(WonderMail *); extern u8 gUnknown_8109984[]; @@ -1691,4 +1695,3 @@ void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b) SaveIntegerBits(a, &b->unk4.seed, 0x18); SaveDungeonLocation(a, &b->unk4.dungeon); } - diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c new file mode 100644 index 000000000..40ed63a52 --- /dev/null +++ b/src/code_80958E8_1.c @@ -0,0 +1,732 @@ +#include "constants/mailbox.h" +#include "global.h" +#include "constants/friend_area.h" +#include "constants/dungeon.h" +#include "constants/monster.h" +#include "constants/wonder_mail.h" +#include "items.h" +#include "code_80958E8.h" +#include "random.h" +#include "pokemon.h" +#include "event_flag.h" +#include "rescue_team_info.h" + +extern u8 sub_8095E38(WonderMail *, u8, u8, bool8); +extern void sub_80965F4(); +u8 sub_8097318(s16 param_1); +extern bool8 GenerateMailJobInfo(WonderMail *); + +bool8 sub_803C1D0(DungeonLocation *, u8); +u8 sub_8095F28(u8); +void sub_803C37C(DungeonLocation *, u8, u8 *); +bool8 sub_8096E80(u8); +u8 sub_8095E78(void); + +void sub_8096078(void); +bool8 sub_80963B4(void); + +static void SortMailboxSlots(void) +{ + s32 r1; + s32 r6; + WonderMail job; + + for(r1 = 0; r1 < NUM_MAILBOX_SLOTS - 1; r1++) + { + for(r6 = r1 + 1; r6 < NUM_MAILBOX_SLOTS; r6++) + { + if(gUnknown_203B490->mailboxSlots[r6].mailType != 0) + { + if((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) || + ((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id == gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) && + (gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.floor > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.floor))) + { + job = gUnknown_203B490->mailboxSlots[r1]; + gUnknown_203B490->mailboxSlots[r1] = gUnknown_203B490->mailboxSlots[r6]; + gUnknown_203B490->mailboxSlots[r6] = job; + } + } + } + } +} + +void sub_80961B4(void) +{ + if (sub_8096E2C() != 0) { + gUnknown_203B490->unk328 = TRUE; + } +} + +bool8 sub_80961D8(void) +{ + s32 num; + s32 index; + u32 floor; + s32 friendAreaReward; + WonderMail *slot; + bool8 flag = FALSE; + + num = CountFilledMailboxSlots(); + index = RandRange(num, NUM_MAILBOX_SLOTS); + if(num >= NUM_MAILBOX_SLOTS) return 0; + if(!gUnknown_203B490->unk328) + return 0; + else + { + gUnknown_203B490->unk328 = flag; + } + floor = 0x38; + if(sub_8001D08(0xA, 0x31, 0x1)) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x35]) + if(!sub_8096E80(0x35)) floor = 0x35; + } + if(sub_80023E4(0xF)) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x34]) + if(!sub_8096E80(0x34)) floor = 0x34; + if(!gUnknown_203B490->PKMNNewsReceived[0x33]) + if(!sub_8096E80(0x33)) floor = 0x33; + if(!gUnknown_203B490->PKMNNewsReceived[0x32]) + if(!sub_8096E80(0x32)) floor = 0x32; + + } + if(GetRescueTeamRank() == LUCARIO_RANK) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x36]) + if(!sub_8096E80(0x36)) floor = 0x36; + } + if(sub_80023E4(6)) + { + if(!gUnknown_203B490->PKMNNewsReceived[0x37]) + if(!sub_8096E80(0x37)) floor = 0x37; + } + + if(floor != 0x38) goto _slot; + if(num > index) goto _08096392; + floor = sub_8096E2C(); + if(!sub_80023E4(0xE) && (floor > 2)) goto _0809638E; + if (floor > 0x31) goto _0809638E; +_slot: + slot = GetMailboxSlotInfo(num); + slot->mailType = 1; + slot->unk4.dungeon.id = NUM_DUNGEONS; + slot->unk4.dungeon.floor = floor; + goto _flag; +_0809638E: + for(; num <= index; num++) + { + slot = GetMailboxSlotInfo(num); + if(GenerateMailJobInfo(slot)) + { + friendAreaReward = sub_8095E78(); + if(!sub_803C1D0(&slot->unk4.dungeon, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE; + slot->rewardType = RandRange(MONEY1, END_REWARDS); + if(slot->rewardType == FRIEND_AREA) + { + if(friendAreaReward == FRIEND_AREA_NONE) + { + slot->rewardType = MONEY1; + flag = TRUE; + } + else + { + slot->friendAreaReward = friendAreaReward; + flag = TRUE; + } + } + else + { +_flag: + flag = TRUE; + } + } else break; + } +_08096392: + if(sub_80963B4()) + flag = TRUE; + sub_8096078(); + SortMailboxSlots(); + return flag; +} + +bool8 sub_80963B4(void) +{ + u8 floor; + s32 num; + WonderMail *slot; + bool8 flag = FALSE; + + floor = sub_8096E2C(); + num = CountFilledMailboxSlots(); + if(num >= NUM_MAILBOX_SLOTS) return FALSE; + if(sub_80023E4(0xE)) + { + if(floor < 0x32) + { + slot = GetMailboxSlotInfo(num); + slot->mailType = 1; + slot->unk4.dungeon.id = NUM_DUNGEONS; + slot->unk4.dungeon.floor = floor; + flag = TRUE; + } + } + return flag; +} + +void sub_80963FC(void) +{ + s32 index; + WonderMail *slot; + + for(index = 0; index < NUM_MAILBOX_SLOTS; index++) + { + slot = GetMailboxSlotInfo(index); + if(slot->mailType != 1) + { + ResetMailboxSlot(index); + } + } + sub_8096078(); + slot = GetMailboxSlotInfo(CountFilledMailboxSlots()); + slot->mailType = 5; + slot->missionType = 0; + slot->unk2 = 0; + slot->unk4.dungeon.id = DUNGEON_MT_STEEL; + slot->unk4.dungeon.floor = 3; + slot->unk4.seed = 0x00ffffff & Rand32Bit(); + slot->clientSpecies = MONSTER_PIDGEY; + slot->targetSpecies = MONSTER_PIDGEY; + slot->targetItem = sub_8095F28(slot->unk4.dungeon.id); + slot->rewardType = MONEY1; + do + { + sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward); + } while (slot->targetItem == slot->itemReward); + slot->friendAreaReward = FRIEND_AREA_NONE; + sub_8096078(); + SortMailboxSlots(); +} + +void sub_8096488(void) +{ + WonderMail *mail; + s32 index; + + for(index = 0; index < NUM_MAILBOX_SLOTS; index++){ + ResetMailboxSlot(index); + } + mail = GetMailboxSlotInfo(0); + mail->mailType = 1; + mail->unk4.dungeon.id = NUM_DUNGEONS; + mail->unk4.dungeon.floor = 0; +} + +bool8 sub_80964B4(void) +{ + if ((!gUnknown_203B490->PKMNNewsReceived[0x35]) && (sub_8096E80(0x35) == 0)) { + return FALSE; + } + else { + return TRUE; + } +} + +bool8 sub_80964E4(void) +{ + if ((!gUnknown_203B490->PKMNNewsReceived[0x36]) && (sub_8096E80(0x36) == 0)) { + return FALSE; + } + else { + return TRUE; + } +} + +s32 CountFilledPelipperBoardSlots(void) +{ + s32 index; + s32 slots; + + slots = 0; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { + if (!IsPelipperBoardSlotEmpty(index)) { + slots++; + } + } + return slots; +} + +UNUSED bool8 sub_8096538(WonderMail *mail) +{ + s32 index; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if(gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) + { + gUnknown_203B490->pelipperBoardJobs[index] = *mail; + return FALSE; + } + } + return TRUE; +} + +WonderMail *GetPelipperBoardSlotInfo(u8 index) +{ + return &gUnknown_203B490->pelipperBoardJobs[index]; +} + + +bool8 IsPelipperBoardSlotEmpty(u8 index) +{ + if (gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) + return TRUE; + else + return FALSE; +} + +void ResetPelipperBoardSlot(u8 index) +{ + gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; + gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.id = 99; + gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.floor = 0; + gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; +} + +NAKED +void sub_80965F4(void) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tldr r0, _0809660C\n" + "\tmov r12, r0\n" + "\tmov r8, r3\n" + "\tmovs r4, 0\n" + "\tmov r9, r4\n" + "\tb _08096636\n" + "\t.align 2, 0\n" +"_0809660C: .4byte gUnknown_203B490\n" +"_08096610:\n" + "\tcmp r2, r3\n" + "\tble _0809662A\n" + "\tmov r1, r12\n" + "\tldr r0, [r1]\n" + "\tmov r5, r8\n" + "\tadds r1, r0, r5\n" + "\tadds r0, r4\n" + "\tadds r1, 0x50\n" + "\tadds r0, 0x50\n" + "\tldm r0!, {r5-r7}\n" + "\tstm r1!, {r5-r7}\n" + "\tldm r0!, {r6,r7}\n" + "\tstm r1!, {r6,r7}\n" +"_0809662A:\n" + "\tadds r4, 0x14\n" + "\tmovs r0, 0x14\n" + "\tadd r9, r0\n" + "\tadds r2, 0x1\n" + "\tadd r8, r0\n" + "\tadds r3, 0x1\n" +"_08096636:\n" + "\tcmp r2, 0x7\n" + "\tbgt _08096666\n" + "\tmov r1, r12\n" + "\tldr r0, [r1]\n" + "\tadds r0, r4\n" + "\tadds r0, 0x50\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _08096666\n" + "\tldr r6, _08096694\n" + "\tmov r1, r9\n" +"_0809664C:\n" + "\tadds r1, 0x14\n" + "\tadds r4, 0x14\n" + "\tmovs r5, 0x14\n" + "\tadd r9, r5\n" + "\tadds r2, 0x1\n" + "\tcmp r2, 0x7\n" + "\tbgt _08096666\n" + "\tldr r0, [r6]\n" + "\tadds r0, r1\n" + "\tadds r0, 0x50\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _0809664C\n" +"_08096666:\n" + "\tcmp r2, 0x8\n" + "\tbne _08096610\n" + "\tcmp r3, 0x7\n" + "\tbgt _08096688\n" + "\tldr r4, _08096694\n" + "\tmovs r2, 0\n" + "\tlsls r0, r3, 2\n" + "\tadds r0, r3\n" + "\tlsls r1, r0, 2\n" +"_08096678:\n" + "\tldr r0, [r4]\n" + "\tadds r0, r1\n" + "\tadds r0, 0x50\n" + "\tstrb r2, [r0]\n" + "\tadds r1, 0x14\n" + "\tadds r3, 0x1\n" + "\tcmp r3, 0x7\n" + "\tble _08096678\n" +"_08096688:\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08096694: .4byte gUnknown_203B490"); +} + +void SortPelipperJobs(void) +{ + s32 index1; + s32 index2; + + WonderMail mail; + + for(index1 = 0; index1 < MAX_ACCEPTED_JOBS - 1; index1++) + { + for(index2 = index1 + 1; index2 < MAX_ACCEPTED_JOBS; index2++) + { + if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) + { + 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]; + gUnknown_203B490->pelipperBoardJobs[index2] = mail; + } + } + } + } +} + +void GeneratePelipperJobs(void) +{ + s32 range; + WonderMail *mail; + s32 index; + + range = RandRange(4,8); + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; + } + + index = 0; + if (sub_8097318(0xe) != 0) { + mail = GetPelipperBoardSlotInfo(0); + mail->mailType = MAIL_TYPE_UNK2; + mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; + mail->unk2 = 1; + 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; + mail->rewardType = ITEM; + mail->itemReward = ITEM_REVIVER_SEED; + mail->friendAreaReward = 0; + index = 1; + } + + + if (sub_8097318(0xf) != 0) { + mail = GetPelipperBoardSlotInfo(index); + mail->mailType = MAIL_TYPE_UNK3; + mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; + mail->unk2 = 2; + 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; + mail->rewardType = ITEM; + mail->itemReward = ITEM_REVIVER_SEED; + mail->friendAreaReward = 0; + index++; + } + + if (sub_8097318(0x1c) != 0) { + mail = GetPelipperBoardSlotInfo(index); + mail->mailType = MAIL_TYPE_UNK4; + mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; + mail->unk2 = 3; + 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; + mail->rewardType = ITEM; + mail->itemReward = ITEM_REVIVER_SEED; + mail->friendAreaReward = 0; + index++; + } + for (; index <= range; index++) { + if (!GenerateMailJobInfo(&gUnknown_203B490->pelipperBoardJobs[index])) break; + gUnknown_203B490->pelipperBoardJobs[index].rewardType = RandRange(MONEY, BLANK_4); + } + sub_80965F4(); + SortPelipperJobs(); +} + +bool8 IsMailinJobSlot(WonderMail *mail) +{ + WonderMail *jobSlot; + s32 index; + + for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < MAX_ACCEPTED_JOBS; jobSlot++, index++) + { + if(jobSlot->mailType != MAIL_TYPE_NONE) + if(mail->missionType == jobSlot->missionType) + if(mail->unk2 == jobSlot->unk2) + 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) + if(mail->rewardType == jobSlot->rewardType) + if(mail->itemReward == jobSlot->itemReward) + if(mail->friendAreaReward == jobSlot->friendAreaReward) + return TRUE; + } + return FALSE; +} + +bool8 sub_809693C(WonderMail *mail) +{ + u8 dungeonIndex; + u8 floor; + bool8 escortMission; + s32 index; + + dungeonIndex = mail->unk4.dungeon.id; + floor = mail->unk4.dungeon.floor; + escortMission = FALSE; + if (!IsValidWonderMail(mail)) { + return FALSE; + } + else + { + if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) + escortMission = TRUE; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if ((gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_TAKEN_JOB) && + (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeonIndex,floor,escortMission) != 0)) + { + return TRUE; + } + } + } + return FALSE; +} + +s32 GetNumAcceptedJobs(void) +{ + s32 index; + s32 count; + + count = 0; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if (!IsJobSlotEmpty(index)) { + count++; + } + } + return count; +} + +s32 CountJobsinDungeon(u8 dungeon) +{ + WonderMail *mail; + s32 index; + s32 count; + + count = 0; + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + mail = GetJobSlotInfo(index); + if ((mail->unk4.dungeon.id == dungeon) && + (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { + count++; + } + } + return count; +} + +bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon) +{ + WonderMail *mail; + s32 index; + u32 local_14; + s32 temp; + + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + mail = GetJobSlotInfo(index); + if(mail->unk4.dungeon.id == dungeon) + if(mail->mailType == MAIL_TYPE_TAKEN_JOB) + if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) + { + temp = 0xffffff00; + local_14 &= temp; + temp = 0x4A; + local_14 |= temp; + + temp = 0xffff00ff; + local_14 &= temp; + temp = 0x100; + local_14 |= temp; + + sub_808CFD0(pokemon,mail->clientSpecies,NULL,0,(DungeonLocation *) &local_14,NULL); + return TRUE; + } + } + return FALSE; +} + +bool8 AcceptJob(WonderMail *mail) +{ + s32 index; + + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) + { + gUnknown_203B490->jobSlots[index] = *mail; + return FALSE; + } + } + return TRUE; +} + +WonderMail *GetJobSlotInfo(u8 index) +{ + return &gUnknown_203B490->jobSlots[index]; +} + +bool8 IsJobSlotEmpty(u8 index) +{ + if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) + return TRUE; + else + return FALSE; +} + +void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) +{ + WonderMail *jobSlot; + Item *item; + s32 index; + + jobSlot = GetJobSlotInfo(slotIndex); + param_1->unk0 = FALSE; + param_1->clientSpecies = jobSlot->clientSpecies; + param_1->targetSpecies = MONSTER_NONE; + if (jobSlot->unk4.dungeon.id == dungeon) { + switch(jobSlot->missionType) { + case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: + if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { + for(index = 0; index < INVENTORY_SIZE; index++) + { + item = &gTeamInventoryRef->teamItems[index]; + if (((item->flags & ITEM_FLAG_EXISTS)) && (item->id == jobSlot->targetItem)) { + param_1->unk0 = TRUE; + } + } + } + break; + case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT: + case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: + if (jobSlot->mailType == MAIL_TYPE_UNK9) { + param_1->unk0 = TRUE; + } + break; + case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET: + case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: + if (jobSlot->mailType == MAIL_TYPE_UNK9) { + param_1->unk0 = TRUE; + param_1->targetSpecies = jobSlot->targetSpecies; + } + break; + } + } +} + +// Unused +s16 sub_8096B98(u8 dungeon) +{ + WonderMail *mail; + s32 index; + + for(index = 0; index < MAX_ACCEPTED_JOBS; index++) + { + mail = GetJobSlotInfo(index); + if(mail->mailType == MAIL_TYPE_TAKEN_JOB) + if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) + if(mail->unk4.dungeon.id == dungeon) + return mail->targetSpecies; + } + return 0; +} + +void sub_8096BD0(void) +{ + s32 index; + WonderMail *mail; + + for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) + { + switch(mail->mailType) + { + case MAIL_TYPE_UNK7: + case MAIL_TYPE_UNK8: + case MAIL_TYPE_UNK9: + ResetJobSlot(index); + break; + } + } + ShiftJobSlotsDown(); + SortJobSlots(); +} + +bool8 sub_8096C08(u8 *jobIndex) +{ + s32 index; + WonderMail *mail; + + for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) + { + if(mail->mailType > 4 && mail->unk2 == 4) + { + + *jobIndex = index; + return TRUE; + } + } + return FALSE; +} + +void ResetJobSlot(u8 index) +{ + gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; + gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99; + gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; + gUnknown_203B490->jobSlots[index].rewardType = MONEY1; +} From c05ec71de9678032c8f04ba7e94c4fe3b59c095d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 3 Jun 2024 09:45:45 -0700 Subject: [PATCH 20/39] Thanks @Eebit for matching these three funcs --- src/code_80958E8.c | 1 - src/code_80958E8_1.c | 155 ++++++++++++++++++------------------------- 2 files changed, 64 insertions(+), 92 deletions(-) diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 57ff1ff68..9e34c7925 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -2,7 +2,6 @@ #include "code_803C1D0.h" #include "code_8094F88.h" #include "code_80958E8.h" -#include "code_80958E8.h" #include "code_80A26CC.h" #include "constants/dungeon.h" #include "constants/friend_area.h" diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index 40ed63a52..9b35f455b 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -292,101 +292,40 @@ void ResetPelipperBoardSlot(u8 index) gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; } -NAKED void sub_80965F4(void) { - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tldr r0, _0809660C\n" - "\tmov r12, r0\n" - "\tmov r8, r3\n" - "\tmovs r4, 0\n" - "\tmov r9, r4\n" - "\tb _08096636\n" - "\t.align 2, 0\n" -"_0809660C: .4byte gUnknown_203B490\n" -"_08096610:\n" - "\tcmp r2, r3\n" - "\tble _0809662A\n" - "\tmov r1, r12\n" - "\tldr r0, [r1]\n" - "\tmov r5, r8\n" - "\tadds r1, r0, r5\n" - "\tadds r0, r4\n" - "\tadds r1, 0x50\n" - "\tadds r0, 0x50\n" - "\tldm r0!, {r5-r7}\n" - "\tstm r1!, {r5-r7}\n" - "\tldm r0!, {r6,r7}\n" - "\tstm r1!, {r6,r7}\n" -"_0809662A:\n" - "\tadds r4, 0x14\n" - "\tmovs r0, 0x14\n" - "\tadd r9, r0\n" - "\tadds r2, 0x1\n" - "\tadd r8, r0\n" - "\tadds r3, 0x1\n" -"_08096636:\n" - "\tcmp r2, 0x7\n" - "\tbgt _08096666\n" - "\tmov r1, r12\n" - "\tldr r0, [r1]\n" - "\tadds r0, r4\n" - "\tadds r0, 0x50\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbne _08096666\n" - "\tldr r6, _08096694\n" - "\tmov r1, r9\n" -"_0809664C:\n" - "\tadds r1, 0x14\n" - "\tadds r4, 0x14\n" - "\tmovs r5, 0x14\n" - "\tadd r9, r5\n" - "\tadds r2, 0x1\n" - "\tcmp r2, 0x7\n" - "\tbgt _08096666\n" - "\tldr r0, [r6]\n" - "\tadds r0, r1\n" - "\tadds r0, 0x50\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0809664C\n" -"_08096666:\n" - "\tcmp r2, 0x8\n" - "\tbne _08096610\n" - "\tcmp r3, 0x7\n" - "\tbgt _08096688\n" - "\tldr r4, _08096694\n" - "\tmovs r2, 0\n" - "\tlsls r0, r3, 2\n" - "\tadds r0, r3\n" - "\tlsls r1, r0, 2\n" -"_08096678:\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tadds r0, 0x50\n" - "\tstrb r2, [r0]\n" - "\tadds r1, 0x14\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x7\n" - "\tble _08096678\n" -"_08096688:\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08096694: .4byte gUnknown_203B490"); + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 8; counter1++) + { + if (gUnknown_203B490->pelipperBoardJobs[counter1].mailType != 0) + break; + } + + if (counter1 == 8) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->pelipperBoardJobs[counter2] = gUnknown_203B490->pelipperBoardJobs[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 8; counter2++) + { + gUnknown_203B490->pelipperBoardJobs[counter2].mailType = 0; + } } + void SortPelipperJobs(void) { s32 index1; @@ -730,3 +669,37 @@ void ResetJobSlot(u8 index) gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; gUnknown_203B490->jobSlots[index].rewardType = MONEY1; } + +void sub_8096C80(void) +{ + int counter1; // r5 + int counter2; + + + counter1 = 0; + counter2 = 0; + + do { + for( ; counter1 < 8; counter1++) + { + if (gUnknown_203B490->jobSlots[counter1].mailType != 0) + break; + } + + if (counter1 == 8) { + break; + } + + if (counter1 > counter2) { + gUnknown_203B490->jobSlots[counter2] = gUnknown_203B490->jobSlots[counter1]; + } + counter1++; + counter2++; + } while( 1 ); + + for(; counter2 < 8; counter2++) + { + gUnknown_203B490->jobSlots[counter2].mailType = 0; + } +} + From 25937b6db04bc11d42303c835c8bbe7086641497 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 3 Jun 2024 12:03:04 -0700 Subject: [PATCH 21/39] condense files and cleanup --- src/code_80958E8.c | 1 - src/code_80958E8_1.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/code_80958E8.c b/src/code_80958E8.c index 9e34c7925..19bc1057a 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -1,6 +1,5 @@ #include "global.h" #include "code_803C1D0.h" -#include "code_8094F88.h" #include "code_80958E8.h" #include "code_80A26CC.h" #include "constants/dungeon.h" diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c index 9b35f455b..13249975e 100644 --- a/src/code_80958E8_1.c +++ b/src/code_80958E8_1.c @@ -1,5 +1,5 @@ -#include "constants/mailbox.h" #include "global.h" +#include "constants/mailbox.h" #include "constants/friend_area.h" #include "constants/dungeon.h" #include "constants/monster.h" From 66eaa3c2d59aad12341f27186b7438e02890e3cd Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 4 Jun 2024 10:00:26 -0700 Subject: [PATCH 22/39] decomp sub_8097944 --- src/code_8097670.c | 59 ---------------------------------------- src/code_8097DD0.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 59 deletions(-) diff --git a/src/code_8097670.c b/src/code_8097670.c index 3c12ee8fa..1744a2282 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -351,62 +351,3 @@ void sub_8097944(void) sub_80976F8(7); } } - -void sub_8097C18(struct unkStruct_8094924 *r0) -{ - sub_8097944(); - SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); - SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); - SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); - SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); - SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); - SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); - SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); - SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); -} - -void sub_8097CC0(struct unkStruct_8094924 *r0) -{ - RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); - RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); - RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); - RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); - RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); - RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); - RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); - RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); -} - -// Save something... -u32 sub_8097D60(u8 *r0, u32 size) -{ - struct unkStruct_8094924 backup; - xxx_init_struct_8094924_save_809486C(&backup, r0, size); - WriteGameOptions(&backup); - WritePlayTime(&backup); - sub_8097C18(&backup); - WriteExclusivePokemon(&backup); - nullsub_102(&backup); - return backup.unk8; -} - -// Read something... -u32 sub_8097D98(u8 *r0, u32 size) -{ - struct unkStruct_8094924 backup; - xxx_init_struct_8094924_restore_809485C(&backup, r0, size); - ReadGameOptions(&backup); - ReadPlayTime(&backup); - sub_8097CC0(&backup); - ReadExclusivePokemon(&backup); - nullsub_102(&backup); - return backup.unk8; -} diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index 7d1277eb4..d7e6f04e9 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -1,4 +1,72 @@ #include "global.h" +#include "code_8092334.h" +#include "code_8097670.h" +#include "pokemon.h" +#include "exclusive_pokemon.h" + +extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); +void ReadGameOptions(struct unkStruct_8094924 *param_1); +void ReadPlayTime(struct unkStruct_8094924 *r0); +void WriteGameOptions(struct unkStruct_8094924 *param_1); +void WritePlayTime(struct unkStruct_8094924 *r0); + +void sub_8097C18(struct unkStruct_8094924 *r0) +{ + sub_8097944(); + SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); +} + +void sub_8097CC0(struct unkStruct_8094924 *r0) +{ + RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); +} + +u32 sub_8097D60(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + WriteGameOptions(&backup); + WritePlayTime(&backup); + sub_8097C18(&backup); + WriteExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_8097D98(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + ReadGameOptions(&backup); + ReadPlayTime(&backup); + sub_8097CC0(&backup); + ReadExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} bool8 sub_8097DD0(s32 *param_1, s32 *param_2) { From 2bc26e7d39c0f72e2146b03dd659b9cc1a3dda5a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 4 Jun 2024 10:20:52 -0700 Subject: [PATCH 23/39] more cleanup --- src/code_8097670.c | 59 ++++++++++++++++++++++++++++++++++++++++ src/code_8097DD0.c | 68 ---------------------------------------------- 2 files changed, 59 insertions(+), 68 deletions(-) diff --git a/src/code_8097670.c b/src/code_8097670.c index 1744a2282..3c12ee8fa 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -351,3 +351,62 @@ void sub_8097944(void) sub_80976F8(7); } } + +void sub_8097C18(struct unkStruct_8094924 *r0) +{ + sub_8097944(); + SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); +} + +void sub_8097CC0(struct unkStruct_8094924 *r0) +{ + RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); +} + +// Save something... +u32 sub_8097D60(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + WriteGameOptions(&backup); + WritePlayTime(&backup); + sub_8097C18(&backup); + WriteExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} + +// Read something... +u32 sub_8097D98(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + ReadGameOptions(&backup); + ReadPlayTime(&backup); + sub_8097CC0(&backup); + ReadExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index d7e6f04e9..7d1277eb4 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -1,72 +1,4 @@ #include "global.h" -#include "code_8092334.h" -#include "code_8097670.h" -#include "pokemon.h" -#include "exclusive_pokemon.h" - -extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); -extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); -void ReadGameOptions(struct unkStruct_8094924 *param_1); -void ReadPlayTime(struct unkStruct_8094924 *r0); -void WriteGameOptions(struct unkStruct_8094924 *param_1); -void WritePlayTime(struct unkStruct_8094924 *r0); - -void sub_8097C18(struct unkStruct_8094924 *r0) -{ - sub_8097944(); - SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); - SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); - SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); - SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); - SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); - SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); - SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); - SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); - SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); -} - -void sub_8097CC0(struct unkStruct_8094924 *r0) -{ - RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); - RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); - RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); - RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); - RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); - RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); - RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); - RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); - RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); -} - -u32 sub_8097D60(u8 *r0, u32 size) -{ - struct unkStruct_8094924 backup; - xxx_init_struct_8094924_save_809486C(&backup, r0, size); - WriteGameOptions(&backup); - WritePlayTime(&backup); - sub_8097C18(&backup); - WriteExclusivePokemon(&backup); - nullsub_102(&backup); - return backup.unk8; -} - -u32 sub_8097D98(u8 *r0, u32 size) -{ - struct unkStruct_8094924 backup; - xxx_init_struct_8094924_restore_809485C(&backup, r0, size); - ReadGameOptions(&backup); - ReadPlayTime(&backup); - sub_8097CC0(&backup); - ReadExclusivePokemon(&backup); - nullsub_102(&backup); - return backup.unk8; -} bool8 sub_8097DD0(s32 *param_1, s32 *param_2) { From 1416b5de426054355763abacfe33417d9064d2ea Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 12 Jun 2024 10:59:02 -0700 Subject: [PATCH 24/39] match sub_806E100 --- src/type_effectiveness.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/type_effectiveness.c b/src/type_effectiveness.c index 117323d2f..9f76d1521 100644 --- a/src/type_effectiveness.c +++ b/src/type_effectiveness.c @@ -52,7 +52,6 @@ struct unkStruct_806D010 u8 unkF; }; - extern u8 *gUnknown_80FEDE8[]; extern u8 *gUnknown_80FEDC8[]; extern u8 *gUnknown_80FEDA8[]; From 1270976e5d87591cd3b16d78746c3a1007627261 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 18 Jun 2024 09:57:32 -0700 Subject: [PATCH 25/39] decomp more math funcs --- src/math.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/math.c b/src/math.c index 7efcb42ab..e7b4816b7 100644 --- a/src/math.c +++ b/src/math.c @@ -4,6 +4,8 @@ #include "data/math.h" +u24_8 u24_8_div(u24_8 x, u24_8 y); + u32 fast_mod_3(s32 x) { if (x < 0x100) { return gFastMod3Lookup[x]; From 0673ac5fc64bc935dcd302c14f2ffe2bbb4bedd5 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 20 Jun 2024 21:44:08 -0700 Subject: [PATCH 26/39] name a func and add func to header --- src/math.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/math.c b/src/math.c index e7b4816b7..7efcb42ab 100644 --- a/src/math.c +++ b/src/math.c @@ -4,8 +4,6 @@ #include "data/math.h" -u24_8 u24_8_div(u24_8 x, u24_8 y); - u32 fast_mod_3(s32 x) { if (x < 0x100) { return gFastMod3Lookup[x]; From 75175caee5c37216915294b8a37a17ee0c1c85a4 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 20 Jun 2024 22:02:39 -0700 Subject: [PATCH 27/39] name a few funcs --- asm/code_800F990.s | 20 ++++++++++---------- src/code_80118A4.c | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/asm/code_800F990.s b/asm/code_800F990.s index c1164d98f..7c16c70a0 100644 --- a/asm/code_800F990.s +++ b/asm/code_800F990.s @@ -193,7 +193,7 @@ _0800FB1C: ands r0, r1 cmp r0, 0 beq _0800FB2E - bl sub_80117D0 + bl PlayAcceptSoundEffect movs r5, 0x2 _0800FB2E: ldrh r1, [r4, 0x2] @@ -201,7 +201,7 @@ _0800FB2E: ands r0, r1 cmp r0, 0 beq _0800FB3E - bl sub_80117E4 + bl PlayCancelSoundEffect movs r5, 0x3 _0800FB3E: cmp r5, 0 @@ -247,7 +247,7 @@ _0800FB7E: beq _0800FBA2 adds r0, r4, 0 bl MoveMenuCursorDown - bl sub_80117F8 + bl PlayCursorUpDownSoundEffect _0800FBA2: ldrh r1, [r6, 0x4] movs r0, 0x40 @@ -256,7 +256,7 @@ _0800FBA2: beq _0800FBB6 adds r0, r4, 0 bl MoveMenuCursorUp - bl sub_80117F8 + bl PlayCursorUpDownSoundEffect _0800FBB6: ldrh r1, [r6, 0x2] movs r0, 0x1 @@ -269,7 +269,7 @@ _0800FBB6: cmp r0, 0 beq _0800FC00 _0800FBCA: - bl sub_80117D0 + bl PlayAcceptSoundEffect ldr r1, [r7] movs r3, 0x18 ldrsh r2, [r4, r3] @@ -301,7 +301,7 @@ _0800FC00: cmp r0, 0 beq _0800FB7E _0800FC12: - bl sub_80117E4 + bl PlayCancelSoundEffect _0800FC16: mov r0, r8 pop {r3} @@ -966,7 +966,7 @@ sub_80100C0: adds r0, r2 ldr r0, [r0, 0x4] str r0, [sp, 0x10] - bl sub_80117F8 + bl PlayCursorUpDownSoundEffect movs r7, 0 cmp r7, r8 bge _0801018A @@ -2450,7 +2450,7 @@ _08010D18: beq _08010D36 add r0, sp, 0x4 bl MoveMenuCursorDown - bl sub_80117F8 + bl PlayCursorUpDownSoundEffect _08010D36: ldrh r1, [r4, 0x4] movs r0, 0x40 @@ -2459,7 +2459,7 @@ _08010D36: beq _08010D4A add r0, sp, 0x4 bl MoveMenuCursorUp - bl sub_80117F8 + bl PlayCursorUpDownSoundEffect _08010D4A: ldrh r1, [r4, 0x2] movs r0, 0x1 @@ -2472,7 +2472,7 @@ _08010D4A: cmp r0, 0 beq _08010D18 _08010D5E: - bl sub_80117D0 + bl PlayAcceptSoundEffect add r0, sp, 0x4 movs r1, 0x18 ldrsh r0, [r0, r1] diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 4beef9b4c..fd52b9d99 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -93,20 +93,20 @@ void sub_80117C4(void) FadeOutBGM(30); } -// Some sound effect -void sub_80117D0(void) +// When you press A on a menu +void PlayAcceptSoundEffect(void) { PlayFanfareSE(302, MAX_VOLUME); } -// Some sound effect -void sub_80117E4(void) +// When you press B on a menu +void PlayCancelSoundEffect(void) { PlayFanfareSE(303, MAX_VOLUME); } -// Some sound effect -void sub_80117F8(void) +// When you go up or down +void PlayCursorUpDownSoundEffect(void) { PlayFanfareSE(301, MAX_VOLUME); } From fb07afd55b84200e54066b67e60a0333bc3f51d1 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 23 Jun 2024 21:43:04 -0700 Subject: [PATCH 28/39] lots of documentation --- asm/code_809A560.s | 2 +- data/data_8115F5C.s | 6 +- include/code_801C620.h | 8 +- .../{code_801C244.h => iq_skill_list_menu.h} | 10 +- include/{code_801BEEC.h => iq_skill_menu.h} | 27 +- include/makuhita_dojo1.h | 4 +- include/party_list_menu.h | 55 +++- include/pelipper_board.h | 8 + ld_script.txt | 8 +- src/code_801C620.c | 26 +- src/code_801D014.c | 10 +- src/data/{code_801BEEC.h => iq_skill_menu.h} | 0 src/friend_area_action_menu.c | 6 +- src/friend_list_menu.c | 6 +- src/gulpin_shop_801FB50.c | 8 +- src/{code_801C244.c => iq_skill_list_menu.c} | 18 +- src/{code_801BEEC.c => iq_skill_menu.c} | 108 +++---- src/makuhita_dojo1.c | 4 +- src/party_list_menu.c | 280 +++++++++--------- src/pelipper_board.c | 42 ++- sym_ewram2.txt | 4 +- 21 files changed, 354 insertions(+), 286 deletions(-) rename include/{code_801C244.h => iq_skill_list_menu.h} (73%) rename include/{code_801BEEC.h => iq_skill_menu.h} (51%) rename src/data/{code_801BEEC.h => iq_skill_menu.h} (100%) rename src/{code_801C244.c => iq_skill_list_menu.c} (94%) rename src/{code_801BEEC.c => iq_skill_menu.c} (58%) diff --git a/asm/code_809A560.s b/asm/code_809A560.s index 07268d41c..a10b72d3b 100644 --- a/asm/code_809A560.s +++ b/asm/code_809A560.s @@ -2938,7 +2938,7 @@ _0809C032: ldr r0, [r6] b _0809B972 _0809C036: - bl sub_802FE58 + bl HandleMakuhitaDojoState cmp r0, 0x2 beq _0809C05E cmp r0, 0x3 diff --git a/data/data_8115F5C.s b/data/data_8115F5C.s index d09e85868..6b78c82e4 100644 --- a/data/data_8115F5C.s +++ b/data/data_8115F5C.s @@ -222,21 +222,21 @@ gUnknown_8116298: @ 8116298 .4byte 1 .4byte 0 .4byte MakuhitaDojo_Delete -.4byte sub_802FE58 +.4byte HandleMakuhitaDojoState .global gUnknown_81162A8 gUnknown_81162A8: @ 81162A8 .4byte 1 .4byte 0 .4byte MakuhitaDojo_Delete -.4byte sub_802FE58 +.4byte HandleMakuhitaDojoState .global gUnknown_81162B8 gUnknown_81162B8: @ 81162B8 .4byte 1 .4byte 0 .4byte MakuhitaDojo_Delete - .4byte sub_802FE58 + .4byte HandleMakuhitaDojoState .global gUnknown_81162C8 gUnknown_81162C8: @ 81162C8 diff --git a/include/code_801C620.h b/include/code_801C620.h index 2213cba76..35830ef5c 100644 --- a/include/code_801C620.h +++ b/include/code_801C620.h @@ -20,8 +20,8 @@ struct unkStruct_203B240 MenuInputStructSub unk88; }; -bool8 sub_801C620(u8 iqSkill); -u32 sub_801C674(void); -void sub_801C6B4(void); +bool8 CreateIQSkillInfoMenu(u8 iqSkill); +u32 HandleIQSkillInfoMenuState(void); +void CleanIQSkillInfoMenu(void); -#endif // GUARD_CODE_801C620_H \ No newline at end of file +#endif // GUARD_CODE_801C620_H diff --git a/include/code_801C244.h b/include/iq_skill_list_menu.h similarity index 73% rename from include/code_801C244.h rename to include/iq_skill_list_menu.h index 83153e6f3..4a0d71626 100644 --- a/include/code_801C244.h +++ b/include/iq_skill_list_menu.h @@ -19,11 +19,11 @@ struct unkStruct_203B23C bool8 HasNoAvailIQSkills(s16 species); -bool8 sub_801C244(s16 species, u32 index, u32); -u32 sub_801C308(bool8); -s32 sub_801C390(void); +bool8 CreateIQSkillListMenu(s16 species, u32 index, u32); +u32 HandleIQSkillListMenuInput(bool8); +s32 GetIQSkillSelection(void); void sub_801C3B0(bool8); -void sub_801C3F8(void); -void sub_801C4C8(void); +void CleanIQSkillListMenu(void); +void BuildIQSkillList(void); #endif // GUARD_CODE_801C244_H diff --git a/include/code_801BEEC.h b/include/iq_skill_menu.h similarity index 51% rename from include/code_801BEEC.h rename to include/iq_skill_menu.h index c5d65660d..b00b05f01 100644 --- a/include/code_801BEEC.h +++ b/include/iq_skill_menu.h @@ -1,5 +1,5 @@ -#ifndef GUARD_CODE_801BEEC_H -#define GUARD_CODE_801BEEC_H +#ifndef GUARD_CODE_IQ_SKILL_MENU_H +#define GUARD_CODE_IQ_SKILL_MENU_H #include "constants/iq_skill.h" #include "structs/menu.h" @@ -13,7 +13,7 @@ struct unkStruct_203B238 /* 0x4 */ s16 species; /* 0x8 */ PokemonStruct1 *pokeStruct; /* 0xC */ u8 iqSkills[NUM_IQ_SKILLS]; - u32 unk24; + /* 0x24 */ u32 menuIndex; /* 0x28 */ u8 iqSkillIndex; /* 0x2C */ u32 numIQSkills; /* 0x30 */ s32 menuAction; @@ -22,8 +22,23 @@ struct unkStruct_203B238 UnkTextStruct2 unkC4[4]; }; -bool8 sub_801BEEC(s16 species); +bool8 CreateIQSkillMenu(s16 species); u32 sub_801BF48(void); -void sub_801BF98(void); +void CleanIQSkillMenu(void); -#endif // GUARD_CODE_801BEEC_H \ No newline at end of file +enum IQSkillMenuStates +{ + IQ_SKILL_MENU_STATE_INIT, + IQ_SKILL_MENU_STATE_MAIN, + IQ_SKILL_MENU_STATE_INFO = 3, + IQ_SKILL_MENU_STATE_EXIT +}; + +enum IQSkillMenuActions +{ + IQ_SKILL_MENU_NULL = 1, + IQ_SKILL_MENU_SWITCH, + IQ_SKILL_MENU_INFO, +}; + +#endif // GUARD_CODE_IQ_SKILL_MENU_H diff --git a/include/makuhita_dojo1.h b/include/makuhita_dojo1.h index ffd0f420a..15950be8d 100644 --- a/include/makuhita_dojo1.h +++ b/include/makuhita_dojo1.h @@ -43,7 +43,7 @@ typedef struct MakuhitaDojoWork1 void MakuhitaDojo_Delete(void); bool8 MakuhitaDojo_New(u32 mode); -u32 sub_802FE58(void); +u32 HandleMakuhitaDojoState(void); s16 sub_802FED0(void); -#endif // GUARD_MAKUHITA_DOJO1_H \ No newline at end of file +#endif // GUARD_MAKUHITA_DOJO1_H diff --git a/include/party_list_menu.h b/include/party_list_menu.h index 0ff829134..3db582c1b 100644 --- a/include/party_list_menu.h +++ b/include/party_list_menu.h @@ -35,9 +35,58 @@ typedef struct unkStruct_203B2B8 UnkTextStruct2 unk220[4]; } unkStruct_203B2B8; -bool8 sub_8025EF4(PokemonStruct1 *pokeStruct); +bool8 CreatePartyListMenu(PokemonStruct1 *pokeStruct); u32 sub_8025F68(void); bool8 sub_802604C(void); -void sub_8026058(void); +void CleanPartyListMenu(void); -#endif // GUARD_PARTY_LIST_MENU_H \ No newline at end of file +enum PartyListMenuStates +{ + PARTY_LIST_STATE_INIT, + PARTY_LIST_STATE_MAIN_MENU, + PARTY_LIST_STATE_MAIN_MENU_1, + PARTY_LIST_STATE_SUMMARY = 3, + PARTY_LIST_STATE_CHECK_IQ = 4, + PARTY_LIST_STATE_JOIN_TEAM = 5, + PARTY_LIST_STATE_STANDBY = 6, + PARTY_LIST_STATE_MAKE_LEADER = 7, + PARTY_LIST_STATE_POKEMON_FAREWELL = 8, + // 9 + // 0xA + // 0xB + PARTY_LIST_STATE_SAY_FAREWELL = 0xC, + PARTY_LIST_STATE_CONFIRM_SAY_FAREWELL = 0xD, + PARTY_LIST_STATE_GIVE_GUMMI = 0xe, + PARTY_LIST_STATE_GIVEN_ITEM = 0xF, + PARTY_LIST_STATE_GIVEN_ITEM_HELD_ITEM = 0x10, + PARTY_LIST_STATE_TAKE_ITEM = 0x11, + PARTY_LIST_STATE_GIVE_ITEM = 0x12, + PARTY_LIST_STATE_GIVE_ITEM_1 = 0x13, + // 0x14 + // 0x15 + PARTY_LIST_STATE_MOVES = 0x16, + // 0x17 + // 0x18 + PARTY_LIST_STATE_EXIT = 0x19, + +}; + +enum PartyListMenuActions +{ + PARTY_LIST_MENU_NULL = 1, + PARTY_LIST_MENU_YES, + PARTY_LIST_MENU_NO, + PARTY_LIST_MENU_INFO = 4, + PARTY_LIST_MENU_SUMMARY = 4, + PARTY_LIST_MENU_CHECK_IQ, + PARTY_LIST_MENU_JOIN_TEAM, + PARTY_LIST_MENU_STANDBY, + PARTY_LIST_MENU_MAKE_LEADER, + PARTY_LIST_MENU_SAY_FAREWELL, + PARTY_LIST_MENU_GIVE_GUMMI, + PARTY_LIST_MENU_GIVE_ITEM, + PARTY_LIST_MENU_TAKE_ITEM, + PARTY_LIST_MENU_MOVES, +}; + +#endif // GUARD_PARTY_LIST_MENU_H diff --git a/include/pelipper_board.h b/include/pelipper_board.h index 646d55e6e..1cf8b70ca 100644 --- a/include/pelipper_board.h +++ b/include/pelipper_board.h @@ -28,3 +28,11 @@ enum PelipperBoardStates PELIPPER_JOB_LIST_MENU, }; +enum PelipperBoardActions +{ + PELIPPER_BOARD_NULL = 1, + PELIPPER_BOARD_BULLETIN_BOARD, + PELIPPER_BOARD_JOB_LIST, + PELIPPER_BOARD_ACCEPT, + PELIPPER_BOARD_INFO, +}; diff --git a/ld_script.txt b/ld_script.txt index 97394fda4..6e15a1ec8 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -115,8 +115,8 @@ SECTIONS { src/code_801AFA4.o(.text); src/code_801B3C0.o(.text); src/code_801B60C.o(.text); - src/code_801BEEC.o(.text); - src/code_801C244.o(.text); + src/iq_skill_menu.o(.text); + src/iq_skill_list_menu.o(.text); src/code_801C620.o(.text); src/code_801C8C4.o(.text); src/code_801D014.o(.text); @@ -453,8 +453,8 @@ SECTIONS { src/code_801AFA4.o(.rodata); src/code_801B3C0.o(.rodata); src/code_801B60C.o(.rodata); - src/code_801BEEC.o(.rodata); - src/code_801C244.o(.rodata); + src/iq_skill_menu.o(.rodata); + src/iq_skill_list_menu.o(.rodata); src/code_801C620.o(.rodata); src/code_801C8C4.o(.rodata); src/code_801D014.o(.rodata); diff --git a/src/code_801C620.c b/src/code_801C620.c index b45b3c7d5..496bfa1fe 100644 --- a/src/code_801C620.c +++ b/src/code_801C620.c @@ -19,12 +19,12 @@ static EWRAM_DATA_2 struct unkStruct_203B240 *sUnknown_203B240 = {0}; #include "data/code_801C620.h" -static void sub_801C6D0(s32 newState); +static void SetIQSkillInfoMenuState(s32 newState); static void sub_801C6E4(void); static void sub_801C7D4(void); static void sub_801C848(void); -bool8 sub_801C620(u8 iqSkill) +bool8 CreateIQSkillInfoMenu(u8 iqSkill) { ResetSprites(TRUE); @@ -35,11 +35,11 @@ bool8 sub_801C620(u8 iqSkill) sub_80140B4(sUnknown_203B240->unk28); ResetUnusedInputStruct(); sub_800641C(sUnknown_203B240->unk28, TRUE, TRUE); - sub_801C6D0(0); + SetIQSkillInfoMenuState(0); return TRUE; } -u32 sub_801C674(void) +u32 HandleIQSkillInfoMenuState(void) { switch (sUnknown_203B240->state) { case 0: @@ -57,7 +57,7 @@ u32 sub_801C674(void) return 0; } -void sub_801C6B4(void) +void CleanIQSkillInfoMenu(void) { if (sUnknown_203B240 != NULL) { MemoryFree(sUnknown_203B240); @@ -65,7 +65,7 @@ void sub_801C6B4(void) } } -static void sub_801C6D0(s32 newState) +static void SetIQSkillInfoMenuState(s32 newState) { sUnknown_203B240->state = newState; sub_801C6E4(); @@ -118,14 +118,14 @@ static void sub_801C7D4(void) if (sUnknown_203B240->unkC != 0) { sUnknown_203B240->unk8 = 0; - sub_801C6D0(1); + SetIQSkillInfoMenuState(1); } else - sub_801C6D0(3); + SetIQSkillInfoMenuState(3); break; case 2: PlayMenuSoundEffect(1); - sub_801C6D0(2); + SetIQSkillInfoMenuState(2); break; } } @@ -145,13 +145,13 @@ static void sub_801C848(void) sUnknown_203B240->unk8++; if (sUnknown_203B240->unk8 < sUnknown_203B240->unkC) - sub_801C6D0(1); + SetIQSkillInfoMenuState(1); else - sub_801C6D0(0); + SetIQSkillInfoMenuState(0); break; case 2: PlayMenuSoundEffect(1); - sub_801C6D0(2); + SetIQSkillInfoMenuState(2); break; } -} \ No newline at end of file +} diff --git a/src/code_801D014.c b/src/code_801D014.c index db3786ec1..5689d25d8 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -3,7 +3,7 @@ #include "bg_palette_buffer.h" #include "code_800D090.h" #include "code_80130A8.h" -#include "code_801BEEC.h" +#include "iq_skill_menu.h" #include "code_801D014.h" #include "code_80227B8.h" #include "code_8023868.h" @@ -264,7 +264,7 @@ static void sub_801D3A8(void) sub_8027074(); break; case 5: - sub_8025EF4(sUnknown_203B250->pokeStruct); + CreatePartyListMenu(sUnknown_203B250->pokeStruct); break; case 6: sub_80252F0(0); @@ -276,7 +276,7 @@ static void sub_801D3A8(void) sub_8024458(sUnknown_203B250->index, 2); break; case 9: - sub_801BEEC(sUnknown_203B250->index); + CreateIQSkillMenu(sUnknown_203B250->index); break; case 10: sub_8021774(sUnknown_203B250->currFriendAreaLocation, TRUE, 2); @@ -462,7 +462,7 @@ static void sub_801D798(void) if (sub_802604C()) sUnknown_203B250->unk7 = sUnknown_203B250->currFriendAreaLocation; - sub_8026058(); + CleanPartyListMenu(); sub_801D208(2); break; } @@ -512,7 +512,7 @@ static void sub_801D824(void) break; case 2: case 3: - sub_801BF98(); + CleanIQSkillMenu(); sub_801D208(1); break; } diff --git a/src/data/code_801BEEC.h b/src/data/iq_skill_menu.h similarity index 100% rename from src/data/code_801BEEC.h rename to src/data/iq_skill_menu.h diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c index 182bdde94..47c4672c4 100644 --- a/src/friend_area_action_menu.c +++ b/src/friend_area_action_menu.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80130A8.h" #include "code_801B3C0.h" -#include "code_801BEEC.h" +#include "iq_skill_menu.h" #include "code_801EE10.h" #include "code_801EE10_mid.h" #include "code_8023868.h" @@ -191,7 +191,7 @@ void sub_8027274(void) sub_8024458(sUnknown_203B2BC->targetPoke, 2); break; case FRIEND_AREA_ACTION_MENU_CHECK_IQ: - sub_801BEEC(sUnknown_203B2BC->targetPoke); + CreateIQSkillMenu(sUnknown_203B2BC->targetPoke); break; case 10: sub_801A5D8(1, 0, NULL, 10); @@ -512,7 +512,7 @@ void sub_8027A5C(void) { case 2: case 3: - sub_801BF98(); + CleanIQSkillMenu(); SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2); break; case 0: diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 0f64938ed..1df9caad3 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -4,7 +4,7 @@ #include "code_80130A8.h" #include "code_801602C.h" #include "code_801B3C0.h" -#include "code_801BEEC.h" +#include "iq_skill_menu.h" #include "code_801EE10.h" #include "code_801EE10_mid.h" #include "code_8023868.h" @@ -237,7 +237,7 @@ void sub_8025518(void) sub_8024458(gUnknown_203B2B4->species,2); break; case 5: - sub_801BEEC(gUnknown_203B2B4->species); + CreateIQSkillMenu(gUnknown_203B2B4->species); break; case 0xb: sub_801A5D8(1, 0, NULL, 10); @@ -505,7 +505,7 @@ void sub_8025BE8(void) { case 2: case 3: - sub_801BF98(); + CleanIQSkillMenu(); sub_8025434(2); break; case 0: diff --git a/src/gulpin_shop_801FB50.c b/src/gulpin_shop_801FB50.c index f3bf8a0a5..65806d6b4 100644 --- a/src/gulpin_shop_801FB50.c +++ b/src/gulpin_shop_801FB50.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80118A4.h" #include "code_80130A8.h" -#include "code_801BEEC.h" +#include "iq_skill_menu.h" #include "code_801EE10.h" #include "code_801EE10_mid.h" #include "code_8023868.h" @@ -307,7 +307,7 @@ static void sub_801FF28(void) sub_8024458(gUnknown_203B27C->speciesNum,2); break; case 0x13: - sub_801BEEC(gUnknown_203B27C->speciesNum); + CreateIQSkillMenu(gUnknown_203B27C->speciesNum); break; case 0x14: gUnknown_203B27C->fallbackState = 0x15; @@ -762,7 +762,7 @@ static void sub_8020C48(void) { case 2: case 3: - sub_801BF98(); + CleanIQSkillMenu(); sub_801FDA8(0x10); break; case 0: @@ -1076,4 +1076,4 @@ static bool8 sub_8021178(void) if (count == 0) return TRUE; else return FALSE; -} \ No newline at end of file +} diff --git a/src/code_801C244.c b/src/iq_skill_list_menu.c similarity index 94% rename from src/code_801C244.c rename to src/iq_skill_list_menu.c index a56a22adb..4e0c0faf0 100644 --- a/src/code_801C244.c +++ b/src/iq_skill_list_menu.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80118A4.h" #include "code_80130A8.h" -#include "code_801C244.h" +#include "iq_skill_list_menu.h" #include "input.h" #include "memory.h" #include "menu_input.h" @@ -18,7 +18,7 @@ static EWRAM_DATA_2 struct unkStruct_203B23C *sUnknown_203B23C = {0}; static void sub_801C440(void); -bool8 sub_801C244(s16 species, u32 index, u32 a2) +bool8 CreateIQSkillListMenu(s16 species, u32 index, u32 a2) { #ifndef NONMATCHING register s32 species_s32 asm("r4"); @@ -47,11 +47,11 @@ bool8 sub_801C244(s16 species, u32 index, u32 a2) sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE); sub_8013818(&sUnknown_203B23C->s24.s0.input, sUnknown_203B23C->numIQSkills, a2, index); sub_801C440(); - sub_801C4C8(); + BuildIQSkillList(); return TRUE; } -u32 sub_801C308(bool8 a0) +u32 HandleIQSkillListMenuInput(bool8 a0) { if (!a0) { sub_8013660(&sUnknown_203B23C->s24.s0.input); @@ -71,14 +71,14 @@ u32 sub_801C308(bool8 a0) default: if (sub_80138B8(&sUnknown_203B23C->s24.s0.input, 1) != 0) { sub_801C440(); - sub_801C4C8(); + BuildIQSkillList(); return 1; } return 0; } } -s32 sub_801C390(void) +s32 GetIQSkillSelection(void) { return (sUnknown_203B23C->s24.s0.input.unk1E * sUnknown_203B23C->s24.s0.input.unk1C) + sUnknown_203B23C->s24.s0.input.menuIndex; } @@ -90,13 +90,13 @@ void sub_801C3B0(bool8 r0) sUnknown_203B23C->s24.s0.input.unk22 = sUnknown_203B23C->numIQSkills; sub_8013984(&sUnknown_203B23C->s24.s0.input); sub_801C440(); - sub_801C4C8(); + BuildIQSkillList(); if (r0) AddMenuCursorSprite(&sUnknown_203B23C->s24.s0.input); } -void sub_801C3F8(void) +void CleanIQSkillListMenu(void) { if (sUnknown_203B23C != NULL) { sUnknown_203B23C->s24.s0.unk3C[sUnknown_203B23C->s24.s0.unk34] = sUnknown_80DBDD8; @@ -119,7 +119,7 @@ static void sub_801C440(void) SUB_80095E4_CALL_2(sUnknown_203B23C->s24.s0); } -void sub_801C4C8(void) +void BuildIQSkillList(void) { u32 y; s32 x; diff --git a/src/code_801BEEC.c b/src/iq_skill_menu.c similarity index 58% rename from src/code_801BEEC.c rename to src/iq_skill_menu.c index 6452482a5..1e3c93c4a 100644 --- a/src/code_801BEEC.c +++ b/src/iq_skill_menu.c @@ -1,8 +1,8 @@ #include "global.h" #include "globaldata.h" #include "code_80118A4.h" -#include "code_801BEEC.h" -#include "code_801C244.h" +#include "iq_skill_menu.h" +#include "iq_skill_list_menu.h" #include "code_801C620.h" #include "common_strings.h" #include "input.h" @@ -14,17 +14,17 @@ static EWRAM_DATA_2 struct unkStruct_203B238 *sUnknown_203B238 = {0}; -#include "data/code_801BEEC.h" +#include "data/iq_skill_menu.h" -static void sub_801BFB4(s32 newState); +static void SetIQSkillMenuState(s32 newState); static void sub_801BFCC(void); -static void sub_801C03C(void); -static void sub_801C0C8(void); +static void HandleIQSkillMenuState(void); +static void BuildIQSkillMenuActions(void); static void sub_801C118(void); static void sub_801C1A0(void); -static void sub_801C228(void); +static void HandleIQSkillMenuInfo(void); -bool8 sub_801BEEC(s16 species) +bool8 CreateIQSkillMenu(s16 species) { s32 species_s32 = species; @@ -36,30 +36,30 @@ bool8 sub_801BEEC(s16 species) sUnknown_203B238->species = species_s32; sUnknown_203B238->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; sUnknown_203B238->numIQSkills = GetNumAvailableIQSkills(sUnknown_203B238->iqSkills, sUnknown_203B238->pokeStruct->IQ); - sub_801BFB4(0); + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_INIT); return TRUE; } u32 sub_801BF48(void) { switch (sUnknown_203B238->state) { - case 4: + case IQ_SKILL_MENU_STATE_EXIT: return 3; - case 0: - case 1: + case IQ_SKILL_MENU_STATE_INIT: + case IQ_SKILL_MENU_STATE_MAIN: sub_801C118(); break; case 2: sub_801C1A0(); break; - case 3: - sub_801C228(); + case IQ_SKILL_MENU_STATE_INFO: + HandleIQSkillMenuInfo(); break; } return 0; } -void sub_801BF98(void) +void CleanIQSkillMenu(void) { if (sUnknown_203B238 != NULL) { MemoryFree(sUnknown_203B238); @@ -67,11 +67,11 @@ void sub_801BF98(void) } } -static void sub_801BFB4(s32 newState) +static void SetIQSkillMenuState(s32 newState) { sUnknown_203B238->state = newState; sub_801BFCC(); - sub_801C03C(); + HandleIQSkillMenuState(); } static void sub_801BFCC(void) @@ -91,29 +91,29 @@ static void sub_801BFCC(void) sub_800641C(sUnknown_203B238->unkC4, TRUE, TRUE); } -static void sub_801C03C(void) +static void HandleIQSkillMenuState(void) { switch (sUnknown_203B238->state) { - case 0: - sub_801C244(sUnknown_203B238->species, 0, 8); + case IQ_SKILL_MENU_STATE_INIT: + CreateIQSkillListMenu(sUnknown_203B238->species, 0, 8); break; - case 1: + case IQ_SKILL_MENU_STATE_MAIN: sub_801C3B0(TRUE); break; case 2: - sub_801C4C8(); - sub_801C0C8(); - sub_8012D60(&sUnknown_203B238->unk74, sUnknown_203B238->unk34, 0, 0, sUnknown_203B238->menuAction, 2); + BuildIQSkillList(); // Build list of IQ Skills + BuildIQSkillMenuActions(); + sub_8012D60(&sUnknown_203B238->unk74, sUnknown_203B238->unk34, NULL, NULL, sUnknown_203B238->menuAction, 2); break; - case 3: - sub_801C620(sUnknown_203B238->iqSkillIndex); + case IQ_SKILL_MENU_STATE_INFO: + CreateIQSkillInfoMenu(sUnknown_203B238->iqSkillIndex); break; - case 4: + case IQ_SKILL_MENU_STATE_EXIT: break; } } -static void sub_801C0C8(void) +static void BuildIQSkillMenuActions(void) { struct unkStruct_203B238 *puVar1; s32 i; @@ -125,11 +125,11 @@ static void sub_801C0C8(void) nullText = NULL; sUnknown_203B238->unk34[0].text = sSwitch; - puVar1->unk34[0].menuAction = 2; + puVar1->unk34[0].menuAction = IQ_SKILL_MENU_SWITCH; - menuAction = 1; + menuAction = IQ_SKILL_MENU_NULL; puVar1->unk34[1].text = gCommonInfo[0]; - puVar1->unk34[1].menuAction = 3; + puVar1->unk34[1].menuAction = IQ_SKILL_MENU_INFO; max = 2; puVar1->unk34[2].text = nullText; @@ -140,25 +140,25 @@ static void sub_801C0C8(void) return; } - sUnknown_203B238->menuAction = 2; + sUnknown_203B238->menuAction = IQ_SKILL_MENU_SWITCH; } static void sub_801C118(void) { - switch (sub_801C308(TRUE)) { + switch (HandleIQSkillListMenuInput(TRUE)) { case 3: - sUnknown_203B238->unk24 = sub_801C390(); - sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->unk24]; - sub_801BFB4(2); + sUnknown_203B238->menuIndex = GetIQSkillSelection(); + sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->menuIndex]; + SetIQSkillMenuState(2); break; case 4: - sUnknown_203B238->unk24 = sub_801C390(); - sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->unk24]; - sub_801BFB4(3); + sUnknown_203B238->menuIndex = GetIQSkillSelection(); + sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->menuIndex]; + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_INFO); break; case 2: - sub_801C3F8(); - sub_801BFB4(4); + CleanIQSkillListMenu(); + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_EXIT); break; case 0: case 1: @@ -171,39 +171,39 @@ static void sub_801C1A0(void) s32 menuAction; menuAction = 0; - sub_801C308(FALSE); + HandleIQSkillListMenuInput(FALSE); if (!sub_8012FD8(&sUnknown_203B238->unk74)) { sub_8013114(&sUnknown_203B238->unk74, &menuAction); - if (menuAction != 1) + if (menuAction != IQ_SKILL_MENU_NULL) sUnknown_203B238->menuAction = menuAction; } switch (menuAction) { - case 2: + case IQ_SKILL_MENU_SWITCH: // Switch PlaySound(307); ToggleIQSkill((u8 *)&sUnknown_203B238->pokeStruct->IQSkills, sUnknown_203B238->iqSkillIndex); - sub_801BFB4(1); + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_MAIN); break; - case 3: - sub_801BFB4(3); + case IQ_SKILL_MENU_INFO: // Info + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_INFO); break; - case 1: - sub_801BFB4(1); + case IQ_SKILL_MENU_NULL: + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_MAIN); break; } } -static void sub_801C228(void) +static void HandleIQSkillMenuInfo(void) { - switch (sub_801C674()) { + switch (HandleIQSkillInfoMenuState()) { case 2: case 3: - sub_801C6B4(); - sub_801BFB4(1); + CleanIQSkillInfoMenu(); + SetIQSkillMenuState(IQ_SKILL_MENU_STATE_MAIN); case 0: case 1: break; } -} \ No newline at end of file +} diff --git a/src/makuhita_dojo1.c b/src/makuhita_dojo1.c index 715711d70..d45b607f7 100644 --- a/src/makuhita_dojo1.c +++ b/src/makuhita_dojo1.c @@ -105,7 +105,7 @@ bool8 MakuhitaDojo_New(u32 mode) return TRUE; } -u32 sub_802FE58(void) +u32 HandleMakuhitaDojoState(void) { switch (sMakuhitaDojoWork1->state) { case 0: @@ -316,4 +316,4 @@ static void MakuhitaDojo_GoToFallbackState(void) s32 temp; if (sub_80144A4(&temp) == 0) MakuhitaDojo_SetState(sMakuhitaDojoWork1->fallbackState); -} \ No newline at end of file +} diff --git a/src/party_list_menu.c b/src/party_list_menu.c index 9ead7ff07..e8b5abba5 100644 --- a/src/party_list_menu.c +++ b/src/party_list_menu.c @@ -4,7 +4,7 @@ #include "code_80118A4.h" #include "code_80130A8.h" #include "code_801B3C0.h" -#include "code_801BEEC.h" +#include "iq_skill_menu.h" #include "code_801EE10.h" #include "code_801EE10_mid.h" #include "code_80227B8.h" @@ -44,30 +44,30 @@ bool8 sub_8026EB8(PokemonStruct1 *r0); void sub_8026E08(u32 r0); void sub_8026DAC(u32 r0, BulkItem *item); void sub_8026FA4(void); -void sub_8026878(void); +void PartyListMenu_BuildYesNoMenu(void); extern void sub_808D31C(PokemonStruct1 *); -void sub_802678C(void); -void sub_80264CC(void); -void sub_80261D0(void); +void PartyListMenu_CreateMenu2(void); +void PartyListMenu_CreateMenu1(void); +void HandlePartyListMenuCallback(void); -void sub_80268CC(void); +void PartyListMenu_HandleMenu1(void); void sub_8026A78(void); void sub_8026A94(void); void sub_8026AB0(void); void sub_8026B10(void); void sub_8026B48(void); void sub_8026B64(void); -void sub_8026C14(void); +void PartyListMenu_HandleMenu2(void); void sub_8026CF0(void); void sub_8026D0C(void); void sub_8026D6C(void); -void sub_8026D88(void); +void PartyListMenu_GotoFallbackState(void); -static void sub_8026074(s32 newState); +static void SetPartyListMenuState(s32 newState); static void sub_802608C(void); -bool8 sub_8025EF4(PokemonStruct1 *pokeStruct) +bool8 CreatePartyListMenu(PokemonStruct1 *pokeStruct) { s32 i; @@ -85,46 +85,46 @@ bool8 sub_8025EF4(PokemonStruct1 *pokeStruct) sUnknown_203B2B8->menuAction2 = 0; sUnknown_203B2B8->menuAction3 = 0; sUnknown_203B2B8->unk8 = FALSE; - sub_8026074(0); + SetPartyListMenuState(PARTY_LIST_STATE_INIT); return TRUE; } u32 sub_8025F68(void) { switch (sUnknown_203B2B8->state) { - case 0: - sub_8026074(1); + case PARTY_LIST_STATE_INIT: + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU); break; - case 1: - case 2: - sub_80268CC(); + case PARTY_LIST_STATE_MAIN_MENU: + case PARTY_LIST_STATE_MAIN_MENU_1: + PartyListMenu_HandleMenu1(); break; - case 3: + case PARTY_LIST_STATE_SUMMARY: sub_8026A78(); break; - case 4: + case PARTY_LIST_STATE_CHECK_IQ: sub_8026A94(); break; - case 0xc: + case PARTY_LIST_STATE_SAY_FAREWELL: sub_8026AB0(); break; - case 0xd: + case PARTY_LIST_STATE_CONFIRM_SAY_FAREWELL: sub_8026B10(); break; - case 0xe: + case PARTY_LIST_STATE_GIVE_GUMMI: sub_8026B48(); break; - case 0x12: - case 0x13: + case PARTY_LIST_STATE_GIVE_ITEM: + case PARTY_LIST_STATE_GIVE_ITEM_1: sub_8026B64(); break; case 0x14: - sub_8026C14(); + PartyListMenu_HandleMenu2(); break; case 0x15: sub_8026CF0(); break; - case 0x16: + case PARTY_LIST_STATE_MOVES: case 0x17: sub_8026D0C(); break; @@ -132,9 +132,9 @@ u32 sub_8025F68(void) sub_8026D6C(); break; default: - sub_8026D88(); + PartyListMenu_GotoFallbackState(); break; - case 0x19: + case PARTY_LIST_STATE_EXIT: return 3; } return 0; @@ -145,7 +145,7 @@ bool8 sub_802604C(void) return sUnknown_203B2B8->unk8; } -void sub_8026058(void) +void CleanPartyListMenu(void) { if (sUnknown_203B2B8) { MemoryFree(sUnknown_203B2B8); @@ -153,11 +153,11 @@ void sub_8026058(void) } } -static void sub_8026074(s32 newState) +static void SetPartyListMenuState(s32 newState) { sUnknown_203B2B8->state = newState; sub_802608C(); - sub_80261D0(); + HandlePartyListMenuCallback(); } static void sub_802608C(void) @@ -166,21 +166,21 @@ static void sub_802608C(void) sub_8006518(sUnknown_203B2B8->unk220); switch(sUnknown_203B2B8->state) { - case 1: - case 2: + case PARTY_LIST_STATE_MAIN_MENU: + case PARTY_LIST_STATE_MAIN_MENU_1: for(index = 0; index < 4; index++) { sUnknown_203B2B8->unk220[index] = sUnknown_80DD310; } sUnknown_203B2B8->unk220[0] = sUnknown_80DD358; sUnknown_203B2B8->unk220[3] = sUnknown_80DD370; - sub_80264CC(); + PartyListMenu_CreateMenu1(); sUnknown_203B2B8->unk220[2] = sUnknown_80DD328; sub_8012CAC(&sUnknown_203B2B8->unk220[2], sUnknown_203B2B8->unk16C); sUnknown_203B2B8->unk220[2].unkC = 9; break; case 0x14: - sub_802678C(); + PartyListMenu_CreateMenu2(); sUnknown_203B2B8->unk220[2] = sUnknown_80DD340; sub_8012CAC(&sUnknown_203B2B8->unk220[2], sUnknown_203B2B8->unk16C); break; @@ -195,38 +195,38 @@ static void sub_802608C(void) sub_800641C(sUnknown_203B2B8->unk220, TRUE, TRUE); } -void sub_80261D0(void) +void HandlePartyListMenuCallback(void) { Item item; switch(sUnknown_203B2B8->state) { - case 1: + case PARTY_LIST_STATE_MAIN_MENU: sub_8026E08(3); sub_8026DAC(0,&sUnknown_203B2B8->item2); PrintColoredPokeNameToBuffer(gAvailablePokemonNames,sUnknown_203B2B8->pokeStruct,7); PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,sUnknown_203B2B8->pokeStruct,6); sub_8012D60(&sUnknown_203B2B8->unk7C,sUnknown_203B2B8->unk16C,0,sUnknown_203B2B8->unk20C,sUnknown_203B2B8->menuAction1,2); break; - case 2: + case PARTY_LIST_STATE_MAIN_MENU_1: sub_8026E08(3); sub_8026DAC(0,&sUnknown_203B2B8->item2); PrintColoredPokeNameToBuffer(gAvailablePokemonNames,sUnknown_203B2B8->pokeStruct,7); PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,sUnknown_203B2B8->pokeStruct,6); sub_8012EA4(&sUnknown_203B2B8->unk7C,1); break; - case 3: + case PARTY_LIST_STATE_SUMMARY: sub_8024458(sUnknown_203B2B8->pokeSpecies,2); break; - case 4: - sub_801BEEC(sUnknown_203B2B8->pokeSpecies); + case PARTY_LIST_STATE_CHECK_IQ: + CreateIQSkillMenu(sUnknown_203B2B8->pokeSpecies); break; - case 0xe: + case PARTY_LIST_STATE_GIVE_GUMMI: sub_80227B8(sUnknown_203B2B8->pokeStruct); break; - case 0x12: + case PARTY_LIST_STATE_GIVE_ITEM: sub_801A5D8(1,0,NULL,10); break; - case 0x13: + case PARTY_LIST_STATE_GIVE_ITEM_1: sub_801A8D0(TRUE); break; case 0x14: @@ -237,41 +237,41 @@ void sub_80261D0(void) HeldItemToSlot(&item,&sUnknown_203B2B8->item1); sub_801B3C0(&item); break; - case 0x16: + case PARTY_LIST_STATE_MOVES: unk_CopyMoves4To8(sUnknown_203B2B8->moves,sUnknown_203B2B8->pokeStruct->moves); sub_801EE10(3,sUnknown_203B2B8->pokeSpecies,sUnknown_203B2B8->moves,0,NULL,0); break; case 0x17: sub_801F1B0(TRUE, FALSE); break; - case 0xc: - sub_8026878(); + case PARTY_LIST_STATE_SAY_FAREWELL: + PartyListMenu_BuildYesNoMenu(); sub_8014248(sUnknown_80DD388,0,3,sUnknown_203B2B8->unk1BC,0,4,0,0,0x101); break; - case 0xd: - sub_8026878(); + case PARTY_LIST_STATE_CONFIRM_SAY_FAREWELL: + PartyListMenu_BuildYesNoMenu(); sub_8014248(sUnknown_80DD420,0,3,sUnknown_203B2B8->unk1BC,0,4,0,0,0x101); break; case 0x18: GetLinkedSequence(sUnknown_203B2B8->moveIndex, sUnknown_203B2B8->moves,sUnknown_203B2B8->moveIDs); sub_801F808(sUnknown_203B2B8->moveIDs); break; - case 5: - sUnknown_203B2B8->fallbackState = 0x19; + case PARTY_LIST_STATE_JOIN_TEAM: + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_EXIT; PlaySound(0xcf); sub_80141B4(sUnknown_80DD4C4,0,0,0x101); break; - case 6: - sUnknown_203B2B8->fallbackState = 0x19; + case PARTY_LIST_STATE_STANDBY: + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_EXIT; PlaySound(0xcf); sub_80141B4(sUnknown_80DD4F4,0,0,0x101); break; - case 7: - sUnknown_203B2B8->fallbackState = 0x19; + case PARTY_LIST_STATE_MAKE_LEADER: + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_EXIT; PlaySound(0xcc); sub_80141B4(sBecameLeader,0,0,0x101); break; - case 8: + case PARTY_LIST_STATE_POKEMON_FAREWELL: sUnknown_203B2B8->fallbackState = 9; PlaySound(0xca); sub_80141B4(sUnknown_80DD564,0,0,0x101); @@ -281,33 +281,33 @@ void sub_80261D0(void) sub_808D31C(sUnknown_203B2B8->pokeStruct); sUnknown_203B2B8->unk8 = TRUE; break; - case 0xf: - sUnknown_203B2B8->fallbackState = 2; + case PARTY_LIST_STATE_GIVEN_ITEM: + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_MAIN_MENU_1; sub_80141B4(sUnknown_80DD594,0,0,0x101); break; - case 0x10: - sUnknown_203B2B8->fallbackState = 2; + case PARTY_LIST_STATE_GIVEN_ITEM_HELD_ITEM: + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_MAIN_MENU_1; sub_80141B4(sUnknown_80DD5B8,0,0,0x101); break; - case 0x11: - sUnknown_203B2B8->fallbackState = 2; + case PARTY_LIST_STATE_TAKE_ITEM: + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_MAIN_MENU_1; sub_80141B4(sUnknown_80DD60C,0,0,0x101); break; case 10: - sUnknown_203B2B8->fallbackState = 0x19; + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_EXIT; sub_80141B4(sUnknown_80DD60C,0,0,0x101); break; case 0xb: - sUnknown_203B2B8->fallbackState = 0x19; + sUnknown_203B2B8->fallbackState = PARTY_LIST_STATE_EXIT; sub_80141B4(sUnknown_80DD63C,0,0,0x101); break; - case 0: - case 0x19: + case PARTY_LIST_STATE_INIT: + case PARTY_LIST_STATE_EXIT: break; } } -void sub_80264CC(void) { +void PartyListMenu_CreateMenu1(void) { PokemonStruct1 *pokeStruct; s32 index; s32 one; @@ -322,7 +322,7 @@ void sub_80264CC(void) { if(temp = pokeStruct->unk0 >> 1, one = 1, temp & one) { sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuStandBy; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 7; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_STANDBY; if(!sub_8026E88(pokeStruct)) { sUnknown_203B2B8->unk20C[loopMax] = 1; @@ -332,14 +332,14 @@ void sub_80264CC(void) { if(sub_80023E4(8) && !pokeStruct->isTeamLeader) { sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuMakeLeader; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 8; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_MAKE_LEADER; loopMax += 1; } } else { sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuJoinTeam; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 6; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_JOIN_TEAM; if(!sub_808D750(sUnknown_203B2B8->pokeSpecies)) { sUnknown_203B2B8->unk20C[loopMax] = 1; @@ -348,7 +348,7 @@ void sub_80264CC(void) { } sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuGiveGummi; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 10; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_GIVE_GUMMI; if(!HasGummiItem()) { sUnknown_203B2B8->unk20C[loopMax] = 1; @@ -356,7 +356,7 @@ void sub_80264CC(void) { loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuGive; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 0xB; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_GIVE_ITEM; if(GetNumberOfFilledInventorySlots() == 0) { sUnknown_203B2B8->unk20C[loopMax] = 1; @@ -364,7 +364,7 @@ void sub_80264CC(void) { loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuTake; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 0xC; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_TAKE_ITEM; if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE || sUnknown_203B2B8->item2.id == ITEM_NOTHING) { sUnknown_203B2B8->unk20C[loopMax] = 1; @@ -374,7 +374,7 @@ void sub_80264CC(void) { if((temp = pokeStruct->unk0 >> 1, one = 1, temp & one) == 0) { sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuSayFarewell; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 9; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_SAY_FAREWELL; if(!sub_8026EB8(pokeStruct)) { sUnknown_203B2B8->unk20C[loopMax] = 1; @@ -383,16 +383,16 @@ void sub_80264CC(void) { } sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuSummary; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 4; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_SUMMARY; loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuMoves; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 0xD; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_MOVES; loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuCheckIQ; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 5; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_CHECK_IQ; loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = NULL; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 1; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_NULL; for(index = 0; index < loopMax; index++) { @@ -412,23 +412,23 @@ void sub_80264CC(void) { } } -void sub_802678C(void) +void PartyListMenu_CreateMenu2(void) { s32 index; s32 loopMax = 0; MemoryFill16(sUnknown_203B2B8->unk20C, 0, sizeof(sUnknown_203B2B8->unk20C)); sUnknown_203B2B8->unk16C[loopMax].text = sPartyMenuGive; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 0xB; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_GIVE_ITEM; if(GetNumberOfFilledInventorySlots() == 0) { sUnknown_203B2B8->unk20C[0] = 1; } loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = gCommonInfo[0]; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 4; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_INFO; loopMax += 1; sUnknown_203B2B8->unk16C[loopMax].text = NULL; - sUnknown_203B2B8->unk16C[loopMax].menuAction = 1; + sUnknown_203B2B8->unk16C[loopMax].menuAction = PARTY_LIST_MENU_NULL; for(index = 0; index < loopMax; index++) { @@ -448,19 +448,19 @@ void sub_802678C(void) } } -void sub_8026878(void) { +void PartyListMenu_BuildYesNoMenu(void) { s32 loopMax = 0; sUnknown_203B2B8->unk1BC[loopMax].text = gCommonYes[0]; - sUnknown_203B2B8->unk1BC[loopMax].menuAction = 2; + sUnknown_203B2B8->unk1BC[loopMax].menuAction = PARTY_LIST_MENU_YES; loopMax += 1; sUnknown_203B2B8->unk1BC[loopMax].text = gCommonNo[0]; - sUnknown_203B2B8->unk1BC[loopMax].menuAction = 3; + sUnknown_203B2B8->unk1BC[loopMax].menuAction = PARTY_LIST_MENU_NO; loopMax += 1; sUnknown_203B2B8->unk1BC[loopMax].text = NULL; - sUnknown_203B2B8->unk1BC[loopMax].menuAction = 1; + sUnknown_203B2B8->unk1BC[loopMax].menuAction = PARTY_LIST_MENU_NULL; } -void sub_80268CC(void) +void PartyListMenu_HandleMenu1(void) { PokemonStruct1 *playerPokemon; PokemonStruct1 *pokeStruct; @@ -468,11 +468,11 @@ void sub_80268CC(void) s32 choice; choice = 0; - if ((sub_8012FD8(&sUnknown_203B2B8->unk7C) == 0) && (sub_8013114(&sUnknown_203B2B8->unk7C,&choice), choice != 1)) { + if ((sub_8012FD8(&sUnknown_203B2B8->unk7C) == 0) && (sub_8013114(&sUnknown_203B2B8->unk7C,&choice), choice != PARTY_LIST_MENU_NULL)) { sUnknown_203B2B8->menuAction1 = choice; } switch(choice) { - case 6: + case PARTY_LIST_MENU_JOIN_TEAM: if (sub_808D750(sUnknown_203B2B8->pokeSpecies)) { #ifdef NONMATCHING @@ -488,15 +488,15 @@ void sub_80268CC(void) nullsub_104(); } sub_808ED00(); - sub_8026074(5); + SetPartyListMenuState(PARTY_LIST_STATE_JOIN_TEAM); break; - case 7: + case PARTY_LIST_MENU_STANDBY: sUnknown_203B2B8->pokeStruct->unk0 &= ~(FLAG_ON_TEAM); nullsub_104(); sub_808ED00(); - sub_8026074(6); + SetPartyListMenuState(PARTY_LIST_STATE_STANDBY); break; - case 8: + case PARTY_LIST_MENU_MAKE_LEADER: pokeStruct2 = &gRecruitedPokemonRef->pokemon[sUnknown_203B2B8->pokeSpecies]; playerPokemon = GetPlayerPokemonStruct(); @@ -506,21 +506,21 @@ void sub_80268CC(void) nullsub_104(); } sub_808ED00(); - sub_8026074(7); + SetPartyListMenuState(PARTY_LIST_STATE_MAKE_LEADER); break; - case 9: - sub_8026074(0xc); + case PARTY_LIST_MENU_SAY_FAREWELL: + SetPartyListMenuState(PARTY_LIST_STATE_SAY_FAREWELL); break; - case 0xd: - sub_8026074(0x16); + case PARTY_LIST_MENU_MOVES: + SetPartyListMenuState(PARTY_LIST_STATE_MOVES); break; - case 10: - sub_8026074(0xe); + case PARTY_LIST_MENU_GIVE_GUMMI: + SetPartyListMenuState(PARTY_LIST_STATE_GIVE_GUMMI); break; - case 0xb: - sub_8026074(0x12); + case PARTY_LIST_MENU_GIVE_ITEM: + SetPartyListMenuState(PARTY_LIST_STATE_GIVE_ITEM); break; - case 0xc: + case PARTY_LIST_MENU_TAKE_ITEM: PlaySound(0x14d); if (sUnknown_203B2B8->item2.id != ITEM_NOTHING) { AddHeldItemToInventory(&sUnknown_203B2B8->item2); @@ -530,16 +530,16 @@ void sub_80268CC(void) sUnknown_203B2B8->item2.quantity = 0; GivePokemonItem(sUnknown_203B2B8->pokeSpecies,&sUnknown_203B2B8->item2); nullsub_104(); - sub_8026074(0x11); + SetPartyListMenuState(PARTY_LIST_STATE_TAKE_ITEM); break; - case 4: - sub_8026074(3); + case PARTY_LIST_MENU_SUMMARY: + SetPartyListMenuState(PARTY_LIST_STATE_SUMMARY); break; - case 5: - sub_8026074(4); + case PARTY_LIST_MENU_CHECK_IQ: + SetPartyListMenuState(PARTY_LIST_STATE_CHECK_IQ); break; - case 1: - sub_8026074(0x19); + case PARTY_LIST_MENU_NULL: + SetPartyListMenuState(PARTY_LIST_STATE_EXIT); break; } @@ -552,7 +552,7 @@ void sub_8026A78(void) case 2: case 3: sub_802453C(); - sub_8026074(2); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; case 0: case 1: @@ -566,8 +566,8 @@ void sub_8026A94(void) { case 2: case 3: - sub_801BF98(); - sub_8026074(2); + CleanIQSkillMenu(); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; case 0: case 1: @@ -592,13 +592,13 @@ void sub_8026AB0(void) { case 1: case 3: - sub_8026074(2); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; case 2: if (sub_8026AB0_sub()) - sub_8026074(0xD); + SetPartyListMenuState(PARTY_LIST_STATE_CONFIRM_SAY_FAREWELL); else - sub_8026074(8); + SetPartyListMenuState(PARTY_LIST_STATE_POKEMON_FAREWELL); break; } } @@ -613,10 +613,10 @@ void sub_8026B10(void) { case 1: case 3: - sub_8026074(2); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; case 2: - sub_8026074(8); + SetPartyListMenuState(PARTY_LIST_STATE_POKEMON_FAREWELL); break; } } @@ -630,7 +630,7 @@ void sub_8026B48(void) case 2: case 3: sub_8022908(); - sub_8026074(2); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; case 0: case 1: @@ -647,18 +647,18 @@ void sub_8026B64(void) sUnknown_203B2B8->id = sub_801A8AC(); sUnknown_203B2B8->item1.id = gTeamInventoryRef->teamItems[sUnknown_203B2B8->id].id; sUnknown_203B2B8->item1.quantity = gTeamInventoryRef->teamItems[sUnknown_203B2B8->id].quantity; - sub_8026074(0x14); + SetPartyListMenuState(0x14); break; case 4: sUnknown_203B2B8->id = sub_801A8AC(); sUnknown_203B2B8->item1.id = gTeamInventoryRef->teamItems[sUnknown_203B2B8->id].id; sUnknown_203B2B8->item1.quantity = gTeamInventoryRef->teamItems[sUnknown_203B2B8->id].quantity; sub_8099690(0); - sub_8026074(0x15); + SetPartyListMenuState(0x15); break; case 2: sub_801A928(); - sub_8026074(2); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; case 0: case 1: @@ -666,7 +666,7 @@ void sub_8026B64(void) } } -void sub_8026C14(void) +void PartyListMenu_HandleMenu2(void) { u32 nextState; struct unkStruct_8090F58 temp; @@ -675,19 +675,19 @@ void sub_8026C14(void) menuAction = 0; sub_801A6E8(FALSE); - if ((sub_8012FD8(&sUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&sUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) { + if ((sub_8012FD8(&sUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&sUnknown_203B2B8->unkCC,&menuAction), menuAction != PARTY_LIST_MENU_NULL)) { sUnknown_203B2B8->menuAction2 = menuAction; } switch(menuAction) { - case 0xb: - nextState = 0xF; + case PARTY_LIST_MENU_GIVE_ITEM: + nextState = PARTY_LIST_STATE_GIVEN_ITEM; PlaySound(0x14d); ShiftItemsDownFrom(sUnknown_203B2B8->id); FillInventoryGaps(); if (sUnknown_203B2B8->item2.id != ITEM_NOTHING) { AddHeldItemToInventory(&sUnknown_203B2B8->item2); - nextState = 0x10; + nextState = PARTY_LIST_STATE_GIVEN_ITEM_HELD_ITEM; } HeldItemToSlot(&slot,&sUnknown_203B2B8->item1); temp.unk0 = 0; @@ -698,14 +698,14 @@ void sub_8026C14(void) GivePokemonItem(sUnknown_203B2B8->pokeSpecies,&sUnknown_203B2B8->item1); sub_801A928(); nullsub_104(); - sub_8026074(nextState); + SetPartyListMenuState(nextState); break; - case 4: + case PARTY_LIST_MENU_INFO: sub_8099690(0); - sub_8026074(0x15); + SetPartyListMenuState(0x15); break; - case 1: - sub_8026074(0x13); + case PARTY_LIST_MENU_NULL: + SetPartyListMenuState(PARTY_LIST_STATE_GIVE_ITEM_1); break; } } @@ -717,7 +717,7 @@ void sub_8026CF0(void) case 2: case 3: sub_801B450(); - sub_8026074(0x13); + SetPartyListMenuState(PARTY_LIST_STATE_GIVE_ITEM_1); break; case 0: case 1: @@ -737,11 +737,11 @@ void sub_8026D0C(void) case 4: sUnknown_203B2B8->moveIndex = sub_801F194(); sUnknown_203B2B8->moveID = sUnknown_203B2B8->moves[sUnknown_203B2B8->moveIndex].id; - sub_8026074(0x18); + SetPartyListMenuState(0x18); break; case 2: sub_801F214(); - sub_8026074(2); + SetPartyListMenuState(PARTY_LIST_STATE_MAIN_MENU_1); break; } } @@ -753,7 +753,7 @@ void sub_8026D6C(void) case 2: case 3: sub_801F8D0(); - sub_8026074(0x17); + SetPartyListMenuState(0x17); break; case 0: case 1: @@ -761,12 +761,12 @@ void sub_8026D6C(void) } } -void sub_8026D88(void) +void PartyListMenu_GotoFallbackState(void) { s32 temp; if(sub_80144A4(&temp) == 0) { - sub_8026074(sUnknown_203B2B8->fallbackState); + SetPartyListMenuState(sUnknown_203B2B8->fallbackState); } } @@ -883,7 +883,7 @@ void sub_8026FA4(void) sUnknown_203B2B8->item2.id = ITEM_NOTHING; sUnknown_203B2B8->item2.quantity = 0; GivePokemonItem(sUnknown_203B2B8->pokeSpecies, &sUnknown_203B2B8->item2); - sub_8026074(0xA); + SetPartyListMenuState(0xA); break; case 2: PlaySound(0x14d); @@ -899,11 +899,11 @@ void sub_8026FA4(void) sUnknown_203B2B8->item2.id = ITEM_NOTHING; sUnknown_203B2B8->item2.quantity = 0; GivePokemonItem(sUnknown_203B2B8->pokeSpecies, &sUnknown_203B2B8->item2); - sub_8026074(0xB); + SetPartyListMenuState(0xB); break; case 0: default: - sub_8026074(0x19); + SetPartyListMenuState(PARTY_LIST_STATE_EXIT); break; } } diff --git a/src/pelipper_board.c b/src/pelipper_board.c index 648320d61..8c0c80796 100644 --- a/src/pelipper_board.c +++ b/src/pelipper_board.c @@ -220,13 +220,13 @@ void CreatePelipperBoardMenu(void) loopMax = 0; MemoryFill16(gPelipperBoard->unkFC,0,sizeof(gPelipperBoard->unkFC)); gPelipperBoard->menuItems[0].text = gPelipperBoard_BulletinBoard; - gPelipperBoard->menuItems[0].menuAction = 2; + gPelipperBoard->menuItems[0].menuAction = PELIPPER_BOARD_BULLETIN_BOARD; if ((HasNoPelipperBoardJobs())) { gPelipperBoard->unkFC[0] = 1; } loopMax += 1; gPelipperBoard->menuItems[loopMax].text = gPelipperBoard_JobList; - gPelipperBoard->menuItems[loopMax].menuAction = 3; + gPelipperBoard->menuItems[loopMax].menuAction = PELIPPER_BOARD_JOB_LIST; if(HasNoAcceptedJobs()) { @@ -235,7 +235,7 @@ void CreatePelipperBoardMenu(void) loopMax += 1; gPelipperBoard->menuItems[loopMax].text = NULL; - gPelipperBoard->menuItems[loopMax].menuAction = 1; + gPelipperBoard->menuItems[loopMax].menuAction = PELIPPER_BOARD_NULL; for(index = 0; index < loopMax; index++) { @@ -259,7 +259,7 @@ void sub_802EC10(void) { s32 index; s32 loopMax = 0; gPelipperBoard->menuItems[loopMax].text = gCommonAccept[0]; - gPelipperBoard->menuItems[loopMax].menuAction = 4; + gPelipperBoard->menuItems[loopMax].menuAction = PELIPPER_BOARD_ACCEPT; if((IsMailinJobSlot(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex))) || (GetNumAcceptedJobs() >= MAX_ACCEPTED_JOBS)) { @@ -268,10 +268,10 @@ void sub_802EC10(void) { loopMax += 1; gPelipperBoard->menuItems[loopMax].text = gCommonInfo[0]; - gPelipperBoard->menuItems[loopMax].menuAction = 5; + gPelipperBoard->menuItems[loopMax].menuAction = PELIPPER_BOARD_INFO; loopMax += 1; gPelipperBoard->menuItems[loopMax].text = NULL; - gPelipperBoard->menuItems[loopMax].menuAction = 1; + gPelipperBoard->menuItems[loopMax].menuAction = PELIPPER_BOARD_NULL; for(index = 0; index < loopMax; index++) { @@ -280,7 +280,7 @@ void sub_802EC10(void) { return; } - gPelipperBoard->menuAction2 = 5; + gPelipperBoard->menuAction2 = PELIPPER_BOARD_INFO; } void sub_802ECB4(void) @@ -290,29 +290,27 @@ void sub_802ECB4(void) if(!sub_8012FD8(&gPelipperBoard->unk6C)) { sub_8013114(&gPelipperBoard->unk6C, &menuAction); - if(menuAction != 1) gPelipperBoard->menuAction1 = menuAction; + if(menuAction != PELIPPER_BOARD_NULL) gPelipperBoard->menuAction1 = menuAction; } switch(menuAction) { - // Bulletin Board - case 2: + case PELIPPER_BOARD_BULLETIN_BOARD: if(!HasNoPelipperBoardJobs()) SetPelipperBoardState(4); else sub_8012EA4(&gPelipperBoard->unk6C, 1); break; - // Job List - case 3: + case PELIPPER_BOARD_JOB_LIST: if(!HasNoAcceptedJobs()) SetPelipperBoardState(PELIPPER_JOB_LIST_MENU); else sub_8012EA4(&gPelipperBoard->unk6C, 1); break; - case 5: + case PELIPPER_BOARD_INFO: SetPelipperBoardState(2); break; - case 1: + case PELIPPER_BOARD_NULL: SetPelipperBoardState(PELIPPER_BOARD_EXIT); break; } @@ -322,15 +320,15 @@ void sub_802ED4C(void) { switch(sub_802C1E4(TRUE)) { - case 3: + case 3: // A button gPelipperBoard->jobIndex = sub_802C26C(); SetPelipperBoardState(6); break; - case 4: + case 4: // Start button gPelipperBoard->jobIndex = sub_802C26C(); SetPelipperBoardState(7); break; - case 2: + case 2: // B button sub_802C2D4(); SetPelipperBoardState(MAIN_PELIPPER_BOARD_MENU); break; @@ -349,12 +347,11 @@ void sub_802EDBC(void) if(!sub_8012FD8(&gPelipperBoard->unk6C)) { sub_8013114(&gPelipperBoard->unk6C, &menuAction); - if(menuAction != 1) gPelipperBoard->menuAction2 = menuAction; + if(menuAction != PELIPPER_BOARD_NULL) gPelipperBoard->menuAction2 = menuAction; } switch(menuAction) { - // Accept - case 4: + case PELIPPER_BOARD_ACCEPT: PlaySound(0x133); mail = GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex); switch(mail->mailType) @@ -394,11 +391,10 @@ void sub_802EDBC(void) break; } break; - // Info - case 5: + case PELIPPER_BOARD_INFO: SetPelipperBoardState(PELIPPER_JOB_INFO); break; - case 1: + case PELIPPER_BOARD_NULL: SetPelipperBoardState(5); break; } diff --git a/sym_ewram2.txt b/sym_ewram2.txt index 0ceb00a8c..fa457b3be 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -130,8 +130,8 @@ gUnknown_203B1FC: /* 203B1FC (sub_80151C0 - sub_8015F84) */ .include "src/code_801AFA4.o" .include "src/code_801B3C0.o" .include "src/code_801B60C.o" -.include "src/code_801BEEC.o" -.include "src/code_801C244.o" +.include "src/iq_skill_menu.o" +.include "src/iq_skill_list_menu.o" .include "src/code_801C620.o" .include "src/code_801C8C4.o" .include "src/code_801D014.o" From 1aadb2f095aa724b5e564a522e9401677f2ea0f9 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 23 Jun 2024 22:07:12 -0700 Subject: [PATCH 29/39] move files to better names --- .../{code_801C620.h => iq_skill_info_menu.h} | 6 +++--- include/iq_skill_list_menu.h | 2 +- ld_script.txt | 4 ++-- .../{code_801C620.h => iq_skill_info_menu.h} | 0 .../{code_801C244.h => iq_skill_list_menu.h} | 0 src/{code_801C620.c => iq_skill_info_menu.c} | 4 ++-- src/iq_skill_list_menu.c | 13 +++++++------ src/iq_skill_menu.c | 18 +++++++++--------- sym_ewram2.txt | 2 +- 9 files changed, 25 insertions(+), 24 deletions(-) rename include/{code_801C620.h => iq_skill_info_menu.h} (82%) rename src/data/{code_801C620.h => iq_skill_info_menu.h} (100%) rename src/data/{code_801C244.h => iq_skill_list_menu.h} (100%) rename src/{code_801C620.c => iq_skill_info_menu.c} (98%) diff --git a/include/code_801C620.h b/include/iq_skill_info_menu.h similarity index 82% rename from include/code_801C620.h rename to include/iq_skill_info_menu.h index 35830ef5c..3f2fed3eb 100644 --- a/include/code_801C620.h +++ b/include/iq_skill_info_menu.h @@ -1,5 +1,5 @@ -#ifndef GUARD_CODE_801C620_H -#define GUARD_CODE_801C620_H +#ifndef GUARD_IQ_SKILL_INFO_MENU_H +#define GUARD_IQ_SKILL_INFO_MENU_H #include "structs/menu.h" #include "structs/subStruct_203B240.h" @@ -24,4 +24,4 @@ bool8 CreateIQSkillInfoMenu(u8 iqSkill); u32 HandleIQSkillInfoMenuState(void); void CleanIQSkillInfoMenu(void); -#endif // GUARD_CODE_801C620_H +#endif // GUARD_IQ_SKILL_INFO_MENU_H diff --git a/include/iq_skill_list_menu.h b/include/iq_skill_list_menu.h index 4a0d71626..4f08e311e 100644 --- a/include/iq_skill_list_menu.h +++ b/include/iq_skill_list_menu.h @@ -22,7 +22,7 @@ bool8 HasNoAvailIQSkills(s16 species); bool8 CreateIQSkillListMenu(s16 species, u32 index, u32); u32 HandleIQSkillListMenuInput(bool8); s32 GetIQSkillSelection(void); -void sub_801C3B0(bool8); +void RedrawIQSkillListMenu(bool8); void CleanIQSkillListMenu(void); void BuildIQSkillList(void); diff --git a/ld_script.txt b/ld_script.txt index 6e15a1ec8..6a62971de 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -117,7 +117,7 @@ SECTIONS { src/code_801B60C.o(.text); src/iq_skill_menu.o(.text); src/iq_skill_list_menu.o(.text); - src/code_801C620.o(.text); + src/iq_skill_info_menu.o(.text); src/code_801C8C4.o(.text); src/code_801D014.o(.text); src/code_801D9E4.o(.text); @@ -455,7 +455,7 @@ SECTIONS { src/code_801B60C.o(.rodata); src/iq_skill_menu.o(.rodata); src/iq_skill_list_menu.o(.rodata); - src/code_801C620.o(.rodata); + src/iq_skill_info_menu.o(.rodata); src/code_801C8C4.o(.rodata); src/code_801D014.o(.rodata); src/code_801D9E4.o(.rodata); diff --git a/src/data/code_801C620.h b/src/data/iq_skill_info_menu.h similarity index 100% rename from src/data/code_801C620.h rename to src/data/iq_skill_info_menu.h diff --git a/src/data/code_801C244.h b/src/data/iq_skill_list_menu.h similarity index 100% rename from src/data/code_801C244.h rename to src/data/iq_skill_list_menu.h diff --git a/src/code_801C620.c b/src/iq_skill_info_menu.c similarity index 98% rename from src/code_801C620.c rename to src/iq_skill_info_menu.c index 496bfa1fe..277f610dc 100644 --- a/src/code_801C620.c +++ b/src/iq_skill_info_menu.c @@ -2,7 +2,7 @@ #include "globaldata.h" #include "code_80118A4.h" #include "code_80130A8.h" -#include "code_801C620.h" +#include "iq_skill_info_menu.h" #include "code_8097DD0.h" #include "input.h" #include "memory.h" @@ -17,7 +17,7 @@ extern u8 gAvailablePokemonNames[]; // 202DF98 static EWRAM_DATA_2 struct unkStruct_203B240 *sUnknown_203B240 = {0}; -#include "data/code_801C620.h" +#include "data/iq_skill_info_menu.h" static void SetIQSkillInfoMenuState(s32 newState); static void sub_801C6E4(void); diff --git a/src/iq_skill_list_menu.c b/src/iq_skill_list_menu.c index 4e0c0faf0..b7fcf6318 100644 --- a/src/iq_skill_list_menu.c +++ b/src/iq_skill_list_menu.c @@ -1,5 +1,6 @@ #include "global.h" #include "globaldata.h" +#include "constants/input.h" #include "code_80118A4.h" #include "code_80130A8.h" #include "iq_skill_list_menu.h" @@ -14,7 +15,7 @@ extern u8 gUnknown_202DEA8[]; static EWRAM_DATA_2 struct unkStruct_203B23C *sUnknown_203B23C = {0}; -#include "data/code_801C244.h" +#include "data/iq_skill_list_menu.h" static void sub_801C440(void); @@ -59,13 +60,13 @@ u32 HandleIQSkillListMenuInput(bool8 a0) } switch (GetKeyPress(&sUnknown_203B23C->s24.s0.input)) { - case 2: + case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; - case 1: + case INPUT_A_BUTTON: PlayMenuSoundEffect(0); return 3; - case 4: + case INPUT_START_BUTTON: PlayMenuSoundEffect(4); return 4; default: @@ -83,7 +84,7 @@ s32 GetIQSkillSelection(void) return (sUnknown_203B23C->s24.s0.input.unk1E * sUnknown_203B23C->s24.s0.input.unk1C) + sUnknown_203B23C->s24.s0.input.menuIndex; } -void sub_801C3B0(bool8 r0) +void RedrawIQSkillListMenu(bool8 addCursor) { ResetUnusedInputStruct(); sub_800641C(sUnknown_203B23C->s24.s0.unk3C, FALSE, FALSE); @@ -92,7 +93,7 @@ void sub_801C3B0(bool8 r0) sub_801C440(); BuildIQSkillList(); - if (r0) + if (addCursor) AddMenuCursorSprite(&sUnknown_203B23C->s24.s0.input); } diff --git a/src/iq_skill_menu.c b/src/iq_skill_menu.c index 1e3c93c4a..55bd8513f 100644 --- a/src/iq_skill_menu.c +++ b/src/iq_skill_menu.c @@ -3,7 +3,7 @@ #include "code_80118A4.h" #include "iq_skill_menu.h" #include "iq_skill_list_menu.h" -#include "code_801C620.h" +#include "iq_skill_info_menu.h" #include "common_strings.h" #include "input.h" #include "memory.h" @@ -20,8 +20,8 @@ static void SetIQSkillMenuState(s32 newState); static void sub_801BFCC(void); static void HandleIQSkillMenuState(void); static void BuildIQSkillMenuActions(void); -static void sub_801C118(void); -static void sub_801C1A0(void); +static void HandleIQSkillMenuMain(void); +static void HandleIQSkillMenuAction(void); static void HandleIQSkillMenuInfo(void); bool8 CreateIQSkillMenu(s16 species) @@ -47,10 +47,10 @@ u32 sub_801BF48(void) return 3; case IQ_SKILL_MENU_STATE_INIT: case IQ_SKILL_MENU_STATE_MAIN: - sub_801C118(); + HandleIQSkillMenuMain(); break; case 2: - sub_801C1A0(); + HandleIQSkillMenuAction(); break; case IQ_SKILL_MENU_STATE_INFO: HandleIQSkillMenuInfo(); @@ -98,10 +98,10 @@ static void HandleIQSkillMenuState(void) CreateIQSkillListMenu(sUnknown_203B238->species, 0, 8); break; case IQ_SKILL_MENU_STATE_MAIN: - sub_801C3B0(TRUE); + RedrawIQSkillListMenu(TRUE); break; case 2: - BuildIQSkillList(); // Build list of IQ Skills + BuildIQSkillList(); BuildIQSkillMenuActions(); sub_8012D60(&sUnknown_203B238->unk74, sUnknown_203B238->unk34, NULL, NULL, sUnknown_203B238->menuAction, 2); break; @@ -143,7 +143,7 @@ static void BuildIQSkillMenuActions(void) sUnknown_203B238->menuAction = IQ_SKILL_MENU_SWITCH; } -static void sub_801C118(void) +static void HandleIQSkillMenuMain(void) { switch (HandleIQSkillListMenuInput(TRUE)) { case 3: @@ -166,7 +166,7 @@ static void sub_801C118(void) } } -static void sub_801C1A0(void) +static void HandleIQSkillMenuAction(void) { s32 menuAction; diff --git a/sym_ewram2.txt b/sym_ewram2.txt index fa457b3be..bf3164f30 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -132,7 +132,7 @@ gUnknown_203B1FC: /* 203B1FC (sub_80151C0 - sub_8015F84) */ .include "src/code_801B60C.o" .include "src/iq_skill_menu.o" .include "src/iq_skill_list_menu.o" -.include "src/code_801C620.o" +.include "src/iq_skill_info_menu.o" .include "src/code_801C8C4.o" .include "src/code_801D014.o" .include "src/code_801D9E4.o" From 1eda069dc62997a94514562d226555438fd4c867 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 24 Jun 2024 16:08:17 -0700 Subject: [PATCH 30/39] more documentation --- asm/code_809A560.s | 2 +- include/friend_list_menu.h | 68 ++++++++++++- include/iq_skill_info_menu.h | 2 +- include/iq_skill_list_menu.h | 2 +- include/iq_skill_menu.h | 2 +- src/code_801C8C4.c | 12 +-- src/code_801D014.c | 6 +- src/code_801F808.c | 11 +- src/code_809A560_1.c | 2 +- src/friend_list_menu.c | 192 +++++++++++++++-------------------- src/iq_skill_info_menu.c | 76 +++++++------- src/iq_skill_list_menu.c | 91 ++++++++--------- src/iq_skill_menu.c | 66 ++++++------ 13 files changed, 284 insertions(+), 248 deletions(-) diff --git a/asm/code_809A560.s b/asm/code_809A560.s index a10b72d3b..c81fd103b 100644 --- a/asm/code_809A560.s +++ b/asm/code_809A560.s @@ -3128,7 +3128,7 @@ _0809C1C2: b _0809C392 _0809C1C8: movs r0, 0x2 - bl sub_80252F0 + bl CreateFriendListMenu lsls r0, 24 cmp r0, 0 beq _0809C1EC diff --git a/include/friend_list_menu.h b/include/friend_list_menu.h index 1a9cced79..f19724a41 100644 --- a/include/friend_list_menu.h +++ b/include/friend_list_menu.h @@ -1,9 +1,73 @@ #ifndef INCLUDE_FRIEND_LIST_MENU_H #define INCLUDE_FRIEND_LIST_MENU_H -bool8 sub_80252F0(s32 param_1); +// there might be more overlap with unkStruct_203B2BC +// I was working on the moves and put the data that seemed to correspond to that +// into a separate struct +typedef struct unkStruct_203B2B4 +{ + // size: 0x178 + s32 unk0; + s32 state; + u32 fallbackState; + u8 unkC; // friend Area + u8 unkD; // friend Area + s16 species; + u32 itemIndex; + BulkItem item1; + BulkItem item2; + /* 0x1C */ PokemonStruct1 *pokeStruct; + u32 moveIndex; // some sort of move index + u16 moveID; + Move moves[8]; + u16 moveIDs[4]; // some list of move IDs + u32 menuAction1; + s32 menuAction2; + MenuStruct unk78; + MenuItem unkC8[8]; + u16 unk108[8]; + UnkTextStruct2 unk118[4]; +} unkStruct_203B2B4; + +bool8 CreateFriendListMenu(s32 param_1); u32 sub_8025354(void); u8 sub_802540C(void); -void sub_8025418(void); +void CleanFriendListMenu(void); + +enum FriendListMenuStates { + // 0 + // 1 + // 2 + // 3 + FRIEND_LIST_MENU_STATE_SUMMARY = 4, + FRIEND_LIST_MENU_STATE_CHECK_IQ = 5, + FRIEND_LIST_MENU_STATE_STANDBY = 7, + FRIEND_LIST_MENU_STATE_ITEM_GIVEN = 8, + FRIEND_LIST_MENU_STATE_ITEM_EXCHANGE = 9, + FRIEND_LIST_MENU_STATE_TAKE = 0xA, + FRIEND_LIST_MENU_STATE_GIVE = 0xB, + // 0xC + // 0xD + FRIEND_LIST_MENU_STATE_INFO = 0xE, + FRIEND_LIST_MENU_STATE_MOVES = 0xF, + // 0x10 + // 0x11 + // 0x12 + FRIEND_LIST_MENU_STATE_EXIT = 0x13 +}; + +enum FriendListMenuActions { + FRIEND_LIST_MENU_NULL = 1, + FRIEND_LIST_MENU_INFO = 4, + FRIEND_LIST_MENU_SUMMARY = 4, + FRIEND_LIST_MENU_CHECK_IQ = 5, + FRIEND_LIST_MENU_MOVES, + FRIEND_LIST_MENU_VISIT, + // 8 + FRIEND_LIST_MENU_STANDBY = 9, + FRIEND_LIST_MENU_GIVE = 0xA, + FRIEND_LIST_MENU_TAKE, + +}; #endif diff --git a/include/iq_skill_info_menu.h b/include/iq_skill_info_menu.h index 3f2fed3eb..bf8cc6294 100644 --- a/include/iq_skill_info_menu.h +++ b/include/iq_skill_info_menu.h @@ -6,7 +6,7 @@ #include "structs/str_text.h" // size: 0x94 -struct unkStruct_203B240 +struct IQSkillInfoMenu { /* 0x0 */ s32 state; /* 0x4 */ u8 chosenIQSkill; diff --git a/include/iq_skill_list_menu.h b/include/iq_skill_list_menu.h index 4f08e311e..a33dd9d25 100644 --- a/include/iq_skill_list_menu.h +++ b/include/iq_skill_list_menu.h @@ -8,7 +8,7 @@ #include "structs/struct_sub80095e4.h" // size: 0xC4 -struct unkStruct_203B23C +struct IQSkillListMenu { /* 0x0 */ s16 species; /* 0x4 */ PokemonStruct1 *pokeStruct; diff --git a/include/iq_skill_menu.h b/include/iq_skill_menu.h index b00b05f01..4d814e443 100644 --- a/include/iq_skill_menu.h +++ b/include/iq_skill_menu.h @@ -7,7 +7,7 @@ #include "structs/str_text.h" // size: 0x124 -struct unkStruct_203B238 +struct IQSkillMenu { /* 0x0 */ u32 state; /* 0x4 */ s16 species; diff --git a/src/code_801C8C4.c b/src/code_801C8C4.c index c144dc597..9b89d7ec0 100644 --- a/src/code_801C8C4.c +++ b/src/code_801C8C4.c @@ -218,7 +218,7 @@ void sub_801CCD8(void) { u32 y; u32 y2; - u32 uVar3; + u32 itemID; s32 index; u8 buffer[80]; @@ -228,14 +228,14 @@ void sub_801CCD8(void) sub_8012BC4(sUnknown_203B244->unk550[2] * 8 + 4, 0, sUnknown_203B244->input.unk1E + 1, 2, 7, sUnknown_203B244->unk4E8); for(index = 0; index < sUnknown_203B244->input.unk1A; index++) { - uVar3 = sUnknown_203B244->itemIDs[(sUnknown_203B244->input.unk1E * sUnknown_203B244->input.unk1C) + index]; - BufferItemName(buffer, uVar3, NULL); + itemID = sUnknown_203B244->itemIDs[(sUnknown_203B244->input.unk1E * sUnknown_203B244->input.unk1C) + index]; + BufferItemName(buffer, itemID, NULL); y = sub_8013800(&sUnknown_203B244->input, index); xxx_call_draw_string(8, y, buffer, sUnknown_203B244->unk4E8, 0); y2 = sub_8013800(&sUnknown_203B244->input, index); - sub_8012BC4((sUnknown_203B244->unk4EC->unkC * 8) - 2, y2, gTeamInventoryRef->teamStorage[uVar3], 3, 5, sUnknown_203B244->unk4E8); + sub_8012BC4((sUnknown_203B244->unk4EC->unkC * 8) - 2, y2, gTeamInventoryRef->teamStorage[itemID], 3, 5, sUnknown_203B244->unk4E8); - if (sub_801CFE0(uVar3) & 1) + if (sub_801CFE0(itemID) & 1) sub_8007B7C(sUnknown_203B244->unk4E8, 8, sub_8013800(&sUnknown_203B244->input, index), (sUnknown_203B244->unk4EC->unkC - 1) * '\b', 10); // TODO: Ghidra being crazy } @@ -340,4 +340,4 @@ UNUSED static void sub_801CFF4(u8 index, u32 value) struct unkStruct_203B244 *sub_801D008(void) { return sUnknown_203B244; -} \ No newline at end of file +} diff --git a/src/code_801D014.c b/src/code_801D014.c index 5689d25d8..4b929fcfd 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -267,10 +267,10 @@ static void sub_801D3A8(void) CreatePartyListMenu(sUnknown_203B250->pokeStruct); break; case 6: - sub_80252F0(0); + CreateFriendListMenu(0); break; case 7: - sub_80252F0(1); + CreateFriendListMenu(1); break; case 8: sub_8024458(sUnknown_203B250->index, 2); @@ -478,7 +478,7 @@ static void sub_801D7CC(void) case 2: case 3: sUnknown_203B250->unk7 = sub_802540C(); - sub_8025418(); + CleanFriendListMenu(); if (sUnknown_203B250->unk7 != 0) sub_801D208(2); diff --git a/src/code_801F808.c b/src/code_801F808.c index 969c6fbb8..55bf1a40e 100644 --- a/src/code_801F808.c +++ b/src/code_801F808.c @@ -16,10 +16,9 @@ extern u8 gAvailablePokemonNames[]; struct unkStruct_203B278 { - s32 state; - u16 *moveIDs; - u16 unk8; - u16 fillA; + /* 0x0 */ s32 state; + /* 0x4 */ u16 *moveIDs; + /* 0x8 */ u16 selectedMoveID; s32 unkC; s32 unk10; struct subStruct_203B240 *unk14[4]; @@ -141,8 +140,8 @@ void sub_801F9A4(void) switch (gUnknown_203B278->state) { case 0: sub_8008C54(gUnknown_203B278->unk5C); - gUnknown_203B278->unk8 = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E]; - gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->unk8,gUnknown_203B278->unk5C,gUnknown_203B278->unk14); + gUnknown_203B278->selectedMoveID = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E]; + gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->selectedMoveID,gUnknown_203B278->unk5C,gUnknown_203B278->unk14); gUnknown_203B278->unk24 = 0; break; case 1: diff --git a/src/code_809A560_1.c b/src/code_809A560_1.c index f52c955d4..b1f25b8a8 100644 --- a/src/code_809A560_1.c +++ b/src/code_809A560_1.c @@ -50,7 +50,7 @@ void sub_809C414(void) { gUnknown_3001B64->unk430 = -1; } - sub_8025418(); + CleanFriendListMenu(); } diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 1df9caad3..4e219fa76 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -4,6 +4,7 @@ #include "code_80130A8.h" #include "code_801602C.h" #include "code_801B3C0.h" +#include "friend_list_menu.h" #include "iq_skill_menu.h" #include "code_801EE10.h" #include "code_801EE10_mid.h" @@ -24,33 +25,6 @@ #include "text1.h" #include "text2.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 -// into a separate struct -typedef struct unkStruct_203B2B4 -{ - // size: 0x178 - s32 unk0; - s32 state; - u32 fallbackState; - u8 unkC; - u8 unkD; - s16 species; - u32 itemIndex; - BulkItem item1; - BulkItem item2; - /* 0x1C */ PokemonStruct1 *pokeStruct; - u32 moveIndex; // some sort of move index - u16 moveID; - Move moves[8]; - u16 moveIDs[4]; // some list of move IDs - u32 menuAction1; - s32 menuAction2; - MenuStruct unk78; - MenuItem unkC8[8]; - u16 unk108[8]; - UnkTextStruct2 unk118[4]; -} unkStruct_203B2B4; extern u8 gUnknown_202DE58[]; extern u8 gUnknown_202DEA8[]; @@ -65,7 +39,7 @@ extern void sub_808ED00(void); extern s32 sub_80144A4(s32 *); -void sub_8025434(s32); +void SetFriendListMenuState(s32); void sub_802544C(void); void sub_8025518(void); void sub_8025728(void); @@ -80,12 +54,12 @@ void sub_8025D90(void); void sub_8025DAC(void); void sub_8025E08(void); void sub_8025E24(void); -void sub_8025E44(void); +void FriendListMenu_GotoFallbackState(void); void sub_8025E68(u32 , BulkItem *); -bool8 sub_8025EC4(PokemonStruct1 *); +bool8 FriendListMenu_isOnTeam(PokemonStruct1 *); -bool8 sub_80252F0(s32 param_1) +bool8 CreateFriendListMenu(s32 param_1) { if ((param_1 == 2) && (sub_8024108(4) != 0)) { return FALSE; @@ -97,10 +71,10 @@ bool8 sub_80252F0(s32 param_1) gUnknown_203B2B4->unkC = sub_8002658(sub_80A5728()); gUnknown_203B2B4->unkD = 0; if (gUnknown_203B2B4->unk0 == 2) { - sub_8025434(0); + SetFriendListMenuState(0); } else { - sub_8025434(1); + SetFriendListMenuState(1); } return TRUE; } @@ -109,7 +83,7 @@ bool8 sub_80252F0(s32 param_1) u32 sub_8025354(void) { switch(gUnknown_203B2B4->state) { - case 0x13: + case FRIEND_LIST_MENU_STATE_EXIT: return 3; case 1: case 2: @@ -118,23 +92,23 @@ u32 sub_8025354(void) case 3: sub_8025A84(); break; - case 4: + case FRIEND_LIST_MENU_STATE_SUMMARY: sub_8025BCC(); break; - case 5: + case FRIEND_LIST_MENU_STATE_CHECK_IQ: sub_8025BE8(); break; - case 0xb: + case FRIEND_LIST_MENU_STATE_GIVE: case 0xc: sub_8025C04(); break; case 0xd: sub_8025CB4(); break; - case 0xe: + case FRIEND_LIST_MENU_STATE_INFO: sub_8025D90(); break; - case 0xf: + case FRIEND_LIST_MENU_STATE_MOVES: case 0x10: sub_8025DAC(); break; @@ -145,7 +119,7 @@ u32 sub_8025354(void) sub_8025E24(); break; default: - sub_8025E44(); + FriendListMenu_GotoFallbackState(); break; } return 0; @@ -156,7 +130,7 @@ u8 sub_802540C(void) return gUnknown_203B2B4->unkD; } -void sub_8025418(void) +void CleanFriendListMenu(void) { if(gUnknown_203B2B4 != NULL) { @@ -165,7 +139,7 @@ void sub_8025418(void) } } -void sub_8025434(s32 newState) +void SetFriendListMenuState(s32 newState) { gUnknown_203B2B4->state = newState; sub_802544C(); @@ -233,13 +207,13 @@ void sub_8025518(void) PrintColoredPokeNameToBuffer(gAvailablePokemonNames + 0x50,gUnknown_203B2B4->pokeStruct,6); sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->menuAction1,2); break; - case 4: + case FRIEND_LIST_MENU_STATE_SUMMARY: sub_8024458(gUnknown_203B2B4->species,2); break; - case 5: + case FRIEND_LIST_MENU_STATE_CHECK_IQ: CreateIQSkillMenu(gUnknown_203B2B4->species); break; - case 0xb: + case FRIEND_LIST_MENU_STATE_GIVE: sub_801A5D8(1, 0, NULL, 10); break; case 0xc: @@ -249,28 +223,28 @@ void sub_8025518(void) sub_801A9E0(); sub_8012D60(&gUnknown_203B2B4->unk78,gUnknown_203B2B4->unkC8,0,gUnknown_203B2B4->unk108,gUnknown_203B2B4->menuAction2,2); break; - case 0xe: + case FRIEND_LIST_MENU_STATE_INFO: HeldItemToSlot(&item, &gUnknown_203B2B4->item1); sub_801B3C0(&item); break; - case 8: + case FRIEND_LIST_MENU_STATE_ITEM_GIVEN: gUnknown_203B2B4->fallbackState = 2; sub_80141B4(sItemHandedOver,0,0,0x101); break; - case 9: + case FRIEND_LIST_MENU_STATE_ITEM_EXCHANGE: gUnknown_203B2B4->fallbackState = 2; sub_80141B4(sItemExchanged,0,0,0x101); break; - case 10: + case FRIEND_LIST_MENU_STATE_TAKE: gUnknown_203B2B4->fallbackState = 2; sub_80141B4(sReturnedToToolbox,0,0,0x101); break; - case 7: + case FRIEND_LIST_MENU_STATE_STANDBY: gUnknown_203B2B4->fallbackState = 1; PlaySound(0xcf); sub_80141B4(sLeftOnStandby,0,0,0x101); break; - case 0xf: + case FRIEND_LIST_MENU_STATE_MOVES: unk_CopyMoves4To8(gUnknown_203B2B4->moves,gUnknown_203B2B4->pokeStruct->moves); sub_801EE10(3,gUnknown_203B2B4->species,gUnknown_203B2B4->moves,0,NULL,0); break; @@ -284,7 +258,7 @@ void sub_8025518(void) case 0x12: sub_801602C(2,gUnknown_203B2B4->pokeStruct->name); break; - case 0x13: + case FRIEND_LIST_MENU_STATE_EXIT: break; } } @@ -299,28 +273,28 @@ void sub_8025728(void) MemoryFill16(gUnknown_203B2B4->unk108,0,sizeof(gUnknown_203B2B4->unk108)); if (gUnknown_203B2B4->unk0 == 0) { gUnknown_203B2B4->unkC8[loopMax].text = sGive; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 10; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_GIVE; if (GetNumberOfFilledInventorySlots() == 0) { gUnknown_203B2B4->unk108[loopMax] = 1; } loopMax += 1; gUnknown_203B2B4->unkC8[loopMax].text = sTake; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 0xb; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_TAKE; if ((INVENTORY_SIZE <= GetNumberOfFilledInventorySlots()) || (gUnknown_203B2B4->item2.id == ITEM_NOTHING)) { gUnknown_203B2B4->unk108[loopMax] = 1; } loopMax += 1; - if (sub_8025EC4(pokeStruct)) { + if (FriendListMenu_isOnTeam(pokeStruct)) { gUnknown_203B2B4->unkC8[loopMax].text = sStandBy; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 9; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_STANDBY; loopMax += 1; } } else { gUnknown_203B2B4->unkC8[loopMax].text = sVisit; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 7; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_VISIT; if (gUnknown_203B2B4->unkC == GetFriendArea(gUnknown_203B2B4->pokeStruct->speciesNum)) { gUnknown_203B2B4->unk108[loopMax] = 1; } @@ -333,16 +307,16 @@ void sub_8025728(void) loopMax += 1; } gUnknown_203B2B4->unkC8[loopMax].text = sSummary; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 4; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_SUMMARY; loopMax += 1; gUnknown_203B2B4->unkC8[loopMax].text = sMoves; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 6; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_MOVES; loopMax += 1; gUnknown_203B2B4->unkC8[loopMax].text = sCheckIQ; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 5; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_CHECK_IQ; loopMax += 1; gUnknown_203B2B4->unkC8[loopMax].text = NULL; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 1; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_NULL; for(index = 0; index < loopMax; index++) { @@ -371,16 +345,16 @@ void sub_802591C(void) MemoryFill16(gUnknown_203B2B4->unk108,0, sizeof(gUnknown_203B2B4->unk108)); gUnknown_203B2B4->unkC8[loopMax].text = sGive; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 10; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_GIVE; if (GetNumberOfFilledInventorySlots() == 0) { gUnknown_203B2B4->unk108[loopMax] = 1; } loopMax += 1; gUnknown_203B2B4->unkC8[loopMax].text = gCommonInfo[0]; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 4; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_INFO; loopMax += 1; gUnknown_203B2B4->unkC8[loopMax].text = NULL; - gUnknown_203B2B4->unkC8[loopMax].menuAction = 1; + gUnknown_203B2B4->unkC8[loopMax].menuAction = FRIEND_LIST_MENU_NULL; for(index = 0; index < loopMax; index++) { @@ -408,17 +382,17 @@ void sub_80259F0(void) gUnknown_203B2B4->species = sub_8023B44(); gUnknown_203B2B4->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B4->species]; PeekPokemonItem(gUnknown_203B2B4->species, &gUnknown_203B2B4->item2); - sub_8025434(3); + SetFriendListMenuState(3); break; case 4: gUnknown_203B2B4->species = sub_8023B44(); gUnknown_203B2B4->pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2B4->species]; PeekPokemonItem(gUnknown_203B2B4->species, &gUnknown_203B2B4->item2); - sub_8025434(4); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_SUMMARY); break; case 2: sub_8023C60(); - sub_8025434(0x13); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_EXIT); break; } } @@ -431,19 +405,19 @@ void sub_8025A84(void) if(!sub_8012FD8(&gUnknown_203B2B4->unk78)) { sub_8013114(&gUnknown_203B2B4->unk78, &menuAction); - if(menuAction != 1) gUnknown_203B2B4->menuAction1 = menuAction; + if(menuAction != FRIEND_LIST_MENU_NULL) gUnknown_203B2B4->menuAction1 = menuAction; } switch(menuAction) { - case 7: + case FRIEND_LIST_MENU_VISIT: gUnknown_203B2B4->unkD = GetFriendArea(gUnknown_203B2B4->pokeStruct->speciesNum); sub_8023C60(); - sub_8025434(0x13); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_EXIT); break; - case 10: - sub_8025434(0xB); + case FRIEND_LIST_MENU_GIVE: + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_GIVE); break; - case 11: + case FRIEND_LIST_MENU_TAKE: PlaySound(0x14d); if(gUnknown_203B2B4->item2.id != ITEM_NOTHING) { @@ -454,29 +428,29 @@ void sub_8025A84(void) gUnknown_203B2B4->item2.quantity = 0; GivePokemonItem(gUnknown_203B2B4->species, &gUnknown_203B2B4->item2); nullsub_104(); - sub_8025434(0xA); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_TAKE); break; - case 9: + case FRIEND_LIST_MENU_STANDBY: gUnknown_203B2B4->pokeStruct->unk0 &= ~(FLAG_ON_TEAM); nullsub_104(); sub_808ED00(); sub_8023C60(); - sub_8025434(0x7); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_STANDBY); break; - case 6: - sub_8025434(0xF); + case FRIEND_LIST_MENU_MOVES: + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_MOVES); break; case 8: - sub_8025434(0x12); + SetFriendListMenuState(0x12); break; - case 4: - sub_8025434(0x4); + case FRIEND_LIST_MENU_SUMMARY: + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_SUMMARY); break; - case 5: - sub_8025434(0x5); + case FRIEND_LIST_MENU_CHECK_IQ: + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_CHECK_IQ); break; - case 1: - sub_8025434(0x2); + case FRIEND_LIST_MENU_NULL: + SetFriendListMenuState(0x2); break; case 2: case 3: @@ -491,7 +465,7 @@ void sub_8025BCC(void) case 2: case 3: sub_802453C(); - sub_8025434(2); + SetFriendListMenuState(2); break; case 0: case 1: @@ -506,7 +480,7 @@ void sub_8025BE8(void) case 2: case 3: CleanIQSkillMenu(); - sub_8025434(2); + SetFriendListMenuState(2); break; case 0: case 1: @@ -522,18 +496,18 @@ void sub_8025C04(void) gUnknown_203B2B4->itemIndex = sub_801A8AC(); gUnknown_203B2B4->item1.id = gTeamInventoryRef->teamItems[gUnknown_203B2B4->itemIndex].id; gUnknown_203B2B4->item1.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2B4->itemIndex].quantity; - sub_8025434(0xD); + SetFriendListMenuState(0xD); break; case 4: gUnknown_203B2B4->itemIndex = sub_801A8AC(); gUnknown_203B2B4->item1.id = gTeamInventoryRef->teamItems[gUnknown_203B2B4->itemIndex].id; gUnknown_203B2B4->item1.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2B4->itemIndex].quantity; sub_8099690(0); - sub_8025434(0xE); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_INFO); break; case 2: sub_801A928(); - sub_8025434(2); + SetFriendListMenuState(2); break; case 0: case 1: @@ -543,27 +517,27 @@ void sub_8025C04(void) void sub_8025CB4(void) { - u32 uVar2; + u32 nextState; s32 menuAction; struct unkStruct_8090F58 a3; Item item; menuAction = 0; sub_801A6E8(FALSE); - if ((!sub_8012FD8(&gUnknown_203B2B4->unk78)) && (sub_8013114(&gUnknown_203B2B4->unk78,&menuAction), menuAction != 1)) { + if ((!sub_8012FD8(&gUnknown_203B2B4->unk78)) && (sub_8013114(&gUnknown_203B2B4->unk78,&menuAction), menuAction != FRIEND_LIST_MENU_NULL)) { gUnknown_203B2B4->menuAction2 = menuAction; } switch(menuAction) { - case 10: - uVar2 = 8; + case FRIEND_LIST_MENU_GIVE: + nextState = FRIEND_LIST_MENU_STATE_ITEM_GIVEN; PlaySound(0x14d); ShiftItemsDownFrom(gUnknown_203B2B4->itemIndex); FillInventoryGaps(); if ((gUnknown_203B2B4->item2).id != 0) { AddHeldItemToInventory(&gUnknown_203B2B4->item2); - uVar2 = 9; + nextState = FRIEND_LIST_MENU_STATE_ITEM_EXCHANGE; } HeldItemToSlot(&item,&gUnknown_203B2B4->item1); a3.unk0 = 0; @@ -574,14 +548,14 @@ void sub_8025CB4(void) GivePokemonItem(gUnknown_203B2B4->species,&gUnknown_203B2B4->item1); sub_801A928(); nullsub_104(); - sub_8025434(uVar2); + SetFriendListMenuState(nextState); break; - case 4: + case FRIEND_LIST_MENU_INFO: sub_8099690(0); - sub_8025434(0xe); + SetFriendListMenuState(FRIEND_LIST_MENU_STATE_INFO); break; - case 1: - sub_8025434(0xc); + case FRIEND_LIST_MENU_NULL: + SetFriendListMenuState(0xc); break; } } @@ -593,7 +567,7 @@ void sub_8025D90(void) case 2: case 3: sub_801B450(); - sub_8025434(0xC); + SetFriendListMenuState(0xC); case 0: case 1: break; @@ -607,17 +581,17 @@ void sub_8025DAC(void) case 3: gUnknown_203B2B4->moveIndex = sub_801F194(); gUnknown_203B2B4->moveID = gUnknown_203B2B4->moves[gUnknown_203B2B4->moveIndex].id; - sub_8025434(0x11); + SetFriendListMenuState(0x11); break; case 4: gUnknown_203B2B4->moveIndex = sub_801F194(); gUnknown_203B2B4->moveID = gUnknown_203B2B4->moves[gUnknown_203B2B4->moveIndex].id; - sub_8025434(0x11); + SetFriendListMenuState(0x11); break; case 2: sub_801F214(); sub_8094060(gUnknown_203B2B4->moves,gUnknown_203B2B4->pokeStruct->moves); - sub_8025434(0x2); + SetFriendListMenuState(0x2); break; } } @@ -629,7 +603,7 @@ void sub_8025E08(void) case 2: case 3: sub_801F8D0(); - sub_8025434(0x10); + SetFriendListMenuState(0x10); case 0: case 1: break; @@ -644,17 +618,17 @@ void sub_8025E24(void) case 3: sub_80160D8(); nullsub_104(); - sub_8025434(0x2); + SetFriendListMenuState(0x2); break; } } -void sub_8025E44(void) +void FriendListMenu_GotoFallbackState(void) { s32 local; if(sub_80144A4(&local) == 0) { - sub_8025434(gUnknown_203B2B4->fallbackState); + SetFriendListMenuState(gUnknown_203B2B4->fallbackState); } } @@ -675,7 +649,7 @@ void sub_8025E68(u32 r0, BulkItem *heldItem) sub_80073E0(r0); } -bool8 sub_8025EC4(PokemonStruct1 *pokeStruct) +bool8 FriendListMenu_isOnTeam(PokemonStruct1 *pokeStruct) { bool32 flag; if (pokeStruct->isTeamLeader) diff --git a/src/iq_skill_info_menu.c b/src/iq_skill_info_menu.c index 277f610dc..2677ba89b 100644 --- a/src/iq_skill_info_menu.c +++ b/src/iq_skill_info_menu.c @@ -15,7 +15,7 @@ extern u8 gUnknown_202DE58[]; extern u8 gAvailablePokemonNames[]; // 202DF98 -static EWRAM_DATA_2 struct unkStruct_203B240 *sUnknown_203B240 = {0}; +static EWRAM_DATA_2 struct IQSkillInfoMenu *sIQSkillInfoMenu = {0}; #include "data/iq_skill_info_menu.h" @@ -28,20 +28,20 @@ bool8 CreateIQSkillInfoMenu(u8 iqSkill) { ResetSprites(TRUE); - sUnknown_203B240 = MemoryAlloc(sizeof(struct unkStruct_203B240), 8); - sUnknown_203B240->chosenIQSkill = iqSkill; - sub_801317C(&sUnknown_203B240->unk88); - sUnknown_203B240->unk24 = 0; - sub_80140B4(sUnknown_203B240->unk28); + sIQSkillInfoMenu = MemoryAlloc(sizeof(struct IQSkillInfoMenu), 8); + sIQSkillInfoMenu->chosenIQSkill = iqSkill; + sub_801317C(&sIQSkillInfoMenu->unk88); + sIQSkillInfoMenu->unk24 = 0; + sub_80140B4(sIQSkillInfoMenu->unk28); ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B240->unk28, TRUE, TRUE); + sub_800641C(sIQSkillInfoMenu->unk28, TRUE, TRUE); SetIQSkillInfoMenuState(0); return TRUE; } u32 HandleIQSkillInfoMenuState(void) { - switch (sUnknown_203B240->state) { + switch (sIQSkillInfoMenu->state) { case 0: sub_801C7D4(); break; @@ -59,15 +59,15 @@ u32 HandleIQSkillInfoMenuState(void) void CleanIQSkillInfoMenu(void) { - if (sUnknown_203B240 != NULL) { - MemoryFree(sUnknown_203B240); - sUnknown_203B240 = NULL; + if (sIQSkillInfoMenu != NULL) { + MemoryFree(sIQSkillInfoMenu); + sIQSkillInfoMenu = NULL; } } static void SetIQSkillInfoMenuState(s32 newState) { - sUnknown_203B240->state = newState; + sIQSkillInfoMenu->state = newState; sub_801C6E4(); } @@ -76,26 +76,26 @@ static void sub_801C6E4(void) u8 *skillName; struct subStruct_203B240 *preload; - switch (sUnknown_203B240->state) { + switch (sIQSkillInfoMenu->state) { case 0: - sub_8008C54(sUnknown_203B240->unk24); - sub_80073B8(sUnknown_203B240->unk24); - skillName = GetIQSkillName(sUnknown_203B240->chosenIQSkill); + sub_8008C54(sIQSkillInfoMenu->unk24); + sub_80073B8(sIQSkillInfoMenu->unk24); + skillName = GetIQSkillName(sIQSkillInfoMenu->chosenIQSkill); strcpy(gUnknown_202DE58, skillName); xxx_format_and_draw(16, 0, sFmtMoveItem0, 0, 0); // {ARG_MOVE_ITEM_0} - xxx_call_draw_string(8, 16, GetIQSkillDescription(sUnknown_203B240->chosenIQSkill), sUnknown_203B240->unk24, 0); - sub_80073E0(sUnknown_203B240->unk24); - sUnknown_203B240->unkC = sub_8097DF0(GetIQSkillDescription(sUnknown_203B240->chosenIQSkill), sUnknown_203B240->unk10); - sUnknown_203B240->unk20 = 0; + xxx_call_draw_string(8, 16, GetIQSkillDescription(sIQSkillInfoMenu->chosenIQSkill), sIQSkillInfoMenu->unk24, 0); + sub_80073E0(sIQSkillInfoMenu->unk24); + sIQSkillInfoMenu->unkC = sub_8097DF0(GetIQSkillDescription(sIQSkillInfoMenu->chosenIQSkill), sIQSkillInfoMenu->unk10); + sIQSkillInfoMenu->unk20 = 0; break; case 1: - sub_8008C54(sUnknown_203B240->unk24); - sub_80073B8(sUnknown_203B240->unk24); - preload = sUnknown_203B240->unk10[sUnknown_203B240->unk8]; + sub_8008C54(sIQSkillInfoMenu->unk24); + sub_80073B8(sIQSkillInfoMenu->unk24); + preload = sIQSkillInfoMenu->unk10[sIQSkillInfoMenu->unk8]; strcpy(gAvailablePokemonNames, preload->pokeName); - xxx_format_and_draw(16, 0, sFmtPkmn0, sUnknown_203B240->unk24, 0); // {ARG_POKEMON_0} - xxx_format_and_draw(4, 16, sUnknown_203B240->unk10[sUnknown_203B240->unk8]->unk4, sUnknown_203B240->unk24, 0); - sub_80073E0(sUnknown_203B240->unk24); + xxx_format_and_draw(16, 0, sFmtPkmn0, sIQSkillInfoMenu->unk24, 0); // {ARG_POKEMON_0} + xxx_format_and_draw(4, 16, sIQSkillInfoMenu->unk10[sIQSkillInfoMenu->unk8]->unk4, sIQSkillInfoMenu->unk24, 0); + sub_80073E0(sIQSkillInfoMenu->unk24); break; case 2: case 3: @@ -105,19 +105,19 @@ static void sub_801C6E4(void) static void sub_801C7D4(void) { - if (sUnknown_203B240->unkC != 0) { - if (sUnknown_203B240->unk20 & 8) + if (sIQSkillInfoMenu->unkC != 0) { + if (sIQSkillInfoMenu->unk20 & 8) sub_8013F84(); - sUnknown_203B240->unk20++; + sIQSkillInfoMenu->unk20++; } - switch (sub_8012A64(&sUnknown_203B240->unk88, sUnknown_203B240->unk24)) { + switch (sub_8012A64(&sIQSkillInfoMenu->unk88, sIQSkillInfoMenu->unk24)) { case 1: PlayMenuSoundEffect(0); - if (sUnknown_203B240->unkC != 0) { - sUnknown_203B240->unk8 = 0; + if (sIQSkillInfoMenu->unkC != 0) { + sIQSkillInfoMenu->unk8 = 0; SetIQSkillInfoMenuState(1); } else @@ -132,19 +132,19 @@ static void sub_801C7D4(void) static void sub_801C848(void) { - if (sUnknown_203B240->unk8 < sUnknown_203B240->unkC - 1) { - if (sUnknown_203B240->unk20 & 8) + if (sIQSkillInfoMenu->unk8 < sIQSkillInfoMenu->unkC - 1) { + if (sIQSkillInfoMenu->unk20 & 8) sub_8013F84(); - sUnknown_203B240->unk20++; + sIQSkillInfoMenu->unk20++; } - switch (sub_8012A64(&sUnknown_203B240->unk88, sUnknown_203B240->unk24)) { + switch (sub_8012A64(&sIQSkillInfoMenu->unk88, sIQSkillInfoMenu->unk24)) { case 1: PlayMenuSoundEffect(0); - sUnknown_203B240->unk8++; + sIQSkillInfoMenu->unk8++; - if (sUnknown_203B240->unk8 < sUnknown_203B240->unkC) + if (sIQSkillInfoMenu->unk8 < sIQSkillInfoMenu->unkC) SetIQSkillInfoMenuState(1); else SetIQSkillInfoMenuState(0); diff --git a/src/iq_skill_list_menu.c b/src/iq_skill_list_menu.c index b7fcf6318..fa857a02c 100644 --- a/src/iq_skill_list_menu.c +++ b/src/iq_skill_list_menu.c @@ -13,7 +13,7 @@ extern u8 gUnknown_202DEA8[]; -static EWRAM_DATA_2 struct unkStruct_203B23C *sUnknown_203B23C = {0}; +static EWRAM_DATA_2 struct IQSkillListMenu *sIQSkillListMenu = {0}; #include "data/iq_skill_list_menu.h" @@ -32,21 +32,21 @@ bool8 CreateIQSkillListMenu(s16 species, u32 index, u32 a2) if (HasNoAvailIQSkills(species)) return FALSE; - if (sUnknown_203B23C == NULL) - sUnknown_203B23C = MemoryAlloc(sizeof(struct unkStruct_203B23C), 8); + if (sIQSkillListMenu == NULL) + sIQSkillListMenu = MemoryAlloc(sizeof(struct IQSkillListMenu), 8); - sUnknown_203B23C->species = species_s32; - sUnknown_203B23C->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; - sUnknown_203B23C->numIQSkills = GetNumAvailableIQSkills(sUnknown_203B23C->iqSkills, sUnknown_203B23C->pokeStruct->IQ); - sUnknown_203B23C->s24.s0.unk34 = index; - sUnknown_203B23C->s24.s0.unk38 = &sUnknown_203B23C->s24.s0.unk3C[index]; - sub_8006518(sUnknown_203B23C->s24.s0.unk3C); - sUnknown_203B23C->s24.s0.unk3C[sUnknown_203B23C->s24.s0.unk34] = sUnknown_80DBDF0; - sUnknown_203B23C->s24.s0.unk38->unk14 = sUnknown_203B23C->s24.unk9C; - sub_8012D08(sUnknown_203B23C->s24.s0.unk38, a2); + sIQSkillListMenu->species = species_s32; + sIQSkillListMenu->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + sIQSkillListMenu->numIQSkills = GetNumAvailableIQSkills(sIQSkillListMenu->iqSkills, sIQSkillListMenu->pokeStruct->IQ); + sIQSkillListMenu->s24.s0.unk34 = index; + sIQSkillListMenu->s24.s0.unk38 = &sIQSkillListMenu->s24.s0.unk3C[index]; + sub_8006518(sIQSkillListMenu->s24.s0.unk3C); + sIQSkillListMenu->s24.s0.unk3C[sIQSkillListMenu->s24.s0.unk34] = sUnknown_80DBDF0; + sIQSkillListMenu->s24.s0.unk38->unk14 = sIQSkillListMenu->s24.unk9C; + sub_8012D08(sIQSkillListMenu->s24.s0.unk38, a2); ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE); - sub_8013818(&sUnknown_203B23C->s24.s0.input, sUnknown_203B23C->numIQSkills, a2, index); + sub_800641C(sIQSkillListMenu->s24.s0.unk3C, TRUE, TRUE); + sub_8013818(&sIQSkillListMenu->s24.s0.input, sIQSkillListMenu->numIQSkills, a2, index); sub_801C440(); BuildIQSkillList(); return TRUE; @@ -55,11 +55,11 @@ bool8 CreateIQSkillListMenu(s16 species, u32 index, u32 a2) u32 HandleIQSkillListMenuInput(bool8 a0) { if (!a0) { - sub_8013660(&sUnknown_203B23C->s24.s0.input); + sub_8013660(&sIQSkillListMenu->s24.s0.input); return 0; } - switch (GetKeyPress(&sUnknown_203B23C->s24.s0.input)) { + switch (GetKeyPress(&sIQSkillListMenu->s24.s0.input)) { case INPUT_B_BUTTON: PlayMenuSoundEffect(1); return 2; @@ -70,7 +70,7 @@ u32 HandleIQSkillListMenuInput(bool8 a0) PlayMenuSoundEffect(4); return 4; default: - if (sub_80138B8(&sUnknown_203B23C->s24.s0.input, 1) != 0) { + if (sub_80138B8(&sIQSkillListMenu->s24.s0.input, 1) != 0) { sub_801C440(); BuildIQSkillList(); return 1; @@ -81,43 +81,42 @@ u32 HandleIQSkillListMenuInput(bool8 a0) s32 GetIQSkillSelection(void) { - return (sUnknown_203B23C->s24.s0.input.unk1E * sUnknown_203B23C->s24.s0.input.unk1C) + sUnknown_203B23C->s24.s0.input.menuIndex; + return (sIQSkillListMenu->s24.s0.input.unk1E * sIQSkillListMenu->s24.s0.input.unk1C) + sIQSkillListMenu->s24.s0.input.menuIndex; } void RedrawIQSkillListMenu(bool8 addCursor) { ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B23C->s24.s0.unk3C, FALSE, FALSE); - sUnknown_203B23C->s24.s0.input.unk22 = sUnknown_203B23C->numIQSkills; - sub_8013984(&sUnknown_203B23C->s24.s0.input); + sub_800641C(sIQSkillListMenu->s24.s0.unk3C, FALSE, FALSE); + sIQSkillListMenu->s24.s0.input.unk22 = sIQSkillListMenu->numIQSkills; + sub_8013984(&sIQSkillListMenu->s24.s0.input); sub_801C440(); BuildIQSkillList(); if (addCursor) - AddMenuCursorSprite(&sUnknown_203B23C->s24.s0.input); + AddMenuCursorSprite(&sIQSkillListMenu->s24.s0.input); } void CleanIQSkillListMenu(void) { - if (sUnknown_203B23C != NULL) { - sUnknown_203B23C->s24.s0.unk3C[sUnknown_203B23C->s24.s0.unk34] = sUnknown_80DBDD8; + if (sIQSkillListMenu != NULL) { + sIQSkillListMenu->s24.s0.unk3C[sIQSkillListMenu->s24.s0.unk34] = sUnknown_80DBDD8; ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE); - MemoryFree(sUnknown_203B23C); - sUnknown_203B23C = NULL; + sub_800641C(sIQSkillListMenu->s24.s0.unk3C, TRUE, TRUE); + MemoryFree(sIQSkillListMenu); + sIQSkillListMenu = NULL; } } static void sub_801C440(void) { - sUnknown_203B23C->s24.unk9C[0] = sUnknown_203B23C->s24.s0.input.unk20; - sUnknown_203B23C->s24.unk9C[1] = sUnknown_203B23C->s24.s0.input.unk1E; - sUnknown_203B23C->s24.unk9C[2] = 10; - sUnknown_203B23C->s24.unk9C[3] = 0; + sIQSkillListMenu->s24.unk9C[0] = sIQSkillListMenu->s24.s0.input.unk20; + sIQSkillListMenu->s24.unk9C[1] = sIQSkillListMenu->s24.s0.input.unk1E; + sIQSkillListMenu->s24.unk9C[2] = 10; + sIQSkillListMenu->s24.unk9C[3] = 0; ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE); - - SUB_80095E4_CALL_2(sUnknown_203B23C->s24.s0); + sub_800641C(sIQSkillListMenu->s24.s0.unk3C, TRUE, TRUE); + SUB_80095E4_CALL_2(sIQSkillListMenu->s24.s0); } void BuildIQSkillList(void) @@ -128,32 +127,32 @@ void BuildIQSkillList(void) u32 skillIndex; s32 counter; - sub_8008C54(sUnknown_203B23C->s24.s0.unk34); - sub_80073B8(sUnknown_203B23C->s24.s0.unk34); - x = sUnknown_203B23C->s24.s0.input.unk1E * 8; + sub_8008C54(sIQSkillListMenu->s24.s0.unk34); + sub_80073B8(sIQSkillListMenu->s24.s0.unk34); + x = sIQSkillListMenu->s24.s0.input.unk1E * 8; x2 = x; x2 += 10; - xxx_call_draw_string(x2, 0, sIQSkills, sUnknown_203B23C->s24.s0.unk34, 0); + xxx_call_draw_string(x2, 0, sIQSkills, sIQSkillListMenu->s24.s0.unk34, 0); x += 4; - x2 = x + sUnknown_203B23C->s24.unk9C[2] * 8; - sub_8012BC4(x2, 0, sUnknown_203B23C->s24.s0.input.unk1E + 1, 1, 7, sUnknown_203B23C->s24.s0.unk34); + x2 = x + sIQSkillListMenu->s24.unk9C[2] * 8; + sub_8012BC4(x2, 0, sIQSkillListMenu->s24.s0.input.unk1E + 1, 1, 7, sIQSkillListMenu->s24.s0.unk34); - for (counter = 0; counter < sUnknown_203B23C->s24.s0.input.unk1A; counter++) { - skillIndex = sUnknown_203B23C->iqSkills[(sUnknown_203B23C->s24.s0.input.unk1E * sUnknown_203B23C->s24.s0.input.unk1C) + counter]; + for (counter = 0; counter < sIQSkillListMenu->s24.s0.input.unk1A; counter++) { + skillIndex = sIQSkillListMenu->iqSkills[(sIQSkillListMenu->s24.s0.input.unk1E * sIQSkillListMenu->s24.s0.input.unk1C) + counter]; - y = sub_8013800(&sUnknown_203B23C->s24.s0.input, counter); + y = sub_8013800(&sIQSkillListMenu->s24.s0.input, counter); strncpy(gUnknown_202DEA8, GetIQSkillName(skillIndex), 80); - if (IsIQSkillSet((u8 *)&sUnknown_203B23C->pokeStruct->IQSkills, 1 << skillIndex)) + if (IsIQSkillSet((u8 *)&sIQSkillListMenu->pokeStruct->IQSkills, 1 << skillIndex)) strcpy(gUnknown_202DEA8 - 80, sStarBullet); else strcpy(gUnknown_202DEA8 - 80, sUnknown_80DBE18); - xxx_format_and_draw(12, y, sFmt01, sUnknown_203B23C->s24.s0.unk34, 0); + xxx_format_and_draw(12, y, sFmt01, sIQSkillListMenu->s24.s0.unk34, 0); } - sub_80073E0(sUnknown_203B23C->s24.s0.unk34); + sub_80073E0(sIQSkillListMenu->s24.s0.unk34); } bool8 HasNoAvailIQSkills(s16 species) diff --git a/src/iq_skill_menu.c b/src/iq_skill_menu.c index 55bd8513f..1ae8f8303 100644 --- a/src/iq_skill_menu.c +++ b/src/iq_skill_menu.c @@ -12,7 +12,7 @@ #include "text1.h" #include "text2.h" -static EWRAM_DATA_2 struct unkStruct_203B238 *sUnknown_203B238 = {0}; +static EWRAM_DATA_2 struct IQSkillMenu *sIQSkillMenu = {0}; #include "data/iq_skill_menu.h" @@ -31,18 +31,18 @@ bool8 CreateIQSkillMenu(s16 species) if (HasNoAvailIQSkills(species_s32)) return FALSE; - sUnknown_203B238 = MemoryAlloc(sizeof(struct unkStruct_203B238), 8); - sUnknown_203B238->menuAction = 0; - sUnknown_203B238->species = species_s32; - sUnknown_203B238->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; - sUnknown_203B238->numIQSkills = GetNumAvailableIQSkills(sUnknown_203B238->iqSkills, sUnknown_203B238->pokeStruct->IQ); + sIQSkillMenu = MemoryAlloc(sizeof(struct IQSkillMenu), 8); + sIQSkillMenu->menuAction = 0; + sIQSkillMenu->species = species_s32; + sIQSkillMenu->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32]; + sIQSkillMenu->numIQSkills = GetNumAvailableIQSkills(sIQSkillMenu->iqSkills, sIQSkillMenu->pokeStruct->IQ); SetIQSkillMenuState(IQ_SKILL_MENU_STATE_INIT); return TRUE; } u32 sub_801BF48(void) { - switch (sUnknown_203B238->state) { + switch (sIQSkillMenu->state) { case IQ_SKILL_MENU_STATE_EXIT: return 3; case IQ_SKILL_MENU_STATE_INIT: @@ -61,15 +61,15 @@ u32 sub_801BF48(void) void CleanIQSkillMenu(void) { - if (sUnknown_203B238 != NULL) { - MemoryFree(sUnknown_203B238); - sUnknown_203B238 = NULL; + if (sIQSkillMenu != NULL) { + MemoryFree(sIQSkillMenu); + sIQSkillMenu = NULL; } } static void SetIQSkillMenuState(s32 newState) { - sUnknown_203B238->state = newState; + sIQSkillMenu->state = newState; sub_801BFCC(); HandleIQSkillMenuState(); } @@ -78,24 +78,24 @@ static void sub_801BFCC(void) { s32 i; - sub_8006518(sUnknown_203B238->unkC4); + sub_8006518(sIQSkillMenu->unkC4); - if (sUnknown_203B238->state == 2) - sUnknown_203B238->unkC4[2] = sUnknown_80DBDB0; + if (sIQSkillMenu->state == 2) + sIQSkillMenu->unkC4[2] = sUnknown_80DBDB0; else { for (i = 0; i < 4; i++) - sUnknown_203B238->unkC4[i] = sUnknown_80DBD98; + sIQSkillMenu->unkC4[i] = sUnknown_80DBD98; } ResetUnusedInputStruct(); - sub_800641C(sUnknown_203B238->unkC4, TRUE, TRUE); + sub_800641C(sIQSkillMenu->unkC4, TRUE, TRUE); } static void HandleIQSkillMenuState(void) { - switch (sUnknown_203B238->state) { + switch (sIQSkillMenu->state) { case IQ_SKILL_MENU_STATE_INIT: - CreateIQSkillListMenu(sUnknown_203B238->species, 0, 8); + CreateIQSkillListMenu(sIQSkillMenu->species, 0, 8); break; case IQ_SKILL_MENU_STATE_MAIN: RedrawIQSkillListMenu(TRUE); @@ -103,10 +103,10 @@ static void HandleIQSkillMenuState(void) case 2: BuildIQSkillList(); BuildIQSkillMenuActions(); - sub_8012D60(&sUnknown_203B238->unk74, sUnknown_203B238->unk34, NULL, NULL, sUnknown_203B238->menuAction, 2); + sub_8012D60(&sIQSkillMenu->unk74, sIQSkillMenu->unk34, NULL, NULL, sIQSkillMenu->menuAction, 2); break; case IQ_SKILL_MENU_STATE_INFO: - CreateIQSkillInfoMenu(sUnknown_203B238->iqSkillIndex); + CreateIQSkillInfoMenu(sIQSkillMenu->iqSkillIndex); break; case IQ_SKILL_MENU_STATE_EXIT: break; @@ -115,16 +115,16 @@ static void HandleIQSkillMenuState(void) static void BuildIQSkillMenuActions(void) { - struct unkStruct_203B238 *puVar1; + struct IQSkillMenu *puVar1; s32 i; u8 *nullText; u32 menuAction; s32 max; - puVar1 = sUnknown_203B238; + puVar1 = sIQSkillMenu; nullText = NULL; - sUnknown_203B238->unk34[0].text = sSwitch; + sIQSkillMenu->unk34[0].text = sSwitch; puVar1->unk34[0].menuAction = IQ_SKILL_MENU_SWITCH; menuAction = IQ_SKILL_MENU_NULL; @@ -136,24 +136,24 @@ static void BuildIQSkillMenuActions(void) puVar1->unk34[2].menuAction = menuAction; for (i = 0; i < max; i++) { - if (sUnknown_203B238->unk34[i].menuAction == sUnknown_203B238->menuAction) + if (sIQSkillMenu->unk34[i].menuAction == sIQSkillMenu->menuAction) return; } - sUnknown_203B238->menuAction = IQ_SKILL_MENU_SWITCH; + sIQSkillMenu->menuAction = IQ_SKILL_MENU_SWITCH; } static void HandleIQSkillMenuMain(void) { switch (HandleIQSkillListMenuInput(TRUE)) { case 3: - sUnknown_203B238->menuIndex = GetIQSkillSelection(); - sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->menuIndex]; + sIQSkillMenu->menuIndex = GetIQSkillSelection(); + sIQSkillMenu->iqSkillIndex = sIQSkillMenu->iqSkills[sIQSkillMenu->menuIndex]; SetIQSkillMenuState(2); break; case 4: - sUnknown_203B238->menuIndex = GetIQSkillSelection(); - sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->menuIndex]; + sIQSkillMenu->menuIndex = GetIQSkillSelection(); + sIQSkillMenu->iqSkillIndex = sIQSkillMenu->iqSkills[sIQSkillMenu->menuIndex]; SetIQSkillMenuState(IQ_SKILL_MENU_STATE_INFO); break; case 2: @@ -173,17 +173,17 @@ static void HandleIQSkillMenuAction(void) menuAction = 0; HandleIQSkillListMenuInput(FALSE); - if (!sub_8012FD8(&sUnknown_203B238->unk74)) { - sub_8013114(&sUnknown_203B238->unk74, &menuAction); + if (!sub_8012FD8(&sIQSkillMenu->unk74)) { + sub_8013114(&sIQSkillMenu->unk74, &menuAction); if (menuAction != IQ_SKILL_MENU_NULL) - sUnknown_203B238->menuAction = menuAction; + sIQSkillMenu->menuAction = menuAction; } switch (menuAction) { case IQ_SKILL_MENU_SWITCH: // Switch PlaySound(307); - ToggleIQSkill((u8 *)&sUnknown_203B238->pokeStruct->IQSkills, sUnknown_203B238->iqSkillIndex); + ToggleIQSkill((u8 *)&sIQSkillMenu->pokeStruct->IQSkills, sIQSkillMenu->iqSkillIndex); SetIQSkillMenuState(IQ_SKILL_MENU_STATE_MAIN); break; case IQ_SKILL_MENU_INFO: // Info From bd416232ab0e235664f31ce49ad5a055a9068820 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 3 Jul 2024 21:00:52 -0700 Subject: [PATCH 31/39] continue documenting --- asm/code_803D110.s | 2 +- asm/code_805D8C8.s | 2 +- asm/code_809A560.s | 14 +++--- data/data_8115F5C.s | 2 +- include/code_801602C.h | 18 +++++-- include/wigglytuff_shop2.h | 19 +++++--- include/wigglytuff_shop3.h | 4 +- src/code_801602C.c | 50 ++++++++++---------- src/code_801D014.c | 6 +-- src/code_806CD90.c | 2 +- src/debug_menu3.c | 8 ++-- src/debug_menu4.c | 6 +-- src/friend_list_menu.c | 4 +- src/iq_skill_info_menu.c | 20 +++++--- src/luminous_cave.c | 96 +++++++++++++++++++++----------------- src/personality_test1.c | 4 +- src/wigglytuff_shop2.c | 36 +++++++------- src/wigglytuff_shop3.c | 16 +++---- 18 files changed, 170 insertions(+), 139 deletions(-) diff --git a/asm/code_803D110.s b/asm/code_803D110.s index 8b8ee7069..1e0f25313 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -3321,7 +3321,7 @@ _0803EC34: _0803EC46: movs r0, 0x2 adds r1, r5, 0 - bl sub_801602C + bl CreateConfirmNameMenu b _0803EC84 .align 2, 0 _0803EC50: .4byte gUnknown_203B40C diff --git a/asm/code_805D8C8.s b/asm/code_805D8C8.s index e6a8aa4e9..37ff41eaf 100644 --- a/asm/code_805D8C8.s +++ b/asm/code_805D8C8.s @@ -4344,7 +4344,7 @@ _0805FBF4: adds r4, r0, 0 cmp r4, 0 beq _0805FBF4 - bl sub_80160D8 + bl CleanConfirmNameMenu movs r0, 0xE bl sub_803E46C movs r0, 0 diff --git a/asm/code_809A560.s b/asm/code_809A560.s index c81fd103b..858fbec0a 100644 --- a/asm/code_809A560.s +++ b/asm/code_809A560.s @@ -1938,7 +1938,7 @@ _0809B7AC: adds r0, r1, r3 ldr r1, [r0] movs r0, 0 - bl sub_801602C + bl CreateConfirmNameMenu b _0809B784 .align 2, 0 _0809B7D8: .4byte 0x00000424 @@ -1948,7 +1948,7 @@ _0809B7E0: adds r0, r1, r2 ldr r1, [r0] movs r0, 0x2 - bl sub_801602C + bl CreateConfirmNameMenu b _0809B784 .align 2, 0 _0809B7F0: .4byte 0x0000042c @@ -1956,7 +1956,7 @@ _0809B7F4: bl sub_8016080 cmp r0, 0x3 bne _0809B80C - bl sub_80160D8 + bl CleanConfirmNameMenu ldr r0, [r6] movs r3, 0x86 lsls r3, 3 @@ -1971,7 +1971,7 @@ _0809B80C: ldr r0, [r0] cmp r0, 0 beq _0809B784 - bl sub_80160D8 + bl CleanConfirmNameMenu ldr r0, [r6] movs r2, 0x86 lsls r2, 3 @@ -1996,7 +1996,7 @@ _0809B834: adds r0, r1 ldr r1, [r0] movs r0, 0x1 - bl sub_801602C + bl CreateConfirmNameMenu b _0809B784 .align 2, 0 _0809B858: .4byte 0x0000042c @@ -2004,7 +2004,7 @@ _0809B85C: bl sub_8016080 cmp r0, 0x3 bne _0809B874 - bl sub_80160D8 + bl CleanConfirmNameMenu ldr r0, [r6] movs r2, 0x86 lsls r2, 3 @@ -2023,7 +2023,7 @@ _0809B87A: bne _0809B888 b _0809B784 _0809B888: - bl sub_80160D8 + bl CleanConfirmNameMenu ldr r0, [r6] movs r1, 0x86 lsls r1, 3 diff --git a/data/data_8115F5C.s b/data/data_8115F5C.s index 6b78c82e4..ed156cc00 100644 --- a/data/data_8115F5C.s +++ b/data/data_8115F5C.s @@ -165,7 +165,7 @@ gUnknown_8116208: @ 8116208 gUnknown_8116218: @ 8116218 .4byte 1 .4byte 0 -.4byte sub_8021D1C +.4byte CleanWigglytuffShop .4byte sub_8021C5C .global gUnknown_8116228 diff --git a/include/code_801602C.h b/include/code_801602C.h index 7fd6bf2b1..ab7bf7144 100644 --- a/include/code_801602C.h +++ b/include/code_801602C.h @@ -10,12 +10,20 @@ struct unkStruct_203B200 u32 unk4; /* 0x8 */ u8 *pokeName; /* 0xC */ s32 state; - /* 0x10 */ MenuItem menus[3]; - u8 fill[0x50 - 0x28]; + /* 0x10 */ MenuItem menus[8]; }; -u32 sub_801602C(u32 mode, u8 *name); +u32 CreateConfirmNameMenu(u32 mode, u8 *name); u32 sub_8016080(void); -void sub_80160D8(void); +void CleanConfirmNameMenu(void); -#endif // GUARD_CODE_801602C_H \ No newline at end of file +enum ConfirmNameMenuStates +{ + CONFIRM_NAME_MENU_INIT, + CONFIRM_NAME_MENU_PROMPT, + CONFIRM_NAME_MENU_TOO_LONG, + CONFIRM_NAME_MENU_EMPTY, + CONFIRM_NAME_MENU_EXIT = 4 +}; + +#endif // GUARD_CODE_801602C_H diff --git a/include/wigglytuff_shop2.h b/include/wigglytuff_shop2.h index 51e2790ab..0053dc6db 100644 --- a/include/wigglytuff_shop2.h +++ b/include/wigglytuff_shop2.h @@ -9,8 +9,8 @@ typedef struct WigglytuffShop2Work MenuInputStructSub unk0; /* 0xC */ u8 friendArea; bool8 unkD; - s16 unkE[0x10]; - u32 unk30[0x10]; + s16 friendAreaSpecies[0x10]; + u32 pokemonStatus[0x10]; /* 0x70 */ s32 numPokemoninFriendArea; s32 unk74; UnkTextStruct2 *unk78; @@ -18,8 +18,15 @@ typedef struct WigglytuffShop2Work u8 unkDC[4]; } WigglytuffShop2Work; -bool8 sub_8021774(u8 friendArea, bool8, s32); -u32 sub_80217EC(void); -void sub_8021830(void); +bool8 CreateWigglytuffShopFriendAreaMenu(u8 friendArea, bool8, s32); +u32 HandleWigglytuffShopFriendAreaMenuInput(void); +void CleanWigglytuffShopFriendAreaInfoMenu(void); -#endif // GUARD_WIGGLYTUFF_SHOP2_H \ No newline at end of file +enum WigglytuffShop2FriendAreaPokemonStatus +{ + POKEMON_UNKNOWN, + POKEMON_SEEN, + POKEMON_RECRUITED, +}; + +#endif // GUARD_WIGGLYTUFF_SHOP2_H diff --git a/include/wigglytuff_shop3.h b/include/wigglytuff_shop3.h index b1f643e52..f90797f39 100644 --- a/include/wigglytuff_shop3.h +++ b/include/wigglytuff_shop3.h @@ -68,6 +68,6 @@ typedef struct WigglytuffShop3Work bool8 CreateWigglytuffShop(u32 mode); u32 sub_8021C5C(void); -void sub_8021D1C(void); +void CleanWigglytuffShop(void); -#endif // GUARD_WIGGLYTUFF_SHOP3_H \ No newline at end of file +#endif // GUARD_WIGGLYTUFF_SHOP3_H diff --git a/src/code_801602C.c b/src/code_801602C.c index 85822e4aa..c1c7dae6f 100644 --- a/src/code_801602C.c +++ b/src/code_801602C.c @@ -15,18 +15,18 @@ static EWRAM_DATA_2 struct unkStruct_203B200 *sUnknown_203B200 = {0}; #include "data/code_801602C.h" -static void CreateConfirmNameMenu(void); +static void BuildConfirmNameMenu(void); static void HandleConfirmNameMenu(void); static bool8 IsNameEmpty(void); static void nullsub_36(void); -static void sub_80160F4(u32 newState); +static void SetConfirmNameMenuState(u32 newState); static void sub_8016110(void); static void sub_80161F8(void); static void sub_8016280(void); static void sub_801629C(void); -u32 sub_801602C(u32 mode, u8 *name) +u32 CreateConfirmNameMenu(u32 mode, u8 *name) { ResetUnusedInputStruct(); sub_800641C(NULL, TRUE, TRUE); @@ -52,32 +52,32 @@ u32 sub_801602C(u32 mode, u8 *name) break; } - sub_80160F4(0); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT); return 1; } u32 sub_8016080(void) { switch (sUnknown_203B200->state) { - case 0: + case CONFIRM_NAME_MENU_INIT: sub_80161F8(); break; - case 1: + case CONFIRM_NAME_MENU_PROMPT: HandleConfirmNameMenu(); break; - case 2: + case CONFIRM_NAME_MENU_TOO_LONG: sub_8016280(); break; - case 3: + case CONFIRM_NAME_MENU_EMPTY: sub_801629C(); break; - case 4: + case CONFIRM_NAME_MENU_EXIT: return 3; } return 0; } -void sub_80160D8(void) +void CleanConfirmNameMenu(void) { if (sUnknown_203B200 != NULL) { MemoryFree(sUnknown_203B200); @@ -85,7 +85,7 @@ void sub_80160D8(void) } } -static void sub_80160F4(u32 newState) +static void SetConfirmNameMenuState(u32 newState) { sUnknown_203B200->state = newState; nullsub_36(); @@ -99,11 +99,11 @@ static void nullsub_36(void) static void sub_8016110(void) { switch (sUnknown_203B200->state) { - case 0: + case CONFIRM_NAME_MENU_INIT: sub_80151C0(sUnknown_203B200->unk4, sUnknown_203B200->pokeName); break; - case 1: - CreateConfirmNameMenu(); + case CONFIRM_NAME_MENU_PROMPT: + BuildConfirmNameMenu(); if (sUnknown_203B200->unk4 == 1) sub_80922B4(gAvailablePokemonNames, sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH); else @@ -112,10 +112,10 @@ static void sub_8016110(void) sub_8014248(sIsNameOKPrompt, 0, 3, sUnknown_203B200->menus, 0, 4, 0, NULL, 32); break; - case 2: + case CONFIRM_NAME_MENU_TOO_LONG: sub_80141B4(sNameTooLong, 0, 0, 0x121); break; - case 3: + case CONFIRM_NAME_MENU_EMPTY: sub_80141B4(sEnterAName, 0, 0, 0x121); break; default: @@ -123,7 +123,7 @@ static void sub_8016110(void) } } -static void CreateConfirmNameMenu(void) +static void BuildConfirmNameMenu(void) { sUnknown_203B200->menus[0].text = gCommonYes[0]; sUnknown_203B200->menus[0].menuAction = MENU_ACTION_YES; @@ -146,15 +146,15 @@ static void sub_80161F8(void) sub_80155F0(); if (IsNameEmpty()) { - sub_80160F4(3); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_EMPTY); } else { length = sub_8015FEC(sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH); maxLength = sub_8016028(); // returns 60 if (length > maxLength) - sub_80160F4(2); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_TOO_LONG); else - sub_80160F4(1); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_PROMPT); } } @@ -167,11 +167,11 @@ static void HandleConfirmNameMenu(void) switch (temp) { case MENU_ACTION_YES: - sub_80160F4(4); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_EXIT); break; case MENU_ACTION_NO: case MENU_ACTION_DEFAULT: - sub_80160F4(0); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT); break; default: break; @@ -183,7 +183,7 @@ static void sub_8016280(void) s32 temp; if (sub_80144A4(&temp) == 0) - sub_80160F4(0); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT); } static void sub_801629C(void) @@ -191,7 +191,7 @@ static void sub_801629C(void) s32 temp; if (sub_80144A4(&temp) == 0) - sub_80160F4(0); + SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT); } static bool8 IsNameEmpty(void) @@ -214,4 +214,4 @@ static bool8 IsNameEmpty(void) } while (index < max); return TRUE; -} \ No newline at end of file +} diff --git a/src/code_801D014.c b/src/code_801D014.c index 4b929fcfd..90b7b570d 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -279,7 +279,7 @@ static void sub_801D3A8(void) CreateIQSkillMenu(sUnknown_203B250->index); break; case 10: - sub_8021774(sUnknown_203B250->currFriendAreaLocation, TRUE, 2); + CreateWigglytuffShopFriendAreaMenu(sUnknown_203B250->currFriendAreaLocation, TRUE, 2); break; case 11: InitializeJobListMenu(0); @@ -520,14 +520,14 @@ static void sub_801D824(void) static void sub_801D840(void) { - switch (sub_80217EC()) { + switch (HandleWigglytuffShopFriendAreaMenuInput()) { case 0: case 1: default: break; case 2: case 3: - sub_8021830(); + CleanWigglytuffShopFriendAreaInfoMenu(); sub_801D208(1); break; } diff --git a/src/code_806CD90.c b/src/code_806CD90.c index e43d0d5da..49f74198d 100644 --- a/src/code_806CD90.c +++ b/src/code_806CD90.c @@ -31,7 +31,7 @@ void sub_806CC10(void) if (entityInfo->unk166 != 0) { entityInfo->unk166--; if ((entityInfo->unk166 & 1) == 0) // If value is even: - sub_806CDD4(entity, 0, (entityInfo->action.direction - 1) & 7); + sub_806CDD4(entity, 0, (entityInfo->action.direction - 1) & DIRECTION_MASK); } } } diff --git a/src/debug_menu3.c b/src/debug_menu3.c index 0acc28ab0..4c3a7abb1 100644 --- a/src/debug_menu3.c +++ b/src/debug_menu3.c @@ -101,7 +101,7 @@ static void sub_803A9AC(void) sub_8012D60(&sUnknown_203B3F4->unk4C, sUnknown_203B3F4->menuItems, 0, 0, sUnknown_203B3F4->menuAction, 2); break; case 3: - sub_8021774(sUnknown_203B3F4->friendArea, 1, 0); + CreateWigglytuffShopFriendAreaMenu(sUnknown_203B3F4->friendArea, TRUE, 0); break; case 4: break; @@ -193,10 +193,10 @@ static void sub_803AB34(void) static void sub_803ABAC(void) { - switch (sub_80217EC()) { + switch (HandleWigglytuffShopFriendAreaMenuInput()) { case 2: case 3: - sub_8021830(); + CleanWigglytuffShopFriendAreaInfoMenu(); sub_803A924(1); break; case 0: @@ -226,4 +226,4 @@ static bool8 sub_803ABC8(void) } return TRUE; -} \ No newline at end of file +} diff --git a/src/debug_menu4.c b/src/debug_menu4.c index b9c2138ff..06e9ed714 100644 --- a/src/debug_menu4.c +++ b/src/debug_menu4.c @@ -124,7 +124,7 @@ static void sub_803AD88(void) sub_803AE58(); break; case 6: - sub_801602C(2, sUnknown_203B3F8->pokemon->name); + CreateConfirmNameMenu(2, sUnknown_203B3F8->pokemon->name); case 0: case 4: case 7: @@ -241,8 +241,8 @@ static void sub_803B034(void) switch (sub_8016080()) { case 2: case 3: - sub_80160D8(); + CleanConfirmNameMenu(); sub_803ACD0(2); break; } -} \ No newline at end of file +} diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 4e219fa76..cf0df2b95 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -256,7 +256,7 @@ void sub_8025518(void) sub_801F808(gUnknown_203B2B4->moveIDs); break; case 0x12: - sub_801602C(2,gUnknown_203B2B4->pokeStruct->name); + CreateConfirmNameMenu(2,gUnknown_203B2B4->pokeStruct->name); break; case FRIEND_LIST_MENU_STATE_EXIT: break; @@ -616,7 +616,7 @@ void sub_8025E24(void) { case 2: case 3: - sub_80160D8(); + CleanConfirmNameMenu(); nullsub_104(); SetFriendListMenuState(0x2); break; diff --git a/src/iq_skill_info_menu.c b/src/iq_skill_info_menu.c index 2677ba89b..dfc7d951b 100644 --- a/src/iq_skill_info_menu.c +++ b/src/iq_skill_info_menu.c @@ -24,6 +24,12 @@ static void sub_801C6E4(void); static void sub_801C7D4(void); static void sub_801C848(void); +enum IQSkillInfoMenuState +{ + IQ_SKILL_INFO_MENU_INIT, + IQ_SKILL_INFO_MENU_EXIT = 3 +}; + bool8 CreateIQSkillInfoMenu(u8 iqSkill) { ResetSprites(TRUE); @@ -35,20 +41,20 @@ bool8 CreateIQSkillInfoMenu(u8 iqSkill) sub_80140B4(sIQSkillInfoMenu->unk28); ResetUnusedInputStruct(); sub_800641C(sIQSkillInfoMenu->unk28, TRUE, TRUE); - SetIQSkillInfoMenuState(0); + SetIQSkillInfoMenuState(IQ_SKILL_INFO_MENU_INIT); return TRUE; } u32 HandleIQSkillInfoMenuState(void) { switch (sIQSkillInfoMenu->state) { - case 0: + case IQ_SKILL_INFO_MENU_INIT: sub_801C7D4(); break; case 1: sub_801C848(); break; - case 3: + case IQ_SKILL_INFO_MENU_EXIT: return 3; case 2: default: @@ -77,7 +83,7 @@ static void sub_801C6E4(void) struct subStruct_203B240 *preload; switch (sIQSkillInfoMenu->state) { - case 0: + case IQ_SKILL_INFO_MENU_INIT: sub_8008C54(sIQSkillInfoMenu->unk24); sub_80073B8(sIQSkillInfoMenu->unk24); skillName = GetIQSkillName(sIQSkillInfoMenu->chosenIQSkill); @@ -98,7 +104,7 @@ static void sub_801C6E4(void) sub_80073E0(sIQSkillInfoMenu->unk24); break; case 2: - case 3: + case IQ_SKILL_INFO_MENU_EXIT: break; } } @@ -121,7 +127,7 @@ static void sub_801C7D4(void) SetIQSkillInfoMenuState(1); } else - SetIQSkillInfoMenuState(3); + SetIQSkillInfoMenuState(IQ_SKILL_INFO_MENU_EXIT); break; case 2: PlayMenuSoundEffect(1); @@ -147,7 +153,7 @@ static void sub_801C848(void) if (sIQSkillInfoMenu->unk8 < sIQSkillInfoMenu->unkC) SetIQSkillInfoMenuState(1); else - SetIQSkillInfoMenuState(0); + SetIQSkillInfoMenuState(IQ_SKILL_INFO_MENU_INIT); break; case 2: PlayMenuSoundEffect(1); diff --git a/src/luminous_cave.c b/src/luminous_cave.c index 2d1efaf56..57d0d4511 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -50,6 +50,16 @@ enum LUMINOUS_CAVE_CANT_EVOLVE_YET, }; +enum LuminousCaveMenuActions +{ + LUMINOUS_CAVE_CANCEL = 1, + LUMINOUS_CAVE_INFO, + LUMINOUS_CAVE_EVOLVE, + LUMINOUS_CAVE_NO, + LUMINOUS_CAVE_YES, + +}; + extern u8 gAvailablePokemonNames[]; // 202DF98 extern u8 gPlayerName[]; // 202E2B8 @@ -209,9 +219,9 @@ static void UpdateLuminousCaveDialogue(void) switch (sLuminousCaveWork->state) { case LUMINOUS_CAVE_ENTRY: if (LuminousCave_HasOnly1Member()) - sLuminousCaveWork->menuAction1 = 3; + sLuminousCaveWork->menuAction1 = LUMINOUS_CAVE_EVOLVE; else - sLuminousCaveWork->menuAction1 = 1; + sLuminousCaveWork->menuAction1 = LUMINOUS_CAVE_CANCEL; sub_8024CFC(); sub_8014248(sSeekEvolutionIntro,0,sLuminousCaveWork->menuAction1,sLuminousCaveWork->unk34,sLuminousCaveWork->unk74,4,0,0,5); @@ -366,7 +376,7 @@ static void UpdateLuminousCaveDialogue(void) if (sLuminousCaveWork->pokeRenamed) { BoundedCopyStringtoBuffer(sLuminousCaveWork->pokeStruct->name,GetMonSpecies(sLuminousCaveWork->pokeStruct->speciesNum),POKEMON_NAME_LENGTH); } - sub_801602C(0,sLuminousCaveWork->pokeStruct->name); + CreateConfirmNameMenu(0,sLuminousCaveWork->pokeStruct->name); break; default: break; @@ -380,19 +390,19 @@ static void sub_8024CFC(void) MemoryFill16(sLuminousCaveWork->unk74, 0, sizeof(sLuminousCaveWork->unk74)); sLuminousCaveWork->unk34[loopMax].text = sEvolve0; - sLuminousCaveWork->unk34[loopMax].menuAction = 3; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_EVOLVE; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = gCommonInfo[0]; - sLuminousCaveWork->unk34[loopMax].menuAction = 2; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_INFO; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = gCommonCancel[0]; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = NULL; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; } static void sub_8024D48(void) @@ -403,16 +413,16 @@ static void sub_8024D48(void) loopMax = 0; MemoryFill16(sLuminousCaveWork->unk74, 0, sizeof(sLuminousCaveWork->unk74)); sLuminousCaveWork->unk34[loopMax].text = sNo0; - sLuminousCaveWork->unk34[loopMax].menuAction = 4; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_NO; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = sYes0; - sLuminousCaveWork->unk34[loopMax].menuAction = 5; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_YES; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = gCommonCancel[0]; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = NULL; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; for (index = 0; index < loopMax; index++) { if (sLuminousCaveWork->unk74[index] == 0) { @@ -421,7 +431,7 @@ static void sub_8024D48(void) } } - sLuminousCaveWork->menuAction2 = 4; + sLuminousCaveWork->menuAction2 = LUMINOUS_CAVE_NO; } static void sub_8024DBC(void) @@ -432,16 +442,16 @@ static void sub_8024DBC(void) loopMax = 0; MemoryFill16(sLuminousCaveWork->unk74, 0, sizeof(sLuminousCaveWork->unk74)); sLuminousCaveWork->unk34[loopMax].text = sNo0; - sLuminousCaveWork->unk34[loopMax].menuAction = 4; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_NO; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = sYes0; - sLuminousCaveWork->unk34[loopMax].menuAction = 5; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_YES; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = gCommonCancel[0]; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = NULL; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; for(index = 0; index < loopMax; index++) { @@ -452,7 +462,7 @@ static void sub_8024DBC(void) } } - sLuminousCaveWork->menuAction2 = 4; + sLuminousCaveWork->menuAction2 = LUMINOUS_CAVE_NO; } static void sub_8024E30(void) @@ -463,13 +473,13 @@ static void sub_8024E30(void) loopMax = 0; MemoryFill16(sLuminousCaveWork->unk74, 0, sizeof(sLuminousCaveWork->unk74)); sLuminousCaveWork->unk34[loopMax].text = sYes0; - sLuminousCaveWork->unk34[loopMax].menuAction = 5; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_YES; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = gCommonInfo[0]; - sLuminousCaveWork->unk34[loopMax].menuAction = 2; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_INFO; loopMax += 1; sLuminousCaveWork->unk34[loopMax].text = NULL; - sLuminousCaveWork->unk34[loopMax].menuAction = 1; + sLuminousCaveWork->unk34[loopMax].menuAction = LUMINOUS_CAVE_CANCEL; for(index = 0; index < loopMax; index++) { @@ -480,7 +490,7 @@ static void sub_8024E30(void) } } - sLuminousCaveWork->menuAction3 = 5; + sLuminousCaveWork->menuAction3 = LUMINOUS_CAVE_YES; } static void sub_8024E9C(void) @@ -488,19 +498,19 @@ static void sub_8024E9C(void) s32 menuAction; if(sub_80144A4(&menuAction) == 0) { - if(menuAction != 1) sLuminousCaveWork->menuAction1 = menuAction; + if(menuAction != LUMINOUS_CAVE_CANCEL) sLuminousCaveWork->menuAction1 = menuAction; switch(menuAction) { - case 3: + case LUMINOUS_CAVE_EVOLVE: if(LuminousCave_HasOnly1Member()) UpdateLuminousCaveState(LUMINOUS_CAVE_GIVE_ITEM_1); else UpdateLuminousCaveState(LUMINOUS_CAVE_COME_ALONE); break; - case 2: + case LUMINOUS_CAVE_INFO: UpdateLuminousCaveState(LUMINOUS_CAVE_EVOLVE_INFO); break; - case 1: + case LUMINOUS_CAVE_CANCEL: UpdateLuminousCaveState(LUMINOUS_CAVE_SHALL_RETURN); break; } @@ -512,21 +522,21 @@ static void sub_8024F00(void) s32 menuAction; if(sub_80144A4(&menuAction) == 0) { - if(menuAction != 1) sLuminousCaveWork->menuAction2 = menuAction; + if(menuAction != LUMINOUS_CAVE_CANCEL) sLuminousCaveWork->menuAction2 = menuAction; switch(menuAction) { - case 4: + case LUMINOUS_CAVE_NO: sLuminousCaveWork->evoItem1_InvIndex = INVENTORY_SIZE; sLuminousCaveWork->evoItem2_InvIndex = INVENTORY_SIZE; UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN); break; - case 5: + case LUMINOUS_CAVE_YES: if(GetNumberOfFilledInventorySlots() == 0) UpdateLuminousCaveState(LUMINOUS_CAVE_LACK_WHAT_NEEDED); else UpdateLuminousCaveState(0x6); break; - case 1: + case LUMINOUS_CAVE_CANCEL: UpdateLuminousCaveState(LUMINOUS_CAVE_ASK_EVOLVE); break; } @@ -538,19 +548,19 @@ static void sub_8024F70(void) s32 menuAction; if(sub_80144A4(&menuAction) == 0) { - if(menuAction != 1) sLuminousCaveWork->menuAction2 = menuAction; + if(menuAction != LUMINOUS_CAVE_CANCEL) sLuminousCaveWork->menuAction2 = menuAction; switch(menuAction) { - case 4: + case LUMINOUS_CAVE_NO: UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN); break; - case 5: + case LUMINOUS_CAVE_YES: if(GetNumberOfFilledInventorySlots() < 2) UpdateLuminousCaveState(LUMINOUS_CAVE_ONLY_ONE_ITEM); else UpdateLuminousCaveState(0xB); break; - case 1: + case LUMINOUS_CAVE_CANCEL: UpdateLuminousCaveState(LUMINOUS_CAVE_ASK_EVOLVE); break; } @@ -614,19 +624,19 @@ static void sub_80250EC(void) if(!sub_8012FD8(&sLuminousCaveWork->unk84)) { sub_8013114(&sLuminousCaveWork->unk84, &menuAction); - if(menuAction != 1) sLuminousCaveWork->menuAction3 = menuAction; + if(menuAction != LUMINOUS_CAVE_CANCEL) sLuminousCaveWork->menuAction3 = menuAction; } switch(menuAction) { - case 5: + case LUMINOUS_CAVE_YES: sub_801A928(); UpdateLuminousCaveState(0xA); break; - case 2: + case LUMINOUS_CAVE_INFO: sub_8099690(0); UpdateLuminousCaveState(0x9); break; - case 1: + case LUMINOUS_CAVE_CANCEL: UpdateLuminousCaveState(0x7); break; } @@ -641,19 +651,19 @@ static void sub_802515C(void) if(!sub_8012FD8(&sLuminousCaveWork->unk84)) { sub_8013114(&sLuminousCaveWork->unk84, &menuAction); - if(menuAction != 1) sLuminousCaveWork->menuAction3 = menuAction; + if(menuAction != LUMINOUS_CAVE_CANCEL) sLuminousCaveWork->menuAction3 = menuAction; } switch(menuAction) { - case 5: + case LUMINOUS_CAVE_YES: sub_801A928(); UpdateLuminousCaveState(LUMINOUS_CAVE_LET_US_BEGIN); break; - case 2: + case LUMINOUS_CAVE_INFO: sub_8099690(0); UpdateLuminousCaveState(0xE); break; - case 1: + case LUMINOUS_CAVE_CANCEL: UpdateLuminousCaveState(0xC); break; } @@ -694,7 +704,7 @@ static void sub_8025204(void) switch(sub_8016080()) { case 3: - sub_80160D8(); + CleanConfirmNameMenu(); sLuminousCaveWork->pokeRenamed = IsPokemonRenamed(sLuminousCaveWork->pokeStruct); UpdateLuminousCaveState(LUMINOUS_CAVE_SHALL_RETURN); break; @@ -749,4 +759,4 @@ static bool8 LuminousCave_HasOnly1Member(void) return TRUE; else return FALSE; -} \ No newline at end of file +} diff --git a/src/personality_test1.c b/src/personality_test1.c index 9d64b1df2..8276fdc78 100644 --- a/src/personality_test1.c +++ b/src/personality_test1.c @@ -348,14 +348,14 @@ static void AdvanceToPartnerNicknameScreen(void) static void NicknamePartner(void) { CopyStringtoBuffer(sPersonalityTestTracker->PartnerNick, GetMonSpecies(sPersonalityTestTracker->PartnerID)); - sub_801602C(3, sPersonalityTestTracker->PartnerNick); + CreateConfirmNameMenu(3, sPersonalityTestTracker->PartnerNick); sPersonalityTestTracker->TestState = PERSONALITY_END_INTRO; } static void PrintEndIntroText(void) { if (sub_8016080()) { - sub_80160D8(); + CleanConfirmNameMenu(); sub_80141B4(gEndIntroText, 0, 0, 0x301); sPersonalityTestTracker->TestState = PERSONALITY_ADVANCE_TO_TEST_END; } diff --git a/src/wigglytuff_shop2.c b/src/wigglytuff_shop2.c index 0325869fb..b28c4907a 100644 --- a/src/wigglytuff_shop2.c +++ b/src/wigglytuff_shop2.c @@ -20,11 +20,11 @@ static EWRAM_DATA_2 WigglytuffShop2Work *sWigglytuffShop2Work = {0}; static void sub_8021820(void); static void sub_8021878(void); -static void sub_8021894(void); +static void PopulateWigglytuffShopFriendAreaInfoScreen(void); static void sub_8021A60(void); static s32 sub_8021B58(s16 species); -bool8 sub_8021774(u8 friendArea, bool8 a1, s32 a2) +bool8 CreateWigglytuffShopFriendAreaMenu(u8 friendArea, bool8 a1, s32 a2) { sWigglytuffShop2Work = MemoryAlloc(sizeof(WigglytuffShop2Work), 8); sWigglytuffShop2Work->friendArea = friendArea; @@ -39,7 +39,7 @@ bool8 sub_8021774(u8 friendArea, bool8 a1, s32 a2) return TRUE; } -u32 sub_80217EC(void) +u32 HandleWigglytuffShopFriendAreaMenuInput(void) { switch (sub_8012A64(&sWigglytuffShop2Work->unk0, sWigglytuffShop2Work->unk74)) { case 2: @@ -56,10 +56,10 @@ u32 sub_80217EC(void) static void sub_8021820(void) { sub_8021878(); - sub_8021894(); + PopulateWigglytuffShopFriendAreaInfoScreen(); } -void sub_8021830(void) +void CleanWigglytuffShopFriendAreaInfoMenu(void) { if (sWigglytuffShop2Work) { sWigglytuffShop2Work->unk7C[sWigglytuffShop2Work->unk74] = sUnknown_80DC4BC; @@ -76,7 +76,7 @@ static void sub_8021878(void) sub_800641C(sWigglytuffShop2Work->unk7C, TRUE, TRUE); } -static void sub_8021894(void) +static void PopulateWigglytuffShopFriendAreaInfoScreen(void) { const u8 *string; u32 y; @@ -111,16 +111,16 @@ static void sub_8021894(void) for (i = 0; i < sWigglytuffShop2Work->numPokemoninFriendArea; i++) { x = (i % 3) * 63 + 7; y = (i / 3) * 12 + 71; - sub_808D930(buffer2, sWigglytuffShop2Work->unkE[i]); + sub_808D930(buffer2, sWigglytuffShop2Work->friendAreaSpecies[i]); - switch (sWigglytuffShop2Work->unk30[i]) { - case 0: // Not recruited/seen + switch (sWigglytuffShop2Work->pokemonStatus[i]) { + case POKEMON_UNKNOWN: xxx_call_draw_string(x, y, gCommonTripleQuestionMark[0], sWigglytuffShop2Work->unk74, 0); break; - case 1: // Seen but not recruited + case POKEMON_SEEN: xxx_call_draw_string(x, y, buffer2, sWigglytuffShop2Work->unk74, 0); break; - case 2: + case POKEMON_RECRUITED: sprintfStatic(buffer1, sFmtCyanString, buffer2); xxx_call_draw_string(x, y, buffer1, sWigglytuffShop2Work->unk74, 0); break; @@ -140,8 +140,8 @@ static void sub_8021A60(void) sWigglytuffShop2Work->numPokemoninFriendArea = 0; for (index = 0; index < 0x10; index++) { - sWigglytuffShop2Work->unkE[index] = 0; - sWigglytuffShop2Work->unk30[index] = 0; + sWigglytuffShop2Work->friendAreaSpecies[index] = 0; + sWigglytuffShop2Work->pokemonStatus[index] = POKEMON_UNKNOWN; } for (index = 0; index < MONSTER_MAX; index++) { @@ -149,7 +149,7 @@ static void sub_8021A60(void) if (sWigglytuffShop2Work->friendArea == GetFriendArea(index2) && index2 == GetBaseSpeciesNoUnown(index2)) { iVar6 = sWigglytuffShop2Work->numPokemoninFriendArea; - sWigglytuffShop2Work->unkE[iVar6] = index2; + sWigglytuffShop2Work->friendAreaSpecies[iVar6] = index2; sWigglytuffShop2Work->numPokemoninFriendArea = iVar6 + 1; } } @@ -160,7 +160,7 @@ static void sub_8021A60(void) sVar4 = sub_8021B58(index); if (sVar4 != -1) - sWigglytuffShop2Work->unk30[sVar4] = 1; + sWigglytuffShop2Work->pokemonStatus[sVar4] = POKEMON_SEEN; } for (index = 0; index < NUM_MONSTERS; index++) { @@ -170,7 +170,7 @@ static void sub_8021A60(void) sVar4 = sub_8021B58(pokeStruct->speciesNum); if (sVar4 != -1) - sWigglytuffShop2Work->unk30[sVar4] = 2; + sWigglytuffShop2Work->pokemonStatus[sVar4] = POKEMON_RECRUITED; } } @@ -182,8 +182,8 @@ static s32 sub_8021B58(s16 species) baseSpecies = GetBaseSpeciesNoUnown(species); for (i = 0; i < sWigglytuffShop2Work->numPokemoninFriendArea; i++) { - if (baseSpecies == sWigglytuffShop2Work->unkE[i]) + if (baseSpecies == sWigglytuffShop2Work->friendAreaSpecies[i]) return i; } return -1; -} \ No newline at end of file +} diff --git a/src/wigglytuff_shop3.c b/src/wigglytuff_shop3.c index 089075c9c..e530d89ac 100644 --- a/src/wigglytuff_shop3.c +++ b/src/wigglytuff_shop3.c @@ -41,7 +41,7 @@ static void sub_8022538(void); static void sub_80225C8(void); static void sub_8022668(void); static void sub_8022684(void); -static void sub_80226CC(void); +static void WigglytuffShop_GoToFallbackState(void); static void sub_80226F0(void); static void sub_8022790(void); @@ -112,13 +112,13 @@ u32 sub_8021C5C(void) case WIGGLYTUFF_EXIT: return 3; default: - sub_80226CC(); + WigglytuffShop_GoToFallbackState(); break; } return 0; } -void sub_8021D1C(void) +void CleanWigglytuffShop(void) { if (sWigglytuffShop3Work) { CloseFile(sWigglytuffShop3Work->faceFile); @@ -229,7 +229,7 @@ static void UpdateWigglytuffDialogue(void) sub_8014248(gCommonWigglytuff[sWigglytuffShop3Work->mode][WIGGLY_DLG_05], 0, 5, sWigglytuffShop3Work->unk1C, 0, 4, 0, sWigglytuffShop3Work->unkCC, 12); break; case FRIEND_AREA_INFO: - sub_8021774(sWigglytuffShop3Work->chosenFriendArea, FALSE, 2); + CreateWigglytuffShopFriendAreaMenu(sWigglytuffShop3Work->chosenFriendArea, FALSE, 2); break; case CONFIRM_BUY_FRIEND_AREA: sWigglytuffShop3Work->fallbackState = WIGGLYTUFF_UNKD; @@ -516,10 +516,10 @@ static void sub_80225C8(void) static void sub_8022668(void) { - switch (sub_80217EC()) { + switch (HandleWigglytuffShopFriendAreaMenuInput()) { case 2: case 3: - sub_8021830(); + CleanWigglytuffShopFriendAreaInfoMenu(); SetWigglytuffState(WIGGLYTUFF_UNKA); break; case 0: @@ -546,7 +546,7 @@ static void sub_8022684(void) } } -static void sub_80226CC(void) +static void WigglytuffShop_GoToFallbackState(void) { s32 temp; @@ -596,4 +596,4 @@ static void sub_8022790(void) sWigglytuffShop3Work->unk134--; else SetWigglytuffState(sWigglytuffShop3Work->fallbackState); -} \ No newline at end of file +} From 1ccc5886c843849cf8cfe01d8e95b491aef58562 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 4 Jul 2024 11:51:20 -0700 Subject: [PATCH 32/39] document more menu actions --- include/constants/wonder_mail.h | 6 +- src/rescue_password_menu.c | 2 +- src/wonder_mail.c | 176 ++++++++++++++++++-------------- src/wonder_mail_5.c | 2 +- src/wonder_mail_6.c | 6 +- 5 files changed, 108 insertions(+), 84 deletions(-) diff --git a/include/constants/wonder_mail.h b/include/constants/wonder_mail.h index 48cbc2a33..d0cc5c6b6 100644 --- a/include/constants/wonder_mail.h +++ b/include/constants/wonder_mail.h @@ -34,8 +34,8 @@ enum WonderMailTypes { WONDER_MAIL_TYPE_NONE = 0, WONDER_MAIL_TYPE_SOS, - //WONDER_MAIL_TYPE_SOS = 2, // SOS MAIL is 1 and 2? - // 2 - 3 + WONDER_MAIL_TYPE_SOS_1, + // 3 WONDER_MAIL_TYPE_AOK = 4, WONDER_MAIL_TYPE_THANK_YOU = 5, WONDER_MAIL_TYPE_WONDER = 5, @@ -82,4 +82,4 @@ enum WonderMailMissionTypes #define MAX_ITEM_REWARDS 3 -#endif //GUARD_CONSTANTS_WONDER_MAIL_H \ No newline at end of file +#endif //GUARD_CONSTANTS_WONDER_MAIL_H diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index 1ca574b68..6752ed5e1 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -641,7 +641,7 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, unkStruct_203B480 *param_3) if (param_3->mailType != WONDER_MAIL_TYPE_SOS) { return PASSWORD_ENTRY_NOT_SOS_MAIL; } - else if ( (HasMail(2, param_3->unk10.unk10)) || (HasMail(WONDER_MAIL_TYPE_AOK, param_3->unk10.unk10)) || (HasMail(WONDER_MAIL_TYPE_COMPLETED, param_3->unk10.unk10)) || (sub_8095298(param_3->unk10.unk10))) { + else if ( (HasMail(WONDER_MAIL_TYPE_SOS_1, param_3->unk10.unk10)) || (HasMail(WONDER_MAIL_TYPE_AOK, param_3->unk10.unk10)) || (HasMail(WONDER_MAIL_TYPE_COMPLETED, param_3->unk10.unk10)) || (sub_8095298(param_3->unk10.unk10))) { return PASSWORD_ENTRY_DUPLICATE_SOS_MAIL; } else if (FindOpenMailSlot() == -1) { diff --git a/src/wonder_mail.c b/src/wonder_mail.c index bf0cfcd91..8aa79c0bd 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -129,20 +129,23 @@ enum FriendRescueStates FRIEND_RESCUE_COMMUNICATING_PRE = 5, FRIEND_RESCUE_COMMUNICATING = 6, FRIEND_RESCUE_ERROR = 7, - // 8 + RECEIVE_SOS_MAIL, NO_MAIL_ROOM = 9, // 10 - 11 NO_SOS_MAIL = 12, - // 13 + CHOOSE_DELETE_SOS_MAIL = 13, NO_AOK_MAIL = 14, - // 15 + CHOOSE_DELETE_AOK_MAIL = 15, NO_MAIL = 16, - // 17 + CHOOSE_DELETE_ALL_MAIL, PROMPT_DELETE_ALL_MAIL = 18, CONFIRM_DELETE_ALL_MAIL_1, CONFIRM_DELETE_ALL_MAIL_2, DELETE_ALL_MAIL_SAVE_PRE, - // 22 - 25 + // 22 + SAVING_ADVENTURE = 23, + FINISH_SAVING_ADVENTURE = 24, + PROMPT_DELETE_ANY_OTHER_MAIL = 25, NO_SOS_MAIL_TO_SEND = 26, // 27 CANT_GO_TO_DUNGEON = 28, @@ -171,6 +174,27 @@ enum FriendRescueStates DEFAULT_FALLBACK_STATE = 61 }; +enum MenuActions { + RECEIVE_SOS_MAIL_ACTION, + LEAVE_FOR_RESCUE_ACTION, + SEND_AOK_MAIL_ACTION, + DELETE_MAIL_ACTION, + // 0x4 + DELETE_SOS_MAIL_ACTION = 5, + DELETE_AOK_MAIL_ACTION, + DELETE_ALL_MAIL_ACTION, + YES_ACTION, + NO_ACTION, + CANCEL_ACTION, + CONFIRM_ACTION, + INFO_ACTION, + GAME_LINK_CABLE_ACTION, + // 14 + PASSWORD_ACTION = 15, + SEND_POKEMON_ACTION = 17, + SEND_WO_POKEMON_ACTION = 18 +}; + #include "data/wonder_mail_1.h" @@ -299,7 +323,7 @@ u32 sub_8028078(void) case FRIEND_RESCUE_COMMUNICATING_PRE: sub_802958C(); break; - case 8: + case RECEIVE_SOS_MAIL: sub_8029208(); break; case NO_SOS_MAIL_TO_SEND: @@ -333,17 +357,17 @@ u32 sub_8028078(void) case 0xb: sub_8028D4C(); break; - case 0xd: - case 0xf: + case CHOOSE_DELETE_SOS_MAIL: + case CHOOSE_DELETE_AOK_MAIL: sub_8028DE8(0xA); break; - case 0x11: + case CHOOSE_DELETE_ALL_MAIL: sub_8028E08(); break; case NO_SOS_MAIL: case NO_AOK_MAIL: case NO_MAIL: - sub_8028DE8(0x19); + sub_8028DE8(PROMPT_DELETE_ANY_OTHER_MAIL); break; case PROMPT_DELETE_ALL_MAIL: sub_8028E24(); @@ -351,13 +375,13 @@ u32 sub_8028078(void) case CONFIRM_DELETE_ALL_MAIL_1: sub_8028E54(); break; - case 0x17: + case SAVING_ADVENTURE: sub_8028E84(); break; - case 0x18: + case FINISH_SAVING_ADVENTURE: sub_8028EAC(); break; - case 0x19: + case PROMPT_DELETE_ANY_OTHER_MAIL: sub_8028ED4(); break; case CONFIRM_DELETE_ALL_MAIL_2: @@ -623,10 +647,10 @@ void sub_8028348(void) switch((u32)sUnknown_203B2C0->unk538) { case 5: - sub_8030F58(2); + sub_8030F58(WONDER_MAIL_TYPE_SOS_1); // SOS break; case 6: - sub_8030F58(4); + sub_8030F58(WONDER_MAIL_TYPE_AOK); // AOK break; default: case 7: @@ -636,19 +660,19 @@ void sub_8028348(void) case 0xB: sub_8014248(gUnknown_80DE48C, 0, 5, gUnknown_80DD9EC, 0, 4, 0, &sUnknown_203B2C0->faceFile,0xC); break; - case 0xD: + case CHOOSE_DELETE_SOS_MAIL: sub_80141B4(gUnknown_80DE4B8, 0, &sUnknown_203B2C0->faceFile,0x10d); break; case NO_SOS_MAIL: sub_80141B4(gUnknown_80DE4F0, 0, &sUnknown_203B2C0->faceFile,0x10d); break; - case 0xF: + case CHOOSE_DELETE_AOK_MAIL: sub_80141B4(gUnknown_80DE524, 0, &sUnknown_203B2C0->faceFile,0x10d); break; case NO_AOK_MAIL: sub_80141B4(gUnknown_80DE614, 0, &sUnknown_203B2C0->faceFile,0x10d); break; - case 0x11: + case CHOOSE_DELETE_ALL_MAIL: sub_80141B4(gUnknown_80DE648, 0, &sUnknown_203B2C0->faceFile,0x10d); break; case NO_MAIL: @@ -660,13 +684,13 @@ void sub_8028348(void) case CONFIRM_DELETE_ALL_MAIL_1: sub_8014248(gUnknown_80DE754, 0, 8, gUnknown_80DDA48, 0, 4, 0, &sUnknown_203B2C0->faceFile,0xC); break; - case 0x17: + case SAVING_ADVENTURE: sub_80141B4(gUnknown_80DE7B8, 0, &sUnknown_203B2C0->faceFile,0x10d); break; - case 0x18: + case FINISH_SAVING_ADVENTURE: sub_80141B4(gUnknown_80DE7E8, 0, &sUnknown_203B2C0->faceFile,0x10d); break; - case 0x19: + case PROMPT_DELETE_ANY_OTHER_MAIL: sub_8014248(gUnknown_80DE808, 0, 8, gUnknown_80DDA64, 0, 4, 0, &sUnknown_203B2C0->faceFile,0xC); break; case CONFIRM_DELETE_ALL_MAIL_2: @@ -757,19 +781,19 @@ void sub_8028BF0(void) sUnknown_203B2C0->speciesNum = -1; switch(menuChoice) { - case 0: + case RECEIVE_SOS_MAIL_ACTION: sUnknown_203B2C0->unk40 = 3; sUnknown_203B2C0->unk538 = 0; if(FindOpenMailSlot() != -1) { - SetFriendRescueCounterState(8); + SetFriendRescueCounterState(RECEIVE_SOS_MAIL); } else { SetFriendRescueCounterState(NO_MAIL_ROOM); } break; - case 1: + case LEAVE_FOR_RESCUE_ACTION: if(CountMailType(2) != 0) { SetFriendRescueCounterState(PROMPT_CHOOSE_SOS_MAIL); @@ -779,7 +803,7 @@ void sub_8028BF0(void) SetFriendRescueCounterState(NO_SOS_MAIL_TO_SEND); } break; - case 2: + case SEND_AOK_MAIL_ACTION: sUnknown_203B2C0->unk40 = 4; sUnknown_203B2C0->unk538 = 2; if(CountMailType(WONDER_MAIL_TYPE_AOK) != 0) @@ -791,10 +815,10 @@ void sub_8028BF0(void) SetFriendRescueCounterState(NO_AOK_MAIL_TO_SEND); } break; - case 3: + case DELETE_MAIL_ACTION: SetFriendRescueCounterState(11); break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_EXIT_PRE); break; default: @@ -831,11 +855,11 @@ void sub_8028CFC() sub_80310B4(); if(newMailCount != sUnknown_203B2C0->mailCount) { - SetFriendRescueCounterState(0x17); + SetFriendRescueCounterState(SAVING_ADVENTURE); } else { - SetFriendRescueCounterState(0x19); + SetFriendRescueCounterState(PROMPT_DELETE_ANY_OTHER_MAIL); } break; default: @@ -854,25 +878,25 @@ void sub_8028D4C() sUnknown_203B2C0->unk538 = menuChoice; switch(sUnknown_203B2C0->unk538) { - case 5: + case DELETE_SOS_MAIL_ACTION: if(HasNoWonderMailType(2)) SetFriendRescueCounterState(NO_SOS_MAIL); else - SetFriendRescueCounterState(0xD); + SetFriendRescueCounterState(CHOOSE_DELETE_SOS_MAIL); break; - case 6: + case DELETE_AOK_MAIL_ACTION: if(HasNoWonderMailType(WONDER_MAIL_TYPE_AOK)) SetFriendRescueCounterState(NO_AOK_MAIL); else - SetFriendRescueCounterState(0xF); + SetFriendRescueCounterState(CHOOSE_DELETE_AOK_MAIL); break; - case 7: + case DELETE_ALL_MAIL_ACTION: if(HasNoWonderMailType(WONDER_MAIL_TYPE_NONE)) SetFriendRescueCounterState(NO_MAIL); else - SetFriendRescueCounterState(0x11); + SetFriendRescueCounterState(CHOOSE_DELETE_ALL_MAIL); break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: @@ -912,10 +936,10 @@ void sub_8028E24() } switch(menuChoice) { - case 8: + case YES_ACTION: SetFriendRescueCounterState(CONFIRM_DELETE_ALL_MAIL_1); break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: @@ -933,10 +957,10 @@ void sub_8028E54() } switch(menuChoice) { - case 8: + case YES_ACTION: SetFriendRescueCounterState(CONFIRM_DELETE_ALL_MAIL_2); break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: @@ -952,7 +976,7 @@ void sub_8028E84() { return; } - SetFriendRescueCounterState(0x18); + SetFriendRescueCounterState(FINISH_SAVING_ADVENTURE); sub_8011C28(1); PrepareSavePakWrite(MONSTER_NONE); } @@ -968,7 +992,7 @@ void sub_8028EAC() if(!WriteSavePak()) { FinishWriteSavePak(); - SetFriendRescueCounterState(0x19); + SetFriendRescueCounterState(PROMPT_DELETE_ANY_OTHER_MAIL); } } @@ -981,11 +1005,11 @@ void sub_8028ED4() return; } switch(menuChoice){ - case 8: + case YES_ACTION: SetFriendRescueCounterState(0xB); break; - case 9: - case 10: + case NO_ACTION: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_EXIT_PRE); break; default: @@ -1071,7 +1095,7 @@ void sub_8028FDC(void) } switch(menuChoice) { - case 8: + case YES_ACTION: mail = GetMailatIndex(sUnknown_203B2C0->mailIndex); if(!sub_80A2824(mail->unk4.dungeon.id)) { @@ -1086,8 +1110,8 @@ void sub_8028FDC(void) SetFriendRescueCounterState(0x1B); } break; - case 9: - case 10: + case NO_ACTION: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: @@ -1140,11 +1164,11 @@ void sub_80290F0(void) } switch(menuAction) { - case 11: + case CONFIRM_ACTION: sub_803084C(); SetFriendRescueCounterState(0x22); break; - case 12: + case INFO_ACTION: sUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; sub_8006518(sUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); @@ -1153,7 +1177,7 @@ void sub_80290F0(void) SetFriendRescueCounterState(0x21); break; case 4: - case 10: + case CANCEL_ACTION: sub_8035CC0(sUnknown_203B2C0->unk35C, 2); sub_8030810(1); SetFriendRescueCounterState(0x1F); @@ -1197,7 +1221,7 @@ void sub_8029208(void) switch(menuChoice) { - case 13: + case GAME_LINK_CABLE_ACTION: case 14: sUnknown_203B2C0->unk534 = 13; switch(sUnknown_203B2C0->unk538) @@ -1212,7 +1236,7 @@ void sub_8029208(void) return; } break; - case 15: + case PASSWORD_ACTION: sUnknown_203B2C0->unk534 = 15; switch(sUnknown_203B2C0->unk538) { @@ -1226,7 +1250,7 @@ void sub_8029208(void) return; } break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } @@ -1241,7 +1265,7 @@ void sub_80292A4(void) } switch(menuChoice) { - case 8: + case YES_ACTION: switch(sUnknown_203B2C0->unk538) { case 0: @@ -1250,7 +1274,7 @@ void sub_80292A4(void) break; } break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } @@ -1405,10 +1429,10 @@ void sub_802955C(void) } switch(menuChoice) { - case 8: + case YES_ACTION: SetFriendRescueCounterState(PROMPT_SOS_MAIL_PASSWORD); break; - case 10: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } @@ -1433,11 +1457,11 @@ void sub_80295A8(void) } switch(menuChoice) { - case 8: - SetFriendRescueCounterState(0x8); + case YES_ACTION: + SetFriendRescueCounterState(RECEIVE_SOS_MAIL); break; - case 9: - case 10: + case NO_ACTION: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; @@ -1489,11 +1513,11 @@ void sub_8029684(void) } switch(menuAction) { - case 0xB: + case CONFIRM_ACTION: sub_803084C(); SetFriendRescueCounterState(0x2D); break; - case 0xC: + case INFO_ACTION: sUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; sub_8006518(sUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); @@ -1502,7 +1526,7 @@ void sub_8029684(void) SetFriendRescueCounterState(0x2C); break; case 0x4: - case 0xA: + case CANCEL_ACTION: sub_8035CC0(sUnknown_203B2C0->unk35C,2); sub_8030810(1); SetFriendRescueCounterState(0x2A); @@ -1589,11 +1613,11 @@ void sub_8029884(void) } switch(menuAction) { - case 0xB: + case CONFIRM_ACTION: sub_8023C60(); SetFriendRescueCounterState(4); break; - case 0xC: + case INFO_ACTION: sUnknown_203B2C0->fallbackState = DEFAULT_FALLBACK_STATE; sub_8006518(sUnknown_203B2C0->unk3BC); ResetUnusedInputStruct(); @@ -1602,7 +1626,7 @@ void sub_8029884(void) SetFriendRescueCounterState(0x35); break; case 0x4: - case 0xA: + case CANCEL_ACTION: sub_8035CC0(sUnknown_203B2C0->unk35C, 3); sub_8023B7C(1); SetFriendRescueCounterState(SELECT_HELPER_POKEMON); @@ -1651,10 +1675,10 @@ void sub_80299AC(void) } switch(menuChoice) { - case 0x12: + case SEND_WO_POKEMON_ACTION: SetFriendRescueCounterState(4); break; - case 0xA: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; default: @@ -1672,13 +1696,13 @@ void sub_80299D8(void) switch(menuChoice) { - case 8: + case YES_ACTION: SetFriendRescueCounterState(4); break; - case 9: + case NO_ACTION: SetFriendRescueCounterState(PROMPT_SELECT_HELPER_POKEMON); break; - case 0xA: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } @@ -1693,7 +1717,7 @@ void sub_8029A18(void) } switch(menuChoice) { - case 0x11: + case SEND_POKEMON_ACTION: if(sub_8024108(3) != 0) { SetFriendRescueCounterState(NO_POKEMON_IN_FRIEND_AREA); @@ -1703,10 +1727,10 @@ void sub_8029A18(void) SetFriendRescueCounterState(PROMPT_SELECT_HELPER_POKEMON); } break; - case 0x12: + case SEND_WO_POKEMON_ACTION: SetFriendRescueCounterState(0x4); break; - case 0xA: + case CANCEL_ACTION: SetFriendRescueCounterState(FRIEND_RESCUE_MAIN); break; } diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index 389cebcca..b512f7456 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -136,7 +136,7 @@ void sub_8030E48(void) } switch(mail->mailType) { - case 2: + case WONDER_MAIL_TYPE_SOS_1: case WONDER_MAIL_TYPE_AOK: stack.mailDescriptionType = 10; break; diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index a23a3e62e..1fc880d84 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -119,11 +119,11 @@ bool8 sub_8030F58(u32 wonderMailType) if (HasNoWonderMailType(wonderMailType)) { switch(wonderMailType) { - case 2: + case WONDER_MAIL_TYPE_SOS_1: // "You don{APOSTROPHE}t have any {COLOR_1 LIGHT_BLUE}SOS Mail{END_COLOR_TEXT_1}.\0" sub_80141B4(gUnknown_80E09D8,0,&gUnknown_203B328->faceFile,0x101); break; - case 4: + case WONDER_MAIL_TYPE_AOK: // "You don{APOSTROPHE}t have any {COLOR_1 LIGHT_BLUE}A-OK Mail{END_COLOR_TEXT_1}.\0" sub_80141B4(gUnknown_80E0A0C,0,&gUnknown_203B328->faceFile,0x101); break; @@ -327,7 +327,7 @@ void sub_80313D8(u32 state) } break; } - if ((gUnknown_203B328->wonderMailType == 2) || (gUnknown_203B328->wonderMailType == 4)) { + if ((gUnknown_203B328->wonderMailType == 2) || (gUnknown_203B328->wonderMailType == WONDER_MAIL_TYPE_AOK)) { if (HasNoWonderMailType(gUnknown_203B328->wonderMailType)) { sub_80310E4(5); } From 859f577beaf562a598d2d06844ffa9369ff38842 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 5 Jul 2024 09:17:21 -0700 Subject: [PATCH 33/39] more menu action documentation --- include/kecleon_bros1.h | 5 +- src/felicity_bank.c | 27 +++++--- src/kangaskhan_storage2.c | 53 ++++++++------- src/kecleon_bros1.c | 132 ++++++++++++++++++++------------------ src/pokemon_mail.c | 10 +-- src/wonder_mail_3_mid.c | 18 ++++-- src/wonder_mail_4.c | 22 +++---- src/wonder_mail_5.c | 4 +- src/wonder_mail_6.c | 68 ++++++++++++-------- 9 files changed, 192 insertions(+), 147 deletions(-) diff --git a/include/kecleon_bros1.h b/include/kecleon_bros1.h index f753ce5b0..85d25b280 100644 --- a/include/kecleon_bros1.h +++ b/include/kecleon_bros1.h @@ -14,7 +14,8 @@ enum KecleonStoreStates KECLEON_STORE_EXIT = 4, KECLEON_STORE_NO_STORE_ITEMS, KECLEON_STORE_NO_MONEY, - // 7 - 8 + KECLEON_STORE_TOO_MUCH_MONEY, + // 8 KECLEON_STORE_NO_ITEMS_TO_SELL = 9, KECLEON_STORE_TOO_MANY_ITEMS, // 11 @@ -59,4 +60,4 @@ bool8 CreateKecleonBros(u32 mode); void DeleteKecleonBros(void); u32 KecleonBrosCallback(void); -#endif // GUARD_KECLEON_BROS1_H \ No newline at end of file +#endif // GUARD_KECLEON_BROS1_H diff --git a/src/felicity_bank.c b/src/felicity_bank.c index c368359fa..761190daf 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -32,6 +32,13 @@ static void sub_8016B00(void); static void sub_8016B24(void); static void sub_8016B48(u8 action); +enum MenuActions { + CANCEL_ACTION = 1, + STORE_ACTION, + TAKE_ACTION, + INFO_ACTION +}; + bool8 CreateFelicityBank(s32 mode) { u8 *monName; @@ -267,23 +274,23 @@ static void CreateFelicityBankShopMenu(void) MemoryFill16(sFelicityBankWork->unk54, 0, sizeof(sFelicityBankWork->unk54)); sFelicityBankWork->unk14[loopMax].text = gCommonStore[0]; - sFelicityBankWork->unk14[loopMax].menuAction = 2; + sFelicityBankWork->unk14[loopMax].menuAction = STORE_ACTION; loopMax++; sFelicityBankWork->unk14[loopMax].text = gCommonTake[0]; - sFelicityBankWork->unk14[loopMax].menuAction = 3; + sFelicityBankWork->unk14[loopMax].menuAction = TAKE_ACTION; loopMax++; sFelicityBankWork->unk14[loopMax].text = gCommonInfo[0]; - sFelicityBankWork->unk14[loopMax].menuAction = 4; + sFelicityBankWork->unk14[loopMax].menuAction = INFO_ACTION; loopMax++; sFelicityBankWork->unk14[loopMax].text = gCommonCancel[0]; - sFelicityBankWork->unk14[loopMax].menuAction = 1; + sFelicityBankWork->unk14[loopMax].menuAction = CANCEL_ACTION; loopMax++; sFelicityBankWork->unk14[loopMax].text = NULL; - sFelicityBankWork->unk14[loopMax].menuAction = 1; + sFelicityBankWork->unk14[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sFelicityBankWork->unk54[i] == 0 && sFelicityBankWork->unk14[i].menuAction == sFelicityBankWork->menuAction) @@ -306,16 +313,16 @@ static void sub_80169BC(void) sFelicityBankWork->menuAction = menuAction; switch (menuAction) { - case 2: + case STORE_ACTION: UpdateFelicityBankState(7); break; - case 3: + case TAKE_ACTION: UpdateFelicityBankState(10); break; - case 4: + case INFO_ACTION: UpdateFelicityBankState(3); break; - case 1: + case CANCEL_ACTION: UpdateFelicityBankState(4); break; } @@ -411,4 +418,4 @@ void DrawTeamMoneyBox(u32 param_1) xxx_call_draw_string(6, 0, sMoney, param_1, 0); sub_8012BC4(42, 12, gTeamInventoryRef->teamMoney, 5, 5, param_1); sub_80073E0(param_1); -} \ No newline at end of file +} diff --git a/src/kangaskhan_storage2.c b/src/kangaskhan_storage2.c index 0b8440ea9..528987bd1 100644 --- a/src/kangaskhan_storage2.c +++ b/src/kangaskhan_storage2.c @@ -33,6 +33,13 @@ static void sub_80189C8(void); static void sub_8018AC8(void); static void sub_8018AE4(void); +enum MenuActions { + CANCEL_ACTION = 1, + STORE_ACTION, + TAKE_ACTION, + INFO_ACTION +}; + bool8 sub_8017E1C(void) { ResetUnusedInputStruct(); @@ -224,25 +231,25 @@ static void sub_80182E4(void) loopMax = 0; MemoryFill16(sUnknown_203B20C->unk60, 0, sizeof(sUnknown_203B20C->unk60)); sUnknown_203B20C->unk20[0].text = gCommonStore[0]; - sUnknown_203B20C->unk20[0].menuAction = 2; + sUnknown_203B20C->unk20[0].menuAction = STORE_ACTION; if (GetNumberOfFilledInventorySlots() == 0 || sub_801CF50(0)) sUnknown_203B20C->unk60[0] = 1; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = gCommonTake[0]; - sUnknown_203B20C->unk20[loopMax].menuAction = 3; + sUnknown_203B20C->unk20[loopMax].menuAction = TAKE_ACTION; if (sub_801CF14(1) || INVENTORY_SIZE <= GetNumberOfFilledInventorySlots()) sUnknown_203B20C->unk60[loopMax] = 1; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = gCommonCancel[0]; - sUnknown_203B20C->unk20[loopMax].menuAction = 1; + sUnknown_203B20C->unk20[loopMax].menuAction = CANCEL_ACTION; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = NULL; - sUnknown_203B20C->unk20[loopMax].menuAction = 1; + sUnknown_203B20C->unk20[loopMax].menuAction = CANCEL_ACTION; for (index = 0; index < loopMax; index++) { if (sUnknown_203B20C->unk60[index] == 0) { @@ -267,17 +274,17 @@ static void sub_801841C(void) loopMax = 0; MemoryFill16(sUnknown_203B20C->unk60,0,sizeof(sUnknown_203B20C->unk60)); sUnknown_203B20C->unk20[0].text = gCommonStore[0]; - sUnknown_203B20C->unk20[0].menuAction = 2; + sUnknown_203B20C->unk20[0].menuAction = STORE_ACTION; if (!sub_801ADA0(sUnknown_203B20C->itemIndex)) sUnknown_203B20C->unk60[0] = 1; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = gCommonInfo[0]; - sUnknown_203B20C->unk20[loopMax].menuAction = 4; + sUnknown_203B20C->unk20[loopMax].menuAction = INFO_ACTION; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = NULL; - sUnknown_203B20C->unk20[loopMax].menuAction = 1; + sUnknown_203B20C->unk20[loopMax].menuAction = CANCEL_ACTION; for (index = 0; index < loopMax; index++) { if (sUnknown_203B20C->unk60[index] == 0) { @@ -302,18 +309,18 @@ static void sub_80184D4(void) loopMax = 0; MemoryFill16(sUnknown_203B20C->unk60, 0, sizeof(sUnknown_203B20C->unk60)); sUnknown_203B20C->unk20[0].text = gCommonTake[0]; - sUnknown_203B20C->unk20[0].menuAction = 3; + sUnknown_203B20C->unk20[0].menuAction = TAKE_ACTION; if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) sUnknown_203B20C->unk60[0] = 1; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = gCommonInfo[0]; - sUnknown_203B20C->unk20[loopMax].menuAction = 4; + sUnknown_203B20C->unk20[loopMax].menuAction = INFO_ACTION; loopMax += 1; sUnknown_203B20C->unk20[loopMax].text = NULL; - sUnknown_203B20C->unk20[loopMax].menuAction = 1; + sUnknown_203B20C->unk20[loopMax].menuAction = CANCEL_ACTION; for (index = 0; index < loopMax; index++) { if (sUnknown_203B20C->unk60[index] == 0) { @@ -337,24 +344,24 @@ static void sub_8018588(void) if (sub_8012FD8(&sUnknown_203B20C->unk70) == 0) { sub_8013114(&sUnknown_203B20C->unk70, &menuAction); - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sUnknown_203B20C->menuAction1 = menuAction; } switch (menuAction) { - case 2: + case STORE_ACTION: if (GetNumberOfFilledInventorySlots() != 0 && !sub_801CF50(0)) sub_8017F10(4); else sub_8012EA4(&sUnknown_203B20C->unk70, 1); break; - case 3: + case TAKE_ACTION: if (sub_801CF14(1)) sub_8012EA4(&sUnknown_203B20C->unk70, 1); else sub_8017F10(10); break; - case 1: + case CANCEL_ACTION: sub_8017F10(3); break; } @@ -509,12 +516,12 @@ static void sub_8018904(void) sub_801A6E8(FALSE); if (sub_8012FD8(&sUnknown_203B20C->unk70) == 0) { sub_8013114(&sUnknown_203B20C->unk70, &menuAction); - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sUnknown_203B20C->menuAction2 = menuAction; } switch (menuAction) { - case 2: + case STORE_ACTION: if (IsNotMoneyOrUsedTMItem(sUnknown_203B20C->item.id)) { if (!sub_801ADA0(sUnknown_203B20C->itemIndex)) { error: @@ -536,11 +543,11 @@ static void sub_8018904(void) else goto error; break; - case 4: + case INFO_ACTION: sub_8099690(0); sub_8017F10(7); break; - case 1: + case CANCEL_ACTION: sub_8017F10(5); break; } @@ -556,12 +563,12 @@ static void sub_80189C8(void) sub_801CA08(FALSE); if (sub_8012FD8(&sUnknown_203B20C->unk70) == 0) { sub_8013114(&sUnknown_203B20C->unk70, &menuAction); - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sUnknown_203B20C->menuAction3 = menuAction; } switch (menuAction) { - case 3: + case TAKE_ACTION: if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) sub_8012EA4(&sUnknown_203B20C->unk70, 1); else if (IsThrowableItem(sUnknown_203B20C->item.id)) @@ -586,10 +593,10 @@ static void sub_80189C8(void) goto error; } break; - case 4: + case INFO_ACTION: sub_8017F10(14); break; - case 1: + case CANCEL_ACTION: sub_8017F10(11); break; } @@ -623,4 +630,4 @@ static void sub_8018AE4(void) default: break; } -} \ No newline at end of file +} diff --git a/src/kecleon_bros1.c b/src/kecleon_bros1.c index b2f29c428..b082a9236 100644 --- a/src/kecleon_bros1.c +++ b/src/kecleon_bros1.c @@ -50,6 +50,16 @@ static void sub_8019D68(void); static void sub_8019DAC(void); static void sub_8019E04(bool32); +enum MenuActions { + CANCEL_ACTION = 1, + BUY_ACTION, + SELL_ACTION, + SELL_ALL_ACTION, + YES_ACTION, + NO_ACTION, + INFO_ACTION +}; + bool8 CreateKecleonBros(u32 mode) { u8 *monName; @@ -214,14 +224,14 @@ static void sub_8018D30(void) static void UpdateKecleonStoreDialogue(void) { switch (sKecleonBrosWork1->currState) { - case 0: + case KECLEON_STORE_INIT: sub_8019DAC(); sub_80194F8(); sub_8019E04(FALSE); sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_00], 0, sKecleonBrosWork1->menuAction1, sKecleonBrosWork1->menuItems, sKecleonBrosWork1->unk74, 4, 0, sKecleonBrosWork1->unkE4, 12); break; - case 1: + case KECLEON_STORE_MAIN_MENU: sub_8019DAC(); sub_80194F8(); sub_8019E04(FALSE); @@ -229,7 +239,7 @@ static void UpdateKecleonStoreDialogue(void) sKecleonBrosWork1->menuItems, sKecleonBrosWork1->unk74, 4, 0, sKecleonBrosWork1->unkE4, 12); break; case 2: - sKecleonBrosWork1->fallbackState = 1; + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(FALSE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_22], 0, sKecleonBrosWork1->unkE4, 0x10D); break; @@ -238,47 +248,47 @@ static void UpdateKecleonStoreDialogue(void) sub_8019E04(FALSE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_02], 0, sKecleonBrosWork1->unkE4, 0x30D); break; - case 5: - sKecleonBrosWork1->fallbackState = 1; + case KECLEON_STORE_NO_STORE_ITEMS: + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(FALSE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_12], 0, sKecleonBrosWork1->unkE4, 0x10D); break; - case 6: + case KECLEON_STORE_NO_MONEY: sKecleonBrosWork1->fallbackState = 16; sub_8019E04(TRUE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_13], 0, sKecleonBrosWork1->unkE4, 0x10D); break; - case 7: - sKecleonBrosWork1->fallbackState = 1; + case KECLEON_STORE_TOO_MUCH_MONEY: + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(TRUE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_14], 0, sKecleonBrosWork1->unkE4, 0x10D); break; case 8: - sKecleonBrosWork1->fallbackState = 1; + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(TRUE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_15], 0, sKecleonBrosWork1->unkE4, 0x10D); break; - case 9: - sKecleonBrosWork1->fallbackState = 1; + case KECLEON_STORE_NO_ITEMS_TO_SELL: + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(TRUE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_16], 0, sKecleonBrosWork1->unkE4, 0x10D); break; - case 10: - sKecleonBrosWork1->fallbackState = 1; + case KECLEON_STORE_TOO_MANY_ITEMS: + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(TRUE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_17], 0, sKecleonBrosWork1->unkE4, 0x10D); break; case 11: - sKecleonBrosWork1->fallbackState = 1; + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(FALSE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_18], 0, sKecleonBrosWork1->unkE4, 0x10D); break; - case 12: + case KECLEON_STORE_NOT_ENOUGH_MONEY: sKecleonBrosWork1->fallbackState = 16; sub_8019E04(TRUE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_19], 0, sKecleonBrosWork1->unkE4, 0x10D); break; - case 13: + case KECLEON_STORE_CANT_SELL_ITEM: sub_8090E14(gUnknown_202DE58, &sKecleonBrosWork1->soldItem, NULL); sKecleonBrosWork1->fallbackState = 24; sub_8019E04(TRUE); @@ -349,7 +359,7 @@ static void UpdateKecleonStoreDialogue(void) sub_801A010(); else sub_801A3DC(); - sKecleonBrosWork1->fallbackState = 1; + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; } else sKecleonBrosWork1->fallbackState = 16; @@ -395,7 +405,7 @@ static void UpdateKecleonStoreDialogue(void) case 25: if (GetNumberOfFilledInventorySlots() == 0 || gTeamInventoryRef->teamMoney >= MAX_TEAM_MONEY) { sub_801A928(); - sKecleonBrosWork1->fallbackState = 1; + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; } else sKecleonBrosWork1->fallbackState = 24; @@ -410,7 +420,7 @@ static void UpdateKecleonStoreDialogue(void) sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_10], 0, 5, sKecleonBrosWork1->menuItems, NULL, 4, 0, sKecleonBrosWork1->unkE4, 12); break; case 32: - sKecleonBrosWork1->fallbackState = 1; + sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU; sub_8019E04(FALSE); sub_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_11], 0, sKecleonBrosWork1->unkE4, 0x10D); break; @@ -426,27 +436,27 @@ static void sub_80194F8(void) loopMax = 0; sKecleonBrosWork1->menuItems[loopMax].text = gCommonBuy[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 2; + sKecleonBrosWork1->menuItems[loopMax].menuAction = BUY_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = gCommonSell[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 3; + sKecleonBrosWork1->menuItems[loopMax].menuAction = SELL_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = sSellAll; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 4; + sKecleonBrosWork1->menuItems[loopMax].menuAction = SELL_ALL_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = gCommonInfo[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 7; + sKecleonBrosWork1->menuItems[loopMax].menuAction = INFO_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = gCommonCancel[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 1; + sKecleonBrosWork1->menuItems[loopMax].menuAction = CANCEL_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = NULL; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 1; + sKecleonBrosWork1->menuItems[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sKecleonBrosWork1->unk74[i] == 0) { @@ -472,15 +482,15 @@ static void sub_80195C0(void) loopMax = 0; sKecleonBrosWork1->menuItems[loopMax].text = gCommonBuy[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 2; + sKecleonBrosWork1->menuItems[loopMax].menuAction = BUY_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = gCommonInfo[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 7; + sKecleonBrosWork1->menuItems[loopMax].menuAction = INFO_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = NULL; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 1; + sKecleonBrosWork1->menuItems[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sKecleonBrosWork1->unk74[i] == 0) { @@ -506,15 +516,15 @@ static void sub_8019660(void) loopMax = 0; sKecleonBrosWork1->menuItems[loopMax].text = gCommonSell[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 3; + sKecleonBrosWork1->menuItems[loopMax].menuAction = SELL_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = gCommonInfo[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 7; + sKecleonBrosWork1->menuItems[loopMax].menuAction = INFO_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = NULL; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 1; + sKecleonBrosWork1->menuItems[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sKecleonBrosWork1->unk74[i] == 0) { @@ -535,15 +545,15 @@ static void sub_8019700(void) { s32 loopMax = 0; sKecleonBrosWork1->menuItems[loopMax].text = gCommonYes[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 5; + sKecleonBrosWork1->menuItems[loopMax].menuAction = YES_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = gCommonNo[0]; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 6; + sKecleonBrosWork1->menuItems[loopMax].menuAction = NO_ACTION; loopMax++; sKecleonBrosWork1->menuItems[loopMax].text = NULL; - sKecleonBrosWork1->menuItems[loopMax].menuAction = 1; + sKecleonBrosWork1->menuItems[loopMax].menuAction = CANCEL_ACTION; } static void sub_8019730(void) @@ -557,7 +567,7 @@ static void sub_8019730(void) sKecleonBrosWork1->menuAction1 = menuAction; switch (menuAction) { - case 2: + case BUY_ACTION: if (CountKecleonItems() == 0) SetKecleonBrosState(KECLEON_STORE_NO_STORE_ITEMS); else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) @@ -565,7 +575,7 @@ static void sub_8019730(void) else SetKecleonBrosState(15); break; - case 3: + case SELL_ACTION: if (GetNumberOfFilledInventorySlots() == 0) SetKecleonBrosState(KECLEON_STORE_NO_ITEMS_TO_SELL); else if (sKecleonBrosWork1->numInventoryItemToSell == 0) @@ -573,22 +583,22 @@ static void sub_8019730(void) else if (gTeamInventoryRef->teamMoney < MAX_TEAM_MONEY) SetKecleonBrosState(23); else - SetKecleonBrosState(7); + SetKecleonBrosState(KECLEON_STORE_TOO_MUCH_MONEY); break; - case 4: + case SELL_ALL_ACTION: if (GetNumberOfFilledInventorySlots() == 0) SetKecleonBrosState(KECLEON_STORE_NO_ITEMS_TO_SELL); else if (sKecleonBrosWork1->numInventoryItemToSell == 0) SetKecleonBrosState(8); else if (sKecleonBrosWork1->inventoryItemSellPrice + gTeamInventoryRef->teamMoney > MAX_TEAM_MONEY) - SetKecleonBrosState(7); + SetKecleonBrosState(KECLEON_STORE_TOO_MUCH_MONEY); else SetKecleonBrosState(31); break; - case 7: + case INFO_ACTION: SetKecleonBrosState(2); break; - case 1: + case CANCEL_ACTION: SetKecleonBrosState(3); break; } @@ -600,7 +610,7 @@ static void sub_8019850(void) if (sub_80144A4(&menuAction) == 0) { switch (menuAction) { - case 5: + case YES_ACTION: AddToTeamMoney(-sKecleonBrosWork1->itemSellPrice); if (sKecleonBrosWork1->isKecleonItemShop) { @@ -617,8 +627,8 @@ static void sub_8019850(void) PlaySound(332); SetKecleonBrosState(17); break; - case 6: - case 1: + case NO_ACTION: + case CANCEL_ACTION: SetKecleonBrosState(16); break; } @@ -631,14 +641,14 @@ static void sub_80198E8(void) if (sub_80144A4(&menuAction) == 0) { switch (menuAction) { - case 5: + case YES_ACTION: AddToTeamMoney(sKecleonBrosWork1->itemSellPrice); ShiftItemsDownFrom(sKecleonBrosWork1->soldItemInventoryIndex); PlaySound(332); SetKecleonBrosState(25); break; - case 6: - case 1: + case NO_ACTION: + case CANCEL_ACTION: SetKecleonBrosState(24); break; } @@ -653,7 +663,7 @@ static void sub_8019944(void) if (sub_80144A4(&menuAction) == 0) { switch (menuAction) { - case 5: + case YES_ACTION: for (slotIndex = 0; slotIndex < INVENTORY_SIZE; slotIndex++) { item = &gTeamInventoryRef->teamItems[slotIndex]; @@ -666,8 +676,8 @@ static void sub_8019944(void) PlaySound(0x14c); SetKecleonBrosState(32); break; - case 1: - case 6: + case CANCEL_ACTION: + case NO_ACTION: SetKecleonBrosState(KECLEON_STORE_MAIN_MENU); break; } @@ -685,7 +695,7 @@ static void sub_80199CC(void) menuAction = sub_801A2A8(TRUE); switch (menuAction) { - case 3: + case SELL_ACTION: if (sKecleonBrosWork1->isKecleonItemShop) { sKecleonBrosWork1->itemShopItemIndex = sub_8019FB0(); item = GetKecleonShopItem(sKecleonBrosWork1->itemShopItemIndex); @@ -700,7 +710,7 @@ static void sub_80199CC(void) sKecleonBrosWork1->itemSellPrice = GetStackBuyPrice(&sKecleonBrosWork1->soldItem); SetKecleonBrosState(20); break; - case 4: + case SELL_ALL_ACTION: if (sKecleonBrosWork1->isKecleonItemShop) { sKecleonBrosWork1->itemShopItemIndex = sub_8019FB0(); item = GetKecleonShopItem(sKecleonBrosWork1->itemShopItemIndex); @@ -715,7 +725,7 @@ static void sub_80199CC(void) sKecleonBrosWork1->itemSellPrice = GetStackBuyPrice(&sKecleonBrosWork1->soldItem); SetKecleonBrosState(21); break; - case 2: + case BUY_ACTION: if (sKecleonBrosWork1->isKecleonItemShop) sub_801A010(); else @@ -723,7 +733,7 @@ static void sub_80199CC(void) SetKecleonBrosState(KECLEON_STORE_MAIN_MENU); break; - case 1: + case CANCEL_ACTION: sub_801AD34(0); DrawTeamMoneyBox(1); break; @@ -774,7 +784,7 @@ static void sub_8019BBC(void) sKecleonBrosWork1->menuAction3 = menuAction; switch (menuAction) { - case 2: + case BUY_ACTION: if (gTeamInventoryRef->teamMoney == 0) SetKecleonBrosState(KECLEON_STORE_NO_MONEY); else if (sKecleonBrosWork1->itemSellPrice > gTeamInventoryRef->teamMoney) @@ -782,10 +792,10 @@ static void sub_8019BBC(void) else SetKecleonBrosState(22); break; - case 7: + case INFO_ACTION: SetKecleonBrosState(21); break; - case 1: + case CANCEL_ACTION: SetKecleonBrosState(19); break; } @@ -802,7 +812,7 @@ static void sub_8019C78(void) sKecleonBrosWork1->menuAction2 = menuAction; switch (menuAction) { - case 3: + case SELL_ACTION: sub_8099690(0); if (!CanSellItem(sKecleonBrosWork1->soldItem.id)) @@ -812,11 +822,11 @@ static void sub_8019C78(void) else SetKecleonBrosState(30); break; - case 7: + case INFO_ACTION: sub_8099690(0); SetKecleonBrosState(29); break; - case 1: + case CANCEL_ACTION: SetKecleonBrosState(27); break; } @@ -899,4 +909,4 @@ static void sub_8019E04(bool32 a0) else sKecleonBrosWork1->unkE0 = 6; } -} \ No newline at end of file +} diff --git a/src/pokemon_mail.c b/src/pokemon_mail.c index 820570ea3..f47034473 100644 --- a/src/pokemon_mail.c +++ b/src/pokemon_mail.c @@ -337,16 +337,16 @@ void CreateRescueDescription(unkStruct_802C39C *param_1) xxx_call_draw_string(10, y, gRewardText, param_1->unk0[0], 0); switch (param_1->rewardType) { - case 0: + case MONEY: sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], param_1->unk30); xxx_call_draw_string(68, y, buf_1, param_1->unk0[0], 0); break; - case 1: + case MONEY_EXTRA: sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], param_1->unk30); xxx_call_draw_string(68, y, buf_1, param_1->unk0[0], 0); break; - case 2: // Item - case 3: // Item + ? + case ITEM: // Item + case ITEM_EXTRA: // Item + ? BufferItemName(gUnknown_202DE58, param_1->rewardItem, NULL); sprintfStatic(buf_1, gMissionRewardText[param_1->rewardType], gUnknown_202DE58); xxx_call_draw_string(68, y, buf_1, param_1->unk0[0], 0); @@ -448,4 +448,4 @@ const u8 *GetPokemonMailHeadline(u8 index) const u8 *GetPokemonMailText(u8 index) { return sPokemonMail[index].text; -} \ No newline at end of file +} diff --git a/src/wonder_mail_3_mid.c b/src/wonder_mail_3_mid.c index e4c06f075..c59cabf12 100644 --- a/src/wonder_mail_3_mid.c +++ b/src/wonder_mail_3_mid.c @@ -59,6 +59,12 @@ const UnkTextStruct2 gUnknown_80E03F4 = { const u8 gUnknown_80E040C[] = "Send"; +enum MenuActions { + CANCEL_ACTION = 1, + SEND_ACTION, + INFO_ACTION +}; + u32 sub_802EF48(void) { gUnknown_203B30C = MemoryAlloc(sizeof(struct unkStruct_203B30C), 8); @@ -163,13 +169,13 @@ void sub_802F108(void) s32 loopMax = 0; gUnknown_203B30C->unkB0[loopMax].text = gUnknown_80E040C; - gUnknown_203B30C->unkB0[loopMax].menuAction = 2; + gUnknown_203B30C->unkB0[loopMax].menuAction = SEND_ACTION; loopMax += 1; gUnknown_203B30C->unkB0[loopMax].text = gCommonInfo[0]; - gUnknown_203B30C->unkB0[loopMax].menuAction = 3; + gUnknown_203B30C->unkB0[loopMax].menuAction = INFO_ACTION; loopMax += 1; gUnknown_203B30C->unkB0[loopMax].text = NULL; - gUnknown_203B30C->unkB0[loopMax].menuAction = 1; + gUnknown_203B30C->unkB0[loopMax].menuAction = CANCEL_ACTION; } void sub_802F148(void) @@ -203,14 +209,14 @@ void sub_802F184(void) switch(menuAction) { - case 2: + case SEND_ACTION: sub_802CF14(); sub_802EFEC(4); break; - case 3: + case INFO_ACTION: sub_802EFEC(3); break; - case 1: + case CANCEL_ACTION: sub_802EFEC(1); break; } diff --git a/src/wonder_mail_4.c b/src/wonder_mail_4.c index 28ac97331..c6c7a0c2d 100644 --- a/src/wonder_mail_4.c +++ b/src/wonder_mail_4.c @@ -213,7 +213,7 @@ void sub_803092C(void) local.clientSpecies = mail->clientSpecies; local.targetSpecies = mail->clientSpecies; local.targetItem = ITEM_NOTHING; - local.rewardType = 5; + local.rewardType = MONEY1; switch(mail->mailType) { @@ -223,8 +223,8 @@ void sub_803092C(void) case WONDER_MAIL_TYPE_THANK_YOU: local.unk43 = 4; break; - case 1: - case 2: + case WONDER_MAIL_TYPE_SOS: + case WONDER_MAIL_TYPE_SOS_1: local.unk43 = 1; break; default: @@ -261,21 +261,21 @@ s32 sub_8030A74(void) } } break; - case 1: + case WONDER_MAIL_TYPE_SOS: for (index = 0; index < 0x20; index++) { unkStruct_203B480 *p = gUnknown_203B480 + index; - if (p->mailType == 1) { + if (p->mailType == WONDER_MAIL_TYPE_SOS) { gUnknown_203B320->unk0[count] = index; count++; } } break; - case 2: + case WONDER_MAIL_TYPE_SOS_1: for (index = 0; index < 0x20; index++) { unkStruct_203B480 *p = gUnknown_203B480 + index; - if (p->mailType == 2) { + if (p->mailType == WONDER_MAIL_TYPE_SOS_1) { gUnknown_203B320->unk0[count] = index; count++; } @@ -347,18 +347,18 @@ bool8 HasNoWonderMailType(u32 wonderMailType) } } break; - case 1: + case WONDER_MAIL_TYPE_SOS: for (index = 0; index < 0x20; index++) { - if (gUnknown_203B480[index].mailType == 1) { + if (gUnknown_203B480[index].mailType == WONDER_MAIL_TYPE_SOS) { return FALSE; } } break; - case 2: + case WONDER_MAIL_TYPE_SOS_1: for (index = 0; index < 0x20; index++) { - if (gUnknown_203B480[index].mailType == 2) { + if (gUnknown_203B480[index].mailType == WONDER_MAIL_TYPE_SOS_1) { return FALSE; } } diff --git a/src/wonder_mail_5.c b/src/wonder_mail_5.c index b512f7456..2a2d1b30a 100644 --- a/src/wonder_mail_5.c +++ b/src/wonder_mail_5.c @@ -128,10 +128,10 @@ void sub_8030E48(void) stack.targetSpecies = mail->clientSpecies; stack.targetItem = ITEM_NOTHING; if (mail->item.id == ITEM_NOTHING) { - stack.rewardType = 5; + stack.rewardType = MONEY1; } else { - stack.rewardType = 2; + stack.rewardType = ITEM; stack.rewardItem = mail->item.id; } switch(mail->mailType) diff --git a/src/wonder_mail_6.c b/src/wonder_mail_6.c index 1fc880d84..535810edb 100644 --- a/src/wonder_mail_6.c +++ b/src/wonder_mail_6.c @@ -96,6 +96,20 @@ extern void sub_8030810(u32); extern void sub_803092C(void); extern void sub_8030D40(u8, u32); +enum States { + INIT_STATE = 0, + DELETE_SINGLE_MAIL_STATE = 2, + DELETE_ALL_MAIL_STATE = 3, +}; + +enum MenuActions { + CANCEL_ACTION = 1, + YES_ACTION, + NO_ACTION, + DELETE_ACTION, + INFO_ACTION +}; + bool8 sub_8030F58(u32 wonderMailType) { OpenedFile *file; @@ -131,7 +145,7 @@ bool8 sub_8030F58(u32 wonderMailType) gUnknown_203B328->state = 5; } else { - gUnknown_203B328->state = 0; + gUnknown_203B328->state = INIT_STATE; sub_80306A8(wonderMailType,0,0,8); } return TRUE; @@ -141,14 +155,14 @@ s32 sub_8031050(void) { switch(gUnknown_203B328->state) { - case 0: + case INIT_STATE: sub_8031300(); break; case 1: sub_803136C(); break; - case 2: - case 3: + case DELETE_SINGLE_MAIL_STATE: + case DELETE_ALL_MAIL_STATE: sub_80313D8(gUnknown_203B328->state); break; case 4: @@ -183,7 +197,7 @@ void sub_80310FC(void) sub_8006518(gUnknown_203B328->unkA8); switch(gUnknown_203B328->state) { - case 0: + case INIT_STATE: gUnknown_203B328->unkA8[1] = gUnknown_80E0990; gUnknown_203B328->unkA8[2] = gUnknown_80E0990; gUnknown_203B328->unkA8[3] = gUnknown_80E0990; @@ -194,8 +208,8 @@ void sub_80310FC(void) gUnknown_203B328->unkA8[3] = gUnknown_80E0990; sub_8012CAC(&gUnknown_203B328->unkA8[1], gUnknown_80E0968); break; - case 2: - case 3: + case DELETE_SINGLE_MAIL_STATE: + case DELETE_ALL_MAIL_STATE: gUnknown_203B328->unkA8[2] = gUnknown_80E09C0; sub_8012CAC(&gUnknown_203B328->unkA8[2], gUnknown_80E0948); break; @@ -220,15 +234,15 @@ void sub_8031258(void) { switch(gUnknown_203B328->state) { - case 0: + case INIT_STATE: sub_8030810(1); break; case 1: sub_803092C(); sub_8012D60(&gUnknown_203B328->unk8, gUnknown_80E0968, 0, 0, 4, 1); break; - case 2: - case 3: + case DELETE_SINGLE_MAIL_STATE: + case DELETE_ALL_MAIL_STATE: sub_803092C(); sub_8012EA4(&gUnknown_203B328->unk8, 0); sub_8012D60(&gUnknown_203B328->unk58, gUnknown_80E0948, 0, 0, 3, 2); @@ -266,26 +280,26 @@ void sub_8031300(void) void sub_803136C(void) { - s32 local_c; + s32 menuAction; - local_c = 0; + menuAction = 0; sub_8030768(0); if (sub_8012FD8(&gUnknown_203B328->unk8) == '\0') { - sub_8013114(&gUnknown_203B328->unk8,&local_c); + sub_8013114(&gUnknown_203B328->unk8,&menuAction); } - switch(local_c) + switch(menuAction) { - case 1: + case CANCEL_ACTION: sub_80310E4(0); break; case 6: sub_80310E4(3); break; - case 4: + case DELETE_ACTION: sub_80310E4(2); break; - case 5: + case INFO_ACTION: sub_80310E4(4); break; @@ -295,29 +309,29 @@ void sub_803136C(void) void sub_80313D8(u32 state) { s32 index; - s32 local_10; + s32 menuAction; unkStruct_203B480 *unused; - local_10 = 0; + menuAction = 0; sub_8030768(0); sub_8012FD8(&gUnknown_203B328->unk8); if (sub_8012FD8(&gUnknown_203B328->unk58) == 0) { - sub_8013114(&gUnknown_203B328->unk58,&local_10); + sub_8013114(&gUnknown_203B328->unk58,&menuAction); } - switch(local_10) + switch(menuAction) { - case 1: - case 3: + case CANCEL_ACTION: + case NO_ACTION: sub_80310E4(0); break; - case 2: + case YES_ACTION: switch(state) { - case 2: + case DELETE_SINGLE_MAIL_STATE: DeleteMailAtIndex(gUnknown_203B328->mailIndex); break; - case 3: + case DELETE_ALL_MAIL_STATE: for(index = 0; index < 0x20; index++) { unused = &gUnknown_203B480[index]; @@ -327,7 +341,7 @@ void sub_80313D8(u32 state) } break; } - if ((gUnknown_203B328->wonderMailType == 2) || (gUnknown_203B328->wonderMailType == WONDER_MAIL_TYPE_AOK)) { + if ((gUnknown_203B328->wonderMailType == WONDER_MAIL_TYPE_SOS_1) || (gUnknown_203B328->wonderMailType == WONDER_MAIL_TYPE_AOK)) { if (HasNoWonderMailType(gUnknown_203B328->wonderMailType)) { sub_80310E4(5); } From 04b1b57942a88f3edd61bf6a74b38cbfb00b6cf8 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 5 Jul 2024 18:23:03 -0700 Subject: [PATCH 34/39] more menus because why not --- src/debug_menu2.c | 24 ++++--- src/debug_menu3.c | 23 +++--- src/debug_menu4.c | 18 +++-- src/gulpin_shop_801FB50.c | 145 +++++++++++++++++++++----------------- src/makuhita_dojo1.c | 22 +++--- src/wigglytuff_shop3.c | 53 ++++++++------ src/wonder_mail_802D098.c | 86 ++++++++++++---------- 7 files changed, 217 insertions(+), 154 deletions(-) diff --git a/src/debug_menu2.c b/src/debug_menu2.c index f629bc9cb..932a6beb5 100644 --- a/src/debug_menu2.c +++ b/src/debug_menu2.c @@ -15,6 +15,12 @@ static EWRAM_DATA_2 unkStruct_203B3F0 *sUnknown_203B3F0 = {0}; #include "data/debug_menu2.h" +enum menuActions { + CANCEL_ACTION = 1, + NUMBER_ACTION, + INFO_ACTION +}; + static void sub_803A504(u32 newState); static void sub_803A51C(void); static void sub_803A5A0(void); @@ -147,20 +153,20 @@ static void sub_803A6F0(void) s32 loopMax = 0; sUnknown_203B3F0->menuItems[loopMax].text = sNumberPrompt; - sUnknown_203B3F0->menuItems[loopMax].menuAction = 2; - sUnknown_203B3F0->menuAction = 2; + sUnknown_203B3F0->menuItems[loopMax].menuAction = NUMBER_ACTION; + sUnknown_203B3F0->menuAction = NUMBER_ACTION; if (!IsNotMoneyOrUsedTMItem(sUnknown_203B3F0->id)) { sUnknown_203B3F0->menuItems[loopMax].menuAction = -1; - sUnknown_203B3F0->menuAction = 3; + sUnknown_203B3F0->menuAction = INFO_ACTION; } loopMax++; sUnknown_203B3F0->menuItems[loopMax].text = gCommonInfo[0]; - sUnknown_203B3F0->menuItems[loopMax].menuAction = 3; + sUnknown_203B3F0->menuItems[loopMax].menuAction = INFO_ACTION; loopMax++; sUnknown_203B3F0->menuItems[loopMax].text = NULL; - sUnknown_203B3F0->menuItems[loopMax].menuAction = 1; + sUnknown_203B3F0->menuItems[loopMax].menuAction = CANCEL_ACTION; } static void sub_803A740(void) @@ -196,13 +202,13 @@ static void sub_803A7B0(void) sub_8013114(&sUnknown_203B3F0->unk4C, &menuAction); switch (menuAction) { - case 2: + case NUMBER_ACTION: sub_803A504(3); break; - case 3: + case INFO_ACTION: sub_803A504(4); break; - case 1: + case CANCEL_ACTION: sub_803A504(1); break; } @@ -238,4 +244,4 @@ static void sub_803A86C(void) sub_803A504(1); break; } -} \ No newline at end of file +} diff --git a/src/debug_menu3.c b/src/debug_menu3.c index 4c3a7abb1..eed12b882 100644 --- a/src/debug_menu3.c +++ b/src/debug_menu3.c @@ -17,6 +17,13 @@ static EWRAM_DATA_2 unkStruct_203B3F4 *sUnknown_203B3F4 = {0}; #include "data/debug_menu3.h" +enum menuActions { + CANCEL_ACTION = 1, + OPEN_ACTION, + CLOSE_ACTION, + INFO_ACTION +}; + static void sub_803A924(u32 newState); static void sub_803A93C(void); static void sub_803A9AC(void); @@ -121,22 +128,22 @@ static void sub_803AA34(void) sUnknown_203B3F4->menuItems[0].text = sClose; if (sub_803ABC8()) - sUnknown_203B3F4->menuItems[0].menuAction = 3; + sUnknown_203B3F4->menuItems[0].menuAction = CLOSE_ACTION; else sUnknown_203B3F4->menuItems[0].menuAction = -1; } else { sUnknown_203B3F4->menuItems[0].text = sOpen; - sUnknown_203B3F4->menuItems[0].menuAction = 2; + sUnknown_203B3F4->menuItems[0].menuAction = OPEN_ACTION; } index++; sUnknown_203B3F4->menuItems[index].text = gCommonInfo[0]; - sUnknown_203B3F4->menuItems[index].menuAction = 4; + sUnknown_203B3F4->menuItems[index].menuAction = INFO_ACTION; index++; sUnknown_203B3F4->menuItems[index].text = NULL; - sUnknown_203B3F4->menuItems[index].menuAction = 1; + sUnknown_203B3F4->menuItems[index].menuAction = CANCEL_ACTION; sUnknown_203B3F4->menuAction = sUnknown_203B3F4->menuItems[0].menuAction; } @@ -174,18 +181,18 @@ static void sub_803AB34(void) sub_8013114(&sUnknown_203B3F4->unk4C, &menuAction); switch (menuAction) { - case 2: + case OPEN_ACTION: UnlockFriendArea(sUnknown_203B3F4->friendArea); sub_803A924(1); break; - case 3: + case CLOSE_ACTION: sub_809249C(sUnknown_203B3F4->friendArea, 1); sub_803A924(1); break; - case 4: + case INFO_ACTION: sub_803A924(3); break; - case 1: + case CANCEL_ACTION: sub_803A924(1); break; } diff --git a/src/debug_menu4.c b/src/debug_menu4.c index 06e9ed714..35f6100f8 100644 --- a/src/debug_menu4.c +++ b/src/debug_menu4.c @@ -14,6 +14,12 @@ static EWRAM_DATA_2 unkStruct_203B3F8 *sUnknown_203B3F8 = {0}; #include "data/debug_menu4.h" +enum menuActions { + CANCEL_ACTION = 1, + LEVEL_ACTION = 4, + NAME_ACTION +}; + static void sub_803ACD0(u32 newState); static void sub_803ACE8(void); static void sub_803AD88(void); @@ -154,15 +160,15 @@ static void sub_803AEB0(void) loopMax = 0; sUnknown_203B3F8->unk90[loopMax].text = sLevel; - sUnknown_203B3F8->unk90[loopMax].menuAction = 4; + sUnknown_203B3F8->unk90[loopMax].menuAction = LEVEL_ACTION; loopMax++; sUnknown_203B3F8->unk90[loopMax].text = sName; - sUnknown_203B3F8->unk90[loopMax].menuAction = 5; + sUnknown_203B3F8->unk90[loopMax].menuAction = NAME_ACTION; loopMax++; sUnknown_203B3F8->unk90[loopMax].text = NULL; - sUnknown_203B3F8->unk90[loopMax].menuAction = 1; + sUnknown_203B3F8->unk90[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sUnknown_203B3F8->unkD0[i] == 0) { @@ -202,13 +208,13 @@ static void sub_803AF88(void) sub_8013114(&sUnknown_203B3F8->unk10, &menuAction); switch (menuAction) { - case 4: + case LEVEL_ACTION: sub_803ACD0(5); break; - case 5: + case NAME_ACTION: sub_803ACD0(6); break; - case 1: + case CANCEL_ACTION: sub_803ACD0(2); break; default: diff --git a/src/gulpin_shop_801FB50.c b/src/gulpin_shop_801FB50.c index 65806d6b4..f0cf43809 100644 --- a/src/gulpin_shop_801FB50.c +++ b/src/gulpin_shop_801FB50.c @@ -30,6 +30,25 @@ extern u8 gUnknown_202E5D8[]; #include "data/gulpin_shop_801FB50.h" +enum menuActions { + CANCEL_ACTION = 1, + PROCEED_ACTION, + REMEMBER_ACTION, + MOVES_ACTION, + SET_ACTION, + DESELECT_ACTION, + LINK_ACTION = 8, + DE_LINK_ACTION, + FORGET_ACTION, + INFO_ACTION, + CHECK_IQ_ACTION, + SETTING_MOVES_ACTION, + LINKING_MOVES_ACTION, + REMEMBERING_MOVES_ACTION, + YES_ACTION, + NO_ACTION, +}; + static void CreateGulpinLinkMenu(void); static void CreateGulpinShopMenu(void); @@ -412,16 +431,16 @@ static void CreateGulpinShopMenu(void) s32 loopMax = 0; MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); gUnknown_203B27C->unk7C[loopMax].text = gGulpinProceed; - gUnknown_203B27C->unk7C[loopMax].menuAction = 2; + gUnknown_203B27C->unk7C[loopMax].menuAction = PROCEED_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gGulpinInfo; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0xb; + gUnknown_203B27C->unk7C[loopMax].menuAction = INFO_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gCommonCancel[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = 0x0; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; } static void sub_80205D0(void) @@ -433,23 +452,23 @@ static void sub_80205D0(void) MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3D8; - gUnknown_203B27C->unk7C[loopMax].menuAction = 4; + gUnknown_203B27C->unk7C[loopMax].menuAction = MOVES_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3E0; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0xB; + gUnknown_203B27C->unk7C[loopMax].menuAction = INFO_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3E8; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0xC; + gUnknown_203B27C->unk7C[loopMax].menuAction = CHECK_IQ_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3F4; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0x3; + gUnknown_203B27C->unk7C[loopMax].menuAction = REMEMBER_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = NULL; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction2) @@ -472,15 +491,15 @@ static void sub_802069C(void) MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC3F4; - gUnknown_203B27C->unk7C[loopMax].menuAction = 3; + gUnknown_203B27C->unk7C[loopMax].menuAction = REMEMBER_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gCommonInfo[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 11; + gUnknown_203B27C->unk7C[loopMax].menuAction = INFO_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = NULL; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction3) @@ -507,12 +526,12 @@ static void CreateGulpinLinkMenu(void) if(IsMoveSet(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) { gUnknown_203B27C->unk7C[loopMax].text = gGulpinDeselect; - gUnknown_203B27C->unk7C[loopMax].menuAction = 6; + gUnknown_203B27C->unk7C[loopMax].menuAction = DESELECT_ACTION; } else { gUnknown_203B27C->unk7C[loopMax].text = gGulpinSet; - gUnknown_203B27C->unk7C[loopMax].menuAction = 5; + gUnknown_203B27C->unk7C[loopMax].menuAction = SET_ACTION; } } else @@ -530,23 +549,23 @@ static void CreateGulpinLinkMenu(void) loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gGulpinLink; - gUnknown_203B27C->unk7C[loopMax].menuAction = 8; + gUnknown_203B27C->unk7C[loopMax].menuAction = LINK_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gGulpinDelink; - gUnknown_203B27C->unk7C[loopMax].menuAction = 9; + gUnknown_203B27C->unk7C[loopMax].menuAction = DE_LINK_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gGulpinForget; - gUnknown_203B27C->unk7C[loopMax].menuAction = 10; + gUnknown_203B27C->unk7C[loopMax].menuAction = FORGET_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gCommonInfo[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 11; + gUnknown_203B27C->unk7C[loopMax].menuAction = INFO_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = NULL; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (gUnknown_203B27C->unkBC[i] == 0 && gUnknown_203B27C->unk7C[i].menuAction == gUnknown_203B27C->menuAction4) @@ -565,13 +584,13 @@ static void sub_80208B0(void) s32 loopMax = 0; MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); gUnknown_203B27C->unk7C[loopMax].text = gCommonYes[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0x10; + gUnknown_203B27C->unk7C[loopMax].menuAction = YES_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gCommonNo[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0x11; + gUnknown_203B27C->unk7C[loopMax].menuAction = NO_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = NULL; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; } static void sub_8020900(void) @@ -579,10 +598,10 @@ static void sub_8020900(void) s32 loopMax = 0; MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); gUnknown_203B27C->unk7C[loopMax].text = gCommonYes[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0x10; + gUnknown_203B27C->unk7C[loopMax].menuAction = YES_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gCommonNo[0]; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0x11; + gUnknown_203B27C->unk7C[loopMax].menuAction = NO_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = NULL; gUnknown_203B27C->unk7C[loopMax].menuAction = -1; @@ -594,16 +613,16 @@ static void sub_8020950(void) MemoryFill16(gUnknown_203B27C->unkBC, 0, sizeof(gUnknown_203B27C->unkBC)); gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC428; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0xD; + gUnknown_203B27C->unk7C[loopMax].menuAction = SETTING_MOVES_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC438; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0xE; + gUnknown_203B27C->unk7C[loopMax].menuAction = LINKING_MOVES_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = gUnknown_80DC448; - gUnknown_203B27C->unk7C[loopMax].menuAction = 0xF; + gUnknown_203B27C->unk7C[loopMax].menuAction = REMEMBERING_MOVES_ACTION; loopMax++; gUnknown_203B27C->unk7C[loopMax].text = NULL; - gUnknown_203B27C->unk7C[loopMax].menuAction = 1; + gUnknown_203B27C->unk7C[loopMax].menuAction = CANCEL_ACTION; } static void sub_80209AC(void) @@ -614,13 +633,13 @@ static void sub_80209AC(void) gUnknown_203B27C->menuAction1 = menuAction; switch(menuAction) { - case 2: + case PROCEED_ACTION: sub_801FDA8(0xe); break; - case 0xB: + case INFO_ACTION: sub_801FDA8(0x8); break; - case 1: + case CANCEL_ACTION: sub_801FDA8(0xC); break; } @@ -634,11 +653,11 @@ static void sub_80209FC(void) { switch(menuAction) { - case 0x10: + case YES_ACTION: sub_801FDA8(0xe); break; - case 0x11: - case 1: + case NO_ACTION: + case CANCEL_ACTION: sub_801FDA8(0xC); break; } @@ -652,16 +671,16 @@ static void sub_8020A34(void) { switch(menuAction) { - case 0xD: + case SETTING_MOVES_ACTION: sub_801FDA8(0x9); break; - case 0xE: + case LINKING_MOVES_ACTION: sub_801FDA8(10); break; - case 0xF: + case REMEMBERING_MOVES_ACTION: sub_801FDA8(0xb); break; - case 1: + case CANCEL_ACTION: sub_801FDA8(0x1); break; } @@ -704,18 +723,18 @@ static void sub_8020B38(void) sub_8023A94(FALSE); if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); - if (menuAction != 1) { + if (menuAction != CANCEL_ACTION) { gUnknown_203B27C->menuAction2 = menuAction; } } switch(menuAction) { - case 0x1: - case 0x11: + case CANCEL_ACTION: + case NO_ACTION: sub_801FDA8(0x10); break; - case 0x3: + case REMEMBER_ACTION: if(GetBaseSpeciesNoUnown(gUnknown_203B27C->pokeStruct->speciesNum) == MONSTER_DEOXYS_NORMAL) { sub_801FDA8(0x1C); @@ -729,13 +748,13 @@ static void sub_8020B38(void) sub_801FDA8(0x14); } break; - case 0x4: + case MOVES_ACTION: sub_801FDA8(0x1e); break; - case 0xB: + case INFO_ACTION: sub_801FDA8(0x12); break; - case 0xC: + case CHECK_IQ_ACTION: sub_801FDA8(0x13); break; } @@ -800,18 +819,18 @@ static void sub_8020CC0(void) sub_801F520(0); if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); - if (menuAction != 1) { + if (menuAction != CANCEL_ACTION) { gUnknown_203B27C->menuAction3 = menuAction; } } switch(menuAction) { - case 0x1: - case 0x11: + case CANCEL_ACTION: + case NO_ACTION: sub_801FDA8(0x16); break; - case 0x3: + case REMEMBER_ACTION: sub_801F63C(); unk_CopyMoves4To8(gUnknown_203B27C->moves,gUnknown_203B27C->pokeStruct->moves); for(index = 0; index < MAX_MON_MOVES * 2; index++) @@ -832,7 +851,7 @@ static void sub_8020CC0(void) sub_801FDA8(0x19); } break; - case 0xB: + case INFO_ACTION: sub_801FDA8(0x18); break; } @@ -919,14 +938,14 @@ static void sub_8020EB4(void) sub_801EF38(0); if (!sub_8012FD8(&gUnknown_203B27C->unkCC)) { sub_8013114(&gUnknown_203B27C->unkCC,&menuAction); - if (menuAction != 1) { + if (menuAction != CANCEL_ACTION) { gUnknown_203B27C->menuAction4 = menuAction; } } switch(menuAction) { - case 5: + case SET_ACTION: if(ToggleSetMove(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) { PlaySound(0x133); @@ -938,7 +957,7 @@ static void sub_8020EB4(void) sub_801FDA8(0x1F); } break; - case 6: + case DESELECT_ACTION: PlaySound(0x133); UnSetMove(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves); sub_801FDA8(0x1F); @@ -955,7 +974,7 @@ static void sub_8020EB4(void) } sub_801FDA8(0x1F); break; - case 8: + case LINK_ACTION: if(gTeamInventoryRef->teamMoney < 150) { PlayMenuSoundEffect(2); @@ -981,7 +1000,7 @@ static void sub_8020EB4(void) sub_801FDA8(0x1F); } break; - case 9: + case DE_LINK_ACTION: if(!sub_809333C(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) { PlayMenuSoundEffect(2); @@ -994,11 +1013,11 @@ static void sub_8020EB4(void) sub_801FDA8(0x1F); } break; - case 1: - case 0x11: + case CANCEL_ACTION: + case NO_ACTION: sub_801FDA8(0x1F); break; - case 0xA: + case FORGET_ACTION: if(!IsAnyMoveLinked(gUnknown_203B27C->moveIndex, gUnknown_203B27C->moves)) { PlayMenuSoundEffect(2); @@ -1011,10 +1030,10 @@ static void sub_8020EB4(void) sub_801FDA8(0x22); } break; - case 0xB: + case INFO_ACTION: sub_801FDA8(33); break; - case 0xC ... 0xF: + case CHECK_IQ_ACTION ... REMEMBERING_MOVES_ACTION: break; } } @@ -1039,12 +1058,12 @@ static void sub_80210E4(void) if (sub_80144A4(&menuAction) == 0) { switch (menuAction) { - case 16: + case YES_ACTION: RemoveLinkSequenceFromMoves8(gUnknown_203B27C->moves, gUnknown_203B27C->moveIndex); sub_801FDA8(35); break; - case 1: - case 17: + case CANCEL_ACTION: + case NO_ACTION: sub_801FDA8(31); break; } diff --git a/src/makuhita_dojo1.c b/src/makuhita_dojo1.c index d45b607f7..d16469aca 100644 --- a/src/makuhita_dojo1.c +++ b/src/makuhita_dojo1.c @@ -24,6 +24,12 @@ static EWRAM_DATA_2 MakuhitaDojoWork1 *sMakuhitaDojoWork1 = {0}; #include "data/makuhita_dojo1.h" +enum menuActions { + CANCEL_ACTION = 1, + GO_TRAIN_ACTION, + INFO_ACTION +}; + static void MakuhitaDojo_DrawMainMenu(void); static void MakuhitaDojo_GoToFallbackState(void); static void MakuhitaDojo_SetState(s32); @@ -237,10 +243,10 @@ static void MakuhitaDojo_DrawMainMenu(void) { s32 loopMax; - sMakuhitaDojoWork1->menuAction = 2; + sMakuhitaDojoWork1->menuAction = GO_TRAIN_ACTION; loopMax = 0; sMakuhitaDojoWork1->unk18[loopMax].text = sGoTrain; - sMakuhitaDojoWork1->unk18[loopMax].menuAction = 2; + sMakuhitaDojoWork1->unk18[loopMax].menuAction = GO_TRAIN_ACTION; if (MakuhitaDojo_ReturnFalse()) { sMakuhitaDojoWork1->unk18[loopMax].menuAction = -1; @@ -249,13 +255,13 @@ static void MakuhitaDojo_DrawMainMenu(void) loopMax += 1; sMakuhitaDojoWork1->unk18[loopMax].text = gCommonInfo[0]; - sMakuhitaDojoWork1->unk18[loopMax].menuAction = 3; + sMakuhitaDojoWork1->unk18[loopMax].menuAction = INFO_ACTION; loopMax += 1; sMakuhitaDojoWork1->unk18[loopMax].text = gCommonCancel[0]; - sMakuhitaDojoWork1->unk18[loopMax].menuAction = 1; + sMakuhitaDojoWork1->unk18[loopMax].menuAction = CANCEL_ACTION; loopMax += 1; sMakuhitaDojoWork1->unk18[loopMax].text = NULL; - sMakuhitaDojoWork1->unk18[loopMax].menuAction = 1; + sMakuhitaDojoWork1->unk18[loopMax].menuAction = CANCEL_ACTION; } static void sub_8030208(void) @@ -265,13 +271,13 @@ static void sub_8030208(void) sMakuhitaDojoWork1->menuAction = menuAction; switch (menuAction) { - case 2: + case GO_TRAIN_ACTION: MakuhitaDojo_SetState(3); break; - case 3: + case INFO_ACTION: MakuhitaDojo_SetState(12); break; - case 1: + case CANCEL_ACTION: MakuhitaDojo_SetState(2); break; } diff --git a/src/wigglytuff_shop3.c b/src/wigglytuff_shop3.c index e530d89ac..df947526a 100644 --- a/src/wigglytuff_shop3.c +++ b/src/wigglytuff_shop3.c @@ -28,6 +28,15 @@ static EWRAM_DATA_2 WigglytuffShop3Work *sWigglytuffShop3Work = {0}; #include "data/wigglytuff_shop3.h" +enum menuActions { + CANCEL_ACTION = 1, + BUY_ACTION, + CHECK_ACTION, + INFO_ACTION, + YES_ACTION, + NO_ACTION +}; + static void CreateWigglytuffConfirmFriendAreaMenu(void); static void HandleWigglytuffConfirmFriendAreaMenu(void); static void SetWigglytuffState(s32 newState); @@ -327,23 +336,23 @@ static void sub_80222C8(void) MemoryFill16(sWigglytuffShop3Work->unk5C, 0, sizeof(sWigglytuffShop3Work->unk5C)); sWigglytuffShop3Work->unk1C[index].text = gCommonBuy[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 2; + sWigglytuffShop3Work->unk1C[index].menuAction = BUY_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = gCommonCheck[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 3; + sWigglytuffShop3Work->unk1C[index].menuAction = CHECK_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = gCommonInfo[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 4; + sWigglytuffShop3Work->unk1C[index].menuAction = INFO_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = gCommonCancel[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 1; + sWigglytuffShop3Work->unk1C[index].menuAction = CANCEL_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = NULL; - sWigglytuffShop3Work->unk1C[index].menuAction = 1; + sWigglytuffShop3Work->unk1C[index].menuAction = CANCEL_ACTION; for (i = 0; i < index; i++) { if (sWigglytuffShop3Work->unk5C[i] == 0 && sWigglytuffShop3Work->unk1C[i].menuAction == sWigglytuffShop3Work->menuAction1) @@ -366,15 +375,15 @@ static void sub_8022380(void) MemoryFill16(sWigglytuffShop3Work->unk5C, 0, sizeof(sWigglytuffShop3Work->unk5C)); sWigglytuffShop3Work->unk1C[index].text = gCommonBuy[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 2; + sWigglytuffShop3Work->unk1C[index].menuAction = BUY_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = gCommonInfo[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 4; + sWigglytuffShop3Work->unk1C[index].menuAction = INFO_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = NULL; - sWigglytuffShop3Work->unk1C[index].menuAction = 1; + sWigglytuffShop3Work->unk1C[index].menuAction = CANCEL_ACTION; for (i = 0; i < index; i++) { if (sWigglytuffShop3Work->unk5C[i] == 0 && sWigglytuffShop3Work->unk1C[i].menuAction == sWigglytuffShop3Work->menuAction2) @@ -396,15 +405,15 @@ static void CreateWigglytuffConfirmFriendAreaMenu(void) MemoryFill16(sWigglytuffShop3Work->unk5C, 0, sizeof(sWigglytuffShop3Work->unk5C)); sWigglytuffShop3Work->unk1C[index].text = gCommonYes[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 5; + sWigglytuffShop3Work->unk1C[index].menuAction = YES_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = gCommonNo[0]; - sWigglytuffShop3Work->unk1C[index].menuAction = 6; + sWigglytuffShop3Work->unk1C[index].menuAction = NO_ACTION; index++; sWigglytuffShop3Work->unk1C[index].text = NULL; - sWigglytuffShop3Work->unk1C[index].menuAction = 1; + sWigglytuffShop3Work->unk1C[index].menuAction = CANCEL_ACTION; } static void sub_8022460(void) @@ -414,23 +423,23 @@ static void sub_8022460(void) if (sub_80144A4(&menuAction) != 0) return; - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sWigglytuffShop3Work->menuAction1 = menuAction; switch (menuAction) { - case 2: + case BUY_ACTION: if (sub_8021700(2)) SetWigglytuffState(WIGGLYTUFF_CANT_ADD_FRIEND_AREA); else SetWigglytuffState(FRIEND_AREA_SELECT_BUY); break; - case 3: + case CHECK_ACTION: SetWigglytuffState(WIGGLYTUFF_CHECK); break; - case 4: + case INFO_ACTION: SetWigglytuffState(WIGGLYTUFF_INFO); break; - case 1: + case CANCEL_ACTION: SetWigglytuffState(WIGGLYTUFF_PRE_EXIT); break; } @@ -444,14 +453,14 @@ static void HandleWigglytuffConfirmFriendAreaMenu(void) return; switch (menuAction) { - case 5: + case YES_ACTION: gTeamInventoryRef->teamMoney -= sWigglytuffShop3Work->friendAreaPrice; UnlockFriendArea(sWigglytuffShop3Work->chosenFriendArea); PlaySound(332); SetWigglytuffState(CONFIRM_BUY_FRIEND_AREA); break; - case 1: - case 6: + case CANCEL_ACTION: + case NO_ACTION: SetWigglytuffState(WIGGLYTUFF_UNKA); break; } @@ -497,7 +506,7 @@ static void sub_80225C8(void) } switch (menuAction) { - case 2: + case BUY_ACTION: if (gTeamInventoryRef->teamMoney == 0) SetWigglytuffState(NO_MONEY); else if (sWigglytuffShop3Work->friendAreaPrice > gTeamInventoryRef->teamMoney) @@ -505,10 +514,10 @@ static void sub_80225C8(void) else SetWigglytuffState(BUY_FRIEND_AREA); break; - case 4: + case INFO_ACTION: SetWigglytuffState(FRIEND_AREA_INFO); break; - case 1: + case CANCEL_ACTION: SetWigglytuffState(WIGGLYTUFF_UNKA); break; } diff --git a/src/wonder_mail_802D098.c b/src/wonder_mail_802D098.c index 70bfb3223..d5ef61a87 100644 --- a/src/wonder_mail_802D098.c +++ b/src/wonder_mail_802D098.c @@ -33,6 +33,16 @@ enum WonderMailRescueStates // 13 - 16 }; +enum menuActions { + CANCEL_ACTION = 1, + DELETE_ACTION, + YES_ACTION, + NO_ACTION, + INFO_ACTION, + NEW_MAIL_ACTION, + OLD_MAIL_ACTION +}; + static EWRAM_DATA_2 unkStruct_203B2F8 *sUnknown_203B2F8 = {0}; #include "data/wonder_mail_802D098.h" @@ -279,15 +289,15 @@ static void sub_802D5A4(void) loopMax = 0; MemoryFill16(sUnknown_203B2F8->unk198, 0, sizeof(sUnknown_203B2F8->unk198)); sUnknown_203B2F8->unk118[loopMax].text = gCommonDelete[0]; - sUnknown_203B2F8->unk118[loopMax].menuAction = 2; + sUnknown_203B2F8->unk118[loopMax].menuAction = DELETE_ACTION; loopMax++; sUnknown_203B2F8->unk118[loopMax].text = gCommonInfo[0]; - sUnknown_203B2F8->unk118[loopMax].menuAction = 5; + sUnknown_203B2F8->unk118[loopMax].menuAction = INFO_ACTION; loopMax++; sUnknown_203B2F8->unk118[loopMax].text = NULL; - sUnknown_203B2F8->unk118[loopMax].menuAction = 1; + sUnknown_203B2F8->unk118[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sUnknown_203B2F8->unk198[i] == 0) { @@ -296,7 +306,7 @@ static void sub_802D5A4(void) } } - sUnknown_203B2F8->menuAction1 = 2; + sUnknown_203B2F8->menuAction1 = DELETE_ACTION; } static void sub_802D63C(void) @@ -305,15 +315,15 @@ static void sub_802D63C(void) loopMax = 0; sUnknown_203B2F8->unk158[loopMax].text = gCommonYes[0]; - sUnknown_203B2F8->unk158[loopMax].menuAction = 3; + sUnknown_203B2F8->unk158[loopMax].menuAction = YES_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = gCommonNo[0]; - sUnknown_203B2F8->unk158[loopMax].menuAction = 4; + sUnknown_203B2F8->unk158[loopMax].menuAction = NO_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = NULL; - sUnknown_203B2F8->unk158[loopMax].menuAction = 1; + sUnknown_203B2F8->unk158[loopMax].menuAction = CANCEL_ACTION; } static void sub_802D690(void) @@ -323,30 +333,30 @@ static void sub_802D690(void) loopMax = 0; sUnknown_203B2F8->unk158[loopMax].text = gCommonYes[0]; - sUnknown_203B2F8->unk158[loopMax].menuAction = 3; + sUnknown_203B2F8->unk158[loopMax].menuAction = YES_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = gCommonNo[0]; - sUnknown_203B2F8->unk158[loopMax].menuAction = 4; + sUnknown_203B2F8->unk158[loopMax].menuAction = NO_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = sNewMail; - sUnknown_203B2F8->unk158[loopMax].menuAction = 6; + sUnknown_203B2F8->unk158[loopMax].menuAction = NEW_MAIL_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = sOldMail; - sUnknown_203B2F8->unk158[loopMax].menuAction = 7; + sUnknown_203B2F8->unk158[loopMax].menuAction = OLD_MAIL_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = NULL; - sUnknown_203B2F8->unk158[loopMax].menuAction = 1; + sUnknown_203B2F8->unk158[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sUnknown_203B2F8->unk158[i].menuAction == sUnknown_203B2F8->menuAction3) return; } - sUnknown_203B2F8->menuAction3 = 4; + sUnknown_203B2F8->menuAction3 = NO_ACTION; } static void sub_802D73C(void) @@ -356,26 +366,26 @@ static void sub_802D73C(void) loopMax = 0; sUnknown_203B2F8->unk158[loopMax].text = gCommonYes[0]; - sUnknown_203B2F8->unk158[loopMax].menuAction = 3; + sUnknown_203B2F8->unk158[loopMax].menuAction = YES_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = gCommonNo[0]; - sUnknown_203B2F8->unk158[loopMax].menuAction = 4; + sUnknown_203B2F8->unk158[loopMax].menuAction = NO_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = sNewMail; - sUnknown_203B2F8->unk158[loopMax].menuAction = 6; + sUnknown_203B2F8->unk158[loopMax].menuAction = NEW_MAIL_ACTION; loopMax++; sUnknown_203B2F8->unk158[loopMax].text = NULL; - sUnknown_203B2F8->unk158[loopMax].menuAction = 1; + sUnknown_203B2F8->unk158[loopMax].menuAction = CANCEL_ACTION; for (i = 0; i < loopMax; i++) { if (sUnknown_203B2F8->unk158[i].menuAction == sUnknown_203B2F8->menuAction2) return; } - sUnknown_203B2F8->menuAction2 = 4; + sUnknown_203B2F8->menuAction2 = NO_ACTION; } static void sub_802D7D0(void) @@ -385,19 +395,19 @@ static void sub_802D7D0(void) if (sub_80144A4(&menuAction)) return; - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sUnknown_203B2F8->menuAction2 = menuAction; switch (menuAction) { - case 3: // Yes + case YES_ACTION: sub_802D1A0(WONDER_MAIL_EXIT); break; - case 6: // New Mail + case NEW_MAIL_ACTION: sUnknown_203B2F8->fallbackState = 1; sub_802D1A0(0x10); break; - case 4: // No - case 2: + case NO_ACTION: + case DELETE_ACTION: default: sub_802D1A0(INITIAL_WONDER_MAIL_CHECK); break; @@ -411,27 +421,27 @@ static void sub_802D82C(void) if (sub_80144A4(&menuAction)) return; - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sUnknown_203B2F8->menuAction3 = menuAction; switch (menuAction) { - case 3: // Yes + case YES_ACTION: ResetJobSlot(sUnknown_203B2F8->jobSlotIndex); ShiftJobSlotsDown(); sub_802D1A0(RECEIVE_WONDER_MAIL); break; - case 6: // New Mail + case NEW_MAIL_ACTION: sUnknown_203B2F8->fallbackState = 9; sub_802D1A0(16); break; - case 7: // Old Mail + case OLD_MAIL_ACTION: sUnknown_203B2F8->fallbackState = 9; sub_802D1A0(15); break; - default: // No - case 1: - case 2: - case 4: + default: + case CANCEL_ACTION: + case DELETE_ACTION: + case NO_ACTION: sub_802D1A0(1); break; } @@ -469,12 +479,12 @@ static void sub_802D940(void) if (!sub_8012FD8(&sUnknown_203B2F8->unk78)) { sub_8013114(&sUnknown_203B2F8->unk78, &menuAction); - if (menuAction != 1) + if (menuAction != CANCEL_ACTION) sUnknown_203B2F8->menuAction1 = menuAction; } switch (menuAction) { - case 2: // Delete + case DELETE_ACTION: if (sUnknown_203B2F8->unk9) { mail = &gUnknown_203B490->jobSlots[sUnknown_203B2F8->jobSlotIndex]; if (mail->mailType > MAIL_TYPE_SUSPENDED_JOB && sUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id) { @@ -485,11 +495,11 @@ static void sub_802D940(void) sub_802D1A0(14); break; - case 5: // Info + case INFO_ACTION: sUnknown_203B2F8->fallbackState = DRAW_JOB_LIST_1; sub_802D1A0(15); break; - case 1: + case CANCEL_ACTION: sub_802D1A0(DRAW_JOB_LIST_1); break; } @@ -506,12 +516,12 @@ static void sub_802D9F0(void) sub_8013114(&sUnknown_203B2F8->unkC8, &menuAction); switch (menuAction) { - case 1: // No - case 4: + case CANCEL_ACTION: + case NO_ACTION: sub_802D1A0(DRAW_JOB_LIST_1); break; - case 3: // Yes + case YES_ACTION: sub_802C688(); ResetJobSlot(sUnknown_203B2F8->jobSlotIndex); ShiftJobSlotsDown(); From 16e70a74265ef79971bc5832a028c7b379b93ceb Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 13 Jul 2024 22:21:58 -0700 Subject: [PATCH 35/39] More decomp of saving functions --- asm/code_8080CF0.s | 108 +--------------------------------- include/structs/str_dungeon.h | 33 ++++++----- src/code_8057824_1.c | 12 ++-- src/code_8069E0C.c | 10 ++-- src/move_actions.c | 8 +-- src/move_checks.c | 4 +- src/trap_1.c | 97 +++++++++++++++++++++--------- src/type_effectiveness.c | 8 +-- src/weather.c | 18 +++--- 9 files changed, 120 insertions(+), 178 deletions(-) diff --git a/asm/code_8080CF0.s b/asm/code_8080CF0.s index d66b14f89..09045f4b3 100644 --- a/asm/code_8080CF0.s +++ b/asm/code_8080CF0.s @@ -5,110 +5,8 @@ .text - thumb_func_start sub_8081AD4 -sub_8081AD4: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldrb r1, [r4] - bl sub_8083060 - ldrb r1, [r4, 0x1] - adds r0, r5, 0 - bl sub_8083060 - adds r1, r4, 0x2 - adds r0, r5, 0 - movs r2, 0x2 - bl sub_8082FA8 - ldrb r1, [r4, 0x4] - adds r0, r5, 0 - bl sub_8083060 - ldrb r1, [r4, 0x5] - adds r0, r5, 0 - bl sub_8083060 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8081AD4 - - thumb_func_start sub_8081B08 -sub_8081B08: - push {r4-r7,lr} - adds r6, r0, 0 - adds r7, r1, 0 - adds r4, r7, 0 - movs r5, 0x3 -_08081B12: - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_8081AD4 - adds r4, 0x8 - subs r5, 0x1 - cmp r5, 0 - bge _08081B12 - adds r0, r7, 0 - adds r0, 0x20 - ldrb r1, [r0] - adds r0, r6, 0 - bl sub_8083060 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8081B08 - - thumb_func_start sub_8081B34 -sub_8081B34: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r0, 0 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_8083048 - movs r0, 0x2 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_8083048 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8081B34 - - thumb_func_start sub_8081B54 -sub_8081B54: - push {lr} - movs r2, 0x3 - bl sub_8082FA8 - pop {r0} - bx r0 - thumb_func_end sub_8081B54 - - thumb_func_start sub_8081B60 -sub_8081B60: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - ldrh r1, [r4] - bl sub_8083030 - ldrh r1, [r4, 0x4] - adds r0, r5, 0 - bl sub_8083030 - adds r1, r4, 0 - adds r1, 0x9 - adds r0, r5, 0 - movs r2, 0x1 - bl sub_8082FA8 - adds r4, 0xE - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl sub_8082FA8 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8081B60 - - thumb_func_start sub_8081B94 -sub_8081B94: + thumb_func_start SaveDungeonWeather +SaveDungeonWeather: push {r4-r6,lr} adds r6, r0, 0 adds r5, r1, 0 @@ -149,7 +47,7 @@ _08081BAC: pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_8081B94 + thumb_func_end SaveDungeonWeather thumb_func_start sub_8081BF4 sub_8081BF4: diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index f55bae5d7..35e1dac7c 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -31,6 +31,24 @@ typedef struct Dungeon_sub u8 unk2; } Dungeon_sub; +typedef struct Weather +{ + /* 0xE264 */ u8 weather; // Uses the weather constants in weather.h. + u8 unkE265; // Uses the weather constants in weather.h + /* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically. + /* 0xE267 */ u8 unkE267[0xE269 - 0xE267]; + u8 unkE269; + u8 fillE26A; + u8 unkE26B; + u8 weatherTurns; + u8 fillE26D[0xE26F - 0xE26D]; + /* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather. + /* 0xE277 */ u8 mudSportTurns; + /* 0xE278 */ u8 waterSportTurns; + /* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects + +} Weather; + // size: 0x30 typedef struct unkDungeonGlobal_unk1CE98_sub { @@ -175,20 +193,7 @@ typedef struct Dungeon u32 unkE250; u8 fillE254[0xE260 - 0xE254]; u32 unkE260; - /* 0xE264 */ u8 weather; // Uses the weather constants in weather.h. - u8 unkE265; // Uses the weather constants in weather.h - /* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically. - /* 0xE267 */ u8 unkE267[0xE269 - 0xE267]; - u8 unkE269; - u8 fillE26A; - u8 unkE26B; - u8 weatherTurns; - u8 fillE26D[0xE26F - 0xE26D]; - /* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather. - /* 0xE277 */ u8 mudSportTurns; - /* 0xE278 */ u8 waterSportTurns; - /* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects - u8 fillE27A[0xE27C - 0xE27A]; + /* 0xE264 */ Weather weather; // Uses the weather constants in weather.h. /* 0xE27C */ Tile unkE27C[8][8]; /* 0xE87C */ u8 unkE87C[8][8]; u32 fillE8BC; diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index c320cfaa2..7f31e33ad 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -1072,7 +1072,7 @@ void ArticunoPreFightDialogue(void) DisplayDungeonDialogue(gArticunoPreFightDialogue_7); sub_803E708(10,0x46); PlaySoundEffect(0); // snow flurry - gDungeon->unkE265 = WEATHER_SNOW; + gDungeon->weather.unkE265 = WEATHER_SNOW; sub_807EAA0(0,1); PlaySoundEffect(0x1ee); // flash effect? sub_8088574(); @@ -1107,7 +1107,7 @@ void ArticunoReFightDialogue(void) LeaderEntity = xxx_call_GetLeader(); ArticunoEntity = GetEntityFromClientType(0xd); - gDungeon->unkE265 = WEATHER_SNOW; + gDungeon->weather.unkE265 = WEATHER_SNOW; sub_807EAA0(0,1); sub_803E708(10,0x46); DisplayDungeonDialogue(gArticunoReFightDialogue_1); @@ -1134,7 +1134,7 @@ void ArticunoPostStoryPreFightDialogue(void) sub_80866C4(gUnknown_8102A9C); } else { - gDungeon->unkE265 = WEATHER_SNOW; + gDungeon->weather.unkE265 = WEATHER_SNOW; sub_807EAA0(0,1); ArticunoScreenFlash(); sub_8086738(); @@ -2494,7 +2494,7 @@ void RaikouPreFightDialogue(void) DisplayDungeonDialogue(gRaikouPreFightDialogue_1); RaikouScreenFlash(); DisplayDungeonDialogue(gRaikouPreFightDialogue_2); - gDungeon->unkE265 = WEATHER_RAIN; + gDungeon->weather.unkE265 = WEATHER_RAIN; sub_807EAA0(0,1); sub_803E708(10,70); DisplayDungeonDialogue(gRaikouPreFightDialogue_3); @@ -2516,7 +2516,7 @@ void RaikouReFightDialogue(void) LeaderEntity = xxx_call_GetLeader(); RaikouEntity = GetEntityFromClientType(0x13); - gDungeon->unkE265 = WEATHER_RAIN; + gDungeon->weather.unkE265 = WEATHER_RAIN; sub_807EAA0(0,1); RaikouScreenFlash(); DisplayDungeonDialogue(gRaikouReFightDialogue_1); @@ -2540,7 +2540,7 @@ void RaikouPostStoryPreFightDialogue(void) sub_80866C4(gRaikouPostStoryPreFightDialogue_4); } else { - gDungeon->unkE265 = WEATHER_RAIN; + gDungeon->weather.unkE265 = WEATHER_RAIN; sub_807EAA0(0,1); DisplayDungeonDialogue(gRaikouPostStoryPreFightDialogue_1); RaikouScreenFlash(); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 0df1cda77..f92891064 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -71,23 +71,23 @@ void TriggerWeatherAbilities(void) if (gDungeon->unkC != 0) { gDungeon->unkC = 0; - gDungeon->nullifyWeather = FALSE; + gDungeon->weather.nullifyWeather = FALSE; for(index = 0; index < DUNGEON_MAX_POKEMON; index++) { entity = gDungeon->allPokemon[index]; if (EntityExists(entity)) { if (HasAbility(entity, ABILITY_DRIZZLE)) { - gDungeon->naturalWeather[WEATHER_RAIN] = 1; + gDungeon->weather.naturalWeather[WEATHER_RAIN] = 1; } else if (HasAbility(entity, ABILITY_SAND_STREAM)) { - gDungeon->naturalWeather[WEATHER_SANDSTORM] = 1; + gDungeon->weather.naturalWeather[WEATHER_SANDSTORM] = 1; } else if (HasAbility(entity, ABILITY_DROUGHT)) { - gDungeon->naturalWeather[WEATHER_SUNNY] = 1; + gDungeon->weather.naturalWeather[WEATHER_SUNNY] = 1; } if ((HasAbility(entity, ABILITY_AIR_LOCK)) || (HasAbility(entity, ABILITY_CLOUD_NINE))) { - gDungeon->nullifyWeather = TRUE; + gDungeon->weather.nullifyWeather = TRUE; } } } diff --git a/src/move_actions.c b/src/move_actions.c index e67492bda..a95cd5ad8 100644 --- a/src/move_actions.c +++ b/src/move_actions.c @@ -441,7 +441,7 @@ bool32 sub_805783C(Entity *pokemon, Entity *target, Move *move, s32 param_4) bool32 sub_805785C(Entity *pokemon, Entity *target, Move *move, s32 param_4) { - gDungeon->unkE26B = gUnknown_80F4F42; + gDungeon->weather.unkE26B = gUnknown_80F4F42; if (sub_807EAA0(1,0) == 0) { // The weather remains unchanged sub_80522F4(pokemon,target,*gUnknown_80FCF74); @@ -451,7 +451,7 @@ bool32 sub_805785C(Entity *pokemon, Entity *target, Move *move, s32 param_4) bool32 sub_80578A4(Entity *pokemon, Entity *target, Move *move, s32 param_4) { - gDungeon->weatherTurns = gUnknown_80F4F42; + gDungeon->weather.weatherTurns = gUnknown_80F4F42; if (sub_807EAA0(1,0) == 0) { // The weather remains unchanged sub_80522F4(pokemon,target,*gUnknown_80FCF80); @@ -2035,7 +2035,7 @@ bool8 sub_805946C(Entity * pokemon,Entity * target,Move * move,u32 param_4) bool8 sub_80594E0(Entity *pokemon, Entity *target, Move *move, u32 param_4) { - gDungeon->unkE269 = gUnknown_80F4F42; + gDungeon->weather.unkE269 = gUnknown_80F4F42; if(sub_807EAA0(1, 0) == 0) { sub_80522F4(pokemon, target, *gUnknown_80FCF78); @@ -2729,7 +2729,7 @@ bool8 RolePlayMoveAction(Entity *pokemon, Entity *target, Move *move, u32 param_ bool8 sub_805A394(Entity *pokemon, Entity *target, Move *move, u32 param_4) { - gDungeon->unkE267[1] = gUnknown_80F4F42; + gDungeon->weather.unkE267[1] = gUnknown_80F4F42; if (sub_807EAA0(1,0) == 0) { sub_80522F4(pokemon,target,*gUnknown_80FCF7C); } diff --git a/src/move_checks.c b/src/move_checks.c index c9e30f1c1..ce698e24a 100644 --- a/src/move_checks.c +++ b/src/move_checks.c @@ -375,13 +375,13 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move) break; } case MOVE_MUD_SPORT: - if (gDungeon->mudSportTurns > 0) + if (gDungeon->weather.mudSportTurns > 0) { return FALSE; } break; case MOVE_WATER_SPORT: - if (gDungeon->waterSportTurns > 0) + if (gDungeon->weather.waterSportTurns > 0) { return FALSE; } diff --git a/src/trap_1.c b/src/trap_1.c index 5e0369f69..613efb81f 100644 --- a/src/trap_1.c +++ b/src/trap_1.c @@ -14,15 +14,15 @@ extern u8 gUnknown_81071D4[]; extern void sub_8082FA8(unkStruct_8094924 *, void *, s32); -void sub_8081B60(void *, Tile *); +void SaveTile(unkStruct_8094924 *r0, Tile *tile); void sub_80830F8(void * , u32*); void sub_808312C(void *, u32 *); -void sub_8081B94(void *, u8 *); +void SaveDungeonWeather(void *, Weather *); void sub_8083078(void *, u32); void sub_80830B4(void *, u8); void sub_8083030(void *, u16); -void sub_8080E0C(unkStruct_8094924 *, Entity *); -void sub_808300C(void *, u8 *); +void SaveEntity(unkStruct_8094924 *param_1, Entity *); +void sub_808300C(unkStruct_8094924 *param_1, u8 *); void sub_8081788(unkStruct_8094924 *param_1, Item *param_2); void sub_8080B90(unkStruct_8094924 *param_1); void SaveItemData(unkStruct_8094924 *param_1); @@ -34,20 +34,20 @@ void sub_8080CF0(unkStruct_8094924 *param_1); void nullsub_98(unkStruct_8094924 *param_1); void sub_8082F9C(unkStruct_8094924 *param_1, u32, u32); void sub_8049ED4(void); -void sub_8083060(void *, u32); +void sub_8083060(unkStruct_8094924 *param_1, u32); void sub_80817F4(unkStruct_8094924 *param_1, u32 param_2); -void sub_80830A0(void *, u32); +void sub_80830A0(unkStruct_8094924 *param_1, u32); void sub_808180C(unkStruct_8094924 *param_1, u32 param_2); -void sub_8083048(void *, u32); +void sub_8083048(unkStruct_8094924 *param_1, u32); void sub_80818C8(unkStruct_8094924 *param_1, JoinedAt *param_2); -void sub_80817C8(unkStruct_8094924 *param_1, ActionContainer *param_2); -void sub_8081B34(void *, void *); -void sub_8081B08(void *, Move *); +void SaveActionContainer(unkStruct_8094924 *param_1, ActionContainer *param_2); +void sub_8081B34(unkStruct_8094924 *r0, s16 *r1); +void SaveEntityMoves(unkStruct_8094924 *r0, Move *move); void sub_8081824(unkStruct_8094924 *param_1, u32 param_2); void sub_80817B0(unkStruct_8094924 *param_1, u32 param_2); void SavePosition(void*, Position *); -void sub_80818E4(unkStruct_8094924 *param_1, AITarget* param_2); -void sub_8081B54(void *, u8 *); +void SaveAITargetStatus(unkStruct_8094924 *param_1, AITarget* param_2); +void SaveIQFlags(unkStruct_8094924 *r0, u8 *r1); void SaveSpeedStage(unkStruct_8094924 *param_1, s32 param_2); void sub_8081854(unkStruct_8094924 *param_1, s32 param_2); void sub_808183C(unkStruct_8094924 *param_1, s32 param_2); @@ -66,10 +66,10 @@ void SaveHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2); void SaveChargingStatus(unkStruct_8094924 *param_1, Charging *param_2); void SaveProtectionStatus(unkStruct_8094924 *param_1, Protection *param_2); void SaveWaitingStatus(unkStruct_8094924 *param_1, Waiting *param_2); -void SaveSpeedCounters(void *, u8 *, u32); +void SaveSpeedCounters(unkStruct_8094924 *param_1, u8 *speedCounters, u32 numCounters); void SaveClientType(unkStruct_8094924 *param_1, u8 param_2); void sub_803E708(u32, u32); -void sub_80421C0(Entity *, u32); +void sub_80421C0(Entity *, u16); void sub_804687C(Entity *, Position *, Position *, Item *, u32); void HandleTripTrap(Entity *pokemon, Entity *target) @@ -218,15 +218,15 @@ void sub_8080CF0(unkStruct_8094924 *param_1) sub_8083030(param_1,gDungeon->unk3800); for(counter = 0; counter < MAX_TEAM_MEMBERS; counter++) { - sub_8080E0C(param_1,gDungeon->teamPokemon[counter]); + SaveEntity(param_1,gDungeon->teamPokemon[counter]); } for(counter = 0; counter < DUNGEON_MAX_WILD_POKEMON; counter++) { - sub_8080E0C(param_1,gDungeon->wildPokemon[counter]); + SaveEntity(param_1,gDungeon->wildPokemon[counter]); } } -void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2) +void SaveEntity(unkStruct_8094924 *param_1, Entity *param_2) { Position *pos; EntityInfo *info; @@ -322,7 +322,7 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2) sub_80830A0(param_1,info->offensiveMultipliers[1]); sub_80830A0(param_1,info->defensiveMultipliers[0]); sub_80830A0(param_1,info->defensiveMultipliers[1]); - sub_80817C8(param_1,&info->action); + SaveActionContainer(param_1,&info->action); sub_808180C(param_1,info->types[0]); sub_808180C(param_1,info->types[1]); sub_8081824(param_1,info->abilities[0]); @@ -373,9 +373,9 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2) pos++; } - sub_80818E4(param_1,temp3); - sub_8081B54(param_1,temp2); - sub_8081B54(param_1,temp1); + SaveAITargetStatus(param_1,temp3); + SaveIQFlags(param_1,temp2); + SaveIQFlags(param_1,temp1); SaveTactic(param_1,*puStack_a0); SaveHiddenPower(param_1,psStack_a4); sub_8083078(param_1,*puStack_9c); @@ -415,9 +415,9 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2) sub_8083060(param_1,info->stockpileStage); sub_8083060(param_1,info->fill113); sub_8083060(param_1,(u8)info->moveRandomly); - sub_8081B08(param_1,info->moves); - sub_8081B34(param_1,&info->belly); - sub_8081B34(param_1,&info->maxBelly); + SaveEntityMoves(param_1,info->moves); + sub_8081B34(param_1,(s16 *)&info->belly); + sub_8081B34(param_1,(s16 *)&info->maxBelly); sub_80830B4(param_1,info->aiNextToTarget); sub_80830B4(param_1,info->recalculateFollow); sub_80830B4(param_1,info->waiting); @@ -472,7 +472,7 @@ void sub_8081454(unkStruct_8094924 *param_1) for(iVar2 = 0; iVar2 < DUNGEON_MAX_SIZE_X; iVar2++) { - sub_8081B60(param_1,&gDungeon->tiles[iVar1][iVar2]); + SaveTile(param_1,&gDungeon->tiles[iVar1][iVar2]); } } @@ -494,11 +494,11 @@ void sub_8081454(unkStruct_8094924 *param_1) { for(iVar2 = 0; iVar2 < 8; iVar2++) { - sub_8081B60(param_1, &gDungeon->unkE27C[iVar1][iVar2]); + SaveTile(param_1, &gDungeon->unkE27C[iVar1][iVar2]); sub_8083060(param_1, gDungeon->unkE87C[iVar1][iVar2]); } } - sub_8081B94(param_1,&gDungeon->weather); + SaveDungeonWeather(param_1,&gDungeon->weather); } void sub_808165C(unkStruct_8094924 *param_1) @@ -540,7 +540,7 @@ void sub_80817B0(unkStruct_8094924 *param_1, u32 param_2) sub_8082FA8(param_1, &stack, 1); } -void sub_80817C8(unkStruct_8094924 *param_1, ActionContainer *param_2) +void SaveActionContainer(unkStruct_8094924 *param_1, ActionContainer *param_2) { sub_8082FA8(param_1, ¶m_2->direction, 1); sub_8082FA8(param_1, ¶m_2->itemTargetPosition.x, 1); @@ -609,7 +609,7 @@ void sub_80818C8(unkStruct_8094924 *param_1, JoinedAt *param_2) sub_8083060(param_1, param_2->unk1); } -void sub_80818E4(unkStruct_8094924 *param_1, AITarget* param_2) +void SaveAITargetStatus(unkStruct_8094924 *param_1, AITarget* param_2) { sub_8082FA8(param_1, ¶m_2->aiObjective, 1); sub_80830B4(param_1, param_2->aiNotNextToTarget); @@ -707,3 +707,42 @@ void SaveMuzzledStatus(unkStruct_8094924 *param_1, Muzzled *param_2) sub_8083060(param_1, param_2->muzzledTurns); } +void SaveEntityMove(unkStruct_8094924 *r0, Move *r1) +{ + sub_8083060(r0, r1->moveFlags); + sub_8083060(r0, r1->moveFlags2); + sub_8082FA8(r0, &r1->id, 2); + sub_8083060(r0, r1->PP); + sub_8083060(r0, r1->ginseng); +} + +void SaveEntityMoves(unkStruct_8094924 *r0, Move *move) +{ + s32 index; + for(index = 0; index < MAX_MON_MOVES; index++) + { + SaveEntityMove(r0, &move[index]); + } + sub_8083060(r0, *(u8 *)(move + 0x4)); // Struggle Move flags? +} + +void sub_8081B34(unkStruct_8094924 *r0, s16 *r1) +{ + sub_8083048(r0, r1[0]); + sub_8083048(r0, r1[1]); +} + +void SaveIQFlags(unkStruct_8094924 *r0, u8 *r1) +{ + sub_8082FA8(r0, r1, 3); +} + +void SaveTile(unkStruct_8094924 *r0, Tile *tile) +{ + sub_8083030(r0, tile->terrainType); + sub_8083030(r0, tile->unk4); + sub_8082FA8(r0, &tile->room, 1); + sub_8082FA8(r0, &tile->unkE, 1); +} + + diff --git a/src/type_effectiveness.c b/src/type_effectiveness.c index 9f76d1521..3375bfc16 100644 --- a/src/type_effectiveness.c +++ b/src/type_effectiveness.c @@ -231,11 +231,11 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct sub_800A34C(param_1,param_1, gUnknown_8106F64); gDungeon->unk16A = TRUE; } - if (((gDungeon->mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) { + if (((gDungeon->weather.mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) { gDungeon->fill16E[7] = TRUE; sub_800A34C(param_1,param_1,gUnknown_8106F1C); } - if ((gDungeon->waterSportTurns != 0) && (type == TYPE_FIRE)) { + if ((gDungeon->weather.waterSportTurns != 0) && (type == TYPE_FIRE)) { gDungeon->fill16E[8] = TRUE; sub_800A34C(param_1,param_1,gUnknown_8106F1C); } @@ -388,11 +388,11 @@ s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType) return 2; } } - if (gDungeon->mudSportTurns != 0 && moveType == TYPE_ELECTRIC) + if (gDungeon->weather.mudSportTurns != 0 && moveType == TYPE_ELECTRIC) { return 2; } - if (gDungeon->waterSportTurns != 0 && moveType == TYPE_FIRE) + if (gDungeon->weather.waterSportTurns != 0 && moveType == TYPE_FIRE) { return 2; } diff --git a/src/weather.c b/src/weather.c index 1bdc3e3c9..f64ed70aa 100644 --- a/src/weather.c +++ b/src/weather.c @@ -19,7 +19,7 @@ u8 GetApparentWeather(Entity *pokemon) { return WEATHER_CLEAR; } - return gDungeon->weather; + return gDungeon->weather.weather; } void sub_807E5AC(void) @@ -38,18 +38,18 @@ void sub_807E5E4(u8 weather) int index; u8 *preload; - gDungeon->unkE265 = weather; - gDungeon->weather = gDungeon->unkE265; - gDungeon->nullifyWeather = FALSE; + gDungeon->weather.unkE265 = weather; + gDungeon->weather.weather = gDungeon->weather.unkE265; + gDungeon->weather.nullifyWeather = FALSE; for(index = 0; index < 8; index++) { - gDungeon->unkE267[index] = 0; - gDungeon->naturalWeather[index] = 0; + gDungeon->weather.unkE267[index] = 0; + gDungeon->weather.naturalWeather[index] = 0; } - preload = &gDungeon->weatherDamageCounter; + preload = &gDungeon->weather.weatherDamageCounter; index = 0; *preload = 9; - gDungeon->mudSportTurns = 0; - gDungeon->waterSportTurns = 0; + gDungeon->weather.mudSportTurns = 0; + gDungeon->weather.waterSportTurns = 0; for(index = 0; index < 0x100; index++) { gDungeon->unk17C[index].unk0 = index; From 7338e36e1885a7fc1e1a58e4cf61586493934d63 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 13 Jul 2024 22:34:29 -0700 Subject: [PATCH 36/39] Decomp SaveDungeonWeather --- asm/code_8080CF0.s | 44 ----------------------------------- include/structs/str_dungeon.h | 4 ++-- src/trap_1.c | 17 +++++++++++++- 3 files changed, 18 insertions(+), 47 deletions(-) diff --git a/asm/code_8080CF0.s b/asm/code_8080CF0.s index 09045f4b3..0a2c9c674 100644 --- a/asm/code_8080CF0.s +++ b/asm/code_8080CF0.s @@ -5,50 +5,6 @@ .text - thumb_func_start SaveDungeonWeather -SaveDungeonWeather: - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - movs r2, 0x1 - bl sub_8082FA8 - adds r1, r5, 0x1 - adds r0, r6, 0 - movs r2, 0x1 - bl sub_8082FA8 - movs r4, 0 -_08081BAC: - adds r0, r5, 0x3 - adds r0, r4 - ldrb r1, [r0] - adds r0, r6, 0 - bl sub_8083060 - adds r0, r5, 0 - adds r0, 0xB - adds r0, r4 - ldrb r1, [r0] - adds r0, r6, 0 - bl sub_8083060 - adds r4, 0x1 - cmp r4, 0x7 - ble _08081BAC - ldrb r1, [r5, 0x2] - adds r0, r6, 0 - bl sub_8083060 - ldrb r1, [r5, 0x13] - adds r0, r6, 0 - bl sub_8083060 - ldrb r1, [r5, 0x14] - adds r0, r6, 0 - bl sub_8083060 - ldrb r1, [r5, 0x15] - adds r0, r6, 0 - bl sub_80830B4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end SaveDungeonWeather - thumb_func_start sub_8081BF4 sub_8081BF4: push {lr} diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 35e1dac7c..cf0fa5f02 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -36,11 +36,11 @@ typedef struct Weather /* 0xE264 */ u8 weather; // Uses the weather constants in weather.h. u8 unkE265; // Uses the weather constants in weather.h /* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically. - /* 0xE267 */ u8 unkE267[0xE269 - 0xE267]; + /* 0xE267 */ u8 unkE267[0xE269 - 0xE267]; // TODO: same size as naturalWeather according to SaveDungeonWeather u8 unkE269; u8 fillE26A; u8 unkE26B; - u8 weatherTurns; + /* 0xE26C */ u8 weatherTurns; u8 fillE26D[0xE26F - 0xE26D]; /* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather. /* 0xE277 */ u8 mudSportTurns; diff --git a/src/trap_1.c b/src/trap_1.c index 613efb81f..9b3a7f7fa 100644 --- a/src/trap_1.c +++ b/src/trap_1.c @@ -17,7 +17,7 @@ extern void sub_8082FA8(unkStruct_8094924 *, void *, s32); void SaveTile(unkStruct_8094924 *r0, Tile *tile); void sub_80830F8(void * , u32*); void sub_808312C(void *, u32 *); -void SaveDungeonWeather(void *, Weather *); +void SaveDungeonWeather(unkStruct_8094924 *r0, Weather *weather); void sub_8083078(void *, u32); void sub_80830B4(void *, u8); void sub_8083030(void *, u16); @@ -745,4 +745,19 @@ void SaveTile(unkStruct_8094924 *r0, Tile *tile) sub_8082FA8(r0, &tile->unkE, 1); } +void SaveDungeonWeather(unkStruct_8094924 *r0, Weather *weather) +{ + s32 index; + sub_8082FA8(r0, &weather->weather, 1); + sub_8082FA8(r0, &weather->unkE265, 1); + for(index = 0; index < 8; index++) + { + sub_8083060(r0, weather->unkE267[index]); + sub_8083060(r0, weather->naturalWeather[index]); + } + sub_8083060(r0, weather->weatherDamageCounter); + sub_8083060(r0, weather->mudSportTurns); + sub_8083060(r0, weather->waterSportTurns); + sub_80830B4(r0, weather->nullifyWeather); +} From c5814301732c34698538139cadefb1ff9c5105b2 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 13 Jul 2024 22:45:13 -0700 Subject: [PATCH 37/39] clean up weather struct and label more weather moves --- asm/code_80521D0.s | 8 ++++---- include/structs/str_dungeon.h | 7 +------ src/move_actions.c | 16 ++++++++-------- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 235382f29..9b48964fd 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -4532,7 +4532,7 @@ _08054BD8: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_80594E0 + bl SandstormMoveAction bl _080554BA _08054BE8: adds r0, r7, 0 @@ -5250,7 +5250,7 @@ _08055190: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805785C + bl RainDanceMoveAction b _080554BA _0805519E: adds r0, r7, 0 @@ -5313,7 +5313,7 @@ _0805520E: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805A394 + bl SunnyDayMoveAction b _080554BA _0805521C: adds r0, r7, 0 @@ -5397,7 +5397,7 @@ _080552B6: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_80578A4 + bl HailMoveAction b _080554BA _080552C4: adds r0, r7, 0 diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index cf0fa5f02..1bacd07f4 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -36,12 +36,7 @@ typedef struct Weather /* 0xE264 */ u8 weather; // Uses the weather constants in weather.h. u8 unkE265; // Uses the weather constants in weather.h /* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically. - /* 0xE267 */ u8 unkE267[0xE269 - 0xE267]; // TODO: same size as naturalWeather according to SaveDungeonWeather - u8 unkE269; - u8 fillE26A; - u8 unkE26B; - /* 0xE26C */ u8 weatherTurns; - u8 fillE26D[0xE26F - 0xE26D]; + /* 0xE267 */ u8 unkE267[8]; /* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather. /* 0xE277 */ u8 mudSportTurns; /* 0xE278 */ u8 waterSportTurns; diff --git a/src/move_actions.c b/src/move_actions.c index a95cd5ad8..84aac6439 100644 --- a/src/move_actions.c +++ b/src/move_actions.c @@ -439,9 +439,9 @@ bool32 sub_805783C(Entity *pokemon, Entity *target, Move *move, s32 param_4) return TRUE; } -bool32 sub_805785C(Entity *pokemon, Entity *target, Move *move, s32 param_4) +bool32 RainDanceMoveAction(Entity *pokemon, Entity *target, Move *move, s32 param_4) { - gDungeon->weather.unkE26B = gUnknown_80F4F42; + gDungeon->weather.unkE267[WEATHER_RAIN] = gUnknown_80F4F42; if (sub_807EAA0(1,0) == 0) { // The weather remains unchanged sub_80522F4(pokemon,target,*gUnknown_80FCF74); @@ -449,9 +449,9 @@ bool32 sub_805785C(Entity *pokemon, Entity *target, Move *move, s32 param_4) return TRUE; } -bool32 sub_80578A4(Entity *pokemon, Entity *target, Move *move, s32 param_4) +bool32 HailMoveAction(Entity *pokemon, Entity *target, Move *move, s32 param_4) { - gDungeon->weather.weatherTurns = gUnknown_80F4F42; + gDungeon->weather.unkE267[WEATHER_HAIL]= gUnknown_80F4F42; if (sub_807EAA0(1,0) == 0) { // The weather remains unchanged sub_80522F4(pokemon,target,*gUnknown_80FCF80); @@ -2033,9 +2033,9 @@ bool8 sub_805946C(Entity * pokemon,Entity * target,Move * move,u32 param_4) } -bool8 sub_80594E0(Entity *pokemon, Entity *target, Move *move, u32 param_4) +bool8 SandstormMoveAction(Entity *pokemon, Entity *target, Move *move, u32 param_4) { - gDungeon->weather.unkE269 = gUnknown_80F4F42; + gDungeon->weather.unkE267[WEATHER_SANDSTORM] = gUnknown_80F4F42; if(sub_807EAA0(1, 0) == 0) { sub_80522F4(pokemon, target, *gUnknown_80FCF78); @@ -2727,9 +2727,9 @@ bool8 RolePlayMoveAction(Entity *pokemon, Entity *target, Move *move, u32 param_ } } -bool8 sub_805A394(Entity *pokemon, Entity *target, Move *move, u32 param_4) +bool8 SunnyDayMoveAction(Entity *pokemon, Entity *target, Move *move, u32 param_4) { - gDungeon->weather.unkE267[1] = gUnknown_80F4F42; + gDungeon->weather.unkE267[WEATHER_SUNNY] = gUnknown_80F4F42; if (sub_807EAA0(1,0) == 0) { sub_80522F4(pokemon,target,*gUnknown_80FCF7C); } From 7f9d865af298e75596c36dfd76fba882aae5dfe6 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 20 Jul 2024 11:07:45 -0700 Subject: [PATCH 38/39] delete unneeded fail (rebase fail) --- src/code_80958E8_1.c | 705 ------------------------------------------- 1 file changed, 705 deletions(-) delete mode 100644 src/code_80958E8_1.c diff --git a/src/code_80958E8_1.c b/src/code_80958E8_1.c deleted file mode 100644 index 13249975e..000000000 --- a/src/code_80958E8_1.c +++ /dev/null @@ -1,705 +0,0 @@ -#include "global.h" -#include "constants/mailbox.h" -#include "constants/friend_area.h" -#include "constants/dungeon.h" -#include "constants/monster.h" -#include "constants/wonder_mail.h" -#include "items.h" -#include "code_80958E8.h" -#include "random.h" -#include "pokemon.h" -#include "event_flag.h" -#include "rescue_team_info.h" - -extern u8 sub_8095E38(WonderMail *, u8, u8, bool8); -extern void sub_80965F4(); -u8 sub_8097318(s16 param_1); -extern bool8 GenerateMailJobInfo(WonderMail *); - -bool8 sub_803C1D0(DungeonLocation *, u8); -u8 sub_8095F28(u8); -void sub_803C37C(DungeonLocation *, u8, u8 *); -bool8 sub_8096E80(u8); -u8 sub_8095E78(void); - -void sub_8096078(void); -bool8 sub_80963B4(void); - -static void SortMailboxSlots(void) -{ - s32 r1; - s32 r6; - WonderMail job; - - for(r1 = 0; r1 < NUM_MAILBOX_SLOTS - 1; r1++) - { - for(r6 = r1 + 1; r6 < NUM_MAILBOX_SLOTS; r6++) - { - if(gUnknown_203B490->mailboxSlots[r6].mailType != 0) - { - if((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) || - ((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id == gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) && - (gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.floor > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.floor))) - { - job = gUnknown_203B490->mailboxSlots[r1]; - gUnknown_203B490->mailboxSlots[r1] = gUnknown_203B490->mailboxSlots[r6]; - gUnknown_203B490->mailboxSlots[r6] = job; - } - } - } - } -} - -void sub_80961B4(void) -{ - if (sub_8096E2C() != 0) { - gUnknown_203B490->unk328 = TRUE; - } -} - -bool8 sub_80961D8(void) -{ - s32 num; - s32 index; - u32 floor; - s32 friendAreaReward; - WonderMail *slot; - bool8 flag = FALSE; - - num = CountFilledMailboxSlots(); - index = RandRange(num, NUM_MAILBOX_SLOTS); - if(num >= NUM_MAILBOX_SLOTS) return 0; - if(!gUnknown_203B490->unk328) - return 0; - else - { - gUnknown_203B490->unk328 = flag; - } - floor = 0x38; - if(sub_8001D08(0xA, 0x31, 0x1)) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x35]) - if(!sub_8096E80(0x35)) floor = 0x35; - } - if(sub_80023E4(0xF)) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x34]) - if(!sub_8096E80(0x34)) floor = 0x34; - if(!gUnknown_203B490->PKMNNewsReceived[0x33]) - if(!sub_8096E80(0x33)) floor = 0x33; - if(!gUnknown_203B490->PKMNNewsReceived[0x32]) - if(!sub_8096E80(0x32)) floor = 0x32; - - } - if(GetRescueTeamRank() == LUCARIO_RANK) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x36]) - if(!sub_8096E80(0x36)) floor = 0x36; - } - if(sub_80023E4(6)) - { - if(!gUnknown_203B490->PKMNNewsReceived[0x37]) - if(!sub_8096E80(0x37)) floor = 0x37; - } - - if(floor != 0x38) goto _slot; - if(num > index) goto _08096392; - floor = sub_8096E2C(); - if(!sub_80023E4(0xE) && (floor > 2)) goto _0809638E; - if (floor > 0x31) goto _0809638E; -_slot: - slot = GetMailboxSlotInfo(num); - slot->mailType = 1; - slot->unk4.dungeon.id = NUM_DUNGEONS; - slot->unk4.dungeon.floor = floor; - goto _flag; -_0809638E: - for(; num <= index; num++) - { - slot = GetMailboxSlotInfo(num); - if(GenerateMailJobInfo(slot)) - { - friendAreaReward = sub_8095E78(); - if(!sub_803C1D0(&slot->unk4.dungeon, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE; - slot->rewardType = RandRange(MONEY1, END_REWARDS); - if(slot->rewardType == FRIEND_AREA) - { - if(friendAreaReward == FRIEND_AREA_NONE) - { - slot->rewardType = MONEY1; - flag = TRUE; - } - else - { - slot->friendAreaReward = friendAreaReward; - flag = TRUE; - } - } - else - { -_flag: - flag = TRUE; - } - } else break; - } -_08096392: - if(sub_80963B4()) - flag = TRUE; - sub_8096078(); - SortMailboxSlots(); - return flag; -} - -bool8 sub_80963B4(void) -{ - u8 floor; - s32 num; - WonderMail *slot; - bool8 flag = FALSE; - - floor = sub_8096E2C(); - num = CountFilledMailboxSlots(); - if(num >= NUM_MAILBOX_SLOTS) return FALSE; - if(sub_80023E4(0xE)) - { - if(floor < 0x32) - { - slot = GetMailboxSlotInfo(num); - slot->mailType = 1; - slot->unk4.dungeon.id = NUM_DUNGEONS; - slot->unk4.dungeon.floor = floor; - flag = TRUE; - } - } - return flag; -} - -void sub_80963FC(void) -{ - s32 index; - WonderMail *slot; - - for(index = 0; index < NUM_MAILBOX_SLOTS; index++) - { - slot = GetMailboxSlotInfo(index); - if(slot->mailType != 1) - { - ResetMailboxSlot(index); - } - } - sub_8096078(); - slot = GetMailboxSlotInfo(CountFilledMailboxSlots()); - slot->mailType = 5; - slot->missionType = 0; - slot->unk2 = 0; - slot->unk4.dungeon.id = DUNGEON_MT_STEEL; - slot->unk4.dungeon.floor = 3; - slot->unk4.seed = 0x00ffffff & Rand32Bit(); - slot->clientSpecies = MONSTER_PIDGEY; - slot->targetSpecies = MONSTER_PIDGEY; - slot->targetItem = sub_8095F28(slot->unk4.dungeon.id); - slot->rewardType = MONEY1; - do - { - sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward); - } while (slot->targetItem == slot->itemReward); - slot->friendAreaReward = FRIEND_AREA_NONE; - sub_8096078(); - SortMailboxSlots(); -} - -void sub_8096488(void) -{ - WonderMail *mail; - s32 index; - - for(index = 0; index < NUM_MAILBOX_SLOTS; index++){ - ResetMailboxSlot(index); - } - mail = GetMailboxSlotInfo(0); - mail->mailType = 1; - mail->unk4.dungeon.id = NUM_DUNGEONS; - mail->unk4.dungeon.floor = 0; -} - -bool8 sub_80964B4(void) -{ - if ((!gUnknown_203B490->PKMNNewsReceived[0x35]) && (sub_8096E80(0x35) == 0)) { - return FALSE; - } - else { - return TRUE; - } -} - -bool8 sub_80964E4(void) -{ - if ((!gUnknown_203B490->PKMNNewsReceived[0x36]) && (sub_8096E80(0x36) == 0)) { - return FALSE; - } - else { - return TRUE; - } -} - -s32 CountFilledPelipperBoardSlots(void) -{ - s32 index; - s32 slots; - - slots = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) { - if (!IsPelipperBoardSlotEmpty(index)) { - slots++; - } - } - return slots; -} - -UNUSED bool8 sub_8096538(WonderMail *mail) -{ - s32 index; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if(gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) - { - gUnknown_203B490->pelipperBoardJobs[index] = *mail; - return FALSE; - } - } - return TRUE; -} - -WonderMail *GetPelipperBoardSlotInfo(u8 index) -{ - return &gUnknown_203B490->pelipperBoardJobs[index]; -} - - -bool8 IsPelipperBoardSlotEmpty(u8 index) -{ - if (gUnknown_203B490->pelipperBoardJobs[index].mailType == 0) - return TRUE; - else - return FALSE; -} - -void ResetPelipperBoardSlot(u8 index) -{ - gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.id = 99; - gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.floor = 0; - gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0; -} - -void sub_80965F4(void) -{ - int counter1; // r5 - int counter2; - - - counter1 = 0; - counter2 = 0; - - do { - for( ; counter1 < 8; counter1++) - { - if (gUnknown_203B490->pelipperBoardJobs[counter1].mailType != 0) - break; - } - - if (counter1 == 8) { - break; - } - - if (counter1 > counter2) { - gUnknown_203B490->pelipperBoardJobs[counter2] = gUnknown_203B490->pelipperBoardJobs[counter1]; - } - counter1++; - counter2++; - } while( 1 ); - - for(; counter2 < 8; counter2++) - { - gUnknown_203B490->pelipperBoardJobs[counter2].mailType = 0; - } -} - - -void SortPelipperJobs(void) -{ - s32 index1; - s32 index2; - - WonderMail mail; - - for(index1 = 0; index1 < MAX_ACCEPTED_JOBS - 1; index1++) - { - for(index2 = index1 + 1; index2 < MAX_ACCEPTED_JOBS; index2++) - { - if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE) - { - 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]; - gUnknown_203B490->pelipperBoardJobs[index2] = mail; - } - } - } - } -} - -void GeneratePelipperJobs(void) -{ - s32 range; - WonderMail *mail; - s32 index; - - range = RandRange(4,8); - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE; - } - - index = 0; - if (sub_8097318(0xe) != 0) { - mail = GetPelipperBoardSlotInfo(0); - mail->mailType = MAIL_TYPE_UNK2; - mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; - mail->unk2 = 1; - 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; - mail->rewardType = ITEM; - mail->itemReward = ITEM_REVIVER_SEED; - mail->friendAreaReward = 0; - index = 1; - } - - - if (sub_8097318(0xf) != 0) { - mail = GetPelipperBoardSlotInfo(index); - mail->mailType = MAIL_TYPE_UNK3; - mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; - mail->unk2 = 2; - 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; - mail->rewardType = ITEM; - mail->itemReward = ITEM_REVIVER_SEED; - mail->friendAreaReward = 0; - index++; - } - - if (sub_8097318(0x1c) != 0) { - mail = GetPelipperBoardSlotInfo(index); - mail->mailType = MAIL_TYPE_UNK4; - mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6; - mail->unk2 = 3; - 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; - mail->rewardType = ITEM; - mail->itemReward = ITEM_REVIVER_SEED; - mail->friendAreaReward = 0; - index++; - } - for (; index <= range; index++) { - if (!GenerateMailJobInfo(&gUnknown_203B490->pelipperBoardJobs[index])) break; - gUnknown_203B490->pelipperBoardJobs[index].rewardType = RandRange(MONEY, BLANK_4); - } - sub_80965F4(); - SortPelipperJobs(); -} - -bool8 IsMailinJobSlot(WonderMail *mail) -{ - WonderMail *jobSlot; - s32 index; - - for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < MAX_ACCEPTED_JOBS; jobSlot++, index++) - { - if(jobSlot->mailType != MAIL_TYPE_NONE) - if(mail->missionType == jobSlot->missionType) - if(mail->unk2 == jobSlot->unk2) - 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) - if(mail->rewardType == jobSlot->rewardType) - if(mail->itemReward == jobSlot->itemReward) - if(mail->friendAreaReward == jobSlot->friendAreaReward) - return TRUE; - } - return FALSE; -} - -bool8 sub_809693C(WonderMail *mail) -{ - u8 dungeonIndex; - u8 floor; - bool8 escortMission; - s32 index; - - dungeonIndex = mail->unk4.dungeon.id; - floor = mail->unk4.dungeon.floor; - escortMission = FALSE; - if (!IsValidWonderMail(mail)) { - return FALSE; - } - else - { - if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - escortMission = TRUE; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if ((gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_TAKEN_JOB) && - (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeonIndex,floor,escortMission) != 0)) - { - return TRUE; - } - } - } - return FALSE; -} - -s32 GetNumAcceptedJobs(void) -{ - s32 index; - s32 count; - - count = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if (!IsJobSlotEmpty(index)) { - count++; - } - } - return count; -} - -s32 CountJobsinDungeon(u8 dungeon) -{ - WonderMail *mail; - s32 index; - s32 count; - - count = 0; - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - mail = GetJobSlotInfo(index); - if ((mail->unk4.dungeon.id == dungeon) && - (((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) { - count++; - } - } - return count; -} - -bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon) -{ - WonderMail *mail; - s32 index; - u32 local_14; - s32 temp; - - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - mail = GetJobSlotInfo(index); - if(mail->unk4.dungeon.id == dungeon) - if(mail->mailType == MAIL_TYPE_TAKEN_JOB) - if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - { - temp = 0xffffff00; - local_14 &= temp; - temp = 0x4A; - local_14 |= temp; - - temp = 0xffff00ff; - local_14 &= temp; - temp = 0x100; - local_14 |= temp; - - sub_808CFD0(pokemon,mail->clientSpecies,NULL,0,(DungeonLocation *) &local_14,NULL); - return TRUE; - } - } - return FALSE; -} - -bool8 AcceptJob(WonderMail *mail) -{ - s32 index; - - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) - { - gUnknown_203B490->jobSlots[index] = *mail; - return FALSE; - } - } - return TRUE; -} - -WonderMail *GetJobSlotInfo(u8 index) -{ - return &gUnknown_203B490->jobSlots[index]; -} - -bool8 IsJobSlotEmpty(u8 index) -{ - if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE) - return TRUE; - else - return FALSE; -} - -void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon) -{ - WonderMail *jobSlot; - Item *item; - s32 index; - - jobSlot = GetJobSlotInfo(slotIndex); - param_1->unk0 = FALSE; - param_1->clientSpecies = jobSlot->clientSpecies; - param_1->targetSpecies = MONSTER_NONE; - if (jobSlot->unk4.dungeon.id == dungeon) { - switch(jobSlot->missionType) { - case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: - if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) { - for(index = 0; index < INVENTORY_SIZE; index++) - { - item = &gTeamInventoryRef->teamItems[index]; - if (((item->flags & ITEM_FLAG_EXISTS)) && (item->id == jobSlot->targetItem)) { - param_1->unk0 = TRUE; - } - } - } - break; - case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT: - case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: - if (jobSlot->mailType == MAIL_TYPE_UNK9) { - param_1->unk0 = TRUE; - } - break; - case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET: - case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: - if (jobSlot->mailType == MAIL_TYPE_UNK9) { - param_1->unk0 = TRUE; - param_1->targetSpecies = jobSlot->targetSpecies; - } - break; - } - } -} - -// Unused -s16 sub_8096B98(u8 dungeon) -{ - WonderMail *mail; - s32 index; - - for(index = 0; index < MAX_ACCEPTED_JOBS; index++) - { - mail = GetJobSlotInfo(index); - if(mail->mailType == MAIL_TYPE_TAKEN_JOB) - if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) - if(mail->unk4.dungeon.id == dungeon) - return mail->targetSpecies; - } - return 0; -} - -void sub_8096BD0(void) -{ - s32 index; - WonderMail *mail; - - for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) - { - switch(mail->mailType) - { - case MAIL_TYPE_UNK7: - case MAIL_TYPE_UNK8: - case MAIL_TYPE_UNK9: - ResetJobSlot(index); - break; - } - } - ShiftJobSlotsDown(); - SortJobSlots(); -} - -bool8 sub_8096C08(u8 *jobIndex) -{ - s32 index; - WonderMail *mail; - - for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++) - { - if(mail->mailType > 4 && mail->unk2 == 4) - { - - *jobIndex = index; - return TRUE; - } - } - return FALSE; -} - -void ResetJobSlot(u8 index) -{ - gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE; - gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99; - gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0; - gUnknown_203B490->jobSlots[index].rewardType = MONEY1; -} - -void sub_8096C80(void) -{ - int counter1; // r5 - int counter2; - - - counter1 = 0; - counter2 = 0; - - do { - for( ; counter1 < 8; counter1++) - { - if (gUnknown_203B490->jobSlots[counter1].mailType != 0) - break; - } - - if (counter1 == 8) { - break; - } - - if (counter1 > counter2) { - gUnknown_203B490->jobSlots[counter2] = gUnknown_203B490->jobSlots[counter1]; - } - counter1++; - counter2++; - } while( 1 ); - - for(; counter2 < 8; counter2++) - { - gUnknown_203B490->jobSlots[counter2].mailType = 0; - } -} - From 24e64900dd0a0b3d886ae58fc1f283bb08326465 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 21 Jul 2024 09:18:33 -0700 Subject: [PATCH 39/39] address review comments and clean up code thanks to @mateon1 --- include/dungeon_movement.h | 2 - src/code_8097670.c | 199 ++++++++++++++++++------------------- src/math.c | 4 + 3 files changed, 103 insertions(+), 102 deletions(-) diff --git a/include/dungeon_movement.h b/include/dungeon_movement.h index ffd4593bb..be363c333 100644 --- a/include/dungeon_movement.h +++ b/include/dungeon_movement.h @@ -6,8 +6,6 @@ extern u8 gWalkableTileToCrossableTerrain[8]; -extern u8 gWalkableTileToCrossableTerrain[8]; - u8 GetCrossableTerrain(s16 species); u8 sub_807034C(s16 id, struct Tile *tile); u8 sub_80703A0(Entity *pokemon, Position *pos); diff --git a/src/code_8097670.c b/src/code_8097670.c index 3c12ee8fa..cdecdbbd8 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -225,7 +225,7 @@ void sub_8097944(void) bVar2 = 1; bVar3 = 1; - if ((sub_8097710(0xd) == 0) && (HasAllFriendAreas())) { + if (!sub_8097710(0xd) && (HasAllFriendAreas())) { sub_80976F8(0xd); } @@ -243,113 +243,112 @@ void sub_8097944(void) if (((u8)(pokeStruct->unk0) & 1)) { - temp = pokeStruct->speciesNum; - gUnknown_203B494->unk1C[(temp / 32)] |= (1 << (temp + (temp / 32) * -32)); + temp = pokeStruct->speciesNum; + gUnknown_203B494->unk1C[temp / 32] |= 1 << temp % 32; for(index1 = 0; index1 < MAX_MON_MOVES; index1++) { move = &gRecruitedPokemonRef->pokemon[index].moves[index1]; - if ((move->moveFlags & 1) != 0) { - gUnknown_203B494->unk8C[move->id / 32] |= 1 << (move->id & 0x1f); + if ((move->moveFlags & MOVE_FLAG_EXISTS)) { + gUnknown_203B494->unk8C[move->id / 32] |= 1 << move->id % 32; } } } - } - - for(index = 0; index < MONSTER_MAX; index++) - { - if (index != MONSTER_NONE) - if(index != MONSTER_CASTFORM_SNOWY) - if(index != MONSTER_CASTFORM_SUNNY) - if(index != MONSTER_CASTFORM_RAINY) - if(index != MONSTER_DEOXYS_ATTACK) - if(index != MONSTER_DEOXYS_DEFENSE) - if(index != MONSTER_DEOXYS_SPEED) - if(index != MONSTER_MUNCHLAX) - if(index != MONSTER_DECOY) - if(index != MONSTER_STATUE) - if(index != MONSTER_RAYQUAZA_CUTSCENE) - { - if ((gUnknown_203B494->unk54[(index / 32)] & (1 << (index + (index / 32) * -32))) == 0) { - bVar3 = 0; - } - if ((gUnknown_203B494->unk1C[(index / 32 )] & (1 << (index + (index / 32) * -32))) != 0) - { - if (index == MONSTER_MOLTRES) { - sub_80976F8(0x10); - } - if (index == MONSTER_ZAPDOS) { - sub_80976F8(0x11); - } - if (index == MONSTER_ARTICUNO) { - sub_80976F8(0x12); - } - if (index == MONSTER_DEOXYS_NORMAL) { - sub_80976F8(0x13); - } - if (index == MONSTER_ENTEI) { - sub_80976F8(0x14); - } - if (index == MONSTER_RAIKOU) { - sub_80976F8(0x15); - } - if (index == MONSTER_SUICUNE) { - sub_80976F8(0x16); - } - if (index == MONSTER_HO_OH) { - sub_80976F8(0x17); - } - if (index == MONSTER_KYOGRE) { - sub_80976F8(0x18); - } - if (index == MONSTER_GROUDON) { - sub_80976F8(0x19); - } - if (index == MONSTER_RAYQUAZA) { - sub_80976F8(0x1a); - } - if (index == MONSTER_LUGIA) { - sub_80976F8(0x1b); - } - if (index == MONSTER_CELEBI) { - sub_80976F8(0x1c); - } - if (index == MONSTER_MEW) { - sub_80976F8(0x1d); - } - if (index == MONSTER_MEWTWO) { - sub_80976F8(0x1e); - } - if (index == MONSTER_JIRACHI) { - sub_80976F8(0x1f); - } - } - else - { - bVar2 = 0; - } - } - } - - if (bVar2) { - sub_80976F8(0xf); - } - if (bVar3) { - sub_80976F8(0xe); - } - counter = 0; - for(index = 0; index < NUM_MONSTERS; index++) - { - if ((((index != 0) && (index != 0x163)) && (index != 0x164)) && (index != 0x165)) { - if ((gUnknown_203B494->unk8C[(index / 32 )] & (1 << (index + (index / 32) * -32))) != 0) { - counter = counter + 1; - } } - } - if (counter != 0) { - gUnknown_203B494->unk18 = counter; - sub_80976F8(7); - } + + for(index = 0; index < MONSTER_MAX; index++) + { + if (index == MONSTER_NONE) continue; + if (index == MONSTER_CASTFORM_SNOWY) continue; + if (index == MONSTER_CASTFORM_SUNNY) continue; + if (index == MONSTER_CASTFORM_RAINY) continue; + if (index == MONSTER_DEOXYS_ATTACK) continue; + if (index == MONSTER_DEOXYS_DEFENSE) continue; + if (index == MONSTER_DEOXYS_SPEED) continue; + if (index == MONSTER_MUNCHLAX) continue; + if (index == MONSTER_DECOY) continue; + if (index == MONSTER_STATUE) continue; + if (index == MONSTER_RAYQUAZA_CUTSCENE) continue; + + if ((gUnknown_203B494->unk54[index / 32] & 1 << index % 32) == 0) + { + bVar3 = 0; + } + if ((gUnknown_203B494->unk1C[index / 32] & 1 << index % 32) != 0) + { + if (index == MONSTER_MOLTRES) { + sub_80976F8(0x10); + } + if (index == MONSTER_ZAPDOS) { + sub_80976F8(0x11); + } + if (index == MONSTER_ARTICUNO) { + sub_80976F8(0x12); + } + if (index == MONSTER_DEOXYS_NORMAL) { + sub_80976F8(0x13); + } + if (index == MONSTER_ENTEI) { + sub_80976F8(0x14); + } + if (index == MONSTER_RAIKOU) { + sub_80976F8(0x15); + } + if (index == MONSTER_SUICUNE) { + sub_80976F8(0x16); + } + if (index == MONSTER_HO_OH) { + sub_80976F8(0x17); + } + if (index == MONSTER_KYOGRE) { + sub_80976F8(0x18); + } + if (index == MONSTER_GROUDON) { + sub_80976F8(0x19); + } + if (index == MONSTER_RAYQUAZA) { + sub_80976F8(0x1a); + } + if (index == MONSTER_LUGIA) { + sub_80976F8(0x1b); + } + if (index == MONSTER_CELEBI) { + sub_80976F8(0x1c); + } + if (index == MONSTER_MEW) { + sub_80976F8(0x1d); + } + if (index == MONSTER_MEWTWO) { + sub_80976F8(0x1e); + } + if (index == MONSTER_JIRACHI) { + sub_80976F8(0x1f); + } + } + else + { + bVar2 = 0; + } + } + + if (bVar2) { + sub_80976F8(0xf); + } + if (bVar3) { + sub_80976F8(0xe); + } + counter = 0; + for(index = 0; index < NUM_MONSTERS; index++) + { + if (index == MONSTER_NONE || index == MONSTER_FLYGON || index == MONSTER_CACNEA || index == MONSTER_CACTURNE) continue; + if (gUnknown_203B494->unk8C[index / 32] & 1 << index % 32) { + counter++; + } + } + if (counter != 0) { + gUnknown_203B494->unk18 = counter; + sub_80976F8(7); + } } void sub_8097C18(struct unkStruct_8094924 *r0) diff --git a/src/math.c b/src/math.c index 7efcb42ab..4bec769f8 100644 --- a/src/math.c +++ b/src/math.c @@ -288,7 +288,11 @@ s32 sub_8009FB8(s32 x, s32 y) void sub_800A020(s32 *param_1, u32 param_2) { +#ifndef NONMATCHING register u32 temp asm("r4"); +#else + u32 temp; +#endif temp = 0xffff0000; param_1[0] = param_2 >> 0x10;