diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-10 21:36:41 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-10 21:36:41 -0400 |
commit | 19c16e2f94dda9fe354692f6e449b271e845ad22 (patch) | |
tree | 1d655f92d48784d8acbf6f0eaf661ccddea1eaaf | |
parent | 40bcba1a64f2377166b419ecbabf8ac4a097b8ef (diff) |
Attempt at decompiling field effect for sending out pokemon for field move
-rwxr-xr-x | asm/field_effect.s | 402 | ||||
-rwxr-xr-x | include/field_effect.h | 23 | ||||
-rwxr-xr-x[-rw-r--r--] | include/gba/defines.h | 3 | ||||
-rwxr-xr-x | src/field_effect.c | 280 |
4 files changed, 306 insertions, 402 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index d0ea81b82..9f8f50afc 100755 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,408 +6,6 @@ .text - thumb_func_start sub_8088120 -sub_8088120: @ 8088120 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08088148 @ =gUnknown_0839F3AC - ldr r2, _0808814C @ =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 -_08088148: .4byte gUnknown_0839F3AC -_0808814C: .4byte gTasks - thumb_func_end sub_8088120 - - thumb_func_start sub_8088150 -sub_8088150: @ 8088150 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r6, _080881A0 @ =REG_WININ - ldrh r0, [r6] - strh r0, [r4, 0x1E] - ldr r5, _080881A4 @ =REG_WINOUT - ldrh r0, [r5] - strh r0, [r4, 0x20] - adds r0, r4, 0 - adds r0, 0x22 - ldr r1, _080881A8 @ =gMain - ldr r1, [r1, 0xC] - bl StoreWordInTwoHalfwords - ldr r1, _080881AC @ =0x0000f0f1 - strh r1, [r4, 0xA] - ldr r0, _080881B0 @ =0x00005051 - strh r0, [r4, 0xC] - movs r0, 0x3F - strh r0, [r4, 0xE] - movs r0, 0x3E - strh r0, [r4, 0x10] - ldr r0, _080881B4 @ =REG_WIN0H - strh r1, [r0] - ldr r1, _080881B8 @ =REG_WIN0V - ldrh r0, [r4, 0xC] - strh r0, [r1] - ldrh r0, [r4, 0xE] - strh r0, [r6] - ldrh r0, [r4, 0x10] - strh r0, [r5] - ldr r0, _080881BC @ =sub_80883DC - bl SetVBlankCallback - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080881A0: .4byte REG_WININ -_080881A4: .4byte REG_WINOUT -_080881A8: .4byte gMain -_080881AC: .4byte 0x0000f0f1 -_080881B0: .4byte 0x00005051 -_080881B4: .4byte REG_WIN0H -_080881B8: .4byte REG_WIN0V -_080881BC: .4byte sub_80883DC - thumb_func_end sub_8088150 - - thumb_func_start sub_80881C0 -sub_80881C0: @ 80881C0 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldr r0, _08088218 @ =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 - ldr r0, _0808821C @ =gFieldMoveStreaksTiles - movs r5, 0xC0 - lsls r5, 19 - adds r1, r5 - movs r2, 0x80 - lsls r2, 1 - bl CpuSet - movs r0, 0 - str r0, [sp] - adds r5, r4, r5 - ldr r2, _08088220 @ =0x05000200 - mov r0, sp - adds r1, r5, 0 - bl CpuSet - ldr r0, _08088224 @ =gFieldMoveStreaksPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - adds r0, r4, 0 - bl sub_808843C - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08088218: .4byte REG_BG0CNT -_0808821C: .4byte gFieldMoveStreaksTiles -_08088220: .4byte 0x05000200 -_08088224: .4byte gFieldMoveStreaksPalette - thumb_func_end sub_80881C0 - - thumb_func_start sub_8088228 -sub_8088228: @ 8088228 - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x12] - subs r0, 0x10 - strh r0, [r3, 0x12] - ldrh r6, [r3, 0xA] - ldrh r2, [r3, 0xC] - movs r7, 0xFF - lsrs r1, r6, 8 - subs r1, 0x10 - lsls r1, 16 - lsrs r0, r2, 8 - subs r0, 0x2 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r7, 0 - ands r0, r2 - adds r5, r0, 0x2 - lsrs r2, r1, 16 - cmp r1, 0 - bge _08088254 - movs r2, 0 -_08088254: - lsls r0, r4, 16 - asrs r0, 16 - cmp r0, 0x27 - bgt _0808825E - movs r4, 0x28 -_0808825E: - cmp r5, 0x78 - ble _08088264 - movs r5, 0x78 -_08088264: - lsls r2, 16 - asrs r2, 16 - lsls r1, r2, 8 - adds r0, r7, 0 - ands r0, r6 - orrs r1, r0 - strh r1, [r3, 0xA] - lsls r0, r4, 16 - asrs r4, r0, 16 - lsls r0, r4, 8 - adds r1, r5, 0 - orrs r0, r1 - strh r0, [r3, 0xC] - cmp r2, 0 - bne _080882A4 - cmp r4, 0x28 - bne _080882A4 - cmp r1, 0x78 - bne _080882A4 - ldr r2, _080882AC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _080882B0 @ =sub_8088890 - str r1, [r0] - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080882A4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080882AC: .4byte gSprites -_080882B0: .4byte sub_8088890 - thumb_func_end sub_8088228 - - thumb_func_start sub_80882B4 -sub_80882B4: @ 80882B4 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x12] - subs r0, 0x10 - strh r0, [r3, 0x12] - ldr r2, _080882E0 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r3, 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 _080882DA - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_080882DA: - pop {r0} - bx r0 - .align 2, 0 -_080882E0: .4byte gSprites - thumb_func_end sub_80882B4 - - thumb_func_start sub_80882E4 -sub_80882E4: @ 80882E4 - push {r4,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x12] - subs r0, 0x10 - strh r0, [r3, 0x12] - ldrh r2, [r3, 0xC] - lsls r1, r2, 16 - movs r0, 0xFF - asrs r1, 24 - adds r1, 0x6 - lsls r1, 16 - ands r0, r2 - subs r0, 0x6 - lsls r0, 16 - lsrs r2, r0, 16 - lsrs r4, r1, 16 - asrs r1, 16 - cmp r1, 0x50 - ble _0808830C - movs r4, 0x50 -_0808830C: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x50 - bgt _08088316 - movs r2, 0x51 -_08088316: - lsls r0, r4, 16 - asrs r0, 16 - lsls r1, r0, 8 - lsls r2, 16 - asrs r2, 16 - orrs r1, r2 - strh r1, [r3, 0xC] - cmp r0, 0x50 - bne _08088332 - cmp r2, 0x51 - bne _08088332 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08088332: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80882E4 - - thumb_func_start sub_8088338 -sub_8088338: @ 8088338 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r0, _08088378 @ =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, _0808837C @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0xF1 - strh r0, [r4, 0xA] - movs r0, 0xA1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x1E] - strh r0, [r4, 0xE] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x10] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08088378: .4byte REG_BG0CNT -_0808837C: .4byte 0x05000200 - thumb_func_end sub_8088338 - - thumb_func_start sub_8088380 -sub_8088380: @ 8088380 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r0, 0x22 - mov r1, sp - bl LoadWordFromTwoHalfwords - ldr r0, [sp] - bl SetVBlankCallback - ldr r4, _080883D0 @ =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, _080883D4 @ =gSprites - adds r0, r1 - bl FreeResourcesAndDestroySprite - movs r0, 0x6 - bl FieldEffectActiveListRemove - ldr r0, _080883D8 @ =sub_8088120 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080883D0: .4byte gWindowConfig_81E6CE4 -_080883D4: .4byte gSprites -_080883D8: .4byte sub_8088120 - thumb_func_end sub_8088380 - - thumb_func_start sub_80883DC -sub_80883DC: @ 80883DC - push {r4,lr} - sub sp, 0x4 - ldr r0, _08088430 @ =sub_8088120 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _08088434 @ =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, _08088438 @ =REG_WIN0H - ldrh r0, [r4, 0xA] - strh r0, [r1] - adds r1, 0x4 - ldrh r0, [r4, 0xC] - strh r0, [r1] - adds r1, 0x4 - ldrh r0, [r4, 0xE] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r4, 0x10] - strh r0, [r1] - subs r1, 0x3A - ldrh r0, [r4, 0x12] - strh r0, [r1] - adds r1, 0x2 - ldrh r0, [r4, 0x14] - strh r0, [r1] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08088430: .4byte sub_8088120 -_08088434: .4byte gTasks -_08088438: .4byte REG_WIN0H - thumb_func_end sub_80883DC - thumb_func_start sub_808843C sub_808843C: @ 808843C push {r4,r5,lr} diff --git a/include/field_effect.h b/include/field_effect.h index d35ca599b..6306b81ac 100755 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -106,4 +106,27 @@ void FieldEffectActiveListRemove(u8 id); bool8 FieldEffectActiveListContains(u8 id); void sub_807DE38(u8 index); +void SpriteCB_PokeballGlow(struct Sprite *); +void SpriteCB_PokecenterMonitor(struct Sprite *); +void SpriteCB_HallOfFameMonitor(struct Sprite *); + +void PokecenterHealEffect_0(struct Task *); +void PokecenterHealEffect_1(struct Task *); +void PokecenterHealEffect_2(struct Task *); +void PokecenterHealEffect_3(struct Task *); + +void HallOfFameRecordEffect_0(struct Task *); +void HallOfFameRecordEffect_1(struct Task *); +void HallOfFameRecordEffect_2(struct Task *); +void HallOfFameRecordEffect_3(struct Task *); + +void PokeballGlowEffect_0(struct Sprite *); +void PokeballGlowEffect_1(struct Sprite *); +void PokeballGlowEffect_2(struct Sprite *); +void PokeballGlowEffect_3(struct Sprite *); +void PokeballGlowEffect_4(struct Sprite *); +void PokeballGlowEffect_5(struct Sprite *); +void PokeballGlowEffect_6(struct Sprite *); +void PokeballGlowEffect_7(struct Sprite *); + #endif // GUARD_FIELD_EFFECT_H diff --git a/include/gba/defines.h b/include/gba/defines.h index 0f7f06755..e88d2da8b 100644..100755 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -58,4 +58,7 @@ #define WIN_RANGE(a, b) (((a) << 8) | (b)) +#define min(a, b) (a >= b ? a : b) +#define max(a, b) (a <= b ? a : b) + #endif // GUARD_GBA_DEFINES diff --git a/src/field_effect.c b/src/field_effect.c index 3a56dfdcb..5719245e5 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -7,6 +7,7 @@ #include "field_weather.h" #include "decompress.h" #include "sprite.h" +#include "menu.h" #include "palette.h" #include "text.h" #include "rom4.h" @@ -2012,6 +2013,13 @@ void sub_8087FDC(struct Task *task) void sub_8088120(u8); 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 u16 gFieldMoveStreaksPalette[16]; +void sub_80883DC(void); +void sub_808843C(u16); +void sub_8088890(struct Sprite *); bool8 FldEff_FieldMoveShowMon(void) { @@ -2040,3 +2048,275 @@ bool8 FldEff_FieldMoveShowMonInit(void) FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); return FALSE; } + +void sub_8088120(u8 taskId) +{ + gUnknown_0839F3AC[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8088150(struct Task *task) +{ + task->data[11] = REG_WININ; + task->data[12] = REG_WINOUT; + StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); + task->data[1] = 0xf0f1; + task->data[2] = 0x5051; + task->data[3] = 0x3f; + task->data[4] = 0x3e; + REG_WIN0H = task->data[1]; + REG_WIN0V = task->data[2]; + REG_WININ = task->data[3]; + REG_WINOUT = task->data[4]; + SetVBlankCallback(sub_80883DC); + task->data[0]++; +} + +void sub_80881C0(struct Task *task) +{ + u32 zero; + u16 offset; + u16 delta; + offset = ((REG_BG0CNT >> 2) << 14); + delta = ((REG_BG0CNT >> 8) << 11); + CpuSet(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x100); + zero = 0; + CpuSet(&zero, (void *)(VRAM + delta), 0x5000200); + LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20); + sub_808843C(delta); + task->data[0]++; +} + +#ifdef NONMATCHING +void sub_8088228(struct Task *task) +{ + s16 v0; + s16 v2; + s16 v3; + task->data[5] -= 16; + // The order in which registers are loaded is incorrect. + v0 = ((u16)task->data[1] >> 8) - 0x10; + v2 = ((u16)task->data[2] >> 8) - 2; + v3 = ((u16)task->data[2] & 0xff) + 2; + if (v0 < 0) + { + v0 = 0; + } + if (v2 < 0x28) + { + v2 = 0x28; + } + if (v3 > 0x78) + { + v3 = 0x78; + } + task->data[1] = (v0 << 8) | (task->data[1] & 0xff); + task->data[2] = (v2 << 8) | v3; + if (v0 == 0 && v2 == 0x28 && v3 == 0x78) + { + gSprites[task->data[15]].callback = sub_8088890; + task->data[0]++; + } +} +#else +__attribute__((naked)) +void sub_8088228(struct Task *task) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tadds r3, r0, 0\n" + "\tldrh r0, [r3, 0x12]\n" + "\tsubs r0, 0x10\n" + "\tstrh r0, [r3, 0x12]\n" + "\tldrh r6, [r3, 0xA]\n" + "\tldrh r2, [r3, 0xC]\n" + "\tmovs r7, 0xFF\n" + "\tlsrs r1, r6, 8\n" + "\tsubs r1, 0x10\n" + "\tlsls r1, 16\n" + "\tlsrs r0, r2, 8\n" + "\tsubs r0, 0x2\n" + "\tlsls r0, 16\n" + "\tlsrs r4, r0, 16\n" + "\tadds r0, r7, 0\n" + "\tands r0, r2\n" + "\tadds r5, r0, 0x2\n" + "\tlsrs r2, r1, 16\n" + "\tcmp r1, 0\n" + "\tbge _08088254\n" + "\tmovs r2, 0\n" + "_08088254:\n" + "\tlsls r0, r4, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x27\n" + "\tbgt _0808825E\n" + "\tmovs r4, 0x28\n" + "_0808825E:\n" + "\tcmp r5, 0x78\n" + "\tble _08088264\n" + "\tmovs r5, 0x78\n" + "_08088264:\n" + "\tlsls r2, 16\n" + "\tasrs r2, 16\n" + "\tlsls r1, r2, 8\n" + "\tadds r0, r7, 0\n" + "\tands r0, r6\n" + "\torrs r1, r0\n" + "\tstrh r1, [r3, 0xA]\n" + "\tlsls r0, r4, 16\n" + "\tasrs r4, r0, 16\n" + "\tlsls r0, r4, 8\n" + "\tadds r1, r5, 0\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3, 0xC]\n" + "\tcmp r2, 0\n" + "\tbne _080882A4\n" + "\tcmp r4, 0x28\n" + "\tbne _080882A4\n" + "\tcmp r1, 0x78\n" + "\tbne _080882A4\n" + "\tldr r2, _080882AC @ =gSprites\n" + "\tmovs r0, 0x26\n" + "\tldrsh r1, [r3, r0]\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r2, 0x1C\n" + "\tadds r0, r2\n" + "\tldr r1, _080882B0 @ =sub_8088890\n" + "\tstr r1, [r0]\n" + "\tldrh r0, [r3, 0x8]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r3, 0x8]\n" + "_080882A4:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080882AC: .4byte gSprites\n" + "_080882B0: .4byte sub_8088890"); +} +#endif + +void sub_80882B4(struct Task *task) +{ + task->data[5] -= 0x10; + if (gSprites[task->data[15]].data7) + { + task->data[0]++; + } +} + +#ifdef NONMATCHING +void sub_80882E4(struct Task *task) +{ + s16 v2; + s16 v3; + task->data[5] -= 0x10; + // The order in which registers are loaded is incorrect. + v2 = (task->data[2] >> 8) + 6; + v3 = (task->data[2] & 0xff) - 6; + if (v2 > 0x50) + { + v2 = 0x50; + } + if (v3 < 0x51) + { + v3 = 0x51; + } + task->data[2] = (v2 << 8) | v3; + if (v2 == 0x50 && v3 == 0x51) + { + task->data[0]++; + } +} +#else +__attribute__((naked)) +void sub_80882E4(struct Task *task) +{ + asm_unified("\tpush {r4,lr}\n" + "\tadds r3, r0, 0\n" + "\tldrh r0, [r3, 0x12]\n" + "\tsubs r0, 0x10\n" + "\tstrh r0, [r3, 0x12]\n" + "\tldrh r2, [r3, 0xC]\n" + "\tlsls r1, r2, 16\n" + "\tmovs r0, 0xFF\n" + "\tasrs r1, 24\n" + "\tadds r1, 0x6\n" + "\tlsls r1, 16\n" + "\tands r0, r2\n" + "\tsubs r0, 0x6\n" + "\tlsls r0, 16\n" + "\tlsrs r2, r0, 16\n" + "\tlsrs r4, r1, 16\n" + "\tasrs r1, 16\n" + "\tcmp r1, 0x50\n" + "\tble _0808830C\n" + "\tmovs r4, 0x50\n" + "_0808830C:\n" + "\tlsls r0, r2, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x50\n" + "\tbgt _08088316\n" + "\tmovs r2, 0x51\n" + "_08088316:\n" + "\tlsls r0, r4, 16\n" + "\tasrs r0, 16\n" + "\tlsls r1, r0, 8\n" + "\tlsls r2, 16\n" + "\tasrs r2, 16\n" + "\torrs r1, r2\n" + "\tstrh r1, [r3, 0xC]\n" + "\tcmp r0, 0x50\n" + "\tbne _08088332\n" + "\tcmp r2, 0x51\n" + "\tbne _08088332\n" + "\tldrh r0, [r3, 0x8]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r3, 0x8]\n" + "_08088332:\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif + +void sub_8088338(struct Task *task) +{ + u32 zero; + u16 bg0cnt; + bg0cnt = (REG_BG0CNT >> 8) << 11; + zero = 0; + CpuSet(&zero, (void *)VRAM + bg0cnt, 0x5000200); + task->data[1] = 0xf1; + task->data[2] = 0xa1; + task->data[3] = task->data[11]; + task->data[4] = task->data[12]; + task->data[0]++; +} + +void sub_8088380(struct Task *task) +{ + IntrCallback callback; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + SetVBlankCallback(callback); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + FreeResourcesAndDestroySprite(&gSprites[task->data[15]]); + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + DestroyTask(FindTaskIdByFunc(sub_8088120)); +} + +void sub_80883DC(void) +{ + struct Task *task; + IntrCallback callback; + task = &gTasks[FindTaskIdByFunc(sub_8088120)]; + LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback); + callback(); + REG_WIN0H = task->data[1]; + REG_WIN0V = task->data[2]; + REG_WININ = task->data[3]; + REG_WINOUT = task->data[4]; + REG_BG0HOFS = task->data[5]; + REG_BG0VOFS = task->data[6]; +} |