diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-31 21:11:48 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-31 21:11:48 -0500 |
commit | 99c897b71582e942e47765837c936b5fd79bf569 (patch) | |
tree | c746941050a9bd21355bb245afba567068fd41c9 | |
parent | 39d2d1f37c62ffc458c82943fbfceb86959ef1a3 (diff) |
through sub_81059B8
-rw-r--r-- | asm/slot_machine.s | 393 | ||||
-rw-r--r-- | include/slot_machine.h | 3 | ||||
-rw-r--r-- | src/field/slot_machine.c | 116 |
3 files changed, 118 insertions, 394 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 5518d4395..c10408d89 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,399 +5,6 @@ .text - thumb_func_start sub_81056F0 -sub_81056F0: @ 81056F0 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - ldr r0, _08105778 @ =gSpriteTemplate_83ED51C - mov r8, r0 - movs r1, 0x48 - movs r2, 0x50 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0810577C @ =gSprites - mov r9, r1 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - add r2, r9 - ldrb r3, [r2, 0x5] - movs r4, 0xD - negs r4, r4 - adds r1, r4, 0 - ands r1, r3 - movs r6, 0x4 - orrs r1, r6 - strb r1, [r2, 0x5] - movs r3, 0 - movs r1, 0x1 - strh r1, [r2, 0x2E] - strh r3, [r2, 0x38] - movs r1, 0x10 - strh r1, [r2, 0x3A] - movs r1, 0x8 - strh r1, [r2, 0x3C] - ldr r5, _08105780 @ =gSharedMem - adds r1, r5, 0 - adds r1, 0x52 - strb r0, [r1] - mov r0, r8 - movs r1, 0x68 - movs r2, 0x50 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r9 - ldrb r2, [r1, 0x5] - ands r4, r2 - orrs r4, r6 - strb r4, [r1, 0x5] - adds r1, 0x3F - ldrb r2, [r1] - movs r3, 0x1 - orrs r2, r3 - strb r2, [r1] - adds r5, 0x53 - strb r0, [r5] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08105778: .4byte gSpriteTemplate_83ED51C -_0810577C: .4byte gSprites -_08105780: .4byte gSharedMem - thumb_func_end sub_81056F0 - - thumb_func_start sub_8105784 -sub_8105784: @ 8105784 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r1, _081057E0 @ =gUnknown_083ECC58 - mov r0, sp - movs r2, 0x2 - bl memcpy - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _081057D6 - ldrh r0, [r4, 0x3A] - subs r0, 0x1 - strh r0, [r4, 0x3A] - lsls r0, 16 - cmp r0, 0 - bgt _081057D6 - movs r0, 0x7 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r2, _081057E4 @ =0x01030000 - adds r0, r2 - lsrs r0, 16 - movs r2, 0x38 - ldrsh r1, [r4, r2] - add r1, sp - ldrb r3, [r1] - adds r1, r3, 0 - adds r2, r3, 0 - bl MultiplyInvertedPaletteRGBComponents - ldrh r0, [r4, 0x38] - adds r0, 0x1 - movs r1, 0x1 - ands r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3C] - strh r0, [r4, 0x3A] -_081057D6: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081057E0: .4byte gUnknown_083ECC58 -_081057E4: .4byte 0x01030000 - thumb_func_end sub_8105784 - - thumb_func_start sub_81057E8 -sub_81057E8: @ 81057E8 - ldr r3, _081057FC @ =gSprites - ldr r1, _08105800 @ =gSharedMem - adds r1, 0x52 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - strh r0, [r1, 0x3C] - bx lr - .align 2, 0 -_081057FC: .4byte gSprites -_08105800: .4byte gSharedMem - thumb_func_end sub_81057E8 - - thumb_func_start sub_8105804 -sub_8105804: @ 8105804 - push {r4,r5,lr} - movs r0, 0x7 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08105848 @ =0x01030000 - adds r0, r1 - lsrs r0, 16 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl MultiplyInvertedPaletteRGBComponents - movs r4, 0 - ldr r5, _0810584C @ =gSharedMem + 0x52 -_08105824: - adds r0, r4, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08105850 @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bls _08105824 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08105848: .4byte 0x01030000 -_0810584C: .4byte gSharedMem + 0x52 -_08105850: .4byte gSprites - thumb_func_end sub_8105804 - - thumb_func_start sub_8105854 -sub_8105854: @ 8105854 - push {lr} - ldr r0, _08105888 @ =gSpriteTemplate_83ED534 - movs r1, 0xA8 - movs r2, 0x50 - movs r3, 0x6 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0810588C @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r3, [r1, 0x5] - movs r2, 0xD - negs r2, r2 - ands r2, r3 - movs r3, 0x4 - orrs r2, r3 - strb r2, [r1, 0x5] - ldr r1, _08105890 @ =gSharedMem - adds r1, 0x41 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08105888: .4byte gSpriteTemplate_83ED534 -_0810588C: .4byte gSprites -_08105890: .4byte gSharedMem - thumb_func_end sub_8105854 - - thumb_func_start sub_8105894 -sub_8105894: @ 8105894 - ldr r1, _0810589C @ =gSpriteCoordOffsetY - ldrh r1, [r1] - strh r1, [r0, 0x26] - bx lr - .align 2, 0 -_0810589C: .4byte gSpriteCoordOffsetY - thumb_func_end sub_8105894 - - thumb_func_start sub_81058A0 -sub_81058A0: @ 81058A0 - push {lr} - ldr r0, _081058BC @ =gSharedMem - adds r0, 0x41 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081058C0 @ =gSprites - adds r0, r1 - bl DestroySprite - pop {r0} - bx r0 - .align 2, 0 -_081058BC: .4byte gSharedMem -_081058C0: .4byte gSprites - thumb_func_end sub_81058A0 - - thumb_func_start sub_81058C4 -sub_81058C4: @ 81058C4 - push {r4-r6,lr} - sub sp, 0x8 - ldr r1, _08105938 @ =gUnknown_083ECC5A - mov r0, sp - movs r2, 0x8 - bl memcpy - movs r4, 0 - ldr r5, _0810593C @ =gSharedMem + 0x54 -_081058D6: - ldr r0, _08105940 @ =gSpriteCoordOffsetX - ldrh r0, [r0] - movs r1, 0x50 - subs r1, r0 - lsls r1, 16 - asrs r1, 16 - ldr r0, _08105944 @ =gSpriteTemplate_83ED54C - movs r2, 0x44 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r3, r0, 4 - adds r3, r0 - lsls r3, 2 - ldr r1, _08105948 @ =gSprites - adds r3, r1 - ldrb r2, [r3, 0x5] - movs r6, 0xD - negs r6, r6 - adds r1, r6, 0 - ands r2, r1 - movs r1, 0x4 - orrs r2, r1 - strb r2, [r3, 0x5] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - ldrb r1, [r1] - movs r2, 0x2 - orrs r1, r2 - mov r2, r12 - strb r1, [r2] - lsls r1, r4, 1 - add r1, sp - ldrh r1, [r1] - strh r1, [r3, 0x2E] - adds r1, r4, r5 - strb r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081058D6 - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08105938: .4byte gUnknown_083ECC5A -_0810593C: .4byte gSharedMem + 0x54 -_08105940: .4byte gSpriteCoordOffsetX -_08105944: .4byte gSpriteTemplate_83ED54C -_08105948: .4byte gSprites - thumb_func_end sub_81058C4 - - thumb_func_start sub_810594C -sub_810594C: @ 810594C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x2E] - subs r0, 0x2 - movs r4, 0 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x2E] - movs r1, 0x2E - ldrsh r0, [r5, r1] - movs r1, 0x14 - bl Cos - strh r0, [r5, 0x24] - movs r2, 0x2E - ldrsh r0, [r5, r2] - movs r1, 0x6 - bl Sin - strh r0, [r5, 0x26] - adds r1, r5, 0 - adds r1, 0x43 - strb r4, [r1] - movs r2, 0x2E - ldrsh r0, [r5, r2] - cmp r0, 0x7F - ble _08105986 - movs r0, 0x2 - strb r0, [r1] -_08105986: - ldrh r0, [r5, 0x30] - adds r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _081059B0 - adds r3, r5, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r0, r2, 31 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r0, 0 - strh r0, [r5, 0x30] -_081059B0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_810594C - - thumb_func_start sub_81059B8 -sub_81059B8: @ 81059B8 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _081059E0 @ =gSharedMem + 0x54 -_081059BE: - adds r0, r4, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _081059E4 @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _081059BE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081059E0: .4byte gSharedMem + 0x54 -_081059E4: .4byte gSprites - thumb_func_end sub_81059B8 - thumb_func_start sub_81059E8 sub_81059E8: @ 81059E8 push {r4,lr} diff --git a/include/slot_machine.h b/include/slot_machine.h index 7d7d8a24d..34431a8ef 100644 --- a/include/slot_machine.h +++ b/include/slot_machine.h @@ -39,7 +39,8 @@ struct SlotMachineEwramStruct { /*0x49*/ u8 unk4B[3]; /*0x4E*/ u8 unk4E[2]; /*0x50*/ u8 unk50[2]; - /*0x52*/ u8 filler52[6]; + /*0x52*/ u8 unk52[2]; + /*0x54*/ u8 unk54[4]; /*0x58*/ u16 win0h; /*0x5a*/ u16 win0v; /*0x5c*/ u16 winIn; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 8ca873e84..9a098d4cf 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -9,6 +9,7 @@ #include "main.h" #include "slot_machine.h" #include "decompress.h" +#include "trig.h" #include "palette.h" #include "task.h" #include "util.h" @@ -3374,6 +3375,121 @@ void sub_81056C0(void) } } +extern const struct SpriteTemplate gSpriteTemplate_83ED51C; + +void sub_81056F0(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x48, 0x50, 3); + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[5] = 0; + gSprites[spriteId].data[6] = 16; + gSprites[spriteId].data[7] = 8; + eSlotMachine->unk52[0] = spriteId; + + spriteId = CreateSprite(&gSpriteTemplate_83ED51C, 0x68, 0x50, 3); + gSprites[spriteId].oam.priority = 1; + gSprites[spriteId].hFlip = TRUE; + eSlotMachine->unk52[1] = spriteId; +} + +extern const u8 gUnknown_083ECC58[2]; // don't remove this until decompiled through gUnknown_083ECCF8 + +void sub_8105784(struct Sprite *sprite) +{ + // u8 sp[] = {16, 0}; + u8 sp[ARRAY_COUNT(gUnknown_083ECC58)]; + memcpy(sp, gUnknown_083ECC58, sizeof gUnknown_083ECC58); + if (sprite->data[0] && --sprite->data[6] <= 0) + { + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, sp[sprite->data[5]], sp[sprite->data[5]], sp[sprite->data[5]]); + ++sprite->data[5]; + sprite->data[5] &= 1; + sprite->data[6] = sprite->data[7]; + } +} + +void sub_81057E8(s16 a0) +{ + gSprites[eSlotMachine->unk52[0]].data[7] = a0; +} + +void sub_8105804(void) +{ + u8 i; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(7) << 4) + 0x103, 0, 0, 0); + for (i = 0; i < 2; i++) + { + DestroySprite(gSprites + eSlotMachine->unk52[i]); + } +} + +extern const struct SpriteTemplate gSpriteTemplate_83ED534; + +void sub_8105854(void) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED534, 0xa8, 0x50, 6); + gSprites[spriteId].oam.priority = 1; + eSlotMachine->unk41 = spriteId; +} + +void sub_8105894(struct Sprite *sprite) +{ + sprite->pos2.y = gSpriteCoordOffsetY; +} + +void sub_81058A0(void) +{ + DestroySprite(gSprites + eSlotMachine->unk41); +} + +extern const struct SpriteTemplate gSpriteTemplate_83ED54C; +extern const u16 gUnknown_083ECC5A[4]; // don't remove this until decompiled through gUnknown_083ECCF8 + +void sub_81058C4(void) +{ + u8 i; + // u16 sp[] = {0x0, 0x40, 0x80, 0xC0}; + u16 sp[ARRAY_COUNT(gUnknown_083ECC5A)]; + memcpy(sp, gUnknown_083ECC5A, sizeof gUnknown_083ECC5A); + for (i = 0; i < 4; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_83ED54C, 0x50 - gSpriteCoordOffsetX, 0x44, 0); + struct Sprite *sprite = gSprites + spriteId; + sprite->oam.priority = 1; + sprite->coordOffsetEnabled = TRUE; + sprite->data[0] = sp[i]; + eSlotMachine->unk54[i] = spriteId; + } +} + +void sub_810594C(struct Sprite *sprite) +{ + sprite->data[0] -= 2; + sprite->data[0] &= 0xff; + sprite->pos2.x = Cos(sprite->data[0], 20); + sprite->pos2.y = Sin(sprite->data[0], 6); + sprite->subpriority = 0; + if (sprite->data[0] >= 0x80) + { + sprite->subpriority = 2; + } + if (++sprite->data[1] >= 16) + { + sprite->hFlip ^= 1; + sprite->data[1] = 0; + } +} + +void sub_81059B8(void) +{ + u8 i; + for (i = 0; i < 4; i++) + { + DestroySprite(gSprites + eSlotMachine->unk54[i]); + } +} + asm(".section .text_b"); static void sub_8106448(void) { |