diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-12 08:28:29 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-06-12 08:28:29 -0400 |
commit | e74f4cc8c7aa66618212c6e5b74f21f4bbe29b6e (patch) | |
tree | 872f9e06f731a06a0c962f37e105fa41c364668c | |
parent | 0ed7376e9ab879ce9a4628442540185d28dea537 (diff) |
FldEff_NPCFlyOut
-rwxr-xr-x | asm/field_effect.s | 109 | ||||
-rwxr-xr-x | src/field_effect.c | 37 |
2 files changed, 37 insertions, 109 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index cc01bbf60..0bc37eb93 100755 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -6,115 +6,6 @@ .text - thumb_func_start FldEff_NPCFlyOut -FldEff_NPCFlyOut: @ 8088B68 - push {r4,lr} - ldr r0, _08088BB4 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x68] - movs r1, 0x78 - movs r2, 0 - movs r3, 0x1 - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r2, r4, 4 - adds r2, r4 - lsls r2, 2 - ldr r0, _08088BB8 @ =gSprites - adds r2, r0 - ldrb r1, [r2, 0x5] - movs r0, 0xF - ands r0, r1 - movs r1, 0xD - negs r1, r1 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, _08088BBC @ =sub_8088BC4 - str r0, [r2, 0x1C] - ldr r0, _08088BC0 @ =gUnknown_0202FF84 - ldr r0, [r0] - strh r0, [r2, 0x30] - movs r0, 0x9E - bl PlaySE - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08088BB4: .4byte gFieldEffectObjectTemplatePointers -_08088BB8: .4byte gSprites -_08088BBC: .4byte sub_8088BC4 -_08088BC0: .4byte gUnknown_0202FF84 - thumb_func_end FldEff_NPCFlyOut - - thumb_func_start sub_8088BC4 -sub_8088BC4: @ 8088BC4 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0x8C - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08088C26 - movs r2, 0x30 - ldrsh r0, [r4, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08088C3C @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_08088C26: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _08088C36 - adds r0, r4, 0 - movs r1, 0x1E - bl FieldEffectStop -_08088C36: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08088C3C: .4byte gSprites - thumb_func_end sub_8088BC4 - thumb_func_start FldEff_UseFly FldEff_UseFly: @ 8088C40 push {lr} diff --git a/src/field_effect.c b/src/field_effect.c index c7a7d8d5b..eeb12300b 100755 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2602,3 +2602,40 @@ void sub_8088AF4(struct Task *task) DestroyTask(FindTaskIdByFunc(sub_8088954)); } } + +void sub_8088BC4(struct Sprite *); + +u8 FldEff_NPCFlyOut(void) +{ + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); + sprite = &gSprites[spriteId]; + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8088BC4; + sprite->data1 = gUnknown_0202FF84[0]; + PlaySE(SE_W019); + return spriteId; +} + +void sub_8088BC4(struct Sprite *sprite) +{ + struct Sprite *npcSprite; + sprite->pos2.x = Cos(sprite->data2, 0x8c); + sprite->pos2.y = Sin(sprite->data2, 0x48); + sprite->data2 = (sprite->data2 + 4) & 0xff; + if (sprite->data0) + { + npcSprite = &gSprites[sprite->data1]; + npcSprite->coordOffsetEnabled = 0; + npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; + npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + npcSprite->pos2.x = 0; + npcSprite->pos2.y = 0; + } + if (sprite->data2 >= 0x80) + { + FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); + } +} |