slot_machine through sub_8141020

This commit is contained in:
PikalaxALT
2019-05-23 08:46:38 -04:00
parent 7d96290d42
commit bd9e6dbccf
2 changed files with 117 additions and 375 deletions
-363
View File
@@ -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}
+117 -12
View File
@@ -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);
}
}