summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/porthole.s297
-rw-r--r--include/asm.inc.h3
-rw-r--r--include/rom4.h4
-rw-r--r--ld_script.txt1
-rw-r--r--src/rom4.c5
-rw-r--r--src/truck_scene.c123
6 files changed, 126 insertions, 307 deletions
diff --git a/asm/porthole.s b/asm/porthole.s
deleted file mode 100644
index 5936433e6..000000000
--- a/asm/porthole.s
+++ /dev/null
@@ -1,297 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80C7754
-sub_80C7754: @ 80C7754
- push {r4-r6,lr}
- sub sp, 0xC
- mov r4, sp
- adds r4, 0x5
- mov r5, sp
- adds r5, 0x6
- add r6, sp, 0x8
- add r0, sp, 0x4
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl sub_810D9EC
- lsls r0, 24
- cmp r0, 0
- bne _080C7796
- add r0, sp, 0x4
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- movs r1, 0
- ldrsb r1, [r4, r1]
- movs r2, 0x1
- negs r2, r2
- movs r3, 0
- ldrsb r3, [r5, r3]
- movs r4, 0
- ldrsb r4, [r6, r4]
- str r4, [sp]
- bl warp1_set
- movs r0, 0x1
- b _080C7798
-_080C7796:
- movs r0, 0
-_080C7798:
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80C7754
-
- thumb_func_start sub_80C77A0
-sub_80C77A0: @ 80C77A0
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _080C77CC @ =gTasks + 0x8
- adds r4, r0, r1
- ldr r0, _080C77D0 @ =0x000040b4
- bl GetVarPointer
- adds r6, r0, 0
- ldr r7, _080C77D4 @ =gSaveBlock1 + 0x4
- movs r0, 0
- ldrsh r2, [r4, r0]
- cmp r2, 0x1
- beq _080C77FC
- cmp r2, 0x1
- bgt _080C77D8
- cmp r2, 0
- beq _080C77E2
- b _080C7896
- .align 2, 0
-_080C77CC: .4byte gTasks + 0x8
-_080C77D0: .4byte 0x000040b4
-_080C77D4: .4byte gSaveBlock1 + 0x4
-_080C77D8:
- cmp r2, 0x2
- beq _080C783E
- cmp r2, 0x3
- beq _080C7878
- b _080C7896
-_080C77E2:
- ldr r0, _080C77F8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080C7896
- strh r2, [r4, 0x2]
- movs r0, 0x2
- strh r0, [r4]
- b _080C7896
- .align 2, 0
-_080C77F8: .4byte gPaletteFade
-_080C77FC:
- ldr r0, _080C7830 @ =gMain
- ldrh r1, [r0, 0x2E]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _080C780A
- strh r2, [r4, 0x2]
-_080C780A:
- ldrb r1, [r7, 0x1]
- ldrb r2, [r7]
- movs r0, 0xFF
- bl sub_80A212C
- lsls r0, 24
- cmp r0, 0
- beq _080C7896
- movs r0, 0x1
- bl sub_810D9B0
- cmp r0, 0x1
- bne _080C783A
- ldrh r0, [r6]
- cmp r0, 0x2
- bne _080C7834
- movs r0, 0x9
- b _080C7836
- .align 2, 0
-_080C7830: .4byte gMain
-_080C7834:
- movs r0, 0xA
-_080C7836:
- strh r0, [r6]
- b _080C7846
-_080C783A:
- movs r0, 0x2
- strh r0, [r4]
-_080C783E:
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080C784C
-_080C7846:
- movs r0, 0x3
- strh r0, [r4]
- b _080C7896
-_080C784C:
- ldrh r0, [r6]
- cmp r0, 0x2
- bne _080C7860
- ldrb r1, [r7, 0x1]
- ldrb r2, [r7]
- ldr r3, _080C785C @ =gUnknown_083D295F
- b _080C7866
- .align 2, 0
-_080C785C: .4byte gUnknown_083D295F
-_080C7860:
- ldrb r1, [r7, 0x1]
- ldrb r2, [r7]
- ldr r3, _080C7874 @ =gUnknown_083D2961
-_080C7866:
- movs r0, 0xFF
- bl exec_movement
- movs r0, 0x1
- strh r0, [r4]
- b _080C7896
- .align 2, 0
-_080C7874: .4byte gUnknown_083D2961
-_080C7878:
- ldr r0, _080C789C @ =0x00004001
- bl FlagReset
- movs r0, 0x80
- lsls r0, 7
- bl FlagReset
- movs r0, 0
- bl copy_saved_warp2_bank_and_enter_x_to_warp1
- bl sp13E_warp_to_last_warp
- adds r0, r5, 0
- bl DestroyTask
-_080C7896:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C789C: .4byte 0x00004001
- thumb_func_end sub_80C77A0
-
- thumb_func_start sub_80C78A0
-sub_80C78A0: @ 80C78A0
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _080C78F4 @ =SpriteCallbackDummy
- movs r0, 0
- str r0, [sp]
- movs r0, 0x8C
- movs r2, 0x70
- movs r3, 0x50
- bl AddPseudoFieldObject
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080C78F8 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r4, r1, r2
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _080C78FC @ =0x000040b4
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bne _080C7900
- movs r0, 0x4
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- b _080C7912
- .align 2, 0
-_080C78F4: .4byte SpriteCallbackDummy
-_080C78F8: .4byte gSprites
-_080C78FC: .4byte 0x000040b4
-_080C7900:
- movs r0, 0x3
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_080C7912:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80C78A0
-
- thumb_func_start sub_80C791C
-sub_80C791C: @ 80C791C
- push {lr}
- bl sub_80C78A0
- ldr r2, _080C794C @ =gMapObjects
- ldr r0, _080C7950 @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- bl pal_fill_black
- ldr r0, _080C7954 @ =sub_80C77A0
- movs r1, 0x50
- bl CreateTask
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .align 2, 0
-_080C794C: .4byte gMapObjects
-_080C7950: .4byte gPlayerAvatar
-_080C7954: .4byte sub_80C77A0
- thumb_func_end sub_80C791C
-
- thumb_func_start sub_80C7958
-sub_80C7958: @ 80C7958
- push {lr}
- ldr r0, _080C7990 @ =0x0000082d
- bl FlagSet
- ldr r0, _080C7994 @ =0x00004001
- bl FlagSet
- movs r0, 0x80
- lsls r0, 7
- bl FlagSet
- ldr r0, _080C7998 @ =gSaveBlock1
- movs r1, 0x4
- ldrsb r1, [r0, r1]
- movs r2, 0x5
- ldrsb r2, [r0, r2]
- movs r3, 0x1
- negs r3, r3
- movs r0, 0
- bl saved_warp2_set
- bl sub_80C7754
- bl sub_8080F9C
- pop {r0}
- bx r0
- .align 2, 0
-_080C7990: .4byte 0x0000082d
-_080C7994: .4byte 0x00004001
-_080C7998: .4byte gSaveBlock1
- thumb_func_end sub_80C7958
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/asm.inc.h b/include/asm.inc.h
index 3e7c5fa99..c415cd825 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -193,6 +193,7 @@ void sp13E_warp_to_last_warp(void);
void sub_8080EF0(void);
void sp13F_fall_to_last_warp(void);
void sub_8080F68(void);
+void sub_8080F9C(void);
void sub_8081594(u8);
void sub_80815E0(u8 val);
@@ -419,6 +420,8 @@ s16 sub_810CAE4(u8, struct Pokeblock *);
void sub_810CC80(void);
u8 sub_810D32C(void);
void ResetCyclingRoadChallengeData(void);
+bool32 sub_810D9B0(u16);
+u8 sub_810D9EC(s8 *, s8 *, s16 *, s16 *);
void ScriptAddElevatorMenuItem(u8, u8, u8, u8);
void ScriptShowElevatorMenu(void);
u8 GetLeadMonIndex(void);
diff --git a/include/rom4.h b/include/rom4.h
index 0fe80a82b..44819cbee 100644
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -43,9 +43,9 @@ void update_saveblock1_field_object_movement_behavior(u8, u8);
void warp_in(void);
void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
// warp1_set_2
-// saved_warp2_set
+void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-// copy_saved_warp2_bank_and_enter_x_to_warp1
+void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
// sub_8053538
void sub_8053570(void);
void sub_8053588(u8);
diff --git a/ld_script.txt b/ld_script.txt
index 7fadff0a2..89e607d83 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -168,7 +168,6 @@ SECTIONS {
src/pokemon_size_record.o(.text);
asm/fldeff_80C5CD4.o(.text);
src/truck_scene.o(.text);
- asm/porthole.o(.text);
asm/rotating_gate.o(.text);
src/safari_zone.o(.text);
asm/contest_link_80C857C.o(.text);
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();
+}