diff options
-rw-r--r-- | asm/ghost.s | 80 | ||||
-rw-r--r-- | src/ghost.c | 34 |
2 files changed, 34 insertions, 80 deletions
diff --git a/asm/ghost.s b/asm/ghost.s index 0ba071e60..699a3c13e 100644 --- a/asm/ghost.s +++ b/asm/ghost.s @@ -7,86 +7,6 @@ @ ghost - thumb_func_start sub_80DDCC8 -sub_80DDCC8: @ 80DDCC8 - push {r4,lr} - adds r3, r0, 0 - ldrh r2, [r3, 0x3A] - movs r1, 0x3A - ldrsh r0, [r3, r1] - cmp r0, 0xFF - ble _080DDCEC - adds r0, r2, 0x1 - strh r0, [r3, 0x3A] - lsls r0, 16 - ldr r1, _080DDCE8 @ =0x010d0000 - cmp r0, r1 - bne _080DDD4C - movs r0, 0 - b _080DDD4A - .align 2, 0 -_080DDCE8: .4byte 0x010d0000 -_080DDCEC: - ldrh r1, [r3, 0x3C] - adds r4, r1, 0x1 - strh r4, [r3, 0x3C] - movs r0, 0xFF - ands r0, r1 - cmp r0, 0 - bne _080DDD4C - ldr r1, _080DDD10 @ =0xffffff00 - ands r1, r4 - strh r1, [r3, 0x3C] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080DDD14 - adds r0, r2, 0x1 - b _080DDD16 - .align 2, 0 -_080DDD10: .4byte 0xffffff00 -_080DDD14: - subs r0, r2, 0x1 -_080DDD16: - strh r0, [r3, 0x3A] - ldr r2, _080DDD54 @ =REG_BLDALPHA - ldrh r1, [r3, 0x3A] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r0, r1 - strh r0, [r2] - movs r2, 0x3A - ldrsh r0, [r3, r2] - cmp r0, 0 - beq _080DDD32 - cmp r0, 0x10 - bne _080DDD3E -_080DDD32: - ldrh r0, [r3, 0x3C] - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - eors r0, r1 - strh r0, [r3, 0x3C] -_080DDD3E: - movs r1, 0x3A - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080DDD4C - movs r0, 0x80 - lsls r0, 1 -_080DDD4A: - strh r0, [r3, 0x3A] -_080DDD4C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080DDD54: .4byte REG_BLDALPHA - thumb_func_end sub_80DDCC8 - thumb_func_start sub_80DDD58 sub_80DDD58: @ 80DDD58 push {r4,lr} diff --git a/src/ghost.c b/src/ghost.c index 042707bfb..6c7e36190 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -73,4 +73,38 @@ void sub_80DDC4C(struct Sprite *sprite) } else sub_80DDCC8(sprite); +} + +void sub_80DDCC8(struct Sprite *sprite) +{ + + s16 r0; + if(sprite->data[6] > 0xFF) + { + if(++sprite->data[6] == 0x10d) + sprite->data[6] = 0; + return; + } + + r0 = sprite->data[7]; + sprite->data[7]++; + + if((r0 & 0xFF) == 0) + { + sprite->data[7] &= 0xff00; + if((sprite->data[7] & 0x100) != 0) + sprite->data[6]++; + else + sprite->data[6]--; + } + else + return; + + REG_BLDALPHA = ((16 - sprite->data[6]) << 8) | sprite->data[6]; + if(sprite->data[6] == 0 || sprite->data[6] == 16) + { + sprite->data[7] ^= 0x100; + } + if(sprite->data[6] == 0) + sprite->data[6] = 0x100; }
\ No newline at end of file |