summaryrefslogtreecommitdiff
path: root/src/ghost.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ghost.c')
-rw-r--r--src/ghost.c95
1 files changed, 94 insertions, 1 deletions
diff --git a/src/ghost.c b/src/ghost.c
index fdb2e52fa..16f4241c0 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -249,4 +249,97 @@ void sub_80DDFE8(struct Sprite *sprite) {
void sub_80DE0FC(struct Sprite *sprite) {
sub_8078764(sprite, 1);
sprite->callback = &sub_80DE114;
-} \ No newline at end of file
+}
+
+#ifdef NONMATCHING /* I couldn't do this one. */
+void sub_80DE114(struct Sprite *sprite) {}
+#else
+NAKED
+void sub_80DE114(struct Sprite *sprite) {
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tadds r3, r0, 0\n"
+ "\tmovs r5, 0\n"
+ "\tmovs r6, 0\n"
+ "\tadds r0, 0x3F\n"
+ "\tldrb r1, [r0]\n"
+ "\tmovs r0, 0x10\n"
+ "\tands r0, r1\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080DE1AA\n"
+ "\tadds r1, r3, 0\n"
+ "\tadds r1, 0x3E\n"
+ "\tldrb r2, [r1]\n"
+ "\tmovs r0, 0x4\n"
+ "\tands r0, r2\n"
+ "\tadds r4, r1, 0\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080DE13E\n"
+ "\tmovs r0, 0x4\n"
+ "\torrs r0, r2\n"
+ "\tstrb r0, [r4]\n"
+ "_080DE13E:\n"
+ "\tmovs r1, 0x2E\n"
+ "\tldrsh r0, [r3, r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080DE14E\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _080DE158\n"
+ "\tmovs r6, 0x1\n"
+ "\tb _080DE162\n"
+ "_080DE14E:\n"
+ "\tmovs r1, 0x30\n"
+ "\tldrsh r0, [r3, r1]\n"
+ "\tcmp r0, 0x2\n"
+ "\tbne _080DE162\n"
+ "\tb _080DE166\n"
+ "_080DE158:\n"
+ "\tmovs r1, 0x30\n"
+ "\tldrsh r0, [r3, r1]\n"
+ "\tcmp r0, 0x4\n"
+ "\tbne _080DE162\n"
+ "\tmovs r5, 0x1\n"
+ "_080DE162:\n"
+ "\tcmp r5, 0\n"
+ "\tbeq _080DE198\n"
+ "_080DE166:\n"
+ "\tldrb r2, [r4]\n"
+ "\tlsls r0, r2, 29\n"
+ "\tlsrs r0, 31\n"
+ "\tmovs r1, 0x1\n"
+ "\teors r1, r0\n"
+ "\tlsls r1, 2\n"
+ "\tmovs r0, 0x5\n"
+ "\tnegs r0, r0\n"
+ "\tands r0, r2\n"
+ "\torrs r0, r1\n"
+ "\tstrb r0, [r4]\n"
+ "\tldrh r0, [r3, 0x32]\n"
+ "\tadds r0, 0x1\n"
+ "\tmovs r1, 0\n"
+ "\tstrh r0, [r3, 0x32]\n"
+ "\tstrh r1, [r3, 0x30]\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, 0x5\n"
+ "\tbne _080DE1AA\n"
+ "\tstrh r1, [r3, 0x32]\n"
+ "\tldrh r0, [r3, 0x2E]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r3, 0x2E]\n"
+ "\tb _080DE1AA\n"
+ "_080DE198:\n"
+ "\tcmp r6, 0\n"
+ "\tbeq _080DE1A4\n"
+ "\tadds r0, r3, 0\n"
+ "\tbl DestroyAnimSprite\n"
+ "\tb _080DE1AA\n"
+ "_080DE1A4:\n"
+ "\tldrh r0, [r3, 0x30]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r3, 0x30]\n"
+ "_080DE1AA:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n");
+}
+#endif \ No newline at end of file