summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/cable_car.s162
-rw-r--r--include/field_weather.h3
-rw-r--r--include/global.h6
-rw-r--r--src/scene/cable_car.c47
4 files changed, 52 insertions, 166 deletions
diff --git a/asm/cable_car.s b/asm/cable_car.s
index f2cb6e472..72c1c9eda 100644
--- a/asm/cable_car.s
+++ b/asm/cable_car.s
@@ -6,168 +6,6 @@
.text
- thumb_func_start sub_8123AF8
-sub_8123AF8: @ 8123AF8
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r6, _08123B4C @ =gUnknown_02039274
- ldr r1, [r6]
- ldrb r0, [r1, 0x1]
- cmp r0, 0xFF
- beq _08123BEE
- ldrb r0, [r1, 0x14]
- adds r0, 0x1
- strb r0, [r1, 0x14]
- ldr r2, [r6]
- ldrh r0, [r2, 0x6]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08123B1E
- ldrb r0, [r2, 0x15]
- adds r0, 0x1
- strb r0, [r2, 0x15]
-_08123B1E:
- ldr r2, [r6]
- ldrh r0, [r2, 0x6]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _08123B38
- ldrb r0, [r2, 0xC]
- adds r0, 0x1
- strb r0, [r2, 0xC]
- ldr r1, [r6]
- ldrb r0, [r1, 0xD]
- adds r0, 0x1
- strb r0, [r1, 0xD]
-_08123B38:
- ldr r3, [r6]
- ldrb r0, [r3, 0x14]
- cmp r0, 0x20
- beq _08123BB0
- cmp r0, 0x20
- bgt _08123B50
- cmp r0, 0x10
- beq _08123B78
- b _08123BEE
- .align 2, 0
-_08123B4C: .4byte gUnknown_02039274
-_08123B50:
- cmp r0, 0x28
- beq _08123BDC
- cmp r0, 0xB0
- bne _08123BEE
- ldr r1, _08123B70 @ =0x000008fc
- adds r0, r3, r1
- ldr r1, _08123B74 @ =0x020199d8
- movs r2, 0x2
- str r2, [sp]
- movs r2, 0x1E
- str r2, [sp, 0x4]
- movs r2, 0
- movs r3, 0x2
- bl sub_8124F08
- b _08123BEE
- .align 2, 0
-_08123B70: .4byte 0x000008fc
-_08123B74: .4byte 0x020199d8
-_08123B78:
- ldr r5, _08123BAC @ =0x000008fc
- adds r0, r3, r5
- movs r1, 0x3
- str r1, [sp]
- movs r4, 0x2
- str r4, [sp, 0x4]
- movs r1, 0
- movs r2, 0x2
- movs r3, 0
- bl sub_8124E7C
- ldr r0, [r6]
- adds r0, r5
- str r4, [sp]
- movs r1, 0xA
- str r1, [sp, 0x4]
- movs r1, 0
- movs r2, 0
- movs r3, 0x16
- bl sub_8124E7C
- ldr r1, [r6]
- movs r0, 0xC0
- strb r0, [r1, 0x15]
- b _08123BEE
- .align 2, 0
-_08123BAC: .4byte 0x000008fc
-_08123BB0:
- ldr r1, _08123BD4 @ =gCableCarPylonHookTilemapEntries + 0x4
- ldrh r2, [r1]
- movs r4, 0x90
- lsls r4, 4
- adds r0, r3, r4
- strh r2, [r0]
- ldrh r2, [r1, 0x2]
- adds r4, 0x2
- adds r0, r3, r4
- strh r2, [r0]
- ldrh r2, [r1, 0xA]
- adds r4, 0x3E
- adds r0, r3, r4
- strh r2, [r0]
- ldrh r1, [r1, 0xC]
- ldr r2, _08123BD8 @ =0x00000942
- b _08123BEA
- .align 2, 0
-_08123BD4: .4byte gCableCarPylonHookTilemapEntries + 0x4
-_08123BD8: .4byte 0x00000942
-_08123BDC:
- ldr r2, _08123C08 @ =gCableCarPylonHookTilemapEntries + 0x8
- ldrh r1, [r2]
- ldr r4, _08123C0C @ =0x00000904
- adds r0, r3, r4
- strh r1, [r0]
- ldrh r1, [r2, 0xA]
- ldr r2, _08123C10 @ =0x00000944
-_08123BEA:
- adds r0, r3, r2
- strh r1, [r0]
-_08123BEE:
- bl sub_8124598
- ldr r0, _08123C14 @ =gUnknown_02039274
- ldr r1, [r0]
- ldrh r0, [r1, 0x6]
- ldrh r1, [r1, 0x4]
- cmp r0, r1
- bcs _08123C1C
- ldr r4, _08123C18 @ =gSpriteCoordOffsetX
- movs r1, 0
- ldrsh r0, [r4, r1]
- b _08123C26
- .align 2, 0
-_08123C08: .4byte gCableCarPylonHookTilemapEntries + 0x8
-_08123C0C: .4byte 0x00000904
-_08123C10: .4byte 0x00000944
-_08123C14: .4byte gUnknown_02039274
-_08123C18: .4byte gSpriteCoordOffsetX
-_08123C1C:
- ldr r0, _08123C38 @ =gUnknown_08396FC4
- ldr r4, [r0]
- ldr r2, _08123C3C @ =0x000006fc
- adds r4, r2
- ldrh r0, [r4]
-_08123C26:
- adds r0, 0xF7
- movs r1, 0xF8
- bl __modsi3
- strh r0, [r4]
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123C38: .4byte gUnknown_08396FC4
-_08123C3C: .4byte 0x000006fc
- thumb_func_end sub_8123AF8
-
thumb_func_start sub_8123C40
sub_8123C40: @ 8123C40
push {r4,lr}
diff --git a/include/field_weather.h b/include/field_weather.h
index b51c47de7..d3b1f4ffd 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -84,7 +84,8 @@ struct Weather
u8 filler_6E5[0x15];
u8 unknown_6FA;
u8 unknown_6FB;
- u8 filler_6FC[4];
+ u16 unknown_6FC;
+ u8 filler_6FE[2];
u8 unknown_700;
u8 filler_701[0x15];
u8 unknown_716;
diff --git a/include/global.h b/include/global.h
index 4604c8cbb..a22f0d817 100644
--- a/include/global.h
+++ b/include/global.h
@@ -14,9 +14,9 @@
#define INCBIN_S8 {0}
#define INCBIN_S16 {0}
#define INCBIN_S32 {0}
-void * memcpy (void *, const void *, size_t);
-void * memset (void *, int, size_t);
-int strcmp (const char *, const char *);
+void *memcpy (void *, const void *, size_t);
+void *memset (void *, int, size_t);
+int strcmp (const char *, const char *);
#endif
// Prevent cross-jump optimization.
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
index 8f708903e..4d762af1a 100644
--- a/src/scene/cable_car.c
+++ b/src/scene/cable_car.c
@@ -67,6 +67,7 @@ void sub_8123878(u8 taskId);
void sub_81239E4(u8 taskId);
void sub_8123AF8(u8 taskId);
void sub_812453C(void);
+void sub_8124598(void);
// .rodata
@@ -382,3 +383,49 @@ void sub_81239E4(u8 taskId)
sub_812453C();
gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 1) % 128;
}
+
+void sub_8123AF8(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 176:
+ sub_8124F08(gUnknown_02039274->unk_08fc, ewram_19000.pylonStemTilemap, 0, 2, 2, 30);
+ break;
+ case 16:
+ sub_8124E7C(gUnknown_02039274->unk_08fc, 0, 2, 0, 3, 2);
+ sub_8124E7C(gUnknown_02039274->unk_08fc, 0, 0, 22, 2, 10);
+ gUnknown_02039274->unk_0015 = 192;
+ break;
+ case 32:
+ gUnknown_02039274->unk_08fc[2] = (gCableCarPylonHookTilemapEntries + 2)[0];
+ gUnknown_02039274->unk_08fc[3] = (gCableCarPylonHookTilemapEntries + 2)[1];
+ gUnknown_02039274->unk_08fc[34] = (gCableCarPylonHookTilemapEntries + 2)[5];
+ gUnknown_02039274->unk_08fc[35] = (gCableCarPylonHookTilemapEntries + 2)[6];
+ break;
+ case 40:
+ gUnknown_02039274->unk_08fc[4] = (gCableCarPylonHookTilemapEntries + 4)[0];
+ gUnknown_02039274->unk_08fc[36] = (gCableCarPylonHookTilemapEntries + 4)[5];
+ break;
+ }
+ }
+ sub_8124598();
+ if (gUnknown_02039274->unk_0006 < gUnknown_02039274->unk_0004) {
+ gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 247) % 248;
+ }
+ else
+ {
+ gUnknown_08396FC4->unknown_6FC = (gUnknown_08396FC4->unknown_6FC + 247) % 248;
+ }
+}