summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/cable_car.s2880
-rw-r--r--asm/cable_car_util.s162
-rw-r--r--data/cable_car.s102
-rw-r--r--data/scripts/maps/MtChimney_CableCarStation.inc2
-rw-r--r--data/scripts/maps/Route112_CableCarStation.inc2
-rw-r--r--data/specials.inc2
-rw-r--r--include/cable_car_util.h13
-rwxr-xr-xinclude/ewram.h2
-rw-r--r--include/field_weather.h4
-rw-r--r--include/gba/macro.h34
-rw-r--r--include/global.h7
-rw-r--r--include/graphics.h7
-rw-r--r--ld_script.txt6
-rw-r--r--src/engine/cable_car_util.c47
-rw-r--r--src/field/field_weather.c1
-rw-r--r--src/scene/cable_car.c979
-rw-r--r--sym_ewram.txt26
17 files changed, 1096 insertions, 3180 deletions
diff --git a/asm/cable_car.s b/asm/cable_car.s
deleted file mode 100644
index 52bc2668b..000000000
--- a/asm/cable_car.s
+++ /dev/null
@@ -1,2880 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81231EC
-sub_81231EC: @ 81231EC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08123210 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812320A
- ldr r0, _08123214 @ =sub_8123244
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_0812320A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123210: .4byte gPaletteFade
-_08123214: .4byte sub_8123244
- thumb_func_end sub_81231EC
-
- thumb_func_start sub_8123218
-sub_8123218: @ 8123218
- push {lr}
- sub sp, 0x4
- bl ScriptContext2_Enable
- ldr r0, _08123240 @ =sub_81231EC
- movs r1, 0x1
- bl CreateTask
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_08123240: .4byte sub_81231EC
- thumb_func_end sub_8123218
-
- thumb_func_start sub_8123244
-sub_8123244: @ 8123244
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- ldr r1, _08123268 @ =gMain
- ldr r2, _0812326C @ =0x0000043c
- adds r0, r1, r2
- ldrb r0, [r0]
- mov r9, r1
- cmp r0, 0x8
- bhi _08123298
- lsls r0, 2
- ldr r1, _08123270 @ =_08123274
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08123268: .4byte gMain
-_0812326C: .4byte 0x0000043c
-_08123270: .4byte _08123274
- .align 2, 0
-_08123274:
- .4byte _08123298
- .4byte _08123384
- .4byte _081233E8
- .4byte _08123484
- .4byte _081234A0
- .4byte _08123504
- .4byte _08123598
- .4byte _08123678
- .4byte _081236B0
-_08123298:
- movs r0, 0
- bl SetVBlankCallback
- bl remove_some_task
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- add r0, sp, 0xC
- mov r9, r0
- add r2, sp, 0x8
- movs r6, 0
- ldr r1, _08123368 @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _0812336C @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r8, r0
-_081232C0:
- strh r6, [r2]
- add r0, sp, 0x8
- str r0, [r1]
- str r3, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _081232C0
- strh r6, [r2]
- add r2, sp, 0x8
- str r2, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r8
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp, 0xC]
- ldr r2, _08123368 @ =0x040000d4
- mov r1, r9
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xA0
- lsls r1, 19
- add r0, sp, 0x8
- strh r4, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsrs r3, 1
- movs r4, 0x81
- lsls r4, 24
- orrs r3, r4
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- ldr r1, _08123370 @ =gUnknown_02039274
- ldr r0, _08123374 @ =gSharedMem + 0x17000
- str r0, [r1]
- adds r3, r0, 0
- ldr r5, _08123378 @ =0x000010fc
- ldr r0, _0812337C @ =gMain
- mov r9, r0
- add r1, sp, 0x8
- movs r7, 0
- movs r6, 0x80
- lsls r6, 5
- ldr r0, _0812336C @ =0x81000800
- mov r8, r0
-_08123338:
- strh r7, [r1]
- add r0, sp, 0x8
- str r0, [r2]
- str r3, [r2, 0x4]
- mov r0, r8
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- adds r3, r6
- subs r5, r6
- cmp r5, r6
- bhi _08123338
- strh r7, [r1]
- add r1, sp, 0x8
- str r1, [r2]
- str r3, [r2, 0x4]
- lsrs r0, r5, 1
- orrs r0, r4
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- ldr r1, _08123380 @ =0x0000043c
- add r1, r9
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_08123368: .4byte 0x040000d4
-_0812336C: .4byte 0x81000800
-_08123370: .4byte gUnknown_02039274
-_08123374: .4byte gSharedMem + 0x17000
-_08123378: .4byte 0x000010fc
-_0812337C: .4byte gMain
-_08123380: .4byte 0x0000043c
-_08123384:
- bl ResetSpriteData
- bl ResetTasks
- bl FreeAllSpritePalettes
- bl ResetPaletteFade
- bl StartWeather
- movs r4, 0
- ldr r0, _081233D4 @ =gWeatherPtr
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0xF0
- movs r2, 0
-_081233A4:
- lsls r0, r4, 2
- adds r0, r1, r0
- str r2, [r0]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _081233A4
- bl InitMapMusic
- bl ResetMapMusic
- ldr r2, _081233D8 @ =gSpriteCoordOffsetX
- ldr r1, _081233DC @ =gSpriteCoordOffsetY
- movs r0, 0
- strh r0, [r1]
- strh r0, [r2]
- ldr r1, _081233E0 @ =gMain
- ldr r2, _081233E4 @ =0x0000043c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_081233D4: .4byte gWeatherPtr
-_081233D8: .4byte gSpriteCoordOffsetX
-_081233DC: .4byte gSpriteCoordOffsetY
-_081233E0: .4byte gMain
-_081233E4: .4byte 0x0000043c
-_081233E8:
- movs r4, 0
- ldr r5, _08123454 @ =gUnknown_08401CF8
-_081233EC:
- lsls r0, r4, 3
- adds r0, r5
- bl LoadCompressedObjectPic
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _081233EC
- ldr r0, _08123458 @ =gUnknown_08401D18
- bl LoadSpritePalettes
- ldr r0, _0812345C @ =gCableCarMtChimneyTilemap
- ldr r4, _08123460 @ =gSharedMem + 0x19000
- adds r1, r4, 0
- bl LZDecompressWram
- ldr r0, _08123464 @ =gCableCarTreeTilemap
- movs r2, 0xB4
- lsls r2, 1
- adds r1, r4, r2
- bl LZDecompressWram
- ldr r0, _08123468 @ =gCableCarMountainTilemap
- movs r2, 0xA5
- lsls r2, 3
- adds r1, r4, r2
- bl LZDecompressWram
- ldr r0, _0812346C @ =gCableCarPylonStemTilemap
- ldr r1, _08123470 @ =0x000009d8
- adds r4, r1
- adds r1, r4, 0
- bl LZDecompressWram
- ldr r0, _08123474 @ =gCableCarBG_Pal
- movs r1, 0
- movs r2, 0x80
- bl LoadPalette
- ldr r0, _08123478 @ =gCableCarBG_Gfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r1, _0812347C @ =gMain
- ldr r2, _08123480 @ =0x0000043c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_08123454: .4byte gUnknown_08401CF8
-_08123458: .4byte gUnknown_08401D18
-_0812345C: .4byte gCableCarMtChimneyTilemap
-_08123460: .4byte gSharedMem + 0x19000
-_08123464: .4byte gCableCarTreeTilemap
-_08123468: .4byte gCableCarMountainTilemap
-_0812346C: .4byte gCableCarPylonStemTilemap
-_08123470: .4byte 0x000009d8
-_08123474: .4byte gCableCarBG_Pal
-_08123478: .4byte gCableCarBG_Gfx
-_0812347C: .4byte gMain
-_08123480: .4byte 0x0000043c
-_08123484:
- bl sub_8124118
- bl RunTasks
- ldr r1, _08123498 @ =gMain
- ldr r0, _0812349C @ =0x0000043c
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_08123498: .4byte gMain
-_0812349C: .4byte 0x0000043c
-_081234A0:
- ldr r0, _081234B4 @ =gUnknown_02039274
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- cmp r0, 0x7
- bne _081234BC
- ldr r1, _081234B8 @ =0x0000043c
- add r1, r9
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_081234B4: .4byte gUnknown_02039274
-_081234B8: .4byte 0x0000043c
-_081234BC:
- ldr r0, _081234FC @ =gWeatherPtr
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0xF0
- ldr r0, [r1]
- cmp r0, 0
- bne _081234CC
- b _0812370E
-_081234CC:
- movs r4, 0
- adds r3, r1, 0
- movs r5, 0xD
- negs r5, r5
-_081234D4:
- lsls r0, r4, 2
- adds r0, r3, r0
- ldr r2, [r0]
- cmp r2, 0
- beq _081234E6
- ldrb r1, [r2, 0x5]
- adds r0, r5, 0
- ands r0, r1
- strb r0, [r2, 0x5]
-_081234E6:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _081234D4
- ldr r1, _08123500 @ =0x0000043c
- add r1, r9
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_081234FC: .4byte gWeatherPtr
-_08123500: .4byte 0x0000043c
-_08123504:
- ldr r0, _08123578 @ =0x0600e800
- ldr r5, _0812357C @ =gSharedMem + 0x19168
- movs r1, 0x20
- str r1, [sp]
- movs r1, 0xF
- str r1, [sp, 0x4]
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x11
- bl sub_8124F08
- ldr r0, _08123580 @ =0x0600f000
- movs r2, 0xF0
- lsls r2, 2
- adds r1, r5, r2
- movs r2, 0x1E
- str r2, [sp]
- movs r2, 0x14
- mov r9, r2
- str r2, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_8124F08
- ldr r0, _08123584 @ =gUnknown_02039274
- mov r8, r0
- ldr r0, [r0]
- ldr r6, _08123588 @ =0x000008fc
- adds r0, r6
- ldr r1, _0812358C @ =gCableCarPylonHookTilemapEntries
- movs r2, 0x5
- str r2, [sp]
- movs r4, 0x2
- str r4, [sp, 0x4]
- movs r2, 0
- movs r3, 0
- bl sub_8124F08
- mov r1, r8
- ldr r0, [r1]
- adds r0, r6
- movs r2, 0x87
- lsls r2, 4
- adds r5, r2
- str r4, [sp]
- mov r1, r9
- str r1, [sp, 0x4]
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x2
- bl sub_8124F08
- ldr r1, _08123590 @ =gMain
- ldr r2, _08123594 @ =0x0000043c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_08123578: .4byte 0x0600e800
-_0812357C: .4byte gSharedMem + 0x19168
-_08123580: .4byte 0x0600f000
-_08123584: .4byte gUnknown_02039274
-_08123588: .4byte 0x000008fc
-_0812358C: .4byte gCableCarPylonHookTilemapEntries
-_08123590: .4byte gMain
-_08123594: .4byte 0x0000043c
-_08123598:
- ldr r0, _08123664 @ =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl sub_81248AC
- ldr r0, _08123668 @ =gUnknown_02039274
- mov r8, r0
- ldr r0, [r0]
- adds r0, 0xFC
- ldr r4, _0812366C @ =gSharedMem + 0x19090
- movs r6, 0xC
- str r6, [sp]
- movs r5, 0x3
- str r5, [sp, 0x4]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0xE
- bl sub_8124F08
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0xFC
- adds r1, r4, 0
- adds r1, 0x48
- str r6, [sp]
- str r5, [sp, 0x4]
- movs r2, 0xC
- movs r3, 0x11
- bl sub_8124F08
- mov r2, r8
- ldr r0, [r2]
- adds r0, 0xFC
- adds r1, r4, 0
- adds r1, 0x90
- str r6, [sp]
- str r5, [sp, 0x4]
- movs r2, 0x18
- movs r3, 0x14
- bl sub_8124F08
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0xFC
- movs r2, 0x90
- negs r2, r2
- adds r2, r4
- mov r9, r2
- str r6, [sp]
- str r5, [sp, 0x4]
- mov r1, r9
- movs r2, 0
- movs r3, 0x11
- bl sub_8124F08
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0xFC
- subs r4, 0x48
- str r6, [sp]
- str r5, [sp, 0x4]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x14
- bl sub_8124F08
- mov r2, r8
- ldr r0, [r2]
- adds r0, 0xFC
- str r6, [sp]
- str r5, [sp, 0x4]
- mov r1, r9
- movs r2, 0xC
- movs r3, 0x14
- bl sub_8124F08
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0xFC
- str r6, [sp]
- str r5, [sp, 0x4]
- adds r1, r4, 0
- movs r2, 0xC
- movs r3, 0x17
- bl sub_8124F08
- mov r2, r8
- ldr r0, [r2]
- adds r0, 0xFC
- str r6, [sp]
- str r5, [sp, 0x4]
- mov r1, r9
- movs r2, 0x18
- movs r3, 0x17
- bl sub_8124F08
- ldr r1, _08123670 @ =gMain
- ldr r0, _08123674 @ =0x0000043c
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_08123664: .4byte gSpecialVar_0x8004
-_08123668: .4byte gUnknown_02039274
-_0812366C: .4byte gSharedMem + 0x19090
-_08123670: .4byte gMain
-_08123674: .4byte 0x0000043c
-_08123678:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x3
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _081236A4 @ =0x000001a9
- movs r1, 0x1
- bl FadeInNewBGM
- movs r0, 0x1
- bl sub_8123FBC
- ldr r1, _081236A8 @ =gMain
- ldr r2, _081236AC @ =0x0000043c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- b _0812370C
- .align 2, 0
-_081236A4: .4byte 0x000001a9
-_081236A8: .4byte gMain
-_081236AC: .4byte 0x0000043c
-_081236B0:
- ldr r3, _081236E4 @ =0x04000208
- ldrh r2, [r3]
- movs r0, 0
- strh r0, [r3]
- ldr r4, _081236E8 @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r0, _081236EC @ =sub_8123C40
- bl SetVBlankCallback
- ldr r0, _081236F0 @ =sub_8123724
- bl SetMainCallback2
- ldr r0, _081236F4 @ =sub_8123878
- movs r1, 0
- bl CreateTask
- ldr r0, _081236F8 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _08123700
- ldr r0, _081236FC @ =sub_81239E4
- b _08123702
- .align 2, 0
-_081236E4: .4byte 0x04000208
-_081236E8: .4byte 0x04000200
-_081236EC: .4byte sub_8123C40
-_081236F0: .4byte sub_8123724
-_081236F4: .4byte sub_8123878
-_081236F8: .4byte gSpecialVar_0x8004
-_081236FC: .4byte sub_81239E4
-_08123700:
- ldr r0, _0812371C @ =sub_8123AF8
-_08123702:
- movs r1, 0x1
- bl CreateTask
- ldr r1, _08123720 @ =gUnknown_02039274
- ldr r1, [r1]
-_0812370C:
- strb r0, [r1]
-_0812370E:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812371C: .4byte sub_8123AF8
-_08123720: .4byte gUnknown_02039274
- thumb_func_end sub_8123244
-
- thumb_func_start sub_8123724
-sub_8123724: @ 8123724
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl MapMusicMain
- pop {r0}
- bx r0
- thumb_func_end sub_8123724
-
- thumb_func_start sub_8123740
-sub_8123740: @ 8123740
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r4, 0
- movs r0, 0
- bl sub_8123FBC
- ldr r0, _08123854 @ =gSpriteCoordOffsetX
- strh r4, [r0]
- movs r0, 0
- bl sub_807C9B4
- add r7, sp, 0x4
- ldr r0, _08123858 @ =gWeatherPtr
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0xF0
- movs r2, 0
-_08123766:
- lsls r0, r4, 2
- adds r0, r1, r0
- str r2, [r0]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _08123766
- bl ResetTasks
- bl ResetSpriteData
- bl ResetPaletteFade
- ldr r2, _0812385C @ =gSharedMem
- movs r3, 0x80
- lsls r3, 10
- movs r5, 0
- ldr r1, _08123860 @ =0x040000d4
- movs r4, 0x80
- lsls r4, 5
- ldr r6, _08123864 @ =0x85000400
- movs r0, 0x85
- lsls r0, 24
- mov r12, r0
-_08123798:
- str r5, [sp]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r6, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r4
- subs r3, r4
- cmp r3, r4
- bhi _08123798
- str r5, [sp]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 2
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- ldr r1, _08123868 @ =gUnknown_02039274
- movs r0, 0
- str r0, [r1]
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- adds r2, r7, 0
- movs r6, 0
- ldr r1, _08123860 @ =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r0, _0812386C @ =0x81000800
- mov r12, r0
- movs r0, 0x81
- lsls r0, 24
- mov r8, r0
-_081237E0:
- strh r6, [r2]
- str r2, [r1]
- str r3, [r1, 0x4]
- mov r0, r12
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _081237E0
- strh r6, [r7]
- str r7, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r8
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp]
- ldr r2, _08123860 @ =0x040000d4
- mov r1, sp
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r0, 0xA0
- lsls r0, 19
- strh r4, [r7]
- str r7, [r2]
- str r0, [r2, 0x4]
- lsrs r3, 1
- movs r0, 0x81
- lsls r0, 24
- orrs r3, r0
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- bl warp_in
- ldr r0, _08123870 @ =gFieldCallback
- str r4, [r0]
- ldr r0, _08123874 @ =CB2_LoadMap
- bl SetMainCallback2
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08123854: .4byte gSpriteCoordOffsetX
-_08123858: .4byte gWeatherPtr
-_0812385C: .4byte gSharedMem
-_08123860: .4byte 0x040000d4
-_08123864: .4byte 0x85000400
-_08123868: .4byte gUnknown_02039274
-_0812386C: .4byte 0x81000800
-_08123870: .4byte gFieldCallback
-_08123874: .4byte CB2_LoadMap
- thumb_func_end sub_8123740
-
- thumb_func_start sub_8123878
-sub_8123878: @ 8123878
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- ldr r5, _081238A4 @ =gUnknown_02039274
- ldr r3, [r5]
- ldrh r0, [r3, 0x6]
- adds r0, 0x1
- strh r0, [r3, 0x6]
- ldrb r2, [r3, 0x1]
- adds r7, r5, 0
- cmp r2, 0x2
- beq _0812397E
- cmp r2, 0x2
- bgt _081238A8
- cmp r2, 0
- beq _081238B6
- cmp r2, 0x1
- beq _081238D0
- b _081239D6
- .align 2, 0
-_081238A4: .4byte gUnknown_02039274
-_081238A8:
- cmp r2, 0x3
- bne _081238AE
- b _081239A4
-_081238AE:
- cmp r2, 0xFF
- bne _081238B4
- b _081239BC
-_081238B4:
- b _081239D6
-_081238B6:
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r3, 0x4]
- cmp r0, r1
- beq _081238C2
- b _081239D6
-_081238C2:
- ldrb r0, [r3, 0x2]
- bl DoWeatherEffect
- ldr r1, [r5]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- b _081239D6
-_081238D0:
- ldrb r0, [r3, 0x2]
- cmp r0, 0x2
- beq _08123924
- cmp r0, 0x7
- beq _081238DC
- b _081239D6
-_081238DC:
- ldr r0, _08123920 @ =gWeatherPtr
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0xF0
- ldr r0, [r2]
- cmp r0, 0
- beq _081239D6
- ldrb r1, [r0, 0x5]
- movs r0, 0xC
- ands r0, r1
- cmp r0, 0
- beq _081239D6
- adds r3, r2, 0
- movs r5, 0xD
- negs r5, r5
-_081238FA:
- lsls r0, r4, 2
- adds r0, r3, r0
- ldr r2, [r0]
- cmp r2, 0
- beq _0812390C
- ldrb r1, [r2, 0x5]
- adds r0, r5, 0
- ands r0, r1
- strb r0, [r2, 0x5]
-_0812390C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _081238FA
- ldr r1, [r7]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- b _081239D6
- .align 2, 0
-_08123920: .4byte gWeatherPtr
-_08123924:
- ldr r0, _08123938 @ =gWeatherPtr
- ldr r2, [r0]
- movs r1, 0xDA
- lsls r1, 3
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0812393C
- strb r0, [r3, 0x1]
- b _081239D6
- .align 2, 0
-_08123938: .4byte gWeatherPtr
-_0812393C:
- ldrh r1, [r3, 0x6]
- ldrh r0, [r3, 0x4]
- adds r0, 0x8
- cmp r1, r0
- blt _081239D6
- adds r6, r2, 0
- adds r6, 0xF0
- movs r5, 0x1
- movs r7, 0x5
- negs r7, r7
-_08123950:
- lsls r0, r4, 2
- adds r0, r6, r0
- ldr r0, [r0]
- cmp r0, 0
- beq _08123972
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsls r1, r2, 29
- lsrs r1, 31
- eors r1, r5
- ands r1, r5
- lsls r1, 2
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
-_08123972:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x13
- bls _08123950
- b _081239D6
-_0812397E:
- lsls r1, r0, 16
- ldr r0, _081239A0 @ =0x023a0000
- cmp r1, r0
- bne _081239D6
- movs r0, 0x3
- strb r0, [r3, 0x1]
- subs r0, 0x4
- str r4, [sp]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x4
- bl FadeOutBGM
- b _081239D6
- .align 2, 0
-_081239A0: .4byte 0x023a0000
-_081239A4:
- ldr r0, _081239B8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081239D6
- movs r0, 0xFF
- strb r0, [r3, 0x1]
- b _081239D6
- .align 2, 0
-_081239B8: .4byte gPaletteFade
-_081239BC:
- movs r0, 0
- bl SetVBlankCallback
- adds r0, r6, 0
- bl DestroyTask
- ldr r0, [r5]
- ldrb r0, [r0]
- bl DestroyTask
- ldr r0, _081239E0 @ =sub_8123740
- bl SetMainCallback2
-_081239D6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081239E0: .4byte sub_8123740
- thumb_func_end sub_8123878
-
- 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 @ =gSharedMem + 0x199D8
- 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 gSharedMem + 0x199D8
-_08123AF4: .4byte gSpriteCoordOffsetX
- thumb_func_end sub_81239E4
-
- 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 @ =gSharedMem + 0x199D8
- 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 gSharedMem + 0x199D8
-_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 @ =gWeatherPtr
- 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 gWeatherPtr
-_08123C3C: .4byte 0x000006fc
- thumb_func_end sub_8123AF8
-
- thumb_func_start sub_8123C40
-sub_8123C40: @ 8123C40
- push {r4,lr}
- ldr r1, _08123C9C @ =0x040000d4
- ldr r0, _08123CA0 @ =gUnknown_02039274
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0xFC
- str r0, [r1]
- ldr r0, _08123CA4 @ =0x0600e000
- str r0, [r1, 0x4]
- ldr r3, _08123CA8 @ =0x80000400
- str r3, [r1, 0x8]
- ldr r0, [r1, 0x8]
- ldr r4, _08123CAC @ =0x000008fc
- adds r0, r2, r4
- str r0, [r1]
- ldr r0, _08123CB0 @ =0x0600f800
- str r0, [r1, 0x4]
- str r3, [r1, 0x8]
- ldr r0, [r1, 0x8]
- subs r1, 0xB8
- ldrb r0, [r2, 0x14]
- strh r0, [r1]
- adds r1, 0x2
- ldrb r0, [r2, 0x15]
- strh r0, [r1]
- subs r1, 0xA
- ldrb r0, [r2, 0xC]
- strh r0, [r1]
- adds r1, 0x2
- ldrb r0, [r2, 0xD]
- strh r0, [r1]
- subs r1, 0x6
- ldrb r0, [r2, 0x8]
- strh r0, [r1]
- adds r1, 0x2
- ldrb r0, [r2, 0x9]
- strh r0, [r1]
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08123C9C: .4byte 0x040000d4
-_08123CA0: .4byte gUnknown_02039274
-_08123CA4: .4byte 0x0600e000
-_08123CA8: .4byte 0x80000400
-_08123CAC: .4byte 0x000008fc
-_08123CB0: .4byte 0x0600f800
- thumb_func_end sub_8123C40
-
- thumb_func_start nullsub_76
-nullsub_76: @ 8123CB4
- bx lr
- thumb_func_end nullsub_76
-
- thumb_func_start sub_8123CB8
-sub_8123CB8: @ 8123CB8
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _08123D20 @ =gUnknown_02039274
- ldr r6, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0xFF
- beq _08123D84
- ldr r0, _08123D24 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _08123D34
- movs r0, 0x6
- ldrsh r4, [r6, r0]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123CE2
- ldr r1, _08123D28 @ =0x47800000
- bl __addsf3
-_08123CE2:
- ldr r1, _08123D2C @ =0x3e0f5c29
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x2E]
- subs r1, r0
- strh r1, [r5, 0x20]
- movs r1, 0x6
- ldrsh r4, [r6, r1]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123D0A
- ldr r1, _08123D28 @ =0x47800000
- bl __addsf3
-_08123D0A:
- ldr r1, _08123D30 @ =0x3d89374c
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- subs r1, r0
- strh r1, [r5, 0x22]
- b _08123D84
- .align 2, 0
-_08123D20: .4byte gUnknown_02039274
-_08123D24: .4byte gSpecialVar_0x8004
-_08123D28: .4byte 0x47800000
-_08123D2C: .4byte 0x3e0f5c29
-_08123D30: .4byte 0x3d89374c
-_08123D34:
- movs r0, 0x6
- ldrsh r4, [r6, r0]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123D48
- ldr r1, _08123D8C @ =0x47800000
- bl __addsf3
-_08123D48:
- ldr r1, _08123D90 @ =0x3e0f5c29
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x2E]
- adds r0, r1
- strh r0, [r5, 0x20]
- movs r0, 0x6
- ldrsh r4, [r6, r0]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123D70
- ldr r1, _08123D8C @ =0x47800000
- bl __addsf3
-_08123D70:
- ldr r1, _08123D94 @ =0x3d89374c
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- adds r0, r1
- strh r0, [r5, 0x22]
-_08123D84:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08123D8C: .4byte 0x47800000
-_08123D90: .4byte 0x3e0f5c29
-_08123D94: .4byte 0x3d89374c
- thumb_func_end sub_8123CB8
-
- thumb_func_start sub_8123D98
-sub_8123D98: @ 8123D98
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _08123E04 @ =gUnknown_02039274
- ldr r6, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0xFF
- bne _08123DA8
- b _08123EB0
-_08123DA8:
- ldr r0, _08123E08 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _08123E18
- movs r0, 0x6
- ldrsh r4, [r6, r0]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123DC4
- ldr r1, _08123E0C @ =0x47800000
- bl __addsf3
-_08123DC4:
- ldr r1, _08123E10 @ =0x3e0f5c29
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x2E]
- subs r1, r0
- strh r1, [r5, 0x20]
- movs r1, 0x6
- ldrsh r4, [r6, r1]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123DEC
- ldr r1, _08123E0C @ =0x47800000
- bl __addsf3
-_08123DEC:
- ldr r1, _08123E14 @ =0x3d89374c
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- subs r1, r0
- strh r1, [r5, 0x22]
- b _08123E68
- .align 2, 0
-_08123E04: .4byte gUnknown_02039274
-_08123E08: .4byte gSpecialVar_0x8004
-_08123E0C: .4byte 0x47800000
-_08123E10: .4byte 0x3e0f5c29
-_08123E14: .4byte 0x3d89374c
-_08123E18:
- movs r0, 0x6
- ldrsh r4, [r6, r0]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123E2C
- ldr r1, _08123E8C @ =0x47800000
- bl __addsf3
-_08123E2C:
- ldr r1, _08123E90 @ =0x3e0f5c29
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x2E]
- adds r0, r1
- strh r0, [r5, 0x20]
- movs r0, 0x6
- ldrsh r4, [r6, r0]
- adds r0, r4, 0
- bl __floatsisf
- cmp r4, 0
- bge _08123E54
- ldr r1, _08123E8C @ =0x47800000
- bl __addsf3
-_08123E54:
- ldr r1, _08123E94 @ =0x3d89374c
- bl __mulsf3
- bl __fixunssfsi
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- adds r0, r1
- strh r0, [r5, 0x22]
-_08123E68:
- movs r0, 0x32
- ldrsh r2, [r5, r0]
- cmp r2, 0
- bne _08123E98
- movs r0, 0x11
- strh r0, [r5, 0x26]
- ldrh r0, [r5, 0x34]
- adds r1, r0, 0x1
- strh r1, [r5, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _08123EB0
- strh r2, [r5, 0x34]
- ldrh r0, [r5, 0x32]
- adds r0, 0x1
- strh r0, [r5, 0x32]
- b _08123EB0
- .align 2, 0
-_08123E8C: .4byte 0x47800000
-_08123E90: .4byte 0x3e0f5c29
-_08123E94: .4byte 0x3d89374c
-_08123E98:
- movs r2, 0
- movs r0, 0x10
- strh r0, [r5, 0x26]
- ldrh r0, [r5, 0x34]
- adds r1, r0, 0x1
- strh r1, [r5, 0x34]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _08123EB0
- strh r2, [r5, 0x34]
- strh r2, [r5, 0x32]
-_08123EB0:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8123D98
-
- thumb_func_start sub_8123EB8
-sub_8123EB8: @ 8123EB8
- push {lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _08123EE8
- adds r0, r2, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 1
- ldrh r3, [r2, 0x20]
- adds r0, r3
- strh r0, [r2, 0x20]
- 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]
-_08123EE8:
- 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 _08123F3E
- movs r0, 0x30
- ldrsh r1, [r2, r0]
- cmp r1, 0
- beq _08123F08
- cmp r1, 0x1
- beq _08123F12
- b _08123F30
-_08123F08:
- ldrh r0, [r2, 0x20]
- adds r0, 0x1
- strh r0, [r2, 0x20]
- ldrh r0, [r2, 0x2E]
- b _08123F22
-_08123F12:
- ldrh r0, [r2, 0x2E]
- ands r0, r1
- cmp r0, 0
- beq _08123F30
- ldrh r0, [r2, 0x20]
- adds r0, 0x1
- strh r0, [r2, 0x20]
- ldrh r0, [r2, 0x20]
-_08123F22:
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08123F30
- ldrh r0, [r2, 0x22]
- adds r0, 0x1
- strh r0, [r2, 0x22]
-_08123F30:
- movs r1, 0x22
- ldrsh r0, [r2, r1]
- cmp r0, 0xA0
- ble _08123F3E
- adds r0, r2, 0
- bl DestroySprite
-_08123F3E:
- pop {r0}
- bx r0
- thumb_func_end sub_8123EB8
-
- 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}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08123FCA
- cmp r0, 0x1
- beq _08124024
-_08123FCA:
- ldr r1, _08124020 @ =REG_WININ
- movs r0, 0
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- subs r1, 0xA
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- subs r1, 0x46
- strh r0, [r1]
- adds r1, 0xE
- strh r0, [r1]
- subs r1, 0x2
- strh r0, [r1]
- subs r1, 0x2
- strh r0, [r1]
- subs r1, 0x2
- strh r0, [r1]
- adds r1, 0x14
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- subs r1, 0x6
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- subs r1, 0x6
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- subs r1, 0x6
- strh r0, [r1]
- adds r1, 0x2
- strh r0, [r1]
- adds r1, 0x3E
- strh r0, [r1]
- b _081240EE
- .align 2, 0
-_08124020: .4byte REG_WININ
-_08124024:
- ldr r0, _08124060 @ =REG_WININ
- movs r3, 0
- strh r3, [r0]
- adds r0, 0x2
- strh r3, [r0]
- subs r0, 0xA
- strh r3, [r0]
- adds r0, 0x2
- strh r3, [r0]
- adds r0, 0x2
- strh r3, [r0]
- adds r0, 0x2
- strh r3, [r0]
- ldr r0, _08124064 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _0812406C
- ldr r1, _08124068 @ =gUnknown_02039274
- ldr r2, [r1]
- movs r0, 0xB0
- strb r0, [r2, 0x14]
- ldr r2, [r1]
- movs r0, 0x10
- strb r0, [r2, 0x15]
- ldr r0, [r1]
- strb r3, [r0, 0xC]
- ldr r2, [r1]
- movs r0, 0x50
- b _08124082
- .align 2, 0
-_08124060: .4byte REG_WININ
-_08124064: .4byte gSpecialVar_0x8004
-_08124068: .4byte gUnknown_02039274
-_0812406C:
- ldr r1, _081240F4 @ =gUnknown_02039274
- ldr r2, [r1]
- movs r0, 0x60
- strb r0, [r2, 0x14]
- ldr r2, [r1]
- movs r0, 0xE8
- strb r0, [r2, 0x15]
- ldr r0, [r1]
- strb r3, [r0, 0xC]
- ldr r2, [r1]
- movs r0, 0x4
-_08124082:
- strb r0, [r2, 0xD]
- ldr r0, [r1]
- strb r3, [r0, 0x9]
- ldr r0, [r1]
- strb r3, [r0, 0x9]
- adds r2, r1, 0
- ldr r1, _081240F8 @ =REG_BG3HOFS
- ldr r2, [r2]
- ldrb r0, [r2, 0x14]
- strh r0, [r1]
- adds r1, 0x2
- ldrb r0, [r2, 0x15]
- strh r0, [r1]
- ldr r0, _081240FC @ =REG_BG2HOFS
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- ldr r1, _08124100 @ =REG_BG1HOFS
- ldrb r0, [r2, 0xC]
- strh r0, [r1]
- adds r1, 0x2
- ldrb r0, [r2, 0xD]
- strh r0, [r1]
- subs r1, 0x6
- ldrb r0, [r2, 0x8]
- strh r0, [r1]
- adds r1, 0x2
- ldrb r0, [r2, 0x9]
- strh r0, [r1]
- subs r1, 0xA
- ldr r2, _08124104 @ =0x00003c01
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r3, _08124108 @ =0x00003d02
- adds r0, r3, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r2, _0812410C @ =0x00003e03
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08124110 @ =REG_BG3CNT
- movs r3, 0xFC
- lsls r3, 6
- adds r2, r3, 0
- strh r2, [r0]
- subs r1, 0xC
- movs r3, 0xFA
- lsls r3, 5
- adds r0, r3, 0
- strh r0, [r1]
- ldr r0, _08124114 @ =REG_BLDCNT
- strh r2, [r0]
-_081240EE:
- pop {r0}
- bx r0
- .align 2, 0
-_081240F4: .4byte gUnknown_02039274
-_081240F8: .4byte REG_BG3HOFS
-_081240FC: .4byte REG_BG2HOFS
-_08124100: .4byte REG_BG1HOFS
-_08124104: .4byte 0x00003c01
-_08124108: .4byte 0x00003d02
-_0812410C: .4byte 0x00003e03
-_08124110: .4byte REG_BG3CNT
-_08124114: .4byte REG_BLDCNT
- thumb_func_end sub_8123FBC
-
- thumb_func_start sub_8124118
-sub_8124118: @ 8124118
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- ldr r1, _0812422C @ =gCableCarPlayerGraphicsIDs
- add r0, sp, 0x8
- movs r2, 0x2
- bl memcpy
- bl Random
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- add r6, sp, 0xC
- ldr r1, _08124230 @ =gMtChimneyHikerGraphicsIDs
- adds r0, r6, 0
- movs r2, 0x4
- bl memcpy
- add r5, sp, 0x10
- ldr r1, _08124234 @ =gMtChimneyHikerCoords
- adds r0, r5, 0
- movs r2, 0x8
- bl memcpy
- add r4, sp, 0x18
- ldr r1, _08124238 @ =gMtChimneyHikerMovementDelayTable
- adds r0, r4, 0
- movs r2, 0x4
- bl memcpy
- ldr r0, _0812423C @ =gUnknown_08401D9C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0x1C]
- str r1, [sp, 0x20]
- ldr r0, _08124240 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- mov r8, r6
- mov r10, r5
- cmp r0, 0
- beq _08124176
- cmp r0, 0x1
- beq _08124258
-_08124176:
- ldr r0, _08124244 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- add r0, sp
- adds r0, 0x8
- ldrb r0, [r0]
- ldr r1, _08124248 @ =sub_8123D98
- movs r2, 0x66
- str r2, [sp]
- movs r2, 0xC8
- movs r3, 0x49
- bl AddPseudoFieldObject
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x40
- beq _081241BE
- ldr r0, _0812424C @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x5]
- movs r0, 0x8
- strh r0, [r1, 0x24]
- movs r0, 0x10
- strh r0, [r1, 0x26]
- movs r0, 0xC8
- strh r0, [r1, 0x2E]
- movs r0, 0x49
- strh r0, [r1, 0x30]
-_081241BE:
- ldr r4, _08124250 @ =gSpriteTemplate_8401D40
- adds r0, r4, 0
- movs r1, 0xB0
- movs r2, 0x2B
- movs r3, 0x67
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _0812424C @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- movs r1, 0x20
- strh r1, [r0, 0x26]
- strh r1, [r0, 0x24]
- movs r1, 0xB0
- strh r1, [r0, 0x2E]
- movs r1, 0x2B
- strh r1, [r0, 0x30]
- adds r4, 0x18
- adds r0, r4, 0
- movs r1, 0xC8
- movs r2, 0x63
- movs r3, 0x65
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- movs r1, 0x8
- strh r1, [r0, 0x24]
- movs r1, 0x4
- strh r1, [r0, 0x26]
- movs r1, 0xC8
- strh r1, [r0, 0x2E]
- movs r1, 0x63
- strh r1, [r0, 0x30]
- ldr r2, _08124254 @ =gUnknown_02039274
- ldr r1, [r2]
- movs r0, 0x7
- strb r0, [r1, 0x2]
- ldr r1, [r2]
- movs r0, 0xAF
- lsls r0, 1
- strh r0, [r1, 0x4]
- movs r0, 0x2
- bl sub_807C9B4
- b _0812431E
- .align 2, 0
-_0812422C: .4byte gCableCarPlayerGraphicsIDs
-_08124230: .4byte gMtChimneyHikerGraphicsIDs
-_08124234: .4byte gMtChimneyHikerCoords
-_08124238: .4byte gMtChimneyHikerMovementDelayTable
-_0812423C: .4byte gUnknown_08401D9C
-_08124240: .4byte gSpecialVar_0x8004
-_08124244: .4byte gSaveBlock2
-_08124248: .4byte sub_8123D98
-_0812424C: .4byte gSprites
-_08124250: .4byte gSpriteTemplate_8401D40
-_08124254: .4byte gUnknown_02039274
-_08124258:
- ldr r7, _081243EC @ =gUnknown_02039274
- ldr r0, [r7]
- adds r0, 0xFC
- ldr r1, _081243F0 @ =gSharedMem + 0x19048
- movs r2, 0xC
- str r2, [sp]
- movs r2, 0x3
- str r2, [sp, 0x4]
- movs r2, 0x18
- movs r3, 0x1A
- bl sub_8124F08
- ldr r0, _081243F4 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- add r0, sp
- adds r0, 0x8
- ldrb r0, [r0]
- ldr r1, _081243F8 @ =sub_8123D98
- movs r2, 0x66
- str r2, [sp]
- movs r2, 0x80
- movs r3, 0x27
- bl AddPseudoFieldObject
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x40
- beq _081242B8
- ldr r0, _081243FC @ =gSprites
- lsls r1, r6, 4
- adds r1, r6
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x5]
- movs r0, 0x8
- strh r0, [r1, 0x24]
- movs r0, 0x10
- strh r0, [r1, 0x26]
- movs r0, 0x80
- strh r0, [r1, 0x2E]
- movs r0, 0x27
- strh r0, [r1, 0x30]
-_081242B8:
- ldr r4, _08124400 @ =gSpriteTemplate_8401D40
- adds r0, r4, 0
- movs r1, 0x68
- movs r2, 0x9
- movs r3, 0x67
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _081243FC @ =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- movs r1, 0x20
- strh r1, [r0, 0x26]
- strh r1, [r0, 0x24]
- movs r1, 0x68
- strh r1, [r0, 0x2E]
- movs r1, 0x9
- strh r1, [r0, 0x30]
- adds r4, 0x18
- adds r0, r4, 0
- movs r1, 0x80
- movs r2, 0x41
- movs r3, 0x65
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- movs r1, 0x8
- strh r1, [r0, 0x24]
- movs r1, 0x4
- strh r1, [r0, 0x26]
- movs r1, 0x80
- strh r1, [r0, 0x2E]
- movs r1, 0x41
- strh r1, [r0, 0x30]
- ldr r1, [r7]
- movs r0, 0x2
- strb r0, [r1, 0x2]
- ldr r1, [r7]
- ldr r0, _08124404 @ =0x00000109
- strh r0, [r1, 0x4]
- movs r0, 0x7
- bl sub_807C9B4
-_0812431E:
- movs r4, 0
- ldr r5, _081243FC @ =gSprites
-_08124322:
- lsls r1, r4, 20
- movs r0, 0xC0
- lsls r0, 15
- adds r1, r0
- asrs r1, 16
- lsls r2, r4, 19
- ldr r3, _08124408 @ =0xfff80000
- adds r2, r3
- asrs r2, 16
- ldr r0, _0812440C @ =gSpriteTemplate_8401D70
- movs r3, 0x68
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- movs r1, 0x8
- strh r1, [r0, 0x24]
- strh r1, [r0, 0x26]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x8
- bls _08124322
- movs r0, 0x3F
- mov r4, r9
- ands r0, r4
- cmp r0, 0
- bne _08124458
- mov r0, r9
- movs r1, 0x3
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- add r0, r8
- ldrb r0, [r0]
- ldr r5, _08124410 @ =gSpecialVar_0x8004
- ldrh r4, [r5]
- lsls r4, 2
- add r1, sp, 0x1C
- adds r1, r4, r1
- ldr r1, [r1]
- mov r3, r10
- adds r2, r3, r4
- movs r3, 0
- ldrsh r2, [r2, r3]
- mov r3, sp
- adds r3, 0x12
- adds r3, r4
- movs r4, 0
- ldrsh r3, [r3, r4]
- movs r4, 0x6A
- str r4, [sp]
- bl AddPseudoFieldObject
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x40
- beq _08124458
- ldr r1, _081243FC @ =gSprites
- lsls r2, r6, 4
- adds r0, r2, r6
- lsls r0, 2
- adds r4, r0, r1
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r0, r4, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- negs r0, r0
- strh r0, [r4, 0x24]
- adds r0, r4, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- negs r0, r0
- strh r0, [r4, 0x26]
- ldrh r0, [r5]
- mov r8, r2
- cmp r0, 0
- bne _0812441A
- movs r7, 0x1
- mov r5, r9
- ands r5, r7
- cmp r5, 0
- beq _08124414
- adds r0, r4, 0
- movs r1, 0x6
- b _08124428
- .align 2, 0
-_081243EC: .4byte gUnknown_02039274
-_081243F0: .4byte gSharedMem + 0x19048
-_081243F4: .4byte gSaveBlock2
-_081243F8: .4byte sub_8123D98
-_081243FC: .4byte gSprites
-_08124400: .4byte gSpriteTemplate_8401D40
-_08124404: .4byte 0x00000109
-_08124408: .4byte 0xfff80000
-_0812440C: .4byte gSpriteTemplate_8401D70
-_08124410: .4byte gSpecialVar_0x8004
-_08124414:
- adds r0, r4, 0
- movs r1, 0x7
- b _0812443A
-_0812441A:
- movs r7, 0x1
- mov r5, r9
- ands r5, r7
- cmp r5, 0
- beq _08124436
- adds r0, r4, 0
- movs r1, 0x7
-_08124428:
- bl StartSpriteAnim
- strh r7, [r4, 0x30]
- ldrh r0, [r4, 0x22]
- adds r0, 0x2
- strh r0, [r4, 0x22]
- b _08124440
-_08124436:
- adds r0, r4, 0
- movs r1, 0x6
-_0812443A:
- bl StartSpriteAnim
- strh r5, [r4, 0x30]
-_08124440:
- ldr r0, _08124468 @ =gSprites
- mov r2, r8
- adds r1, r2, r6
- lsls r1, 2
- adds r1, r0
- movs r0, 0x3
- mov r3, r9
- ands r0, r3
- add r0, sp
- adds r0, 0x18
- ldrb r0, [r0]
- strh r0, [r1, 0x32]
-_08124458:
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124468: .4byte gSprites
- thumb_func_end sub_8124118
-
- thumb_func_start sub_812446C
-sub_812446C: @ 812446C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r3, 0
- mov r9, r3
- ldr r2, _08124530 @ =gUnknown_02039274
- ldr r0, [r2]
- ldrb r1, [r0, 0x1B]
- adds r1, 0x2
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 26
- lsrs r0, 24
- mov r12, r0
-_0812448E:
- movs r6, 0
- lsls r0, r3, 1
- adds r1, r3, 0x3
- adds r2, r3, 0x6
- adds r4, r3, 0x1
- str r4, [sp]
- adds r0, r3
- lsls r0, 3
- mov r10, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- mov r8, r0
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 3
- str r0, [sp, 0x4]
-_081244B0:
- ldr r7, _08124530 @ =gUnknown_02039274
- ldr r5, [r7]
- lsls r3, r6, 1
- mov r0, r10
- adds r2, r3, r0
- adds r4, r5, 0
- adds r4, 0x22
- adds r2, r4, r2
- mov r1, r12
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- lsls r1, 1
- ldr r7, _08124534 @ =gSharedMem + 0x19000
- adds r1, r7
- ldrh r0, [r1]
- strh r0, [r2]
- mov r0, r8
- adds r1, r3, r0
- adds r1, r4, r1
- mov r7, r9
- lsls r2, r7, 1
- ldr r7, _08124534 @ =gSharedMem + 0x19000
- adds r0, r2, r7
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r0, [sp, 0x4]
- adds r3, r0
- adds r4, r3
- ldr r1, _08124538 @ =gSharedMem + 0x19048
- adds r2, r1
- ldrh r0, [r2]
- strh r0, [r4]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xB
- bls _081244B0
- ldr r4, [sp]
- lsls r0, r4, 24
- lsrs r3, r0, 24
- cmp r3, 0x2
- bls _0812448E
- ldrb r0, [r5, 0x1B]
- adds r0, 0x1
- movs r1, 0x3
- bl __modsi3
- strb r0, [r5, 0x1B]
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08124530: .4byte gUnknown_02039274
-_08124534: .4byte gSharedMem + 0x19000
-_08124538: .4byte gSharedMem + 0x19048
- thumb_func_end sub_812446C
-
- thumb_func_start sub_812453C
-sub_812453C: @ 812453C
- push {r4,r5,lr}
- ldr r5, _08124594 @ =gUnknown_02039274
- ldr r4, [r5]
- ldrb r0, [r4, 0x1C]
- adds r0, 0x1
- movs r1, 0x60
- bl __modsi3
- strb r0, [r4, 0x1C]
- ldr r1, [r5]
- ldrb r0, [r1, 0x1F]
- ldrb r2, [r1, 0x1D]
- subs r0, r2
- strb r0, [r1, 0x8]
- ldr r2, [r5]
- adds r0, r2, 0
- adds r0, 0x20
- ldrb r0, [r0]
- ldrb r1, [r2, 0x1E]
- subs r0, r1
- strb r0, [r2, 0x9]
- ldr r1, [r5]
- ldrb r0, [r1, 0x1D]
- adds r0, 0x1
- strb r0, [r1, 0x1D]
- ldr r2, [r5]
- ldrb r0, [r2, 0x1D]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08124580
- ldrb r0, [r2, 0x1E]
- adds r0, 0x1
- strb r0, [r2, 0x1E]
-_08124580:
- ldr r0, [r5]
- ldrb r0, [r0, 0x1D]
- cmp r0, 0x10
- bls _0812458C
- bl sub_81245F4
-_0812458C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08124594: .4byte gUnknown_02039274
- thumb_func_end sub_812453C
-
- thumb_func_start sub_8124598
-sub_8124598: @ 8124598
- push {r4,r5,lr}
- ldr r5, _081245F0 @ =gUnknown_02039274
- ldr r4, [r5]
- ldrb r0, [r4, 0x1C]
- adds r0, 0x1
- movs r1, 0x60
- bl __modsi3
- strb r0, [r4, 0x1C]
- ldr r1, [r5]
- ldrb r0, [r1, 0x1D]
- ldrb r2, [r1, 0x1F]
- adds r0, r2
- strb r0, [r1, 0x8]
- ldr r1, [r5]
- adds r2, r1, 0
- adds r2, 0x20
- ldrb r0, [r1, 0x1E]
- ldrb r2, [r2]
- adds r0, r2
- strb r0, [r1, 0x9]
- ldr r1, [r5]
- ldrb r0, [r1, 0x1D]
- adds r0, 0x1
- strb r0, [r1, 0x1D]
- ldr r2, [r5]
- ldrb r0, [r2, 0x1D]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _081245DC
- ldrb r0, [r2, 0x1E]
- adds r0, 0x1
- strb r0, [r2, 0x1E]
-_081245DC:
- ldr r0, [r5]
- ldrb r0, [r0, 0x1D]
- cmp r0, 0x10
- bls _081245E8
- bl sub_812476C
-_081245E8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081245F0: .4byte gUnknown_02039274
- thumb_func_end sub_8124598
-
- thumb_func_start sub_81245F4
-sub_81245F4: @ 81245F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r12, r0
- ldr r2, _0812475C @ =gUnknown_02039274
- ldr r0, [r2]
- mov r1, r12
- strb r1, [r0, 0x1E]
- strb r1, [r0, 0x1D]
- ldr r1, [r2]
- ldrb r0, [r1, 0x8]
- strb r0, [r1, 0x1F]
- ldr r0, [r2]
- ldrb r1, [r0, 0x9]
- adds r0, 0x20
- strb r1, [r0]
- ldr r4, [r2]
- ldrb r1, [r4, 0x19]
- adds r3, r1, 0
- adds r3, 0x1E
- adds r0, r3, 0
- mov r9, r2
- asrs r0, 5
- lsls r0, 5
- subs r0, r3, r0
- strb r0, [r4, 0x19]
- mov r2, r9
- ldr r1, [r2]
- ldrb r0, [r1, 0x18]
- subs r0, 0x2
- strb r0, [r1, 0x18]
- ldr r0, [r2]
- ldrb r1, [r0, 0x1A]
- adds r2, r1, 0
- adds r2, 0x17
- adds r0, r2, 0
- ldr r3, _08124760 @ =gUnknown_0203927A
- mov r10, r3
- asrs r0, 5
- lsls r0, 5
- subs r0, r2, r0
- mov r4, r10
- strb r0, [r4]
- ldr r7, _08124764 @ =gUnknown_02039278
- ldr r0, _08124768 @ =gUnknown_02039279
- mov r8, r0
-_08124658:
- mov r1, r9
- ldr r3, [r1]
- ldrb r0, [r3, 0x19]
- strb r0, [r7]
- mov r2, r10
- ldrb r0, [r2]
- mov r4, r12
- adds r1, r0, r4
- adds r0, r1, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r1, r0
- mov r1, r8
- strb r0, [r1]
- ldrb r2, [r7]
- lsls r2, 1
- ldrb r0, [r1]
- lsls r0, 6
- adds r2, r0
- adds r6, r3, 0
- adds r6, 0xFC
- adds r2, r6, r2
- ldrb r1, [r3, 0x18]
- lsls r1, 1
- mov r4, r12
- lsls r0, r4, 1
- add r0, r12
- lsls r5, r0, 3
- adds r1, r5
- adds r4, r3, 0
- adds r4, 0x22
- adds r1, r4, r1
- ldrh r0, [r1]
- strh r0, [r2]
- ldrb r1, [r7]
- adds r2, r1, 0x1
- adds r0, r2, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r2, r0
- strb r0, [r7]
- ldrb r1, [r7]
- lsls r1, 1
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 6
- adds r1, r0
- adds r1, r6, r1
- ldrb r0, [r3, 0x18]
- adds r0, 0x1
- lsls r0, 1
- adds r0, r5
- adds r0, r4, r0
- ldrh r0, [r0]
- strh r0, [r1]
- mov r0, r12
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- cmp r0, 0x8
- bls _08124658
- ldr r4, _08124764 @ =gUnknown_02039278
- mov r5, r9
- ldr r3, [r5]
- ldrb r1, [r3, 0x19]
- adds r2, r1, 0
- adds r2, 0x1E
- adds r0, r2, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r2, r0
- strb r0, [r4]
- adds r0, r3, 0
- adds r0, 0xFC
- ldrb r2, [r4]
- movs r1, 0x2
- str r1, [sp]
- movs r6, 0x20
- str r6, [sp, 0x4]
- movs r1, 0
- movs r3, 0
- bl sub_8124E7C
- ldr r1, [r5]
- ldrb r0, [r1, 0x18]
- cmp r0, 0
- bne _0812474C
- ldrb r2, [r1, 0x1A]
- adds r3, r2, 0
- adds r3, 0x1D
- adds r0, r3, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r3, r0
- strb r0, [r1, 0x1A]
- mov r3, r9
- ldr r1, [r3]
- movs r0, 0xC
- strb r0, [r1, 0x18]
- bl sub_812446C
- mov r4, r9
- ldr r1, [r4]
- ldrb r3, [r1, 0x1A]
- adds r4, r3, 0x1
- adds r0, r4, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r4, r0
- ldr r2, _08124764 @ =gUnknown_02039278
- strb r0, [r2]
- adds r0, r1, 0
- adds r0, 0xFC
- ldrb r3, [r2]
- str r6, [sp]
- movs r1, 0x9
- str r1, [sp, 0x4]
- movs r1, 0
- movs r2, 0
- bl sub_8124E7C
-_0812474C:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812475C: .4byte gUnknown_02039274
-_08124760: .4byte gUnknown_0203927A
-_08124764: .4byte gUnknown_02039278
-_08124768: .4byte gUnknown_02039279
- thumb_func_end sub_81245F4
-
- thumb_func_start sub_812476C
-sub_812476C: @ 812476C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r12, r0
- ldr r2, _0812489C @ =gUnknown_02039274
- ldr r0, [r2]
- mov r1, r12
- strb r1, [r0, 0x1E]
- strb r1, [r0, 0x1D]
- ldr r1, [r2]
- ldrb r0, [r1, 0x8]
- strb r0, [r1, 0x1F]
- ldr r0, [r2]
- ldrb r1, [r0, 0x9]
- adds r0, 0x20
- strb r1, [r0]
- ldr r4, [r2]
- ldrb r1, [r4, 0x19]
- adds r3, r1, 0x2
- adds r0, r3, 0
- mov r9, r2
- asrs r0, 5
- lsls r0, 5
- subs r0, r3, r0
- strb r0, [r4, 0x19]
- mov r2, r9
- ldr r1, [r2]
- ldrb r0, [r1, 0x18]
- adds r0, 0x2
- strb r0, [r1, 0x18]
- ldr r1, _081248A0 @ =gUnknown_0203927D
- ldr r0, [r2]
- ldrb r0, [r0, 0x1A]
- strb r0, [r1]
- ldr r4, _081248A4 @ =gUnknown_0203927C
- mov r10, r4
- ldr r7, _081248A8 @ =gUnknown_0203927B
- mov r8, r10
-_081247C0:
- mov r0, r9
- ldr r3, [r0]
- ldrb r0, [r3, 0x19]
- strb r0, [r7]
- ldr r1, _081248A0 @ =gUnknown_0203927D
- ldrb r0, [r1]
- mov r2, r12
- adds r1, r0, r2
- adds r0, r1, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r1, r0
- mov r4, r8
- strb r0, [r4]
- ldrb r2, [r7]
- lsls r2, 1
- ldrb r0, [r4]
- lsls r0, 6
- adds r2, r0
- adds r6, r3, 0
- adds r6, 0xFC
- adds r2, r6, r2
- ldrb r1, [r3, 0x18]
- lsls r1, 1
- mov r4, r12
- lsls r0, r4, 1
- add r0, r12
- lsls r5, r0, 3
- adds r1, r5
- adds r4, r3, 0
- adds r4, 0x22
- adds r1, r4, r1
- ldrh r0, [r1]
- strh r0, [r2]
- ldrb r1, [r7]
- adds r2, r1, 0x1
- adds r0, r2, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r2, r0
- strb r0, [r7]
- ldrb r1, [r7]
- lsls r1, 1
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 6
- adds r1, r0
- adds r1, r6, r1
- ldrb r0, [r3, 0x18]
- adds r0, 0x1
- lsls r0, 1
- adds r0, r5
- adds r0, r4, r0
- ldrh r0, [r0]
- strh r0, [r1]
- mov r0, r12
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- cmp r0, 0x8
- bls _081247C0
- mov r4, r9
- ldr r1, [r4]
- ldrb r2, [r1, 0x1A]
- adds r3, r2, 0
- adds r3, 0x17
- adds r0, r3, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r3, r0
- mov r2, r10
- strb r0, [r2]
- adds r0, r1, 0
- adds r0, 0xFC
- ldrb r2, [r1, 0x19]
- mov r1, r10
- ldrb r3, [r1]
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0x9
- str r1, [sp, 0x4]
- movs r1, 0
- bl sub_8124E7C
- ldr r1, [r4]
- ldrb r0, [r1, 0x18]
- cmp r0, 0xA
- bne _0812488C
- ldrb r2, [r1, 0x1A]
- adds r3, r2, 0x3
- adds r0, r3, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r3, r0
- strb r0, [r1, 0x1A]
- mov r2, r9
- ldr r1, [r2]
- movs r0, 0xFE
- strb r0, [r1, 0x18]
- bl sub_812446C
-_0812488C:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812489C: .4byte gUnknown_02039274
-_081248A0: .4byte gUnknown_0203927D
-_081248A4: .4byte gUnknown_0203927C
-_081248A8: .4byte gUnknown_0203927B
- thumb_func_end sub_812476C
-
- thumb_func_start sub_81248AC
-sub_81248AC: @ 81248AC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _081248BA
- cmp r0, 0x1
- beq _081248E4
-_081248BA:
- ldr r1, _081248E0 @ =gUnknown_02039274
- ldr r2, [r1]
- movs r3, 0
- movs r0, 0x2
- strb r0, [r2, 0x1B]
- ldr r0, [r1]
- strb r3, [r0, 0x19]
- ldr r2, [r1]
- movs r0, 0x14
- strb r0, [r2, 0x1A]
- ldr r1, [r1]
- movs r0, 0xC
- strb r0, [r1, 0x18]
- bl sub_812446C
- bl sub_81245F4
- b _08124906
- .align 2, 0
-_081248E0: .4byte gUnknown_02039274
-_081248E4:
- ldr r1, _08124914 @ =gUnknown_02039274
- ldr r2, [r1]
- movs r0, 0x2
- strb r0, [r2, 0x1B]
- ldr r2, [r1]
- movs r0, 0x1C
- strb r0, [r2, 0x19]
- ldr r2, [r1]
- movs r0, 0x14
- strb r0, [r2, 0x1A]
- ldr r1, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x18]
- bl sub_812446C
- bl sub_812476C
-_08124906:
- ldr r0, _08124914 @ =gUnknown_02039274
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x1C]
- pop {r0}
- bx r0
- .align 2, 0
-_08124914: .4byte gUnknown_02039274
- thumb_func_end sub_81248AC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/cable_car_util.s b/asm/cable_car_util.s
deleted file mode 100644
index 50ef19dec..000000000
--- a/asm/cable_car_util.s
+++ /dev/null
@@ -1,162 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8124E7C
-sub_8124E7C: @ 8124E7C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- ldr r0, [sp, 0x24]
- ldr r4, [sp, 0x28]
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r4, 24
- lsrs r4, 24
- mov r8, r4
- movs r0, 0
- lsrs r4, r3, 24
- cmp r0, r8
- bcs _08124EF6
-_08124EAE:
- ldr r2, [sp]
- movs r3, 0
- adds r6, r4, 0x1
- adds r0, 0x1
- mov r12, r0
- cmp r3, r7
- bcs _08124EE0
- lsls r5, r4, 6
-_08124EBE:
- lsls r0, r2, 1
- adds r0, r5
- add r0, r10
- mov r1, r9
- strh r1, [r0]
- adds r1, r2, 0x1
- adds r0, r1, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r1, r0
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r7
- bcc _08124EBE
-_08124EE0:
- adds r0, r6, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r6, r0
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r12
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, r8
- bcc _08124EAE
-_08124EF6:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8124E7C
-
- thumb_func_start sub_8124F08
-sub_8124F08: @ 8124F08
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- ldr r0, [sp, 0x24]
- ldr r4, [sp, 0x28]
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp]
- lsls r3, 24
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- lsls r4, 24
- lsrs r4, 24
- mov r9, r4
- movs r0, 0
- adds r5, r1, 0
- lsrs r4, r3, 24
- cmp r0, r9
- bcs _08124F82
-_08124F38:
- ldr r2, [sp]
- movs r3, 0
- adds r7, r4, 0x1
- adds r0, 0x1
- mov r8, r0
- cmp r3, r12
- bcs _08124F6C
- lsls r6, r4, 6
-_08124F48:
- lsls r0, r2, 1
- adds r0, r6
- add r0, r10
- ldrh r1, [r5]
- strh r1, [r0]
- adds r5, 0x2
- adds r1, r2, 0x1
- adds r0, r1, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r1, r0
- lsls r0, 24
- lsrs r2, r0, 24
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r12
- bcc _08124F48
-_08124F6C:
- adds r0, r7, 0
- asrs r0, 5
- lsls r0, 5
- subs r0, r7, r0
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r8
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, r9
- bcc _08124F38
-_08124F82:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8124F08
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/cable_car.s b/data/cable_car.s
deleted file mode 100644
index 775e53b6a..000000000
--- a/data/cable_car.s
+++ /dev/null
@@ -1,102 +0,0 @@
-#include "constants/map_objects.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gCableCarMtChimneyTilemap:: @ 8401820
- .incbin "graphics/misc/cable_car_mt_chimney_map.bin.lz"
-
- .align 2
-gCableCarTreeTilemap:: @ 8401978
- .incbin "graphics/misc/cable_car_tree_map.bin.lz"
-
- .align 2
-gCableCarMountainTilemap:: @ 8401AFC
- .incbin "graphics/misc/cable_car_mountain_map.bin.lz"
-
- .align 2
-gCableCarPylonHookTilemapEntries:: @ 8401CC0
- .2byte 0x3000
- .2byte 0x3001
- .2byte 0x3002
- .2byte 0x3003
- .2byte 0x3004
- .2byte 0x3005
- .2byte 0x3006
- .2byte 0x3007
- .2byte 0x3008
- .2byte 0x3009
-
- .align 2
-gCableCarPylonStemTilemap:: @ 8401CD4
- .incbin "graphics/misc/cable_car_pylon_stem_map.bin.lz"
-
- .align 2
-gUnknown_08401CF8:: @ 8401CF8
- obj_tiles gCableCar_Gfx, 0x800, 1
- obj_tiles gCableCarDoor_Gfx, 0x40, 2
- obj_tiles gCableCarCord_Gfx, 0x80, 3
- .space 8
-
- .align 2
-gUnknown_08401D18:: @ 8401D18
- obj_pal gCableCar_Pal, 1
- .space 8
-
- .align 2
-gOamData_8401D28:: @ 8401D28
- .2byte 0x0300
- .2byte 0xC000
- .2byte 0x0800
-
- .align 2
-gOamData_8401D30:: @ 8401D30
- .2byte 0x4300
- .2byte 0x0000
- .2byte 0x0800
-
- .align 2
-gOamData_8401D38:: @ 8401D38
- .2byte 0x0300
- .2byte 0x4000
- .2byte 0x0800
-
- .align 2
-gSpriteTemplate_8401D40:: @ 8401D40
- spr_template 1, 1, gOamData_8401D28, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8123CB8
-
- .align 2
-gSpriteTemplate_8401D58:: @ 8401D58
- spr_template 2, 1, gOamData_8401D30, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8123CB8
-
- .align 2
-gSpriteTemplate_8401D70:: @ 8401D70
- spr_template 3, 1, gOamData_8401D38, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, nullsub_76
-
-gCableCarPlayerGraphicsIDs:: @ 8401D88
- .byte MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL
- .byte MAP_OBJ_GFX_RIVAL_MAY_NORMAL
-
-gMtChimneyHikerGraphicsIDs:: @ 8401D8A
- .byte MAP_OBJ_GFX_HIKER
- .byte MAP_OBJ_GFX_CAMPER
- .byte MAP_OBJ_GFX_PICNICKER
- .byte MAP_OBJ_GFX_POOCHYENA @ not used
-
- .align 1
-gMtChimneyHikerCoords:: @ 8401D8E
- .2byte 0, 80
- .2byte 240, 146
-
-gMtChimneyHikerMovementDelayTable:: @ 8401D96
- .byte 0
- .byte 60
- .byte 120
- .byte 170
-
- .align 2
-gUnknown_08401D9C:: @ 8401D9C
- .4byte sub_8123EB8
- .4byte sub_8123F44
diff --git a/data/scripts/maps/MtChimney_CableCarStation.inc b/data/scripts/maps/MtChimney_CableCarStation.inc
index aefc68bda..6b0858bc5 100644
--- a/data/scripts/maps/MtChimney_CableCarStation.inc
+++ b/data/scripts/maps/MtChimney_CableCarStation.inc
@@ -48,7 +48,7 @@ MtChimney_CableCarStation_EventScript_15C16C:: @ 815C16C
setvar VAR_CABLE_CAR_STATION_STATE, 2
incrementgamestat GAME_STAT_RODE_CABLE_CAR
special CableCarWarp
- special sub_8123218
+ special CableCar
waitstate
release
end
diff --git a/data/scripts/maps/Route112_CableCarStation.inc b/data/scripts/maps/Route112_CableCarStation.inc
index adbea780e..0264342ea 100644
--- a/data/scripts/maps/Route112_CableCarStation.inc
+++ b/data/scripts/maps/Route112_CableCarStation.inc
@@ -49,7 +49,7 @@ Route112_CableCarStation_EventScript_15C0AD:: @ 815C0AD
setvar VAR_CABLE_CAR_STATION_STATE, 1
incrementgamestat GAME_STAT_RODE_CABLE_CAR
special CableCarWarp
- special sub_8123218
+ special CableCar
waitstate
release
end
diff --git a/data/specials.inc b/data/specials.inc
index 032a3884c..6904a2b6b 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -159,7 +159,7 @@ gSpecials::
def_special GetRivalSonDaughterString
def_special SetFlagInVar
def_special CableCarWarp
- def_special sub_8123218
+ def_special CableCar
def_special Overworld_PlaySpecialMapMusic
def_special StartWallClock
def_special ScrSpecial_ViewWallClock
diff --git a/include/cable_car_util.h b/include/cable_car_util.h
new file mode 100644
index 000000000..7126331a1
--- /dev/null
+++ b/include/cable_car_util.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CABLE_CAR_UTIL_H
+#define GUARD_CABLE_CAR_UTIL_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void CableCarUtil_FillWrapped(void *dest, u16 value, u8 x, u8 y, u8 width, u8 height);
+void CableCarUtil_CopyWrapped(void *dest, const u16 *src, u8 x, u8 y, u8 width, u8 height);
+
+#endif //GUARD_CABLE_CAR_UTIL_H
diff --git a/include/ewram.h b/include/ewram.h
index 5a350840a..41a3663f6 100755
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -185,6 +185,7 @@ extern u8 gSharedMem[];
#define ewram17000 (&gSharedMem[0x17000])
#define eLearnMoveStruct (struct LearnMoveStruct *)(gSharedMem + 0x17000)
#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000))
+#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
#define ewram17002 (&gSharedMem[0x17002])
#define eFlashFireArr (*(struct Struct2017100 *)(gSharedMem + 0x17100))
#define B_BATTLESCRIPTS_STACK ((struct scriptsStack *) (gSharedMem + 0x17110))
@@ -213,6 +214,7 @@ extern u8 gSharedMem[];
#define ewram18800 (&gSharedMem[0x18800])
#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800)
#define ewram19000 (&gSharedMem[0x19000])
+#define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000))
#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000)
#define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348))
#define ewram19348 (*(struct Struct2019348 *)(gSharedMem + 0x19348))
diff --git a/include/field_weather.h b/include/field_weather.h
index c96d4055e..267650a2a 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -163,4 +163,8 @@ bool8 sub_807DDFC(void);
void SetWeather(u32);
void UpdateWeatherPerDay(u16);
+extern struct Weather gWeather;
+
+extern struct Weather *const gWeatherPtr;
+
#endif // GUARD_WEATHER_H
diff --git a/include/gba/macro.h b/include/gba/macro.h
index d9e6739b3..dcad009e1 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -87,7 +87,7 @@
#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \
{ \
const void *_src = src; \
- void *_dest = dest; \
+ void *_dest = (void *)(dest); \
u32 _size = size; \
while (1) \
{ \
@@ -129,7 +129,7 @@
#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \
{ \
const void *_src = src; \
- void *_dest = dest; \
+ void *_dest = (void *)(dest); \
u32 _size = size; \
DmaCopy##bit(dmaNum, _src, _dest, _size); \
}
@@ -137,4 +137,34 @@
#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16)
#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32)
+#define DmaFillLarge(dmaNum, fillval, dest, size, block, bit) \
+{ \
+ void *_dest = (void *)(dest); \
+ u32 _size = (u32)(size); \
+ while (1) \
+ { \
+ DmaFill##bit(dmaNum, fillval, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) \
+ { \
+ DmaFill##bit(dmaNum, fillval, _dest, _size); \
+ break; \
+ } \
+ } \
+}
+
+#define DmaFill16Large(dmaNum, fillval, dest, size, block) DmaFillLarge(dmaNum, fillval, dest, size, block, 16)
+#define DmaFill32Large(dmaNum, fillval, dest, size, block) DmaFillLarge(dmaNum, fillval, dest, size, block, 32)
+
+#define DmaFillDefvars(dmaNum, fillval, dest, size, bit) \
+{ \
+ void *_dest = (void *)(dest); \
+ u32 _size = (u##bit)(size); \
+ DmaFill##bit(dmaNum, fillval, _dest, _size); \
+}
+
+#define DmaFill16Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 16)
+#define DmaFill32Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 32)
+
#endif // GUARD_GBA_MACRO_H
diff --git a/include/global.h b/include/global.h
index 0764718ca..eea1574b7 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.
@@ -843,5 +843,6 @@ struct HallOfFame
extern struct HallOfFame gHallOfFame;
extern struct SaveBlock2 gSaveBlock2;
+extern u8 ewram[];
#endif // GUARD_GLOBAL_H
diff --git a/include/graphics.h b/include/graphics.h
index 42e6fd5c6..00a210350 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2736,4 +2736,11 @@ extern const u8 gVersionTiles[];
extern const u16 gUnknown_08E9F624[];
extern const u8 gUnknown_08E9F7E4[];
+extern const u8 gCableCar_Gfx[];
+extern const u8 gCableCarDoor_Gfx[];
+extern const u8 gCableCarCord_Gfx[];
+extern const u16 gCableCar_Pal[];
+extern const u16 gCableCarBG_Pal[];
+extern const u8 gCableCarBG_Gfx[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/ld_script.txt b/ld_script.txt
index 5bfc8b171..9a2cbe4e5 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -347,9 +347,9 @@ SECTIONS {
src/battle/battle_controller_linkpartner.o(.text);
src/battle/battle_message.o(.text);
src/field/choose_party.o(.text);
- asm/cable_car.o(.text);
+ src/scene/cable_car.o(.text);
asm/roulette_util.o(.text);
- asm/cable_car_util.o(.text);
+ src/engine/cable_car_util.o(.text);
src/unused_8124F94.o(.text);
src/engine/save.o(.text);
src/engine/mystery_event_script.o(.text);
@@ -572,7 +572,7 @@ SECTIONS {
src/battle/battle_controller_linkpartner.o(.rodata);
src/battle/battle_message.o(.rodata);
src/field/choose_party.o(.rodata);
- data/cable_car.o(.rodata);
+ src/scene/cable_car.o(.rodata);
src/engine/save.o(.rodata);
src/field/field_effect_helpers.o(.rodata);
data/contest_ai.o(.rodata);
diff --git a/src/engine/cable_car_util.c b/src/engine/cable_car_util.c
new file mode 100644
index 000000000..02bfbc195
--- /dev/null
+++ b/src/engine/cable_car_util.c
@@ -0,0 +1,47 @@
+#include "global.h"
+#include "cable_car_util.h"
+
+// static types
+
+// static declarations
+
+// rodata
+
+// text
+
+void CableCarUtil_FillWrapped(void *dest, u16 value, u8 left, u8 top, u8 width, u8 height)
+{
+ u8 i;
+ u8 j;
+ u8 x;
+ u8 y;
+
+ for (i = 0, y = top; i < height; i++)
+ {
+ for (x = left, j = 0; j < width; j++)
+ {
+ *(u16 *)&((u8 *)dest)[y * 64 + x * 2] = value;
+ x = (x + 1) % 32;
+ }
+ y = (y + 1) % 32;
+ }
+}
+
+void CableCarUtil_CopyWrapped(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height)
+{
+ u8 i;
+ u8 j;
+ u8 x;
+ u8 y;
+ const u16 *_src;
+
+ for (i = 0, _src = src, y = top; i < height; i++)
+ {
+ for (x = left, j = 0; j < width; j++)
+ {
+ *(u16 *)&((u8 *)dest)[y * 64 + x * 2] = *_src++;
+ x = (x + 1) % 32;
+ }
+ y = (y + 1) % 32;
+ }
+}
diff --git a/src/field/field_weather.c b/src/field/field_weather.c
index 4a819bddf..c954242a1 100644
--- a/src/field/field_weather.c
+++ b/src/field/field_weather.c
@@ -46,6 +46,7 @@ const u8 DroughtPaletteData_2[] = INCBIN_U8("graphics/weather/drought2.bin.lz");
const u8 DroughtPaletteData_3[] = INCBIN_U8("graphics/weather/drought3.bin.lz");
const u8 DroughtPaletteData_4[] = INCBIN_U8("graphics/weather/drought4.bin.lz");
const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz");
+
extern u8 (*gUnknown_0202FC48)[32];
extern u8 gUnknown_0202F9E8[32];
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
new file mode 100644
index 000000000..52a0aeebf
--- /dev/null
+++ b/src/scene/cable_car.c
@@ -0,0 +1,979 @@
+
+// Includes
+#include "global.h"
+#include "ewram.h"
+#include "overworld.h"
+#include "palette.h"
+#include "random.h"
+#include "main.h"
+#include "script.h"
+#include "task.h"
+#include "sound.h"
+#include "graphics.h"
+#include "constants/songs.h"
+#include "decompress.h"
+#include "field_weather.h"
+#include "field_map_obj.h"
+#include "unknown_task.h"
+#include "event_data.h"
+#include "cable_car_util.h"
+#include "constants/map_objects.h"
+
+// Static type declarations
+
+// Credits to Made (dolphin emoji)
+#define S16TOPOSFLOAT(val) \
+({ \
+ s16 v = (val); \
+ float f = (float)v; \
+ if(v < 0) f += 65536.0f; \
+ f; \
+})
+
+struct CableCarEwramStruct1 {
+ u8 unk_0000;
+ u8 unk_0001;
+ u8 unk_0002;
+ u8 unk_0003;
+ u16 unk_0004;
+ u16 unk_0006;
+ u8 unk_0008;
+ u8 unk_0009;
+ u8 filler_000a[2];
+ u8 unk_000c;
+ u8 unk_000d;
+ u8 filler_0000e[6];
+ u8 unk_0014;
+ u8 unk_0015;
+ u8 unk_0016;
+ u8 unk_0017;
+ u8 unk_0018;
+ u8 unk_0019;
+ u8 unk_001a;
+ u8 unk_001b;
+ u8 unk_001c;
+ u8 unk_001d;
+ u8 unk_001e;
+ u8 unk_001f;
+ u8 unk_0020;
+ u16 unk_0022[9][12];
+ u8 filler_00fa[2];
+ u16 unk_00fc[0x20][0x20];
+ u16 unk_08fc[0x20][0x20];
+}; // size 0x10FC
+
+struct CableCarEwramStruct2 {
+ /* 0x000 */ u16 mtChimneyTilemap[0xb4];
+ /* 0x168 */ u16 treeTilemap[0x1e0];
+ /* 0x528 */ u16 mountainTilemap[0x258];
+ /* 0x9d8 */ u16 pylonStemTilemap[0x628]; // size not actually known
+};
+
+// Static RAM declarations
+
+EWRAM_DATA struct CableCarEwramStruct1 *sCableCarPtr = NULL;
+EWRAM_DATA u8 gUnknown_02039278 = 0;
+EWRAM_DATA u8 gUnknown_02039279 = 0;
+EWRAM_DATA u8 gUnknown_0203927A = 0;
+EWRAM_DATA u8 gUnknown_0203927B = 0;
+EWRAM_DATA u8 gUnknown_0203927C = 0;
+EWRAM_DATA u8 gUnknown_0203927D = 0;
+EWRAM_DATA u32 filler_02039280 = 0;
+
+// Static ROM declarations
+
+static void CableCarMainCallback_Setup(void);
+static void CableCarMainCallback_Run(void);
+static void sub_8123878(u8 taskId);
+static void sub_81239E4(u8 taskId);
+static void sub_8123AF8(u8 taskId);
+static void CableCarVblankCallback(void);
+static void nullsub_76(struct Sprite *sprite);
+static void sub_8123CB8(struct Sprite *sprite);
+static void sub_8123EB8(struct Sprite *sprite);
+static void sub_8123F44(struct Sprite *sprite);
+static void sub_8123FBC(u8);
+static void LoadSprites(void);
+static void sub_812453C(void);
+static void sub_8124598(void);
+static void sub_81245F4(void);
+static void sub_812476C(void);
+static void sub_81248AC(u8);
+
+// .rodata
+
+static const u8 gCableCarMtChimneyTilemap[] = INCBIN_U8("graphics/misc/cable_car_mt_chimney_map.bin.lz");
+
+static const u8 gCableCarTreeTilemap[] = INCBIN_U8("graphics/misc/cable_car_tree_map.bin.lz");
+
+static const u8 gCableCarMountainTilemap[] = INCBIN_U8("graphics/misc/cable_car_mountain_map.bin.lz");
+
+static const u16 gCableCarPylonHookTilemapEntries[] = {
+ 0x3000,
+ 0x3001,
+ 0x3002,
+ 0x3003,
+ 0x3004,
+ 0x3005,
+ 0x3006,
+ 0x3007,
+ 0x3008,
+ 0x3009
+};
+
+static const u8 gCableCarPylonStemTilemap[] = INCBIN_U8("graphics/misc/cable_car_pylon_stem_map.bin.lz");
+
+static const struct CompressedSpriteSheet gUnknown_08401CF8[] = {
+ { gCableCar_Gfx, 0x800, 1 },
+ { gCableCarDoor_Gfx, 0x40, 2 },
+ { gCableCarCord_Gfx, 0x80, 3 },
+ { }
+};
+static const struct SpritePalette gUnknown_08401D18[] = {
+ { gCableCar_Pal, 1 },
+ { }
+};
+
+static const struct OamData gOamData_8401D28 = {
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .size = 3,
+ .priority = 2
+};
+
+static const struct OamData gOamData_8401D30 = {
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .shape = ST_OAM_H_RECTANGLE,
+ .priority = 2
+};
+
+static const struct OamData gOamData_8401D38 = {
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .size = 1,
+ .priority = 2
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8401D40[] = {
+ {
+ 1,
+ 1,
+ &gOamData_8401D28,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_8123CB8
+ }, {
+ 2,
+ 1,
+ &gOamData_8401D30,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ sub_8123CB8
+ }, {
+ 3,
+ 1,
+ &gOamData_8401D38,
+ gDummySpriteAnimTable,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ nullsub_76
+ }
+};
+
+// .text
+
+static void CableCarTask1(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CableCarMainCallback_Setup);
+ DestroyTask(taskId);
+ }
+}
+
+void CableCar(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(CableCarTask1, 1);
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+}
+
+static void CableCarMainCallback_Setup(void)
+{
+ u8 i;
+ u16 imebak;
+
+ switch (gMain.state)
+ {
+ case 0:
+ default:
+ SetVBlankCallback(NULL);
+ remove_some_task();
+ DmaFill16Large(3, 0, VRAM, VRAM_SIZE, 0x1000);
+ DmaFill32Defvars(3, 0, OAM, OAM_SIZE);
+ DmaFill16Defvars(3, 0, PLTT, PLTT_SIZE);
+ sCableCarPtr = eCableCar1;
+ DmaFill16Large(3, 0, eCableCar1, 0x10FC, 0x1000);
+ gMain.state++;
+ break;
+ case 1:
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ StartWeather();
+ for (i = 0; i < 20; i++)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+ }
+ InitMapMusic();
+ ResetMapMusic();
+ gSpriteCoordOffsetX = gSpriteCoordOffsetY = 0;
+ gMain.state++;
+ break;
+ case 2:
+ for (i = 0; i < 3; i++)
+ {
+ LoadCompressedObjectPic(&gUnknown_08401CF8[i]);
+ }
+ LoadSpritePalettes(gUnknown_08401D18);
+ LZDecompressWram(gCableCarMtChimneyTilemap, eCableCar2->mtChimneyTilemap);
+ LZDecompressWram(gCableCarTreeTilemap, eCableCar2->treeTilemap);
+ LZDecompressWram(gCableCarMountainTilemap, eCableCar2->mountainTilemap);
+ LZDecompressWram(gCableCarPylonStemTilemap, eCableCar2->pylonStemTilemap);
+ LoadPalette(gCableCarBG_Pal, 0, 0x80);
+ LZ77UnCompVram(gCableCarBG_Gfx, (u16 *)BG_VRAM);
+ gMain.state++;
+ break;
+ case 3:
+ LoadSprites();
+ RunTasks();
+ gMain.state++;
+ break;
+ case 4:
+ if (sCableCarPtr->unk_0002 == 7)
+ {
+ gMain.state++;
+ }
+ else if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
+ }
+ }
+ gMain.state++;
+ }
+ break;
+ case 5:
+ CableCarUtil_CopyWrapped((void *)BG_SCREEN_ADDR(29), eCableCar2->treeTilemap, 0, 17, 32, 15);
+ CableCarUtil_CopyWrapped((void *)BG_SCREEN_ADDR(30), eCableCar2->mountainTilemap, 0, 0, 30, 20);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 20);
+ gMain.state++;
+ break;
+ case 6:
+ sub_81248AC(gSpecialVar_0x8004);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x48, 0, 14, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x6C, 12, 17, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x90, 24, 20, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 0, 17, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0, 20, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 12, 20, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 12, 23, 12, 3);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 24, 23, 12, 3);
+ gMain.state++;
+ break;
+ case 7:
+ BeginNormalPaletteFade(-1, 3, 16, 0, 0);
+ FadeInNewBGM(BGM_ROPEWAY, 1);
+ sub_8123FBC(1);
+ gMain.state++;
+ break;
+ case 8:
+ imebak = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = imebak;
+ SetVBlankCallback(CableCarVblankCallback);
+ SetMainCallback2(CableCarMainCallback_Run);
+ CreateTask(sub_8123878, 0);
+ if (gSpecialVar_0x8004 == 0)
+ {
+ sCableCarPtr->unk_0000 = CreateTask(sub_81239E4, 1);
+ }
+ else
+ {
+ sCableCarPtr->unk_0000 = CreateTask(sub_8123AF8, 1);
+ }
+ break;
+ }
+}
+
+static void CableCarMainCallback_Run(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ MapMusicMain();
+}
+
+static void sub_8123740(void)
+{
+ u8 i;
+
+ i = 0;
+ sub_8123FBC(0);
+ gSpriteCoordOffsetX = 0;
+ sub_807C9B4(0);
+ for (; i < 20; i++)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+ }
+ ResetTasks();
+ ResetSpriteData();
+ ResetPaletteFade();
+ DmaFill32Large(3, 0, gSharedMem, 0x20000, 0x1000);
+ sCableCarPtr = NULL;
+ DmaFill16Large(3, 0, VRAM, VRAM_SIZE, 0x1000);
+ DmaFill32Defvars(3, 0, OAM, OAM_SIZE);
+ DmaFill16Defvars(3, 0, PLTT, PLTT_SIZE);
+ warp_in();
+ gFieldCallback = NULL;
+ SetMainCallback2(CB2_LoadMap);
+}
+
+static void sub_8123878(u8 taskId)
+{
+ u8 i;
+
+ i = 0;
+ sCableCarPtr->unk_0006++;
+ switch (sCableCarPtr->unk_0001)
+ {
+ case 0:
+ if (sCableCarPtr->unk_0006 == sCableCarPtr->unk_0004)
+ {
+ DoWeatherEffect(sCableCarPtr->unk_0002);
+ sCableCarPtr->unk_0001 = 1;
+ }
+ break;
+ case 1:
+ switch (sCableCarPtr->unk_0002)
+ {
+ case 7:
+ if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL && gWeatherPtr->sprites.s2.ashSprites[0]->oam.priority != 0)
+ {
+ for (; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
+ }
+ }
+ sCableCarPtr->unk_0001 = 2;
+ }
+ break;
+ case 2:
+ if (gWeatherPtr->currWeather == 2)
+ {
+ sCableCarPtr->unk_0001 = 2;
+ }
+ else if (sCableCarPtr->unk_0006 >= sCableCarPtr->unk_0004 + 8)
+ {
+ for (; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i]->invisible ^= TRUE;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case 2:
+ if (sCableCarPtr->unk_0006 == 570)
+ {
+ sCableCarPtr->unk_0001 = 3;
+ BeginNormalPaletteFade(-1, 3, 0, 16, 0);
+ FadeOutBGM(4);
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ {
+ sCableCarPtr->unk_0001 = 255;
+ }
+ break;
+ case 255:
+ SetVBlankCallback(NULL);
+ DestroyTask(taskId);
+ DestroyTask(sCableCarPtr->unk_0000);
+ SetMainCallback2(sub_8123740);
+ break;
+ }
+}
+
+static void sub_81239E4(u8 taskId)
+{
+ if (sCableCarPtr->unk_0001 != 255)
+ {
+ sCableCarPtr->unk_0014--;
+ if ((sCableCarPtr->unk_0006 % 2) == 0)
+ {
+ sCableCarPtr->unk_0015--;
+ }
+ if ((sCableCarPtr->unk_0006 % 8) == 0)
+ {
+ sCableCarPtr->unk_000c--;
+ sCableCarPtr->unk_000d--;
+ }
+ switch (sCableCarPtr->unk_0014)
+ {
+ case 175:
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
+ break;
+ case 40:
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 3, 0, 2, 2);
+ break;
+ case 32:
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 2, 0, 1, 2);
+ break;
+ case 16:
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
+ sCableCarPtr->unk_0015 = 64;
+ break;
+ }
+ }
+ sub_812453C();
+ gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 1) % 128;
+}
+
+static void sub_8123AF8(u8 taskId)
+{
+ if (sCableCarPtr->unk_0001 != 255)
+ {
+ sCableCarPtr->unk_0014++;
+ if ((sCableCarPtr->unk_0006 % 2) == 0)
+ {
+ sCableCarPtr->unk_0015++;
+ }
+ if ((sCableCarPtr->unk_0006 % 8) == 0)
+ {
+ sCableCarPtr->unk_000c++;
+ sCableCarPtr->unk_000d++;
+ }
+ switch (sCableCarPtr->unk_0014)
+ {
+ case 176:
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
+ break;
+ case 16:
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 2, 0, 3, 2);
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
+ sCableCarPtr->unk_0015 = 192;
+ break;
+ case 32:
+ sCableCarPtr->unk_08fc[0][2] = (gCableCarPylonHookTilemapEntries + 2)[0];
+ sCableCarPtr->unk_08fc[0][3] = (gCableCarPylonHookTilemapEntries + 2)[1];
+ sCableCarPtr->unk_08fc[1][2] = (gCableCarPylonHookTilemapEntries + 2)[5];
+ sCableCarPtr->unk_08fc[1][3] = (gCableCarPylonHookTilemapEntries + 2)[6];
+ break;
+ case 40:
+ sCableCarPtr->unk_08fc[0][4] = (gCableCarPylonHookTilemapEntries + 4)[0];
+ sCableCarPtr->unk_08fc[1][4] = (gCableCarPylonHookTilemapEntries + 4)[5];
+ break;
+ }
+ }
+ sub_8124598();
+ if (sCableCarPtr->unk_0006 < sCableCarPtr->unk_0004) {
+ gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 247) % 248;
+ }
+ else
+ {
+ gWeatherPtr->unknown_6FC = (gWeatherPtr->unknown_6FC + 247) % 248;
+ }
+}
+
+static void CableCarVblankCallback(void)
+{
+ DmaCopy16(3, sCableCarPtr->unk_00fc, BG_SCREEN_ADDR(28), 0x800);
+ DmaCopy16(3, sCableCarPtr->unk_08fc, BG_SCREEN_ADDR(31), 0x800);
+ REG_BG3HOFS = sCableCarPtr->unk_0014;
+ REG_BG3VOFS = sCableCarPtr->unk_0015;
+ REG_BG1HOFS = sCableCarPtr->unk_000c;
+ REG_BG1VOFS = sCableCarPtr->unk_000d;
+ REG_BG0HOFS = sCableCarPtr->unk_0008;
+ REG_BG0VOFS = sCableCarPtr->unk_0009;
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void nullsub_76(struct Sprite *sprite)
+{
+
+}
+
+static void sub_8123CB8(struct Sprite *sprite)
+{
+ if (sCableCarPtr->unk_0001 != 255)
+ {
+ if (gSpecialVar_0x8004 == 0)
+ {
+ sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ }
+ else
+ {
+ sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ }
+ }
+}
+
+static void sub_8123D98(struct Sprite *sprite)
+{
+ if (sCableCarPtr->unk_0001 != 255)
+ {
+ if (gSpecialVar_0x8004 == 0)
+ {
+ sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ }
+ else
+ {
+ sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
+ }
+ switch (sprite->data[2])
+ {
+ case 0:
+ sprite->pos2.y = 17;
+ if (sprite->data[3] ++ > 9)
+ {
+ sprite->data[3] = 0;
+ sprite->data[2] ++;
+ }
+ break;
+ default:
+ sprite->pos2.y = 16;
+ if (sprite->data[3] ++ > 9)
+ {
+ sprite->data[3] = 0;
+ sprite->data[2] = 0;
+ }
+ break;
+ }
+ }
+}
+
+static void sub_8123EB8(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x += 2 * sprite->centerToCornerVecX;
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ }
+ if (++sprite->data[0] >= sprite->data[2])
+ {
+ switch (sprite->data[1])
+ {
+ case 0:
+ sprite->pos1.x++;
+ if ((sprite->data[0] % 4) == 0)
+ {
+ sprite->pos1.y++;
+ }
+ break;
+ case 1:
+ if ((sprite->data[0] % 2) != 0)
+ {
+ sprite->pos1.x++;
+ if ((sprite->pos1.x % 4) == 0)
+ {
+ sprite->pos1.y++;
+ }
+ }
+ break;
+ }
+ if (sprite->pos1.y > 0xa0)
+ {
+ DestroySprite(sprite);
+ }
+ }
+}
+
+static void sub_8123F44(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ }
+ if (++sprite->data[0] >= sprite->data[2])
+ {
+ switch (sprite->data[1])
+ {
+ case 0:
+ sprite->pos1.x--;
+ if ((sprite->data[0] % 4) == 0)
+ {
+ sprite->pos1.y--;
+ }
+ break;
+ case 1:
+ if ((sprite->data[0] % 2) != 0)
+ {
+ sprite->pos1.x--;
+ if ((sprite->pos1.x % 4) == 0)
+ {
+ sprite->pos1.y--;
+ }
+ }
+ break;
+ }
+ if (sprite->pos1.y < 0x50)
+ {
+ DestroySprite(sprite);
+ }
+ }
+}
+
+static void sub_8123FBC(bool8 which)
+{
+ switch (which)
+ {
+ case FALSE:
+ default:
+ REG_WININ = 0;
+ REG_WINOUT = 0;
+ REG_WIN0H = 0;
+ REG_WIN1H = 0;
+ REG_WIN0V = 0;
+ REG_WIN1V = 0;
+ REG_DISPCNT = 0;
+ REG_BG3CNT = 0;
+ REG_BG2CNT = 0;
+ REG_BG1CNT = 0;
+ REG_BG0CNT = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BLDCNT = 0;
+ break;
+ case TRUE:
+ REG_WININ = 0;
+ REG_WINOUT = 0;
+ REG_WIN0H = 0;
+ REG_WIN1H = 0;
+ REG_WIN0V = 0;
+ REG_WIN1V = 0;
+ if (gSpecialVar_0x8004 == 0)
+ {
+ sCableCarPtr->unk_0014 = 0xb0;
+ sCableCarPtr->unk_0015 = 0x10;
+ sCableCarPtr->unk_000c = 0x00;
+ sCableCarPtr->unk_000d = 0x50;
+ sCableCarPtr->unk_0009 = 0;
+ sCableCarPtr->unk_0009 = 0;
+ }
+ else
+ {
+ sCableCarPtr->unk_0014 = 0x60;
+ sCableCarPtr->unk_0015 = 0xe8;
+ sCableCarPtr->unk_000c = 0x00;
+ sCableCarPtr->unk_000d = 0x04;
+ sCableCarPtr->unk_0009 = 0;
+ sCableCarPtr->unk_0009 = 0;
+ }
+ REG_BG3HOFS = sCableCarPtr->unk_0014;
+ REG_BG3VOFS = sCableCarPtr->unk_0015;
+ REG_BG2HOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG1HOFS = sCableCarPtr->unk_000c;
+ REG_BG1VOFS = sCableCarPtr->unk_000d;
+ REG_BG0HOFS = sCableCarPtr->unk_0008;
+ REG_BG0VOFS = sCableCarPtr->unk_0009;
+ REG_BG0CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(28) | BGCNT_WRAP;
+ REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(29) | BGCNT_WRAP;
+ REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(30) | BGCNT_WRAP;
+ REG_BG3CNT = BGCNT_PRIORITY(0) | BGCNT_SCREENBASE(31) | BGCNT_WRAP;
+ REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
+ REG_BLDCNT = 0x3f00;
+ break;
+ }
+}
+
+static void LoadSprites(void)
+{
+ u8 spriteId;
+ u8 i;
+
+ u8 playerGraphicsIds[2] = {
+ MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL,
+ MAP_OBJ_GFX_RIVAL_MAY_NORMAL
+ };
+ u16 rval = Random();
+ u8 hikerGraphicsIds[4] = {
+ MAP_OBJ_GFX_HIKER,
+ MAP_OBJ_GFX_CAMPER,
+ MAP_OBJ_GFX_PICNICKER,
+ MAP_OBJ_GFX_POOCHYENA
+ };
+ s16 hikerCoords[2][2] = {
+ { 0, 80 },
+ { 240, 146 }
+ };
+ u8 hikerMovementDelayTable[4] = {
+ 0,
+ 60,
+ 120,
+ 170
+ };
+ void (*callbacks[2])(struct Sprite *) = {
+ sub_8123EB8,
+ sub_8123F44
+ };
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ default:
+ spriteId = AddPseudoFieldObject(playerGraphicsIds[gSaveBlock2.playerGender], sub_8123D98, 0xc8, 0x49, 0x66);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].pos2.x = 0x08;
+ gSprites[spriteId].pos2.y = 0x10;
+ gSprites[spriteId].data[0] = 0xc8;
+ gSprites[spriteId].data[1] = 0x49;
+ }
+ spriteId = CreateSprite(&gSpriteTemplate_8401D40[0], 0xb0, 0x2b, 0x67);
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 0x20;
+ gSprites[spriteId].data[0] = 0xb0;
+ gSprites[spriteId].data[1] = 0x2b;
+ spriteId = CreateSprite(&gSpriteTemplate_8401D40[1], 0xc8, 0x63, 0x65);
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 4;
+ gSprites[spriteId].data[0] = 0xc8;
+ gSprites[spriteId].data[1] = 0x63;
+ sCableCarPtr->unk_0002 = 7;
+ sCableCarPtr->unk_0004 = 0x15e;
+ sub_807C9B4(2);
+ break;
+ case 1:
+ CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0x18, 0x1a, 0x0c, 0x03);
+ spriteId = AddPseudoFieldObject(playerGraphicsIds[gSaveBlock2.playerGender], sub_8123D98, 0x80, 0x27, 0x66);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].pos2.x = 0x08;
+ gSprites[spriteId].pos2.y = 0x10;
+ gSprites[spriteId].data[0] = 0x80;
+ gSprites[spriteId].data[1] = 0x27;
+ }
+ spriteId = CreateSprite(&gSpriteTemplate_8401D40[0], 0x68, 0x09, 0x67);
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 0x20;
+ gSprites[spriteId].data[0] = 0x68;
+ gSprites[spriteId].data[1] = 0x09;
+ spriteId = CreateSprite(&gSpriteTemplate_8401D40[1], 0x80, 0x41, 0x65);
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 4;
+ gSprites[spriteId].data[0] = 0x80;
+ gSprites[spriteId].data[1] = 0x41;
+ sCableCarPtr->unk_0002 = 2;
+ sCableCarPtr->unk_0004 = 0x109;
+ sub_807C9B4(7);
+ break;
+ }
+ for (i = 0; i < 9; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_8401D40[2], 16 * i + 0x60, 8 * i - 8, 0x68);
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 8;
+ }
+ if ((rval % 64) == 0)
+ {
+ spriteId = AddPseudoFieldObject(hikerGraphicsIds[rval % 3], callbacks[gSpecialVar_0x8004], hikerCoords[gSpecialVar_0x8004][0], hikerCoords[gSpecialVar_0x8004][1], 0x6a);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].centerToCornerVecX;
+ gSprites[spriteId].pos2.y = -gSprites[spriteId].centerToCornerVecY;
+ if (gSpecialVar_0x8004 == 0)
+ {
+ if (rval % 2)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 6);
+ gSprites[spriteId].data[1] = 1;
+ gSprites[spriteId].pos1.y += 2;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 7);
+ gSprites[spriteId].data[1] = 0;
+ }
+ }
+ else
+ {
+ if (rval % 2)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 7);
+ gSprites[spriteId].data[1] = 1;
+ gSprites[spriteId].pos1.y += 2;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 6);
+ gSprites[spriteId].data[1] = 0;
+ }
+ }
+ gSprites[spriteId].data[2] = hikerMovementDelayTable[rval % 4];
+ }
+ }
+}
+
+static void sub_812446C(void)
+{
+ u8 i;
+ u8 j;
+ u8 k;
+ u8 offset;
+
+ for (i = 0, k = 0, offset = 0x24 * (sCableCarPtr->unk_001b + 2); i < 3; i++)
+ {
+ for (j = 0; j < 12; j++)
+ {
+ sCableCarPtr->unk_0022[i][j] = *(eCableCar2->mtChimneyTilemap + (offset++));
+ sCableCarPtr->unk_0022[i + 3][j] = eCableCar2->mtChimneyTilemap[k];
+ sCableCarPtr->unk_0022[i + 6][j] = (eCableCar2->mtChimneyTilemap + 0x24)[k];
+ k++;
+ }
+ }
+ sCableCarPtr->unk_001b = (sCableCarPtr->unk_001b + 1) % 3;
+}
+
+static void sub_812453C(void)
+{
+ sCableCarPtr->unk_001c = (sCableCarPtr->unk_001c + 1) % 0x60;
+ sCableCarPtr->unk_0008 = sCableCarPtr->unk_001f - sCableCarPtr->unk_001d;
+ sCableCarPtr->unk_0009 = sCableCarPtr->unk_0020 - sCableCarPtr->unk_001e;
+ sCableCarPtr->unk_001d++;
+ if ((sCableCarPtr->unk_001d % 4) == 0)
+ {
+ sCableCarPtr->unk_001e++;
+ }
+ if (sCableCarPtr->unk_001d > 16)
+ {
+ sub_81245F4();
+ }
+}
+
+static void sub_8124598(void)
+{
+ sCableCarPtr->unk_001c = (sCableCarPtr->unk_001c + 1) % 0x60;
+ sCableCarPtr->unk_0008 = sCableCarPtr->unk_001f + sCableCarPtr->unk_001d;
+ sCableCarPtr->unk_0009 = sCableCarPtr->unk_0020 + sCableCarPtr->unk_001e;
+ sCableCarPtr->unk_001d++;
+ if ((sCableCarPtr->unk_001d % 4) == 0)
+ {
+ sCableCarPtr->unk_001e++;
+ }
+ if (sCableCarPtr->unk_001d > 16)
+ {
+ sub_812476C();
+ }
+}
+
+static void sub_81245F4(void)
+{
+ u8 i = 0;
+
+ sCableCarPtr->unk_001d = sCableCarPtr->unk_001e = 0;
+ sCableCarPtr->unk_001f = sCableCarPtr->unk_0008;
+ sCableCarPtr->unk_0020 = sCableCarPtr->unk_0009;
+ sCableCarPtr->unk_0019 = (sCableCarPtr->unk_0019 + 30) % 32;
+ sCableCarPtr->unk_0018 -= 2;
+ gUnknown_0203927A = (sCableCarPtr->unk_001a + 23) % 32;
+ for (i = 0; i < 9; i++)
+ {
+ gUnknown_02039278 = sCableCarPtr->unk_0019;
+ gUnknown_02039279 = (gUnknown_0203927A + i) % 32;
+ sCableCarPtr->unk_00fc[gUnknown_02039279][gUnknown_02039278] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018];
+ gUnknown_02039278 = (gUnknown_02039278 + 1) % 32;
+ sCableCarPtr->unk_00fc[gUnknown_02039279][gUnknown_02039278] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018 + 1];
+ }
+ gUnknown_02039278 = (sCableCarPtr->unk_0019 + 30) % 32;
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, gUnknown_02039278, 0, 2, 32);
+ if (sCableCarPtr->unk_0018 == 0)
+ {
+ sCableCarPtr->unk_001a = (sCableCarPtr->unk_001a + 29) % 32;
+ sCableCarPtr->unk_0018 = 12;
+ sub_812446C();
+ gUnknown_02039278 = (sCableCarPtr->unk_001a + 1) % 32;
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, 0, gUnknown_02039278, 32, 9);
+ }
+}
+
+static void sub_812476C(void)
+{
+ u8 i = 0;
+
+ sCableCarPtr->unk_001d = sCableCarPtr->unk_001e = 0;
+ sCableCarPtr->unk_001f = sCableCarPtr->unk_0008;
+ sCableCarPtr->unk_0020 = sCableCarPtr->unk_0009;
+ sCableCarPtr->unk_0019 = (sCableCarPtr->unk_0019 + 2) % 32;
+ sCableCarPtr->unk_0018 += 2;
+ gUnknown_0203927D = sCableCarPtr->unk_001a;
+ for (i = 0; i < 9; i++)
+ {
+ gUnknown_0203927B = sCableCarPtr->unk_0019;
+ gUnknown_0203927C = (gUnknown_0203927D + i) % 32;
+ sCableCarPtr->unk_00fc[gUnknown_0203927C][gUnknown_0203927B] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018];
+ gUnknown_0203927B = (gUnknown_0203927B + 1) % 32;
+ sCableCarPtr->unk_00fc[gUnknown_0203927C][gUnknown_0203927B] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018 + 1];
+ }
+ gUnknown_0203927C = (sCableCarPtr->unk_001a + 23) % 32;
+ CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, sCableCarPtr->unk_0019, gUnknown_0203927C, 2, 9);
+ if (sCableCarPtr->unk_0018 == 10)
+ {
+ sCableCarPtr->unk_001a = (sCableCarPtr->unk_001a + 3) % 32;
+ sCableCarPtr->unk_0018 = 0xfe;
+ sub_812446C();
+ }
+}
+
+static void sub_81248AC(u8 a0)
+{
+ switch (a0)
+ {
+ case 0:
+ default:
+ sCableCarPtr->unk_001b = 2;
+ sCableCarPtr->unk_0019 = 0;
+ sCableCarPtr->unk_001a = 20;
+ sCableCarPtr->unk_0018 = 12;
+ sub_812446C();
+ sub_81245F4();
+ break;
+ case 1:
+ sCableCarPtr->unk_001b = 2;
+ sCableCarPtr->unk_0019 = 28;
+ sCableCarPtr->unk_001a = 20;
+ sCableCarPtr->unk_0018 = 4;
+ sub_812446C();
+ sub_812476C();
+ break;
+ }
+ sCableCarPtr->unk_001c = 0;
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 6f7be47c1..cffa8396d 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -580,31 +580,7 @@ gAbilitiesPerBank: @ 203926C
.space 0x4
.include "src/field/choose_party.o"
-
-@ cable_car
-
- .align 2
-gUnknown_02039274: @ 2039274
- .space 0x4
-
-gUnknown_02039278: @ 2039278
- .space 0x1
-
-gUnknown_02039279: @ 2039279
- .space 0x1
-
-gUnknown_0203927A: @ 203927A
- .space 0x1
-
-gUnknown_0203927B: @ 203927B
- .space 0x1
-
-gUnknown_0203927C: @ 203927C
- .space 0x1
-
-gUnknown_0203927D: @ 203927D
- .space 0x7
-
+ .include "src/scene/cable_car.o"
.include "src/engine/save.o"
.include "src/engine/mystery_event_script.o"
.include "src/field/roamer.o"