summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Winwood <twwinwood@gmail.com>2018-06-18 07:14:06 +0100
committerThomas Winwood <twwinwood@gmail.com>2018-06-18 07:14:06 +0100
commit093d767eb6a943a5ef19fee69ab24398c3f7fa7b (patch)
tree6c6fb24cc67998a3760ae25bbd589450562d16e8
parentba16882b301fa964207257648b2522bec6458341 (diff)
Decompile sub_80DDC4C
(I didn't actually do this one, shinny did)
-rw-r--r--asm/ghost.s65
-rw-r--r--src/ghost.c28
2 files changed, 28 insertions, 65 deletions
diff --git a/asm/ghost.s b/asm/ghost.s
index acdc6c171..0ba071e60 100644
--- a/asm/ghost.s
+++ b/asm/ghost.s
@@ -7,71 +7,6 @@
@ ghost
- thumb_func_start sub_80DDC4C
-sub_80DDC4C: @ 80DDC4C
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- strh r0, [r4, 0x2E]
- adds r0, r4, 0
- bl TranslateAnimSpriteByDeltas
- 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 _080DDC92
- cmp r2, 0xC4
- ble _080DDC9E
-_080DDC92:
- lsls r0, 16
- cmp r0, 0
- ble _080DDC9E
- movs r0, 0xC4
- bl PlaySE
-_080DDC9E:
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080DDCBC
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _080DDCB8 @ =sub_807861C
- str r0, [r4, 0x1C]
- b _080DDCC2
- .align 2, 0
-_080DDCB8: .4byte sub_807861C
-_080DDCBC:
- adds r0, r4, 0
- bl sub_80DDCC8
-_080DDCC2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80DDC4C
-
thumb_func_start sub_80DDCC8
sub_80DDCC8: @ 80DDCC8
push {r4,lr}
diff --git a/src/ghost.c b/src/ghost.c
index 6c3f11f61..042707bfb 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -45,4 +45,32 @@ void sub_80DDBD8(struct Sprite *sprite) {
if (r0 <= 0)
return;
PlaySE12WithPanning(0xC4, gUnknown_0202F7D2);
+}
+
+void sub_80DDC4C(struct Sprite *sprite)
+{
+ s16 r2;
+ s16 r0;
+ sprite->data[0] = 1;
+ TranslateAnimSpriteByDeltas(sprite);
+ 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 || r2 > 0xC4)
+ {
+ if(r0 > 0)
+ PlaySE(0xC4);
+ }
+
+ if(sprite->data[6] == 0)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = sub_807861C;
+ }
+ else
+ sub_80DDCC8(sprite);
} \ No newline at end of file