diff options
author | Cameron Hall <cameronghall@cox.net> | 2019-08-11 18:28:44 -0500 |
---|---|---|
committer | Cameron Hall <cameronghall@cox.net> | 2019-08-11 18:28:44 -0500 |
commit | 0de7fdc6139127391a6afdb810d992b99aedcc39 (patch) | |
tree | 258dbb792a31a1ec7f1dde82f74c335dbd61d719 | |
parent | 68de07eabfe27625e4b5b43502da0efade337456 (diff) |
decompile field_select.s
-rwxr-xr-x | asm/field_select.s | 970 | ||||
-rwxr-xr-x | include/main.h | 3 | ||||
-rwxr-xr-x | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_select.c | 382 | ||||
-rw-r--r-- | src/options.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 1 |
6 files changed, 386 insertions, 974 deletions
diff --git a/asm/field_select.s b/asm/field_select.s deleted file mode 100755 index 2ee614e..0000000 --- a/asm/field_select.s +++ /dev/null @@ -1,970 +0,0 @@ - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start FieldSelectMain -FieldSelectMain: @ 0x08008AD4 - push {lr} - ldr r1, _08008AEC @ =gUnknown_080792C0 - ldr r0, _08008AF0 @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .align 2, 0 -_08008AEC: .4byte gUnknown_080792C0 -_08008AF0: .4byte gMain - - thumb_func_start LoadFieldSelectGraphics -LoadFieldSelectGraphics: @ 0x08008AF4 - push {r4, lr} - bl sub_438 - movs r2, #0x80 - lsls r2, r2, #0x13 - movs r1, #0x84 - lsls r1, r1, #5 - adds r0, r1, #0 - strh r0, [r2] - ldr r1, _08008BD4 @ =0x04000008 - movs r0, #4 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #1 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08008BD8 @ =0x0400000A - adds r3, #5 - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - adds r3, #0xfb - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r1, _08008BDC @ =0x0400000C - adds r3, #0xa - adds r0, r3, #0 - strh r0, [r1] - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #3 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r4, _08008BE0 @ =gMain - ldrh r0, [r2] - strh r0, [r4, #0x16] - ldr r0, _08008BE4 @ =0x040000D4 - ldr r1, _08008BE8 @ =gFieldSelectBGPals - str r1, [r0] - movs r1, #0xa0 - lsls r1, r1, #0x13 - str r1, [r0, #4] - ldr r3, _08008BEC @ =0x80000100 - str r3, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008BF0 @ =gFieldSelectWindow_Gfx - str r1, [r0] - ldr r1, _08008BF4 @ =0x06004000 - str r1, [r0, #4] - ldr r1, _08008BF8 @ =0x80000A00 - str r1, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008BFC @ =gFieldSelectMiniFields_Gfx - str r1, [r0] - ldr r1, _08008C00 @ =0x06008000 - str r1, [r0, #4] - ldr r1, _08008C04 @ =0x80001C00 - str r1, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C08 @ =gUnknown_080A2400 - str r1, [r0] - movs r1, #0xc0 - lsls r1, r1, #0x13 - str r1, [r0, #4] - ldr r2, _08008C0C @ =0x80000400 - str r2, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C10 @ =gFieldSelectFrameShadowTilemap - str r1, [r0] - ldr r1, _08008C14 @ =0x06000800 - str r1, [r0, #4] - str r2, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C18 @ =gFieldSelectWindowTilemap - str r1, [r0] - ldr r1, _08008C1C @ =0x06001000 - str r1, [r0, #4] - str r2, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C20 @ =gFieldSelectSpritePals - str r1, [r0] - ldr r1, _08008C24 @ =0x05000200 - str r1, [r0, #4] - str r3, [r0, #8] - ldr r1, [r0, #8] - ldr r1, _08008C28 @ =gFieldSelectSpriteGfx - str r1, [r0] - ldr r1, _08008C2C @ =0x06010000 - str r1, [r0, #4] - ldr r1, _08008C30 @ =0x80002010 - str r1, [r0, #8] - ldr r0, [r0, #8] - bl sub_CBC - bl sub_8C38 - ldr r0, _08008C34 @ =sub_8F94 + 1 - bl sub_FD5C - ldrb r0, [r4, #3] - adds r0, #1 - strb r0, [r4, #3] - movs r0, #3 - bl m4aSongNumStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08008BD4: .4byte 0x04000008 -_08008BD8: .4byte 0x0400000A -_08008BDC: .4byte 0x0400000C -_08008BE0: .4byte gMain -_08008BE4: .4byte 0x040000D4 -_08008BE8: .4byte gFieldSelectBGPals -_08008BEC: .4byte 0x80000100 -_08008BF0: .4byte gFieldSelectWindow_Gfx -_08008BF4: .4byte 0x06004000 -_08008BF8: .4byte 0x80000A00 -_08008BFC: .4byte gFieldSelectMiniFields_Gfx -_08008C00: .4byte 0x06008000 -_08008C04: .4byte 0x80001C00 -_08008C08: .4byte gUnknown_080A2400 -_08008C0C: .4byte 0x80000400 -_08008C10: .4byte gFieldSelectFrameShadowTilemap -_08008C14: .4byte 0x06000800 -_08008C18: .4byte gFieldSelectWindowTilemap -_08008C1C: .4byte 0x06001000 -_08008C20: .4byte gFieldSelectSpritePals -_08008C24: .4byte 0x05000200 -_08008C28: .4byte gFieldSelectSpriteGfx -_08008C2C: .4byte 0x06010000 -_08008C30: .4byte 0x80002010 -_08008C34: .4byte sub_8F94 + 1 - - thumb_func_start sub_8C38 -sub_8C38: @ 0x08008C38 - ldr r2, _08008C70 @ =gUnknown_02002838 - movs r3, #0 - movs r1, #0 - movs r0, #2 - strh r0, [r2] - movs r0, #3 - strh r0, [r2, #2] - strh r1, [r2, #4] - movs r0, #1 - strh r0, [r2, #6] - strh r1, [r2, #8] - strh r1, [r2, #0xa] - strh r1, [r2, #0xc] - strh r1, [r2, #0xe] - strh r1, [r2, #0x16] - strh r1, [r2, #0x12] - strb r3, [r2, #0x14] - ldr r0, _08008C74 @ =gMain+0x74 - adds r1, r0, #0 - adds r1, #0xce - ldrb r1, [r1] - strb r1, [r2, #0x10] - subs r0, #0x74 - strb r3, [r0, #4] - ldr r0, _08008C78 @ =gUnknown_02002850 - strb r3, [r0] - bx lr - .align 2, 0 -_08008C70: .4byte gUnknown_02002838 -_08008C74: .4byte gMain+0x74 -_08008C78: .4byte gUnknown_02002850 - - thumb_func_start sub_8C7C -sub_8C7C: @ 0x08008C7C - push {r4, r5, r6, r7, lr} - bl sub_8F94 - ldr r7, _08008CC4 @ =gMain - ldrh r1, [r7, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #0xf - bne _08008CA0 - ldr r1, _08008CC8 @ =gUnknown_02002850 - movs r0, #1 - strb r0, [r1] - ldr r1, _08008CCC @ =gUnknown_02002838 - movs r0, #0 - strh r0, [r1, #0x16] - ldrb r0, [r7, #3] - adds r0, #1 - strb r0, [r7, #3] -_08008CA0: - ldr r0, _08008CC8 @ =gUnknown_02002850 - movs r6, #0 - ldrsb r6, [r0, r6] - cmp r6, #0 - beq _08008CAC - b _08008F56 -_08008CAC: - ldr r5, _08008CCC @ =gUnknown_02002838 - ldrh r4, [r5, #0xa] - adds r3, r5, #0 - cmp r4, #1 - bne _08008CB8 - b _08008E2E -_08008CB8: - cmp r4, #1 - bgt _08008CD0 - cmp r4, #0 - beq _08008CDC - b _08008F4C - .align 2, 0 -_08008CC4: .4byte gMain -_08008CC8: .4byte gUnknown_02002850 -_08008CCC: .4byte gUnknown_02002838 -_08008CD0: - cmp r4, #2 - beq _08008DC2 - cmp r4, #3 - bne _08008CDA - b _08008F08 -_08008CDA: - b _08008F4C -_08008CDC: - ldrh r1, [r7, #0x18] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08008CFC - ldrh r4, [r5, #8] - cmp r4, #1 - bne _08008D1A - movs r0, #0x6d - bl m4aSongNumStart - strh r6, [r5, #8] - strh r6, [r5, #4] - strh r4, [r5, #6] - strh r4, [r5, #0xa] - b _08008D1A -_08008CFC: - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08008D1A - ldrh r0, [r5, #8] - cmp r0, #0 - bne _08008D1A - movs r0, #0x6d - bl m4aSongNumStart - movs r0, #1 - strh r0, [r5, #8] - strh r0, [r5, #4] - strh r6, [r5, #6] - strh r0, [r5, #0xa] -_08008D1A: - ldr r2, _08008D50 @ =gMain - ldrh r1, [r2, #0x18] - movs r4, #1 - adds r0, r4, #0 - ands r0, r1 - adds r5, r2, #0 - cmp r0, #0 - beq _08008D66 - movs r0, #0x65 - bl m4aSongNumStart - ldr r1, _08008D54 @ =gUnknown_02002838 - movs r2, #0 - movs r3, #2 - strh r3, [r1, #0xa] - movs r0, #1 - strb r0, [r1, #0x14] - strh r2, [r1, #0xe] - ldrh r0, [r1, #8] - cmp r0, #0 - bne _08008D58 - strh r2, [r1, #4] - strh r4, [r1, #6] - strh r3, [r1] - movs r0, #3 - b _08008D62 - .align 2, 0 -_08008D50: .4byte gMain -_08008D54: .4byte gUnknown_02002838 -_08008D58: - strh r4, [r1, #4] - strh r2, [r1, #6] - movs r0, #7 - strh r0, [r1] - movs r0, #0xb -_08008D62: - strh r0, [r1, #2] - strh r2, [r1, #0xc] -_08008D66: - ldrh r1, [r5, #0x18] - movs r4, #2 - adds r0, r4, #0 - ands r0, r1 - cmp r0, #0 - beq _08008DAA - movs r0, #0x66 - bl m4aSongNumStart - ldrb r0, [r5, #3] - adds r0, #1 - movs r3, #0 - strb r0, [r5, #3] - ldr r1, _08008D98 @ =gUnknown_02002838 - movs r2, #1 - strh r2, [r1, #0x16] - ldrh r0, [r1, #8] - cmp r0, #0 - bne _08008D9C - strh r3, [r1, #4] - strh r2, [r1, #6] - strh r4, [r1] - movs r0, #3 - b _08008DA6 - .align 2, 0 -_08008D98: .4byte gUnknown_02002838 -_08008D9C: - strh r2, [r1, #4] - strh r3, [r1, #6] - movs r0, #7 - strh r0, [r1] - movs r0, #0xb -_08008DA6: - strh r0, [r1, #2] - strh r3, [r1, #0xc] -_08008DAA: - ldr r1, _08008DB8 @ =gMain - ldrb r0, [r1, #4] - cmp r0, #1 - bhi _08008DBC - movs r0, #0 - strb r0, [r1, #6] - b _08008F4C - .align 2, 0 -_08008DB8: .4byte gMain -_08008DBC: - movs r0, #1 - strb r0, [r1, #6] - b _08008F4C -_08008DC2: - ldrh r1, [r7, #0x18] - movs r0, #0x30 - ands r0, r1 - cmp r0, #0 - beq _08008DDA - movs r0, #0x67 - bl m4aSongNumStart - ldrb r1, [r5, #0x10] - movs r0, #1 - subs r0, r0, r1 - strb r0, [r5, #0x10] -_08008DDA: - ldrh r1, [r7, #0x18] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08008E00 - movs r0, #0x65 - bl m4aSongNumStart - strh r6, [r5, #0xe] - strh r6, [r5, #0xc] - ldrb r0, [r5, #0x10] - movs r2, #0xa1 - lsls r2, r2, #1 - adds r1, r7, r2 - strb r0, [r1] - bl SaveFile_WriteToSram - movs r0, #3 - strh r0, [r5, #0xa] -_08008E00: - ldrh r0, [r7, #0x18] - ands r4, r0 - cmp r4, #0 - beq _08008E12 - movs r0, #0x66 - bl m4aSongNumStart - strb r6, [r5, #0x14] - strh r6, [r5, #0xa] -_08008E12: - ldrh r0, [r5, #0xe] - adds r0, #1 - strh r0, [r5, #0xe] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #4 - bgt _08008E22 - b _08008F4C -_08008E22: - strh r6, [r5, #0xe] - ldrh r1, [r5, #0x12] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r5, #0x12] - b _08008F4C -_08008E2E: - ldrh r0, [r5, #8] - cmp r0, #0 - bne _08008E5C - ldr r2, _08008E58 @ =gUnknown_086A6B14 - movs r4, #0xc - ldrsh r0, [r5, r4] - movs r1, #4 - subs r0, r1, r0 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - strh r0, [r5] - movs r4, #0xc - ldrsh r0, [r5, r4] - subs r1, r1, r0 - lsls r1, r1, #1 - adds r2, #0xa - adds r1, r1, r2 - ldrh r0, [r1] - b _08008E76 - .align 2, 0 -_08008E58: .4byte gUnknown_086A6B14 -_08008E5C: - ldr r1, _08008E94 @ =gUnknown_086A6B14 - movs r2, #0xc - ldrsh r0, [r5, r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r5] - movs r4, #0xc - ldrsh r0, [r5, r4] - lsls r0, r0, #1 - adds r1, #0xa - adds r0, r0, r1 - ldrh r0, [r0] -_08008E76: - strh r0, [r5, #2] - ldr r0, _08008E98 @ =gMain - ldr r1, [r0, #0x4c] - movs r0, #1 - ands r1, r0 - cmp r1, #0 - bne _08008EA0 - ldrh r2, [r3, #0xc] - movs r4, #0xc - ldrsh r0, [r3, r4] - cmp r0, #3 - bgt _08008E9C - adds r0, r2, #1 - strh r0, [r3, #0xc] - b _08008EA0 - .align 2, 0 -_08008E94: .4byte gUnknown_086A6B14 -_08008E98: .4byte gMain -_08008E9C: - strh r1, [r3, #0xc] - strh r1, [r3, #0xa] -_08008EA0: - ldr r0, _08008ED0 @ =gMain - ldrh r1, [r0, #0x18] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _08008ED8 - ldr r4, _08008ED4 @ =gUnknown_02002838 - ldrh r5, [r4, #8] - cmp r5, #1 - bne _08008F4C - movs r0, #0x6d - bl m4aSongNumStart - movs r0, #0 - strh r0, [r4, #8] - strh r0, [r4, #4] - strh r5, [r4, #6] - movs r1, #2 - strh r1, [r4] - movs r1, #3 - strh r1, [r4, #2] - strh r0, [r4, #0xc] - strh r0, [r4, #0xa] - b _08008F4C - .align 2, 0 -_08008ED0: .4byte gMain -_08008ED4: .4byte gUnknown_02002838 -_08008ED8: - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08008F4C - ldr r4, _08008F04 @ =gUnknown_02002838 - ldrh r5, [r4, #8] - cmp r5, #0 - bne _08008F4C - movs r0, #0x6d - bl m4aSongNumStart - movs r0, #1 - strh r0, [r4, #8] - strh r0, [r4, #4] - strh r5, [r4, #6] - movs r0, #7 - strh r0, [r4] - movs r0, #0xb - strh r0, [r4, #2] - strh r5, [r4, #0xc] - strh r5, [r4, #0xa] - b _08008F4C - .align 2, 0 -_08008F04: .4byte gUnknown_02002838 -_08008F08: - ldrh r0, [r5, #0xe] - adds r0, #1 - strh r0, [r5, #0xe] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #3 - ble _08008F4C - strh r6, [r5, #0xe] - ldrh r0, [r5, #8] - cmp r0, #0 - bne _08008F28 - ldrh r1, [r5, #4] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r5, #4] - b _08008F30 -_08008F28: - ldrh r1, [r5, #6] - movs r0, #1 - subs r0, r0, r1 - strh r0, [r5, #6] -_08008F30: - ldr r1, _08008F5C @ =gUnknown_02002838 - ldrh r0, [r1, #0xc] - adds r0, #1 - strh r0, [r1, #0xc] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #5 - ble _08008F4C - movs r0, #2 - strh r0, [r1, #0x16] - ldr r1, _08008F60 @ =gMain - ldrb r0, [r1, #3] - adds r0, #1 - strb r0, [r1, #3] -_08008F4C: - ldr r0, _08008F60 @ =gMain - ldr r1, _08008F5C @ =gUnknown_02002838 - ldrh r1, [r1, #8] - strb r1, [r0, #4] - strb r1, [r0, #5] -_08008F56: - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08008F5C: .4byte gUnknown_02002838 -_08008F60: .4byte gMain - - thumb_func_start sub_8F64 -sub_8F64: @ 0x08008F64 - push {lr} - ldr r0, _08008F88 @ =sub_8F94 + 1 - bl sub_FE04 - bl m4aMPlayAllStop - bl sub_D10 - ldr r1, _08008F8C @ =gAutoDisplayTitlescreenMenu - movs r0, #1 - strb r0, [r1] - ldr r0, _08008F90 @ =gUnknown_02002838 - ldrh r0, [r0, #0x16] - bl SetMainGameState - pop {r0} - bx r0 - .align 2, 0 -_08008F88: .4byte sub_8F94 + 1 -_08008F8C: .4byte gAutoDisplayTitlescreenMenu -_08008F90: .4byte gUnknown_02002838 - - thumb_func_start sub_8F94 -sub_8F94: @ 0x08008F94 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - ldr r5, _08009254 @ =gMain - ldrh r0, [r5, #0x38] - ldr r0, _08009258 @ =0x00000642 - strh r0, [r5, #0x38] - ldrh r0, [r5, #0x3a] - ldr r0, _0800925C @ =0x00000808 - strh r0, [r5, #0x3a] - ldr r1, _08009260 @ =0x04000050 - ldrh r0, [r5, #0x38] - strh r0, [r1] - adds r1, #2 - ldrh r0, [r5, #0x3a] - strh r0, [r1] - movs r0, #0xbe - lsls r0, r0, #2 - adds r6, r5, r0 - movs r1, #0xec - lsls r1, r1, #2 - adds r1, r1, r5 - mov sb, r1 - ldr r4, _08009264 @ =gUnknown_02002838 - ldrh r0, [r4] - movs r2, #0xb8 - muls r0, r2, r0 - adds r0, r0, r6 - str r0, [sp] - ldrh r0, [r4, #2] - muls r0, r2, r0 - adds r0, r0, r6 - mov sl, r0 - ldrb r1, [r4, #0x10] - lsls r1, r1, #1 - movs r3, #0x12 - ldrsh r0, [r4, r3] - adds r0, #0xc - adds r1, r1, r0 - adds r0, r1, #0 - muls r0, r2, r0 - adds r0, r0, r6 - mov r8, r0 - ldrh r0, [r4, #4] - strh r0, [r6] - ldrh r0, [r4, #6] - mov r7, sb - strh r0, [r7] - movs r0, #1 - ldr r1, [sp] - strh r0, [r1] - mov r2, sl - strh r0, [r2] - movs r0, #0x14 - ldrsb r0, [r4, r0] - mov r3, r8 - strh r0, [r3] - ldr r0, _08009268 @ =gUnknown_086A6AD4 - movs r1, #0x10 - adds r2, r6, #0 - bl LoadSpriteSets - ldrh r0, [r4, #4] - cmp r0, #1 - bne _08009066 - movs r0, #0x25 - strh r0, [r6, #2] - movs r0, #0x18 - strh r0, [r6, #4] - ldr r7, _0800926C @ =gOamBuffer - movs r0, #0xc0 - lsls r0, r0, #2 - adds r4, r5, r0 - ldr r1, _08009270 @ =0x000001FF - mov ip, r1 - movs r5, #1 -_08009032: - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r7 - movs r2, #2 - ldrsh r1, [r4, r2] - movs r2, #2 - ldrsh r0, [r6, r2] - adds r1, r1, r0 - mov r0, ip - ands r1, r0 - ldrh r2, [r3, #2] - ldr r0, _08009274 @ =0xFFFFFE00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r7 - ldrb r0, [r6, #4] - ldrb r2, [r4, #4] - adds r0, r0, r2 - strb r0, [r1] - adds r4, #8 - subs r5, #1 - cmp r5, #0 - bge _08009032 -_08009066: - ldr r0, _08009264 @ =gUnknown_02002838 - ldrh r1, [r0, #6] - cmp r1, #1 - bne _080090BC - movs r0, #0x8d - mov r3, sb - strh r0, [r3, #2] - movs r0, #0x18 - strh r0, [r3, #4] - ldr r6, _0800926C @ =gOamBuffer - ldr r7, _08009274 @ =0xFFFFFE00 - mov ip, r7 - mov r4, sb - adds r4, #8 - movs r5, #1 -_08009084: - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r6 - movs r0, #2 - ldrsh r1, [r4, r0] - mov r2, sb - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r0, _08009270 @ =0x000001FF - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r6 - mov r2, sb - ldrb r0, [r2, #4] - ldrb r3, [r4, #4] - adds r0, r0, r3 - strb r0, [r1] - adds r4, #8 - subs r5, #1 - cmp r5, #0 - bge _08009084 -_080090BC: - movs r0, #0x20 - ldr r7, [sp] - strh r0, [r7, #2] - strh r0, [r7, #4] - ldr r1, _08009264 @ =gUnknown_02002838 - ldrh r0, [r1] - lsls r0, r0, #2 - ldr r2, _08009268 @ =gUnknown_086A6AD4 - adds r0, r0, r2 - ldr r6, [r0] - movs r5, #0 - ldrh r3, [r6] - cmp r5, r3 - bge _0800913A - movs r7, #0xd - rsbs r7, r7, #0 - mov ip, r7 - ldr r0, _08009274 @ =0xFFFFFE00 - mov sb, r0 - ldr r4, [sp] - adds r4, #8 -_080090E6: - ldrh r2, [r4] - lsls r2, r2, #3 - ldr r1, _0800926C @ =gOamBuffer - adds r2, r2, r1 - ldrb r1, [r2, #1] - mov r0, ip - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - ldr r2, _0800926C @ =gOamBuffer - adds r3, r3, r2 - movs r7, #2 - ldrsh r1, [r4, r7] - ldr r2, [sp] - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08009270 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, sb - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - ldr r3, _0800926C @ =gOamBuffer - adds r1, r1, r3 - ldr r7, [sp] - ldrb r0, [r7, #4] - ldrb r2, [r4, #4] - adds r0, r0, r2 - strb r0, [r1] - adds r4, #8 - adds r5, #1 - ldrh r3, [r6] - cmp r5, r3 - blt _080090E6 -_0800913A: - movs r0, #0x88 - mov r7, sl - strh r0, [r7, #2] - movs r0, #0x20 - strh r0, [r7, #4] - ldr r1, _08009264 @ =gUnknown_02002838 - ldrh r0, [r1, #2] - lsls r0, r0, #2 - ldr r2, _08009268 @ =gUnknown_086A6AD4 - adds r0, r0, r2 - ldr r6, [r0] - movs r5, #0 - ldrh r3, [r6] - cmp r5, r3 - bge _080091BA - movs r7, #0xd - rsbs r7, r7, #0 - mov ip, r7 - ldr r0, _08009274 @ =0xFFFFFE00 - mov sb, r0 - mov r4, sl - adds r4, #8 -_08009166: - ldrh r2, [r4] - lsls r2, r2, #3 - ldr r1, _0800926C @ =gOamBuffer - adds r2, r2, r1 - ldrb r1, [r2, #1] - mov r0, ip - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - ldr r2, _0800926C @ =gOamBuffer - adds r3, r3, r2 - movs r7, #2 - ldrsh r1, [r4, r7] - mov r2, sl - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08009270 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, sb - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - ldr r3, _0800926C @ =gOamBuffer - adds r1, r1, r3 - mov r7, sl - ldrb r0, [r7, #4] - ldrb r2, [r4, #4] - adds r0, r0, r2 - strb r0, [r1] - adds r4, #8 - adds r5, #1 - ldrh r3, [r6] - cmp r5, r3 - blt _08009166 -_080091BA: - mov r7, r8 - ldrh r0, [r7] - cmp r0, #1 - bne _08009234 - ldr r1, _08009278 @ =gUnknown_086A6B28 - ldr r2, _08009264 @ =gUnknown_02002838 - ldrh r0, [r2, #8] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrh r0, [r0] - strh r0, [r7, #2] - ldrh r0, [r2, #8] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrh r0, [r0, #2] - strh r0, [r7, #4] - ldr r6, _0800926C @ =gOamBuffer - movs r3, #0xd - rsbs r3, r3, #0 - mov sb, r3 - ldr r7, _08009274 @ =0xFFFFFE00 - mov ip, r7 - mov r4, r8 - adds r4, #8 - movs r5, #4 -_080091EC: - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r6 - ldrb r2, [r1, #1] - mov r0, sb - ands r0, r2 - strb r0, [r1, #1] - ldrh r3, [r4] - lsls r3, r3, #3 - adds r3, r3, r6 - movs r0, #2 - ldrsh r1, [r4, r0] - mov r2, r8 - movs r7, #2 - ldrsh r0, [r2, r7] - adds r1, r1, r0 - ldr r2, _08009270 @ =0x000001FF - adds r0, r2, #0 - ands r1, r0 - ldrh r2, [r3, #2] - mov r0, ip - ands r0, r2 - orrs r0, r1 - strh r0, [r3, #2] - ldrh r1, [r4] - lsls r1, r1, #3 - adds r1, r1, r6 - mov r3, r8 - ldrb r0, [r3, #4] - ldrb r7, [r4, #4] - adds r0, r0, r7 - strb r0, [r1] - adds r4, #8 - subs r5, #1 - cmp r5, #0 - bge _080091EC -_08009234: - movs r0, #0 - ldr r1, [sp] - strh r0, [r1] - mov r2, sl - strh r0, [r2] - mov r3, r8 - strh r0, [r3] - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08009254: .4byte gMain -_08009258: .4byte 0x00000642 -_0800925C: .4byte 0x00000808 -_08009260: .4byte 0x04000050 -_08009264: .4byte gUnknown_02002838 -_08009268: .4byte gUnknown_086A6AD4 -_0800926C: .4byte gOamBuffer -_08009270: .4byte 0x000001FF -_08009274: .4byte 0xFFFFFE00 -_08009278: .4byte gUnknown_086A6B28 diff --git a/include/main.h b/include/main.h index 873c4bb..752cc14 100755 --- a/include/main.h +++ b/include/main.h @@ -24,7 +24,8 @@ struct Main /*0x02*/ u8 mainState; /*0x03*/ u8 subState; /*0x04*/ u8 unk4; - /*0x05*/ u8 filler5[0x2]; + /*0x05*/ u8 unk5; + /*0x06*/ u8 unk6; /*0x07*/ s8 unk7; /*0x08*/ s8 unk8; /*0x09*/ u8 filler9[0x3]; diff --git a/ld_script.txt b/ld_script.txt index f07c1bd..63a834d 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -37,7 +37,7 @@ SECTIONS asm/bonus_field_select.o(.text); asm/ereader.o(.text); asm/pokedex.o(.text); - asm/field_select.o(.text); + src/field_select.o(.text); asm/intro.o(.text); asm/high_scores.o(.text); src/rom_1068C.o(.text); diff --git a/src/field_select.c b/src/field_select.c new file mode 100644 index 0000000..381e047 --- /dev/null +++ b/src/field_select.c @@ -0,0 +1,382 @@ +#include "global.h" +#include "main.h" +#include "m4a.h" +#include "titlescreen.h" + +extern void (*gUnknown_080792C0[])(void); + +extern u16 gFieldSelectBGPals[]; +extern u8 gFieldSelectWindow_Gfx[]; +extern u8 gFieldSelectMiniFields_Gfx[]; +extern u8 gUnknown_080A2400[]; +extern u8 gFieldSelectFrameShadowTilemap[]; +extern u8 gFieldSelectWindowTilemap[]; +extern u16 gFieldSelectSpritePals[]; +extern u8 gFieldSelectSpriteGfx[]; +extern s8 gUnknown_02002850; + +extern void sub_8F94(void); +extern void sub_8C38(void); + +struct FieldSelectData +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + u16 unk8; + u16 unkA; + s16 unkC; + s16 unkE; + u8 unk10; + s16 unk12; + s8 unk14; + u16 unk16; +}; + +extern struct FieldSelectData gUnknown_02002838; + +void FieldSelectMain(void) +{ + gUnknown_080792C0[gMain.subState](); +} + +void LoadFieldSelectGraphics(void) +{ + sub_438(); + + REG_DISPCNT = 0x1080; + REG_BG0CNT = 4; + REG_DISPCNT |= 0x100; + REG_BG1CNT = 0x105; + REG_DISPCNT |= 0x200; + REG_BG2CNT = 0x20A; + REG_DISPCNT |= 0x400; + + gMain.unk16 = REG_DISPCNT; + + DmaCopy16(3, gFieldSelectBGPals, (void *)PLTT, 0x200); + DmaCopy16(3, gFieldSelectWindow_Gfx, (void *)(VRAM + 0x4000), 0x1400); + DmaCopy16(3, gFieldSelectMiniFields_Gfx, (void *)(VRAM + 0x8000), 0x3800); + DmaCopy16(3, gUnknown_080A2400, (void *)(VRAM), 0x800); + DmaCopy16(3, gFieldSelectFrameShadowTilemap, (void *)(VRAM + 0x800), 0x800); + DmaCopy16(3, gFieldSelectWindowTilemap, (void *)(VRAM + 0x1000), 0x800); + DmaCopy16(3, gFieldSelectSpritePals, (void *)(PLTT + 0x200), 0x200); + DmaCopy16(3, gFieldSelectSpriteGfx, (void *)(VRAM + 0x10000), 0x4020); + + sub_CBC(); + sub_8C38(); + sub_FD5C(sub_8F94); + gMain.subState++; + m4aSongNumStart(3); +} + +void sub_8C38(void) +{ + gUnknown_02002838.unk0 = 2; + gUnknown_02002838.unk2 = 3; + gUnknown_02002838.unk4 = 0; + gUnknown_02002838.unk6 = 1; + gUnknown_02002838.unk8 = 0; + gUnknown_02002838.unkA = 0; + gUnknown_02002838.unkC = 0; + gUnknown_02002838.unkE = 0; + gUnknown_02002838.unk16 = 0; + gUnknown_02002838.unk12 = 0; + gUnknown_02002838.unk14 = 0; + + gUnknown_02002838.unk10 = gMain_saveData.unk142; + gMain.unk4 = 0; + gUnknown_02002850 = 0; +} + +extern struct {u16 unk0[5]; u16 unkA[5];} gUnknown_086A6B14; + +void sub_8C7C(void) +{ + sub_8F94(); + if ((gMain.heldKeys & 0xF) == 0xF) + { + gUnknown_02002850 = 1; + gUnknown_02002838.unk16 = 0; + gMain.subState++; + } + if (gUnknown_02002850 == 0) + { + switch (gUnknown_02002838.unkA) + { + case 0: + if (gMain.newKeys & 0x20) + { + if (gUnknown_02002838.unk8 == 1) + { + m4aSongNumStart(0x6D); + gUnknown_02002838.unk8 = 0; + gUnknown_02002838.unk4 = 0; + gUnknown_02002838.unk6 = 1; + gUnknown_02002838.unkA = 1; + } + } + else if (gMain.newKeys & 0x10) + { + if (gUnknown_02002838.unk8 == 0) + { + m4aSongNumStart(0x6D); + gUnknown_02002838.unk8 = 1; + gUnknown_02002838.unk4 = 1; + gUnknown_02002838.unk6 = 0; + gUnknown_02002838.unkA = 1; + } + } + if (gMain.newKeys & 1) + { + m4aSongNumStart(0x65); + gUnknown_02002838.unkA = 2; + gUnknown_02002838.unk14 = 1; + gUnknown_02002838.unkE = 0; + if (gUnknown_02002838.unk8 == 0) + { + gUnknown_02002838.unk4 = 0; + gUnknown_02002838.unk6 = 1; + gUnknown_02002838.unk0 = 2; + gUnknown_02002838.unk2 = 3; + gUnknown_02002838.unkC = 0; + } + else + { + gUnknown_02002838.unk4 = 1; + gUnknown_02002838.unk6 = 0; + gUnknown_02002838.unk0 = 7; + gUnknown_02002838.unk2 = 11; + gUnknown_02002838.unkC = 0; + } + } + if (gMain.newKeys & 2) + { + m4aSongNumStart(0x66); + gMain.subState++; + gUnknown_02002838.unk16 = 1; + if (gUnknown_02002838.unk8 == 0) + { + gUnknown_02002838.unk4 = 0; + gUnknown_02002838.unk6 = 1; + gUnknown_02002838.unk0 = 2; + gUnknown_02002838.unk2 = 3; + gUnknown_02002838.unkC = 0; + } + else + { + gUnknown_02002838.unk4 = 1; + gUnknown_02002838.unk6 = 0; + gUnknown_02002838.unk0 = 7; + gUnknown_02002838.unk2 = 11; + gUnknown_02002838.unkC = 0; + } + } + if (gMain.unk4 < 2) + gMain.unk6 = 0; + else + gMain.unk6 = 1; + break; + case 2: + if (gMain.newKeys & 0x30) + { + m4aSongNumStart(0x67); + gUnknown_02002838.unk10 = 1 - gUnknown_02002838.unk10; + } + if (gMain.newKeys & 1) + { + m4aSongNumStart(0x65); + gUnknown_02002838.unkE = 0; + gUnknown_02002838.unkC = 0; + gMain_saveData.unk142 = gUnknown_02002838.unk10; + SaveFile_WriteToSram(); + gUnknown_02002838.unkA = 3; + } + if (gMain.newKeys & 2) + { + m4aSongNumStart(0x66); + gUnknown_02002838.unk14 = 0; + gUnknown_02002838.unkA = 0; + } + gUnknown_02002838.unkE++; + if (gUnknown_02002838.unkE > 4) + { + gUnknown_02002838.unkE = 0; + gUnknown_02002838.unk12 = 1 - gUnknown_02002838.unk12; + } + break; + case 1: + if (gUnknown_02002838.unk8 == 0) + { + gUnknown_02002838.unk0 = gUnknown_086A6B14.unk0[4 - gUnknown_02002838.unkC]; + gUnknown_02002838.unk2 = gUnknown_086A6B14.unkA[4 - gUnknown_02002838.unkC]; + } + else + { + gUnknown_02002838.unk0 = gUnknown_086A6B14.unk0[gUnknown_02002838.unkC]; + gUnknown_02002838.unk2 = gUnknown_086A6B14.unkA[gUnknown_02002838.unkC]; + } + if (!(gMain.unk4C & 1)) + { + if (gUnknown_02002838.unkC < 4) + { + gUnknown_02002838.unkC++; + } + else + { + gUnknown_02002838.unkC = 0; + gUnknown_02002838.unkA = 0; + } + } + if (gMain.newKeys & 0x20) + { + if (gUnknown_02002838.unk8 == 1) + { + m4aSongNumStart(0x6D); + gUnknown_02002838.unk8 = 0; + gUnknown_02002838.unk4 = 0; + gUnknown_02002838.unk6 = 1; + gUnknown_02002838.unk0 = 2; + gUnknown_02002838.unk2 = 3; + gUnknown_02002838.unkC = 0; + gUnknown_02002838.unkA = 0; + } + } + else if (gMain.newKeys & 0x10) + { + if (gUnknown_02002838.unk8 == 0) + { + m4aSongNumStart(0x6D); + gUnknown_02002838.unk8 = 1; + gUnknown_02002838.unk4 = 1; + gUnknown_02002838.unk6 = 0; + gUnknown_02002838.unk0 = 7; + gUnknown_02002838.unk2 = 11; + gUnknown_02002838.unkC = 0; + gUnknown_02002838.unkA = 0; + } + } + break; + case 3: + gUnknown_02002838.unkE++; + if (gUnknown_02002838.unkE > 3) + { + gUnknown_02002838.unkE = 0; + if (gUnknown_02002838.unk8 == 0) + gUnknown_02002838.unk4 = 1 - gUnknown_02002838.unk4; + else + gUnknown_02002838.unk6 = 1 - gUnknown_02002838.unk6; + gUnknown_02002838.unkC++; + if (gUnknown_02002838.unkC > 5) + { + gUnknown_02002838.unk16 = 2; + gMain.subState++; + } + } + break; + } + gMain.unk4 = gUnknown_02002838.unk8; + gMain.unk5 = gUnknown_02002838.unk8; + } +} + +void sub_8F64(void) +{ + sub_FE04(sub_8F94); + m4aMPlayAllStop(); + sub_D10(); + gAutoDisplayTitlescreenMenu = 1; + SetMainGameState(gUnknown_02002838.unk16); +} + +extern const struct SpriteSet *const gUnknown_086A6AD4[]; +extern struct Coord16 gUnknown_086A6B28[]; + +void sub_8F94(void) +{ + struct SpriteGroup *r6; + struct SpriteGroup *r9; + struct SpriteGroup *sp0; + struct SpriteGroup *r10; + struct SpriteGroup *r8; + const struct SpriteSet *spriteSet; + int i; + + gMain.blendControl = 0x642; + gMain.blendAlpha = 0x808; + REG_BLDCNT = gMain.blendControl; + REG_BLDALPHA = gMain.blendAlpha; + + r6 = &gMain.spriteGroups[0]; + r9 = &gMain.spriteGroups[1]; + sp0 = &gMain.spriteGroups[gUnknown_02002838.unk0]; + r10 = &gMain.spriteGroups[gUnknown_02002838.unk2]; + r8 = &gMain.spriteGroups[12 + gUnknown_02002838.unk10 * 2 + gUnknown_02002838.unk12]; + + r6->available = gUnknown_02002838.unk4; + r9->available = gUnknown_02002838.unk6; + sp0->available = 1; + r10->available = 1; + r8->available = gUnknown_02002838.unk14; + + LoadSpriteSets(gUnknown_086A6AD4, 16, r6); + + if (gUnknown_02002838.unk4 == 1) + { + r6->baseX = 0x25; + r6->baseY = 0x18; + for (i = 0; i < 2; i++) + { + gOamBuffer[r6->oam[i].oamId].x = r6->oam[i].xOffset + r6->baseX; + gOamBuffer[r6->oam[i].oamId].y = r6->oam[i].yOffset + r6->baseY; + } + } + + if (gUnknown_02002838.unk6 == 1) + { + r9->baseX = 0x8D; + r9->baseY = 0x18; + for (i = 0; i < 2; i++) + { + gOamBuffer[r9->oam[i].oamId].x = r9->oam[i].xOffset + r9->baseX; + gOamBuffer[r9->oam[i].oamId].y = r9->oam[i].yOffset + r9->baseY; + } + } + + sp0->baseX = 32; + sp0->baseY = 32; + spriteSet = gUnknown_086A6AD4[gUnknown_02002838.unk0]; + for (i = 0; i < spriteSet->count; i++) + { + gOamBuffer[sp0->oam[i].oamId].objMode = 1; + gOamBuffer[sp0->oam[i].oamId].x = sp0->oam[i].xOffset + sp0->baseX; + gOamBuffer[sp0->oam[i].oamId].y = sp0->oam[i].yOffset + sp0->baseY; + } + + r10->baseX = 0x88; + r10->baseY = 32; + spriteSet = gUnknown_086A6AD4[gUnknown_02002838.unk2]; + for (i = 0; i < spriteSet->count; i++) + { + gOamBuffer[r10->oam[i].oamId].objMode = 1; + gOamBuffer[r10->oam[i].oamId].x = r10->oam[i].xOffset + r10->baseX; + gOamBuffer[r10->oam[i].oamId].y = r10->oam[i].yOffset + r10->baseY; + } + + if (r8->available == 1) + { + r8->baseX = gUnknown_086A6B28[gUnknown_02002838.unk8].x; + r8->baseY = gUnknown_086A6B28[gUnknown_02002838.unk8].y; + for (i = 0; i < 5; i++) + { + gOamBuffer[r8->oam[i].oamId].objMode = 0; + gOamBuffer[r8->oam[i].oamId].x = r8->oam[i].xOffset + r8->baseX; + gOamBuffer[r8->oam[i].oamId].y = r8->oam[i].yOffset + r8->baseY; + } + } + + sp0->available = 0; + r10->available = 0; + r8->available = 0; +} diff --git a/src/options.c b/src/options.c index e05d727..4e03a7d 100644 --- a/src/options.c +++ b/src/options.c @@ -272,7 +272,7 @@ void sub_514B8(void) { m4aSongNumStart(0x66); gMain.subState++; - sub_525CC(gMain.saveData.unk143); + sub_525CC(gMain_saveData.unk143); } if (!(gMain.unk4C & 7)) diff --git a/sym_ewram.txt b/sym_ewram.txt index 7221969..aa1a5a7 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -94,7 +94,6 @@ gUnknown_020030A0: @ 0x020030A0 .space 0x8020 gMain: @ 0x200B0C0 .space 0x40 -gUnknown_0200B100: @ 0x0200B100 .space 0x34 .space 0x5A gUnknown_0200B18E: @ 0x0200B18E |