mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 11:44:17 +01:00
Frisk, would be easier if it didnt scan 2 opponents
This commit is contained in:
parent
e62f1475d4
commit
6a3944d27c
@ -1705,6 +1705,10 @@
|
|||||||
.byte \type
|
.byte \type
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro tryfriskmsg battler:req
|
||||||
|
various \battler, VARIOUS_TRY_FRISK
|
||||||
|
.endm
|
||||||
|
|
||||||
@ helpful macros
|
@ helpful macros
|
||||||
.macro setstatchanger stat:req, stages:req, down:req
|
.macro setstatchanger stat:req, stages:req, down:req
|
||||||
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7
|
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7
|
||||||
|
@ -6887,6 +6887,18 @@ BattleScript_SwitchInAbilityMsg::
|
|||||||
printfromtable gSwitchInAbilityStringIds
|
printfromtable gSwitchInAbilityStringIds
|
||||||
waitmessage 0x40
|
waitmessage 0x40
|
||||||
end3
|
end3
|
||||||
|
|
||||||
|
BattleScript_FriskMsgWithPopup::
|
||||||
|
copybyte gBattlerAbility, gBattlerAttacker
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
BattleScript_FriskMsg::
|
||||||
|
printstring STRINGID_FRISKACTIVATES
|
||||||
|
waitmessage 0x40
|
||||||
|
return
|
||||||
|
|
||||||
|
BattleScript_FriskActivates::
|
||||||
|
tryfriskmsg BS_ATTACKER
|
||||||
|
end3
|
||||||
|
|
||||||
BattleScript_ImposterActivates::
|
BattleScript_ImposterActivates::
|
||||||
transformdataexecution
|
transformdataexecution
|
||||||
|
@ -544,6 +544,8 @@ struct BattleStruct
|
|||||||
struct Illusion illusion[MAX_BATTLERS_COUNT];
|
struct Illusion illusion[MAX_BATTLERS_COUNT];
|
||||||
s8 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier
|
s8 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier
|
||||||
u8 soulheartBattlerId;
|
u8 soulheartBattlerId;
|
||||||
|
u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles.
|
||||||
|
bool8 friskedAbility; // If identifies two mons, show the ability pop-up only once.
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GET_MOVE_TYPE(move, typeArg) \
|
#define GET_MOVE_TYPE(move, typeArg) \
|
||||||
|
@ -336,5 +336,8 @@ extern const u8 BattleScript_SlowStartEnds[];
|
|||||||
extern const u8 BattleScript_HealerActivates[];
|
extern const u8 BattleScript_HealerActivates[];
|
||||||
extern const u8 BattleScript_ScriptingAbilityStatRaise[];
|
extern const u8 BattleScript_ScriptingAbilityStatRaise[];
|
||||||
extern const u8 BattleScript_ReceiverActivates[];
|
extern const u8 BattleScript_ReceiverActivates[];
|
||||||
|
extern const u8 BattleScript_FriskActivates[];
|
||||||
|
extern const u8 BattleScript_FriskMsg[];
|
||||||
|
extern const u8 BattleScript_FriskMsgWithPopup[];
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_SCRIPTS_H
|
#endif // GUARD_BATTLE_SCRIPTS_H
|
||||||
|
@ -152,6 +152,7 @@
|
|||||||
#define VARIOUS_TRY_ACTIVATE_SOULHEART 89
|
#define VARIOUS_TRY_ACTIVATE_SOULHEART 89
|
||||||
#define VARIOUS_TRY_ACTIVATE_RECEIVER 90
|
#define VARIOUS_TRY_ACTIVATE_RECEIVER 90
|
||||||
#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 91
|
#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 91
|
||||||
|
#define VARIOUS_TRY_FRISK 92
|
||||||
|
|
||||||
// Cmd_manipulatedamage
|
// Cmd_manipulatedamage
|
||||||
#define DMG_CHANGE_SIGN 0
|
#define DMG_CHANGE_SIGN 0
|
||||||
|
@ -1231,7 +1231,7 @@ const u16 gDmgHazardsStringIds[] =
|
|||||||
const u16 gSwitchInAbilityStringIds[] =
|
const u16 gSwitchInAbilityStringIds[] =
|
||||||
{
|
{
|
||||||
STRINGID_MOLDBREAKERENTERS, STRINGID_TERAVOLTENTERS, STRINGID_TURBOBLAZEENTERS,
|
STRINGID_MOLDBREAKERENTERS, STRINGID_TERAVOLTENTERS, STRINGID_TURBOBLAZEENTERS,
|
||||||
STRINGID_SLOWSTARTENTERS, STRINGID_UNNERVEENTERS, STRINGID_ANTICIPATIONACTIVATES
|
STRINGID_SLOWSTARTENTERS, STRINGID_UNNERVEENTERS, STRINGID_ANTICIPATIONACTIVATES,
|
||||||
};
|
};
|
||||||
|
|
||||||
const u16 gMissStringIds[] =
|
const u16 gMissStringIds[] =
|
||||||
|
@ -6817,6 +6817,33 @@ static void Cmd_various(void)
|
|||||||
else
|
else
|
||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
return;
|
return;
|
||||||
|
case VARIOUS_TRY_FRISK:
|
||||||
|
while (gBattleStruct->friskedBattler < gBattlersCount)
|
||||||
|
{
|
||||||
|
gBattlerTarget = gBattleStruct->friskedBattler++;
|
||||||
|
if (GET_BATTLER_SIDE2(gActiveBattler) != GET_BATTLER_SIDE2(gBattlerTarget)
|
||||||
|
&& IsBattlerAlive(gBattlerTarget)
|
||||||
|
&& gBattleMons[gBattlerTarget].item != ITEM_NONE)
|
||||||
|
{
|
||||||
|
gLastUsedItem = gBattleMons[gBattlerTarget].item;
|
||||||
|
RecordItemEffectBattle(gBattlerTarget, GetBattlerHoldEffect(gBattlerTarget, FALSE));
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
// If Frisk identifies two mons' items, show the pop-up only once.
|
||||||
|
if (gBattleStruct->friskedAbility)
|
||||||
|
{
|
||||||
|
gBattlescriptCurrInstr = BattleScript_FriskMsg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gBattleStruct->friskedAbility = TRUE;
|
||||||
|
gBattlescriptCurrInstr = BattleScript_FriskMsgWithPopup;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gBattleStruct->friskedBattler = 0;
|
||||||
|
gBattleStruct->friskedAbility = FALSE;
|
||||||
|
break;
|
||||||
case VARIOUS_TRACE_ABILITY:
|
case VARIOUS_TRACE_ABILITY:
|
||||||
gBattleMons[gActiveBattler].ability = gBattleStruct->tracedAbility[gActiveBattler];
|
gBattleMons[gActiveBattler].ability = gBattleStruct->tracedAbility[gActiveBattler];
|
||||||
RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
|
RecordAbilityBattle(gActiveBattler, gBattleMons[gActiveBattler].ability);
|
||||||
|
@ -2911,6 +2911,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ABILITY_FRISK:
|
||||||
|
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||||
|
{
|
||||||
|
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
|
return effect; // Note: It returns effect as to not record the ability if Frisk does not activate.
|
||||||
case ABILITY_DOWNLOAD:
|
case ABILITY_DOWNLOAD:
|
||||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||||
{
|
{
|
||||||
|
@ -7296,7 +7296,7 @@ const struct BaseStats gBaseStats[] =
|
|||||||
.growthRate = GROWTH_SLOW,
|
.growthRate = GROWTH_SLOW,
|
||||||
.eggGroup1 = EGG_GROUP_FLYING,
|
.eggGroup1 = EGG_GROUP_FLYING,
|
||||||
.eggGroup2 = EGG_GROUP_FLYING,
|
.eggGroup2 = EGG_GROUP_FLYING,
|
||||||
.abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY},
|
.abilities = {ABILITY_FRISK, ABILITY_FRISK},
|
||||||
.safariZoneFleeRate = 0,
|
.safariZoneFleeRate = 0,
|
||||||
.bodyColor = BODY_COLOR_GRAY,
|
.bodyColor = BODY_COLOR_GRAY,
|
||||||
.noFlip = FALSE,
|
.noFlip = FALSE,
|
||||||
@ -8498,7 +8498,7 @@ const struct BaseStats gBaseStats[] =
|
|||||||
.growthRate = GROWTH_MEDIUM_FAST,
|
.growthRate = GROWTH_MEDIUM_FAST,
|
||||||
.eggGroup1 = EGG_GROUP_FIELD,
|
.eggGroup1 = EGG_GROUP_FIELD,
|
||||||
.eggGroup2 = EGG_GROUP_FIELD,
|
.eggGroup2 = EGG_GROUP_FIELD,
|
||||||
.abilities = {ABILITY_PICKUP, ABILITY_NONE},
|
.abilities = {ABILITY_FRISK, ABILITY_FRISK},
|
||||||
.safariZoneFleeRate = 0,
|
.safariZoneFleeRate = 0,
|
||||||
.bodyColor = BODY_COLOR_BROWN,
|
.bodyColor = BODY_COLOR_BROWN,
|
||||||
.noFlip = FALSE,
|
.noFlip = FALSE,
|
||||||
@ -9994,15 +9994,15 @@ const struct BaseStats gBaseStats[] =
|
|||||||
.evYield_Speed = 0,
|
.evYield_Speed = 0,
|
||||||
.evYield_SpAttack = 0,
|
.evYield_SpAttack = 0,
|
||||||
.evYield_SpDefense = 0,
|
.evYield_SpDefense = 0,
|
||||||
.item1 = ITEM_NONE,
|
.item1 = ITEM_LEFTOVERS,
|
||||||
.item2 = ITEM_NONE,
|
.item2 = ITEM_LEFTOVERS,
|
||||||
.genderRatio = PERCENT_FEMALE(25),
|
.genderRatio = PERCENT_FEMALE(25),
|
||||||
.eggCycles = 20,
|
.eggCycles = 20,
|
||||||
.friendship = 70,
|
.friendship = 70,
|
||||||
.growthRate = GROWTH_FLUCTUATING,
|
.growthRate = GROWTH_FLUCTUATING,
|
||||||
.eggGroup1 = EGG_GROUP_HUMAN_LIKE,
|
.eggGroup1 = EGG_GROUP_HUMAN_LIKE,
|
||||||
.eggGroup2 = EGG_GROUP_HUMAN_LIKE,
|
.eggGroup2 = EGG_GROUP_HUMAN_LIKE,
|
||||||
.abilities = {ABILITY_THICK_FAT, ABILITY_GUTS},
|
.abilities = {ABILITY_FRISK, ABILITY_FRISK},
|
||||||
.safariZoneFleeRate = 0,
|
.safariZoneFleeRate = 0,
|
||||||
.bodyColor = BODY_COLOR_YELLOW,
|
.bodyColor = BODY_COLOR_YELLOW,
|
||||||
.noFlip = FALSE,
|
.noFlip = FALSE,
|
||||||
@ -10026,15 +10026,15 @@ const struct BaseStats gBaseStats[] =
|
|||||||
.evYield_Speed = 0,
|
.evYield_Speed = 0,
|
||||||
.evYield_SpAttack = 0,
|
.evYield_SpAttack = 0,
|
||||||
.evYield_SpDefense = 0,
|
.evYield_SpDefense = 0,
|
||||||
.item1 = ITEM_NONE,
|
.item1 = ITEM_LEFTOVERS,
|
||||||
.item2 = ITEM_KINGS_ROCK,
|
.item2 = ITEM_LEFTOVERS,
|
||||||
.genderRatio = PERCENT_FEMALE(25),
|
.genderRatio = PERCENT_FEMALE(25),
|
||||||
.eggCycles = 20,
|
.eggCycles = 20,
|
||||||
.friendship = 70,
|
.friendship = 70,
|
||||||
.growthRate = GROWTH_FLUCTUATING,
|
.growthRate = GROWTH_FLUCTUATING,
|
||||||
.eggGroup1 = EGG_GROUP_HUMAN_LIKE,
|
.eggGroup1 = EGG_GROUP_HUMAN_LIKE,
|
||||||
.eggGroup2 = EGG_GROUP_HUMAN_LIKE,
|
.eggGroup2 = EGG_GROUP_HUMAN_LIKE,
|
||||||
.abilities = {ABILITY_THICK_FAT, ABILITY_GUTS},
|
.abilities = {ABILITY_FRISK, ABILITY_FRISK},
|
||||||
.safariZoneFleeRate = 0,
|
.safariZoneFleeRate = 0,
|
||||||
.bodyColor = BODY_COLOR_BROWN,
|
.bodyColor = BODY_COLOR_BROWN,
|
||||||
.noFlip = FALSE,
|
.noFlip = FALSE,
|
||||||
|
Loading…
Reference in New Issue
Block a user