diff options
-rw-r--r-- | asm/slot_machine.s | 369 | ||||
-rw-r--r-- | data/slot_machine.s | 3 | ||||
-rw-r--r-- | src/field/slot_machine.c | 110 |
3 files changed, 109 insertions, 373 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 0e18f4380..6a5d36d95 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,375 +5,6 @@ .text - thumb_func_start sub_8104D30 -sub_8104D30: @ 8104D30 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r8, r1 - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _08104D84 @ =gSharedMem - adds r0, 0x3D - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08104D88 @ =gTasks - adds r0, r1 - mov r12, r0 - movs r5, 0x4 - lsls r4, 16 - asrs r6, r4, 16 - lsls r2, 16 - lsls r3, 16 -_08104D5C: - lsls r0, r5, 1 - mov r1, r12 - adds r1, 0x8 - adds r4, r1, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x40 - bne _08104D8C - str r6, [sp] - adds r0, r7, 0 - mov r1, r8 - asrs r2, 16 - asrs r3, 16 - bl sub_8105BF8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - b _08104D96 - .align 2, 0 -_08104D84: .4byte gSharedMem -_08104D88: .4byte gTasks -_08104D8C: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xF - bls _08104D5C -_08104D96: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8104D30 - - thumb_func_start sub_8104DA4 -sub_8104DA4: @ 8104DA4 - push {r4-r6,lr} - ldr r0, _08104E04 @ =gSharedMem - adds r0, 0x3D - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08104E08 @ =gTasks - adds r4, r0, r1 - ldrh r1, [r4, 0xA] - ldr r0, _08104E0C @ =0x0000ffff - cmp r1, r0 - beq _08104DCE - ldr r0, _08104E10 @ =gUnknown_083ED064 - movs r2, 0xA - ldrsh r1, [r4, r2] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - bl _call_via_r0 -_08104DCE: - movs r5, 0x4 - adds r6, r4, 0 - adds r6, 0x8 -_08104DD4: - lsls r0, r5, 1 - adds r4, r6, r0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x40 - beq _08104DF4 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08104E14 @ =gSprites - adds r0, r1 - bl DestroySprite - movs r0, 0x40 - strh r0, [r4] -_08104DF4: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xF - bls _08104DD4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08104E04: .4byte gSharedMem -_08104E08: .4byte gTasks -_08104E0C: .4byte 0x0000ffff -_08104E10: .4byte gUnknown_083ED064 -_08104E14: .4byte gSprites - thumb_func_end sub_8104DA4 - - thumb_func_start sub_8104E18 -sub_8104E18: @ 8104E18 - push {r4,r5,lr} - ldr r0, _08104E54 @ =gSharedMem - adds r0, 0x3D - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _08104E58 @ =gTasks - adds r0, r1 - movs r2, 0x4 - adds r3, r0, 0 - adds r3, 0x8 - ldr r4, _08104E5C @ =gSprites -_08104E32: - lsls r0, r2, 1 - adds r1, r3, r0 - movs r5, 0 - ldrsh r0, [r1, r5] - cmp r0, 0x40 - beq _08104E60 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - movs r5, 0x3C - ldrsh r0, [r1, r5] - cmp r0, 0 - beq _08104E60 - movs r0, 0 - b _08104E6C - .align 2, 0 -_08104E54: .4byte gSharedMem -_08104E58: .4byte gTasks -_08104E5C: .4byte gSprites -_08104E60: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xF - bls _08104E32 - movs r0, 0x1 -_08104E6C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8104E18 - - thumb_func_start sub_8104E74 -sub_8104E74: @ 8104E74 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08104E9C @ =gUnknown_083ECC54 - ldr r2, _08104EA0 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08104E9C: .4byte gUnknown_083ECC54 -_08104EA0: .4byte gTasks - thumb_func_end sub_8104E74 - - thumb_func_start nullsub_69 -nullsub_69: @ 8104EA4 - bx lr - thumb_func_end nullsub_69 - - thumb_func_start sub_8104EA8 -sub_8104EA8: @ 8104EA8 - push {r4-r7,lr} - movs r6, 0 - movs r0, 0x30 -_08104EAE: - movs r4, 0 - lsls r5, r0, 16 - lsls r7, r6, 16 -_08104EB4: - ldr r0, _08104F0C @ =gSpriteTemplate_83ED414 - asrs r1, r5, 16 - movs r2, 0 - movs r3, 0xE - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08104F10 @ =gSprites - adds r1, r0 - ldrb r0, [r1, 0x5] - movs r2, 0xC - orrs r0, r2 - strb r0, [r1, 0x5] - strh r6, [r1, 0x2E] - strh r4, [r1, 0x30] - ldr r0, _08104F14 @ =0x0000ffff - strh r0, [r1, 0x34] - lsls r0, r4, 16 - movs r1, 0xC0 - lsls r1, 13 - adds r0, r1 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x77 - ble _08104EB4 - movs r2, 0x80 - lsls r2, 9 - adds r1, r7, r2 - movs r2, 0xA0 - lsls r2, 14 - adds r0, r5, r2 - lsrs r0, 16 - lsrs r6, r1, 16 - asrs r1, 16 - cmp r1, 0x2 - ble _08104EAE - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08104F0C: .4byte gSpriteTemplate_83ED414 -_08104F10: .4byte gSprites -_08104F14: .4byte 0x0000ffff - thumb_func_end sub_8104EA8 - - thumb_func_start sub_8104F18 -sub_8104F18: @ 8104F18 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _08104F88 @ =gSharedMem - movs r0, 0x2E - ldrsh r1, [r5, r0] - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x1C - adds r1, r0 - ldrh r0, [r5, 0x30] - ldrh r1, [r1] - adds r0, r1 - strh r0, [r5, 0x32] - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r1, 0x78 - bl __modsi3 - strh r0, [r5, 0x32] - movs r2, 0x2E - ldrsh r1, [r5, r2] - lsls r1, 1 - adds r4, 0x22 - adds r1, r4 - ldrh r1, [r1] - adds r1, 0x1C - adds r0, r1 - strh r0, [r5, 0x22] - ldrh r4, [r5, 0x2E] - lsls r4, 24 - lsrs r4, 24 - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r1, 0x18 - bl __divsi3 - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r0, r4, 0 - bl sub_8102BA4 - lsls r0, 24 - lsrs r0, 24 - bl GetSpriteTileStartByTag - adds r1, r5, 0 - adds r1, 0x40 - strh r0, [r1] - adds r0, r5, 0 - bl SetSpriteSheetFrameTileNum - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08104F88: .4byte gSharedMem - thumb_func_end sub_8104F18 - - thumb_func_start sub_8104F8C -sub_8104F8C: @ 8104F8C - push {r4-r6,lr} - movs r4, 0xCB - movs r5, 0x1 - ldr r6, _08104FF0 @ =0x0000270f -_08104F94: - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - adds r0, r4, 0 - movs r1, 0x17 - movs r2, 0 - adds r3, r5, 0 - bl sub_8104FF4 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 17 - subs r4, 0x7 - lsls r4, 16 - lsrs r4, 16 - lsrs r5, r0, 16 - asrs r0, 16 - cmp r0, r6 - ble _08104F94 - movs r4, 0xEB - movs r5, 0x1 - ldr r6, _08104FF0 @ =0x0000270f -_08104FC2: - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - adds r0, r4, 0 - movs r1, 0x17 - movs r2, 0x1 - adds r3, r5, 0 - bl sub_8104FF4 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 17 - subs r4, 0x7 - lsls r4, 16 - lsrs r4, 16 - lsrs r5, r0, 16 - asrs r0, 16 - cmp r0, r6 - ble _08104FC2 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08104FF0: .4byte 0x0000270f - thumb_func_end sub_8104F8C - thumb_func_start sub_8104FF4 sub_8104FF4: @ 8104FF4 push {r4-r6,lr} diff --git a/data/slot_machine.s b/data/slot_machine.s index 9b9ba021e..d3af411ec 100644 --- a/data/slot_machine.s +++ b/data/slot_machine.s @@ -3,9 +3,6 @@ .section .rodata -gUnknown_083ECC54:: @ 83ECC54 - .4byte nullsub_69 - gUnknown_083ECC58:: @ 83ECC58 .byte 16, 0 diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 4076d7770..d6e078139 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -182,9 +182,11 @@ void sub_8104C44(struct Task *task); void sub_8104C5C(void); void sub_8104CAC(u8 arg0); bool8 sub_8104E18(void); +void nullsub_69(struct Task *task); void sub_8104E74(u8 taskId); void sub_8104EA8(void); void sub_8104F8C(void); +void sub_8104FF4(s16 a0, s16 a1, u8 a2, s16 a3); void sub_81050C4(void); void sub_8105100(void); void sub_810514C(void); @@ -211,6 +213,7 @@ bool8 sub_8105ACC(void); void sub_8105AEC(void); u8 sub_8105B1C(s16 a0, s16 a1); void sub_8105B88(u8 a0); +u8 sub_8105BF8(u8, u32, s16, s16, s16); void sub_81063C0(void); static void sub_8106448(void); void sub_81064B8(void); @@ -2984,7 +2987,7 @@ void sub_8104C5C(void) task->data[1] = -1; for (i = 4; i < 16; i++) { - task->data[i] = 0x40; + task->data[i] = MAX_SPRITES; } } @@ -3017,6 +3020,111 @@ void sub_8104CAC(u8 arg0) { #endif } } + +void sub_8104D30(u8 a0, u32 a1, s16 a2, s16 a3, s16 a4) +{ + u8 i; + struct Task *task = gTasks + eSlotMachine->unk3D; + for (i = 4; i < 16; i++) + { + if (task->data[i] == MAX_SPRITES) + { + task->data[i] = sub_8105BF8(a0, a1, a2, a3, a4); + break; + } + } +} + +extern void (*const gUnknown_083ED064[])(void); + +void sub_8104DA4(void) +{ + u8 i; + struct Task *task = gTasks + eSlotMachine->unk3D; + if ((u16)task->data[1] != 0xFFFF) + gUnknown_083ED064[task->data[1]](); + for (i = 4; i < 16; i++) + { + if (task->data[i] != MAX_SPRITES) + { + DestroySprite(gSprites + task->data[i]); + task->data[i] = MAX_SPRITES; + } + } +} + +bool8 sub_8104E18(void) +{ + u8 i; + struct Task *task = gTasks + eSlotMachine->unk3D; + for (i = 4; i < 16; i++) + { + if (task->data[i] != MAX_SPRITES) + { + if (gSprites[task->data[i]].data[7]) + return FALSE; + } + } + return TRUE; +} + +void (*const gUnknown_083ECC54[])(struct Task *task) = { + nullsub_69 +}; + +void sub_8104E74(u8 taskId) +{ + gUnknown_083ECC54[gTasks[taskId].data[0]](gTasks + taskId); +} + +void nullsub_69(struct Task *task) +{ + +} + +const struct SpriteTemplate gSpriteTemplate_83ED414; + +void sub_8104EA8(void) +{ + s16 i; + s16 j; + s16 x; + for (i = 0, x = 0x30; i < 3; i++, x += 0x28) + { + for (j = 0; j < 120; j += 24) + { + struct Sprite *sprite = gSprites + CreateSprite(&gSpriteTemplate_83ED414, x, 0, 14); + sprite->oam.priority = 3; + sprite->data[0] = i; + sprite->data[1] = j; + sprite->data[3] = -1; + } + } +} + +void sub_8104F18(struct Sprite *sprite) +{ + sprite->data[2] = eSlotMachine->unk1C[sprite->data[0]] + sprite->data[1]; + sprite->data[2] %= 120; + sprite->pos1.y = eSlotMachine->unk22[sprite->data[0]] + 28 + sprite->data[2]; + sprite->sheetTileStart = GetSpriteTileStartByTag(sub_8102BA4(sprite->data[0], sprite->data[2] / 24)); + SetSpriteSheetFrameTileNum(sprite); +} + +void sub_8104F8C(void) +{ + s16 i; + s16 r4; + for (r4 = 203, i = 1; i < 10000; i *= 10, r4 -= 7) + { + sub_8104FF4(r4, 23, 0, i); + } + for (r4 = 235, i = 1; i < 10000; i *= 10, r4 -= 7) + { + sub_8104FF4(r4, 23, 1, i); + } +} + asm(".section .text_b"); static void sub_8106448(void) { |