diff options
author | Thomas Winwood <twwinwood@gmail.com> | 2018-06-20 16:12:12 +0100 |
---|---|---|
committer | Thomas Winwood <twwinwood@gmail.com> | 2018-06-20 16:12:12 +0100 |
commit | 195d759f7c24910512c7758b2927cef943f83444 (patch) | |
tree | 32a9837cc688f01825c9453e5dea18afc0f72303 | |
parent | 6afdc9b4b1ec9215e58d562bd5db2b8dfd3df466 (diff) |
Decompile sub_80DDFE8
-rw-r--r-- | asm/ghost.s | 140 | ||||
-rw-r--r-- | src/ghost.c | 41 |
2 files changed, 41 insertions, 140 deletions
diff --git a/asm/ghost.s b/asm/ghost.s index 267d12f62..201f97af5 100644 --- a/asm/ghost.s +++ b/asm/ghost.s @@ -7,146 +7,6 @@ @ ghost - thumb_func_start sub_80DDFE8 -sub_80DDFE8: @ 80DDFE8 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080DE032 - cmp r0, 0x1 - bgt _080DDFFE - cmp r0, 0 - beq _080DE008 - b _080DE0F6 -_080DDFFE: - cmp r0, 0x2 - beq _080DE09C - cmp r0, 0x3 - beq _080DE0F0 - b _080DE0F6 -_080DE008: - ldrh r0, [r5, 0x3A] - ldrh r2, [r5, 0x36] - adds r0, r2 - strh r0, [r5, 0x36] - ldrh r1, [r5, 0x3C] - ldrh r2, [r5, 0x38] - adds r1, r2 - strh r1, [r5, 0x38] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x22] - ldrh r0, [r5, 0x30] - subs r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - cmp r0, 0 - bgt _080DE0F6 - b _080DE0E2 -_080DE032: - ldrh r0, [r5, 0x32] - subs r0, 0x1 - strh r0, [r5, 0x32] - lsls r0, 16 - cmp r0, 0 - bgt _080DE0F6 - ldr r4, _080DE098 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x30] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x20] - lsls r0, 4 - strh r0, [r5, 0x36] - ldrh r0, [r5, 0x22] - lsls r0, 4 - strh r0, [r5, 0x38] - movs r1, 0x30 - ldrsh r0, [r5, r1] - movs r2, 0x20 - ldrsh r1, [r5, r2] - subs r0, r1 - lsls r0, 4 - movs r2, 0x34 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r5, 0x3A] - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r2, 0x22 - ldrsh r1, [r5, r2] - subs r0, r1 - lsls r0, 4 - movs r2, 0x34 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r5, 0x3C] - b _080DE0E2 - .align 2, 0 -_080DE098: .4byte gAnimBankTarget -_080DE09C: - ldrh r0, [r5, 0x3A] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - ldrh r1, [r5, 0x3C] - ldrh r2, [r5, 0x38] - adds r1, r2 - strh r1, [r5, 0x38] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x22] - ldrh r0, [r5, 0x34] - subs r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - cmp r0, 0 - bgt _080DE0F6 - ldr r4, _080DE0EC @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] -_080DE0E2: - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080DE0F6 - .align 2, 0 -_080DE0EC: .4byte gAnimBankTarget -_080DE0F0: - adds r0, r5, 0 - bl move_anim_8074EE0 -_080DE0F6: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80DDFE8 - thumb_func_start sub_80DE0FC sub_80DE0FC: @ 80DE0FC push {r4,lr} diff --git a/src/ghost.c b/src/ghost.c index e854036f0..d44df6818 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -202,4 +202,45 @@ void sub_80DDF40(struct Sprite *sprite) { sprite->data[6] = (((s16)r5 - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1); sprite->data[7] = (((s16)r6 - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1); sprite->callback = &sub_80DDFE8; +} + +void sub_80DDFE8(struct Sprite *sprite) { + switch (sprite->data[0]) { + case 0: + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->data[1] -= 1; + if (sprite->data[1] > 0) + break; + sprite->data[0] += 1; + break; + case 1: + sprite->data[2] -= 1; + if (sprite->data[2] > 0) + break; + sprite->data[1] = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 3); + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = ((sprite->data[1] - sprite->pos1.x) << 4) / sprite->data[3]; + sprite->data[7] = ((sprite->data[2] - sprite->pos1.y) << 4) / sprite->data[3]; + sprite->data[0] += 1; + break; + case 2: + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->data[3] -= 1; + if (sprite->data[3] > 0) + break; + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 3); + sprite->data[0] += 1; + break; + case 3: + move_anim_8074EE0(sprite); + } }
\ No newline at end of file |