Add function to adjust AI scoring for generalized item effects (#6247)
This commit is contained in:
parent
9c4fbbf274
commit
a42de40eb2
@ -35,7 +35,7 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32);
|
|||||||
#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target
|
#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target
|
||||||
#define NO_DAMAGE_OR_FAILS -20 // Move fails or does no damage
|
#define NO_DAMAGE_OR_FAILS -20 // Move fails or does no damage
|
||||||
|
|
||||||
// Scores given in AI_CalcMoveEffectScore
|
// Scores given in AI_CalcMoveEffectScore and AI_CalcHoldEffectMoveScore
|
||||||
#define NO_INCREASE 0
|
#define NO_INCREASE 0
|
||||||
#define WEAK_EFFECT 1
|
#define WEAK_EFFECT 1
|
||||||
#define DECENT_EFFECT 2
|
#define DECENT_EFFECT 2
|
||||||
|
|||||||
@ -43,6 +43,9 @@
|
|||||||
#define SHOULD_SWITCH_REGENERATOR_PERCENTAGE 50
|
#define SHOULD_SWITCH_REGENERATOR_PERCENTAGE 50
|
||||||
#define SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE 20
|
#define SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE 20
|
||||||
|
|
||||||
|
// AI held item-based move scoring
|
||||||
|
#define BLUNDER_POLICY_ACCURACY_THRESHOLD 75 // Moves with accuracy equal below this value are prioritized when holding Blunder Policy
|
||||||
|
|
||||||
// AI prediction chances
|
// AI prediction chances
|
||||||
#define PREDICT_SWITCH_CHANCE 50
|
#define PREDICT_SWITCH_CHANCE 50
|
||||||
|
|
||||||
|
|||||||
@ -3295,6 +3295,34 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId)
|
|||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||||
|
{
|
||||||
|
struct AiLogicData *aiData = AI_DATA;
|
||||||
|
u32 holdEffect = aiData->holdEffects[battlerAtk];
|
||||||
|
|
||||||
|
s32 score = 0;
|
||||||
|
|
||||||
|
switch (holdEffect)
|
||||||
|
{
|
||||||
|
case HOLD_EFFECT_BLUNDER_POLICY:
|
||||||
|
{
|
||||||
|
u32 moveAcc = aiData->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
|
||||||
|
|
||||||
|
if (moveAcc <= BLUNDER_POLICY_ACCURACY_THRESHOLD)
|
||||||
|
{
|
||||||
|
ADJUST_SCORE(GOOD_EFFECT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ADJUST_SCORE(-DECENT_EFFECT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||||
{
|
{
|
||||||
// move data
|
// move data
|
||||||
@ -4831,6 +4859,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
|||||||
}
|
}
|
||||||
|
|
||||||
ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move));
|
ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move));
|
||||||
|
ADJUST_SCORE(AI_CalcHoldEffectMoveScore(battlerAtk, battlerDef, move));
|
||||||
|
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user