diff options
-rw-r--r-- | asm/cable_car.s | 69 | ||||
-rw-r--r-- | src/scene/cable_car.c | 35 |
2 files changed, 35 insertions, 69 deletions
diff --git a/asm/cable_car.s b/asm/cable_car.s index 7a6da9e00..fc8a22052 100644 --- a/asm/cable_car.s +++ b/asm/cable_car.s @@ -6,75 +6,6 @@ .text - thumb_func_start sub_8123F44 -sub_8123F44: @ 8123F44 - push {lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _08123F62 - ldrh r1, [r2, 0x22] - adds r1, 0x10 - adds r0, r2, 0 - adds r0, 0x29 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - strh r0, [r2, 0x22] -_08123F62: - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x32 - ldrsh r1, [r2, r3] - cmp r0, r1 - blt _08123FB8 - movs r0, 0x30 - ldrsh r1, [r2, r0] - cmp r1, 0 - beq _08123F82 - cmp r1, 0x1 - beq _08123F8C - b _08123FAA -_08123F82: - ldrh r0, [r2, 0x20] - subs r0, 0x1 - strh r0, [r2, 0x20] - ldrh r0, [r2, 0x2E] - b _08123F9C -_08123F8C: - ldrh r0, [r2, 0x2E] - ands r0, r1 - cmp r0, 0 - beq _08123FAA - ldrh r0, [r2, 0x20] - subs r0, 0x1 - strh r0, [r2, 0x20] - ldrh r0, [r2, 0x20] -_08123F9C: - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08123FAA - ldrh r0, [r2, 0x22] - subs r0, 0x1 - strh r0, [r2, 0x22] -_08123FAA: - movs r1, 0x22 - ldrsh r0, [r2, r1] - cmp r0, 0x4F - bgt _08123FB8 - adds r0, r2, 0 - bl DestroySprite -_08123FB8: - pop {r0} - bx r0 - thumb_func_end sub_8123F44 - thumb_func_start sub_8123FBC sub_8123FBC: @ 8123FBC push {lr} diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c index ee26d730b..a59862278 100644 --- a/src/scene/cable_car.c +++ b/src/scene/cable_car.c @@ -549,3 +549,38 @@ void sub_8123EB8(struct Sprite *sprite) } } } + +void sub_8123F44(struct Sprite *sprite) +{ + if (sprite->data0 == 0) + { + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + } + if (++ sprite->data0 >= sprite->data2) + { + switch (sprite->data1) + { + case 0: + sprite->pos1.x --; + if ((sprite->data0 % 4) == 0) + { + sprite->pos1.y --; + } + break; + case 1: + if ((sprite->data0 % 2) != 0) + { + sprite->pos1.x --; + if ((sprite->pos1.x % 4) == 0) + { + sprite->pos1.y --; + } + } + break; + } + if (sprite->pos1.y < 0x50) + { + DestroySprite(sprite); + } + } +} |