From c3a8edae32d4f9bf18db5a7260a990424fd4012e Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 11 Aug 2023 13:36:01 -0500 Subject: [PATCH] Sprites and fixes --- graphics/battle_interface/burst_trigger.png | Bin 0 -> 314 bytes src/battle_interface.c | 4 ++-- src/battle_main.c | 6 ++--- src/battle_script_commands.c | 2 ++ src/battle_util.c | 23 +++++++++++++++++++- 5 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 graphics/battle_interface/burst_trigger.png diff --git a/graphics/battle_interface/burst_trigger.png b/graphics/battle_interface/burst_trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..e3eb6384d4b4dde7ac90a245e3b0c683812787d0 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`g#vs+Tz8&dTs^(rH!~3^;Nal!|7CqE$47A>hqJ&VvY3H^?+6GpPSxg< z1`2NUba4!^IDL20L0)D>9+pNfrSJ(284Slo3q%EW{ttV!+yBO1zDMFxm5hg%tS<76 zNEMjy(dB}OV_wwax(zR67+M@umc3iB#ZsN2R^G}?p-QHhdFQqlH!Z_ye zPCU5!c!B<$ZGG%bx0yw~{)FEB8^Mw?QU319{&!E>Z#&s@xEzuxd6C9;!2VVC_rsyN zZ|lCiV6ZRf|NQ%5gkr(Zi@kqdoU7CM)-3-*|F6eO?h|)3r?Wk3H3K@H!PC{xWt~$( F696<{c6a~) literal 0 HcmV?d00001 diff --git a/src/battle_interface.c b/src/battle_interface.c index 281d18e046..3256dda8f3 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -677,8 +677,8 @@ static const struct SpriteTemplate sSpriteTemplate_MegaTrigger = .callback = SpriteCb_MegaTrigger }; -static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); -static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); +static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/burst_trigger.4bpp"); +static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/burst_trigger.gbapal"); static const struct SpriteSheet sSpriteSheet_BurstTrigger = { diff --git a/src/battle_main.c b/src/battle_main.c index 86d72bd734..b39634eef4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4438,9 +4438,9 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][2]); RecordedBattle_SetBattlerAction(gActiveBattler, gBattleResources->bufferB[gActiveBattler][3]); } - gBattleStruct->chosenMovePositions[gActiveBattler] = gBattleResources->bufferB[gActiveBattler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST); - gChosenMoveByBattler[gActiveBattler] = gBattleMons[gActiveBattler].moves[gBattleStruct->chosenMovePositions[gActiveBattler]]; - gBattleStruct->moveTarget[gActiveBattler] = gBattleResources->bufferB[gActiveBattler][3]; + *(gBattleStruct->chosenMovePositions + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST); + gChosenMoveByBattler[gActiveBattler] = gBattleMons[gActiveBattler].moves[*(gBattleStruct->chosenMovePositions + gActiveBattler)]; + *(gBattleStruct->moveTarget + gActiveBattler) = gBattleResources->bufferB[gActiveBattler][3]; if (gBattleResources->bufferB[gActiveBattler][2] & RET_MEGA_EVOLUTION) gBattleStruct->mega.toEvolve |= gBitTable[gActiveBattler]; else if (gBattleResources->bufferB[gActiveBattler][2] & RET_ULTRA_BURST) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 42d427a93c..04ef3bcf34 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8628,6 +8628,8 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battlerId, u32 type) SetBattlerShadowSpriteCallback(battlerId, gBattleMons[battlerId].species); if (type == 0) gBattleStruct->mega.alreadyEvolved[position] = TRUE; + if (type == 2) + gBattleStruct->burst.alreadyBursted[position] = TRUE; } } diff --git a/src/battle_util.c b/src/battle_util.c index 0ef2752f5d..5e50dc29ca 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10036,7 +10036,28 @@ bool32 CanUltraBurst(u8 battlerId) struct Pokemon *mon; u8 battlerPosition = GetBattlerPosition(battlerId); u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battlerId)); - struct UltraBurstData *burst = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]))->burst); + + // Check if Player has a Z Ring + if ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)) + && !CheckBagHasItem(ITEM_Z_POWER_RING, 1)) + return FALSE; + + // Check if trainer already ultra bursted a pokemon. + if (gBattleStruct->burst.alreadyBursted[battlerPosition]) + return FALSE; + + // Cannot use z move and ultra burst on same turn + if (gBattleStruct->zmove.toBeUsed[battlerId]) + return FALSE; + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsPartnerMonFromSameTrainer(battlerId) + && (gBattleStruct->burst.alreadyBursted[partnerPosition] || (gBattleStruct->burst.toBurst & gBitTable[BATTLE_PARTNER(battlerId)]))) + return FALSE; + + // Check if mon is currently held by Sky Drop + if (gStatuses3[battlerId] & STATUS3_SKY_DROPPED) + return FALSE; // Gets mon data. if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT)