slot_machine through sub_8141180
This commit is contained in:
@@ -5,181 +5,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start sub_814104C
|
|
||||||
sub_814104C: @ 814104C
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r0, _0814108C @ =0x0000285c
|
|
||||||
bl Alloc
|
|
||||||
adds r4, r0, 0
|
|
||||||
cmp r4, 0
|
|
||||||
beq _08141082
|
|
||||||
ldr r2, _08141090 @ =sub_81410CC
|
|
||||||
movs r1, 0
|
|
||||||
adds r0, r4, 0
|
|
||||||
adds r0, 0x1C
|
|
||||||
_08141062:
|
|
||||||
strb r1, [r0, 0x3]
|
|
||||||
subs r0, 0x4
|
|
||||||
cmp r0, r4
|
|
||||||
bge _08141062
|
|
||||||
movs r0, 0
|
|
||||||
str r0, [r4, 0x28]
|
|
||||||
adds r0, r2, 0
|
|
||||||
movs r1, 0x2
|
|
||||||
bl CreateTask
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
movs r1, 0
|
|
||||||
adds r2, r4, 0
|
|
||||||
bl SetWordTaskArg
|
|
||||||
_08141082:
|
|
||||||
movs r0, 0
|
|
||||||
pop {r4}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
.align 2, 0
|
|
||||||
_0814108C: .4byte 0x0000285c
|
|
||||||
_08141090: .4byte sub_81410CC
|
|
||||||
thumb_func_end sub_814104C
|
|
||||||
|
|
||||||
thumb_func_start sub_8141094
|
|
||||||
sub_8141094: @ 8141094
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r4, _081410C8 @ =sub_81410CC
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl FuncIsActiveTask
|
|
||||||
lsls r0, 24
|
|
||||||
cmp r0, 0
|
|
||||||
beq _081410BA
|
|
||||||
bl sub_814112C
|
|
||||||
bl Free
|
|
||||||
adds r0, r4, 0
|
|
||||||
bl FindTaskIdByFunc
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
bl DestroyTask
|
|
||||||
_081410BA:
|
|
||||||
bl sub_8140C50
|
|
||||||
bl FreeAllWindowBuffers
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_081410C8: .4byte sub_81410CC
|
|
||||||
thumb_func_end sub_8141094
|
|
||||||
|
|
||||||
thumb_func_start sub_81410CC
|
|
||||||
sub_81410CC: @ 81410CC
|
|
||||||
push {r4-r7,lr}
|
|
||||||
mov r7, r8
|
|
||||||
push {r7}
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
movs r1, 0
|
|
||||||
bl GetWordTaskArg
|
|
||||||
adds r6, r0, 0
|
|
||||||
ldr r0, _08141114 @ =gUnknown_84658F0
|
|
||||||
mov r8, r0
|
|
||||||
adds r4, r6, 0x2
|
|
||||||
adds r5, r6, 0
|
|
||||||
movs r7, 0x7
|
|
||||||
_081410E8:
|
|
||||||
ldrb r0, [r4, 0x1]
|
|
||||||
cmp r0, 0
|
|
||||||
beq _08141100
|
|
||||||
ldrh r0, [r5]
|
|
||||||
lsls r0, 2
|
|
||||||
add r0, r8
|
|
||||||
ldr r2, [r0]
|
|
||||||
adds r0, r4, 0
|
|
||||||
adds r1, r6, 0
|
|
||||||
bl _call_via_r2
|
|
||||||
strb r0, [r4, 0x1]
|
|
||||||
_08141100:
|
|
||||||
adds r4, 0x4
|
|
||||||
adds r5, 0x4
|
|
||||||
subs r7, 0x1
|
|
||||||
cmp r7, 0
|
|
||||||
bge _081410E8
|
|
||||||
pop {r3}
|
|
||||||
mov r8, r3
|
|
||||||
pop {r4-r7}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_08141114: .4byte gUnknown_84658F0
|
|
||||||
thumb_func_end sub_81410CC
|
|
||||||
|
|
||||||
thumb_func_start sub_8141118
|
|
||||||
sub_8141118: @ 8141118
|
|
||||||
push {lr}
|
|
||||||
bl TransferPlttBuffer
|
|
||||||
bl LoadOam
|
|
||||||
bl ProcessSpriteCopyRequests
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
thumb_func_end sub_8141118
|
|
||||||
|
|
||||||
thumb_func_start sub_814112C
|
|
||||||
sub_814112C: @ 814112C
|
|
||||||
push {lr}
|
|
||||||
ldr r0, _08141144 @ =sub_81410CC
|
|
||||||
bl FindTaskIdByFunc
|
|
||||||
lsls r0, 24
|
|
||||||
lsrs r0, 24
|
|
||||||
movs r1, 0
|
|
||||||
bl GetWordTaskArg
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
.align 2, 0
|
|
||||||
_08141144: .4byte sub_81410CC
|
|
||||||
thumb_func_end sub_814112C
|
|
||||||
|
|
||||||
thumb_func_start sub_8141148
|
|
||||||
sub_8141148: @ 8141148
|
|
||||||
push {r4,r5,lr}
|
|
||||||
adds r4, r0, 0
|
|
||||||
adds r5, r1, 0
|
|
||||||
lsls r4, 16
|
|
||||||
lsrs r4, 16
|
|
||||||
lsls r5, 24
|
|
||||||
lsrs r5, 24
|
|
||||||
bl sub_814112C
|
|
||||||
adds r1, r0, 0
|
|
||||||
lsls r5, 2
|
|
||||||
adds r5, r1, r5
|
|
||||||
movs r0, 0
|
|
||||||
strh r4, [r5]
|
|
||||||
strb r0, [r5, 0x2]
|
|
||||||
ldr r0, _0814117C @ =gUnknown_84658F0
|
|
||||||
lsls r4, 2
|
|
||||||
adds r4, r0
|
|
||||||
adds r0, r5, 0x2
|
|
||||||
ldr r2, [r4]
|
|
||||||
bl _call_via_r2
|
|
||||||
strb r0, [r5, 0x3]
|
|
||||||
pop {r4,r5}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.align 2, 0
|
|
||||||
_0814117C: .4byte gUnknown_84658F0
|
|
||||||
thumb_func_end sub_8141148
|
|
||||||
|
|
||||||
thumb_func_start sub_8141180
|
|
||||||
sub_8141180: @ 8141180
|
|
||||||
push {r4,lr}
|
|
||||||
adds r4, r0, 0
|
|
||||||
lsls r4, 24
|
|
||||||
lsrs r4, 24
|
|
||||||
bl sub_814112C
|
|
||||||
lsls r4, 2
|
|
||||||
adds r0, r4
|
|
||||||
ldrb r0, [r0, 0x3]
|
|
||||||
pop {r4}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
thumb_func_end sub_8141180
|
|
||||||
|
|
||||||
thumb_func_start sub_8141198
|
thumb_func_start sub_8141198
|
||||||
sub_8141198: @ 8141198
|
sub_8141198: @ 8141198
|
||||||
push {r4-r7,lr}
|
push {r4-r7,lr}
|
||||||
|
|||||||
@@ -4,24 +4,6 @@
|
|||||||
.section .rodata
|
.section .rodata
|
||||||
.align 2
|
.align 2
|
||||||
|
|
||||||
gUnknown_84658F0:: @ 84658F0
|
|
||||||
.4byte sub_8141198
|
|
||||||
.4byte sub_8141460
|
|
||||||
.4byte sub_81414AC
|
|
||||||
.4byte sub_81414EC
|
|
||||||
.4byte sub_81414FC
|
|
||||||
.4byte sub_8141518
|
|
||||||
.4byte sub_8141558
|
|
||||||
.4byte sub_8141568
|
|
||||||
.4byte sub_8141578
|
|
||||||
.4byte sub_8141584
|
|
||||||
.4byte sub_81415C8
|
|
||||||
.4byte sub_8141610
|
|
||||||
.4byte sub_8141650
|
|
||||||
.4byte sub_8141690
|
|
||||||
.4byte sub_81416C8
|
|
||||||
.4byte sub_8141764
|
|
||||||
|
|
||||||
gUnknown_8465930:: @ 8465930
|
gUnknown_8465930:: @ 8465930
|
||||||
.incbin "graphics/slot_machine/unk_8465930.gbapal"
|
.incbin "graphics/slot_machine/unk_8465930.gbapal"
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,21 @@ struct SlotMachineGfxManager
|
|||||||
vu16 * field_70;
|
vu16 * field_70;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SlotMachineReelActionTaskDataSub_0000
|
||||||
|
{
|
||||||
|
u16 unk0;
|
||||||
|
u8 unk2;
|
||||||
|
u8 unk3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SlotMachineReelActionTaskData
|
||||||
|
{
|
||||||
|
struct SlotMachineReelActionTaskDataSub_0000 field_0000[8];
|
||||||
|
u8 filler_0020[8];
|
||||||
|
u32 field_0028;
|
||||||
|
u8 filler_002C[0x2830];
|
||||||
|
};
|
||||||
|
|
||||||
EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL;
|
EWRAM_DATA struct SlotMachineState * sSlotMachineState = NULL;
|
||||||
EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL;
|
EWRAM_DATA struct SlotMachineGfxManager * sSlotMachineGfxManager = NULL;
|
||||||
|
|
||||||
@@ -76,6 +91,24 @@ void sub_8140C6C(struct SlotMachineGfxManager * manager);
|
|||||||
void sub_8140D7C(const s16 *, const s16 *);
|
void sub_8140D7C(const s16 *, const s16 *);
|
||||||
bool32 sub_814104C(void);
|
bool32 sub_814104C(void);
|
||||||
void sub_8141094(void);
|
void sub_8141094(void);
|
||||||
|
struct SlotMachineReelActionTaskData * sub_814112C(void);
|
||||||
|
void sub_81410CC(u8 taskId);
|
||||||
|
bool8 sub_8141198(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141460(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_81414AC(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_81414EC(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_81414FC(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141518(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141558(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141568(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141578(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141584(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_81415C8(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141610(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141650(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141690(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_81416C8(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
|
bool8 sub_8141764(u8 *, struct SlotMachineReelActionTaskData *);
|
||||||
void sub_8141148(u16 a0, u8 a1);
|
void sub_8141148(u16 a0, u8 a1);
|
||||||
bool32 sub_8141180(u8 a0);
|
bool32 sub_8141180(u8 a0);
|
||||||
void sub_8141C30(u8, u8);
|
void sub_8141C30(u8, u8);
|
||||||
@@ -433,6 +466,25 @@ const struct SpriteTemplate gUnknown_84658D8 = {
|
|||||||
1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
1, 5, &gUnknown_8465894, gUnknown_84658C8, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool8 (*const gUnknown_84658F0[])(u8 *, struct SlotMachineReelActionTaskData *) = {
|
||||||
|
sub_8141198,
|
||||||
|
sub_8141460,
|
||||||
|
sub_81414AC,
|
||||||
|
sub_81414EC,
|
||||||
|
sub_81414FC,
|
||||||
|
sub_8141518,
|
||||||
|
sub_8141558,
|
||||||
|
sub_8141568,
|
||||||
|
sub_8141578,
|
||||||
|
sub_8141584,
|
||||||
|
sub_81415C8,
|
||||||
|
sub_8141610,
|
||||||
|
sub_8141650,
|
||||||
|
sub_8141690,
|
||||||
|
sub_81416C8,
|
||||||
|
sub_8141764
|
||||||
|
};
|
||||||
|
|
||||||
void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback)
|
void PlaySlotMachine(u16 machineIdx, MainCallback savedCallback)
|
||||||
{
|
{
|
||||||
ResetTasks();
|
ResetTasks();
|
||||||
@@ -1804,3 +1856,65 @@ void sub_8141020(u8 a0)
|
|||||||
StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0);
|
StartSpriteAnim(sSlotMachineGfxManager->field_68[i], a0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool32 sub_814104C(void)
|
||||||
|
{
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
struct SlotMachineReelActionTaskData * ptr = Alloc(sizeof(struct SlotMachineReelActionTaskData));
|
||||||
|
if (ptr == NULL)
|
||||||
|
return FALSE;
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
ptr->field_0000[i].unk3 = 0;
|
||||||
|
ptr->field_0028 = 0;
|
||||||
|
SetWordTaskArg(CreateTask(sub_81410CC, 2), 0, (uintptr_t)ptr);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8141094(void)
|
||||||
|
{
|
||||||
|
if (FuncIsActiveTask(sub_81410CC))
|
||||||
|
{
|
||||||
|
Free(sub_814112C());
|
||||||
|
DestroyTask(FindTaskIdByFunc(sub_81410CC));
|
||||||
|
}
|
||||||
|
sub_8140C50();
|
||||||
|
FreeAllWindowBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_81410CC(u8 taskId)
|
||||||
|
{
|
||||||
|
struct SlotMachineReelActionTaskData * ptr = (void *)GetWordTaskArg(taskId, 0);
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (ptr->field_0000[i].unk3)
|
||||||
|
ptr->field_0000[i].unk3 = gUnknown_84658F0[ptr->field_0000[i].unk0](&ptr->field_0000[i].unk2, ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8141118(void)
|
||||||
|
{
|
||||||
|
TransferPlttBuffer();
|
||||||
|
LoadOam();
|
||||||
|
ProcessSpriteCopyRequests();
|
||||||
|
}
|
||||||
|
|
||||||
|
struct SlotMachineReelActionTaskData * sub_814112C(void)
|
||||||
|
{
|
||||||
|
return (void *)GetWordTaskArg(FindTaskIdByFunc(sub_81410CC), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_8141148(u16 a0, u8 a1)
|
||||||
|
{
|
||||||
|
struct SlotMachineReelActionTaskData * ptr = sub_814112C();
|
||||||
|
ptr->field_0000[a1].unk0 = a0;
|
||||||
|
ptr->field_0000[a1].unk2 = 0;
|
||||||
|
ptr->field_0000[a1].unk3 = gUnknown_84658F0[a0](&ptr->field_0000[a1].unk2, ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 sub_8141180(u8 a0)
|
||||||
|
{
|
||||||
|
return sub_814112C()->field_0000[a0].unk3;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user