summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s136
-rw-r--r--include/slot_machine.h2
-rw-r--r--src/field/slot_machine.c69
3 files changed, 70 insertions, 137 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 75202fc81..f4d0202a4 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,142 +5,6 @@
.text
- thumb_func_start sub_81020C8
-sub_81020C8: @ 81020C8
- push {r4,lr}
- ldr r4, _08102128 @ =gSharedMem
- ldrb r1, [r4, 0x4]
- movs r0, 0xC0
- ands r0, r1
- strb r0, [r4, 0x4]
- bl sub_81027A0
- ldrb r0, [r4, 0xA]
- cmp r0, 0
- beq _081020E8
- subs r0, 0x1
- strb r0, [r4, 0xA]
- ldrb r0, [r4, 0xB]
- adds r0, 0x1
- strb r0, [r4, 0xB]
-_081020E8:
- ldrh r0, [r4, 0x8]
- cmp r0, 0
- beq _081021B4
- movs r0, 0xF
- strb r0, [r4]
- bl sub_8102A24
- bl sub_8103F70
- ldrh r0, [r4, 0x10]
- ldrh r1, [r4, 0xE]
- subs r0, r1
- strh r0, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bge _0810210C
- movs r0, 0
- strh r0, [r4, 0x10]
-_0810210C:
- ldrh r1, [r4, 0x8]
- movs r0, 0xC0
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08102130
- ldr r0, _0810212C @ =0x00000185
- bl PlayFanfare
- movs r0, 0x6
- bl sub_8104CAC
- b _0810215A
- .align 2, 0
-_08102128: .4byte gSharedMem
-_0810212C: .4byte 0x00000185
-_08102130:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0810214C
- ldr r0, _08102148 @ =0x00000185
- bl PlayFanfare
- movs r0, 0x5
- bl sub_8104CAC
- b _0810215A
- .align 2, 0
-_08102148: .4byte 0x00000185
-_0810214C:
- movs r0, 0xC3
- lsls r0, 1
- bl PlayFanfare
- movs r0, 0x2
- bl sub_8104CAC
-_0810215A:
- ldr r1, _081021B0 @ =gSharedMem
- ldrh r3, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 1
- ands r0, r3
- adds r2, r1, 0
- cmp r0, 0
- beq _08102192
- ldrb r1, [r2, 0x4]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0
- strb r0, [r2, 0x4]
- movs r0, 0xC0
- lsls r0, 1
- ands r0, r3
- cmp r0, 0
- beq _08102192
- strb r1, [r2, 0xA]
- strb r1, [r2, 0xB]
- strb r1, [r2, 0x3]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r3
- cmp r0, 0
- beq _08102192
- movs r0, 0x1
- strb r0, [r2, 0x3]
-_08102192:
- ldrh r1, [r2, 0x8]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _081021D2
- ldrb r0, [r2, 0x2]
- cmp r0, 0xF
- bhi _081021D2
- adds r0, 0x1
- strb r0, [r2, 0x2]
- ldrb r0, [r2, 0x2]
- bl sub_8104064
- b _081021D2
- .align 2, 0
-_081021B0: .4byte gSharedMem
-_081021B4:
- movs r0, 0x3
- bl sub_8104CAC
- movs r0, 0x14
- strb r0, [r4]
- ldrh r0, [r4, 0x12]
- ldrh r1, [r4, 0x10]
- adds r0, r1
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- ldr r1, _081021DC @ =0x0000270f
- cmp r0, r1
- ble _081021D2
- strh r1, [r4, 0x10]
-_081021D2:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_081021DC: .4byte 0x0000270f
- thumb_func_end sub_81020C8
-
thumb_func_start sub_81021E0
sub_81021E0: @ 81021E0
push {lr}
diff --git a/include/slot_machine.h b/include/slot_machine.h
index 057713a1b..880fe6f1f 100644
--- a/include/slot_machine.h
+++ b/include/slot_machine.h
@@ -13,7 +13,7 @@ struct SlotMachineEwramStruct {
/*0x0B*/ u8 unk0B;
/*0x0C*/ s16 coins;
/*0x0E*/ u16 unk0E;
- /*0x10*/ u16 unk10;
+ /*0x10*/ s16 unk10;
/*0x12*/ s16 bet;
/*0x14*/ u8 filler14[4];
/*0x18*/ s16 unk18;
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 94dd5b08f..65d7e21ba 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -54,6 +54,8 @@ static void sub_8101D24(u8 taskId);
void sub_8102484(void);
void sub_81024F0(void);
+void sub_81027A0(void);
+void sub_8102A24(void);
void sub_8102DA8(void);
void sub_8102DEC(u8 a0);
void sub_8102E1C(u8 a0);
@@ -61,7 +63,9 @@ bool8 sub_8102E40(u8 a0);
void sub_8103C14(u8 a0);
void sub_8103D50(u8 a0);
void sub_8103DC8(void);
+void sub_8103F70(void);
void sub_8104048(void);
+void sub_8104064(u8 a0);
void sub_810423C(u8 a0);
void sub_810430C(void);
bool8 sub_810432C(void);
@@ -507,6 +511,71 @@ bool8 sub_8102090(struct Task *task)
return FALSE;
}
+bool8 sub_81020C8(struct Task *task)
+{
+ eSlotMachine->unk04 &= 0xc0;
+ sub_81027A0();
+ if (eSlotMachine->unk0A)
+ {
+ eSlotMachine->unk0A--;
+ eSlotMachine->unk0B++;
+ }
+ if (eSlotMachine->unk08)
+ {
+ eSlotMachine->state = 15;
+ sub_8102A24();
+ sub_8103F70();
+ if ((eSlotMachine->unk10 -= eSlotMachine->unk0E) < 0)
+ {
+ eSlotMachine->unk10 = 0;
+ }
+ if (eSlotMachine->unk08 & 0x180)
+ {
+ PlayFanfare(BGM_ME_B_BIG);
+ sub_8104CAC(6);
+ }
+ else if (eSlotMachine->unk08 & 0x40)
+ {
+ PlayFanfare(BGM_ME_B_BIG);
+ sub_8104CAC(5);
+ }
+ else
+ {
+ PlayFanfare(BGM_ME_B_SMALL);
+ sub_8104CAC(2);
+ }
+ if (eSlotMachine->unk08 & 0x1c0)
+ {
+ eSlotMachine->unk04 &= 0x3f;
+ if (eSlotMachine->unk08 & 0x180)
+ {
+ eSlotMachine->unk0A = 0;
+ eSlotMachine->unk0B = 0;
+ eSlotMachine->unk03 = 0;
+ if (eSlotMachine->unk08 & 0x100)
+ {
+ eSlotMachine->unk03 = 1;
+ }
+ }
+ }
+ if (eSlotMachine->unk08 & 0x20 && eSlotMachine->unk02 < 16)
+ {
+ eSlotMachine->unk02++;
+ sub_8104064(eSlotMachine->unk02);
+ }
+ }
+ else
+ {
+ sub_8104CAC(3);
+ eSlotMachine->state = 20;
+ if ((eSlotMachine->unk10 += eSlotMachine->bet) > 9999)
+ {
+ eSlotMachine->unk10 = 9999;
+ }
+ }
+ return FALSE;
+}
+
asm(".section .text_a");
static void LoadSlotMachineWheelOverlay(void);