summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/cable_car.s69
-rw-r--r--src/scene/cable_car.c35
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);
+ }
+ }
+}