From 6a906a3fc16cd53f29a7307166d9c09ac4b2f07d Mon Sep 17 00:00:00 2001 From: AlexOn1ine Date: Sat, 28 Dec 2024 20:55:59 +0100 Subject: [PATCH] refactor done --- data/battle_scripts_1.s | 64 ++---------- include/battle_scripts.h | 11 +-- include/constants/battle.h | 7 +- src/battle_util.c | 198 +++++++++---------------------------- 4 files changed, 57 insertions(+), 223 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 1b5a9f87ea..9a1e977bf3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5841,8 +5841,6 @@ BattleScript_LearnedNewMove:: BattleScript_LearnMoveReturn:: return -@@@ === NEW WEATHER SCRIPT - BattleScript_WeatherContinues:: printfromtable gWeatherTurnStringIds waitmessage B_WAIT_TIME_LONG @@ -5857,31 +5855,19 @@ BattleScript_WeatherFaded:: call BattleScript_ActivateWeatherAbilities end2 -@@@ === NEW WEATHER SCRIPT - -BattleScript_RainContinuesOrEnds:: - @printfromtable gRainContinuesStringIds - waitmessage B_WAIT_TIME_LONG - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainContinuesOrEndsEnd - playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES -BattleScript_RainContinuesOrEndsEnd:: - call BattleScript_ActivateWeatherAbilities - end2 - -BattleScript_DamagingWeatherContinues:: - @printfromtable gSandStormHailSnowContinuesStringIds - waitmessage B_WAIT_TIME_LONG - playanimation_var BS_ATTACKER, sB_ANIM_ARG1 - setbyte gBattleCommunication, 0 - end2 - BattleScript_DamagingWeather:: - @printfromtable gSandStormHailDmgStringIds + printfromtable gSandStormHailDmgStringIds waitmessage B_WAIT_TIME_LONG effectivenesssound hitanimation BS_SCRIPTING goto BattleScript_DoTurnDmg +BattleScript_FogEnded_Ret:: + printstring STRINGID_FOGLIFTED + waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities + return + BattleScript_IceBodyHeal:: call BattleScript_AbilityPopUpScripting playanimation BS_SCRIPTING, B_ANIM_SIMPLE_HEAL @@ -5891,42 +5877,6 @@ BattleScript_IceBodyHeal:: waitmessage B_WAIT_TIME_LONG end2 -BattleScript_SandStormHailSnowEnds:: - @printfromtable gSandStormHailSnowEndStringIds - waitmessage B_WAIT_TIME_LONG - call BattleScript_ActivateWeatherAbilities - end2 - -BattleScript_SunlightContinues:: - printstring STRINGID_SUNLIGHTSTRONG - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_SUN_CONTINUES - call BattleScript_ActivateWeatherAbilities - end2 - -BattleScript_SunlightFaded:: - printstring STRINGID_SUNLIGHTFADED - waitmessage B_WAIT_TIME_LONG - call BattleScript_ActivateWeatherAbilities - end2 - -BattleScript_FogContinues:: - printstring STRINGID_FOGISDEEP - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_FOG_CONTINUES - call BattleScript_ActivateWeatherAbilities - end2 - -BattleScript_FogEnded_Ret:: - printstring STRINGID_FOGLIFTED - waitmessage B_WAIT_TIME_LONG - call BattleScript_ActivateWeatherAbilities - return - -BattleScript_FogEnded:: - call BattleScript_FogEnded_Ret - end2 - BattleScript_OverworldStatusStarts:: printfromtable gStartingStatusStringIds waitmessage B_WAIT_TIME_LONG diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 743a5117b8..ef30b10b8a 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -50,21 +50,12 @@ extern const u8 BattleScript_DoSwitchOut[]; extern const u8 BattleScript_MoveSwitchOpenPartyScreen[]; extern const u8 BattleScript_Pausex20[]; extern const u8 BattleScript_LevelUp[]; - extern const u8 BattleScript_WeatherContinues[]; extern const u8 BattleScript_WeatherFaded[]; - -extern const u8 BattleScript_RainContinuesOrEnds[]; -extern const u8 BattleScript_SnowContinuesOrEnds[]; extern const u8 BattleScript_DamagingWeatherContinues[]; extern const u8 BattleScript_DamagingWeather[]; -extern const u8 BattleScript_IceBodyHeal[]; -extern const u8 BattleScript_SandStormHailSnowEnds[]; -extern const u8 BattleScript_SunlightContinues[]; -extern const u8 BattleScript_SunlightFaded[]; -extern const u8 BattleScript_FogContinues[]; extern const u8 BattleScript_FogEnded_Ret[]; -extern const u8 BattleScript_FogEnded[]; +extern const u8 BattleScript_IceBodyHeal[]; extern const u8 BattleScript_OverworldStatusStarts[]; extern const u8 BattleScript_OverworldWeatherStarts[]; extern const u8 BattleScript_OverworldTerrain[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index 4d4021de03..99e498b628 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -288,27 +288,26 @@ enum BattleWeather BATTLE_WEATHER_RAIN, BATTLE_WEATHER_RAIN_PRIMAL, BATTLE_WEATHER_RAIN_DOWNPOUR, - BATTLE_WEATHER_SANDSTORM, BATTLE_WEATHER_SUN, BATTLE_WEATHER_SUN_PRIMAL, + BATTLE_WEATHER_SANDSTORM, BATTLE_WEATHER_HAIL, BATTLE_WEATHER_SNOW, BATTLE_WEATHER_FOG, BATTLE_WEATHER_STRONG_WINDS, + BATTLE_WEATHER_COUNT, }; -#define BATTLE_WEATHER_COUNT 10 - // Battle Weather flags #define B_WEATHER_NONE 0 #define B_WEATHER_RAIN_NORMAL (1 << BATTLE_WEATHER_RAIN) #define B_WEATHER_RAIN_PRIMAL (1 << BATTLE_WEATHER_RAIN_PRIMAL) #define B_WEATHER_RAIN_DOWNPOUR (1 << BATTLE_WEATHER_RAIN_DOWNPOUR) // unused #define B_WEATHER_RAIN (B_WEATHER_RAIN_NORMAL | B_WEATHER_RAIN_PRIMAL | B_WEATHER_RAIN_DOWNPOUR) -#define B_WEATHER_SANDSTORM (1 << BATTLE_WEATHER_SANDSTORM) #define B_WEATHER_SUN_NORMAL (1 << BATTLE_WEATHER_SUN) #define B_WEATHER_SUN_PRIMAL (1 << BATTLE_WEATHER_SUN_PRIMAL) #define B_WEATHER_SUN (B_WEATHER_SUN_NORMAL | B_WEATHER_SUN_PRIMAL) +#define B_WEATHER_SANDSTORM (1 << BATTLE_WEATHER_SANDSTORM) #define B_WEATHER_HAIL (1 << BATTLE_WEATHER_HAIL) #define B_WEATHER_SNOW (1 << BATTLE_WEATHER_SNOW) #define B_WEATHER_FOG (1 << BATTLE_WEATHER_FOG) diff --git a/src/battle_util.c b/src/battle_util.c index df350905a2..7efd58f659 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1521,12 +1521,6 @@ enum ENDTURN_TAILWIND, ENDTURN_WISH, ENDTURN_WEATHER, - // ENDTURN_RAIN, - // ENDTURN_SANDSTORM, - // ENDTURN_SUN, - // ENDTURN_HAIL, - // ENDTURN_SNOW, - // ENDTURN_FOG, ENDTURN_DAMAGE_NON_TYPES, ENDTURN_GRAVITY, ENDTURN_WATER_SPORT, @@ -1570,6 +1564,8 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) struct BattleWeatherInfo { + u16 flag; + u8 rock; u8 endMessage; u8 continuesMessage; u8 animation; @@ -1579,6 +1575,17 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = { [BATTLE_WEATHER_RAIN] = { + .flag = B_WEATHER_RAIN_NORMAL, + .rock = HOLD_EFFECT_DAMP_ROCK, + .endMessage = B_MSG_WEATHER_END_RAIN, + .continuesMessage = B_MSG_WEATHER_TURN_RAIN, + .animation = B_ANIM_RAIN_CONTINUES, + }, + + [BATTLE_WEATHER_RAIN_PRIMAL] = + { + .flag = B_WEATHER_RAIN_PRIMAL, + .rock = HOLD_EFFECT_DAMP_ROCK, .endMessage = B_MSG_WEATHER_END_RAIN, .continuesMessage = B_MSG_WEATHER_TURN_RAIN, .animation = B_ANIM_RAIN_CONTINUES, @@ -1586,6 +1593,8 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_RAIN_DOWNPOUR] = { + .flag = B_WEATHER_RAIN_NORMAL, + .rock = HOLD_EFFECT_DAMP_ROCK, .endMessage = B_MSG_WEATHER_END_RAIN, .continuesMessage = B_MSG_WEATHER_TURN_DOWNPOUR, .animation = B_ANIM_RAIN_CONTINUES, @@ -1593,6 +1602,17 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_SUN] = { + .flag = B_WEATHER_SUN_NORMAL, + .rock = HOLD_EFFECT_HEAT_ROCK, + .endMessage = B_MSG_WEATHER_END_SUN, + .continuesMessage = B_MSG_WEATHER_TURN_SUN, + .animation = B_ANIM_SUN_CONTINUES, + }, + + [BATTLE_WEATHER_SUN_PRIMAL] = + { + .flag = B_WEATHER_SUN_PRIMAL, + .rock = HOLD_EFFECT_HEAT_ROCK, .endMessage = B_MSG_WEATHER_END_SUN, .continuesMessage = B_MSG_WEATHER_TURN_SUN, .animation = B_ANIM_SUN_CONTINUES, @@ -1600,6 +1620,8 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_SANDSTORM] = { + .flag = B_WEATHER_SANDSTORM, + .rock = HOLD_EFFECT_SMOOTH_ROCK, .endMessage = B_MSG_WEATHER_END_SANDSTORM, .continuesMessage = B_MSG_WEATHER_TURN_SANDSTORM, .animation = B_ANIM_SANDSTORM_CONTINUES, @@ -1607,6 +1629,8 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_HAIL] = { + .flag = B_WEATHER_HAIL, + .rock = HOLD_EFFECT_ICY_ROCK, .endMessage = B_MSG_WEATHER_END_HAIL, .continuesMessage = B_MSG_WEATHER_TURN_HAIL, .animation = B_ANIM_HAIL_CONTINUES, @@ -1614,6 +1638,8 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_SNOW] = { + .flag = B_WEATHER_SNOW, + .rock = HOLD_EFFECT_ICY_ROCK, .endMessage = B_MSG_WEATHER_END_SNOW, .continuesMessage = B_MSG_WEATHER_TURN_SNOW, .animation = B_ANIM_SNOW_CONTINUES, @@ -1621,6 +1647,8 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_FOG] = { + .flag = B_WEATHER_FOG, + .rock = HOLD_EFFECT_NONE, .endMessage = B_MSG_WEATHER_END_FOG, .continuesMessage = B_MSG_WEATHER_TURN_FOG, .animation = B_ANIM_FOG_CONTINUES, @@ -1628,6 +1656,8 @@ static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] = [BATTLE_WEATHER_STRONG_WINDS] = { + .flag = B_WEATHER_STRONG_WINDS, + .rock = HOLD_EFFECT_NONE, .endMessage = B_MSG_WEATHER_END_STRONG_WINDS, .continuesMessage = B_MSG_WEATHER_TURN_STRONG_WINDS, .animation = B_ANIM_STRONG_WINDS, @@ -1650,14 +1680,7 @@ static bool32 TryEndTurnWeather(void) if (currBattleWeather == 0xFF) return effect; - if (gBattleWeather & B_WEATHER_PRIMAL_ANY) // Might be redundant. handled in else case? - { - gBattleCommunication[MULTISTRING_CHOOSER] = sBattleWeatherInfo[currBattleWeather].continuesMessage; - gBattleScripting.animArg1 = sBattleWeatherInfo[currBattleWeather].animation; - BattleScriptExecute(BattleScript_WeatherContinues); - effect++; - } - else if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0) + if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0) { gBattleCommunication[MULTISTRING_CHOOSER] = sBattleWeatherInfo[currBattleWeather].endMessage; BattleScriptExecute(BattleScript_WeatherFaded); @@ -1910,126 +1933,6 @@ u8 DoFieldEndTurnEffects(void) effect = TryEndTurnWeather(); gBattleStruct->turnCountersTracker++; break; - // case ENDTURN_RAIN: - // if (gBattleWeather & B_WEATHER_RAIN) - // { - // if (!(gBattleWeather & B_WEATHER_RAIN_PRIMAL) - // && gWishFutureKnock.weatherDuration > 0 - // && --gWishFutureKnock.weatherDuration == 0) - // { - // gBattleWeather &= ~(B_WEATHER_RAIN | B_WEATHER_RAIN_DOWNPOUR); - // gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_STOPPED; - // } - // else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR) - // gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES; - // else - // gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_CONTINUES; - - // BattleScriptExecute(BattleScript_RainContinuesOrEnds); - // effect++; - // } - // gBattleStruct->turnCountersTracker++; - // break; - // case ENDTURN_SANDSTORM: - // if (gBattleWeather & B_WEATHER_SANDSTORM) - // { - // if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0) - // { - // gBattleWeather &= ~B_WEATHER_SANDSTORM; - // gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds; - // } - // else - // { - // gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - // } - - // gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES; - // gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SANDSTORM; - // BattleScriptExecute(gBattlescriptCurrInstr); - // effect++; - // } - // gBattleStruct->turnCountersTracker++; - // break; - // case ENDTURN_SUN: - // if (gBattleWeather & B_WEATHER_SUN) - // { - // if (!(gBattleWeather & B_WEATHER_SUN_PRIMAL) - // && gWishFutureKnock.weatherDuration > 0 - // && --gWishFutureKnock.weatherDuration == 0) - // { - // for (i = 0; i < gBattlersCount; i++) - // gDisableStructs[i].weatherAbilityDone = FALSE; - // gBattleWeather &= ~B_WEATHER_SUN; - // gBattlescriptCurrInstr = BattleScript_SunlightFaded; - // } - // else - // { - // gBattlescriptCurrInstr = BattleScript_SunlightContinues; - // } - - // BattleScriptExecute(gBattlescriptCurrInstr); - // effect++; - // } - // gBattleStruct->turnCountersTracker++; - // break; - // case ENDTURN_HAIL: - // if (gBattleWeather & B_WEATHER_HAIL) - // { - // if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0) - // { - // gBattleWeather &= ~B_WEATHER_HAIL; - // gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds; - // } - // else - // { - // gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - // } - - // gBattleScripting.animArg1 = B_ANIM_HAIL_CONTINUES; - // gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_HAIL; - // BattleScriptExecute(gBattlescriptCurrInstr); - // effect++; - // } - // gBattleStruct->turnCountersTracker++; - // break; - // case ENDTURN_SNOW: - // if (gBattleWeather & B_WEATHER_SNOW) - // { - // if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0) - // { - // gBattleWeather &= ~B_WEATHER_SNOW; - // gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds; - // } - // else - // { - // gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - // } - - // gBattleScripting.animArg1 = B_ANIM_SNOW_CONTINUES; - // gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW; - // BattleScriptExecute(gBattlescriptCurrInstr); - // effect++; - // } - // gBattleStruct->turnCountersTracker++; - // break; - // case ENDTURN_FOG: - // if (gBattleWeather & B_WEATHER_FOG) - // { - // if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0) - // { - // gBattleWeather &= ~B_WEATHER_FOG; - // gBattlescriptCurrInstr = BattleScript_FogEnded; - // } - // else - // { - // gBattlescriptCurrInstr = BattleScript_FogContinues; - // } - - // BattleScriptExecute(gBattlescriptCurrInstr); - // effect++; - // } - // gBattleStruct->turnCountersTracker++; - // break; case ENDTURN_DAMAGE_NON_TYPES: while (gBattleStruct->turnSideTracker < 2) { @@ -2349,6 +2252,7 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; if (gBattleStruct->moveDamage[battler] == 0) gBattleStruct->moveDamage[battler] = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SANDSTORM; BattleScriptExecute(BattleScript_DamagingWeather); effect++; } @@ -2375,6 +2279,7 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; if (gBattleStruct->moveDamage[battler] == 0) gBattleStruct->moveDamage[battler] = 1; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_HAIL; BattleScriptExecute(BattleScript_DamagingWeather); effect++; } @@ -3995,19 +3900,6 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2 } } -static const u16 sWeatherFlagsInfo[][2] = -{ - [BATTLE_WEATHER_RAIN] = {B_WEATHER_RAIN_NORMAL, HOLD_EFFECT_DAMP_ROCK}, - [BATTLE_WEATHER_RAIN_PRIMAL] = {B_WEATHER_RAIN_PRIMAL, HOLD_EFFECT_DAMP_ROCK}, - [BATTLE_WEATHER_SUN] = {B_WEATHER_SUN_NORMAL, HOLD_EFFECT_HEAT_ROCK}, - [BATTLE_WEATHER_SUN_PRIMAL] = {B_WEATHER_SUN_PRIMAL, HOLD_EFFECT_HEAT_ROCK}, - [BATTLE_WEATHER_SANDSTORM] = {B_WEATHER_SANDSTORM, HOLD_EFFECT_SMOOTH_ROCK}, - [BATTLE_WEATHER_HAIL] = {B_WEATHER_HAIL, HOLD_EFFECT_ICY_ROCK}, - [BATTLE_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE}, - [BATTLE_WEATHER_SNOW] = {B_WEATHER_SNOW, HOLD_EFFECT_ICY_ROCK}, - [BATTLE_WEATHER_FOG] = {B_WEATHER_FOG, HOLD_EFFECT_NONE}, -}; - bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility) { u16 battlerAbility = GetBattlerAbility(battler); @@ -4018,15 +3910,17 @@ bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbilit { return FALSE; } - else if (B_ABILITY_WEATHER < GEN_6 && viaAbility && !(gBattleWeather & sWeatherFlagsInfo[battleWeatherId][0])) + else if (B_ABILITY_WEATHER < GEN_6 && viaAbility && !(gBattleWeather & sBattleWeatherInfo[battleWeatherId].flag)) { - gBattleWeather = (sWeatherFlagsInfo[battleWeatherId][0] | sWeatherFlagsInfo[battleWeatherId][0]); + gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag; return TRUE; } - else if (!(gBattleWeather & (sWeatherFlagsInfo[battleWeatherId][0] | sWeatherFlagsInfo[battleWeatherId][0]))) + else if (!(gBattleWeather & sBattleWeatherInfo[battleWeatherId].flag)) { - gBattleWeather = (sWeatherFlagsInfo[battleWeatherId][0]); - if (GetBattlerHoldEffect(battler, TRUE) == sWeatherFlagsInfo[battleWeatherId][1]) + gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag; + if (gBattleWeather & B_WEATHER_PRIMAL_ANY) + gWishFutureKnock.weatherDuration = 0; + if (GetBattlerHoldEffect(battler, TRUE) == sBattleWeatherInfo[battleWeatherId].rock) gWishFutureKnock.weatherDuration = 8; else gWishFutureKnock.weatherDuration = 5;