summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-05-23 08:46:38 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-05-23 08:46:38 -0400
commitbd9e6dbccf00009236f46722c7e898a055b43b7b (patch)
tree46627700d64c4b92d603590f522566e578d27eae
parent7d96290d42c448a951eaa1f69f386442433cf3ef (diff)
slot_machine through sub_8141020
-rw-r--r--asm/slot_machine.s363
-rw-r--r--src/slot_machine.c129
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);
+ }
+}