diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rom4.c | 5 | ||||
-rw-r--r-- | src/truck_scene.c | 123 |
2 files changed, 121 insertions, 7 deletions
diff --git a/src/rom4.c b/src/rom4.c index 4f3e35fea..0cad9a39a 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -57,9 +57,6 @@ extern u16 gUnknown_02029814; extern bool8 gUnknown_02029816; extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; -extern u8 gUnknown_0202E85C; -extern u8 gUnknown_0202E85D; - extern u8 gUnknown_03000580[]; extern u16 (*gUnknown_03000584)(u32); extern u8 gUnknown_03000588; @@ -370,7 +367,7 @@ void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y warp_set(&gSaveBlock1.warp2, mapGroup, mapNum, warpId, x, y); } -void copy_saved_warp2_bank_and_enter_x_to_warp1(void) +void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused) { gUnknown_020297F8 = gSaveBlock1.warp2; } diff --git a/src/truck_scene.c b/src/truck_scene.c index 64eca498c..a5c64eaae 100644 --- a/src/truck_scene.c +++ b/src/truck_scene.c @@ -7,9 +7,17 @@ #include "songs.h" #include "sound.h" #include "field_camera.h" +#include "rom4.h" +#include "event_data.h" +#include "sprite.h" + +extern u8 gUnknown_0202E85D; extern s8 gTruckCamera_HorizontalTable[]; +extern u8 gUnknown_083D295F[]; +extern u8 gUnknown_083D2961[]; + s32 GetTruckCameraBobbingY(int a1) { if (!(a1 % 120)) @@ -65,10 +73,10 @@ void Task_Truck2(u8 taskId) s16 box1; s16 box2; s16 box3; - + data[0]++; data[2]++; - + if (data[0] > 5) { data[0] = 0; @@ -82,7 +90,7 @@ void Task_Truck2(u8 taskId) { if (gTruckCamera_HorizontalTable[data[1]] == 2) gTasks[taskId].func = Task_Truck3; - + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; cameraYpan = GetTruckCameraBobbingY(data[2]); SetCameraPanning(cameraXpan, cameraYpan); @@ -218,3 +226,112 @@ void EndTruckSequence(void) sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3, 0); } } + +bool8 sub_80C7754(void) +{ + s8 mapGroup, mapNum; + s16 x, y; + + if (sub_810D9EC(&mapGroup, &mapNum, &x, &y)) + { + return FALSE; + } + else + { + warp1_set(mapGroup, mapNum, -1, x, y); + return TRUE; + } +} + +void sub_80C77A0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 *var = GetVarPointer(0x40B4); + struct WarpData *location = &gSaveBlock1.location; + + switch (data[0]) + { + case 0: + if (!gPaletteFade.active) + { + data[1] = 0; + data[0] = 2; + } + break; + case 1: + if (gMain.newKeys & A_BUTTON) + data[1] = 1; + if (!sub_80A212C(0xFF, location->mapNum, location->mapGroup)) + return; + if (sub_810D9B0(1) == TRUE) + { + if (*var == 2) + *var = 9; + else + *var = 10; + data[0] = 3; + return; + } + data[0] = 2; + case 2: + if (data[1]) + { + data[0] = 3; + return; + } + + if (*var == 2) + { + exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F); + data[0] = 1; + } + else + { + exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961); + data[0] = 1; + } + break; + case 3: + FlagReset(0x4001); + FlagReset(0x4000); + copy_saved_warp2_bank_and_enter_x_to_warp1(0); + sp13E_warp_to_last_warp(); + DestroyTask(taskId); + break; + } +} + +void sub_80C78A0(void) +{ + u8 spriteId = AddPseudoFieldObject(0x8C, SpriteCallbackDummy, 112, 80, 0); + + gSprites[spriteId].coordOffsetEnabled = FALSE; + + if (VarGet(0x40B4) == 2) + { + StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(4)); + } + else + { + StartSpriteAnim(&gSprites[spriteId], FieldObjectDirectionToImageAnimId(3)); + } +} + +void sub_80C791C(void) +{ + sub_80C78A0(); + gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = TRUE; + pal_fill_black(); + CreateTask(sub_80C77A0, 80); + ScriptContext2_Enable(); +} + +void sub_80C7958(void) +{ + FlagSet(SYS_CRUISE_MODE); + FlagSet(0x4001); + FlagSet(0x4000); + saved_warp2_set(0, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1); + sub_80C7754(); + sub_8080F9C(); +} |