diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/menu_unknown.c | 1103 | ||||
-rw-r--r-- | src/use_pokeblock.c | 3 |
2 files changed, 1103 insertions, 3 deletions
diff --git a/src/menu_unknown.c b/src/menu_unknown.c index 243eb33ff..dc8351d92 100644 --- a/src/menu_unknown.c +++ b/src/menu_unknown.c @@ -1,15 +1,18 @@ #include "global.h" #include "alloc.h" +#include "gpu_regs.h" #include "international_string_util.h" #include "menu.h" #include "menu_unknown.h" #include "player_pc.h" +#include "scanline_effect.h" #include "sound.h" #include "strings.h" #include "string_util.h" +#include "trig.h" #include "window.h" #include "constants/songs.h" -#include "scanline_effect.h" +#include "gba/io_reg.h" #define WINDOW_UNK_0 0 #define WINDOW_UNK_1 1 @@ -19,6 +22,8 @@ EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0}; EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL; void sub_81D1E7C(s32 itemIndex, bool8 onInit, struct ListMenu *list); +void sub_81D24A4(struct UnknownStruct_81D1ED4 *a0); +void sub_81D2634(struct UnknownStruct_81D1ED4 *a0); static const struct WindowTemplate sUnknown_086253E8[] = { @@ -66,6 +71,44 @@ static const struct ScanlineEffectParams sUnknown_08625404 = .unused9 = 0 }; + +const u8 gUnknown_08625410[] = +{ + 4, + 5, + 6, + 7, + 8, + 9, 9, + 10, 10, + 0xB, 0xB, + 0xC, 0xC, + 0xD, 0xD, + 0xD, 0xD, + 0xE, 0xE, 0xE, 0xE, + 0xF, 0xF, 0xF, 0xF, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, + 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, + 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, + 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, + 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, + 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, + 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, + 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, + 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, + 0x23 +}; + bool8 sub_81D1C44(u8 count) { u32 i; @@ -398,4 +441,1062 @@ bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0) default: return FALSE; } +} + +NAKED +void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0) +{ + // Three of the additions are in the wrong order. +#ifdef NONMATCHING + u16 i; + u32 v3; + u32 v4; + u16 *scanBuffer1; + u16 *scanBuffer2; + u32 scanBufferWidth; + u32 mask; + u16 *unkBuff1; + u16 *unkBuff2; + u16 *unkBuff3; + u16 *unkBuff4; + + if (arg0->unk354 == 0) + return; + + sub_81D24A4(arg0); + sub_81D2634(arg0); + + i = 0; + scanBuffer1 = gScanlineEffectRegBuffers[0]; + scanBufferWidth = ARRAY_COUNT(gScanlineEffectRegBuffers[0]); + scanBuffer2 = scanBuffer1 + scanBufferWidth; + + // This function accesses the arrays "manually", where every other entry + // is just handled differently, rather than a pairwise struct. + unkBuff1 = (u16*)&arg0->unk13C[0].unk0; + mask = 0xFFFF; + unkBuff2 = (u16*)&arg0->unk13C[0].unk2; + unkBuff3 = (u16*)&arg0->unk248[0].unk0; + unkBuff4 = (u16*)&arg0->unk248[0].unk2; + + for (; i < 0x42; i++) + { + u32 offset1; + register u32 offset2 asm("r2"); + u32 offset3; + + offset1 = (i + 0x37) * 2; + offset2 = i + 0x37; + scanBuffer2[offset1] = (scanBuffer1[offset1] = (unkBuff1[i * 2] << 8) | unkBuff2[i * 2]) & mask; + + offset3 = offset2 * 2 + 1; + scanBuffer2[offset3] = (scanBuffer1[offset3] = (unkBuff3[i * 2] << 8) | unkBuff4[i * 2]) & mask; + } + + arg0->unk354 = 0; +#else + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + adds r6, r0, 0\n\ + movs r1, 0xD5\n\ + lsls r1, 2\n\ + adds r0, r6, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _081D21BE\n\ + adds r0, r6, 0\n\ + bl sub_81D24A4\n\ + adds r0, r6, 0\n\ + bl sub_81D2634\n\ + movs r7, 0\n\ + ldr r5, =gScanlineEffectRegBuffers\n\ + mov r12, r5\n\ + movs r0, 0xF0\n\ + lsls r0, 3\n\ + add r0, r12\n\ + mov r9, r0\n\ + movs r1, 0xA0\n\ + lsls r1, 1\n\ + adds r1, r6, r1\n\ + str r1, [sp]\n\ + ldr r5, =0x0000ffff\n\ + mov r8, r5\n\ + movs r0, 0xA1\n\ + lsls r0, 1\n\ + adds r0, r6, r0\n\ + str r0, [sp, 0x4]\n\ + movs r1, 0x92\n\ + lsls r1, 2\n\ + adds r1, r6, r1\n\ + str r1, [sp, 0x8]\n\ + ldr r5, =0x0000024a\n\ + adds r5, r6\n\ + mov r10, r5\n\ +_081D215E:\n\ + adds r2, r7, 0\n\ + adds r2, 0x37\n\ + lsls r3, r2, 2\n\ + mov r0, r9\n\ + adds r0, r3, r0\n\ + str r0, [sp, 0xC]\n\ + add r3, r12\n\ + lsls r4, r7, 2\n\ + ldr r1, [sp]\n\ + adds r0, r1, r4\n\ + ldrh r0, [r0]\n\ + lsls r0, 8\n\ + ldr r5, [sp, 0x4]\n\ + adds r1, r5, r4\n\ + ldrh r1, [r1]\n\ + orrs r0, r1\n\ + strh r0, [r3]\n\ + mov r1, r8\n\ + ands r0, r1\n\ + ldr r5, [sp, 0xC]\n\ + strh r0, [r5]\n\ + lsls r2, 1\n\ + adds r2, 0x1\n\ + lsls r2, 1\n\ + mov r0, r9\n\ + adds r3, r2, r0\n\ + add r2, r12\n\ + ldr r1, [sp, 0x8]\n\ + adds r0, r1, r4\n\ + ldrh r0, [r0]\n\ + lsls r0, 8\n\ + add r4, r10\n\ + ldrh r1, [r4]\n\ + orrs r0, r1\n\ + strh r0, [r2]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + strh r0, [r3]\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + cmp r7, 0x41\n\ + bls _081D215E\n\ + movs r0, 0xD5\n\ + lsls r0, 2\n\ + adds r1, r6, r0\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ +_081D21BE:\n\ + add sp, 0x10\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +#endif +} + +void sub_81D21DC(u8 bg) +{ + u8 flags; + + if (bg > 3) + bg = 0; + + // Unset the WINOUT flag for the bg. + flags = (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) & ~(1 << bg); + + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); + SetGpuReg(REG_OFFSET_WIN1H, WIN_RANGE(0, 0x9B)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0x38, 0x79)); + SetGpuReg(REG_OFFSET_WIN1V, WIN_RANGE(0x38, 0x79)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, flags); +} + +void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0) +{ + u16 i; + for (i = 0; i < 5; i++) + { + arg0->unk12C[i] = arg0->unk64[arg0->unk352][i]; + } + arg0->unk354 = 1; +} + +NAKED +void sub_81D2278(void *a0, void *a1, u16 *a2, u16 *a3, u8 a38, u32 a3C) +{ +#ifdef NONMATCHING + // a0 => sp0 + // a1 => r6 + // a2 => r5 + // a3 => sp4 + // a38 => r9 + // a3C => r7 + u32 v1; // r10 + u32 v2; // sp8 + u32 v3; // spC + u32 v4; + u32 v5; + u16 v6; // r8 + u32 v7; + u32 v8; // sp10 + + v3 = 0; + + // v4 => r4 + // v5 => r0 + // v7 => r1 + if (a2[1] < a3[1]) + { + v1 = a2[1]; + v5 = a3[1]; + v7 = a2[0]; + v4 = v7 << 10; + v2 = a3[0]; + } + else + { + v5 = a2[1]; + v1 = a3[1]; + v7 = a3[0]; + v4 = v7 << 10; + v2 = a2[0]; + } + + v6 = v5 - v1; + if (v6 != 0) + { + v3 = (v2 - v7) / v6; + } + v6++; + + if (a3C == 0) + { + v8 = + } +#else + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + str r0, [sp]\n\ + adds r6, r1, 0\n\ + adds r5, r2, 0\n\ + str r3, [sp, 0x4]\n\ + ldr r0, [sp, 0x38]\n\ + ldr r7, [sp, 0x3C]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r9, r0\n\ + movs r0, 0\n\ + str r0, [sp, 0xC]\n\ + ldrh r0, [r5, 0x2]\n\ + ldrh r1, [r3, 0x2]\n\ + cmp r0, r1\n\ + bcs _081D22B2\n\ + adds r2, r0, 0\n\ + mov r10, r2\n\ + ldrh r0, [r3, 0x2]\n\ + ldrh r1, [r5]\n\ + lsls r4, r1, 10\n\ + ldrh r3, [r3]\n\ + str r3, [sp, 0x8]\n\ + b _081D22C6\n\ +_081D22B2:\n\ + ldrh r0, [r5, 0x2]\n\ + ldr r1, [sp, 0x4]\n\ + ldrh r1, [r1, 0x2]\n\ + mov r10, r1\n\ + ldr r2, [sp, 0x4]\n\ + ldrh r1, [r2]\n\ + lsls r4, r1, 10\n\ + ldrh r3, [r5]\n\ + str r3, [sp, 0x8]\n\ + mov r2, r10\n\ +_081D22C6:\n\ + subs r0, r2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + cmp r0, 0\n\ + beq _081D22DE\n\ + subs r0, r3, r1\n\ + lsls r0, 10\n\ + mov r1, r8\n\ + bl __divsi3\n\ + str r0, [sp, 0xC]\n\ +_081D22DE:\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + cmp r7, 0\n\ + bne _081D2328\n\ + mov r0, r10\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r6, r0\n\ + movs r5, 0\n\ + mov r3, r9\n\ + lsls r3, 1\n\ + mov r12, r3\n\ + ldr r0, [sp, 0x8]\n\ + add r0, r9\n\ + str r0, [sp, 0x10]\n\ + cmp r7, r8\n\ + bcs _081D23B6\n\ + movs r7, 0x1\n\ +_081D2308:\n\ + adds r2, r3, r6\n\ + asrs r1, r4, 10\n\ + asrs r0, r4, 9\n\ + ands r0, r7\n\ + adds r1, r0\n\ + add r1, r9\n\ + strh r1, [r2]\n\ + ldr r1, [sp, 0xC]\n\ + adds r4, r1\n\ + adds r6, 0x4\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, r8\n\ + bcc _081D2308\n\ + b _081D23B6\n\ +_081D2328:\n\ + ldr r2, [sp, 0xC]\n\ + cmp r2, 0\n\ + ble _081D23C0\n\ + mov r0, r10\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r7, r0\n\ + movs r5, 0\n\ + mov r3, r9\n\ + lsls r3, 1\n\ + mov r12, r3\n\ + ldr r0, [sp, 0x8]\n\ + add r0, r9\n\ + str r0, [sp, 0x10]\n\ + cmp r5, r8\n\ + bcs _081D237A\n\ + ldr r0, =0x00026bff\n\ + cmp r4, r0\n\ + bgt _081D237A\n\ + mov r1, r12\n\ + str r1, [sp, 0x14]\n\ +_081D2352:\n\ + ldr r3, [sp, 0x14]\n\ + adds r2, r3, r7\n\ + asrs r1, r4, 10\n\ + asrs r0, r4, 9\n\ + movs r3, 0x1\n\ + ands r0, r3\n\ + adds r1, r0\n\ + add r1, r9\n\ + strh r1, [r2]\n\ + ldr r0, [sp, 0xC]\n\ + adds r4, r0\n\ + adds r7, 0x4\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, r8\n\ + bcs _081D237A\n\ + ldr r1, =0x00026bff\n\ + cmp r4, r1\n\ + ble _081D2352\n\ +_081D237A:\n\ + mov r2, r10\n\ + adds r1, r2, r5\n\ + ldr r3, [sp]\n\ + movs r2, 0xD4\n\ + lsls r2, 2\n\ + adds r0, r3, r2\n\ + strh r1, [r0]\n\ + ldrh r0, [r0]\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r6, r0\n\ + cmp r5, r8\n\ + bcs _081D23B6\n\ + mov r3, r12\n\ + movs r7, 0x1\n\ +_081D2398:\n\ + adds r2, r3, r6\n\ + asrs r1, r4, 10\n\ + asrs r0, r4, 9\n\ + ands r0, r7\n\ + adds r1, r0\n\ + add r1, r9\n\ + strh r1, [r2]\n\ + ldr r0, [sp, 0xC]\n\ + adds r4, r0\n\ + adds r6, 0x4\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, r8\n\ + bcc _081D2398\n\ +_081D23B6:\n\ + subs r0, r6, 0x4\n\ + b _081D248C\n\ + .pool\n\ +_081D23C0:\n\ + ldr r1, [sp, 0xC]\n\ + cmp r1, 0\n\ + bge _081D2464\n\ + mov r0, r10\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r6, r0\n\ + movs r5, 0\n\ + mov r2, r9\n\ + lsls r2, 1\n\ + mov r12, r2\n\ + ldr r3, [sp, 0x8]\n\ + add r3, r9\n\ + str r3, [sp, 0x10]\n\ + cmp r5, r8\n\ + bcs _081D241E\n\ + adds r3, r2, r6\n\ + asrs r1, r4, 10\n\ + asrs r0, r4, 9\n\ + movs r2, 0x1\n\ + ands r0, r2\n\ + adds r1, r0\n\ + add r1, r9\n\ + strh r1, [r3]\n\ + b _081D2414\n\ +_081D23F2:\n\ + ldr r0, [sp, 0xC]\n\ + adds r4, r0\n\ + adds r6, 0x4\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, r8\n\ + bcs _081D241E\n\ + mov r1, r12\n\ + adds r3, r1, r6\n\ + asrs r2, r4, 10\n\ + asrs r0, r4, 9\n\ + movs r1, 0x1\n\ + ands r0, r1\n\ + adds r2, r0\n\ + add r2, r9\n\ + strh r2, [r3]\n\ +_081D2414:\n\ + ldr r0, =0x00026bff\n\ + cmp r4, r0\n\ + bgt _081D23F2\n\ + movs r0, 0x9B\n\ + strh r0, [r3]\n\ +_081D241E:\n\ + mov r2, r10\n\ + adds r1, r2, r5\n\ + ldr r3, [sp]\n\ + movs r2, 0xD4\n\ + lsls r2, 2\n\ + adds r0, r3, r2\n\ + strh r1, [r0]\n\ + ldrh r0, [r0]\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r7, r0\n\ + cmp r5, r8\n\ + bcs _081D245A\n\ + mov r3, r12\n\ + movs r6, 0x1\n\ +_081D243C:\n\ + adds r2, r3, r7\n\ + asrs r1, r4, 10\n\ + asrs r0, r4, 9\n\ + ands r0, r6\n\ + adds r1, r0\n\ + add r1, r9\n\ + strh r1, [r2]\n\ + ldr r0, [sp, 0xC]\n\ + adds r4, r0\n\ + adds r7, 0x4\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, r8\n\ + bcc _081D243C\n\ +_081D245A:\n\ + subs r0, r7, 0x4\n\ + b _081D248C\n\ + .pool\n\ +_081D2464:\n\ + ldr r1, [sp]\n\ + movs r2, 0xD4\n\ + lsls r2, 2\n\ + adds r0, r1, r2\n\ + mov r3, r10\n\ + strh r3, [r0]\n\ + mov r0, r10\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r6, r0\n\ + adds r7, r0\n\ + ldrh r0, [r5]\n\ + adds r0, 0x1\n\ + strh r0, [r6, 0x2]\n\ + ldr r1, [sp, 0x4]\n\ + ldrh r0, [r1]\n\ + strh r0, [r7]\n\ + movs r0, 0x9B\n\ + strh r0, [r7, 0x2]\n\ + b _081D2494\n\ +_081D248C:\n\ + add r0, r12\n\ + mov r2, sp\n\ + ldrh r2, [r2, 0x10]\n\ + strh r2, [r0]\n\ +_081D2494:\n\ + add sp, 0x18\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +#endif +} + +NAKED +void sub_81D24A4(struct UnknownStruct_81D1ED4 *a0) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x8\n\ + adds r4, r0, 0\n\ + movs r0, 0x97\n\ + lsls r0, 1\n\ + adds r2, r4, r0\n\ + movs r3, 0x99\n\ + lsls r3, 1\n\ + adds r1, r4, r3\n\ + ldrh r0, [r2]\n\ + ldrh r3, [r1]\n\ + cmp r0, r3\n\ + bcs _081D24E0\n\ + adds r7, r0, 0\n\ + movs r0, 0xA0\n\ + lsls r0, 1\n\ + adds r1, r4, r0\n\ + movs r3, 0x96\n\ + lsls r3, 1\n\ + adds r2, r4, r3\n\ + subs r0, 0x10\n\ + adds r3, r4, r0\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + bl sub_81D2278\n\ + b _081D2500\n\ +_081D24E0:\n\ + ldrh r7, [r1]\n\ + movs r2, 0xA0\n\ + lsls r2, 1\n\ + adds r1, r4, r2\n\ + movs r3, 0x98\n\ + lsls r3, 1\n\ + adds r2, r4, r3\n\ + movs r0, 0x96\n\ + lsls r0, 1\n\ + adds r3, r4, r0\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + bl sub_81D2278\n\ +_081D2500:\n\ + movs r1, 0xA0\n\ + lsls r1, 1\n\ + adds r5, r4, r1\n\ + movs r3, 0x98\n\ + lsls r3, 1\n\ + adds r2, r4, r3\n\ + movs r0, 0x9A\n\ + lsls r0, 1\n\ + adds r6, r4, r0\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + adds r3, r6, 0\n\ + bl sub_81D2278\n\ + movs r2, 0\n\ + movs r1, 0x9B\n\ + lsls r1, 1\n\ + adds r0, r4, r1\n\ + movs r3, 0x9D\n\ + lsls r3, 1\n\ + adds r1, r4, r3\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + cmp r0, r1\n\ + bhi _081D253C\n\ + movs r2, 0x1\n\ +_081D253C:\n\ + movs r0, 0x9C\n\ + lsls r0, 1\n\ + adds r3, r4, r0\n\ + str r2, [sp]\n\ + movs r1, 0x92\n\ + lsls r1, 2\n\ + adds r0, r4, r1\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + bl sub_81D2278\n\ + movs r2, 0x38\n\ + cmp r2, r7\n\ + bcs _081D257E\n\ + adds r6, r5, 0\n\ + movs r3, 0\n\ + movs r0, 0xA1\n\ + lsls r0, 1\n\ + adds r5, r4, r0\n\ +_081D2566:\n\ + adds r0, r2, 0\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r1, r6, r0\n\ + strh r3, [r1]\n\ + adds r0, r5, r0\n\ + strh r3, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, r7\n\ + bcc _081D2566\n\ +_081D257E:\n\ + movs r1, 0x97\n\ + lsls r1, 1\n\ + adds r0, r4, r1\n\ + ldrh r2, [r0]\n\ + movs r3, 0xD4\n\ + lsls r3, 2\n\ + adds r0, r4, r3\n\ + ldrh r1, [r0]\n\ + cmp r2, r1\n\ + bhi _081D25B2\n\ + movs r1, 0xA0\n\ + lsls r1, 1\n\ + adds r3, r4, r1\n\ + movs r5, 0x9B\n\ + adds r1, r0, 0\n\ +_081D259C:\n\ + adds r0, r2, 0\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r0, r3, r0\n\ + strh r5, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + ldrh r0, [r1]\n\ + cmp r2, r0\n\ + bls _081D259C\n\ +_081D25B2:\n\ + movs r2, 0x9B\n\ + lsls r2, 1\n\ + adds r1, r4, r2\n\ + movs r3, 0xD4\n\ + lsls r3, 2\n\ + adds r0, r4, r3\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + cmp r0, r1\n\ + bcs _081D25C8\n\ + adds r0, r1, 0\n\ +_081D25C8:\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x79\n\ + bhi _081D25F8\n\ + movs r0, 0xA0\n\ + lsls r0, 1\n\ + adds r6, r4, r0\n\ + movs r3, 0\n\ + movs r1, 0xA1\n\ + lsls r1, 1\n\ + adds r5, r4, r1\n\ +_081D25E0:\n\ + adds r0, r2, 0\n\ + subs r0, 0x38\n\ + lsls r0, 2\n\ + adds r1, r6, r0\n\ + strh r3, [r1]\n\ + adds r0, r5, r0\n\ + strh r3, [r0]\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x79\n\ + bls _081D25E0\n\ +_081D25F8:\n\ + movs r2, 0x38\n\ + movs r3, 0xA0\n\ + lsls r3, 1\n\ + adds r5, r4, r3\n\ + movs r0, 0xA1\n\ + lsls r0, 1\n\ + adds r4, r0\n\ + movs r6, 0x9B\n\ +_081D2608:\n\ + adds r0, r2, 0\n\ + subs r0, 0x38\n\ + lsls r1, r0, 2\n\ + adds r3, r5, r1\n\ + ldrh r0, [r3]\n\ + cmp r0, 0\n\ + bne _081D2620\n\ + adds r0, r4, r1\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _081D2620\n\ + strh r6, [r3]\n\ +_081D2620:\n\ + adds r0, r2, 0x1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0x79\n\ + bls _081D2608\n\ + add sp, 0x8\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +NAKED +void sub_81D2634(struct UnknownStruct_81D1ED4 *a0) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x8\n\ + adds r4, r0, 0\n\ + movs r0, 0x97\n\ + lsls r0, 1\n\ + adds r2, r4, r0\n\ + movs r3, 0x9F\n\ + lsls r3, 1\n\ + adds r1, r4, r3\n\ + ldrh r0, [r2]\n\ + ldrh r5, [r1]\n\ + cmp r0, r5\n\ + bcs _081D266E\n\ + adds r6, r0, 0\n\ + movs r0, 0x92\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + subs r3, 0x12\n\ + adds r2, r4, r3\n\ + movs r5, 0x9E\n\ + lsls r5, 1\n\ + adds r3, r4, r5\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + bl sub_81D2278\n\ + b _081D2690\n\ +_081D266E:\n\ + ldrh r6, [r1]\n\ + movs r0, 0x92\n\ + lsls r0, 2\n\ + adds r1, r4, r0\n\ + movs r3, 0x9E\n\ + lsls r3, 1\n\ + adds r2, r4, r3\n\ + movs r5, 0x96\n\ + lsls r5, 1\n\ + adds r3, r4, r5\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + bl sub_81D2278\n\ +_081D2690:\n\ + movs r0, 0x92\n\ + lsls r0, 2\n\ + adds r5, r4, r0\n\ + movs r1, 0x9E\n\ + lsls r1, 1\n\ + adds r2, r4, r1\n\ + movs r0, 0x9C\n\ + lsls r0, 1\n\ + adds r3, r4, r0\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + str r0, [sp, 0x4]\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + bl sub_81D2278\n\ + cmp r6, 0x38\n\ + ble _081D26C8\n\ + movs r0, 0\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + subs r2, 0x38\n\ +_081D26BC:\n\ + strh r0, [r1]\n\ + strh r0, [r1, 0x2]\n\ + adds r1, 0x4\n\ + subs r2, 0x1\n\ + cmp r2, 0\n\ + bne _081D26BC\n\ +_081D26C8:\n\ + movs r1, 0x97\n\ + lsls r1, 1\n\ + adds r0, r4, r1\n\ + ldrh r2, [r0]\n\ + movs r3, 0xD4\n\ + lsls r3, 2\n\ + adds r0, r4, r3\n\ + ldrh r5, [r0]\n\ + cmp r2, r5\n\ + bgt _081D26F6\n\ + movs r3, 0x9B\n\ + adds r1, r0, 0\n\ + lsls r0, r2, 2\n\ + movs r5, 0xB5\n\ + lsls r5, 1\n\ + adds r0, r5\n\ + adds r0, r4\n\ +_081D26EA:\n\ + strh r3, [r0]\n\ + adds r0, 0x4\n\ + adds r2, 0x1\n\ + ldrh r5, [r1]\n\ + cmp r2, r5\n\ + ble _081D26EA\n\ +_081D26F6:\n\ + movs r1, 0x9D\n\ + lsls r1, 1\n\ + adds r0, r4, r1\n\ + ldrh r0, [r0]\n\ + adds r1, r0, 0x1\n\ + movs r2, 0xD4\n\ + lsls r2, 2\n\ + adds r0, r4, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r1\n\ + bge _081D270E\n\ + adds r0, r1, 0\n\ +_081D270E:\n\ + adds r2, r0, 0\n\ + cmp r2, 0x79\n\ + bgt _081D272C\n\ + movs r1, 0\n\ + lsls r0, r2, 2\n\ + movs r3, 0xB4\n\ + lsls r3, 1\n\ + adds r0, r3\n\ + adds r0, r4\n\ +_081D2720:\n\ + strh r1, [r0]\n\ + strh r1, [r0, 0x2]\n\ + adds r0, 0x4\n\ + adds r2, 0x1\n\ + cmp r2, 0x79\n\ + ble _081D2720\n\ +_081D272C:\n\ + movs r3, 0\n\ + movs r5, 0x92\n\ + lsls r5, 2\n\ + adds r1, r4, r5\n\ + movs r2, 0x41\n\ +_081D2736:\n\ + ldrh r0, [r1]\n\ + ldrh r4, [r1, 0x2]\n\ + cmp r0, r4\n\ + bcc _081D2742\n\ + strh r3, [r1, 0x2]\n\ + strh r3, [r1]\n\ +_081D2742:\n\ + adds r1, 0x4\n\ + subs r2, 0x1\n\ + cmp r2, 0\n\ + bge _081D2736\n\ + add sp, 0x8\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +NAKED +void sub_81D2754(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1) +{ + // There are some register-renaming issues here. The cause of the problem seems to be that + // GCC tries to save gUnknown_08625410 in a register, instead of loading the constant repeatedly. + // But this is one too many things to keep track of, so GCC is forced to use the stack. +#ifdef NONMATCHING + u8* v1; + u8 v2; + u8 v3; + s8 v4; + u16 v5; + + v1 = arg0->unk0[0]; + v2 = gUnknown_08625410[*v1]; + v1++; + arg1[0].unk0 = 0x9B; + arg1[0].unk2 = 0x5B - v2; + for (v3 = 0x40, v4 = 0, v5 = 1; v5 < 5; v5++) + { + v3 += 0x33; + v4--; + if (v4 < 0) + { + v4 = 4; + } + if (v4 == 2) + { + v3++; + } + + v2 = gUnknown_08625410[*v1]; + v1++; + arg1[v4].unk0 = ((gSineTable[v3 + 0x40] * v2) >> 8) + 0x9B; + arg1[v4].unk2 = ((gSineTable[v3] * v2) >> 8) - 0x5B; + if (v4 <= 2 && (v2 != 0x20 || v4 != 2)) + { + arg1[v4].unk0 = arg1[v4].unk0 + 1; + } + } +#else + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + adds r6, r0, 0\n\ + mov r8, r1\n\ + ldr r1, =gUnknown_08625410\n\ + ldrb r0, [r6]\n\ + adds r0, r1\n\ + ldrb r2, [r0]\n\ + adds r6, 0x1\n\ + movs r0, 0x9B\n\ + mov r3, r8\n\ + strh r0, [r3]\n\ + movs r0, 0x5B\n\ + subs r0, r2\n\ + strh r0, [r3, 0x2]\n\ + movs r7, 0x40\n\ + movs r0, 0\n\ + mov r12, r0\n\ + movs r2, 0x1\n\ + mov r9, r2\n\ + ldr r3, =gSineTable\n\ + mov r10, r3\n\ +_081D2786:\n\ + adds r0, r7, 0\n\ + adds r0, 0x33\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + mov r1, r12\n\ + lsls r0, r1, 24\n\ + movs r2, 0xFF\n\ + lsls r2, 24\n\ + adds r0, r2\n\ + lsrs r3, r0, 24\n\ + mov r12, r3\n\ + cmp r0, 0\n\ + bge _081D27A4\n\ + movs r0, 0x4\n\ + mov r12, r0\n\ +_081D27A4:\n\ + mov r1, r12\n\ + lsls r0, r1, 24\n\ + asrs r4, r0, 24\n\ + cmp r4, 0x2\n\ + bne _081D27B4\n\ + adds r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ +_081D27B4:\n\ + ldrb r0, [r6]\n\ + ldr r2, =gUnknown_08625410\n\ + adds r0, r2\n\ + ldrb r2, [r0]\n\ + adds r6, 0x1\n\ + lsls r0, r4, 2\n\ + mov r1, r8\n\ + adds r3, r0, r1\n\ + adds r0, r7, 0\n\ + adds r0, 0x40\n\ + lsls r0, 1\n\ + add r0, r10\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + muls r0, r2\n\ + asrs r5, r0, 8\n\ + adds r0, r5, 0\n\ + adds r0, 0x9B\n\ + strh r0, [r3]\n\ + lsls r0, r7, 1\n\ + add r0, r10\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + adds r1, r2, 0\n\ + muls r1, r0\n\ + asrs r1, 8\n\ + movs r0, 0x5B\n\ + subs r0, r1\n\ + strh r0, [r3, 0x2]\n\ + cmp r4, 0x2\n\ + bgt _081D2800\n\ + cmp r2, 0x20\n\ + bne _081D27FA\n\ + cmp r4, 0x2\n\ + beq _081D2800\n\ +_081D27FA:\n\ + adds r0, r5, 0\n\ + adds r0, 0x9C\n\ + strh r0, [r3]\n\ +_081D2800:\n\ + mov r0, r9\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + cmp r0, 0x4\n\ + bls _081D2786\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +#endif }
\ No newline at end of file diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 8b4738608..75e8da3f8 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -34,7 +34,6 @@ struct UsePokeblockSubStruct struct UsePokeblockStruct { u8 field_0[0x7C58]; - //u8 field_7C58[0x378]; struct UnknownStruct_81D1ED4 field_7C58; struct UsePokeblockSubStruct info; }; @@ -204,7 +203,7 @@ void sub_8166380(void) gUnknown_0203BC90->field_50++; break; case 11: - sub_81D2754(&gUnknown_0203BCAC->field_7C58, &gUnknown_0203BCAC->field_0[0x7C6C]); + sub_81D2754(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[0]); sub_81D20AC(&gUnknown_0203BCAC->field_7C58); gUnknown_0203BC90->field_50++; break; |