diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-28 14:40:25 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-28 14:40:25 -0400 |
commit | f5f4d6bc1fa9927796ed7a683fb262d2f50a87c3 (patch) | |
tree | 2661bf35f64f5b1577ce7fcd5b7ef6e91733403d | |
parent | f0fe4904d0fa8b4e964b64b896c10d4599eb15d3 (diff) |
through InitCurrentFlashLevelScanlineEffect
-rw-r--r-- | asm/overworld.s | 135 | ||||
-rw-r--r-- | data/overworld.s | 5 | ||||
-rw-r--r-- | include/field_camera.h | 1 | ||||
-rw-r--r-- | include/field_screen_effect.h | 1 | ||||
-rw-r--r-- | include/field_specials.h | 1 | ||||
-rw-r--r-- | include/fieldmap.h | 1 | ||||
-rw-r--r-- | include/load_save.h | 4 | ||||
-rw-r--r-- | src/field_specials.c | 2 | ||||
-rw-r--r-- | src/load_save.c | 6 | ||||
-rw-r--r-- | src/overworld.c | 89 | ||||
-rw-r--r-- | src/post_battle_event_funcs.c | 2 |
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 = ®_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++) |