diff options
-rw-r--r-- | asm/truck_scene.s | 604 | ||||
-rw-r--r-- | data/data2.s | 4 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/rom4.c | 4 | ||||
-rw-r--r-- | src/truck_scene.c | 227 |
5 files changed, 232 insertions, 609 deletions
diff --git a/asm/truck_scene.s b/asm/truck_scene.s deleted file mode 100644 index 10dacf5bb..000000000 --- a/asm/truck_scene.s +++ /dev/null @@ -1,604 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80C727C -sub_80C727C: @ 80C727C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x78 - bl __modsi3 - cmp r0, 0 - bne _080C7290 - movs r0, 0x1 - negs r0, r0 - b _080C72A2 -_080C7290: - adds r0, r4, 0 - movs r1, 0xA - bl __modsi3 - cmp r0, 0x4 - ble _080C72A0 - movs r0, 0 - b _080C72A2 -_080C72A0: - movs r0, 0x1 -_080C72A2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C727C - - thumb_func_start sub_80C72A8 -sub_80C72A8: @ 80C72A8 - push {lr} - adds r0, 0x78 - movs r1, 0xB4 - bl __modsi3 - cmp r0, 0 - beq _080C72BA - movs r0, 0 - b _080C72BE -_080C72BA: - movs r0, 0x1 - negs r0, r0 -_080C72BE: - pop {r1} - bx r1 - thumb_func_end sub_80C72A8 - - thumb_func_start sub_80C72C4 -sub_80C72C4: @ 80C72C4 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080C7364 @ =gTasks + 0x8 - adds r5, r1, r0 - movs r1, 0 - ldrsh r0, [r5, r1] - adds r0, 0x1E - bl sub_80C72A8 - ldr r4, _080C7368 @ =gSaveBlock1 - ldrb r1, [r4, 0x5] - ldrb r2, [r4, 0x4] - lsls r0, 18 - movs r3, 0xC0 - lsls r3, 10 - orrs r0, r3 - asrs r0, 16 - str r0, [sp] - movs r0, 0x1 - movs r3, 0x3 - bl sub_805BD90 - movs r3, 0 - ldrsh r0, [r5, r3] - bl sub_80C72A8 - ldrb r1, [r4, 0x5] - ldrb r2, [r4, 0x4] - lsls r0, 17 - ldr r3, _080C736C @ =0xfffd0000 - adds r0, r3 - asrs r0, 16 - str r0, [sp] - movs r0, 0x2 - movs r3, 0 - bl sub_805BD90 - movs r1, 0 - ldrsh r0, [r5, r1] - bl sub_80C72A8 - ldrb r1, [r4, 0x5] - ldrb r2, [r4, 0x4] - movs r4, 0 - movs r3, 0x3 - negs r3, r3 - lsls r0, 18 - asrs r0, 16 - str r0, [sp] - movs r0, 0x3 - bl sub_805BD90 - ldrh r0, [r5] - adds r0, 0x1 - strh r0, [r5] - lsls r0, 16 - ldr r1, _080C7370 @ =0x75300000 - cmp r0, r1 - bne _080C7346 - strh r4, [r5] -_080C7346: - movs r3, 0 - ldrsh r0, [r5, r3] - bl sub_80C727C - adds r1, r0, 0 - lsls r1, 16 - asrs r1, 16 - movs r0, 0 - bl SetCameraPanning - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C7364: .4byte gTasks + 0x8 -_080C7368: .4byte gSaveBlock1 -_080C736C: .4byte 0xfffd0000 -_080C7370: .4byte 0x75300000 - thumb_func_end sub_80C72C4 - - thumb_func_start sub_80C7374 -sub_80C7374: @ 80C7374 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r3, r0, 3 - ldr r4, _080C73B4 @ =gTasks + 0x8 - adds r7, r3, r4 - ldrh r1, [r7] - adds r1, 0x1 - strh r1, [r7] - ldrh r0, [r7, 0x4] - adds r0, 0x1 - strh r0, [r7, 0x4] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0x5 - ble _080C73A4 - movs r0, 0 - strh r0, [r7] - ldrh r0, [r7, 0x2] - adds r0, 0x1 - strh r0, [r7, 0x2] -_080C73A4: - ldrh r0, [r7, 0x2] - cmp r0, 0x13 - bne _080C73B8 - adds r0, r2, 0 - bl DestroyTask - b _080C746A - .align 2, 0 -_080C73B4: .4byte gTasks + 0x8 -_080C73B8: - ldr r2, _080C7474 @ =gUnknown_083D294C - movs r1, 0x2 - ldrsh r0, [r7, r1] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x2 - bne _080C73D4 - adds r0, r4, 0 - subs r0, 0x8 - adds r0, r3, r0 - ldr r1, _080C7478 @ =sub_80C7484 - str r1, [r0] -_080C73D4: - movs r4, 0x2 - ldrsh r0, [r7, r4] - adds r0, r2 - movs r5, 0 - ldrsb r5, [r0, r5] - lsls r5, 16 - lsrs r5, 16 - movs r1, 0x4 - ldrsh r0, [r7, r1] - bl sub_80C727C - adds r1, r0, 0 - lsls r5, 16 - asrs r5, 16 - lsls r1, 16 - asrs r1, 16 - adds r0, r5, 0 - bl SetCameraPanning - movs r4, 0x4 - ldrsh r0, [r7, r4] - adds r0, 0x1E - bl sub_80C72A8 - ldr r6, _080C747C @ =gSaveBlock1 - ldrb r1, [r6, 0x5] - ldrb r2, [r6, 0x4] - movs r3, 0x3 - subs r3, r5 - lsls r3, 16 - asrs r3, 16 - lsls r0, 18 - movs r4, 0xC0 - lsls r4, 10 - orrs r0, r4 - asrs r0, 16 - str r0, [sp] - movs r0, 0x1 - bl sub_805BD90 - movs r1, 0x4 - ldrsh r0, [r7, r1] - bl sub_80C72A8 - ldrb r1, [r6, 0x5] - ldrb r2, [r6, 0x4] - negs r3, r5 - lsls r3, 16 - asrs r3, 16 - lsls r0, 17 - ldr r4, _080C7480 @ =0xfffd0000 - adds r0, r4 - asrs r0, 16 - str r0, [sp] - movs r0, 0x2 - bl sub_805BD90 - movs r1, 0x4 - ldrsh r0, [r7, r1] - bl sub_80C72A8 - ldrb r1, [r6, 0x5] - ldrb r2, [r6, 0x4] - movs r4, 0x3 - negs r4, r4 - adds r3, r4, 0 - subs r3, r5 - lsls r3, 16 - asrs r3, 16 - lsls r0, 18 - asrs r0, 16 - str r0, [sp] - movs r0, 0x3 - bl sub_805BD90 -_080C746A: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C7474: .4byte gUnknown_083D294C -_080C7478: .4byte sub_80C7484 -_080C747C: .4byte gSaveBlock1 -_080C7480: .4byte 0xfffd0000 - thumb_func_end sub_80C7374 - - thumb_func_start sub_80C7484 -sub_80C7484: @ 80C7484 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r3, r0, 0 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080C74C4 @ =gTasks + 0x8 - adds r2, r0, r1 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080C74B4 - movs r0, 0 - strh r0, [r2] - ldrh r0, [r2, 0x2] - adds r0, 0x1 - strh r0, [r2, 0x2] -_080C74B4: - ldrh r0, [r2, 0x2] - cmp r0, 0x13 - bne _080C74C8 - adds r0, r3, 0 - bl DestroyTask - b _080C7516 - .align 2, 0 -_080C74C4: .4byte gTasks + 0x8 -_080C74C8: - ldr r1, _080C7524 @ =gUnknown_083D294C - movs r3, 0x2 - ldrsh r0, [r2, r3] - adds r0, r1 - movs r1, 0 - mov r8, r1 - movs r6, 0 - ldrsb r6, [r0, r6] - adds r0, r6, 0 - bl SetCameraPanning - ldr r5, _080C7528 @ =gSaveBlock1 - ldrb r1, [r5, 0x5] - ldrb r2, [r5, 0x4] - movs r3, 0x3 - subs r3, r6 - movs r0, 0x3 - str r0, [sp] - movs r0, 0x1 - bl sub_805BD90 - ldrb r1, [r5, 0x5] - ldrb r2, [r5, 0x4] - negs r3, r6 - mov r4, r8 - subs r4, 0x3 - str r4, [sp] - movs r0, 0x2 - bl sub_805BD90 - ldrb r1, [r5, 0x5] - ldrb r2, [r5, 0x4] - subs r4, r6 - mov r3, r8 - str r3, [sp] - movs r0, 0x3 - adds r3, r4, 0 - bl sub_805BD90 -_080C7516: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C7524: .4byte gUnknown_083D294C -_080C7528: .4byte gSaveBlock1 - thumb_func_end sub_80C7484 - - thumb_func_start sub_80C752C -sub_80C752C: @ 80C752C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080C7550 @ =gTasks + 0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _080C7546 - b _080C7698 -_080C7546: - lsls r0, 2 - ldr r1, _080C7554 @ =_080C7558 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C7550: .4byte gTasks + 0x8 -_080C7554: .4byte _080C7558 - .align 2, 0 -_080C7558: - .4byte _080C7570 - .4byte _080C75A8 - .4byte _080C75C4 - .4byte _080C7610 - .4byte _080C7634 - .4byte _080C7652 -_080C7570: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5A - beq _080C7580 - b _080C7698 -_080C7580: - movs r0, 0 - bl SetCameraPanningCallback - movs r0, 0 - strh r0, [r4, 0x2] - ldr r0, _080C75A4 @ =sub_80C72C4 - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x4] - movs r0, 0x1 - strh r0, [r4] - movs r0, 0x31 - bl PlaySE - b _080C7698 - .align 2, 0 -_080C75A4: .4byte sub_80C72C4 -_080C75A8: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x96 - bne _080C7698 - bl pal_fill_black - movs r0, 0 - strh r0, [r4, 0x2] - movs r0, 0x2 - strh r0, [r4] - b _080C7698 -_080C75C4: - ldrh r0, [r4, 0x2] - adds r3, r0, 0x1 - strh r3, [r4, 0x2] - ldr r0, _080C7608 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _080C7698 - lsls r1, r3, 16 - movs r0, 0x96 - lsls r0, 17 - cmp r1, r0 - ble _080C7698 - strh r2, [r4, 0x2] - ldrb r0, [r4, 0x4] - bl DestroyTask - ldr r0, _080C760C @ =sub_80C7374 - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x6] - movs r0, 0x3 - strh r0, [r4] - movs r0, 0x32 - bl PlaySE - b _080C7698 - .align 2, 0 -_080C7608: .4byte gPaletteFade -_080C760C: .4byte sub_80C7374 -_080C7610: - ldr r2, _080C7630 @ =gTasks - movs r0, 0x6 - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r5, [r0, 0x4] - cmp r5, 0 - bne _080C7698 - bl InstallCameraPanAheadCallback - strh r5, [r4, 0x2] - movs r0, 0x4 - strh r0, [r4] - b _080C7698 - .align 2, 0 -_080C7630: .4byte gTasks -_080C7634: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5A - bne _080C7698 - movs r0, 0x33 - bl PlaySE - movs r0, 0 - strh r0, [r4, 0x2] - movs r0, 0x5 - strh r0, [r4] - b _080C7698 -_080C7652: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - bne _080C7698 - movs r2, 0x82 - lsls r2, 2 - movs r0, 0xB - movs r1, 0x8 - bl MapGridSetMetatileIdAt - movs r2, 0x84 - lsls r2, 2 - movs r0, 0xB - movs r1, 0x9 - bl MapGridSetMetatileIdAt - movs r2, 0x86 - lsls r2, 2 - movs r0, 0xB - movs r1, 0xA - bl MapGridSetMetatileIdAt - bl DrawWholeMapView - movs r0, 0x34 - bl PlaySE - adds r0, r5, 0 - bl DestroyTask - bl ScriptContext2_Disable -_080C7698: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80C752C - - thumb_func_start sub_80C76A0 -sub_80C76A0: @ 80C76A0 - push {lr} - sub sp, 0x4 - ldr r2, _080C76E8 @ =0x0000020d - movs r0, 0xB - movs r1, 0x8 - bl MapGridSetMetatileIdAt - ldr r2, _080C76EC @ =0x00000215 - movs r0, 0xB - movs r1, 0x9 - bl MapGridSetMetatileIdAt - ldr r2, _080C76F0 @ =0x0000021d - movs r0, 0xB - movs r1, 0xA - bl MapGridSetMetatileIdAt - bl DrawWholeMapView - bl ScriptContext2_Enable - movs r0, 0 - str r0, [sp] - ldr r1, _080C76F4 @ =gPlttBufferFaded - ldr r2, _080C76F8 @ =0x01000100 - mov r0, sp - bl CpuFastSet - ldr r0, _080C76FC @ =sub_80C752C - movs r1, 0xA - bl CreateTask - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080C76E8: .4byte 0x0000020d -_080C76EC: .4byte 0x00000215 -_080C76F0: .4byte 0x0000021d -_080C76F4: .4byte gPlttBufferFaded -_080C76F8: .4byte 0x01000100 -_080C76FC: .4byte sub_80C752C - thumb_func_end sub_80C76A0 - - thumb_func_start sub_80C7700 -sub_80C7700: @ 80C7700 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _080C774C @ =sub_80C752C - bl FuncIsActiveTask - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - bne _080C7744 - ldr r4, _080C7750 @ =gSaveBlock1 - ldrb r1, [r4, 0x5] - ldrb r2, [r4, 0x4] - movs r0, 0x3 - str r0, [sp] - movs r0, 0x1 - movs r3, 0x3 - bl sub_805BD90 - ldrb r1, [r4, 0x5] - ldrb r2, [r4, 0x4] - movs r5, 0x3 - negs r5, r5 - str r5, [sp] - movs r0, 0x2 - movs r3, 0 - bl sub_805BD90 - ldrb r1, [r4, 0x5] - ldrb r2, [r4, 0x4] - str r6, [sp] - movs r0, 0x3 - adds r3, r5, 0 - bl sub_805BD90 -_080C7744: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C774C: .4byte sub_80C752C -_080C7750: .4byte gSaveBlock1 - thumb_func_end sub_80C7700 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2.s b/data/data2.s index f527bd91d..0fa893e83 100644 --- a/data/data2.s +++ b/data/data2.s @@ -7124,7 +7124,7 @@ gUnknown_08376364:: @ 8376364 .4byte sub_8069AA0 .4byte sub_8069864 .4byte sub_8069DD4 - .4byte sub_80C7700 + .4byte EndTruckSequence .4byte sub_80BCF1C .4byte sub_806A07C @@ -15539,7 +15539,7 @@ gMapObjectPic_MovingBox: @ 83D28AC gMapObjectPalette19: @ 83D292C .incbin "graphics/map_objects/palettes/19.gbapal" -gUnknown_083D294C:: @ 83D294C +gTruckCamera_HorizontalTable:: @ 83D294C .byte 0 .byte 0 .byte 0 diff --git a/ld_script.txt b/ld_script.txt index 180f25724..0d02748c4 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -130,7 +130,7 @@ SECTIONS { asm/field_poison.o(.text); asm/big_shroomish_barboach.o(.text); asm/fldeff_80C5CD4.o(.text); - asm/truck_scene.o(.text); + src/truck_scene.o(.text); asm/porthole.o(.text); asm/rotating_gate.o(.text); asm/safari_zone.o(.text); diff --git a/src/rom4.c b/src/rom4.c index e23e5d2fc..c70876d9a 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -140,7 +140,7 @@ extern void PlayerGetDestCoords(u16 *, u16 *); extern u8 sub_810D32C(void); extern u16 GetLocalWildMon(bool8 *); extern u16 GetMirageIslandMon(void); -extern void sub_80C76A0(void); +extern void ExecuteTruckSequence(void); extern void sub_8080B60(void); extern void sub_810CC80(void); extern void sub_8080AC4(void); @@ -1230,7 +1230,7 @@ void CB2_NewGame(void) PlayTimeCounter_Start(); ScriptContext1_Init(); ScriptContext2_Disable(); - gUnknown_0300485C = sub_80C76A0; + gUnknown_0300485C = ExecuteTruckSequence; do_load_map_stuff_loop(&gMain.state); SetFieldVBlankCallback(); set_callback1(c1_overworld); diff --git a/src/truck_scene.c b/src/truck_scene.c new file mode 100644 index 000000000..915723f31 --- /dev/null +++ b/src/truck_scene.c @@ -0,0 +1,227 @@ +#include "global.h" +#include "palette.h" +#include "task.h" + +extern s8 gTruckCamera_HorizontalTable[]; + +extern void SetCameraPanning(s16 a1, s16 a2); +extern void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); + +void Task_Truck1(u8 taskId); +void Task_Truck2(u8 taskId); +void Task_Truck3(u8 taskId); +void ExecuteTruckSequence(void); + +s32 GetTruckCameraBobbingY(int a1) +{ + s32 result; + + if (!(a1 % 120)) + return -1; + else if ( (a1 % 10) <= 4 ) + return 1; + + return 0; +} + +s32 GetTruckBoxMovement(int a1) // for the box movement? +{ + s32 result; + + if (!((a1 + 120) % 180)) + return -1; + + return 0; +} + +void Task_Truck1(u8 taskId) +{ + // WIP + s16 *data = gTasks[taskId].data; + s16 cameraYpan; + s16 box1 = 0; + s16 box2 = 0; + s16 box3 = 0; + u8 mapNum, mapGroup; + register s16 zero asm("r4"); + + box1 = GetTruckBoxMovement(data[0] + 30) * 4; // box 1 happens 30 frames earlier than the other 2. + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3); + box2 = GetTruckBoxMovement(data[0]) * 2; + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3); + box3 = GetTruckBoxMovement(data[0]) * 4; + mapNum = gSaveBlock1.location.mapNum; + mapGroup = gSaveBlock1.location.mapGroup; + zero = 0; + sub_805BD90(3, mapNum, mapGroup, -3, box3); + + data[0]++; + + if (data[0] == 0x7530) // timer? + data[0] = zero; + + cameraYpan = GetTruckCameraBobbingY(data[0]); + SetCameraPanning(0, cameraYpan); +} + +void Task_Truck2(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s16 cameraYpan; + s16 cameraXpan; + s16 box1; + s16 box2; + s16 box3; + + data[0]++; + data[2]++; + + if (data[0] > 5) + { + data[0] = 0; + data[1]++; + } + if ((u16)data[1] == 19) + { + DestroyTask(taskId); + } + else + { + if (gTruckCamera_HorizontalTable[data[1]] == 2) + gTasks[taskId].func = Task_Truck3; + + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; + cameraYpan = GetTruckCameraBobbingY(data[2]); + SetCameraPanning(cameraXpan, cameraYpan); + box1 = GetTruckBoxMovement(data[2] + 30) * 4; + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3); + box2 = GetTruckBoxMovement(data[2]) * 2; + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3); + box3 = GetTruckBoxMovement(data[2]) * 4; + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3); + } +} + +void Task_Truck3(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s16 cameraXpan; + s16 cameraYpan; + + data[0]++; + + if (data[0] > 5) + { + data[0] = 0; + data[1]++; + } + + if ((u16)data[1] == 19) + { + DestroyTask(taskId); + } + else + { + cameraXpan = gTruckCamera_HorizontalTable[data[1]]; + cameraYpan = 0; + SetCameraPanning(cameraXpan, 0); + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, cameraYpan + 3); + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, cameraYpan - 3); + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, cameraYpan); + } +} + +void Task_HandleTruckSequence(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch(data[0]) + { + /* + Each case has a timer which is handled with data[1], incrementing + until it reaches the if function's condition, which sets the next task up. + */ + case 0: + data[1]++; + if ( data[1] == 90 ) + { + SetCameraPanningCallback(0); + data[1] = 0; // reset the timer. + data[2] = CreateTask(Task_Truck1, 0xA); + data[0] = 1; // run the next case. + PlaySE(0x31); + } + break; + case 1: + data[1]++; + if ( data[1] == 150 ) + { + pal_fill_black(); + data[1] = 0; + data[0] = 2; + } + break; + case 2: + data[1]++; + if(!gPaletteFade.active && data[1] > 300) + { + data[1] = 0; + DestroyTask(data[2]); + data[3] = CreateTask(Task_Truck2, 0xA); + data[0] = 3; + PlaySE(0x32); + } + break; + case 3: + if (!gTasks[data[3]].isActive) // is Truck2 no longer active (is Truck3 active?) + { + InstallCameraPanAheadCallback(); + data[1] = 0; + data[0] = 4; + } + break; + case 4: + data[1]++; + if (data[1] == 90) + { + PlaySE(0x33); + data[1] = 0; + data[0] = 5; + } + break; + case 5: + data[1]++; + if (data[1] == 120) + { + MapGridSetMetatileIdAt(11, 8, 520); + MapGridSetMetatileIdAt(11, 9, 528); + MapGridSetMetatileIdAt(11, 10, 536); + DrawWholeMapView(); + PlaySE(0x34); + DestroyTask(taskId); + ScriptContext2_Disable(); + } + break; + } +} + +void ExecuteTruckSequence(void) +{ + MapGridSetMetatileIdAt(11, 8, 525); + MapGridSetMetatileIdAt(11, 9, 533); + MapGridSetMetatileIdAt(11, 10, 541); + DrawWholeMapView(); + ScriptContext2_Enable(); + CpuFastFill(0, gPlttBufferFaded, 0x400); + CreateTask(Task_HandleTruckSequence, 0xA); +} + +void EndTruckSequence(void) +{ + if(!FuncIsActiveTask(Task_HandleTruckSequence)) + { + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, 3); + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, -3); + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3, 0); + } +} |