summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/field/slot_machine.c108
1 files changed, 104 insertions, 4 deletions
diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c
index 9a098d4cf..f10ed4352 100644
--- a/src/field/slot_machine.c
+++ b/src/field/slot_machine.c
@@ -212,9 +212,9 @@ void sub_81059B8(void);
void sub_81059E8(void);
bool8 sub_8105ACC(void);
void sub_8105AEC(void);
-u8 sub_8105B1C(s16 a0, s16 a1);
-void sub_8105B88(u8 a0);
-u8 sub_8105BF8(u8, u32, s16, s16, s16);
+u8 sub_8105B1C(s16 x, s16 y);
+void sub_8105B88(u8 spriteId);
+u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4);
void sub_81063C0(void);
static void sub_8106448(void);
void sub_81064B8(void);
@@ -3022,7 +3022,7 @@ void sub_8104CAC(u8 arg0) {
}
}
-void sub_8104D30(u8 a0, u32 a1, s16 a2, s16 a3, s16 a4)
+void sub_8104D30(u8 a0, SpriteCallback a1, s16 a2, s16 a3, s16 a4)
{
u8 i;
struct Task *task = gTasks + eSlotMachine->unk3D;
@@ -3490,6 +3490,106 @@ void sub_81059B8(void)
}
}
+extern const struct SpriteTemplate gSpriteTemplate_83ED564;
+
+void sub_81059E8(void)
+{
+ u8 spriteId = CreateSprite(&gSpriteTemplate_83ED564, 0xa8, 0x3c, 8);
+ struct Sprite *sprite = gSprites + spriteId;
+ sprite->oam.priority = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ InitSpriteAffineAnim(sprite);
+ eSlotMachine->unk43 = spriteId;
+}
+
+void sub_8105A38(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ if (sprite->affineAnimEnded)
+ sprite->data[0]++;
+ }
+ else if (sprite->data[0] == 1)
+ {
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] >= 24)
+ {
+ sprite->data[0]++;
+ sprite->data[2] = 0;
+ }
+ }
+ else
+ {
+ sprite->invisible = TRUE;
+ if (++sprite->data[2] >= 16)
+ sprite->data[7] = 1;
+ }
+ sprite->data[1] &= 0xff;
+ sprite->data[1] += 16;
+ sprite->pos2.y -= (sprite->data[1] >> 8);
+}
+
+u8 sub_8105ACC(void)
+{
+ return gSprites[eSlotMachine->unk43].data[7];
+}
+
+void sub_8105AEC(void)
+{
+ struct Sprite *sprite = gSprites + eSlotMachine->unk43;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+}
+
+extern const struct SpriteTemplate gSpriteTemplate_83ED6CC;
+
+u8 sub_8105B1C(s16 x, s16 y)
+{
+ u8 spriteId = CreateSprite(&gSpriteTemplate_83ED6CC, x, y, 12);
+ struct Sprite *sprite = gSprites + spriteId;
+ sprite->oam.priority = 2;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ InitSpriteAffineAnim(sprite);
+ return spriteId;
+}
+
+void sub_8105B70(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ sprite->data[7] = 1;
+}
+
+void sub_8105B88(u8 spriteId)
+{
+ struct Sprite *sprite = gSprites + spriteId;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+}
+
+extern const SpriteCallback gUnknown_083ECF0C[];
+extern const s16 gUnknown_083ECE7E[][2];
+
+u8 sub_8105BB4(u8 a0, u8 a1, s16 a2)
+{
+ return sub_8105BF8(a0, gUnknown_083ECF0C[a1], gUnknown_083ECE7E[a1][0], gUnknown_083ECE7E[a1][1], a2);
+}
+
+extern const struct SpriteTemplate *gUnknown_083EDB5C[];
+extern const struct SubspriteTable *gUnknown_083EDBC4[];
+
+u8 sub_8105BF8(u8 templateIdx, SpriteCallback callback, s16 x, s16 y, s16 a4)
+{
+ u8 spriteId = CreateSprite(gUnknown_083EDB5C[templateIdx], x, y, 16);
+ struct Sprite *sprite = gSprites + spriteId;
+ sprite->oam.priority = 3;
+ sprite->callback = callback;
+ sprite->data[6] = a4;
+ sprite->data[7] = 1;
+ if (gUnknown_083EDBC4[templateIdx])
+ SetSubspriteTables(sprite, gUnknown_083EDBC4[templateIdx]);
+ return spriteId;
+}
+
asm(".section .text_b");
static void sub_8106448(void) {