summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-10-17 18:13:05 -0400
committerProjectRevoTPP <projectrevotpp@hotmail.com>2017-10-17 18:13:05 -0400
commit9f523630fcfd25896561f66495a3b4f6bd8c0487 (patch)
tree4cf7177776ca5a33ebabfcc20269424bfabe1f02 /src
parente424136fc5e648084125775e45f9084c33ea7303 (diff)
Fix Task_Truck1.
Diffstat (limited to 'src')
-rw-r--r--src/field/field_special_scene.c82
1 files changed, 58 insertions, 24 deletions
diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c
index d4b59c8a2..255b1d42b 100644
--- a/src/field/field_special_scene.c
+++ b/src/field/field_special_scene.c
@@ -18,6 +18,52 @@
#define SECONDS(value) ((signed) (60.0 * value + 0.5))
+// TODO: Move somewhere else
+enum
+{
+ STEP_17 = 0x17,
+ STEP_18,
+ STEP_END = 0xFE,
+};
+
+const u32 gMapObjectPic_MovingBox[] = INCBIN_U32("graphics/map_objects/pics/misc/moving_box.4bpp");
+const u16 gMapObjectPalette19[] = INCBIN_U16("graphics/map_objects/palettes/19.gbapal");
+
+static const s8 gTruckCamera_HorizontalTable[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ 2,
+ -1,
+ -1,
+ -1,
+ 0,
+};
+
+const u8 gUnknown_083D295F[] =
+{
+ STEP_18,
+ STEP_END,
+};
+
+const u8 gUnknown_083D2961[] =
+{
+ STEP_17,
+ STEP_END,
+};
+
// porthole states
enum
{
@@ -27,12 +73,7 @@ enum
EXIT_PORTHOLE,
};
-extern s8 gTruckCamera_HorizontalTable[];
-
-extern u8 gUnknown_083D295F[];
-extern u8 gUnknown_083D2961[];
-
-s32 GetTruckCameraBobbingY(int a1)
+s16 GetTruckCameraBobbingY(int a1)
{
if (!(a1 % 120))
return -1;
@@ -42,7 +83,7 @@ s32 GetTruckCameraBobbingY(int a1)
return 0;
}
-s32 GetTruckBoxMovement(int a1) // for the box movement?
+s16 GetTruckBoxMovement(int a1) // for the box movement?
{
if (!((a1 + 120) % 180))
return -1;
@@ -54,27 +95,22 @@ void Task_Truck1(u8 taskId)
{
s16 *data = gTasks[taskId].data;
s16 cameraYpan;
- s16 box1 = 0;
- s16 box2 = 0;
- s16 box3 = 0;
- u8 mapNum, mapGroup;
- register s16 zero asm("r4");
+ s16 cameraXpan = 0;
+ s16 box1, box2, box3;
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
- sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3);
+ sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box.
- sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3);
+ sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box.
- mapNum = gSaveBlock1.location.mapNum;
- mapGroup = gSaveBlock1.location.mapGroup;
- zero = 0;
- sub_805BD90(3, mapNum, mapGroup, -3, box3);
+ sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3);
if (++data[0] == SECONDS(500)) // this will never run
- data[0] = zero; // reset the timer if it gets stuck.
+ data[0] = 0; // reset the timer if it gets stuck.
+ // this also matches with directly calling GetTruckCameraBobbingY within SetCameraPanning, but this is consistent with a later function that requires a temp variable.
cameraYpan = GetTruckCameraBobbingY(data[0]);
- SetCameraPanning(0, cameraYpan);
+ SetCameraPanning(cameraXpan, cameraYpan);
}
void Task_Truck2(u8 taskId)
@@ -82,9 +118,7 @@ void Task_Truck2(u8 taskId)
s16 *data = gTasks[taskId].data;
s16 cameraYpan;
s16 cameraXpan;
- s16 box1;
- s16 box2;
- s16 box3;
+ s16 box1, box2, box3;
data[0]++;
data[2]++;
@@ -137,7 +171,7 @@ void Task_Truck3(u8 taskId)
{
cameraXpan = gTruckCamera_HorizontalTable[data[1]];
cameraYpan = 0;
- SetCameraPanning(cameraXpan, 0);
+ SetCameraPanning(cameraXpan, cameraYpan);
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);