diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-29 20:03:05 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-12-29 20:03:05 -0500 |
commit | 17745475ccc35c99ac9b586a03bc39de0936bb2e (patch) | |
tree | 15bf630eb0a2f10c76dbda938c78951b6c6b2f9b | |
parent | d05e72b6b269defef8d9b1bbce42adaf48f4ed8f (diff) |
through sub_8103FA0
-rw-r--r-- | asm/slot_machine.s | 174 | ||||
-rw-r--r-- | include/field_effect.h | 1 | ||||
-rw-r--r-- | src/field/slot_machine.c | 70 |
3 files changed, 67 insertions, 178 deletions
diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 500441c75..20e9cc3b0 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -5,180 +5,6 @@ .text - thumb_func_start sub_8103EAC -sub_8103EAC: @ 8103EAC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08103EC8 @ =gSprites - adds r1, r0 - movs r2, 0x30 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _08103ECC - movs r0, 0x1 - b _08103EDE - .align 2, 0 -_08103EC8: .4byte gSprites -_08103ECC: - ldrh r2, [r1, 0x3C] - movs r3, 0x3C - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _08103EDA - movs r0, 0 - strh r0, [r1, 0x30] -_08103EDA: - lsls r0, r2, 24 - lsrs r0, 24 -_08103EDE: - pop {r1} - bx r1 - thumb_func_end sub_8103EAC - - thumb_func_start sub_8103EE4 -sub_8103EE4: @ 8103EE4 - push {r4-r7,lr} - adds r2, r0, 0 - movs r1, 0x30 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _08103F66 - ldrh r0, [r2, 0x34] - subs r0, 0x1 - strh r0, [r2, 0x34] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _08103F4E - movs r0, 0 - strh r0, [r2, 0x3C] - movs r6, 0x1 - strh r6, [r2, 0x34] - ldrh r1, [r2, 0x38] - ldrh r3, [r2, 0x36] - adds r0, r1, r3 - strh r0, [r2, 0x36] - movs r4, 0x4 - ldrh r5, [r2, 0x32] - movs r7, 0x32 - ldrsh r3, [r2, r7] - cmp r3, 0 - beq _08103F20 - movs r4, 0x8 -_08103F20: - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bgt _08103F38 - strh r6, [r2, 0x3C] - negs r0, r1 - strh r0, [r2, 0x38] - cmp r3, 0 - beq _08103F4E - subs r0, r5, 0x1 - strh r0, [r2, 0x32] - b _08103F40 -_08103F38: - cmp r0, r4 - blt _08103F40 - negs r0, r1 - strh r0, [r2, 0x38] -_08103F40: - movs r1, 0x32 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _08103F4E - ldrh r0, [r2, 0x34] - lsls r0, 1 - strh r0, [r2, 0x34] -_08103F4E: - ldr r1, _08103F6C @ =gUnknown_083EDD30 - movs r3, 0x2E - ldrsh r0, [r2, r3] - adds r0, r1 - ldrb r0, [r0] - ldrh r3, [r2, 0x36] - lsls r3, 24 - lsrs r3, 24 - adds r1, r3, 0 - adds r2, r3, 0 - bl MultiplyPaletteRGBComponents -_08103F66: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08103F6C: .4byte gUnknown_083EDD30 - thumb_func_end sub_8103EE4 - - thumb_func_start sub_8103F70 -sub_8103F70: @ 8103F70 - push {r4,lr} - ldr r4, _08103F98 @ =sub_8103FE8 - adds r0, r4, 0 - movs r1, 0x6 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08103F9C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0x1 - strh r2, [r1, 0xE] - bl _call_via_r4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08103F98: .4byte sub_8103FE8 -_08103F9C: .4byte gTasks - thumb_func_end sub_8103F70 - - thumb_func_start sub_8103FA0 -sub_8103FA0: @ 8103FA0 - push {lr} - ldr r0, _08103FC4 @ =sub_8103FE8 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08103FC8 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0xC - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08103FCC - movs r0, 0 - b _08103FE0 - .align 2, 0 -_08103FC4: .4byte sub_8103FE8 -_08103FC8: .4byte gTasks -_08103FCC: - adds r0, r2, 0 - bl DestroyTask - ldr r0, _08103FE4 @ =gUnknown_083EDDAC - ldr r0, [r0] - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x1 -_08103FE0: - pop {r1} - bx r1 - .align 2, 0 -_08103FE4: .4byte gUnknown_083EDDAC - thumb_func_end sub_8103FA0 - thumb_func_start sub_8103FE8 sub_8103FE8: @ 8103FE8 push {lr} diff --git a/include/field_effect.h b/include/field_effect.h index 9f71efba1..bb859074f 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -252,6 +252,7 @@ void FreeResourcesAndDestroySprite(struct Sprite *sprite); void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8); void sub_80878A8(void); void sub_8087BA8(void); +void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); extern s32 gFieldEffectArguments[8]; diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index 82ac4e9e7..659688d81 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -3,6 +3,7 @@ #include "strings2.h" #include "overworld.h" #include "menu_cursor.h" +#include "field_effect.h" #include "random.h" #include "sound.h" #include "main.h" @@ -110,10 +111,11 @@ static void sub_8103DC8(void); static void sub_8103E04(u8 a0); static bool8 sub_8103E38(void); static bool8 sub_8103E7C(void); -bool8 sub_8103EAC(u8 a0); -void sub_8103EE4(struct Sprite *sprite); -void sub_8103F70(void); -bool8 sub_8103FA0(void); +static bool8 sub_8103EAC(u8 spriteId); +static void sub_8103EE4(struct Sprite *sprite); +static void sub_8103F70(void); +void sub_8103FE8(u8 taskId); +static bool8 sub_8103FA0(void); void sub_8104048(void); void sub_8104064(u8 a0); bool8 sub_81040C8(void); @@ -2190,6 +2192,66 @@ static bool8 sub_8103E7C(void) return TRUE; } +static bool8 sub_8103EAC(u8 spriteId) +{ + struct Sprite *sprite = gSprites + spriteId; + if (!sprite->data[1]) + return TRUE; + if (sprite->data[7]) + sprite->data[1] = 0; + return sprite->data[7]; +} + +static void sub_8103EE4(struct Sprite *sprite) +{ + s16 r4; + if (sprite->data[1]) + { + if (!sprite->data[3]--) + { + sprite->data[7] = 0; + sprite->data[3] = 1; + sprite->data[4] += sprite->data[5]; + r4 = 4; + if (sprite->data[2]) + r4 = 8; + if (sprite->data[4] <= 0) + { + sprite->data[7] = 1; + sprite->data[5] = -sprite->data[5]; + if (sprite->data[2]) + sprite->data[2]--; + } + else if (sprite->data[4] >= r4) + sprite->data[5] = -sprite->data[5]; + if (sprite->data[2]) + sprite->data[3] <<= 1; + } + MultiplyPaletteRGBComponents(gUnknown_083EDD30[sprite->data[0]], sprite->data[4], sprite->data[4], sprite->data[4]); + } +} + +static void sub_8103F70(void) +{ + u8 taskId = CreateTask(sub_8103FE8, 6); + gTasks[taskId].data[3] = 1; + sub_8103FE8(taskId); +} + +extern const u16 *const gUnknown_083EDDAC; + +static bool8 sub_8103FA0(void) +{ + u8 taskId = FindTaskIdByFunc(sub_8103FE8); + if (!gTasks[taskId].data[2]) + { + DestroyTask(taskId); + LoadPalette(gUnknown_083EDDAC, 0x10, 0x20); + return TRUE; + } + return FALSE; +} + asm(".section .text_a"); static void LoadSlotMachineWheelOverlay(void); |