diff options
-rw-r--r-- | asm/slot_machine.s | 236 | ||||
-rw-r--r-- | include/slot_machine.h | 10 | ||||
-rw-r--r-- | src/field/slot_machine.c | 70 |
3 files changed, 71 insertions, 245 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 83e89cc22..f043fb536 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,242 +5,6 @@ .text - thumb_func_start sub_81053A0 -sub_81053A0: @ 81053A0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r1, 0xB8 - lsls r1, 1 - ldr r0, _0810544C @ =gSpriteTemplate_83ED4D4 - movs r2, 0x64 - movs r3, 0x9 - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - ldr r7, _08105450 @ =gSprites - adds r2, r0, r7 - adds r1, r2, 0 - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x2 - mov r10, r3 - mov r3, r10 - orrs r0, r3 - strb r0, [r1] - ldrb r1, [r2, 0x5] - movs r5, 0xD - negs r5, r5 - adds r0, r5, 0 - ands r0, r1 - movs r1, 0x4 - mov r8, r1 - mov r3, r8 - orrs r0, r3 - strb r0, [r2, 0x5] - ldr r0, _08105454 @ =gSubspriteTables_83ED7B4 - mov r9, r0 - adds r0, r2, 0 - mov r1, r9 - bl SetSubspriteTables - ldr r6, _08105458 @ =gSharedMem - adds r0, r6, 0 - adds r0, 0x4E - strb r4, [r0] - movs r1, 0x90 - lsls r1, 1 - ldr r0, _0810544C @ =gSpriteTemplate_83ED4D4 - movs r2, 0x68 - movs r3, 0x4 - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r2, r0, r7 - adds r1, r2, 0 - adds r1, 0x3E - ldrb r0, [r1] - mov r3, r10 - orrs r0, r3 - strb r0, [r1] - ldrb r0, [r2, 0x5] - ands r5, r0 - mov r0, r8 - orrs r5, r0 - strb r5, [r2, 0x5] - adds r0, r2, 0 - mov r1, r9 - bl SetSubspriteTables - adds r6, 0x4F - strb r4, [r6] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810544C: .4byte gSpriteTemplate_83ED4D4 -_08105450: .4byte gSprites -_08105454: .4byte gSubspriteTables_83ED7B4 -_08105458: .4byte gSharedMem - thumb_func_end sub_81053A0 - - thumb_func_start sub_810545C -sub_810545C: @ 810545C - push {r4,lr} - ldr r0, _081054A8 @ =gSpriteTemplate_83ED4EC - movs r1, 0xB8 - lsls r1, 1 - movs r2, 0x4C - movs r3, 0xB - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - ldr r1, _081054AC @ =gSprites - adds r0, r1 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r3] - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0, 0x5] - ldr r1, _081054B0 @ =gSubspriteTables_83ED7D4 - bl SetSubspriteTables - ldr r0, _081054B4 @ =gSharedMem - adds r0, 0x40 - strb r4, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081054A8: .4byte gSpriteTemplate_83ED4EC -_081054AC: .4byte gSprites -_081054B0: .4byte gSubspriteTables_83ED7D4 -_081054B4: .4byte gSharedMem - thumb_func_end sub_810545C - - thumb_func_start sub_81054B8 -sub_81054B8: @ 81054B8 - push {r4,r5,lr} - ldr r4, _08105518 @ =gSharedMem - adds r0, r4, 0 - adds r0, 0x40 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0810551C @ =gSprites - adds r0, r1 - bl DestroySprite - movs r5, 0 - adds r4, 0x49 -_081054D4: - adds r0, r5, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0810551C @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bls _081054D4 - movs r5, 0 - ldr r4, _08105520 @ =gSharedMem + 0x4B -_081054F4: - adds r0, r5, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0810551C @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x2 - bls _081054F4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08105518: .4byte gSharedMem -_0810551C: .4byte gSprites -_08105520: .4byte gSharedMem + 0x4B - thumb_func_end sub_81054B8 - - thumb_func_start sub_8105524 -sub_8105524: @ 8105524 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _0810554C @ =gSharedMem + 0x4E -_0810552A: - adds r0, r4, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08105550 @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bls _0810552A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810554C: .4byte gSharedMem + 0x4E -_08105550: .4byte gSprites - thumb_func_end sub_8105524 - - thumb_func_start sub_8105554 -sub_8105554: @ 8105554 - push {lr} - ldr r0, _08105570 @ =gSharedMem - adds r0, 0x42 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08105574 @ =gSprites - adds r0, r1 - bl DestroySprite - pop {r0} - bx r0 - .align 2, 0 -_08105570: .4byte gSharedMem -_08105574: .4byte gSprites - thumb_func_end sub_8105554 - thumb_func_start sub_8105578 sub_8105578: @ 8105578 push {r4-r6,lr} diff --git a/include/slot_machine.h b/include/slot_machine.h index 78744d0e4..882ec6d52 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -30,15 +30,15 @@ struct SlotMachineEwramStruct { /*0x3D*/ u8 unk3D; /*0x3E*/ u8 unk3E; /*0x3F*/ u8 unk3F; - /*0x40*/ u8 filler40[2]; + /*0x40*/ u8 unk40; + /*0x41*/ u8 unk41; /*0x42*/ u8 unk42; /*0x43*/ u8 unk43; /*0x44*/ u8 unk44[5]; - /*0x49*/ u8 unk49; - /*0x4A*/ u8 unk4A; + /*0x49*/ u8 unk49[2]; /*0x49*/ u8 unk4B[3]; - /*0x4E*/ u8 unk4E; - /*0x4F*/ u8 filler4F[9]; + /*0x4E*/ u8 unk4E[2]; + /*0x50*/ u8 filler50[8]; /*0x58*/ u16 win0h; /*0x5a*/ u16 win0v; /*0x5c*/ u16 winIn; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 3aaad9a8b..4b580839c 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -2821,7 +2821,7 @@ void sub_81048CC(struct Task *task) sub_81056C0(); sub_8105804(); sub_8105854(); - gSprites[eSlotMachine->unk4E].invisible = TRUE; + gSprites[eSlotMachine->unk4E[0]].invisible = TRUE; StartSpriteAnimIfDifferent(gSprites + eSlotMachine->unk3F, 5); task->data[0]++; task->data[4] = 4; @@ -2845,7 +2845,7 @@ void sub_8104940(struct Task *task) sub_81058C4(); sub_8105284(); sub_81059E8(); - gSprites[eSlotMachine->unk4E].invisible = FALSE; + gSprites[eSlotMachine->unk4E[0]].invisible = FALSE; task->data[0]++; task->data[5] = 0; } @@ -3203,14 +3203,14 @@ void sub_81051C0(void) sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; SetSubspriteTables(sprite, gSubspriteTables_83ED73C); - eSlotMachine->unk49 = spriteId; + eSlotMachine->unk49[0] = spriteId; spriteId = CreateSprite(&gSpriteTemplate_83ED48C, 0x170, 0x54, 7); sprite = gSprites + spriteId; sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; SetSubspriteTables(sprite, gSubspriteTables_83ED75C); - eSlotMachine->unk4A = spriteId; + eSlotMachine->unk49[1] = spriteId; } extern const struct SpriteTemplate gSpriteTemplate_83ED4A4; @@ -3251,6 +3251,68 @@ void sub_810535C(struct Sprite *sprite) StartSpriteAnimIfDifferent(sprite, sub_8102C48(r0 / 20)); } +extern const struct SpriteTemplate gSpriteTemplate_83ED4D4; +extern const struct SubspriteTable gSubspriteTables_83ED7B4[]; + +void sub_81053A0(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x170, 0x64, 9); + struct Sprite *sprite = gSprites + spriteId; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); + eSlotMachine->unk4E[0] = spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83ED4D4, 0x120, 0x68, 4); + sprite = gSprites + spriteId; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + SetSubspriteTables(sprite, gSubspriteTables_83ED7B4); + eSlotMachine->unk4E[1] = spriteId; +} + +extern const struct SpriteTemplate gSpriteTemplate_83ED4EC; +extern const struct SubspriteTable gSubspriteTables_83ED7D4[]; + +void sub_810545C(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED4EC, 0x170, 0x4c, 11); + struct Sprite *sprite = gSprites + spriteId; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = 1; + SetSubspriteTables(sprite, gSubspriteTables_83ED7D4); + eSlotMachine->unk40 = spriteId; +} + +void sub_81054B8(void) +{ + u8 i; + + DestroySprite(gSprites + eSlotMachine->unk40); + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk49[i]); + } + for (i = 0; i < 3; i++) + { + DestroySprite(gSprites + eSlotMachine->unk4B[i]); + } +} + +void sub_8105524(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk4E[i]); + } +} + +void sub_8105554(void) +{ + DestroySprite(gSprites + eSlotMachine->unk42); +} + asm(".section .text_b"); static void sub_8106448(void) { |