diff --git a/include/battle.h b/include/battle.h index 6c91466a82..b29186c4ce 100644 --- a/include/battle.h +++ b/include/battle.h @@ -137,7 +137,8 @@ struct UnknownFlags u32 flags[4]; }; -#define UNKNOWN_FLAG_FLASH_FIRE 1 +#define RESOURCE_FLAG_FLASH_FIRE 0x1 +#define RESOURCE_FLAG_ROOST 0x2 struct DisableStruct { @@ -578,6 +579,7 @@ struct BattleStruct u8 debugBattler; u8 magnitudeBasePower; u8 presentBasePower; + u8 roostTypes[MAX_BATTLERS_COUNT][3]; }; #define GET_MOVE_TYPE(move, typeArg) \ diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index c5b8f58d1c..f8bfc9ec5c 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -2358,7 +2358,7 @@ static void BattleAICmd_if_flash_fired(void) { u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]); - if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE) + if (gBattleResources->flags->flags[battlerId] & RESOURCE_FLAG_FLASH_FIRE) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; diff --git a/src/battle_util.c b/src/battle_util.c index 29e610de2d..aa85b77018 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1025,6 +1025,7 @@ enum ENDTURN_TAUNT, ENDTURN_YAWN, ENDTURN_ITEMS2, + ENDTURN_ROOST, ENDTURN_BATTLER_COUNT }; @@ -1408,6 +1409,15 @@ u8 DoBattlerEndTurnEffects(void) } gBattleStruct->turnEffectsTracker++; break; + case ENDTURN_ROOST: // Return flying type. + if (gBattleResources->flags->flags[gActiveBattler] & RESOURCE_FLAG_ROOST) + { + gBattleResources->flags->flags[gActiveBattler] &= ~(RESOURCE_FLAG_ROOST); + gBattleMons[gActiveBattler].type1 = gBattleStruct->roostTypes[gActiveBattler][0]; + gBattleMons[gActiveBattler].type2 = gBattleStruct->roostTypes[gActiveBattler][1]; + } + gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_BATTLER_COUNT: // done gBattleStruct->turnEffectsTracker = 0; gBattleStruct->turnEffectsBattlerId++; @@ -2338,7 +2348,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA case ABILITY_FLASH_FIRE: if (moveType == TYPE_FIRE && !(gBattleMons[battler].status1 & STATUS1_FREEZE)) { - if (!(gBattleResources->flags->flags[battler] & UNKNOWN_FLAG_FLASH_FIRE)) + if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE)) { gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gProtectStructs[gBattlerAttacker].notFirstStrike) @@ -2346,7 +2356,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA else gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - gBattleResources->flags->flags[battler] |= UNKNOWN_FLAG_FLASH_FIRE; + gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE; effect = 2; } else @@ -4387,7 +4397,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b MulModifier(&modifier, UQ_4_12(0.5)); break; case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE && gBattleResources->flags->flags[battlerAtk] & UNKNOWN_FLAG_FLASH_FIRE) + if (moveType == TYPE_FIRE && gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_FLASH_FIRE) MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_SWARM: