summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-12-30 10:30:24 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2017-12-30 10:30:24 -0500
commit1d1c88a850e0967051599b37873328e63ae63643 (patch)
treef364bd181c9926523651290d053ef7d1a18bee86
parent8eb7f3db6ee630fd801391ac3a3b574abfa7a08d (diff)
through sub_810437C
-rw-r--r--asm/slot_machine.s305
-rw-r--r--src/field/slot_machine.c119
2 files changed, 114 insertions, 310 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 64cdf3a3d..4cf21d22e 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,311 +5,6 @@
.text
- thumb_func_start sub_81041AC
-sub_81041AC: @ 81041AC
- push {r4,lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0xA]
- adds r0, r1, 0x2
- lsls r0, 16
- lsrs r4, r0, 16
- movs r2, 0
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x1
- bne _081041C6
- movs r2, 0x1
- b _081041CC
-_081041C6:
- cmp r1, 0x10
- bne _081041CC
- movs r2, 0x2
-_081041CC:
- movs r1, 0xC
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _081041F0
- lsls r0, r4, 16
- asrs r0, 15
- ldr r1, _08104214 @ =0x0600e800
- adds r0, r1
- adds r0, 0x80
- ldr r1, _08104218 @ =gUnknown_083ECBC4
- lsls r2, 2
- adds r1, 0x2
- adds r2, r1
- ldrh r1, [r2]
- strh r1, [r0]
- ldrh r0, [r3, 0xA]
- subs r0, 0x1
- strh r0, [r3, 0xA]
-_081041F0:
- ldrh r0, [r3, 0xC]
- adds r0, 0x1
- strh r0, [r3, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _08104202
- movs r0, 0
- strh r0, [r3, 0xC]
-_08104202:
- movs r1, 0xA
- ldrsh r0, [r3, r1]
- cmp r0, 0
- bne _0810420E
- strh r0, [r3, 0x8]
- strh r0, [r3, 0x26]
-_0810420E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08104214: .4byte 0x0600e800
-_08104218: .4byte gUnknown_083ECBC4
- thumb_func_end sub_81041AC
-
- thumb_func_start sub_810421C
-sub_810421C: @ 810421C
- push {lr}
- movs r1, 0x2
- adds r2, r0, 0
- adds r2, 0x8
- movs r3, 0
-_08104226:
- lsls r0, r1, 1
- adds r0, r2, r0
- strh r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xF
- bls _08104226
- pop {r0}
- bx r0
- thumb_func_end sub_810421C
-
- thumb_func_start sub_810423C
-sub_810423C: @ 810423C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r2, 0x3
- ldr r6, _08104268 @ =0x0600e800
- movs r4, 0
- ldr r0, _0810426C @ =gTasks
- mov r8, r0
- ldr r1, _08104270 @ =gSharedMem
- mov r12, r1
- cmp r4, r5
- bge _081042A6
- ldr r7, _08104274 @ =gUnknown_083ECBC4
-_0810425A:
- movs r3, 0
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, 0
- bne _08104278
- movs r3, 0x1
- b _0810427E
- .align 2, 0
-_08104268: .4byte 0x0600e800
-_0810426C: .4byte gTasks
-_08104270: .4byte gSharedMem
-_08104274: .4byte gUnknown_083ECBC4
-_08104278:
- cmp r0, 0xF
- bne _0810427E
- movs r3, 0x2
-_0810427E:
- lsls r2, 16
- asrs r2, 16
- lsls r1, r2, 1
- adds r1, r6
- adds r1, 0x80
- lsls r0, r3, 2
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- adds r2, 0x1
- lsls r2, 16
- lsrs r2, 16
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, r5
- blt _0810425A
-_081042A6:
- lsls r1, r4, 16
- asrs r0, r1, 16
- cmp r0, 0xF
- bgt _081042F0
- ldr r7, _081042BC @ =gUnknown_083ECBC4 + 0x2
-_081042B0:
- movs r3, 0
- asrs r0, r1, 16
- cmp r0, 0
- bne _081042C0
- movs r3, 0x1
- b _081042C6
- .align 2, 0
-_081042BC: .4byte gUnknown_083ECBC4 + 0x2
-_081042C0:
- cmp r0, 0xF
- bne _081042C6
- movs r3, 0x2
-_081042C6:
- lsls r2, 16
- asrs r2, 16
- lsls r1, r2, 1
- adds r1, r6
- adds r1, 0x80
- lsls r0, r3, 2
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r4, r0, 16
- adds r2, 0x1
- lsls r2, 16
- lsrs r2, 16
- lsls r1, r4, 16
- asrs r0, r1, 16
- cmp r0, 0xF
- ble _081042B0
-_081042F0:
- mov r0, r12
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r8
- strh r5, [r0, 0xA]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_810423C
-
- thumb_func_start sub_810430C
-sub_810430C: @ 810430C
- push {r4,lr}
- ldr r4, _08104328 @ =sub_810434C
- adds r0, r4, 0
- movs r1, 0x7
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08104328: .4byte sub_810434C
- thumb_func_end sub_810430C
-
- thumb_func_start sub_810432C
-sub_810432C: @ 810432C
- push {lr}
- ldr r0, _08104340 @ =sub_810434C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08104344
- movs r0, 0
- b _08104346
- .align 2, 0
-_08104340: .4byte sub_810434C
-_08104344:
- movs r0, 0x1
-_08104346:
- pop {r1}
- bx r1
- thumb_func_end sub_810432C
-
- thumb_func_start sub_810434C
-sub_810434C: @ 810434C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _08104374 @ =gUnknown_083ECBD0
- ldr r2, _08104378 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08104374: .4byte gUnknown_083ECBD0
-_08104378: .4byte gTasks
- thumb_func_end sub_810434C
-
- thumb_func_start sub_810437C
-sub_810437C: @ 810437C
- push {lr}
- ldr r1, _081043DC @ =gSharedMem
- movs r2, 0
- strb r2, [r1, 0xA]
- strh r2, [r1, 0x14]
- strh r2, [r1, 0x16]
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- movs r1, 0x1E
- strh r1, [r0, 0xC]
- movs r1, 0xA0
- lsls r1, 3
- strh r1, [r0, 0x10]
- ldr r0, _081043E0 @ =gSpriteCoordOffsetX
- strh r2, [r0]
- ldr r0, _081043E4 @ =gSpriteCoordOffsetY
- strh r2, [r0]
- ldr r0, _081043E8 @ =REG_BG1HOFS
- strh r2, [r0]
- adds r0, 0x2
- strh r2, [r0]
- movs r0, 0x1E
- movs r1, 0
- bl sub_8104A40
- bl sub_81051C0
- bl sub_8105100
- bl sub_81052EC
- bl sub_81053A0
- bl sub_810545C
- bl sub_8102680
- bl StopMapMusic
- movs r0, 0xC4
- lsls r0, 1
- bl PlayNewMapMusic
- pop {r0}
- bx r0
- .align 2, 0
-_081043DC: .4byte gSharedMem
-_081043E0: .4byte gSpriteCoordOffsetX
-_081043E4: .4byte gSpriteCoordOffsetY
-_081043E8: .4byte REG_BG1HOFS
- thumb_func_end sub_810437C
-
thumb_func_start sub_81043EC
sub_81043EC: @ 81043EC
push {r4,lr}
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 9efaccd39..f7679588c 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -119,11 +119,13 @@ static void sub_8103FE8(u8 taskId);
static void sub_8104048(void);
static void sub_8104064(u8 unused);
bool8 sub_81040C8(void);
-void sub_81040E8(u8 taskId);
-void sub_810421C(struct Task *task);
+static void sub_81040E8(u8 taskId);
+static void sub_810421C(struct Task *task);
void sub_810423C(u8 a0);
-void sub_810430C(void);
-bool8 sub_810432C(void);
+static void sub_810430C(void);
+static bool8 sub_810432C(void);
+void sub_810434C(u8 taskId);
+void sub_8104A40(s16 a0, s16 a1);
void sub_8104AB8(u8 a0);
bool8 sub_8104AEC(void);
void sub_8104C5C(void);
@@ -132,6 +134,11 @@ bool8 sub_8104E18(void);
void sub_8104EA8(void);
void sub_8104F8C(void);
void sub_81050C4(void);
+void sub_8105100(void);
+void sub_81051C0(void);
+void sub_81052EC(void);
+void sub_81053A0(void);
+void sub_810545C(void);
u8 sub_8105B1C(s16 a0, s16 a1);
void sub_8105B88(u8 a0);
void sub_81063C0(void);
@@ -2301,7 +2308,7 @@ bool8 sub_81040C8(void)
extern void (*const gUnknown_083ECBB4[])(struct Task *task);
-void sub_81040E8(u8 taskId)
+static void sub_81040E8(u8 taskId)
{
gUnknown_083ECBB4[gTasks[taskId].data[0]](gTasks + taskId);
}
@@ -2337,6 +2344,108 @@ void sub_8104144(struct Task *task)
}
}
+void sub_81041AC(struct Task *task)
+{
+ u16 *vaddr = (u16 *)BG_SCREEN_ADDR(29);
+ s16 r4 = task->data[1] + 2;
+ u8 r2 = 0;
+ if (task->data[1] == 1)
+ r2 = 1;
+ else if (task->data[1] == 16)
+ r2 = 2;
+ if (task->data[2] == 0)
+ {
+ vaddr[r4 + 0x40] = gUnknown_083ECBC4[r2][1];
+ task->data[1]--;
+ }
+ if (++task->data[2] >= 20)
+ task->data[2] = 0;
+ if (task->data[1] == 0)
+ {
+ task->data[0] = 0;
+ task->data[15] = 0;
+ }
+}
+
+static void sub_810421C(struct Task *task)
+{
+ u8 i;
+
+ for (i = 2; i < 16; i++)
+ task->data[i] = 0;
+}
+
+void sub_810423C(u8 a0)
+{
+ s16 i;
+ u8 r3;
+ s16 r2 = 3;
+ u16 *vaddr = (u16 *)BG_SCREEN_ADDR(29);
+ for (i = 0; i < a0; i++, r2++)
+ {
+ r3 = 0;
+ if (i == 0)
+ r3 = 1;
+ else if (i == 15)
+ r3 = 2;
+ vaddr[r2 + 0x40] = gUnknown_083ECBC4[r3][0];
+ }
+ for (; i < 16; i++, r2++)
+ {
+ r3 = 0;
+ if (i == 0)
+ r3 = 1;
+ else if (i == 15)
+ r3 = 2;
+ vaddr[r2 + 0x40] = gUnknown_083ECBC4[r3][1];
+ }
+ gTasks[eSlotMachine->unk3E].data[1] = a0;
+}
+
+static void sub_810430C(void)
+{
+ u8 taskId = CreateTask(sub_810434C, 7);
+ sub_810434C(taskId);
+}
+
+static bool8 sub_810432C(void)
+{
+ if (FindTaskIdByFunc(sub_810434C) == 0xFF)
+ return TRUE;
+ return FALSE;
+}
+
+extern void (*const gUnknown_083ECBD0[])(struct Task *task);
+
+void sub_810434C(u8 taskId)
+{
+ gUnknown_083ECBD0[gTasks[taskId].data[0]](gTasks + taskId);
+}
+
+void sub_810437C(struct Task *task)
+{
+ eSlotMachine->unk0A = 0;
+ eSlotMachine->unk14 = 0;
+ eSlotMachine->unk16 = 0;
+ task->data[0]++;
+ task->data[1] = 0;
+ task->data[2] = 30;
+ task->data[4] = 1280;
+ gSpriteCoordOffsetX = 0;
+ gSpriteCoordOffsetY = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ sub_8104A40(30, 0);
+ sub_81051C0();
+ sub_8105100();
+ sub_81052EC();
+ sub_81053A0();
+ sub_810545C();
+ sub_8102680();
+ StopMapMusic();
+ PlayNewMapMusic(BGM_BD_TIME);
+}
+
asm(".section .text_a");
static void LoadSlotMachineWheelOverlay(void);