From e9f8c788da576c8034313a36aecdac473e225484 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 2 Nov 2022 22:05:20 -0700 Subject: [PATCH] more decomp --- asm/code_801EE10.s | 316 ------------------ asm/code_803D110.s | 4 +- asm/code_80521D0.s | 8 +- asm/code_807049C.s | 408 ------------------------ asm/code_8077274.s | 585 ---------------------------------- asm/code_808333C.s | 218 +------------ asm/code_808417C.s | 76 ----- asm/code_8097318.s | 61 ---- asm/dungeon_2.s | 109 ------- asm/ground_map_1.s | 199 ------------ asm/ground_script.s | 238 -------------- asm/wonder_mail_3.s | 439 ------------------------- asm/wonder_mail_802C860.s | 95 ------ include/code_80958E8.h | 24 ++ include/dungeon.h | 3 + include/dungeon_entity.h | 6 +- include/dungeon_global_data.h | 4 +- include/ground_script.h | 46 +++ include/status.h | 5 + include/status_checker.h | 6 +- include/wonder_mail.h | 4 +- include/wonder_mail_3.h | 79 +++++ ld_script.txt | 2 + src/code_801EE10.c | 157 +++++++++ src/code_803C1B4.c | 7 +- src/code_8041AD0.c | 364 ++++++++++----------- src/code_8069E0C.c | 166 +++++----- src/code_80848F0.c | 32 ++ src/code_80958E8.c | 43 +-- src/code_80972F4.c | 139 ++++---- src/code_8098BDC.c | 6 +- src/code_80A26CC.c | 17 + src/code_80A7714.c | 2 +- src/dungeon_2_1.c | 58 ++++ src/dungeon_engine.c | 4 +- src/dungeon_movement_1.c | 46 +++ src/dungeon_range.c | 109 +++++++ src/ground_map.c | 11 +- src/ground_map_1.c | 107 ++++++- src/ground_script.c | 157 ++++++--- src/post_office_guide.c | 4 +- src/status.c | 271 +++++++++++++++- src/status_checker.c | 43 ++- src/status_checks_1.c | 128 ++++++++ src/wonder_mail_3.c | 100 +++--- src/wonder_mail_802DF88.c | 211 ++++++++++++ 46 files changed, 1854 insertions(+), 3263 deletions(-) create mode 100644 include/code_80958E8.h create mode 100644 include/ground_script.h create mode 100644 include/wonder_mail_3.h create mode 100644 src/code_801EE10.c create mode 100644 src/dungeon_2_1.c diff --git a/asm/code_801EE10.s b/asm/code_801EE10.s index d7ce879f3..92a682c62 100644 --- a/asm/code_801EE10.s +++ b/asm/code_801EE10.s @@ -10833,320 +10833,4 @@ _080243D6: _080243E4: .4byte gUnknown_3001B60 thumb_func_end sub_802437C - thumb_func_start sub_80243E8 -sub_80243E8: - push {r4,r5,lr} - sub sp, 0x3C - ldr r3, _08024448 - ldr r0, _0802444C - ldr r0, [r0] - ldr r2, _08024450 - adds r1, r0, r2 - movs r4, 0 - ldrsh r2, [r1, r4] - movs r4, 0xDD - lsls r4, 2 - adds r1, r0, r4 - movs r4, 0 - ldrsh r1, [r1, r4] - muls r1, r2 - movs r4, 0xDC - lsls r4, 2 - adds r2, r0, r4 - movs r4, 0 - ldrsh r2, [r2, r4] - adds r1, r2 - lsls r1, 1 - adds r0, 0x1A - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0x58 - muls r0, r1 - ldr r4, [r3] - adds r4, r0 - add r5, sp, 0x28 - adds r1, r4, 0 - adds r1, 0x4C - adds r0, r5, 0 - movs r2, 0xA - bl sub_80922B4 - ldr r1, _08024454 - mov r0, sp - adds r2, r5, 0 - bl sprintf_2 - adds r0, r4, 0 - add sp, 0x3C - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08024448: .4byte gRecruitedPokemonRef -_0802444C: .4byte gUnknown_3001B60 -_08024450: .4byte 0x00000376 -_08024454: .4byte gUnknown_80DC9A4 - thumb_func_end sub_80243E8 - - thumb_func_start sub_8024458 -sub_8024458: - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - asrs r4, 16 - ldr r6, _080244DC - movs r0, 0xA6 - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r6] - adds r1, r0, 0 - adds r1, 0x48 - strh r4, [r1] - adds r1, 0x98 - str r5, [r1] - adds r2, r0, 0 - adds r2, 0xE4 - lsls r1, r5, 1 - adds r1, r5 - lsls r1, 3 - adds r1, 0xE8 - adds r1, r0, r1 - str r1, [r2] - adds r0, 0xE8 - bl sub_8006518 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0xE0 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0xE8 - ldr r0, _080244E0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r2, [r6] - adds r0, r2, 0 - adds r0, 0xE4 - ldr r1, [r0] - movs r3, 0xA4 - lsls r3, 1 - adds r0, r2, r3 - str r0, [r1, 0x14] - movs r4, 0xA5 - lsls r4, 1 - adds r1, r2, r4 - movs r0, 0xA - strb r0, [r1] - bl sub_8024604 - bl sub_802452C - ldr r0, [r6] - bl sub_8013984 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080244DC: .4byte gUnknown_203B2AC -_080244E0: .4byte gUnknown_80DC9C8 - thumb_func_end sub_8024458 - - thumb_func_start sub_80244E4 -sub_80244E4: - push {r4,lr} - ldr r4, _08024500 - ldr r0, [r4] - bl GetKeyPress - cmp r0, 0x1 - beq _08024504 - cmp r0, 0x2 - bne _0802450E - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _08024524 - .align 2, 0 -_08024500: .4byte gUnknown_203B2AC -_08024504: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _08024524 -_0802450E: - ldr r0, [r4] - bl sub_8013938 - lsls r0, 24 - cmp r0, 0 - bne _0802451E - movs r0, 0 - b _08024524 -_0802451E: - bl sub_802452C - movs r0, 0x1 -_08024524: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80244E4 - - thumb_func_start sub_802452C -sub_802452C: - push {lr} - bl sub_8024588 - bl sub_80245D0 - pop {r0} - bx r0 - thumb_func_end sub_802452C - - thumb_func_start sub_802453C -sub_802453C: - push {r4,r5,lr} - ldr r4, _08024580 - ldr r2, [r4] - cmp r2, 0 - beq _0802457A - adds r0, r2, 0 - adds r0, 0xE0 - ldr r0, [r0] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0xE8 - ldr r0, _08024584 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0xE8 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0802457A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08024580: .4byte gUnknown_203B2AC -_08024584: .4byte gUnknown_80DC9B0 - thumb_func_end sub_802453C - - thumb_func_start sub_8024588 -sub_8024588: - push {r4,lr} - ldr r4, _080245C4 - ldr r0, [r4] - ldrh r1, [r0, 0x20] - movs r2, 0xA4 - lsls r2, 1 - adds r0, r2 - movs r2, 0 - strb r1, [r0] - ldr r0, [r4] - ldrh r1, [r0, 0x1E] - ldr r3, _080245C8 - adds r0, r3 - strb r1, [r0] - ldr r0, [r4] - ldr r1, _080245CC - adds r0, r1 - strb r2, [r0] - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0xE8 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080245C4: .4byte gUnknown_203B2AC -_080245C8: .4byte 0x00000149 -_080245CC: .4byte 0x0000014b - thumb_func_end sub_8024588 - - thumb_func_start sub_80245D0 -sub_80245D0: - push {r4,lr} - sub sp, 0x4 - ldr r0, _08024600 - ldr r4, [r0] - movs r0, 0x1E - ldrsh r1, [r4, r0] - lsls r2, r1, 2 - adds r0, r4, 0 - adds r0, 0x34 - adds r0, r2 - ldr r0, [r0] - adds r2, r4, 0 - adds r2, 0x4C - adds r3, r4, 0 - adds r3, 0xB0 - adds r4, 0xE0 - ldr r4, [r4] - str r4, [sp] - bl CreatePokemonInfoTabScreen - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08024600: .4byte gUnknown_203B2AC - thumb_func_end sub_80245D0 - - thumb_func_start sub_8024604 -sub_8024604: - push {r4,r5,lr} - ldr r4, _08024654 - ldr r0, [r4] - movs r1, 0x2 - str r1, [r0, 0x34] - movs r1, 0x3 - str r1, [r0, 0x38] - movs r1, 0x5 - str r1, [r0, 0x3C] - adds r1, r0, 0 - adds r1, 0xE0 - ldr r3, [r1] - movs r1, 0x3 - movs r2, 0x1 - bl sub_8013818 - ldr r0, [r4] - adds r5, r0, 0 - adds r5, 0x4C - ldr r2, _08024658 - adds r0, 0x48 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r0, 0x58 - muls r0, r1 - ldr r4, [r2] - adds r4, r0 - movs r0, 0x7 - bl sub_80023E4 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_808FF20 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08024654: .4byte gUnknown_203B2AC -_08024658: .4byte gRecruitedPokemonRef - thumb_func_end sub_8024604 - .align 2,0 diff --git a/asm/code_803D110.s b/asm/code_803D110.s index d0d51f2d4..313939df8 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -391,7 +391,7 @@ _0803D3C0: bl xxx_init_struct_8094924_restore_809485C adds r0, r4, 0 mov r1, r9 - bl sub_80971EC + bl RestoreWonderMail adds r0, r4, 0 bl nullsub_102 movs r0, 0x1 @@ -440,7 +440,7 @@ _0803D436: bl xxx_init_struct_8094924_save_809486C adds r0, r4, 0 adds r1, r6, 0 - bl sub_8097270 + bl SaveWonderMail adds r0, r4, 0 bl nullsub_102 movs r2, 0x1 diff --git a/asm/code_80521D0.s b/asm/code_80521D0.s index 15060f7ab..621130b37 100644 --- a/asm/code_80521D0.s +++ b/asm/code_80521D0.s @@ -4609,7 +4609,7 @@ _08054C88: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805BD70 + bl ScannerOrbAction bl _080554BA _08054C98: adds r0, r7, 0 @@ -4793,7 +4793,7 @@ _08054DFE: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805B5F4 + bl LeechSeedMoveAction b _080554BA _08054E0C: adds r0, r7, 0 @@ -4821,7 +4821,7 @@ _08054E36: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805BD7C + bl RadarOrbAction b _080554BA _08054E44: adds r0, r7, 0 @@ -4982,7 +4982,7 @@ _08054F78: adds r1, r5, 0 mov r2, r8 mov r3, r9 - bl sub_805C474 + bl StairsOrbAction b _080554BA _08054F86: adds r0, r7, 0 diff --git a/asm/code_807049C.s b/asm/code_807049C.s index a0d6d70a4..4c6a55892 100644 --- a/asm/code_807049C.s +++ b/asm/code_807049C.s @@ -4,113 +4,6 @@ .syntax unified .text - - thumb_func_start sub_807049C -sub_807049C: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807055A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807055A - cmp r0, 0x37 - bgt _0807055A - cmp r1, 0x1F - bgt _0807055A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807055A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080704E2 - bl GetEntityType - cmp r0, 0x1 - bne _0807055A -_080704E2: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070504 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070552 - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070552 -_08070504: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070526 - movs r4, 0x2 -_08070526: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070536 - movs r4, 0x3 -_08070536: - cmp r4, 0x1 - beq _0807054A - cmp r4, 0x1 - bgt _08070544 - cmp r4, 0 - beq _0807054E - b _08070552 -_08070544: - cmp r4, 0x2 - beq _08070556 - b _08070552 -_0807054A: - cmp r5, 0x2 - beq _08070552 -_0807054E: - cmp r5, 0x1 - bne _0807055A -_08070552: - movs r0, 0 - b _0807055C -_08070556: - cmp r5, 0 - bne _08070552 -_0807055A: - movs r0, 0x1 -_0807055C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807049C thumb_func_start sub_8070564 sub_8070564: @@ -189,305 +82,4 @@ _080705E8: bx r1 thumb_func_end sub_8070564 - thumb_func_start sub_80705F0 -sub_80705F0: - push {r4-r7,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r7, [r6, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807069A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807069A - cmp r0, 0x37 - bgt _0807069A - cmp r1, 0x1F - bgt _0807069A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807069A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _08070636 - bl GetEntityType - cmp r0, 0x1 - bne _0807069A -_08070636: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070658 - adds r0, r7, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070696 - adds r0, r6, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070696 -_08070658: - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r6, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _0807067A - movs r4, 0x2 -_0807067A: - adds r0, r6, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _0807068A - movs r4, 0x3 -_0807068A: - cmp r4, 0 - blt _08070696 - cmp r4, 0x2 - bgt _08070696 - cmp r5, 0 - beq _0807069A -_08070696: - movs r0, 0 - b _0807069C -_0807069A: - movs r0, 0x1 -_0807069C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80705F0 - - thumb_func_start sub_80706A4 -sub_80706A4: - push {r4-r7,lr} - adds r7, r0, 0 - adds r4, r1, 0 - ldr r6, [r7, 0x70] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetMapTile_1 - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0807076A - movs r2, 0x2 - ldrsh r1, [r4, r2] - cmp r1, 0 - blt _0807076A - cmp r0, 0x37 - bgt _0807076A - cmp r1, 0x1F - bgt _0807076A - ldrh r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _0807076A - ldr r0, [r5, 0x10] - cmp r0, 0 - beq _080706F2 - bl GetEntityType - cmp r0, 0x1 - bne _0807076A - ldr r0, [r5, 0x10] - ldr r0, [r0, 0x70] - cmp r0, r6 - bne _0807076A -_080706F2: - bl IsFixedDungeon - lsls r0, 24 - cmp r0, 0 - bne _08070714 - adds r0, r6, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x3 - beq _08070762 - adds r0, r7, 0 - movs r1, 0x9 - bl HasItem - lsls r0, 24 - cmp r0, 0 - bne _08070762 -_08070714: - movs r1, 0x2 - ldrsh r0, [r6, r1] - bl GetCrossableTerrain - lsls r0, 24 - lsrs r4, r0, 24 - ldrh r0, [r5] - movs r5, 0x3 - ands r5, r0 - adds r0, r7, 0 - movs r1, 0xC - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070736 - movs r4, 0x2 -_08070736: - adds r0, r7, 0 - movs r1, 0xD - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _08070746 - movs r4, 0x3 -_08070746: - cmp r4, 0x1 - beq _0807075A - cmp r4, 0x1 - bgt _08070754 - cmp r4, 0 - beq _0807075E - b _08070762 -_08070754: - cmp r4, 0x2 - beq _08070766 - b _08070762 -_0807075A: - cmp r5, 0x2 - beq _08070762 -_0807075E: - cmp r5, 0x1 - bne _0807076A -_08070762: - movs r0, 0 - b _0807076C -_08070766: - cmp r5, 0 - bne _08070762 -_0807076A: - movs r0, 0x1 -_0807076C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80706A4 - - thumb_func_start GetMovementSpeed -GetMovementSpeed: - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, [r6, 0x70] - movs r4, 0 - movs r0, 0x84 - lsls r0, 1 - adds r1, r5, r0 - movs r2, 0x4 -_08070784: - ldrb r0, [r1, 0x5] - cmp r0, 0 - beq _0807078C - subs r4, 0x1 -_0807078C: - ldrb r0, [r1] - cmp r0, 0 - beq _08070794 - adds r4, 0x1 -_08070794: - adds r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bge _08070784 - adds r0, r5, 0 - adds r0, 0xAC - ldrb r0, [r0] - cmp r0, 0x4 - bne _080707A8 - subs r4, 0x1 -_080707A8: - movs r1, 0x2 - ldrsh r0, [r5, r1] - bl GetMoveSpeed - adds r4, r0 - adds r0, r6, 0 - movs r1, 0x6 - bl HasType - lsls r0, 24 - cmp r0, 0 - beq _080707D0 - adds r0, r6, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x7 - bne _080707D0 - adds r4, 0x1 -_080707D0: - movs r0, 0x4 - ldrsh r1, [r5, r0] - ldr r0, _0807081C - cmp r1, r0 - bne _080707DC - adds r4, 0x1 -_080707DC: - movs r0, 0x2 - ldrsh r1, [r5, r0] - movs r0, 0xBE - lsls r0, 1 - cmp r1, r0 - bne _080707FE - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _080707FE - ldr r0, _08070820 - ldr r0, [r0] - ldr r1, _08070824 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080707FE - adds r4, 0x1 -_080707FE: - cmp r4, 0 - bge _08070804 - movs r4, 0 -_08070804: - cmp r4, 0x4 - ble _0807080A - movs r4, 0x4 -_0807080A: - movs r1, 0x82 - lsls r1, 1 - adds r0, r5, r1 - str r4, [r0] - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0807081C: .4byte 0x000001a3 -_08070820: .4byte gDungeonGlobalData -_08070824: .4byte 0x0000066e - thumb_func_end GetMovementSpeed - .align 2, 0 diff --git a/asm/code_8077274.s b/asm/code_8077274.s index 25e795ec8..9f782c811 100644 --- a/asm/code_8077274.s +++ b/asm/code_8077274.s @@ -5,591 +5,6 @@ .text - thumb_func_start HealTargetHP -HealTargetHP: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r9, r0 - adds r5, r1, 0 - mov r10, r2 - mov r8, r3 - ldr r0, [sp, 0x24] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08077C6E - b _08077DC8 -_08077C6E: - ldr r4, [r5, 0x70] - movs r0, 0x10 - ldrsh r7, [r4, r0] - movs r1, 0xE - ldrsh r6, [r4, r1] - ldrh r2, [r4, 0xE] - adds r0, r6, 0 - ldrh r1, [r4, 0x10] - mov r12, r1 - adds r1, r7, 0 - cmp r0, r1 - bne _08077C8C - mov r0, r8 - cmp r0, 0 - bgt _08077C92 -_08077C8C: - mov r3, r10 - cmp r3, 0 - bne _08077CD0 -_08077C92: - ldrh r1, [r4, 0x10] - add r1, r8 - strh r1, [r4, 0x10] - ldrh r0, [r4, 0xE] - add r0, r8 - strh r0, [r4, 0xE] - lsls r1, 16 - asrs r1, 16 - ldr r0, _08077CCC - cmp r1, r0 - ble _08077CAA - strh r0, [r4, 0x10] -_08077CAA: - movs r1, 0xE - ldrsh r0, [r4, r1] - movs r3, 0x10 - ldrsh r2, [r4, r3] - ldrh r1, [r4, 0x10] - cmp r0, r2 - ble _08077CBA - strh r1, [r4, 0xE] -_08077CBA: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, r2 - bne _08077CC4 - adds r6, r0, 0 -_08077CC4: - adds r0, r5, 0 - bl sub_8041C94 - b _08077CE8 - .align 2, 0 -_08077CCC: .4byte 0x000003e7 -_08077CD0: - mov r3, r10 - adds r0, r2, r3 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, r1 - ble _08077CE2 - mov r0, r12 - strh r0, [r4, 0xE] -_08077CE2: - adds r0, r5, 0 - bl sub_8041CA8 -_08077CE8: - movs r1, 0x10 - ldrsh r0, [r4, r1] - subs r7, r0, r7 - movs r2, 0xE - ldrsh r0, [r4, r2] - subs r6, r0, r6 - adds r0, r5, 0 - bl DungeonEntityUpdateStatusSprites - ldr r0, _08077D1C - str r6, [r0] - str r7, [r0, 0x4] - ldr r0, _08077D20 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - cmp r6, 0 - bne _08077D28 - cmp r7, 0 - bne _08077D28 - ldr r3, [sp] - cmp r3, 0 - beq _08077DC8 - ldr r0, _08077D24 - b _08077D3A - .align 2, 0 -_08077D1C: .4byte gUnknown_202DE30 -_08077D20: .4byte gAvailablePokemonNames -_08077D24: .4byte gUnknown_80FB204 -_08077D28: - mov r0, r8 - cmp r0, 0 - bne _08077D4C - cmp r6, 0 - bne _08077D4C - ldr r1, [sp] - cmp r1, 0 - beq _08077DC8 - ldr r0, _08077D48 -_08077D3A: - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 - b _08077DC8 - .align 2, 0 -_08077D48: .4byte gUnknown_80FB21C -_08077D4C: - movs r2, 0 - mov r8, r2 - cmp r7, 0 - beq _08077D6E - adds r0, r5, 0 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - beq _08077D62 - mov r8, r7 -_08077D62: - ldr r0, _08077DA0 - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 -_08077D6E: - cmp r6, 0 - beq _08077DB4 - adds r0, r5, 0 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - beq _08077D80 - mov r8, r6 -_08077D80: - mov r3, r10 - cmp r3, 0 - beq _08077DB4 - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08077DA8 - ldr r0, _08077DA4 - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 - b _08077DB4 - .align 2, 0 -_08077DA0: .4byte gUnknown_80FB240 -_08077DA4: .4byte gUnknown_80FB1E0 -_08077DA8: - ldr r0, _08077DD8 - ldr r2, [r0] - mov r0, r9 - adds r1, r5, 0 - bl sub_80522F4 -_08077DB4: - mov r3, r8 - cmp r3, 0 - beq _08077DC8 - movs r3, 0x1 - negs r3, r3 - mov r0, r8 - adds r1, r5, 0 - movs r2, 0x1 - bl sub_803ED30 -_08077DC8: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08077DD8: .4byte gUnknown_80FB1C4 - thumb_func_end HealTargetHP - - thumb_func_start sub_8077DDC -sub_8077DDC: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077E3C - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xF1 - ldrb r0, [r1] - cmp r0, 0 - beq _08077E0C - ldr r0, _08077E08 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08077E3C - .align 2, 0 -_08077E08: .4byte gUnknown_80FAEF0 -_08077E0C: - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_75 - ldr r0, _08077E44 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08077E48 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0 - bl sub_803F580 - bl sub_8040A84 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077E3C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08077E44: .4byte gAvailablePokemonNames -_08077E48: .4byte gUnknown_80FAEA0 - thumb_func_end sub_8077DDC - - thumb_func_start sub_8077E4C -sub_8077E4C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077EC0 - bl sub_8043D10 - lsls r0, 24 - cmp r0, 0 - beq _08077E70 - ldr r0, _08077E6C - b _08077E7E - .align 2, 0 -_08077E6C: .4byte gUnknown_80FAF3C -_08077E70: - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xF2 - ldrb r0, [r1] - cmp r0, 0 - beq _08077E90 - ldr r0, _08077E8C -_08077E7E: - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08077EC0 - .align 2, 0 -_08077E8C: .4byte gUnknown_80FAF1C -_08077E90: - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_76 - ldr r0, _08077EC8 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08077ECC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0 - bl sub_803F580 - bl sub_8040A84 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077EC0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08077EC8: .4byte gAvailablePokemonNames -_08077ECC: .4byte gUnknown_80FAEC8 - thumb_func_end sub_8077E4C - - thumb_func_start sub_8077ED0 -sub_8077ED0: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08077F30 - ldr r0, [r4, 0x70] - adds r1, r0, 0 - adds r1, 0xF0 - ldrb r0, [r1] - cmp r0, 0 - beq _08077F00 - ldr r0, _08077EFC - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - b _08077F30 - .align 2, 0 -_08077EFC: .4byte gUnknown_80FAFD0 -_08077F00: - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - bl nullsub_77 - ldr r0, _08077F38 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - ldr r0, _08077F3C - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - movs r0, 0 - bl sub_803F580 - bl sub_8040A84 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08077F30: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08077F38: .4byte gAvailablePokemonNames -_08077F3C: .4byte gUnknown_80FAFAC - thumb_func_end sub_8077ED0 - - thumb_func_start sub_8077F40 -sub_8077F40: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - adds r4, r1, 0 - lsls r2, 24 - lsrs r6, r2, 24 - mov r9, r6 - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08077F62 - b _08078068 -_08077F62: - adds r0, r5, 0 - bl GetEntityType - mov r10, r0 - cmp r0, 0x1 - beq _08077F70 - b _08078068 -_08077F70: - ldr r7, [r4, 0x70] - cmp r5, r4 - bne _08077F88 - cmp r6, 0 - beq _08078068 - ldr r0, _08077F84 - ldr r2, [r0] - adds r0, r4, 0 - b _08078022 - .align 2, 0 -_08077F84: .4byte gPtrCantLeechSeedSelfMessage -_08077F88: - adds r0, r5, 0 - adds r1, r4, 0 - mov r2, r9 - bl HasSafeguardStatus - lsls r0, 24 - cmp r0, 0 - bne _08078068 - ldr r0, _08077FC0 - adds r1, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r4, 0 - movs r1, 0x4 - bl HasType - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0 - beq _08077FC8 - mov r0, r9 - cmp r0, 0 - beq _08078068 - ldr r0, _08077FC4 - b _0807801E - .align 2, 0 -_08077FC0: .4byte gAvailablePokemonNames -_08077FC4: .4byte gPtrCantLeechSeedMonMessage -_08077FC8: - adds r6, r7, 0 - adds r6, 0xD0 - ldrb r0, [r6] - cmp r0, 0x1 - beq _0807801C - cmp r0, 0x2 - bne _08077FE2 - ldr r0, _08078014 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 -_08077FE2: - mov r1, r10 - strb r1, [r6] - ldr r1, _08078018 - adds r0, r4, 0 - movs r2, 0x1 - bl CalculateStatusTurns - adds r0, 0x1 - adds r1, r7, 0 - adds r1, 0xD9 - strb r0, [r1] - adds r0, r7, 0 - adds r0, 0xDA - mov r6, r8 - strb r6, [r0] - adds r0, r4, 0 - bl nullsub_78 - adds r1, r7, 0 - adds r1, 0xD8 - movs r0, 0xFF - strb r0, [r1] - movs r2, 0 - adds r3, r1, 0 - b _08078030 - .align 2, 0 -_08078014: .4byte gUnknown_80FAA8C -_08078018: .4byte gUnknown_80F4EB0 -_0807801C: - ldr r0, _0807802C -_0807801E: - ldr r2, [r0] - adds r0, r5, 0 -_08078022: - adds r1, r4, 0 - bl sub_80522F4 - b _08078068 - .align 2, 0 -_0807802C: .4byte gUnknown_80FAE7C -_08078030: - ldr r0, _08078078 - ldr r0, [r0] - lsls r1, r2, 2 - ldr r6, _0807807C - adds r0, r6 - adds r0, r1 - ldr r0, [r0] - cmp r5, r0 - bne _08078050 - strb r2, [r3] - ldr r0, [r5, 0x70] - adds r1, r7, 0 - adds r1, 0xD4 - adds r0, 0x98 - ldr r0, [r0] - str r0, [r1] -_08078050: - adds r2, 0x1 - cmp r2, 0x13 - ble _08078030 - ldr r0, _08078080 - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80522F4 - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_08078068: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078078: .4byte gDungeonGlobalData -_0807807C: .4byte 0x000135cc -_08078080: .4byte gUnknown_80FAE58 - thumb_func_end sub_8077F40 - - thumb_func_start sub_8078084 -sub_8078084: - push {r4-r6,lr} - ldr r6, [r0, 0x70] - movs r5, 0 -_0807808A: - ldr r0, _080780DC - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _080780E0 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080780D0 - ldr r1, [r4, 0x70] - adds r3, r1, 0 - adds r3, 0xD0 - ldrb r0, [r3] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080780D0 - adds r0, r1, 0 - adds r0, 0xD4 - adds r1, r6, 0 - adds r1, 0x98 - ldr r2, [r0] - ldr r0, [r1] - cmp r2, r0 - bne _080780D0 - movs r0, 0 - strb r0, [r3] - adds r0, r4, 0 - bl DungeonEntityUpdateStatusSprites -_080780D0: - adds r5, 0x1 - cmp r5, 0x13 - ble _0807808A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080780DC: .4byte gDungeonGlobalData -_080780E0: .4byte 0x000135cc - thumb_func_end sub_8078084 - thumb_func_start DestinyBondStatusTarget DestinyBondStatusTarget: push {r4-r7,lr} diff --git a/asm/code_808333C.s b/asm/code_808333C.s index 809043ef0..1be445a95 100644 --- a/asm/code_808333C.s +++ b/asm/code_808333C.s @@ -5,222 +5,6 @@ .text - thumb_func_start sub_80833E8 -sub_80833E8: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r1, 0 - ldrsh r0, [r5, r1] - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl GetMapTile_1 - adds r1, r0, 0 - ldr r0, _08083438 - ldr r3, [r0] - ldr r2, _0808343C - adds r0, r3, r2 - ldrb r2, [r0] - cmp r2, 0 - bne _0808340C - movs r2, 0x2 -_0808340C: - ldrb r0, [r1, 0x9] - cmp r0, 0xFF - bne _08083440 - movs r1, 0 - ldrsh r0, [r5, r1] - subs r0, r2 - str r0, [r4] - movs r1, 0 - ldrsh r0, [r5, r1] - adds r0, r2 - adds r0, 0x1 - str r0, [r4, 0x8] - movs r1, 0x2 - ldrsh r0, [r5, r1] - subs r0, r2 - str r0, [r4, 0x4] - movs r1, 0x2 - ldrsh r0, [r5, r1] - adds r0, r2 - adds r0, 0x1 - b _0808346A - .align 2, 0 -_08083438: .4byte gDungeonGlobalData -_0808343C: .4byte 0x00018209 -_08083440: - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r2, _08083474 - adds r1, r2 - adds r1, r3, r1 - movs r2, 0x2 - ldrsh r0, [r1, r2] - subs r0, 0x1 - str r0, [r4] - movs r2, 0x6 - ldrsh r0, [r1, r2] - adds r0, 0x2 - str r0, [r4, 0x8] - movs r2, 0x4 - ldrsh r0, [r1, r2] - subs r0, 0x1 - str r0, [r4, 0x4] - movs r2, 0x8 - ldrsh r0, [r1, r2] - adds r0, 0x2 -_0808346A: - str r0, [r4, 0xC] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083474: .4byte 0x000104c4 - thumb_func_end sub_80833E8 - - thumb_func_start IsTargetTwoTilesAway -IsTargetTwoTilesAway: - push {r4-r7,lr} - sub sp, 0x4 - adds r3, r0, 0 - adds r6, r1, 0 - movs r0, 0 - ldrsh r1, [r3, r0] - movs r2, 0 - ldrsh r0, [r6, r2] - subs r1, r0 - cmp r1, 0 - bge _08083490 - negs r1, r1 -_08083490: - cmp r1, 0x1 - bgt _080834A8 - movs r5, 0x2 - ldrsh r1, [r3, r5] - movs r2, 0x2 - ldrsh r0, [r6, r2] - subs r1, r0 - cmp r1, 0 - bge _080834A4 - negs r1, r1 -_080834A4: - cmp r1, 0x1 - ble _0808355A -_080834A8: - movs r5, 0 - ldrsh r4, [r3, r5] - movs r1, 0 - ldrsh r0, [r6, r1] - subs r2, r4, r0 - cmp r2, 0 - bge _080834B8 - negs r2, r2 -_080834B8: - movs r5, 0x2 - ldrsh r1, [r3, r5] - movs r5, 0x2 - ldrsh r0, [r6, r5] - subs r0, r1, r0 - cmp r0, 0 - bge _080834C8 - negs r0, r0 -_080834C8: - cmp r0, r2 - bge _080834CE - adds r0, r2, 0 -_080834CE: - cmp r0, 0x2 - bne _0808355E - adds r5, r4, 0 - adds r4, r1, 0 - movs r7, 0 -_080834D8: - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r5, r0 - bge _080834E2 - adds r5, 0x1 -_080834E2: - cmp r5, r0 - ble _080834E8 - subs r5, 0x1 -_080834E8: - movs r2, 0x2 - ldrsh r0, [r6, r2] - cmp r4, r0 - bge _080834F2 - adds r4, 0x1 -_080834F2: - cmp r4, r0 - ble _080834F8 - subs r4, 0x1 -_080834F8: - adds r0, r5, 0 - adds r1, r4, 0 - str r3, [sp] - bl GetMapTile_1 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _0808355E - adds r7, 0x1 - cmp r7, 0x1 - ble _080834D8 - movs r0, 0 - ldrsh r5, [r6, r0] - movs r1, 0x2 - ldrsh r4, [r6, r1] - movs r7, 0 -_0808351E: - movs r2, 0 - ldrsh r0, [r3, r2] - cmp r5, r0 - bge _08083528 - adds r5, 0x1 -_08083528: - cmp r5, r0 - ble _0808352E - subs r5, 0x1 -_0808352E: - movs r1, 0x2 - ldrsh r0, [r3, r1] - cmp r4, r0 - bge _08083538 - adds r4, 0x1 -_08083538: - cmp r4, r0 - ble _0808353E - subs r4, 0x1 -_0808353E: - adds r0, r5, 0 - adds r1, r4, 0 - str r3, [sp] - bl GetMapTile_1 - ldrh r1, [r0] - movs r0, 0x3 - ands r0, r1 - ldr r3, [sp] - cmp r0, 0 - beq _0808355E - adds r7, 0x1 - cmp r7, 0x1 - ble _0808351E -_0808355A: - movs r0, 0x1 - b _08083560 -_0808355E: - movs r0, 0 -_08083560: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end IsTargetTwoTilesAway - thumb_func_start sub_8083568 sub_8083568: push {r4,r5,lr} @@ -296,4 +80,4 @@ _080835FA: bx r1 thumb_func_end sub_8083568 - .align 2, 0 \ No newline at end of file + .align 2, 0 diff --git a/asm/code_808417C.s b/asm/code_808417C.s index d6ef204cb..59f7acf09 100644 --- a/asm/code_808417C.s +++ b/asm/code_808417C.s @@ -804,80 +804,4 @@ _08084846: _08084850: .4byte 0x000003e6 thumb_func_end sub_80847D4 - thumb_func_start sub_8084854 -sub_8084854: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08084874 - ldr r2, [r5] - movs r1, 0xCF - lsls r1, 3 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0808487C - ldrb r1, [r4, 0x5] - ldr r3, _08084878 - adds r0, r2, r3 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_08084874: .4byte gDungeonGlobalData -_08084878: .4byte 0x00003a0d -_0808487C: - ldrb r0, [r4, 0x4] - bl sub_8098100 - lsls r0, 24 - cmp r0, 0 - beq _08084898 - ldr r0, [r5] - ldrb r1, [r4, 0x5] - ldr r2, _08084894 - adds r0, r2 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_08084894: .4byte 0x00003a0d -_08084898: - ldrb r0, [r4, 0x2] - bl sub_8098100 - lsls r0, 24 - cmp r0, 0 - beq _080848B4 - ldr r0, [r5] - ldrb r1, [r4, 0x3] - ldr r3, _080848B0 - adds r0, r3 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_080848B0: .4byte 0x00003a0d -_080848B4: - ldr r0, [r5] - ldrb r1, [r4, 0x1] - ldr r2, _080848E0 - adds r0, r2 - strb r1, [r0] - ldrb r0, [r4, 0x2] - cmp r0, 0x40 - beq _080848C8 - bl sub_8097FA8 -_080848C8: - ldr r0, _080848E4 - ldr r0, [r0] - ldr r3, _080848E8 - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - movs r0, 0 - bl sub_807E5E4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080848E0: .4byte 0x00003a0d -_080848E4: .4byte gDungeonGlobalData -_080848E8: .4byte 0x00000675 - thumb_func_end sub_8084854 - .align 2,0 diff --git a/asm/code_8097318.s b/asm/code_8097318.s index 865ccfd24..cd9e11dbc 100644 --- a/asm/code_8097318.s +++ b/asm/code_8097318.s @@ -5,67 +5,6 @@ .text - thumb_func_start sub_809733C -sub_809733C: - push {r4-r6,lr} - lsls r0, 16 - asrs r4, r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r4, 0xD - beq _0809737C - lsls r0, r4, 16 - lsrs r5, r0, 16 - movs r0, 0 - movs r1, 0x2C - adds r2, r5, 0 - bl sub_8001784 - cmp r0, 0 - bne _0809737C - movs r0, 0 - movs r1, 0x2B - adds r2, r5, 0 - adds r3, r6, 0 - bl sub_800199C - cmp r6, 0 - beq _0809737C - cmp r4, 0xE - blt _0809737C - cmp r4, 0xF - ble _08097378 - cmp r4, 0x1C - bne _0809737C -_08097378: - bl sub_809674C -_0809737C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_809733C - - thumb_func_start sub_8097384 -sub_8097384: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097392 - movs r0, 0 - b _080973A4 -_08097392: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2C - bl sub_8001784 - cmp r0, 0 - beq _080973A4 - movs r0, 0x1 -_080973A4: - pop {r1} - bx r1 - thumb_func_end sub_8097384 - thumb_func_start sub_80973A8 sub_80973A8: push {r4-r6,lr} diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s index 2090f6d0c..83dbd901d 100644 --- a/asm/dungeon_2.s +++ b/asm/dungeon_2.s @@ -706,113 +706,4 @@ _080908CE: bx r0 thumb_func_end sub_8090888 - thumb_func_start sub_80908D8 -sub_80908D8: - push {lr} - adds r2, r0, 0 - ldrb r0, [r2] - cmp r0, 0x3E - bhi _08090908 - ldr r0, _08090900 - ldrb r3, [r2] - adds r0, r3, r0 - ldrb r1, [r2, 0x1] - ldrb r0, [r0] - cmp r1, r0 - bcs _08090908 - ldr r1, _08090904 - lsls r0, r3, 2 - adds r0, r1 - ldrb r1, [r2, 0x1] - ldr r0, [r0] - adds r0, r1 - ldrb r0, [r0] - b _0809090A - .align 2, 0 -_08090900: .4byte gDungeonFloorCount -_08090904: .4byte gUnknown_8108084 -_08090908: - movs r0, 0x1 -_0809090A: - pop {r1} - bx r1 - thumb_func_end sub_80908D8 - - thumb_func_start sub_8090910 -sub_8090910: - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - ldr r4, _0809094C - adds r0, r4, 0 - bl RandomCapped - adds r6, r0, 0 - adds r0, r4, 0 - bl RandomCapped - adds r2, r0, 0 - ldrb r0, [r5] - cmp r0, 0x3E - bhi _08090954 - ldr r0, _08090950 - ldrb r1, [r5] - adds r1, r0 - ldrb r0, [r5, 0x1] - ldrb r1, [r1] - cmp r0, r1 - bcs _08090954 - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8091E94 - lsls r0, 24 - lsrs r0, 24 - b _08090956 - .align 2, 0 -_0809094C: .4byte 0x0000270f -_08090950: .4byte gDungeonFloorCount -_08090954: - movs r0, 0x46 -_08090956: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8090910 - - thumb_func_start sub_809095C -sub_809095C: - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3E - bls _0809096A -_08090966: - movs r0, 0x1 - b _0809098C -_0809096A: - movs r2, 0 - ldr r0, _08090994 - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x3F - beq _0809098A - adds r1, r4, 0 -_08090978: - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, r3 - beq _08090966 - adds r2, 0x1 - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0x3F - bne _08090978 -_0809098A: - movs r0, 0 -_0809098C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08090994: .4byte gUnknown_810A350 - thumb_func_end sub_809095C - .align 2,0 diff --git a/asm/ground_map_1.s b/asm/ground_map_1.s index 70580dfb4..89de79db2 100644 --- a/asm/ground_map_1.s +++ b/asm/ground_map_1.s @@ -4,205 +4,6 @@ .syntax unified .text - - thumb_func_start GroundMap_ExecuteEvent -GroundMap_ExecuteEvent: - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - asrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _080A4C44 - movs r0, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl Log - movs r0, 0 - mov r1, sp - adds r2, r4, 0 - bl sub_809D710 - cmp r5, 0 - beq _080A4C2C - mov r1, sp - movs r0, 0x5 - strh r0, [r1, 0x4] -_080A4C2C: - ldr r0, _080A4C48 - ldr r0, [r0] - ldr r3, _080A4C4C - movs r1, 0 - mov r2, sp - bl GroundScript_ExecutePP - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080A4C44: .4byte gUnknown_8117594 -_080A4C48: .4byte gUnknown_3001B6C -_080A4C4C: .4byte gUnknown_81175E0 - thumb_func_end GroundMap_ExecuteEvent - - thumb_func_start GroundMap_ExecuteStation -GroundMap_ExecuteStation: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x14 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - mov r8, r3 - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - lsls r6, 24 - asrs r6, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _080A4CB8 - str r6, [sp] - str r0, [sp, 0x4] - movs r0, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl Log - add r0, sp, 0x8 - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl GroundMap_GetStationScript - mov r0, r8 - cmp r0, 0 - beq _080A4C9C - add r1, sp, 0x8 - movs r0, 0x5 - strh r0, [r1, 0x4] -_080A4C9C: - ldr r0, _080A4CBC - ldr r0, [r0] - ldr r3, _080A4CC0 - movs r1, 0 - add r2, sp, 0x8 - bl GroundScript_ExecutePP - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080A4CB8: .4byte gUnknown_81175EC -_080A4CBC: .4byte gUnknown_3001B6C -_080A4CC0: .4byte gUnknown_8117644 - thumb_func_end GroundMap_ExecuteStation - - thumb_func_start GroundMap_ExecuteEnter -GroundMap_ExecuteEnter: - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 16 - asrs r4, 16 - ldr r1, _080A4D08 - movs r0, 0 - adds r2, r4, 0 - bl Log - mov r0, sp - adds r1, r4, 0 - bl sub_80A4BE8 - mov r1, sp - movs r3, 0 - movs r2, 0 - movs r0, 0x2 - strh r0, [r1, 0x4] - mov r0, sp - strh r2, [r0, 0x6] - strb r3, [r0, 0x8] - ldr r0, _080A4D0C - ldr r0, [r0] - ldr r3, _080A4D10 - movs r1, 0 - mov r2, sp - bl GroundScript_ExecutePP - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A4D08: .4byte gUnknown_8117650 -_080A4D0C: .4byte gUnknown_3001B6C -_080A4D10: .4byte gUnknown_8117698 - thumb_func_end GroundMap_ExecuteEnter - - thumb_func_start sub_80A4D14 -sub_80A4D14: - push {lr} - ldr r0, _080A4D28 - ldr r0, [r0] - bl sub_809D678 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A4D28: .4byte gUnknown_3001B6C - thumb_func_end sub_80A4D14 - - thumb_func_start sub_80A4D2C -sub_80A4D2C: - push {lr} - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - ldr r0, _080A4D44 - ldr r0, [r0] - bl sub_809D968 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080A4D44: .4byte gUnknown_3001B6C - thumb_func_end sub_80A4D2C - - thumb_func_start sub_80A4D48 -sub_80A4D48: - push {lr} - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _080A4D74 - ldr r1, _080A4D70 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x5 - beq _080A4D6C - cmp r0, 0x8 - bne _080A4D74 -_080A4D6C: - movs r0, 0 - b _080A4D76 - .align 2, 0 -_080A4D70: .4byte gUnknown_811BAF4 -_080A4D74: - movs r0, 0x1 -_080A4D76: - pop {r1} - bx r1 - thumb_func_end sub_80A4D48 thumb_func_start sub_80A4D7C sub_80A4D7C: diff --git a/asm/ground_script.s b/asm/ground_script.s index 3f880be4c..4643f6c5b 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -5,220 +5,6 @@ .text - thumb_func_start sub_809D8EC -sub_809D8EC: - push {r4,r5,lr} - adds r4, r0, 0 - lsls r1, 16 - asrs r5, r1, 16 - cmp r5, 0 - bne _0809D910 - bl sub_809A750 - lsls r0, 24 - cmp r0, 0 - bne _0809D910 - adds r0, r4, 0 - movs r1, 0 - bl sub_80A2460 - str r0, [r4, 0x28] - movs r0, 0 - b _0809D922 -_0809D910: - adds r0, r4, 0 - adds r0, 0x46 - strh r5, [r0] - movs r0, 0x2 - strh r0, [r4, 0x26] - ldr r1, _0809D928 - movs r0, 0x1 - strb r0, [r1] - movs r0, 0x1 -_0809D922: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809D928: .4byte gUnknown_2039A36 - thumb_func_end sub_809D8EC - - thumb_func_start sub_809D92C -sub_809D92C: - push {lr} - ldr r1, _0809D93C - bl sub_809D770 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0809D93C: .4byte gUnknown_81165C8 - thumb_func_end sub_809D92C - - thumb_func_start sub_809D940 -sub_809D940: - push {r4,lr} - bl sub_80A8B74 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80AC378 - orrs r4, r0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80AD290 - orrs r4, r0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_809D940 - - thumb_func_start sub_809D968 -sub_809D968: - push {r4-r6,lr} - adds r5, r0, 0 - lsls r1, 16 - asrs r6, r1, 16 - movs r4, 0 - adds r2, r5, 0 - adds r2, 0x46 - ldrh r1, [r2] - movs r0, 0 - ldrsh r3, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r3, r0 - beq _0809D98E - cmp r3, r6 - bne _0809D98E - ldr r0, _0809D9B4 - strh r0, [r2] - movs r4, 0x1 -_0809D98E: - adds r2, r5, 0 - adds r2, 0xA6 - ldrh r1, [r2] - movs r0, 0 - ldrsh r3, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r3, r0 - beq _0809D9AA - cmp r3, r6 - bne _0809D9AA - ldr r0, _0809D9B4 - strh r0, [r2] - movs r4, 0x1 -_0809D9AA: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809D9B4: .4byte 0x0000ffff - thumb_func_end sub_809D968 - - thumb_func_start sub_809D9B8 -sub_809D9B8: - lsls r0, 16 - asrs r0, 16 - ldr r1, _0809D9D4 - adds r1, r0, r1 - movs r3, 0 - movs r2, 0x1 - strb r2, [r1] - ldr r1, _0809D9D8 - lsls r0, 2 - adds r0, r1 - str r3, [r0] - ldr r0, _0809D9DC - strb r2, [r0] - bx lr - .align 2, 0 -_0809D9D4: .4byte gUnknown_2039A38 -_0809D9D8: .4byte gUnknown_2039B48 -_0809D9DC: .4byte gUnknown_2039A36 - thumb_func_end sub_809D9B8 - - thumb_func_start sub_809D9E0 -sub_809D9E0: - lsls r0, 16 - asrs r0, 16 - ldr r2, _0809D9FC - adds r2, r0, r2 - movs r3, 0x1 - strb r3, [r2] - ldr r2, _0809DA00 - lsls r0, 2 - adds r0, r2 - str r1, [r0] - ldr r0, _0809DA04 - strb r3, [r0] - bx lr - .align 2, 0 -_0809D9FC: .4byte gUnknown_2039A38 -_0809DA00: .4byte gUnknown_2039B48 -_0809DA04: .4byte gUnknown_2039A36 - thumb_func_end sub_809D9E0 - - thumb_func_start sub_809DA08 -sub_809DA08: - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 16 - asrs r4, r1, 16 - ldr r1, _0809DA2C - lsls r0, r4, 2 - adds r0, r1 - str r2, [r0] - cmp r4, 0 - bne _0809DA38 - bl sub_809A750 - lsls r0, 24 - cmp r0, 0 - bne _0809DA30 - movs r0, 0 - b _0809DA5E - .align 2, 0 -_0809DA2C: .4byte gUnknown_2039B48 -_0809DA30: - adds r0, r5, 0 - adds r0, 0x46 - strh r4, [r0] - b _0809DA52 -_0809DA38: - movs r1, 0x80 - adds r2, r5, 0 - adds r2, 0x46 - adds r0, r4, 0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0809DA64 - adds r0, r4, r0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _0809DA68 - adds r0, r4, r0 - strb r1, [r0] -_0809DA52: - movs r0, 0x2 - strh r0, [r5, 0x26] - ldr r1, _0809DA6C - movs r0, 0x1 - strb r0, [r1] - movs r0, 0x1 -_0809DA5E: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809DA64: .4byte gUnknown_2039A38 -_0809DA68: .4byte gUnknown_2039AC0 -_0809DA6C: .4byte gUnknown_2039A36 - thumb_func_end sub_809DA08 - thumb_func_start HandleAction HandleAction: push {r4-r7,lr} @@ -8928,28 +8714,4 @@ _080A257C: bx r0 thumb_func_end sub_80A2558 - thumb_func_start sub_80A2584 -sub_80A2584: - push {lr} - lsls r1, 16 - asrs r1, 16 - lsls r0, 16 - asrs r0, 16 - bl sub_809ABB4 - pop {r0} - bx r0 - thumb_func_end sub_80A2584 - - thumb_func_start sub_80A2598 -sub_80A2598: - push {lr} - lsls r1, 16 - asrs r1, 16 - lsls r0, 16 - asrs r0, 16 - bl sub_809AC18 - pop {r0} - bx r0 - thumb_func_end sub_80A2598 - .align 2,0 diff --git a/asm/wonder_mail_3.s b/asm/wonder_mail_3.s index 0f14aa976..59c7c8fe9 100644 --- a/asm/wonder_mail_3.s +++ b/asm/wonder_mail_3.s @@ -294,443 +294,4 @@ _0802D7C8: .4byte gUnknown_80D4928 _0802D7CC: .4byte gUnknown_80E014C thumb_func_end sub_802D73C - thumb_func_start sub_802D7D0 -sub_802D7D0: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802D826 - ldr r1, [sp] - cmp r1, 0x1 - beq _0802D7EA - ldr r0, _0802D800 - ldr r0, [r0] - str r1, [r0, 0x70] -_0802D7EA: - ldr r0, [sp] - cmp r0, 0x3 - beq _0802D804 - cmp r0, 0x3 - ble _0802D820 - cmp r0, 0x4 - beq _0802D820 - cmp r0, 0x6 - beq _0802D80C - b _0802D820 - .align 2, 0 -_0802D800: .4byte gUnknown_203B2F8 -_0802D804: - movs r0, 0x2 - bl sub_802D1A0 - b _0802D826 -_0802D80C: - ldr r0, _0802D81C - ldr r1, [r0] - movs r0, 0x1 - str r0, [r1, 0x4] - movs r0, 0x10 - bl sub_802D1A0 - b _0802D826 - .align 2, 0 -_0802D81C: .4byte gUnknown_203B2F8 -_0802D820: - movs r0, 0 - bl sub_802D1A0 -_0802D826: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_802D7D0 - - thumb_func_start sub_802D82C -sub_802D82C: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802D8C6 - ldr r1, [sp] - cmp r1, 0x1 - beq _0802D846 - ldr r0, _0802D858 - ldr r0, [r0] - str r1, [r0, 0x74] -_0802D846: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x6 - bhi _0802D8C0 - lsls r0, 2 - ldr r1, _0802D85C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D858: .4byte gUnknown_203B2F8 -_0802D85C: .4byte _0802D860 - .align 2, 0 -_0802D860: - .4byte _0802D8C0 - .4byte _0802D8C0 - .4byte _0802D87C - .4byte _0802D8C0 - .4byte _0802D8C0 - .4byte _0802D898 - .4byte _0802D8AC -_0802D87C: - ldr r0, _0802D894 - ldr r0, [r0] - ldrb r0, [r0, 0x10] - bl sub_8096C3C - bl sub_8096C80 - movs r0, 0x8 - bl sub_802D1A0 - b _0802D8C6 - .align 2, 0 -_0802D894: .4byte gUnknown_203B2F8 -_0802D898: - ldr r0, _0802D8A8 - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0x10 - bl sub_802D1A0 - b _0802D8C6 - .align 2, 0 -_0802D8A8: .4byte gUnknown_203B2F8 -_0802D8AC: - ldr r0, _0802D8BC - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0xF - bl sub_802D1A0 - b _0802D8C6 - .align 2, 0 -_0802D8BC: .4byte gUnknown_203B2F8 -_0802D8C0: - movs r0, 0x1 - bl sub_802D1A0 -_0802D8C6: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_802D82C - - thumb_func_start sub_802D8CC -sub_802D8CC: - push {lr} - movs r0, 0x1 - bl sub_802C598 - cmp r0, 0x4 - bhi _0802D93A - lsls r0, 2 - ldr r1, _0802D8E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D8E4: .4byte _0802D8E8 - .align 2, 0 -_0802D8E8: - .4byte _0802D93A - .4byte _0802D93A - .4byte _0802D930 - .4byte _0802D8FC - .4byte _0802D914 -_0802D8FC: - bl sub_802C620 - ldr r1, _0802D910 - ldr r1, [r1] - strb r0, [r1, 0x10] - movs r0, 0xD - bl sub_802D1A0 - b _0802D93A - .align 2, 0 -_0802D910: .4byte gUnknown_203B2F8 -_0802D914: - bl sub_802C620 - ldr r2, _0802D92C - ldr r1, [r2] - strb r0, [r1, 0x10] - ldr r1, [r2] - movs r0, 0xC - str r0, [r1, 0x4] - movs r0, 0xF - bl sub_802D1A0 - b _0802D93A - .align 2, 0 -_0802D92C: .4byte gUnknown_203B2F8 -_0802D930: - bl sub_802C688 - movs r0, 0x1 - bl sub_802D1A0 -_0802D93A: - pop {r0} - bx r0 - thumb_func_end sub_802D8CC - - thumb_func_start sub_802D940 -sub_802D940: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_802C598 - ldr r4, _0802D980 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0802D970 - ldr r0, [r4] - adds r0, 0x78 - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _0802D970 - ldr r0, [r4] - str r1, [r0, 0x6C] -_0802D970: - ldr r0, [sp] - cmp r0, 0x2 - beq _0802D98A - cmp r0, 0x2 - bgt _0802D984 - cmp r0, 0x1 - beq _0802D9E0 - b _0802D9E6 - .align 2, 0 -_0802D980: .4byte gUnknown_203B2F8 -_0802D984: - cmp r0, 0x5 - beq _0802D9CC - b _0802D9E6 -_0802D98A: - ldr r0, _0802D9BC - ldr r3, [r0] - ldrb r0, [r3, 0x9] - cmp r0, 0 - beq _0802D9C4 - ldr r2, _0802D9C0 - ldrb r1, [r3, 0x10] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, 0xF0 - ldr r1, [r2] - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x5 - bls _0802D9C4 - ldrb r0, [r3, 0xA] - ldrb r1, [r1, 0x4] - cmp r0, r1 - bne _0802D9C4 - movs r0, 0x7 - bl sub_802D1A0 - b _0802D9E6 - .align 2, 0 -_0802D9BC: .4byte gUnknown_203B2F8 -_0802D9C0: .4byte gUnknown_203B490 -_0802D9C4: - movs r0, 0xE - bl sub_802D1A0 - b _0802D9E6 -_0802D9CC: - ldr r0, _0802D9DC - ldr r1, [r0] - movs r0, 0xC - str r0, [r1, 0x4] - movs r0, 0xF - bl sub_802D1A0 - b _0802D9E6 - .align 2, 0 -_0802D9DC: .4byte gUnknown_203B2F8 -_0802D9E0: - movs r0, 0xC - bl sub_802D1A0 -_0802D9E6: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D940 - - thumb_func_start sub_802D9F0 -sub_802D9F0: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_802C598 - ldr r4, _0802DA30 - ldr r0, [r4] - adds r0, 0x78 - bl sub_8012FD8 - ldr r0, [r4] - adds r0, 0xC8 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _0802DA1E - ldr r0, [r4] - adds r0, 0xC8 - mov r1, sp - bl sub_8013114 -_0802DA1E: - ldr r0, [sp] - cmp r0, 0x3 - beq _0802DA40 - cmp r0, 0x3 - bgt _0802DA34 - cmp r0, 0x1 - beq _0802DA38 - b _0802DA56 - .align 2, 0 -_0802DA30: .4byte gUnknown_203B2F8 -_0802DA34: - cmp r0, 0x4 - bne _0802DA56 -_0802DA38: - movs r0, 0xC - bl sub_802D1A0 - b _0802DA56 -_0802DA40: - bl sub_802C688 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl sub_8096C3C - bl sub_8096C80 - movs r0, 0x8 - bl sub_802D1A0 -_0802DA56: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_802D9F0 - - thumb_func_start sub_802DA60 -sub_802DA60: - push {lr} - bl sub_802DEE0 - cmp r0, 0x1 - bls _0802DA7C - cmp r0, 0x3 - bhi _0802DA7C - bl sub_802DF24 - ldr r0, _0802DA80 - ldr r0, [r0] - ldr r0, [r0, 0x4] - bl sub_802D1A0 -_0802DA7C: - pop {r0} - bx r0 - .align 2, 0 -_0802DA80: .4byte gUnknown_203B2F8 - thumb_func_end sub_802DA60 - - thumb_func_start sub_802DA84 -sub_802DA84: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0802DA9C - ldr r0, _0802DAA4 - ldr r0, [r0] - ldr r0, [r0, 0x4] - bl sub_802D1A0 -_0802DA9C: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0802DAA4: .4byte gUnknown_203B2F8 - thumb_func_end sub_802DA84 - - thumb_func_start sub_802DAA8 -sub_802DAA8: - push {r4,lr} - ldr r4, _0802DAD0 - ldr r0, [r4] - ldrb r0, [r0, 0x10] - bl GetJobSlotInfo - adds r1, r0, 0 - ldr r4, [r4] - ldrb r0, [r4, 0x9] - cmp r0, 0 - beq _0802DAD4 - ldrb r0, [r1] - cmp r0, 0x5 - beq _0802DAD4 - ldrb r0, [r4, 0xA] - ldrb r1, [r1, 0x4] - cmp r0, r1 - bne _0802DAD4 - movs r0, 0 - b _0802DAD6 - .align 2, 0 -_0802DAD0: .4byte gUnknown_203B2F8 -_0802DAD4: - movs r0, 0x1 -_0802DAD6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_802DAA8 - - thumb_func_start sub_802DADC -sub_802DADC: - push {r4,lr} - ldr r3, _0802DAEC - ldr r0, [r3] - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _0802DAF0 -_0802DAE8: - movs r0, 0x1 - b _0802DB1C - .align 2, 0 -_0802DAEC: .4byte gUnknown_203B2F8 -_0802DAF0: - ldr r0, _0802DB24 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0xF0 - movs r2, 0 -_0802DAFA: - ldrb r0, [r1] - cmp r0, 0 - beq _0802DAE8 - cmp r0, 0x5 - beq _0802DAE8 - cmp r0, 0x5 - bls _0802DB12 - ldr r0, [r3] - ldrb r0, [r0, 0xA] - ldrb r4, [r1, 0x4] - cmp r0, r4 - bne _0802DAE8 -_0802DB12: - adds r1, 0x14 - adds r2, 0x1 - cmp r2, 0x7 - ble _0802DAFA - movs r0, 0 -_0802DB1C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0802DB24: .4byte gUnknown_203B490 - thumb_func_end sub_802DADC - .align 2,0 diff --git a/asm/wonder_mail_802C860.s b/asm/wonder_mail_802C860.s index 036c51a78..f2988a283 100644 --- a/asm/wonder_mail_802C860.s +++ b/asm/wonder_mail_802C860.s @@ -661,99 +661,4 @@ sub_802CF5C: _0802CFCC: .4byte gUnknown_203B2F4 thumb_func_end sub_802CF5C - thumb_func_start sub_802CFD0 -sub_802CFD0: - push {r4-r6,lr} - sub sp, 0x60 - ldr r6, _0802D02C - ldr r0, [r6] - ldr r0, [r0, 0x34] - bl sub_8008C54 - ldr r0, [r6] - ldr r0, [r0, 0x34] - bl sub_80073B8 - ldr r0, [r6] - movs r1, 0x1E - ldrsh r4, [r0, r1] - lsls r4, 3 - adds r5, r4, 0 - adds r5, 0xA - ldr r2, _0802D030 - ldr r3, [r0, 0x34] - movs r0, 0 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl xxx_call_draw_string - adds r4, 0x4 - ldr r1, [r6] - adds r0, r1, 0 - adds r0, 0x9E - ldrb r0, [r0] - lsls r0, 3 - adds r5, r4, r0 - movs r0, 0x1E - ldrsh r2, [r1, r0] - adds r2, 0x1 - movs r0, 0x7 - str r0, [sp] - ldr r0, [r1, 0x34] - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r1, 0 - movs r3, 0x2 - bl sub_8012BC4 - movs r5, 0 - b _0802D076 - .align 2, 0 -_0802D02C: .4byte gUnknown_203B2F4 -_0802D030: .4byte gUnknown_80DFDBC -_0802D034: - ldr r0, [r6] - movs r2, 0x1E - ldrsh r1, [r0, r2] - movs r2, 0x1C - ldrsh r0, [r0, r2] - muls r0, r1 - adds r0, r5 - lsls r0, 24 - lsrs r0, 24 - bl sub_803B344 - adds r4, r0, 0 - ldr r0, [r6] - ldr r1, [r0, 0x34] - str r1, [sp, 0x8] - adds r1, r5, 0 - bl sub_8013800 - str r0, [sp, 0x50] - adds r0, r4, 0 - add r1, sp, 0x8 - bl sub_803B35C - mov r1, sp - adds r1, 0x4B - movs r0, 0x1 - strb r0, [r1] - ldr r0, [r4, 0x14] - str r0, [sp, 0x54] - add r0, sp, 0x8 - bl CreateRescueTitle - adds r5, 0x1 -_0802D076: - ldr r0, [r6] - movs r1, 0x1A - ldrsh r0, [r0, r1] - cmp r5, r0 - blt _0802D034 - ldr r0, _0802D094 - ldr r0, [r0] - ldr r0, [r0, 0x34] - bl sub_80073E0 - add sp, 0x60 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802D094: .4byte gUnknown_203B2F4 - thumb_func_end sub_802CFD0 - .align 2,0 diff --git a/include/code_80958E8.h b/include/code_80958E8.h new file mode 100644 index 000000000..d44d9bc7e --- /dev/null +++ b/include/code_80958E8.h @@ -0,0 +1,24 @@ +struct subStruct_203B490 +{ + // size: 0xC + u8 dungeon; + u8 unk1; + u32 unk4; + u32 unk8; +}; + + +struct unkStruct_203B490 +{ + // size: 0x330? + struct WonderMail unk0[4]; + struct WonderMail unk50[8]; + struct WonderMail unkF0[8]; + u8 unk190[0x28]; + u8 unk1B8[0x78]; + struct subStruct_203B490 unk230[16]; + u8 unk2F0[0x38]; + u8 unk328; +}; + +extern struct unkStruct_203B490 *gUnknown_203B490; diff --git a/include/dungeon.h b/include/dungeon.h index faf58e512..31c06af57 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -28,5 +28,8 @@ struct Dungeon extern struct Dungeon gDungeons[]; extern struct DungeonName gDungeonNames[]; const u8 *GetDungeonName1(u8 dungeon); +u32 sub_80908D8(struct DungeonLocation *dungeon); +u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2); +bool8 sub_809095C(u8 dungeon); #endif //GUARD_DUNGEON_H diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index a232a691a..03db139e5 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -99,7 +99,8 @@ struct DungeonEntityData /* 0x8C */ u8 IQSkillsSelected[4]; // IQ skills selected in the IQ skills menu. /* 0x90 */ u8 IQSkillsEnabled[4]; /* 0x94 */ u8 tactic; - u8 fill95[0x9C - 0x95]; + u8 fill95[0x98 - 0x95]; + /* 0x98 */ u32 unk98; /* 0x9C */ u32 unk9C; /* 0xA0 */ u32 unkA0; /* 0xA4 */ u8 clientType; @@ -135,7 +136,8 @@ struct DungeonEntityData /* 0xCC */ u8 cursedDamageTimer; u8 fillCD[0xD0 - 0xCD]; /* 0xD0 */ u8 linkedStatus; - u8 fillD1[0xD8 - 0xD1]; + u8 fillD1[0xD4 - 0xD1]; + /* 0xD4 */ u32 unkD4; /* 0xD8 */ u8 unkD8; /* 0xD9 */ u8 linkedStatusTurnsLeft; /* 0xDA */ u8 linkedStatusDamageTimer; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index c75fa3288..79c7b651a 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -66,7 +66,9 @@ struct DungeonGlobalData u8 unk674; u8 unk675; /* 0x676 */ bool8 itemHoldersIdentified; - u8 unk677[0x68A - 0x677]; + u8 unk677; + u8 unk678; + u8 unk679[0x68A - 0x679]; /* 0x68A */ u8 unk68A; u8 fill68B[0x363C - 0x68B]; /* 0x363C */ u8 expYieldRankings[NUM_SPECIES]; diff --git a/include/ground_script.h b/include/ground_script.h new file mode 100644 index 000000000..fa162b7aa --- /dev/null +++ b/include/ground_script.h @@ -0,0 +1,46 @@ +struct GroundScript_ExecutePP_3 +{ + // size: 0xC + u32 unk0; + s16 scriptType; + s16 unk6; + u8 unk8; +}; + +struct GroundScript_ExecutePP_1_sub +{ + // size: 0x60 + /* 0x0 */ s16 scriptType; + /* 0x2 */ s16 unk2; + /* 0x4 */ u32 unk4; + /* 0x8 */ u32 unk8; + /* 0xC */ u16 unkC; + /* 0xE */ u8 unkE; + /* 0xF */ u8 fillF; + /* 0x10 */ u32 unk10; + /* 0x14 */ u32 unk14; + /* 0x18 */ u8 fill18[0x22 - 0x18]; + /* 0x22 */ u16 unk22; + /* 0x24 */ u16 unk24; + /* 0x26 */ u32 unk26; + u8 fill50[0x60 - 0x2A]; +} __attribute__((packed)); + +typedef void (*Callback)(u32, void *); +struct GroundScript_ExecutePP_1_sub2 +{ + Callback callbacks[10]; // IDK the size.. +}; + +struct GroundScript_ExecutePP_1 +{ + struct GroundScript_ExecutePP_1_sub2 *unk0; + u32 unk4; + u32 fill8; + u32 unkC; + u32 fill10; + u8 fill18[0x24 - 0x14]; + struct GroundScript_ExecutePP_1_sub unk24; + struct GroundScript_ExecutePP_1_sub unk84; + u16 unkE4; +}; diff --git a/include/status.h b/include/status.h index e052ec4bc..8017623e6 100644 --- a/include/status.h +++ b/include/status.h @@ -19,5 +19,10 @@ void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, bool8 displayMessage); void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); +void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage); +void HandleScannerOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target); +void HandleStairsOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target); +void HandleRadarOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target); +void HandleLeechSeed(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage); #endif diff --git a/include/status_checker.h b/include/status_checker.h index 65c1e96f5..2bd1be767 100644 --- a/include/status_checker.h +++ b/include/status_checker.h @@ -23,8 +23,8 @@ bool8 CleanseOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *targe bool8 sub_805BC70(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805BC98(struct DungeonEntity *pokemon, struct DungeonEntity *target, struct PokemonMove *move, s32 param_4); bool8 SilenceOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target); -bool8 sub_805BD70(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805BD7C(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 ScannerOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 RadarOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 TransferOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target); bool8 sub_805BE90(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 LuminousOrbAction(struct DungeonEntity *pokemon,struct DungeonEntity *target); @@ -49,7 +49,7 @@ bool8 sub_805C3DC(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C3F8(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C45C(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target); -bool8 sub_805C474(struct DungeonEntity *pokemon, struct DungeonEntity *target); +bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C480(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 sub_805C48C(struct DungeonEntity *pokemon, struct DungeonEntity *target); bool8 CanUseOnSelfWithStatusChecker(struct DungeonEntity *pokemon, struct PokemonMove *move); diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 155c780e0..13980253d 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -2,6 +2,7 @@ #define GUARD_WONDER_MAIL_H #include "file_system.h" +#include "global.h" #include "text.h" #include "item.h" #include "pokemon.h" @@ -29,8 +30,7 @@ struct WonderMail /* 0x1 */ u8 missionType; // mission type /* 0x2 */ u8 unk2; /* 0x3 */ u8 unk3; - /* 0x4 */ u8 dungeon; // dungeon - /* 0x5 */ u8 floor; // floor + /* 0x4 */ struct DungeonLocation dungeon; /* 0x8 */ u32 unk8; /* 0xC */ s16 clientSpecies; // client pokemon /* 0xE */ s16 targetSpecies; // target diff --git a/include/wonder_mail_3.h b/include/wonder_mail_3.h new file mode 100644 index 000000000..7618bf84d --- /dev/null +++ b/include/wonder_mail_3.h @@ -0,0 +1,79 @@ +struct unkStruct_203B2F4 +{ + u8 fill0[0x1A]; + s16 unk1A; + s16 unk1C; + s16 unk1E; + u8 fill20[0x34 - 0x20]; + u32 unk34; + u32 unk38; + struct UnkTextStruct2 unk3C[4]; + u8 unk9C[4]; +}; +extern struct unkStruct_203B2F4 *gUnknown_203B2F4; + +struct unkStruct_802C39C +{ + /* 0x0 */ u32 unk0[2]; + /* 0x8 */ struct DungeonLocation *unk8; + /* 0xC */ u8 *unkC; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 fill15[0x1B]; + /* 0x34 */ u8 fill34[2]; + /* 0x36 */ u8 fill36[0x3C - 0x36]; + /* 0x3C */ u8 unk3C[0xC]; + /* 0x48 */ u8 fill48[4]; + /* 0x4C */ u32 unk4C; + /* 0x50 */ u8 *unk50[3]; +}; + +struct unkStruct_803B344 +{ + // size: 0xB4 + struct WonderMail unk0; + u8* unk14; + u8* unk18; + u8 fill1C[0x3C - 0x1C]; + u8 unk3C[0x78]; +}; + +struct unkSubStruct_203B2F8 +{ + struct WonderMail wonderMail; + u8 *unk14; + u8 *unk18; +}; + +struct unkStruct_203B2F8 +{ + // size: 0x208 + s32 state; // state + s32 fallbackState; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + struct unkSubStruct_203B2F8 *unkC; + u8 unk10; + u8 fill11[0x14 - 0x11]; + u32 unk14; + u8 fill18[0x58 - 0x18]; + u8 unk58; + u8 fill59[0x64 - 0x59]; + u8 *unk64; + u32 unk68; + u32 unk6C; + u32 unk70; + u32 unk74; + u8 unk78[0xC8 - 0x78]; + u8 unkC8[4]; + u8 fillCC[0x118 - 0xCC]; + struct MenuItem unk118[8]; + struct MenuItem unk158[8]; + u16 unk198[8]; + struct UnkTextStruct2 unk1A8[4]; + u32 unk1E4; +}; +extern struct unkStruct_203B2F8 *gUnknown_203B2F8; diff --git a/ld_script.txt b/ld_script.txt index e097fca23..18fd480f5 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -116,6 +116,7 @@ SECTIONS { asm/gulpin_shop.o(.text); src/gulpin_shop_1.o(.text); asm/code_801EE10.o(.text); + src/code_801EE10.o(.text); src/luminous_cave.o(.text); src/friend_list_menu_1.o(.text); asm/friend_list_menu.o(.text); @@ -292,6 +293,7 @@ SECTIONS { asm/dungeon.o(.text); src/dungeon_2.o(.text); asm/dungeon_2.o(.text); + src/dungeon_2_1.o(.text); src/items.o(.text); src/rescue_team_info.o(.text); src/text_util.o(.text); diff --git a/src/code_801EE10.c b/src/code_801EE10.c new file mode 100644 index 000000000..668d95256 --- /dev/null +++ b/src/code_801EE10.c @@ -0,0 +1,157 @@ +#include "global.h" +#include "code_800D090.h" +#include "pokemon.h" +#include "input.h" +#include "memory.h" +#include "text.h" + +struct unkStruct_203B2AC +{ + u8 unk0[0x1E]; + s16 unk1E; + s16 unk20; + u8 unk22[0x34 - 0x22]; + u32 unk34[3]; + u8 unk40[0x48 - 0x40]; + s16 unk48; + u32 unk4C; + u8 unk50[0xB0 - 0x50]; + u32 unkB0; + u8 fillB4[0xE0 - 0xB4]; + u32 unkE0; + struct UnkTextStruct2 *unkE4; + struct UnkTextStruct2 unkE8[4]; + u8 unk148[4]; +}; +extern struct unkStruct_203B2AC *gUnknown_203B2AC; + +struct unkStruct_3001B60 +{ + u8 fill0[0x1A]; + s16 unk1A[2]; + u8 fill1C[0x370 - 0x1E]; + s16 unk370; + s16 unk372; + s16 unk374; + s16 unk376; +}; + +extern struct unkStruct_3001B60 *gUnknown_3001B60; + +extern struct UnkTextStruct2 gUnknown_80DC9B0; +extern struct UnkTextStruct2 gUnknown_80DC9C8; + +extern void sub_8013818(void *, u32, u32, u32); +extern u8 sub_80023E4(u32); +extern void sub_808FF20(u32 *, struct PokemonStruct *, u8); +extern void CreatePokemonInfoTabScreen(u32, s16, u32 *, u32 *, u32); +extern s32 GetKeyPress(void *); +extern bool8 sub_8013938(void *); +extern void sub_802452C(void); +extern void PlayMenuSoundEffect(u32); +extern void sub_8013984(void *); +void sub_80922B4(u8 *buffer, u8 *string, s32 size); + +void sub_8024588(void); +void sub_80245D0(void); +void sub_8024604(void); + +extern u8 gUnknown_80DC9A4[]; + +struct PokemonStruct *sub_80243E8(void) +{ + u8 buffer [40]; + u8 nameBuffer [20]; + struct PokemonStruct *pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_3001B60->unk1A[gUnknown_3001B60->unk376 * gUnknown_3001B60->unk374 + gUnknown_3001B60->unk370]]; + + sub_80922B4(nameBuffer, pokeStruct->name, POKEMON_NAME_LENGTH); + sprintf_2(buffer, gUnknown_80DC9A4,nameBuffer); // %s + return pokeStruct; +} + +bool8 sub_8024458(s16 param_1, s32 param_2) +{ + s32 param_1_s32 = param_1; + gUnknown_203B2AC = MemoryAlloc(sizeof(struct unkStruct_203B2AC), 8); + gUnknown_203B2AC->unk48 = param_1_s32; + gUnknown_203B2AC->unkE0 = param_2; + gUnknown_203B2AC->unkE4 = &gUnknown_203B2AC->unkE8[param_2]; + sub_8006518(gUnknown_203B2AC->unkE8); + gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9C8; + gUnknown_203B2AC->unkE4->unk14 = gUnknown_203B2AC->unk148; + gUnknown_203B2AC->unk148[2] = 10; + sub_8024604(); + sub_802452C(); + sub_8013984(gUnknown_203B2AC); + return TRUE; +} + +u8 sub_80244E4(void) +{ + switch(GetKeyPress(gUnknown_203B2AC)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + if (sub_8013938(gUnknown_203B2AC) != 0) { + sub_802452C(); + return 1; + } + else { + return 0; + } + } +} + +void sub_802452C(void) +{ + sub_8024588(); + sub_80245D0(); +} + +void sub_802453C(void) +{ + if(gUnknown_203B2AC) + { + gUnknown_203B2AC->unkE8[gUnknown_203B2AC->unkE0] = gUnknown_80DC9B0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2AC->unkE8, 1, 1); + MemoryFree(gUnknown_203B2AC); + gUnknown_203B2AC = NULL; + } +} + +void sub_8024588(void) +{ + gUnknown_203B2AC->unk148[0] = gUnknown_203B2AC->unk20; + gUnknown_203B2AC->unk148[1] = gUnknown_203B2AC->unk1E; + gUnknown_203B2AC->unk148[3] = 0; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2AC->unkE8,1,1); +} + +void sub_80245D0(void) +{ + CreatePokemonInfoTabScreen + (gUnknown_203B2AC->unk34[gUnknown_203B2AC->unk1E], + gUnknown_203B2AC->unk1E,&gUnknown_203B2AC->unk4C, + &gUnknown_203B2AC->unkB0,gUnknown_203B2AC->unkE0); +} + +void sub_8024604(void) +{ + struct PokemonStruct *pokeStruct; + u32 *iVar3; + + gUnknown_203B2AC->unk34[0] = 2; + gUnknown_203B2AC->unk34[1] = 3; + gUnknown_203B2AC->unk34[2] = 5; + sub_8013818(gUnknown_203B2AC,3,1,gUnknown_203B2AC->unkE0); + iVar3 = &gUnknown_203B2AC->unk4C; + pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2AC->unk48]; + sub_808FF20(iVar3,pokeStruct,sub_80023E4(7)); +} diff --git a/src/code_803C1B4.c b/src/code_803C1B4.c index 5f37e6153..0d84866a8 100644 --- a/src/code_803C1B4.c +++ b/src/code_803C1B4.c @@ -1,11 +1,10 @@ #include "global.h" +#include "dungeon.h" -extern s32 sub_80908D8(u32); - -s32 sub_803C1B4(s32 r0, u8 r1) +u32 sub_803C1B4(struct DungeonLocation *dungeon, u8 r1) { s32 temp; - temp = sub_80908D8(r0); + temp = sub_80908D8(dungeon); if(r1 == 2) { temp += 2; diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index e1d3a1ad5..c873c9852 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -13,43 +13,43 @@ struct unkStruct_80420E8 }; -extern void sub_803ED30(u8, struct DungeonEntity *r0, u8, u8); -extern void sub_804151C(struct DungeonEntity *r0, u32 r1, u8 r2); -extern void sub_80416E0(struct DungeonEntity *r0, u32, u32); -extern u8 sub_8042768(struct DungeonEntity *r0); -extern void sub_806CDD4(struct DungeonEntity *r0, u8, u32); +extern void sub_803ED30(u8, struct DungeonEntity *pokemon, u8, u8); +extern void sub_804151C(struct DungeonEntity *pokemon, u32 r1, u8 r2); +extern void sub_80416E0(struct DungeonEntity *pokemon, u32, u32); +extern u8 sub_8042768(struct DungeonEntity *pokemon); +extern void sub_806CDD4(struct DungeonEntity *pokemon, u8, u32); extern u32 sub_806F62C(u32); extern void PlaySoundEffect(u32); -extern u8 sub_803F428(struct DungeonEntity *r0); -extern void sub_8041550(struct DungeonEntity *r0, u32, u32, u32, u32, u32); +extern u8 sub_803F428(struct DungeonEntity *pokemon); +extern void sub_8041550(struct DungeonEntity *pokemon, u32, u32, u32, u32, u32); -void sub_80421C0(struct DungeonEntity *r0, u16 r1); +void sub_80421C0(struct DungeonEntity *pokemon, u16 r1); -void sub_8041AD0(struct DungeonEntity *r0) +void sub_8041AD0(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xA2 << 1, 1); + sub_804151C(pokemon, 0xA2 << 1, 1); } -void sub_8041AE0(struct DungeonEntity *r0) +void sub_8041AE0(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x143, 1); + sub_804151C(pokemon, 0x143, 1); } -void sub_8041AF4(struct DungeonEntity *r0) +void sub_8041AF4(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x25, 1); - sub_80421C0(r0, 0x197); + sub_804151C(pokemon, 0x25, 1); + sub_80421C0(pokemon, 0x197); } void nullsub_57(void) { } -void sub_8041B18(struct DungeonEntity *r0) +void sub_8041B18(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x141, 1); + sub_804151C(pokemon, 0x141, 1); } void nullsub_58(void) @@ -60,36 +60,36 @@ void nullsub_59(void) { } -void sub_8041B34(struct DungeonEntity *r0) +void sub_8041B34(struct DungeonEntity *pokemon) { - sub_804151C(r0, 7, 1); + sub_804151C(pokemon, 7, 1); } void nullsub_60(void) { } -void sub_8041B48(struct DungeonEntity *r0) +void sub_8041B48(struct DungeonEntity *pokemon) { - sub_804151C(r0, 4, 0); + sub_804151C(pokemon, 4, 0); } void nullsub_61(void) { } -void sub_8041B5C(struct DungeonEntity *r0) +void sub_8041B5C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 1); + sub_804151C(pokemon, 0x171, 1); } -void nullsub_62(struct DungeonEntity *r0) +void nullsub_62(struct DungeonEntity *pokemon) { } -void sub_8041B74(struct DungeonEntity *r0) +void sub_8041B74(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 0); + sub_804151C(pokemon, 0x171, 0); } void nullsub_63(void) @@ -100,9 +100,9 @@ void nullsub_64(void) { } -void sub_8041B90(struct DungeonEntity *r0) +void sub_8041B90(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xD6 << 1, 0); + sub_804151C(pokemon, 0xD6 << 1, 0); } void nullsub_65(void) @@ -113,60 +113,60 @@ void nullsub_66(void) { } -void sub_8041BA8(struct DungeonEntity *r0) +void sub_8041BA8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 4, 1); + sub_804151C(pokemon, 4, 1); } void nullsub_67(void) { } -void sub_8041BBC(struct DungeonEntity *r0) +void sub_8041BBC(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xD4 << 1, 1); + sub_804151C(pokemon, 0xD4 << 1, 1); } void nullsub_68(void) { } -void sub_8041BD0(struct DungeonEntity *r0, u8 r1) +void sub_8041BD0(struct DungeonEntity *pokemon, u8 r1) { if(r1 == 0) { return; } - sub_80421C0(r0, 0x1a5); + sub_80421C0(pokemon, 0x1a5); } -void sub_8041BE8(struct DungeonEntity *r0) +void sub_8041BE8(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0xCB << 1); + sub_80421C0(pokemon, 0xCB << 1); } -void sub_8041BF8(struct DungeonEntity *r0) +void sub_8041BF8(struct DungeonEntity *pokemon) { - sub_806CDD4(r0, 0xA, NUM_DIRECTIONS); + sub_806CDD4(pokemon, 0xA, NUM_DIRECTIONS); } -void sub_8041C08(struct DungeonEntity *r0) +void sub_8041C08(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a7, 1); + sub_804151C(pokemon, 0x1a7, 1); } -void sub_8041C1C(struct DungeonEntity *r0) +void sub_8041C1C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a7, 1); + sub_804151C(pokemon, 0x1a7, 1); } void nullsub_69(void) { } -void sub_8041C34(struct DungeonEntity *r0) +void sub_8041C34(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x4C, 1); + sub_804151C(pokemon, 0x4C, 1); } void nullsub_70(void) @@ -177,24 +177,24 @@ void nullsub_71(void) { } -void sub_8041C4C(struct DungeonEntity *r0, u32 r1) +void sub_8041C4C(struct DungeonEntity *pokemon, u32 r1) { - sub_804151C(r0, r1, 1); + sub_804151C(pokemon, r1, 1); } -void sub_8041C58(struct DungeonEntity *r0) +void sub_8041C58(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } -void sub_8041C6C(struct DungeonEntity *r0) +void sub_8041C6C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x9D << 1, 1); + sub_804151C(pokemon, 0x9D << 1, 1); } -void sub_8041C7C(struct DungeonEntity *r0) +void sub_8041C7C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x9D << 1, 1); + sub_804151C(pokemon, 0x9D << 1, 1); } void nullsub_72(void) @@ -205,96 +205,96 @@ void nullsub_73(void) { } -void sub_8041C94(struct DungeonEntity *r0) +void sub_8041C94(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 1); + sub_804151C(pokemon, 0x171, 1); } -void sub_8041CA8(struct DungeonEntity *r0) +void sub_8041CA8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 7, 1); + sub_804151C(pokemon, 7, 1); } -void sub_8041CB8(struct DungeonEntity *r0) +void sub_8041CB8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x18b, 1); + sub_804151C(pokemon, 0x18b, 1); } -void sub_8041CCC(struct DungeonEntity *r0) +void sub_8041CCC(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC5 << 1, 1); + sub_804151C(pokemon, 0xC5 << 1, 1); } -void sub_8041CDC(struct DungeonEntity *r0) +void sub_8041CDC(struct DungeonEntity *pokemon) { - sub_804151C(r0, 5, 1); + sub_804151C(pokemon, 5, 1); } -void sub_8041CEC(struct DungeonEntity *r0) +void sub_8041CEC(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x19d); + sub_80421C0(pokemon, 0x19d); } void nullsub_74(void) { } -void sub_8041D00(struct DungeonEntity *r0, struct DungeonEntity *r1) +void sub_8041D00(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_804151C(r1, 0x2F, 1); - sub_804151C(r0, 0x30, 1); + sub_804151C(target, 0x2F, 1); + sub_804151C(pokemon, 0x30, 1); } -void nullsub_75(void) +void nullsub_75(struct DungeonEntity *pokemon) { } -void nullsub_76(void) +void nullsub_76(struct DungeonEntity *pokemon) { } -void nullsub_77(void) +void nullsub_77(struct DungeonEntity *pokemon) { } -void nullsub_78(void) +void nullsub_78(struct DungeonEntity *pokemon) { } -void nullsub_79(void) +void nullsub_79(struct DungeonEntity *pokemon) { } -void nullsub_80(void) +void nullsub_80(struct DungeonEntity *pokemon) { } -void sub_8041D38(struct DungeonEntity * r0) +void sub_8041D38(struct DungeonEntity * pokemon) { - sub_804151C(r0, 0x21, 1); + sub_804151C(pokemon, 0x21, 1); } -void sub_8041D48(struct DungeonEntity * r0) +void sub_8041D48(struct DungeonEntity * pokemon) { - sub_80421C0(r0, 0x191); + sub_80421C0(pokemon, 0x191); } void nullsub_81(void) { } -void sub_8041D5C(struct DungeonEntity *r0) +void sub_8041D5C(struct DungeonEntity *pokemon) { - if(sub_8042768(r0) == 0) + if(sub_8042768(pokemon) == 0) { return; } - sub_803ED30(r0->entityData->stockpileCount, r0, 1, 0xB); + sub_803ED30(pokemon->entityData->stockpileCount, pokemon, 1, 0xB); } -void sub_8041D84(struct DungeonEntity * r0) +void sub_8041D84(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x19f); + sub_80421C0(pokemon, 0x19f); } void nullsub_82(void) @@ -305,14 +305,14 @@ void nullsub_83(void) { } -void sub_8041D9C(struct DungeonEntity * r0) +void sub_8041D9C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x131, 1); + sub_804151C(pokemon, 0x131, 1); } -void sub_8041DB0(struct DungeonEntity * r0) +void sub_8041DB0(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x30, 1); + sub_804151C(pokemon, 0x30, 1); } void nullsub_84(void) @@ -339,257 +339,257 @@ void nullsub_88(void) { } -void sub_8041DD8(struct DungeonEntity *r0, s16 r1) +void sub_8041DD8(struct DungeonEntity *pokemon, s16 r1) { u32 temp; temp = r1; - if(HasType(r0, TYPE_GHOST) != 0) - sub_804151C(r0, temp, 1); + if(HasType(pokemon, TYPE_GHOST) != 0) + sub_804151C(pokemon, temp, 1); else - sub_804151C(r0, TYPE_GHOST, 1); + sub_804151C(pokemon, TYPE_GHOST, 1); } void nullsub_89(void) { } -void sub_8041E0C(struct DungeonEntity *r0) +void sub_8041E0C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x41, 1); + sub_804151C(pokemon, 0x41, 1); } -void sub_8041E1C(struct DungeonEntity *r0) +void sub_8041E1C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x8F << 1, 1); - sub_80421C0(r0, 0xCE << 1); + sub_804151C(pokemon, 0x8F << 1, 1); + sub_80421C0(pokemon, 0xCE << 1); } -void sub_8041E3C(struct DungeonEntity *r0) +void sub_8041E3C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xD7 << 1, 1); + sub_804151C(pokemon, 0xD7 << 1, 1); } -void sub_8041E4C(struct DungeonEntity *r0) +void sub_8041E4C(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1b1, 1); + sub_804151C(pokemon, 0x1b1, 1); } -void sub_8041E60(struct DungeonEntity *r0) +void sub_8041E60(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } -void sub_8041E74(struct DungeonEntity *r0) +void sub_8041E74(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC9 << 1, 1); + sub_804151C(pokemon, 0xC9 << 1, 1); } -void sub_8041E84(struct DungeonEntity *r0) +void sub_8041E84(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC7 << 1, 1); + sub_804151C(pokemon, 0xC7 << 1, 1); } -void sub_8041E94(struct DungeonEntity *r0) +void sub_8041E94(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xC8 << 1, 1); + sub_804151C(pokemon, 0xC8 << 1, 1); } -void sub_8041EA4(struct DungeonEntity *r0) +void sub_8041EA4(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x15, 1); + sub_804151C(pokemon, 0x15, 1); } -void sub_8041EB4(struct DungeonEntity *r0) +void sub_8041EB4(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x171, 1); + sub_804151C(pokemon, 0x171, 1); } -void sub_8041EC8(struct DungeonEntity *r0) +void sub_8041EC8(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x197); + sub_80421C0(pokemon, 0x197); } -void sub_8041ED8(struct DungeonEntity *r0) +void sub_8041ED8(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x197); + sub_80421C0(pokemon, 0x197); } -void sub_8041EE8(struct DungeonEntity *r0) +void sub_8041EE8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0x15, 1); + sub_804151C(pokemon, 0x15, 1); } -void sub_8041EF8(struct DungeonEntity *r0) +void sub_8041EF8(struct DungeonEntity *pokemon) { - sub_804151C(r0, 0xF, 1); + sub_804151C(pokemon, 0xF, 1); } -void sub_8041F08(struct DungeonEntity *r0) +void sub_8041F08(struct DungeonEntity *pokemon) { - sub_8041550(r0, 0x15, 1, 3, 2, 0); + sub_8041550(pokemon, 0x15, 1, 3, 2, 0); } void nullsub_90(void) { } -void sub_8041F28(struct DungeonEntity *r0, u32 r1) +void sub_8041F28(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xCA << 1, 1); + sub_804151C(pokemon, 0xCA << 1, 1); } else { - sub_804151C(r0, 0x193, 1); + sub_804151C(pokemon, 0x193, 1); } } -void sub_8041F4C(struct DungeonEntity *r0, u32 r1) +void sub_8041F4C(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x18f, 1); + sub_804151C(pokemon, 0x18f, 1); } else { - sub_804151C(r0, 0x191, 1); + sub_804151C(pokemon, 0x191, 1); } } -void sub_8041F70(struct DungeonEntity *r0, u32 r1) +void sub_8041F70(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } else { - sub_804151C(r0, 0xC9 << 1, 1); + sub_804151C(pokemon, 0xC9 << 1, 1); } } -void sub_8041F94(struct DungeonEntity *r0, u32 r1) +void sub_8041F94(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC7 << 1, 1); + sub_804151C(pokemon, 0xC7 << 1, 1); } else { - sub_804151C(r0, 0xC8 << 1, 1); + sub_804151C(pokemon, 0xC8 << 1, 1); } } -void sub_8041FB4(struct DungeonEntity *r0, u32 r1) +void sub_8041FB4(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x1a9, 1); + sub_804151C(pokemon, 0x1a9, 1); } else { - sub_804151C(r0, 0xC9 << 1, 1); + sub_804151C(pokemon, 0xC9 << 1, 1); } } -void sub_8041FD8(struct DungeonEntity *r0, u32 r1) +void sub_8041FD8(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xCA << 1, 1); + sub_804151C(pokemon, 0xCA << 1, 1); } else { - sub_804151C(r0, 0x193, 1); + sub_804151C(pokemon, 0x193, 1); } } -void sub_8041FFC(struct DungeonEntity *r0, u32 r1) +void sub_8041FFC(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC7 << 1, 1); + sub_804151C(pokemon, 0xC7 << 1, 1); } else { - sub_804151C(r0, 0xC8 << 1, 1); + sub_804151C(pokemon, 0xC8 << 1, 1); } } -void sub_804201C(struct DungeonEntity *r0, u32 r1) +void sub_804201C(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x18f, 1); + sub_804151C(pokemon, 0x18f, 1); } else { - sub_804151C(r0, 0x191, 1); + sub_804151C(pokemon, 0x191, 1); } } -void sub_8042040(struct DungeonEntity *r0, u32 r1) +void sub_8042040(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC6 << 1, 1); + sub_804151C(pokemon, 0xC6 << 1, 1); } else { - sub_804151C(r0, 0xD, 1); + sub_804151C(pokemon, 0xD, 1); } } -void sub_8042060(struct DungeonEntity *r0, u32 r1) +void sub_8042060(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0x18d, 1); + sub_804151C(pokemon, 0x18d, 1); } else { - sub_804151C(r0, 0xE, 1); + sub_804151C(pokemon, 0xE, 1); } } -void sub_8042080(struct DungeonEntity *r0, u32 r1) +void sub_8042080(struct DungeonEntity *pokemon, u32 r1) { if(r1 == 0) { - sub_804151C(r0, 0xC6 << 1, 1); + sub_804151C(pokemon, 0xC6 << 1, 1); } else { - sub_804151C(r0, 0xD, 1); + sub_804151C(pokemon, 0xD, 1); } } -void sub_80420A0(struct DungeonEntity *r0, u32 r1) +void sub_80420A0(struct DungeonEntity *pokemon, u32 r1) { - sub_804151C(r0, 0x143, 1); + sub_804151C(pokemon, 0x143, 1); } void nullsub_91(void) { } -void sub_80420B8(struct DungeonEntity *r0, u32 r1) +void sub_80420B8(struct DungeonEntity *pokemon, u32 r1) { - sub_804151C(r0, 0x19, 1); + sub_804151C(pokemon, 0x19, 1); } -void sub_80420C8(struct DungeonEntity *r0) +void sub_80420C8(struct DungeonEntity *pokemon) { - sub_8041550(r0, 0x15, 1, 3, 2, 0); + sub_8041550(pokemon, 0x15, 1, 3, 2, 0); } void nullsub_92(void) { } -void sub_80420E8(struct DungeonEntity *r0, struct unkStruct_80420E8 *r1) +void sub_80420E8(struct DungeonEntity *pokemon, struct unkStruct_80420E8 *r1) { u32 temp; u32 arg; @@ -612,58 +612,58 @@ void sub_80420E8(struct DungeonEntity *r0, struct unkStruct_80420E8 *r1) arg = 11; break; } - sub_8041550(r0, arg, 1, 3, 0, 1); + sub_8041550(pokemon, arg, 1, 3, 0, 1); } -void sub_8042148(struct DungeonEntity *r0) +void sub_8042148(struct DungeonEntity *pokemon) { - sub_80421C0(r0, 0x1a7); - sub_804151C(r0, 0x9F << 1, 1); + sub_80421C0(pokemon, 0x1a7); + sub_804151C(pokemon, 0x9F << 1, 1); } void nullsub_93() { } -void sub_804216C(u32 r0, struct DungeonEntity *r1, u32 r2) +void sub_804216C(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 r2) { if(r2 == 1) - sub_804151C(r1, 0xF8, 1); + sub_804151C(target, 0xF8, 1); else - sub_804151C(r1, 0xF9, 1); + sub_804151C(target, 0xF9, 1); } -void sub_804218C(u32 r0, struct DungeonEntity *r1) +void sub_804218C(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_804151C(r1, 0x2A, 1); + sub_804151C(target, 0x2A, 1); } -void sub_804219C(struct DungeonEntity *r0) +void sub_804219C(struct DungeonEntity *pokemon) { - sub_80416E0(r0, 0x90, 1); + sub_80416E0(pokemon, 0x90, 1); } -void sub_80421AC(u32 r0, struct DungeonEntity * r1) +void sub_80421AC(struct DungeonEntity *pokemon, struct DungeonEntity * target) { - sub_804151C(r1, 0x167, 1); + sub_804151C(target, 0x167, 1); } -void sub_80421C0(struct DungeonEntity *r0, u16 r1) +void sub_80421C0(struct DungeonEntity *pokemon, u16 r1) { - if(r0 == NULL) + if(pokemon == NULL) PlaySoundEffect(r1); else - if(sub_8042768(r0) != 0) + if(sub_8042768(pokemon) != 0) PlaySoundEffect(r1); } -void sub_80421EC(struct DungeonEntity *r0, u16 r1) +void sub_80421EC(struct DungeonEntity *pokemon, u16 r1) { - if(sub_803F428(r0) != 0) + if(sub_803F428(pokemon) != 0) PlaySoundEffect(r1); } -void sub_8042208(struct DungeonEntity *r0, u8 r1) +void sub_8042208(struct DungeonEntity *pokemon, u8 r1) { if(r1 == 0) PlaySoundEffect(0x152); @@ -673,9 +673,9 @@ void sub_8042208(struct DungeonEntity *r0, u8 r1) PlaySoundEffect(0x150); } -void sub_8042238(u32 r0, struct DungeonEntity *r1) +void sub_8042238(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - if(r1->entityData->isEnemy) + if(target->entityData->isEnemy) PlaySoundEffect(0x157); else PlaySoundEffect(0x156); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index 7c893a1a6..48b31cc89 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -47,28 +47,28 @@ extern u8 sub_8092364(u8); extern void sub_803E46C(u32); extern void sub_803E708(u32 r0, u32 r1); -void sub_8069E0C(struct DungeonEntity *param_1) +void sub_8069E0C(struct DungeonEntity *pokemon) { s32 index; - struct DungeonEntityData *iVar4; + struct DungeonEntityData *entityData; - iVar4 = param_1->entityData; - if (HasAbility(param_1, ABILITY_FORECAST)) { - iVar4->types[0] = gUnknown_80F520C[GetWeather(param_1)].unk0; - iVar4->types[1] = TYPE_NONE; + entityData = pokemon->entityData; + if (HasAbility(pokemon, ABILITY_FORECAST)) { + entityData->types[0] = gUnknown_80F520C[GetWeather(pokemon)].unk0; + entityData->types[1] = TYPE_NONE; } else { for(index = 0; index < 2; index++) - iVar4->types[index] = GetPokemonType(iVar4->entityID, index); + entityData->types[index] = GetPokemonType(entityData->entityID, index); } for(index = 0; index < 2; index++) - iVar4->abilities[index] = GetPokemonAbility(iVar4->entityID, index); + entityData->abilities[index] = GetPokemonAbility(entityData->entityID, index); gDungeonGlobalData->unkC = 1; } void TriggerWeatherAbilities(void) { - struct DungeonEntity *uVar4; + struct DungeonEntity *entity; s32 iVar5; if (gDungeonGlobalData->unkC != 0) { @@ -77,18 +77,18 @@ void TriggerWeatherAbilities(void) for(iVar5 = 0; iVar5 < DUNGEON_MAX_POKEMON; iVar5++) { - uVar4 = gDungeonGlobalData->allPokemon[iVar5]; - if (EntityExists(uVar4)) { - if (HasAbility(uVar4, ABILITY_DRIZZLE)) { + entity = gDungeonGlobalData->allPokemon[iVar5]; + if (EntityExists(entity)) { + if (HasAbility(entity, ABILITY_DRIZZLE)) { gDungeonGlobalData->startingWeather[WEATHER_RAIN] = 1; } - else if (HasAbility(uVar4, ABILITY_SAND_STREAM)) { + else if (HasAbility(entity, ABILITY_SAND_STREAM)) { gDungeonGlobalData->startingWeather[WEATHER_SANDSTORM] = 1; } - else if (HasAbility(uVar4, ABILITY_DROUGHT)) { + else if (HasAbility(entity, ABILITY_DROUGHT)) { gDungeonGlobalData->startingWeather[WEATHER_SUNNY] = 1; } - if ((HasAbility(uVar4, ABILITY_AIR_LOCK)) || (HasAbility(uVar4, ABILITY_CLOUD_NINE))) { + if ((HasAbility(entity, ABILITY_AIR_LOCK)) || (HasAbility(entity, ABILITY_CLOUD_NINE))) { gDungeonGlobalData->negateWeatherEffects = TRUE; } } @@ -96,11 +96,11 @@ void TriggerWeatherAbilities(void) } } -s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2) +s32 sub_8069F54(struct DungeonEntity *pokemon, s16 param_2) { if ((((param_2 * 0x10000) + 0xfe880000U) >> 0x10) < 4) { - if (HasAbility(param_1, ABILITY_FORECAST)) { - return gUnknown_80F520C[GetWeather(param_1)].unk2; + if (HasAbility(pokemon, ABILITY_FORECAST)) { + return gUnknown_80F520C[GetWeather(pokemon)].unk2; } else { return 0x178; @@ -109,14 +109,14 @@ s32 sub_8069F54(struct DungeonEntity *param_1, s16 param_2) return param_2; } -static inline u8 sub_8069F9C_sub(struct DungeonEntity *param_1) +static inline u8 sub_8069F9C_sub(struct DungeonEntity *pokemon) { - u32 uVar3; - uVar3 = GetWeather(param_1); - return gUnknown_80F51E4[uVar3]; + u32 weather; + weather = GetWeather(pokemon); + return gUnknown_80F51E4[weather]; } -void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,struct PokemonMove *param_3) +void sub_8069F9C(struct DungeonEntity *pokemon,struct DungeonEntity * target,struct PokemonMove *move) { u8 type; u8 ability; @@ -129,19 +129,19 @@ void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,st struct DungeonEntityData *iVar8; u8 local_20 [4]; - if (!EntityExists(param_1)) { + if (!EntityExists(pokemon)) { return; } - if (!EntityExists(param_2)) { + if (!EntityExists(target)) { return; } - if (param_1 == param_2) { + if (pokemon == target) { return; } - iVar7 = param_1->entityData; + iVar7 = pokemon->entityData; iVar8 = iVar7; - iVar6 = param_2->entityData; + iVar6 = target->entityData; abilityIndex = -1; if (iVar6->abilities[0] == ABILITY_TRACE) { abilityIndex = 0; @@ -171,112 +171,112 @@ void sub_8069F9C(struct DungeonEntity *param_1,struct DungeonEntity * param_2,st } iVar6->abilities[abilityIndex] = local_20[randomIndex]; gDungeonGlobalData->unkC = 1; - SetMessageArgument(gAvailablePokemonNames,param_2,0); - sub_80522F4(param_1,param_2,*gUnknown_80FCC7C); - sub_8042900(param_2); - sub_806ABAC(param_1,param_2); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FCC7C); + sub_8042900(target); + sub_806ABAC(pokemon,target); } } _0806A068: if (iVar6->unk15A != 0) { iVar6->unk15A = 0; - if (HasAbility(param_2, ABILITY_COLOR_CHANGE)) { - type = GetMoveTypeForPokemon(param_1,param_3); - if (param_3->moveID == MOVE_WEATHER_BALL) { - type = sub_8069F9C_sub(param_1); + if (HasAbility(target, ABILITY_COLOR_CHANGE)) { + type = GetMoveTypeForPokemon(pokemon,move); + if (move->moveID == MOVE_WEATHER_BALL) { + type = sub_8069F9C_sub(pokemon); } - if ((type != TYPE_NONE) && (!HasType(param_2,type))) { + if ((type != TYPE_NONE) && (!HasType(target,type))) { iVar6->types[0] = type; iVar6->types[1] = TYPE_NONE; iVar6->isColorChanged = TRUE; - SetMessageArgument(gAvailablePokemonNames,param_2,0); + SetMessageArgument(gAvailablePokemonNames,target,0); __src = GetUnformattedTypeString(iVar6->types[0]); strcpy(gUnknown_202DE58,__src); - sub_80522F4(param_1,param_2,*gUnknown_80FCCAC); - sub_8042968(param_2); + sub_80522F4(pokemon,target,*gUnknown_80FCCAC); + sub_8042968(target); } } } } -void sub_806A120(struct DungeonEntity * param_1, struct DungeonEntity * param_2, struct PokemonMove* move) +void sub_806A120(struct DungeonEntity * pokemon, struct DungeonEntity * target, struct PokemonMove* move) { u32 uVar2_u32; - u8 uVar2; - const char *__src; - struct DungeonEntityData *iVar3; + u8 moveType; + const char *typeString; + struct DungeonEntityData *entityData; - if ((((EntityExists(param_1)) && (EntityExists(param_2))) && (param_1 != param_2)) - && (iVar3 = param_2->entityData, iVar3->protectionStatus == 0xC)) { - uVar2 = GetMoveTypeForPokemon(param_1, move); - uVar2_u32 = sub_8092364(uVar2); + if ((((EntityExists(pokemon)) && (EntityExists(target))) && (pokemon != target)) + && (entityData = target->entityData, entityData->protectionStatus == 0xC)) { + moveType = GetMoveTypeForPokemon(pokemon, move); + uVar2_u32 = sub_8092364(moveType); if (uVar2_u32 != TYPE_NONE) { - iVar3->types[0] = uVar2_u32; - iVar3->types[1] = 0; - sub_8041BBC(param_2); - SetMessageArgument(gAvailablePokemonNames,param_2,0); - __src = GetUnformattedTypeString(uVar2_u32); - strcpy(gUnknown_202DE58,__src); - sub_80522F4(param_1,param_2,*gUnknown_80FDCC8); + entityData->types[0] = uVar2_u32; + entityData->types[1] = 0; + sub_8041BBC(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + typeString = GetUnformattedTypeString(uVar2_u32); + strcpy(gUnknown_202DE58,typeString); + sub_80522F4(pokemon,target,*gUnknown_80FDCC8); } } } -void sub_806A1B0(struct DungeonEntity *param_1) +void sub_806A1B0(struct DungeonEntity *pokemon) { - if ((EntityExists(param_1)) && (HasAbility(param_1,0x2a))) { - sub_8076090(param_1,param_1,0,1,0); + if ((EntityExists(pokemon)) && (HasAbility(pokemon, ABILITY_TRUANT))) { + sub_8076090(pokemon,pokemon,0,1,0); } } -void sub_806A1E8(struct DungeonEntity *param_1) +void sub_806A1E8(struct DungeonEntity *pokemon) { bool8 bVar3; struct DungeonEntityData *iVar1; bVar3 = FALSE; - if (EntityExists(param_1)) { - if (GetEntityType(param_1) == ENTITY_POKEMON) { - iVar1 = param_1->entityData; + if (EntityExists(pokemon)) { + if (GetEntityType(pokemon) == ENTITY_POKEMON) { + iVar1 = pokemon->entityData; bVar3 = (!iVar1->isEnemy); } if (gUnknown_203B46C->unk1 == '\0') { bVar3 = FALSE; } - if (bVar3 && (sub_8045888(param_1) == '\0')) { - sub_806A2BC(param_1,1); + if (bVar3 && (sub_8045888(pokemon) == '\0')) { + sub_806A2BC(pokemon,1); } } } -void sub_806A240(struct DungeonEntity *param_1, struct DungeonEntity *param_2) +void sub_806A240(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - bool8 bVar3; - struct DungeonEntityData *iVar1; + bool8 isEnemy; + struct DungeonEntityData *entityData; - bVar3 = FALSE; - if (EntityExists(param_1)){ - if (GetEntityType(param_1) == ENTITY_POKEMON) { - iVar1 = param_1->entityData; - bVar3 = (!iVar1->isEnemy); + isEnemy = FALSE; + if (EntityExists(pokemon)){ + if (GetEntityType(pokemon) == ENTITY_POKEMON) { + entityData = pokemon->entityData; + isEnemy = (!entityData->isEnemy); } - if (bVar3 && (sub_8045888(param_1) == '\0')) { - sub_806A2BC(param_1,1); + if (isEnemy && (sub_8045888(pokemon) == '\0')) { + sub_806A2BC(pokemon,1); return; } - else if (GetEntityType(param_2) == ENTITY_POKEMON) { - iVar1 = param_2->entityData; - bVar3 = (!iVar1->isEnemy); + else if (GetEntityType(target) == ENTITY_POKEMON) { + entityData = target->entityData; + isEnemy = (!entityData->isEnemy); } - if (bVar3 && (sub_8045888(param_2) == '\0')) { - sub_806A2BC(param_2,1); + if (isEnemy && (sub_8045888(target) == '\0')) { + sub_806A2BC(target,1); } } } -void sub_806A2BC(struct DungeonEntity *param_1, u8 param_2) +void sub_806A2BC(struct DungeonEntity *pokemon, u8 param_2) { - if ((EntityExists(param_1)) && (GetEntityType(param_1) == ENTITY_POKEMON) && (gDungeonGlobalData->leader != param_1)) { + if ((EntityExists(pokemon)) && (GetEntityType(pokemon) == ENTITY_POKEMON) && (gDungeonGlobalData->leader != pokemon)) { if (param_2 != '\0') { sub_804178C(1); while (gDungeonGlobalData->unk12 < 0x3c) { @@ -284,8 +284,8 @@ void sub_806A2BC(struct DungeonEntity *param_1, u8 param_2) } } sub_803E708(4,0x44); - sub_803F508(param_1); - sub_804AC20(¶m_1->posWorld); + sub_803F508(pokemon); + sub_804AC20(&pokemon->posWorld); gDungeonGlobalData->unk12 = 0; } } diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 43c23efe8..319c427b5 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -145,6 +145,38 @@ extern void sub_808CBB0(void); extern void sub_808CD44(void); extern void sub_8097FF8(void); +extern u8 sub_8098100(u8); +extern void sub_8097FA8(void); +extern void sub_807E5E4(u32); + +void sub_8084854(u8 *param_1) +{ + if (gDungeonGlobalData->unk678 != 0) { + gDungeonGlobalData->unk3A0D = param_1[5]; + } + else + { + if (sub_8098100(param_1[4]) != 0) { + gDungeonGlobalData->unk3A0D = param_1[5]; + } + else + { + if (sub_8098100(param_1[2]) != 0) { + gDungeonGlobalData->unk3A0D = param_1[3]; + } + else + { + gDungeonGlobalData->unk3A0D = param_1[1]; + if (param_1[2] != 0x40) { + sub_8097FA8(); + } + } + } + } + gDungeonGlobalData->unk675 = 1; + sub_807E5E4(0); +} + u32 sub_80848EC(void) { return 1; diff --git a/src/code_80958E8.c b/src/code_80958E8.c index bfe24308b..2a640351b 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -6,36 +6,15 @@ #include "sub_8095228.h" #include "wonder_mail.h" #include "constants/wonder_mail.h" - -struct subStruct_203B490 -{ - // size: 0xC - u8 unk0; - u8 unk1; - u32 unk4; - u32 unk8; -}; - - -struct unkStruct_203B490 -{ - // size: 0x330? - - u8 fill0[0x190]; - u8 unk190[0x28]; - u8 unk1B8[0x78]; - struct subStruct_203B490 unk230[16]; - u8 unk2F0[0x38]; - u8 unk328; -}; +#include "dungeon.h" +#include "code_80958E8.h" -extern bool8 sub_809095C(u8); extern s32 GetDungeonFloorCount(u8); -extern bool8 sub_809017C(u8 *); +extern bool8 sub_809017C(struct DungeonLocation *); extern s16 GetBaseSpecies(s16); extern bool8 IsInvalidItemReward(u8); -extern u8 sub_803C1D0(u8 *, u8); +extern u8 sub_803C1D0(struct DungeonLocation *, u8); extern bool8 IsNotMoneyOrUsedTMItem(u8); extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 ); extern u32 GetMaxItemCount(u8); @@ -82,7 +61,7 @@ void sub_8095900(void) MemoryClear8(gUnknown_203B490->unk1B8, sizeof(gUnknown_203B490->unk1B8)); for(iVar2 = 0; iVar2 < 16; iVar2++) { - gUnknown_203B490->unk230[iVar2].unk0 = 99; + gUnknown_203B490->unk230[iVar2].dungeon = 99; gUnknown_203B490->unk230[iVar2].unk1 = 1; gUnknown_203B490->unk230[iVar2].unk4 = 0; gUnknown_203B490->unk230[iVar2].unk8 = 0; @@ -111,17 +90,17 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; else { - if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemCount(data->dungeon) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemCount(data->dungeon.dungeonIndex) == 0) return FALSE; if(data->unk2 > 9) return FALSE; - if(sub_809095C(data->dungeon)) + if(sub_809095C(data->dungeon.dungeonIndex)) return FALSE; - if(data->floor >= GetDungeonFloorCount(data->dungeon)) + if(data->dungeon.dungeonFloor >= GetDungeonFloorCount(data->dungeon.dungeonIndex)) return FALSE; - if(sub_809017C(&(data->dungeon))) + if(sub_809017C(&data->dungeon)) return FALSE; if(data->clientSpecies == SPECIES_NONE) @@ -153,7 +132,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) return FALSE; // Item finding - if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon, data->targetItem) == 0) + if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon.dungeonIndex, data->targetItem) == 0) return FALSE; if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS) @@ -170,7 +149,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) { if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL) return FALSE; - if(sub_803C1D0(&(data->dungeon), data->missionType) == 0) + if(sub_803C1D0(&data->dungeon, data->missionType) == 0) return FALSE; } return TRUE; diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 61554f0aa..f36a09fd2 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -2,42 +2,21 @@ #include "pokemon.h" #include "wonder_mail.h" -extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); -extern void sub_80015C0(u32, u32); -extern u32 sub_8001784(u32, u32, u16); - -struct unkStruct_8097270 -{ - u8 unk0; - u8 unk1; - u8 unk2; - struct DungeonLocation unk4; - u32 unk8; - u16 unkC; - u16 unkE; - u8 unk10; - u8 unk11; - u8 unk12; - u8 unk13; -}; - struct subStruct_203B490 { // size: 0xC - struct DungeonLocation unk0; + struct DungeonLocation dungeon; u32 unk4; u32 unk8; }; - struct unkStruct_203B490 { // size: 0x330? - struct unkStruct_8097270 unk0[4]; - struct unkStruct_8097270 unk50[8]; - struct unkStruct_8097270 unkF0[8]; + struct WonderMail unk0[4]; + struct WonderMail unk50[8]; + struct WonderMail unkF0[8]; u8 unk190[0x28]; u8 unk1B8[0x78]; struct subStruct_203B490 unk230[16]; @@ -46,9 +25,15 @@ struct unkStruct_203B490 }; extern struct unkStruct_203B490 *gUnknown_203B490; -void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); -void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); +void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); +void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b); extern s32 sub_8096EB0(void); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void sub_80015C0(u32, u32); +extern u32 sub_8001784(u32, u32, u16); +extern void sub_809674C(); +extern void sub_800199C(u32, s32, u32, s32); bool8 sub_8096F50(struct WonderMail *r0) { @@ -62,8 +47,8 @@ bool8 sub_8096F50(struct WonderMail *r0) for(index = 0; index < 0x10; index++) { temp = &gUnknown_203B490->unk230[index]; - if(temp->unk0.dungeonIndex == r0->dungeon) - if(temp->unk0.dungeonFloor == r0->floor) + if(temp->dungeon.dungeonIndex == r0->dungeon.dungeonIndex) + if(temp->dungeon.dungeonFloor == r0->dungeon.dungeonFloor) if(temp->unk4 == r0->unk8) if(temp->unk8 == temp2) return TRUE; @@ -80,15 +65,15 @@ u32 sub_8096FA0(u8 *r0, u32 size) xxx_init_struct_8094924_restore_809485C(&backup, r0, size); for(index = 0; index < 4; index++) { - sub_80971EC(&backup, &gUnknown_203B490->unk0[index]); + RestoreWonderMail(&backup, &gUnknown_203B490->unk0[index]); } for(index = 0; index < 8; index++) { - sub_80971EC(&backup, &gUnknown_203B490->unk50[index]); + RestoreWonderMail(&backup, &gUnknown_203B490->unk50[index]); } for(index = 0; index < 8; index++) { - sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]); + RestoreWonderMail(&backup, &gUnknown_203B490->unkF0[index]); } for(index = 0; index < 0x38; index++) { @@ -110,7 +95,7 @@ u32 sub_8096FA0(u8 *r0, u32 size) { RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); - RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0); + RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon); } nullsub_102(&backup); return backup.unk8; @@ -125,15 +110,15 @@ u32 sub_80970D8(u8 *r0, u32 size) xxx_init_struct_8094924_save_809486C(&backup, r0, size); for(index = 0; index < 4; index++) { - sub_8097270(&backup, &gUnknown_203B490->unk0[index]); + SaveWonderMail(&backup, &gUnknown_203B490->unk0[index]); } for(index = 0; index < 8; index++) { - sub_8097270(&backup, &gUnknown_203B490->unk50[index]); + SaveWonderMail(&backup, &gUnknown_203B490->unk50[index]); } for(index = 0; index < 8; index++) { - sub_8097270(&backup, &gUnknown_203B490->unkF0[index]); + SaveWonderMail(&backup, &gUnknown_203B490->unkF0[index]); } for(index = 0; index < 0x38; index++) { @@ -154,40 +139,40 @@ u32 sub_80970D8(u8 *r0, u32 size) { SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); - SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0); + SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon); } nullsub_102(&backup); return backup.unk8; } -void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) { - RestoreIntegerBits(a, &b->unk0, 4); - RestoreIntegerBits(a, &b->unk1, 3); + RestoreIntegerBits(a, &b->mailType, 4); + RestoreIntegerBits(a, &b->missionType, 3); RestoreIntegerBits(a, &b->unk2, 4); - RestoreIntegerBits(a, &b->unkC, 9); - RestoreIntegerBits(a, &b->unkE, 9); - RestoreIntegerBits(a, &b->unk10, 8); - RestoreIntegerBits(a, &b->unk11, 4); - RestoreIntegerBits(a, &b->unk12, 8); - RestoreIntegerBits(a, &b->unk13, 6); + 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->unk8, 0x18); - RestoreDungeonLocation(a, &b->unk4); + RestoreDungeonLocation(a, &b->dungeon); } -void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b) { - SaveIntegerBits(a, &b->unk0, 4); - SaveIntegerBits(a, &b->unk1, 3); + SaveIntegerBits(a, &b->mailType, 4); + SaveIntegerBits(a, &b->missionType, 3); SaveIntegerBits(a, &b->unk2, 4); - SaveIntegerBits(a, &b->unkC, 9); - SaveIntegerBits(a, &b->unkE, 9); - SaveIntegerBits(a, &b->unk10, 8); - SaveIntegerBits(a, &b->unk11, 4); - SaveIntegerBits(a, &b->unk12, 8); - SaveIntegerBits(a, &b->unk13, 6); + 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->unk8, 0x18); - SaveDungeonLocation(a, &b->unk4); + SaveDungeonLocation(a, &b->dungeon); } void sub_80972F4(void) @@ -218,3 +203,43 @@ s32 sub_8097318(s16 param_1) } return iVar1; } + +void sub_809733C(short param_1,u32 param_2) +{ + s32 uVar2; + u8 param_2_u8; + u16 uVar2_u16; + + uVar2 = param_1; + param_2_u8 = param_2; + + if (uVar2 != 0xd) { + uVar2_u16 = uVar2; + if ((((sub_8001784(0,0x2c,uVar2_u16) == 0) && (sub_800199C(0,0x2b,uVar2_u16,param_2_u8), param_2_u8 != '\0')))){ + switch(uVar2) + { + case 0xE: + case 0xF: + case 0x1C: + sub_809674C(); + break; + } + } + } +} + +bool32 sub_8097384(s16 param_1) +{ + bool32 iVar1; + + if (param_1 == 0xd) { + iVar1 = FALSE; + } + else { + iVar1 = sub_8001784(0,0x2c,param_1 & 0xffff); + if (iVar1 != 0) { + iVar1 = TRUE; + } + } + return iVar1; +} diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index d8d2c597d..3918ab349 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -24,9 +24,11 @@ extern const char gUnknown_8115FE8; struct unkStruct_811BAF4 { - u16 unk0; + s16 unk0; s16 unk2; - u8 fill4[8]; + s16 unk4; + s16 unk6; + u8 *text; }; extern struct unkStruct_811BAF4 gUnknown_811BAF4[10]; diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index a15ddcfeb..a5f51c722 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -13,6 +13,23 @@ extern s16 gUnknown_8116F9A[]; extern s16 gUnknown_8116F24[]; extern const u8 *gUnknown_8117000[]; +extern void sub_809AC18(s32, s32); +extern void sub_809ABB4(s32, s32); + +void sub_80A2584(s16 r0, s16 r1) +{ + s32 iVar2 = r1; + s32 iVar1 = r0; + sub_809ABB4(iVar1, iVar2); +} + +void sub_80A2598(s16 r0, s16 r1) +{ + s32 iVar2 = r1; + s32 iVar1 = r0; + sub_809AC18(iVar1, iVar2); +} + u32 sub_80A25AC(u16 param_1) { if (sub_8098F88() != 0) { diff --git a/src/code_80A7714.c b/src/code_80A7714.c index 7944091df..a6b912658 100644 --- a/src/code_80A7714.c +++ b/src/code_80A7714.c @@ -48,7 +48,7 @@ void sub_80A7784(void) } } -u8 sub_80A77A0(s16 r0, u32 r1) +u8 sub_80A77A0(s16 r0) { s32 temp; s32 temp2; diff --git a/src/dungeon_2_1.c b/src/dungeon_2_1.c new file mode 100644 index 000000000..899447068 --- /dev/null +++ b/src/dungeon_2_1.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "dungeon.h" +#include "constants/dungeon.h" +#include "code_800D090.h" +#include "pokemon.h" +#include "random.h" +#include "code_8092334.h" + +extern u8 gUnknown_810A350[]; +extern u8 gDungeonFloorCount[]; +extern u8 *gUnknown_8108084[]; + +s32 sub_8091E94(s32 a1, s32 a2, s32 a3); // items.c + +u32 sub_80908D8(struct DungeonLocation *dungeon) +{ + if ((dungeon->dungeonIndex < DUNGEON_OUT_ON_RESCUE) && (dungeon->dungeonFloor < gDungeonFloorCount[dungeon->dungeonIndex])) { + return gUnknown_8108084[dungeon->dungeonIndex][dungeon->dungeonFloor]; + } + else { + return 1; + } +} + +u8 sub_8090910(struct DungeonLocation *dungeon, u32 param_2) +{ + u32 rand1; + u32 rand2; + + rand1 = RandomCapped(9999); + rand2 = RandomCapped(9999); + if ((dungeon->dungeonIndex < DUNGEON_OUT_ON_RESCUE) && (dungeon->dungeonFloor < gDungeonFloorCount[dungeon->dungeonIndex])) { + return sub_8091E94(param_2, rand1, rand2); + } + else { + return 0x46; + } +} + +bool8 sub_809095C(u8 dungeon) +{ + s32 counter; + + if (dungeon >= DUNGEON_OUT_ON_RESCUE) { + return TRUE; + } + else + { + counter = 0; + if (gUnknown_810A350[0] != DUNGEON_OUT_ON_RESCUE) { + for(; gUnknown_810A350[counter] != DUNGEON_OUT_ON_RESCUE; counter++) + { + if (gUnknown_810A350[counter] == dungeon) return TRUE; + } + } + return FALSE; + } +} diff --git a/src/dungeon_engine.c b/src/dungeon_engine.c index 61f5a9d8d..08a1aef80 100644 --- a/src/dungeon_engine.c +++ b/src/dungeon_engine.c @@ -46,7 +46,7 @@ void RunDungeon(u8 param_1) if (!sub_8044B28()) { cVar2 = xxx_dungeon_80442D0(param_1); if (!sub_8044B28()) { - if (cVar2 != '\0') { + if (cVar2 != 0) { sub_807E378(); if (sub_8044B28()) { return; @@ -59,7 +59,7 @@ void RunDungeon(u8 param_1) if (!sub_8044B28()) { sub_8044AB4(); gDungeonGlobalData->speedTurnCounter++; - if ( (s16)gDungeonGlobalData->speedTurnCounter == 0x18) { + if (gDungeonGlobalData->speedTurnCounter == 24) { gDungeonGlobalData->speedTurnCounter = 0; } } diff --git a/src/dungeon_movement_1.c b/src/dungeon_movement_1.c index 4d2635d32..b1a57f06a 100644 --- a/src/dungeon_movement_1.c +++ b/src/dungeon_movement_1.c @@ -2,9 +2,15 @@ #include "dungeon_movement_1.h" #include "constants/item.h" +#include "constants/iq_skill.h" #include "constants/status.h" +#include "dungeon_engine.h" #include "dungeon_items.h" +#include "dungeon_global_data.h" #include "dungeon_movement.h" +#include "dungeon_map_access.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util.h" #include "map.h" bool8 CanCrossWalls(struct DungeonEntity *pokemon) @@ -25,3 +31,43 @@ bool8 CanCrossWalls(struct DungeonEntity *pokemon) } return FALSE; } + +bool8 sub_807049C(struct DungeonEntity *pokemon, struct Position *pos) +{ + s32 crossableTerrain; + struct MapTile *tile; + u16 tileFlags; + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + tile = GetMapTile_1(pos->x, pos->y); + if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) && + (DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) && + (tile->pokemon == NULL || (GetEntityType(tile->pokemon) == ENTITY_POKEMON))) { + if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { + crossableTerrain = GetCrossableTerrain(entityData->entityID); + tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } + switch(crossableTerrain) + { + case CROSSABLE_TERRAIN_LIQUID: + if(tileFlags == TILE_TYPE_LIQUID) return FALSE; + case CROSSABLE_TERRAIN_REGULAR: + if(tileFlags == TILE_TYPE_FLOOR) return FALSE; + break; + case CROSSABLE_TERRAIN_WALL: + default: + return FALSE; + case CROSSABLE_TERRAIN_CREVICE: + if(tileFlags != 0) return FALSE; + } + } + else return FALSE; + } + return TRUE; +} diff --git a/src/dungeon_range.c b/src/dungeon_range.c index e504a609f..d242d17fa 100644 --- a/src/dungeon_range.c +++ b/src/dungeon_range.c @@ -98,3 +98,112 @@ returnFalse: } return TRUE; } + +void sub_80833E8(struct Position *param_1, s32 *param_2) +{ + struct MapTile *tile; + struct MapRoom *room; + u32 visibility; + u32 roomIndex; + + tile = GetMapTile_1(param_1->x, param_1->y); + visibility = gDungeonGlobalData->visibility; + if (visibility == 0) { + visibility = 2; + } + roomIndex = tile->roomIndex; + if (roomIndex == CORRIDOR_ROOM_INDEX) { + param_2[0] = param_1->x - visibility; + param_2[2] = param_1->x + visibility + 1; + param_2[1] = param_1->y - visibility; + param_2[3] = param_1->y + visibility + 1; + } + else { + room = &gDungeonGlobalData->roomData[roomIndex]; + param_2[0] = room->startX - 1; + param_2[2] = room->endX + 2; + param_2[1] = room->startY - 1; + param_2[3] = room->endY + 2; + } +} + +bool8 IsTargetTwoTilesAway(struct Position *pos1, struct Position *pos2) +{ + s32 counter; + struct MapTile *tile; + s32 diff; + s32 yCoord; + s32 xCoord; + s32 xDiff; + s32 yDiff; + s32 yCoord_1; + s32 xCoord_1; + + diff = pos1->x - pos2->x; + if (diff < 0) { + diff = -diff; + } + if (diff < 2) { + diff = pos1->y - pos2->y; + if (diff < 0) { + diff = -diff; + } + if (1 >= diff) return TRUE; + } + xDiff = pos1->x - pos2->x; + if (xDiff < 0) { + xDiff = -xDiff; + } + yDiff = pos1->y - pos2->y; + if (yDiff < 0) { + yDiff = -yDiff; + } + if (yDiff < xDiff) { + yDiff = xDiff; + } + if (yDiff == 2) { + + xCoord = pos1->x; + yCoord = pos1->y; + + for(counter = 0; counter < 2; counter++){ + if (xCoord < pos2->x) { + xCoord = xCoord + 1; + } + if (xCoord > pos2->x) { + xCoord = xCoord - 1; + } + if (yCoord < pos2->y) { + yCoord = yCoord + 1; + } + if (yCoord > pos2->y) { + yCoord = yCoord -1; + } + tile = GetMapTile_1(xCoord,yCoord); + if ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == 0) return FALSE; + } + + xCoord_1 = pos2->x; + yCoord_1 = pos2->y; + + for(counter = 0; counter < 2; counter++) + { + if (xCoord_1 < pos1->x) { + xCoord_1 = xCoord_1 + 1; + } + if (xCoord_1 > pos1->x) { + xCoord_1 = xCoord_1 - 1; + } + if (yCoord_1 < pos1->y) { + yCoord_1 = yCoord_1 + 1; + } + if (yCoord_1 > pos1->y) { + yCoord_1 = yCoord_1 - 1; + } + tile = GetMapTile_1(xCoord_1, yCoord_1); + if ((tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID)) == 0) return FALSE; + } + return TRUE; + } + return FALSE; +} diff --git a/src/ground_map.c b/src/ground_map.c index 967589da7..0f882332a 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -1,18 +1,13 @@ #include "global.h" #include "memory.h" #include "debug.h" +#include "ground_script.h" -struct unkStruct_3001B6C -{ - // size: 0x110 - u8 fill0[0xE4]; - u16 unkE4; -}; +extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C; -extern struct unkStruct_3001B6C *gUnknown_3001B6C; -extern u8 gUnknown_811736C[]; extern struct DebugLocation gUnknown_8117538[]; +extern u8 gUnknown_811736C[]; extern u8 *gUnknown_3001B70; extern void sub_809D600(void *, u8 *, u32, u32, u32); diff --git a/src/ground_map_1.c b/src/ground_map_1.c index 4490ab54a..6e1f47614 100644 --- a/src/ground_map_1.c +++ b/src/ground_map_1.c @@ -1,8 +1,107 @@ #include "global.h" +#include "debug.h" +#include "ground_script.h" -extern void GroundMap_GetStationScript(u32, s16, u32, u32); +extern struct GroundScript_ExecutePP_1 *gUnknown_3001B6C; -void sub_80A4BE8(u32 r0, s16 r1) +struct unkStruct_811BAF4 { - GroundMap_GetStationScript(r0, r1, 0, 0); -} \ No newline at end of file + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + u8 *text; +}; + +extern struct unkStruct_811BAF4 gUnknown_811BAF4[10]; + +extern struct DebugLocation gUnknown_8117698; +extern struct DebugLocation gUnknown_8117644; +extern struct DebugLocation gUnknown_81175E0; +extern u8 gUnknown_8117594[]; +extern u8 gUnknown_81175EC[]; +extern u8 gUnknown_8117650[]; + +extern void GroundMap_GetStationScript(struct GroundScript_ExecutePP_3 *, s16, u32, u32); + +bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused); +extern u8 sub_809D678(void *); +extern void sub_809D710(u32,struct GroundScript_ExecutePP_3 *, s32); +extern u8 sub_809D968(void *, s32); + +void sub_80A4BE8(struct GroundScript_ExecutePP_3 *script, s16 r1) +{ + GroundMap_GetStationScript(script, r1, 0, 0); +} + +void GroundMap_ExecuteEvent(s16 param_1, u32 param_2) +{ + struct GroundScript_ExecutePP_3 script; + s32 iVar1; + u8 iVar2; + + iVar1 = param_1; + iVar2 = param_2; + + Log(0,gUnknown_8117594,iVar1,iVar2); // "GroundMap ExecuteEvent %3d %d + sub_809D710(0,&script,iVar1); + if (iVar2 != 0) { + script.scriptType = 5; + } + GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_81175E0); +} + +void GroundMap_ExecuteStation(s16 param_1, s16 param_2, s8 param_3, u32 param_4) +{ + struct GroundScript_ExecutePP_3 script; + s32 iVar1; + s32 iVar2; + s32 iVar3; + u8 iVar4; + + iVar1 = param_1; + iVar2 = param_2; + iVar3 = param_3; + iVar4 = param_4; + + Log(0,gUnknown_81175EC,iVar1,iVar2,iVar3,iVar4); // GroundMap ExecuteStation %3d %3d %3d %d + GroundMap_GetStationScript(&script,iVar1,iVar2,iVar3); + if (iVar4 != 0) { + script.scriptType = 5; + } + GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_8117644); +} + +void GroundMap_ExecuteEnter(s16 param_1) +{ + struct GroundScript_ExecutePP_3 script; + s32 iVar1; + + iVar1 = param_1; + + Log(0,gUnknown_8117650,iVar1); // GroundMap ExecuteEnter %3d + sub_80A4BE8(&script, iVar1); + script.scriptType = 2; + script.unk6 = 0; + script.unk8 = 0; + GroundScript_ExecutePP(gUnknown_3001B6C,0,&script,&gUnknown_8117698); +} + +u8 sub_80A4D14(void) +{ + return sub_809D678(gUnknown_3001B6C); +} + +u8 sub_80A4D2C(s16 param_1) +{ + s32 iVar1 = param_1; + return sub_809D968(gUnknown_3001B6C,iVar1); +} + +bool8 sub_80A4D48(s16 index) +{ + if (index == -1) return TRUE; + else if(gUnknown_811BAF4[index].unk0 == 5) return FALSE; + else if(gUnknown_811BAF4[index].unk0 != 8) return TRUE; + else return FALSE; +} diff --git a/src/ground_script.c b/src/ground_script.c index 2a6c09d1f..ea06a1e27 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -1,63 +1,30 @@ #include "global.h" #include "debug.h" +#include "ground_script.h" +extern u8 gUnknown_2039A36; +extern u8 gUnknown_2039A38[]; +extern u32 gUnknown_2039B48[]; +extern u8 gUnknown_2039AC0[]; extern u32 gUnknown_8116588; extern u32 gUnknown_8116538; extern u32 gUnknown_8116560; - extern u8 gUnknown_8116594[]; extern u8 gUnknown_8116544[]; extern u8 gUnknown_811656C[]; +extern struct DebugLocation gUnknown_81165C8; -struct GroundScript_ExecutePP_3 -{ - // size: 0xC - u32 unk0; - s16 scriptType; - s16 unk6; - u8 unk8; -}; - -struct GroundScript_ExecutePP_1_sub -{ - // size: 0x60 - /* 0x0 */ s16 scriptType; - /* 0x2 */ s16 unk2; - /* 0x4 */ u32 unk4; - /* 0x8 */ u32 unk8; - /* 0xC */ u16 unkC; - /* 0xE */ u8 unkE; - /* 0xF */ u8 fillF; - /* 0x10 */ u32 unk10; - /* 0x14 */ u32 unk14; - /* 0x18 */ u8 fill3C[0x26 - 0x18]; - /* 0x26 */ u32 unk26; - u8 fill50[0x60 - 0x2A]; -} __attribute__((packed)); - -typedef void (*Callback)(u32, void *); -struct GroundScript_ExecutePP_1_sub2 -{ - Callback callbacks[10]; // IDK the size.. -}; - -struct GroundScript_ExecutePP_1 -{ - struct GroundScript_ExecutePP_1_sub2 *unk0; - u32 unk4; - u32 fill8; - u32 unkC; - u32 fill10; - u8 fill18[0x24 - 0x14]; - struct GroundScript_ExecutePP_1_sub unk24; - struct GroundScript_ExecutePP_1_sub unk84; -}; - +extern u8 sub_809D770(struct GroundScript_ExecutePP_1 *param_1, struct DebugLocation *); extern void sub_809D520(void *); extern void sub_809D568(void *); +extern u8 sub_80AC378(void); +extern u8 sub_80AD290(void); +extern u8 sub_80A8B74(void); extern void sub_809D6E4(struct GroundScript_ExecutePP_1 *, struct GroundScript_ExecutePP_3 *, s32); +extern u8 sub_809A750(void); +extern u32 sub_80A2460(struct GroundScript_ExecutePP_1 *param_1, u32); void FatalError(u32 *, const char *, ...) __attribute__((noreturn)); bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, struct GroundScript_ExecutePP_3 *param_3, struct DebugLocation *unused) @@ -69,7 +36,7 @@ bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *para case 2: case 3: if (param_1->unk24.scriptType == 1) { - memcpy(¶m_1->unk84, ¶m_1->unk24, 0x60); + memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); break; } if (param_1->unk24.scriptType == 5) { @@ -85,11 +52,11 @@ bool8 GroundScript_ExecutePP(struct GroundScript_ExecutePP_1 *param_1, s32 *para // "execute script type error C" FatalError(&gUnknown_8116560, gUnknown_811656C); } - memcpy(¶m_1->unk84, ¶m_1->unk24, 0x60); + memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); break; case 0: if (param_1->unk24.scriptType != 1) goto _0809D84A; - memcpy(¶m_1->unk84, ¶m_1->unk24, 0x60); + memcpy(¶m_1->unk84, ¶m_1->unk24, sizeof(struct GroundScript_ExecutePP_1_sub)); break; case 1: _0809D84A: @@ -128,3 +95,97 @@ bool8 sub_809D8C0(struct GroundScript_ExecutePP_1 *param_1, s32 *param_2, s16 pa sub_809D6E4(param_1,&auStack28,param_3); return GroundScript_ExecutePP(param_1, param_2, &auStack28, debug); } + +u8 sub_809D8EC(struct GroundScript_ExecutePP_1 *param_1, s16 param_2) +{ + s32 param_2_s32; + + param_2_s32 = param_2; + + if ((param_2 == 0) && (sub_809A750() == 0)) { + param_1->unk24.unk4 = sub_80A2460(param_1,0); + return 0; + } + else { + param_1->unk24.unk22 = param_2_s32; + param_1->unk24.unk2 = 2; + gUnknown_2039A36 = 1; + return 1; + } +} + + +u8 sub_809D92C(struct GroundScript_ExecutePP_1 *r0) +{ + return sub_809D770(r0, &gUnknown_81165C8); +} + +u8 sub_809D940(void) +{ + u8 ret; + + ret = sub_80A8B74(); + ret |= sub_80AC378(); + ret |= sub_80AD290(); + return ret; +} + +bool8 sub_809D968(struct GroundScript_ExecutePP_1 * param_1, s16 param_2) +{ + s16 sVar1; + s16 sVar2; + bool8 ret; + + s32 param_2_s16 = param_2; + + ret = FALSE; + sVar1 = param_1->unk24.unk22; + if ((sVar1 != -1) && (sVar1 == param_2_s16)) { + param_1->unk24.unk22 = -1; + ret = TRUE; + } + sVar2 = param_1->unk84.unk22; + if ((sVar2 != -1) && (sVar2 == param_2_s16)) { + param_1->unk84.unk22 = -1; + ret = TRUE; + } + return ret; +} + +void sub_809D9B8(s16 index) +{ + s32 index_s16 = index; + gUnknown_2039A38[index_s16] = 1; + gUnknown_2039B48[index_s16] = 0; + gUnknown_2039A36 = 1; +} + +void sub_809D9E0(s16 index, s32 r1) +{ + s32 index_s16 = index; + gUnknown_2039A38[index_s16] = 1; + gUnknown_2039B48[index_s16] = r1; + gUnknown_2039A36 = 1; +} + +bool8 sub_809DA08(struct GroundScript_ExecutePP_1 *param_1, s16 index, u32 param_3) +{ + s32 index_s32; + + index_s32 = index; + gUnknown_2039B48[index_s32] = param_3; + if (index_s32 == 0) { + if (sub_809A750() == 0) { + return FALSE; + } + param_1->unk24.unk22 = index_s32; + } + else { + param_1->unk24.unk22 = index_s32 | 0x80; + gUnknown_2039A38[index_s32] = 1; + gUnknown_2039AC0[index_s32] = 1; + } + param_1->unk24.unk2 = 2; + gUnknown_2039A36 = 1; + return TRUE; +} diff --git a/src/post_office_guide.c b/src/post_office_guide.c index a40b8a767..43b0d7a72 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -635,11 +635,11 @@ void DisplayMissionObjectives(void) for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++) { jobInfo = GetJobSlotInfo(jobSlotIdx); - if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) + if ((((jobInfo->dungeon.dungeonIndex == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) ) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) { sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10); if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { - sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->floor); + sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->dungeon.dungeonFloor); xxx_call_draw_string(21,yCoord,auStack144,gUnknown_203B330->unk10,0); } switch(jobInfo->missionType) diff --git a/src/status.c b/src/status.c index e02a40326..a95c10d78 100644 --- a/src/status.c +++ b/src/status.c @@ -1,9 +1,11 @@ #include "global.h" #include "status.h" -#include "constants/status.h" #include "constants/ability.h" +#include "constants/status.h" +#include "constants/type.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_ai_targeting.h" +#include "dungeon_global_data.h" #include "dungeon_map_access.h" #include "dungeon_util.h" #include "dungeon_items.h" @@ -56,24 +58,52 @@ extern u8 *gUnknown_80FD500[]; extern s16 gUnknown_80F4ECC[]; extern u8 *gUnknown_80FB960[]; extern u8 *gUnknown_80FB940[]; +extern u8 *gUnknown_80FB204[]; +extern u8 *gUnknown_80FB240[]; +extern u8 *gUnknown_80FB1E0[]; +extern u8 *gUnknown_80FB1C4[]; +extern u8 *gUnknown_80FB21C[]; +extern u8 *gUnknown_80FAEA0[]; +extern u8 *gUnknown_80FAEF0[]; +extern u8 *gUnknown_80FAF3C[]; +extern u8 *gUnknown_80FAEC8[]; +extern u8 *gUnknown_80FAF1C[]; +extern u8 *gUnknown_80FAFAC[]; +extern u8 *gUnknown_80FAFD0[]; +extern u8 *gPtrCantLeechSeedSelfMessage[]; +extern u8 *gPtrCantLeechSeedMonMessage[]; +extern u8 *gUnknown_80FAA8C[]; +extern u8 *gUnknown_80FAE58[]; +extern u8 *gUnknown_80FAE7C[]; +extern s16 gUnknown_80F4EB0[]; +extern s32 gUnknown_202DE30[10]; + +extern u8 sub_8043D10(void); +extern void nullsub_75(struct DungeonEntity *); +extern void nullsub_76(struct DungeonEntity *); +extern void nullsub_77(struct DungeonEntity *); +extern void nullsub_78(struct DungeonEntity *); +extern void sub_803F580(u32); +extern void sub_8040A84(void); +extern void sub_8041CA8(struct DungeonEntity *); +extern void sub_8041C94(struct DungeonEntity *); +extern u8 sub_8045888(struct DungeonEntity *r0); +extern void sub_803ED30(s32, struct DungeonEntity *r0, u8, s32); extern void sub_8041BF8(struct DungeonEntity *); extern void sub_8041BE8(struct DungeonEntity *); extern void sub_8041CCC(struct DungeonEntity *); extern void sub_8041CB8(struct DungeonEntity *r0); extern void sub_8041C1C(struct DungeonEntity *r0); extern s32 GetMovementSpeed(struct DungeonEntity *); - extern void sub_8042060(struct DungeonEntity *, s32); extern bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3); extern void sub_8041FB4(struct DungeonEntity *r0, u32 r1); extern void sub_8041FD8(struct DungeonEntity *r0, u32 r1); extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u8 *); extern s32 sub_8009DA4(s32, s32); - extern void sub_804201C(struct DungeonEntity *r0, u32 r1); extern void sub_8041FFC(struct DungeonEntity *r0, u32 r1); - extern void SetMessageArgument(char[], struct DungeonEntity*, u32); extern void SetMessageArgument_2(char[], struct DungeonEntityData*, u32); extern void sub_8041C58(struct DungeonEntity *r0); @@ -523,14 +553,14 @@ void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) { - struct DungeonEntityData *iVar3; + struct DungeonEntityData *entityData; if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage))) { - iVar3 = target->entityData; + entityData = target->entityData; SetMessageArgument(gAvailablePokemonNames,target,0); - if (iVar3->volatileStatus != VOLATILE_STATUS_COWERING) { - iVar3->volatileStatus = VOLATILE_STATUS_COWERING; - iVar3->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1; + if (entityData->volatileStatus != VOLATILE_STATUS_COWERING) { + entityData->volatileStatus = VOLATILE_STATUS_COWERING; + entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1; sub_8041BF8(target); sub_80522F4(pokemon,target,*gUnknown_80FB940); } @@ -540,3 +570,226 @@ void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, DungeonEntityUpdateStatusSprites(target); } } + +void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *target, s32 param_3, s32 param_4, u32 displayMessage) +{ + struct DungeonEntityData *entityData; + s32 HP; + s32 maxHP; + s32 r8; + u8 displayMessage_u8; + + displayMessage_u8 = displayMessage; + + if (!EntityExists(target)) { + return; + } + + entityData = target->entityData; + maxHP = entityData->maxHP; + HP = entityData->HP; + if (((entityData->HP == entityData->maxHP) && (0 < param_4)) || (param_3 == 0)) { + entityData->maxHP += param_4; + entityData->HP += param_4; + if (entityData->maxHP > 999) { + entityData->maxHP = 999; + } + if (entityData->HP > entityData->maxHP) { + entityData->HP = entityData->maxHP; + } + if (entityData->HP == entityData->maxHP) { + HP = entityData->HP; + } + sub_8041C94(target); + } + else { + entityData->HP += param_3; + if (entityData->HP > entityData->maxHP) { + entityData->HP = entityData->maxHP; + } + sub_8041CA8(target); + } + maxHP = entityData->maxHP - maxHP; + HP = entityData->HP - HP; + DungeonEntityUpdateStatusSprites(target); + gUnknown_202DE30[0] = HP; + gUnknown_202DE30[1] = maxHP; + SetMessageArgument(gAvailablePokemonNames,target,0); + if ((HP == 0) && (maxHP == 0)) { + if (displayMessage_u8) + sub_80522F4(pokemon,target,*gUnknown_80FB204); // $m0's HP remained unchanged + } + else if ((param_4 == 0) && (HP == 0)) + { + if (displayMessage_u8) + sub_80522F4(pokemon,target,*gUnknown_80FB21C); // $m0 has full HP + } + else + { + r8 = 0; + if (maxHP != 0) { + if (sub_8045888(target) != 0) { + r8 = maxHP; + } + sub_80522F4(pokemon,target,*gUnknown_80FB240); // m0$'s max HP rose by $d1 + } + if (HP != 0) { + if (sub_8045888(target) != 0) { + r8 = HP; + } + if (param_3 != 0) { + if (entityData->maxHP == entityData->HP) { + sub_80522F4(pokemon,target,*gUnknown_80FB1E0); // $m0 was fully healed + } + else { + sub_80522F4(pokemon,target,*gUnknown_80FB1C4); // $m0 recovered $d0 HP + } + } + } + if (r8) + sub_803ED30(r8,target,1,-1); + } +} + +void HandleScannerOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target) +{ + if (EntityExists(target)) { + if (target->entityData->scanningStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FAEF0); // Item locations are already known + } + else + { + target->entityData->scanningStatus = TRUE; + nullsub_75(target); + SetMessageArgument(gAvailablePokemonNames, target, 0); + sub_80522F4(pokemon,target,*gUnknown_80FAEA0); // Item locations became evident + sub_803F580(0); + sub_8040A84(); + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void HandleStairsOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target) +{ + if (EntityExists(target)) { + if(sub_8043D10()) + { + sub_80522F4(pokemon,target,*gUnknown_80FAF3C); + } + else + { + if (target->entityData->stairSpotterStatus) { + sub_80522F4(pokemon,target,*gUnknown_80FAF1C); + } + else + { + target->entityData->stairSpotterStatus = TRUE; + nullsub_76(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FAEC8); + sub_803F580(0); + sub_8040A84(); + DungeonEntityUpdateStatusSprites(target); + } + } + } +} + +void HandleRadarOrb(struct DungeonEntity* pokemon, struct DungeonEntity* target) +{ + if (EntityExists(target)) { + if (target->entityData->radarStatus != 0) { + sub_80522F4(pokemon,target,*gUnknown_80FAFD0); + } + else + { + target->entityData->radarStatus = TRUE; + nullsub_77(target); + SetMessageArgument(gAvailablePokemonNames,target,0); + sub_80522F4(pokemon,target,*gUnknown_80FAFAC); + sub_803F580(0); + sub_8040A84(); + DungeonEntityUpdateStatusSprites(target); + } + } +} + +void HandleLeechSeed(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage) +{ + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + s32 index; + + if ((EntityExists(target)) && (GetEntityType(pokemon) == ENTITY_POKEMON)) { + entityData = target->entityData; + if (pokemon == target) { + pokemon = target; + if (displayMessage) + sub_80522F4(pokemon,target,*gPtrCantLeechSeedSelfMessage); + } + else { + if (HasSafeguardStatus(pokemon,target,displayMessage)) { + return; + } + SetMessageArgument(gAvailablePokemonNames,target,0); + if (HasType(target, TYPE_GRASS)) { + if (displayMessage) + sub_80522F4(pokemon,target,*gPtrCantLeechSeedMonMessage); + } + else + { + switch(entityData->linkedStatus) + { + case LINKED_STATUS_DESTINY_BOND: + sub_80522F4(pokemon,target,*gUnknown_80FAA8C); + default: + entityData->linkedStatus = LINKED_STATUS_LEECH_SEED; + entityData->linkedStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4EB0, TRUE) + 1; + entityData->linkedStatusDamageTimer = 0; + nullsub_78(target); + entityData->unkD8 = 0xff; + break; + case LINKED_STATUS_LEECH_SEED: + sub_80522F4(pokemon,target,*gUnknown_80FAE7C); + return; + } + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + if (pokemon == gDungeonGlobalData->allPokemon[index]) { + entityData->unkD8 = index; + entityData2 = pokemon->entityData; + entityData->unkD4 = entityData2->unk98; + } + } + sub_80522F4(pokemon,target,*gUnknown_80FAE58); + DungeonEntityUpdateStatusSprites(target); + } + } + } + } + +void sub_8078084(struct DungeonEntity * pokemon) +{ + struct DungeonEntityData *entityData; + struct DungeonEntityData *entityData2; + struct DungeonEntity *target; + s32 index; + + entityData = pokemon->entityData; + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + target = gDungeonGlobalData->allPokemon[index]; + if (EntityExists(target)) { + entityData2 = target->entityData; + if((u8)(entityData2->linkedStatus - 1) <= 1) + { + if(entityData2->unkD4 == entityData->unk98) + { + entityData2->linkedStatus = LINKED_STATUS_NONE; + DungeonEntityUpdateStatusSprites(target); + } + } + } + } + } diff --git a/src/status_checker.c b/src/status_checker.c index cb396c146..9710d0247 100644 --- a/src/status_checker.c +++ b/src/status_checker.c @@ -32,7 +32,6 @@ extern void sub_807F43C(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8078F50(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8077E4C(struct DungeonEntity *, struct DungeonEntity *); extern void sub_807DC68(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8077BB4(struct DungeonEntity *, struct DungeonEntity *, u8); extern void sub_8078A58(struct DungeonEntity *, struct DungeonEntity *, s16, u32); @@ -64,8 +63,6 @@ extern void sub_807DA14(struct DungeonEntity *, struct DungeonEntity *, s32); extern s16 sub_803D970(u32); extern u8 sub_806AA0C(s32, u32); extern void sub_806BB6C(struct DungeonEntity *, s32); -extern void sub_8077DDC(struct DungeonEntity *, struct DungeonEntity *); -extern void sub_8077ED0(struct DungeonEntity *, struct DungeonEntity *); extern void sub_8075C58(struct DungeonEntity *, struct DungeonEntity *, s32, s32); extern void sub_807E254(struct DungeonEntity *, struct DungeonEntity *, u32); extern bool8 sub_805727C(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 chance); @@ -78,9 +75,7 @@ extern u8 sub_8057308(struct DungeonEntity *, u32); extern void sub_8076F80(struct DungeonEntity *, struct DungeonEntity *, u32, u32, u32, u32); extern void sub_8077084(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern void sub_8078678(struct DungeonEntity *, struct DungeonEntity *); -extern void HealTargetHP(struct DungeonEntity *pokemon, struct DungeonEntity *r1, s32, s16, u32); extern void sub_806F324(struct DungeonEntity *, s32, u32, u32); -extern void sub_8077F40(struct DungeonEntity *, struct DungeonEntity *, u32); extern void sub_8077160(struct DungeonEntity *, struct DungeonEntity *, u32, u32); extern bool8 sub_805755C(struct DungeonEntity* pokemon,u16 moveID); extern void sub_807614C(struct DungeonEntity *, struct DungeonEntity *, u32); @@ -349,25 +344,25 @@ bool8 sub_805B214(struct DungeonEntity * pokemon,struct DungeonEntity * target,s return TRUE; } -bool8 TrapperOrbAction(struct DungeonEntity * param_1,struct DungeonEntity * param_2) +bool8 TrapperOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { bool8 trapLaid; u8 uVar2; bool8 isEnemy; trapLaid = FALSE; - isEnemy = param_1->entityData->isEnemy; + isEnemy = pokemon->entityData->isEnemy; uVar2 = 1; if (isEnemy) { uVar2 = 2; } - if (sub_807FCD4(¶m_1->posWorld,0x13,uVar2) != 0) { + if (sub_807FCD4(&pokemon->posWorld,0x13,uVar2) != 0) { trapLaid = TRUE; } else { - sub_80522F4(param_1,param_2,*gUnknown_80FC5A8); // A trap can't be laid here! + sub_80522F4(pokemon,target,*gUnknown_80FC5A8); // A trap can't be laid here! } sub_8049ED4(); return trapLaid; @@ -558,9 +553,9 @@ _0805B598: return local_24; } -bool8 sub_805B5F4(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 LeechSeedMoveAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077F40(pokemon, target, 1); + HandleLeechSeed(pokemon, target, TRUE); if (pokemon->entityData->unkFB == 0) { pokemon->entityData->unkFB = 1; } @@ -975,15 +970,15 @@ bool8 SilenceOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * ta return TRUE; } -bool8 sub_805BD70(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 ScannerOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077DDC(pokemon, target); + HandleScannerOrb(pokemon, target); return TRUE; } -bool8 sub_805BD7C(struct DungeonEntity * pokemon, struct DungeonEntity * target) +bool8 RadarOrbAction(struct DungeonEntity * pokemon, struct DungeonEntity * target) { - sub_8077ED0(pokemon, target); + HandleRadarOrb(pokemon, target); return TRUE; } @@ -1136,11 +1131,11 @@ bool8 TrapbustOrbAction(struct DungeonEntity * pokemon,struct DungeonEntity * ta return foundTrap; } -bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *param_2) +bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *target) { struct DungeonEntity **possibleTargets; s32 numPossibleTargets; - struct DungeonEntity *target; + struct DungeonEntity *targetEntity; bool8 foundTarget; s32 index; @@ -1154,15 +1149,15 @@ bool8 sub_805C080(struct DungeonEntity * pokemon, struct DungeonEntity *param_2) numPossibleTargets = MAX_TEAM_MEMBERS; } for(index = 0; index < numPossibleTargets; index++){ - target = possibleTargets[index]; - if (((EntityExists(target)) && (pokemon != target)) && - (CanTarget(pokemon,target,1,FALSE) == 0)) { - sub_807D148(pokemon,target,2,&pokemon->posWorld); + targetEntity = possibleTargets[index]; + if (((EntityExists(targetEntity)) && (pokemon != targetEntity)) && + (CanTarget(pokemon,targetEntity,1,FALSE) == 0)) { + sub_807D148(pokemon,targetEntity,2,&pokemon->posWorld); foundTarget = TRUE; } } if (!foundTarget) { - sub_80522F4(pokemon,param_2,*gUnknown_81004F0); + sub_80522F4(pokemon,target,*gUnknown_81004F0); } return foundTarget; } @@ -1329,9 +1324,9 @@ bool8 sub_805C468(struct DungeonEntity *pokemon, struct DungeonEntity *target) return TRUE; } -bool8 sub_805C474(struct DungeonEntity *pokemon, struct DungeonEntity *target) +bool8 StairsOrbAction(struct DungeonEntity *pokemon, struct DungeonEntity *target) { - sub_8077E4C(pokemon, target); + HandleStairsOrb(pokemon, target); return TRUE; } diff --git a/src/status_checks_1.c b/src/status_checks_1.c index f920ec4e3..0bfe50f3c 100644 --- a/src/status_checks_1.c +++ b/src/status_checks_1.c @@ -2,10 +2,16 @@ #include "status_checks_1.h" #include "constants/ability.h" +#include "constants/iq_skill.h" #include "constants/status.h" +#include "constants/type.h" #include "constants/weather.h" +#include "dungeon_engine.h" #include "dungeon_global_data.h" +#include "dungeon_items.h" +#include "dungeon_movement.h" #include "dungeon_pokemon_attributes.h" +#include "dungeon_map_access.h" #include "dungeon_util.h" #include "code_800D090.h" #include "code_80521D0.h" @@ -21,6 +27,128 @@ extern u8 *gUnknown_80F8968[]; extern u8 *gUnknown_80F8988[]; extern u8 gUnknown_8106FA4[]; +bool8 sub_80705F0(struct DungeonEntity *pokemon, struct Position *pos) +{ + s32 crossableTerrain; + struct MapTile *tile; + u16 tileFlags; + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + tile = GetMapTile_1(pos->x, pos->y); + if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) && + (DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) && + ((tile->pokemon == NULL) || ((GetEntityType(tile->pokemon) == ENTITY_POKEMON)))) { + if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { + crossableTerrain = GetCrossableTerrain(entityData->entityID); + tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } + + switch(crossableTerrain) + { + case CROSSABLE_TERRAIN_WALL: + default: + return FALSE; + case CROSSABLE_TERRAIN_REGULAR: + case CROSSABLE_TERRAIN_LIQUID: + case CROSSABLE_TERRAIN_CREVICE: + if(tileFlags != 0) return FALSE; + } + } + else return FALSE; + } + return TRUE; +} + +bool8 sub_80706A4(struct DungeonEntity *pokemon, struct Position *pos) +{ + s32 crossableTerrain; + struct MapTile *tile; + u16 tileFlags; + struct DungeonEntityData *entityData; + + entityData = pokemon->entityData; + tile = GetMapTile_1(pos->x, pos->y); + if ((pos->x >= 0) && (pos->y >= 0) && (DUNGEON_MAX_SIZE_X > pos->x) && + (DUNGEON_MAX_SIZE_Y > pos->y && ((tile->tileType & TILE_TYPE_MAP_EDGE) == 0)) && + ((tile->pokemon == NULL) || ((GetEntityType(tile->pokemon) == ENTITY_POKEMON) && (tile->pokemon->entityData == entityData)))) { + if (IsFixedDungeon() || (entityData->transformStatus != TRANSFORM_STATUS_MOBILE && !HasItem(pokemon, ITEM_ID_MOBILE_SCARF))) { + crossableTerrain = GetCrossableTerrain(entityData->entityID); + tileFlags = tile->tileType & (TILE_TYPE_FLOOR | TILE_TYPE_LIQUID); + if (HasIQSkill(pokemon, IQ_SKILL_ALL_TERRAIN_HIKER)) { + crossableTerrain = CROSSABLE_TERRAIN_CREVICE; + } + if (HasIQSkill(pokemon, IQ_SKILL_SUPER_MOBILE)) { + crossableTerrain = CROSSABLE_TERRAIN_WALL; + } + switch(crossableTerrain) + { + case CROSSABLE_TERRAIN_LIQUID: + if(tileFlags == TILE_TYPE_LIQUID) return FALSE; + case CROSSABLE_TERRAIN_REGULAR: + if(tileFlags == TILE_TYPE_FLOOR) return FALSE; + break; + case CROSSABLE_TERRAIN_WALL: + default: + return FALSE; + case CROSSABLE_TERRAIN_CREVICE: + if(tileFlags != 0) return FALSE; + } + } + else return FALSE; + } + return TRUE; +} + +u32 GetMovementSpeed(struct DungeonEntity *pokemon) +{ + s32 index; + s32 speed; + struct DungeonEntityData * entityData; + + entityData = pokemon->entityData; + speed = 0; + + for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++) + { + if (entityData->speedUpTurnsLeft[index + NUM_SPEED_TURN_COUNTERS] != 0) { + speed--; + } + if (entityData->speedUpTurnsLeft[index] != 0) { + speed++; + } + } + + if (entityData->nonVolatileStatus == NON_VOLATILE_STATUS_PARALYZED) { + speed--; + } + + speed += GetMoveSpeed(entityData->entityID); + if ((HasType(pokemon, TYPE_ICE)) && (GetWeather(pokemon) == WEATHER_SNOW)) { + speed++; + } + if (entityData->transformSpecies == SPECIES_DEOXYS_SPEED) { + speed++; + } + if ((entityData->entityID == SPECIES_KECLEON) && entityData->isEnemy && + gDungeonGlobalData->unk66E) { + speed++; + } + if (speed < 0) { + speed = 0; + } + if (MAX_MOVEMENT_SPEED < speed) { + speed = MAX_MOVEMENT_SPEED; + } + entityData->movementSpeed = speed; + return speed; +} + u8 sub_8070828(struct DungeonEntity *pokemon, bool8 displayMessage) { bool8 flag; diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index d85b2cbc8..d399964d5 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -6,45 +6,7 @@ #include "menu.h" #include "constants/dungeon.h" #include "wonder_mail.h" - -struct unkSubStruct_203B2F8 -{ - struct WonderMail wonderMail; - u8 *unk14; - u8 *unk18; -}; - -struct unkStruct_203B2F8 -{ - // size: 0x208 - s32 state; // state - u32 unk4; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - struct unkSubStruct_203B2F8 *unkC; - u8 unk10; - u8 fill11[0x14 - 0x11]; - u32 unk14; - u8 fill18[0x58 - 0x18]; - u8 unk58; - u8 fill59[0x64 - 0x59]; - u8 *unk64; - u32 unk68; - u32 unk6C; - u32 unk70; - u32 unk74; - u8 unk78[0xC8 - 0x78]; - u8 unkC8[4]; - u8 fillCC[0x118 - 0xCC]; - struct MenuItem unk118[8]; - struct MenuItem unk158[8]; - u16 unk198[8]; - struct UnkTextStruct2 unk1A8[4]; - u32 unk1E4; -}; -extern struct unkStruct_203B2F8 *gUnknown_203B2F8; +#include "wonder_mail_3.h" const struct UnkTextStruct2 gUnknown_80DFDD4 = { @@ -141,7 +103,6 @@ ALIGNED(4) const u8 gUnknown_80E014C[] = "New Mail"; ALIGNED(4) const u8 gUnknown_80E0158[] = "Old Mail"; static const u8 wonder_mail_3_fill[] = "pksdir0"; - extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *); extern void sub_802D63C(void); extern void sub_802D5A4(void); @@ -185,8 +146,51 @@ extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32); extern u8 *sub_8096DE8(void); extern void sub_8096A78(struct unkSubStruct_203B2F8 *); extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32); +struct unkStruct_803B344 *sub_803B344(u8); +extern void xxx_call_draw_string(u32, u32, const u8 *, u32, u32); +extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void CreateRescueTitle(void *); +extern s32 sub_8013800(void *, u32); +extern void sub_803B35C(void *, u32*); +extern u8 gUnknown_80DFDBC[]; +void sub_802CFD0(void) +{ + struct unkStruct_802C39C local; + struct unkStruct_803B344 *iVar1; + s32 r5; + s32 r4; + + sub_8008C54(gUnknown_203B2F4->unk34); + sub_80073B8(gUnknown_203B2F4->unk34); + r5 = r4 = gUnknown_203B2F4->unk1E * 8 + 10; + xxx_call_draw_string(r5,0,gUnknown_80DFDBC,gUnknown_203B2F4->unk34,0); // RESCUE EVENT + r4 -= 6; + r5 = r4 + (gUnknown_203B2F4->unk9C[2] * 8); + sub_8012BC4(r5,0,gUnknown_203B2F4->unk1E + 1,2,7,gUnknown_203B2F4->unk34); + + r5 = 0; + + if(r5 < gUnknown_203B2F4->unk1A) + { + while(r5 < gUnknown_203B2F4->unk1A) { + iVar1 = sub_803B344(gUnknown_203B2F4->unk1E * gUnknown_203B2F4->unk1C + r5); + local.unk0[0] = gUnknown_203B2F4->unk34; + local.unk4C = sub_8013800(gUnknown_203B2F4,r5); + sub_803B35C(iVar1,local.unk0); + local.unk3C[11] = 1; + local.unk50[0] = iVar1->unk14; + CreateRescueTitle(&local); + r5++; + } + } + sub_80073E0(gUnknown_203B2F4->unk34); +} + u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1) { gUnknown_203B2F8 = MemoryAlloc(0x208,8); @@ -324,23 +328,23 @@ void sub_802D2A8(void) sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0); break; case 3: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFE9C,0,0,0x101); break; case 4: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFED0,0,0,0x101); break; case 5: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFF2C,0,0,0x101); break; case 6: - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80DFFA4,0,0,0x101); break; case 7: - gUnknown_203B2F8->unk4 = 0xc; + gUnknown_203B2F8->fallbackState = 0xc; sub_80141B4(gUnknown_80E0010,0,0,0x101); break; case 8: @@ -352,7 +356,7 @@ void sub_802D2A8(void) MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28); MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78); } - switch(gUnknown_203B2F8->unkC->wonderMail.dungeon) + switch(gUnknown_203B2F8->unkC->wonderMail.dungeon.dungeonIndex) { // NOTE: subtract 1 from each of the case as the input?? case DUNGEON_ODDITY_CAVE: // 0x2B @@ -368,7 +372,7 @@ void sub_802D2A8(void) sub_8097418(0x2D, 1); break; } - gUnknown_203B2F8->unk4 = 2; + gUnknown_203B2F8->fallbackState = 2; sub_80141B4(gUnknown_80E0074,0,0,0x101); break; case 9: @@ -376,7 +380,7 @@ void sub_802D2A8(void) sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0); break; case 10: - gUnknown_203B2F8->unk4 = 0xb; + gUnknown_203B2F8->fallbackState = 0xb; sub_80141B4(gUnknown_80E0108,0,0,0x101); break; case 0xb: diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index b8f2f06a2..b940c886a 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -3,8 +3,11 @@ #include "input.h" #include "item.h" #include "memory.h" +#include "menu.h" #include "text.h" #include "wonder_mail.h" +#include "wonder_mail_3.h" +#include "code_80958E8.h" struct unkStruct_203B2FC { @@ -119,6 +122,13 @@ struct WonderMail *GetJobSlotInfo(u8); extern void sub_8096AF8(u8 *, u32, u32); extern void sub_8096EEC(void); extern void sub_803C21C(struct WonderMail *, u32 *); +extern u8 sub_8012FD8(u8 *); +extern void sub_8013114(u8 *r0, s32 *r1); +extern u32 sub_802C598(s32); +extern void sub_802C688(void); +extern void sub_8096C80(void); +extern void sub_8096C3C(u8); +extern u8 sub_802C620(void); void sub_802DE44(void); void sub_802DE60(void); @@ -126,6 +136,207 @@ void sub_802DF6C(void); void sub_802DF88(void); void sub_802DF14(void); void sub_801317C(void); +void sub_802D1A0(u32); +u32 sub_802DEE0(void); +void sub_802DF24(void); + +void sub_802D7D0(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B2F8->unk70 = menuAction; + } + switch(menuAction) { + case 3: + sub_802D1A0(2); + break; + case 6: + gUnknown_203B2F8->fallbackState = 1; + sub_802D1A0(0x10); + break; + case 4: + case 2: + default: + sub_802D1A0(0); + break; + } + } +} + +void sub_802D82C(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + if (menuAction != 1) { + gUnknown_203B2F8->unk74 = menuAction; + } + switch(menuAction) { + case 3: + sub_8096C3C(gUnknown_203B2F8->unk10); + sub_8096C80(); + sub_802D1A0(8); + break; + case 6: + gUnknown_203B2F8->fallbackState = 9; + sub_802D1A0(0x10); + break; + case 7: + gUnknown_203B2F8->fallbackState = 9; + sub_802D1A0(0xf); + break; + default: + case 1: + case 2: + case 4: + sub_802D1A0(1); + break; + } + } +} + +void sub_802D8CC(void) +{ + switch(sub_802C598(1)) { + case 0: + case 1: + break; + case 3: + gUnknown_203B2F8->unk10 = sub_802C620(); + sub_802D1A0(0xd); + break; + case 4: + gUnknown_203B2F8->unk10 = sub_802C620(); + gUnknown_203B2F8->fallbackState = 0xc; + sub_802D1A0(0xf); + break; + case 2: + sub_802C688(); + sub_802D1A0(1); + break; + } +} + +void sub_802D940(void) +{ + struct WonderMail *mail; + s32 menuAction; + + menuAction = 0; + sub_802C598(0); + if ((sub_8012FD8(gUnknown_203B2F8->unk78) == 0) && (sub_8013114(gUnknown_203B2F8->unk78,&menuAction), menuAction != 1)) { + gUnknown_203B2F8->unk6C = menuAction; + } + + switch(menuAction) + { + case 2: + if ((gUnknown_203B2F8->unk9 != 0) && (((mail = &gUnknown_203B490->unkF0[gUnknown_203B2F8->unk10]), mail->mailType > 5) && (gUnknown_203B2F8->unkA == mail->dungeon.dungeonIndex))) + { + sub_802D1A0(0x7); + } + else { + sub_802D1A0(0xE); + } + break; + case 5: + gUnknown_203B2F8->fallbackState = 0xc; + sub_802D1A0(0xf); + break; + case 1: + sub_802D1A0(0xc); + break; + } +} + +void sub_802D9F0(void) +{ + s32 menuAction; + + menuAction = 0; + sub_802C598(0); + sub_8012FD8(gUnknown_203B2F8->unk78); + if (sub_8012FD8(gUnknown_203B2F8->unkC8) == 0) { + sub_8013114(gUnknown_203B2F8->unkC8,&menuAction); + } + + switch(menuAction) + { + case 1: + case 4: + sub_802D1A0(0xc); + break; + case 3: + sub_802C688(); + sub_8096C3C(gUnknown_203B2F8->unk10); + sub_8096C80(); + sub_802D1A0(8); + break; + } +} + +void sub_802DA60(void) +{ + switch(sub_802DEE0()) + { + case 2: + case 3: + sub_802DF24(); + sub_802D1A0(gUnknown_203B2F8->fallbackState); + break; + case 0: + case 1: + break; + } +} + +void sub_802DA84(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + sub_802D1A0(gUnknown_203B2F8->fallbackState); + } +} + +bool8 sub_802DAA8(void) +{ + struct WonderMail *mail; + + mail = GetJobSlotInfo(gUnknown_203B2F8->unk10); + if (gUnknown_203B2F8->unk9 == 0) { + return 1; + } + else { + if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->unkA == mail->dungeon.dungeonIndex)) return 0; + return 1; + } +} + +bool8 sub_802DADC(void) +{ + u8 mailType; + struct WonderMail *mail; + s32 counter; + + if (gUnknown_203B2F8->unk9 == 0) { +_0802DAE8: + return 1; + } + else { + for( mail = &gUnknown_203B490->unkF0[0], counter = 0; counter < 8; mail++, counter++) + { + mailType = mail->mailType; + if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) || + ((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->unkA != mail->dungeon.dungeonIndex)))) goto _0802DAE8; + } + return 0; + } +} + +// TODO: merge above with wonder_mail_3.c bool8 sub_802DB28(u8 jobSlot, u8 param_2) {