summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorultima-soul <akshayjhanji@hotmail.com>2019-04-07 15:14:48 -0700
committerultima-soul <akshayjhanji@hotmail.com>2019-04-07 15:14:48 -0700
commitda934c91c303569281adfacad27451be13766ccb (patch)
treea3df56bf80de1adee98344bb9fe2f7e6689e5ac0 /src
parentaabc181b325f1be3388001f21f0c9173ef1c980a (diff)
Fix ghost NONMATCHING
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/ghost.c131
1 files changed, 44 insertions, 87 deletions
diff --git a/src/battle/anim/ghost.c b/src/battle/anim/ghost.c
index 0fc4f1dfe..52911f366 100644
--- a/src/battle/anim/ghost.c
+++ b/src/battle/anim/ghost.c
@@ -472,95 +472,52 @@ static void sub_80DE0FC(struct Sprite *sprite)
sprite->callback = sub_80DE114;
}
-/* NONMATCHING */
-NAKED
+
static 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");
+ bool8 r5 = FALSE;
+ bool8 r6 = FALSE;
+
+ if (sprite->animEnded)
+ {
+ if (!sprite->invisible)
+ sprite->invisible = TRUE;
+
+ switch (sprite->data[0])
+ {
+ default:
+ r6 = TRUE;
+ break;
+ case 0:
+ if (sprite->data[1] == 2)
+ r5 = TRUE;
+ break;
+ case 1:
+ if (sprite->data[1] == 4)
+ r5 = TRUE;
+ break;
+ }
+
+ if (r5)
+ {
+ sprite->invisible ^= 1;
+ sprite->data[2]++;
+ sprite->data[1] = 0;
+ if (sprite->data[2] == 5)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ }
+ else if (r6)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->data[1]++;
+ }
+ }
}
void sub_80DE1B0(u8 taskId)