diff options
author | YamaArashi <shadow962@live.com> | 2017-01-08 00:05:04 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2017-01-08 00:22:21 -0800 |
commit | 11f95794b99b5560f53c400ee5f7f3f231e8e3ad (patch) | |
tree | 9c7dd5e3d19951e287607b97953746bfe70172ae | |
parent | 529ce9f9ff45594c72eee7b9196160b71ee1c725 (diff) |
decompile porthole code
-rw-r--r-- | asm/porthole.s | 297 | ||||
-rw-r--r-- | include/asm.inc.h | 3 | ||||
-rw-r--r-- | include/rom4.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/rom4.c | 5 | ||||
-rw-r--r-- | src/truck_scene.c | 123 |
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(); +} |