diff options
-rw-r--r-- | asm/cable_car.s | 2880 | ||||
-rw-r--r-- | asm/cable_car_util.s | 162 | ||||
-rw-r--r-- | data/cable_car.s | 102 | ||||
-rw-r--r-- | data/scripts/maps/MtChimney_CableCarStation.inc | 2 | ||||
-rw-r--r-- | data/scripts/maps/Route112_CableCarStation.inc | 2 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/cable_car_util.h | 13 | ||||
-rwxr-xr-x | include/ewram.h | 2 | ||||
-rw-r--r-- | include/field_weather.h | 4 | ||||
-rw-r--r-- | include/gba/macro.h | 34 | ||||
-rw-r--r-- | include/global.h | 7 | ||||
-rw-r--r-- | include/graphics.h | 7 | ||||
-rw-r--r-- | ld_script.txt | 6 | ||||
-rw-r--r-- | src/engine/cable_car_util.c | 47 | ||||
-rw-r--r-- | src/field/field_weather.c | 1 | ||||
-rw-r--r-- | src/scene/cable_car.c | 979 | ||||
-rw-r--r-- | sym_ewram.txt | 26 |
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" |