summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-12-20 17:31:27 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2017-12-20 17:31:27 -0500
commit8fd3100fb491c22bb90d1a86f2f1b0fd3b090ac4 (patch)
tree9d5c83d89b54e785de9f641f97706ae9d43dcf7e
parent3c5f725de49371aced1788a21f5e53df5b498b5f (diff)
Through sub_8101A28
-rw-r--r--asm/slot_machine.s206
-rwxr-xr-xinclude/ewram.h2
-rw-r--r--ld_script.txt3
-rw-r--r--src/field/slot_machine.c125
4 files changed, 125 insertions, 211 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 62792245d..4060e2541 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,212 +5,6 @@
.text
- thumb_func_start PlaySlotMachine
-PlaySlotMachine: @ 81018A0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_81019B0
- ldr r0, _081018B4 @ =sub_81018B8
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_081018B4: .4byte sub_81018B8
- thumb_func_end PlaySlotMachine
-
- thumb_func_start sub_81018B8
-sub_81018B8: @ 81018B8
- push {lr}
- ldr r0, _081018D0 @ =gMain
- ldr r1, _081018D4 @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x6
- bhi _0810194A
- lsls r0, 2
- ldr r1, _081018D8 @ =_081018DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081018D0: .4byte gMain
-_081018D4: .4byte 0x0000043c
-_081018D8: .4byte _081018DC
- .align 2, 0
-_081018DC:
- .4byte _081018F8
- .4byte _08101902
- .4byte _08101908
- .4byte _08101912
- .4byte _08101918
- .4byte _0810191E
- .4byte _08101938
-_081018F8:
- bl sub_8101A28
- bl sub_8101BA4
- b _08101922
-_08101902:
- bl sub_8101A8C
- b _08101922
-_08101908:
- bl sub_8101AE0
- bl sub_8101B04
- b _08101922
-_08101912:
- bl sub_8101C84
- b _08101922
-_08101918:
- bl sub_8101CA0
- b _08101922
-_0810191E:
- bl sub_8101CC0
-_08101922:
- ldr r1, _08101930 @ =gMain
- ldr r0, _08101934 @ =0x0000043c
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0810194A
- .align 2, 0
-_08101930: .4byte gMain
-_08101934: .4byte 0x0000043c
-_08101938:
- bl sub_8101CD4
- bl sub_8101CEC
- bl sub_8101A44
- ldr r0, _08101950 @ =sub_8101954
- bl SetMainCallback2
-_0810194A:
- pop {r0}
- bx r0
- .align 2, 0
-_08101950: .4byte sub_8101954
- thumb_func_end sub_81018B8
-
- thumb_func_start sub_8101954
-sub_8101954: @ 8101954
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8101954
-
- thumb_func_start sub_810196C
-sub_810196C: @ 810196C
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- ldr r1, _081019A8 @ =REG_WIN0H
- ldr r2, _081019AC @ =gSharedMem
- adds r0, r2, 0
- adds r0, 0x58
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x4
- adds r0, r2, 0
- adds r0, 0x5A
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x4
- adds r0, r2, 0
- adds r0, 0x5C
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- adds r0, r2, 0
- adds r0, 0x5E
- ldrh r0, [r0]
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_081019A8: .4byte REG_WIN0H
-_081019AC: .4byte gSharedMem
- thumb_func_end sub_810196C
-
- thumb_func_start sub_81019B0
-sub_81019B0: @ 81019B0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _081019E4 @ =nullsub_67
- movs r1, 0xFF
- bl CreateTask
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r1, _081019E8 @ =gTasks
- adds r0, r1
- strh r4, [r0, 0x8]
- adds r0, 0xA
- adds r1, r5, 0
- bl StoreWordInTwoHalfwords
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081019E4: .4byte nullsub_67
-_081019E8: .4byte gTasks
- thumb_func_end sub_81019B0
-
- thumb_func_start sub_81019EC
-sub_81019EC: @ 81019EC
- push {lr}
- ldr r0, _08101A18 @ =nullsub_67
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- ldr r0, _08101A1C @ =gTasks
- adds r2, r0
- ldr r1, _08101A20 @ =gSharedMem
- ldrh r0, [r2, 0x8]
- strb r0, [r1, 0x1]
- adds r2, 0xA
- adds r1, 0x64
- adds r0, r2, 0
- bl LoadWordFromTwoHalfwords
- pop {r0}
- bx r0
- .align 2, 0
-_08101A18: .4byte nullsub_67
-_08101A1C: .4byte gTasks
-_08101A20: .4byte gSharedMem
- thumb_func_end sub_81019EC
-
- thumb_func_start nullsub_67
-nullsub_67: @ 8101A24
- bx lr
- thumb_func_end nullsub_67
-
- thumb_func_start sub_8101A28
-sub_8101A28: @ 8101A28
- push {lr}
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- movs r1, 0x80
- lsls r1, 19
- movs r0, 0
- strh r0, [r1]
- pop {r0}
- bx r0
- thumb_func_end sub_8101A28
-
thumb_func_start sub_8101A44
sub_8101A44: @ 8101A44
push {r4,lr}
diff --git a/include/ewram.h b/include/ewram.h
index eacc02cab..9d3002615 100755
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -24,7 +24,7 @@ extern u8 gSharedMem[];
#define ewram0arr ((u8 (*)[32])gSharedMem)
#define eVoidSharedArr (void *)(ewram_addr + 0x0)
#define eVoidSharedArr2 (u32)(ewram_addr) // ew(ram)
-#define ewram0_8 ((struct UnkStruct2000000 *)(gSharedMem + 0x0))
+#define eSlotMachine ((struct SlotMachineEwramStruct *)(gSharedMem + 0x0))
#define ewram0_9(i) (u8 *)(ewram_addr + (i * 0x20))
#define ewram0_10 (*(struct UnknownPokenav0*)(gSharedMem + 0))
#define ewram0_11 (*(struct UnknownPokenav0_1*)(gSharedMem + 0))
diff --git a/ld_script.txt b/ld_script.txt
index 6353fceec..5014ebb4b 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -318,8 +318,9 @@ SECTIONS {
src/scene/cute_sketch.o(.text);
asm/cute_sketch.o(.text);
src/field/decoration.o(.text);
- asm/slot_machine.o(.text);
src/field/slot_machine.o(.text);
+ asm/slot_machine.o(.text);
+ src/field/slot_machine.o(.text_a);
asm/slot_machine.o(.text_8104D30)
src/field/slot_machine.o(.text_b);
src/scene/contest_painting.o(.text);
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 89ec68b0a..3bff71f4f 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -1,13 +1,24 @@
#include "global.h"
+#include "main.h"
#include "slot_machine.h"
#include "decompress.h"
#include "palette.h"
#include "task.h"
+#include "util.h"
#include "ewram.h"
-struct UnkStruct2000000 {
- /*0x00*/ u8 filler00[61];
+struct SlotMachineEwramStruct {
+ /*0x00*/ u8 unk00;
+ /*0x01*/ u8 unk01;
+ /*0x02*/ u8 filler02[59];
/*0x3D*/ u8 unk3D;
+ /*0x3E*/ u8 filler3E[26];
+ /*0x58*/ u16 win0h;
+ /*0x5a*/ u16 win0v;
+ /*0x5c*/ u16 winIn;
+ /*0x5e*/ u16 winOut;
+ /*0x60*/ u8 filler_60[4];
+ /*0x64*/ void *unk64;
};
struct UnkStruct1 {
@@ -31,6 +42,114 @@ extern const u16 gUnknown_08E95A18[];
extern u16 gUnknown_08E95AB8[];
extern u16 gUnknown_08E95FB8[];
+void sub_81018B8(void);
+void sub_8101954(void);
+void sub_81019B0(u8 arg0, void *ptr);
+void nullsub_67(u8 taskId);
+void sub_8101A28(void);
+void sub_8101BA4(void);
+void sub_8101A8C(void);
+void sub_8101AE0(void);
+void sub_8101B04(void);
+void sub_8101C84(void);
+void sub_8101CA0(void);
+void sub_8101CC0(void);
+void sub_8101CD4(void);
+void sub_8101CEC(void);
+void sub_8101A44(void);
+
+
+void PlaySlotMachine(u8 arg0, void *ptr)
+{
+ sub_81019B0(arg0, ptr);
+ SetMainCallback2(sub_81018B8);
+}
+
+void sub_81018B8(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ sub_8101A28();
+ sub_8101BA4();
+ gMain.state++;
+ break;
+ case 1:
+ sub_8101A8C();
+ gMain.state++;
+ break;
+ case 2:
+ sub_8101AE0();
+ sub_8101B04();
+ gMain.state++;
+ break;
+ case 3:
+ sub_8101C84();
+ gMain.state++;
+ break;
+ case 4:
+ sub_8101CA0();
+ gMain.state++;
+ break;
+ case 5:
+ sub_8101CC0();
+ gMain.state++;
+ break;
+ case 6:
+ sub_8101CD4();
+ sub_8101CEC();
+ sub_8101A44();
+ SetMainCallback2(sub_8101954);
+ break;
+ }
+}
+
+void sub_8101954(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_810196C(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ REG_WIN0H = eSlotMachine->win0h;
+ REG_WIN0V = eSlotMachine->win0v;
+ REG_WININ = eSlotMachine->winIn;
+ REG_WINOUT = eSlotMachine->winOut;
+}
+
+void sub_81019B0(u8 arg0, void *ptr)
+{
+ struct Task *task = &gTasks[CreateTask(nullsub_67, 0xFF)];
+ task->data[0] = arg0;
+ StoreWordInTwoHalfwords(task->data + 1, (intptr_t)ptr);
+}
+
+void sub_81019EC(void)
+{
+ struct Task *task = &gTasks[FindTaskIdByFunc(nullsub_67)];
+ eSlotMachine->unk01 = task->data[0];
+ LoadWordFromTwoHalfwords((u16 *)(task->data + 1), (u32 *)&eSlotMachine->unk64);
+}
+
+void nullsub_67(u8 taskId)
+{
+}
+
+void sub_8101A28(void)
+{
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+ REG_DISPCNT = 0;
+}
+
+asm(".section .text_a");
+
static void LoadSlotMachineWheelOverlay(void);
void sub_8104CAC(u8 arg0) {
@@ -39,7 +158,7 @@ void sub_8104CAC(u8 arg0) {
sub_8104DA4();
- task = &gTasks[ewram0_8->unk3D];
+ task = &gTasks[eSlotMachine->unk3D];
task->data[1] = arg0;
i = 0;