From b00c2d08abaabf2946e93d6b32ea150b0fd9acaa Mon Sep 17 00:00:00 2001 From: cawtds Date: Sat, 11 May 2024 17:49:45 +0200 Subject: [PATCH] small updates, first idea for loreleis team --- src/battle_main.c | 36 +++++++++++++++++++---- src/battle_script_commands.c | 17 +++++------ src/data.c | 1 + src/data/trainer_parties.h | 57 ++++++++++++++++++++++++------------ 4 files changed, 77 insertions(+), 34 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 0049fedd4..eef62a20b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3901,13 +3901,12 @@ static void HandleTurnActionSelectionState(void) else if (gBattleResources->bufferB[battler][2] & RET_DYNAMAX) gBattleStruct->dynamax.toDynamax |= gBitTable[battler]; - // TODO: Dynamax // Max Move check - // if (ShouldUseMaxMove(battler, gChosenMoveByBattler[battler])) - // { - // gBattleStruct->dynamax.baseMove[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; - // gBattleStruct->dynamax.usingMaxMove[battler] = TRUE; - // } + if (ShouldUseMaxMove(battler, gChosenMoveByBattler[battler])) + { + gBattleStruct->dynamax.baseMove[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]]; + gBattleStruct->dynamax.usingMaxMove[battler] = TRUE; + } gBattleCommunication[battler]++; } @@ -3999,9 +3998,34 @@ static void HandleTurnActionSelectionState(void) break; } } + // Check if everyone chose actions. if (gBattleCommunication[ACTIONS_CONFIRMED_COUNT] == gBattlersCount) + { + if (WILD_DOUBLE_BATTLE + && gBattleStruct->throwingPokeBall + && gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)] != B_ACTION_NOTHING_FAINTED) + { + // if we choose to throw a ball with our second mon, skip the action of the first + // (if we have chosen throw ball with first, second's is already skipped) + // if throwing a ball in a wild battle with an in-game partner, skip partner's turn when throwing a ball + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)] = B_ACTION_NOTHING_FAINTED; + else + gChosenActionByBattler[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)] = B_ACTION_NOTHING_FAINTED; + } + gBattleMainFunc = SetActionsAndBattlersTurnOrder; + + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + { + for (i = 0; i < gBattlersCount; i++) + { + if (gChosenActionByBattler[i] == B_ACTION_SWITCH) + SwitchPartyOrderInGameMulti(i, *(gBattleStruct->monToSwitchIntoId + i)); + } + } + } } static void UpdateBattlerPartyOrdersOnSwitch(u32 battler) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9e73cbbd3..4809c3cdc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1400,14 +1400,13 @@ static void Cmd_attackcanceler(void) } // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers) - // TODO: Z-Moves and Dynamax - // if ((gBattleStruct->zmove.active || IsMaxMove(gCurrentMove)) - // && IS_BATTLER_PROTECTED(gBattlerTarget)) - // { - // BattleScriptPush(cmd->nextInstr); - // gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; - // return; - // } + if ((gBattleStruct->zmove.active || IsMaxMove(gCurrentMove)) + && IS_BATTLER_PROTECTED(gBattlerTarget)) + { + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; + return; + } for (i = 0; i < gBattlersCount; i++) { @@ -6373,7 +6372,7 @@ static void Cmd_getswitchedmondata(void) u32 battler = GetBattlerForBattleScript(cmd->battler); if (gBattleControllerExecFlags) return; - + gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler]; BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[battler]]); MarkBattlerForControllerExec(battler); diff --git a/src/data.c b/src/data.c index f727b57db..63af889b4 100644 --- a/src/data.c +++ b/src/data.c @@ -3,6 +3,7 @@ #include "battle.h" #include "data.h" #include "graphics.h" +#include "constants/abilities.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/battle_ai.h" diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 0bf93234d..2397aeb7f 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -4799,39 +4799,58 @@ static const struct TrainerMon sParty_CooltrainerJulie[] = { static const struct TrainerMon sParty_EliteFourLorelei[] = { { - .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 52, - .species = SPECIES_DEWGONG, - .heldItem = ITEM_NONE, - .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_HAIL, MOVE_SAFEGUARD}, + .species = SPECIES_NINETALES_ALOLAN, + .ability = ABILITY_SNOW_WARNING, + .heldItem = ITEM_ICY_ROCK, + .nature = NATURE_TIMID, + .moves = {MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_AURORA_VEIL, MOVE_CHILLING_WATER}, }, { - .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 51, - .species = SPECIES_CLOYSTER, - .heldItem = ITEM_NONE, - .moves = {MOVE_SPIKES, MOVE_PROTECT, MOVE_HAIL, MOVE_DIVE}, + .species = SPECIES_GLACEON, + .ability = ABILITY_SNOW_CLOAK, + .heldItem = ITEM_CHOICE_SPECS, + .nature = NATURE_TIMID, + .moves = {MOVE_ICE_BEAM, MOVE_SHADOW_BALL, MOVE_BLIZZARD, MOVE_ALLURING_VOICE}, }, { - .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 52, - .species = SPECIES_SLOWBRO, - .heldItem = ITEM_NONE, - .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_AMNESIA, MOVE_YAWN}, + .species = SPECIES_CLOYSTER, + .ability = ABILITY_SKILL_LINK, + .heldItem = ITEM_FOCUS_SASH, + .nature = NATURE_JOLLY, + .moves = {MOVE_SHELL_SMASH, MOVE_ICICLE_SPEAR, MOVE_ICE_SHARD, MOVE_SPIKES}, }, { - .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 54, - .species = SPECIES_JYNX, - .heldItem = ITEM_NONE, - .moves = {MOVE_ICE_PUNCH, MOVE_DOUBLE_SLAP, MOVE_LOVELY_KISS, MOVE_ATTRACT}, + .species = SPECIES_MR_RIME, + .ability = ABILITY_ICE_BODY, + .heldItem = ITEM_LIGHT_CLAY, + .nature = NATURE_MODEST, + .moves = {MOVE_HAIL, MOVE_PSYCHIC, MOVE_FREEZE_DRY, MOVE_ICE_BEAM}, }, { - .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), + .lvl = 54, + .species = SPECIES_ARTICUNO, + .ability = ABILITY_SNOW_CLOAK, + .heldItem = ITEM_HEAVY_DUTY_BOOTS, + .nature = NATURE_TIMID, + .moves = {MOVE_BLIZZARD, MOVE_ROOST, MOVE_EXTRASENSORY, MOVE_ICE_BEAM}, + }, + { + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), .lvl = 54, .species = SPECIES_LAPRAS, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_CONFUSE_RAY, MOVE_ICE_BEAM, MOVE_SURF, MOVE_BODY_SLAM}, + .ability = ABILITY_SHELL_ARMOR, + .heldItem = ITEM_LEFTOVERS, + .nature = NATURE_CALM, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_PERISH_SONG}, }, };