diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-12 13:58:12 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-12 13:58:12 -0400 |
commit | db6818ca9149304463e5e2219ec90993a3af53b2 (patch) | |
tree | 2fde604c478ecbec6d9f59ad5869c3b68f587ea3 | |
parent | e600694768b4badf5fca03e9671d13c54abedfd1 (diff) |
FldEff_FlyIn (last remaining field effect)
-rwxr-xr-x | asm/field_effect.s | 405 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rwxr-xr-x | src/field_effect.c | 132 |
3 files changed, 132 insertions, 406 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s deleted file mode 100755 index b3c9d75d8..000000000 --- a/asm/field_effect.s +++ /dev/null @@ -1,405 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start FldEff_FlyIn -FldEff_FlyIn: @ 808925C - push {lr} - ldr r0, _0808926C @ =sub_8089270 - movs r1, 0xFE - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0808926C: .4byte sub_8089270 - thumb_func_end FldEff_FlyIn - - thumb_func_start sub_8089270 -sub_8089270: @ 8089270 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08089298 @ =gUnknown_0839F454 - ldr r2, _0808929C @ =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 -_08089298: .4byte gUnknown_0839F454 -_0808929C: .4byte gTasks - thumb_func_end sub_8089270 - - thumb_func_start sub_80892A0 -sub_80892A0: @ 80892A0 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _08089348 @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0808934C @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _080892CA - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08089342 -_080892CA: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x11 - strh r0, [r5, 0xC] - ldrb r0, [r6] - strh r0, [r5, 0x26] - movs r0, 0x1 - strb r0, [r6, 0x6] - bl SetPlayerAvatarStateMask - ldrh r1, [r5, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080892F2 - ldrb r0, [r4, 0x1A] - movs r1, 0 - bl sub_8127ED0 -_080892F2: - movs r0, 0x3 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - bl CameraObjectReset2 - adds r0, r4, 0 - movs r1, 0x3 - bl FieldObjectTurn - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08089350 @ =gSprites - adds r0, r1 - movs r1, 0x16 - bl StartSpriteAnim - ldrb r1, [r4, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - bl sub_8088F60 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0xA] - bl sub_8088FC0 - ldrb r0, [r5, 0xA] - ldrb r1, [r4, 0x4] - bl sub_8088FFC -_08089342: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08089348: .4byte gPlayerAvatar -_0808934C: .4byte gMapObjects -_08089350: .4byte gSprites - thumb_func_end sub_80892A0 - - thumb_func_start sub_8089354 -sub_8089354: @ 8089354 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0xC] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _0808936C - subs r0, r1, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _080893AC -_0808936C: - ldr r0, _080893B4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080893B8 @ =gMapObjects - adds r0, r1 - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _080893BC @ =gSprites - adds r4, r0 - ldrb r0, [r5, 0xA] - movs r1, 0x40 - bl sub_8088FFC - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r1, [r4, 0x24] - strh r1, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - strh r1, [r5, 0xC] -_080893AC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080893B4: .4byte gPlayerAvatar -_080893B8: .4byte gMapObjects -_080893BC: .4byte gSprites - thumb_func_end sub_8089354 - - thumb_func_start sub_80893C0 -sub_80893C0: @ 80893C0 - push {r4,lr} - sub sp, 0x24 - adds r4, r0, 0 - ldr r1, _08089408 @ =gUnknown_0839F470 - mov r0, sp - movs r2, 0x24 - bl memcpy - ldr r0, _0808940C @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08089410 @ =gSprites - adds r1, r0 - movs r2, 0xC - ldrsh r0, [r4, r2] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r1, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x11 - ble _080893FE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080893FE: - add sp, 0x24 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08089408: .4byte gUnknown_0839F470 -_0808940C: .4byte gPlayerAvatar -_08089410: .4byte gSprites - thumb_func_end sub_80893C0 - - thumb_func_start sub_8089414 -sub_8089414: @ 8089414 - push {r4-r6,lr} - adds r6, r0, 0 - ldrb r0, [r6, 0xA] - bl sub_8088FA4 - lsls r0, 24 - cmp r0, 0 - beq _08089478 - ldr r0, _08089480 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r5, r0, 3 - adds r5, r0 - lsls r5, 2 - ldr r0, _08089484 @ =gMapObjects - adds r5, r0 - ldrb r0, [r5, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08089488 @ =gSprites - adds r4, r0 - ldrb r1, [r5, 0x1] - movs r0, 0x11 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - movs r0, 0x10 - ldrsh r1, [r5, r0] - movs r0, 0x12 - ldrsh r2, [r5, r0] - adds r0, r5, 0 - bl sub_805C058 - movs r0, 0 - strh r0, [r4, 0x24] - strh r0, [r4, 0x26] - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4] - bl sub_8059BF4 - adds r0, r5, 0 - movs r1, 0x39 - bl FieldObjectSetSpecialAnim - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_08089478: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08089480: .4byte gPlayerAvatar -_08089484: .4byte gMapObjects -_08089488: .4byte gSprites - thumb_func_end sub_8089414 - - thumb_func_start sub_808948C -sub_808948C: @ 808948C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080894BC @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080894C0 @ =gMapObjects - adds r0, r1 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080894B4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrb r0, [r4, 0xA] - bl sub_8089230 -_080894B4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080894BC: .4byte gPlayerAvatar -_080894C0: .4byte gMapObjects - thumb_func_end sub_808948C - - thumb_func_start sub_80894C4 -sub_80894C4: @ 80894C4 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_8088FA4 - lsls r0, 24 - cmp r0, 0 - beq _080894F0 - movs r0, 0xA - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080894F8 @ =gSprites - adds r0, r1 - bl DestroySprite - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xA] -_080894F0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080894F8: .4byte gSprites - thumb_func_end sub_80894C4 - - thumb_func_start fishE -fishE: @ 80894FC - push {r4-r7,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xA] - subs r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _08089566 - ldr r6, _0808956C @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08089570 @ =gMapObjects - adds r4, r0, r1 - movs r7, 0 - ldrh r1, [r5, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08089530 - movs r7, 0x3 - ldrb r0, [r4, 0x1A] - movs r1, 0x1 - bl sub_8127ED0 -_08089530: - adds r0, r7, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805B980 - adds r0, r4, 0 - movs r1, 0x1 - bl FieldObjectTurn - ldrh r0, [r5, 0x26] - strb r0, [r6] - movs r0, 0 - strb r0, [r6, 0x6] - movs r0, 0x20 - bl FieldEffectActiveListRemove - ldr r0, _08089574 @ =sub_8089270 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08089566: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808956C: .4byte gPlayerAvatar -_08089570: .4byte gMapObjects -_08089574: .4byte sub_8089270 - thumb_func_end fishE - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index b4c30ad57..24a7c2ddf 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -134,7 +134,6 @@ SECTIONS { src/trainer_see.o(.text); src/wild_encounter.o(.text); src/field_effect.o(.text); - asm/field_effect.o(.text); asm/unknown_task.o(.text); asm/pokemon_menu.o(.text); src/option_menu.o(.text); diff --git a/src/field_effect.c b/src/field_effect.c index 9269f7db0..6cff8b864 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2920,3 +2920,135 @@ void sub_8089230(u8 spriteId) sub_8088FC0(spriteId); gSprites[spriteId].callback = sub_808914C; } + +void sub_8089270(u8); +extern const void (*gUnknown_0839F454[7])(struct Task *); +extern const s16 gUnknown_0839F470[18]; + +u8 FldEff_FlyIn(void) +{ + CreateTask(sub_8089270, 0xfe); + return 0; +} + +void sub_8089270(u8 taskId) +{ + gUnknown_0839F454[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void sub_80892A0(struct Task *task) +{ + struct MapObject *mapObject; + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) + { + task->data[0]++; + task->data[2] = 17; + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.unk6 = 1; + SetPlayerAvatarStateMask(0x01); + if (task->data[15] & 0x08) + { + sub_8127ED0(mapObject->mapobj_unk_1A, 0); + } + sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x3)); + CameraObjectReset2(); + FieldObjectTurn(mapObject, DIR_WEST); + StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16); + mapObject->mapobj_bit_13 = 0; + task->data[1] = sub_8088F60(); + sub_8088FC0(task->data[1]); + sub_8088FFC(task->data[1], mapObject->spriteId); + } +} + +void sub_8089354(struct Task *task) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + if (task->data[2] == 0 || (--task->data[2]) == 0) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[mapObject->spriteId]; + sub_8088FFC(task->data[1], 0x40); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + task->data[2] = 0; + } +} + +void sub_80893C0(struct Task *task) +{ + s16 unknown_0839F470[18]; + struct Sprite *sprite; + memcpy(unknown_0839F470, gUnknown_0839F470, sizeof gUnknown_0839F470); + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y = unknown_0839F470[task->data[2]]; + if ((++task->data[2]) >= 18) + { + task->data[0]++; + } +} + +void sub_8089414(struct Task *task) +{ + struct MapObject *mapObject; + struct Sprite *sprite; + if (sub_8088FA4(task->data[1])) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + sprite = &gSprites[mapObject->spriteId]; + mapObject->mapobj_bit_12 = 0; + sub_805C058(mapObject, mapObject->coords2.x, mapObject->coords2.y); + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->coordOffsetEnabled = 1; + sub_8059BF4(); + FieldObjectSetSpecialAnim(mapObject, 0x39); + task->data[0]++; + } +} + +void sub_808948C(struct Task *task) +{ + if (FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gPlayerAvatar.mapObjectId])) + { + task->data[0]++; + sub_8089230(task->data[1]); + } +} + +void sub_80894C4(struct Task *task) +{ + if (sub_8088FA4(task->data[1])) + { + DestroySprite(&gSprites[task->data[1]]); + task->data[0]++; + task->data[1] = 0x10; + } +} + +void fishE(struct Task *task) +{ + u8 state; + struct MapObject *mapObject; + if ((--task->data[1]) == 0) + { + mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; + state = 0; + if (task->data[15] & 0x08) + { + state = 3; + sub_8127ED0(mapObject->mapobj_unk_1A, 1); + } + sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state)); + FieldObjectTurn(mapObject, DIR_SOUTH); + gPlayerAvatar.flags = task->data[15]; + gPlayerAvatar.unk6 = 0; + FieldEffectActiveListRemove(FLDEFF_FLY_IN); + DestroyTask(FindTaskIdByFunc(sub_8089270)); + } +} |