From 2e5fce662a54206f1892742a5e9f529ca0457353 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 15 Feb 2025 14:28:00 +0100 Subject: [PATCH 1/6] sub_80155F0 --- asm/code_8015080.s | 534 ---------------------------------------- include/string_format.h | 2 +- src/code_8015080.c | 226 ++++++++++++++++- 3 files changed, 220 insertions(+), 542 deletions(-) diff --git a/asm/code_8015080.s b/asm/code_8015080.s index a596edda0..621212d7f 100644 --- a/asm/code_8015080.s +++ b/asm/code_8015080.s @@ -5,540 +5,6 @@ .text - thumb_func_start sub_80151C0 -sub_80151C0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r4, _080151FC - movs r0, 0xCC - lsls r0, 1 - movs r1, 0x8 - bl MemoryAlloc - str r0, [r4] - str r5, [r0] - movs r1, 0 - strb r1, [r0, 0x19] - ldr r0, [r4] - strb r1, [r0, 0x18] - ldr r0, [r4] - strb r1, [r0, 0x4] - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0x5 - bhi _0801524C - lsls r0, 2 - ldr r1, _08015200 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080151FC: .4byte gUnknown_203B1FC -_08015200: .4byte _08015204 - .align 2, 0 -_08015204: - .4byte _0801524C - .4byte _0801524C - .4byte _0801524C - .4byte _0801524C - .4byte _0801521C - .4byte _08015234 -_0801521C: - ldr r1, _08015230 - ldr r2, [r1] - movs r0, 0x9 - strb r0, [r2, 0x1A] - ldr r2, [r1] - movs r0, 0x1 - strb r0, [r2, 0x4] - ldr r2, [r1] - movs r0, 0x36 - b _08015258 - .align 2, 0 -_08015230: .4byte gUnknown_203B1FC -_08015234: - ldr r1, _08015248 - ldr r2, [r1] - movs r0, 0x9 - strb r0, [r2, 0x1A] - ldr r2, [r1] - movs r0, 0x1 - strb r0, [r2, 0x4] - ldr r2, [r1] - movs r0, 0x18 - b _08015258 - .align 2, 0 -_08015248: .4byte gUnknown_203B1FC -_0801524C: - ldr r1, _08015374 - ldr r2, [r1] - movs r0, 0x6 - strb r0, [r2, 0x1A] - ldr r2, [r1] - movs r0, 0xA -_08015258: - strb r0, [r2, 0x1B] - mov r8, r1 - mov r0, r8 - ldr r2, [r0] - movs r1, 0x9A - lsls r1, 1 - adds r0, r2, r1 - str r6, [r0] - adds r1, r2, 0 - adds r1, 0xF8 - adds r0, r2, 0 - adds r0, 0xFC - str r0, [r1] - movs r2, 0 - mov r1, r8 - movs r3, 0 -_08015278: - ldr r0, [r1] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r2 - strb r3, [r0] - adds r2, 0x1 - cmp r2, 0x35 - ble _08015278 - ldr r5, _08015374 - ldr r2, [r5] - adds r0, r2, 0 - adds r0, 0xF8 - ldr r0, [r0] - movs r3, 0x9A - lsls r3, 1 - adds r1, r2, r3 - ldr r1, [r1] - ldrb r2, [r2, 0x1B] - bl MemoryCopy8 - movs r2, 0 - ldr r0, [r5] - ldrb r3, [r0, 0x1B] - cmp r2, r3 - bge _080152EA - adds r1, r0, 0 - adds r1, 0xF8 - ldr r0, [r1] - ldrb r0, [r0] - mov r8, r5 - cmp r0, 0 - beq _080152C8 -_080152B8: - adds r2, 0x1 - cmp r2, r3 - bge _080152EA - ldr r0, [r1] - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _080152B8 -_080152C8: - mov r4, r8 - ldr r0, [r4] - ldrb r0, [r0, 0x1B] - cmp r2, r0 - bge _080152EA - mov r1, r8 - movs r3, 0 -_080152D6: - ldr r0, [r1] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r2 - strb r3, [r0] - adds r2, 0x1 - ldr r0, [r1] - ldrb r0, [r0, 0x1B] - cmp r2, r0 - blt _080152D6 -_080152EA: - bl sub_8015F44 - ldr r2, _08015374 - ldr r1, [r2] - strb r0, [r1, 0x1C] - ldr r1, [r2] - ldrb r0, [r1, 0x1C] - ldrb r5, [r1, 0x1B] - cmp r0, r5 - bne _08015302 - subs r0, 0x1 - strb r0, [r1, 0x1C] -_08015302: - movs r6, 0x1 - mov r12, r6 - ldr r6, [r2] - adds r5, r6, 0x6 - ldrh r1, [r6, 0x6] - ldr r0, _08015378 - ands r0, r1 - ldr r1, _0801537C - ands r0, r1 - ldr r2, _08015380 - ands r0, r2 - ldr r1, _08015384 - ands r0, r1 - ldr r1, _08015388 - ands r0, r1 - strh r0, [r6, 0x6] - ldrh r0, [r5, 0x4] - adds r3, r2, 0 - ands r3, r0 - movs r1, 0xF - movs r2, 0xF0 - lsls r2, 8 - ldr r0, _0801538C - ands r3, r0 - orrs r3, r2 - strh r3, [r5, 0x4] - ldrh r0, [r5, 0x2] - movs r4, 0xFE - lsls r4, 8 - ands r4, r0 - movs r0, 0xF0 - orrs r4, r0 - strh r4, [r5, 0x2] - movs r2, 0xF0 - lsls r2, 4 - ldrh r0, [r5, 0x6] - ands r1, r0 - movs r7, 0 - orrs r1, r2 - strh r1, [r5, 0x6] - ldrb r0, [r6, 0x4] - cmp r0, 0 - beq _0801539C - ldr r0, _08015390 - ands r4, r0 - ldr r1, _08015394 - movs r0, 0xFC - lsls r0, 8 - ands r3, r0 - orrs r3, r1 - strh r3, [r5, 0x4] - ldr r0, _08015398 - ands r4, r0 - strh r4, [r5, 0x2] - mov r7, r12 - b _080153BE - .align 2, 0 -_08015374: .4byte gUnknown_203B1FC -_08015378: .4byte 0x0000feff -_0801537C: .4byte 0x0000fdff -_08015380: .4byte 0x0000f3ff -_08015384: .4byte 0x0000efff -_08015388: .4byte 0x0000dfff -_0801538C: .4byte 0x00000fff -_08015390: .4byte 0x0000c1ff -_08015394: .4byte 0x000003f6 -_08015398: .4byte 0x00003fff -_0801539C: - movs r1, 0x80 - lsls r1, 6 - ldr r0, _08015468 - ands r4, r0 - orrs r4, r1 - orrs r4, r7 - movs r1, 0xFC - lsls r1, 2 - movs r0, 0xFC - lsls r0, 8 - ands r3, r0 - orrs r3, r1 - strh r3, [r5, 0x4] - ldr r0, _0801546C - ands r4, r0 - strh r4, [r5, 0x2] - mov r1, r12 -_080153BE: - movs r2, 0x80 - lsls r2, 7 - ldrh r1, [r6, 0x6] - ands r0, r1 - orrs r0, r2 - strh r0, [r6, 0x6] - ldr r5, _08015470 - ldr r1, [r5] - movs r0, 0x4 - strb r0, [r1, 0x16] - ldr r4, [r5] - adds r6, r4, 0 - adds r6, 0xE - ldrh r1, [r4, 0xE] - ldr r0, _08015474 - ands r0, r1 - ldr r1, _08015478 - ands r0, r1 - ldr r3, _0801547C - ands r0, r3 - ldr r1, _08015480 - ands r0, r1 - ldr r1, _08015484 - ands r0, r1 - ldr r1, _0801546C - ands r0, r1 - strh r0, [r4, 0xE] - movs r2, 0xFD - lsls r2, 2 - ldrh r1, [r6, 0x4] - movs r0, 0xFC - lsls r0, 8 - ands r0, r1 - orrs r0, r2 - ands r0, r3 - movs r2, 0xF - movs r3, 0xF0 - lsls r3, 8 - ldr r1, _08015488 - ands r0, r1 - orrs r0, r3 - strh r0, [r6, 0x4] - movs r0, 0xF0 - strh r0, [r6, 0x2] - subs r1, 0xFF - ldrh r0, [r6, 0x6] - ands r2, r0 - movs r0, 0 - orrs r2, r1 - strh r2, [r6, 0x6] - strb r0, [r4, 0x17] - mov r8, r5 - ldr r2, _0801548C - mov r10, r2 - mov r12, r8 - movs r3, 0x9C - lsls r3, 1 - mov r9, r3 - ldr r4, _08015490 - movs r3, 0 - movs r2, 0x3 -_08015438: - mov r5, r12 - ldr r1, [r5] - adds r1, r3 - add r1, r9 - adds r0, r4, 0 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - adds r3, 0x18 - subs r2, 0x1 - cmp r2, 0 - bge _08015438 - mov r6, r8 - ldr r1, [r6] - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08015498 - movs r7, 0xA8 - lsls r7, 1 - adds r1, r7 - ldr r0, _08015494 - b _080154A0 - .align 2, 0 -_08015468: .4byte 0x0000c1ff -_0801546C: .4byte 0x00003fff -_08015470: .4byte gUnknown_203B1FC -_08015474: .4byte 0x0000feff -_08015478: .4byte 0x0000fdff -_0801547C: .4byte 0x0000f3ff -_08015480: .4byte 0x0000efff -_08015484: .4byte 0x0000dfff -_08015488: .4byte 0x00000fff -_0801548C: .4byte gUnknown_80DB550 -_08015490: .4byte gUnknown_80DB538 -_08015494: .4byte gUnknown_80DB580 -_08015498: - movs r0, 0xA8 - lsls r0, 1 - adds r1, r0 - ldr r0, _080154EC -_080154A0: - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - mov r0, r8 - ldr r1, [r0] - movs r4, 0x9C - lsls r4, 1 - adds r1, r4 - mov r0, r10 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r6,r7} - stm r1!, {r2,r6,r7} - bl ResetUnusedInputStruct - mov r3, r8 - ldr r0, [r3] - adds r0, r4 - movs r1, 0x1 - movs r2, 0x1 - bl xxx_call_save_unk_text_struct_800641C - movs r0, 0x1 - bl sub_8015A08 - bl sub_8015C1C - bl sub_8015F84 - movs r0, 0x1 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080154EC: .4byte gUnknown_80DB568 - thumb_func_end sub_80151C0 - - thumb_func_start sub_80154F0 -sub_80154F0: - push {r4,r5,lr} - ldr r4, _08015558 - ldr r1, [r4] - ldrb r0, [r1, 0x16] - adds r0, 0x1 - strb r0, [r1, 0x16] - bl sub_80157D8 - ldr r2, [r4] - ldrb r1, [r2, 0x16] - movs r5, 0x8 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0801551C - adds r0, r2, 0x6 - movs r1, 0x80 - lsls r1, 1 - movs r2, 0 - movs r3, 0 - bl AddSprite -_0801551C: - ldr r1, [r4] - ldrb r0, [r1, 0x17] - adds r0, 0x1 - strb r0, [r1, 0x17] - bl sub_80158BC - ldr r2, [r4] - ldrb r1, [r2, 0x17] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _08015544 - adds r0, r2, 0 - adds r0, 0xE - movs r1, 0x80 - lsls r1, 1 - movs r2, 0 - movs r3, 0 - bl AddSprite -_08015544: - bl sub_8012AE8 - subs r0, 0x1 - cmp r0, 0x5 - bhi _080155E2 - lsls r0, 2 - ldr r1, _0801555C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08015558: .4byte gUnknown_203B1FC -_0801555C: .4byte _08015560 - .align 2, 0 -_08015560: - .4byte _080155C0 - .4byte _080155C6 - .4byte _080155E2 - .4byte _080155D4 - .4byte _08015578 - .4byte _0801558C -_08015578: - ldr r0, _08015588 - ldr r1, [r0] - ldrb r0, [r1, 0x1C] - cmp r0, 0 - beq _080155B8 - subs r0, 0x1 - b _080155A8 - .align 2, 0 -_08015588: .4byte gUnknown_203B1FC -_0801558C: - ldr r5, _080155B4 - ldr r0, [r5] - ldrb r4, [r0, 0x1C] - ldrb r0, [r0, 0x1B] - subs r0, 0x1 - cmp r4, r0 - beq _080155B8 - bl sub_8015F44 - cmp r4, r0 - bge _080155B8 - ldr r1, [r5] - ldrb r0, [r1, 0x1C] - adds r0, 0x1 -_080155A8: - strb r0, [r1, 0x1C] - movs r0, 0x3 - bl PlayMenuSoundEffect - b _080155E2 - .align 2, 0 -_080155B4: .4byte gUnknown_203B1FC -_080155B8: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _080155E2 -_080155C0: - bl sub_801560C - b _080155E4 -_080155C6: - bl sub_8015748 - lsls r0, 24 - cmp r0, 0 - beq _080155E2 - movs r0, 0x2 - b _080155E4 -_080155D4: - movs r0, 0x3 - bl PlayMenuSoundEffect - ldr r0, _080155EC - ldr r1, [r0] - movs r0, 0x5 - strb r0, [r1, 0x1A] -_080155E2: - movs r0, 0 -_080155E4: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080155EC: .4byte gUnknown_203B1FC - thumb_func_end sub_80154F0 - - thumb_func_start sub_80155F0 -sub_80155F0: - push {r4,lr} - ldr r4, _08015608 - ldr r0, [r4] - cmp r0, 0 - beq _08015602 - bl MemoryFree - movs r0, 0 - str r0, [r4] -_08015602: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08015608: .4byte gUnknown_203B1FC - thumb_func_end sub_80155F0 - thumb_func_start sub_801560C sub_801560C: push {r4-r6,lr} diff --git a/include/string_format.h b/include/string_format.h index ad038c796..0201dae8d 100644 --- a/include/string_format.h +++ b/include/string_format.h @@ -11,7 +11,7 @@ void sub_80140DC(void); void sub_8014114(void); s32 sub_80144A4(s32 *); -void sub_80151C0(u32, u8 *); +u32 sub_80151C0(u32, u8 *); u32 sub_80154F0(void); void sub_80155F0(void); diff --git a/src/code_8015080.c b/src/code_8015080.c index f90e6288a..90597b7ed 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -5,6 +5,8 @@ #include "memory.h" #include "menu_input.h" #include "text.h" +#include "sprite.h" +#include "code_80118A4.h" struct unkStruct_203B1F8 { @@ -46,7 +48,6 @@ const UnkTextStruct2 gUnknown_80DAFA0 = { bool8 sub_8015080(u8 *buffer, const MenuItem *menuItems) { - s32 index; gUnknown_203B1F8 = MemoryAlloc(sizeof(struct unkStruct_203B1F8), 8); @@ -72,13 +73,11 @@ bool8 sub_8015080(u8 *buffer, const MenuItem *menuItems) u32 sub_801516C(void) { - if(!sub_8012FD8(&gUnknown_203B1F8->unk4)) - { + if(!sub_8012FD8(&gUnknown_203B1F8->unk4)) { sub_8013114(&gUnknown_203B1F8->unk4, &gUnknown_203B1F8->menuAction); return 3; } - else - { + else { return 0; } } @@ -90,9 +89,222 @@ u32 sub_8015198(void) void sub_80151A4(void) { - if(gUnknown_203B1F8) - { + if(gUnknown_203B1F8) { MemoryFree(gUnknown_203B1F8); gUnknown_203B1F8 = NULL; } } + +struct unkStruct_203B1FC +{ + // size: 0x198 + u32 unk0; + u8 unk4; + // Note: These had to be declared like these, because SpriteOAM is aligned by 4 and these aren't. Makes you think if SpriteOAM is actually a struct, and not just an array of 4 u16s. + u16 sprite1Attribs[4]; + u16 sprite2Attribs[4]; + u8 unk16; + u8 unk17; + u8 unk18; + u8 unk19; + u8 unk1A; + u8 unk1B; + u8 unk1C; + u8 fill1D[0x8A - 0x1D]; + s16 unk8A[2]; + u8 fill8E[0xF8 - 0x8E]; + u8 *unkF8; + u8 unkFC[56]; + u8 *unk134; + UnkTextStruct2 unk138[4]; +}; +extern struct unkStruct_203B1FC *gUnknown_203B1FC; + +extern UnkTextStruct2 gUnknown_80DB550; +extern UnkTextStruct2 gUnknown_80DB568; +extern UnkTextStruct2 gUnknown_80DB580; +extern UnkTextStruct2 gUnknown_80DB538; +s32 sub_8015F44(void); +void sub_8015A08(u32); +void sub_8015C1C(); +void sub_8015F84(); +void sub_80157D8(void); +void sub_80158BC(void); + +u32 sub_80151C0(u32 r0, u8 *buffer) +{ + SpriteOAM *sprite; + s32 index; + s32 i; + + gUnknown_203B1FC = MemoryAlloc(sizeof(*gUnknown_203B1FC), 8); + gUnknown_203B1FC->unk0 = r0; + gUnknown_203B1FC->unk19 = 0; + gUnknown_203B1FC->unk18 = 0; + gUnknown_203B1FC->unk4 = 0; + + switch(gUnknown_203B1FC->unk0) { + case 4: + gUnknown_203B1FC->unk1A = 9; + gUnknown_203B1FC->unk4 = 1; + gUnknown_203B1FC->unk1B = 0x36; + break; + case 5: + gUnknown_203B1FC->unk1A = 9; + gUnknown_203B1FC->unk4 = 1; + gUnknown_203B1FC->unk1B = 0x18; + break; + case 0: + case 1: + case 3: + default: + gUnknown_203B1FC->unk1A = 6; + gUnknown_203B1FC->unk1B = 0xA; + break; + } + + gUnknown_203B1FC->unk134 = buffer; + gUnknown_203B1FC->unkF8 = gUnknown_203B1FC->unkFC; + + for (i = 0; i < 0x36; i++) { + gUnknown_203B1FC->unkF8[i] = 0; + } + MemoryCopy8(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk134, gUnknown_203B1FC->unk1B); + + for (i = 0; i < gUnknown_203B1FC->unk1B; i++) { + if (gUnknown_203B1FC->unkF8[i] == 0) { + break; + } + } + for (; i < gUnknown_203B1FC->unk1B; i++) { + gUnknown_203B1FC->unkF8[i] = 0; + } + + gUnknown_203B1FC->unk1C = sub_8015F44(); + if (gUnknown_203B1FC->unk1C == gUnknown_203B1FC->unk1B) { + gUnknown_203B1FC->unk1C--; + } + + SpriteSetAffine1((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetAffine2((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetObjMode((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetMosaic((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetBpp((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetPriority((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetPalNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 15); + SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, DISPLAY_WIDTH); + SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, DISPLAY_WIDTH); + + if (gUnknown_203B1FC->unk4 != 0) { + SpriteSetMatrixNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetTileNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x3F6); + SpriteSetSize((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetShape((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 1); + } + else { + SpriteSetMatrixNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 16); + SpriteSetTileNum((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x3F0); + SpriteSetSize((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0); + SpriteSetShape((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 1); + } + + gUnknown_203B1FC->unk16 = 4; + + sprite = (SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs; + + SpriteSetAffine1(sprite, 0); + SpriteSetAffine2(sprite, 0); + SpriteSetObjMode(sprite, 0); + SpriteSetMosaic(sprite, 0); + SpriteSetBpp(sprite, 0); + SpriteSetShape(sprite, 0); + SpriteSetTileNum(sprite, 0x3F4); + SpriteSetPriority(sprite, 0); + SpriteSetPalNum(sprite, 15); + SpriteSetMatrixNum(sprite, 0); + SpriteSetSize(sprite, 0); + SpriteSetX(sprite, DISPLAY_WIDTH); + SpriteSetY(sprite, DISPLAY_WIDTH); + + gUnknown_203B1FC->unk17 = 0; + + for (index = 0; index < 4; index++) { + gUnknown_203B1FC->unk138[index] = gUnknown_80DB538; + } + + if(gUnknown_203B1FC->unk4 != 0) { + gUnknown_203B1FC->unk138[1] = gUnknown_80DB580; + } + else { + gUnknown_203B1FC->unk138[1] = gUnknown_80DB568; + } + gUnknown_203B1FC->unk138[0] = gUnknown_80DB550; + + ResetUnusedInputStruct(); + xxx_call_save_unk_text_struct_800641C(gUnknown_203B1FC->unk138, 1, 1); + + sub_8015A08(1); + sub_8015C1C(); + sub_8015F84(); + return 1; +} + +u32 sub_801560C(void); +bool8 sub_8015748(void); + +u32 sub_80154F0(void) +{ + gUnknown_203B1FC->unk16++; + sub_80157D8(); + if (gUnknown_203B1FC->unk16 & 8) { + AddSprite((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, 0x100, NULL, NULL); + } + + gUnknown_203B1FC->unk17++; + sub_80158BC(); + if (gUnknown_203B1FC->unk17 & 8) { + AddSprite((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, 0x100, NULL, NULL); + } + + switch (sub_8012AE8()) { + case 5: + if (gUnknown_203B1FC->unk1C == 0) { + PlayMenuSoundEffect(2); + } + else { + gUnknown_203B1FC->unk1C--; + PlayMenuSoundEffect(3); + } + break; + case 6: + if (gUnknown_203B1FC->unk1C != gUnknown_203B1FC->unk1B - 1 && gUnknown_203B1FC->unk1C < sub_8015F44()) { + gUnknown_203B1FC->unk1C++; + PlayMenuSoundEffect(3); + } + else { + PlayMenuSoundEffect(2); + } + break; + case 1: + return sub_801560C(); + case 2: + if (sub_8015748()) { + return 2; + } + break; + case 4: + PlayMenuSoundEffect(3); + gUnknown_203B1FC->unk1A = 5; + break; + } + + return 0; +} + +void sub_80155F0(void) +{ + if (gUnknown_203B1FC != NULL) { + MemoryFree(gUnknown_203B1FC); + gUnknown_203B1FC = NULL; + } +} From a9fadaf73da42d33ad70180d510a6a227333550b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 15 Feb 2025 20:19:45 +0100 Subject: [PATCH 2/6] sub_80157D8 --- asm/code_8015080.s | 351 --------------------------------------------- src/code_8015080.c | 147 ++++++++++++++++++- 2 files changed, 146 insertions(+), 352 deletions(-) diff --git a/asm/code_8015080.s b/asm/code_8015080.s index 621212d7f..43e1d7e94 100644 --- a/asm/code_8015080.s +++ b/asm/code_8015080.s @@ -5,357 +5,6 @@ .text - thumb_func_start sub_801560C -sub_801560C: - push {r4-r6,lr} - ldr r3, _08015640 - ldr r4, _08015644 - ldr r5, [r4] - ldrb r0, [r5, 0x1A] - lsls r1, r0, 1 - adds r1, r0 - ldrb r2, [r5, 0x19] - lsls r0, r2, 8 - subs r0, r2 - adds r0, r1 - lsls r0, 2 - adds r3, 0x8 - adds r0, r3 - ldr r6, [r0] - movs r0, 0x83 - lsls r0, 1 - cmp r6, r0 - beq _0801567A - cmp r6, r0 - bgt _08015648 - subs r0, 0x1 - cmp r6, r0 - beq _0801566C - b _080156BC - .align 2, 0 -_08015640: .4byte gUnknown_80DB0F8 -_08015644: .4byte gUnknown_203B1FC -_08015648: - ldr r0, _08015668 - cmp r6, r0 - bne _080156BC - movs r1, 0 - ldrb r0, [r5, 0x18] - cmp r0, 0 - bne _08015658 - movs r1, 0x1 -_08015658: - strb r1, [r5, 0x18] - movs r0, 0x4 - bl PlayMenuSoundEffect - movs r0, 0 - bl sub_8015A08 - b _0801573E - .align 2, 0 -_08015668: .4byte 0x00000107 -_0801566C: - bl sub_8015748 - lsls r0, 24 - cmp r0, 0 - beq _0801573E - movs r0, 0x2 - b _08015740 -_0801567A: - bl sub_8015F44 - cmp r0, 0 - beq _080156D4 - ldr r0, [r4] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08015696 - bl sub_8015F44 - ldr r1, [r4] - ldrb r1, [r1, 0x1B] - cmp r0, r1 - bne _080156D4 -_08015696: - movs r0, 0 - bl PlayMenuSoundEffect - ldr r0, _080156B8 - ldr r2, [r0] - movs r1, 0x9A - lsls r1, 1 - adds r0, r2, r1 - ldr r0, [r0] - adds r1, r2, 0 - adds r1, 0xF8 - ldr r1, [r1] - ldrb r2, [r2, 0x1B] - bl MemoryCopy8 - movs r0, 0x3 - b _08015740 - .align 2, 0 -_080156B8: .4byte gUnknown_203B1FC -_080156BC: - ldr r0, [r4] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _080156DC - lsls r0, r6, 24 - lsrs r0, 24 - bl sub_803D0F0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _080156DC -_080156D4: - movs r0, 0x2 - bl PlayMenuSoundEffect - b _0801573E -_080156DC: - ldr r0, _08015728 - ldr r3, [r0] - ldrb r1, [r3, 0x18] - adds r4, r0, 0 - cmp r1, 0x1 - bne _0801570A - ldrb r0, [r3, 0x1B] - subs r2, r0, 0x2 - ldrb r3, [r3, 0x1C] - cmp r2, r3 - blt _0801570A - adds r3, r4, 0 -_080156F4: - ldr r0, [r3] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r2 - ldrb r1, [r0] - strb r1, [r0, 0x1] - subs r2, 0x1 - ldr r0, [r3] - ldrb r0, [r0, 0x1C] - cmp r2, r0 - bge _080156F4 -_0801570A: - ldr r0, [r4] - ldrb r1, [r0, 0x1C] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r1 - strb r6, [r0] - ldr r1, [r4] - ldrb r2, [r1, 0x1C] - ldrb r0, [r1, 0x1B] - subs r0, 0x1 - cmp r2, r0 - bge _0801572C - adds r0, r2, 0x1 - strb r0, [r1, 0x1C] - b _08015730 - .align 2, 0 -_08015728: .4byte gUnknown_203B1FC -_0801572C: - movs r0, 0x5 - strb r0, [r1, 0x1A] -_08015730: - movs r0, 0 - bl PlayMenuSoundEffect - bl sub_8015C1C - bl sub_8015F84 -_0801573E: - movs r0, 0 -_08015740: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_801560C - - thumb_func_start sub_8015748 -sub_8015748: - push {r4,lr} - ldr r4, _0801576C - ldr r2, [r4] - ldrb r1, [r2, 0x1C] - adds r0, r2, 0 - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r1 - ldrb r3, [r0] - cmp r3, 0 - bne _08015790 - cmp r1, 0 - bne _08015770 - movs r0, 0x2 - bl PlayMenuSoundEffect - movs r0, 0x1 - b _080157CE - .align 2, 0 -_0801576C: .4byte gUnknown_203B1FC -_08015770: - subs r0, r1, 0x1 - strb r0, [r2, 0x1C] - ldr r0, [r4] - ldrb r1, [r0, 0x1C] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r1 - strb r3, [r0] - movs r0, 0x1 - bl PlayMenuSoundEffect - bl sub_8015C1C - bl sub_8015F84 - b _080157CC -_08015790: - bl sub_8015F44 - subs r3, r0, 0x1 - ldr r0, [r4] - ldrb r2, [r0, 0x1C] - cmp r2, r3 - bge _080157B0 -_0801579E: - ldr r0, [r4] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r2 - ldrb r1, [r0, 0x1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, r3 - blt _0801579E -_080157B0: - ldr r0, _080157D4 - ldr r0, [r0] - adds r0, 0xF8 - ldr r0, [r0] - adds r0, r3 - movs r1, 0 - strb r1, [r0] - movs r0, 0x1 - bl PlayMenuSoundEffect - bl sub_8015C1C - bl sub_8015F84 -_080157CC: - movs r0, 0 -_080157CE: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080157D4: .4byte gUnknown_203B1FC - thumb_func_end sub_8015748 - - thumb_func_start sub_80157D8 -sub_80157D8: - push {r4,r5,lr} - ldr r5, _080157EC - ldr r0, _080157F0 - ldr r0, [r0] - mov r12, r0 - ldr r0, [r0] - cmp r0, 0x4 - bne _080157F8 - ldr r3, _080157F4 - b _080157FE - .align 2, 0 -_080157EC: .4byte gUnknown_2027370 + 0x48 @ gUnknown_2027370[1] -_080157F0: .4byte gUnknown_203B1FC -_080157F4: .4byte gUnknown_80DAFC0 -_080157F8: - cmp r0, 0x5 - bne _0801585C - ldr r3, _08015850 -_080157FE: - mov r1, r12 - ldrb r0, [r1, 0x1C] - lsls r0, 2 - adds r0, r3 - movs r2, 0 - ldrsh r1, [r0, r2] - movs r2, 0 - ldrsh r0, [r5, r2] - lsls r0, 3 - adds r1, r0 - ldr r0, _08015854 - ands r1, r0 - mov r4, r12 - adds r4, 0x6 - ldrh r2, [r4, 0x2] - movs r0, 0xFE - lsls r0, 8 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x2] - mov r1, r12 - ldrb r0, [r1, 0x1C] - lsls r0, 2 - adds r0, r3 - movs r2, 0x2 - ldrsh r1, [r0, r2] - movs r3, 0x2 - ldrsh r0, [r5, r3] - lsls r0, 3 - adds r1, r0 - adds r1, 0x5 - ldr r0, _08015858 - ands r1, r0 - lsls r1, 4 - ldrh r2, [r4, 0x6] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x6] - b _080158B0 - .align 2, 0 -_08015850: .4byte gUnknown_80DB098 -_08015854: .4byte 0x000001ff -_08015858: .4byte 0x00000fff -_0801585C: - mov r0, r12 - ldrb r1, [r0, 0x1C] - lsls r1, 1 - mov r2, r12 - adds r2, 0x1E - adds r2, r1 - adds r0, 0x8A - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - ldrh r2, [r2] - adds r1, r2 - movs r2, 0 - ldrsh r0, [r5, r2] - lsls r0, 3 - adds r0, 0x1E - adds r1, r0 - lsls r1, 23 - lsrs r1, 23 - mov r3, r12 - adds r3, 0x6 - ldrh r2, [r3, 0x2] - movs r0, 0xFE - lsls r0, 8 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x2] - movs r0, 0x2 - ldrsh r1, [r5, r0] - lsls r1, 3 - adds r1, 0x22 - ldr r0, _080158B8 - ands r1, r0 - lsls r1, 4 - ldrh r2, [r3, 0x6] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x6] -_080158B0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080158B8: .4byte 0x00000fff - thumb_func_end sub_80157D8 - thumb_func_start sub_80158BC sub_80158BC: push {r4-r6,lr} diff --git a/src/code_8015080.c b/src/code_8015080.c index 90597b7ed..cef6704c9 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -7,6 +7,8 @@ #include "text.h" #include "sprite.h" #include "code_80118A4.h" +#include "code_803D0D8.h" +#include "text.h" struct unkStruct_203B1F8 { @@ -110,7 +112,7 @@ struct unkStruct_203B1FC u8 unk1A; u8 unk1B; u8 unk1C; - u8 fill1D[0x8A - 0x1D]; + u16 unk1E[(0x8A - 0x1E) / 2]; s16 unk8A[2]; u8 fill8E[0xF8 - 0x8E]; u8 *unkF8; @@ -308,3 +310,146 @@ void sub_80155F0(void) gUnknown_203B1FC = NULL; } } + +struct Struct80DB0F8 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + s32 unk8; +}; + +extern const struct Struct80DB0F8 gUnknown_80DB0F8[][85]; + +u32 sub_801560C(void) +{ + s32 var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk8; + + switch (var) { + case 0x107: + gUnknown_203B1FC->unk18 = (gUnknown_203B1FC->unk18 == 0); + PlayMenuSoundEffect(4); + sub_8015A08(0); + break; + case 0x105: + if (sub_8015748()) { + return 2; + } + break; + case 0x106: + if (sub_8015F44() == 0 || (gUnknown_203B1FC->unk4 != 0 && sub_8015F44() != gUnknown_203B1FC->unk1B)) { + PlayMenuSoundEffect(2); + } + else { + PlayMenuSoundEffect(0); + MemoryCopy8(gUnknown_203B1FC->unk134, gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B); + return 3; + } + break; + default: + if (gUnknown_203B1FC->unk4 != 0 && sub_803D0F0(var) == 0xFF) { + PlayMenuSoundEffect(2); + } + else { + if (gUnknown_203B1FC->unk18 == 1) { + s32 i; + for (i = gUnknown_203B1FC->unk1B - 2; i >= gUnknown_203B1FC->unk1C; i--) { + u8 *ptr = &gUnknown_203B1FC->unkF8[i]; + ptr[1] = ptr[0]; + } + } + + gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C] = var; + if (gUnknown_203B1FC->unk1C < gUnknown_203B1FC->unk1B - 1) { + gUnknown_203B1FC->unk1C++; + } + else { + gUnknown_203B1FC->unk1A = 5; + } + + PlayMenuSoundEffect(0); + sub_8015C1C(); + sub_8015F84(); + } + break; + } + + return 0; +} + +bool8 sub_8015748(void) +{ + u32 val = gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C]; + + if (val == 0) { + if (gUnknown_203B1FC->unk1C == 0) { + PlayMenuSoundEffect(2); + return TRUE; + } + else { + gUnknown_203B1FC->unk1C--; + gUnknown_203B1FC->unkF8[gUnknown_203B1FC->unk1C] = val; + PlayMenuSoundEffect(1); + sub_8015C1C(); + sub_8015F84(); + } + } + else { + s32 i, n; + + n = sub_8015F44() - 1; + for (i = gUnknown_203B1FC->unk1C; i < n; i++) { + u8 *ptr = &gUnknown_203B1FC->unkF8[i]; + ptr[0] = ptr[1]; + } + gUnknown_203B1FC->unkF8[n] = 0; + PlayMenuSoundEffect(1); + sub_8015C1C(); + sub_8015F84(); + } + + return FALSE; +} + +extern const DungeonPos gUnknown_80DB098[]; +extern const DungeonPos gUnknown_80DAFC0[]; + +void sub_80157D8(void) +{ + UnkTextStruct1 *txtPtr = &gUnknown_2027370[1]; + + // Note: for cases 4 and 5, the code is identical except for different position structs. + if (gUnknown_203B1FC->unk0 == 4) { + s32 x, y; + + x = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].x + (txtPtr->unk0 * 8); + SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x); + + y = gUnknown_80DAFC0[gUnknown_203B1FC->unk1C].y + (txtPtr->unk2 * 8) + 5; + SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); + } + else if (gUnknown_203B1FC->unk0 == 5) { + s32 x, y; + + x = gUnknown_80DB098[gUnknown_203B1FC->unk1C].x + (txtPtr->unk0 * 8); + SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, x); + + y = gUnknown_80DB098[gUnknown_203B1FC->unk1C].y + (txtPtr->unk2 * 8) + 5; + SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); + } + else { + s32 x, y; + + x = gUnknown_203B1FC->unk1E[gUnknown_203B1FC->unk1C] + (gUnknown_203B1FC->unk8A[gUnknown_203B1FC->unk1C] / 2) + 30 + (txtPtr->unk0 * 8); + SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, (u16) x); + + y = (txtPtr->unk2 * 8) + 34; + SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite1Attribs, y); + } +} + From ddca6db92e4f3e534e56b4a53624f09cdbed2738 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 15 Feb 2025 21:49:05 +0100 Subject: [PATCH 3/6] code_8015080 decompiled --- asm/code_8015080.s | 843 --------------------------------------------- ld_script.txt | 1 - src/code_8015080.c | 249 ++++++++++++- 3 files changed, 242 insertions(+), 851 deletions(-) delete mode 100644 asm/code_8015080.s diff --git a/asm/code_8015080.s b/asm/code_8015080.s deleted file mode 100644 index 43e1d7e94..000000000 --- a/asm/code_8015080.s +++ /dev/null @@ -1,843 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80158BC -sub_80158BC: - push {r4-r6,lr} - ldr r6, _080158D4 - bl sub_8012AE8 - cmp r0, 0x8 - beq _08015908 - cmp r0, 0x8 - bgt _080158D8 - cmp r0, 0x7 - beq _080158E2 - b _08015980 - .align 2, 0 -_080158D4: .4byte gUnknown_2027370 -_080158D8: - cmp r0, 0x9 - beq _08015930 - cmp r0, 0xA - beq _08015958 - b _08015980 -_080158E2: - ldr r4, _08015900 - ldr r3, _08015904 - ldr r2, [r3] - ldrb r0, [r2, 0x1A] - lsls r1, r0, 1 - adds r1, r0 - ldrb r2, [r2, 0x19] - lsls r0, r2, 8 - subs r0, r2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0] - adds r5, r3, 0 - b _08015988 - .align 2, 0 -_08015900: .4byte gUnknown_80DB0F8 -_08015904: .4byte gUnknown_203B1FC -_08015908: - ldr r4, _08015928 - ldr r3, _0801592C - ldr r2, [r3] - ldrb r0, [r2, 0x1A] - lsls r1, r0, 1 - adds r1, r0 - ldrb r2, [r2, 0x19] - lsls r0, r2, 8 - subs r0, r2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x1] - adds r5, r3, 0 - b _08015988 - .align 2, 0 -_08015928: .4byte gUnknown_80DB0F8 -_0801592C: .4byte gUnknown_203B1FC -_08015930: - ldr r4, _08015950 - ldr r3, _08015954 - ldr r2, [r3] - ldrb r0, [r2, 0x1A] - lsls r1, r0, 1 - adds r1, r0 - ldrb r2, [r2, 0x19] - lsls r0, r2, 8 - subs r0, r2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x2] - adds r5, r3, 0 - b _08015988 - .align 2, 0 -_08015950: .4byte gUnknown_80DB0F8 -_08015954: .4byte gUnknown_203B1FC -_08015958: - ldr r4, _08015978 - ldr r3, _0801597C - ldr r2, [r3] - ldrb r0, [r2, 0x1A] - lsls r1, r0, 1 - adds r1, r0 - ldrb r2, [r2, 0x19] - lsls r0, r2, 8 - subs r0, r2 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x3] - adds r5, r3, 0 - b _08015988 - .align 2, 0 -_08015978: .4byte gUnknown_80DB0F8 -_0801597C: .4byte gUnknown_203B1FC -_08015980: - ldr r1, _080159F8 - ldr r0, [r1] - ldrb r0, [r0, 0x1A] - adds r5, r1, 0 -_08015988: - adds r4, r5, 0 - ldr r1, [r4] - ldrb r2, [r1, 0x1A] - cmp r0, r2 - beq _080159A0 - strb r0, [r1, 0x1A] - movs r0, 0x3 - bl PlayMenuSoundEffect - ldr r1, [r4] - movs r0, 0x8 - strb r0, [r1, 0x17] -_080159A0: - ldr r3, _080159FC - ldr r4, [r5] - ldrb r0, [r4, 0x1A] - lsls r1, r0, 1 - adds r1, r0 - ldrb r2, [r4, 0x19] - lsls r0, r2, 8 - subs r0, r2 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r3, 0 - ldrsh r1, [r6, r3] - lsls r1, 3 - ldrb r2, [r0, 0x4] - adds r1, r2 - subs r1, 0x5 - movs r3, 0x2 - ldrsh r2, [r6, r3] - lsls r2, 3 - ldrb r0, [r0, 0x5] - adds r2, r0 - adds r2, 0x1 - ldr r0, _08015A00 - ands r1, r0 - adds r4, 0xE - ldrh r3, [r4, 0x2] - movs r0, 0xFE - lsls r0, 8 - ands r0, r3 - orrs r0, r1 - strh r0, [r4, 0x2] - ldr r0, _08015A04 - ands r2, r0 - lsls r2, 4 - ldrh r1, [r4, 0x6] - movs r0, 0xF - ands r0, r1 - orrs r0, r2 - strh r0, [r4, 0x6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080159F8: .4byte gUnknown_203B1FC -_080159FC: .4byte gUnknown_80DB0F8 -_08015A00: .4byte 0x000001ff -_08015A04: .4byte 0x00000fff - thumb_func_end sub_80158BC - - thumb_func_start sub_8015A08 -sub_8015A08: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - movs r0, 0 - bl CallPrepareTextbox_8008C54 - movs r0, 0 - bl sub_80073B8 - ldr r3, _08015A68 - ldr r2, _08015A6C - ldr r0, [r2] - ldrb r1, [r0, 0x19] - lsls r0, r1, 8 - subs r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x8 - adds r0, r1 - ldr r4, [r0] - ldr r0, _08015A70 - cmp r4, r0 - bne _08015A3E - b _08015BC0 -_08015A3E: - mov r8, r2 - adds r7, r3, 0 - add r0, sp, 0x14 - mov r10, r0 - movs r6, 0 - mov r9, r6 -_08015A4A: - ldr r0, [r2] - ldrb r1, [r0, 0x19] - lsls r0, r1, 8 - subs r0, r1 - lsls r0, 2 - adds r0, r6, r0 - adds r0, r3 - ldrb r0, [r0, 0x6] - cmp r0, 0x2 - beq _08015AAA - cmp r0, 0x2 - bgt _08015A74 - cmp r0, 0x1 - beq _08015A7A - b _08015A82 - .align 2, 0 -_08015A68: .4byte gUnknown_80DB0F8 -_08015A6C: .4byte gUnknown_203B1FC -_08015A70: .4byte 0x00000109 -_08015A74: - cmp r0, 0x3 - beq _08015A7E - b _08015A82 -_08015A7A: - movs r5, 0x5 - b _08015AAC -_08015A7E: - movs r5, 0x7 - b _08015AAC -_08015A82: - movs r5, 0x7 - mov r1, r8 - ldr r0, [r1] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08015AAC - cmp r4, 0xFF - bgt _08015AA4 - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_803D0F0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _08015AAC - b _08015AAA -_08015AA4: - ldr r0, _08015ADC - cmp r4, r0 - bgt _08015AAC -_08015AAA: - movs r5, 0x2 -_08015AAC: - movs r0, 0x84 - lsls r0, 1 - cmp r4, r0 - beq _08015B9E - subs r0, 0x1 - cmp r4, r0 - bne _08015B04 - mov r2, r8 - ldr r0, [r2] - ldrb r2, [r0, 0x18] - cmp r2, 0 - bne _08015AE4 - ldrb r0, [r0, 0x19] - lsls r1, r0, 8 - subs r1, r0 - lsls r1, 2 - adds r1, r6, r1 - adds r1, r7 - ldrb r0, [r1, 0x4] - adds r0, 0x3 - ldrb r1, [r1, 0x5] - str r2, [sp] - ldr r2, _08015AE0 - b _08015B6A - .align 2, 0 -_08015ADC: .4byte 0x00000101 -_08015AE0: .4byte gUnknown_80DB598 -_08015AE4: - ldrb r0, [r0, 0x19] - lsls r1, r0, 8 - subs r1, r0 - lsls r1, 2 - adds r1, r6, r1 - adds r1, r7 - ldrb r0, [r1, 0x4] - adds r0, 0x3 - ldrb r1, [r1, 0x5] - mov r3, r9 - str r3, [sp] - ldr r2, _08015B00 - b _08015B6A - .align 2, 0 -_08015B00: .4byte gUnknown_80DB5A4 -_08015B04: - cmp r4, 0x20 - bne _08015B34 - add r0, sp, 0x4 - ldr r1, _08015B30 - adds r2, r5, 0 - bl sprintfStatic - mov r1, r8 - ldr r0, [r1] - ldrb r0, [r0, 0x19] - lsls r1, r0, 8 - subs r1, r0 - lsls r1, 2 - adds r1, r6, r1 - adds r1, r7 - ldrb r0, [r1, 0x4] - adds r0, 0x1 - ldrb r1, [r1, 0x5] - mov r2, r9 - str r2, [sp] - add r2, sp, 0x4 - b _08015B6A - .align 2, 0 -_08015B30: .4byte gUnknown_80DB5B0 -_08015B34: - cmp r4, 0xFF - ble _08015B7C - ldr r1, _08015B74 - movs r0, 0xFF - ands r4, r0 - lsls r0, r4, 2 - adds r0, r1 - ldr r3, [r0] - mov r0, r10 - ldr r1, _08015B78 - adds r2, r5, 0 - bl sprintfStatic - mov r3, r8 - ldr r0, [r3] - ldrb r0, [r0, 0x19] - lsls r1, r0, 8 - subs r1, r0 - lsls r1, 2 - adds r1, r6, r1 - adds r1, r7 - ldrb r0, [r1, 0x4] - adds r0, 0x3 - ldrb r1, [r1, 0x5] - mov r2, r9 - str r2, [sp] - mov r2, r10 -_08015B6A: - movs r3, 0 - bl PrintStringOnWindow - b _08015B9E - .align 2, 0 -_08015B74: .4byte gUnknown_80DB4F4 -_08015B78: .4byte gUnknown_80DB5B8 -_08015B7C: - mov r3, r8 - ldr r0, [r3] - ldrb r0, [r0, 0x19] - lsls r1, r0, 8 - subs r1, r0 - lsls r1, 2 - adds r1, r6, r1 - adds r1, r7 - ldrb r0, [r1, 0x4] - ldrb r1, [r1, 0x5] - lsls r2, r4, 24 - lsrs r2, 24 - mov r3, r9 - str r3, [sp] - adds r3, r5, 0 - bl sub_8012C60 -_08015B9E: - adds r6, 0xC - ldr r3, _08015C10 - ldr r2, _08015C14 - ldr r0, [r2] - ldrb r1, [r0, 0x19] - lsls r0, r1, 8 - subs r0, r1 - lsls r0, 2 - adds r0, r6, r0 - adds r1, r3, 0 - adds r1, 0x8 - adds r0, r1 - ldr r4, [r0] - ldr r0, _08015C18 - cmp r4, r0 - beq _08015BC0 - b _08015A4A -_08015BC0: - movs r4, 0xE - str r4, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0xE0 - bl sub_800792C - str r4, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0x47 - movs r3, 0xE0 - bl sub_800792C - str r4, [sp] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0x48 - bl sub_8007A78 - str r4, [sp] - movs r0, 0 - movs r1, 0xDF - movs r2, 0 - movs r3, 0x48 - bl sub_8007A78 - movs r0, 0 - bl sub_80073E0 - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08015C10: .4byte gUnknown_80DB0F8 -_08015C14: .4byte gUnknown_203B1FC -_08015C18: .4byte 0x00000109 - thumb_func_end sub_8015A08 - - thumb_func_start sub_8015C1C -sub_8015C1C: - push {r4,r5,lr} - sub sp, 0x54 - movs r0, 0x1 - bl CallPrepareTextbox_8008C54 - movs r0, 0x1 - bl sub_80073B8 - ldr r0, _08015C74 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08015C78 - movs r4, 0xE - str r4, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0xE0 - bl sub_800792C - str r4, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x37 - movs r3, 0xE0 - bl sub_800792C - str r4, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0x38 - bl sub_8007A78 - str r4, [sp] - movs r0, 0x1 - movs r1, 0xDF - movs r2, 0 - movs r3, 0x38 - bl sub_8007A78 - b _08015CB2 - .align 2, 0 -_08015C74: .4byte gUnknown_203B1FC -_08015C78: - movs r4, 0xE - str r4, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0xB0 - bl sub_800792C - str r4, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x27 - movs r3, 0xB0 - bl sub_800792C - str r4, [sp] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0x28 - bl sub_8007A78 - str r4, [sp] - movs r0, 0x1 - movs r1, 0xAF - movs r2, 0 - movs r3, 0x28 - bl sub_8007A78 -_08015CB2: - ldr r0, _08015CC8 - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0x5 - bhi _08015D50 - lsls r0, 2 - ldr r1, _08015CCC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08015CC8: .4byte gUnknown_203B1FC -_08015CCC: .4byte _08015CD0 - .align 2, 0 -_08015CD0: - .4byte _08015CE8 - .4byte _08015D18 - .4byte _08015CF8 - .4byte _08015D08 - .4byte _08015D28 - .4byte _08015D40 -_08015CE8: - ldr r2, _08015CF4 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x5 - b _08015D32 - .align 2, 0 -_08015CF4: .4byte gUnknown_80DB5C0 -_08015CF8: - ldr r2, _08015D04 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x5 - b _08015D32 - .align 2, 0 -_08015D04: .4byte gUnknown_80DB5D4 -_08015D08: - ldr r2, _08015D14 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x5 - b _08015D32 - .align 2, 0 -_08015D14: .4byte gUnknown_80DB5F8 -_08015D18: - ldr r2, _08015D24 - movs r0, 0 - str r0, [sp] - movs r0, 0x8 - movs r1, 0x5 - b _08015D32 - .align 2, 0 -_08015D24: .4byte gUnknown_80DB61C -_08015D28: - ldr r2, _08015D3C - movs r0, 0 - str r0, [sp] - movs r0, 0x36 - movs r1, 0x2 -_08015D32: - movs r3, 0x1 - bl PrintStringOnWindow - b _08015D50 - .align 2, 0 -_08015D3C: .4byte gUnknown_80DB638 -_08015D40: - ldr r2, _08015D64 - movs r0, 0 - str r0, [sp] - movs r0, 0x30 - movs r1, 0x4 - movs r3, 0x1 - bl PrintStringOnWindow -_08015D50: - ldr r5, _08015D68 - ldr r0, [r5] - ldr r1, [r0] - cmp r1, 0x4 - beq _08015D6C - cmp r1, 0x4 - bcc _08015D88 - cmp r1, 0x5 - beq _08015D7A - b _08015DFE - .align 2, 0 -_08015D64: .4byte gUnknown_80DB638 -_08015D68: .4byte gUnknown_203B1FC -_08015D6C: - adds r0, 0xF8 - ldr r0, [r0] - movs r1, 0x1 - movs r2, 0 - bl sub_8015E10 - b _08015DFE -_08015D7A: - adds r0, 0xF8 - ldr r0, [r0] - movs r1, 0x1 - movs r2, 0 - bl sub_8015EB4 - b _08015DFE -_08015D88: - bl sub_8016028 - adds r3, r0, 0 - movs r0, 0x4 - str r0, [sp] - movs r0, 0x1 - movs r1, 0x26 - movs r2, 0x21 - bl sub_80078A4 - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0xF8 - ldr r0, [r0] - ldrb r1, [r1, 0x1B] - bl sub_8015FEC - adds r4, r0, 0 - bl sub_8016028 - cmp r4, r0 - ble _08015DC0 - ldr r1, _08015DBC - ldr r0, [r5] - b _08015DD0 - .align 2, 0 -_08015DBC: .4byte gUnknown_80DB654 -_08015DC0: - bl sub_8015F44 - ldr r2, [r5] - ldrb r1, [r2, 0x1B] - cmp r0, r1 - bne _08015DE0 - ldr r1, _08015DDC - adds r0, r2, 0 -_08015DD0: - adds r0, 0xF8 - ldr r2, [r0] - add r0, sp, 0x4 - bl sprintfStatic - b _08015DEE - .align 2, 0 -_08015DDC: .4byte gUnknown_80DB65C -_08015DE0: - ldr r1, _08015E0C - adds r0, r2, 0 - adds r0, 0xF8 - ldr r2, [r0] - add r0, sp, 0x4 - bl sprintfStatic -_08015DEE: - movs r0, 0 - str r0, [sp] - movs r0, 0x26 - movs r1, 0x16 - add r2, sp, 0x4 - movs r3, 0x1 - bl PrintStringOnWindow -_08015DFE: - movs r0, 0x1 - bl sub_80073E0 - add sp, 0x54 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08015E0C: .4byte gUnknown_80DB664 - thumb_func_end sub_8015C1C - - thumb_func_start sub_8015E10 -sub_8015E10: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r8, r0 - adds r7, r1, 0 - lsls r2, 16 - asrs r6, r2, 16 - ldr r5, _08015EB0 - movs r4, 0x35 -_08015E24: - movs r0, 0 - ldrsh r1, [r5, r0] - movs r0, 0x2 - ldrsh r2, [r5, r0] - adds r0, r6, 0 - adds r0, 0xB - adds r2, r0 - movs r0, 0x5 - str r0, [sp] - adds r0, r7, 0 - movs r3, 0xB - bl sub_80078A4 - adds r5, 0x4 - subs r4, 0x1 - cmp r4, 0 - bge _08015E24 - movs r4, 0 - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - beq _08015EA4 - mov r5, r8 -_08015E52: - movs r3, 0x7 - cmp r4, 0x4 - ble _08015E7E - movs r3, 0x6 - cmp r4, 0xC - ble _08015E7E - movs r3, 0x7 - cmp r4, 0x11 - ble _08015E7E - cmp r4, 0x16 - ble _08015E7E - movs r3, 0x6 - cmp r4, 0x1E - ble _08015E7E - movs r3, 0x7 - cmp r4, 0x23 - ble _08015E7E - cmp r4, 0x28 - ble _08015E7E - cmp r4, 0x30 - bgt _08015E7E - movs r3, 0x6 -_08015E7E: - ldr r0, _08015EB0 - lsls r1, r4, 2 - adds r1, r0 - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x2 - ldrsh r1, [r1, r2] - adds r1, r6 - ldrb r2, [r5] - str r7, [sp] - bl sub_8012C60 - adds r5, 0x1 - adds r4, 0x1 - cmp r4, 0x35 - bgt _08015EA4 - ldrb r0, [r5] - cmp r0, 0 - bne _08015E52 -_08015EA4: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08015EB0: .4byte gUnknown_80DAFC0 - thumb_func_end sub_8015E10 - - thumb_func_start sub_8015EB4 -sub_8015EB4: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r8, r0 - adds r7, r1, 0 - lsls r2, 16 - asrs r6, r2, 16 - ldr r5, _08015F40 - movs r4, 0x17 -_08015EC8: - movs r0, 0 - ldrsh r1, [r5, r0] - movs r0, 0x2 - ldrsh r2, [r5, r0] - adds r0, r6, 0 - adds r0, 0xB - adds r2, r0 - movs r0, 0x5 - str r0, [sp] - adds r0, r7, 0 - movs r3, 0xC - bl sub_80078A4 - adds r5, 0x4 - subs r4, 0x1 - cmp r4, 0 - bge _08015EC8 - movs r4, 0 - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - beq _08015F34 - mov r5, r8 -_08015EF6: - movs r3, 0x7 - cmp r4, 0x3 - ble _08015F0E - movs r3, 0x6 - cmp r4, 0x7 - ble _08015F0E - movs r3, 0x7 - cmp r4, 0xF - ble _08015F0E - cmp r4, 0x13 - bgt _08015F0E - movs r3, 0x6 -_08015F0E: - ldr r0, _08015F40 - lsls r1, r4, 2 - adds r1, r0 - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x2 - ldrsh r1, [r1, r2] - adds r1, r6 - ldrb r2, [r5] - str r7, [sp] - bl sub_8012C60 - adds r5, 0x1 - adds r4, 0x1 - cmp r4, 0x17 - bgt _08015F34 - ldrb r0, [r5] - cmp r0, 0 - bne _08015EF6 -_08015F34: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08015F40: .4byte gUnknown_80DB098 - thumb_func_end sub_8015EB4 - - .align 2,0 diff --git a/ld_script.txt b/ld_script.txt index 33461a75e..0ec6b938e 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -103,7 +103,6 @@ SECTIONS { src/menu_input.o(.text); src/string_format.o(.text); src/code_8015080.o(.text); - asm/code_8015080.o(.text); src/code_8012A18_1.o(.text); src/code_801602C.o(.text); src/felicity_bank.o(.text); diff --git a/src/code_8015080.c b/src/code_8015080.c index cef6704c9..999b0e6da 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -6,6 +6,7 @@ #include "menu_input.h" #include "text.h" #include "sprite.h" +#include "code_800D090.h" #include "code_80118A4.h" #include "code_803D0D8.h" #include "text.h" @@ -128,10 +129,16 @@ extern UnkTextStruct2 gUnknown_80DB580; extern UnkTextStruct2 gUnknown_80DB538; s32 sub_8015F44(void); void sub_8015A08(u32); -void sub_8015C1C(); +void sub_8015C1C(void); void sub_8015F84(); void sub_80157D8(void); void sub_80158BC(void); +void sub_8015E10(u8 *a0, s32 a1, s32 _a2); +void sub_8015EB4(u8 *a0, s32 a1, s32 _a2); +s32 sub_8016028(void); +s32 sub_8015FEC(u8 *buffer, s32 size); +u32 sub_801560C(void); +bool8 sub_8015748(void); u32 sub_80151C0(u32 r0, u8 *buffer) { @@ -251,9 +258,6 @@ u32 sub_80151C0(u32 r0, u8 *buffer) return 1; } -u32 sub_801560C(void); -bool8 sub_8015748(void); - u32 sub_80154F0(void) { gUnknown_203B1FC->unk16++; @@ -325,6 +329,21 @@ struct Struct80DB0F8 }; extern const struct Struct80DB0F8 gUnknown_80DB0F8[][85]; +extern const DungeonPos gUnknown_80DB098[]; +extern const DungeonPos gUnknown_80DAFC0[]; +extern const u8 gUnknown_80DB598[]; +extern const u8 gUnknown_80DB5A4[]; +extern const u8 gUnknown_80DB5B0[]; +extern const u8 gUnknown_80DB5B8[]; +extern const u8 gUnknown_80DB5C0[]; +extern const u8 gUnknown_80DB5D4[]; +extern const u8 gUnknown_80DB5F8[]; +extern const u8 gUnknown_80DB61C[]; +extern const u8 gUnknown_80DB638[]; +extern const u8 gUnknown_80DB654[]; +extern const u8 gUnknown_80DB65C[]; +extern const u8 gUnknown_80DB664[]; +extern const u8 *const gUnknown_80DB4F4[]; u32 sub_801560C(void) { @@ -416,9 +435,6 @@ bool8 sub_8015748(void) return FALSE; } -extern const DungeonPos gUnknown_80DB098[]; -extern const DungeonPos gUnknown_80DAFC0[]; - void sub_80157D8(void) { UnkTextStruct1 *txtPtr = &gUnknown_2027370[1]; @@ -453,3 +469,222 @@ void sub_80157D8(void) } } +void sub_80158BC(void) +{ + s32 x, y; + UnkTextStruct1 *txtPtr = &gUnknown_2027370[0]; + u32 var; + + switch (sub_8012AE8()) { + case 7: + var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk0; + break; + case 8: + var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk1; + break; + case 9: + var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk2; + break; + case 10: + var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk3; + break; + default: + var = gUnknown_203B1FC->unk1A; + break; + } + + if (var != gUnknown_203B1FC->unk1A) { + gUnknown_203B1FC->unk1A = var; + PlayMenuSoundEffect(3); + gUnknown_203B1FC->unk17 = 8; + } + + x = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk4 + (txtPtr->unk0 * 8) - 5; + y = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk5 + (txtPtr->unk2 * 8) + 1; + SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, x); + SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, y); +} + +void sub_8015A08(u32 unused) +{ + s32 r4; + s32 i; + u8 text1[16]; + u8 text2[16]; + + CallPrepareTextbox_8008C54(0); + sub_80073B8(0); + + for (i = 0; (r4 = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk8) != 0x109; i++) { + s32 r5; + + switch (gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk6) { + case 1: + r5 = 5; + break; + case 2: + r5 = 2; + break; + case 3: + r5 = 7; + break; + default: + r5 = 7; + if (gUnknown_203B1FC->unk4 != 0) { + if (r4 <= 0xFF) { + if (sub_803D0F0(r4) == 0xFF) { + r5 = 2; + } + } + else if (r4 < 0x102) { + r5 = 2; + } + } + break; + } + + if (r4 != 0x108) { + if (r4 == 0x107) { + if (gUnknown_203B1FC->unk18 == 0) { + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, gUnknown_80DB598, 0, '\0'); + } + else { + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, gUnknown_80DB5A4, 0, '\0'); + } + } + else if (r4 == 0x20) { + sprintfStatic(text1, gUnknown_80DB5B0, r5); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 1, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, text1, 0, '\0'); + } + else if (r4 > 0xFF) { + sprintfStatic(text2, gUnknown_80DB5B8, r5, gUnknown_80DB4F4[r4 & 0xFF]); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, text2, 0, '\0'); + } + else { + sub_8012C60(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, (u8) r4, r5, 0); + } + } + } + + sub_800792C(0, 0, 0, 0xE0, 0xE); + sub_800792C(0, 0, 0x47, 0xE0, 0xE); + sub_8007A78(0, 0, 0, 0x48, 0xE); + sub_8007A78(0, 0xDF, 0, 0x48, 0xE); + sub_80073E0(0); +} + +void sub_8015C1C(void) +{ + u8 text[80]; + + CallPrepareTextbox_8008C54(1); + sub_80073B8(1); + if (gUnknown_203B1FC->unk4 != 0) { + sub_800792C(1, 0, 0, 0xE0, 0xE); + sub_800792C(1, 0, 0x37, 0xE0, 0xE); + sub_8007A78(1, 0, 0, 0x38, 0xE); + sub_8007A78(1, 0xDF, 0, 0x38, 0xE); + } + else { + sub_800792C(1, 0, 0, 0xB0, 0xE); + sub_800792C(1, 0, 0x27, 0xB0, 0xE); + sub_8007A78(1, 0, 0, 0x28, 0xE); + sub_8007A78(1, 0xAF, 0, 0x28, 0xE); + } + + switch (gUnknown_203B1FC->unk0) { + case 0: + PrintStringOnWindow(8, 5, gUnknown_80DB5C0, 1, '\0'); + break; + case 2: + PrintStringOnWindow(8, 5, gUnknown_80DB5D4, 1, '\0'); + break; + case 3: + PrintStringOnWindow(8, 5, gUnknown_80DB5F8, 1, '\0'); + break; + case 1: + PrintStringOnWindow(8, 5, gUnknown_80DB61C, 1, '\0'); + break; + case 4: + PrintStringOnWindow(54, 2, gUnknown_80DB638, 1, '\0'); + break; + case 5: + PrintStringOnWindow(48, 4, gUnknown_80DB638, 1, '\0'); + break; + } + + switch (gUnknown_203B1FC->unk0) { + case 4: + sub_8015E10(gUnknown_203B1FC->unkF8, 1, 0); + break; + case 5: + sub_8015EB4(gUnknown_203B1FC->unkF8, 1, 0); + break; + case 0: + case 1: + case 2: + case 3: + sub_80078A4(1, 38, 33, sub_8016028(), 4); + if (sub_8015FEC(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B) > sub_8016028()) { + sprintfStatic(text, gUnknown_80DB654, gUnknown_203B1FC->unkF8); + } + else if (sub_8015F44() == gUnknown_203B1FC->unk1B) { + sprintfStatic(text, gUnknown_80DB65C, gUnknown_203B1FC->unkF8); + } + else { + sprintfStatic(text, gUnknown_80DB664, gUnknown_203B1FC->unkF8); + } + PrintStringOnWindow(38, 22, text, 1, '\0'); + break; + } + + sub_80073E0(1); +} + +void sub_8015E10(u8 *a0, s32 a1, s32 _a2) +{ + s32 i; + s32 a2 = (s16) _a2; + + for (i = 0; i < 54; i++) { + sub_80078A4(a1, gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + 11 + a2, 11, 5); + } + + for (i = 0; i < 54 && a0[i] != 0; i++) { + s32 arg3; + + if (i <= 4) arg3 = 7; + else if (i <= 12) arg3 = 6; + else if (i <= 17) arg3 = 7; + else if (i <= 22) arg3 = 7; + else if (i <= 30) arg3 = 6; + else if (i <= 35) arg3 = 7; + else if (i <= 40) arg3 = 7; + else if (i <= 48) arg3 = 6; + else arg3 = 7; + + sub_8012C60(gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + a2, a0[i], arg3, a1); + } +} + +void sub_8015EB4(u8 *a0, s32 a1, s32 _a2) +{ + s32 i; + s32 a2 = (s16) _a2; + + for (i = 0; i < 24; i++) { + sub_80078A4(a1, gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + 11 + a2, 12, 5); + } + + for (i = 0; i < 24 && a0[i] != 0; i++) { + s32 arg3; + + if (i <= 3) arg3 = 7; + else if (i <= 7) arg3 = 6; + else if (i <= 15) arg3 = 7; + else if (i <= 19) arg3 = 6; + else arg3 = 7; + + sub_8012C60(gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + a2, a0[i], arg3, a1); + } +} From 22349c5b9ae5e470d6b95ff88796ff0e3575c99d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 16 Feb 2025 10:07:25 +0100 Subject: [PATCH 4/6] move code_8015080 data to c --- data/data_80DAF70.s | 338 -------------------------------------------- include/global.h | 1 + ld_script.txt | 1 - src/code_8015080.c | 315 +++++++++++++++++++++++++++++++++-------- src/code_8097670.c | 6 +- 5 files changed, 263 insertions(+), 398 deletions(-) delete mode 100644 data/data_80DAF70.s diff --git a/data/data_80DAF70.s b/data/data_80DAF70.s deleted file mode 100644 index 99d7a2fd6..000000000 --- a/data/data_80DAF70.s +++ /dev/null @@ -1,338 +0,0 @@ - .section .rodata - - .align 2, 0 - -@ START code_80130A8 #4 -.string "pksdir0\0" - - .global gUnknown_80DAFC0 -gUnknown_80DAFC0: @ 80DAFC0 - .2byte 3, 0xD - .2byte 0xF, 0xD - .2byte 0x1B, 0xD - .2byte 0x27, 0xD - .2byte 0x33, 0xD - .2byte 0x40, 0xF - .2byte 0x4C, 0xF - .2byte 0x58, 0xF - .2byte 0x64, 0xF - .2byte 0x70, 0xF - .2byte 0x7C, 0xF - .2byte 0x88, 0xF - .2byte 0x94, 0xF - .2byte 0xA1, 0xD - .2byte 0xAD, 0xD - .2byte 0xB9, 0xD - .2byte 0xC5, 0xD - .2byte 0xD1, 0xD - .2byte 3, 0x1A - .2byte 0xF, 0x1A - .2byte 0x1B, 0x1A - .2byte 0x27, 0x1A - .2byte 0x33, 0x1A - .2byte 0x40, 0x1C - .2byte 0x4C, 0x1C - .2byte 0x58, 0x1C - .2byte 0x64, 0x1C - .2byte 0x70, 0x1C - .2byte 0x7C, 0x1C - .2byte 0x88, 0x1C - .2byte 0x94, 0x1C - .2byte 0xA1, 0x1A - .2byte 0xAD, 0x1A - .2byte 0xB9, 0x1A - .2byte 0xC5, 0x1A - .2byte 0xD1, 0x1A - .2byte 3, 0x28 - .2byte 0xF, 0x28 - .2byte 0x1B, 0x28 - .2byte 0x27, 0x28 - .2byte 0x33, 0x28 - .2byte 0x40, 0x2A - .2byte 0x4C, 0x2A - .2byte 0x58, 0x2A - .2byte 0x64, 0x2A - .2byte 0x70, 0x2A - .2byte 0x7C, 0x2A - .2byte 0x88, 0x2A - .2byte 0x94, 0x2A - .2byte 0xA1, 0x28 - .2byte 0xAD, 0x28 - .2byte 0xB9, 0x28 - .2byte 0xC5, 0x28 - .2byte 0xD1, 0x28 - - .global gUnknown_80DB098 -gUnknown_80DB098: @ 80DB098 - .2byte 0x20, 0x12 - .2byte 0x2E, 0x12 - .2byte 0x3C, 0x12 - .2byte 0x4A, 0x12 - .2byte 0x58, 0x14 - .2byte 0x66, 0x14 - .2byte 0x74, 0x14 - .2byte 0x82, 0x14 - .2byte 0x90, 0x12 - .2byte 0x9E, 0x12 - .2byte 0xAC, 0x12 - .2byte 0xBA, 0x12 - .2byte 0x20, 0x24 - .2byte 0x2E, 0x24 - .2byte 0x3C, 0x24 - .2byte 0x4A, 0x24 - .2byte 0x58, 0x26 - .2byte 0x66, 0x26 - .2byte 0x74, 0x26 - .2byte 0x82, 0x26 - .2byte 0x90, 0x24 - .2byte 0x9E, 0x24 - .2byte 0xAC, 0x24 - .2byte 0xBA, 0x24 - - .global gUnknown_80DB0F8 -gUnknown_80DB0F8: @ 80DB0F8 -.macro st_80DB0F8, a, b, c, d, e, f, g, h - .byte \a, \b, \c, \d, \e, \f, \g - .align 2, 0 - .4byte \h -.endm - st_80DB0F8 0, 0, 0, 0, 8, 3, 0, 264 - st_80DB0F8 0, 0, 0, 0, 8, 14, 0, 264 - st_80DB0F8 0, 0, 0, 0, 8, 25, 0, 264 - st_80DB0F8 5, 4, 81, 9, 8, 36, 3, 263 - st_80DB0F8 3, 5, 82, 10, 8, 47, 3, 261 - st_80DB0F8 4, 3, 83, 11, 8, 58, 3, 262 - st_80DB0F8 11, 7, 78, 12, 36, 3, 0, 97 - st_80DB0F8 6, 8, 79, 13, 36, 14, 0, 110 - st_80DB0F8 7, 9, 80, 14, 36, 25, 0, 65 - st_80DB0F8 8, 10, 3, 15, 36, 36, 0, 78 - st_80DB0F8 9, 11, 4, 16, 36, 47, 0, 233 - st_80DB0F8 10, 6, 5, 17, 36, 58, 0, 43 - st_80DB0F8 17, 13, 6, 18, 50, 3, 0, 98 - st_80DB0F8 12, 14, 7, 19, 50, 14, 0, 111 - st_80DB0F8 13, 15, 8, 20, 50, 25, 0, 66 - st_80DB0F8 14, 16, 9, 21, 50, 36, 0, 79 - st_80DB0F8 15, 17, 10, 22, 50, 47, 0, 49 - st_80DB0F8 16, 12, 11, 23, 50, 58, 0, 45 - st_80DB0F8 23, 19, 12, 24, 64, 3, 0, 99 - st_80DB0F8 18, 20, 13, 25, 64, 14, 0, 112 - st_80DB0F8 19, 21, 14, 26, 64, 25, 0, 67 - st_80DB0F8 20, 22, 15, 27, 64, 36, 0, 80 - st_80DB0F8 21, 23, 16, 28, 64, 47, 0, 50 - st_80DB0F8 22, 18, 17, 29, 64, 58, 0, 44 - st_80DB0F8 29, 25, 18, 30, 78, 3, 0, 100 - st_80DB0F8 24, 26, 19, 31, 78, 14, 0, 113 - st_80DB0F8 25, 27, 20, 32, 78, 25, 0, 68 - st_80DB0F8 26, 28, 21, 33, 78, 36, 0, 81 - st_80DB0F8 27, 29, 22, 34, 78, 47, 0, 51 - st_80DB0F8 28, 24, 23, 35, 78, 58, 0, 46 - st_80DB0F8 35, 31, 24, 36, 92, 3, 0, 101 - st_80DB0F8 30, 32, 25, 37, 92, 14, 0, 114 - st_80DB0F8 31, 33, 26, 38, 92, 25, 0, 69 - st_80DB0F8 32, 34, 27, 39, 92, 36, 0, 82 - st_80DB0F8 33, 35, 28, 40, 92, 47, 0, 52 - st_80DB0F8 34, 30, 29, 41, 92, 58, 0, 33 - st_80DB0F8 41, 37, 30, 42, 106, 3, 0, 102 - st_80DB0F8 36, 38, 31, 43, 106, 14, 0, 115 - st_80DB0F8 37, 39, 32, 44, 106, 25, 0, 70 - st_80DB0F8 38, 40, 33, 45, 106, 36, 0, 83 - st_80DB0F8 39, 41, 34, 46, 106, 47, 0, 53 - st_80DB0F8 40, 36, 35, 47, 106, 58, 0, 63 - st_80DB0F8 47, 43, 36, 48, 120, 3, 0, 103 - st_80DB0F8 42, 44, 37, 49, 120, 14, 0, 116 - st_80DB0F8 43, 45, 38, 50, 120, 25, 0, 71 - st_80DB0F8 44, 46, 39, 51, 120, 36, 0, 84 - st_80DB0F8 45, 47, 40, 52, 120, 47, 0, 54 - st_80DB0F8 46, 42, 41, 53, 120, 58, 0, 145 - st_80DB0F8 53, 49, 42, 54, 134, 3, 0, 104 - st_80DB0F8 48, 50, 43, 55, 134, 14, 0, 117 - st_80DB0F8 49, 51, 44, 56, 134, 25, 0, 72 - st_80DB0F8 50, 52, 45, 57, 134, 36, 0, 85 - st_80DB0F8 51, 53, 46, 58, 134, 47, 0, 55 - st_80DB0F8 52, 48, 47, 59, 134, 58, 0, 146 - st_80DB0F8 59, 55, 48, 60, 148, 3, 0, 105 - st_80DB0F8 54, 56, 49, 61, 148, 14, 0, 118 - st_80DB0F8 55, 57, 50, 62, 148, 25, 0, 73 - st_80DB0F8 56, 58, 51, 63, 148, 36, 0, 86 - st_80DB0F8 57, 59, 52, 64, 148, 47, 0, 56 - st_80DB0F8 58, 54, 53, 65, 148, 58, 0, 147 - st_80DB0F8 65, 61, 54, 66, 162, 3, 0, 106 - st_80DB0F8 60, 62, 55, 67, 162, 14, 0, 119 - st_80DB0F8 61, 63, 56, 68, 162, 25, 0, 74 - st_80DB0F8 62, 64, 57, 69, 162, 36, 0, 87 - st_80DB0F8 63, 65, 58, 70, 162, 47, 0, 57 - st_80DB0F8 64, 60, 59, 71, 162, 58, 0, 148 - st_80DB0F8 71, 67, 60, 72, 176, 3, 0, 107 - st_80DB0F8 66, 68, 61, 73, 176, 14, 0, 120 - st_80DB0F8 67, 69, 62, 74, 176, 25, 0, 75 - st_80DB0F8 68, 70, 63, 75, 176, 36, 0, 88 - st_80DB0F8 69, 71, 64, 76, 176, 47, 0, 48 - st_80DB0F8 70, 66, 65, 77, 176, 58, 0, 189 - st_80DB0F8 77, 73, 66, 78, 190, 3, 0, 108 - st_80DB0F8 72, 74, 67, 79, 190, 14, 0, 121 - st_80DB0F8 73, 75, 68, 80, 190, 25, 0, 76 - st_80DB0F8 74, 76, 69, 81, 190, 36, 0, 89 - st_80DB0F8 75, 77, 70, 82, 190, 47, 0, 58 - st_80DB0F8 76, 72, 71, 83, 190, 58, 0, 190 - st_80DB0F8 83, 79, 72, 6, 204, 3, 0, 109 - st_80DB0F8 78, 80, 73, 7, 204, 14, 0, 122 - st_80DB0F8 79, 81, 74, 8, 204, 25, 0, 77 - st_80DB0F8 80, 82, 75, 3, 204, 36, 0, 90 - st_80DB0F8 81, 83, 76, 4, 204, 47, 0, 133 - st_80DB0F8 82, 78, 77, 5, 204, 58, 0, 32 - st_80DB0F8 0, 0, 0, 0, 8, 3, 2, 265 - - .global gUnknown_80DB4F4 -gUnknown_80DB4F4: @ 80DB4F4 - .4byte sUnknown_80DB534 - .4byte sUnknown_80DB530 - .4byte sUnknown_80DB528 - .4byte sUnknown_80DB520 - .4byte sUnknown_80DB518 - .4byte sUnknown_80DB514 - .4byte sUnknown_80DB510 - -sUnknown_80DB510: - .string "END\0" - .align 2, 0 - -sUnknown_80DB514: - .string "DEL\0" - .align 2, 0 - -sUnknown_80DB518: - .string "ABC\0" - .align 2, 0 - -sUnknown_80DB520: - .string "カナ\0" - .align 2, 0 - -sUnknown_80DB528: - .string "かな\0" - .align 2, 0 - -sUnknown_80DB530: - .string "゜\0" - .align 2, 0 - -sUnknown_80DB534: - .string "゛\0" - .align 2, 0 - - .global gUnknown_80DB538 -gUnknown_80DB538: @ 80DB538 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DB550 -gUnknown_80DB550: @ 80DB550 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x01, 0x00 - .byte 0x00, 0x00 - .byte 0x01, 0x00 - .byte 0x0a, 0x00 - .byte 0x1c, 0x00 - .byte 0x09, 0x00 - .byte 0x09, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - - .global gUnknown_80DB568 -gUnknown_80DB568: @ 80DB568 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x01, 0x00 - .byte 0x00, 0x00 - .byte 0x04, 0x00 - .byte 0x03, 0x00 - .byte 0x16, 0x00 - .byte 0x05, 0x00 - .byte 0x05, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - - .global gUnknown_80DB580 -gUnknown_80DB580: @ 80DB580 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x01, 0x00 - .byte 0x00, 0x00 - .byte 0x01, 0x00 - .byte 0x02, 0x00 - .byte 0x1c, 0x00 - .byte 0x07, 0x00 - .byte 0x07, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - .byte 0x00, 0x00 - - .global gUnknown_80DB598 -gUnknown_80DB598: @ 80DB598 - .string "{COLOR GREEN}OVR{RESET}\0" - .align 2,0 - - .global gUnknown_80DB5A4 -gUnknown_80DB5A4: @ 80DB5A4 - .string "{COLOR YELLOW}INS{RESET}\0" - .align 2,0 - - .global gUnknown_80DB5B0 -gUnknown_80DB5B0: @ 80DB5B0 - .string "{COLOR}%c" - .byte 0x81, 0x59 - .align 2,0 - - .global gUnknown_80DB5B8 -gUnknown_80DB5B8: @ 80DB5B8 - .string "{COLOR}%c%s\0" - .align 2,0 - - .global gUnknown_80DB5C0 -gUnknown_80DB5C0: @ 80DB5C0 - .string "What is your name?\0" - .align 2,0 - - .global gUnknown_80DB5D4 -gUnknown_80DB5D4: @ 80DB5D4 - .string "What is this Pokémon's nickname?\0" - .align 2,0 - - .global gUnknown_80DB5F8 -gUnknown_80DB5F8: @ 80DB5F8 - .string "What is your partner's nickname?\0" - .align 2,0 - - .global gUnknown_80DB61C -gUnknown_80DB61C: @ 80DB61C - .string "What is your team's name?\0" - .align 2,0 - - .global gUnknown_80DB638 -gUnknown_80DB638: @ 80DB638 - .string "Please enter the password.\0" - .align 2,0 - - .global gUnknown_80DB654 -gUnknown_80DB654: @ 80DB654 - .string "{COLOR RED}%s{RESET}\0" - .align 2,0 - - .global gUnknown_80DB65C -gUnknown_80DB65C: @ 80DB65C - .string "{COLOR CYAN}%s{RESET}\0" - .align 2,0 - - .global gUnknown_80DB664 -gUnknown_80DB664: @ 80DB664 - .string "%s\0" - .align 2,0 - -@ END code_80130A8 #4 diff --git a/include/global.h b/include/global.h index 14cd765a4..6674e8d79 100644 --- a/include/global.h +++ b/include/global.h @@ -46,6 +46,7 @@ static inline s16 Self_s16(s16 a) #define NAKED __attribute__((naked)) #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) +#define ARRAY_COUNT_INT(array) ((s32)(sizeof(array) / sizeof((array)[0]))) // When an int is needed to match. #define SWAP(a, b, temp) \ { \ diff --git a/ld_script.txt b/ld_script.txt index 0ec6b938e..86ee2c52a 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -438,7 +438,6 @@ SECTIONS { data/data_80D47B8.o(.rodata); src/common_strings.o(.rodata); src/code_8015080.o(.rodata); - data/data_80DAF70.o(.rodata); src/code_801602C.o(.rodata); src/felicity_bank.o(.rodata); src/kangaskhan_storage1.o(.rodata); diff --git a/src/code_8015080.c b/src/code_8015080.c index 999b0e6da..c26d435e3 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -11,7 +11,7 @@ #include "code_803D0D8.h" #include "text.h" -struct unkStruct_203B1F8 +struct unkStruct_203B1F8 { // size: 0x4B4 u32 menuAction; @@ -49,6 +49,244 @@ const UnkTextStruct2 gUnknown_80DAFA0 = { NULL }; +struct Struct80DB0F8 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + s32 unk8; +}; + +UNUSED static const char sPksDir[] = "pksdir0"; +static const DungeonPos gUnknown_80DAFC0[] = +{ + {3, 0xD}, + {0xF, 0xD}, + {0x1B, 0xD}, + {0x27, 0xD}, + {0x33, 0xD}, + {0x40, 0xF}, + {0x4C, 0xF}, + {0x58, 0xF}, + {0x64, 0xF}, + {0x70, 0xF}, + {0x7C, 0xF}, + {0x88, 0xF}, + {0x94, 0xF}, + {0xA1, 0xD}, + {0xAD, 0xD}, + {0xB9, 0xD}, + {0xC5, 0xD}, + {0xD1, 0xD}, + {3, 0x1A}, + {0xF, 0x1A}, + {0x1B, 0x1A}, + {0x27, 0x1A}, + {0x33, 0x1A}, + {0x40, 0x1C}, + {0x4C, 0x1C}, + {0x58, 0x1C}, + {0x64, 0x1C}, + {0x70, 0x1C}, + {0x7C, 0x1C}, + {0x88, 0x1C}, + {0x94, 0x1C}, + {0xA1, 0x1A}, + {0xAD, 0x1A}, + {0xB9, 0x1A}, + {0xC5, 0x1A}, + {0xD1, 0x1A}, + {3, 0x28}, + {0xF, 0x28}, + {0x1B, 0x28}, + {0x27, 0x28}, + {0x33, 0x28}, + {0x40, 0x2A}, + {0x4C, 0x2A}, + {0x58, 0x2A}, + {0x64, 0x2A}, + {0x70, 0x2A}, + {0x7C, 0x2A}, + {0x88, 0x2A}, + {0x94, 0x2A}, + {0xA1, 0x28}, + {0xAD, 0x28}, + {0xB9, 0x28}, + {0xC5, 0x28}, + {0xD1, 0x28}, +}; + +static const DungeonPos gUnknown_80DB098[] = +{ + {0x20, 0x12}, + {0x2E, 0x12}, + {0x3C, 0x12}, + {0x4A, 0x12}, + {0x58, 0x14}, + {0x66, 0x14}, + {0x74, 0x14}, + {0x82, 0x14}, + {0x90, 0x12}, + {0x9E, 0x12}, + {0xAC, 0x12}, + {0xBA, 0x12}, + {0x20, 0x24}, + {0x2E, 0x24}, + {0x3C, 0x24}, + {0x4A, 0x24}, + {0x58, 0x26}, + {0x66, 0x26}, + {0x74, 0x26}, + {0x82, 0x26}, + {0x90, 0x24}, + {0x9E, 0x24}, + {0xAC, 0x24}, + {0xBA, 0x24}, +}; + +// It was programmed as a 2d array, however it's effectively a 1d array(since there's only one entry for [0][x]). Could be different in Blue? +static const struct Struct80DB0F8 gUnknown_80DB0F8[][85] = +{ + [0] = { + {0, 0, 0, 0, 8, 3, 0, 264}, + {0, 0, 0, 0, 8, 14, 0, 264}, + {0, 0, 0, 0, 8, 25, 0, 264}, + {5, 4, 81, 9, 8, 36, 3, 263}, + {3, 5, 82, 10, 8, 47, 3, 261}, + {4, 3, 83, 11, 8, 58, 3, 262}, + {11, 7, 78, 12, 36, 3, 0, 97}, + {6, 8, 79, 13, 36, 14, 0, 110}, + {7, 9, 80, 14, 36, 25, 0, 65}, + {8, 10, 3, 15, 36, 36, 0, 78}, + {9, 11, 4, 16, 36, 47, 0, 233}, + {10, 6, 5, 17, 36, 58, 0, 43}, + {17, 13, 6, 18, 50, 3, 0, 98}, + {12, 14, 7, 19, 50, 14, 0, 111}, + {13, 15, 8, 20, 50, 25, 0, 66}, + {14, 16, 9, 21, 50, 36, 0, 79}, + {15, 17, 10, 22, 50, 47, 0, 49}, + {16, 12, 11, 23, 50, 58, 0, 45}, + {23, 19, 12, 24, 64, 3, 0, 99}, + {18, 20, 13, 25, 64, 14, 0, 112}, + {19, 21, 14, 26, 64, 25, 0, 67}, + {20, 22, 15, 27, 64, 36, 0, 80}, + {21, 23, 16, 28, 64, 47, 0, 50}, + {22, 18, 17, 29, 64, 58, 0, 44}, + {29, 25, 18, 30, 78, 3, 0, 100}, + {24, 26, 19, 31, 78, 14, 0, 113}, + {25, 27, 20, 32, 78, 25, 0, 68}, + {26, 28, 21, 33, 78, 36, 0, 81}, + {27, 29, 22, 34, 78, 47, 0, 51}, + {28, 24, 23, 35, 78, 58, 0, 46}, + {35, 31, 24, 36, 92, 3, 0, 101}, + {30, 32, 25, 37, 92, 14, 0, 114}, + {31, 33, 26, 38, 92, 25, 0, 69}, + {32, 34, 27, 39, 92, 36, 0, 82}, + {33, 35, 28, 40, 92, 47, 0, 52}, + {34, 30, 29, 41, 92, 58, 0, 33}, + {41, 37, 30, 42, 106, 3, 0, 102}, + {36, 38, 31, 43, 106, 14, 0, 115}, + {37, 39, 32, 44, 106, 25, 0, 70}, + {38, 40, 33, 45, 106, 36, 0, 83}, + {39, 41, 34, 46, 106, 47, 0, 53}, + {40, 36, 35, 47, 106, 58, 0, 63}, + {47, 43, 36, 48, 120, 3, 0, 103}, + {42, 44, 37, 49, 120, 14, 0, 116}, + {43, 45, 38, 50, 120, 25, 0, 71}, + {44, 46, 39, 51, 120, 36, 0, 84}, + {45, 47, 40, 52, 120, 47, 0, 54}, + {46, 42, 41, 53, 120, 58, 0, 145}, + {53, 49, 42, 54, 134, 3, 0, 104}, + {48, 50, 43, 55, 134, 14, 0, 117}, + {49, 51, 44, 56, 134, 25, 0, 72}, + {50, 52, 45, 57, 134, 36, 0, 85}, + {51, 53, 46, 58, 134, 47, 0, 55}, + {52, 48, 47, 59, 134, 58, 0, 146}, + {59, 55, 48, 60, 148, 3, 0, 105}, + {54, 56, 49, 61, 148, 14, 0, 118}, + {55, 57, 50, 62, 148, 25, 0, 73}, + {56, 58, 51, 63, 148, 36, 0, 86}, + {57, 59, 52, 64, 148, 47, 0, 56}, + {58, 54, 53, 65, 148, 58, 0, 147}, + {65, 61, 54, 66, 162, 3, 0, 106}, + {60, 62, 55, 67, 162, 14, 0, 119}, + {61, 63, 56, 68, 162, 25, 0, 74}, + {62, 64, 57, 69, 162, 36, 0, 87}, + {63, 65, 58, 70, 162, 47, 0, 57}, + {64, 60, 59, 71, 162, 58, 0, 148}, + {71, 67, 60, 72, 176, 3, 0, 107}, + {66, 68, 61, 73, 176, 14, 0, 120}, + {67, 69, 62, 74, 176, 25, 0, 75}, + {68, 70, 63, 75, 176, 36, 0, 88}, + {69, 71, 64, 76, 176, 47, 0, 48}, + {70, 66, 65, 77, 176, 58, 0, 189}, + {77, 73, 66, 78, 190, 3, 0, 108}, + {72, 74, 67, 79, 190, 14, 0, 121}, + {73, 75, 68, 80, 190, 25, 0, 76}, + {74, 76, 69, 81, 190, 36, 0, 89}, + {75, 77, 70, 82, 190, 47, 0, 58}, + {76, 72, 71, 83, 190, 58, 0, 190}, + {83, 79, 72, 6, 204, 3, 0, 109}, + {78, 80, 73, 7, 204, 14, 0, 122}, + {79, 81, 74, 8, 204, 25, 0, 77}, + {80, 82, 75, 3, 204, 36, 0, 90}, + {81, 83, 76, 4, 204, 47, 0, 133}, + {82, 78, 77, 5, 204, 58, 0, 32}, + {0, 0, 0, 0, 8, 3, 2, 265}, + } +}; + +static const u8 *const gUnknown_80DB4F4[] = +{ + _("゛"), + _("゜"), + _("かな"), + _("カナ"), + _("ABC"), + _("DEL"), + _("END"), +}; + +static const UnkTextStruct2 gUnknown_80DB538 = { + 0x00, 0x00, 0x00, 0x00, + 0x03, + 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + +static const UnkTextStruct2 gUnknown_80DB550 = { + 0x00, 0x00, 0x00, 0x00, + 0x01, + 0x01, 0x0A, + 0x1C, 0x09, + 0x09, 0x00, + NULL +}; + +static const UnkTextStruct2 gUnknown_80DB568 = { + 0x00, 0x00, 0x00, 0x00, + 0x01, + 0x04, 0x03, + 0x16, 0x05, + 0x05, 0x00, + NULL +}; + +static const UnkTextStruct2 gUnknown_80DB580 = { + 0x00, 0x00, 0x00, 0x00, + 0x01, + 0x01, 0x02, + 0x1C, 0x07, + 0x07, 0x00, + NULL +}; + bool8 sub_8015080(u8 *buffer, const MenuItem *menuItems) { s32 index; @@ -113,9 +351,8 @@ struct unkStruct_203B1FC u8 unk1A; u8 unk1B; u8 unk1C; - u16 unk1E[(0x8A - 0x1E) / 2]; - s16 unk8A[2]; - u8 fill8E[0xF8 - 0x8E]; + u16 unk1E[54]; + s16 unk8A[54]; u8 *unkF8; u8 unkFC[56]; u8 *unk134; @@ -123,10 +360,6 @@ struct unkStruct_203B1FC }; extern struct unkStruct_203B1FC *gUnknown_203B1FC; -extern UnkTextStruct2 gUnknown_80DB550; -extern UnkTextStruct2 gUnknown_80DB568; -extern UnkTextStruct2 gUnknown_80DB580; -extern UnkTextStruct2 gUnknown_80DB538; s32 sub_8015F44(void); void sub_8015A08(u32); void sub_8015C1C(void); @@ -173,7 +406,7 @@ u32 sub_80151C0(u32 r0, u8 *buffer) } gUnknown_203B1FC->unk134 = buffer; - gUnknown_203B1FC->unkF8 = gUnknown_203B1FC->unkFC; + gUnknown_203B1FC->unkF8 = gUnknown_203B1FC->unkFC; for (i = 0; i < 0x36; i++) { gUnknown_203B1FC->unkF8[i] = 0; @@ -315,36 +548,6 @@ void sub_80155F0(void) } } -struct Struct80DB0F8 -{ - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - s32 unk8; -}; - -extern const struct Struct80DB0F8 gUnknown_80DB0F8[][85]; -extern const DungeonPos gUnknown_80DB098[]; -extern const DungeonPos gUnknown_80DAFC0[]; -extern const u8 gUnknown_80DB598[]; -extern const u8 gUnknown_80DB5A4[]; -extern const u8 gUnknown_80DB5B0[]; -extern const u8 gUnknown_80DB5B8[]; -extern const u8 gUnknown_80DB5C0[]; -extern const u8 gUnknown_80DB5D4[]; -extern const u8 gUnknown_80DB5F8[]; -extern const u8 gUnknown_80DB61C[]; -extern const u8 gUnknown_80DB638[]; -extern const u8 gUnknown_80DB654[]; -extern const u8 gUnknown_80DB65C[]; -extern const u8 gUnknown_80DB664[]; -extern const u8 *const gUnknown_80DB4F4[]; - u32 sub_801560C(void) { s32 var = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk8; @@ -546,18 +749,18 @@ void sub_8015A08(u32 unused) if (r4 != 0x108) { if (r4 == 0x107) { if (gUnknown_203B1FC->unk18 == 0) { - PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, gUnknown_80DB598, 0, '\0'); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, _("{COLOR GREEN}OVR{RESET}"), 0, '\0'); } else { - PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, gUnknown_80DB5A4, 0, '\0'); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, _("{COLOR YELLOW}INS{RESET}"), 0, '\0'); } } else if (r4 == 0x20) { - sprintfStatic(text1, gUnknown_80DB5B0, r5); + sprintfStatic(text1, _("{COLOR}%c{0x81}{0x59}"), r5); PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 1, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, text1, 0, '\0'); } else if (r4 > 0xFF) { - sprintfStatic(text2, gUnknown_80DB5B8, r5, gUnknown_80DB4F4[r4 & 0xFF]); + sprintfStatic(text2, _("{COLOR}%c%s"), r5, gUnknown_80DB4F4[r4 & 0xFF]); PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, text2, 0, '\0'); } else { @@ -594,22 +797,22 @@ void sub_8015C1C(void) switch (gUnknown_203B1FC->unk0) { case 0: - PrintStringOnWindow(8, 5, gUnknown_80DB5C0, 1, '\0'); + PrintStringOnWindow(8, 5, _("What is your name?"), 1, '\0'); break; case 2: - PrintStringOnWindow(8, 5, gUnknown_80DB5D4, 1, '\0'); + PrintStringOnWindow(8, 5, _("What is this Pokémon's nickname?"), 1, '\0'); break; case 3: - PrintStringOnWindow(8, 5, gUnknown_80DB5F8, 1, '\0'); + PrintStringOnWindow(8, 5, _("What is your partner's nickname?"), 1, '\0'); break; case 1: - PrintStringOnWindow(8, 5, gUnknown_80DB61C, 1, '\0'); + PrintStringOnWindow(8, 5, _("What is your team's name?"), 1, '\0'); break; case 4: - PrintStringOnWindow(54, 2, gUnknown_80DB638, 1, '\0'); + PrintStringOnWindow(54, 2, _("Please enter the password."), 1, '\0'); break; case 5: - PrintStringOnWindow(48, 4, gUnknown_80DB638, 1, '\0'); + PrintStringOnWindow(48, 4, _("Please enter the password."), 1, '\0'); break; } @@ -626,13 +829,13 @@ void sub_8015C1C(void) case 3: sub_80078A4(1, 38, 33, sub_8016028(), 4); if (sub_8015FEC(gUnknown_203B1FC->unkF8, gUnknown_203B1FC->unk1B) > sub_8016028()) { - sprintfStatic(text, gUnknown_80DB654, gUnknown_203B1FC->unkF8); + sprintfStatic(text, _("{COLOR RED}%s{RESET}"), gUnknown_203B1FC->unkF8); } else if (sub_8015F44() == gUnknown_203B1FC->unk1B) { - sprintfStatic(text, gUnknown_80DB65C, gUnknown_203B1FC->unkF8); + sprintfStatic(text, _("{COLOR CYAN}%s{RESET}"), gUnknown_203B1FC->unkF8); } else { - sprintfStatic(text, gUnknown_80DB664, gUnknown_203B1FC->unkF8); + sprintfStatic(text, _("%s"), gUnknown_203B1FC->unkF8); } PrintStringOnWindow(38, 22, text, 1, '\0'); break; @@ -646,11 +849,11 @@ void sub_8015E10(u8 *a0, s32 a1, s32 _a2) s32 i; s32 a2 = (s16) _a2; - for (i = 0; i < 54; i++) { + for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DAFC0); i++) { sub_80078A4(a1, gUnknown_80DAFC0[i].x, gUnknown_80DAFC0[i].y + 11 + a2, 11, 5); } - for (i = 0; i < 54 && a0[i] != 0; i++) { + for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DAFC0) && a0[i] != 0; i++) { s32 arg3; if (i <= 4) arg3 = 7; @@ -672,11 +875,11 @@ void sub_8015EB4(u8 *a0, s32 a1, s32 _a2) s32 i; s32 a2 = (s16) _a2; - for (i = 0; i < 24; i++) { + for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DB098); i++) { sub_80078A4(a1, gUnknown_80DB098[i].x, gUnknown_80DB098[i].y + 11 + a2, 12, 5); } - for (i = 0; i < 24 && a0[i] != 0; i++) { + for (i = 0; i < ARRAY_COUNT_INT(gUnknown_80DB098) && a0[i] != 0; i++) { s32 arg3; if (i <= 3) arg3 = 7; diff --git a/src/code_8097670.c b/src/code_8097670.c index 87b5f02d3..a1fd43c1a 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -56,7 +56,7 @@ void ResetAdventureInfo(void) for (index = 0; index < 14; index++) gUnknown_203B494->unk1C[index] = 0; - for (index = 0; index < (s32)ARRAY_COUNT(gUnknown_203B494->learnedMoves); index++) + for (index = 0; index < ARRAY_COUNT_INT(gUnknown_203B494->learnedMoves); index++) gUnknown_203B494->learnedMoves[index] = 0; } @@ -344,7 +344,7 @@ static void WriteAdventureBits(DataSerializer *r0) WriteBits(r0, &gUnknown_203B494->numFloorsExplored, 17); WriteBits(r0, gUnknown_203B494->unk1C, 14 * 32); WriteBits(r0, gUnknown_203B494->unk54, 14 * 32); - WriteBits(r0, gUnknown_203B494->learnedMoves, (s32)ARRAY_COUNT(gUnknown_203B494->learnedMoves) * 32); + WriteBits(r0, gUnknown_203B494->learnedMoves, ARRAY_COUNT_INT(gUnknown_203B494->learnedMoves) * 32); WriteDungeonLocationBits(r0, &gUnknown_203B494->dungeonLocation); } @@ -360,7 +360,7 @@ static void ReadAdventureBits(DataSerializer *r0) ReadBits(r0, &gUnknown_203B494->numFloorsExplored, 17); ReadBits(r0, gUnknown_203B494->unk1C, 14 * 32); ReadBits(r0, gUnknown_203B494->unk54, 14 * 32); - ReadBits(r0, gUnknown_203B494->learnedMoves, (s32)ARRAY_COUNT(gUnknown_203B494->learnedMoves) * 32); + ReadBits(r0, gUnknown_203B494->learnedMoves, ARRAY_COUNT_INT(gUnknown_203B494->learnedMoves) * 32); ReadDungeonLocationBits(r0, &gUnknown_203B494->dungeonLocation); } From bcc8fc27862b3e3fe8b1d53a5553555a581588d6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 16 Feb 2025 10:09:47 +0100 Subject: [PATCH 5/6] code_8015080 name x/y in struct --- src/code_8015080.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/code_8015080.c b/src/code_8015080.c index c26d435e3..8aa56f2a7 100644 --- a/src/code_8015080.c +++ b/src/code_8015080.c @@ -55,8 +55,8 @@ struct Struct80DB0F8 u8 unk1; u8 unk2; u8 unk3; - u8 unk4; - u8 unk5; + u8 x; + u8 y; u8 unk6; s32 unk8; }; @@ -702,8 +702,8 @@ void sub_80158BC(void) gUnknown_203B1FC->unk17 = 8; } - x = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk4 + (txtPtr->unk0 * 8) - 5; - y = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].unk5 + (txtPtr->unk2 * 8) + 1; + x = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].x + (txtPtr->unk0 * 8) - 5; + y = gUnknown_80DB0F8[gUnknown_203B1FC->unk19][gUnknown_203B1FC->unk1A].y + (txtPtr->unk2 * 8) + 1; SpriteSetX((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, x); SpriteSetY((SpriteOAM *) &gUnknown_203B1FC->sprite2Attribs, y); } @@ -749,22 +749,22 @@ void sub_8015A08(u32 unused) if (r4 != 0x108) { if (r4 == 0x107) { if (gUnknown_203B1FC->unk18 == 0) { - PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, _("{COLOR GREEN}OVR{RESET}"), 0, '\0'); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, _("{COLOR GREEN}OVR{RESET}"), 0, '\0'); } else { - PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, _("{COLOR YELLOW}INS{RESET}"), 0, '\0'); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, _("{COLOR YELLOW}INS{RESET}"), 0, '\0'); } } else if (r4 == 0x20) { sprintfStatic(text1, _("{COLOR}%c{0x81}{0x59}"), r5); - PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 1, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, text1, 0, '\0'); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 1, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, text1, 0, '\0'); } else if (r4 > 0xFF) { sprintfStatic(text2, _("{COLOR}%c%s"), r5, gUnknown_80DB4F4[r4 & 0xFF]); - PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4 + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, text2, 0, '\0'); + PrintStringOnWindow(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x + 3, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, text2, 0, '\0'); } else { - sub_8012C60(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk4, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].unk5, (u8) r4, r5, 0); + sub_8012C60(gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].x, gUnknown_80DB0F8[gUnknown_203B1FC->unk19][i].y, (u8) r4, r5, 0); } } } From 43c17510922474012b8c00b49e51b65b59aaccf3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 16 Feb 2025 10:14:43 +0100 Subject: [PATCH 6/6] make it compile --- src/code_809A560.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/code_809A560.c b/src/code_809A560.c index 89eaf66d7..b1af934d8 100644 --- a/src/code_809A560.c +++ b/src/code_809A560.c @@ -709,7 +709,6 @@ void MakuhitaDojo_Delete(); u32 HandleMakuhitaDojoState(); s16 sub_802FED0(); u8 sub_801FB50(); -void sub_80151C0(); void sub_80155F0(); s32 sub_80160D8(); void ResetTextbox_809B294();