summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Winwood <twwinwood@gmail.com>2018-06-20 12:37:55 +0100
committerThomas Winwood <twwinwood@gmail.com>2018-06-20 12:37:55 +0100
commit6afdc9b4b1ec9215e58d562bd5db2b8dfd3df466 (patch)
tree6ff2442a139b8fdd68495187ae2e7a6c5c17a001
parentef31712404dc6336569b273e01f44d0ebdd31860 (diff)
Decompile sub_80DDF40
-rw-r--r--asm/ghost.s82
-rw-r--r--src/ghost.c19
2 files changed, 19 insertions, 82 deletions
diff --git a/asm/ghost.s b/asm/ghost.s
index 66d0effef..267d12f62 100644
--- a/asm/ghost.s
+++ b/asm/ghost.s
@@ -7,88 +7,6 @@
@ ghost
- thumb_func_start sub_80DDF40
-sub_80DDF40: @ 80DDF40
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r5, [r4, 0x20]
- ldrh r6, [r4, 0x22]
- ldr r0, _080DDFDC @ =gAnimBankAttacker
- mov r8, r0
- ldrb r0, [r0]
- movs r1, 0x2
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- mov r9, r1
- strh r0, [r4, 0x20]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x3
- bl GetBattlerSpriteCoord
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- mov r1, r9
- strh r1, [r4, 0x2E]
- ldr r2, _080DDFE0 @ =gBattleAnimArgs
- ldrh r1, [r2]
- strh r1, [r4, 0x30]
- ldrh r1, [r2, 0x2]
- strh r1, [r4, 0x32]
- ldrh r1, [r2, 0x4]
- strh r1, [r4, 0x34]
- ldrh r1, [r4, 0x20]
- lsls r1, 4
- strh r1, [r4, 0x36]
- lsls r0, 4
- strh r0, [r4, 0x38]
- lsls r5, 16
- asrs r5, 16
- movs r1, 0x20
- ldrsh r0, [r4, r1]
- subs r5, r0
- lsls r5, 4
- movs r0, 0
- ldrsh r1, [r2, r0]
- lsls r1, 1
- adds r0, r5, 0
- str r2, [sp]
- bl __divsi3
- strh r0, [r4, 0x3A]
- lsls r6, 16
- asrs r6, 16
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- subs r6, r0
- lsls r6, 4
- ldr r2, [sp]
- movs r0, 0
- ldrsh r1, [r2, r0]
- lsls r1, 1
- adds r0, r6, 0
- bl __divsi3
- strh r0, [r4, 0x3C]
- ldr r0, _080DDFE4 @ =sub_80DDFE8
- str r0, [r4, 0x1C]
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080DDFDC: .4byte gAnimBankAttacker
-_080DDFE0: .4byte gBattleAnimArgs
-_080DDFE4: .4byte sub_80DDFE8
- thumb_func_end sub_80DDF40
-
thumb_func_start sub_80DDFE8
sub_80DDFE8: @ 80DDFE8
push {r4,r5,lr}
diff --git a/src/ghost.c b/src/ghost.c
index 092677523..e854036f0 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -7,6 +7,7 @@
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankTarget;
extern u8 gUnknown_0202F7D2;
+extern u8 gAnimBankAttacker;
void sub_80DDBD8(struct Sprite *);
void sub_80DDC4C(struct Sprite *);
@@ -14,6 +15,7 @@ void sub_80DDCC8(struct Sprite *);
void sub_80DDD78(struct Sprite *);
void sub_80DDE7C(u8 taskId);
void sub_80DDED0(u8 taskId);
+void sub_80DDFE8(struct Sprite *);
void sub_80DDB6C(struct Sprite *sprite) {
InitAnimSpritePos(sprite, 1);
@@ -183,4 +185,21 @@ void sub_80DDED0(u8 taskId) {
DestroyAnimVisualTask(taskId);
REG_BLDCNT = 0;
REG_BLDALPHA = 0;
+}
+
+void sub_80DDF40(struct Sprite *sprite) {
+ u16 r5, r6;
+ r5 = sprite->pos1.x;
+ r6 = sprite->pos1.y;
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ 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;
} \ No newline at end of file