summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Winwood <twwinwood@gmail.com>2018-06-18 00:49:11 +0100
committerThomas Winwood <twwinwood@gmail.com>2018-06-18 00:49:11 +0100
commitba16882b301fa964207257648b2522bec6458341 (patch)
treef1ea3a842a1272a469ad3cd5830333be3d24b529
parent1ebc745b7fc598feb758dbe5b32d5716a474fa37 (diff)
Decompile sub_80DDBD8
-rw-r--r--asm/ghost.s59
-rw-r--r--src/ghost.c27
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