diff options
-rw-r--r-- | asm/cable_car.s | 162 | ||||
-rw-r--r-- | include/field_weather.h | 3 | ||||
-rw-r--r-- | include/global.h | 6 | ||||
-rw-r--r-- | src/scene/cable_car.c | 47 |
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; + } +} |