diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-23 08:46:38 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-23 08:46:38 -0400 |
commit | bd9e6dbccf00009236f46722c7e898a055b43b7b (patch) | |
tree | 46627700d64c4b92d603590f522566e578d27eae | |
parent | 7d96290d42c448a951eaa1f69f386442433cf3ef (diff) |
slot_machine through sub_8141020
-rw-r--r-- | asm/slot_machine.s | 363 | ||||
-rw-r--r-- | src/slot_machine.c | 129 |
2 files changed, 117 insertions, 375 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index f79f658ae..e234387a0 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,369 +5,6 @@ .text - thumb_func_start sub_8140D7C -sub_8140D7C: @ 8140D7C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r3, r0, 0 - movs r2, 0 - ldr r0, _08140E34 @ =gUnknown_203F3A4 - mov r8, r0 -_08140D90: - movs r4, 0 - ldrsh r6, [r3, r4] - movs r4, 0 - ldrsh r0, [r1, r4] - lsls r0, 3 - mov r10, r0 - lsls r0, r2, 2 - adds r3, 0x2 - str r3, [sp] - adds r1, 0x2 - str r1, [sp, 0x4] - adds r1, r2, 0x1 - str r1, [sp, 0x8] - adds r0, r2 - lsls r0, 2 - adds r2, r0 - mov r9, r2 - adds r5, r0, 0 - movs r7, 0x4 -_08140DB6: - mov r2, r8 - ldr r1, [r2] - adds r1, 0xC - adds r1, r5 - ldr r0, [r1] - mov r3, r10 - strh r3, [r0, 0x26] - ldr r2, _08140E38 @ =gUnknown_8464926 - mov r4, r9 - adds r0, r6, r4 - adds r0, r2 - ldrb r4, [r0] - ldr r0, [r1] - adds r1, r4, 0 - bl StartSpriteAnim - mov r1, r8 - ldr r0, [r1] - adds r0, 0xC - adds r0, r5 - ldr r0, [r0] - adds r1, r4, 0 - bl StartSpriteAnim - ldr r0, _08140E3C @ =gUnknown_8465608 - lsls r4, 1 - adds r4, r0 - ldrh r0, [r4] - bl IndexOfSpritePaletteTag - mov r2, r8 - ldr r1, [r2] - adds r1, 0xC - adds r1, r5 - ldr r3, [r1] - lsls r0, 4 - ldrb r2, [r3, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x5] - adds r6, 0x1 - cmp r6, 0x14 - ble _08140E10 - movs r6, 0 -_08140E10: - adds r5, 0x4 - subs r7, 0x1 - cmp r7, 0 - bge _08140DB6 - ldr r3, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - cmp r2, 0x2 - ble _08140D90 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140E34: .4byte gUnknown_203F3A4 -_08140E38: .4byte gUnknown_8464926 -_08140E3C: .4byte gUnknown_8465608 - thumb_func_end sub_8140D7C - - thumb_func_start sub_8140E40 -sub_8140E40: @ 8140E40 - push {lr} - ldr r0, _08140E68 @ =0x04000006 - ldrh r0, [r0] - adds r3, r0, 0 - subs r3, 0x2B - cmp r3, 0x53 - bhi _08140E7C - ldr r0, _08140E6C @ =gUnknown_203F3A4 - ldr r0, [r0] - ldr r2, [r0, 0x70] - ldr r1, _08140E70 @ =gUnknown_8465616 - lsls r0, r3, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - ldr r1, _08140E74 @ =0x04000054 - ldr r0, _08140E78 @ =gUnknown_84656D6 - adds r0, r3, r0 - ldrb r0, [r0] - b _08140E8E - .align 2, 0 -_08140E68: .4byte 0x04000006 -_08140E6C: .4byte gUnknown_203F3A4 -_08140E70: .4byte gUnknown_8465616 -_08140E74: .4byte 0x04000054 -_08140E78: .4byte gUnknown_84656D6 -_08140E7C: - ldr r0, _08140E94 @ =gUnknown_203F3A4 - ldr r0, [r0] - ldr r1, [r0, 0x70] - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08140E98 @ =0x04000054 - movs r0, 0 -_08140E8E: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08140E94: .4byte gUnknown_203F3A4 -_08140E98: .4byte 0x04000054 - thumb_func_end sub_8140E40 - - thumb_func_start sub_8140E9C -sub_8140E9C: @ 8140E9C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r5, 0 - ldr r0, _08140F20 @ =gUnknown_846587C - mov r10, r0 - ldr r0, _08140F24 @ =gUnknown_203F3A4 - mov r9, r0 - ldr r0, _08140F28 @ =gSprites - mov r8, r0 - movs r7, 0x85 - lsls r7, 16 - movs r6, 0xAA - lsls r6, 15 -_08140EBC: - asrs r1, r6, 16 - mov r0, r10 - movs r2, 0x1E - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r9 - ldr r1, [r0] - lsls r4, r5, 2 - adds r1, 0x48 - adds r1, r4 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r8 - str r0, [r1] - asrs r1, r7, 16 - mov r0, r10 - movs r2, 0x1E - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r9 - ldr r1, [r0] - adds r1, 0x58 - adds r1, r4 - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - add r0, r8 - str r0, [r1] - movs r0, 0xE0 - lsls r0, 11 - adds r7, r0 - adds r6, r0 - adds r5, 0x1 - cmp r5, 0x3 - ble _08140EBC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140F20: .4byte gUnknown_846587C -_08140F24: .4byte gUnknown_203F3A4 -_08140F28: .4byte gSprites - thumb_func_end sub_8140E9C - - thumb_func_start sub_8140F2C -sub_8140F2C: @ 8140F2C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - bl GetCoins - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl sub_8140BDC - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - movs r6, 0xFA - lsls r6, 2 - movs r7, 0 - ldr r0, _08140FC0 @ =gUnknown_203F3A4 - mov r10, r0 -_08140F54: - mov r0, r9 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - lsls r5, r7, 2 - adds r0, 0x48 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0 - muls r0, r6 - mov r1, r9 - subs r1, r0 - mov r9, r1 - mov r0, r8 - adds r1, r6, 0 - bl __divsi3 - adds r4, r0, 0 - mov r1, r10 - ldr r0, [r1] - adds r0, 0x58 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0 - muls r0, r6 - mov r1, r8 - subs r1, r0 - mov r8, r1 - adds r0, r6, 0 - movs r1, 0xA - bl __divsi3 - adds r6, r0, 0 - adds r7, 0x1 - cmp r7, 0x3 - ble _08140F54 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08140FC0: .4byte gUnknown_203F3A4 - thumb_func_end sub_8140F2C - - thumb_func_start sub_8140FC4 -sub_8140FC4: @ 8140FC4 - push {r4-r6,lr} - ldr r6, _08141014 @ =gUnknown_84658D8 - adds r0, r6, 0 - movs r1, 0x10 - movs r2, 0x88 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r5, _08141018 @ =gUnknown_203F3A4 - ldr r1, [r5] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - ldr r4, _0814101C @ =gSprites - adds r0, r4 - str r0, [r1, 0x68] - adds r0, r6, 0 - movs r1, 0xE0 - movs r2, 0x88 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, [r5] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r4 - str r0, [r1, 0x6C] - adds r0, 0x3F - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141014: .4byte gUnknown_84658D8 -_08141018: .4byte gUnknown_203F3A4 -_0814101C: .4byte gSprites - thumb_func_end sub_8140FC4 - - thumb_func_start sub_8141020 -sub_8141020: @ 8141020 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r6, _08141048 @ =gUnknown_203F3A4 -_0814102A: - ldr r0, [r6] - lsls r1, r4, 2 - adds r0, 0x68 - adds r0, r1 - ldr r0, [r0] - adds r1, r5, 0 - bl StartSpriteAnim - adds r4, 0x1 - cmp r4, 0x1 - ble _0814102A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08141048: .4byte gUnknown_203F3A4 - thumb_func_end sub_8141020 - thumb_func_start sub_814104C sub_814104C: @ 814104C push {r4,lr} diff --git a/src/slot_machine.c b/src/slot_machine.c index 7010bd969..f8f67eb23 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -38,12 +38,14 @@ struct SlotMachineGfxManager { u32 field_00[3]; struct Sprite * field_0C[3][5]; - u8 filler_4C[0x28]; - u32 field_70; + struct Sprite * field_48[4]; + struct Sprite * field_58[4]; + struct Sprite * field_68[2]; + vu16 * field_70; }; EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL; -EWRAM_DATA struct SlotMachineGfxManager * gUnknown_203F3A4 = NULL; +EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL; void sub_813F84C(struct SlotMachineState * ptr); void sub_813F898(void); @@ -71,7 +73,7 @@ void sub_81409B4(void); void sub_8140A70(void); u16 sub_8140A80(void); void sub_8140C6C(struct SlotMachineGfxManager * manager); -void sub_8140D7C(s16 *, s16 *); +void sub_8140D7C(const s16 *, const s16 *); bool32 sub_814104C(void); void sub_8141094(void); void sub_8141148(u16 a0, u8 a1); @@ -195,6 +197,8 @@ const u8 gUnknown_84656D6[] = { }; extern const struct SpriteTemplate gUnknown_84657E4; +extern const struct SpriteTemplate gUnknown_846587C; +extern const struct SpriteTemplate gUnknown_84658D8; void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback) { @@ -1411,19 +1415,19 @@ bool32 sub_8140C0C(void) for (i = 0; i < NELEMS(gUnknown_84655B0); i++) LoadCompressedObjectPic(&gUnknown_84655B0[i]); LoadSpritePalettes(gUnknown_84655C8); - gUnknown_203F3A4 = Alloc(sizeof(*gUnknown_203F3A4)); - if (gUnknown_203F3A4 == NULL) + sSlotMachineGfxManager = Alloc(sizeof(*sSlotMachineGfxManager)); + if (sSlotMachineGfxManager == NULL) return FALSE; - sub_8140C6C(gUnknown_203F3A4); + sub_8140C6C(sSlotMachineGfxManager); return TRUE; } void sub_8140C50(void) { - if (gUnknown_203F3A4 != NULL) + if (sSlotMachineGfxManager != NULL) { - Free(gUnknown_203F3A4); - gUnknown_203F3A4 = NULL; + Free(sSlotMachineGfxManager); + sSlotMachineGfxManager = NULL; } } @@ -1461,8 +1465,109 @@ void sub_8140CA0(void) sprite->data[2] = j; sprite->data[3] = 0; sprite->oam.matrixNum = 0; - gUnknown_203F3A4->field_0C[i][j] = sprite; - gUnknown_203F3A4->field_70 = 0x07000006; + sSlotMachineGfxManager->field_0C[i][j] = sprite; + sSlotMachineGfxManager->field_70 = (vu16 *)(OAM + 0 * sizeof(struct OamData) + offsetof(struct OamData, affineParam)); } } } + +void sub_8140D7C(const s16 * a0, const s16 * a1) +{ + s32 i, j; + s32 r6, r10; + + for (i = 0; i < 3; i++) + { + r6 = *a0; + r10 = *a1 * 8; + for (j = 0; j < 5; j++) + { + sSlotMachineGfxManager->field_0C[i][j]->pos2.y = r10; + { + s32 r4 = gUnknown_8464926[i][r6]; + struct Sprite * sprite = sSlotMachineGfxManager->field_0C[i][j]; + StartSpriteAnim(sprite, r4); + } + { + s32 r4 = gUnknown_8464926[i][r6]; + struct Sprite * sprite = sSlotMachineGfxManager->field_0C[i][j]; + StartSpriteAnim(sprite, r4); + } + sSlotMachineGfxManager->field_0C[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_8465608[gUnknown_8464926[i][r6]]); + r6++; + if (r6 >= 21) + r6 = 0; + } + a0++; + a1++; + } +} + +void sub_8140E40(void) +{ + s32 vcount = REG_VCOUNT - 0x2B; + if (vcount >= 0 && vcount < 0x54) + { + *sSlotMachineGfxManager->field_70 = gUnknown_8465616[vcount]; + REG_BLDY = gUnknown_84656D6[vcount]; + } + else + { + *sSlotMachineGfxManager->field_70 = 0x100; + REG_BLDY = 0; + } +} + +void sub_8140E9C(void) +{ + s32 i; + s32 spriteId; + + for (i = 0; i < 4; i++) + { + spriteId = CreateSprite(&gUnknown_846587C, 0x55 + 7 * i, 30, 0); + sSlotMachineGfxManager->field_48[i] = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_846587C, 0x85 + 7 * i, 30, 0); + sSlotMachineGfxManager->field_58[i] = &gSprites[spriteId]; + } +} + +void sub_8140F2C(void) +{ + s32 coins = GetCoins(); + s32 payout = sub_8140BDC(); + s32 i; + s32 divisor = 1000; + s32 quotient; + + for (i = 0; i < 4; i++) + { + quotient = coins / divisor; + StartSpriteAnim(sSlotMachineGfxManager->field_48[i], quotient); + coins -= quotient * divisor; + quotient = payout / divisor; + StartSpriteAnim(sSlotMachineGfxManager->field_58[i], quotient); + payout -= quotient * divisor; + divisor /= 10; + } +} + +void sub_8140FC4(void) +{ + s32 spriteId; + + spriteId = CreateSprite(&gUnknown_84658D8, 0x10, 0x88, 1); + sSlotMachineGfxManager->field_68[0] = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_84658D8, 0xE0, 0x88, 1); + sSlotMachineGfxManager->field_68[1] = &gSprites[spriteId]; + sSlotMachineGfxManager->field_68[1]->hFlip = TRUE; +} + +void sub_8141020(u8 a0) +{ + s32 i; + for (i = 0; i < 2; i++) + { + StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0); + } +} |