diff options
-rw-r--r-- | asm/slot_machine.s | 1756 | ||||
-rw-r--r-- | data/slot_machine.s | 32 | ||||
-rwxr-xr-x | include/ewram.h | 2 | ||||
-rw-r--r-- | include/slot_machine.h | 33 | ||||
-rw-r--r-- | include/sprite.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/field/slot_machine.c | 919 |
7 files changed, 947 insertions, 1801 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 62792245d..a6201c22e 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,1762 +5,6 @@ .text - thumb_func_start PlaySlotMachine -PlaySlotMachine: @ 81018A0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_81019B0 - ldr r0, _081018B4 @ =sub_81018B8 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_081018B4: .4byte sub_81018B8 - thumb_func_end PlaySlotMachine - - thumb_func_start sub_81018B8 -sub_81018B8: @ 81018B8 - push {lr} - ldr r0, _081018D0 @ =gMain - ldr r1, _081018D4 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x6 - bhi _0810194A - lsls r0, 2 - ldr r1, _081018D8 @ =_081018DC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081018D0: .4byte gMain -_081018D4: .4byte 0x0000043c -_081018D8: .4byte _081018DC - .align 2, 0 -_081018DC: - .4byte _081018F8 - .4byte _08101902 - .4byte _08101908 - .4byte _08101912 - .4byte _08101918 - .4byte _0810191E - .4byte _08101938 -_081018F8: - bl sub_8101A28 - bl sub_8101BA4 - b _08101922 -_08101902: - bl sub_8101A8C - b _08101922 -_08101908: - bl sub_8101AE0 - bl sub_8101B04 - b _08101922 -_08101912: - bl sub_8101C84 - b _08101922 -_08101918: - bl sub_8101CA0 - b _08101922 -_0810191E: - bl sub_8101CC0 -_08101922: - ldr r1, _08101930 @ =gMain - ldr r0, _08101934 @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0810194A - .align 2, 0 -_08101930: .4byte gMain -_08101934: .4byte 0x0000043c -_08101938: - bl sub_8101CD4 - bl sub_8101CEC - bl sub_8101A44 - ldr r0, _08101950 @ =sub_8101954 - bl SetMainCallback2 -_0810194A: - pop {r0} - bx r0 - .align 2, 0 -_08101950: .4byte sub_8101954 - thumb_func_end sub_81018B8 - - thumb_func_start sub_8101954 -sub_8101954: @ 8101954 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8101954 - - thumb_func_start sub_810196C -sub_810196C: @ 810196C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - ldr r1, _081019A8 @ =REG_WIN0H - ldr r2, _081019AC @ =gSharedMem - adds r0, r2, 0 - adds r0, 0x58 - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x4 - adds r0, r2, 0 - adds r0, 0x5A - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x4 - adds r0, r2, 0 - adds r0, 0x5C - ldrh r0, [r0] - strh r0, [r1] - adds r1, 0x2 - adds r0, r2, 0 - adds r0, 0x5E - ldrh r0, [r0] - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_081019A8: .4byte REG_WIN0H -_081019AC: .4byte gSharedMem - thumb_func_end sub_810196C - - thumb_func_start sub_81019B0 -sub_81019B0: @ 81019B0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _081019E4 @ =nullsub_67 - movs r1, 0xFF - bl CreateTask - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _081019E8 @ =gTasks - adds r0, r1 - strh r4, [r0, 0x8] - adds r0, 0xA - adds r1, r5, 0 - bl StoreWordInTwoHalfwords - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081019E4: .4byte nullsub_67 -_081019E8: .4byte gTasks - thumb_func_end sub_81019B0 - - thumb_func_start sub_81019EC -sub_81019EC: @ 81019EC - push {lr} - ldr r0, _08101A18 @ =nullsub_67 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - ldr r0, _08101A1C @ =gTasks - adds r2, r0 - ldr r1, _08101A20 @ =gSharedMem - ldrh r0, [r2, 0x8] - strb r0, [r1, 0x1] - adds r2, 0xA - adds r1, 0x64 - adds r0, r2, 0 - bl LoadWordFromTwoHalfwords - pop {r0} - bx r0 - .align 2, 0 -_08101A18: .4byte nullsub_67 -_08101A1C: .4byte gTasks -_08101A20: .4byte gSharedMem - thumb_func_end sub_81019EC - - thumb_func_start nullsub_67 -nullsub_67: @ 8101A24 - bx lr - thumb_func_end nullsub_67 - - thumb_func_start sub_8101A28 -sub_8101A28: @ 8101A28 - push {lr} - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - bl SetHBlankCallback - movs r1, 0x80 - lsls r1, 19 - movs r0, 0 - strh r0, [r1] - pop {r0} - bx r0 - thumb_func_end sub_8101A28 - - thumb_func_start sub_8101A44 -sub_8101A44: @ 8101A44 - push {r4,lr} - ldr r0, _08101A7C @ =sub_810196C - bl SetVBlankCallback - ldr r3, _08101A80 @ =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r4, _08101A84 @ =0x04000200 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _08101A88 @ =REG_DISPSTAT - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101A7C: .4byte sub_810196C -_08101A80: .4byte 0x04000208 -_08101A84: .4byte 0x04000200 -_08101A88: .4byte REG_DISPSTAT - thumb_func_end sub_8101A44 - - thumb_func_start sub_8101A8C -sub_8101A8C: @ 8101A8C - push {r4-r7,lr} - sub sp, 0x4 - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0x80 - lsls r3, 9 - mov r4, sp - movs r6, 0 - ldr r1, _08101AD8 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _08101ADC @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_08101AAA: - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r5 - subs r3, r5 - cmp r3, r5 - bhi _08101AAA - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101AD8: .4byte 0x040000d4 -_08101ADC: .4byte 0x81000800 - thumb_func_end sub_8101A8C - - thumb_func_start sub_8101AE0 -sub_8101AE0: @ 8101AE0 - sub sp, 0x4 - movs r2, 0xE0 - lsls r2, 19 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r0, _08101AFC @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08101B00 @ =0x81000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - add sp, 0x4 - bx lr - .align 2, 0 -_08101AFC: .4byte 0x040000d4 -_08101B00: .4byte 0x81000200 - thumb_func_end sub_8101AE0 - - thumb_func_start sub_8101B04 -sub_8101B04: @ 8101B04 - push {r4,r5,lr} - ldr r5, _08101B70 @ =REG_BG0CNT - movs r1, 0 - strh r1, [r5] - ldr r2, _08101B74 @ =REG_BG1CNT - strh r1, [r2] - ldr r3, _08101B78 @ =REG_BG2CNT - strh r1, [r3] - ldr r4, _08101B7C @ =REG_BG3CNT - strh r1, [r4] - ldr r0, _08101B80 @ =REG_BG0HOFS - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r1, _08101B84 @ =0x00001f08 - adds r0, r1, 0 - strh r0, [r5] - ldr r1, _08101B88 @ =0x00001c01 - adds r0, r1, 0 - strh r0, [r2] - ldr r2, _08101B8C @ =0x00001d02 - adds r0, r2, 0 - strh r0, [r3] - ldr r1, _08101B90 @ =0x00001e02 - adds r0, r1, 0 - strh r0, [r4] - ldr r0, _08101B94 @ =REG_WININ - movs r1, 0x3F - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r1, _08101B98 @ =REG_BLDCNT - ldr r2, _08101B9C @ =0x00001048 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _08101BA0 @ =0x00000809 - adds r0, r2, 0 - strh r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08101B70: .4byte REG_BG0CNT -_08101B74: .4byte REG_BG1CNT -_08101B78: .4byte REG_BG2CNT -_08101B7C: .4byte REG_BG3CNT -_08101B80: .4byte REG_BG0HOFS -_08101B84: .4byte 0x00001f08 -_08101B88: .4byte 0x00001c01 -_08101B8C: .4byte 0x00001d02 -_08101B90: .4byte 0x00001e02 -_08101B94: .4byte REG_WININ -_08101B98: .4byte REG_BLDCNT -_08101B9C: .4byte 0x00001048 -_08101BA0: .4byte 0x00000809 - thumb_func_end sub_8101B04 - - thumb_func_start sub_8101BA4 -sub_8101BA4: @ 8101BA4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - bl sub_81019EC - ldr r5, _08101C74 @ =gSharedMem - movs r4, 0 - strb r4, [r5] - strb r4, [r5, 0x2] - bl Random - movs r1, 0x1 - ands r1, r0 - strb r1, [r5, 0x3] - strb r4, [r5, 0x4] - movs r0, 0 - strh r4, [r5, 0x8] - strb r0, [r5, 0xA] - strb r0, [r5, 0xB] - ldr r0, _08101C78 @ =gSaveBlock1 - ldr r1, _08101C7C @ =0x00000494 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r5, 0xC] - strh r4, [r5, 0xE] - strh r4, [r5, 0x10] - strh r4, [r5, 0x12] - strh r4, [r5, 0x18] - movs r0, 0x8 - strh r0, [r5, 0x1A] - adds r1, r5, 0 - adds r1, 0x58 - movs r0, 0xF0 - strh r0, [r1] - adds r1, 0x2 - movs r0, 0xA0 - strh r0, [r1] - adds r0, r5, 0 - adds r0, 0x5C - movs r1, 0x3F - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - bl GetCurrentMapMusic - adds r1, r5, 0 - adds r1, 0x60 - strh r0, [r1] - movs r7, 0 - adds r6, r5, 0 - ldr r2, _08101C80 @ =gUnknown_083ECCF8 - mov r9, r2 - movs r0, 0x1C - adds r0, r6 - mov r8, r0 -_08101C14: - lsls r5, r7, 1 - adds r0, r6, 0 - adds r0, 0x22 - adds r0, r5, r0 - movs r1, 0 - strh r1, [r0] - adds r4, r6, 0 - adds r4, 0x28 - adds r4, r5, r4 - ldrb r0, [r6, 0x3] - lsls r0, 1 - lsls r1, r7, 2 - adds r0, r1 - add r0, r9 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x15 - bl __modsi3 - strh r0, [r4] - add r5, r8 - movs r2, 0 - ldrsh r0, [r4, r2] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - movs r2, 0xFC - lsls r2, 1 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r5] - movs r1, 0 - ldrsh r0, [r5, r1] - adds r1, r2, 0 - bl __modsi3 - strh r0, [r5] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x2 - bls _08101C14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101C74: .4byte gSharedMem -_08101C78: .4byte gSaveBlock1 -_08101C7C: .4byte 0x00000494 -_08101C80: .4byte gUnknown_083ECCF8 - thumb_func_end sub_8101BA4 - - thumb_func_start sub_8101C84 -sub_8101C84: @ 8101C84 - push {r4,lr} - ldr r4, _08101C9C @ =gWindowConfig_81E7128 - adds r0, r4, 0 - bl SetUpWindowConfig - adds r0, r4, 0 - bl InitMenuWindow - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101C9C: .4byte gWindowConfig_81E7128 - thumb_func_end sub_8101C84 - - thumb_func_start sub_8101CA0 -sub_8101CA0: @ 8101CA0 - push {lr} - bl ResetPaletteFade - bl ResetSpriteData - ldr r1, _08101CBC @ =gOamLimit - movs r0, 0x80 - strb r0, [r1] - bl FreeAllSpritePalettes - bl ResetTasks - pop {r0} - bx r0 - .align 2, 0 -_08101CBC: .4byte gOamLimit - thumb_func_end sub_8101CA0 - - thumb_func_start sub_8101CC0 -sub_8101CC0: @ 8101CC0 - push {lr} - bl sub_8106448 - bl sub_81064B8 - bl sub_81063C0 - pop {r0} - bx r0 - thumb_func_end sub_8101CC0 - - thumb_func_start sub_8101CD4 -sub_8101CD4: @ 8101CD4 - push {lr} - bl sub_8104EA8 - bl sub_8104F8C - bl sub_8103DC8 - bl sub_81050C4 - pop {r0} - bx r0 - thumb_func_end sub_8101CD4 - - thumb_func_start sub_8101CEC -sub_8101CEC: @ 8101CEC - push {lr} - bl sub_8104048 - bl sub_8102DA8 - bl sub_8104C5C - bl sub_8101D04 - pop {r0} - bx r0 - thumb_func_end sub_8101CEC - - thumb_func_start sub_8101D04 -sub_8101D04: @ 8101D04 - push {r4,lr} - ldr r4, _08101D20 @ =sub_8101D24 - adds r0, r4, 0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - bl _call_via_r4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08101D20: .4byte sub_8101D24 - thumb_func_end sub_8101D04 - - thumb_func_start sub_8101D24 -sub_8101D24: @ 8101D24 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r7, _08101D50 @ =gUnknown_083ECAAC - lsls r1, r0, 2 - adds r1, r0 - lsls r4, r1, 3 - ldr r6, _08101D54 @ =gSharedMem - ldr r5, _08101D58 @ =gTasks -_08101D36: - ldrb r0, [r6] - lsls r0, 2 - adds r0, r7 - ldr r1, [r0] - adds r0, r4, r5 - bl _call_via_r1 - lsls r0, 24 - cmp r0, 0 - bne _08101D36 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08101D50: .4byte gUnknown_083ECAAC -_08101D54: .4byte gSharedMem -_08101D58: .4byte gTasks - thumb_func_end sub_8101D24 - - thumb_func_start sub_8101D5C -sub_8101D5C: @ 8101D5C - push {r4,lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r4, _08101D88 @ =gSharedMem - ldrb r0, [r4, 0x2] - bl sub_810423C - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08101D88: .4byte gSharedMem - thumb_func_end sub_8101D5C - - thumb_func_start sub_8101D8C -sub_8101D8C: @ 8101D8C - push {lr} - ldr r0, _08101DA8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08101DA2 - ldr r1, _08101DAC @ =gSharedMem - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08101DA2: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08101DA8: .4byte gPaletteFade -_08101DAC: .4byte gSharedMem - thumb_func_end sub_8101D8C - - thumb_func_start sub_8101DB0 -sub_8101DB0: @ 8101DB0 - push {lr} - ldr r2, _08101DD8 @ =gSharedMem - movs r0, 0 - strh r0, [r2, 0xE] - strh r0, [r2, 0x12] - strh r0, [r2, 0x18] - ldrb r1, [r2, 0x4] - movs r0, 0xC0 - ands r0, r1 - strb r0, [r2, 0x4] - movs r0, 0x4 - strb r0, [r2] - movs r1, 0xC - ldrsh r0, [r2, r1] - cmp r0, 0 - bgt _08101DDC - movs r0, 0x19 - strb r0, [r2] - b _08101DEC - .align 2, 0 -_08101DD8: .4byte gSharedMem -_08101DDC: - ldrb r0, [r2, 0xA] - cmp r0, 0 - beq _08101DEC - movs r0, 0x3 - strb r0, [r2] - movs r0, 0x4 - bl sub_8104CAC -_08101DEC: - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_8101DB0 - - thumb_func_start sub_8101DF4 -sub_8101DF4: @ 8101DF4 - push {lr} - bl sub_8104E18 - lsls r0, 24 - cmp r0, 0 - beq _08101E06 - ldr r1, _08101E0C @ =gSharedMem - movs r0, 0x4 - strb r0, [r1] -_08101E06: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08101E0C: .4byte gSharedMem - thumb_func_end sub_8101DF4 - - thumb_func_start sub_8101E10 -sub_8101E10: @ 8101E10 - push {lr} - movs r0, 0 - bl sub_8104CAC - ldr r2, _08101E34 @ =gSharedMem - movs r0, 0x5 - strb r0, [r2] - movs r0, 0xC - ldrsh r1, [r2, r0] - ldr r0, _08101E38 @ =0x0000270e - cmp r1, r0 - ble _08101E2C - movs r0, 0x17 - strb r0, [r2] -_08101E2C: - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_08101E34: .4byte gSharedMem -_08101E38: .4byte 0x0000270e - thumb_func_end sub_8101E10 - - thumb_func_start sub_8101E3C -sub_8101E3C: @ 8101E3C - push {r4,lr} - ldr r0, _08101E58 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08101E60 - movs r0, 0 - bl sub_8104AB8 - ldr r1, _08101E5C @ =gSharedMem - movs r0, 0x8 - strb r0, [r1] - b _08101F1A - .align 2, 0 -_08101E58: .4byte gMain -_08101E5C: .4byte gSharedMem -_08101E60: - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08101EC2 - ldr r2, _08101EB8 @ =gSharedMem - movs r1, 0xC - ldrsh r0, [r2, r1] - subs r0, 0x3 - movs r3, 0x12 - ldrsh r1, [r2, r3] - adds r0, r1 - cmp r0, 0 - blt _08101EBC - ldrh r4, [r2, 0x12] - adds r0, r1, 0 - cmp r0, 0x2 - bgt _08101E9C -_08101E84: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_8103D50 - lsls r0, r4, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _08101E84 -_08101E9C: - ldr r1, _08101EB8 @ =gSharedMem - ldrh r0, [r1, 0xC] - subs r0, 0x3 - ldrh r3, [r1, 0x12] - adds r0, r3 - strh r0, [r1, 0xC] - movs r0, 0x3 - strh r0, [r1, 0x12] - movs r0, 0x9 - strb r0, [r1] - movs r0, 0x5F - bl PlaySE - b _08101F1A - .align 2, 0 -_08101EB8: .4byte gSharedMem -_08101EBC: - movs r0, 0x6 - strb r0, [r2] - b _08101F1A -_08101EC2: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08101EEC - ldr r4, _08101F24 @ =gSharedMem - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08101EEC - movs r0, 0x5F - bl PlaySE - ldrb r0, [r4, 0x12] - bl sub_8103D50 - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] -_08101EEC: - ldr r0, _08101F24 @ =gSharedMem - movs r2, 0x12 - ldrsh r1, [r0, r2] - ldr r2, _08101F28 @ =gMain - adds r3, r0, 0 - cmp r1, 0x2 - bgt _08101F08 - cmp r1, 0 - beq _08101F0C - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08101F0C -_08101F08: - movs r0, 0x9 - strb r0, [r3] -_08101F0C: - ldrh r1, [r2, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08101F1A - movs r0, 0x15 - strb r0, [r3] -_08101F1A: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08101F24: .4byte gSharedMem -_08101F28: .4byte gMain - thumb_func_end sub_8101E3C - - thumb_func_start sub_8101F2C -sub_8101F2C: @ 8101F2C - push {r4,lr} - adds r4, r0, 0 - bl MenuDisplayMessageBox - adds r0, r4, 0 - movs r1, 0x2 - movs r2, 0xF - bl MenuPrint - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8101F2C - - thumb_func_start sub_8101F44 -sub_8101F44: @ 8101F44 - push {lr} - ldr r0, _08101F58 @ =gOtherText_DontHaveThreeCoins - bl sub_8101F2C - ldr r1, _08101F5C @ =gSharedMem - movs r0, 0x7 - strb r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08101F58: .4byte gOtherText_DontHaveThreeCoins -_08101F5C: .4byte gSharedMem - thumb_func_end sub_8101F44 - - thumb_func_start sub_8101F60 -sub_8101F60: @ 8101F60 - push {lr} - ldr r0, _08101F80 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08101F78 - bl MenuZeroFillScreen - ldr r1, _08101F84 @ =gSharedMem - movs r0, 0x5 - strb r0, [r1] -_08101F78: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08101F80: .4byte gMain -_08101F84: .4byte gSharedMem - thumb_func_end sub_8101F60 - - thumb_func_start sub_8101F88 -sub_8101F88: @ 8101F88 - push {lr} - bl sub_8104AEC - lsls r0, 24 - cmp r0, 0 - beq _08101F9A - ldr r1, _08101FA0 @ =gSharedMem - movs r0, 0x5 - strb r0, [r1] -_08101F9A: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08101FA0: .4byte gSharedMem - thumb_func_end sub_8101F88 - - thumb_func_start sub_8101FA4 -sub_8101FA4: @ 8101FA4 - push {r4,lr} - adds r4, r0, 0 - bl sub_8102484 - bl sub_8104DA4 - movs r0, 0 - bl sub_8102DEC - movs r0, 0x1 - bl sub_8102DEC - movs r0, 0x2 - bl sub_8102DEC - movs r0, 0 - strh r0, [r4, 0x8] - ldr r4, _08101FDC @ =gSharedMem - ldrb r1, [r4, 0x4] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08101FE0 - bl sub_810430C - movs r0, 0xA - b _08101FE8 - .align 2, 0 -_08101FDC: .4byte gSharedMem -_08101FE0: - movs r0, 0x1 - bl sub_8104CAC - movs r0, 0xB -_08101FE8: - strb r0, [r4] - ldr r4, _08102004 @ =gSharedMem - movs r0, 0x8 - strh r0, [r4, 0x1A] - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _08101FFC - bl dp15_jump_random_unknown - strh r0, [r4, 0x1A] -_08101FFC: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08102004: .4byte gSharedMem - thumb_func_end sub_8101FA4 - - thumb_func_start sub_8102008 -sub_8102008: @ 8102008 - push {lr} - bl sub_810432C - lsls r0, 24 - cmp r0, 0 - beq _08102028 - movs r0, 0x1 - bl sub_8104CAC - ldr r1, _08102030 @ =gSharedMem - ldrb r2, [r1, 0x4] - movs r0, 0xDF - ands r0, r2 - strb r0, [r1, 0x4] - movs r0, 0xB - strb r0, [r1] -_08102028: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08102030: .4byte gSharedMem - thumb_func_end sub_8102008 - - thumb_func_start sub_8102034 -sub_8102034: @ 8102034 - push {lr} - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x1D - ble _0810204E - bl sub_81024F0 - ldr r1, _08102054 @ =gSharedMem - movs r0, 0xC - strb r0, [r1] -_0810204E: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08102054: .4byte gSharedMem - thumb_func_end sub_8102034 - - thumb_func_start sub_8102058 -sub_8102058: @ 8102058 - push {r4,lr} - ldr r0, _08102088 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0810207E - movs r0, 0x18 - bl PlaySE - ldr r4, _0810208C @ =gSharedMem - ldrb r0, [r4, 0x18] - bl sub_8102E1C - ldrb r0, [r4, 0x18] - bl sub_8103C14 - movs r0, 0xD - strb r0, [r4] -_0810207E: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08102088: .4byte gMain -_0810208C: .4byte gSharedMem - thumb_func_end sub_8102058 - - thumb_func_start sub_8102090 -sub_8102090: @ 8102090 - push {r4,lr} - ldr r4, _081020BC @ =gSharedMem - ldrb r0, [r4, 0x18] - bl sub_8102E40 - lsls r0, 24 - cmp r0, 0 - bne _081020C0 - ldrh r0, [r4, 0x18] - adds r0, 0x1 - strh r0, [r4, 0x18] - movs r1, 0xC - strb r1, [r4] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _081020B6 - movs r0, 0xE - strb r0, [r4] -_081020B6: - movs r0, 0x1 - b _081020C2 - .align 2, 0 -_081020BC: .4byte gSharedMem -_081020C0: - movs r0, 0 -_081020C2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8102090 - - thumb_func_start sub_81020C8 -sub_81020C8: @ 81020C8 - push {r4,lr} - ldr r4, _08102128 @ =gSharedMem - ldrb r1, [r4, 0x4] - movs r0, 0xC0 - ands r0, r1 - strb r0, [r4, 0x4] - bl sub_81027A0 - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _081020E8 - subs r0, 0x1 - strb r0, [r4, 0xA] - ldrb r0, [r4, 0xB] - adds r0, 0x1 - strb r0, [r4, 0xB] -_081020E8: - ldrh r0, [r4, 0x8] - cmp r0, 0 - beq _081021B4 - movs r0, 0xF - strb r0, [r4] - bl sub_8102A24 - bl sub_8103F70 - ldrh r0, [r4, 0x10] - ldrh r1, [r4, 0xE] - subs r0, r1 - strh r0, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - bge _0810210C - movs r0, 0 - strh r0, [r4, 0x10] -_0810210C: - ldrh r1, [r4, 0x8] - movs r0, 0xC0 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08102130 - ldr r0, _0810212C @ =0x00000185 - bl PlayFanfare - movs r0, 0x6 - bl sub_8104CAC - b _0810215A - .align 2, 0 -_08102128: .4byte gSharedMem -_0810212C: .4byte 0x00000185 -_08102130: - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0810214C - ldr r0, _08102148 @ =0x00000185 - bl PlayFanfare - movs r0, 0x5 - bl sub_8104CAC - b _0810215A - .align 2, 0 -_08102148: .4byte 0x00000185 -_0810214C: - movs r0, 0xC3 - lsls r0, 1 - bl PlayFanfare - movs r0, 0x2 - bl sub_8104CAC -_0810215A: - ldr r1, _081021B0 @ =gSharedMem - ldrh r3, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 1 - ands r0, r3 - adds r2, r1, 0 - cmp r0, 0 - beq _08102192 - ldrb r1, [r2, 0x4] - movs r0, 0x3F - ands r0, r1 - movs r1, 0 - strb r0, [r2, 0x4] - movs r0, 0xC0 - lsls r0, 1 - ands r0, r3 - cmp r0, 0 - beq _08102192 - strb r1, [r2, 0xA] - strb r1, [r2, 0xB] - strb r1, [r2, 0x3] - movs r0, 0x80 - lsls r0, 1 - ands r0, r3 - cmp r0, 0 - beq _08102192 - movs r0, 0x1 - strb r0, [r2, 0x3] -_08102192: - ldrh r1, [r2, 0x8] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081021D2 - ldrb r0, [r2, 0x2] - cmp r0, 0xF - bhi _081021D2 - adds r0, 0x1 - strb r0, [r2, 0x2] - ldrb r0, [r2, 0x2] - bl sub_8104064 - b _081021D2 - .align 2, 0 -_081021B0: .4byte gSharedMem -_081021B4: - movs r0, 0x3 - bl sub_8104CAC - movs r0, 0x14 - strb r0, [r4] - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0x10] - adds r0, r1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - ldr r1, _081021DC @ =0x0000270f - cmp r0, r1 - ble _081021D2 - strh r1, [r4, 0x10] -_081021D2: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081021DC: .4byte 0x0000270f - thumb_func_end sub_81020C8 - - thumb_func_start sub_81021E0 -sub_81021E0: @ 81021E0 - push {lr} - bl sub_8102A44 - lsls r0, 24 - cmp r0, 0 - beq _081021F2 - ldr r1, _081021F8 @ =gSharedMem - movs r0, 0x10 - strb r0, [r1] -_081021F2: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_081021F8: .4byte gSharedMem - thumb_func_end sub_81021E0 - - thumb_func_start sub_81021FC -sub_81021FC: @ 81021FC - push {r4,lr} - bl sub_8103FA0 - lsls r0, 24 - cmp r0, 0 - beq _08102256 - ldr r4, _08102260 @ =gSharedMem - movs r0, 0x13 - strb r0, [r4] - ldrh r1, [r4, 0x8] - movs r0, 0xC0 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08102220 - movs r0, 0x1C - bl IncrementGameStat -_08102220: - ldrh r1, [r4, 0x8] - movs r0, 0x4 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08102236 - movs r0, 0 - strh r0, [r4, 0x18] - movs r0, 0x9 - strb r0, [r4] -_08102236: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08102242 - movs r0, 0x11 - strb r0, [r4] -_08102242: - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _08102256 - cmp r2, 0 - beq _08102256 - movs r0, 0x4 - bl sub_8104CAC - movs r0, 0x12 - strb r0, [r4] -_08102256: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08102260: .4byte gSharedMem - thumb_func_end sub_81021FC - - thumb_func_start sub_8102264 -sub_8102264: @ 8102264 - push {r4,lr} - bl sub_81040C8 - lsls r0, 24 - cmp r0, 0 - bne _08102294 - ldr r4, _0810229C @ =gSharedMem - movs r0, 0x13 - strb r0, [r4] - ldrh r1, [r4, 0x8] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08102294 - movs r0, 0x9 - strb r0, [r4] - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _08102294 - movs r0, 0x4 - bl sub_8104CAC - movs r0, 0x12 - strb r0, [r4] -_08102294: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0810229C: .4byte gSharedMem - thumb_func_end sub_8102264 - - thumb_func_start sub_81022A0 -sub_81022A0: @ 81022A0 - push {lr} - bl sub_8104E18 - lsls r0, 24 - cmp r0, 0 - beq _081022C0 - ldr r2, _081022C8 @ =gSharedMem - movs r0, 0x13 - strb r0, [r2] - ldrh r1, [r2, 0x8] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081022C0 - movs r0, 0x9 - strb r0, [r2] -_081022C0: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_081022C8: .4byte gSharedMem - thumb_func_end sub_81022A0 - - thumb_func_start sub_81022CC -sub_81022CC: @ 81022CC - push {lr} - movs r0, 0 - bl sub_8103D8C - movs r0, 0x1 - bl sub_8103D8C - movs r0, 0x2 - bl sub_8103D8C - ldr r1, _081022EC @ =gSharedMem - movs r0, 0x2 - strb r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_081022EC: .4byte gSharedMem - thumb_func_end sub_81022CC - - thumb_func_start sub_81022F0 -sub_81022F0: @ 81022F0 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0xA] - adds r0, 0x1 - strh r0, [r1, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x40 - ble _0810230C - movs r0, 0 - strh r0, [r1, 0xA] - ldr r1, _08102314 @ =gSharedMem - movs r0, 0x13 - strb r0, [r1] -_0810230C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08102314: .4byte gSharedMem - thumb_func_end sub_81022F0 - - thumb_func_start sub_8102318 -sub_8102318: @ 8102318 - push {lr} - ldr r0, _0810233C @ =gOtherText_QuitGamePrompt - bl sub_8101F2C - movs r0, 0x15 - movs r1, 0x7 - movs r2, 0x1 - bl DisplayYesNoMenu - bl sub_814AB84 - ldr r1, _08102340 @ =gSharedMem - movs r0, 0x16 - strb r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0810233C: .4byte gOtherText_QuitGamePrompt -_08102340: .4byte gSharedMem - thumb_func_end sub_8102318 - - thumb_func_start sub_8102344 -sub_8102344: @ 8102344 - push {lr} - bl ProcessMenuInputNoWrap_ - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - bne _0810237C - bl MenuZeroFillScreen - movs r0, 0 - bl sub_8103D8C - movs r0, 0x1 - bl sub_8103D8C - movs r0, 0x2 - bl sub_8103D8C - ldr r0, _08102378 @ =gSharedMem - ldrh r1, [r0, 0x12] - ldrh r2, [r0, 0xC] - adds r1, r2 - strh r1, [r0, 0xC] - movs r1, 0x1B - strb r1, [r0] - b _08102392 - .align 2, 0 -_08102378: .4byte gSharedMem -_0810237C: - cmp r1, 0x1 - beq _08102388 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _08102392 -_08102388: - bl MenuZeroFillScreen - ldr r1, _08102398 @ =gSharedMem - movs r0, 0x5 - strb r0, [r1] -_08102392: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08102398: .4byte gSharedMem - thumb_func_end sub_8102344 - - thumb_func_start sub_810239C -sub_810239C: @ 810239C - push {lr} - ldr r0, _081023B0 @ =gOtherText_MaxCoins - bl sub_8101F2C - ldr r1, _081023B4 @ =gSharedMem - movs r0, 0x18 - strb r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_081023B0: .4byte gOtherText_MaxCoins -_081023B4: .4byte gSharedMem - thumb_func_end sub_810239C - - thumb_func_start sub_81023B8 -sub_81023B8: @ 81023B8 - push {lr} - ldr r0, _081023D8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _081023D0 - bl MenuZeroFillScreen - ldr r1, _081023DC @ =gSharedMem - movs r0, 0x5 - strb r0, [r1] -_081023D0: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_081023D8: .4byte gMain -_081023DC: .4byte gSharedMem - thumb_func_end sub_81023B8 - - thumb_func_start sub_81023E0 -sub_81023E0: @ 81023E0 - push {lr} - ldr r0, _081023F4 @ =gOtherText_OutOfCoins - bl sub_8101F2C - ldr r1, _081023F8 @ =gSharedMem - movs r0, 0x1A - strb r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_081023F4: .4byte gOtherText_OutOfCoins -_081023F8: .4byte gSharedMem - thumb_func_end sub_81023E0 - - thumb_func_start sub_81023FC -sub_81023FC: @ 81023FC - push {lr} - ldr r0, _0810241C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08102414 - bl MenuZeroFillScreen - ldr r1, _08102420 @ =gSharedMem - movs r0, 0x1B - strb r0, [r1] -_08102414: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0810241C: .4byte gMain -_08102420: .4byte gSharedMem - thumb_func_end sub_81023FC - - thumb_func_start sub_8102424 -sub_8102424: @ 8102424 - push {r4,lr} - sub sp, 0x4 - ldr r0, _08102454 @ =gSaveBlock1 - ldr r4, _08102458 @ =gSharedMem - ldrh r1, [r4, 0xC] - ldr r2, _0810245C @ =0x00000494 - adds r0, r2 - movs r2, 0 - strh r1, [r0] - movs r0, 0x1 - negs r0, r0 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08102454: .4byte gSaveBlock1 -_08102458: .4byte gSharedMem -_0810245C: .4byte 0x00000494 - thumb_func_end sub_8102424 - - thumb_func_start sub_8102460 -sub_8102460: @ 8102460 - push {lr} - ldr r0, _0810247C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08102476 - ldr r0, _08102480 @ =gSharedMem - ldr r0, [r0, 0x64] - bl SetMainCallback2 -_08102476: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0810247C: .4byte gPaletteFade -_08102480: .4byte gSharedMem - thumb_func_end sub_8102460 - - thumb_func_start sub_8102484 -sub_8102484: @ 8102484 - push {r4,lr} - ldr r4, _081024E4 @ =gSharedMem - ldrb r0, [r4, 0xA] - cmp r0, 0 - bne _081024DC - ldrb r1, [r4, 0x4] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - bne _081024DC - bl sub_8102540 - lsls r0, 24 - cmp r0, 0 - beq _081024C0 - bl sub_8102578 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - beq _081024C0 - ldr r1, _081024E8 @ =gUnknown_083ECE42 - lsls r0, r3, 1 - adds r0, r1 - ldrb r1, [r0] - ldrb r0, [r4, 0x4] - orrs r0, r1 - strb r0, [r4, 0x4] - cmp r3, 0x1 - bne _081024DC -_081024C0: - bl sub_81025BC - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - beq _081024DC - ldr r2, _081024E4 @ =gSharedMem - ldr r1, _081024EC @ =gUnknown_083ECE48 - lsls r0, r3, 1 - adds r0, r1 - ldrb r1, [r0] - ldrb r0, [r2, 0x4] - orrs r0, r1 - strb r0, [r2, 0x4] -_081024DC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081024E4: .4byte gSharedMem -_081024E8: .4byte gUnknown_083ECE42 -_081024EC: .4byte gUnknown_083ECE48 - thumb_func_end sub_8102484 - - thumb_func_start sub_81024F0 -sub_81024F0: @ 81024F0 - push {lr} - ldr r1, _08102508 @ =gSharedMem - movs r0, 0 - strb r0, [r1, 0x6] - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08102502 - movs r0, 0x1 - strb r0, [r1, 0x6] -_08102502: - pop {r0} - bx r0 - .align 2, 0 -_08102508: .4byte gSharedMem - thumb_func_end sub_81024F0 - - thumb_func_start sub_810250C -sub_810250C: @ 810250C - push {r4,lr} - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0 - movs r3, 0x1 - ldr r4, _08102528 @ =gUnknown_083ECE3A -_08102518: - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - beq _0810252C - adds r0, r2, r4 - ldrb r0, [r0] - b _0810253A - .align 2, 0 -_08102528: .4byte gUnknown_083ECE3A -_0810252C: - lsrs r1, 1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _08102518 - movs r0, 0 -_0810253A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_810250C - - thumb_func_start sub_8102540 -sub_8102540: @ 8102540 - push {r4,lr} - bl Random - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08102568 @ =gUnknown_083ECD04 - ldr r1, _0810256C @ =gSharedMem - movs r3, 0x12 - ldrsh r2, [r1, r3] - ldrb r3, [r1, 0x1] - lsls r1, r3, 1 - adds r1, r3 - subs r1, 0x1 - adds r2, r1 - adds r2, r4 - ldrb r1, [r2] - cmp r1, r0 - bhi _08102570 - movs r0, 0 - b _08102572 - .align 2, 0 -_08102568: .4byte gUnknown_083ECD04 -_0810256C: .4byte gSharedMem -_08102570: - movs r0, 0x1 -_08102572: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8102540 - - thumb_func_start sub_8102578 -sub_8102578: @ 8102578 - push {r4-r6,lr} - movs r5, 0 - ldr r6, _081025B4 @ =gUnknown_083ECD16 -_0810257E: - bl Random - movs r2, 0xFF - ldr r3, _081025B8 @ =gSharedMem - lsls r1, r5, 16 - asrs r4, r1, 16 - lsls r1, r4, 1 - adds r1, r4 - lsls r1, 1 - ldrb r3, [r3, 0x1] - adds r1, r3 - adds r1, r6 - ldrb r1, [r1] - ands r2, r0 - cmp r1, r2 - bgt _081025AA - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _0810257E -_081025AA: - lsls r0, r5, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081025B4: .4byte gUnknown_083ECD16 -_081025B8: .4byte gSharedMem - thumb_func_end sub_8102578 - thumb_func_start sub_81025BC sub_81025BC: @ 81025BC push {r4-r7,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 9bd6fe5c9..827d27747 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -4,38 +4,6 @@ .section .rodata .align 2 -gUnknown_083ECAAC:: @ 83ECAAC - .4byte sub_8101D5C - .4byte sub_8101D8C - .4byte sub_8101DB0 - .4byte sub_8101DF4 - .4byte sub_8101E10 - .4byte sub_8101E3C - .4byte sub_8101F44 - .4byte sub_8101F60 - .4byte sub_8101F88 - .4byte sub_8101FA4 - .4byte sub_8102008 - .4byte sub_8102034 - .4byte sub_8102058 - .4byte sub_8102090 - .4byte sub_81020C8 - .4byte sub_81021E0 - .4byte sub_81021FC - .4byte sub_8102264 - .4byte sub_81022A0 - .4byte sub_81022CC - .4byte sub_81022F0 - .4byte sub_8102318 - .4byte sub_8102344 - .4byte sub_810239C - .4byte sub_81023B8 - .4byte sub_81023E0 - .4byte sub_81023FC - .4byte sub_8102424 - .4byte sub_8102460 - - .align 2 gUnknown_083ECB20:: @ 83ECB20 .4byte sub_8102A9C .4byte sub_8102AD0 diff --git a/include/ewram.h b/include/ewram.h index eacc02cab..9d3002615 100755 --- a/include/ewram.h +++ b/include/ewram.h @@ -24,7 +24,7 @@ extern u8 gSharedMem[]; #define ewram0arr ((u8 (*)[32])gSharedMem) #define eVoidSharedArr (void *)(ewram_addr + 0x0) #define eVoidSharedArr2 (u32)(ewram_addr) // ew(ram) -#define ewram0_8 ((struct UnkStruct2000000 *)(gSharedMem + 0x0)) +#define eSlotMachine ((struct SlotMachineEwramStruct *)(gSharedMem + 0x0)) #define ewram0_9(i) (u8 *)(ewram_addr + (i * 0x20)) #define ewram0_10 (*(struct UnknownPokenav0*)(gSharedMem + 0)) #define ewram0_11 (*(struct UnknownPokenav0_1*)(gSharedMem + 0)) diff --git a/include/slot_machine.h b/include/slot_machine.h index c39aa7ca8..0e7efaf29 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -1,6 +1,39 @@ #ifndef GUARD_SLOT_MACHINE_H #define GUARD_SLOT_MACHINE_H +struct SlotMachineEwramStruct { + /*0x00*/ u8 state; + /*0x01*/ u8 unk01; + /*0x02*/ u8 unk02; + /*0x03*/ u8 unk03; + /*0x04*/ u8 unk04; + /*0x05*/ u8 unk05; + /*0x06*/ u8 unk06; + /*0x07*/ u8 unk07; + /*0x08*/ u16 unk08; + /*0x0A*/ u8 unk0A; + /*0x0B*/ u8 unk0B; + /*0x0C*/ s16 coins; + /*0x0E*/ u16 unk0E; + /*0x10*/ s16 unk10; + /*0x12*/ s16 bet; + /*0x14*/ u8 filler14[4]; + /*0x18*/ s16 unk18; + /*0x1A*/ u16 unk1A; + /*0x1C*/ s16 unk1C[3]; + /*0x22*/ u16 unk22[3]; + /*0x28*/ s16 unk28[3]; + /*0x2E*/ u8 filler2E[15]; + /*0x3D*/ u8 unk3D; + /*0x3E*/ u8 filler3E[26]; + /*0x58*/ u16 win0h; + /*0x5a*/ u16 win0v; + /*0x5c*/ u16 winIn; + /*0x5e*/ u16 winOut; + /*0x60*/ u16 backupMapMusic; + /*0x64*/ MainCallback prevMainCb; +}; + void PlaySlotMachine(u8, void *); void sub_8104DA4(void); u8 sub_8105BB4(u8, u8, s16); diff --git a/include/sprite.h b/include/sprite.h index 9937a0797..1e989b6d5 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -238,6 +238,8 @@ extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; extern u8 gReservedSpritePaletteCount; +extern u8 gOamLimit; + extern struct Sprite gSprites[]; void ResetSpriteData(void); diff --git a/ld_script.txt b/ld_script.txt index 07334bd2c..8e88f1453 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -319,8 +319,9 @@ SECTIONS { src/scene/cute_sketch.o(.text); asm/cute_sketch.o(.text); src/field/decoration.o(.text); - asm/slot_machine.o(.text); src/field/slot_machine.o(.text); + asm/slot_machine.o(.text); + src/field/slot_machine.o(.text_a); asm/slot_machine.o(.text_8104D30) src/field/slot_machine.o(.text_b); src/scene/contest_painting.o(.text); @@ -554,6 +555,7 @@ SECTIONS { src/field/region_map.o(.rodata); data/cute_sketch.o(.rodata); src/field/decoration.o(.rodata); + src/field/slot_machine.o(.rodata); data/slot_machine.o(.rodata); src/scene/contest_painting.o(.rodata); src/battle/battle_ai.o(.rodata); diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 89ec68b0a..f6d58e592 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -1,15 +1,20 @@ #include "global.h" +#include "constants/songs.h" +#include "strings2.h" +#include "overworld.h" +#include "menu_cursor.h" +#include "random.h" +#include "sound.h" +#include "main.h" #include "slot_machine.h" #include "decompress.h" #include "palette.h" #include "task.h" +#include "util.h" +#include "text.h" +#include "menu.h" #include "ewram.h" -struct UnkStruct2000000 { - /*0x00*/ u8 filler00[61]; - /*0x3D*/ u8 unk3D; -}; - struct UnkStruct1 { /*0x00*/ u8 unk00; /*0x01*/ u8 unk01; @@ -31,6 +36,901 @@ extern const u16 gUnknown_08E95A18[]; extern u16 gUnknown_08E95AB8[]; extern u16 gUnknown_08E95FB8[]; +static void sub_81018B8(void); +static void sub_8101954(void); +static void sub_81019B0(u8 arg0, void *ptr); +static void nullsub_67(u8 taskId); +static void sub_8101A28(void); +static void sub_8101A44(void); +static void sub_8101A8C(void); +static void sub_8101AE0(void); +static void sub_8101B04(void); +static void sub_8101BA4(void); +static void sub_8101C84(void); +static void sub_8101CA0(void); +static void sub_8101CC0(void); +static void sub_8101CD4(void); +static void sub_8101CEC(void); +static void sub_8101D04(void); +static void sub_8101D24(u8 taskId); +static bool8 sub_8101D5C(struct Task *task); +static bool8 sub_8101D8C(struct Task *task); +static bool8 sub_8101DB0(struct Task *task); +static bool8 sub_8101DF4(struct Task *task); +static bool8 sub_8101E10(struct Task *task); +static bool8 sub_8101E3C(struct Task *task); +static bool8 sub_8101F44(struct Task *task); +static bool8 sub_8101F60(struct Task *task); +static bool8 sub_8101F88(struct Task *task); +static bool8 sub_8101FA4(struct Task *task); +static bool8 sub_8102008(struct Task *task); +static bool8 sub_8102034(struct Task *task); +static bool8 sub_8102058(struct Task *task); +static bool8 sub_8102090(struct Task *task); +static bool8 sub_81020C8(struct Task *task); +static bool8 sub_81021E0(struct Task *task); +static bool8 sub_81021FC(struct Task *task); +static bool8 sub_8102264(struct Task *task); +static bool8 sub_81022A0(struct Task *task); +static bool8 sub_81022CC(struct Task *task); +static bool8 sub_81022F0(struct Task *task); +static bool8 sub_8102318(struct Task *task); +static bool8 sub_8102344(struct Task *task); +static bool8 sub_810239C(struct Task *task); +static bool8 sub_81023B8(struct Task *task); +static bool8 sub_81023E0(struct Task *task); +static bool8 sub_81023FC(struct Task *task); +static bool8 sub_8102424(struct Task *task); +static bool8 sub_8102460(struct Task *task); +static void sub_8102484(void); +static void sub_81024F0(void); +static bool8 sub_8102540(void); +static u8 sub_8102578(void); +u8 sub_81025BC(void); +void sub_81027A0(void); +void sub_8102A24(void); +bool8 sub_8102A44(void); +void sub_8102DA8(void); +void sub_8102DEC(u8 a0); +void sub_8102E1C(u8 a0); +bool8 sub_8102E40(u8 a0); +void sub_8103C14(u8 a0); +void sub_8103D50(u8 a0); +void sub_8103D8C(u8 a0); +void sub_8103DC8(void); +void sub_8103F70(void); +bool8 sub_8103FA0(void); +void sub_8104048(void); +void sub_8104064(u8 a0); +bool8 sub_81040C8(void); +void sub_810423C(u8 a0); +void sub_810430C(void); +bool8 sub_810432C(void); +void sub_8104AB8(u8 a0); +bool8 sub_8104AEC(void); +void sub_8104C5C(void); +void sub_8104CAC(u8 arg0); +bool8 sub_8104E18(void); +void sub_8104EA8(void); +void sub_8104F8C(void); +void sub_81050C4(void); +void sub_81063C0(void); +static void sub_8106448(void); +void sub_81064B8(void); +u16 dp15_jump_random_unknown(void); + +static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = { + sub_8101D5C, + sub_8101D8C, + sub_8101DB0, + sub_8101DF4, + sub_8101E10, + sub_8101E3C, + sub_8101F44, + sub_8101F60, + sub_8101F88, + sub_8101FA4, + sub_8102008, + sub_8102034, + sub_8102058, + sub_8102090, + sub_81020C8, + sub_81021E0, + sub_81021FC, + sub_8102264, + sub_81022A0, + sub_81022CC, + sub_81022F0, + sub_8102318, + sub_8102344, + sub_810239C, + sub_81023B8, + sub_81023E0, + sub_81023FC, + sub_8102424, + sub_8102460 +}; + +extern const u8 gUnknown_083ECD04[][3]; +extern const u8 gUnknown_083ECE3A[]; +extern const u16 gUnknown_083ECE42[]; +extern const u16 gUnknown_083ECE48[]; + +void PlaySlotMachine(u8 arg0, void *ptr) +{ + sub_81019B0(arg0, ptr); + SetMainCallback2(sub_81018B8); +} + +static void sub_81018B8(void) +{ + switch (gMain.state) + { + case 0: + sub_8101A28(); + sub_8101BA4(); + gMain.state++; + break; + case 1: + sub_8101A8C(); + gMain.state++; + break; + case 2: + sub_8101AE0(); + sub_8101B04(); + gMain.state++; + break; + case 3: + sub_8101C84(); + gMain.state++; + break; + case 4: + sub_8101CA0(); + gMain.state++; + break; + case 5: + sub_8101CC0(); + gMain.state++; + break; + case 6: + sub_8101CD4(); + sub_8101CEC(); + sub_8101A44(); + SetMainCallback2(sub_8101954); + break; + } +} + +static void sub_8101954(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_810196C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + REG_WIN0H = eSlotMachine->win0h; + REG_WIN0V = eSlotMachine->win0v; + REG_WININ = eSlotMachine->winIn; + REG_WINOUT = eSlotMachine->winOut; +} + +static void sub_81019B0(u8 arg0, void *ptr) +{ + struct Task *task = &gTasks[CreateTask(nullsub_67, 0xFF)]; + task->data[0] = arg0; + StoreWordInTwoHalfwords(task->data + 1, (intptr_t)ptr); +} + +void sub_81019EC(void) +{ + struct Task *task = &gTasks[FindTaskIdByFunc(nullsub_67)]; + eSlotMachine->unk01 = task->data[0]; + LoadWordFromTwoHalfwords((u16 *)(task->data + 1), (u32 *)&eSlotMachine->prevMainCb); +} + +static void nullsub_67(u8 taskId) +{ +} + +static void sub_8101A28(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + REG_DISPCNT = 0; +} + +static void sub_8101A44(void) +{ + u16 imeBak; + SetVBlankCallback(sub_810196C); + imeBak = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = imeBak; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; +} + +static void sub_8101A8C(void) +{ + DmaClearLarge16(3, (u16 *)(BG_VRAM), BG_VRAM_SIZE, 0x1000); +} + +static void sub_8101AE0(void) +{ + DmaClear16(3, (u16 *)OAM, OAM_SIZE); +} + +static void sub_8101B04(void) +{ + REG_BG0CNT = 0; + REG_BG1CNT = 0; + REG_BG2CNT = 0; + REG_BG3CNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_SCREENBASE(31) | BGCNT_CHARBASE(2); + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(28); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(29); + REG_BG3CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(30); + REG_WININ = 0x3f; + REG_WINOUT = 0x3f; + REG_BLDCNT = BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_OBJ; + REG_BLDALPHA = 0x809; +} + +extern const s16 gUnknown_083ECCF8[3][2]; + +static void sub_8101BA4(void) +{ + u8 i; + + sub_81019EC(); + eSlotMachine->state = 0; + eSlotMachine->unk02 = 0; + eSlotMachine->unk03 = Random() & 1; + eSlotMachine->unk04 = 0; + eSlotMachine->unk08 = 0; + eSlotMachine->unk0A = 0; + eSlotMachine->unk0B = 0; + eSlotMachine->coins = gSaveBlock1.coins; + eSlotMachine->unk0E = 0; + eSlotMachine->unk10 = 0; + eSlotMachine->bet = 0; + eSlotMachine->unk18 = 0; + eSlotMachine->unk1A = 8; + eSlotMachine->win0h = 0xf0; + eSlotMachine->win0v = 0xa0; + eSlotMachine->winIn = 0x3f; + eSlotMachine->winOut = 0x3f; + eSlotMachine->backupMapMusic = GetCurrentMapMusic(); + for (i = 0; i < 3; i++) + { + eSlotMachine->unk22[i] = 0; + eSlotMachine->unk28[i] = gUnknown_083ECCF8[i][eSlotMachine->unk03] % 21; + eSlotMachine->unk1C[i] = 0x1f8 - eSlotMachine->unk28[i] * 24; + eSlotMachine->unk1C[i] %= 0x1f8; + } +} + +static void sub_8101C84(void) +{ + SetUpWindowConfig(&gWindowConfig_81E7128); + InitMenuWindow(&gWindowConfig_81E7128); +} + +static void sub_8101CA0(void) +{ + ResetPaletteFade(); + ResetSpriteData(); + gOamLimit = 128; + FreeAllSpritePalettes(); + ResetTasks(); +} + +static void sub_8101CC0(void) +{ + sub_8106448(); + sub_81064B8(); + sub_81063C0(); +} + +static void sub_8101CD4(void) +{ + sub_8104EA8(); + sub_8104F8C(); + sub_8103DC8(); + sub_81050C4(); +} + +static void sub_8101CEC(void) +{ + sub_8104048(); + sub_8102DA8(); + sub_8104C5C(); + sub_8101D04(); +} + +static void sub_8101D04(void) +{ + sub_8101D24(CreateTask(sub_8101D24, 0)); +} + +static void sub_8101D24(u8 taskId) +{ + while (gUnknown_083ECAAC[eSlotMachine->state](gTasks + taskId)); +} + +static bool8 sub_8101D5C(struct Task *task) +{ + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + sub_810423C(eSlotMachine->unk02); + eSlotMachine->state++; + return FALSE; +} + +static bool8 sub_8101D8C(struct Task *task) +{ + if (!gPaletteFade.active) + { + eSlotMachine->state++; + } + return FALSE; +} + +static bool8 sub_8101DB0(struct Task *task) +{ + eSlotMachine->unk0E = 0; + eSlotMachine->bet = 0; + eSlotMachine->unk18 = 0; + eSlotMachine->unk04 &= 0xc0; + eSlotMachine->state = 4; + if (eSlotMachine->coins <= 0) + { + eSlotMachine->state = 25; + } + else if (eSlotMachine->unk0A) + { + eSlotMachine->state = 3; + sub_8104CAC(4); + } + return TRUE; +} + +static bool8 sub_8101DF4(struct Task *task) +{ + if (sub_8104E18()) + { + eSlotMachine->state = 4; + } + return FALSE; +} + +static bool8 sub_8101E10(struct Task *task) +{ + sub_8104CAC(0); + eSlotMachine->state = 5; + if (eSlotMachine->coins >= 9999) + { + eSlotMachine->state = 23; + } + return TRUE; +} + +static bool8 sub_8101E3C(struct Task *task) +{ + s16 i; + + if (gMain.newKeys & SELECT_BUTTON) + { + sub_8104AB8(0); + eSlotMachine->state = 8; + } + else if (gMain.newKeys & R_BUTTON) + { + if (eSlotMachine->coins - (3 - eSlotMachine->bet) >= 0) + { + for (i = eSlotMachine->bet; i < 3; i++) + { + sub_8103D50(i); + } + eSlotMachine->coins -= (3 - eSlotMachine->bet); + eSlotMachine->bet = 3; + eSlotMachine->state = 9; + PlaySE(SE_REGI); + } + else + { + eSlotMachine->state = 6; + } + } + else + { + if (gMain.newKeys & DPAD_DOWN && eSlotMachine->coins != 0) + { + PlaySE(SE_REGI); + sub_8103D50(eSlotMachine->bet); + eSlotMachine->coins--; + eSlotMachine->bet++; + } + if (eSlotMachine->bet >= 3 || (eSlotMachine->bet != 0 && gMain.newKeys & A_BUTTON)) + { + eSlotMachine->state = 9; + } + if (gMain.newKeys & B_BUTTON) + { + eSlotMachine->state = 21; + } + } + return FALSE; +} + +void sub_8101F2C(const u8 *str) +{ + MenuDisplayMessageBox(); + MenuPrint(str, 2, 15); +} + +static bool8 sub_8101F44(struct Task *task) +{ + sub_8101F2C(gOtherText_DontHaveThreeCoins); + eSlotMachine->state = 7; + return FALSE; +} + +static bool8 sub_8101F60(struct Task *task) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + MenuZeroFillScreen(); + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_8101F88(struct Task *task) +{ + if (sub_8104AEC()) + { + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_8101FA4(struct Task *task) +{ + sub_8102484(); + sub_8104DA4(); + sub_8102DEC(0); + sub_8102DEC(1); + sub_8102DEC(2); + task->data[0] = 0; + if (eSlotMachine->unk04 & 0x20) + { + sub_810430C(); + eSlotMachine->state = 10; + } + else + { + sub_8104CAC(1); + eSlotMachine->state = 11; + } + eSlotMachine->unk1A = 8; + if (eSlotMachine->unk0A) + { + eSlotMachine->unk1A = dp15_jump_random_unknown(); + } + return FALSE; +} + +static bool8 sub_8102008(struct Task *task) +{ + if (sub_810432C()) + { + sub_8104CAC(1); + eSlotMachine->unk04 &= 0xDF; + eSlotMachine->state = 11; + } + return FALSE; +} + +static bool8 sub_8102034(struct Task *task) +{ + if (++task->data[0] >= 30) + { + sub_81024F0(); + eSlotMachine->state = 12; + } + return FALSE; +} + +static bool8 sub_8102058(struct Task *task) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_JYUNI); + sub_8102E1C(eSlotMachine->unk18); + sub_8103C14(eSlotMachine->unk18); + eSlotMachine->state = 13; + } + return FALSE; +} + +static bool8 sub_8102090(struct Task *task) +{ + if (!sub_8102E40(eSlotMachine->unk18)) + { + eSlotMachine->unk18++; + eSlotMachine->state = 12; + if (eSlotMachine->unk18 > 2) + { + eSlotMachine->state = 14; + } + return TRUE; + } + return FALSE; +} + +static bool8 sub_81020C8(struct Task *task) +{ + eSlotMachine->unk04 &= 0xc0; + sub_81027A0(); + if (eSlotMachine->unk0A) + { + eSlotMachine->unk0A--; + eSlotMachine->unk0B++; + } + if (eSlotMachine->unk08) + { + eSlotMachine->state = 15; + sub_8102A24(); + sub_8103F70(); + if ((eSlotMachine->unk10 -= eSlotMachine->unk0E) < 0) + { + eSlotMachine->unk10 = 0; + } + if (eSlotMachine->unk08 & 0x180) + { + PlayFanfare(BGM_ME_B_BIG); + sub_8104CAC(6); + } + else if (eSlotMachine->unk08 & 0x40) + { + PlayFanfare(BGM_ME_B_BIG); + sub_8104CAC(5); + } + else + { + PlayFanfare(BGM_ME_B_SMALL); + sub_8104CAC(2); + } + if (eSlotMachine->unk08 & 0x1c0) + { + eSlotMachine->unk04 &= 0x3f; + if (eSlotMachine->unk08 & 0x180) + { + eSlotMachine->unk0A = 0; + eSlotMachine->unk0B = 0; + eSlotMachine->unk03 = 0; + if (eSlotMachine->unk08 & 0x100) + { + eSlotMachine->unk03 = 1; + } + } + } + if (eSlotMachine->unk08 & 0x20 && eSlotMachine->unk02 < 16) + { + eSlotMachine->unk02++; + sub_8104064(eSlotMachine->unk02); + } + } + else + { + sub_8104CAC(3); + eSlotMachine->state = 20; + if ((eSlotMachine->unk10 += eSlotMachine->bet) > 9999) + { + eSlotMachine->unk10 = 9999; + } + } + return FALSE; +} + +static bool8 sub_81021E0(struct Task *task) +{ + if (sub_8102A44()) + { + eSlotMachine->state = 16; + } + return FALSE; +} + +static bool8 sub_81021FC(struct Task *task) +{ + if (sub_8103FA0()) + { + eSlotMachine->state = 19; + if (eSlotMachine->unk08 & 0x180) + { + IncrementGameStat(GAME_STAT_SLOT_JACKPOTS); + } + if (eSlotMachine->unk08 & 0x04) + { + eSlotMachine->unk18 = 0; + eSlotMachine->state = 9; + } + if (eSlotMachine->unk08 & 0x20) + { + eSlotMachine->state = 17; + } + if (eSlotMachine->unk0A && eSlotMachine->unk08 & 0x04) + { + sub_8104CAC(4); + eSlotMachine->state = 18; + } + } + return FALSE; +} + +static bool8 sub_8102264(struct Task *task) +{ + if (!sub_81040C8()) + { + eSlotMachine->state = 19; + if (eSlotMachine->unk08 & 0x04) + { + eSlotMachine->state = 9; + if (eSlotMachine->unk0A) + { + sub_8104CAC(4); + eSlotMachine->state = 18; + } + } + } + return FALSE; +} + +static bool8 sub_81022A0(struct Task *task) +{ + if (sub_8104E18()) + { + eSlotMachine->state = 19; + if (eSlotMachine->unk08 & 0x04) + { + eSlotMachine->state = 9; + } + } + return FALSE; +} + +static bool8 sub_81022CC(struct Task *task) +{ + sub_8103D8C(0); + sub_8103D8C(1); + sub_8103D8C(2); + eSlotMachine->state = 2; + return FALSE; +} + +static bool8 sub_81022F0(struct Task *task) +{ + if (++task->data[1] > 64) + { + task->data[1] = 0; + eSlotMachine->state = 19; + } + return FALSE; +} + +static bool8 sub_8102318(struct Task *task) +{ + sub_8101F2C(gOtherText_QuitGamePrompt); + DisplayYesNoMenu(21, 7, 1); + sub_814AB84(); + eSlotMachine->state = 22; + return FALSE; +} + +static bool8 sub_8102344(struct Task *task) +{ + s8 input = ProcessMenuInputNoWrap_(); + if (input == 0) + { + MenuZeroFillScreen(); + sub_8103D8C(0); + sub_8103D8C(1); + sub_8103D8C(2); + eSlotMachine->coins += eSlotMachine->bet; + eSlotMachine->state = 27; + } + else if (input == 1 || input == -1) + { + MenuZeroFillScreen(); + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_810239C(struct Task *task) +{ + sub_8101F2C(gOtherText_MaxCoins); + eSlotMachine->state = 24; + return FALSE; +} + +static bool8 sub_81023B8(struct Task *task) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + MenuZeroFillScreen(); + eSlotMachine->state = 5; + } + return FALSE; +} + +static bool8 sub_81023E0(struct Task *task) +{ + sub_8101F2C(gOtherText_OutOfCoins); + eSlotMachine->state = 26; + return FALSE; +} + +static bool8 sub_81023FC(struct Task *task) +{ + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + MenuZeroFillScreen(); + eSlotMachine->state = 27; + } + return FALSE; +} + +static bool8 sub_8102424(struct Task *task) +{ + gSaveBlock1.coins = eSlotMachine->coins; + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + eSlotMachine->state++; + return FALSE; +} + +static bool8 sub_8102460(struct Task *task) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(eSlotMachine->prevMainCb); + } + return FALSE; +} + +static void sub_8102484(void) +{ + u8 r3; + + if (eSlotMachine->unk0A == 0 && !(eSlotMachine->unk04 & 0xc0)) + { + if (sub_8102540()) + { + r3 = sub_8102578(); + if (r3 != 3) + { + eSlotMachine->unk04 |= gUnknown_083ECE42[r3]; + if (r3 != 1) + { + return; + } + } + } + r3 = sub_81025BC(); + if (r3 != 5) + { + eSlotMachine->unk04 |= gUnknown_083ECE48[r3]; + } + } +} + +static void sub_81024F0(void) +{ + eSlotMachine->unk06 = 0; + if (eSlotMachine->unk04) + { + eSlotMachine->unk06 = 1; + } +} + +u8 sub_810250C(u8 a0) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (a0 & 1) + { + return gUnknown_083ECE3A[i]; + } + a0 >>= 1; + } + return 0; +} + +static bool8 sub_8102540(void) +{ + u8 rval = Random(); + if (gUnknown_083ECD04[eSlotMachine->unk01][eSlotMachine->bet - 1] > rval) + { + return TRUE; + } + return FALSE; +} + +extern const u8 gUnknown_083ECD16[][3]; + +#ifdef NONMATCHING +static u8 sub_8102578(void) +{ + s16 i; + + for (i = 0; i < 3; i++) + { + if ((Random() & 0xff) <= gUnknown_083ECD16[i][eSlotMachine->unk01]) + { + break; + } + } + return i; +} +#else +static __attribute__((naked)) u8 sub_8102578(void) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tmovs r5, 0\n" + "\tldr r6, =gUnknown_083ECD16\n" + "_0810257E:\n" + "\tbl Random\n" + "\tmovs r2, 0xFF\n" + "\tldr r3, =gSharedMem\n" + "\tlsls r1, r5, 16\n" + "\tasrs r4, r1, 16\n" + "\tlsls r1, r4, 1\n" + "\tadds r1, r4\n" + "\tlsls r1, 1\n" + "\tldrb r3, [r3, 0x1]\n" + "\tadds r1, r3\n" + "\tadds r1, r6\n" + "\tldrb r1, [r1]\n" + "\tands r2, r0\n" + "\tcmp r1, r2\n" + "\tbgt _081025AA\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0810257E\n" + "_081025AA:\n" + "\tlsls r0, r5, 24\n" + "\tlsrs r0, 24\n" + "\tpop {r4-r6}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "\t.pool"); +} +#endif + +asm(".section .text_a"); + static void LoadSlotMachineWheelOverlay(void); void sub_8104CAC(u8 arg0) { @@ -39,11 +939,10 @@ void sub_8104CAC(u8 arg0) { sub_8104DA4(); - task = &gTasks[ewram0_8->unk3D]; + task = &gTasks[eSlotMachine->unk3D]; task->data[1] = arg0; - i = 0; - while (gUnknown_083ED048[arg0][i].unk00 != 0xFF) + for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++) { u8 spriteId; spriteId = sub_8105BB4( @@ -59,14 +958,12 @@ void sub_8104CAC(u8 arg0) { gSprites[spriteId].invisible = TRUE; } #endif - - i += 1; } } asm(".section .text_b"); -void sub_8106448(void) { +static void sub_8106448(void) { u32 offsetRead, offsetWrite; u32 size; |