From 0f67614ae8c5f4423866650cabe275000af9be73 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 22 Dec 2024 11:12:01 -0800 Subject: [PATCH 01/27] finish up code_8002774_2 --- asm/code_8002774_2.s | 497 ----------------------------------------- include/code_8002774.h | 8 + ld_script.txt | 1 - src/code_8002774.c | 338 ++++++++++++++++++++++++++++ src/ground_script_1.c | 41 ++-- 5 files changed, 365 insertions(+), 520 deletions(-) delete mode 100644 asm/code_8002774_2.s diff --git a/asm/code_8002774_2.s b/asm/code_8002774_2.s deleted file mode 100644 index f369a8534..000000000 --- a/asm/code_8002774_2.s +++ /dev/null @@ -1,497 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - - thumb_func_start sub_8002B5C -sub_8002B5C: - push {lr} - lsls r0, 24 - asrs r2, r0, 24 - lsls r1, 24 - asrs r1, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08002BAE - adds r0, r2, 0 - subs r0, 0x8 - subs r1, r0 - adds r0, r1, 0 - cmp r1, 0 - bge _08002B7C - adds r0, r1, 0x7 -_08002B7C: - asrs r0, 3 - lsls r0, 3 - subs r0, r1, r0 - cmp r0, 0 - beq _08002BAE - cmp r0, 0x3 - bgt _08002B98 - adds r1, r2, 0x2 - adds r0, r1, 0 - cmp r1, 0 - bge _08002BA4 - adds r0, r2, 0 - adds r0, 0x9 - b _08002BA4 -_08002B98: - adds r1, r2, 0x6 - adds r0, r1, 0 - cmp r1, 0 - bge _08002BA4 - adds r0, r2, 0 - adds r0, 0xD -_08002BA4: - asrs r0, 3 - lsls r0, 3 - subs r0, r1, r0 - lsls r0, 24 - asrs r2, r0, 24 -_08002BAE: - movs r0, 0x6 - ands r2, r0 - adds r0, r2, 0 - pop {r1} - bx r1 - thumb_func_end sub_8002B5C - - thumb_func_start SetVecFromDirectionSpeed -SetVecFromDirectionSpeed: - push {r4,r5,lr} - lsls r1, 24 - asrs r1, 21 - ldr r3, _08002BD8 - adds r1, r3 - ldr r5, [r1] - adds r3, r5, 0 - muls r3, r2 - ldr r1, [r1, 0x4] - adds r4, r1, 0 - muls r4, r2 - str r3, [r0] - str r4, [r0, 0x4] - pop {r4,r5} - pop {r2} - bx r2 - .align 2, 0 -_08002BD8: .4byte gVectorDirections - thumb_func_end SetVecFromDirectionSpeed - - thumb_func_start VecDirection8Sign -VecDirection8Sign: - push {lr} - ldr r1, [r0] - cmp r1, 0 - bge _08002BFA - ldr r0, [r0, 0x4] - cmp r0, 0 - bge _08002BEE - movs r0, 0x5 - b _08002C2A -_08002BEE: - cmp r0, 0 - ble _08002BF6 - movs r0, 0x7 - b _08002C2A -_08002BF6: - movs r0, 0x6 - b _08002C2A -_08002BFA: - cmp r1, 0 - ble _08002C14 - ldr r0, [r0, 0x4] - cmp r0, 0 - bge _08002C08 - movs r0, 0x3 - b _08002C2A -_08002C08: - cmp r0, 0 - ble _08002C10 - movs r0, 0x1 - b _08002C2A -_08002C10: - movs r0, 0x2 - b _08002C2A -_08002C14: - ldr r0, [r0, 0x4] - cmp r0, 0 - bge _08002C1E - movs r0, 0x4 - b _08002C2A -_08002C1E: - cmp r0, 0 - bgt _08002C28 - movs r0, 0x1 - negs r0, r0 - b _08002C2A -_08002C28: - movs r0, 0 -_08002C2A: - pop {r1} - bx r1 - thumb_func_end VecDirection8Sign - - thumb_func_start VecDirection4SignYX -VecDirection4SignYX: - push {lr} - ldr r1, [r0, 0x4] - cmp r1, 0 - bge _08002C3C - movs r0, 0x4 - b _08002C5A -_08002C3C: - cmp r1, 0 - ble _08002C44 - movs r0, 0 - b _08002C5A -_08002C44: - ldr r0, [r0] - cmp r0, 0 - bge _08002C4E - movs r0, 0x6 - b _08002C5A -_08002C4E: - cmp r0, 0 - bgt _08002C58 - movs r0, 0x1 - negs r0, r0 - b _08002C5A -_08002C58: - movs r0, 0x2 -_08002C5A: - pop {r1} - bx r1 - thumb_func_end VecDirection4SignYX - - thumb_func_start VecDirection8Radial -VecDirection8Radial: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, [r4] - cmp r0, 0 - bge _08002C6C - negs r0, r0 -_08002C6C: - adds r1, r0, 0 - ldr r3, [r4, 0x4] - adds r5, r3, 0 - cmp r3, 0 - bge _08002C78 - negs r5, r3 -_08002C78: - adds r2, r5, 0 - ldr r4, [r4] - cmp r4, 0 - bge _08002CA8 - cmp r3, 0 - bge _08002C94 - lsls r0, 1 - cmp r2, r0 - bgt _08002CD8 - lsls r0, r5, 1 - cmp r1, r0 - bgt _08002CA0 - movs r0, 0x5 - b _08002CE8 -_08002C94: - lsls r0, 1 - cmp r2, r0 - bgt _08002CE6 - lsls r0, r5, 1 - cmp r1, r0 - ble _08002CA4 -_08002CA0: - movs r0, 0x6 - b _08002CE8 -_08002CA4: - movs r0, 0x7 - b _08002CE8 -_08002CA8: - cmp r4, 0 - ble _08002CD4 - cmp r3, 0 - bge _08002CC0 - lsls r0, 1 - cmp r2, r0 - bgt _08002CD8 - lsls r0, r5, 1 - cmp r1, r0 - bgt _08002CCC - movs r0, 0x3 - b _08002CE8 -_08002CC0: - lsls r0, 1 - cmp r2, r0 - bgt _08002CE6 - lsls r0, r5, 1 - cmp r1, r0 - ble _08002CD0 -_08002CCC: - movs r0, 0x2 - b _08002CE8 -_08002CD0: - movs r0, 0x1 - b _08002CE8 -_08002CD4: - cmp r3, 0 - bge _08002CDC -_08002CD8: - movs r0, 0x4 - b _08002CE8 -_08002CDC: - cmp r3, 0 - bgt _08002CE6 - movs r0, 0x1 - negs r0, r0 - b _08002CE8 -_08002CE6: - movs r0, 0 -_08002CE8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end VecDirection8Radial - - thumb_func_start VecDirection4Radial -VecDirection4Radial: - push {r4,lr} - adds r4, r0, 0 - ldr r3, [r4] - cmp r3, 0 - bge _08002CFC - negs r3, r3 -_08002CFC: - adds r1, r3, 0 - ldr r3, [r4, 0x4] - adds r0, r3, 0 - cmp r3, 0 - bge _08002D08 - negs r0, r3 -_08002D08: - adds r2, r0, 0 - ldr r0, [r4] - cmp r0, 0 - bge _08002D22 - cmp r3, 0 - bge _08002D1A - cmp r2, r1 - bgt _08002D3C - b _08002D1E -_08002D1A: - cmp r2, r1 - bgt _08002D4A -_08002D1E: - movs r0, 0x6 - b _08002D4C -_08002D22: - cmp r0, 0 - ble _08002D38 - cmp r3, 0 - bge _08002D30 - cmp r2, r1 - bgt _08002D3C - b _08002D34 -_08002D30: - cmp r2, r1 - bgt _08002D4A -_08002D34: - movs r0, 0x2 - b _08002D4C -_08002D38: - cmp r3, 0 - bge _08002D40 -_08002D3C: - movs r0, 0x4 - b _08002D4C -_08002D40: - cmp r3, 0 - bgt _08002D4A - movs r0, 0x1 - negs r0, r0 - b _08002D4C -_08002D4A: - movs r0, 0 -_08002D4C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end VecDirection4Radial - - thumb_func_start SizedDeltaDirection4 -SizedDeltaDirection4: - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r1, 0 - adds r5, r3, 0 - ldr r3, [r2] - ldr r1, [r0] - subs r3, r1 - str r3, [sp] - ldr r1, [r2, 0x4] - ldr r0, [r0, 0x4] - subs r1, r0 - str r1, [sp, 0x4] - adds r2, r3, 0 - cmp r2, 0 - blt _08002D8A - adds r2, 0x1 - ldr r0, [r4] - ldr r1, [r5] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - subs r2, r0 - str r2, [sp] - cmp r2, 0 - bge _08002DA4 - b _08002DA0 -_08002D8A: - subs r2, r3, 0x1 - ldr r0, [r4] - ldr r1, [r5] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - str r2, [sp] - cmp r2, 0 - ble _08002DA4 -_08002DA0: - movs r0, 0 - str r0, [sp] -_08002DA4: - ldr r2, [sp, 0x4] - cmp r2, 0 - blt _08002DC2 - adds r2, 0x1 - ldr r0, [r4, 0x4] - ldr r1, [r5, 0x4] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - subs r2, r0 - str r2, [sp, 0x4] - cmp r2, 0 - bge _08002DDC - b _08002DD8 -_08002DC2: - subs r2, 0x1 - ldr r0, [r4, 0x4] - ldr r1, [r5, 0x4] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - str r2, [sp, 0x4] - cmp r2, 0 - ble _08002DDC -_08002DD8: - movs r0, 0 - str r0, [sp, 0x4] -_08002DDC: - mov r0, sp - bl VecDirection4Radial - lsls r0, 24 - asrs r0, 24 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end SizedDeltaDirection4 - - thumb_func_start SizedDeltaDirection8 -SizedDeltaDirection8: - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r1, 0 - adds r5, r3, 0 - ldr r3, [r2] - ldr r1, [r0] - subs r3, r1 - str r3, [sp] - ldr r1, [r2, 0x4] - ldr r0, [r0, 0x4] - subs r1, r0 - str r1, [sp, 0x4] - adds r2, r3, 0 - cmp r2, 0 - blt _08002E26 - adds r2, 0x1 - ldr r0, [r4] - ldr r1, [r5] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - subs r2, r0 - str r2, [sp] - cmp r2, 0 - bge _08002E40 - b _08002E3C -_08002E26: - subs r2, r3, 0x1 - ldr r0, [r4] - ldr r1, [r5] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - str r2, [sp] - cmp r2, 0 - ble _08002E40 -_08002E3C: - movs r0, 0 - str r0, [sp] -_08002E40: - ldr r2, [sp, 0x4] - cmp r2, 0 - blt _08002E5E - adds r2, 0x1 - ldr r0, [r4, 0x4] - ldr r1, [r5, 0x4] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - subs r2, r0 - str r2, [sp, 0x4] - cmp r2, 0 - bge _08002E78 - b _08002E74 -_08002E5E: - subs r2, 0x1 - ldr r0, [r4, 0x4] - ldr r1, [r5, 0x4] - adds r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - adds r2, r0 - str r2, [sp, 0x4] - cmp r2, 0 - ble _08002E78 -_08002E74: - movs r0, 0 - str r0, [sp, 0x4] -_08002E78: - mov r0, sp - bl VecDirection8Radial - lsls r0, 24 - asrs r0, 24 - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end SizedDeltaDirection8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/code_8002774.h b/include/code_8002774.h index 334ffef80..0d3d6c4d5 100644 --- a/include/code_8002774.h +++ b/include/code_8002774.h @@ -1,7 +1,15 @@ #ifndef GUARD_CODE_8002774_H #define GUARD_CODE_8002774_H +#include "structs/str_position.h" + s32 sub_8002A70(s32 a0, s32 a1, s32 a2); s32 sub_8002B04(s32, s32); +s32 VecDirection8Sign(PixelPos *param_1); +s32 VecDirection4SignYX(PixelPos *param_1); +s8 VecDirection8Radial(PixelPos *param_1); +s8 VecDirection4Radial(PixelPos *param_1); +s8 SizedDeltaDirection4(PixelPos *r0, PixelPos *r1, PixelPos *r2, PixelPos *r3); +s8 SizedDeltaDirection8(PixelPos *r0, PixelPos *r1, PixelPos *r2, PixelPos *r3); #endif diff --git a/ld_script.txt b/ld_script.txt index a3e408d90..b6e05c121 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -56,7 +56,6 @@ SECTIONS { src/event_flag.o(.text); asm/code_8002774.o(.text); src/code_8002774.o(.text); - asm/code_8002774_2.o(.text); src/memory.o(.text); asm/code_80035F0.o(.text); src/other_random.o(.text); diff --git a/src/code_8002774.c b/src/code_8002774.c index b7e52b77e..4f768d31e 100644 --- a/src/code_8002774.c +++ b/src/code_8002774.c @@ -1,6 +1,7 @@ #include "global.h" #include "code_8002774.h" #include "constants/direction.h" +#include "structs/str_position.h" s32 sub_8002A70(s32 _direction1, s32 _direction2, s32 _caseId) { @@ -66,3 +67,340 @@ s32 sub_8002B04(s32 _direction1, s32 _direction2) } return direction1; } + +s32 sub_8002B5C(int _direction1, int _direction2) +{ + int newDirection; + int iVar2; + int direction1; + int direction2; + + direction1 = (s8)_direction1; + direction2 = (s8)_direction2; + + if (direction2 != -1) { + iVar2 = (direction2 + NUM_DIRECTIONS) - direction1; + newDirection = iVar2; + if (iVar2 < 0) { + newDirection = iVar2 + 7; + } + newDirection = iVar2 + ((newDirection >> 3) * -8); + + if (newDirection != 0) { + if (newDirection < 4) { + iVar2 = direction1 + 2; + newDirection = iVar2; + if (iVar2 < 0) { + newDirection = direction1 + 9; + } + } + else { + iVar2 = direction1 + 6; + newDirection = iVar2; + if (iVar2 < 0) { + newDirection = direction1 + 0xd; + } + } + direction1 = (s8)(iVar2 + (newDirection >> 3) * -8); + } + } + return direction1 & 6; +} + +NAKED void SetVecFromDirectionSpeed(void) +{ + asm_unified( + "\tpush {r4,r5,lr}\n" + "\tlsls r1, 24\n" + "\tasrs r1, 21\n" + "\tldr r3, _08002BD8\n" + "\tadds r1, r3\n" + "\tldr r5, [r1]\n" + "\tadds r3, r5, 0\n" + "\tmuls r3, r2\n" + "\tldr r1, [r1, 0x4]\n" + "\tadds r4, r1, 0\n" + "\tmuls r4, r2\n" + "\tstr r3, [r0]\n" + "\tstr r4, [r0, 0x4]\n" + "\tpop {r4,r5}\n" + "\tpop {r2}\n" + "\tbx r2\n" + "\t.align 2, 0\n" +"_08002BD8: .4byte gVectorDirections"); +} + +s32 VecDirection8Sign(PixelPos *param_1) +{ + if (param_1->x < 0) { + if (param_1->y < 0) { + return 5; + } + else if (param_1->y >= 1) { + return 7; + } + else { + return 6; + } + } + else if (param_1->x >= 1) { + if (param_1->y < 0) { + return 3; + } + else if (param_1->y > 0) { + return 1; + } + else { + return 2; + } + } + else if (param_1->y < 0) { + return 4; + } + else if (param_1->y > 0) { + return 0; + } + else { + return -1; + } +} + +s32 VecDirection4SignYX(PixelPos *param_1) +{ + if (param_1->y < 0) { + return 4; + } + else if (param_1->y > 0) { + return 0; + } + else { + if (param_1->x < 0) { + return 6; + } + else if (param_1->x > 0) { + return 2; + } + else { + return -1; + } + } +} + +// https://decomp.me/scratch/bD5wO +s8 VecDirection8Radial(PixelPos *param_1) +{ + register s32 r0; + register s32 r1 asm("r1"); + register s32 r2 asm("r2"); + register s32 r3 asm("r3"); + register s32 r4 asm("r4"); + register s32 r5; + + + r0 = param_1->x; + if (r0 < 0) { + r0 = -r0; + } + r1 = r0; + r3 = param_1->y; + r5 = r3; + if (r3 < 0) { + r5 = -r3; + } + r2 = r5; + r4 = param_1->x; + if (r4 < 0) { + if (r3 < 0) { + if (r2 > r0 * 2) { + return 4; + } + if (r1 <= r5 * 2) { + return 5; + } + return 6; + } + if (r2 <= r0 * 2) { + if (r1 > r5 * 2) { + return 6; + } + return 7; + } + } + else { + if (0 < r4) { + if (r3 < 0) { + if (r2 > r0 * 2) { + return 4; + } + if (r1 <= r5 * 2) { + return 3; + } + return 2; + } + else { + if (r2 > r0 * 2) { + return 0; + } + if (r1 > r5 * 2) { + return 2; + } + return 1; + } + + } + if (0 > r3) { + return 4; + } + if (r3 < 1) { + return -1; + } + } + return 0; +} + +// https://decomp.me/scratch/Bgbxc +s8 VecDirection4Radial(PixelPos *param_1) +{ + register s32 r0 asm("r3"); + register s32 r1 asm("r1"); + register s32 r2 asm("r2"); + register s32 r3; + register s32 r4; + register s32 r5 asm("r0"); + + r0 = param_1->x; + if (r0 < 0) { + r0 = -r0; + } + r1 = r0; + r3 = param_1->y; + r5 = r3; + if (r3 < 0) { + r5 = -r3; + } + r2 = r5; + r4 = param_1->x; + if (r4 < 0) { + if (r3 < 0) { + if (r2 > r1) { + return 4; + } + else + return 6; + } + if (r2 <= r1) { + return 6; + } + } + else { + if (0 < r4) { + if (r3 < 0) { + if (r2 > r1) { + return 4; + } + else + return 2; + } + else { + if (r2 > r1) { + return 0; + } + return 2; + } + + } + if (0 > r3) { + return 4; + } + if (r3 < 1) { + return -1; + } + } + return 0; +} + +s8 SizedDeltaDirection4(PixelPos *r0, PixelPos *r1, PixelPos *r2, PixelPos *r3) { + PixelPos stack; + s32 iVar1; + s32 iVar2; + s32 iVar3; + + stack.x = r2->x - r0->x; + stack.y = r2->y - r0->y; + + if(stack.x >= 0) + { + iVar3 = (stack.x + 1); + iVar3 -= ((r1->x + r3->x) / 2); + stack.x = iVar3; + if(stack.x < 0) stack.x = 0; + } + else + { + iVar1 = (stack.x - 1); + iVar1 += ((r1->x + r3->x) / 2); + stack.x = iVar1; + if(stack.x > 0) stack.x = 0; + } + + if(stack.y >= 0) + { + iVar2 = (stack.y + 1); + iVar2 -= ((r1->y + r3->y) / 2); + stack.y = iVar2; + if(stack.y < 0) stack.y = 0; + } + else + { + iVar1 = (stack.y - 1); + iVar1 += ((r1->y + r3->y) / 2); + stack.y = iVar1; + if(stack.y > 0) stack.y = 0; + } + + + return VecDirection4Radial(&stack); +} + +s8 SizedDeltaDirection8(PixelPos *r0, PixelPos *r1, PixelPos *r2, PixelPos *r3) { + PixelPos stack; + s32 iVar1; + s32 iVar2; + s32 iVar3; + + stack.x = r2->x - r0->x; + stack.y = r2->y - r0->y; + + if(stack.x >= 0) + { + iVar3 = (stack.x + 1); + iVar3 -= ((r1->x + r3->x) / 2); + stack.x = iVar3; + if(stack.x < 0) stack.x = 0; + } + else + { + iVar1 = (stack.x - 1); + iVar1 += ((r1->x + r3->x) / 2); + stack.x = iVar1; + if(stack.x > 0) stack.x = 0; + } + + if(stack.y >= 0) + { + iVar2 = (stack.y + 1); + iVar2 -= ((r1->y + r3->y) / 2); + stack.y = iVar2; + if(stack.y < 0) stack.y = 0; + } + else + { + iVar1 = (stack.y - 1); + iVar1 += ((r1->y + r3->y) / 2); + stack.y = iVar1; + if(stack.y > 0) stack.y = 0; + } + + + return VecDirection8Radial(&stack); +} diff --git a/src/ground_script_1.c b/src/ground_script_1.c index e59716a85..2cd9d1ac6 100644 --- a/src/ground_script_1.c +++ b/src/ground_script_1.c @@ -1,4 +1,5 @@ #include "global.h" +#include "code_8002774.h" #include "debug.h" #include "event_flag.h" #include "ground_link.h" @@ -15,6 +16,7 @@ #include "math.h" #include "ground_main.h" #include "code_80A26CC.h" +#include "wigglytuff_shop1.h" // Size: unknown typedef struct UnkAction3D @@ -51,11 +53,6 @@ s16 GroundEffect_Add(s16 id, GroundEffectData*, s16 group, s8 sector); // Beware of the declarations without specified arguments, returning u32 or s32, these were quickly hacked in to get the code to compile and link // The return values are almost certainly NOT correct and will need to be rechecked when moving to header files char sub_8002984(s32, u8); -s8 VecDirection8Radial(PixelPos*); -s8 SizedDeltaDirection4(PixelPos*, PixelPos*, PixelPos*, PixelPos*); -s8 SizedDeltaDirection8(PixelPos*, PixelPos*, PixelPos*, PixelPos*); - -bool8 sub_8021700(s32); bool8 sub_802FCF0(void); @@ -204,7 +201,7 @@ s32 ExecuteScriptCommand(Action *action) { break; } case 0x03: { - if ((s8)sub_8021700(curCmd.arg1)) { + if (sub_8021700(curCmd.arg1)) { action->scriptData.script.ptr = ResolveJump(action, -1); } else { sub_8098D80(curCmd.argShort); @@ -628,7 +625,7 @@ s32 ExecuteScriptCommand(Action *action) { case 0x2c: { if (!(s8)sub_809A768()) break; sub_80A87AC(0, 10); - if ((s8)GroundScriptCheckLockCondition(action, 0)) return 2; + if (GroundScriptCheckLockCondition(action, 0)) return 2; break; } case 0x30: { @@ -737,20 +734,20 @@ s32 ExecuteScriptCommand(Action *action) { } if (ret) { sub_80A87AC(0, 10); - if ((s8)GroundScriptCheckLockCondition(action, 0)) return 2; + if (GroundScriptCheckLockCondition(action, 0)) return 2; } break; } case 0x39: { if ((s8)sub_809AF6C(curCmd.argShort, curCmd.argPtr) && curCmd.argShort >= 0) { sub_80A87AC(0, 10); - if ((s8)GroundScriptCheckLockCondition(action, 0)) return 2; + if (GroundScriptCheckLockCondition(action, 0)) return 2; } break; } case 0x3a: { sub_809AFC8((u8)curCmd.argByte > 0, curCmd.arg1, (s16)curCmd.arg2, curCmd.argPtr); - if ((s8)GroundScriptCheckLockCondition(action, 1)) { + if (GroundScriptCheckLockCondition(action, 1)) { sub_80A87AC(0, 11); return 2; } @@ -1481,19 +1478,19 @@ s32 ExecuteScriptCommand(Action *action) { break; } case 0xb3: { - if ((u8)JudgeVarWithImmediate(NULL, curCmd.argShort, curCmd.arg1, JUDGE_EQ)) { + if (JudgeVarWithImmediate(NULL, curCmd.argShort, curCmd.arg1, JUDGE_EQ)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; } case 0xb4: { - if ((s8)JudgeVarWithImmediate(scriptData->localVars.buf, (s16)curCmd.arg1, curCmd.arg2, (u8)curCmd.argByte)) { + if (JudgeVarWithImmediate(scriptData->localVars.buf, (s16)curCmd.arg1, curCmd.arg2, (u8)curCmd.argByte)) { scriptData->script.ptr = FindLabel(action, curCmd.argShort); } break; } case 0xb5: { - if ((s8)JudgeVarWithVar(scriptData->localVars.buf, (s16)curCmd.arg1, (s16)curCmd.arg2, (u8)curCmd.argByte)) { + if (JudgeVarWithVar(scriptData->localVars.buf, (s16)curCmd.arg1, (s16)curCmd.arg2, (u8)curCmd.argByte)) { scriptData->script.ptr = FindLabel(action, curCmd.argShort); } break; @@ -1505,43 +1502,43 @@ s32 ExecuteScriptCommand(Action *action) { break; } case 0xb7: { - if ((s8)FlagJudge(GetScriptVarArraySum(scriptData->localVars.buf, (s16)curCmd.arg1), curCmd.arg2, (u8)curCmd.argByte)) { + if (FlagJudge(GetScriptVarArraySum(scriptData->localVars.buf, (s16)curCmd.arg1), curCmd.arg2, (u8)curCmd.argByte)) { scriptData->script.ptr = FindLabel(action, curCmd.argShort); } break; } case 0xb8: { - if ((s8)ScriptVarScenarioBefore(curCmd.argShort, curCmd.arg1, curCmd.arg2)) { + if (ScriptVarScenarioBefore(curCmd.argShort, curCmd.arg1, curCmd.arg2)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; } case 0xb9: { - if ((s8)ScriptVarScenarioEqual(curCmd.argShort, curCmd.arg1, curCmd.arg2)) { + if (ScriptVarScenarioEqual(curCmd.argShort, curCmd.arg1, curCmd.arg2)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; } case 0xba: { - if ((s8)ScriptVarScenarioAfter(curCmd.argShort, curCmd.arg1, curCmd.arg2)) { + if (ScriptVarScenarioAfter(curCmd.argShort, curCmd.arg1, curCmd.arg2)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; } case 0xbb: { - if ((s8)sub_80023E4(curCmd.argShort)) { + if (sub_80023E4(curCmd.argShort)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; } case 0xbc: { - if ((s8)sub_8098100((u8)curCmd.argShort)) { + if (sub_8098100(curCmd.argShort)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; } case 0xbd: { - if ((s8)sub_80026CC((s16)curCmd.arg1)) { + if (sub_80026CC(curCmd.arg1)) { scriptData->script.ptr = FindLabel(action, (u8)curCmd.argByte); } break; @@ -1718,7 +1715,7 @@ s32 ExecuteScriptCommand(Action *action) { break; } } - if ((s8)GroundScriptCheckLockCondition(action, 1)) { + if (GroundScriptCheckLockCondition(action, 1)) { sub_80A87AC(0, 11); return 2; } @@ -1754,7 +1751,7 @@ s32 ExecuteScriptCommand(Action *action) { } case 0xe5: { scriptData->branchDiscriminant = curCmd.argShort; - if ((s8)GroundScriptLockCond(action, curCmd.argShort, curCmd.argByte)) { + if (GroundScriptLockCond(action, curCmd.argShort, curCmd.argByte)) { return 2; } break; From a5603cfa69175ad80489f9f9857597429f361a0d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 22 Dec 2024 21:10:31 -0800 Subject: [PATCH 02/27] decomp more and clean up of code --- asm/code_8002774.s | 194 ------------------------------- src/code_8002774.c | 277 ++++++++++++++++++++++++++++++--------------- src/code_809D148.c | 85 +++++++------- 3 files changed, 223 insertions(+), 333 deletions(-) diff --git a/asm/code_8002774.s b/asm/code_8002774.s index 9cd18cc4c..0091081d4 100644 --- a/asm/code_8002774.s +++ b/asm/code_8002774.s @@ -223,198 +223,4 @@ _08002904: .4byte 0x3f800000 _08002908: .4byte 0x43800000 thumb_func_end sub_800282C - thumb_func_start sub_800290C -sub_800290C: - push {lr} - ldr r3, [r0] - cmp r3, r1 - ble _08002918 - str r1, [r0] - b _08002920 -_08002918: - negs r2, r1 - cmp r3, r2 - bge _08002920 - str r2, [r0] -_08002920: - ldr r2, [r0, 0x4] - cmp r2, r1 - bgt _0800292C - negs r1, r1 - cmp r2, r1 - bge _0800292E -_0800292C: - str r1, [r0, 0x4] -_0800292E: - pop {r0} - bx r0 - thumb_func_end sub_800290C - - thumb_func_start sub_8002934 -sub_8002934: - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - mov r10, r0 - adds r6, r1, 0 - mov r8, r2 - adds r4, r3, 0 - ldr r5, [sp, 0x1C] - adds r0, r4, r5 - mov r9, r0 - ldr r0, [r6] - muls r0, r4 - ldr r1, [r2] - muls r1, r5 - adds r0, r1 - mov r1, r9 - bl __divsi3 - mov r1, r10 - str r0, [r1] - ldr r0, [r6, 0x4] - muls r0, r4 - mov r2, r8 - ldr r1, [r2, 0x4] - muls r1, r5 - adds r0, r1 - mov r1, r9 - bl __divsi3 - mov r1, r10 - str r0, [r1, 0x4] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8002934 - - thumb_func_start sub_8002984 -sub_8002984: - push {r4,lr} - lsls r0, 24 - asrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - subs r0, r1, 0x1 - cmp r0, 0x8 - bhi _08002A68 - lsls r0, 2 - ldr r1, _080029A0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080029A0: .4byte _080029A4 - .align 2, 0 -_080029A4: - .4byte _080029C8 - .4byte _080029D0 - .4byte _080029D8 - .4byte _080029E0 - .4byte _080029E8 - .4byte _080029F4 - .4byte _08002A34 - .4byte _08002A4E - .4byte _08002A5E -_080029C8: - cmp r4, 0 - blt _08002A68 - adds r4, 0x7 - b _080029EE -_080029D0: - cmp r4, 0 - blt _08002A68 - adds r4, 0x1 - b _080029EE -_080029D8: - cmp r4, 0 - blt _08002A68 - adds r4, 0x6 - b _080029EE -_080029E0: - cmp r4, 0 - blt _08002A68 - adds r4, 0x2 - b _080029EE -_080029E8: - cmp r4, 0 - blt _08002A68 - adds r4, 0x4 -_080029EE: - movs r0, 0x7 - ands r4, r0 - b _08002A68 -_080029F4: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _08002A18 - movs r0, 0x2 - bl OtherRandInt - adds r1, r4, 0x7 - lsls r0, 1 - adds r1, r0 - adds r0, r1, 0 - cmp r1, 0 - bge _08002A10 - adds r0, r1, 0x7 -_08002A10: - asrs r0, 3 - lsls r0, 3 - subs r0, r1, r0 - b _08002A64 -_08002A18: - movs r0, 0x3 - bl OtherRandInt - adds r1, r4, 0x6 - lsls r0, 1 - adds r1, r0 - adds r0, r1, 0 - cmp r1, 0 - bge _08002A2C - adds r0, r1, 0x7 -_08002A2C: - asrs r0, 3 - lsls r0, 3 - subs r0, r1, r0 - b _08002A64 -_08002A34: - movs r0, 0x3 - bl OtherRandInt - adds r1, r4, 0x7 - adds r1, r0 - adds r0, r1, 0 - cmp r1, 0 - bge _08002A46 - adds r0, r1, 0x7 -_08002A46: - asrs r0, 3 - lsls r0, 3 - subs r0, r1, r0 - b _08002A64 -_08002A4E: - movs r0, 0x8 - bl OtherRandInt - movs r2, 0x2 - negs r2, r2 - adds r1, r2, 0 - ands r0, r1 - b _08002A64 -_08002A5E: - movs r0, 0x8 - bl OtherRandInt -_08002A64: - lsls r0, 24 - asrs r4, r0, 24 -_08002A68: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8002984 - .align 2, 0 @ Don't pad with nop. diff --git a/src/code_8002774.c b/src/code_8002774.c index 4f768d31e..806d6f959 100644 --- a/src/code_8002774.c +++ b/src/code_8002774.c @@ -2,6 +2,93 @@ #include "code_8002774.h" #include "constants/direction.h" #include "structs/str_position.h" +#include "other_random.h" + + +void sub_800290C(PixelPos *param_1, s32 param_2) +{ + if (param_1->x > param_2) + param_1->x = param_2; + else if (param_1->x < -param_2) + param_1->x = -param_2; + if (param_1->y > param_2) + param_1->y = param_2; + else if(param_1->y < -param_2) + param_1->y = -param_2; +} + +void sub_8002934(PixelPos *param_1, PixelPos *param_2, PixelPos *param_3, s32 param_4, s32 param_5) +{ + s32 r9 = (param_4 + param_5); + param_1->x = (param_4 * param_2->x + param_5 * param_3->x) / r9; + param_1->y = (param_4 * param_2->y + param_5 * param_3->y) / r9; +} + +static inline s8 sub_8002984_sub(s32 direction1, s32 rand, s32 add, s32 multi) +{ + return (s8)(((direction1 + add) + OtherRandInt(rand) * multi) % NUM_DIRECTIONS); +} + +s32 sub_8002984(s32 _direction1, u32 caseID) +{ + s32 direction1; + + direction1 = (s8)_direction1; + switch((u8)caseID) { + case 1: + if (direction1 >= 0) { + direction1 += 7; + direction1 &= DIRECTION_MASK; + } + break; + case 2: + if (direction1 >= 0) { + direction1 += 1; + direction1 &= DIRECTION_MASK; + } + break; + case 3: + if (direction1 >= 0) { + direction1 += 6; + direction1 &= DIRECTION_MASK; + } + break; + case 4: + if (direction1 >= 0) { + direction1 += 2; + direction1 &= DIRECTION_MASK; + } + break; + case 5: + if (direction1 >= 0) { + direction1 += 4; + direction1 &= DIRECTION_MASK; + } + break; + case 6: + if ((direction1 & 1) != 0) { + direction1 = sub_8002984_sub(direction1, 2, 7, 2); + } + else + { + direction1 = sub_8002984_sub(direction1, 3, 6, 2); + } + break; + case 7: + direction1 = sub_8002984_sub(direction1, 3, 7, 1); + break; + case 8: + direction1 = (s8)(OtherRandInt(NUM_DIRECTIONS) & 0xfe); + break; + case 9: + direction1 = (s8)OtherRandInt(NUM_DIRECTIONS); + break; + default: + break; + } + return direction1; +} + s32 sub_8002A70(s32 _direction1, s32 _direction2, s32 _caseId) { @@ -68,43 +155,29 @@ s32 sub_8002B04(s32 _direction1, s32 _direction2) return direction1; } -s32 sub_8002B5C(int _direction1, int _direction2) +UNUSED s32 sub_8002B5C(s32 _direction1, s32 _direction2) { - int newDirection; - int iVar2; - int direction1; - int direction2; - - direction1 = (s8)_direction1; - direction2 = (s8)_direction2; - - if (direction2 != -1) { - iVar2 = (direction2 + NUM_DIRECTIONS) - direction1; - newDirection = iVar2; - if (iVar2 < 0) { - newDirection = iVar2 + 7; - } - newDirection = iVar2 + ((newDirection >> 3) * -8); - - if (newDirection != 0) { - if (newDirection < 4) { - iVar2 = direction1 + 2; - newDirection = iVar2; - if (iVar2 < 0) { - newDirection = direction1 + 9; + int newDirection; + int direction1; + int direction2; + + direction1 = (s8)_direction1; + direction2 = (s8)_direction2; + + if (direction2 != -1) { + newDirection = ((direction2 + NUM_DIRECTIONS) - direction1) % NUM_DIRECTIONS; + + if (newDirection != 0) { + if (newDirection < 4) { + newDirection = (direction1 + 2) % NUM_DIRECTIONS; + } + else { + newDirection = (direction1 + 6) % NUM_DIRECTIONS; + } + direction1 = (s8)(newDirection); } - } - else { - iVar2 = direction1 + 6; - newDirection = iVar2; - if (iVar2 < 0) { - newDirection = direction1 + 0xd; - } - } - direction1 = (s8)(iVar2 + (newDirection >> 3) * -8); } - } - return direction1 & 6; + return direction1 & DIRECTION_MASK_CARDINAL; } NAKED void SetVecFromDirectionSpeed(void) @@ -132,69 +205,76 @@ NAKED void SetVecFromDirectionSpeed(void) s32 VecDirection8Sign(PixelPos *param_1) { - if (param_1->x < 0) { - if (param_1->y < 0) { - return 5; + if (param_1->x < 0) { + if (param_1->y < 0) { + return DIRECTION_NORTHWEST; + } + else if (param_1->y > 0) { + return DIRECTION_SOUTHWEST; + } + else { + return DIRECTION_WEST; + } } - else if (param_1->y >= 1) { - return 7; + else if (param_1->x > 0) { + if (param_1->y < 0) { + return DIRECTION_NORTHEAST; + } + else if (param_1->y > 0) { + return DIRECTION_SOUTHEAST; + } + else { + return DIRECTION_EAST; + } } - else { - return 6; - } - } - else if (param_1->x >= 1) { - if (param_1->y < 0) { - return 3; + else if (param_1->y < 0) { + return DIRECTION_NORTH; } else if (param_1->y > 0) { - return 1; + return DIRECTION_SOUTH; } else { - return 2; + return -1; } - } - else if (param_1->y < 0) { - return 4; - } - else if (param_1->y > 0) { - return 0; - } - else { - return -1; - } } s32 VecDirection4SignYX(PixelPos *param_1) { - if (param_1->y < 0) { - return 4; - } - else if (param_1->y > 0) { - return 0; - } - else { - if (param_1->x < 0) { - return 6; + if (param_1->y < 0) { + return DIRECTION_NORTH; + } + else if (param_1->y > 0) { + return DIRECTION_SOUTH; + } + else if (param_1->x < 0) { + return DIRECTION_WEST; } else if (param_1->x > 0) { - return 2; + return DIRECTION_EAST; } else { - return -1; + return -1; } - } } // https://decomp.me/scratch/bD5wO s8 VecDirection8Radial(PixelPos *param_1) { +#ifdef NONMATCHING + s32 r0; + s32 r1; + s32 r2; + s32 r3; + s32 r4; + s32 r5; +#else register s32 r0; register s32 r1 asm("r1"); register s32 r2 asm("r2"); register s32 r3 asm("r3"); register s32 r4 asm("r4"); register s32 r5; +#endif r0 = param_1->x; @@ -212,61 +292,70 @@ s8 VecDirection8Radial(PixelPos *param_1) if (r4 < 0) { if (r3 < 0) { if (r2 > r0 * 2) { - return 4; + return DIRECTION_NORTH; } if (r1 <= r5 * 2) { - return 5; + return DIRECTION_NORTHWEST; } - return 6; + return DIRECTION_WEST; } if (r2 <= r0 * 2) { if (r1 > r5 * 2) { - return 6; + return DIRECTION_WEST; } - return 7; + return DIRECTION_SOUTHWEST; } } else { if (0 < r4) { if (r3 < 0) { if (r2 > r0 * 2) { - return 4; + return DIRECTION_NORTH; } if (r1 <= r5 * 2) { - return 3; + return DIRECTION_NORTHEAST; } - return 2; + return DIRECTION_EAST; } else { if (r2 > r0 * 2) { - return 0; + return DIRECTION_SOUTH; } if (r1 > r5 * 2) { - return 2; + return DIRECTION_EAST; } - return 1; + return DIRECTION_SOUTHEAST; } } - if (0 > r3) { - return 4; + if (r3 < 0) { + return DIRECTION_NORTH; } if (r3 < 1) { return -1; } } - return 0; + return DIRECTION_SOUTH; } // https://decomp.me/scratch/Bgbxc s8 VecDirection4Radial(PixelPos *param_1) { +#ifdef NONMATCHING + s32 r0; + s32 r1; + s32 r2; + s32 r3; + s32 r4; + s32 r5; +#else register s32 r0 asm("r3"); register s32 r1 asm("r1"); register s32 r2 asm("r2"); register s32 r3; register s32 r4; register s32 r5 asm("r0"); +#endif r0 = param_1->x; if (r0 < 0) { @@ -283,40 +372,40 @@ s8 VecDirection4Radial(PixelPos *param_1) if (r4 < 0) { if (r3 < 0) { if (r2 > r1) { - return 4; + return DIRECTION_NORTH; } else - return 6; + return DIRECTION_WEST; } if (r2 <= r1) { - return 6; + return DIRECTION_WEST; } } else { if (0 < r4) { if (r3 < 0) { if (r2 > r1) { - return 4; + return DIRECTION_NORTH; } else - return 2; + return DIRECTION_EAST; } else { if (r2 > r1) { - return 0; + return DIRECTION_SOUTH; } - return 2; + return DIRECTION_EAST; } } - if (0 > r3) { - return 4; + if (r3 < 0) { + return DIRECTION_NORTH; } if (r3 < 1) { return -1; } } - return 0; + return DIRECTION_SOUTH; } s8 SizedDeltaDirection4(PixelPos *r0, PixelPos *r1, PixelPos *r2, PixelPos *r3) { diff --git a/src/code_809D148.c b/src/code_809D148.c index f0b85c674..07294bebc 100644 --- a/src/code_809D148.c +++ b/src/code_809D148.c @@ -1,14 +1,9 @@ #include "global.h" +#include "structs/str_position.h" #include "other_random.h" #include "math.h" #include "memory.h" -struct unkStruct_809D158 -{ - s32 a0; - s32 a4; -}; - struct unkStruct_20399E8 { u32 unk0; @@ -16,15 +11,15 @@ struct unkStruct_20399E8 u32 unk8; s32 unkC; s32 unk10; - struct unkStruct_809D158 unk14; - struct unkStruct_809D158 unk1C; + PixelPos unk14; + PixelPos unk1C; s32 unk24; s32 unk28; s32 unk2C; s32 unk30; s32 unk34; s32 unk38; - struct unkStruct_809D158 unk3C; + PixelPos unk3C; u8 unk44; }; @@ -32,7 +27,7 @@ extern struct unkStruct_20399E8 gUnknown_20399E8; void sub_809D0BC(void); void sub_809D4B0(void); -void sub_809D158(s32 r0, const struct unkStruct_809D158 *r1); +void sub_809D158(s32 r0, const PixelPos *r1); s32 sub_809CFE8(u16 param_1) { @@ -105,7 +100,7 @@ void nullsub_119(void) { } -extern const struct unkStruct_809D158 gZeroPos_8116478; +extern const PixelPos gZeroPos_8116478; void sub_809D0BC(void) { @@ -162,7 +157,7 @@ struct Test1 u64 ukn0; }; -void sub_809D158(s32 r0, const struct unkStruct_809D158 *r1) +void sub_809D158(s32 r0, const PixelPos *r1) { gUnknown_20399E8.unk0 = r0; gUnknown_20399E8.unk8 = 0; @@ -183,7 +178,7 @@ void sub_809D180(s32 r0, s32 r1) gUnknown_20399E8.unkC = r1; } -void sub_809D190(s32 r0, struct unkStruct_809D158 *r1, s32 r2) +void sub_809D190(s32 r0, PixelPos *r1, s32 r2) { gUnknown_20399E8.unk0 = r0; gUnknown_20399E8.unk8 = 1; @@ -206,7 +201,7 @@ void sub_809D1BC(s32 r0, s32 r1) gUnknown_20399E8.unk10 = r1; } -void sub_809D1CC(s32 r0, struct unkStruct_809D158 *r1, s32 r2) +void sub_809D1CC(s32 r0, PixelPos *r1, s32 r2) { gUnknown_20399E8.unk0 = r0; gUnknown_20399E8.unk8 = 2; @@ -229,7 +224,7 @@ void sub_809D1F8(s32 r0, s32 r1) gUnknown_20399E8.unkC = r1; } -void sub_809D208(s32 r0, struct unkStruct_809D158 *r1, s32 r2) +void sub_809D208(s32 r0, PixelPos *r1, s32 r2) { gUnknown_20399E8.unk0 = r0; gUnknown_20399E8.unk8 = 3; @@ -250,27 +245,27 @@ bool8 sub_809D234(void) return gUnknown_20399E8.unk8 != 0; } -u8 sub_809D248(struct unkStruct_809D158 *r0) +u8 sub_809D248(PixelPos *r0) { *r0 = gUnknown_20399E8.unk3C; return gUnknown_20399E8.unk44; } // Todo: move these to appropriate header files -extern s32 sub_80A8FD8(s16 a0, struct unkStruct_809D158 *a1); -extern s32 sub_80AC448(s16 a0, struct unkStruct_809D158 *a1); -extern s32 sub_80AD360(s16 a0, struct unkStruct_809D158 *a1); -extern void sub_800290C(struct unkStruct_809D158 *a0, s32 a1); -extern void sub_8002934(struct unkStruct_809D158 *a0, struct unkStruct_809D158 *a1, struct unkStruct_809D158 *a2, u32 a3, u32 a4); -extern bool8 sub_80A579C(struct unkStruct_809D158 *a0, struct unkStruct_809D158 *a1); +extern s32 sub_80A8FD8(s16 a0, PixelPos *a1); +extern s32 sub_80AC448(s16 a0, PixelPos *a1); +extern s32 sub_80AD360(s16 a0, PixelPos *a1); +extern void sub_800290C(PixelPos *a0, s32 a1); +extern void sub_8002934(PixelPos *a0, PixelPos *a1, PixelPos *a2, u32 a3, u32 a4); +extern bool8 sub_80A579C(PixelPos *a0, PixelPos *a1); void sub_809D25C(void) { s32 r2, r1, r3; - struct unkStruct_809D158 sp4; - struct unkStruct_809D158 spC; - struct unkStruct_809D158 sp14; - struct unkStruct_809D158 sp1C; + PixelPos sp4; + PixelPos spC; + PixelPos sp14; + PixelPos sp1C; u16 val; // For some reason I have to compare with 0xFFFF instead of -1. Maybe it has to do with return value of the functions? switch (gUnknown_20399E8.unk0) @@ -295,22 +290,22 @@ void sub_809D25C(void) switch (gUnknown_20399E8.unk8) { case 1: - sp4.a0 = gUnknown_20399E8.unk1C.a0 - gUnknown_20399E8.unk14.a0; - sp4.a4 = gUnknown_20399E8.unk1C.a4 - gUnknown_20399E8.unk14.a4; + sp4.x = gUnknown_20399E8.unk1C.x - gUnknown_20399E8.unk14.x; + sp4.y = gUnknown_20399E8.unk1C.y - gUnknown_20399E8.unk14.y; sub_800290C(&sp4, gUnknown_20399E8.unkC); - if (sp4.a0 == 0 && sp4.a4 == 0) + if (sp4.x == 0 && sp4.y == 0) { gUnknown_20399E8.unk8 = 0; } else { - gUnknown_20399E8.unk14.a0 += sp4.a0; - gUnknown_20399E8.unk14.a4 += sp4.a4; + gUnknown_20399E8.unk14.x += sp4.x; + gUnknown_20399E8.unk14.y += sp4.y; } break; case 3: - r2 = (gUnknown_20399E8.unk1C.a0 - gUnknown_20399E8.unk14.a0) / 256; - r1 = (gUnknown_20399E8.unk1C.a4 - gUnknown_20399E8.unk14.a4) / 256; + r2 = (gUnknown_20399E8.unk1C.x - gUnknown_20399E8.unk14.x) / 256; + r1 = (gUnknown_20399E8.unk1C.y - gUnknown_20399E8.unk14.y) / 256; gUnknown_20399E8.unk10 = (F248ToInt(FP24_8_Hypot(IntToF248(r2), IntToF248(r1))) << 8) / gUnknown_20399E8.unkC; if (gUnknown_20399E8.unk10 <= 0) gUnknown_20399E8.unk10 = 1; @@ -353,21 +348,21 @@ void sub_809D25C(void) if (sub_80A579C(&sp14, &sp1C)) { - r2 = gUnknown_20399E8.unk14.a0 + gUnknown_20399E8.unk34 - 0x80; - r3 = gUnknown_20399E8.unk14.a4 + gUnknown_20399E8.unk38 - 2944; + r2 = gUnknown_20399E8.unk14.x + gUnknown_20399E8.unk34 - 0x80; + r3 = gUnknown_20399E8.unk14.y + gUnknown_20399E8.unk38 - 2944; - if (r2 < sp14.a0) - r2 = sp14.a0; - if (r2 >= sp1C.a0) - r2 = sp1C.a0 - 1; + if (r2 < sp14.x) + r2 = sp14.x; + if (r2 >= sp1C.x) + r2 = sp1C.x - 1; - if (r3 < sp14.a4) - r3 = sp14.a4; - if (r3 >= sp1C.a4) - r3 = sp1C.a4 - 1; + if (r3 < sp14.y) + r3 = sp14.y; + if (r3 >= sp1C.y) + r3 = sp1C.y - 1; - gUnknown_20399E8.unk3C.a0 = (r2 - 30976) / 256; - gUnknown_20399E8.unk3C.a4 = (r3 - 20480) / 256; + gUnknown_20399E8.unk3C.x = (r2 - 30976) / 256; + gUnknown_20399E8.unk3C.y = (r3 - 20480) / 256; gUnknown_20399E8.unk44 = 1; } } From bbfe80ea0c7b6986266293ac75868037f8c95d4d Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 25 Dec 2024 13:26:41 -0800 Subject: [PATCH 03/27] decomp another file --- asm/code_80130A8.s | 304 ---------------------------------------- include/menu_input.h | 4 + include/string_format.h | 3 - ld_script.txt | 1 - src/menu_input.c | 55 ++++++++ src/string_format.c | 15 -- 6 files changed, 59 insertions(+), 323 deletions(-) delete mode 100644 asm/code_80130A8.s diff --git a/asm/code_80130A8.s b/asm/code_80130A8.s deleted file mode 100644 index b5ff8020e..000000000 --- a/asm/code_80130A8.s +++ /dev/null @@ -1,304 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - -@ SpriteOAM memes. Same as sub_8013F84 except instead of a 0x60 it's a 0x80 - thumb_func_start sub_8013E54 -sub_8013E54: - push {r4-r6,lr} - sub sp, 0x8 - ldr r6, _08013F60 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r0, [r0] - ldr r1, _08013F64 - ands r1, r0 - ldr r3, _08013F68 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013F6C - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r5, _08013F70 - adds r0, r5, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013F74 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013F78 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - movs r4, 0x80 - lsls r4, 7 - mov r0, sp - ldrh r1, [r0] - ldr r0, _08013F7C - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - orrs r4, r0 - ands r3, r1 - orrs r3, r4 - str r3, [sp] - mov r3, sp - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r5 - movs r2, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _08013F80 - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - movs r1, 0x2 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x80 - ands r0, r4 - lsls r0, 4 - ldrh r1, [r3, 0x6] - ands r2, r1 - orrs r2, r0 - strh r2, [r3, 0x6] - movs r0, 0x70 - strh r0, [r3, 0x2] - movs r1, 0x80 - lsls r1, 1 - mov r0, sp - movs r2, 0 - movs r3, 0 - bl AddSprite - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08013F60: .4byte gUnknown_2027370 -_08013F64: .4byte 0x0000feff -_08013F68: .4byte 0xffff0000 -_08013F6C: .4byte 0x0000fdff -_08013F70: .4byte 0x0000f3ff -_08013F74: .4byte 0x0000efff -_08013F78: .4byte 0x0000dfff -_08013F7C: .4byte 0x00003fff -_08013F80: .4byte 0x00000fff - thumb_func_end sub_8013E54 - -@ SpriteOAM memes https://decomp.me/scratch/GROyH - thumb_func_start sub_8013F84 -sub_8013F84: - push {r4-r6,lr} - sub sp, 0x8 - ldr r6, _08014090 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r0, [r0] - ldr r1, _08014094 - ands r1, r0 - ldr r3, _08014098 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _0801409C - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r5, _080140A0 - adds r0, r5, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080140A4 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080140A8 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - movs r4, 0x80 - lsls r4, 7 - mov r0, sp - ldrh r1, [r0] - ldr r0, _080140AC - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - orrs r4, r0 - ands r3, r1 - orrs r3, r4 - str r3, [sp] - mov r3, sp - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r5 - movs r2, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _080140B0 - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - movs r1, 0x2 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x60 - ands r0, r4 - lsls r0, 4 - ldrh r1, [r3, 0x6] - ands r2, r1 - orrs r2, r0 - strh r2, [r3, 0x6] - movs r0, 0x70 - strh r0, [r3, 0x2] - movs r1, 0x80 - lsls r1, 1 - mov r0, sp - movs r2, 0 - movs r3, 0 - bl AddSprite - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08014090: .4byte gUnknown_2027370 -_08014094: .4byte 0x0000feff -_08014098: .4byte 0xffff0000 -_0801409C: .4byte 0x0000fdff -_080140A0: .4byte 0x0000f3ff -_080140A4: .4byte 0x0000efff -_080140A8: .4byte 0x0000dfff -_080140AC: .4byte 0x00003fff -_080140B0: .4byte 0x00000fff - thumb_func_end sub_8013F84 - - .align 2,0 diff --git a/include/menu_input.h b/include/menu_input.h index 0ffe36cda..0d897b526 100644 --- a/include/menu_input.h +++ b/include/menu_input.h @@ -47,5 +47,9 @@ void sub_8013AA0(unkStructFor8013AA0 *); u32 sub_8013BBC(unkStructFor8013AA0 *); void sub_8013C68(unkStructFor8013AA0 *); void sub_8013D10(unkStructFor8013AA0 *); +void sub_8013E54(void); +void sub_8013F84(void); +void sub_80140B4(UnkTextStruct2 *); + #endif // GUARD_MENU_INPUT_H diff --git a/include/string_format.h b/include/string_format.h index 3a8f24c7b..ad038c796 100644 --- a/include/string_format.h +++ b/include/string_format.h @@ -8,9 +8,6 @@ // TODO: once the files close to string_format.c are decompiled, check if these should be included here. Most likely, they should be declared elsewhere. // code_80130A8.s -void sub_8013E54(void); -void sub_8013F84(void); -void sub_80140B4(UnkTextStruct2 *); void sub_80140DC(void); void sub_8014114(void); s32 sub_80144A4(s32 *); diff --git a/ld_script.txt b/ld_script.txt index b6e05c121..49cc4c233 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -102,7 +102,6 @@ SECTIONS { src/quick_save_write.o(.text); src/code_8012A18.o(.text); src/menu_input.o(.text); - asm/code_80130A8.o(.text); src/string_format.o(.text); src/code_8015080.o(.text); asm/code_8015080.o(.text); diff --git a/src/menu_input.c b/src/menu_input.c index 75eb20772..3a19b7e9e 100644 --- a/src/menu_input.c +++ b/src/menu_input.c @@ -1148,3 +1148,58 @@ static bool8 sub_8013DD0(unkStructFor8013AA0 *a0) return FALSE; } } + +void sub_8013E54(void) +{ + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + SpriteOAM SStack_18 = {0}; + + SpriteSetAffine1(&SStack_18, 0); + SpriteSetAffine2(&SStack_18, 0); + SpriteSetObjMode(&SStack_18, 0); + SpriteSetMosaic(&SStack_18, 0); + SpriteSetBpp(&SStack_18, 0); + SpriteSetShape(&SStack_18, 1); + SpriteSetMatrixNum(&SStack_18, 0); + SpriteSetSize(&SStack_18, 0); + SpriteSetTileNum(&SStack_18, 0x3F0); + SpriteSetPriority(&SStack_18, 0); + SpriteSetPalNum(&SStack_18, 15); + SpriteSetY(&SStack_18, (ptr->unk2 * 8) + 0x80); + SpriteSetX(&SStack_18, 112); + + AddSprite(&SStack_18,0x100,0,0x0); +} + +void sub_8013F84(void) +{ + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + SpriteOAM SStack_18 = {0}; + + SpriteSetAffine1(&SStack_18, 0); + SpriteSetAffine2(&SStack_18, 0); + SpriteSetObjMode(&SStack_18, 0); + SpriteSetMosaic(&SStack_18, 0); + SpriteSetBpp(&SStack_18, 0); + SpriteSetShape(&SStack_18, 1); + SpriteSetMatrixNum(&SStack_18, 0); + SpriteSetSize(&SStack_18, 0); + SpriteSetTileNum(&SStack_18, 0x3F0); + SpriteSetPriority(&SStack_18, 0); + SpriteSetPalNum(&SStack_18, 15); + SpriteSetY(&SStack_18, (ptr->unk2 * 8) + 0x60); + SpriteSetX(&SStack_18, 112); + + AddSprite(&SStack_18,0x100,0,0x0); +} + +void sub_80140B4(UnkTextStruct2 *a0) +{ + s32 i; + + for(i = 0; i < 4; i++) + { + a0[i] = gUnknown_80D47C8[i]; + } +} + diff --git a/src/string_format.c b/src/string_format.c index 7516b9934..66c7dde8d 100644 --- a/src/string_format.c +++ b/src/string_format.c @@ -16,21 +16,6 @@ #include "data/code_80140DC.h" -// TODO: move to menu_input -extern UnkTextStruct2 gUnknown_80D47C8[4]; - -void sub_80140B4(UnkTextStruct2 *a0) -{ - s32 i; - - for(i = 0; i < 4; i++) - { - a0[i] = gUnknown_80D47C8[i]; - } -} - -// End of menu_input.c - void sub_80140DC(void) { DungeonPos pos; From e4d8d9002d1a27e3af31b110fedcd89a5c37bd44 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 26 Dec 2024 14:17:38 -0800 Subject: [PATCH 04/27] decomp sub_809922E0 --- asm/code_8098BDC.s | 41 ----------------------------------------- src/code_8099328.c | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index aeefbc895..43e11bddf 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -255,44 +255,3 @@ _080992D4: .4byte gUnknown_20398C4 _080992D8: .4byte gUnknown_2039950 _080992DC: .4byte gUnknown_20398C8 + 0x10 thumb_func_end sub_809927C - - thumb_func_start sub_80992E0 -sub_80992E0: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0 - movs r1, 0x13 - bl GetScriptVarValue - lsls r0, 16 - asrs r1, r0, 16 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08099316 - cmp r1, 0x50 - beq _08099316 - cmp r1, 0x51 - beq _08099316 - cmp r1, 0x52 - beq _08099316 - strh r1, [r4] - movs r0, 0 - movs r1, 0x14 - bl GetScriptVarValue - strh r0, [r5] - movs r0, 0x1 - b _08099322 -_08099316: - movs r1, 0x1 - negs r1, r1 - adds r0, r1, 0 - strh r0, [r4] - strh r0, [r5] - movs r0, 0 -_08099322: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80992E0 - diff --git a/src/code_8099328.c b/src/code_8099328.c index af2688964..c2c1d5d8d 100644 --- a/src/code_8099328.c +++ b/src/code_8099328.c @@ -2,6 +2,23 @@ #include "code_80A26CC.h" #include "event_flag.h" +u8 sub_80992E0(s16 *param_1, s16 *param_2) +{ + s32 sVar2; + + sVar2 = (s16)GetScriptVarValue(NULL,DUNGEON_ENTER); + if ((((sVar2 != -1) && (sVar2 != 0x50)) && (sVar2 != 0x51)) && (sVar2 != 0x52)) { + *param_1 = sVar2; + *param_2 = GetScriptVarValue(NULL,DUNGEON_ENTER_INDEX); + return TRUE; + } + else { + *param_1 = -1; + *param_2 = -1; + return FALSE; + } +} + bool8 sub_8099328(u8 *dungeonId) { s16 script_disc; DungeonInfo* dungeonInfo; From d37609340876f3a97f08d9943c626f3aacaa963c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 28 Dec 2024 07:22:48 -0800 Subject: [PATCH 05/27] match SetVecFromDirectionSpeed thanks to @Kermalis --- src/code_8002774.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/src/code_8002774.c b/src/code_8002774.c index 806d6f959..3fb71ff38 100644 --- a/src/code_8002774.c +++ b/src/code_8002774.c @@ -4,6 +4,13 @@ #include "structs/str_position.h" #include "other_random.h" +typedef struct Vector +{ + s32 x; + s32 y; +} Vector; + +extern Vector gVectorDirections[8]; void sub_800290C(PixelPos *param_1, s32 param_2) { @@ -180,27 +187,11 @@ UNUSED s32 sub_8002B5C(s32 _direction1, s32 _direction2) return direction1 & DIRECTION_MASK_CARDINAL; } -NAKED void SetVecFromDirectionSpeed(void) +Vector SetVecFromDirectionSpeed(s8 r1, u32 r2) { - asm_unified( - "\tpush {r4,r5,lr}\n" - "\tlsls r1, 24\n" - "\tasrs r1, 21\n" - "\tldr r3, _08002BD8\n" - "\tadds r1, r3\n" - "\tldr r5, [r1]\n" - "\tadds r3, r5, 0\n" - "\tmuls r3, r2\n" - "\tldr r1, [r1, 0x4]\n" - "\tadds r4, r1, 0\n" - "\tmuls r4, r2\n" - "\tstr r3, [r0]\n" - "\tstr r4, [r0, 0x4]\n" - "\tpop {r4,r5}\n" - "\tpop {r2}\n" - "\tbx r2\n" - "\t.align 2, 0\n" -"_08002BD8: .4byte gVectorDirections"); + Vector *vec = &gVectorDirections[r1]; + + return (Vector){ .x = vec->x * r2, .y = vec->y * r2 }; } s32 VecDirection8Sign(PixelPos *param_1) From bc2b0031c56b1641d394e4d8b7e8aa6d1822e922 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 28 Dec 2024 07:23:13 -0800 Subject: [PATCH 06/27] match sub_8047158 --- asm/code_8046CE4.s | 34 ---------------------------------- src/dungeon_items.c | 13 +++++++++++++ 2 files changed, 13 insertions(+), 34 deletions(-) diff --git a/asm/code_8046CE4.s b/asm/code_8046CE4.s index daa8afec3..34c302ab3 100644 --- a/asm/code_8046CE4.s +++ b/asm/code_8046CE4.s @@ -5,40 +5,6 @@ .text - thumb_func_start sub_8047158 -sub_8047158: - push {r4-r6,lr} - movs r3, 0 - ldr r5, _0804718C - movs r6, 0x1 - movs r4, 0x4 -_08047162: - lsls r1, r3, 2 - ldr r0, [r5] - adds r2, r0, r1 - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08047180 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08047180 - movs r0, 0xFB - ands r0, r1 - strb r0, [r2] -_08047180: - adds r3, 0x1 - cmp r3, 0x13 - ble _08047162 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804718C: .4byte gTeamInventoryRef - thumb_func_end sub_8047158 - thumb_func_start sub_8047190 sub_8047190: push {r4-r7,lr} diff --git a/src/dungeon_items.c b/src/dungeon_items.c index 0e3c5c05e..2e12ed8fd 100644 --- a/src/dungeon_items.c +++ b/src/dungeon_items.c @@ -306,3 +306,16 @@ void sub_8047104(void) } FillInventoryGaps(); } + +void sub_8047158(void) +{ + s32 index; + + index = 0; + for(index = 0; index < INVENTORY_SIZE; index++) { + Item *item = &gTeamInventoryRef->teamItems[index]; + if (ItemExists(item) && item->flags & ITEM_FLAG_UNPAID) { + item->flags &= ~(ITEM_FLAG_UNPAID); + } + } +} From d0a0285f75fb5df8d3cdf8e114d2a465112e718f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 28 Dec 2024 13:34:06 -0800 Subject: [PATCH 07/27] match sub_800F7D0 thanks to @DizzyEggg --- asm/code_800ED38.s | 125 ------------------------------ include/dungeon_pokemon_sprites.h | 4 +- src/code_800F958.c | 47 +++++++++++ 3 files changed, 49 insertions(+), 127 deletions(-) diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 4889218e0..49ee41eda 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -1153,129 +1153,4 @@ _0800F7C6: _0800F7CC: .4byte gDungeonPokemonSprites thumb_func_end sub_800F794 - thumb_func_start sub_800F7D0 -sub_800F7D0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - ldr r0, _0800F800 - ldr r0, [r0] - cmp r0, 0 - beq _0800F8C0 - ldr r1, [r0] - adds r0, r1, 0 - cmp r1, 0 - bge _0800F7EA - adds r0, r1, 0x3 -_0800F7EA: - asrs r0, 2 - lsls r0, 2 - subs r0, r1, r0 - cmp r0, 0x1 - beq _0800F82A - cmp r0, 0x1 - bgt _0800F804 - cmp r0, 0 - beq _0800F80E - b _0800F888 - .align 2, 0 -_0800F800: .4byte gDungeonPokemonSprites -_0800F804: - cmp r0, 0x2 - beq _0800F846 - cmp r0, 0x3 - beq _0800F868 - b _0800F888 -_0800F80E: - movs r0, 0x1 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x2 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x3 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x4 - b _0800F860 -_0800F82A: - movs r0, 0x5 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x6 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x7 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x8 - b _0800F860 -_0800F846: - movs r0, 0x9 - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xA - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xB - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xC -_0800F860: - movs r1, 0x1 - bl LoadStatusGraphics - b _0800F888 -_0800F868: - movs r0, 0xD - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xE - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0xF - movs r1, 0x1 - bl LoadStatusGraphics - movs r0, 0x10 - movs r1, 0x1 - bl LoadStatusGraphics -_0800F888: - movs r5, 0 - movs r6, 0x4 -_0800F88C: - ldr r7, _0800F8CC - ldr r4, [r7] - lsls r0, r5, 6 - adds r0, r4, r0 - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _0800F8B0 - adds r4, r6 - adds r0, r4, 0 - movs r1, 0 - mov r2, r8 - bl sub_800F2EC - adds r0, r4, 0 - movs r1, 0x1 - mov r2, r8 - bl sub_800F2EC -_0800F8B0: - adds r6, 0x40 - adds r5, 0x1 - cmp r5, 0x15 - ble _0800F88C - ldr r1, [r7] - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] -_0800F8C0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F8CC: .4byte gDungeonPokemonSprites - thumb_func_end sub_800F7D0 - .align 2,0 diff --git a/include/dungeon_pokemon_sprites.h b/include/dungeon_pokemon_sprites.h index b013ba9ab..8e345aa64 100644 --- a/include/dungeon_pokemon_sprites.h +++ b/include/dungeon_pokemon_sprites.h @@ -33,10 +33,10 @@ typedef struct DungeonPokemonSprite // size: 0x584 typedef struct DungeonPokemonSprites { - /* 0x0 */ u32 frame; + /* 0x0 */ s32 frame; /* 0x4 */ DungeonPokemonSprite sprites[22]; } DungeonPokemonSprites; extern DungeonPokemonSprites *gDungeonPokemonSprites; -#endif // GUARD_DUNGEON_POKEMON_SPRITES_H \ No newline at end of file +#endif // GUARD_DUNGEON_POKEMON_SPRITES_H diff --git a/src/code_800F958.c b/src/code_800F958.c index 212267bdf..da605ba7b 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -8,6 +8,53 @@ extern DungeonPokemonSprite* GetDungeonPokemonSprite(s32 id); extern DungeonPos gUnknown_80D3564; +void LoadStatusGraphics(s32, s32); +void sub_800F2EC(DungeonPokemonSprite *, s32, s16 *); + +void sub_800F7D0(s16 *r0) +{ + s32 index; + + if (gDungeonPokemonSprites == NULL) + return; + + switch(gDungeonPokemonSprites->frame % 4) { + case 0: + LoadStatusGraphics(1, 1); + LoadStatusGraphics(2, 1); + LoadStatusGraphics(3, 1); + LoadStatusGraphics(4, 1); + break; + case 1: + LoadStatusGraphics(5, 1); + LoadStatusGraphics(6, 1); + LoadStatusGraphics(7, 1); + LoadStatusGraphics(8, 1); + break; + case 2: + LoadStatusGraphics(9, 1); + LoadStatusGraphics(0xA, 1); + LoadStatusGraphics(0xB, 1); + LoadStatusGraphics(0xC, 1); + break; + case 3: + LoadStatusGraphics(0xD, 1); + LoadStatusGraphics(0xE, 1); + LoadStatusGraphics(0xF, 1); + LoadStatusGraphics(0x10, 1); + break; + } + + for (index = 0; index < 22; index++) { + if (gDungeonPokemonSprites->sprites[index].exists) { + DungeonPokemonSprite *spritePtr = &gDungeonPokemonSprites->sprites[index]; + sub_800F2EC(spritePtr, 0, r0); + sub_800F2EC(spritePtr, 1, r0); + } + } + gDungeonPokemonSprites->frame++; +} + void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32 r3) { DungeonPokemonSprite *dSprite; DungeonPokemonSprite *newSprite; From 46dbaf66af26f2e278bec7417e2b999c5aa49d1c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 28 Dec 2024 14:39:01 -0800 Subject: [PATCH 08/27] decomp more status graphics func --- asm/code_800ED38.s | 228 ------------------------------ include/dungeon_pokemon_sprites.h | 1 + src/code_800F958.c | 113 ++++++++++++++- 3 files changed, 113 insertions(+), 229 deletions(-) diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 49ee41eda..5a089b655 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -925,232 +925,4 @@ _0800F5F8: .4byte 0x00000fff _0800F5FC: .4byte 0x000003ff thumb_func_end DrawStatusSprite - thumb_func_start LoadStatusGraphics -LoadStatusGraphics: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - ldr r0, _0800F660 - adds r1, r0 - ldr r7, [r1, 0x14] - ldr r3, [r1, 0x10] - ldr r2, [r1] - ldr r0, [r1, 0x4] - muls r0, r2 - lsls r4, r0, 5 - mov r8, r4 - ldr r0, [r1, 0x8] - ldr r1, _0800F664 - adds r0, r1 - lsls r5, r0, 5 - adds r6, r5, 0 - ldr r0, _0800F668 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - bge _0800F63C - adds r0, 0x3 -_0800F63C: - asrs r0, 2 - adds r1, r3, 0 - bl __modsi3 - muls r0, r4 - ldr r1, _0800F66C - adds r0, r1 - adds r1, r7, r0 - mov r2, r9 - cmp r2, 0 - beq _0800F674 - ldr r2, _0800F670 - adds r0, r5, r2 - adds r2, r4, 0 - bl sub_80098BC - b _0800F67E - .align 2, 0 -_0800F660: .4byte gStatusGraphics -_0800F664: .4byte 0x0000032b -_0800F668: .4byte gDungeonPokemonSprites -_0800F66C: .4byte gStatusGraphics4bpp -_0800F670: .4byte 0x06010000 -_0800F674: - ldr r2, _0800F68C - adds r0, r6, r2 - mov r2, r8 - bl CpuCopy -_0800F67E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F68C: .4byte 0x06010000 - thumb_func_end LoadStatusGraphics - - thumb_func_start InitDungeonPokemonSprites -InitDungeonPokemonSprites: - push {r4,r5,lr} - ldr r5, _0800F738 - ldr r0, [r5] - cmp r0, 0 - bne _0800F6AC - ldr r4, _0800F73C - adds r0, r4, 0 - movs r1, 0xC - bl MemoryAlloc - str r0, [r5] - adds r1, r4, 0 - bl MemoryClear8 -_0800F6AC: - ldr r1, [r5] - movs r0, 0 - str r0, [r1] - movs r0, 0x1 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x2 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x3 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x4 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x5 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x6 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x7 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x8 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x9 - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0xA - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0xB - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0xC - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0xD - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0xE - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0xF - movs r1, 0 - bl LoadStatusGraphics - movs r0, 0x10 - movs r1, 0 - bl LoadStatusGraphics - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800F738: .4byte gDungeonPokemonSprites -_0800F73C: .4byte 0x00000584 - thumb_func_end InitDungeonPokemonSprites - - thumb_func_start FreeDungeonPokemonSprites -FreeDungeonPokemonSprites: - push {r4,lr} - ldr r4, _0800F758 - ldr r0, [r4] - cmp r0, 0 - beq _0800F752 - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0800F752: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800F758: .4byte gDungeonPokemonSprites - thumb_func_end FreeDungeonPokemonSprites - - thumb_func_start UpdateDungeonPokemonSprite - @ void UpdateDungeonPokemonSprite(int id, short species, int status, char visible) -UpdateDungeonPokemonSprite: - push {r4-r7,lr} - adds r4, r0, 0 - adds r7, r2, 0 - lsls r1, 16 - asrs r5, r1, 16 - lsls r3, 24 - lsrs r6, r3, 24 - ldr r0, _0800F790 - ldr r0, [r0] - cmp r0, 0 - beq _0800F788 - adds r0, r4, 0 - bl GetDungeonPokemonSprite - cmp r0, 0 - beq _0800F788 - movs r1, 0 - strh r5, [r0, 0x8] - str r7, [r0, 0xC] - strb r6, [r0, 0x10] - adds r0, 0x38 - strb r1, [r0] -_0800F788: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F790: .4byte gDungeonPokemonSprites - thumb_func_end UpdateDungeonPokemonSprite - - thumb_func_start sub_800F794 -sub_800F794: - push {r4-r6,lr} - adds r1, r0, 0 - adds r4, r2, 0 - adds r5, r3, 0 - ldr r6, [sp, 0x10] - ldr r0, _0800F7CC - ldr r0, [r0] - cmp r0, 0 - beq _0800F7C6 - adds r0, r1, 0 - bl GetDungeonPokemonSprite - adds r2, r0, 0 - cmp r2, 0 - beq _0800F7C6 - adds r1, r2, 0 - adds r1, 0x38 - movs r0, 0x1 - strb r0, [r1] - strh r4, [r2, 0x3C] - strh r5, [r2, 0x3E] - ldr r0, [r6] - str r0, [r2, 0x20] - ldr r0, [r6, 0xC] - str r0, [r2, 0x24] -_0800F7C6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800F7CC: .4byte gDungeonPokemonSprites - thumb_func_end sub_800F794 - .align 2,0 diff --git a/include/dungeon_pokemon_sprites.h b/include/dungeon_pokemon_sprites.h index 8e345aa64..2508b8f62 100644 --- a/include/dungeon_pokemon_sprites.h +++ b/include/dungeon_pokemon_sprites.h @@ -26,6 +26,7 @@ typedef struct DungeonPokemonSprite /* 0x24 */ u32 unk24; /* 0x28 */ DungeonPokemonStatusSprite statusSprites[2]; /* 0x38 */ u8 unk38; + u16 fill3A; /* 0x3C */ u16 unk3C; /* 0x3E */ u16 unk3E; } DungeonPokemonSprite; diff --git a/src/code_800F958.c b/src/code_800F958.c index da605ba7b..ffdb727ad 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -1,16 +1,127 @@ #include "global.h" #include "code_800F958.h" +#include "code_8009804.h" +#include "cpu.h" #include "dungeon_pokemon_sprites.h" #include "memory.h" +struct StatusGraphicsInfo +{ + /* 0x0 */ s32 width; + /* 0x4 */ s32 height; + /* 0x8 */ s32 vramIndex; + /* 0xC */ s32 unk; + /* 0x10 */ s32 graphicsCount; + /* 0x14 */ s32 offsetIntoGraphic; +}; + +extern struct StatusGraphicsInfo gStatusGraphics[]; // 0x80CE79C +extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 + extern DungeonPokemonSprite *NewDungeonPokemonSprite(void); extern DungeonPokemonSprite* GetDungeonPokemonSprite(s32 id); extern DungeonPos gUnknown_80D3564; -void LoadStatusGraphics(s32, s32); void sub_800F2EC(DungeonPokemonSprite *, s32, s16 *); +void LoadStatusGraphics(s32 graphicIndex, bool8 param_2) +{ + s32 frame; + s32 size; + s32 vramIndex; + s32 offset; + u8 *ptr; + s32 graphicsCount; + + + struct StatusGraphicsInfo *graphic = &gStatusGraphics[graphicIndex]; + + + offset = graphic->offsetIntoGraphic; + graphicsCount = graphic->graphicsCount; + size = graphic->width * graphic->height * 0x20; + vramIndex = (graphic->vramIndex + 0x32b) * 0x20; + frame = (gDungeonPokemonSprites->frame / 4) % graphicsCount; + frame *= size; + ptr = (u8 *)gStatusGraphics4bpp + (offset) + (frame); + + if (param_2) { + sub_80098BC((void *)(VRAM + 0x10000 + vramIndex), (void *)ptr, size); + } + else { + CpuCopy((void *)(VRAM + 0x10000 + vramIndex), ptr, size); + } + return; +} + +void InitDungeonPokemonSprites(void) +{ + if (gDungeonPokemonSprites == NULL) { + gDungeonPokemonSprites = MemoryAlloc(sizeof(DungeonPokemonSprites),0xc); + MemoryClear8(gDungeonPokemonSprites,sizeof(DungeonPokemonSprites)); + } + gDungeonPokemonSprites->frame = 0; + LoadStatusGraphics(1,0); + LoadStatusGraphics(2,0); + LoadStatusGraphics(3,0); + LoadStatusGraphics(4,0); + LoadStatusGraphics(5,0); + LoadStatusGraphics(6,0); + LoadStatusGraphics(7,0); + LoadStatusGraphics(8,0); + LoadStatusGraphics(9,0); + LoadStatusGraphics(10,0); + LoadStatusGraphics(0xb,0); + LoadStatusGraphics(0xc,0); + LoadStatusGraphics(0xd,0); + LoadStatusGraphics(0xe,0); + LoadStatusGraphics(0xf,0); + LoadStatusGraphics(0x10,0); + return; +} + +void FreeDungeonPokemonSprites(void) +{ + if (gDungeonPokemonSprites != 0) { + MemoryFree(gDungeonPokemonSprites); + gDungeonPokemonSprites = NULL; + } +} + +void UpdateDungeonPokemonSprite(s32 id, s32 species, s32 status, u32 visible) +{ + DungeonPokemonSprite *sprite; + s32 species_s32 = (s16)species; + u32 visible_u8 = (u8)visible; + + if (gDungeonPokemonSprites != 0) { + sprite = GetDungeonPokemonSprite(id); + if (sprite != 0) { + sprite->species = species_s32; + sprite->status = status; + sprite->visible = visible_u8; + sprite->unk38 = 0; + } + } +} + +void sub_800F794(s32 id, s32 r1, s32 r2, s32 r3, s32 *r4) +{ + if(gDungeonPokemonSprites) + { + DungeonPokemonSprite *sprite = GetDungeonPokemonSprite(id); + if(sprite) + { + sprite->unk38 = 1; + sprite->unk3C = r2; + sprite->unk3E = r3; + sprite->unk20 = r4[0]; + sprite->unk24 = r4[3]; + } + } +} + void sub_800F7D0(s16 *r0) { s32 index; From 754f5b7e8532c516a459749ee93796f04e8cbd49 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 3 Jan 2025 21:35:19 -0800 Subject: [PATCH 09/27] more status sprite func decomp --- asm/code_800ED38.s | 496 ------------------------------ include/dungeon_pokemon_sprites.h | 2 +- src/code_800F958.c | 203 +++++++++++- 3 files changed, 198 insertions(+), 503 deletions(-) diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 5a089b655..a7d7e6908 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -429,500 +429,4 @@ _0800F240: bx r1 thumb_func_end GetDungeonPokemonSprite - thumb_func_start NewDungeonPokemonSprite - @ DungeonPokemonSprite *NewDungeonPokemonSprite(void) -NewDungeonPokemonSprite: - push {lr} - movs r2, 0 - ldr r0, _0800F25C - ldr r0, [r0] - adds r1, r0, 0x4 -_0800F252: - ldrb r0, [r1] - cmp r0, 0 - bne _0800F260 - adds r0, r1, 0 - b _0800F26A - .align 2, 0 -_0800F25C: .4byte gDungeonPokemonSprites -_0800F260: - adds r1, 0x40 - adds r2, 0x1 - cmp r2, 0x15 - ble _0800F252 - movs r0, 0 -_0800F26A: - pop {r1} - bx r1 - thumb_func_end NewDungeonPokemonSprite - - thumb_func_start GetNextStatusSymbol - @ u32 GetNextStatusSymbol(?, int select) - @ The "select" parameter exists to differentiate between the two kinds of - @ status symbols that can appear at the same time. - @ Only frozen falls under select = 1, every other symbol falls under select = 0 -GetNextStatusSymbol: - push {r4-r6,lr} - adds r2, r0, 0 - lsls r0, r1, 3 - adds r0, 0x28 - adds r3, r2, r0 - movs r5, 0x80 - lsls r5, 21 - cmp r1, 0 - bne _0800F284 - movs r5, 0x1 -_0800F284: - movs r6, 0x80 - lsls r6, 21 - cmp r1, 0 - bne _0800F290 - movs r6, 0x80 - lsls r6, 20 -_0800F290: - movs r4, 0x1 - cmp r1, 0 - bne _0800F298 - movs r4, 0x1C -_0800F298: - ldr r0, [r2, 0xC] - cmp r0, 0 - bne _0800F2A4 - b _0800F2CC -_0800F2A0: - adds r0, r1, 0 - b _0800F2CE -_0800F2A4: - ldr r2, [r3] - adds r1, r5, 0 - cmp r2, 0 - beq _0800F2AE - adds r1, r2, 0 -_0800F2AE: - movs r2, 0 - cmp r2, r4 - bge _0800F2CC - adds r3, r0, 0 -_0800F2B6: - lsls r1, 1 - cmp r1, r6 - bls _0800F2BE - adds r1, r5, 0 -_0800F2BE: - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _0800F2A0 - adds r2, 0x1 - cmp r2, r4 - blt _0800F2B6 -_0800F2CC: - movs r0, 0 -_0800F2CE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end GetNextStatusSymbol - - thumb_func_start StatusSymbolBitToIndex -StatusSymbolBitToIndex: - push {lr} - movs r1, 0 - cmp r0, 0 - beq _0800F2E4 -_0800F2DC: - lsrs r0, 1 - adds r1, 0x1 - cmp r0, 0 - bne _0800F2DC -_0800F2E4: - adds r0, r1, 0 - pop {r1} - bx r1 - thumb_func_end StatusSymbolBitToIndex - - thumb_func_start sub_800F2EC -sub_800F2EC: - push {r4-r7,lr} - sub sp, 0xC - adds r5, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - lsls r0, r6, 3 - adds r0, 0x28 - adds r4, r5, r0 - ldr r0, [r5, 0xC] - cmp r0, 0 - bne _0800F306 - str r0, [r4] - b _0800F35C -_0800F306: - ldr r0, [r4] - cmp r0, 0 - bne _0800F30E - str r0, [r4, 0x4] -_0800F30E: - ldr r0, [r4, 0x4] - cmp r0, 0 - bgt _0800F32A - adds r0, r5, 0 - adds r1, r6, 0 - bl GetNextStatusSymbol - adds r1, r0, 0 - ldr r0, [r4] - cmp r0, r1 - beq _0800F326 - str r1, [r4] -_0800F326: - movs r0, 0x3C - b _0800F32C -_0800F32A: - subs r0, 0x1 -_0800F32C: - str r0, [r4, 0x4] - ldrb r0, [r5, 0x10] - cmp r0, 0 - beq _0800F35C - ldr r0, [r4] - cmp r0, 0 - beq _0800F35C - bl StatusSymbolBitToIndex - adds r1, r0, 0 - movs r2, 0x8 - ldrsh r0, [r5, r2] - adds r2, r5, 0 - adds r2, 0x14 - lsls r3, r6, 2 - adds r3, 0x18 - adds r3, r5, r3 - str r7, [sp] - ldrb r4, [r5, 0x11] - str r4, [sp, 0x4] - ldr r4, [r5, 0x4] - str r4, [sp, 0x8] - bl DrawStatusSprite -_0800F35C: - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_800F2EC - - thumb_func_start DrawStatusSprite - @ void DrawStatusSprite(?, int status, Position *pos, Position *pos_offset, Position *pos_screen, ?) -DrawStatusSprite: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - mov r12, r2 - ldr r0, [sp, 0x20] - mov r8, r0 - ldr r4, [sp, 0x24] - ldr r0, _0800F410 - lsls r1, 3 - adds r2, r1, r0 - ldr r0, [r2] - ldr r1, [r2, 0x4] - str r0, [sp] - str r1, [sp, 0x4] - lsls r2, r0, 1 - ldr r1, [sp] - adds r2, r1 - lsls r2, 3 - ldr r0, _0800F414 - adds r2, r0 - ldr r0, [r2, 0x8] - ldr r6, _0800F418 - adds r7, r0, r6 - movs r0, 0x3 - ands r4, r0 - lsls r4, 10 - ldr r5, _0800F41C - ldrh r1, [r5, 0x4] - ldr r0, _0800F420 - ands r0, r1 - orrs r0, r4 - strh r0, [r5, 0x4] - mov r0, r12 - movs r4, 0 - ldrsh r1, [r0, r4] - ldr r0, [r2] - lsls r0, 2 - subs r1, r0 - mov r6, r8 - movs r4, 0 - ldrsh r0, [r6, r4] - subs r1, r0 - movs r6, 0 - ldrsh r0, [r3, r6] - adds r4, r1, r0 - mov r0, r12 - movs r6, 0x2 - ldrsh r1, [r0, r6] - ldr r0, [r2, 0x4] - lsls r0, 2 - subs r1, r0 - mov r2, r8 - movs r6, 0x2 - ldrsh r0, [r2, r6] - subs r1, r0 - movs r2, 0x2 - ldrsh r0, [r3, r2] - adds r3, r1, r0 - adds r6, r3, 0 - subs r6, 0x10 - movs r0, 0x20 - negs r0, r0 - cmp r4, r0 - bge _0800F3E8 - b _0800F5E4 -_0800F3E8: - cmp r3, r0 - bge _0800F3EE - b _0800F5E4 -_0800F3EE: - cmp r4, 0xEF - ble _0800F3F4 - b _0800F5E4 -_0800F3F4: - cmp r3, 0x9F - ble _0800F3FA - b _0800F5E4 -_0800F3FA: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0xF - bls _0800F404 - b _0800F5A6 -_0800F404: - lsls r0, 2 - ldr r1, _0800F424 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0800F410: .4byte gStatusSprites -_0800F414: .4byte gStatusGraphics -_0800F418: .4byte 0x0000032b -_0800F41C: .4byte gUnknown_203B0DC -_0800F420: .4byte 0x0000f3ff -_0800F424: .4byte _0800F428 - .align 2, 0 -_0800F428: - .4byte _0800F468 - .4byte _0800F4CC - .4byte _0800F4CC - .4byte _0800F574 - .4byte _0800F538 - .4byte _0800F4CC - .4byte _0800F4CC - .4byte _0800F498 - .4byte _0800F4CC - .4byte _0800F4CC - .4byte _0800F4CC - .4byte _0800F468 - .4byte _0800F4CC - .4byte _0800F468 - .4byte _0800F4CC - .4byte _0800F500 -_0800F468: - ldrh r2, [r5] - ldr r1, _0800F48C - adds r0, r1, 0 - ands r0, r2 - strh r0, [r5] - ldrh r0, [r5, 0x2] - ands r1, r0 - ldr r0, _0800F490 - ands r4, r0 - movs r0, 0xFE - lsls r0, 8 - ands r1, r0 - orrs r1, r4 - strh r1, [r5, 0x2] - ldr r1, _0800F494 - ands r1, r6 - b _0800F59A - .align 2, 0 -_0800F48C: .4byte 0x00003fff -_0800F490: .4byte 0x000001ff -_0800F494: .4byte 0x00000fff -_0800F498: - movs r3, 0x80 - lsls r3, 8 - ldrh r2, [r5] - ldr r1, _0800F4C0 - adds r0, r1, 0 - ands r0, r2 - orrs r0, r3 - strh r0, [r5] - ldrh r0, [r5, 0x2] - ands r1, r0 - ldr r0, _0800F4C4 - ands r4, r0 - movs r0, 0xFE - lsls r0, 8 - ands r1, r0 - orrs r1, r4 - strh r1, [r5, 0x2] - ldr r1, _0800F4C8 - ands r1, r6 - b _0800F59A - .align 2, 0 -_0800F4C0: .4byte 0x00003fff -_0800F4C4: .4byte 0x000001ff -_0800F4C8: .4byte 0x00000fff -_0800F4CC: - ldrh r2, [r5] - ldr r1, _0800F4F4 - adds r0, r1, 0 - ands r0, r2 - strh r0, [r5] - movs r2, 0x80 - lsls r2, 7 - ldrh r0, [r5, 0x2] - ands r1, r0 - orrs r1, r2 - ldr r0, _0800F4F8 - ands r4, r0 - movs r0, 0xFE - lsls r0, 8 - ands r1, r0 - orrs r1, r4 - strh r1, [r5, 0x2] - ldr r1, _0800F4FC - ands r1, r6 - b _0800F59A - .align 2, 0 -_0800F4F4: .4byte 0x00003fff -_0800F4F8: .4byte 0x000001ff -_0800F4FC: .4byte 0x00000fff -_0800F500: - ldrh r2, [r5] - ldr r1, _0800F52C - adds r0, r1, 0 - ands r0, r2 - strh r0, [r5] - movs r2, 0x80 - lsls r2, 7 - ldrh r0, [r5, 0x2] - ands r1, r0 - orrs r1, r2 - adds r2, r4, 0 - adds r2, 0x8 - ldr r0, _0800F530 - ands r2, r0 - movs r0, 0xFE - lsls r0, 8 - ands r1, r0 - orrs r1, r2 - strh r1, [r5, 0x2] - ldr r1, _0800F534 - ands r1, r6 - b _0800F59A - .align 2, 0 -_0800F52C: .4byte 0x00003fff -_0800F530: .4byte 0x000001ff -_0800F534: .4byte 0x00000fff -_0800F538: - movs r3, 0x80 - lsls r3, 7 - ldrh r2, [r5] - ldr r1, _0800F568 - adds r0, r1, 0 - ands r0, r2 - orrs r0, r3 - strh r0, [r5] - movs r2, 0x80 - lsls r2, 8 - ldrh r0, [r5, 0x2] - ands r1, r0 - orrs r1, r2 - ldr r0, _0800F56C - ands r4, r0 - movs r0, 0xFE - lsls r0, 8 - ands r1, r0 - orrs r1, r4 - strh r1, [r5, 0x2] - ldr r1, _0800F570 - ands r1, r6 - b _0800F59A - .align 2, 0 -_0800F568: .4byte 0x00003fff -_0800F56C: .4byte 0x000001ff -_0800F570: .4byte 0x00000fff -_0800F574: - ldrh r2, [r5] - ldr r1, _0800F5F0 - adds r0, r1, 0 - ands r0, r2 - strh r0, [r5] - movs r2, 0x80 - lsls r2, 8 - ldrh r0, [r5, 0x2] - ands r1, r0 - orrs r1, r2 - ldr r0, _0800F5F4 - ands r4, r0 - movs r0, 0xFE - lsls r0, 8 - ands r1, r0 - orrs r1, r4 - strh r1, [r5, 0x2] - ldr r1, _0800F5F8 - ands r1, r3 -_0800F59A: - lsls r1, 4 - ldrh r2, [r5, 0x6] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x6] -_0800F5A6: - ldr r0, _0800F5FC - ands r7, r0 - ldrh r1, [r5, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r7 - movs r1, 0xF - ldr r3, [sp, 0x4] - ands r1, r3 - lsls r1, 12 - ldr r2, _0800F5F8 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - mov r4, r12 - movs r6, 0x2 - ldrsh r1, [r4, r6] - mov r2, r8 - movs r3, 0x2 - ldrsh r0, [r2, r3] - subs r1, r0 - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - adds r1, 0x1 - adds r0, r5, 0 - movs r2, 0 - movs r3, 0 - bl AddSprite -_0800F5E4: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800F5F0: .4byte 0x00003fff -_0800F5F4: .4byte 0x000001ff -_0800F5F8: .4byte 0x00000fff -_0800F5FC: .4byte 0x000003ff - thumb_func_end DrawStatusSprite - .align 2,0 diff --git a/include/dungeon_pokemon_sprites.h b/include/dungeon_pokemon_sprites.h index 2508b8f62..5b718dd34 100644 --- a/include/dungeon_pokemon_sprites.h +++ b/include/dungeon_pokemon_sprites.h @@ -7,7 +7,7 @@ typedef struct DungeonPokemonStatusSprite { /* 0x0 */ u32 status; - /* 0x4 */ u32 frame; + /* 0x4 */ s32 frame; } DungeonPokemonStatusSprite; // size: 0x40 diff --git a/src/code_800F958.c b/src/code_800F958.c index ffdb727ad..4b74960e1 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -4,6 +4,8 @@ #include "cpu.h" #include "dungeon_pokemon_sprites.h" #include "memory.h" +#include "sprite.h" +#include "structs/sprite_oam.h" struct StatusGraphicsInfo { @@ -14,16 +16,205 @@ struct StatusGraphicsInfo /* 0x10 */ s32 graphicsCount; /* 0x14 */ s32 offsetIntoGraphic; }; - extern struct StatusGraphicsInfo gStatusGraphics[]; // 0x80CE79C -extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 -extern DungeonPokemonSprite *NewDungeonPokemonSprite(void); +struct StatusSprite +{ + u32 image; + u32 palette; +}; +extern struct StatusSprite gStatusSprites[8]; + +extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 +extern DungeonPos gUnknown_80D3564; +extern SpriteOAM gUnknown_203B0DC; + extern DungeonPokemonSprite* GetDungeonPokemonSprite(s32 id); -extern DungeonPos gUnknown_80D3564; +void DrawStatusSprite(s16 param_1,s32 status,DungeonPos *pos,DungeonPos *posOffset, + DungeonPos *posScreen,u32 param_6, u32 unused); -void sub_800F2EC(DungeonPokemonSprite *, s32, s16 *); +DungeonPokemonSprite *NewDungeonPokemonSprite(void){ + s32 index; + DungeonPokemonSprite *sprite; + + for(index = 0; index < 22; index++) + { + sprite = &gDungeonPokemonSprites->sprites[index]; + + if(!sprite->exists) + { + return sprite; + } + } + return NULL; +} + +u32 GetNextStatusSymbol(DungeonPokemonSprite *sprite, s32 statusIndex) +{ + u32 uVar1; + u32 status; + s32 counter; + s32 max; + u32 uVar5; + u32 uVar6; + DungeonPokemonStatusSprite *statusSprite; + + statusSprite = &sprite->statusSprites[statusIndex]; + uVar5 = 0x10000000; + if (statusIndex == 0) { + uVar5 = 1; + } + uVar6 = 0x10000000; + if (statusIndex == 0) { + uVar6 = 0x8000000; + } + max = 1; + if (statusIndex == 0) { + max = 0x1c; + } + if (sprite->status == 0) { + return 0; + } + + status = statusSprite->status; + uVar1 = uVar5; + if (status != 0) { + uVar1 = status; + } + + for(counter = 0; counter < max; counter++) + { + uVar1 *= 2; + if (uVar1 > uVar6) { + uVar1 = uVar5; + } + if ((sprite->status & uVar1) != 0) { + return uVar1; + } + } + return 0; +} + +u32 StatusSymbolBitToIndex(u32 statusBit) +{ + u32 index; + + index = 0; + if (statusBit != 0) { + do { + statusBit = statusBit >> 1; + index++; + } while (statusBit != 0); + } + return index; +} + +void sub_800F2EC(DungeonPokemonSprite *sprite, s32 index, DungeonPos *screenPos) +{ + u32 newFrame; + DungeonPokemonStatusSprite *statusSprite; + u32 statusSymbol; + + statusSprite = sprite->statusSprites + index; + if (sprite->status == 0) { + statusSprite->status = 0; + } + else { + if (statusSprite->status == 0) { + statusSprite->frame = 0; + } + if (statusSprite->frame < 1) { + statusSymbol = GetNextStatusSymbol(sprite,index); + if (statusSprite->status != statusSymbol) { + statusSprite->status = statusSymbol; + } + newFrame = 0x3c; + } + else { + newFrame = statusSprite->frame - 1; + } + statusSprite->frame = newFrame; + if ((sprite->visible != '\0') && (statusSprite->status != 0)) { + DrawStatusSprite(sprite->species,StatusSymbolBitToIndex(statusSprite->status),&(sprite->pos), + &sprite->statusOffsets[index],screenPos,sprite->unk11, sprite->id); + } + } +} + +void DrawStatusSprite(s16 param_1, s32 status, DungeonPos *pos, DungeonPos *posOffset, + DungeonPos *posScreen, u32 param_6, u32 unused) +{ + struct StatusSprite sprite; + s32 posY; + s32 posX; + u32 uVar7; + s32 vramIndex; + struct StatusGraphicsInfo *ptr; + + sprite = gStatusSprites[status]; + + ptr = &gStatusGraphics[sprite.image]; + vramIndex = (ptr->vramIndex + 0x32b); + SpriteSetPriority(&gUnknown_203B0DC, param_6); + + posX = (pos->x - ptr->width * 4 - posScreen->x) + posOffset->x; + posY = (pos->y - ptr->height * 4 - posScreen->y) + posOffset->y; + uVar7 = posY - 0x10; + if ((((-0x20 <= posX) && (-0x20 <= posY)) && (posX < 0xf0)) && (posY < 0xa0)) { + switch(sprite.image) { + case 1: + case 0xc: + case 0xe: + SpriteSetShape(&gUnknown_203B0DC, 0); + SpriteSetSize(&gUnknown_203B0DC, 0); + SpriteSetX(&gUnknown_203B0DC, posX); + SpriteSetY(&gUnknown_203B0DC, uVar7); + break; + case 8: + SpriteSetShape(&gUnknown_203B0DC, 2); + SpriteSetSize(&gUnknown_203B0DC, 0); + SpriteSetX(&gUnknown_203B0DC, posX); + SpriteSetY(&gUnknown_203B0DC, uVar7); + break; + case 2: + case 3: + case 6: + case 7: + case 9: + case 10: + case 11: + case 13: + case 15: + SpriteSetShape(&gUnknown_203B0DC, 0); + SpriteSetSize(&gUnknown_203B0DC, 1); + SpriteSetX(&gUnknown_203B0DC, posX); + SpriteSetY(&gUnknown_203B0DC, uVar7); + break; + case 0x10: + SpriteSetShape(&gUnknown_203B0DC, 0); + SpriteSetSize(&gUnknown_203B0DC, 1); + SpriteSetX(&gUnknown_203B0DC, posX + 8); + SpriteSetY(&gUnknown_203B0DC, uVar7); + break; + case 5: + SpriteSetShape(&gUnknown_203B0DC, 1); + SpriteSetSize(&gUnknown_203B0DC, 2); + SpriteSetX(&gUnknown_203B0DC, posX); + SpriteSetY(&gUnknown_203B0DC, uVar7); + break; + case 4: + SpriteSetShape(&gUnknown_203B0DC, 0); + SpriteSetSize(&gUnknown_203B0DC, 2); + SpriteSetX(&gUnknown_203B0DC, posX); + SpriteSetY(&gUnknown_203B0DC, posY); + break; + } + SpriteSetTileNum(&gUnknown_203B0DC, vramIndex); + SpriteSetPalNum(&gUnknown_203B0DC, sprite.palette); + AddSprite(&gUnknown_203B0DC,(pos->y - posScreen->y) / 2 + 1,NULL,NULL); + } +} void LoadStatusGraphics(s32 graphicIndex, bool8 param_2) { @@ -122,7 +313,7 @@ void sub_800F794(s32 id, s32 r1, s32 r2, s32 r3, s32 *r4) } } -void sub_800F7D0(s16 *r0) +void sub_800F7D0(DungeonPos *r0) { s32 index; From 4eb269b480cb90f7b3a966b6f5df6d4570593083 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 3 Jan 2025 22:06:29 -0800 Subject: [PATCH 10/27] document a little and decomp more funcs --- asm/code_800ED38.s | 78 ------------------------------- include/code_800F958.h | 4 +- include/dungeon_pokemon_sprites.h | 2 +- include/structs/str_dungeon.h | 2 +- src/code_800F958.c | 72 ++++++++++++++++++++++------ src/code_803E46C.c | 4 +- src/code_803E724.c | 4 +- src/code_8069E0C.c | 8 ++-- src/dungeon_serializer.c | 4 +- 9 files changed, 71 insertions(+), 107 deletions(-) diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index a7d7e6908..3ff568672 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -351,82 +351,4 @@ _0800F1BA: bx r1 thumb_func_end sub_800F19C - thumb_func_start sub_800F1C0 -sub_800F1C0: - push {lr} - sub sp, 0x8 - adds r2, r1, 0 - cmp r0, 0x1 - bcc _0800F1EC - cmp r0, 0x3 - bls _0800F1D4 - cmp r0, 0x4 - beq _0800F1E4 - b _0800F1EC -_0800F1D4: - ldr r1, _0800F1E0 - mov r0, sp - bl sprintf - b _0800F1EC - .align 2, 0 -_0800F1E0: .4byte gUnknown_80CE77C -_0800F1E4: - ldr r1, _0800F1FC - mov r0, sp - bl sprintf -_0800F1EC: - ldr r1, _0800F200 - mov r0, sp - bl Call_OpenFileAndGetFileDataPtr - add sp, 0x8 - pop {r1} - bx r1 - .align 2, 0 -_0800F1FC: .4byte gUnknown_80CE788 -_0800F200: .4byte gEffectFileArchive - thumb_func_end sub_800F1C0 - - thumb_func_start sub_800F204 -sub_800F204: - push {lr} - bl CloseFile - pop {r0} - bx r0 - thumb_func_end sub_800F204 - - thumb_func_start GetDungeonPokemonSprite - @ DungeonPokemonSprite *GetDungeonPokemonSprite(int id) -GetDungeonPokemonSprite: - push {r4,lr} - adds r4, r0, 0 - movs r3, 0 - ldr r0, _0800F230 - ldr r0, [r0] - adds r1, r0, 0x4 - adds r2, r0, 0 - adds r2, 0x8 -_0800F220: - ldrb r0, [r1] - cmp r0, 0 - beq _0800F234 - ldr r0, [r2] - cmp r0, r4 - bne _0800F234 - adds r0, r1, 0 - b _0800F240 - .align 2, 0 -_0800F230: .4byte gDungeonPokemonSprites -_0800F234: - adds r1, 0x40 - adds r2, 0x40 - adds r3, 0x1 - cmp r3, 0x15 - ble _0800F220 - movs r0, 0 -_0800F240: - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetDungeonPokemonSprite - .align 2,0 diff --git a/include/code_800F958.h b/include/code_800F958.h index 112b73916..96dcda691 100644 --- a/include/code_800F958.h +++ b/include/code_800F958.h @@ -3,6 +3,6 @@ #include "structs/str_position.h" -void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32); +void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32 priority); -#endif // GUARD_CODE_800F958_H \ No newline at end of file +#endif // GUARD_CODE_800F958_H diff --git a/include/dungeon_pokemon_sprites.h b/include/dungeon_pokemon_sprites.h index 5b718dd34..7be558f27 100644 --- a/include/dungeon_pokemon_sprites.h +++ b/include/dungeon_pokemon_sprites.h @@ -19,7 +19,7 @@ typedef struct DungeonPokemonSprite /* 0xA */ u16 unkA; /* 0xC */ u32 status; /* 0x10 */ u8 visible; - /* 0x11 */ u8 unk11; + /* 0x11 */ u8 priority; /* 0x14 */ DungeonPos pos; /* 0x18 */ DungeonPos statusOffsets[2]; /* 0x20 */ u32 unk20; diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 78c4bd342..1fa914b7c 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -79,7 +79,7 @@ typedef struct UnkDungeonGlobal_unk181E8_sub u32 unk181FC; // x14 u32 unk18200; // x18 u32 unk18204; // x1C - u8 unk18208; // x20 + u8 priority; // x20 /* 0x18209 */ u8 visibilityRange; // x21 Dungeon light level. /* 0x1820A */ bool8 blinded; // x22 Blacks out the screen when the player has the Blinker status. bool8 unk1820B; // x23 diff --git a/src/code_800F958.c b/src/code_800F958.c index 4b74960e1..c7adec72d 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -6,6 +6,7 @@ #include "memory.h" #include "sprite.h" #include "structs/sprite_oam.h" +#include struct StatusGraphicsInfo { @@ -29,10 +30,53 @@ extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 extern DungeonPos gUnknown_80D3564; extern SpriteOAM gUnknown_203B0DC; -extern DungeonPokemonSprite* GetDungeonPokemonSprite(s32 id); - void DrawStatusSprite(s16 param_1,s32 status,DungeonPos *pos,DungeonPos *posOffset, - DungeonPos *posScreen,u32 param_6, u32 unused); + DungeonPos *posScreen,u32 priority, u32 unused); + +extern u8 gUnknown_80CE77C[]; +extern u8 gUnknown_80CE788[]; + +extern struct FileArchive gEffectFileArchive; + +OpenedFile * sub_800F1C0(u32 animType, s32 effectID) +{ + u8 fileName [8]; + + switch(animType) + { + case 1: + case 2: + case 3: + sprintf(fileName,gUnknown_80CE77C,effectID); // efob + break; + case 4: + sprintf(fileName,gUnknown_80CE788,effectID); // efbg + break; + + } + return Call_OpenFileAndGetFileDataPtr(fileName,&gEffectFileArchive); +} + +void sub_800F204(OpenedFile *file) +{ + CloseFile(file); +} + +DungeonPokemonSprite *GetDungeonPokemonSprite(s32 id) +{ + s32 index; + + for(index = 0; index < 22; index++) + { + + if(gDungeonPokemonSprites->sprites[index].exists && gDungeonPokemonSprites->sprites[index].id == id) + { + return &gDungeonPokemonSprites->sprites[index]; + } + } + + return NULL; +} DungeonPokemonSprite *NewDungeonPokemonSprite(void){ s32 index; @@ -101,11 +145,9 @@ u32 StatusSymbolBitToIndex(u32 statusBit) u32 index; index = 0; - if (statusBit != 0) { - do { - statusBit = statusBit >> 1; + while (statusBit != 0) { + statusBit >>= 1; index++; - } while (statusBit != 0); } return index; } @@ -135,15 +177,15 @@ void sub_800F2EC(DungeonPokemonSprite *sprite, s32 index, DungeonPos *screenPos) newFrame = statusSprite->frame - 1; } statusSprite->frame = newFrame; - if ((sprite->visible != '\0') && (statusSprite->status != 0)) { + if ((sprite->visible != 0) && (statusSprite->status != 0)) { DrawStatusSprite(sprite->species,StatusSymbolBitToIndex(statusSprite->status),&(sprite->pos), - &sprite->statusOffsets[index],screenPos,sprite->unk11, sprite->id); + &sprite->statusOffsets[index],screenPos,sprite->priority, sprite->id); } } } void DrawStatusSprite(s16 param_1, s32 status, DungeonPos *pos, DungeonPos *posOffset, - DungeonPos *posScreen, u32 param_6, u32 unused) + DungeonPos *posScreen, u32 priority, u32 unused) { struct StatusSprite sprite; s32 posY; @@ -156,7 +198,7 @@ void DrawStatusSprite(s16 param_1, s32 status, DungeonPos *pos, DungeonPos *posO ptr = &gStatusGraphics[sprite.image]; vramIndex = (ptr->vramIndex + 0x32b); - SpriteSetPriority(&gUnknown_203B0DC, param_6); + SpriteSetPriority(&gUnknown_203B0DC, priority); posX = (pos->x - ptr->width * 4 - posScreen->x) + posOffset->x; posY = (pos->y - ptr->height * 4 - posScreen->y) + posOffset->y; @@ -357,7 +399,7 @@ void sub_800F7D0(DungeonPos *r0) gDungeonPokemonSprites->frame++; } -void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32 r3) { +void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32 priority) { DungeonPokemonSprite *dSprite; DungeonPokemonSprite *newSprite; DungeonPos newPos; @@ -381,7 +423,7 @@ void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32 r3) { newSprite->species = species_s32; newSprite->status = 0; newSprite->pos = *pos; - newSprite->unk11 = r3; + newSprite->priority = priority; newPos = gUnknown_80D3564; newSprite->statusOffsets[1] = newPos; newSprite->statusOffsets[0] = newPos; @@ -406,7 +448,7 @@ void DeletePokemonDungeonSprite(s32 id) } void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos, - DungeonPos *statusOffsets, u32 a3) + DungeonPos *statusOffsets, u32 priority) { DungeonPokemonSprite *dSprite; @@ -418,7 +460,7 @@ void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos, return; dSprite->pos = *pos; - dSprite->unk11 = a3; + dSprite->priority = priority; dSprite->statusOffsets[0] = statusOffsets[0]; dSprite->statusOffsets[1] = statusOffsets[3]; } diff --git a/src/code_803E46C.c b/src/code_803E46C.c index 78a58cffc..2bcefa896 100644 --- a/src/code_803E46C.c +++ b/src/code_803E46C.c @@ -60,12 +60,12 @@ void sub_803E490(u32 unused) if(gDungeon->unk181e8.unk1821A) { - gDungeon->unk181e8.unk18208 = 2; + gDungeon->unk181e8.priority = 2; SetBG2RegOffsets(gDungeon->unk181e8.cameraPixelPos.x, gDungeon->unk181e8.cameraPixelPos.y); } else { - gDungeon->unk181e8.unk18208 = 3; + gDungeon->unk181e8.priority = 3; SetBG2RegOffsets(0, 0); } SetBG3RegOffsets(gDungeon->unk181e8.cameraPixelPos.x, gDungeon->unk181e8.cameraPixelPos.y - gDungeon->unk181e8.unk181FC); diff --git a/src/code_803E724.c b/src/code_803E724.c index e05868484..847abf862 100644 --- a/src/code_803E724.c +++ b/src/code_803E724.c @@ -378,7 +378,7 @@ void sub_803EDF0(void) SpriteSetMatrixNum(&gUnknown_202EDDC, 0); SpriteSetSize(&gUnknown_202EDDC, 1); SpriteSetTileNum(&gUnknown_202EDDC, 0x216); - SpriteSetPriority(&gUnknown_202EDDC, gDungeon->unk181e8.unk18208); + SpriteSetPriority(&gUnknown_202EDDC, gDungeon->unk181e8.priority); SpriteSetPalNum(&gUnknown_202EDDC, gUnknown_202EDE8.unk2); SpriteSetUnk6_0(&gUnknown_202EDDC, 0); @@ -827,7 +827,7 @@ void sub_803F27C(bool8 a0) } strPtr->cameraTarget = NULL; - strPtr->unk18208 = 3; + strPtr->priority = 3; strPtr->unk1821A = 0; strPtr->unk18212 = 0; strPtr->unk1821B = 0; diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index ae2712c14..ee6411eee 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -1,4 +1,5 @@ #include "global.h" +#include "code_800F958.h" #include "code_803E46C.h" #include "code_803E668.h" #include "code_8045A00.h" @@ -70,7 +71,6 @@ extern void DeletePokemonDungeonSprite(s32 id); extern void sub_80429E8(Entity *r0); extern s32 sub_803DA20(s32 param_1); extern void sub_80694C0(Entity *, s32, s32, u32); -extern void AddPokemonDungeonSprite(s32 id, s16 species, DungeonPos *pos, u32); extern s32 gUnknown_202EDCC; extern void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos, DungeonPos *statusOffsets, u32 a3); extern void sub_8005700(DungeonPos *a0, struct axObject *a1); @@ -1780,7 +1780,7 @@ void sub_806BC68(bool8 a0, Entity *entity, struct unkStruct_806B7F8 *structPtr, entityPos.x = entity->pos.x; entityPos.y = entity->pos.y; - AddPokemonDungeonSprite(entInfo->unk98, entInfo->apparentID, &entityPos, gDungeon->unk181e8.unk18208); + AddPokemonDungeonSprite(entInfo->unk98, entInfo->apparentID, &entityPos, gDungeon->unk181e8.priority); LoadIQSkills(entity); sub_806A898(entity, FALSE, FALSE); } @@ -2206,7 +2206,7 @@ void sub_806C51C(Entity *entity) pos1.y = ((entity->pixelPos.y - entity->unk1C.raw) - entInfo->unk174.raw) / 256; sub_8005700(posArray, &entity->axObj); - sub_800F958(entInfo->unk98, &pos1, posArray, gDungeon->unk181e8.unk18208); + sub_800F958(entInfo->unk98, &pos1, posArray, gDungeon->unk181e8.priority); statusSprites = EntityGetStatusSprites(entity); UpdateDungeonPokemonSprite(entInfo->unk98, entInfo->apparentID, statusSprites, (var_3C && entInfo->unk14C)); @@ -2240,7 +2240,7 @@ void sub_806C51C(Entity *entity) spriteMasks.unk4 = 0xF3FF; spriteMasks.unk6 = 0; spriteMasks.unk8 = 0; - spriteMasks.unkA = gDungeon->unk181e8.unk18208 << 10; + spriteMasks.unkA = gDungeon->unk181e8.priority << 10; if (entInfo->isNotTeamMember && (entInfo->apparentID == MONSTER_DEOXYS_ATTACK || entInfo->apparentID == MONSTER_DEOXYS_DEFENSE || entInfo->apparentID == MONSTER_DEOXYS_SPEED)) { r4 = TRUE; diff --git a/src/dungeon_serializer.c b/src/dungeon_serializer.c index 588026a2b..3a7a424df 100644 --- a/src/dungeon_serializer.c +++ b/src/dungeon_serializer.c @@ -447,7 +447,7 @@ static void WriteDungeonVisibility(DataSerializer *seri) { WriteBlame(seri, sMisakiSan); - WriteU8(seri, gDungeon->unk181e8.unk18208); + WriteU8(seri, gDungeon->unk181e8.priority); WriteU8(seri, gDungeon->unk181e8.visibilityRange); WriteBool8(seri, gDungeon->unk181e8.blinded); WriteBool8(seri, gDungeon->unk181e8.unk1820B); @@ -844,7 +844,7 @@ static void ReadDungeonVisibility(DataSerializer *seri) ReadBlame(seri, sMisakiSan); gDungeon->unk181e8.cameraTarget = NULL; - gDungeon->unk181e8.unk18208 = ReadU8(seri); + gDungeon->unk181e8.priority = ReadU8(seri); gDungeon->unk181e8.visibilityRange = ReadU8(seri); gDungeon->unk181e8.blinded = ReadBool8(seri); gDungeon->unk181e8.unk1820B = ReadBool8(seri); From 34e5bfadf6fc5e85036f21480ea83ac1dcd0db93 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 4 Jan 2025 08:51:23 -0800 Subject: [PATCH 11/27] more decomp of effect funcs --- asm/code_800ED38.s | 242 ----------------------------------------- include/code_800E9A8.h | 2 +- src/code_800DAC0.c | 12 +- src/code_800F958.c | 109 ++++++++++++++++++- 4 files changed, 115 insertions(+), 250 deletions(-) diff --git a/asm/code_800ED38.s b/asm/code_800ED38.s index 3ff568672..9757a96b6 100644 --- a/asm/code_800ED38.s +++ b/asm/code_800ED38.s @@ -109,246 +109,4 @@ _0800F01A: bx r0 thumb_func_end sub_800EF64 - thumb_func_start sub_800F034 -sub_800F034: - push {r4-r6,lr} - ldr r4, _0800F074 - ldr r0, [r4] - cmp r0, 0 - bne _0800F04E - movs r0, 0x10 - movs r1, 0xB - bl MemoryAlloc - str r0, [r4] - movs r1, 0x10 - bl MemoryClear8 -_0800F04E: - movs r3, 0 - adds r6, r4, 0 - movs r5, 0x1 - negs r5, r5 - movs r4, 0 -_0800F058: - ldr r0, [r6] - lsls r2, r3, 3 - adds r1, r0, r2 - str r5, [r1] - adds r0, 0x4 - adds r0, r2 - str r4, [r0] - adds r3, 0x1 - cmp r3, 0x1 - ble _0800F058 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800F074: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F034 - - thumb_func_start sub_800F078 -sub_800F078: - push {r4,lr} - ldr r4, _0800F090 - ldr r0, [r4] - cmp r0, 0 - beq _0800F08A - bl MemoryFree - movs r0, 0 - str r0, [r4] -_0800F08A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0800F090: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F078 - - thumb_func_start sub_800F094 -sub_800F094: - push {r4-r6,lr} - movs r3, 0 - ldr r6, _0800F0BC - movs r5, 0x1 - negs r5, r5 - movs r4, 0 -_0800F0A0: - ldr r0, [r6] - lsls r2, r3, 3 - adds r1, r0, r2 - str r5, [r1] - adds r0, 0x4 - adds r0, r2 - str r4, [r0] - adds r3, 0x1 - cmp r3, 0x1 - ble _0800F0A0 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0800F0BC: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F094 - - thumb_func_start sub_800F0C0 -sub_800F0C0: - push {lr} - cmp r0, 0x3 - bne _0800F0D8 - ldr r0, _0800F0D4 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, r1 - bne _0800F0EC - movs r0, 0 - b _0800F0F0 - .align 2, 0 -_0800F0D4: .4byte gUnknown_203B0D4 -_0800F0D8: - ldr r0, _0800F0E8 - ldr r0, [r0] - ldr r0, [r0, 0x8] - cmp r0, r1 - bne _0800F0EC - movs r0, 0x1 - b _0800F0F0 - .align 2, 0 -_0800F0E8: .4byte gUnknown_203B0D4 -_0800F0EC: - movs r0, 0x3 - negs r0, r0 -_0800F0F0: - pop {r1} - bx r1 - thumb_func_end sub_800F0C0 - - thumb_func_start sub_800F0F4 -sub_800F0F4: - push {lr} - cmp r0, 0x3 - bne _0800F114 - ldr r0, _0800F110 - ldr r2, [r0] - ldr r0, [r2] - cmp r0, r1 - beq _0800F11E - ldr r0, [r2, 0x4] - cmp r0, 0 - bne _0800F132 - movs r0, 0 - b _0800F136 - .align 2, 0 -_0800F110: .4byte gUnknown_203B0D4 -_0800F114: - ldr r0, _0800F124 - ldr r2, [r0] - ldr r0, [r2, 0x8] - cmp r0, r1 - bne _0800F128 -_0800F11E: - movs r0, 0x2 - negs r0, r0 - b _0800F136 - .align 2, 0 -_0800F124: .4byte gUnknown_203B0D4 -_0800F128: - ldr r0, [r2, 0xC] - cmp r0, 0 - bne _0800F132 - movs r0, 0x1 - b _0800F136 -_0800F132: - movs r0, 0x1 - negs r0, r0 -_0800F136: - pop {r1} - bx r1 - thumb_func_end sub_800F0F4 - - thumb_func_start sub_800F13C -sub_800F13C: - push {lr} - ldr r1, _0800F158 - ldr r3, [r1] - lsls r1, r0, 3 - adds r0, r3, 0x4 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _0800F154 - adds r1, r3, r1 - ldr r0, [r2, 0x4] - str r0, [r1] -_0800F154: - pop {r0} - bx r0 - .align 2, 0 -_0800F158: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F13C - - thumb_func_start sub_800F15C -sub_800F15C: - push {r4,r5,lr} - adds r4, r0, 0 - movs r3, 0 - ldr r5, _0800F17C -_0800F164: - ldr r1, [r5] - lsls r2, r3, 3 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r4 - bne _0800F180 - adds r1, 0x4 - adds r1, r2 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - b _0800F186 - .align 2, 0 -_0800F17C: .4byte gUnknown_203B0D4 -_0800F180: - adds r3, 0x1 - cmp r3, 0x1 - ble _0800F164 -_0800F186: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_800F15C - - thumb_func_start sub_800F18C -sub_800F18C: - ldr r1, _0800F198 - lsls r0, 3 - ldr r1, [r1] - adds r1, r0 - adds r0, r1, 0 - bx lr - .align 2, 0 -_0800F198: .4byte gUnknown_203B0D4 - thumb_func_end sub_800F18C - - thumb_func_start sub_800F19C -sub_800F19C: - push {lr} - ldr r1, _0800F1B4 - ldr r1, [r1] - lsls r0, 3 - adds r1, 0x4 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _0800F1B8 - movs r0, 0x1 - b _0800F1BA - .align 2, 0 -_0800F1B4: .4byte gUnknown_203B0D4 -_0800F1B8: - movs r0, 0 -_0800F1BA: - pop {r1} - bx r1 - thumb_func_end sub_800F19C - .align 2,0 diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index 067a7658a..dca862fd6 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -20,7 +20,7 @@ struct unkStruct_203B0CC_sub s32 unk24; u8 fill28[0x32 - 0x28]; u32 unk34; - u32 unk38; + u32 effectID; u8 fill3C[0x4C - 0x3C]; u32 unk4C; s32 unk50; diff --git a/src/code_800DAC0.c b/src/code_800DAC0.c index ca0483da4..8c555c33a 100644 --- a/src/code_800DAC0.c +++ b/src/code_800DAC0.c @@ -11,8 +11,8 @@ EWRAM_INIT struct unkStruct_203B0CC *gUnknown_203B0CC = NULL; struct unkStruct_800F18C { - u32 unk0; - u32 unk4; + s32 effectID; + u32 counter; }; extern s32 sub_800E2C0(u32); @@ -144,16 +144,16 @@ void sub_800DC14(s32 param_1) if (preload->unk34 == 3) { for (index2 = 0; index2 < 2; index2 = index2 + 1) { piVar3 = sub_800F18C(index2); - if (piVar3->unk0 == preload->unk38) { - piVar3->unk4--; + if (piVar3->effectID == preload->effectID) { + piVar3->counter--; break; } } } else { puVar4 = sub_800F18C(1); - puVar4->unk4 = 0; - puVar4->unk0 = 0xffffffff; + puVar4->counter = 0; + puVar4->effectID = -1; } sub_800DCA8(preload); } diff --git a/src/code_800F958.c b/src/code_800F958.c index c7adec72d..ab60e5978 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -1,6 +1,9 @@ #include "global.h" #include "code_800F958.h" +#include "code_8004AA0.h" #include "code_8009804.h" +#include "code_800E9E4.h" +#include "code_801EE10.h" #include "cpu.h" #include "dungeon_pokemon_sprites.h" #include "memory.h" @@ -26,9 +29,22 @@ struct StatusSprite }; extern struct StatusSprite gStatusSprites[8]; +struct unkStruct_800F18C +{ + s32 effectID; + u32 counter; +}; + +struct unkStruct_203B0D4 +{ + struct unkStruct_800F18C unk0[2]; +}; + +struct unkStruct_203B0D4 *gUnknown_203B0D4; +extern SpriteOAM gUnknown_203B0DC; + extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 extern DungeonPos gUnknown_80D3564; -extern SpriteOAM gUnknown_203B0DC; void DrawStatusSprite(s16 param_1,s32 status,DungeonPos *pos,DungeonPos *posOffset, DungeonPos *posScreen,u32 priority, u32 unused); @@ -38,6 +54,97 @@ extern u8 gUnknown_80CE788[]; extern struct FileArchive gEffectFileArchive; +void sub_800F034(void) { + s32 index; + if(gUnknown_203B0D4 == NULL) + { + gUnknown_203B0D4 = MemoryAlloc(sizeof(struct unkStruct_203B0D4), 0xB); + MemoryClear8(gUnknown_203B0D4, sizeof(struct unkStruct_203B0D4)); + } + for(index = 0; index < 2; index++) + { + gUnknown_203B0D4->unk0[index].effectID = -1; + gUnknown_203B0D4->unk0[index].counter = 0; + } +} + +void sub_800F078(void) +{ + if(gUnknown_203B0D4) + { + MemoryFree(gUnknown_203B0D4); + gUnknown_203B0D4 = NULL; + } +} + +void sub_800F094(void) +{ + s32 index; + for(index = 0; index < 2; index++) + { + gUnknown_203B0D4->unk0[index].effectID = -1; + gUnknown_203B0D4->unk0[index].counter = 0; + } +} + +s32 sub_800F0C0(s32 animType, s32 effectID) +{ + if (animType == 3) { + if (gUnknown_203B0D4->unk0[0].effectID == effectID) return 0; + } + else { + if (gUnknown_203B0D4->unk0[1].effectID == effectID) return 1; + } + return -3; +} + + +s32 sub_800F0F4(s32 animType, s32 effectID) +{ + if (animType == 3) { + if (gUnknown_203B0D4->unk0[0].effectID == effectID) return -2; + if (gUnknown_203B0D4->unk0[0].counter == 0) return 0; + } + else { + if (gUnknown_203B0D4->unk0[1].effectID == effectID) return -2; + if (gUnknown_203B0D4->unk0[1].counter == 0) return 1; + } + return -1; +} + +void sub_800F13C(s32 index, OpenedFile *file, unkStruct_80B9CC4 * r2) +{ + if(gUnknown_203B0D4->unk0[index].counter == 0) + gUnknown_203B0D4->unk0[index].effectID = r2->effectId; +} + +void sub_800F15C(s32 effectID) +{ + s32 index; + + for(index = 0; index < 2; index++) + { + if(gUnknown_203B0D4->unk0[index].effectID == effectID) + { + gUnknown_203B0D4->unk0[index].counter++; + break; + } + } +} + +struct unkStruct_800F18C *sub_800F18C(s32 index) +{ + return &gUnknown_203B0D4->unk0[index]; +} + +s32 sub_800F19C(s32 index) +{ + if(gUnknown_203B0D4->unk0[index].counter == 0) + return 0; + else + return 1; +} + OpenedFile * sub_800F1C0(u32 animType, s32 effectID) { u8 fileName [8]; From 462635537819e964f23c336947fb60128be0a2d1 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 4 Jan 2025 15:41:42 -0800 Subject: [PATCH 12/27] split and move more data to src --- data/data_80B9BB8_2.s | 630 ------------------------------------------ data/data_80CE77C.s | 603 ++++++++++++++++++++++++++++++++++++++++ include/global.h | 14 +- ld_script.txt | 4 + src/code_800F034.c | 140 ++++++++++ src/code_800F958.c | 187 ++++--------- 6 files changed, 803 insertions(+), 775 deletions(-) create mode 100644 data/data_80CE77C.s create mode 100644 src/code_800F034.c diff --git a/data/data_80B9BB8_2.s b/data/data_80B9BB8_2.s index ae2c24d9c..a90fe680d 100644 --- a/data/data_80B9BB8_2.s +++ b/data/data_80B9BB8_2.s @@ -1,4 +1,3 @@ -#define TILE_SIZE_2BPP 32 .section .rodata .align 2,0 @@ -5569,633 +5568,4 @@ gUnknown_80CE73C: @ 80CE73C .string "pksdir0\0" .string "pksdir0\0" - .string "pksdir0\0" - .align 2,0 - .global gUnknown_80CE77C -gUnknown_80CE77C: @ 80CE77C - .string "efob%03d\0" - .align 2,0 - - .global gUnknown_80CE788 -gUnknown_80CE788: @ 80CE788 - .string "efbg%03d\0" - .align 2,0 - .string "pksdir0\0" - - .global gStatusGraphics -gStatusGraphics: @ 80CE79C - @ width, height, vram index, unk, graphic count, offset into graphic - .4byte 0, 0, 0, 0, 0, 0 - .4byte 1, 1, 0, 0, 14, TILE_SIZE_2BPP * 0 @ sleepless - .4byte 2, 2, 1, 0, 7, TILE_SIZE_2BPP * 14 @ burned - .4byte 2, 2, 5, 0, 16, TILE_SIZE_2BPP * 42 @ poisoned - .4byte 4, 4, 9, 0, 6, TILE_SIZE_2BPP * 106 @ frozen - .4byte 4, 2, 25, 0, 4, TILE_SIZE_2BPP * 202 @ confused - .4byte 2, 2, 33, 0, 9, TILE_SIZE_2BPP * 234 @ whiffer - .4byte 2, 2, 37, 0, 8, TILE_SIZE_2BPP * 270 @ taunted - .4byte 1, 2, 41, 0, 8, TILE_SIZE_2BPP * 302 @ lowhp - .4byte 2, 2, 43, 0, 13, TILE_SIZE_2BPP * 318 @ shield - .4byte 2, 2, 47, 10, 10, TILE_SIZE_2BPP * 370 @ statdown - .4byte 2, 2, 51, 0, 13, TILE_SIZE_2BPP * 410 @ sword - .4byte 1, 1, 55, 0, 14, TILE_SIZE_2BPP * 462 @ blinker - .4byte 2, 2, 56, 0, 10, TILE_SIZE_2BPP * 476 @ cross-eyed - .4byte 1, 1, 60, 0, 14, TILE_SIZE_2BPP * 516 @ eyedrops - .4byte 2, 2, 61, 0, 8, TILE_SIZE_2BPP * 530 @ muzzled - .4byte 2, 2, 65, 4, 10, TILE_SIZE_2BPP * 562 @ sleep - - .global gStatusGraphics4bpp -gStatusGraphics4bpp: @ 80CE934 - .incbin "graphics/status/sleepless.4bpp" - .incbin "graphics/status/burned.4bpp" - .incbin "graphics/status/poisoned.4bpp" - .incbin "graphics/status/frozen.4bpp" - .incbin "graphics/status/confused.4bpp" - .incbin "graphics/status/whiffer.4bpp" - .incbin "graphics/status/taunted.4bpp" - .incbin "graphics/status/lowhp.4bpp" - .incbin "graphics/status/shield.4bpp" - .incbin "graphics/status/statdown.4bpp" - .incbin "graphics/status/sword.4bpp" - .incbin "graphics/status/blinker.4bpp" - .incbin "graphics/status/cross_eyed.4bpp" - .incbin "graphics/status/eyedrops.4bpp" - .incbin "graphics/status/muzzled.4bpp" - .incbin "graphics/status/sleep.4bpp" - - .global gStatusSprites -gStatusSprites: @ 80D3474 - @ Status to status image conversion - @ image, palette - .4byte 0, 0 - .4byte 1, 0 @ STATUS_SPRITE_SLEEPLESS - .4byte 2, 0 @ STATUS_SPRITE_BURNED - .4byte 3, 11 @ STATUS_SPRITE_POISONED - .4byte 3, 7 @ STATUS_SPRITE_BADLY_POISONED - .4byte 5, 0 @ STATUS_SPRITE_CONFUSED - .4byte 6, 0 @ STATUS_SPRITE_COWERING - .4byte 7, 0 @ STATUS_SPRITE_TAUNTED - .4byte 8, 0 @ STATUS_SPRITE_ENCORE - .4byte 9, 0 @ STATUS_SPRITE_SHIELD_BLUE - .4byte 9, 4 @ STATUS_SPRITE_SHIELD_RED - .4byte 9, 3 @ STATUS_SPRITE_SHIELD_YELLOW - .4byte 9, 10 @ STATUS_SPRITE_SHIELD_GREEN - .4byte 9, 5 @ STATUS_SPRITE_ENDURE - .4byte 8, 0 @ STATUS_SPRITE_LOWHP - .4byte 3, 6 @ STATUS_SPRITE_CURSED - .4byte 8, 3 @ STATUS_SPRITE_SNATCH - .4byte 11, 0 @ STATUS_SPRITE_SURE_SHOT - .4byte 6, 10 @ STATUS_SPRITE_WHIFFER - .4byte 11, 5 @ STATUS_SPRITE_SET_DAMAGE - .4byte 11, 4 @ STATUS_SPRITE_FOCUS_ENERGY - .4byte 12, 0 @ STATUS_SPRITE_BLINKER - .4byte 13, 0 @ STATUS_SPRITE_CROSS_EYED - .4byte 14, 0 @ STATUS_SPRITE_EYEDROPS - .4byte 15, 0 @ STATUS_SPRITE_MUZZLED - .4byte 9, 7 @ STATUS_SPRITE_GRUDGE - .4byte 14, 4 @ STATUS_SPRITE_EXPOSED - .4byte 16, 4 @ STATUS_SPRITE_SLEEP - .4byte 10, 3 @ STATUS_SPRITE_STAT_DOWN - .4byte 4, 0 @ STATUS_SPRITE_FROZEN - - .global gUnknown_80D3564 -gUnknown_80D3564: @ 80D3564 - .byte 0,0,0,0 - .string "pksdir0\0" - .align 2,0 - -@ Friend Area Data - - .global gFriendAreaLocations -gFriendAreaLocations: @ 80D3570 -@ replacing .incbin "baserom.gba", 0x000d3570, 0x94c - .4byte gUnknown_80D3EAC - .byte 0xc5, 0x01, 0x71, 0x00, 0x08, 0x09, 0x0a, 0x27, 0x2f, 0x0b, 0x3f, 0x3f, 0x05, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x02, 0x00, 0x07, 0x00 @ Mountain Range - .4byte gUnknown_80D3EA4 - .byte 0xcd, 0x01, 0x1c, 0x00, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x0c, 0x00 - .4byte gUnknown_80D3E9C - .byte 0x61, 0x01, 0x78, 0x00, 0x0d, 0x0e, 0x11, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1b, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0xff, 0xff, 0x09, 0x00, 0xff, 0xff - .4byte gUnknown_80D3E8C - .byte 0x62, 0x01, 0x2d, 0x01, 0x0f, 0x0c, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x0e, 0x00, 0x12, 0x00, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3E80 - .byte 0x94, 0x01, 0x02, 0x01, 0x34, 0x35, 0x28, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x11, 0x00, 0xff, 0xff, 0x0b, 0x00, 0x08, 0x00, 0xff, 0xff, 0x0e, 0x00, 0x03, 0x00 - .4byte gUnknown_80D3E70 - .byte 0xc7, 0x01, 0x9d, 0x00, 0x12, 0x13, 0x14, 0x15, 0x3f, 0x3f, 0x3f, 0x3f, 0x0b, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x08, 0x00 - .4byte gUnknown_80D3E60 - .byte 0x08, 0x01, 0x9d, 0x00, 0x16, 0x17, 0x18, 0x19, 0x3f, 0x3f, 0x3f, 0x3f, 0x10, 0x00, 0xff, 0xff, 0x1b, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1a, 0x00, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3E58 - .byte 0x97, 0x01, 0xa0, 0x00, 0x1a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x08, 0x00, 0x0b, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x1b, 0x00, 0xff, 0xff - .4byte gUnknown_80D3E48 - .byte 0x98, 0x01, 0xcf, 0x00, 0x1b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x04, 0x00, 0xff, 0xff, 0x0b, 0x00, 0x05, 0x00, 0x07, 0x00, 0x1b, 0x00, 0xff, 0xff, 0x0e, 0x00 - .4byte gUnknown_80D3E40 - .byte 0x33, 0x01, 0x79, 0x00, 0x1c, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x1b, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0x14, 0x00, 0xff, 0xff, 0x06, 0x00 - .4byte gUnknown_80D3E30 - .byte 0x82, 0x01, 0x1d, 0x00, 0x1d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x0c, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x0d, 0x00 - .4byte gUnknown_80D3E20 - .byte 0xc6, 0x01, 0xd0, 0x00, 0x1e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x07, 0x00, 0x08, 0x00, 0x04, 0x00 - .4byte gUnknown_80D3E18 - .byte 0xa2, 0x01, 0x46, 0x00, 0x1f, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0xff, 0xff, 0x0a, 0x00, 0x0d, 0x00, 0x02, 0x00 - .4byte gUnknown_80D3E10 - .byte 0x60, 0x01, 0x47, 0x00, 0x21, 0x23, 0x24, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x02, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x0a, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x14, 0x00, 0x09, 0x00 - .4byte gUnknown_80D3E08 - .byte 0x63, 0x01, 0x04, 0x01, 0x25, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x00, 0xff, 0xff, 0x04, 0x00, 0x08, 0x00, 0x1b, 0x00, 0xff, 0xff, 0x12, 0x00, 0xff, 0xff - .4byte gUnknown_80D3E00 - .byte 0x36, 0x01, 0x1c, 0x00, 0x26, 0x29, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x09, 0x00, 0x0d, 0x00, 0x0a, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x14, 0x00 - .4byte gUnknown_80D3DF8 - .byte 0x07, 0x01, 0xcb, 0x00, 0x10, 0x2a, 0x32, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x12, 0x00, 0xff, 0xff, 0x1b, 0x00, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0x19, 0x00 - .4byte gUnknown_80D3DF0 - .byte 0xc4, 0x01, 0x2d, 0x01, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3DE8 - .byte 0x31, 0x01, 0x05, 0x01, 0x2e, 0x2c, 0x2d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x03, 0x00, 0x0e, 0x00, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x19, 0x00, 0xff, 0xff - .4byte gUnknown_80D3DE4 - .byte 0x2f, 0x00, 0x15, 0x00, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x17, 0x00, 0x1a, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3DD4 - .byte 0x07, 0x01, 0x47, 0x00, 0x36, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x06, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0xff, 0xff, 0x18, 0x00, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3DC4 - .byte 0x5d, 0x00, 0x0c, 0x01, 0x37, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x19, 0x00, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3DB4 - .byte 0x2d, 0x00, 0xcb, 0x00, 0x38, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x15, 0x00, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3DA4 - .byte 0x2d, 0x00, 0x70, 0x00, 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x16, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x00, 0x13, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D94 - .byte 0xd0, 0x00, 0x16, 0x00, 0x01, 0x03, 0x05, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x14, 0x00, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x00 - .4byte gUnknown_80D3D84 - .byte 0xb2, 0x00, 0x0d, 0x01, 0x02, 0x04, 0x06, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x10, 0x00, 0xff, 0xff, 0xff, 0xff, 0x15, 0x00, 0xff, 0xff - .4byte gUnknown_80D3D7C - .byte 0x81, 0x00, 0x42, 0x00, 0x07, 0x31, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x06, 0x00, 0xff, 0xff, 0x18, 0x00, 0xff, 0xff, 0x13, 0x00, 0xff, 0xff, 0x17, 0x00 @ Beach - .4byte gUnknown_80D3D78 - .byte 0x63, 0x01, 0xa1, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x0e, 0x00, 0x08, 0x00, 0x07, 0x00, 0xff, 0xff, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x10, 0x00 @ Team Name - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - .4byte gUnknown_80D3D70 - .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - @ Start of Friend Area String Pool (80D3D70) - @ These are what show on the map when going to Friend Areas - .global gUnknown_80D3D70 - gUnknown_80D3D70: - .string "ななし\0" - .align 2,0 - .global gUnknown_80D3D78 - gUnknown_80D3D78: - .string "$t\0" @ Team Name - .align 2,0 - .global gUnknown_80D3D7C - gUnknown_80D3D7C: - .string "Beach\0" - .align 2,0 - .global gUnknown_80D3D84 - gUnknown_80D3D84: - .string "Southern Sea\0" - .align 2,0 - .global gUnknown_80D3D94 - gUnknown_80D3D94: - .string "Northern Sea\0" - .align 2,0 - .global gUnknown_80D3DA4 - gUnknown_80D3DA4: - .string "Western Isles\0" - .align 2,0 - .global gUnknown_80D3DB4 - gUnknown_80D3DB4: - .string "Southwest Isles\0" - .align 2,0 - .global gUnknown_80D3DC4 - gUnknown_80D3DC4: - .string "Southern Isles\0" - .align 2,0 - .global gUnknown_80D3DD4 - gUnknown_80D3DD4: - .string "Northern Isles\0" - .align 2,0 - .global gUnknown_80D3DE4 - gUnknown_80D3DE4: - .string "Sky\0" - .align 2,0 - .global gUnknown_80D3DE8 - gUnknown_80D3DE8: - .string "Relics\0" - .align 2,0 - .global gUnknown_80D3DF0 - gUnknown_80D3DF0: - .string "Desert\0" - .align 2,0 - .global gUnknown_80D3DF8 - gUnknown_80D3DF8: - .string "Volcano\0" - .align 2,0 - .global gUnknown_80D3E00 - gUnknown_80D3E00: - .string "Ruins\0" - .align 2,0 - .global gUnknown_80D3E08 - gUnknown_80D3E08: - .string "Jungle\0" - .align 2,0 - .global gUnknown_80D3E10 - gUnknown_80D3E10: - .string "Cave\0" - .align 2,0 - .global gUnknown_80D3E18 - gUnknown_80D3E18: - .string "Marsh\0" - .align 2,0 - .global gUnknown_80D3E20 - gUnknown_80D3E20: - .string "Eastern Lakes\0" - .align 2,0 - .global gUnknown_80D3E30 - gUnknown_80D3E30: - .string "Northern Lakes\0" - .align 2,0 - .global gUnknown_80D3E40 - gUnknown_80D3E40: - .string "Pond\0" - .align 2,0 - .global gUnknown_80D3E48 - gUnknown_80D3E48: - .string "Eastern Ponds\0" - .align 2,0 - .global gUnknown_80D3E58 - gUnknown_80D3E58: - .string "River\0" - .align 2,0 - .global gUnknown_80D3E60 - gUnknown_80D3E60: - .string "Western Forest\0" - .align 2,0 - .global gUnknown_80D3E70 - gUnknown_80D3E70: - .string "Eastern Forest\0" - .align 2,0 - .global gUnknown_80D3E80 - gUnknown_80D3E80: - .string "Badlands\0" - .align 2,0 - .global gUnknown_80D3E8C - gUnknown_80D3E8C: - .string "South Plains\0" - .align 2,0 - .global gUnknown_80D3E9C - gUnknown_80D3E9C: - .string "Plains\0" - .align 2,0 - .global gUnknown_80D3EA4 - gUnknown_80D3EA4: - .string "Glacier\0" - .align 2,0 - .global gUnknown_80D3EAC - gUnknown_80D3EAC: - .string "Mountain Range\0" - .align 2,0 - - .global gUnknown_80D3EBC -gUnknown_80D3EBC: @ 80D3EBC -@ replacing .incbin "baserom.gba", 0x000d3ebc, 0x20 - .byte 0x80, 0x03 - .byte 0x80, 0x04 - .byte 0x80, 0x00 - .byte 0x80, 0x03 - .byte 0x80, 0x0f - .byte 0x80, 0x00 - .byte 0x80, 0x0c - .byte 0x80, 0x0f - .byte 0x80, 0x0b - .byte 0x80, 0x0c - .byte 0x80, 0x08 - .byte 0x80, 0x0b - .byte 0x80, 0x07 - .byte 0x80, 0x08 - .byte 0x80, 0x04 - .byte 0x80, 0x07 - - .global gUnknown_80D3EDC -gUnknown_80D3EDC: @ 80D3EDC - .byte 0xff, 0x00, 0x02, 0x01 - .byte 0x04, 0xff, 0x03, 0xff - .byte 0x06, 0x07, 0xff, 0xff - .byte 0x05, 0xff, 0xff, 0xff - - - .global gUnknown_80D3EEC -gUnknown_80D3EEC: @ 80D3EEC - .byte 0xff, 0xff, 0xff, 0x01 - .byte 0xff, 0xff, 0x03, 0xff - .byte 0xff, 0x07, 0xff, 0xff - .byte 0x05, 0xff, 0xff, 0xff - - .global gUnknown_80D3EFC -gUnknown_80D3EFC: @ 80D3EFC - .string "$t Team Base\0" - .align 2,0 - .string "pksdir0\0" - .align 2,0 - - .global gDungeonCoordinates -gDungeonCoordinates: @ 80D3F14 -@ replacing .incbin "baserom.gba", 0x000d3f14, 0x100 -@ 2 byte X and 2 byte Y - .2byte 172, 174 @ Tiny Woods - .2byte 171, 111 - .2byte 242, 126 - .2byte 232, 181 - .2byte 263, 155 - .2byte 298, 159 - .2byte 299, 142 - .2byte 203, 255 - .2byte 385, 166 - .2byte 388, 126 - .2byte 389, 109 - .2byte 417, 112 - .2byte 422, 101 - .2byte 432, 85 - .2byte 436, 69 - .2byte 442, 150 - .2byte 446, 163 - .2byte 365, 27 - .2byte 352, 12 - .2byte 133, 238 - .2byte 129, 143 - .2byte 344, 105 - .2byte 427, 62 - .2byte 27, 211 - .2byte 246, 315 - .2byte 443, 6 - .2byte 32, 279 - .2byte 404, 262 - .2byte 194, 63 - .2byte 159, 46 - .2byte 441, 310 - .2byte 231, 235 - .2byte 169, 287 - .2byte 441, 273 - .2byte 64, 87 - .2byte 80, 54 - .2byte 431, 225 - .2byte 27, 94 - .2byte 354, 298 - .2byte 336, 253 - .2byte 287, 222 - .2byte 63, 163 - .2byte 275, 111 - .2byte 202, 232 - .2byte 268, 302 - .2byte 336, 260 - .2byte 110, 79 - .2byte 225, 314 - .2byte 206, 314 - .2byte 11, 307 - .2byte 472, 25 - .2byte 250, 8 - .2byte 187, 190 - .2byte 205, 111 - .2byte 474, 6 - .2byte 183, 9 - .2byte 367, 214 - .2byte 278, 273 - .2byte 68, 305 - .2byte 270, 33 - .2byte 33, 39 - .2byte 217, 8 - .2byte 69, 280 - .2byte 192, 183 @ D63 - - .global gUnknown_80D4014 -gUnknown_80D4014: @ 80D4014 - .4byte wmp2font_text - .4byte wmp2mcc_text - .4byte wmp2cani_text - .4byte wmp2pal_text - .4byte wmp2fon1_text - - .global wmp2fon1_text - wmp2fon1_text: - .string "wmp2fon1\0" - .align 2,0 - - .global wmp2pal_text - wmp2pal_text: - .string "wmp2pal\0" - .align 2,0 - - .global wmp2cani_text - wmp2cani_text: - .string "wmp2cani\0" - .align 2,0 - - .global wmp2mcc_text - wmp2mcc_text: - .string "wmp2mcc\0" - .align 2,0 - - .global wmp2font_text - wmp2font_text: - .string "wmp2font\0" - .align 2,0 - - .global gUnknown_80D405C -gUnknown_80D405C: @ 80D405C - .string "ax%03d\0" - .align 2,0 - - .global gUnknown_80D4064 -gUnknown_80D4064: @ 80D4064 - .string "wmapspr\0" - .align 2,0 - - .global gUnknown_80D406C -gUnknown_80D406C: @ 80D406C - .string "palet\0" - .align 2,0 - - .global gUnknown_80D4074 -gUnknown_80D4074: @ 80D4074 - .string "{CENTER_ALIGN}{POKEMON_0}\0" - .align 2,0 - - .global gUnknown_80D407C -gUnknown_80D407C: @ 80D4074 - .string "Yes\0" - .align 2,0 - - .global gUnknown_80D4080 -gUnknown_80D4080: @ 80D4080 - .string "No\0" - .align 2,0 - .string "pksdir0\0" - .align 2,0 - - .global gUnknown_80D408C -gUnknown_80D408C: @ 80D408C - .4byte wmapfont_text - .4byte wmapmcc_text - .4byte wmapcani_text - .4byte wmappal_text - - .global wmappal_text - wmappal_text: - .string "wmappal\0" - .align 2,0 - - .global wmapcani_text - wmapcani_text: - .string "wmapcani\0" - .align 2,0 - - .global wmapmcc_text - wmapmcc_text: - .string "wmapmcc\0" - .align 2,0 - - .global wmapfont_text - wmapfont_text: - .string "wmapfont\0" - .align 2,0 - - .global gUnknown_80D40C4 -gUnknown_80D40C4: @ 80D40C4 - .byte 0x00, 0x00, 0x18, 0x00 - .byte 0x18, 0x00, 0x18, 0x00 - .byte 0x18, 0x00, 0x00, 0x00 - .byte 0x18, 0x00, 0xE8, 0xFF - .byte 0x00, 0x00, 0xE8, 0xFF - .byte 0xE8, 0xFF, 0xE8, 0xFF - .byte 0xE8, 0xFF, 0x00, 0x00 - .byte 0xE8, 0xFF, 0x18, 0x00 - - .global gUnknown_80D40E4 -gUnknown_80D40E4: @ 80D40E4 - .string "ax%03d\0" - .align 2,0 - - .global gUnknown_80D40EC -gUnknown_80D40EC: @ 80D40EC - .string "wmapspr\0" - .align 2,0 - - .global gUnknown_80D40F4 -gUnknown_80D40F4: @ 80D40F4 - .string "palet\0" - .align 2,0 - - .global gUnknown_80D40FC -gUnknown_80D40FC: @ 80D40FC - .string "{CENTER_ALIGN}%s\0" - .align 2,0 - - .global gUnknown_80D4104 -gUnknown_80D4104: @ 80D4104 - .string "Where would you like to go?\0" - .align 2,0 - - .global gUnknown_80D4120 -gUnknown_80D4120: @ 80D4120 - .string "{MOVE_ITEM_0}\0" - .align 2,0 - - .global gUnknown_80D4124 -gUnknown_80D4124: @ 80D4124 - .string "{MOVE_ITEM_0}($v02" - .byte 0x81, 0x5E - .asciz "$v12)" - .align 2,0 - - .asciz "pksdir0" - .asciz "pksdir0" - - .global gUnknown_80D4144 -gUnknown_80D4144: @ 80D4144 - .2byte 302 - .2byte 303 - .2byte 303 - .2byte 301 - .2byte 304 - .2byte 306 - .2byte 307 - .2byte 0 - - .string "pksdir0\0" - .string "pksdir0\0" - .4byte noneText - .byte 0xff, 0xff, 0xff, 0xff - .4byte noneText - - .global noneText - noneText: - .string "none\0" - .align 2,0 - - .4byte defaultText - .byte 0xff, 0xff, 0xff, 0xff - .4byte noneText - - .global defaultText - defaultText: - .string "default\0" diff --git a/data/data_80CE77C.s b/data/data_80CE77C.s new file mode 100644 index 000000000..33d1b0155 --- /dev/null +++ b/data/data_80CE77C.s @@ -0,0 +1,603 @@ + .section .rodata + + .align 2,0 + +@ code_800F958 + + .global gStatusGraphics4bpp +gStatusGraphics4bpp: @ 80CE934 + .incbin "graphics/status/sleepless.4bpp" + .incbin "graphics/status/burned.4bpp" + .incbin "graphics/status/poisoned.4bpp" + .incbin "graphics/status/frozen.4bpp" + .incbin "graphics/status/confused.4bpp" + .incbin "graphics/status/whiffer.4bpp" + .incbin "graphics/status/taunted.4bpp" + .incbin "graphics/status/lowhp.4bpp" + .incbin "graphics/status/shield.4bpp" + .incbin "graphics/status/statdown.4bpp" + .incbin "graphics/status/sword.4bpp" + .incbin "graphics/status/blinker.4bpp" + .incbin "graphics/status/cross_eyed.4bpp" + .incbin "graphics/status/eyedrops.4bpp" + .incbin "graphics/status/muzzled.4bpp" + .incbin "graphics/status/sleep.4bpp" + + .global gStatusSprites +gStatusSprites: @ 80D3474 + @ Status to status image conversion + @ image, palette + .4byte 0, 0 + .4byte 1, 0 @ STATUS_SPRITE_SLEEPLESS + .4byte 2, 0 @ STATUS_SPRITE_BURNED + .4byte 3, 11 @ STATUS_SPRITE_POISONED + .4byte 3, 7 @ STATUS_SPRITE_BADLY_POISONED + .4byte 5, 0 @ STATUS_SPRITE_CONFUSED + .4byte 6, 0 @ STATUS_SPRITE_COWERING + .4byte 7, 0 @ STATUS_SPRITE_TAUNTED + .4byte 8, 0 @ STATUS_SPRITE_ENCORE + .4byte 9, 0 @ STATUS_SPRITE_SHIELD_BLUE + .4byte 9, 4 @ STATUS_SPRITE_SHIELD_RED + .4byte 9, 3 @ STATUS_SPRITE_SHIELD_YELLOW + .4byte 9, 10 @ STATUS_SPRITE_SHIELD_GREEN + .4byte 9, 5 @ STATUS_SPRITE_ENDURE + .4byte 8, 0 @ STATUS_SPRITE_LOWHP + .4byte 3, 6 @ STATUS_SPRITE_CURSED + .4byte 8, 3 @ STATUS_SPRITE_SNATCH + .4byte 11, 0 @ STATUS_SPRITE_SURE_SHOT + .4byte 6, 10 @ STATUS_SPRITE_WHIFFER + .4byte 11, 5 @ STATUS_SPRITE_SET_DAMAGE + .4byte 11, 4 @ STATUS_SPRITE_FOCUS_ENERGY + .4byte 12, 0 @ STATUS_SPRITE_BLINKER + .4byte 13, 0 @ STATUS_SPRITE_CROSS_EYED + .4byte 14, 0 @ STATUS_SPRITE_EYEDROPS + .4byte 15, 0 @ STATUS_SPRITE_MUZZLED + .4byte 9, 7 @ STATUS_SPRITE_GRUDGE + .4byte 14, 4 @ STATUS_SPRITE_EXPOSED + .4byte 16, 4 @ STATUS_SPRITE_SLEEP + .4byte 10, 3 @ STATUS_SPRITE_STAT_DOWN + .4byte 4, 0 @ STATUS_SPRITE_FROZEN + + .global gUnknown_80D3564 +gUnknown_80D3564: @ 80D3564 + .byte 0,0,0,0 + +@ + .string "pksdir0\0" + .align 2,0 + +@ Friend Area Data + + .global gFriendAreaLocations +gFriendAreaLocations: @ 80D3570 +@ replacing .incbin "baserom.gba", 0x000d3570, 0x94c + .4byte gUnknown_80D3EAC + .byte 0xc5, 0x01, 0x71, 0x00, 0x08, 0x09, 0x0a, 0x27, 0x2f, 0x0b, 0x3f, 0x3f, 0x05, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x02, 0x00, 0x07, 0x00 @ Mountain Range + .4byte gUnknown_80D3EA4 + .byte 0xcd, 0x01, 0x1c, 0x00, 0x30, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x0c, 0x00 + .4byte gUnknown_80D3E9C + .byte 0x61, 0x01, 0x78, 0x00, 0x0d, 0x0e, 0x11, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x1b, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0xff, 0xff, 0x09, 0x00, 0xff, 0xff + .4byte gUnknown_80D3E8C + .byte 0x62, 0x01, 0x2d, 0x01, 0x0f, 0x0c, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x0e, 0x00, 0x12, 0x00, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3E80 + .byte 0x94, 0x01, 0x02, 0x01, 0x34, 0x35, 0x28, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x11, 0x00, 0xff, 0xff, 0x0b, 0x00, 0x08, 0x00, 0xff, 0xff, 0x0e, 0x00, 0x03, 0x00 + .4byte gUnknown_80D3E70 + .byte 0xc7, 0x01, 0x9d, 0x00, 0x12, 0x13, 0x14, 0x15, 0x3f, 0x3f, 0x3f, 0x3f, 0x0b, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x08, 0x00 + .4byte gUnknown_80D3E60 + .byte 0x08, 0x01, 0x9d, 0x00, 0x16, 0x17, 0x18, 0x19, 0x3f, 0x3f, 0x3f, 0x3f, 0x10, 0x00, 0xff, 0xff, 0x1b, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1a, 0x00, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3E58 + .byte 0x97, 0x01, 0xa0, 0x00, 0x1a, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x08, 0x00, 0x0b, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x1b, 0x00, 0xff, 0xff + .4byte gUnknown_80D3E48 + .byte 0x98, 0x01, 0xcf, 0x00, 0x1b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x04, 0x00, 0xff, 0xff, 0x0b, 0x00, 0x05, 0x00, 0x07, 0x00, 0x1b, 0x00, 0xff, 0xff, 0x0e, 0x00 + .4byte gUnknown_80D3E40 + .byte 0x33, 0x01, 0x79, 0x00, 0x1c, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x1b, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0x14, 0x00, 0xff, 0xff, 0x06, 0x00 + .4byte gUnknown_80D3E30 + .byte 0x82, 0x01, 0x1d, 0x00, 0x1d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x0c, 0x00, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x0d, 0x00 + .4byte gUnknown_80D3E20 + .byte 0xc6, 0x01, 0xd0, 0x00, 0x1e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x07, 0x00, 0x08, 0x00, 0x04, 0x00 + .4byte gUnknown_80D3E18 + .byte 0xa2, 0x01, 0x46, 0x00, 0x1f, 0x20, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x07, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0xff, 0xff, 0x0a, 0x00, 0x0d, 0x00, 0x02, 0x00 + .4byte gUnknown_80D3E10 + .byte 0x60, 0x01, 0x47, 0x00, 0x21, 0x23, 0x24, 0x22, 0x3f, 0x3f, 0x3f, 0x3f, 0x02, 0x00, 0xff, 0xff, 0x0c, 0x00, 0x0a, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x14, 0x00, 0x09, 0x00 + .4byte gUnknown_80D3E08 + .byte 0x63, 0x01, 0x04, 0x01, 0x25, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x03, 0x00, 0xff, 0xff, 0x04, 0x00, 0x08, 0x00, 0x1b, 0x00, 0xff, 0xff, 0x12, 0x00, 0xff, 0xff + .4byte gUnknown_80D3E00 + .byte 0x36, 0x01, 0x1c, 0x00, 0x26, 0x29, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x09, 0x00, 0x0d, 0x00, 0x0a, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x00, 0x14, 0x00 + .4byte gUnknown_80D3DF8 + .byte 0x07, 0x01, 0xcb, 0x00, 0x10, 0x2a, 0x32, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x12, 0x00, 0xff, 0xff, 0x1b, 0x00, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0x19, 0x00 + .4byte gUnknown_80D3DF0 + .byte 0xc4, 0x01, 0x2d, 0x01, 0x2b, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3DE8 + .byte 0x31, 0x01, 0x05, 0x01, 0x2e, 0x2c, 0x2d, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x03, 0x00, 0x0e, 0x00, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x19, 0x00, 0xff, 0xff + .4byte gUnknown_80D3DE4 + .byte 0x2f, 0x00, 0x15, 0x00, 0x33, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x17, 0x00, 0x1a, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3DD4 + .byte 0x07, 0x01, 0x47, 0x00, 0x36, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x06, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0xff, 0xff, 0x18, 0x00, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3DC4 + .byte 0x5d, 0x00, 0x0c, 0x01, 0x37, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x19, 0x00, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3DB4 + .byte 0x2d, 0x00, 0xcb, 0x00, 0x38, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x15, 0x00, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3DA4 + .byte 0x2d, 0x00, 0x70, 0x00, 0x39, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x16, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x00, 0x13, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D94 + .byte 0xd0, 0x00, 0x16, 0x00, 0x01, 0x03, 0x05, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x14, 0x00, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x00 + .4byte gUnknown_80D3D84 + .byte 0xb2, 0x00, 0x0d, 0x01, 0x02, 0x04, 0x06, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x10, 0x00, 0xff, 0xff, 0xff, 0xff, 0x15, 0x00, 0xff, 0xff + .4byte gUnknown_80D3D7C + .byte 0x81, 0x00, 0x42, 0x00, 0x07, 0x31, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0x06, 0x00, 0xff, 0xff, 0x18, 0x00, 0xff, 0xff, 0x13, 0x00, 0xff, 0xff, 0x17, 0x00 @ Beach + .4byte gUnknown_80D3D78 + .byte 0x63, 0x01, 0xa1, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x0e, 0x00, 0x08, 0x00, 0x07, 0x00, 0xff, 0xff, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x10, 0x00 @ Team Name + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + .4byte gUnknown_80D3D70 + .byte 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + @ Start of Friend Area String Pool (80D3D70) + @ These are what show on the map when going to Friend Areas + .global gUnknown_80D3D70 + gUnknown_80D3D70: + .string "ななし\0" + .align 2,0 + .global gUnknown_80D3D78 + gUnknown_80D3D78: + .string "$t\0" @ Team Name + .align 2,0 + .global gUnknown_80D3D7C + gUnknown_80D3D7C: + .string "Beach\0" + .align 2,0 + .global gUnknown_80D3D84 + gUnknown_80D3D84: + .string "Southern Sea\0" + .align 2,0 + .global gUnknown_80D3D94 + gUnknown_80D3D94: + .string "Northern Sea\0" + .align 2,0 + .global gUnknown_80D3DA4 + gUnknown_80D3DA4: + .string "Western Isles\0" + .align 2,0 + .global gUnknown_80D3DB4 + gUnknown_80D3DB4: + .string "Southwest Isles\0" + .align 2,0 + .global gUnknown_80D3DC4 + gUnknown_80D3DC4: + .string "Southern Isles\0" + .align 2,0 + .global gUnknown_80D3DD4 + gUnknown_80D3DD4: + .string "Northern Isles\0" + .align 2,0 + .global gUnknown_80D3DE4 + gUnknown_80D3DE4: + .string "Sky\0" + .align 2,0 + .global gUnknown_80D3DE8 + gUnknown_80D3DE8: + .string "Relics\0" + .align 2,0 + .global gUnknown_80D3DF0 + gUnknown_80D3DF0: + .string "Desert\0" + .align 2,0 + .global gUnknown_80D3DF8 + gUnknown_80D3DF8: + .string "Volcano\0" + .align 2,0 + .global gUnknown_80D3E00 + gUnknown_80D3E00: + .string "Ruins\0" + .align 2,0 + .global gUnknown_80D3E08 + gUnknown_80D3E08: + .string "Jungle\0" + .align 2,0 + .global gUnknown_80D3E10 + gUnknown_80D3E10: + .string "Cave\0" + .align 2,0 + .global gUnknown_80D3E18 + gUnknown_80D3E18: + .string "Marsh\0" + .align 2,0 + .global gUnknown_80D3E20 + gUnknown_80D3E20: + .string "Eastern Lakes\0" + .align 2,0 + .global gUnknown_80D3E30 + gUnknown_80D3E30: + .string "Northern Lakes\0" + .align 2,0 + .global gUnknown_80D3E40 + gUnknown_80D3E40: + .string "Pond\0" + .align 2,0 + .global gUnknown_80D3E48 + gUnknown_80D3E48: + .string "Eastern Ponds\0" + .align 2,0 + .global gUnknown_80D3E58 + gUnknown_80D3E58: + .string "River\0" + .align 2,0 + .global gUnknown_80D3E60 + gUnknown_80D3E60: + .string "Western Forest\0" + .align 2,0 + .global gUnknown_80D3E70 + gUnknown_80D3E70: + .string "Eastern Forest\0" + .align 2,0 + .global gUnknown_80D3E80 + gUnknown_80D3E80: + .string "Badlands\0" + .align 2,0 + .global gUnknown_80D3E8C + gUnknown_80D3E8C: + .string "South Plains\0" + .align 2,0 + .global gUnknown_80D3E9C + gUnknown_80D3E9C: + .string "Plains\0" + .align 2,0 + .global gUnknown_80D3EA4 + gUnknown_80D3EA4: + .string "Glacier\0" + .align 2,0 + .global gUnknown_80D3EAC + gUnknown_80D3EAC: + .string "Mountain Range\0" + .align 2,0 + + .global gUnknown_80D3EBC +gUnknown_80D3EBC: @ 80D3EBC +@ replacing .incbin "baserom.gba", 0x000d3ebc, 0x20 + .byte 0x80, 0x03 + .byte 0x80, 0x04 + .byte 0x80, 0x00 + .byte 0x80, 0x03 + .byte 0x80, 0x0f + .byte 0x80, 0x00 + .byte 0x80, 0x0c + .byte 0x80, 0x0f + .byte 0x80, 0x0b + .byte 0x80, 0x0c + .byte 0x80, 0x08 + .byte 0x80, 0x0b + .byte 0x80, 0x07 + .byte 0x80, 0x08 + .byte 0x80, 0x04 + .byte 0x80, 0x07 + + .global gUnknown_80D3EDC +gUnknown_80D3EDC: @ 80D3EDC + .byte 0xff, 0x00, 0x02, 0x01 + .byte 0x04, 0xff, 0x03, 0xff + .byte 0x06, 0x07, 0xff, 0xff + .byte 0x05, 0xff, 0xff, 0xff + + + .global gUnknown_80D3EEC +gUnknown_80D3EEC: @ 80D3EEC + .byte 0xff, 0xff, 0xff, 0x01 + .byte 0xff, 0xff, 0x03, 0xff + .byte 0xff, 0x07, 0xff, 0xff + .byte 0x05, 0xff, 0xff, 0xff + + .global gUnknown_80D3EFC +gUnknown_80D3EFC: @ 80D3EFC + .string "$t Team Base\0" + .align 2,0 + .string "pksdir0\0" + .align 2,0 + + .global gDungeonCoordinates +gDungeonCoordinates: @ 80D3F14 +@ replacing .incbin "baserom.gba", 0x000d3f14, 0x100 +@ 2 byte X and 2 byte Y + .2byte 172, 174 @ Tiny Woods + .2byte 171, 111 + .2byte 242, 126 + .2byte 232, 181 + .2byte 263, 155 + .2byte 298, 159 + .2byte 299, 142 + .2byte 203, 255 + .2byte 385, 166 + .2byte 388, 126 + .2byte 389, 109 + .2byte 417, 112 + .2byte 422, 101 + .2byte 432, 85 + .2byte 436, 69 + .2byte 442, 150 + .2byte 446, 163 + .2byte 365, 27 + .2byte 352, 12 + .2byte 133, 238 + .2byte 129, 143 + .2byte 344, 105 + .2byte 427, 62 + .2byte 27, 211 + .2byte 246, 315 + .2byte 443, 6 + .2byte 32, 279 + .2byte 404, 262 + .2byte 194, 63 + .2byte 159, 46 + .2byte 441, 310 + .2byte 231, 235 + .2byte 169, 287 + .2byte 441, 273 + .2byte 64, 87 + .2byte 80, 54 + .2byte 431, 225 + .2byte 27, 94 + .2byte 354, 298 + .2byte 336, 253 + .2byte 287, 222 + .2byte 63, 163 + .2byte 275, 111 + .2byte 202, 232 + .2byte 268, 302 + .2byte 336, 260 + .2byte 110, 79 + .2byte 225, 314 + .2byte 206, 314 + .2byte 11, 307 + .2byte 472, 25 + .2byte 250, 8 + .2byte 187, 190 + .2byte 205, 111 + .2byte 474, 6 + .2byte 183, 9 + .2byte 367, 214 + .2byte 278, 273 + .2byte 68, 305 + .2byte 270, 33 + .2byte 33, 39 + .2byte 217, 8 + .2byte 69, 280 + .2byte 192, 183 @ D63 + + .global gUnknown_80D4014 +gUnknown_80D4014: @ 80D4014 + .4byte wmp2font_text + .4byte wmp2mcc_text + .4byte wmp2cani_text + .4byte wmp2pal_text + .4byte wmp2fon1_text + + .global wmp2fon1_text + wmp2fon1_text: + .string "wmp2fon1\0" + .align 2,0 + + .global wmp2pal_text + wmp2pal_text: + .string "wmp2pal\0" + .align 2,0 + + .global wmp2cani_text + wmp2cani_text: + .string "wmp2cani\0" + .align 2,0 + + .global wmp2mcc_text + wmp2mcc_text: + .string "wmp2mcc\0" + .align 2,0 + + .global wmp2font_text + wmp2font_text: + .string "wmp2font\0" + .align 2,0 + + .global gUnknown_80D405C +gUnknown_80D405C: @ 80D405C + .string "ax%03d\0" + .align 2,0 + + .global gUnknown_80D4064 +gUnknown_80D4064: @ 80D4064 + .string "wmapspr\0" + .align 2,0 + + .global gUnknown_80D406C +gUnknown_80D406C: @ 80D406C + .string "palet\0" + .align 2,0 + + .global gUnknown_80D4074 +gUnknown_80D4074: @ 80D4074 + .string "{CENTER_ALIGN}{POKEMON_0}\0" + .align 2,0 + + .global gUnknown_80D407C +gUnknown_80D407C: @ 80D4074 + .string "Yes\0" + .align 2,0 + + .global gUnknown_80D4080 +gUnknown_80D4080: @ 80D4080 + .string "No\0" + .align 2,0 + .string "pksdir0\0" + .align 2,0 + + .global gUnknown_80D408C +gUnknown_80D408C: @ 80D408C + .4byte wmapfont_text + .4byte wmapmcc_text + .4byte wmapcani_text + .4byte wmappal_text + + .global wmappal_text + wmappal_text: + .string "wmappal\0" + .align 2,0 + + .global wmapcani_text + wmapcani_text: + .string "wmapcani\0" + .align 2,0 + + .global wmapmcc_text + wmapmcc_text: + .string "wmapmcc\0" + .align 2,0 + + .global wmapfont_text + wmapfont_text: + .string "wmapfont\0" + .align 2,0 + + .global gUnknown_80D40C4 +gUnknown_80D40C4: @ 80D40C4 + .byte 0x00, 0x00, 0x18, 0x00 + .byte 0x18, 0x00, 0x18, 0x00 + .byte 0x18, 0x00, 0x00, 0x00 + .byte 0x18, 0x00, 0xE8, 0xFF + .byte 0x00, 0x00, 0xE8, 0xFF + .byte 0xE8, 0xFF, 0xE8, 0xFF + .byte 0xE8, 0xFF, 0x00, 0x00 + .byte 0xE8, 0xFF, 0x18, 0x00 + + .global gUnknown_80D40E4 +gUnknown_80D40E4: @ 80D40E4 + .string "ax%03d\0" + .align 2,0 + + .global gUnknown_80D40EC +gUnknown_80D40EC: @ 80D40EC + .string "wmapspr\0" + .align 2,0 + + .global gUnknown_80D40F4 +gUnknown_80D40F4: @ 80D40F4 + .string "palet\0" + .align 2,0 + + .global gUnknown_80D40FC +gUnknown_80D40FC: @ 80D40FC + .string "{CENTER_ALIGN}%s\0" + .align 2,0 + + .global gUnknown_80D4104 +gUnknown_80D4104: @ 80D4104 + .string "Where would you like to go?\0" + .align 2,0 + + .global gUnknown_80D4120 +gUnknown_80D4120: @ 80D4120 + .string "{MOVE_ITEM_0}\0" + .align 2,0 + + .global gUnknown_80D4124 +gUnknown_80D4124: @ 80D4124 + .string "{MOVE_ITEM_0}($v02" + .byte 0x81, 0x5E + .asciz "$v12)" + .align 2,0 + + .asciz "pksdir0" + .asciz "pksdir0" + + .global gUnknown_80D4144 +gUnknown_80D4144: @ 80D4144 + .2byte 302 + .2byte 303 + .2byte 303 + .2byte 301 + .2byte 304 + .2byte 306 + .2byte 307 + .2byte 0 + + .string "pksdir0\0" + .string "pksdir0\0" + .4byte noneText + .byte 0xff, 0xff, 0xff, 0xff + .4byte noneText + + .global noneText + noneText: + .string "none\0" + .align 2,0 + + .4byte defaultText + .byte 0xff, 0xff, 0xff, 0xff + .4byte noneText + + .global defaultText + defaultText: + .string "default\0" diff --git a/include/global.h b/include/global.h index c8ab5cf95..14cd765a4 100644 --- a/include/global.h +++ b/include/global.h @@ -12,12 +12,14 @@ #if defined(__APPLE__) || defined(__CYGWIN__) #define _(x) x #define __(x) x -#define INCBIN_U8 {0} -#define INCBIN_U16 {0} -#define INCBIN_U32 {0} -#define INCBIN_S8 {0} -#define INCBIN_S16 {0} -#define INCBIN_S32 {0} +#define INCBIN(...) {0} +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN +#define INCBIN_COMP INCBIN #endif // Prevent cross-jump optimization. diff --git a/ld_script.txt b/ld_script.txt index 49cc4c233..75680262e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -89,6 +89,7 @@ SECTIONS { src/code_800E9E4.o(.text); src/code_800ED38.o(.text); asm/code_800ED38.o(.text); + src/code_800F034.o(.text); src/code_800F958.o(.text); asm/code_800F990.o(.text); src/code_8010EF0.o(.text); @@ -428,6 +429,9 @@ SECTIONS { src/main.o(.rodata); src/reg_control.o(.rodata); data/data_80B9BB8_2.o(.rodata); + src/code_800F034.o(.rodata); + src/code_800F958.o(.rodata); + data/data_80CE77C.o(.rodata); src/debug.o(.rodata); src/save.o(.rodata); src/save_read.o(.rodata); diff --git a/src/code_800F034.c b/src/code_800F034.c new file mode 100644 index 000000000..ef2398231 --- /dev/null +++ b/src/code_800F034.c @@ -0,0 +1,140 @@ +#include "global.h" +#include "globaldata.h" +#include +#include "code_800E9E4.h" +#include "file_system.h" +#include "memory.h" + +struct unkStruct_800F18C +{ + s32 effectID; + u32 counter; +}; + +struct unkStruct_203B0D4 +{ + struct unkStruct_800F18C unk0[2]; +}; + +struct unkStruct_203B0D4 *gUnknown_203B0D4; + +ALIGNED(4) static const u8 gUnknown_80CE77C[] = "efob%03d"; +ALIGNED(4) static const u8 gUnknown_80CE788[] = "efbg%03d"; + +extern struct FileArchive gEffectFileArchive; + +void sub_800F034(void) { + s32 index; + if(gUnknown_203B0D4 == NULL) + { + gUnknown_203B0D4 = MemoryAlloc(sizeof(struct unkStruct_203B0D4), 0xB); + MemoryClear8(gUnknown_203B0D4, sizeof(struct unkStruct_203B0D4)); + } + for(index = 0; index < 2; index++) + { + gUnknown_203B0D4->unk0[index].effectID = -1; + gUnknown_203B0D4->unk0[index].counter = 0; + } +} + +void sub_800F078(void) +{ + if(gUnknown_203B0D4) + { + MemoryFree(gUnknown_203B0D4); + gUnknown_203B0D4 = NULL; + } +} + +void sub_800F094(void) +{ + s32 index; + for(index = 0; index < 2; index++) + { + gUnknown_203B0D4->unk0[index].effectID = -1; + gUnknown_203B0D4->unk0[index].counter = 0; + } +} + +s32 sub_800F0C0(s32 animType, s32 effectID) +{ + if (animType == 3) { + if (gUnknown_203B0D4->unk0[0].effectID == effectID) return 0; + } + else { + if (gUnknown_203B0D4->unk0[1].effectID == effectID) return 1; + } + return -3; +} + + +s32 sub_800F0F4(s32 animType, s32 effectID) +{ + if (animType == 3) { + if (gUnknown_203B0D4->unk0[0].effectID == effectID) return -2; + if (gUnknown_203B0D4->unk0[0].counter == 0) return 0; + } + else { + if (gUnknown_203B0D4->unk0[1].effectID == effectID) return -2; + if (gUnknown_203B0D4->unk0[1].counter == 0) return 1; + } + return -1; +} + +void sub_800F13C(s32 index, OpenedFile *file, unkStruct_80B9CC4 * r2) +{ + if(gUnknown_203B0D4->unk0[index].counter == 0) + gUnknown_203B0D4->unk0[index].effectID = r2->effectId; +} + +void sub_800F15C(s32 effectID) +{ + s32 index; + + for(index = 0; index < 2; index++) + { + if(gUnknown_203B0D4->unk0[index].effectID == effectID) + { + gUnknown_203B0D4->unk0[index].counter++; + break; + } + } +} + +struct unkStruct_800F18C *sub_800F18C(s32 index) +{ + return &gUnknown_203B0D4->unk0[index]; +} + +s32 sub_800F19C(s32 index) +{ + if(gUnknown_203B0D4->unk0[index].counter == 0) + return 0; + else + return 1; +} + +OpenedFile * sub_800F1C0(u32 animType, s32 effectID) +{ + u8 fileName [8]; + + switch(animType) + { + case 1: + case 2: + case 3: + sprintf(fileName,gUnknown_80CE77C,effectID); // efob + break; + case 4: + sprintf(fileName,gUnknown_80CE788,effectID); // efbg + break; + + } + return Call_OpenFileAndGetFileDataPtr(fileName,&gEffectFileArchive); +} + +void sub_800F204(OpenedFile *file) +{ + CloseFile(file); +} + diff --git a/src/code_800F958.c b/src/code_800F958.c index ab60e5978..dd092183b 100644 --- a/src/code_800F958.c +++ b/src/code_800F958.c @@ -1,9 +1,7 @@ #include "global.h" +#include "globaldata.h" #include "code_800F958.h" -#include "code_8004AA0.h" #include "code_8009804.h" -#include "code_800E9E4.h" -#include "code_801EE10.h" #include "cpu.h" #include "dungeon_pokemon_sprites.h" #include "memory.h" @@ -20,7 +18,51 @@ struct StatusGraphicsInfo /* 0x10 */ s32 graphicsCount; /* 0x14 */ s32 offsetIntoGraphic; }; -extern struct StatusGraphicsInfo gStatusGraphics[]; // 0x80CE79C + +#define TILE_SIZE_2BPP 32 + +const struct StatusGraphicsInfo gStatusGraphics[] = { + {0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 14, TILE_SIZE_2BPP * 0 }, // sleepless + {2, 2, 1, 0, 7, TILE_SIZE_2BPP * 14 }, // burned + {2, 2, 5, 0, 16, TILE_SIZE_2BPP * 42 }, // poisoned + {4, 4, 9, 0, 6, TILE_SIZE_2BPP * 106}, // frozen + {4, 2, 25, 0, 4, TILE_SIZE_2BPP * 202}, // confused + {2, 2, 33, 0, 9, TILE_SIZE_2BPP * 234}, // whiffer + {2, 2, 37, 0, 8, TILE_SIZE_2BPP * 270}, // taunted + {1, 2, 41, 0, 8, TILE_SIZE_2BPP * 302}, // lowhp + {2, 2, 43, 0, 13, TILE_SIZE_2BPP * 318}, // shield + {2, 2, 47, 10, 10, TILE_SIZE_2BPP * 370}, // statdown + {2, 2, 51, 0, 13, TILE_SIZE_2BPP * 410}, // sword + {1, 1, 55, 0, 14, TILE_SIZE_2BPP * 462}, // blinker + {2, 2, 56, 0, 10, TILE_SIZE_2BPP * 476}, // cross-eyed + {1, 1, 60, 0, 14, TILE_SIZE_2BPP * 516}, // eyedrops + {2, 2, 61, 0, 8, TILE_SIZE_2BPP * 530}, // muzzled + {2, 2, 65, 4, 10, TILE_SIZE_2BPP * 562}, // sleep +}; + +extern const u8 gStatusGraphics4bpp[16][3072]; + + +// static const u8 *gStatusGraphics4bpp[16][3072] = { +// INCBIN_U8("graphics/status/sleepless.4bpp"), +// INCBIN_U8("graphics/status/burned.4bpp"), +// INCBIN_U8("graphics/status/poisoned.4bpp"), +// INCBIN_U8("graphics/status/frozen.4bpp"), +// INCBIN_U8("graphics/status/confused.4bpp"), +// INCBIN_U8("graphics/status/whiffer.4bpp"), +// INCBIN_U8("graphics/status/taunted.4bpp"), +// INCBIN_U8("graphics/status/lowhp.4bpp"), +// INCBIN_U8("graphics/status/shield.4bpp"), +// INCBIN_U8("graphics/status/statdown.4bpp"), +// INCBIN_U8("graphics/status/sword.4bpp"), +// INCBIN_U8("graphics/status/blinker.4bpp"), +// INCBIN_U8("graphics/status/cross_eyed.4bpp"), +// INCBIN_U8("graphics/status/eyedrops.4bpp"), +// INCBIN_U8("graphics/status/muzzled.4bpp"), +// INCBIN_U8("graphics/status/sleep.4bpp") +// }; + struct StatusSprite { @@ -29,146 +71,13 @@ struct StatusSprite }; extern struct StatusSprite gStatusSprites[8]; -struct unkStruct_800F18C -{ - s32 effectID; - u32 counter; -}; - -struct unkStruct_203B0D4 -{ - struct unkStruct_800F18C unk0[2]; -}; - -struct unkStruct_203B0D4 *gUnknown_203B0D4; extern SpriteOAM gUnknown_203B0DC; -extern u8 *gStatusGraphics4bpp[]; // TODO use INCBIN_U8 extern DungeonPos gUnknown_80D3564; void DrawStatusSprite(s16 param_1,s32 status,DungeonPos *pos,DungeonPos *posOffset, DungeonPos *posScreen,u32 priority, u32 unused); -extern u8 gUnknown_80CE77C[]; -extern u8 gUnknown_80CE788[]; - -extern struct FileArchive gEffectFileArchive; - -void sub_800F034(void) { - s32 index; - if(gUnknown_203B0D4 == NULL) - { - gUnknown_203B0D4 = MemoryAlloc(sizeof(struct unkStruct_203B0D4), 0xB); - MemoryClear8(gUnknown_203B0D4, sizeof(struct unkStruct_203B0D4)); - } - for(index = 0; index < 2; index++) - { - gUnknown_203B0D4->unk0[index].effectID = -1; - gUnknown_203B0D4->unk0[index].counter = 0; - } -} - -void sub_800F078(void) -{ - if(gUnknown_203B0D4) - { - MemoryFree(gUnknown_203B0D4); - gUnknown_203B0D4 = NULL; - } -} - -void sub_800F094(void) -{ - s32 index; - for(index = 0; index < 2; index++) - { - gUnknown_203B0D4->unk0[index].effectID = -1; - gUnknown_203B0D4->unk0[index].counter = 0; - } -} - -s32 sub_800F0C0(s32 animType, s32 effectID) -{ - if (animType == 3) { - if (gUnknown_203B0D4->unk0[0].effectID == effectID) return 0; - } - else { - if (gUnknown_203B0D4->unk0[1].effectID == effectID) return 1; - } - return -3; -} - - -s32 sub_800F0F4(s32 animType, s32 effectID) -{ - if (animType == 3) { - if (gUnknown_203B0D4->unk0[0].effectID == effectID) return -2; - if (gUnknown_203B0D4->unk0[0].counter == 0) return 0; - } - else { - if (gUnknown_203B0D4->unk0[1].effectID == effectID) return -2; - if (gUnknown_203B0D4->unk0[1].counter == 0) return 1; - } - return -1; -} - -void sub_800F13C(s32 index, OpenedFile *file, unkStruct_80B9CC4 * r2) -{ - if(gUnknown_203B0D4->unk0[index].counter == 0) - gUnknown_203B0D4->unk0[index].effectID = r2->effectId; -} - -void sub_800F15C(s32 effectID) -{ - s32 index; - - for(index = 0; index < 2; index++) - { - if(gUnknown_203B0D4->unk0[index].effectID == effectID) - { - gUnknown_203B0D4->unk0[index].counter++; - break; - } - } -} - -struct unkStruct_800F18C *sub_800F18C(s32 index) -{ - return &gUnknown_203B0D4->unk0[index]; -} - -s32 sub_800F19C(s32 index) -{ - if(gUnknown_203B0D4->unk0[index].counter == 0) - return 0; - else - return 1; -} - -OpenedFile * sub_800F1C0(u32 animType, s32 effectID) -{ - u8 fileName [8]; - - switch(animType) - { - case 1: - case 2: - case 3: - sprintf(fileName,gUnknown_80CE77C,effectID); // efob - break; - case 4: - sprintf(fileName,gUnknown_80CE788,effectID); // efbg - break; - - } - return Call_OpenFileAndGetFileDataPtr(fileName,&gEffectFileArchive); -} - -void sub_800F204(OpenedFile *file) -{ - CloseFile(file); -} - DungeonPokemonSprite *GetDungeonPokemonSprite(s32 id) { s32 index; @@ -299,7 +208,7 @@ void DrawStatusSprite(s16 param_1, s32 status, DungeonPos *pos, DungeonPos *posO s32 posX; u32 uVar7; s32 vramIndex; - struct StatusGraphicsInfo *ptr; + const struct StatusGraphicsInfo *ptr; sprite = gStatusSprites[status]; @@ -375,7 +284,7 @@ void LoadStatusGraphics(s32 graphicIndex, bool8 param_2) s32 graphicsCount; - struct StatusGraphicsInfo *graphic = &gStatusGraphics[graphicIndex]; + const struct StatusGraphicsInfo *graphic = &gStatusGraphics[graphicIndex]; offset = graphic->offsetIntoGraphic; From 5b344a94781f5a94cfce634d0a0b21df859ad84a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 5 Jan 2025 11:55:53 -0800 Subject: [PATCH 13/27] decomp more funcs --- asm/code_805D8C8_1.s | 1120 ------------------------------------------ src/code_8069D4C.c | 385 +++++++++++++++ 2 files changed, 385 insertions(+), 1120 deletions(-) diff --git a/asm/code_805D8C8_1.s b/asm/code_805D8C8_1.s index c06b39a17..b5e0739e1 100644 --- a/asm/code_805D8C8_1.s +++ b/asm/code_805D8C8_1.s @@ -1474,1124 +1474,4 @@ _080694B8: .4byte 0x0000fffd _080694BC: .4byte gLeaderPointer thumb_func_end sub_8068FE0 - thumb_func_start sub_80694C0 -sub_80694C0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - adds r7, r1, 0 - mov r8, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - adds r0, r7, 0 - mov r1, r8 - bl GetTileMut - mov r10, r0 - ldr r5, [r4, 0x70] - adds r6, r5, 0 - adds r6, 0xB0 - ldrb r0, [r6] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080694FC - adds r0, r5, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_080694FC: - ldrb r0, [r6] - cmp r0, 0x7 - beq _0806950A - cmp r0, 0x5 - beq _0806950A - cmp r0, 0x2 - bne _08069512 -_0806950A: - adds r0, r4, 0 - adds r1, r4, 0 - bl EndFrozenClassStatus -_08069512: - movs r0, 0x4 - ldrsh r2, [r4, r0] - cmp r7, r2 - bne _08069522 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r8, r0 - beq _080695DE -_08069522: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _08069552 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _08069552 - adds r1, r0, 0 - adds r0, r2, 0 - bl GetTileMut - adds r1, r0, 0 - ldr r0, [r1, 0x10] - cmp r0, r4 - bne _08069546 - movs r0, 0 - str r0, [r1, 0x10] -_08069546: - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - bl sub_80402AC -_08069552: - ldrh r0, [r4, 0x4] - strh r0, [r4, 0x8] - ldrh r0, [r4, 0x6] - strh r0, [r4, 0xA] - strh r7, [r4, 0x4] - mov r0, r8 - strh r0, [r4, 0x6] - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _0806956E - ldr r0, _0806959C - strh r7, [r0] - mov r1, r8 - strh r1, [r0, 0x2] -_0806956E: - mov r2, r10 - str r4, [r2, 0x10] - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _08069588 - ldr r0, _080695A0 - strh r7, [r0] - mov r1, r8 - strh r1, [r0, 0x2] - ldr r0, _080695A4 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x1] -_08069588: - adds r0, r7, 0 - mov r1, r8 - bl sub_80402AC - mov r2, r9 - cmp r2, 0 - beq _080695A8 - cmp r2, 0x1 - beq _080695C4 - b _080695CE - .align 2, 0 -_0806959C: .4byte gUnknown_203B410 -_080695A0: .4byte gUnknown_202EE0C -_080695A4: .4byte gDungeon -_080695A8: - ldr r0, [r5, 0x70] - str r0, [r5, 0x74] - ldr r0, [r5, 0x6C] - str r0, [r5, 0x70] - ldr r0, [r5, 0x68] - str r0, [r5, 0x6C] - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080695CE - ldr r0, [r4, 0x8] - str r0, [r5, 0x68] - b _080695CE -_080695C4: - ldr r0, [r4, 0x4] - str r0, [r5, 0x68] - str r0, [r5, 0x6C] - str r0, [r5, 0x70] - str r0, [r5, 0x74] -_080695CE: - mov r1, r10 - ldrb r0, [r1, 0x9] - adds r1, r4, 0 - adds r1, 0x25 - strb r0, [r1] - adds r0, r4, 0 - bl sub_806CF98 -_080695DE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80694C0 - - thumb_func_start sub_80695EC -sub_80695EC: - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r7, r2, 0 - ldr r1, [r4, 0x70] - adds r5, r1, 0 - adds r0, r1, 0 - adds r0, 0xB0 - ldrb r0, [r0] - subs r0, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08069612 - adds r0, r1, 0 - adds r0, 0x9C - ldr r0, [r0] - bl sub_8076CB4 -_08069612: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r6, r0 - bne _08069622 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r7, r0 - beq _08069658 -_08069622: - ldrh r0, [r4, 0x4] - strh r0, [r4, 0x8] - ldrh r0, [r4, 0x6] - strh r0, [r4, 0xA] - strh r6, [r4, 0x4] - strh r7, [r4, 0x6] - ldr r0, [r5, 0x70] - str r0, [r5, 0x74] - ldr r0, [r5, 0x6C] - str r0, [r5, 0x70] - ldr r0, [r5, 0x68] - str r0, [r5, 0x6C] - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08069648 - ldr r0, [r4, 0x8] - str r0, [r5, 0x68] -_08069648: - adds r0, r6, 0 - adds r1, r7, 0 - bl GetTile - ldrb r1, [r0, 0x9] - adds r0, r4, 0 - adds r0, 0x25 - strb r1, [r0] -_08069658: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80695EC - - thumb_func_start sub_8069660 -sub_8069660: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x70] - adds r5, r0, 0 - adds r5, 0x46 - ldrb r1, [r5] - adds r0, r4, 0 - bl sub_8070F80 - lsls r0, 24 - cmp r0, 0 - bne _0806967C - movs r0, 0 - b _0806969E -_0806967C: - movs r1, 0x4 - ldrsh r0, [r4, r1] - ldr r1, _080696A4 - ldrb r2, [r5] - lsls r2, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetTile - ldr r0, [r0, 0x10] -_0806969E: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080696A4: .4byte gAdjacentTileOffsets - thumb_func_end sub_8069660 - - thumb_func_start sub_80696A8 -sub_80696A8: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, [r4, 0x70] - adds r5, r0, 0 - adds r5, 0x46 - ldrb r1, [r5] - adds r0, r4, 0 - bl CanAttackInDirection - lsls r0, 24 - cmp r0, 0 - beq _080696F4 - movs r1, 0x4 - ldrsh r0, [r4, r1] - ldr r1, _080696F0 - ldrb r2, [r5] - lsls r2, 2 - adds r2, r1 - movs r3, 0 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x2 - ldrsh r2, [r2, r3] - adds r1, r2 - bl GetTile - ldr r1, [r0, 0x10] - cmp r1, 0 - beq _080696F4 - ldr r0, [r1] - cmp r0, 0x1 - bne _080696F4 - adds r0, r1, 0 - b _080696F6 - .align 2, 0 -_080696F0: .4byte gAdjacentTileOffsets -_080696F4: - movs r0, 0 -_080696F6: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80696A8 - - thumb_func_start sub_80696FC -sub_80696FC: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r3, [r4, 0x70] - ldr r5, _08069764 - adds r3, 0x46 - ldrb r0, [r3] - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0] - ldrh r1, [r4, 0x4] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08069768 - ldr r2, [sp] - ands r2, r1 - orrs r2, r0 - str r2, [sp] - ldrb r0, [r3] - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x6] - adds r0, r1 - lsls r0, 16 - ldr r1, _0806976C - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - asrs r1, 16 - bl GetTile - adds r5, r0, 0 - adds r0, r4, 0 - mov r1, sp - bl sub_80705F0 - lsls r0, 24 - cmp r0, 0 - bne _08069770 - ldr r1, [r5, 0x10] - cmp r1, 0 - beq _08069770 - ldr r0, [r1] - cmp r0, 0x1 - bne _08069770 - adds r0, r1, 0 - b _08069772 - .align 2, 0 -_08069764: .4byte gAdjacentTileOffsets -_08069768: .4byte 0xffff0000 -_0806976C: .4byte 0x0000ffff -_08069770: - movs r0, 0 -_08069772: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80696FC - - thumb_func_start sub_806977C -sub_806977C: - push {r4-r7,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r0, [r4, 0x70] - ldr r7, _0806982C - adds r5, r0, 0 - adds r5, 0x46 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - ldrh r0, [r0] - ldrh r1, [r4, 0x4] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08069830 - ldr r2, [sp] - ands r2, r1 - orrs r2, r0 - str r2, [sp] - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x6] - adds r0, r1 - lsls r0, 16 - ldr r1, _08069834 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - movs r2, 0 - ldrsh r0, [r0, r2] - asrs r1, 16 - bl GetTile - mov r6, sp - adds r0, r4, 0 - mov r1, sp - bl sub_80705F0 - lsls r0, 24 - cmp r0, 0 - bne _08069838 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - movs r1, 0 - ldrsh r0, [r0, r1] - lsls r0, 1 - ldrh r2, [r4, 0x4] - adds r0, r2 - mov r1, sp - strh r0, [r1] - ldrb r0, [r5] - lsls r0, 2 - adds r0, r7 - movs r1, 0x2 - ldrsh r0, [r0, r1] - lsls r0, 1 - ldrh r2, [r4, 0x6] - adds r0, r2 - strh r0, [r6, 0x2] - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r6, r2] - bl GetTile - adds r5, r0, 0 - adds r0, r4, 0 - mov r1, sp - bl sub_80705F0 - lsls r0, 24 - cmp r0, 0 - bne _08069838 - ldr r1, [r5, 0x10] - cmp r1, 0 - beq _08069838 - ldr r0, [r1] - cmp r0, 0x1 - bne _08069838 - adds r0, r1, 0 - b _0806983A - .align 2, 0 -_0806982C: .4byte gAdjacentTileOffsets -_08069830: .4byte 0xffff0000 -_08069834: .4byte 0x0000ffff -_08069838: - movs r0, 0 -_0806983A: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806977C - - thumb_func_start sub_8069844 -sub_8069844: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - mov r8, r1 - ldr r5, [r1, 0x70] - adds r0, r6, 0x2 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument_2 - ldrh r0, [r5, 0x2] - strh r0, [r6] - movs r1, 0xE - ldrsh r0, [r5, r1] - str r0, [r6, 0x24] - movs r2, 0x10 - ldrsh r0, [r5, r2] - str r0, [r6, 0x28] - ldrb r0, [r5, 0x9] - str r0, [r6, 0x2C] - ldr r0, [r5, 0x18] - str r0, [r6, 0x30] - movs r2, 0 -_08069874: - adds r1, r6, 0 - adds r1, 0x34 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x14 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x36 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x16 - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x16 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x5C - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r1, r6, 0 - adds r1, 0x18 - adds r1, r2 - adds r0, r5, 0 - adds r0, 0x5E - adds r0, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x1 - ble _08069874 - ldrb r2, [r5, 0x7] - adds r1, r6, 0 - adds r1, 0x38 - movs r0, 0 - strb r2, [r1] - adds r2, r6, 0 - adds r2, 0x39 - strb r0, [r2] - adds r3, r6, 0 - adds r3, 0x3A - strb r0, [r3] - adds r4, r6, 0 - adds r4, 0x3B - strb r0, [r4] - movs r7, 0x3C - adds r7, r6 - mov r12, r7 - strb r0, [r7] - adds r0, r5, 0 - adds r0, 0x60 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806995C - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0806995C - adds r1, r5, 0 - adds r1, 0x62 - ldrb r0, [r1] - cmp r0, 0x13 - bne _08069908 - ldr r0, _080699A4 - ldrb r0, [r0] - ldrb r7, [r2] - adds r0, r7 - strb r0, [r2] -_08069908: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08069918 - ldr r0, _080699A8 - ldrb r0, [r0] - ldrb r7, [r2] - adds r0, r7 - strb r0, [r2] -_08069918: - ldrb r0, [r1] - cmp r0, 0x21 - bne _08069928 - ldr r0, _080699AC - ldrb r0, [r0] - ldrb r2, [r3] - adds r0, r2 - strb r0, [r3] -_08069928: - ldrb r0, [r1] - cmp r0, 0x2B - bne _08069938 - ldr r0, _080699A8 - ldrb r0, [r0] - ldrb r7, [r3] - adds r0, r7 - strb r0, [r3] -_08069938: - ldrb r0, [r1] - cmp r0, 0x1E - bne _08069948 - ldr r0, _080699B0 - ldrb r0, [r0] - ldrb r2, [r4] - adds r0, r2 - strb r0, [r4] -_08069948: - ldrb r0, [r1] - cmp r0, 0x22 - bne _0806995C - ldr r0, _080699B4 - ldrb r0, [r0] - mov r7, r12 - ldrb r7, [r7] - adds r0, r7 - mov r1, r12 - strb r0, [r1] -_0806995C: - adds r0, r5, 0 - adds r0, 0x94 - ldrb r1, [r0] - adds r0, r6, 0 - adds r0, 0x54 - strb r1, [r0] - ldr r0, [r5, 0x60] - str r0, [r6, 0x20] - ldrh r0, [r5, 0xC] - movs r1, 0 - strh r0, [r6, 0x3E] - ldr r0, [r5, 0x40] - str r0, [r6, 0x1C] - adds r0, r6, 0 - adds r0, 0x44 - strb r1, [r0] - adds r0, 0x4 - strb r1, [r0] - adds r0, r5, 0 - adds r0, 0x8C - ldr r0, [r0] - str r0, [r6, 0x50] - ldr r0, _080699B8 - ldr r0, [r0] - ldr r2, _080699BC - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _080699C0 - adds r0, r5, 0 - bl sub_806A4DC - adds r1, r6, 0 - adds r1, 0x4C - b _080699C6 - .align 2, 0 -_080699A4: .4byte gUnknown_810AC60 -_080699A8: .4byte gUnknown_810AC68 -_080699AC: .4byte gUnknown_810AC62 -_080699B0: .4byte gUnknown_810AC64 -_080699B4: .4byte gUnknown_810AC66 -_080699B8: .4byte gDungeon -_080699BC: .4byte 0x0000065a -_080699C0: - adds r1, r6, 0 - adds r1, 0x4C - movs r0, 0x3 -_080699C6: - strb r0, [r1] - movs r4, 0 - movs r7, 0x10 - ldrsh r0, [r5, r7] - cmp r0, 0 - bge _080699D4 - adds r0, 0x3 -_080699D4: - movs r2, 0xE - ldrsh r1, [r5, r2] - asrs r0, 2 - cmp r1, r0 - bgt _080699E8 - adds r1, r6, 0 - adds r1, 0x58 - movs r0, 0x6 - strb r0, [r1] - movs r4, 0x1 -_080699E8: - ldr r0, _08069A24 - ldr r0, [r0] - ldr r7, _08069A28 - adds r0, r7 - ldrb r0, [r0] - cmp r0, 0 - beq _08069A02 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0xB - strb r1, [r0] - adds r4, 0x1 -_08069A02: - movs r1, 0x9E - lsls r1, 1 - adds r0, r5, r1 - ldr r0, [r0] - bl FixedPointToInt - cmp r0, 0 - bne _08069A38 - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _08069A2C - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x13 - b _08069A34 - .align 2, 0 -_08069A24: .4byte gDungeon -_08069A28: .4byte 0x00000676 -_08069A2C: - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x3B -_08069A34: - strb r1, [r0] - adds r4, 0x1 -_08069A38: - mov r2, r8 - ldr r0, [r2, 0x70] - movs r7, 0x82 - lsls r7, 1 - adds r2, r0, r7 - ldr r0, [r2] - cmp r0, 0x1 - ble _08069A54 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x1B - strb r1, [r0] - adds r4, 0x1 -_08069A54: - ldr r0, [r2] - cmp r0, 0 - bgt _08069A66 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x28 - strb r1, [r0] - adds r4, 0x1 -_08069A66: - ldr r0, [r5, 0x2C] - cmp r0, 0xFF - ble _08069AAE - ldr r0, [r5, 0x30] - cmp r0, 0xFF - ble _08069AAE - ldr r0, [r5, 0x34] - cmp r0, 0xFF - ble _08069AAE - ldr r0, [r5, 0x38] - cmp r0, 0xFF - ble _08069AAE - movs r1, 0x1C - ldrsh r0, [r5, r1] - cmp r0, 0x9 - ble _08069AAE - movs r2, 0x1E - ldrsh r0, [r5, r2] - cmp r0, 0x9 - ble _08069AAE - movs r7, 0x20 - ldrsh r0, [r5, r7] - cmp r0, 0x9 - ble _08069AAE - movs r1, 0x22 - ldrsh r0, [r5, r1] - cmp r0, 0x9 - ble _08069AAE - movs r2, 0x24 - ldrsh r0, [r5, r2] - cmp r0, 0x9 - ble _08069AAE - movs r7, 0x26 - ldrsh r0, [r5, r7] - cmp r0, 0x9 - bgt _08069ABA -_08069AAE: - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x37 - strb r1, [r0] - adds r4, 0x1 -_08069ABA: - adds r0, r5, 0 - adds r0, 0xA8 - ldrb r1, [r0] - cmp r1, 0 - beq _08069AD2 - cmp r4, 0xB - bgt _08069AD2 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - strb r1, [r0] - adds r4, 0x1 -_08069AD2: - adds r0, r5, 0 - adds r0, 0xAC - ldrb r1, [r0] - cmp r1, 0 - beq _08069AEC - cmp r4, 0xB - bgt _08069AEC - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x6 - strb r1, [r0] - adds r4, 0x1 -_08069AEC: - adds r0, r5, 0 - adds r0, 0xB0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B06 - cmp r4, 0xB - bgt _08069B06 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0xB - strb r1, [r0] - adds r4, 0x1 -_08069B06: - adds r0, r5, 0 - adds r0, 0xBC - ldrb r1, [r0] - cmp r1, 0 - beq _08069B20 - cmp r4, 0xB - bgt _08069B20 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x13 - strb r1, [r0] - adds r4, 0x1 -_08069B20: - adds r0, r5, 0 - adds r0, 0xC0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B3A - cmp r4, 0xB - bgt _08069B3A - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x1B - strb r1, [r0] - adds r4, 0x1 -_08069B3A: - adds r0, r5, 0 - adds r0, 0xC4 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B54 - cmp r4, 0xB - bgt _08069B54 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x28 - strb r1, [r0] - adds r4, 0x1 -_08069B54: - adds r0, r5, 0 - adds r0, 0xC8 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B6E - cmp r4, 0xB - bgt _08069B6E - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x37 - strb r1, [r0] - adds r4, 0x1 -_08069B6E: - adds r0, r5, 0 - adds r0, 0xD0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069B88 - cmp r4, 0xB - bgt _08069B88 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x3B - strb r1, [r0] - adds r4, 0x1 -_08069B88: - adds r0, r5, 0 - adds r0, 0xDC - ldrb r1, [r0] - cmp r1, 0 - beq _08069BA2 - cmp r4, 0xB - bgt _08069BA2 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x3E - strb r1, [r0] - adds r4, 0x1 -_08069BA2: - adds r0, r5, 0 - adds r0, 0xE0 - ldrb r1, [r0] - cmp r1, 0 - beq _08069BBC - cmp r4, 0xB - bgt _08069BBC - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x43 - strb r1, [r0] - adds r4, 0x1 -_08069BBC: - adds r0, r5, 0 - adds r0, 0xE4 - ldrb r1, [r0] - cmp r1, 0 - beq _08069BD6 - cmp r4, 0xB - bgt _08069BD6 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x46 - strb r1, [r0] - adds r4, 0x1 -_08069BD6: - adds r0, r5, 0 - adds r0, 0xE8 - ldrb r1, [r0] - cmp r1, 0 - beq _08069BF0 - cmp r4, 0xB - bgt _08069BF0 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x4A - strb r1, [r0] - adds r4, 0x1 -_08069BF0: - adds r0, r5, 0 - adds r0, 0xEC - ldrb r1, [r0] - cmp r1, 0 - beq _08069C0A - cmp r4, 0xB - bgt _08069C0A - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - adds r1, 0x4E - strb r1, [r0] - adds r4, 0x1 -_08069C0A: - movs r1, 0x89 - lsls r1, 1 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C26 - cmp r4, 0xB - bgt _08069C26 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x50 - strb r1, [r0] - adds r4, 0x1 -_08069C26: - adds r0, r5, 0 - adds r0, 0xF0 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C40 - cmp r4, 0xB - bgt _08069C40 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x51 - strb r1, [r0] - adds r4, 0x1 -_08069C40: - adds r0, r5, 0 - adds r0, 0xF1 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C5A - cmp r4, 0xB - bgt _08069C5A - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x52 - strb r1, [r0] - adds r4, 0x1 -_08069C5A: - adds r0, r5, 0 - adds r0, 0xF4 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C74 - cmp r4, 0xB - bgt _08069C74 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x53 - strb r1, [r0] - adds r4, 0x1 -_08069C74: - adds r0, r5, 0 - adds r0, 0xF5 - ldrb r0, [r0] - cmp r0, 0 - beq _08069C8E - cmp r4, 0xB - bgt _08069C8E - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x54 - strb r1, [r0] - adds r4, 0x1 -_08069C8E: - mov r0, r8 - bl ShouldMonsterRunAway - lsls r0, 24 - cmp r0, 0 - beq _08069CAA - cmp r4, 0xB - bgt _08069CAA - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x55 - strb r1, [r0] - adds r4, 0x1 -_08069CAA: - adds r0, r5, 0 - adds r0, 0xFD - ldrb r0, [r0] - cmp r0, 0 - beq _08069CC4 - cmp r4, 0xB - bgt _08069CC4 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x56 - strb r1, [r0] - adds r4, 0x1 -_08069CC4: - mov r0, r8 - movs r1, 0 - bl sub_8070828 - cmp r0, 0x1 - ble _08069CE0 - cmp r4, 0xB - bgt _08069CE0 - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x57 - strb r1, [r0] - adds r4, 0x1 -_08069CE0: - adds r0, r5, 0 - adds r0, 0xF2 - ldrb r0, [r0] - cmp r0, 0 - beq _08069CFA - cmp r4, 0xB - bgt _08069D0E - adds r0, r6, 0 - adds r0, 0x58 - adds r0, r4 - movs r1, 0x58 - strb r1, [r0] - adds r4, 0x1 -_08069CFA: - cmp r4, 0xB - bgt _08069D0E - adds r1, r6, 0 - adds r1, 0x58 - movs r2, 0 -_08069D04: - adds r0, r1, r4 - strb r2, [r0] - adds r4, 0x1 - cmp r4, 0xB - ble _08069D04 -_08069D0E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8069844 - .align 2,0 diff --git a/src/code_8069D4C.c b/src/code_8069D4C.c index f93a9c07d..a43475ce8 100644 --- a/src/code_8069D4C.c +++ b/src/code_8069D4C.c @@ -1,8 +1,393 @@ #include "global.h" +#include "code_806CD90.h" +#include "code_8077274_1.h" +#include "dungeon_ai_targeting.h" +#include "dungeon_map_access.h" +#include "dungeon_movement.h" +#include "move_effects_target.h" #include "pokemon.h" +#include "pokemon_3.h" #include "dungeon_util.h" +#include "status_checks_1.h" #include "code_8069D4C.h" +extern u8 gUnknown_810AC60; // 0xC +extern u8 gUnknown_810AC62; // 0xC +extern u8 gUnknown_810AC68; // 0x8 +extern u8 gUnknown_810AC64; // 0x8 +extern u8 gUnknown_810AC66; // 0x8 +extern DungeonPos gUnknown_203B410; +extern DungeonPos gUnknown_202EE0C; +s32 sub_806A4DC(EntityInfo *info); +bool8 sub_8070F80(Entity * pokemon, s32 direction); +void sub_80402AC(s32, s32); + +void sub_80694C0(Entity *target,s32 x,int y,char param_4) +{ + Tile *tile; + Tile *tile2; + EntityInfo *info; + + tile = GetTileMut(x,y); + info = GetEntInfo(target); + + if ((u8)((info->frozenClassStatus).status - 3) < 2) { + sub_8076CB4(info->unk9C); + } + if ((((info->frozenClassStatus).status == 7) || ((info->frozenClassStatus).status == 5)) || ((info->frozenClassStatus).status == 2)) { + EndFrozenClassStatus(target,target); + } + if ((x != (target->pos).x) || (y != (target->pos).y)) { + if ((0 <= (target->pos).x) && (0 <= (target->pos).y)) { + tile2 = GetTileMut((target->pos).x,(target->pos).y); + if (tile2->monster == target) { + tile2->monster = NULL; + } + sub_80402AC((target->pos).x,(target->pos).y); + } + (target->prevPos).x = (target->pos).x; + (target->prevPos).y = (target->pos).y; + (target->pos).x = x; + (target->pos).y = y; + if (info->isTeamLeader) { + gUnknown_203B410.x = x; + gUnknown_203B410.y = y; + } + tile->monster = target; + if (info->isTeamLeader) { + gUnknown_202EE0C.x = x; + gUnknown_202EE0C.y = y; + gDungeon->unk1 = 0; + } + sub_80402AC(x,y); + + switch(param_4) + { + case 0: + info->prevPos[3] = info->prevPos[2]; + info->prevPos[2] = info->prevPos[1]; + info->prevPos[1] = info->prevPos[0]; + if (info->invisibleClassStatus.status != 1) { + info->prevPos[0] = target->prevPos; + } + break; + case 1: + info->prevPos[0] = target->pos; + info->prevPos[1] = info->prevPos[0]; + info->prevPos[2] = info->prevPos[0]; + info->prevPos[3] = info->prevPos[0]; + break; + } + target->room = tile->room; + sub_806CF98(target); + } + return; +} + +void sub_80695EC(Entity *param_1,int x,int y) +{ + EntityInfo *info; + + info = GetEntInfo(param_1); + if ((u8)((info->frozenClassStatus).status - 3) < 2) { + sub_8076CB4(info->unk9C); + } + if ((x != (param_1->pos).x) || (y != (param_1->pos).y)) { + param_1->prevPos.x = param_1->pos.x; + param_1->prevPos.y = param_1->pos.y; + param_1->pos.x = x; + param_1->pos.y = y; + info->prevPos[3] = info->prevPos[2]; + info->prevPos[2] = info->prevPos[1]; + info->prevPos[1] = info->prevPos[0]; + if (info->invisibleClassStatus.status != 1) { + info->prevPos[0] = param_1->prevPos; + } + param_1->room = GetTile(x,y)->room; + } +} + +Entity * sub_8069660(Entity *target) +{ + const Tile *tile; + + EntityInfo *info; + + info = GetEntInfo(target); + + if(sub_8070F80(target, info->action.direction)) + { + tile = GetTile((target->pos).x + (gAdjacentTileOffsets)[info->action.direction].x,(target->pos).y + (gAdjacentTileOffsets)[info->action.direction].y); + return tile->monster; + } + return NULL; +} + +Entity * sub_80696A8(Entity *target) +{ + const Tile *tile; + Entity *entity; + + EntityInfo *info; + + info = GetEntInfo(target); + + if(CanAttackInDirection(target, info->action.direction)) + { + tile = GetTile((target->pos).x + (gAdjacentTileOffsets)[info->action.direction].x,(target->pos).y + (gAdjacentTileOffsets)[info->action.direction].y); + if (((entity = tile->monster, entity != NULL)) && (entity->type == ENTITY_MONSTER)) { + return entity; + } + } + return NULL; +} + + +Entity * sub_80696FC(Entity *target) +{ + const Tile *tile; + Entity *entity; + + DungeonPos pos; + EntityInfo *info; + + info = GetEntInfo(target); + + pos.x = (target->pos).x + (gAdjacentTileOffsets)[info->action.direction].x; + pos.y = (target->pos).y + (gAdjacentTileOffsets)[info->action.direction].y; + tile = GetTile(pos.x,pos.y); + if (((!sub_80705F0(target,&pos)) && (entity = tile->monster, entity != NULL)) && (entity->type == ENTITY_MONSTER)) { + return entity; + } + return NULL; +} + +Entity * sub_806977C(Entity *target) +{ + const Tile *tile; + Entity *entity; + + DungeonPos pos; + EntityInfo *info; + + info = GetEntInfo(target); + + pos.x = (target->pos).x + (gAdjacentTileOffsets)[info->action.direction].x; + pos.y = (target->pos).y + ((gAdjacentTileOffsets)[info->action.direction].y); + GetTile(pos.x,(int)pos.y); + if (!sub_80705F0(target,&pos)) { + pos.x = (gAdjacentTileOffsets)[info->action.direction].x * 2 + (target->pos).x; + pos.y = (gAdjacentTileOffsets)[info->action.direction].y * 2 + (target->pos).y; + tile = GetTile(pos.x,pos.y); + if (((!sub_80705F0(target,&pos)) && (entity = tile->monster, entity != NULL)) && (entity->type == ENTITY_MONSTER)) { + return entity; + } + } + return NULL; +} + +void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target) { + int index; + u8 *atkPtr; + u8 *spAtkPtr; + u8 *defPtr; + s32 uVar15; + u8 *spDefBoost; + + EntityInfo *info = GetEntInfo(target); + + SetMessageArgument_2(param_1->nameBuffer, info, 0); + param_1->species = info->id; + param_1->HP1 = info->HP; + param_1->HP2 = info->maxHPStat; + param_1->level = info->level; + param_1->exp = info->exp; + for(index = 0; index < 2; index++) + { + (param_1->offense).att[index] = info->atk[index]; + (param_1->offense).def[index] = info->def[index]; + param_1->types[index] = info->types[index]; + param_1->abilities[index] = info->abilities[index]; + } + param_1->isTeamLeader = info->isTeamLeader; + atkPtr = ¶m_1->atkBoost; + *atkPtr = '\0'; + spAtkPtr = ¶m_1->spAtkBoost; + *spAtkPtr = '\0'; + defPtr = ¶m_1->defBoost; + *defPtr = '\0'; + spDefBoost = ¶m_1->spDefBoost; + *spDefBoost = '\0'; + if ((info->heldItem.flags & ITEM_FLAG_EXISTS) && ((info->heldItem.flags & ITEM_FLAG_STICKY) == 0)) { + if (info->heldItem.id == ITEM_POWER_BAND) { + *atkPtr += gUnknown_810AC60; + } + if (info->heldItem.id == ITEM_MUNCH_BELT) { + *atkPtr += gUnknown_810AC68; + } + if (info->heldItem.id == ITEM_SPECIAL_BAND) { + *spAtkPtr += gUnknown_810AC62; + } + if (info->heldItem.id == ITEM_MUNCH_BELT) { + *spAtkPtr += gUnknown_810AC68; + } + if (info->heldItem.id == ITEM_DEF_SCARF) { + *defPtr += gUnknown_810AC64; + } + if (info->heldItem.id == ITEM_ZINC_BAND) { + *spDefBoost += gUnknown_810AC66; + } + } + param_1->tactic = info->tactic; + param_1->item = info->heldItem; + param_1->IQ = info->IQ; + (param_1->dungeonLocation) = info->joinedAt; + param_1->unk44[0].level = 0; + param_1->unk44[1].level = 0; + param_1->IQSkills = info->IQSkillMenuFlags; + if (gDungeon->unk644.unk16 != 0) { + param_1->unk4C = sub_806A4DC(info); + } + else { + param_1->unk4C = 3; + } + + uVar15 = 0; + if (info->HP <= info->maxHPStat / 4) { + param_1->unk58[0] = 6; + uVar15 = 1; + } + + if (gDungeon->unk644.itemHoldersIdentified) { + param_1->unk58[uVar15] = '\v'; + uVar15++; + } + if (FixedPointToInt(info->belly) == 0) { + if (info->isTeamLeader) { + param_1->unk58[uVar15] = '\x13'; + } + else { + param_1->unk58[uVar15] = ';'; + } + + uVar15++; + } + if (1 < GetEntInfo(target)->speedStage) { + param_1->unk58[uVar15] = '\x1b'; + uVar15++; + } + if (GetEntInfo(target)->speedStage < 1) { + param_1->unk58[uVar15] = '('; + uVar15++; + } + if ((((((info->offensiveMultipliers[0].raw < 0x100) || (info->offensiveMultipliers[1].raw < 0x100) + ) || (info->defensiveMultipliers[0].raw < 0x100)) || + ((info->defensiveMultipliers[1].raw < 0x100 || (info->offensiveStages[0] < 10)))) || + ((info->offensiveStages[1] < 10 || + ((info->defensiveStages[0] < 10 || (info->defensiveStages[1] < 10)))))) || + ((info->hitChanceStages[0] < 10 || (info->hitChanceStages[1] < 10)))) { + param_1->unk58[uVar15] = '7'; + uVar15++; + } + if (((info->sleepClassStatus).status != 0) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->sleepClassStatus).status; + uVar15++; + } + if (((info->burnClassStatus).status != 0) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->burnClassStatus).status + '\x06'; + uVar15++; + } + if (((info->frozenClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->frozenClassStatus).status + '\v'; + uVar15++; + } + if (((info->cringeClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->cringeClassStatus).status + '\x13'; + uVar15++; + } + if (((info->bideClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->bideClassStatus).status + '\x1b'; + uVar15++; + } + if (((info->reflectClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->reflectClassStatus).status + '('; + uVar15++; + } + if (((info->curseClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->curseClassStatus).status + '7'; + uVar15++; + } + if (((info->leechSeedClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->leechSeedClassStatus).status + ';'; + uVar15++; + } + if (((info->sureShotClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->sureShotClassStatus.status + '>'; + uVar15++; + } + if (((info->longTossClassStatus).status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->longTossClassStatus.status + 0x43; + uVar15++; + } + if ((info->invisibleClassStatus.status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->invisibleClassStatus.status + 'F'; + uVar15++; + } + if ((info->blinkerClassStatus.status != '\0') && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->blinkerClassStatus.status + 'J'; + uVar15++; + } + if ((info->muzzled.muzzled) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->muzzled.muzzled + 'N'; + uVar15++; + } + if ((info->stockpileStage != 0) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'P'; + uVar15++; + } + if ((info->powerEars) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'Q'; + uVar15++; + } + if ((info->scanning) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'R'; + uVar15++; + } + if ((info->grudge) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'S'; + uVar15++; + } + if ((info->exposed) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'T'; + uVar15++; + } + if ((ShouldMonsterRunAway(target)) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'U'; + uVar15++; + } + if ((info->perishSongTurns != 0) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'V'; + uVar15++; + } + if ((1 < sub_8070828(target,FALSE)) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = 'W'; + uVar15++; + } + if (info->stairSpotter) { + if (0xb < uVar15) { + return; + } + param_1->unk58[uVar15] = 'X'; + uVar15++; + } + + for(; uVar15 < 0xC; uVar15++) + { + param_1->unk58[uVar15] = 0; + } + return; +} + u32 sub_8069D18(DungeonPos *pos,Entity *entity) { EntityInfo *info; From 8ee30731238a1c7ecd78a7295c7c937603db1950 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 26 Jan 2025 10:34:00 -0800 Subject: [PATCH 14/27] finish up ground_main --- asm/code_8098BDC.s | 257 --------------------------------------------- ld_script.txt | 1 - src/ground_main.c | 200 ++++++++++++++++++++++++++++++++++- 3 files changed, 198 insertions(+), 260 deletions(-) delete mode 100644 asm/code_8098BDC.s diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s deleted file mode 100644 index 43e11bddf..000000000 --- a/asm/code_8098BDC.s +++ /dev/null @@ -1,257 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80990EC -sub_80990EC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x80 - adds r7, r0, 0 - lsls r1, 16 - asrs r4, r1, 16 - adds r0, r4, 0 - bl GetDungeonInfo_80A2608 - mov r8, r0 - ldrb r0, [r0, 0xC] - movs r5, 0 - strb r0, [r7] - movs r0, 0x1 - strb r0, [r7, 0x1] - strb r5, [r7, 0xC] - adds r0, r4, 0 - bl sub_80A2750 - lsls r0, 16 - asrs r6, r0, 16 - cmp r6, 0x2 - beq _080991C8 - cmp r6, 0x2 - bgt _08099126 - cmp r6, 0x1 - beq _0809912C - b _080991CA -_08099126: - cmp r6, 0x4 - beq _080991C4 - b _080991CA -_0809912C: - movs r1, 0 - strb r5, [r7, 0xB] - adds r0, r4, 0 - subs r0, 0x25 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bhi _0809913E - movs r1, 0x1 -_0809913E: - cmp r1, 0 - beq _080991CA - strb r6, [r7, 0xC] - mov r0, sp - movs r1, 0x5B - bl sub_80A8EC0 - add r4, sp, 0x18 - adds r0, r4, 0 - mov r1, sp - movs r2, 0xA - bl BoundedCopyStringtoBuffer - add r5, sp, 0x30 - str r4, [sp, 0x58] - add r1, sp, 0x5C - movs r2, 0 - movs r0, 0x5E - strh r0, [r1] - mov r0, sp - adds r0, 0x5E - strb r2, [r0] - add r0, sp, 0x60 - movs r1, 0x47 - strb r1, [r0] - strb r2, [r0, 0x1] - add r1, sp, 0x64 - movs r0, 0x82 - lsls r0, 1 - strh r0, [r1] - movs r0, 0xE0 - strh r0, [r1, 0x2] - movs r0, 0xAC - strh r0, [r1, 0x4] - movs r0, 0xBE - strh r0, [r1, 0x6] - add r1, sp, 0x6C - movs r0, 0x50 - strh r0, [r1] - mov r0, sp - adds r0, 0x6E - movs r2, 0xF - strh r2, [r0] - add r0, sp, 0x70 - strh r6, [r0] - adds r0, 0x2 - movs r1, 0x19 - strh r1, [r0] - strh r1, [r0, 0x2] - adds r0, 0x4 - strh r2, [r0] - strh r2, [r0, 0x2] - ldr r0, _080991C0 - str r0, [sp, 0x7C] - add r1, sp, 0x58 - adds r0, r5, 0 - movs r2, 0x28 - bl memcpy - adds r0, r7, 0 - adds r0, 0x18 - adds r1, r5, 0 - bl sub_808D144 - b _080991CA - .align 2, 0 -_080991C0: .4byte 0x000061a8 -_080991C4: - strb r5, [r7, 0xB] - b _080991CA -_080991C8: - strb r6, [r7, 0xB] -_080991CA: - movs r0, 0 - strb r0, [r7, 0x4] - strb r0, [r7, 0xD] - mov r1, r8 - ldrb r0, [r1, 0x11] - add sp, 0x80 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80990EC - - thumb_func_start sub_80991E0 -sub_80991E0: - push {lr} - adds r2, r0, 0 - ldr r3, _08099204 - ldrh r0, [r3] - strh r0, [r1] - ldr r0, _08099208 - ldrb r0, [r0] - cmp r0, 0 - bne _0809920C - movs r0, 0 - ldrsh r1, [r3, r0] - adds r0, r2, 0 - bl sub_80990EC - lsls r0, 24 - lsrs r0, 24 - b _08099218 - .align 2, 0 -_08099204: .4byte gUnknown_20398C4 -_08099208: .4byte gUnknown_203B49C -_0809920C: - ldr r1, _0809921C - adds r0, r2, 0 - movs r2, 0x88 - bl memcpy - movs r0, 0x1 -_08099218: - pop {r1} - bx r1 - .align 2, 0 -_0809921C: .4byte gUnknown_20398C8 - thumb_func_end sub_80991E0 - - thumb_func_start sub_8099220 -sub_8099220: - push {lr} - adds r2, r0, 0 - lsls r1, 16 - asrs r3, r1, 16 - cmp r2, 0 - beq _08099258 - ldr r1, _08099248 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _0809924C - movs r0, 0 - strb r0, [r1] - ldr r0, _08099250 - strh r3, [r0] - ldr r0, _08099254 - adds r1, r2, 0 - movs r2, 0x88 - bl memcpy - b _0809926A - .align 2, 0 -_08099248: .4byte gUnknown_203B49C -_0809924C: .4byte gUnknown_203B49D -_08099250: .4byte gUnknown_20398C4 -_08099254: .4byte gUnknown_20398C8 -_08099258: - ldr r0, _08099270 - strb r2, [r0] - ldr r0, _08099274 - strb r2, [r0] - ldr r1, _08099278 - movs r2, 0x1 - negs r2, r2 - adds r0, r2, 0 - strh r0, [r1] -_0809926A: - pop {r0} - bx r0 - .align 2, 0 -_08099270: .4byte gUnknown_203B49C -_08099274: .4byte gUnknown_203B49D -_08099278: .4byte gUnknown_20398C4 - thumb_func_end sub_8099220 - - thumb_func_start sub_809927C -sub_809927C: - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _080992CC - movs r1, 0x1 - strb r1, [r0] - ldr r0, _080992D0 - strb r1, [r0] - ldr r1, _080992D4 - movs r0, 0x50 - strh r0, [r1] - ldr r4, _080992D8 - strb r5, [r4] - movs r0, 0 - movs r1, 0x13 - movs r2, 0x50 - bl SetScriptVarValue - ldrb r2, [r4] - movs r0, 0 - movs r1, 0x14 - bl SetScriptVarValue - ldr r4, _080992DC - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8095494 - subs r4, 0x10 - movs r1, 0 - movs r0, 0x1 - strb r0, [r4, 0xB] - strb r1, [r4, 0xC] - strb r1, [r4, 0x4] - strb r1, [r4, 0xD] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080992CC: .4byte gUnknown_203B49C -_080992D0: .4byte gUnknown_203B49D -_080992D4: .4byte gUnknown_20398C4 -_080992D8: .4byte gUnknown_2039950 -_080992DC: .4byte gUnknown_20398C8 + 0x10 - thumb_func_end sub_809927C diff --git a/ld_script.txt b/ld_script.txt index 75680262e..ba8c0886b 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -317,7 +317,6 @@ SECTIONS { src/position_util.o(.text); asm/code_8098468.o(.text); src/ground_main.o(.text); - asm/code_8098BDC.o(.text); src/code_8099328.o(.text); src/code_8099360.o(.text); asm/code_8099360.o(.text); diff --git a/src/ground_main.c b/src/ground_main.c index afd6a94bf..a54fee6f8 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -1,4 +1,5 @@ #include "global.h" +#include "structs/str_wonder_mail.h" #include "code_8009804.h" #include "code_800C9CC.h" #include "code_80118A4.h" @@ -9,6 +10,24 @@ #include "ground_map_2.h" #include "play_time.h" +// size: 0x88 +struct unkStruct_20398C8 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 fill5[0xB - 0x5]; + u8 unkB; + u8 unkC; + u8 unkD; + WonderMailSub unk10; + PokemonStruct1 unk18; + u8 fill70[0x88 - 0x70]; +}; + + EWRAM_DATA u32 gUnknown_20398A8 = {0}; EWRAM_DATA u32 gUnknown_20398AC = {0}; EWRAM_DATA u32 gUnknown_20398B0 = {0}; @@ -21,8 +40,10 @@ EWRAM_DATA u16 gUnknown_20398BC = {0}; EWRAM_DATA u16 gUnknown_20398BE = {0}; EWRAM_DATA u32 gUnknown_20398C0 = {0}; EWRAM_DATA s16 gUnknown_20398C4 = {0}; +struct unkStruct_20398C8 gUnknown_20398C8; +extern u8 gUnknown_2039950; -EWRAM_INIT u8 gUnknown_203B49C = {0}; +EWRAM_INIT bool8 gUnknown_203B49C = {0}; EWRAM_INIT u8 gUnknown_203B49D = {0}; #include "data/ground_main.h" @@ -55,6 +76,7 @@ extern void sub_80961B4(); extern void ClearAllItems_8091FB4(); extern void ChooseKecleonShopInventory(u32); extern u8 sub_809C730(); +extern void sub_8095494(WonderMailSub *param_1, u8 index); void sub_8098BDC(void) { @@ -203,7 +225,7 @@ bool8 GroundMainRescueRequest(s32 r0, s32 r1) } else { - if(gUnknown_203B49C == 0) + if(!gUnknown_203B49C) { gUnknown_20398C4 = r5; } @@ -332,3 +354,177 @@ const char *sub_80990B8(void) return sub_8098FB4(); } } + +// https://decomp.me/scratch/1QxJZ + +NAKED +u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2) +{ + asm_unified( + "\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x80\n" + "\tadds r7, r0, 0\n" + "\tlsls r1, 16\n" + "\tasrs r4, r1, 16\n" + "\tadds r0, r4, 0\n" + "\tbl GetDungeonInfo_80A2608\n" + "\tmov r8, r0\n" + "\tldrb r0, [r0, 0xC]\n" + "\tmovs r5, 0\n" + "\tstrb r0, [r7]\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r7, 0x1]\n" + "\tstrb r5, [r7, 0xC]\n" + "\tadds r0, r4, 0\n" + "\tbl sub_80A2750\n" + "\tlsls r0, 16\n" + "\tasrs r6, r0, 16\n" + "\tcmp r6, 0x2\n" + "\tbeq _080991C8\n" + "\tcmp r6, 0x2\n" + "\tbgt _08099126\n" + "\tcmp r6, 0x1\n" + "\tbeq _0809912C\n" + "\tb _080991CA\n" +"_08099126:\n" + "\tcmp r6, 0x4\n" + "\tbeq _080991C4\n" + "\tb _080991CA\n" +"_0809912C:\n" + "\tmovs r1, 0\n" + "\tstrb r5, [r7, 0xB]\n" + "\tadds r0, r4, 0\n" + "\tsubs r0, 0x25\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tbhi _0809913E\n" + "\tmovs r1, 0x1\n" +"_0809913E:\n" + "\tcmp r1, 0\n" + "\tbeq _080991CA\n" + "\tstrb r6, [r7, 0xC]\n" + "\tmov r0, sp\n" + "\tmovs r1, 0x5B\n" + "\tbl sub_80A8EC0\n" + "\tadd r4, sp, 0x18\n" + "\tadds r0, r4, 0\n" + "\tmov r1, sp\n" + "\tmovs r2, 0xA\n" + "\tbl BoundedCopyStringtoBuffer\n" + "\tadd r5, sp, 0x30\n" + "\tstr r4, [sp, 0x58]\n" + "\tadd r1, sp, 0x5C\n" + "\tmovs r2, 0\n" + "\tmovs r0, 0x5E\n" + "\tstrh r0, [r1]\n" + "\tmov r0, sp\n" + "\tadds r0, 0x5E\n" + "\tstrb r2, [r0]\n" + "\tadd r0, sp, 0x60\n" + "\tmovs r1, 0x47\n" + "\tstrb r1, [r0]\n" + "\tstrb r2, [r0, 0x1]\n" + "\tadd r1, sp, 0x64\n" + "\tmovs r0, 0x82\n" + "\tlsls r0, 1\n" + "\tstrh r0, [r1]\n" + "\tmovs r0, 0xE0\n" + "\tstrh r0, [r1, 0x2]\n" + "\tmovs r0, 0xAC\n" + "\tstrh r0, [r1, 0x4]\n" + "\tmovs r0, 0xBE\n" + "\tstrh r0, [r1, 0x6]\n" + "\tadd r1, sp, 0x6C\n" + "\tmovs r0, 0x50\n" + "\tstrh r0, [r1]\n" + "\tmov r0, sp\n" + "\tadds r0, 0x6E\n" + "\tmovs r2, 0xF\n" + "\tstrh r2, [r0]\n" + "\tadd r0, sp, 0x70\n" + "\tstrh r6, [r0]\n" + "\tadds r0, 0x2\n" + "\tmovs r1, 0x19\n" + "\tstrh r1, [r0]\n" + "\tstrh r1, [r0, 0x2]\n" + "\tadds r0, 0x4\n" + "\tstrh r2, [r0]\n" + "\tstrh r2, [r0, 0x2]\n" + "\tldr r0, _080991C0\n" + "\tstr r0, [sp, 0x7C]\n" + "\tadd r1, sp, 0x58\n" + "\tadds r0, r5, 0\n" + "\tmovs r2, 0x28\n" + "\tbl memcpy\n" + "\tadds r0, r7, 0\n" + "\tadds r0, 0x18\n" + "\tadds r1, r5, 0\n" + "\tbl sub_808D144\n" + "\tb _080991CA\n" + "\t.align 2, 0\n" +"_080991C0: .4byte 0x000061a8\n" +"_080991C4:\n" + "\tstrb r5, [r7, 0xB]\n" + "\tb _080991CA\n" +"_080991C8:\n" + "\tstrb r6, [r7, 0xB]\n" +"_080991CA:\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r7, 0x4]\n" + "\tstrb r0, [r7, 0xD]\n" + "\tmov r1, r8\n" + "\tldrb r0, [r1, 0x11]\n" + "\tadd sp, 0x80\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} + +u8 sub_80991E0(struct unkStruct_20398C8 *param_1,short *param_2) +{ + *param_2 = gUnknown_20398C4; + if (gUnknown_203B49C) { + memcpy(param_1, &gUnknown_20398C8, sizeof(struct unkStruct_20398C8)); + return TRUE; + } + else { + return sub_80990EC(param_1,gUnknown_20398C4); + } +} + +void sub_8099220(struct unkStruct_20398C8 *param_1, s16 param_2) +{ + s32 param_2_s32 = (s16)param_2; + if (param_1 != NULL) + { + gUnknown_203B49C = TRUE; + gUnknown_203B49D = 0; + gUnknown_20398C4 = param_2_s32; + memcpy(&gUnknown_20398C8, param_1, sizeof(struct unkStruct_20398C8)); + } + else { + gUnknown_203B49C = FALSE; + gUnknown_203B49D = 0; + gUnknown_20398C4 = -1; + } +} + +void sub_809927C(u8 param_1) +{ + gUnknown_203B49C = 1; + gUnknown_203B49D = 1; + gUnknown_20398C4 = 0x50; + gUnknown_2039950 = param_1; + SetScriptVarValue(0x0,DUNGEON_ENTER,0x50); + SetScriptVarValue(0x0,DUNGEON_ENTER_INDEX,gUnknown_2039950); + sub_8095494(&gUnknown_20398C8.unk10,param_1); + gUnknown_20398C8.unkB = 1; + gUnknown_20398C8.unkC = 0; + gUnknown_20398C8.unk4 = 0; + gUnknown_20398C8.unkD = 0; +} From 6fd9f2f645a8192237ac126086950f8b027bf7a6 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 26 Jan 2025 13:39:02 -0800 Subject: [PATCH 15/27] decomp sub_807348C --- asm/code_8072CF4.s | 197 ----------------------------------------- src/dungeon_ai_items.c | 66 ++++++++++++++ 2 files changed, 66 insertions(+), 197 deletions(-) diff --git a/asm/code_8072CF4.s b/asm/code_8072CF4.s index bad448c7a..89275277f 100644 --- a/asm/code_8072CF4.s +++ b/asm/code_8072CF4.s @@ -216,201 +216,4 @@ _0807347A: bx r0 thumb_func_end sub_80732F0 - thumb_func_start sub_807348C -sub_807348C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - movs r4, 0 - movs r0, 0xFF - mov r9, r0 -_0807349E: - ldr r0, _080734E8 - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _080734EC - adds r0, r2 - adds r0, r1 - ldr r7, [r0] - adds r0, r7, 0 - bl EntityIsValid - lsls r0, 24 - adds r4, 0x1 - str r4, [sp, 0x10] - cmp r0, 0 - bne _080734BE - b _080735E6 -_080734BE: - ldr r6, [r7, 0x70] - ldr r0, _080734F0 - adds r4, r6, r0 - ldrb r0, [r4] - cmp r0, 0xFF - bne _080734CC - b _080735E6 -_080734CC: - adds r1, r0, 0 - mov r8, r1 - adds r0, r7, 0 - movs r1, 0x1 - bl CannotAttack - lsls r0, 24 - cmp r0, 0 - beq _080734F4 - ldrb r0, [r4] - mov r2, r9 - orrs r0, r2 - strb r0, [r4] - b _080735DA - .align 2, 0 -_080734E8: .4byte gDungeon -_080734EC: .4byte 0x000135cc -_080734F0: .4byte 0x00000165 -_080734F4: - adds r0, r7, 0 - bl IsSleeping - lsls r0, 24 - cmp r0, 0 - bne _08073514 - ldrb r0, [r4] - mov r1, r9 - orrs r0, r1 - strb r0, [r4] - movs r2, 0xB2 - lsls r2, 1 - adds r1, r6, r2 - ldrb r0, [r1] - mov r2, r9 - b _080735E2 -_08073514: - adds r0, r6, 0 - adds r0, 0xEC - ldrb r0, [r0] - cmp r0, 0x1 - bne _0807354A - ldrb r0, [r4] - mov r1, r9 - orrs r0, r1 - strb r0, [r4] - movs r2, 0xB2 - lsls r2, 1 - adds r1, r6, r2 - ldrb r0, [r1] - mov r2, r9 - b _080735E2 -_08073532: - ldr r0, [r5] - ldr r1, [r5, 0x4] - str r0, [sp, 0x8] - str r1, [sp, 0xC] - adds r0, r5, 0x4 - bl sub_80838EC - adds r0, r7, 0 - adds r1, r5, 0 - bl MarkLastUsedMonMove - b _0807359C -_0807354A: - movs r3, 0 - movs r0, 0x46 - adds r0, r6 - mov r10, r0 - movs r1, 0x8C - lsls r1, 1 - adds r4, r6, r1 -_08073558: - lsls r0, r3, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r5, r6, r0 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08073594 - ldrb r0, [r6, 0x7] - cmp r0, 0 - bne _0807357A - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08073594 -_0807357A: - ldrh r0, [r4, 0x2] - cmp r0, 0x19 - bne _08073594 - adds r0, r7, 0 - adds r1, r5, 0 - movs r2, 0x1 - str r3, [sp, 0x14] - bl CanMonsterUseMove - lsls r0, 24 - ldr r3, [sp, 0x14] - cmp r0, 0 - bne _08073532 -_08073594: - adds r4, 0x8 - adds r3, 0x1 - cmp r3, 0x3 - ble _08073558 -_0807359C: - ldr r0, _08073600 - adds r1, r7, 0 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _08073604 - ldr r1, [r0] - adds r0, r7, 0 - bl LogMessageByIdWithPopupCheckUser - movs r0, 0x7 - mov r1, r8 - ands r1, r0 - movs r0, 0 - mov r2, r10 - strb r1, [r2] - str r0, [sp] - add r0, sp, 0x8 - str r0, [sp, 0x4] - adds r0, r7, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl TryUseChosenMove - ldr r2, _08073608 - adds r1, r6, r2 - ldrb r0, [r1] - mov r2, r9 - orrs r0, r2 - strb r0, [r1] -_080735DA: - movs r0, 0xB2 - lsls r0, 1 - adds r1, r6, r0 - ldrb r0, [r1] -_080735E2: - orrs r0, r2 - strb r0, [r1] -_080735E6: - ldr r4, [sp, 0x10] - cmp r4, 0x13 - bgt _080735EE - b _0807349E -_080735EE: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073600: .4byte gFormatBuffer_Monsters -_08073604: .4byte gUnknown_80FCF50 -_08073608: .4byte 0x00000165 - thumb_func_end sub_807348C - .align 2, 0 diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index 62c7dccde..cfce0bc9c 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -2,9 +2,12 @@ #include "constants/direction.h" #include "constants/dungeon_action.h" +#include "constants/global.h" #include "constants/iq_skill.h" +#include "constants/move.h" #include "constants/status.h" #include "constants/targeting.h" +#include "code_8045A00.h" #include "dungeon_action.h" #include "dungeon_ai_attack.h" #include "dungeon_ai_item_weight.h" @@ -14,14 +17,19 @@ #include "structs/dungeon_entity.h" #include "structs/str_dungeon.h" #include "dungeon_map_access.h" +#include "dungeon_message.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" #include "dungeon_visibility.h" #include "items.h" #include "structs/str_position.h" +#include "move_util.h" +#include "moves.h" #include "position_util.h" #include "status.h" +#include "status_checks_1.h" +#include "string_format.h" #define NUM_POTENTIAL_ROCK_TARGETS 20 @@ -42,6 +50,64 @@ EWRAM_DATA u32 gAIThrownItemProbabilities[NUM_DIRECTIONS] = {0}; extern TeamInventory *gTeamInventoryRef; +bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30, bool32 isLinkedMove, struct Move *move); +extern void sub_80838EC(u8 *a); +extern void MarkLastUsedMonMove(Entity *entity, Move *move); +extern u8 *gUnknown_80FCF50[]; + +void sub_807348C(void) +{ + int index; + s32 moveIndex; + Move *move; + EntityInfo *info; + Entity *pokemon; + Move chosenMove; + u8 r8; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) { + pokemon = gDungeon->activePokemon[index]; + if (EntityIsValid(pokemon)) { + info = GetEntInfo(pokemon); + if (info->unk165 != 0xff) { + r8 = info->unk165; + if (CannotAttack(pokemon,TRUE)) { + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + else if (!IsSleeping(pokemon)) { + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + else if (info->muzzled.muzzled == TRUE) { + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + else { + for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + move = &info->moves.moves[moveIndex]; + if (((MoveFlagExists(move)) && + ((info->isTeamLeader || (move->moveFlags & MOVE_FLAG_ENABLED_FOR_AI)) && move->id == MOVE_SNORE)) && + (CanMonsterUseMove(pokemon,move,TRUE))) { + chosenMove = *move; + sub_80838EC(&move->PP); + MarkLastUsedMonMove(pokemon,move); + break; + } + } + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],pokemon,0); + LogMessageByIdWithPopupCheckUser(pokemon,*gUnknown_80FCF50); + info->action.direction = r8 & DIRECTION_MASK; + TryUseChosenMove(pokemon,0,ITEM_NOTHING,1,FALSE,&chosenMove); + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + } + } + } +} + void sub_807360C(void) { s32 index; From 0529375ef872fa299127f6b2356258364be06a85 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 26 Jan 2025 18:42:21 -0800 Subject: [PATCH 16/27] finish dungeon_ai_leader --- asm/code_8072CF4.s | 219 ---------------------------------------- ld_script.txt | 1 - src/dungeon_ai_items.c | 87 ---------------- src/dungeon_ai_leader.c | 168 +++++++++++++++++++++++++++++- 4 files changed, 167 insertions(+), 308 deletions(-) delete mode 100644 asm/code_8072CF4.s diff --git a/asm/code_8072CF4.s b/asm/code_8072CF4.s deleted file mode 100644 index 89275277f..000000000 --- a/asm/code_8072CF4.s +++ /dev/null @@ -1,219 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80732F0 -sub_80732F0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - movs r4, 0 -_080732FE: - movs r5, 0 - ldr r0, _0807335C - ldr r0, [r0] - lsls r1, r4, 2 - ldr r2, _08073360 - adds r0, r2 - adds r0, r1 - ldr r0, [r0] - mov r8, r0 - bl EntityIsValid - lsls r0, 24 - adds r4, 0x1 - str r4, [sp, 0x10] - cmp r0, 0 - bne _08073320 - b _08073472 -_08073320: - mov r0, r8 - ldr r7, [r0, 0x70] - movs r1, 0xB2 - lsls r1, 1 - adds r4, r7, r1 - ldrb r0, [r4] - cmp r0, 0xFF - bne _08073332 - b _08073472 -_08073332: - adds r2, r0, 0 - mov r9, r2 - mov r0, r8 - movs r1, 0x1 - bl CannotAttack - lsls r0, 24 - cmp r0, 0 - bne _0807336E - mov r0, r8 - bl IsSleeping - lsls r0, 24 - cmp r0, 0 - bne _08073364 - ldrb r0, [r4] - movs r2, 0xFF - orrs r0, r2 - strb r0, [r4] - b _08073472 - .align 2, 0 -_0807335C: .4byte gDungeon -_08073360: .4byte 0x000135cc -_08073364: - adds r0, r7, 0 - adds r0, 0xEC - ldrb r0, [r0] - cmp r0, 0x1 - bne _08073378 -_0807336E: - ldrb r0, [r4] - movs r1, 0xFF - orrs r0, r1 - strb r0, [r4] - b _08073472 -_08073378: - movs r0, 0x4 - bl DungeonRandInt - adds r3, r0, 0 - movs r4, 0 -_08073382: - lsls r0, r3, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r2, r7, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08073448 - ldr r0, [r2] - ldr r1, [r2, 0x4] - str r0, [sp, 0x8] - str r1, [sp, 0xC] - ldr r1, [sp, 0x8] - lsrs r0, r1, 16 - cmp r0, 0x8A - beq _08073448 - adds r1, r0, 0 - ldr r0, _08073434 - cmp r1, r0 - beq _08073448 - movs r6, 0 - movs r0, 0x46 - adds r0, r7 - mov r10, r0 - movs r1, 0x8C - lsls r1, 1 - adds r4, r7, r1 -_080733BC: - lsls r0, r6, 3 - movs r2, 0x8C - lsls r2, 1 - adds r0, r2 - adds r5, r7, r0 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080733F4 - ldrb r0, [r7, 0x7] - cmp r0, 0 - bne _080733DE - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080733F4 -_080733DE: - ldrh r0, [r4, 0x2] - cmp r0, 0xE3 - bne _080733F4 - mov r0, r8 - adds r1, r5, 0 - movs r2, 0x1 - bl CanMonsterUseMove - lsls r0, 24 - cmp r0, 0 - bne _08073440 -_080733F4: - adds r4, 0x8 - adds r6, 0x1 - cmp r6, 0x3 - ble _080733BC -_080733FC: - ldr r0, _08073438 - mov r1, r8 - movs r2, 0 - bl SubstitutePlaceholderStringTags - ldr r0, _0807343C - ldr r1, [r0] - mov r0, r8 - bl LogMessageByIdWithPopupCheckUser - movs r0, 0x7 - mov r1, r9 - ands r1, r0 - movs r0, 0 - mov r2, r10 - strb r1, [r2] - str r0, [sp] - add r0, sp, 0x8 - str r0, [sp, 0x4] - mov r0, r8 - movs r1, 0 - movs r2, 0 - movs r3, 0x1 - bl TryUseChosenMove - movs r5, 0x1 - b _08073456 - .align 2, 0 -_08073434: .4byte 0x00000147 -_08073438: .4byte gFormatBuffer_Monsters -_0807343C: .4byte gUnknown_80FCF38 -_08073440: - adds r0, r5, 0x4 - bl sub_80838EC - b _080733FC -_08073448: - adds r3, 0x1 - cmp r3, 0x4 - bne _08073450 - movs r3, 0 -_08073450: - adds r4, 0x1 - cmp r4, 0x3 - ble _08073382 -_08073456: - movs r2, 0xB2 - lsls r2, 1 - adds r1, r7, r2 - ldrb r0, [r1] - movs r2, 0xFF - orrs r0, r2 - strb r0, [r1] - cmp r5, 0 - beq _08073472 - mov r0, r8 - movs r1, 0xB8 - lsls r1, 2 - bl sub_80421C0 -_08073472: - ldr r4, [sp, 0x10] - cmp r4, 0x13 - bgt _0807347A - b _080732FE -_0807347A: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80732F0 - - .align 2, 0 diff --git a/ld_script.txt b/ld_script.txt index ba8c0886b..35c1c1a40 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -252,7 +252,6 @@ SECTIONS { asm/code_80718D8.o(.text); src/code_8072B78.o(.text); src/dungeon_ai_leader.o(.text); - asm/code_8072CF4.o(.text); src/dungeon_ai_items.o(.text); src/code_8073CF0.o(.text); src/code_8075708.o(.text); diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index cfce0bc9c..faea80b50 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -2,12 +2,9 @@ #include "constants/direction.h" #include "constants/dungeon_action.h" -#include "constants/global.h" #include "constants/iq_skill.h" -#include "constants/move.h" #include "constants/status.h" #include "constants/targeting.h" -#include "code_8045A00.h" #include "dungeon_action.h" #include "dungeon_ai_attack.h" #include "dungeon_ai_item_weight.h" @@ -17,20 +14,13 @@ #include "structs/dungeon_entity.h" #include "structs/str_dungeon.h" #include "dungeon_map_access.h" -#include "dungeon_message.h" #include "dungeon_pokemon_attributes.h" #include "dungeon_random.h" #include "dungeon_util.h" #include "dungeon_visibility.h" #include "items.h" #include "structs/str_position.h" -#include "move_util.h" -#include "moves.h" #include "position_util.h" -#include "status.h" -#include "status_checks_1.h" -#include "string_format.h" - #define NUM_POTENTIAL_ROCK_TARGETS 20 #define GROUND_ITEM_TOOLBOX_INDEX 0x80 @@ -50,83 +40,6 @@ EWRAM_DATA u32 gAIThrownItemProbabilities[NUM_DIRECTIONS] = {0}; extern TeamInventory *gTeamInventoryRef; -bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30, bool32 isLinkedMove, struct Move *move); -extern void sub_80838EC(u8 *a); -extern void MarkLastUsedMonMove(Entity *entity, Move *move); -extern u8 *gUnknown_80FCF50[]; - -void sub_807348C(void) -{ - int index; - s32 moveIndex; - Move *move; - EntityInfo *info; - Entity *pokemon; - Move chosenMove; - u8 r8; - - for(index = 0; index < DUNGEON_MAX_POKEMON; index++) { - pokemon = gDungeon->activePokemon[index]; - if (EntityIsValid(pokemon)) { - info = GetEntInfo(pokemon); - if (info->unk165 != 0xff) { - r8 = info->unk165; - if (CannotAttack(pokemon,TRUE)) { - info->unk165 |= 0xff; - info->unk164 |= 0xff; - } - else if (!IsSleeping(pokemon)) { - info->unk165 |= 0xff; - info->unk164 |= 0xff; - } - else if (info->muzzled.muzzled == TRUE) { - info->unk165 |= 0xff; - info->unk164 |= 0xff; - } - else { - for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) - { - move = &info->moves.moves[moveIndex]; - if (((MoveFlagExists(move)) && - ((info->isTeamLeader || (move->moveFlags & MOVE_FLAG_ENABLED_FOR_AI)) && move->id == MOVE_SNORE)) && - (CanMonsterUseMove(pokemon,move,TRUE))) { - chosenMove = *move; - sub_80838EC(&move->PP); - MarkLastUsedMonMove(pokemon,move); - break; - } - } - SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],pokemon,0); - LogMessageByIdWithPopupCheckUser(pokemon,*gUnknown_80FCF50); - info->action.direction = r8 & DIRECTION_MASK; - TryUseChosenMove(pokemon,0,ITEM_NOTHING,1,FALSE,&chosenMove); - info->unk165 |= 0xff; - info->unk164 |= 0xff; - } - } - } - } -} - -void sub_807360C(void) -{ - s32 index; - Entity *entity; - - for(index = 0; index < DUNGEON_MAX_POKEMON; index++) - { - entity = gDungeon->activePokemon[index]; - if(EntityIsValid(entity)) - { - if(GetEntInfo(entity)->unk152 != 0) - { - GetEntInfo(entity)->unk152 = 0; - UpdateFlashFireBoost(entity, entity); - } - } - } -} - void AIDecideUseItem(Entity *pokemon) { EntityInfo *pokemonInfo = GetEntInfo(pokemon); diff --git a/src/dungeon_ai_leader.c b/src/dungeon_ai_leader.c index 7242351b8..ab9b35d93 100644 --- a/src/dungeon_ai_leader.c +++ b/src/dungeon_ai_leader.c @@ -2,6 +2,7 @@ #include "dungeon_ai_leader.h" #include "charge_move.h" #include "code_803E46C.h" +#include "code_8041AD0.h" #include "code_804267C.h" #include "code_8045A00.h" #include "dungeon_message.h" @@ -20,10 +21,15 @@ #include "dungeon_leader.h" #include "dungeon_movement.h" #include "dungeon_pokemon_attributes.h" +#include "dungeon_random.h" #include "dungeon_util.h" #include "dungeon_visibility.h" +#include "move_util.h" +#include "moves.h" #include "pokemon_3.h" #include "pokemon.h" +#include "status.h" +#include "status_checks_1.h" #include "trap.h" #include "dungeon_config.h" @@ -34,8 +40,10 @@ extern u8 gUnknown_202F32D; extern u8 gUnknown_203B434; extern u8 *gUnknown_80FA5B4[]; -extern u8 *gUnknown_80FE478[]; +extern u8 *gUnknown_80FCF50[]; +extern u8 *gUnknown_80FCF38[]; extern u8 *gUnknown_80FD2CC[]; +extern u8 *gUnknown_80FE478[]; extern u8 *gUnknown_80FE6D4[]; void sub_8075BA4(Entity *param_1, u8 param_2); @@ -79,6 +87,10 @@ bool8 sub_8044B84(void); extern void sub_8074094(Entity *); extern void sub_8071DA4(Entity *); u32 sub_8075818(Entity *entity); +extern void MarkLastUsedMonMove(Entity *entity, Move *move); +bool8 TryUseChosenMove(struct Entity *attacker, u32 r6, s32 itemId, u32 var_30, bool32 isLinkedMove, struct Move *move); +extern void sub_80838EC(u8 *a); + bool8 TargetLeader(Entity *pokemon) { @@ -369,3 +381,157 @@ bool8 sub_8072CF4(Entity *entity) } return FALSE; } + + +void sub_80732F0(void) +{ + s32 index; + Entity *entity; + EntityInfo *info; + s32 moveIndex; + s32 counter; + s32 otherIndex; + u8 flag; + Move *move; + Move *move2; + Move moveStack; + u8 sl; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++){ + flag = FALSE; + entity = gDungeon->activePokemon[index]; + if(EntityIsValid(entity)){ + info = GetEntInfo(entity); + if(info->unk164 != 0xFF){ + sl = info->unk164; + if(CannotAttack(entity, TRUE)){ + info->unk164 |= 0xFF; + } + else if(!IsSleeping(entity)){ + info->unk164 |= 0xFF; + } + else if(info->muzzled.muzzled == TRUE){ + info->unk164 |= 0xFF; + } + else{ + moveIndex = DungeonRandInt(MAX_MON_MOVES); + for(counter = 0; counter < MAX_MON_MOVES; counter++){ + move = &info->moves.moves[moveIndex]; + if(MoveFlagExists(move)){ + moveStack = *move; + if(moveStack.id == MOVE_SKETCH) + goto _increase; + if(moveStack.id == MOVE_MIMIC) + goto _increase; + for(otherIndex = 0; otherIndex < MAX_MON_MOVES; otherIndex++){ + move2 = &info->moves.moves[otherIndex]; + if(MoveFlagExists(move2)){ + if(!info->isTeamLeader){ + if(!(move2->moveFlags & MOVE_FLAG_ENABLED_FOR_AI)) continue; + } + if(move2->id == MOVE_SLEEP_TALK){ + if(CanMonsterUseMove(entity, move2, TRUE)) + { + sub_80838EC(&move2->PP); + break; + } + } + } + } + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], entity, 0); + LogMessageByIdWithPopupCheckUser(entity, *gUnknown_80FCF38); // {ARG_POKEMON_0} uttered its sleep talk! + info->action.direction = sl & DIRECTION_MASK; + TryUseChosenMove(entity, 0, ITEM_NOTHING, 1, FALSE, &moveStack); + flag = TRUE; + break; + + } + else + { +_increase: + moveIndex++; + if(moveIndex == MAX_MON_MOVES) + moveIndex = 0; + } + } + info->unk164 |= 0xFF; + if(flag) + sub_80421C0(entity, 0x2E0); + } + } + } + } +} + +void sub_807348C(void) +{ + int index; + s32 moveIndex; + Move *move; + EntityInfo *info; + Entity *pokemon; + Move chosenMove; + u8 r8; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) { + pokemon = gDungeon->activePokemon[index]; + if (EntityIsValid(pokemon)) { + info = GetEntInfo(pokemon); + if (info->unk165 != 0xff) { + r8 = info->unk165; + if (CannotAttack(pokemon,TRUE)) { + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + else if (!IsSleeping(pokemon)) { + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + else if (info->muzzled.muzzled == TRUE) { + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + else { + for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + move = &info->moves.moves[moveIndex]; + if (((MoveFlagExists(move)) && + ((info->isTeamLeader || (move->moveFlags & MOVE_FLAG_ENABLED_FOR_AI)) && move->id == MOVE_SNORE)) && + (CanMonsterUseMove(pokemon,move,TRUE))) { + chosenMove = *move; + sub_80838EC(&move->PP); + MarkLastUsedMonMove(pokemon,move); + break; + } + } + SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],pokemon,0); + LogMessageByIdWithPopupCheckUser(pokemon,*gUnknown_80FCF50); + info->action.direction = r8 & DIRECTION_MASK; + TryUseChosenMove(pokemon,0,ITEM_NOTHING,1,FALSE,&chosenMove); + info->unk165 |= 0xff; + info->unk164 |= 0xff; + } + } + } + } +} + +void sub_807360C(void) +{ + s32 index; + Entity *entity; + + for(index = 0; index < DUNGEON_MAX_POKEMON; index++) + { + entity = gDungeon->activePokemon[index]; + if(EntityIsValid(entity)) + { + if(GetEntInfo(entity)->unk152 != 0) + { + GetEntInfo(entity)->unk152 = 0; + UpdateFlashFireBoost(entity, entity); + } + } + } +} + From 076860a27ade7a71acc3cc04c42e097844668370 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 Jan 2025 08:15:27 -0800 Subject: [PATCH 17/27] match sub_80990EC thanks to @DizzyEggg --- include/pokemon.h | 1 + include/structs/str_pokemon.h | 15 +++ src/ground_main.c | 193 ++++++++++++---------------------- src/pokemon.c | 33 ++---- 4 files changed, 93 insertions(+), 149 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index f32e86d79..2d34bf04c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -105,6 +105,7 @@ void PrintPokeNameToBuffer(u8 *buffer, PokemonStruct1 *pokemon); void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level); const u8* DecompressMoveID(const u8* a1, u16* moveID); bool8 sub_808DA44(s32, u32); +void sub_808D144(PokemonStruct1 *pokemon, struct unkStruct_808D144 *r1); static inline bool8 PokemonFlag1(PokemonStruct1 *mon) { diff --git a/include/structs/str_pokemon.h b/include/structs/str_pokemon.h index 9b4c1b8da..8605b7cc8 100644 --- a/include/structs/str_pokemon.h +++ b/include/structs/str_pokemon.h @@ -161,4 +161,19 @@ struct FaceData u8 *unk0[5]; }; +struct unkStruct_808D144 +{ + /* 0x0 */ u8 *name; + /* 0x4 */ s16 speciesNum; + /* 0x6 */ u8 itemID; + /* 0x8 */ struct DungeonLocation dungeonLocation; + /* 0xC */ u16 moveID[MAX_MON_MOVES]; + /* 0x14 */ s16 pokeHP; + /* 0x16 */ u16 level; + /* 0x18 */ u16 IQ; + s16 offenseAtk[2]; // atk, spatt, def, spdef (not sure why s16/u16 and not u8) + s16 offenseDef[2]; + /* 0x24 */ u32 currExp; +}; + #endif // GUARD_STR_POKEMON_H diff --git a/src/ground_main.c b/src/ground_main.c index a54fee6f8..5c22c7a5d 100644 --- a/src/ground_main.c +++ b/src/ground_main.c @@ -1,4 +1,6 @@ #include "global.h" +#include "constants/dungeon.h" +#include "constants/move_id.h" #include "structs/str_wonder_mail.h" #include "code_8009804.h" #include "code_800C9CC.h" @@ -9,6 +11,8 @@ #include "ground_main.h" #include "ground_map_2.h" #include "play_time.h" +#include "pokemon.h" +#include "text_util.h" // size: 0x88 struct unkStruct_20398C8 @@ -74,7 +78,6 @@ extern void sub_8098CC8(); extern void GeneratePelipperJobs(); extern void sub_80961B4(); extern void ClearAllItems_8091FB4(); -extern void ChooseKecleonShopInventory(u32); extern u8 sub_809C730(); extern void sub_8095494(WonderMailSub *param_1, u8 index); @@ -355,134 +358,72 @@ const char *sub_80990B8(void) } } -// https://decomp.me/scratch/1QxJZ +static inline bool8 sub_80990EC_sub(struct unkStruct_20398C8 *iVar1, u32 iVar2) +{ + bool8 flag = FALSE; + iVar1->unkB = 0; + + if ((u16)(iVar2 - 0x25) < 3) + flag = TRUE; + else + flag = FALSE; + return flag; +} + +extern void sub_80A8EC0(u8 *, u32); -NAKED u8 sub_80990EC(struct unkStruct_20398C8 *param_1, s16 param_2) { - asm_unified( - "\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tsub sp, 0x80\n" - "\tadds r7, r0, 0\n" - "\tlsls r1, 16\n" - "\tasrs r4, r1, 16\n" - "\tadds r0, r4, 0\n" - "\tbl GetDungeonInfo_80A2608\n" - "\tmov r8, r0\n" - "\tldrb r0, [r0, 0xC]\n" - "\tmovs r5, 0\n" - "\tstrb r0, [r7]\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r7, 0x1]\n" - "\tstrb r5, [r7, 0xC]\n" - "\tadds r0, r4, 0\n" - "\tbl sub_80A2750\n" - "\tlsls r0, 16\n" - "\tasrs r6, r0, 16\n" - "\tcmp r6, 0x2\n" - "\tbeq _080991C8\n" - "\tcmp r6, 0x2\n" - "\tbgt _08099126\n" - "\tcmp r6, 0x1\n" - "\tbeq _0809912C\n" - "\tb _080991CA\n" -"_08099126:\n" - "\tcmp r6, 0x4\n" - "\tbeq _080991C4\n" - "\tb _080991CA\n" -"_0809912C:\n" - "\tmovs r1, 0\n" - "\tstrb r5, [r7, 0xB]\n" - "\tadds r0, r4, 0\n" - "\tsubs r0, 0x25\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tbhi _0809913E\n" - "\tmovs r1, 0x1\n" -"_0809913E:\n" - "\tcmp r1, 0\n" - "\tbeq _080991CA\n" - "\tstrb r6, [r7, 0xC]\n" - "\tmov r0, sp\n" - "\tmovs r1, 0x5B\n" - "\tbl sub_80A8EC0\n" - "\tadd r4, sp, 0x18\n" - "\tadds r0, r4, 0\n" - "\tmov r1, sp\n" - "\tmovs r2, 0xA\n" - "\tbl BoundedCopyStringtoBuffer\n" - "\tadd r5, sp, 0x30\n" - "\tstr r4, [sp, 0x58]\n" - "\tadd r1, sp, 0x5C\n" - "\tmovs r2, 0\n" - "\tmovs r0, 0x5E\n" - "\tstrh r0, [r1]\n" - "\tmov r0, sp\n" - "\tadds r0, 0x5E\n" - "\tstrb r2, [r0]\n" - "\tadd r0, sp, 0x60\n" - "\tmovs r1, 0x47\n" - "\tstrb r1, [r0]\n" - "\tstrb r2, [r0, 0x1]\n" - "\tadd r1, sp, 0x64\n" - "\tmovs r0, 0x82\n" - "\tlsls r0, 1\n" - "\tstrh r0, [r1]\n" - "\tmovs r0, 0xE0\n" - "\tstrh r0, [r1, 0x2]\n" - "\tmovs r0, 0xAC\n" - "\tstrh r0, [r1, 0x4]\n" - "\tmovs r0, 0xBE\n" - "\tstrh r0, [r1, 0x6]\n" - "\tadd r1, sp, 0x6C\n" - "\tmovs r0, 0x50\n" - "\tstrh r0, [r1]\n" - "\tmov r0, sp\n" - "\tadds r0, 0x6E\n" - "\tmovs r2, 0xF\n" - "\tstrh r2, [r0]\n" - "\tadd r0, sp, 0x70\n" - "\tstrh r6, [r0]\n" - "\tadds r0, 0x2\n" - "\tmovs r1, 0x19\n" - "\tstrh r1, [r0]\n" - "\tstrh r1, [r0, 0x2]\n" - "\tadds r0, 0x4\n" - "\tstrh r2, [r0]\n" - "\tstrh r2, [r0, 0x2]\n" - "\tldr r0, _080991C0\n" - "\tstr r0, [sp, 0x7C]\n" - "\tadd r1, sp, 0x58\n" - "\tadds r0, r5, 0\n" - "\tmovs r2, 0x28\n" - "\tbl memcpy\n" - "\tadds r0, r7, 0\n" - "\tadds r0, 0x18\n" - "\tadds r1, r5, 0\n" - "\tbl sub_808D144\n" - "\tb _080991CA\n" - "\t.align 2, 0\n" -"_080991C0: .4byte 0x000061a8\n" -"_080991C4:\n" - "\tstrb r5, [r7, 0xB]\n" - "\tb _080991CA\n" -"_080991C8:\n" - "\tstrb r6, [r7, 0xB]\n" -"_080991CA:\n" - "\tmovs r0, 0\n" - "\tstrb r0, [r7, 0x4]\n" - "\tstrb r0, [r7, 0xD]\n" - "\tmov r1, r8\n" - "\tldrb r0, [r1, 0x11]\n" - "\tadd sp, 0x80\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); + const DungeonInfo *iVar1; + u8 auStack_98 [24]; + u8 nameBuffer [24]; + u8 r5; + u8 dungeonIndex; + + iVar1 = GetDungeonInfo_80A2608(param_2); + dungeonIndex = iVar1->dungeonIndex; + r5 = 0; + param_1->unk0 = dungeonIndex; + param_1->unk1 = 1; + param_1->unkC = r5; + + switch(sub_80A2750(param_2)) + { + case 1: + if (sub_80990EC_sub(param_1, param_2)) { + param_1->unkC = 1; + sub_80A8EC0(auStack_98, 0x5b); + BoundedCopyStringtoBuffer(nameBuffer, auStack_98, POKEMON_NAME_LENGTH); + { + struct unkStruct_808D144 stack = + { + .name = nameBuffer, + .speciesNum = MONSTER_GENGAR, + .itemID = ITEM_NOTHING, + .dungeonLocation= {DUNGEON_RESCUE_TEAM_BASE, 0}, // DUNGEON_RESCUE_TEAM_BASE + .moveID = {MOVE_SCRATCH, MOVE_LEER, MOVE_TAUNT, MOVE_QUICK_ATTACK}, + .pokeHP = 80, + .level = 15, + .IQ = 1, + .offenseAtk = {25, 25}, + .offenseDef = {15, 15}, + .currExp = 25000, + }; + + sub_808D144(¶m_1->unk18, &stack); + } + } + break; + case 4: + param_1->unkB = 0; + break; + case 2: + param_1->unkB = 2; + break; + } + param_1->unk4 = 0; + param_1->unkD = 0; + return iVar1->unk11; } u8 sub_80991E0(struct unkStruct_20398C8 *param_1,short *param_2) diff --git a/src/pokemon.c b/src/pokemon.c index 406cb8c99..a5f5bfdb2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5,6 +5,7 @@ #include "code_8097DD0.h" #include "constants/colors.h" #include "constants/monster.h" +#include "constants/tactic.h" #include "decompress.h" #include "file_system.h" #include "pokemon_3.h" @@ -19,7 +20,7 @@ extern struct FileArchive gMonsterFileArchive; static EWRAM_DATA MonsterDataEntry *gMonsterParameters = {0}; static EWRAM_DATA OpenedFile *gMonsterParametersFile = {0}; -EWRAM_DATA SpriteOAM gShadowSprites[3] = {0}; // TODO: make static once pokemon_2.s is ded +static EWRAM_DATA SpriteOAM gShadowSprites[3] = {0}; static EWRAM_DATA unkStruct_203B45C gRecruitedPokemon = {0}; static EWRAM_DATA u16 gLevelCurrentPokeId = {0}; UNUSED static EWRAM_DATA u16 unused_data[3] = {0}; @@ -117,7 +118,7 @@ void sub_808CE74(s16 _species, bool32 _isLeader, u8* name) pokemon.heldItem.id = ITEM_NOTHING; pokemon.heldItem.quantity = 0; pokemon.currExp = 0; - pokemon.tacticIndex = 0; // TACTIC_LETS_GO_TOGETHER + pokemon.tacticIndex = TACTIC_LETS_GO_TOGETHER; pokemon.dungeonLocation.floor = 0; sub_808E490(pokemon.moves, species); @@ -164,7 +165,7 @@ void sub_808CFD0(PokemonStruct1 *pokemon, s16 _species, u8* name, u32 _itemID, D pokemon->speciesNum = species; xxx_init_helditem_8090B08(&pokemon->heldItem, itemID); pokemon->currExp = 0; - pokemon->tacticIndex = 0; + pokemon->tacticIndex = TACTIC_LETS_GO_TOGETHER; pokemon->IQ = 1; pokemon->dungeonLocation = *location; pokemon->unkC[0].level = 0; @@ -211,26 +212,12 @@ void sub_808D0D8(PokemonStruct1 *pokemon) pokemon->offense.def[0] = GetBaseDefensiveStat(pokemon->speciesNum, 0); pokemon->offense.def[1] = GetBaseDefensiveStat(pokemon->speciesNum, 1); pokemon->currExp = 0; - pokemon->tacticIndex = 0; + pokemon->tacticIndex = TACTIC_LETS_GO_TOGETHER; pokemon->IQ = 1; SetDefaultIQSkills(&pokemon->IQSkills, FALSE); sub_808E490(pokemon->moves, pokemon->speciesNum); } -struct unkStruct_808D144 -{ - /* 0x0 */ u8 *name; - /* 0x4 */ s16 speciesNum; - /* 0x6 */ u8 itemID; - /* 0x8 */ struct DungeonLocation dungeonLocation; - /* 0xC */ u16 moveID[MAX_MON_MOVES]; - /* 0x14 */ s16 pokeHP; - /* 0x16 */ u16 level; - /* 0x18 */ u16 IQ; - s16 offense[4]; // atk, spatt, def, spdef (not sure why s16/u16 and not u8) - /* 0x24 */ u32 currExp; -}; - void sub_808D144(PokemonStruct1 *pokemon, struct unkStruct_808D144 *r1) { s32 i; @@ -239,14 +226,14 @@ void sub_808D144(PokemonStruct1 *pokemon, struct unkStruct_808D144 *r1) pokemon->isTeamLeader = FALSE; pokemon->level = r1->level; pokemon->pokeHP = r1->pokeHP; - pokemon->offense.att[0] = r1->offense[0]; - pokemon->offense.att[1] = r1->offense[1]; - pokemon->offense.def[0] = r1->offense[2]; - pokemon->offense.def[1] = r1->offense[3]; + pokemon->offense.att[0] = r1->offenseAtk[0]; + pokemon->offense.att[1] = r1->offenseAtk[1]; + pokemon->offense.def[0] = r1->offenseDef[0]; + pokemon->offense.def[1] = r1->offenseDef[1]; pokemon->speciesNum = r1->speciesNum; xxx_init_helditem_8090B08(&pokemon->heldItem, r1->itemID); pokemon->currExp = r1->currExp; - pokemon->tacticIndex = 0; + pokemon->tacticIndex = TACTIC_LETS_GO_TOGETHER; pokemon->IQ = r1->IQ; pokemon->dungeonLocation = r1->dungeonLocation; pokemon->unkC[0].level = 0; From 9d52f4e464e67fd6d316dc03c1d41c9c22fd4597 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 Jan 2025 08:21:09 -0800 Subject: [PATCH 18/27] address review comments --- src/code_8069D4C.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/code_8069D4C.c b/src/code_8069D4C.c index a43475ce8..858770282 100644 --- a/src/code_8069D4C.c +++ b/src/code_8069D4C.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/status.h" #include "code_806CD90.h" #include "code_8077274_1.h" #include "dungeon_ai_targeting.h" @@ -31,10 +32,10 @@ void sub_80694C0(Entity *target,s32 x,int y,char param_4) tile = GetTileMut(x,y); info = GetEntInfo(target); - if ((u8)((info->frozenClassStatus).status - 3) < 2) { + if (info->frozenClassStatus.status == STATUS_WRAP || info->frozenClassStatus.status == STATUS_WRAPPED) { sub_8076CB4(info->unk9C); } - if ((((info->frozenClassStatus).status == 7) || ((info->frozenClassStatus).status == 5)) || ((info->frozenClassStatus).status == 2)) { + if (info->frozenClassStatus.status == STATUS_CONSTRICTION || info->frozenClassStatus.status == STATUS_INGRAIN || info->frozenClassStatus.status == STATUS_SHADOW_HOLD) { EndFrozenClassStatus(target,target); } if ((x != (target->pos).x) || (y != (target->pos).y)) { @@ -89,7 +90,7 @@ void sub_80695EC(Entity *param_1,int x,int y) EntityInfo *info; info = GetEntInfo(param_1); - if ((u8)((info->frozenClassStatus).status - 3) < 2) { + if (info->frozenClassStatus.status == STATUS_WRAP || info->frozenClassStatus.status == STATUS_WRAPPED) { sub_8076CB4(info->unk9C); } if ((x != (param_1->pos).x) || (y != (param_1->pos).y)) { From 246644cd6521f215927d73597947bfac95d967ee Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 27 Jan 2025 09:18:54 -0800 Subject: [PATCH 19/27] Add funcs matched by @Kermalis --- asm/event_flag.s | 217 ----------------------------------------- include/code_80972F4.h | 2 +- include/event_flag.h | 2 +- src/code_80972F4.c | 18 ++-- src/event_flag.c | 118 ++++++++++++++++++++++ 5 files changed, 129 insertions(+), 228 deletions(-) diff --git a/asm/event_flag.s b/asm/event_flag.s index 04365908c..2c00aefdd 100644 --- a/asm/event_flag.s +++ b/asm/event_flag.s @@ -444,221 +444,4 @@ _080018CE: bx r1 thumb_func_end GetScriptVarArrayValue - thumb_func_start SetScriptVarValue -SetScriptVarValue: - push {r4,r5,lr} - sub sp, 0x8 - adds r3, r0, 0 - adds r4, r2, 0 - lsls r1, 16 - asrs r5, r1, 16 - mov r0, sp - adds r1, r3, 0 - adds r2, r5, 0 - bl GetScriptVarRef - ldr r0, [sp] - ldrh r0, [r0] - subs r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - bhi _08001990 - lsls r0, 2 - ldr r1, _08001908 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08001908: .4byte _0800190C - .align 2, 0 -_0800190C: - .4byte _0800192C - .4byte _08001958 - .4byte _08001958 - .4byte _0800195E - .4byte _0800195E - .4byte _08001964 - .4byte _08001958 - .4byte _08001968 -_0800192C: - ldr r0, [sp] - movs r2, 0x6 - ldrsh r1, [r0, r2] - movs r0, 0x80 - lsls r0, 17 - lsls r0, r1 - lsrs r3, r0, 24 - cmp r4, 0 - beq _0800194A - ldr r2, [sp, 0x4] - ldrb r1, [r2] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2] - b _08001990 -_0800194A: - ldr r2, [sp, 0x4] - ldrb r1, [r2] - adds r0, r3, 0 - orrs r0, r1 - eors r0, r3 - strb r0, [r2] - b _08001990 -_08001958: - ldr r0, [sp, 0x4] - strb r4, [r0] - b _08001990 -_0800195E: - ldr r0, [sp, 0x4] - strh r4, [r0] - b _08001990 -_08001964: - ldr r0, [sp, 0x4] - b _0800198E -_08001968: - cmp r5, 0x22 - beq _08001972 - cmp r5, 0x23 - beq _08001984 - b _08001990 -_08001972: - ldr r0, _08001980 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - b _0800198E - .align 2, 0 -_08001980: .4byte gTeamInventoryRef -_08001984: - ldr r0, _08001998 - ldr r0, [r0] - movs r2, 0x99 - lsls r2, 2 - adds r0, r2 -_0800198E: - str r4, [r0] -_08001990: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08001998: .4byte gTeamInventoryRef - thumb_func_end SetScriptVarValue - - thumb_func_start SetScriptVarArrayValue -SetScriptVarArrayValue: - push {r4-r7,lr} - sub sp, 0x8 - adds r4, r0, 0 - adds r6, r3, 0 - lsls r1, 16 - asrs r7, r1, 16 - lsls r2, 16 - lsrs r5, r2, 16 - mov r0, sp - adds r1, r4, 0 - adds r2, r7, 0 - bl GetScriptVarRef - ldr r0, [sp] - ldrh r0, [r0] - subs r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - bhi _08001A68 - lsls r0, 2 - ldr r1, _080019D0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080019D0: .4byte _080019D4 - .align 2, 0 -_080019D4: - .4byte _080019F4 - .4byte _08001A2C - .4byte _08001A2C - .4byte _08001A34 - .4byte _08001A34 - .4byte _08001A3E - .4byte _08001A2C - .4byte _08001A44 -_080019F4: - ldr r0, [sp] - ldrh r0, [r0, 0x6] - adds r0, r5, r0 - lsls r0, 16 - lsrs r2, r0, 19 - ldr r1, [sp, 0x4] - adds r3, r1, r2 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 16 - movs r0, 0x80 - lsls r0, 17 - lsls r0, r1 - lsrs r2, r0, 24 - cmp r6, 0 - beq _08001A20 - ldrb r1, [r3] - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r3] - b _08001A68 -_08001A20: - ldrb r1, [r3] - adds r0, r2, 0 - orrs r0, r1 - eors r0, r2 - strb r0, [r3] - b _08001A68 -_08001A2C: - ldr r0, [sp, 0x4] - adds r0, r5 - strb r6, [r0] - b _08001A68 -_08001A34: - ldr r1, [sp, 0x4] - lsls r0, r5, 1 - adds r0, r1 - strh r6, [r0] - b _08001A68 -_08001A3E: - ldr r1, [sp, 0x4] - lsls r0, r5, 2 - b _08001A64 -_08001A44: - cmp r7, 0x22 - beq _08001A4E - cmp r7, 0x23 - beq _08001A5C - b _08001A68 -_08001A4E: - ldr r0, _08001A58 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - b _08001A64 - .align 2, 0 -_08001A58: .4byte gTeamInventoryRef -_08001A5C: - ldr r0, _08001A70 - ldr r0, [r0] - movs r1, 0x99 - lsls r1, 2 -_08001A64: - adds r0, r1 - str r6, [r0] -_08001A68: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08001A70: .4byte gTeamInventoryRef - thumb_func_end SetScriptVarArrayValue - .align 2, 0 @ Don't pad with nop. diff --git a/include/code_80972F4.h b/include/code_80972F4.h index b5bd91141..043757bc4 100644 --- a/include/code_80972F4.h +++ b/include/code_80972F4.h @@ -17,7 +17,7 @@ const u8 *GetCurrentMissionText(s16 index); bool8 IsMazeCompleted(s16 mazeIndex); bool8 sub_8096F50(WonderMail *mail); -void sub_8097418(s16 index, bool32); +void sub_8097418(s32 index, bool32); bool8 sub_8097504(s16 mazeIndex); const u8 *sub_80975DC(s16); diff --git a/include/event_flag.h b/include/event_flag.h index 2c83e6918..ccd86f097 100644 --- a/include/event_flag.h +++ b/include/event_flag.h @@ -146,7 +146,7 @@ void GetScriptVarRef(struct ScriptVarPtr *out, u8 *localVarBuf, s32 varId); s32 GetScriptVarValue(u8 *localVarBuf, s32 varId); s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx); void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val); -void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx, s32 val); +void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx, s32 val); s32 GetScriptVarArraySum(u8 *localVarBuf, s16 varId); void GetScriptVarScenario(s32 varId,u32 *outMain,u32 *outSub); void ScenarioCalc(s16 varId, s32 main, s32 sub); diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 7868e734c..c6d803999 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -1,8 +1,8 @@ #include "global.h" #include "globaldata.h" #include "dungeon.h" -#include "exclusive_pokemon.h" #include "event_flag.h" +#include "exclusive_pokemon.h" #include "code_80A26CC.h" #include "code_80972F4.h" @@ -85,21 +85,21 @@ bool32 sub_8097384(s16 param_1) return val; } -void sub_80973A8(s16 param_1,u32 param_2) +void sub_80973A8(s32 param_1,u32 param_2) { s32 sVar1; - s32 param_1_s32 = param_1; + s32 param_1_s32 = (s16)param_1; u8 param_2_u32 = param_2; if (param_1_s32 != 0xd) { if (param_2_u32 != 0) { sVar1 = sub_80A26B8(param_1); - SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST,param_1_s32,0); + SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_ORDER_LIST,(u16)param_1_s32,0); if (sVar1 != -1) { SetScriptVarValue(NULL,DUNGEON_SELECT,sVar1); } } - SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,param_1_s32,param_2_u32); + SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,(u16)param_1_s32,param_2_u32); } } @@ -120,12 +120,12 @@ bool32 RescueScenarioConquered(s16 param_1) return val; } -void sub_8097418(s16 index,bool32 param_2) +void sub_8097418(s32 index,bool32 param_2) { - int index_s32 = index; + int index_s32 = (s16)index; bool8 param_2_u8 = param_2; if (index_s32 != 0xd) { - if ((param_2_u8) && (SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,index_s32,0), index_s32 < 0x1f)) { + if ((param_2_u8) && (SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_JOB_LIST,(u16)index_s32,0), index_s32 < 0x1f)) { const MissionText *mt = &sStoryMissionText[index_s32]; if (mt->unk4 != 0xFF) { sub_8097FA8(mt->unk4); @@ -138,7 +138,7 @@ void sub_8097418(s16 index,bool32 param_2) } sub_8097FF8(); } - SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_CONQUEST_LIST,index_s32,param_2_u8); + SetScriptVarArrayValue(NULL,RESCUE_SCENARIO_CONQUEST_LIST,(u16)index_s32,param_2_u8); } } diff --git a/src/event_flag.c b/src/event_flag.c index 1754f72b5..228f8bbc5 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -52,6 +52,124 @@ extern void sub_80973A8(u32, u32); // code_80972F4.h (read comment) extern bool8 RescueScenarioConquered(s16); +void SetScriptVarValue(u8 *localVarBuf, s32 varId_, s32 val) +{ + s32 varID; + struct ScriptVarPtr sp; + + varID = (s16)varId_; + GetScriptVarRef(&sp, localVarBuf, varID); + + switch (sp.info->type) { + case 1: { + u8 bVar1 = 1 << sp.info->bitOffset; + + if (val != 0) + *sp.ptr |= bVar1; + else + *sp.ptr = (bVar1 | *sp.ptr) ^ bVar1; + break; + } + case 2: { + *((s8 *)sp.ptr) = val; + break; + } + case 3: { + *((u8 *)sp.ptr) = val; + break; + } + case 7: { + *((bool8 *)sp.ptr) = val; + break; + } + case 4: { + *((s16 *)sp.ptr) = val; + break; + } + case 5: { + *((u16 *)sp.ptr) = val; + break; + } + case 6: { + *((s32 *)sp.ptr) = val; + break; + } + case 8: { + switch (varID) { + case 0x22: { + gTeamInventoryRef->teamMoney = val; + break; + } + case 0x23: { + gTeamInventoryRef->teamSavings = val; + break; + } + } + } + } +} + +void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId_, s32 idx_, s32 val) +{ + s32 varID; + struct ScriptVarPtr sp; + s32 idx; + + varID = (s16)varId_; + idx = (u16)idx_; + GetScriptVarRef(&sp, localVarBuf, varID); + + switch (sp.info->type) { + case 1: { + s32 bitOffset = (u16)sp.info->bitOffset; + u16 flagNum = idx + bitOffset; + u8 *a = &sp.ptr[flagNum / 8]; + u8 bVar1 = 1 << (flagNum % 8); + if (val != 0) + *a |= bVar1; + else + *a = (bVar1 | *a) ^ bVar1; + break; + } + case 2: { + ((s8 *)sp.ptr)[idx] = val; + break; + } + case 3: { + ((u8 *)sp.ptr)[idx] = val; + break; + } + case 7: { + ((bool8 *)sp.ptr)[idx] = val; + break; + } + case 4: { + ((s16 *)sp.ptr)[idx] = val; + break; + } + case 5: { + ((u16 *)sp.ptr)[idx] = val; + break; + } + case 6: { + ((s32 *)sp.ptr)[idx] = val; + break; + } + case 8: { + switch (varID) { + case 0x22: { + gTeamInventoryRef->teamMoney = val; + break; + } + case 0x23: { + gTeamInventoryRef->teamSavings = val; + break; + } + } + } + } +} + UNUSED u8 *GetScriptVarPointer(s16 varId) { struct ScriptVarPtr local_1c; From d79f2ab2f1fb4916e3d512e02756033748554437 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 28 Jan 2025 21:56:46 -0800 Subject: [PATCH 20/27] random passerby match of sub_8042520 --- asm/code_8041AD0.s | 172 ----------------------------------------- include/code_800DAC0.h | 3 +- src/code_8041AD0.c | 6 +- src/code_804267C.c | 52 +++++++++++++ src/code_8042B34.c | 6 +- src/code_8085E98.c | 6 +- src/code_80861A8.c | 6 +- 7 files changed, 69 insertions(+), 182 deletions(-) diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s index 237859968..edbf2181e 100644 --- a/asm/code_8041AD0.s +++ b/asm/code_8041AD0.s @@ -356,176 +356,4 @@ _08042518: bx r0 thumb_func_end sub_804245C -@ https://decomp.me/scratch/nTem0 (kermalis 89.31%) `s32 sub_8042520(Entity *)` - thumb_func_start sub_8042520 -sub_8042520: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - adds r4, r0, 0 - bl sub_8045888 - lsls r0, 24 - cmp r0, 0 - bne _0804253A - b _08042664 -_0804253A: - ldr r0, [r4, 0x70] - adds r0, 0x46 - ldrb r5, [r0] - ldr r0, [r4, 0xC] - cmp r0, 0 - bge _08042548 - adds r0, 0xFF -_08042548: - lsls r0, 8 - lsrs r0, 16 - ldr r1, _0804264C - ldr r2, [sp, 0x2C] - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x2C] - ldr r0, [r4, 0x10] - cmp r0, 0 - bge _0804255E - adds r0, 0xFF -_0804255E: - lsls r0, 8 - lsrs r0, 16 - lsls r0, 16 - ldr r1, _08042650 - ands r1, r2 - orrs r1, r0 - str r1, [sp, 0x2C] - asrs r1, 16 - ldr r0, _08042654 - ldr r0, [r0] - ldr r2, _08042658 - adds r0, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - subs r1, r0 - lsrs r0, r1, 31 - adds r1, r0 - asrs r7, r1, 1 - ldr r0, _0804265C - str r0, [sp, 0x4] - movs r2, 0 - str r2, [sp, 0x8] - str r5, [sp, 0xC] - add r1, sp, 0x4 - add r4, sp, 0x2C - ldrh r0, [r4] - strh r0, [r1, 0xC] - ldr r0, [sp, 0x2C] - asrs r0, 16 - strh r0, [r1, 0xE] - adds r0, r1, 0 - strh r2, [r0, 0x10] - strh r2, [r0, 0x12] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x18] - str r7, [sp, 0x1C] - add r0, sp, 0x20 - bl sub_8004E8C - add r0, sp, 0x4 - movs r1, 0 - bl sub_8041764 - adds r6, r0, 0 - mov r10, r4 - lsls r1, r5, 2 - mov r0, sp - adds r0, 0x30 - str r0, [sp, 0x38] - ldr r0, _08042660 - adds r5, r1, r0 - movs r1, 0x5 - mov r8, r1 - mov r9, r10 -_080425CC: - movs r0, 0 - str r0, [sp] - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0 - adds r3, r7, 0 - bl sub_800E8AC - movs r0, 0x42 - bl sub_803E46C - movs r2, 0 - ldrsh r0, [r5, r2] - lsls r0, 2 - mov r1, r9 - ldrh r1, [r1] - adds r0, r1 - mov r2, r9 - strh r0, [r2] - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r1, 2 - ldrh r0, [r4, 0x2] - adds r0, r1 - strh r0, [r4, 0x2] - movs r2, 0x2 - ldrsh r1, [r4, r2] - ldr r0, _08042654 - ldr r0, [r0] - ldr r2, _08042658 - adds r0, r2 - movs r2, 0 - ldrsh r0, [r0, r2] - subs r1, r0 - lsrs r0, r1, 31 - adds r1, r0 - asrs r7, r1, 1 - movs r0, 0x1 - negs r0, r0 - add r8, r0 - mov r1, r8 - cmp r1, 0 - bge _080425CC - bl sub_800DBBC - mov r2, r10 - movs r1, 0 - ldrsh r0, [r2, r1] - lsls r0, 8 - str r0, [sp, 0x30] - add r0, sp, 0x2C - movs r2, 0x2 - ldrsh r0, [r0, r2] - lsls r0, 8 - ldr r1, [sp, 0x38] - str r0, [r1, 0x4] - movs r1, 0xD0 - lsls r1, 1 - ldr r0, [sp, 0x38] - movs r2, 0x1 - bl sub_80416E0 - adds r6, r0, 0 - b _08042668 - .align 2, 0 -_0804264C: .4byte 0xffff0000 -_08042650: .4byte 0x0000ffff -_08042654: .4byte gDungeon -_08042658: .4byte 0x000181f2 -_0804265C: .4byte 0x00000165 -_08042660: .4byte gAdjacentTileOffsets -_08042664: - movs r6, 0x1 - negs r6, r6 -_08042668: - adds r0, r6, 0 - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8042520 - .align 2,0 diff --git a/include/code_800DAC0.h b/include/code_800DAC0.h index 1f7f2288e..eeecc5a0e 100644 --- a/include/code_800DAC0.h +++ b/include/code_800DAC0.h @@ -8,14 +8,13 @@ typedef struct unkStruct_80416E0 { s32 unk0; s32 unk4; - s32 unk8; + s32 dir; u16 x; u16 y; u16 unk10; u16 unk12; s32 unk14; u32 unk18; - unkStruct_2039DB0 unk1C; } unkStruct_80416E0; u32 sub_800E890(unkStruct_80416E0 *); diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index e1818434f..53be37e00 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -15,6 +15,7 @@ #include "dungeon_util.h" #include "items.h" #include "structs/dungeon_entity.h" +#include "structs/sprite_oam.h" #include "structs/str_dungeon.h" extern u32 gStatusSpriteMasks_SleepClassStatus[]; @@ -67,10 +68,11 @@ s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3) int counter; s32 ret; unkStruct_80416E0 auStack_10; + unkStruct_2039DB0 stack1C; auStack_10.unk0 = param_2; auStack_10.unk4 = 0; - auStack_10.unk8 = -1; + auStack_10.dir = -1; auStack_10.x = pos->x / 256; auStack_10.y = pos->y / 256; @@ -79,7 +81,7 @@ s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3) auStack_10.unk10 = 0; auStack_10.unk12 = 0; auStack_10.unk18 = 0xffff; - sub_8004E8C(&auStack_10.unk1C); + sub_8004E8C(&stack1C); ret = sub_8041764(&auStack_10, FALSE); if (param_3) { counter = 0; diff --git a/src/code_804267C.c b/src/code_804267C.c index 91b909f22..aa07c30fb 100644 --- a/src/code_804267C.c +++ b/src/code_804267C.c @@ -1,4 +1,5 @@ #include "global.h" +#include "code_800DAC0.h" #include "code_8041AD0.h" #include "code_804267C.h" #include "code_803E46C.h" @@ -30,6 +31,57 @@ extern bool8 sub_8042CC0(void); extern void sub_8042D7C(void); extern u8 GetFloorType(void); extern bool8 sub_8045888(Entity *); +extern s32 sub_80416E0(PixelPos*, u32, bool8); +u32 sub_8041764(unkStruct_80416E0 *, bool8); + +s32 sub_8042520(Entity *a0) +{ + s32 i; + s32 uVar4; + DungeonPos pos; + u32 dir; + s32 iVar8; + unkStruct_80416E0 local_58; + unkStruct_2039DB0 u203; // Unused + PixelPos local_2c; + + if (sub_8045888(a0)) { + dir = GetEntInfo(a0)->action.direction; + pos.x = a0->pixelPos.x / 0x100; + pos.y = a0->pixelPos.y / 0x100; + + iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2; + local_58.unk0 = 357; + local_58.unk4 = 0; + local_58.dir = dir; + local_58.x = pos.x; + local_58.y = pos.y; + local_58.unk10 = 0; + local_58.unk12 = 0; + local_58.unk14 = -1; + local_58.unk18 = iVar8; + sub_8004E8C(&u203); + uVar4 = sub_8041764(&local_58, 0); + + for (i = 0; i < 6; i++) { + sub_800E8AC(uVar4, &pos, 0, iVar8, 0); + sub_803E46C(66); + pos.x += gAdjacentTileOffsets[dir].x * 4; + pos.y += gAdjacentTileOffsets[dir].y * 4; + iVar8 = (pos.y - gDungeon->unk181e8.cameraPixelPos.y) / 2; + } + + sub_800DBBC(); + local_2c.x = pos.x * 0x100; + local_2c.y = pos.y * 0x100; + uVar4 = sub_80416E0(&local_2c, 416, TRUE); + } + else + { + uVar4 = -1; + } + return uVar4; +} // This func plays the appropriate ascend/descend SFX for stairs depending on the direction void PlayStairsSound(void) diff --git a/src/code_8042B34.c b/src/code_8042B34.c index e470c875c..c0491dc9e 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -2,6 +2,7 @@ #include "dungeon_util_1.h" #include "memory.h" #include "structs/rgb.h" +#include "structs/sprite_oam.h" #include "structs/str_dungeon_8042F6C.h" #include "code_803E46C.h" #include "code_800E9E4.h" @@ -80,6 +81,7 @@ extern const unkStruct_2039DB0 gUnknown_80F683C; void sub_8042B34(s32 a0, s32 a1, s32 a2) { unkStruct_80416E0 spStruct; + unkStruct_2039DB0 stack1C; s32 i; s32 r8 = 0; Entity *leader = xxx_call_GetLeader(); @@ -96,7 +98,7 @@ void sub_8042B34(s32 a0, s32 a1, s32 a2) spStruct.unk0 = gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk0; spStruct.unk4 = i; - spStruct.unk8 = 0; + spStruct.dir = 0; spStruct.x = leader->pixelPos.x / 256; spStruct.y = leader->pixelPos.y / 256; @@ -109,7 +111,7 @@ void sub_8042B34(s32 a0, s32 a1, s32 a2) spStruct.unk12 = sUnknown_203B414->unk8C[i].a2; spStruct.unk14 = 4; spStruct.unk18 = 0xFFFF; - spStruct.unk1C = gUnknown_80F683C; + stack1C = gUnknown_80F683C; sUnknown_203B414->unkC[i] = sub_800E890(&spStruct); r8++; diff --git a/src/code_8085E98.c b/src/code_8085E98.c index ee346b39f..e532a5d79 100644 --- a/src/code_8085E98.c +++ b/src/code_8085E98.c @@ -6,6 +6,7 @@ #include "items.h" #include "code_800DAC0.h" +#include "structs/sprite_oam.h" #include "structs/str_dungeon.h" extern const unkStruct_2039DB0 gUnknown_8107374; @@ -35,6 +36,7 @@ u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,DungeonPos *param_4, { u32 uVar1; unkStruct_80416E0 local_40; + unkStruct_2039DB0 stack1C; bool8 param_5_bool8; s32 param_1_s32 = param_1; @@ -47,13 +49,13 @@ u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,DungeonPos *param_4, sub_803E46C(0x46); local_40.unk0 = param_1; local_40.unk4 = param_2; - local_40.unk8 = param_3; + local_40.dir = param_3; local_40.x = param_4->x; local_40.y = param_4->y; local_40.unk10 = 0; local_40.unk12 = 0; local_40.unk18 = 0xffff; - local_40.unk1C = gUnknown_8107374; + stack1C = gUnknown_8107374; uVar1 = sub_800E890(&local_40); if (param_5_bool8) { diff --git a/src/code_80861A8.c b/src/code_80861A8.c index e0d050755..d360926f4 100644 --- a/src/code_80861A8.c +++ b/src/code_80861A8.c @@ -6,6 +6,7 @@ #include "code_806CD90.h" #include "dungeon_music.h" #include "dungeon_util.h" +#include "structs/sprite_oam.h" extern const unkStruct_2039DB0 gUnknown_8107380; @@ -80,6 +81,7 @@ s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3) s32 uStack_38; DungeonPos pos; unkStruct_80416E0 stack; + unkStruct_2039DB0 stack1C; #ifdef NONMATCHING s32 param_1_s32 = param_1; @@ -102,7 +104,7 @@ s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3) } stack.unk0 = param_1_s32; stack.unk4 = 0; - stack.unk8 = (u32)(info->action).direction; + stack.dir = (u32)(info->action).direction; stack.x = (param_2->pixelPos).x / 256; stack.y = (param_2->pixelPos).y / 256; @@ -110,7 +112,7 @@ s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3) stack.unk12 = pos.y; stack.unk14 = uStack_38; stack.unk18 = 0xffff; - stack.unk1C = gUnknown_8107380; + stack1C = gUnknown_8107380; uVar2 = sub_800E890(&stack); if (param_3_bool32 != '\0') { From e1b94d1642434a5b104acb22fcf9aa3435b71e6f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 29 Jan 2025 08:02:52 -0800 Subject: [PATCH 21/27] decomp sub_8042390 and sub_804245C --- asm/code_8041AD0.s | 197 --------------------------------------------- src/code_804267C.c | 65 ++++++++++++++- 2 files changed, 64 insertions(+), 198 deletions(-) diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s index edbf2181e..d45d8b6bd 100644 --- a/asm/code_8041AD0.s +++ b/asm/code_8041AD0.s @@ -159,201 +159,4 @@ _08042384: bx r0 thumb_func_end sub_804225C - thumb_func_start sub_8042390 -sub_8042390: - push {r4-r6,lr} - sub sp, 0x18 - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_8042768 - lsls r0, 24 - cmp r0, 0 - beq _08042454 - ldrb r1, [r4] - movs r0, 0x8 - ands r0, r1 - movs r6, 0 - cmp r0, 0 - bne _080423B0 - ldrb r6, [r4, 0x2] -_080423B0: - adds r0, r6, 0 - movs r1, 0 - bl sub_800EF40 - bl sub_800EF64 - movs r0, 0x4 - movs r1, 0x42 - bl sub_803E708 - ldr r0, [r5, 0xC] - cmp r0, 0 - bge _080423CC - adds r0, 0xFF -_080423CC: - lsls r0, 8 - lsrs r0, 16 - ldr r1, _08042428 - ldr r2, [sp, 0x14] - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x14] - ldr r0, [r5, 0x10] - cmp r0, 0 - bge _080423E2 - adds r0, 0xFF -_080423E2: - lsls r0, 8 - lsrs r0, 16 - lsls r0, 16 - ldr r4, _0804242C - ands r4, r2 - orrs r4, r0 - str r4, [sp, 0x14] - asrs r4, 16 - ldr r0, _08042430 - ldr r0, [r0] - ldr r1, _08042434 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - subs r4, r0 - lsrs r0, r4, 31 - adds r4, r0 - asrs r4, 1 - adds r4, 0x1 - adds r1, r5, 0 - adds r1, 0x28 - add r0, sp, 0x4 - bl sub_8005700 - add r1, sp, 0x14 - str r4, [sp] - adds r0, r6, 0 - add r2, sp, 0x4 - movs r3, 0 - bl sub_800E49C - adds r5, r0, 0 - movs r4, 0 - ldr r6, _08042438 - b _0804243E - .align 2, 0 -_08042428: .4byte 0xffff0000 -_0804242C: .4byte 0x0000ffff -_08042430: .4byte gDungeon -_08042434: .4byte 0x000181f2 -_08042438: .4byte 0x000003e7 -_0804243C: - adds r4, 0x1 -_0804243E: - cmp r4, r6 - bgt _08042454 - movs r0, 0x42 - bl sub_803E46C - adds r0, r5, 0 - bl sub_800E9A8 - lsls r0, 24 - cmp r0, 0 - bne _0804243C -_08042454: - add sp, 0x18 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8042390 - - thumb_func_start sub_804245C -sub_804245C: - push {r4-r6,lr} - sub sp, 0x18 - adds r5, r0, 0 - adds r4, r1, 0 - bl sub_8042768 - lsls r0, 24 - cmp r0, 0 - beq _08042518 - ldrb r1, [r4] - movs r0, 0x8 - ands r0, r1 - movs r6, 0 - cmp r0, 0 - bne _0804247C - ldrb r6, [r4, 0x2] -_0804247C: - bl sub_800EF64 - movs r0, 0x4 - movs r1, 0x42 - bl sub_803E708 - ldr r0, [r5, 0xC] - cmp r0, 0 - bge _08042490 - adds r0, 0xFF -_08042490: - lsls r0, 8 - lsrs r0, 16 - ldr r1, _080424EC - ldr r2, [sp, 0x14] - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x14] - ldr r0, [r5, 0x10] - cmp r0, 0 - bge _080424A6 - adds r0, 0xFF -_080424A6: - lsls r0, 8 - lsrs r0, 16 - lsls r0, 16 - ldr r4, _080424F0 - ands r4, r2 - orrs r4, r0 - str r4, [sp, 0x14] - asrs r4, 16 - ldr r0, _080424F4 - ldr r0, [r0] - ldr r1, _080424F8 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - subs r4, r0 - lsrs r0, r4, 31 - adds r4, r0 - asrs r4, 1 - adds r4, 0x1 - adds r1, r5, 0 - adds r1, 0x28 - add r0, sp, 0x4 - bl sub_8005700 - add r1, sp, 0x14 - str r4, [sp] - adds r0, r6, 0 - add r2, sp, 0x4 - movs r3, 0x1 - bl sub_800E49C - adds r5, r0, 0 - movs r4, 0 - ldr r6, _080424FC - b _08042502 - .align 2, 0 -_080424EC: .4byte 0xffff0000 -_080424F0: .4byte 0x0000ffff -_080424F4: .4byte gDungeon -_080424F8: .4byte 0x000181f2 -_080424FC: .4byte 0x000003e7 -_08042500: - adds r4, 0x1 -_08042502: - cmp r4, r6 - bgt _08042518 - movs r0, 0x42 - bl sub_803E46C - adds r0, r5, 0 - bl sub_800E9A8 - lsls r0, 24 - cmp r0, 0 - bne _08042500 -_08042518: - add sp, 0x18 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_804245C - .align 2,0 diff --git a/src/code_804267C.c b/src/code_804267C.c index aa07c30fb..aa73cb1e6 100644 --- a/src/code_804267C.c +++ b/src/code_804267C.c @@ -12,6 +12,7 @@ #include "dungeon_message.h" #include "dungeon_music.h" #include "dungeon_util.h" +#include "items.h" #include "structs/str_dungeon.h" extern const u16 gUnknown_80F67DC[4]; @@ -32,7 +33,69 @@ extern void sub_8042D7C(void); extern u8 GetFloorType(void); extern bool8 sub_8045888(Entity *); extern s32 sub_80416E0(PixelPos*, u32, bool8); -u32 sub_8041764(unkStruct_80416E0 *, bool8); +extern u32 sub_8041764(unkStruct_80416E0 *, bool8); +extern void sub_8005700(DungeonPos *a0, struct axObject *a1); +extern u32 sub_800E49C(); +extern void sub_800EF40(u8 r0, u8 r1); +extern void sub_800EF64(void); + +void sub_8042390(Entity *entity, Item *item) +{ + s32 sVar1; + s32 counter; + u8 id; + u32 uVar6; + DungeonPos asStack_24[4]; + DungeonPos local_14; + + if (sub_8042768(entity)) { + id = !ItemSticky(item) ? item->id : ITEM_NOTHING; + sub_800EF40(id, 0); + sub_800EF64(); + sub_803E708(4,0x42); + local_14.x = (entity->pixelPos).x / 256; + local_14.y = (entity->pixelPos).y / 256; + + sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1; + sub_8005700(asStack_24,&entity->axObj); + uVar6 = sub_800E49C(id,&local_14,asStack_24,0,sVar1); + for (counter = 0; counter < 1000; counter++) { + sub_803E46C(0x42); + if (!sub_800E9A8(uVar6)) { + break; + } + } + } +} + +void sub_804245C(Entity *entity, Item *item) +{ + s32 sVar1; + s32 counter; + u8 id; + u32 uVar6; + DungeonPos asStack_24[4]; + DungeonPos local_14; + + if (sub_8042768(entity)) { + id = !ItemSticky(item) ? item->id : ITEM_NOTHING; + sub_800EF64(); + sub_803E708(4,0x42); + local_14.x = (entity->pixelPos).x / 256; + local_14.y = (entity->pixelPos).y / 256; + + sVar1 = (local_14.y - gDungeon->unk181e8.cameraPixelPos.y) / 2 + 1; + sub_8005700(asStack_24,&entity->axObj); + uVar6 = sub_800E49C(id,&local_14,asStack_24,1,sVar1); + for (counter = 0; counter < 1000; counter++) { + sub_803E46C(0x42); + if (!sub_800E9A8(uVar6)) { + break; + } + } + } +} + s32 sub_8042520(Entity *a0) { From 92894a678e399f7d1f57268b775db2dd13148643 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 6 Feb 2025 22:18:46 -0800 Subject: [PATCH 22/27] 80% pog --- asm/code_800DAC0.s | 98 ------------------------------------------ include/code_800DAC0.h | 2 +- include/code_800E9A8.h | 4 +- src/code_800E9A8.c | 61 ++++++++++++++++++++++++++ src/code_8085E98.c | 2 +- 5 files changed, 66 insertions(+), 101 deletions(-) diff --git a/asm/code_800DAC0.s b/asm/code_800DAC0.s index 896200b15..abefb6a7a 100644 --- a/asm/code_800DAC0.s +++ b/asm/code_800DAC0.s @@ -1602,102 +1602,4 @@ _0800E8F8: .4byte gUnknown_203B0CC _0800E8FC: .4byte 0x0000ffff thumb_func_end sub_800E8AC - thumb_func_start sub_800E900 -sub_800E900: - push {lr} - bl sub_800ECA4 - ldr r0, [r0, 0x1C] - pop {r1} - bx r1 - thumb_func_end sub_800E900 - - thumb_func_start sub_800E90C -sub_800E90C: - push {r4-r7,lr} - adds r5, r0, 0 - movs r7, 0 - ldr r0, _0800E938 - ldr r4, [r0] - movs r6, 0x1F -_0800E918: - ldr r1, [r4, 0x4] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0800E960 - ldr r0, [r4, 0x10] - cmp r0, 0 - bgt _0800E94A - ldr r0, [r4, 0x34] - cmp r0, 0x4 - bne _0800E93C - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_800DE8C - b _0800E944 - .align 2, 0 -_0800E938: .4byte gUnknown_203B0CC -_0800E93C: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_800DD0C -_0800E944: - ldr r0, [r4, 0x10] - cmp r0, 0 - ble _0800E94E -_0800E94A: - subs r0, 0x1 - str r0, [r4, 0x10] -_0800E94E: - adds r0, r4, 0 - bl sub_800DCD0 - adds r0, r4, 0 - adds r0, 0x54 - ldrb r0, [r0] - cmp r0, 0 - bne _0800E960 - movs r7, 0x1 -_0800E960: - subs r6, 0x1 - adds r4, 0xD0 - cmp r6, 0 - bge _0800E918 - adds r0, r7, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_800E90C - - thumb_func_start sub_800E970 -sub_800E970: - push {r4,r5,lr} - ldr r0, _0800E9A4 - ldr r4, [r0] - movs r5, 0x1F -_0800E978: - ldr r1, [r4, 0x4] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0800E994 - ldr r0, [r4, 0x10] - cmp r0, 0 - bgt _0800E994 - ldr r0, [r4, 0x34] - cmp r0, 0x4 - beq _0800E994 - adds r0, r4, 0 - bl sub_800DE38 -_0800E994: - subs r5, 0x1 - adds r4, 0xD0 - cmp r5, 0 - bge _0800E978 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0800E9A4: .4byte gUnknown_203B0CC - thumb_func_end sub_800E970 - .align 2,0 diff --git a/include/code_800DAC0.h b/include/code_800DAC0.h index eeecc5a0e..116d4dde5 100644 --- a/include/code_800DAC0.h +++ b/include/code_800DAC0.h @@ -24,7 +24,7 @@ bool8 sub_800E9A8(s32); void sub_800DAC0(u32); void sub_800DB7C(void); void sub_800DBBC(void); -void sub_800E90C(DungeonPos *); +bool8 sub_800E90C(DungeonPos *); void sub_800E8AC(s32 a0, void *a1, void *a2, s32 a3, void *a4); // a2 could be DungeonPos #endif // GUARD_CODE_800DAC0_H diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index dca862fd6..315140bee 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -13,7 +13,9 @@ struct unkStruct_203B0CC_sub u32 unk0; s32 unk4; s32 unk8; - u8 fillc[0x18 - 0x0c]; + s32 unkC; + s32 unk10; + s32 unk14; s32 unk18; unkStruct_800EAE4 unk1c; s32 unk20; diff --git a/src/code_800E9A8.c b/src/code_800E9A8.c index 4a974ebd7..ed822bf44 100644 --- a/src/code_800E9A8.c +++ b/src/code_800E9A8.c @@ -1,11 +1,72 @@ #include "global.h" +#include "code_800DAC0.h" #include "code_800E9A8.h" #include "code_800E9E4.h" +#include "structs/str_position.h" s32 sub_800E2C0(u32); struct unkStruct_203B0CC *gUnknown_203B0CC; +void sub_800DE38(struct unkStruct_203B0CC_sub *); +void sub_800DE8C(struct unkStruct_203B0CC_sub *, DungeonPos *); +void sub_800DD0C(struct unkStruct_203B0CC_sub *, DungeonPos *); +void sub_800DCD0(struct unkStruct_203B0CC_sub *); + +s32 sub_800E900(s32 r0) +{ + return sub_800ECA4(r0)->unk1c; +} + +bool8 sub_800E90C(DungeonPos *param_1) +{ + bool8 flag; + s32 iVar1; + struct unkStruct_203B0CC_sub *ptr; + + flag = FALSE; + + for(iVar1 = 0, ptr = &gUnknown_203B0CC->unk0[iVar1]; iVar1 < 0x20; iVar1++, ptr++) + { + if(ptr->unk4 != -1) + { + if(ptr->unk10 <= 0) + { + if(ptr->unk34 == 4) + { + sub_800DE8C(ptr, param_1); + } + else + { + sub_800DD0C(ptr, param_1); + } + + } + if(ptr->unk10 > 0) + ptr->unk10--; + sub_800DCD0(ptr); + if(ptr->unk54 == 0) + flag = TRUE; + } + } + + return flag; +} + +void sub_800E970(void) +{ + s32 iVar1; + struct unkStruct_203B0CC_sub *ptr; + + for(iVar1 = 0, ptr = &gUnknown_203B0CC->unk0[iVar1]; iVar1 < 0x20; iVar1++, ptr++) + { + if(ptr->unk4 != -1) + if(ptr->unk10 <= 0) + if(ptr->unk34 != 4) + sub_800DE38(ptr); + } +} + bool8 sub_800E9A8(s32 a0) { s32 i; diff --git a/src/code_8085E98.c b/src/code_8085E98.c index e532a5d79..1a1d2db91 100644 --- a/src/code_8085E98.c +++ b/src/code_8085E98.c @@ -15,7 +15,7 @@ extern const unkStruct_2039DB0 gUnknown_8107374; void sub_800EF64(void); void sub_800EE5C(s32); void sub_8085F44(s32); -void sub_800E90C(DungeonPos *); +bool8 sub_800E90C(DungeonPos *); void sub_8088EE8(void); void sub_8088848(void); void sub_808A718(void); From 29df447bad3801b2662fcc83aa6bb76518826d3c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Thu, 6 Feb 2025 22:36:43 -0800 Subject: [PATCH 23/27] small cleanup based on WIP func --- include/code_800E9A8.h | 8 ++------ src/code_800E9E4.c | 18 +++++++++--------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index 315140bee..f9698bcad 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -1,11 +1,7 @@ #ifndef GUARD_CODE_800E9A8_H #define GUARD_CODE_800E9A8_H -typedef struct unkStruct_800EAE4 -{ - s16 unk0; - s16 unk2; -} unkStruct_800EAE4; +#include "structs/str_position.h" struct unkStruct_203B0CC_sub { @@ -17,7 +13,7 @@ struct unkStruct_203B0CC_sub s32 unk10; s32 unk14; s32 unk18; - unkStruct_800EAE4 unk1c; + DungeonPos unk1c; s32 unk20; s32 unk24; u8 fill28[0x32 - 0x28]; diff --git a/src/code_800E9E4.c b/src/code_800E9E4.c index d6a159f54..0bc0bd301 100644 --- a/src/code_800E9E4.c +++ b/src/code_800E9E4.c @@ -101,7 +101,7 @@ s32 sub_800EA84(s32 *param_1) return sub_800E208(5, &stack[0]); } -void sub_800EAE4(s32 param_1, s32 *param_2, unkStruct_800EAE4 *param_3) +void sub_800EAE4(s32 param_1, s32 *param_2, DungeonPos *param_3) { s32 idx = sub_800E2C0(param_1); if (idx != -1) @@ -115,13 +115,13 @@ void sub_800EAE4(s32 param_1, s32 *param_2, unkStruct_800EAE4 *param_3) } else { - a->unk1c.unk0 = 0; - a->unk1c.unk2 = 0; + a->unk1c.x = 0; + a->unk1c.y = 0; } } } -void sub_800EB24(s32 param_1, s32 *param_2, unkStruct_800EAE4 *param_3, s32 r5, s32 r4) +void sub_800EB24(s32 param_1, s32 *param_2, DungeonPos *param_3, s32 r5, s32 r4) { s32 idx = sub_800E2C0(param_1); if (idx != -1) { @@ -147,8 +147,8 @@ void sub_800EB24(s32 param_1, s32 *param_2, unkStruct_800EAE4 *param_3, s32 r5, curStruct->unk1c = *param_3; } else { - curStruct->unk1c.unk0 = 0; - curStruct->unk1c.unk2 = 0; + curStruct->unk1c.x = 0; + curStruct->unk1c.y = 0; } } } @@ -182,7 +182,7 @@ s32 sub_800EBC8(s32 *param_1) return sub_800E208(6, &stack[0]); } -void sub_800EC28(u32 param_1, s32 *param_2, unkStruct_800EAE4 *param_3) +void sub_800EC28(u32 param_1, s32 *param_2, DungeonPos *param_3) { s32 idx; idx = sub_800E2C0(param_1); @@ -197,8 +197,8 @@ void sub_800EC28(u32 param_1, s32 *param_2, unkStruct_800EAE4 *param_3) } else { - struct203B0CC->unk1c.unk0 = 0; - struct203B0CC->unk1c.unk2 = 0; + struct203B0CC->unk1c.x = 0; + struct203B0CC->unk1c.y = 0; } } } From 151821a0774ef833803b2bf04b72082e04f45863 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 7 Feb 2025 17:37:53 -0800 Subject: [PATCH 24/27] decomp a few more funcs --- asm/code_800DAC0.s | 161 --------------------------------- include/code_800DAC0.h | 3 +- include/code_800E9A8.h | 11 ++- include/structs/code_800E9E4.h | 37 ++++++++ src/code_800E9A8.c | 59 ++++++++++++ src/code_800E9E4.c | 42 ++------- src/code_8042B34.c | 24 ++--- 7 files changed, 123 insertions(+), 214 deletions(-) create mode 100644 include/structs/code_800E9E4.h diff --git a/asm/code_800DAC0.s b/asm/code_800DAC0.s index abefb6a7a..45ff12808 100644 --- a/asm/code_800DAC0.s +++ b/asm/code_800DAC0.s @@ -1441,165 +1441,4 @@ _0800E7CA: bx r1 thumb_func_end sub_800E790 - thumb_func_start sub_800E7D0 -sub_800E7D0: - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - movs r6, 0 - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0 - ldrsh r0, [r0, r1] - str r0, [sp] - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0x2 - ldrsh r0, [r0, r1] - str r0, [sp, 0x4] - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0x4 - ldrsh r0, [r0, r1] - str r0, [sp, 0x8] - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0x6 - ldrsh r0, [r0, r1] - str r0, [sp, 0xC] - movs r5, 0 - mov r4, sp - b _0800E812 -_0800E80E: - adds r4, 0x4 - adds r5, 0x1 -_0800E812: - cmp r5, 0x3 - bgt _0800E82C - ldr r0, [r4] - bl sub_800ECA4 - movs r1, 0 - ldr r0, [r0] - cmp r0, 0x4 - bne _0800E826 - movs r1, 0x1 -_0800E826: - adds r6, r1, 0 - cmp r6, 0 - beq _0800E80E -_0800E82C: - adds r0, r6, 0 - add sp, 0x10 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_800E7D0 - - thumb_func_start sub_800E838 -sub_800E838: - push {r4,r5,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r1, 0 - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0 - ldrsh r0, [r0, r1] - str r0, [sp] - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0x2 - ldrsh r0, [r0, r1] - str r0, [sp, 0x4] - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0x4 - ldrsh r0, [r0, r1] - str r0, [sp, 0x8] - ldrh r0, [r4] - bl sub_800ECB8 - movs r1, 0x6 - ldrsh r0, [r0, r1] - str r0, [sp, 0xC] - lsls r5, 2 - mov r1, sp - adds r0, r1, r5 - ldr r0, [r0] - bl sub_800ECA4 - movs r1, 0 - ldr r0, [r0] - cmp r0, 0x4 - bne _0800E886 - movs r1, 0x1 -_0800E886: - adds r0, r1, 0 - add sp, 0x10 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_800E838 - - thumb_func_start sub_800E890 -sub_800E890: - push {r4,lr} - adds r4, r0, 0 - ldr r0, [r4] - bl sub_800E900 - str r0, [r4, 0x14] - movs r0, 0x7 - adds r1, r4, 0 - bl sub_800E208 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_800E890 - - thumb_func_start sub_800E8AC -sub_800E8AC: - push {r4-r7,lr} - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - ldr r7, [sp, 0x14] - bl sub_800E2C0 - adds r1, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0800E8F2 - ldr r2, _0800E8F8 - movs r0, 0xD0 - muls r1, r0 - ldr r0, [r2] - adds r1, r0, r1 - cmp r4, 0 - beq _0800E8D6 - ldr r0, [r4] - str r0, [r1, 0x18] -_0800E8D6: - cmp r5, 0 - beq _0800E8DE - ldr r0, [r5] - str r0, [r1, 0x1C] -_0800E8DE: - ldr r0, _0800E8FC - cmp r6, r0 - beq _0800E8E6 - str r6, [r1, 0x24] -_0800E8E6: - cmp r7, 0 - beq _0800E8F2 - adds r1, 0x28 - adds r0, r7, 0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} -_0800E8F2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0800E8F8: .4byte gUnknown_203B0CC -_0800E8FC: .4byte 0x0000ffff - thumb_func_end sub_800E8AC - .align 2,0 diff --git a/include/code_800DAC0.h b/include/code_800DAC0.h index 116d4dde5..458e27470 100644 --- a/include/code_800DAC0.h +++ b/include/code_800DAC0.h @@ -3,6 +3,7 @@ #include "structs/sprite_oam.h" #include "structs/str_position.h" +#include "code_800E9A8.h" typedef struct unkStruct_80416E0 { @@ -25,6 +26,6 @@ void sub_800DAC0(u32); void sub_800DB7C(void); void sub_800DBBC(void); bool8 sub_800E90C(DungeonPos *); -void sub_800E8AC(s32 a0, void *a1, void *a2, s32 a3, void *a4); // a2 could be DungeonPos +void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruct_203B0CC_sub_2 *a4); #endif // GUARD_CODE_800DAC0_H diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index f9698bcad..5fb569545 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -3,6 +3,13 @@ #include "structs/str_position.h" +struct unkStruct_203B0CC_sub_2 +{ + u32 unk0; + u32 unk4; + u32 unk8; +}; + struct unkStruct_203B0CC_sub { // size: 0xD0 @@ -12,11 +19,11 @@ struct unkStruct_203B0CC_sub s32 unkC; s32 unk10; s32 unk14; - s32 unk18; + DungeonPos unk18; DungeonPos unk1c; s32 unk20; s32 unk24; - u8 fill28[0x32 - 0x28]; + struct unkStruct_203B0CC_sub_2 unk28; u32 unk34; u32 effectID; u8 fill3C[0x4C - 0x3C]; diff --git a/include/structs/code_800E9E4.h b/include/structs/code_800E9E4.h new file mode 100644 index 000000000..d3f594b11 --- /dev/null +++ b/include/structs/code_800E9E4.h @@ -0,0 +1,37 @@ +#ifndef GUARD_STRUCTS_CODE_800E9E4_H +#define GUARD_STRUCTS_CODE_800E9E4_H + +typedef struct unkStruct_80B9C60 +{ + s32 unk0; + s32 unk1; + s32 unk2; +} unkStruct_80B9C60; + +typedef struct unkStruct_80CE37C +{ + s16 unk0; + s16 unk2; +} unkStruct_80CE37C; + +typedef struct unkStruct_80C183C +{ + // size: 0xc + s16 unk0; + s16 unk2; + u8 fill4[0xc - 0x4]; +} unkStruct_80C183C; + +typedef struct unkStruct_800EA44 +{ + s16 unk0; + s16 unk2; +} unkStruct_800EA44; + +typedef struct unkStruct_800E208 +{ + s32 unk00[7]; + unkStruct_80B9C60 unk1c; +} unkStruct_800E208; + +#endif diff --git a/src/code_800E9A8.c b/src/code_800E9A8.c index ed822bf44..9e83f7b3a 100644 --- a/src/code_800E9A8.c +++ b/src/code_800E9A8.c @@ -1,4 +1,5 @@ #include "global.h" +#include "structs/code_800E9E4.h" #include "code_800DAC0.h" #include "code_800E9A8.h" #include "code_800E9E4.h" @@ -13,6 +14,64 @@ void sub_800DE8C(struct unkStruct_203B0CC_sub *, DungeonPos *); void sub_800DD0C(struct unkStruct_203B0CC_sub *, DungeonPos *); void sub_800DCD0(struct unkStruct_203B0CC_sub *); +s32 sub_800E900(s32 r0); +s32 sub_800E208(s32, unkStruct_800E208*); + +bool8 sub_800E7D0(u16 *param_1) +{ + int local_1c [4]; + bool8 flag; + s32 index; + + flag = FALSE; + local_1c[0] = sub_800ECB8(*param_1)->unk0; + local_1c[1] = sub_800ECB8(*param_1)->unk2; + local_1c[2] = sub_800ECB8(*param_1)->unk4; + local_1c[3] = sub_800ECB8(*param_1)->unk6; + for(index = 0; index < 4; index++) + { + flag = (sub_800ECA4(local_1c[index])->animType == 4); + if(flag) break; + } + return flag; +} + +bool8 sub_800E838(u16 *param_1, s32 param_2) +{ + s32 local_1c [4]; + + local_1c[0] = sub_800ECB8(*param_1)->unk0; + local_1c[1] = sub_800ECB8(*param_1)->unk2; + local_1c[2] = sub_800ECB8(*param_1)->unk4; + local_1c[3] = sub_800ECB8(*param_1)->unk6; + return sub_800ECA4(local_1c[param_2])->animType == 4; +} + +// TODO: look at this later +// https://decomp.me/scratch/luz2f +u32 sub_800E890(unkStruct_80416E0 *param_1) +{ + param_1->unk14 = sub_800E900(param_1->unk0); + return sub_800E208(7, (void*)¶m_1->unk0); +} + +void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruct_203B0CC_sub_2 *a4) +{ + s32 index; + struct unkStruct_203B0CC_sub *ptr; + + index = sub_800E2C0(a0); + if(index != -1) + { + ptr = &gUnknown_203B0CC->unk0[index]; + + if(a1 != NULL) ptr->unk18 = *a1; + if(a2 != NULL) ptr->unk1c = *a2; + if(a3 != 0xFFFF) ptr->unk24 = a3; + if(a4 != NULL) ptr->unk28 = *a4; + } +} + s32 sub_800E900(s32 r0) { return sub_800ECA4(r0)->unk1c; diff --git a/src/code_800E9E4.c b/src/code_800E9E4.c index 0bc0bd301..d28e66948 100644 --- a/src/code_800E9E4.c +++ b/src/code_800E9E4.c @@ -1,4 +1,5 @@ #include "global.h" +#include "structs/code_800E9E4.h" #include "code_800E9E4.h" #include "code_800E9A8.h" @@ -9,44 +10,20 @@ s32 sub_800EC68(s32); struct unkStruct_203B0CC *gUnknown_203B0CC; -typedef struct unkStruct_80B9C60 -{ - s32 unk0; - s32 unk1; - s32 unk2; -} unkStruct_80B9C60; - extern unkStruct_80B9C60 gUnknown_80B9C60; extern s32 gUnknown_80B9C9C[8]; extern s16 gUnknown_80CE73C[20]; -typedef struct unkStruct_80CE37C -{ - s16 unk0; - s16 unk2; -} unkStruct_80CE37C; unkStruct_80CE37C gUnknown_80CE37C[1]; extern unkStruct_80BDBC4 gUnknown_80BDBC4[430]; extern unkStruct_80B9CC4 gUnknown_80B9CC4[448]; -typedef struct unkStruct_80C183C -{ - // size: 0xc - s16 unk0; - s16 unk2; - u8 fill4[0xc - 0x4]; -} unkStruct_80C183C; extern unkStruct_80C183C gUnknown_80C183C[4336]; unkStruct_80C183C *sub_800ECD0(s32 param_1); -typedef struct unkStruct_800EA44 -{ - s16 unk0; - s16 unk2; -} unkStruct_800EA44; u8 sub_800EA44(unkStruct_800EA44 param_1, s32 param_2) { @@ -70,11 +47,6 @@ u8 sub_800EA44(unkStruct_800EA44 param_1, s32 param_2) return ret->unk10; } -typedef struct unkStruct_800E208 -{ - s32 unk00[7]; - unkStruct_80B9C60 unk1c; -} unkStruct_800E208; s32 sub_800E208(s32, unkStruct_800E208*); @@ -101,14 +73,14 @@ s32 sub_800EA84(s32 *param_1) return sub_800E208(5, &stack[0]); } -void sub_800EAE4(s32 param_1, s32 *param_2, DungeonPos *param_3) +void sub_800EAE4(s32 param_1, DungeonPos *param_2, DungeonPos *param_3) { s32 idx = sub_800E2C0(param_1); if (idx != -1) { struct unkStruct_203B0CC_sub *a; a = &gUnknown_203B0CC->unk0[idx]; - a->unk18 = param_2[0]; + a->unk18 = *param_2; if (a->unk20 != -1) { a->unk1c = *param_3; @@ -121,14 +93,14 @@ void sub_800EAE4(s32 param_1, s32 *param_2, DungeonPos *param_3) } } -void sub_800EB24(s32 param_1, s32 *param_2, DungeonPos *param_3, s32 r5, s32 r4) +void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3, s32 r5, s32 r4) { s32 idx = sub_800E2C0(param_1); if (idx != -1) { struct unkStruct_203B0CC_sub *curStruct; curStruct = &gUnknown_203B0CC->unk0[idx]; if (curStruct->unkCC == 0) { - curStruct->unk18 = param_2[0]; + curStruct->unk18 = *param_2; } if (curStruct->unk0 == 6) { @@ -182,7 +154,7 @@ s32 sub_800EBC8(s32 *param_1) return sub_800E208(6, &stack[0]); } -void sub_800EC28(u32 param_1, s32 *param_2, DungeonPos *param_3) +void sub_800EC28(u32 param_1, DungeonPos *param_2, DungeonPos *param_3) { s32 idx; idx = sub_800E2C0(param_1); @@ -190,7 +162,7 @@ void sub_800EC28(u32 param_1, s32 *param_2, DungeonPos *param_3) { struct unkStruct_203B0CC_sub *struct203B0CC; struct203B0CC = &gUnknown_203B0CC->unk0[idx]; - struct203B0CC->unk18 = param_2[0]; + struct203B0CC->unk18 = *param_2; if (struct203B0CC->unk20 != -1) { struct203B0CC->unk1c = *param_3; diff --git a/src/code_8042B34.c b/src/code_8042B34.c index c0491dc9e..c8e3f8525 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -45,12 +45,6 @@ extern void sub_800EE5C(s32); extern void sub_800EF64(void); extern void sub_800F15C(s32); -struct Sub_UnkStruct_203B414 // Maybe DungeonPos? -{ - s16 a0; - s16 a2; -}; - struct UnkStruct_203B414 { s32 unk0; @@ -58,7 +52,7 @@ struct UnkStruct_203B414 s32 unk8; s32 unkC[16]; s32 unk4C[16]; - struct Sub_UnkStruct_203B414 unk8C[16]; + struct DungeonPos unk8C[16]; }; EWRAM_INIT DungeonPos gUnknown_203B410 = {100, 100}; @@ -104,11 +98,11 @@ void sub_8042B34(s32 a0, s32 a1, s32 a2) rnd = RandInt(2); sUnknown_203B414->unk4C[i] = (gUnknown_80F6624[sUnknown_203B414->unk0][r8].unk4 * 2) + rnd; - sUnknown_203B414->unk8C[i].a0 = RandInt(240) + 152; - sUnknown_203B414->unk8C[i].a2 = RandInt(8 + (i * 2)) - (((i - (i / 4 * 4)) * 40) - 24); + sUnknown_203B414->unk8C[i].x = RandInt(240) + 152; + sUnknown_203B414->unk8C[i].y = RandInt(8 + (i * 2)) - (((i - (i / 4 * 4)) * 40) - 24); - spStruct.unk10 = sUnknown_203B414->unk8C[i].a0; - spStruct.unk12 = sUnknown_203B414->unk8C[i].a2; + spStruct.unk10 = sUnknown_203B414->unk8C[i].x; + spStruct.unk12 = sUnknown_203B414->unk8C[i].y; spStruct.unk14 = 4; spStruct.unk18 = 0xFFFF; stack1C = gUnknown_80F683C; @@ -134,13 +128,13 @@ bool8 sub_8042CC0(void) } for (i = 0; i < sUnknown_203B414->unk8; i++) { - sUnknown_203B414->unk8C[i].a0 -= sUnknown_203B414->unk4C[i]; - if (sUnknown_203B414->unk8C[i].a0 <= -152) { + sUnknown_203B414->unk8C[i].x -= sUnknown_203B414->unk4C[i]; + if (sUnknown_203B414->unk8C[i].x <= -152) { if (sUnknown_203B414->unk4 > 0) { - sUnknown_203B414->unk8C[i].a0 = 152; + sUnknown_203B414->unk8C[i].x = 152; } else { - sUnknown_203B414->unk8C[i].a0 = -152; + sUnknown_203B414->unk8C[i].x = -152; } } else { From 782bca6cf39f5eda5ed01dd6d0a1889d1445d7f4 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sat, 8 Feb 2025 16:53:52 -0800 Subject: [PATCH 25/27] more decomp --- asm/code_8066D04.s | 169 ----------------------------------------- include/code_800DAC0.h | 3 +- include/code_800E9A8.h | 20 +++-- include/code_805D8C8.h | 3 + src/code_800E9A8.c | 4 +- src/code_800E9E4.c | 2 +- src/code_8042B34.c | 7 +- src/code_805D8C8.c | 50 +++++++++++- 8 files changed, 68 insertions(+), 190 deletions(-) diff --git a/asm/code_8066D04.s b/asm/code_8066D04.s index 4bbf2e6d6..d0bf5625e 100644 --- a/asm/code_8066D04.s +++ b/asm/code_8066D04.s @@ -2974,173 +2974,4 @@ _0806860C: .4byte 0x00000fff _08068610: .4byte 0x000001ff thumb_func_end sub_80684C4 - thumb_func_start sub_8068614 -sub_8068614: - push {lr} - ldr r0, _0806862C - ldr r1, _08068630 - bl OpenFileAndGetFileDataPtr - ldr r1, _08068634 - ldr r1, [r1] - ldr r2, _08068638 - adds r1, r2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0806862C: .4byte gUnknown_8106E98 -_08068630: .4byte gMonsterFileArchive -_08068634: .4byte gDungeon -_08068638: .4byte 0x000181e4 - thumb_func_end sub_8068614 - - thumb_func_start sub_806863C -sub_806863C: - push {lr} - ldr r0, _08068650 - ldr r0, [r0] - ldr r1, _08068654 - adds r0, r1 - ldr r0, [r0] - bl CloseFile - pop {r0} - bx r0 - .align 2, 0 -_08068650: .4byte gDungeon -_08068654: .4byte 0x000181e4 - thumb_func_end sub_806863C - - thumb_func_start LoadDungeonPokemonSprites -LoadDungeonPokemonSprites: - push {r4-r6,lr} - movs r4, 0 - ldr r6, _08068740 - ldr r5, _08068744 - ldr r3, _08068748 - movs r2, 0 -_08068664: - ldr r0, [r5] - lsls r1, r4, 2 - adds r0, r3 - adds r0, r1 - str r2, [r0] - adds r4, 0x1 - cmp r4, r6 - ble _08068664 - ldr r0, _0806874C - movs r1, 0x1 - bl LoadPokemonSprite - movs r4, 0 - ldr r1, _08068744 - ldr r0, [r1] - ldr r2, _08068750 - adds r0, r2 - ldr r0, [r0] - cmp r4, r0 - bge _080686B2 - adds r6, r1, 0 - ldr r5, _08068754 -_08068690: - ldr r0, [r6] - adds r0, r5 - bl ExtractSpeciesIndex - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - bl LoadPokemonSprite - adds r5, 0x8 - adds r4, 0x1 - ldr r0, [r6] - ldr r1, _08068750 - adds r0, r1 - ldr r0, [r0] - cmp r4, r0 - blt _08068690 -_080686B2: - ldr r0, _08068744 - ldr r0, [r0] - movs r2, 0xD1 - lsls r2, 3 - adds r1, r0, r2 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080686CA - movs r1, 0x1 - bl LoadPokemonSprite -_080686CA: - movs r4, 0 - ldr r6, _08068758 - movs r5, 0x1 -_080686D0: - movs r0, 0x64 - muls r0, r4 - ldr r1, _0806875C - adds r0, r1 - ldr r1, [r6] - adds r1, r0 - ldrh r2, [r1] - adds r0, r5, 0 - ands r0, r2 - cmp r0, 0 - beq _080686F8 - lsrs r0, r2, 1 - ands r0, r5 - cmp r0, 0 - beq _080686F8 - movs r2, 0xE - ldrsh r0, [r1, r2] - movs r1, 0 - bl LoadPokemonSprite -_080686F8: - adds r4, 0x1 - cmp r4, 0x3 - ble _080686D0 - ldr r0, _08068744 - ldr r0, [r0] - ldr r1, _08068760 - adds r0, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0x31 - bne _08068738 - movs r4, 0 - ldr r5, _08068758 -_08068712: - movs r0, 0x58 - muls r0, r4 - ldr r1, _08068764 - adds r0, r1 - ldr r1, [r5] - adds r2, r1, r0 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068732 - movs r1, 0x8 - ldrsh r0, [r2, r1] - movs r1, 0x1 - bl LoadPokemonSprite -_08068732: - adds r4, 0x1 - cmp r4, 0x3 - ble _08068712 -_08068738: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08068740: .4byte 0x000001a7 -_08068744: .4byte gDungeon -_08068748: .4byte 0x00017b44 -_0806874C: .4byte 0x000001a5 -_08068750: .4byte 0x000037e4 -_08068754: .4byte 0x0000343c -_08068758: .4byte gRecruitedPokemonRef -_0806875C: .4byte 0x00008df8 -_08068760: .4byte 0x00003a14 -_08068764: .4byte 0x00008f88 - thumb_func_end LoadDungeonPokemonSprites - .align 2,0 diff --git a/include/code_800DAC0.h b/include/code_800DAC0.h index 458e27470..e36cc1b99 100644 --- a/include/code_800DAC0.h +++ b/include/code_800DAC0.h @@ -26,6 +26,7 @@ void sub_800DAC0(u32); void sub_800DB7C(void); void sub_800DBBC(void); bool8 sub_800E90C(DungeonPos *); -void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruct_203B0CC_sub_2 *a4); +void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4); + #endif // GUARD_CODE_800DAC0_H diff --git a/include/code_800E9A8.h b/include/code_800E9A8.h index 5fb569545..395a7c4b2 100644 --- a/include/code_800E9A8.h +++ b/include/code_800E9A8.h @@ -1,15 +1,10 @@ #ifndef GUARD_CODE_800E9A8_H #define GUARD_CODE_800E9A8_H +#include "structs/axdata.h" +#include "structs/sprite_oam.h" #include "structs/str_position.h" -struct unkStruct_203B0CC_sub_2 -{ - u32 unk0; - u32 unk4; - u32 unk8; -}; - struct unkStruct_203B0CC_sub { // size: 0xD0 @@ -23,17 +18,20 @@ struct unkStruct_203B0CC_sub DungeonPos unk1c; s32 unk20; s32 unk24; - struct unkStruct_203B0CC_sub_2 unk28; + unkStruct_2039DB0 spriteMasks; u32 unk34; u32 effectID; - u8 fill3C[0x4C - 0x3C]; + s32 paletteNum; + u8 fill40[0x4C - 0x40]; u32 unk4C; s32 unk50; u8 unk54; - u8 fill55[0xB8 - 0x55]; + u8 fill55[0x58 - 0x55]; + struct axObject unk58; + u8 fillA4[0xB8 - 0xA4]; u32 unkB8; u8 fillBC[0xCC - 0xBC]; - u32 unkCC; + s16 unkCC[2]; // NOTE: might be DungeonPos }; struct unkStruct_203B0CC diff --git a/include/code_805D8C8.h b/include/code_805D8C8.h index be4a29c35..bc0258f52 100644 --- a/include/code_805D8C8.h +++ b/include/code_805D8C8.h @@ -5,6 +5,9 @@ void CloseAllSpriteFiles(void); +void OpenDungeonPaletteFile(void); +void CloseDungeonPaletteFile(void); +void LoadDungeonPokemonSprites(void); void sub_8068768(void); void sub_80687AC(void); OpenedFile *GetSpriteData(s32 _species); diff --git a/src/code_800E9A8.c b/src/code_800E9A8.c index 9e83f7b3a..329e485fc 100644 --- a/src/code_800E9A8.c +++ b/src/code_800E9A8.c @@ -55,7 +55,7 @@ u32 sub_800E890(unkStruct_80416E0 *param_1) return sub_800E208(7, (void*)¶m_1->unk0); } -void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruct_203B0CC_sub_2 *a4) +void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4) { s32 index; struct unkStruct_203B0CC_sub *ptr; @@ -68,7 +68,7 @@ void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, struct unkStruc if(a1 != NULL) ptr->unk18 = *a1; if(a2 != NULL) ptr->unk1c = *a2; if(a3 != 0xFFFF) ptr->unk24 = a3; - if(a4 != NULL) ptr->unk28 = *a4; + if(a4 != NULL) ptr->spriteMasks = *a4; } } diff --git a/src/code_800E9E4.c b/src/code_800E9E4.c index d28e66948..b5120a88d 100644 --- a/src/code_800E9E4.c +++ b/src/code_800E9E4.c @@ -99,7 +99,7 @@ void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3, s32 r5, if (idx != -1) { struct unkStruct_203B0CC_sub *curStruct; curStruct = &gUnknown_203B0CC->unk0[idx]; - if (curStruct->unkCC == 0) { + if (curStruct->unkCC[0] == 0 && curStruct->unkCC[1] == 0) { curStruct->unk18 = *param_2; } diff --git a/src/code_8042B34.c b/src/code_8042B34.c index c8e3f8525..a860a9566 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -265,7 +265,6 @@ extern void sub_8040124(void); extern void sub_803E830(void); extern void sub_803E214(void); extern void nullsub_56(void); -extern void sub_806863C(void); extern void sub_8040218(void); extern void sub_8047104(void); extern void sub_8068F28(void); @@ -282,7 +281,6 @@ extern void sub_803E02C(void); extern void sub_80847D4(void); extern void sub_8043D60(void); extern void sub_806890C(void); -extern void sub_8068614(void); extern void sub_80840A4(void); extern void sub_803E178(void); extern void sub_80848F0(void); @@ -327,7 +325,6 @@ extern bool8 sub_8044B28(void); extern bool8 sub_8083C24(void); extern bool8 sub_8083C88(u8 param_1); extern bool8 sub_8043ED0(bool8); -extern void LoadDungeonPokemonSprites(void); extern void ShowDungeonNameBanner(void); extern void sub_803EAF0(u32, u32); extern void sub_806A914(bool8 a0, bool8 a1, bool8 showRunAwayEffect); @@ -487,7 +484,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) } } - sub_8068614(); + OpenDungeonPaletteFile(); if (!r6 && gDungeon->unk644.unk34 == 1) { if (sub_8099394(&sp)) { unkStruct_203B480 *mailStr = GetMailatIndex(sp); @@ -914,7 +911,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) } } - sub_806863C(); + CloseDungeonPaletteFile(); sub_803E214(); nullsub_56(); sub_8040218(); diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 8b5ca511d..6ea4352e6 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -2,19 +2,67 @@ #include "code_805D8C8.h" #include "structs/str_dungeon.h" #include "dungeon_util.h" +#include "dungeon_util_1.h" +#include "file_system.h" #include "pokemon.h" +#include "pokemon_3.h" // monster_sbin.s extern const struct FileArchive gMonsterFileArchive; // data_8106A4C.s extern const u8 gUnknown_8106EA0[]; // ax%03d - +extern const u8 gUnknown_8106E98[]; // palet // ??? extern s32 sprintf(char *, const char *, ...); static void EnsureCastformLoaded(void); static void EnsureDeoxysLoaded(void); +void OpenDungeonPaletteFile(void) +{ + gDungeon->paletFile = OpenFileAndGetFileDataPtr(gUnknown_8106E98, &gMonsterFileArchive); +} + +void CloseDungeonPaletteFile(void) +{ + CloseFile(gDungeon->paletFile); +} + +void LoadDungeonPokemonSprites(void) +{ + s32 index; + + for(index = 0; index < 0x1A8; index++) + { + gDungeon->sprites[index] = NULL; + } + LoadPokemonSprite(MONSTER_DECOY, TRUE); + for(index = 0; index < gDungeon->unk37E4; index++) + { + LoadPokemonSprite(ExtractSpeciesIndex(&gDungeon->unk343C[index]), TRUE); + } + if(gDungeon->unk644.unk44) + { + LoadPokemonSprite(gDungeon->unk644.unk44, TRUE); + } + for(index = 0; index < 4; index++) + { + PokemonStruct2 *ptr = &gRecruitedPokemonRef->pokemon2[index]; + if(PokemonFlag1Struct2(ptr)) + if(PokemonFlag2Struct2(ptr)) + LoadPokemonSprite(ptr->speciesNum, FALSE); + } + if(gDungeon->fixedRoomNumber == 0x31) + { + for(index = 0; index < MAX_TEAM_MEMBERS; index++) + { + PokemonStruct1 *ptr = &gRecruitedPokemonRef->team[index]; + if(PokemonFlag1(ptr)) + LoadPokemonSprite(ptr->speciesNum, TRUE); + } + } +} + void sub_8068768(void) { Entity *entity; From e34ec1b862733b9de4e9b9673489ec50baa3a504 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 9 Feb 2025 10:48:33 -0800 Subject: [PATCH 26/27] decomp few more funcs --- asm/code_8066D04.s | 381 ----------------------------------------- include/code_805D8C8.h | 2 +- src/code_8042B34.c | 2 +- src/code_805D8C8.c | 66 ++++++- 4 files changed, 67 insertions(+), 384 deletions(-) diff --git a/asm/code_8066D04.s b/asm/code_8066D04.s index d0bf5625e..aab7b47d5 100644 --- a/asm/code_8066D04.s +++ b/asm/code_8066D04.s @@ -2593,385 +2593,4 @@ _080682F6: bx r0 thumb_func_end sub_806806C - thumb_func_start sub_8068310 -sub_8068310: - push {r4-r6,lr} - movs r4, 0 - ldr r6, _08068340 - cmp r4, r0 - bge _08068338 - movs r5, 0x80 - lsls r5, 8 - adds r3, r1, 0 - adds r2, r0, 0 -_08068322: - ldr r0, [r3] - ldrh r1, [r0] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _08068330 - adds r4, 0x1 -_08068330: - adds r3, 0x4 - subs r2, 0x1 - cmp r2, 0 - bne _08068322 -_08068338: - str r4, [r6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08068340: .4byte gUnknown_202F310 - thumb_func_end sub_8068310 - - thumb_func_start sub_8068344 -sub_8068344: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - ldr r0, _08068494 - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - bne _0806835C - b _08068486 -_0806835C: - ldr r0, _08068498 - mov r9, r0 - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r0, [r0] - ldr r1, _0806849C - ands r1, r0 - ldr r3, _080684A0 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080684A4 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r6, _080684A8 - mov r8, r6 - mov r0, r8 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080684AC - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080684B0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - movs r4, 0x80 - lsls r4, 7 - mov r0, sp - ldrh r1, [r0] - ldr r6, _080684B4 - adds r0, r6, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - orrs r4, r0 - ands r3, r1 - orrs r3, r4 - str r3, [sp] - movs r1, 0x80 - lsls r1, 6 - mov r5, sp - ldrh r0, [r5, 0x2] - ldr r2, _080684B8 - ands r2, r0 - orrs r2, r1 - ands r2, r6 - movs r3, 0xFC - lsls r3, 2 - ldrh r1, [r5, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r3 - mov r1, r8 - ands r0, r1 - movs r3, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _080684BC - ands r0, r4 - orrs r0, r1 - strh r0, [r5, 0x4] - mov r6, r9 - movs r1, 0x2 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x8 - ands r0, r4 - lsls r0, 4 - ldrh r1, [r5, 0x6] - ands r3, r1 - orrs r3, r0 - strh r3, [r5, 0x6] - movs r3, 0 - ldrsh r0, [r6, r3] - lsls r0, 3 - adds r0, 0x40 - ldr r1, _080684C0 - ands r0, r1 - movs r1, 0xFE - lsls r1, 8 - ands r2, r1 - orrs r2, r0 - strh r2, [r5, 0x2] - movs r1, 0x80 - lsls r1, 1 - mov r0, sp - movs r2, 0 - movs r3, 0 - bl AddSprite -_08068486: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08068494: .4byte gUnknown_202EDCC -_08068498: .4byte gUnknown_2027370 -_0806849C: .4byte 0x0000feff -_080684A0: .4byte 0xffff0000 -_080684A4: .4byte 0x0000fdff -_080684A8: .4byte 0x0000f3ff -_080684AC: .4byte 0x0000efff -_080684B0: .4byte 0x0000dfff -_080684B4: .4byte 0x00003fff -_080684B8: .4byte 0x0000c1ff -_080684BC: .4byte 0x00000fff -_080684C0: .4byte 0x000001ff - thumb_func_end sub_8068344 - - thumb_func_start sub_80684C4 -sub_80684C4: - push {r4-r6,lr} - sub sp, 0x8 - ldr r0, _080685E8 - ldr r0, [r0] - movs r1, 0x8 - ands r0, r1 - cmp r0, 0 - bne _080684D6 - b _080685DE -_080684D6: - ldr r6, _080685EC - movs r0, 0 - movs r1, 0 - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - ldrh r0, [r0] - ldr r1, _080685F0 - ands r1, r0 - ldr r3, _080685F4 - ldr r0, [sp] - ands r0, r3 - orrs r0, r1 - str r0, [sp] - mov r1, sp - ldrh r1, [r1] - adds r2, r3, 0 - ands r2, r0 - orrs r2, r1 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _080685F8 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r5, _080685FC - adds r0, r5, 0 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08068600 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - mov r0, sp - ldrh r1, [r0] - ldr r0, _08068604 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - adds r2, r3, 0 - ands r2, r1 - orrs r2, r0 - str r2, [sp] - movs r4, 0x80 - lsls r4, 7 - mov r0, sp - ldrh r1, [r0] - ldr r0, _08068608 - ands r0, r1 - adds r1, r3, 0 - ands r1, r2 - orrs r1, r0 - str r1, [sp] - mov r0, sp - ldrh r0, [r0] - orrs r4, r0 - ands r3, r1 - orrs r3, r4 - str r3, [sp] - mov r3, sp - movs r2, 0xFC - lsls r2, 2 - ldrh r1, [r3, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r5 - movs r2, 0xF - movs r1, 0xF0 - lsls r1, 8 - ldr r4, _0806860C - ands r0, r4 - orrs r0, r1 - strh r0, [r3, 0x4] - movs r1, 0x2 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x70 - ands r0, r4 - lsls r0, 4 - ldrh r1, [r3, 0x6] - ands r2, r1 - orrs r2, r0 - strh r2, [r3, 0x6] - movs r1, 0 - ldrsh r0, [r6, r1] - lsls r0, 3 - adds r0, 0x40 - ldr r1, _08068610 - ands r0, r1 - strh r0, [r3, 0x2] - subs r1, 0xFF - mov r0, sp - movs r2, 0 - movs r3, 0 - bl AddSprite -_080685DE: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080685E8: .4byte gUnknown_202EDCC -_080685EC: .4byte gUnknown_2027370 -_080685F0: .4byte 0x0000feff -_080685F4: .4byte 0xffff0000 -_080685F8: .4byte 0x0000fdff -_080685FC: .4byte 0x0000f3ff -_08068600: .4byte 0x0000efff -_08068604: .4byte 0x0000dfff -_08068608: .4byte 0x00003fff -_0806860C: .4byte 0x00000fff -_08068610: .4byte 0x000001ff - thumb_func_end sub_80684C4 - .align 2,0 diff --git a/include/code_805D8C8.h b/include/code_805D8C8.h index bc0258f52..c5ddca546 100644 --- a/include/code_805D8C8.h +++ b/include/code_805D8C8.h @@ -8,7 +8,7 @@ void CloseAllSpriteFiles(void); void OpenDungeonPaletteFile(void); void CloseDungeonPaletteFile(void); void LoadDungeonPokemonSprites(void); -void sub_8068768(void); +void LoadDungeonActivePokemonSprites(void); void sub_80687AC(void); OpenedFile *GetSpriteData(s32 _species); void LoadPokemonSprite(s16 id, bool32); diff --git a/src/code_8042B34.c b/src/code_8042B34.c index a860a9566..5fb1dcf9e 100644 --- a/src/code_8042B34.c +++ b/src/code_8042B34.c @@ -575,7 +575,7 @@ void xxx_dungeon_8042F6C(struct UnkStruct_xxx_dungeon_8042F6C *r8) sub_80687AC(); } else { - sub_8068768(); + LoadDungeonActivePokemonSprites(); sub_8082B40(); } sub_806C42C(); diff --git a/src/code_805D8C8.c b/src/code_805D8C8.c index 6ea4352e6..08c0ff577 100644 --- a/src/code_805D8C8.c +++ b/src/code_805D8C8.c @@ -6,6 +6,7 @@ #include "file_system.h" #include "pokemon.h" #include "pokemon_3.h" +#include "text.h" // monster_sbin.s extern const struct FileArchive gMonsterFileArchive; @@ -15,9 +16,72 @@ extern const u8 gUnknown_8106E98[]; // palet // ??? extern s32 sprintf(char *, const char *, ...); +extern u32 gUnknown_202EDCC; + static void EnsureCastformLoaded(void); static void EnsureDeoxysLoaded(void); +extern s32 gUnknown_202F310; + +void sub_8068310(s32 size, u16 **param_2) +{ + s32 counter; + s32 index; + counter = 0; + + for(index = 0; index < size; index++) { + if ((*param_2[index] & 0x8000) != 0) { + counter++; + } + } + gUnknown_202F310 = counter; +} + +void sub_8068344(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + SpriteOAM sprite = {0}; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 0); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 1); + SpriteSetMatrixNum(&sprite, 16); + SpriteSetSize(&sprite, 0); + SpriteSetTileNum(&sprite, 0x3F0); + SpriteSetPriority(&sprite, 0); + SpriteSetPalNum(&sprite, 15); + SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x8); + SpriteSetX(&sprite, (ptr->unk0 * 8) + 0x40); + AddSprite(&sprite,0x100,NULL,NULL); + } +} + +void sub_80684C4(void) +{ + if ((gUnknown_202EDCC & 8) != 0) { + UnkTextStruct1 *ptr = &gUnknown_2027370[0]; + SpriteOAM sprite = {0}; + + SpriteSetAffine1(&sprite, 0); + SpriteSetAffine2(&sprite, 0); + SpriteSetObjMode(&sprite, 0); + SpriteSetMosaic(&sprite, 0); + SpriteSetBpp(&sprite, 0); + SpriteSetShape(&sprite, 1); + SpriteSetSize(&sprite, 0); + SpriteSetTileNum(&sprite, 0x3F0); + SpriteSetPriority(&sprite, 0); + SpriteSetPalNum(&sprite, 15); + SpriteSetY(&sprite, (ptr->unk2 * 8) + 0x70); + SpriteSetX_MatrixNumSize0(&sprite, (ptr->unk0 * 8) + 0x40); + AddSprite(&sprite,0x100,NULL,NULL); + } +} + void OpenDungeonPaletteFile(void) { gDungeon->paletFile = OpenFileAndGetFileDataPtr(gUnknown_8106E98, &gMonsterFileArchive); @@ -63,7 +127,7 @@ void LoadDungeonPokemonSprites(void) } } -void sub_8068768(void) +void LoadDungeonActivePokemonSprites(void) { Entity *entity; s32 i; From a3996c3a29a8ade9e141b3a0d864b5dde889238a Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 9 Feb 2025 20:47:25 -0800 Subject: [PATCH 27/27] address review comments --- src/code_8002774.c | 14 +++----- src/code_8069D4C.c | 88 +++++++++++++++++++++++----------------------- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/src/code_8002774.c b/src/code_8002774.c index 3fb71ff38..e35dfad13 100644 --- a/src/code_8002774.c +++ b/src/code_8002774.c @@ -4,13 +4,7 @@ #include "structs/str_position.h" #include "other_random.h" -typedef struct Vector -{ - s32 x; - s32 y; -} Vector; - -extern Vector gVectorDirections[8]; +extern PixelPos gVectorDirections[8]; void sub_800290C(PixelPos *param_1, s32 param_2) { @@ -187,11 +181,11 @@ UNUSED s32 sub_8002B5C(s32 _direction1, s32 _direction2) return direction1 & DIRECTION_MASK_CARDINAL; } -Vector SetVecFromDirectionSpeed(s8 r1, u32 r2) +PixelPos SetVecFromDirectionSpeed(s8 r1, u32 r2) { - Vector *vec = &gVectorDirections[r1]; + PixelPos *vec = &gVectorDirections[r1]; - return (Vector){ .x = vec->x * r2, .y = vec->y * r2 }; + return (PixelPos){ .x = vec->x * r2, .y = vec->y * r2 }; } s32 VecDirection8Sign(PixelPos *param_1) diff --git a/src/code_8069D4C.c b/src/code_8069D4C.c index 858770282..0aa92cef7 100644 --- a/src/code_8069D4C.c +++ b/src/code_8069D4C.c @@ -212,13 +212,13 @@ void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target) { } param_1->isTeamLeader = info->isTeamLeader; atkPtr = ¶m_1->atkBoost; - *atkPtr = '\0'; + *atkPtr = 0; spAtkPtr = ¶m_1->spAtkBoost; - *spAtkPtr = '\0'; + *spAtkPtr = 0; defPtr = ¶m_1->defBoost; - *defPtr = '\0'; + *defPtr = 0; spDefBoost = ¶m_1->spDefBoost; - *spDefBoost = '\0'; + *spDefBoost = 0; if ((info->heldItem.flags & ITEM_FLAG_EXISTS) && ((info->heldItem.flags & ITEM_FLAG_STICKY) == 0)) { if (info->heldItem.id == ITEM_POWER_BAND) { *atkPtr += gUnknown_810AC60; @@ -260,25 +260,25 @@ void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target) { } if (gDungeon->unk644.itemHoldersIdentified) { - param_1->unk58[uVar15] = '\v'; + param_1->unk58[uVar15] = 11; uVar15++; } if (FixedPointToInt(info->belly) == 0) { if (info->isTeamLeader) { - param_1->unk58[uVar15] = '\x13'; + param_1->unk58[uVar15] = 19; } else { - param_1->unk58[uVar15] = ';'; + param_1->unk58[uVar15] = 59; } uVar15++; } - if (1 < GetEntInfo(target)->speedStage) { - param_1->unk58[uVar15] = '\x1b'; + if (GetEntInfo(target)->speedStage > 1) { + param_1->unk58[uVar15] = 27; uVar15++; } if (GetEntInfo(target)->speedStage < 1) { - param_1->unk58[uVar15] = '('; + param_1->unk58[uVar15] = 40; uVar15++; } if ((((((info->offensiveMultipliers[0].raw < 0x100) || (info->offensiveMultipliers[1].raw < 0x100) @@ -287,98 +287,98 @@ void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target) { ((info->offensiveStages[1] < 10 || ((info->defensiveStages[0] < 10 || (info->defensiveStages[1] < 10)))))) || ((info->hitChanceStages[0] < 10 || (info->hitChanceStages[1] < 10)))) { - param_1->unk58[uVar15] = '7'; + param_1->unk58[uVar15] = 55; uVar15++; } - if (((info->sleepClassStatus).status != 0) && (uVar15 < 0xc)) { + if (((info->sleepClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { param_1->unk58[uVar15] = (info->sleepClassStatus).status; uVar15++; } - if (((info->burnClassStatus).status != 0) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->burnClassStatus).status + '\x06'; + if (((info->burnClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->burnClassStatus).status + 6; uVar15++; } - if (((info->frozenClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->frozenClassStatus).status + '\v'; + if (((info->frozenClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->frozenClassStatus).status + 11; uVar15++; } - if (((info->cringeClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->cringeClassStatus).status + '\x13'; + if (((info->cringeClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->cringeClassStatus).status + 19; uVar15++; } - if (((info->bideClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->bideClassStatus).status + '\x1b'; + if (((info->bideClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->bideClassStatus).status + 27; uVar15++; } - if (((info->reflectClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->reflectClassStatus).status + '('; + if (((info->reflectClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->reflectClassStatus).status + 40; uVar15++; } - if (((info->curseClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->curseClassStatus).status + '7'; + if (((info->curseClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->curseClassStatus).status + 55; uVar15++; } - if (((info->leechSeedClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = (info->leechSeedClassStatus).status + ';'; + if (((info->leechSeedClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = (info->leechSeedClassStatus).status + 59; uVar15++; } - if (((info->sureShotClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = info->sureShotClassStatus.status + '>'; + if (((info->sureShotClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->sureShotClassStatus.status + 62; uVar15++; } - if (((info->longTossClassStatus).status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = info->longTossClassStatus.status + 0x43; + if (((info->longTossClassStatus).status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->longTossClassStatus.status + 67; uVar15++; } - if ((info->invisibleClassStatus.status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = info->invisibleClassStatus.status + 'F'; + if ((info->invisibleClassStatus.status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->invisibleClassStatus.status + 70; uVar15++; } - if ((info->blinkerClassStatus.status != '\0') && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = info->blinkerClassStatus.status + 'J'; + if ((info->blinkerClassStatus.status != STATUS_NONE) && (uVar15 < 0xc)) { + param_1->unk58[uVar15] = info->blinkerClassStatus.status + 74; uVar15++; } if ((info->muzzled.muzzled) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = info->muzzled.muzzled + 'N'; + param_1->unk58[uVar15] = info->muzzled.muzzled + 78; uVar15++; } if ((info->stockpileStage != 0) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'P'; + param_1->unk58[uVar15] = 80; uVar15++; } if ((info->powerEars) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'Q'; + param_1->unk58[uVar15] = 81; uVar15++; } if ((info->scanning) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'R'; + param_1->unk58[uVar15] = 82; uVar15++; } if ((info->grudge) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'S'; + param_1->unk58[uVar15] = 83; uVar15++; } if ((info->exposed) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'T'; + param_1->unk58[uVar15] = 84; uVar15++; } if ((ShouldMonsterRunAway(target)) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'U'; + param_1->unk58[uVar15] = 85; uVar15++; } if ((info->perishSongTurns != 0) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'V'; + param_1->unk58[uVar15] = 86; uVar15++; } if ((1 < sub_8070828(target,FALSE)) && (uVar15 < 0xc)) { - param_1->unk58[uVar15] = 'W'; + param_1->unk58[uVar15] = 87; uVar15++; } if (info->stairSpotter) { if (0xb < uVar15) { return; } - param_1->unk58[uVar15] = 'X'; + param_1->unk58[uVar15] = 88; uVar15++; }