diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-01-26 15:33:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-26 15:33:56 -0500 |
commit | 2e934469b82a41cb7871c04898547e1a5d58c621 (patch) | |
tree | 36e73aae0bcd3178cc29354f7e40172d194d0bb9 | |
parent | a2c6174ee995f8980bcd38d3199ab2e395cca2ae (diff) | |
parent | 5b36288064ee0e999a2201b2dd6479da3c99d01e (diff) |
Merge pull request #242 from jiangzhengwenjz/field
field_screen_effect
-rw-r--r-- | asm/field_screen_effect.s | 306 | ||||
-rw-r--r-- | asm/overworld.s | 8 | ||||
-rw-r--r-- | data/field_screen_effect.s | 15 | ||||
-rw-r--r-- | include/event_scripts.h | 4 | ||||
-rw-r--r-- | include/field_fadetransition.h | 1 | ||||
-rw-r--r-- | include/field_screen_effect.h | 1 | ||||
-rw-r--r-- | include/heal_location.h | 4 | ||||
-rw-r--r-- | include/strings.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_screen_effect.c | 125 |
10 files changed, 140 insertions, 330 deletions
diff --git a/asm/field_screen_effect.s b/asm/field_screen_effect.s deleted file mode 100644 index f0ca0f77e..000000000 --- a/asm/field_screen_effect.s +++ /dev/null @@ -1,306 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_807F3A4 -sub_807F3A4: @ 807F3A4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r8, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - ldr r2, _0807F3DC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrb r7, [r4, 0xA] - movs r0, 0xC - ldrsh r6, [r4, r0] - cmp r6, 0 - beq _0807F3E0 - cmp r6, 0x1 - beq _0807F430 - b _0807F448 - .align 2, 0 -_0807F3DC: .4byte gTasks -_0807F3E0: - adds r0, r7, 0 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r5, _0807F424 @ =gStringVar4 - adds r0, r5, 0 - mov r1, r8 - bl StringExpandPlaceholders - movs r0, 0x1 - mov r8, r0 - str r0, [sp] - str r6, [sp, 0x4] - ldr r0, _0807F428 @ =gUnknown_83C68EC - str r0, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - str r5, [sp, 0x10] - adds r0, r7, 0 - movs r1, 0x2 - mov r2, r10 - mov r3, r9 - bl AddTextPrinterParameterized4 - ldr r2, _0807F42C @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - mov r0, r8 - strh r0, [r4, 0xC] - b _0807F448 - .align 2, 0 -_0807F424: .4byte gStringVar4 -_0807F428: .4byte gUnknown_83C68EC -_0807F42C: .4byte gTextFlags -_0807F430: - bl RunTextPrinters - adds r0, r7, 0 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0807F448 - strh r0, [r4, 0xC] - movs r0, 0x1 - b _0807F44A -_0807F448: - movs r0, 0 -_0807F44A: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807F3A4 - - thumb_func_start sub_807F45C -sub_807F45C: @ 807F45C - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0807F484 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x6 - bls _0807F478 - b _0807F5E4 -_0807F478: - lsls r0, 2 - ldr r1, _0807F488 @ =_0807F48C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807F484: .4byte gTasks -_0807F488: .4byte _0807F48C - .align 2, 0 -_0807F48C: - .4byte _0807F4A8 - .4byte _0807F538 - .4byte _0807F588 - .4byte _0807F5B6 - .4byte _0807F540 - .4byte _0807F588 - .4byte _0807F5D0 -_0807F4A8: - ldr r0, _0807F518 @ =gUnknown_83C68E4 - bl AddWindow - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0807F51C @ =gTasks - lsls r4, r6, 2 - adds r0, r4, r6 - lsls r0, 3 - adds r7, r0, r1 - strh r5, [r7, 0xA] - movs r0, 0xF0 - bl Menu_LoadStdPalAt - adds r0, r5, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r5, 0 - bl PutWindowTilemap - adds r0, r5, 0 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x1 - bl GetHealLocationPointer - adds r3, r0, 0 - ldr r0, _0807F520 @ =gSaveBlock1Ptr - ldr r2, [r0] - ldrh r0, [r2, 0x1C] - ldrh r5, [r3] - cmp r0, r5 - bne _0807F524 - movs r1, 0x1E - ldrsb r1, [r2, r1] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _0807F524 - movs r0, 0x20 - ldrsh r1, [r2, r0] - movs r5, 0x2 - ldrsh r0, [r3, r5] - cmp r1, r0 - bne _0807F524 - movs r0, 0x22 - ldrsh r1, [r2, r0] - movs r2, 0x4 - ldrsh r0, [r3, r2] - cmp r1, r0 - bne _0807F524 - movs r0, 0x4 - strh r0, [r7, 0x8] - b _0807F5E4 - .align 2, 0 -_0807F518: .4byte gUnknown_83C68E4 -_0807F51C: .4byte gTasks -_0807F520: .4byte gSaveBlock1Ptr -_0807F524: - ldr r0, _0807F534 @ =gTasks - adds r1, r4, r6 - lsls r1, 3 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x8] - b _0807F5E4 - .align 2, 0 -_0807F534: .4byte gTasks -_0807F538: - ldr r1, _0807F53C @ =gUnknown_841B554 - b _0807F542 - .align 2, 0 -_0807F53C: .4byte gUnknown_841B554 -_0807F540: - ldr r1, _0807F578 @ =gUnknown_841B5B6 -_0807F542: - adds r0, r6, 0 - movs r2, 0x2 - movs r3, 0x8 - bl sub_807F3A4 - lsls r0, 24 - cmp r0, 0 - beq _0807F5E4 - ldr r0, _0807F57C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0807F580 @ =gObjectEvents - adds r0, r1 - movs r1, 0x2 - bl ObjectEventTurn - ldr r1, _0807F584 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _0807F5E4 - .align 2, 0 -_0807F578: .4byte gUnknown_841B5B6 -_0807F57C: .4byte gPlayerAvatar -_0807F580: .4byte gObjectEvents -_0807F584: .4byte gTasks -_0807F588: - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - adds r4, r2 - ldrb r5, [r4, 0xA] - adds r0, r5, 0 - bl ClearWindowTilemap - adds r0, r5, 0 - movs r1, 0x1 - bl CopyWindowToVram - adds r0, r5, 0 - bl RemoveWindow - bl palette_bg_faded_fill_black - bl sub_807DC00 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0807F5E4 -_0807F5B6: - bl sub_807E418 - cmp r0, 0x1 - bne _0807F5E4 - adds r0, r6, 0 - bl DestroyTask - ldr r0, _0807F5CC @ =EventScript_AfterWhiteOutHeal - bl ScriptContext1_SetupScript - b _0807F5E4 - .align 2, 0 -_0807F5CC: .4byte EventScript_AfterWhiteOutHeal -_0807F5D0: - bl sub_807E418 - cmp r0, 0x1 - bne _0807F5E4 - adds r0, r6, 0 - bl DestroyTask - ldr r0, _0807F5EC @ =EventScript_MomHeal - bl ScriptContext1_SetupScript -_0807F5E4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807F5EC: .4byte EventScript_MomHeal - thumb_func_end sub_807F45C - - thumb_func_start sub_807F5F0 -sub_807F5F0: @ 807F5F0 - push {lr} - bl ScriptContext2_Enable - bl palette_bg_faded_fill_black - ldr r0, _0807F618 @ =sub_807F45C - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0807F61C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0807F618: .4byte sub_807F45C -_0807F61C: .4byte gTasks - thumb_func_end sub_807F5F0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/overworld.s b/asm/overworld.s index 92ffbd038..5c904c607 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -2247,7 +2247,7 @@ _08055CEC: .4byte gSaveBlock1Ptr _08055CF0: ldr r0, _08055D00 @ =gSaveBlock1Ptr ldr r0, [r0] - ldr r1, _08055D04 @ =gUnknown_83C68E0 + ldr r1, _08055D04 @ =gMaxFlashLevel ldr r1, [r1] _08055CF8: adds r0, 0x30 @@ -2257,7 +2257,7 @@ _08055CFA: bx r0 .align 2, 0 _08055D00: .4byte gSaveBlock1Ptr -_08055D04: .4byte gUnknown_83C68E0 +_08055D04: .4byte gMaxFlashLevel thumb_func_end sub_8055CB8 thumb_func_start Overworld_SetFlashLevel @@ -2266,7 +2266,7 @@ Overworld_SetFlashLevel: @ 8055D08 adds r1, r0, 0 cmp r1, 0 blt _08055D18 - ldr r0, _08055D28 @ =gUnknown_83C68E0 + ldr r0, _08055D28 @ =gMaxFlashLevel ldr r0, [r0] cmp r1, r0 ble _08055D1A @@ -2280,7 +2280,7 @@ _08055D1A: pop {r0} bx r0 .align 2, 0 -_08055D28: .4byte gUnknown_83C68E0 +_08055D28: .4byte gMaxFlashLevel _08055D2C: .4byte gSaveBlock1Ptr thumb_func_end Overworld_SetFlashLevel diff --git a/data/field_screen_effect.s b/data/field_screen_effect.s deleted file mode 100644 index 92078287d..000000000 --- a/data/field_screen_effect.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83C68E0:: @ 83C68E0 - .4byte 4 - -gUnknown_83C68E4:: @ 83C68E4 - .byte 0, 0, 5, 30, 11, 15 - .2byte 0x001 - -gUnknown_83C68EC:: @ 83C68EC - .byte 0, 1, 2 diff --git a/include/event_scripts.h b/include/event_scripts.h index b8da8f3e0..f026cb57a 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1170,6 +1170,10 @@ extern const u8 EventScript_ResetAllMapFlags[]; // player_pc extern const u8 EventScript_PalletTown_PlayersHouse_2F_ShutDownPC[]; +// field_screen_effect +extern const u8 EventScript_MomHeal[]; +extern const u8 EventScript_AfterWhiteOutHeal[]; + // start_menu extern const u8 gText_WouldYouLikeToSaveTheGame[]; extern const u8 gText_AlreadySaveFile_WouldLikeToOverwrite[]; diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index d27d0e54a..6683f5e2e 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -20,5 +20,6 @@ void FadeTransition_FadeInOnReturnToStartMenu(void); void sub_807DCE4(void); bool32 sub_807E418(void); +void palette_bg_faded_fill_black(void); #endif // GUARD_FIELD_FADETRANSITION_H diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index e48745a7b..ca7625782 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -10,5 +10,6 @@ void sub_807E3EC(void); void DoOutwardBarnDoorWipe(void); void Task_BarnDoorWipe(u8 taskId); void sub_807DC00(void); +void sub_807F5F0(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/heal_location.h b/include/heal_location.h index 0143b8158..aaa2178c6 100644 --- a/include/heal_location.h +++ b/include/heal_location.h @@ -14,8 +14,8 @@ struct HealLocation { s8 group; s8 map; - u16 x; - u16 y; + s16 x; + s16 y; }; // Exported RAM declarations diff --git a/include/strings.h b/include/strings.h index 7821825cf..5c8ffde4b 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1036,6 +1036,10 @@ extern const u8 gText_RegionMap_AreaDesc_AlteringCave[]; extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; +// field_screen_effect +extern const u8 gUnknown_841B554[]; +extern const u8 gUnknown_841B5B6[]; + // save_failed_screen extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[]; extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; diff --git a/ld_script.txt b/ld_script.txt index 48617df29..5fbf5616e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -120,7 +120,6 @@ SECTIONS { asm/field_weather_effects.o(.text); src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); - asm/field_screen_effect.o(.text); src/battle_setup.o(.text); asm/cable_club.o(.text); asm/trainer_see.o(.text); @@ -438,7 +437,6 @@ SECTIONS { src/title_screen.o(.rodata); data/field_weather.o(.rodata); src/field_screen_effect.o(.rodata); - data/field_screen_effect.o(.rodata); src/battle_setup.o(.rodata); data/cable_club.o(.rodata); data/trainer_see.o(.rodata); diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index a552c47a2..0a3224cfa 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -5,11 +5,34 @@ #include "scanline_effect.h" #include "script.h" #include "task.h" +#include "window.h" +#include "strings.h" +#include "string_util.h" +#include "menu.h" +#include "heal_location.h" +#include "new_menu_helpers.h" +#include "event_object_movement.h" +#include "field_fadetransition.h" +#include "event_scripts.h" static const u16 sFlashLevelPixelRadii[] = { - 0x00c8, 0x0048, 0x0038, 0x0028, 0x0018, 0x0000 + 0x00c8, 0x0048, 0x0038, 0x0028, 0x0018 }; +const s32 gMaxFlashLevel = NELEMS(sFlashLevelPixelRadii) - 1; + +static const struct WindowTemplate gUnknown_83C68E4 = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 30, + .height = 11, + .paletteNum = 15, + .baseBlock = 1, +}; + +static const u8 gUnknown_83C68EC[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; + static void Task_EnableScriptAfterMusicFade(u8 taskId); static void Task_BarnDoorWipeChild(u8 taskId); @@ -336,3 +359,103 @@ static void Task_BarnDoorWipeChild(u8 taskId) #undef DIR_WIPE_IN #undef DIR_WIPE_OUT #undef tChildOffset + +static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y) +{ + u8 windowId = gTasks[taskId].data[1]; + + switch (gTasks[taskId].data[2]) + { + case 0: + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + StringExpandPlaceholders(gStringVar4, text); + AddTextPrinterParameterized4(windowId, 2, x, y, 1, 0, gUnknown_83C68EC, 1, gStringVar4); + gTextFlags.canABSpeedUpPrint = FALSE; + gTasks[taskId].data[2] = 1; + break; + case 1: + RunTextPrinters(); + if (!IsTextPrinterActive(windowId)) + { + gTasks[taskId].data[2] = 0; + return TRUE; + } + break; + } + return FALSE; +} + +static void sub_807F45C(u8 taskId) +{ + u8 windowId; + const struct HealLocation *loc; + + switch (gTasks[taskId].data[0]) + { + case 0: + windowId = AddWindow(&gUnknown_83C68E4); + gTasks[taskId].data[1] = windowId; + Menu_LoadStdPalAt(0xF0); + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + loc = GetHealLocationPointer(1); + if (gSaveBlock1Ptr->lastHealLocation.mapGroup == loc->group + && gSaveBlock1Ptr->lastHealLocation.mapNum == loc->map + && gSaveBlock1Ptr->lastHealLocation.warpId == -1 + && gSaveBlock1Ptr->lastHealLocation.x == loc->x + && gSaveBlock1Ptr->lastHealLocation.y == loc->y) + gTasks[taskId].data[0] = 4; + else + gTasks[taskId].data[0] = 1; + break; + case 1: + if (sub_807F3A4(taskId, gUnknown_841B554, 2, 8)) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2); + ++gTasks[taskId].data[0]; + } + break; + case 4: + if (sub_807F3A4(taskId, gUnknown_841B5B6, 2, 8)) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2); + ++gTasks[taskId].data[0]; + } + break; + case 2: + case 5: + windowId = gTasks[taskId].data[1]; + ClearWindowTilemap(windowId); + CopyWindowToVram(windowId, 1); + RemoveWindow(windowId); + palette_bg_faded_fill_black(); + sub_807DC00(); + ++gTasks[taskId].data[0]; + break; + case 3: + if (sub_807E418() == TRUE) + { + DestroyTask(taskId); + ScriptContext1_SetupScript(EventScript_AfterWhiteOutHeal); + } + break; + case 6: + if (sub_807E418() == TRUE) + { + DestroyTask(taskId); + ScriptContext1_SetupScript(EventScript_MomHeal); + } + break; + } +} + +void sub_807F5F0(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + palette_bg_faded_fill_black(); + taskId = CreateTask(sub_807F45C, 10); + gTasks[taskId].data[0] = 0; +} |