From 4f3326f3f4984eadcdde56b090831ea5123599e5 Mon Sep 17 00:00:00 2001 From: Zatsu <118256341+fakuzatsu@users.noreply.github.com> Date: Wed, 12 Feb 2025 21:02:25 +0000 Subject: [PATCH] fix for battle ui for add to party menu (#6229) (#6240) --- include/reshow_battle_screen.h | 1 + src/battle_script_commands.c | 3 +- src/party_menu.c | 9 ++-- src/reshow_battle_screen.c | 99 ++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 7 deletions(-) diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h index 07958bf6c0..59f9c79106 100644 --- a/include/reshow_battle_screen.h +++ b/include/reshow_battle_screen.h @@ -3,6 +3,7 @@ void ReshowBattleScreenDummy(void); void ReshowBattleScreenAfterMenu(void); +void ReshowBlankBattleScreenAfterMenu(void); void CreateBattlerSprite(u32 battler); #endif // GUARD_RESHOW_BATTLE_SCREEN_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5cde7286c5..4635fe0cee 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16356,12 +16356,13 @@ static void Cmd_trygivecaughtmonnick(void) { GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); FreeAllWindowBuffers(); + MainCallback callback = CalculatePlayerPartyCount() == PARTY_SIZE ? ReshowBlankBattleScreenAfterMenu : BattleMainCB2; DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]), GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_PERSONALITY, NULL), - ReshowBattleScreenAfterMenu); + callback); gBattleCommunication[MULTIUSE_STATE]++; } diff --git a/src/party_menu.c b/src/party_menu.c index 784f13acdd..5e79d74d45 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -7183,14 +7183,11 @@ static u8 GetPartyLayoutFromBattleType(void) void OpenPartyMenuInBattle(u8 partyAction) { - u8 partyMessage; - if (partyAction == PARTY_ACTION_SEND_MON_TO_BOX) - partyMessage = PARTY_MSG_CHOOSE_MON_FOR_BOX; + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON_FOR_BOX, Task_HandleChooseMonInput, ReshowBlankBattleScreenAfterMenu); else - partyMessage = PARTY_MSG_CHOOSE_MON; - - InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, partyMessage, Task_HandleChooseMonInput, CB2_SetUpReshowBattleScreenAfterMenu); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_SetUpReshowBattleScreenAfterMenu); + ReshowBattleScreenDummy(); UpdatePartyToBattleOrder(); } diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 87f639194c..ba6f615595 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -18,9 +18,11 @@ // this file's functions static void CB2_ReshowBattleScreenAfterMenu(void); +static void CB2_ReshowBlankBattleScreenAfterMenu(void); static bool8 LoadBattlerSpriteGfx(u32 battler); static void CreateHealthboxSprite(u32 battler); static void ClearBattleBgCntBaseBlocks(void); +static void CreateCaughtMonSprite(void); void ReshowBattleScreenDummy(void) { @@ -168,6 +170,89 @@ static void CB2_ReshowBattleScreenAfterMenu(void) gBattleScripting.reshowMainState++; } +void ReshowBlankBattleScreenAfterMenu(void) +{ + gPaletteFade.bufferTransferDisabled = 1; + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + gBattleScripting.reshowMainState = 0; + gBattleScripting.reshowHelperState = 0; + SetMainCallback2(CB2_ReshowBlankBattleScreenAfterMenu); +} + +static void CB2_ReshowBlankBattleScreenAfterMenu(void) +{ + switch (gBattleScripting.reshowMainState) + { + case 0: + ScanlineEffect_Clear(); + BattleInitBgsAndWindows(); + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 255; + gBattle_BG3_Y = 0; + break; + case 1: + CpuFastFill(0, (void *)(VRAM), VRAM_SIZE); + break; + case 2: + LoadBattleTextboxAndBackground(); + break; + case 3: + ResetSpriteData(); + break; + case 4: + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = MAX_BATTLERS_COUNT; + break; + case 5: + ClearSpritesHealthboxAnimData(); + break; + case 6: + if (!LoadBattlerSpriteGfx(0)) + gBattleScripting.reshowMainState--; + break; + case 7: + if (!LoadBattlerSpriteGfx(1)) + gBattleScripting.reshowMainState--; + break; + case 8: + if (!LoadBattlerSpriteGfx(2)) + gBattleScripting.reshowMainState--; + break; + case 9: + if (!LoadBattlerSpriteGfx(3)) + gBattleScripting.reshowMainState--; + break; + case 10: + if (gBattleScripting.monCaught) + CreateCaughtMonSprite(); // displays the caught mon for the switch into party feature + break; + default: + SetVBlankCallback(VBlankCB_Battle); + ClearBattleBgCntBaseBlocks(); + BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); + gPaletteFade.bufferTransferDisabled = 0; + SetMainCallback2(BattleMainCB2); + FillAroundBattleWindows(); + break; + } + + gBattleScripting.reshowMainState++; +} + static void ClearBattleBgCntBaseBlocks(void) { vBgCnt *regBgcnt1, *regBgcnt2; @@ -311,3 +396,17 @@ static void CreateHealthboxSprite(u32 battler) } } } + +static void CreateCaughtMonSprite(void) +{ + SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES), GetBattlerPosition(gBattlerTarget)); + gBattlerSpriteIds[gBattlerTarget] = CreateSprite(&gMultiuseSpriteTemplate, DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, GetBattlerSpriteSubpriority(gBattlerTarget)); + gSprites[gBattlerSpriteIds[gBattlerTarget]].oam.paletteNum = gBattlerTarget; + gSprites[gBattlerSpriteIds[gBattlerTarget]].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[gBattlerTarget]].data[0] = gBattlerTarget; + gSprites[gBattlerSpriteIds[gBattlerTarget]].data[2] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES); + + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattlerTarget]], 0); + + gSprites[gBattlerSpriteIds[gBattlerTarget]].invisible = FALSE; +}