diff options
author | ultima-soul <akshayjhanji@hotmail.com> | 2019-04-07 15:14:48 -0700 |
---|---|---|
committer | ultima-soul <akshayjhanji@hotmail.com> | 2019-04-07 15:14:48 -0700 |
commit | da934c91c303569281adfacad27451be13766ccb (patch) | |
tree | a3df56bf80de1adee98344bb9fe2f7e6689e5ac0 /src | |
parent | aabc181b325f1be3388001f21f0c9173ef1c980a (diff) |
Fix ghost NONMATCHING
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/ghost.c | 131 |
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) |