diff options
author | Thomas Winwood <twwinwood@gmail.com> | 2018-06-18 00:49:11 +0100 |
---|---|---|
committer | Thomas Winwood <twwinwood@gmail.com> | 2018-06-18 00:49:11 +0100 |
commit | ba16882b301fa964207257648b2522bec6458341 (patch) | |
tree | f1ea3a842a1272a469ad3cd5830333be3d24b529 | |
parent | 1ebc745b7fc598feb758dbe5b32d5716a474fa37 (diff) |
Decompile sub_80DDBD8
-rw-r--r-- | asm/ghost.s | 59 | ||||
-rw-r--r-- | src/ghost.c | 27 |
2 files changed, 27 insertions, 59 deletions
diff --git a/asm/ghost.s b/asm/ghost.s index 55f803a42..acdc6c171 100644 --- a/asm/ghost.s +++ b/asm/ghost.s @@ -7,65 +7,6 @@ @ ghost - thumb_func_start sub_80DDBD8 -sub_80DDBD8: @ 80DDBD8 - push {r4,lr} - adds r4, r0, 0 - bl sub_80DDCC8 - adds r0, r4, 0 - bl TranslateAnimSpriteByDeltas - lsls r0, 24 - cmp r0, 0 - beq _080DDBF8 - ldr r0, _080DDBF4 @ =sub_80DDC4C - str r0, [r4, 0x1C] - b _080DDC42 - .align 2, 0 -_080DDBF4: .4byte sub_80DDC4C -_080DDBF8: - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r2, [r4, 0x38] - adds r0, r2, 0x5 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x38] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0 - beq _080DDC30 - cmp r2, 0xC4 - ble _080DDC42 -_080DDC30: - lsls r0, 16 - cmp r0, 0 - ble _080DDC42 - ldr r0, _080DDC48 @ =gUnknown_0202F7D2 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0xC4 - bl PlaySE12WithPanning -_080DDC42: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DDC48: .4byte gUnknown_0202F7D2 - thumb_func_end sub_80DDBD8 - thumb_func_start sub_80DDC4C sub_80DDC4C: @ 80DDC4C push {r4,lr} diff --git a/src/ghost.c b/src/ghost.c index 07a9061c6..6c3f11f61 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -1,10 +1,15 @@ #include "global.h" #include "rom_8077ABC.h" +#include "sound.h" +#include "trig.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankTarget; +extern u8 gUnknown_0202F7D2; void sub_80DDBD8(struct Sprite *); +void sub_80DDC4C(struct Sprite *); +void sub_80DDCC8(struct Sprite *); void sub_80DDB6C(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); @@ -18,4 +23,26 @@ void sub_80DDB6C(struct Sprite *sprite) { sprite->data[6] = 0x10; REG_BLDCNT = 0x3F40; REG_BLDALPHA = sprite->data[6]; +} + +void sub_80DDBD8(struct Sprite *sprite) { + s16 r0; + s16 r2; + sub_80DDCC8(sprite); + if (TranslateAnimSpriteByDeltas(sprite)) { + sprite->callback = sub_80DDC4C; + return; + } + sprite->pos2.x += Sin(sprite->data[5], 10); + sprite->pos2.y += Cos(sprite->data[5], 15); + r2 = sprite->data[5]; + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + r0 = sprite->data[5]; + if (r2 != 0) { + if (r2 <= 0xC4) + return; + } + if (r0 <= 0) + return; + PlaySE12WithPanning(0xC4, gUnknown_0202F7D2); }
\ No newline at end of file |