diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-14 22:16:21 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-10-14 22:16:21 -0400 |
commit | 80985df175f67ea1b90772d2d82c5f97bda44106 (patch) | |
tree | 85a1aba4ad51072a26441ff6c1a7dd4cb34c72c8 /src | |
parent | 8c54cccc993ab617ac8bbfb1fc6347484640c441 (diff) |
sub_8123244
Diffstat (limited to 'src')
-rw-r--r-- | src/field/field_weather.c | 48 | ||||
-rw-r--r-- | src/scene/cable_car.c | 204 |
2 files changed, 204 insertions, 48 deletions
diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 443a38357..8dcfd62fa 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -4,54 +4,6 @@ #include "sprite.h" #include "task.h" -struct Weather -{ - u8 filler_000[0x200]; - u8 unknown_200[2][32]; - u8 filler_240[0x480]; - s8 unknown_6C0; - s8 unknown_6C1; - u8 unknown_6C2; - u8 unknown_6C3; - u16 unknown_6C4; - u8 unknown_6C6; - u8 unknown_6C7; - u8 unknown_6C8; - u8 unknown_6C9; - u8 unknown_6CA; - u8 unknown_6CB; - u8 filler_6CC[2]; - u16 unknown_6CE; - u8 unknown_6D0; - u8 unknown_6D1; - u8 filler_6D2[1]; - u8 unknown_6D3; - u8 unknown_6D4; - u8 unknown_6D5; - u8 filler_6D6[2]; - u8 unknown_6D8; - u8 filler_6D9[1]; - u8 unknown_6DA; - u8 filler_6DB[3]; - u8 unknown_6DE; - u8 filler_6DF[5]; - u8 unknown_6E4; - u8 filler_6E5[0x15]; - u8 unknown_6FA; - u8 unknown_6FB; - u8 filler_6FC[4]; - u8 unknown_700; - u8 filler_701[0x15]; - u8 unknown_716; - u8 unknown_717; - u8 filler_718[0xc]; - u8 unknown_724; - u8 filler_725[9]; - u8 unknown_72E; -}; - -#define gWeather gUnknown_0202F7E8 -extern struct Weather gWeather; extern u8 *gUnknown_083970E8; extern u8 (*gUnknown_08396FC8[][4])(void); extern u8 (*gUnknown_083970B8[])(void); diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c index 1b5d22221..0f3726e3a 100644 --- a/src/scene/cable_car.c +++ b/src/scene/cable_car.c @@ -3,18 +3,101 @@ #include "global.h" #include "palette.h" #include "main.h" +#include "script.h" #include "task.h" +#include "sound.h" +#include "songs.h" +#include "decompress.h" +#include "field_weather.h" +#include "unknown_task.h" +#include "event_data.h" +#include "cable_car_util.h" // Static type declarations +struct Unk_2017000 { + u8 unk_0000; + u8 unk_0001; + u8 unk_0002; + u8 filler_0003[0xf9]; + u16 unk_00fc[0x400]; + u16 unk_08fc[0x400]; +}; // size 0x10FC + +struct Unk_2019000 { + /* 0x000 */ u16 mtChimneyTilemap[0xb4]; + /* 0x168 */ u16 treeTilemap[0x1e0]; + /* 0x528 */ u16 mountainTilemap[0x258]; + /* 0x9d8 */ u16 pylonStemTilemap[0x628]; // size not actually known +}; + +#define ewram_17000 (*(struct Unk_2017000 *)(ewram + 0x17000)) +#define ewram_19000 (*(struct Unk_2019000 *)(ewram + 0x19000)) + // Static RAM declarations +EWRAM_DATA struct Unk_2017000 *gUnknown_02039274 = 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 void sub_8123244(void); +void sub_8124118(void); +void sub_81248AC(u8); +void sub_8123FBC(u8); +void sub_8123C40(void); +void sub_8123724(void); +void sub_8123878(u8 taskId); +void sub_81239E4(u8 taskId); +void sub_8123AF8(u8 taskId); // .rodata +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[]; + +const u8 gCableCarMtChimneyTilemap[] = INCBIN_U8("graphics/misc/cable_car_mt_chimney_map.bin.lz"); + +const u8 gCableCarTreeTilemap[] = INCBIN_U8("graphics/misc/cable_car_tree_map.bin.lz"); + +const u8 gCableCarMountainTilemap[] = INCBIN_U8("graphics/misc/cable_car_mountain_map.bin.lz"); + +const u16 gCableCarPylonHookTilemapEntries[] = { + 0x3000, + 0x3001, + 0x3002, + 0x3003, + 0x3004, + 0x3005, + 0x3006, + 0x3007, + 0x3008, + 0x3009 +}; + +const u8 gCableCarPylonStemTilemap[] = INCBIN_U8("graphics/misc/cable_car_pylon_stem_map.bin.lz"); + +const struct CompressedSpriteSheet gUnknown_08401CF8[] = { + { gCableCar_Gfx, 0x800, 1 }, + { gCableCarDoor_Gfx, 0x40, 2 }, + { gCableCarCord_Gfx, 0x80, 3 }, + { } +}; +const struct SpritePalette gUnknown_08401D18[] = { + { gCableCar_Pal, 1 }, + { } +}; + // .text void sub_81231EC(u8 taskId) @@ -25,3 +108,124 @@ void sub_81231EC(u8 taskId) DestroyTask(taskId); } } + +void sub_8123218(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_81231EC, 1); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); +} + +void sub_8123244(void) +{ + u8 i; + u16 imebak; + + switch (gMain.state) + { + case 0: + default: + SetVBlankCallback(NULL); + remove_some_task(); + DmaFill16Large(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE); + gUnknown_02039274 = &ewram_17000; + DmaFill16Large(3, 0, &ewram_17000, 0x10FC, 0x1000); + gMain.state ++; + break; + case 1: + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + sub_807C828(); + for (i = 0; i < 20; i ++) + { + gUnknown_08396FC4->unk_0f0[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, ewram_19000.mtChimneyTilemap); + LZDecompressWram(gCableCarTreeTilemap, ewram_19000.treeTilemap); + LZDecompressWram(gCableCarMountainTilemap, ewram_19000.mountainTilemap); + LZDecompressWram(gCableCarPylonStemTilemap, ewram_19000.pylonStemTilemap); + LoadPalette(gCableCarBG_Pal, 0, 0x80); + LZ77UnCompVram(gCableCarBG_Gfx, (u16 *)BG_VRAM); + gMain.state ++; + break; + case 3: + sub_8124118(); + RunTasks(); + gMain.state ++; + break; + case 4: + if (gUnknown_02039274->unk_0002 == 7) + { + gMain.state ++; + } + else if (gUnknown_08396FC4->unk_0f0[0] != NULL) + { + for (i = 0; i < 20; i ++) + { + if (gUnknown_08396FC4->unk_0f0[i] != NULL) + { + gUnknown_08396FC4->unk_0f0[i]->unk_5_2 = 0; + } + } + gMain.state ++; + } + break; + case 5: + sub_8124F08((u16 *)BG_SCREEN_ADDR(29), ewram_19000.treeTilemap, 0, 17, 32, 15); + sub_8124F08((u16 *)BG_SCREEN_ADDR(30), ewram_19000.mountainTilemap, 0, 0, 30, 20); + sub_8124F08(gUnknown_02039274->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2); + sub_8124F08(gUnknown_02039274->unk_08fc, ewram_19000.pylonStemTilemap, 0, 2, 2, 20); + gMain.state ++; + break; + case 6: + sub_81248AC(gSpecialVar_0x8004); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x48, 0, 14, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x6C, 12, 17, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x90, 24, 20, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x00, 0, 17, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x24, 0, 20, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x00, 12, 20, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.mtChimneyTilemap + 0x24, 12, 23, 12, 3); + sub_8124F08(gUnknown_02039274->unk_00fc, ewram_19000.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(sub_8123C40); + SetMainCallback2(sub_8123724); + CreateTask(sub_8123878, 0); + if (gSpecialVar_0x8004 == 0) + { + gUnknown_02039274->unk_0000 = CreateTask(sub_81239E4, 1); + } + else + { + gUnknown_02039274->unk_0000 = CreateTask(sub_8123AF8, 1); + } + break; + } +} |