summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-28 14:40:25 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-28 14:40:25 -0400
commitf5f4d6bc1fa9927796ed7a683fb262d2f50a87c3 (patch)
tree2661bf35f64f5b1577ce7fcd5b7ef6e91733403d
parentf0fe4904d0fa8b4e964b64b896c10d4599eb15d3 (diff)
through InitCurrentFlashLevelScanlineEffect
-rw-r--r--asm/overworld.s135
-rw-r--r--data/overworld.s5
-rw-r--r--include/field_camera.h1
-rw-r--r--include/field_screen_effect.h1
-rw-r--r--include/field_specials.h1
-rw-r--r--include/fieldmap.h1
-rw-r--r--include/load_save.h4
-rw-r--r--src/field_specials.c2
-rw-r--r--src/load_save.c6
-rw-r--r--src/overworld.c89
-rw-r--r--src/post_battle_event_funcs.c2
11 files changed, 101 insertions, 146 deletions
diff --git a/asm/overworld.s b/asm/overworld.s
index 0e201e8ea..5e0d2e37f 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -5,135 +5,6 @@
.text
- thumb_func_start CB2_ContinueSavedGame
-CB2_ContinueSavedGame: @ 8056938
- push {lr}
- bl FieldClearVBlankHBlankCallbacks
- bl StopMapMusic
- bl ResetSafariZoneFlag_
- bl LoadSaveblockMapHeader
- bl sub_80550A8
- bl UnfreezeObjectEvents
- bl sub_8054E40
- bl InitMapFromSavedGame
- bl PlayTimeCounter_Start
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- ldr r1, _08056990 @ =gFieldCallback2
- movs r0, 0
- str r0, [r1]
- ldr r1, _08056994 @ =gUnknown_2031DE0
- movs r0, 0x1
- strb r0, [r1]
- bl sav2_x1_query_bit1
- cmp r0, 0x1
- bne _0805699C
- bl sav2_x9_clear_bit1
- bl SetWarpDestinationToContinueGameWarp
- bl WarpIntoMap
- ldr r0, _08056998 @ =CB2_LoadMap
- bl SetMainCallback2
- b _080569AC
- .align 2, 0
-_08056990: .4byte gFieldCallback2
-_08056994: .4byte gUnknown_2031DE0
-_08056998: .4byte CB2_LoadMap
-_0805699C:
- ldr r0, _080569B0 @ =gFieldCallback
- ldr r1, _080569B4 @ =sub_8056918
- str r1, [r0]
- ldr r0, _080569B8 @ =CB1_Overworld
- bl SetMainCallback1
- bl CB2_ReturnToField
-_080569AC:
- pop {r0}
- bx r0
- .align 2, 0
-_080569B0: .4byte gFieldCallback
-_080569B4: .4byte sub_8056918
-_080569B8: .4byte CB1_Overworld
- thumb_func_end CB2_ContinueSavedGame
-
- thumb_func_start FieldClearVBlankHBlankCallbacks
-FieldClearVBlankHBlankCallbacks: @ 80569BC
- push {lr}
- bl sub_80CC87C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080569CE
- bl CloseLink
-_080569CE:
- ldr r0, _080569E4 @ =gWirelessCommType
- ldrb r0, [r0]
- cmp r0, 0
- beq _080569E8
- movs r0, 0xC5
- bl EnableInterrupts
- movs r0, 0x2
- bl DisableInterrupts
- b _080569F4
- .align 2, 0
-_080569E4: .4byte gWirelessCommType
-_080569E8:
- movs r0, 0x2
- bl DisableInterrupts
- movs r0, 0x1
- bl EnableInterrupts
-_080569F4:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- pop {r0}
- bx r0
- thumb_func_end FieldClearVBlankHBlankCallbacks
-
- thumb_func_start SetFieldVBlankCallback
-SetFieldVBlankCallback: @ 8056A04
- push {lr}
- ldr r0, _08056A10 @ =VBlankCB_Field
- bl SetVBlankCallback
- pop {r0}
- bx r0
- .align 2, 0
-_08056A10: .4byte VBlankCB_Field
- thumb_func_end SetFieldVBlankCallback
-
- thumb_func_start VBlankCB_Field
-VBlankCB_Field: @ 8056A14
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl ScanlineEffect_InitHBlankDmaTransfer
- bl FieldUpdateBgTilemapScroll
- bl TransferPlttBuffer
- bl TransferTilesetAnimsBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_Field
-
- thumb_func_start InitCurrentFlashLevelScanlineEffect
-InitCurrentFlashLevelScanlineEffect: @ 8056A34
- push {lr}
- bl Overworld_GetFlashLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08056A52
- bl WriteFlashScanlineEffectBuffer
- ldr r2, _08056A58 @ =gFlashEffectParams
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl ScanlineEffect_SetParams
-_08056A52:
- pop {r0}
- bx r0
- .align 2, 0
-_08056A58: .4byte gFlashEffectParams
- thumb_func_end InitCurrentFlashLevelScanlineEffect
-
thumb_func_start map_loading_iteration_3
map_loading_iteration_3: @ 8056A5C
push {r4,lr}
@@ -1297,7 +1168,7 @@ sub_8057430: @ 8057430
strb r0, [r1]
bl ResetSafariZoneFlag_
bl LoadSaveblockMapHeader
- bl sub_80550A8
+ bl LoadSaveblockObjEventScripts
bl UnfreezeObjectEvents
bl sub_8054E40
bl InitMapFromSavedGame
@@ -1306,10 +1177,10 @@ sub_8057430: @ 8057430
ldr r1, _08057488 @ =gUnknown_2031DE0
movs r0, 0x1
strb r0, [r1]
- bl sav2_x1_query_bit1
+ bl UseContinueGameWarp
cmp r0, 0x1
bne _08057490
- bl sav2_x9_clear_bit1
+ bl ClearContinueGameWarpStatus
bl SetWarpDestinationToContinueGameWarp
bl WarpIntoMap
ldr r0, _0805748C @ =CB2_LoadMap
diff --git a/data/overworld.s b/data/overworld.s
index 7104acdc6..e37dfbcf4 100644
--- a/data/overworld.s
+++ b/data/overworld.s
@@ -5,11 +5,6 @@
.section .rodata
.align 2, 0
-gFlashEffectParams:: @ 826D330
- .4byte REG_WIN0H
- .4byte (2 >> 1) | ((DMA_16BIT | DMA_DEST_RELOAD | DMA_SRC_INC | DMA_REPEAT | DMA_START_HBLANK | DMA_ENABLE) << 16)
- .byte 1, 0
-
.align 2
gUnknown_826D33C:: @ 826D33C
.4byte sub_8058684
diff --git a/include/field_camera.h b/include/field_camera.h
index fa9ac0d72..270aac57a 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -33,5 +33,6 @@ void InstallCameraPanAheadCallback(void);
void DrawDoorMetatileAt(int x, int y, const u16 *data);
void move_tilemap_camera_to_upper_left_corner(void);
void CameraUpdate(void);
+void FieldUpdateBgTilemapScroll(void);
#endif //GUARD_FIELD_CAMERA_H
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index ca9242945..06c56d38a 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -10,6 +10,7 @@ void sub_807E3EC(void);
void DoOutwardBarnDoorWipe(void);
void Task_BarnDoorWipe(u8 taskId);
void FieldCB_RushInjuredPokemonToCenter(void);
+void WriteFlashScanlineEffectBuffer(u8 flashLevel);
extern const s32 gMaxFlashLevel;
diff --git a/include/field_specials.h b/include/field_specials.h
index cc51eea87..447eb2c53 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -33,5 +33,6 @@ void IncrementResortGorgeousStepCounter(void);
void IncrementBirthIslandRockStepCount(void);
void ResetCyclingRoadChallengeData(void);
void ResetFieldTasksArgs(void);
+bool8 UsedPokemonCenterWarp(void);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 1971104fc..66928fab2 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -39,5 +39,6 @@ void apply_map_tileset1_tileset2_palette(struct MapLayout const * mapLayout);
void InitMap(void);
void copy_map_tileset2_to_vram_2(const struct MapLayout * mapLayout);
void apply_map_tileset2_palette(const struct MapLayout * mapLayout);
+void InitMapFromSavedGame(void);
#endif //GUARD_FIELDMAP_H
diff --git a/include/load_save.h b/include/load_save.h
index 20df691e5..23c1429ed 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -30,6 +30,8 @@ void ApplyNewEncryptionKeyToWord(u32 * word, u32 encryptionKey);
void ApplyNewEncryptionKeyToHword(u16 * hword, u32 encryptionKey);
void ClearContinueGameWarpStatus2(void);
void SetContinueGameWarpStatusToDynamicWarp(void);
-void sub_804C1AC(void);
+void SetContinueGameWarpStatus(void);
+bool32 UseContinueGameWarp(void);
+void ClearContinueGameWarpStatus();
#endif // GUARD_LOAD_SAVE_H
diff --git a/src/field_specials.c b/src/field_specials.c
index 0438435f8..657c80a40 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -2037,7 +2037,7 @@ const u16 sPokeCenter1FMaps[] = {
MAP_UNDEFINED
};
-bool8 sub_80CC87C(void)
+bool8 UsedPokemonCenterWarp(void)
{
s32 i;
u16 mapno = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum;
diff --git a/src/load_save.c b/src/load_save.c
index 85e2d31ba..9dff59928 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -127,17 +127,17 @@ void MoveSaveBlocks_ResetHeap(void)
gSaveBlock2Ptr->encryptionKey = encryptionKey;
}
-u32 sav2_x1_query_bit1(void)
+u32 UseContinueGameWarp(void)
{
return gSaveBlock2Ptr->specialSaveWarpFlags & CONTINUE_GAME_WARP;
}
-void sav2_x9_clear_bit1(void)
+void ClearContinueGameWarpStatus(void)
{
gSaveBlock2Ptr->specialSaveWarpFlags &= ~CONTINUE_GAME_WARP;
}
-void sub_804C1AC(void)
+void SetContinueGameWarpStatus(void)
{
gSaveBlock2Ptr->specialSaveWarpFlags |= CONTINUE_GAME_WARP;
}
diff --git a/src/overworld.c b/src/overworld.c
index a5e61e844..ff2886fb2 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "gflib.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "event_scripts.h"
#include "field_camera.h"
#include "field_control_avatar.h"
@@ -28,6 +29,7 @@
#include "roamer.h"
#include "safari_zone.h"
#include "save_location.h"
+#include "scanline_effect.h"
#include "script.h"
#include "script_pokemon_util.h"
#include "tileset_anims.h"
@@ -94,11 +96,12 @@ void CB2_LoadMap2(void);
void c2_80567AC(void);
void CB2_ReturnToFieldLocal(void);
void CB2_ReturnToFieldLink(void);
+void FieldClearVBlankHBlankCallbacks(void);
+void SetFieldVBlankCallback(void);
+void VBlankCB_Field(void);
void MoveSaveBlocks_ResetHeap_(void);
void sub_8056E80(void);
void CB1_UpdateLinkState(void);
-void SetFieldVBlankCallback(void);
-void FieldClearVBlankHBlankCallbacks(void);
void ResetAllMultiplayerState(void);
void do_load_map_stuff_loop(u8 *state);
bool32 sub_8056CD8(u8 *state);
@@ -322,7 +325,7 @@ void sub_8054F68(void)
}
}
-void sub_80550A8(void)
+void LoadSaveblockObjEventScripts(void)
{
int i;
const struct ObjectEventTemplate * src = gMapHeader.events->objectEvents;
@@ -1572,3 +1575,83 @@ void sub_8056918(void)
ShowMapNamePopup(FALSE);
FieldCB_WarpExitFadeFromBlack();
}
+
+void CB2_ContinueSavedGame(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ LoadSaveblockMapHeader();
+ LoadSaveblockObjEventScripts();
+ UnfreezeObjectEvents();
+ sub_8054E40();
+ InitMapFromSavedGame();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback2 = NULL;
+ gUnknown_2031DE0 = TRUE;
+ if (UseContinueGameWarp() == TRUE)
+ {
+ ClearContinueGameWarpStatus();
+ SetWarpDestinationToContinueGameWarp();
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ }
+ else
+ {
+ gFieldCallback = sub_8056918;
+ SetMainCallback1(CB1_Overworld);
+ CB2_ReturnToField();
+ }
+}
+
+void FieldClearVBlankHBlankCallbacks(void)
+{
+ if (UsedPokemonCenterWarp() == TRUE)
+ CloseLink();
+
+ if (gWirelessCommType != 0)
+ {
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ }
+ else
+ {
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ }
+
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+}
+
+void SetFieldVBlankCallback(void)
+{
+ SetVBlankCallback(VBlankCB_Field);
+}
+
+void VBlankCB_Field(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ ScanlineEffect_InitHBlankDmaTransfer();
+ FieldUpdateBgTilemapScroll();
+ TransferPlttBuffer();
+ TransferTilesetAnimsBuffer();
+}
+
+void InitCurrentFlashLevelScanlineEffect(void)
+{
+ u8 flashLevel = Overworld_GetFlashLevel();
+ if (flashLevel != 0)
+ {
+ WriteFlashScanlineEffectBuffer(flashLevel);
+ ScanlineEffect_SetParams((struct ScanlineEffectParams){
+ .dmaDest = &REG_WIN0H,
+ .dmaControl = (2 >> 1) | ((DMA_16BIT | DMA_DEST_RELOAD | DMA_SRC_INC | DMA_REPEAT | DMA_START_HBLANK | DMA_ENABLE) << 16),
+ .initState = 1,
+ .unused9 = 0
+ });
+ }
+}
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 41427c4a5..7d154f815 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -28,7 +28,7 @@ bool8 EnterHallOfFame(void)
{
SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2Ptr->playTimeHours << 16) | (gSaveBlock2Ptr->playTimeMinutes << 8) | gSaveBlock2Ptr->playTimeSeconds);
}
- sub_804C1AC();
+ SetContinueGameWarpStatus();
SetContinueGameWarpToHealLocation(SPAWN_PALLET_TOWN);
gaveAtLeastOneRibbon = FALSE;
for (i = 0, r7 = &ribbonState; i < PARTY_SIZE; i++)