diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-09 20:05:28 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-09 20:05:37 -0400 |
commit | 5980e95c3daadaa2fe91713fa72b36eeead7678f (patch) | |
tree | 925d7892dda17a7d194f66d84edd0c86fb5bdd6c | |
parent | 95b82b5dbb11e63f4cbaa09981dea04f9b729777 (diff) |
FldEff_PopOutOfAsh (misnamed?)
-rwxr-xr-x | asm/field_effect.s | 438 | ||||
-rwxr-xr-x | include/rom4.h | 2 | ||||
-rwxr-xr-x | src/field_effect.c | 133 |
3 files changed, 134 insertions, 439 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 12ec64032..073fec5db 100755 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,444 +6,6 @@ .text - thumb_func_start FldEff_PopOutOfAsh -FldEff_PopOutOfAsh: @ 8087828 - push {r4,lr} - ldr r4, _08087880 @ =gUnknown_0202FF84 - adds r1, r4, 0x4 - adds r0, r4, 0 - movs r2, 0x8 - movs r3, 0x8 - bl sub_8060470 - ldr r0, _08087884 @ =gFieldEffectObjectTemplatePointers - adds r0, 0x80 - ldr r0, [r0] - movs r2, 0 - ldrsh r1, [r4, r2] - movs r3, 0x4 - ldrsh r2, [r4, r3] - ldrb r3, [r4, 0x8] - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08087888 @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - movs r1, 0x3 - ldrb r3, [r4, 0xC] - ands r3, r1 - lsls r3, 2 - ldrb r4, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r4 - orrs r1, r3 - strb r1, [r2, 0x5] - adds r2, 0x3E - ldrb r1, [r2] - movs r3, 0x2 - orrs r1, r3 - strb r1, [r2] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08087880: .4byte gUnknown_0202FF84 -_08087884: .4byte gFieldEffectObjectTemplatePointers -_08087888: .4byte gSprites - thumb_func_end FldEff_PopOutOfAsh - - thumb_func_start sub_808788C -sub_808788C: @ 808788C - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080878A4 - adds r0, r2, 0 - movs r1, 0x31 - bl FieldEffectStop -_080878A4: - pop {r0} - bx r0 - thumb_func_end sub_808788C - - thumb_func_start sub_80878A8 -sub_80878A8: @ 80878A8 - push {lr} - bl ScriptContext2_Enable - bl FreezeMapObjects - ldr r0, _080878C0 @ =sub_80878C4 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080878C0: .4byte sub_80878C4 - thumb_func_end sub_80878A8 - - thumb_func_start sub_80878C4 -sub_80878C4: @ 80878C4 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _080878EC @ =gUnknown_0839F378 - ldr r2, _080878F0 @ =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 -_080878EC: .4byte gUnknown_0839F378 -_080878F0: .4byte gTasks - thumb_func_end sub_80878C4 - - thumb_func_start sub_80878F4 -sub_80878F4: @ 80878F4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x40 - strh r0, [r4, 0x24] - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80878F4 - - thumb_func_start sub_8087914 -sub_8087914: @ 8087914 - push {r4,r5,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r1, _080879B8 @ =gUnknown_0839F380 - mov r0, sp - movs r2, 0x5 - bl memcpy - ldrh r1, [r4, 0x24] - movs r2, 0x24 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08087940 - subs r0, r1, 0x1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - bne _08087940 - bl sub_8053FF8 - bl fade_8080918 -_08087940: - ldr r0, _080879BC @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080879C0 @ =gMapObjects - adds r5, r0, r1 - adds r0, r5, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _08087966 - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08087A20 -_08087966: - movs r1, 0x24 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080879D8 - ldr r0, _080879C4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080879D8 - bl sub_8054034 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080879D8 - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetDirection - bl sub_8053678 - bl warp_in - ldr r1, _080879C8 @ =gUnknown_0300485C - ldr r0, _080879CC @ =mapldr_080859D4 - str r0, [r1] - ldr r0, _080879D0 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _080879D4 @ =sub_80878C4 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _08087A20 - .align 2, 0 -_080879B8: .4byte gUnknown_0839F380 -_080879BC: .4byte gPlayerAvatar -_080879C0: .4byte gMapObjects -_080879C4: .4byte gPaletteFade -_080879C8: .4byte gUnknown_0300485C -_080879CC: .4byte mapldr_080859D4 -_080879D0: .4byte CB2_LoadMap -_080879D4: .4byte sub_80878C4 -_080879D8: - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080879EC - subs r0, r1, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _08087A20 -_080879EC: - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - add r0, sp - ldrb r0, [r0] - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FieldObjectSetSpecialAnim - ldrh r1, [r4, 0xC] - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0xB - bgt _08087A14 - adds r0, r1, 0x1 - strh r0, [r4, 0xC] -_08087A14: - ldrh r1, [r4, 0xC] - lsls r1, 16 - asrs r1, 18 - movs r0, 0x8 - asrs r0, r1 - strh r0, [r4, 0xA] -_08087A20: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8087914 - - thumb_func_start mapldr_080859D4 -mapldr_080859D4: @ 8087A28 - push {lr} - bl sub_8053E90 - bl pal_fill_for_map_transition - bl ScriptContext2_Enable - bl FreezeMapObjects - ldr r1, _08087A64 @ =gUnknown_0300485C - movs r0, 0 - str r0, [r1] - ldr r2, _08087A68 @ =gMapObjects - ldr r0, _08087A6C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x1] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x1] - ldr r0, _08087A70 @ =sub_8087A74 - movs r1, 0 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08087A64: .4byte gUnknown_0300485C -_08087A68: .4byte gMapObjects -_08087A6C: .4byte gPlayerAvatar -_08087A70: .4byte sub_8087A74 - thumb_func_end mapldr_080859D4 - - thumb_func_start sub_8087A74 -sub_8087A74: @ 8087A74 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08087A9C @ =gUnknown_0839F388 - ldr r2, _08087AA0 @ =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 -_08087A9C: .4byte gUnknown_0839F388 -_08087AA0: .4byte gTasks - thumb_func_end sub_8087A74 - - thumb_func_start sub_8087AA4 -sub_8087AA4: @ 8087AA4 - push {r4,lr} - adds r4, r0, 0 - bl sub_807D770 - lsls r0, 24 - cmp r0, 0 - beq _08087AC2 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] -_08087AC2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8087AA4 - - thumb_func_start sub_8087AC8 -sub_8087AC8: @ 8087AC8 - push {r4-r6,lr} - sub sp, 0x8 - adds r5, r0, 0 - ldr r1, _08087B4C @ =gUnknown_0839F380 - mov r0, sp - movs r2, 0x5 - bl memcpy - ldr r0, _08087B50 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087B54 @ =gMapObjects - adds r6, r0, r1 - ldrh r1, [r5, 0xA] - movs r2, 0xA - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _08087AFA - subs r0, r1, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _08087B8C -_08087AFA: - adds r0, r6, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _08087B12 - adds r0, r6, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08087BA0 -_08087B12: - movs r1, 0xC - ldrsh r0, [r5, r1] - cmp r0, 0x1F - ble _08087B5C - movs r2, 0x26 - ldrsh r4, [r5, r2] - bl player_get_direction_lower_nybble - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _08087B5C - ldrb r1, [r6, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r6, 0x1] - bl ScriptContext2_Disable - bl UnfreezeMapObjects - ldr r0, _08087B58 @ =sub_8087A74 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - b _08087BA0 - .align 2, 0 -_08087B4C: .4byte gUnknown_0839F380 -_08087B50: .4byte gPlayerAvatar -_08087B54: .4byte gMapObjects -_08087B58: .4byte sub_8087A74 -_08087B5C: - ldrb r0, [r6, 0x18] - lsls r0, 28 - lsrs r0, 28 - add r0, sp - ldrb r0, [r0] - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl FieldObjectSetSpecialAnim - ldrh r1, [r5, 0xC] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0x1F - bgt _08087B84 - adds r0, r1, 0x1 - strh r0, [r5, 0xC] -_08087B84: - ldrh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 18 - strh r0, [r5, 0xA] -_08087B8C: - ldrb r2, [r6, 0x1] - lsls r1, r2, 26 - lsrs r1, 31 - movs r0, 0x1 - eors r1, r0 - lsls r1, 5 - subs r0, 0x22 - ands r0, r2 - orrs r0, r1 - strb r0, [r6, 0x1] -_08087BA0: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8087AC8 - thumb_func_start sub_8087BA8 sub_8087BA8: @ 8087BA8 push {lr} diff --git a/include/rom4.h b/include/rom4.h index ab63068b2..9bfb9a51f 100755 --- a/include/rom4.h +++ b/include/rom4.h @@ -52,7 +52,7 @@ void sub_8053570(void); void sub_8053588(u8); void sub_80535C4(s16 a1, s16 a2); void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y); -// sub_8053678 +void sub_8053678(void); void sub_8053690(s8, s8, s8, s8, s8); // warp1_set_to_warp2 void sub_80536E4(s8, s8, s8, s8, s8); diff --git a/src/field_effect.c b/src/field_effect.c index 1661245c5..f20c2ed60 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1675,6 +1675,11 @@ bool8 sub_80877AC(struct Task *task, struct MapObject *mapObject, struct Sprite return FALSE; } +void sub_80878C4(u8); +extern u8 gUnknown_0839F380[5]; +extern const void (*gUnknown_0839F378[2])(struct Task *); +void mapldr_080859D4(void); + bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite) { if (!gPaletteFade.active && sub_8054034() == TRUE) @@ -1686,3 +1691,131 @@ bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite } return FALSE; } + +u8 FldEff_PopOutOfAsh(void) +{ + u8 spriteId; + sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]); + gSprites[spriteId].oam.priority = gUnknown_0202FF84[3]; + gSprites[spriteId].coordOffsetEnabled = 1; + return spriteId; +} + +void sub_808788C(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH); + } +} + +void sub_80878A8(void) +{ + ScriptContext2_Enable(); + FreezeMapObjects(); + CreateTask(sub_80878C4, 0x50); +} + +void sub_80878C4(u8 taskId) +{ + gUnknown_0839F378[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_80878F4(struct Task *task) +{ + task->data[0]++; + task->data[14] = 64; + task->data[15] = player_get_direction_lower_nybble(); +} + +void sub_8087914(struct Task *task) +{ + struct MapObject *mapObject; + u8 unknown_0839F380[5]; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + if (task->data[14] != 0 && (--task->data[14]) == 0) + { + sub_8053FF8(); + fade_8080918(); + } + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + if (task->data[14] == 0 && !gPaletteFade.active && sub_8054034() == TRUE) + { + FieldObjectSetDirection(mapObject, task->data[15]); + sub_8053678(); + warp_in(); + gUnknown_0300485C = mapldr_080859D4; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(sub_80878C4)); + } else if (task->data[1] == 0 || (--task->data[1]) == 0) + { + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); + if (task->data[2] < 12) + { + task->data[2]++; + } + task->data[1] = 8 >> (task->data[2] >> 2); + } + } +} + +void sub_8087A74(u8); +extern const void (*gUnknown_0839F388[2])(struct Task *); + +void mapldr_080859D4(void) +{ + sub_8053E90(); + pal_fill_for_map_transition(); + ScriptContext2_Enable(); + FreezeMapObjects(); + gUnknown_0300485C = NULL; + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; + CreateTask(sub_8087A74, 0); +} + +void sub_8087A74(u8 taskId) +{ + gUnknown_0839F388[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_8087AA4(struct Task *task) +{ + if (sub_807D770()) + { + task->data[0]++; + task->data[15] = player_get_direction_lower_nybble(); + } +} + +void sub_8087AC8(struct Task *task) +{ + struct MapObject *mapObject; + u8 unknown_0839F380[5]; + memcpy(unknown_0839F380, gUnknown_0839F380, sizeof gUnknown_0839F380); + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (task->data[1] == 0 || (--task->data[1]) == 0) + { + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + return; + } + if (task->data[2] >= 32 && task->data[15] == player_get_direction_lower_nybble()) + { + mapObject->mapobj_bit_13 = 0; + ScriptContext2_Disable(); + UnfreezeMapObjects(); + DestroyTask(FindTaskIdByFunc(sub_8087A74)); + return; + } + FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(unknown_0839F380[mapObject->mapobj_unk_18])); + if (task->data[2] < 32) + { + task->data[2]++; + } + task->data[1] = task->data[2] >> 2; + } + mapObject->mapobj_bit_13 ^= 1; +} |