summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/cable_car.s140
-rw-r--r--include/cable_car_util.h1
-rw-r--r--src/scene/cable_car.c45
3 files changed, 45 insertions, 141 deletions
diff --git a/asm/cable_car.s b/asm/cable_car.s
index 0b8a701f6..f2cb6e472 100644
--- a/asm/cable_car.s
+++ b/asm/cable_car.s
@@ -6,146 +6,6 @@
.text
- thumb_func_start sub_81239E4
-sub_81239E4: @ 81239E4
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r6, _08123A38 @ =gUnknown_02039274
- ldr r1, [r6]
- ldrb r0, [r1, 0x1]
- cmp r0, 0xFF
- beq _08123AC0
- ldrb r0, [r1, 0x14]
- subs r0, 0x1
- strb r0, [r1, 0x14]
- ldr r1, [r6]
- ldrh r0, [r1, 0x6]
- movs r3, 0x1
- ands r0, r3
- cmp r0, 0
- bne _08123A0A
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x15]
-_08123A0A:
- ldr r2, [r6]
- ldrh r0, [r2, 0x6]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _08123A24
- ldrb r0, [r2, 0xC]
- subs r0, 0x1
- strb r0, [r2, 0xC]
- ldr r1, [r6]
- ldrb r0, [r1, 0xD]
- subs r0, 0x1
- strb r0, [r1, 0xD]
-_08123A24:
- ldr r0, [r6]
- ldrb r1, [r0, 0x14]
- cmp r1, 0x20
- beq _08123A74
- cmp r1, 0x20
- bgt _08123A3C
- cmp r1, 0x10
- beq _08123A90
- b _08123AC0
- .align 2, 0
-_08123A38: .4byte gUnknown_02039274
-_08123A3C:
- cmp r1, 0x28
- beq _08123A60
- cmp r1, 0xAF
- bne _08123AC0
- ldr r1, _08123A5C @ =0x000008fc
- adds r0, r1
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0xA
- str r1, [sp, 0x4]
- movs r1, 0
- movs r2, 0
- movs r3, 0x16
- bl sub_8124E7C
- b _08123AC0
- .align 2, 0
-_08123A5C: .4byte 0x000008fc
-_08123A60:
- ldr r1, _08123A70 @ =0x000008fc
- adds r0, r1
- movs r1, 0x2
- str r1, [sp]
- str r1, [sp, 0x4]
- movs r1, 0
- movs r2, 0x3
- b _08123A82
- .align 2, 0
-_08123A70: .4byte 0x000008fc
-_08123A74:
- ldr r1, _08123A8C @ =0x000008fc
- adds r0, r1
- str r3, [sp]
- movs r1, 0x2
- str r1, [sp, 0x4]
- movs r1, 0
- movs r2, 0x2
-_08123A82:
- movs r3, 0
- bl sub_8124E7C
- b _08123AC0
- .align 2, 0
-_08123A8C: .4byte 0x000008fc
-_08123A90:
- ldr r5, _08123AE8 @ =0x000008fc
- adds r0, r5
- ldr r1, _08123AEC @ =gCableCarPylonHookTilemapEntries
- movs r2, 0x5
- str r2, [sp]
- movs r4, 0x2
- str r4, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_8124F08
- ldr r0, [r6]
- adds r0, r5
- ldr r1, _08123AF0 @ =0x020199d8
- str r4, [sp]
- movs r2, 0x1E
- str r2, [sp, 0x4]
- movs r2, 0
- movs r3, 0x2
- bl sub_8124F08
- ldr r1, [r6]
- movs r0, 0x40
- strb r0, [r1, 0x15]
-_08123AC0:
- bl sub_812453C
- ldr r3, _08123AF4 @ =gSpriteCoordOffsetX
- movs r0, 0
- ldrsh r2, [r3, r0]
- adds r1, r2, 0x1
- adds r0, r1, 0
- cmp r1, 0
- bge _08123AD6
- adds r0, r2, 0
- adds r0, 0x80
-_08123AD6:
- asrs r0, 7
- lsls r0, 7
- subs r0, r1, r0
- strh r0, [r3]
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123AE8: .4byte 0x000008fc
-_08123AEC: .4byte gCableCarPylonHookTilemapEntries
-_08123AF0: .4byte 0x020199d8
-_08123AF4: .4byte gSpriteCoordOffsetX
- thumb_func_end sub_81239E4
-
thumb_func_start sub_8123AF8
sub_8123AF8: @ 8123AF8
push {r4-r6,lr}
diff --git a/include/cable_car_util.h b/include/cable_car_util.h
index 0f50914c8..76198af02 100644
--- a/include/cable_car_util.h
+++ b/include/cable_car_util.h
@@ -8,5 +8,6 @@
// Exported ROM declarations
void sub_8124F08(u16 *dest, const u16 *src, u8 x, u8 y, u8 width, u8 height);
+void sub_8124E7C(u16 *dest, u16 a1, u8 a2, u8 a3, u8 a4, u8 a5);
#endif //GUARD_CABLE_CAR_UTIL_H
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
index 27ae54d51..8f708903e 100644
--- a/src/scene/cable_car.c
+++ b/src/scene/cable_car.c
@@ -23,7 +23,13 @@ struct Unk_2017000 {
u8 unk_0003;
u16 unk_0004;
u16 unk_0006;
- u8 filler_0008[0xf4];
+ u8 filler_0008[4];
+ u8 unk_000c;
+ u8 unk_000d;
+ u8 filler_0000e[6];
+ u8 unk_0014;
+ u8 unk_0015;
+ u8 filler_0016[0xe6];
u16 unk_00fc[0x400];
u16 unk_08fc[0x400];
}; // size 0x10FC
@@ -60,6 +66,7 @@ void sub_8123724(void);
void sub_8123878(u8 taskId);
void sub_81239E4(u8 taskId);
void sub_8123AF8(u8 taskId);
+void sub_812453C(void);
// .rodata
@@ -339,3 +346,39 @@ void sub_8123878(u8 taskId)
break;
}
}
+
+void sub_81239E4(u8 taskId)
+{
+ if (gUnknown_02039274->unk_0001 != 255)
+ {
+ gUnknown_02039274->unk_0014 --;
+ if ((gUnknown_02039274->unk_0006 % 2) == 0)
+ {
+ gUnknown_02039274->unk_0015 --;
+ }
+ if ((gUnknown_02039274->unk_0006 % 8) == 0)
+ {
+ gUnknown_02039274->unk_000c --;
+ gUnknown_02039274->unk_000d --;
+ }
+ switch (gUnknown_02039274->unk_0014)
+ {
+ case 175:
+ sub_8124E7C(gUnknown_02039274->unk_08fc, 0, 0, 22, 2, 10);
+ break;
+ case 40:
+ sub_8124E7C(gUnknown_02039274->unk_08fc, 0, 3, 0, 2, 2);
+ break;
+ case 32:
+ sub_8124E7C(gUnknown_02039274->unk_08fc, 0, 2, 0, 1, 2);
+ break;
+ case 16:
+ sub_8124F08(gUnknown_02039274->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
+ sub_8124F08(gUnknown_02039274->unk_08fc, ewram_19000.pylonStemTilemap, 0, 2, 2, 30);
+ gUnknown_02039274->unk_0015 = 64;
+ break;
+ }
+ }
+ sub_812453C();
+ gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 1) % 128;
+}