summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/slot_machine.s136
-rw-r--r--include/slot_machine.h4
-rw-r--r--src/field/slot_machine.c98
3 files changed, 92 insertions, 146 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 6552f3a7c..6a7775a2e 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5,142 +5,6 @@
.text
- thumb_func_start sub_8102484
-sub_8102484: @ 8102484
- push {r4,lr}
- ldr r4, _081024E4 @ =gSharedMem
- ldrb r0, [r4, 0xA]
- cmp r0, 0
- bne _081024DC
- ldrb r1, [r4, 0x4]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0
- bne _081024DC
- bl sub_8102540
- lsls r0, 24
- cmp r0, 0
- beq _081024C0
- bl sub_8102578
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- beq _081024C0
- ldr r1, _081024E8 @ =gUnknown_083ECE42
- lsls r0, r3, 1
- adds r0, r1
- ldrb r1, [r0]
- ldrb r0, [r4, 0x4]
- orrs r0, r1
- strb r0, [r4, 0x4]
- cmp r3, 0x1
- bne _081024DC
-_081024C0:
- bl sub_81025BC
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x5
- beq _081024DC
- ldr r2, _081024E4 @ =gSharedMem
- ldr r1, _081024EC @ =gUnknown_083ECE48
- lsls r0, r3, 1
- adds r0, r1
- ldrb r1, [r0]
- ldrb r0, [r2, 0x4]
- orrs r0, r1
- strb r0, [r2, 0x4]
-_081024DC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081024E4: .4byte gSharedMem
-_081024E8: .4byte gUnknown_083ECE42
-_081024EC: .4byte gUnknown_083ECE48
- thumb_func_end sub_8102484
-
- thumb_func_start sub_81024F0
-sub_81024F0: @ 81024F0
- push {lr}
- ldr r1, _08102508 @ =gSharedMem
- movs r0, 0
- strb r0, [r1, 0x6]
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08102502
- movs r0, 0x1
- strb r0, [r1, 0x6]
-_08102502:
- pop {r0}
- bx r0
- .align 2, 0
-_08102508: .4byte gSharedMem
- thumb_func_end sub_81024F0
-
- thumb_func_start sub_810250C
-sub_810250C: @ 810250C
- push {r4,lr}
- lsls r0, 24
- lsrs r1, r0, 24
- movs r2, 0
- movs r3, 0x1
- ldr r4, _08102528 @ =gUnknown_083ECE3A
-_08102518:
- adds r0, r1, 0
- ands r0, r3
- cmp r0, 0
- beq _0810252C
- adds r0, r2, r4
- ldrb r0, [r0]
- b _0810253A
- .align 2, 0
-_08102528: .4byte gUnknown_083ECE3A
-_0810252C:
- lsrs r1, 1
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x7
- bls _08102518
- movs r0, 0
-_0810253A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_810250C
-
- thumb_func_start sub_8102540
-sub_8102540: @ 8102540
- push {r4,lr}
- bl Random
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08102568 @ =gUnknown_083ECD04
- ldr r1, _0810256C @ =gSharedMem
- movs r3, 0x12
- ldrsh r2, [r1, r3]
- ldrb r3, [r1, 0x1]
- lsls r1, r3, 1
- adds r1, r3
- subs r1, 0x1
- adds r2, r1
- adds r2, r4
- ldrb r1, [r2]
- cmp r1, r0
- bhi _08102570
- movs r0, 0
- b _08102572
- .align 2, 0
-_08102568: .4byte gUnknown_083ECD04
-_0810256C: .4byte gSharedMem
-_08102570:
- movs r0, 0x1
-_08102572:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8102540
-
thumb_func_start sub_8102578
sub_8102578: @ 8102578
push {r4-r6,lr}
diff --git a/include/slot_machine.h b/include/slot_machine.h
index 4dde64aa7..0e7efaf29 100644
--- a/include/slot_machine.h
+++ b/include/slot_machine.h
@@ -7,7 +7,9 @@ struct SlotMachineEwramStruct {
/*0x02*/ u8 unk02;
/*0x03*/ u8 unk03;
/*0x04*/ u8 unk04;
- /*0x05*/ u8 filler05[3];
+ /*0x05*/ u8 unk05;
+ /*0x06*/ u8 unk06;
+ /*0x07*/ u8 unk07;
/*0x08*/ u16 unk08;
/*0x0A*/ u8 unk0A;
/*0x0B*/ u8 unk0B;
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 2bf8e9c97..b72c749d0 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -82,9 +82,11 @@ static bool8 sub_81023E0(struct Task *task);
static bool8 sub_81023FC(struct Task *task);
static bool8 sub_8102424(struct Task *task);
static bool8 sub_8102460(struct Task *task);
-
-void sub_8102484(void);
-void sub_81024F0(void);
+static void sub_8102484(void);
+static void sub_81024F0(void);
+bool8 sub_8102540(void);
+u8 sub_8102578(void);
+u8 sub_81025BC(void);
void sub_81027A0(void);
void sub_8102A24(void);
bool8 sub_8102A44(void);
@@ -113,7 +115,7 @@ void sub_8104EA8(void);
void sub_8104F8C(void);
void sub_81050C4(void);
void sub_81063C0(void);
-void sub_8106448(void);
+static void sub_8106448(void);
void sub_81064B8(void);
u16 dp15_jump_random_unknown(void);
@@ -149,6 +151,11 @@ static bool8 (*const gUnknown_083ECAAC[])(struct Task *task) = {
sub_8102460
};
+extern const u8 gUnknown_083ECD04[][3];
+extern const u8 gUnknown_083ECE3A[];
+extern const u16 gUnknown_083ECE42[];
+extern const u16 gUnknown_083ECE48[];
+
void PlaySlotMachine(u8 arg0, void *ptr)
{
sub_81019B0(arg0, ptr);
@@ -807,6 +814,82 @@ static bool8 sub_8102460(struct Task *task)
return FALSE;
}
+static void sub_8102484(void)
+{
+ u8 r3;
+
+ if (eSlotMachine->unk0A == 0 && !(eSlotMachine->unk04 & 0xc0))
+ {
+ if (sub_8102540())
+ {
+ r3 = sub_8102578();
+ if (r3 != 3)
+ {
+ eSlotMachine->unk04 |= gUnknown_083ECE42[r3];
+ if (r3 != 1)
+ {
+ return;
+ }
+ }
+ }
+ r3 = sub_81025BC();
+ if (r3 != 5)
+ {
+ eSlotMachine->unk04 |= gUnknown_083ECE48[r3];
+ }
+ }
+}
+
+static void sub_81024F0(void)
+{
+ eSlotMachine->unk06 = 0;
+ if (eSlotMachine->unk04)
+ {
+ eSlotMachine->unk06 = 1;
+ }
+}
+
+u8 sub_810250C(u8 a0)
+{
+ u8 i;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (a0 & 1)
+ {
+ return gUnknown_083ECE3A[i];
+ }
+ a0 >>= 1;
+ }
+ return 0;
+}
+
+bool8 sub_8102540(void)
+{
+ u8 rval = Random();
+ if (gUnknown_083ECD04[eSlotMachine->unk01][eSlotMachine->bet - 1] > rval)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+//extern const u8 gUnknown_083ECD16[][3];
+//
+//u8 sub_8102578(void)
+//{
+// s16 i;
+//
+// for (i = 0; i < 3; i++)
+// {
+// if ((Random() & 0xff) <= (int)gUnknown_083ECD16[i][eSlotMachine->unk01])
+// {
+// break;
+// }
+// }
+// return i;
+//}
+
asm(".section .text_a");
static void LoadSlotMachineWheelOverlay(void);
@@ -820,8 +903,7 @@ void sub_8104CAC(u8 arg0) {
task = &gTasks[eSlotMachine->unk3D];
task->data[1] = arg0;
- i = 0;
- while (gUnknown_083ED048[arg0][i].unk00 != 0xFF)
+ for (i = 0; gUnknown_083ED048[arg0][i].unk00 != 0xFF; i++)
{
u8 spriteId;
spriteId = sub_8105BB4(
@@ -837,14 +919,12 @@ void sub_8104CAC(u8 arg0) {
gSprites[spriteId].invisible = TRUE;
}
#endif
-
- i += 1;
}
}
asm(".section .text_b");
-void sub_8106448(void) {
+static void sub_8106448(void) {
u32 offsetRead, offsetWrite;
u32 size;