summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2016-10-28 23:59:19 -0400
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-10-28 20:59:19 -0700
commit97c6849805f31404ae204b3a8fe831db8f5405c7 (patch)
tree685b87e609b0fdc283f33b7d01df6073604d3d8c
parentd9e59a388c7c4b2464769963b3d58980ce742f70 (diff)
decompile truck_scene.c (#76)
* begin decompiling truck_scene.c * more truck_scene.c work. * Task_Truck2 pushed for YamaArashi, nonmatching * begin decompiling truck_scene.c more truck_scene.c work. Task_Truck2 pushed for YamaArashi, nonmatching * make truck scene match * cleanup * more consistency * finish decompiling truck_scene.c * formatting * oops
-rw-r--r--asm/truck_scene.s604
-rw-r--r--data/data2.s4
-rw-r--r--ld_script.txt2
-rw-r--r--src/rom4.c4
-rw-r--r--src/truck_scene.c227
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);
+ }
+}