diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-11 14:58:09 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-11 14:58:09 -0400 |
commit | 433a33ad6516fe18ce378edbb1539e805708d06e (patch) | |
tree | f2fb259bd7e3d3cf98702efe6d4e0f1d18dd7d15 | |
parent | ba16f9d35f5c6f5daee0a24301d8c48031f6c4df (diff) |
Most of darkness field move streaks field effect
-rwxr-xr-x | asm/field_effect.s | 323 | ||||
-rwxr-xr-x | src/field_effect.c | 109 |
2 files changed, 108 insertions, 324 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index c513d479c..9b9d03b1a 100755 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,329 +6,6 @@ .text - thumb_func_start sub_808847C -sub_808847C: @ 808847C - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _080884A4 @ =gUnknown_0839F3C8 - ldr r2, _080884A8 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080884A4: .4byte gUnknown_0839F3C8 -_080884A8: .4byte gTasks - thumb_func_end sub_808847C - - thumb_func_start sub_80884AC -sub_80884AC: @ 80884AC - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080884DC @ =REG_BG0HOFS - ldrh r0, [r4, 0xA] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r4, 0xC] - strh r0, [r1] - adds r0, r4, 0 - adds r0, 0x22 - ldr r1, _080884E0 @ =gMain - ldr r1, [r1, 0xC] - bl StoreWordInTwoHalfwords - ldr r0, _080884E4 @ =sub_80886B0 - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080884DC: .4byte REG_BG0HOFS -_080884E0: .4byte gMain -_080884E4: .4byte sub_80886B0 - thumb_func_end sub_80884AC - - thumb_func_start sub_80884E8 -sub_80884E8: @ 80884E8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _08088544 @ =REG_BG0CNT - ldrh r1, [r0] - lsrs r1, 2 - lsls r1, 30 - lsrs r1, 16 - ldrh r4, [r0] - lsrs r4, 8 - lsls r4, 27 - lsrs r4, 16 - movs r0, 0 - mov r8, r0 - strh r4, [r6, 0x20] - ldr r0, _08088548 @ =gDarknessFieldMoveStreaksTiles - movs r5, 0xC0 - lsls r5, 19 - adds r1, r5 - movs r2, 0x40 - bl CpuSet - mov r0, r8 - str r0, [sp] - adds r4, r5 - ldr r2, _0808854C @ =0x05000200 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - ldr r0, _08088550 @ =gDarknessFieldMoveStreaksPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08088544: .4byte REG_BG0CNT -_08088548: .4byte gDarknessFieldMoveStreaksTiles -_0808854C: .4byte 0x05000200 -_08088550: .4byte gDarknessFieldMoveStreaksPalette - thumb_func_end sub_80884E8 - - thumb_func_start sub_8088554 -sub_8088554: @ 8088554 - push {r4,lr} - adds r4, r0, 0 - bl sub_8088708 - lsls r0, 24 - cmp r0, 0 - beq _0808858A - ldr r1, _08088598 @ =REG_WIN1H - movs r0, 0xF0 - strh r0, [r1] - adds r1, 0x4 - ldr r2, _0808859C @ =0x00002878 - adds r0, r2, 0 - strh r0, [r1] - ldr r2, _080885A0 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _080885A4 @ =sub_8088890 - str r1, [r0] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_0808858A: - adds r0, r4, 0 - bl sub_80886F8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08088598: .4byte REG_WIN1H -_0808859C: .4byte 0x00002878 -_080885A0: .4byte gSprites -_080885A4: .4byte sub_8088890 - thumb_func_end sub_8088554 - - thumb_func_start sub_80885A8 -sub_80885A8: @ 80885A8 - push {r4,lr} - adds r4, r0, 0 - bl sub_80886F8 - ldr r2, _080885D4 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3C - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080885CC - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080885CC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080885D4: .4byte gSprites - thumb_func_end sub_80885A8 - - thumb_func_start sub_80885D8 -sub_80885D8: @ 80885D8 - push {r4,lr} - adds r4, r0, 0 - bl sub_80886F8 - ldrh r1, [r4, 0xA] - movs r0, 0x7 - ands r0, r1 - movs r1, 0 - strh r0, [r4, 0xE] - strh r1, [r4, 0x10] - ldr r0, _08088604 @ =REG_WIN1H - ldr r2, _08088608 @ =0x0000ffff - adds r1, r2, 0 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08088604: .4byte REG_WIN1H -_08088608: .4byte 0x0000ffff - thumb_func_end sub_80885D8 - - thumb_func_start sub_808860C -sub_808860C: @ 808860C - push {r4,lr} - adds r4, r0, 0 - bl sub_80886F8 - adds r0, r4, 0 - bl sub_80887C0 - lsls r0, 24 - cmp r0, 0 - beq _08088626 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08088626: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_808860C - - thumb_func_start sub_808862C -sub_808862C: @ 808862C - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r0, _0808869C @ =REG_BG0CNT - ldrh r1, [r0] - lsrs r1, 8 - lsls r1, 27 - lsrs r1, 16 - movs r0, 0 - str r0, [sp] - movs r0, 0xC0 - lsls r0, 19 - adds r1, r0 - ldr r2, _080886A0 @ =0x05000200 - mov r0, sp - bl CpuSet - adds r0, r5, 0 - adds r0, 0x22 - add r1, sp, 0x4 - bl LoadWordFromTwoHalfwords - ldr r0, [sp, 0x4] - bl SetVBlankCallback - ldr r4, _080886A4 @ =gWindowConfig_81E6CE4 - adds r0, r4, 0 - bl SetUpWindowConfig - adds r0, r4, 0 - bl InitMenuWindow - movs r0, 0x26 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080886A8 @ =gSprites - adds r0, r1 - bl FreeResourcesAndDestroySprite - movs r0, 0x6 - bl FieldEffectActiveListRemove - ldr r0, _080886AC @ =sub_808847C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0808869C: .4byte REG_BG0CNT -_080886A0: .4byte 0x05000200 -_080886A4: .4byte gWindowConfig_81E6CE4 -_080886A8: .4byte gSprites -_080886AC: .4byte sub_808847C - thumb_func_end sub_808862C - - thumb_func_start sub_80886B0 -sub_80886B0: @ 80886B0 - push {r4,lr} - sub sp, 0x4 - ldr r0, _080886EC @ =sub_808847C - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080886F0 @ =gTasks - adds r4, r0 - adds r0, r4, 0 - adds r0, 0x22 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r0, [sp] - bl _call_via_r0 - ldr r1, _080886F4 @ =REG_BG0HOFS - ldrh r0, [r4, 0xA] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r4, 0xC] - strh r0, [r1] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080886EC: .4byte sub_808847C -_080886F0: .4byte gTasks -_080886F4: .4byte REG_BG0HOFS - thumb_func_end sub_80886B0 - - thumb_func_start sub_80886F8 -sub_80886F8: @ 80886F8 - ldrh r1, [r0, 0xA] - subs r1, 0x10 - strh r1, [r0, 0xA] - ldrh r1, [r0, 0xE] - adds r1, 0x10 - strh r1, [r0, 0xE] - bx lr - thumb_func_end sub_80886F8 - thumb_func_start sub_8088708 sub_8088708: @ 8088708 push {r4-r7,lr} diff --git a/src/field_effect.c b/src/field_effect.c index cd58e84ba..53f8aaed4 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2015,9 +2015,12 @@ void sub_808847C(u8); u8 sub_8088830(u32, u32, u32); extern const void (*gUnknown_0839F3AC[7])(struct Task *); extern const void (*gUnknown_0839F3C8[7])(struct Task *); -extern const u32 gFieldMoveStreaksTiles[]; +extern const u32 gFieldMoveStreaksTiles[0x200]; extern const u16 gFieldMoveStreaksPalette[16]; extern const u16 gFieldMoveStreaksTilemap[0x140]; +extern const u32 gDarknessFieldMoveStreaksTiles[0x80]; +extern const u16 gDarknessFieldMoveStreaksPalette[16]; +extern const u16 gDarknessFieldMoveStreaksTilemap[0x140]; void sub_80883DC(void); void sub_808843C(u16); void sub_8088890(struct Sprite *); @@ -2200,3 +2203,107 @@ void sub_808843C(u16 offs) *dest = gFieldMoveStreaksTilemap[i] | 0xf000; } } + +void sub_80886B0(void); +bool8 sub_8088708(struct Task *); +void sub_80886F8(struct Task *); +bool8 sub_80887C0(struct Task *); + +void sub_808847C(u8 taskId) +{ + gUnknown_0839F3C8[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_80884AC(struct Task *task) +{ + REG_BG0HOFS = task->data[1]; + REG_BG0VOFS = task->data[2]; + StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); + SetVBlankCallback(sub_80886B0); + task->data[0]++; +} + +void sub_80884E8(struct Task *task) +{ + u16 offset; + u16 delta; + offset = ((REG_BG0CNT >> 2) << 14); + delta = ((REG_BG0CNT >> 8) << 11); + task->data[12] = delta; + CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80); + CpuFill32(0, (void *)(VRAM + delta), 0x800); + LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20); + task->data[0]++; +} + +void sub_8088554(struct Task *task) +{ + if (sub_8088708(task)) + { + REG_WIN1H = 0x00f0; + REG_WIN1V = 0x2878; + gSprites[task->data[15]].callback = sub_8088890; + task->data[0]++; + } + sub_80886F8(task); +} + +void sub_80885A8(struct Task *task) +{ + sub_80886F8(task); + if (gSprites[task->data[15]].data7) + { + task->data[0]++; + } +} + +void sub_80885D8(struct Task *task) +{ + sub_80886F8(task); + task->data[3] = task->data[1] & 7; + task->data[4] = 0; + REG_WIN1H = 0xffff; + REG_WIN1V = 0xffff; + task->data[0]++; +} + +void sub_808860C(struct Task *task) +{ + sub_80886F8(task); + if (sub_80887C0(task)) + { + task->data[0]++; + } +} + +void sub_808862C(struct Task *task) +{ + IntrCallback intrCallback; + u16 bg0cnt; + bg0cnt = (REG_BG0CNT >> 8) << 11; + CpuFill32(0, (void *)VRAM + bg0cnt, 0x800); + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + SetVBlankCallback(intrCallback); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + DestroyTask(FindTaskIdByFunc(sub_808847C)); +} + +void sub_80886B0(void) +{ + IntrCallback intrCallback; + struct Task *task; + task = &gTasks[FindTaskIdByFunc(sub_808847C)]; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback); + intrCallback(); + REG_BG0HOFS = task->data[1]; + REG_BG0VOFS = task->data[2]; +} + +void sub_80886F8(struct Task *task) +{ + task->data[1] -= 16; + task->data[3] += 16; +} |