summaryrefslogtreecommitdiff
path: root/src/contest_ai.c
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-08-20 16:03:47 -0400
committerGitHub <noreply@github.com>2020-08-20 16:03:47 -0400
commit6c34effda93c67a37895e79b684b31b3cb9a2a88 (patch)
treeb7373ea86cb3249a39b92b2aa417023b330ce92c /src/contest_ai.c
parentfadb72696fafe58d210e6d5af480067f08e9fd04 (diff)
parentfa29ff98a342f4f434b96d4e04f47e25ca865512 (diff)
Merge pull request #1138 from GriffinRichards/doc-contest
Document contest
Diffstat (limited to 'src/contest_ai.c')
-rw-r--r--src/contest_ai.c129
1 files changed, 66 insertions, 63 deletions
diff --git a/src/contest_ai.c b/src/contest_ai.c
index 723c503ab..b5e91c314 100644
--- a/src/contest_ai.c
+++ b/src/contest_ai.c
@@ -4,16 +4,17 @@
#include "random.h"
#include "contest_ai.h"
#include "contest_effect.h"
+#include "constants/moves.h"
extern const u8 *gAIScriptPtr;
extern const u8 *gContestAIChecks[];
static void ContestAICmd_score(void);
-static void ContestAICmd_get_turn(void);
-static void ContestAICmd_if_turn_less_than(void);
-static void ContestAICmd_if_turn_more_than(void);
-static void ContestAICmd_if_turn_eq(void);
-static void ContestAICmd_if_turn_not_eq(void);
+static void ContestAICmd_get_appeal_num(void);
+static void ContestAICmd_if_appeal_num_less_than(void);
+static void ContestAICmd_if_appeal_num_more_than(void);
+static void ContestAICmd_if_appeal_num_eq(void);
+static void ContestAICmd_if_appeal_num_not_eq(void);
static void ContestAICmd_get_excitement(void);
static void ContestAICmd_if_excitement_less_than(void);
static void ContestAICmd_if_excitement_more_than(void);
@@ -150,11 +151,11 @@ typedef void (* ContestAICmdFunc)(void);
static const ContestAICmdFunc sContestAICmdTable[] =
{
ContestAICmd_score, // 0x00
- ContestAICmd_get_turn, // 0x01
- ContestAICmd_if_turn_less_than, // 0x02
- ContestAICmd_if_turn_more_than, // 0x03
- ContestAICmd_if_turn_eq, // 0x04
- ContestAICmd_if_turn_not_eq, // 0x05
+ ContestAICmd_get_appeal_num, // 0x01
+ ContestAICmd_if_appeal_num_less_than, // 0x02
+ ContestAICmd_if_appeal_num_more_than, // 0x03
+ ContestAICmd_if_appeal_num_eq, // 0x04
+ ContestAICmd_if_appeal_num_not_eq, // 0x05
ContestAICmd_get_excitement, // 0x06
ContestAICmd_if_excitement_less_than, // 0x07
ContestAICmd_if_excitement_more_than, // 0x08
@@ -288,7 +289,7 @@ static const ContestAICmdFunc sContestAICmdTable[] =
};
static void ContestAI_DoAIProcessing(void);
-static bool8 sub_81563B0(u8);
+static bool8 GetContestantIdByTurn(u8);
static void AIStackPushVar(const u8 *);
static u8 AIStackPop(void);
@@ -297,8 +298,8 @@ void ContestAI_ResetAI(u8 contestantAI)
int i;
memset(&eContestAI, 0, sizeof(struct ContestAIInfo));
- for (i = 0; i < 4; i++)
- eContestAI.unk5[i] = 100;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ eContestAI.moveScores[i] = 100;
eContestAI.contestantId = contestantAI;
eContestAI.stackSize = 0;
@@ -321,16 +322,18 @@ u8 ContestAI_GetActionToUse(void)
while (1)
{
- u8 rval = Random() & 3;
- u8 r2 = eContestAI.unk5[rval];
+ // Randomly choose a move index. If it's the move
+ // with the highest (or tied highest) score, return
+ u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match
+ u8 score = eContestAI.moveScores[moveIdx];
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (r2 < eContestAI.unk5[i])
+ if (score < eContestAI.moveScores[i])
break;
}
- if (i == 4)
- return rval;
+ if (i == MAX_MON_MOVES)
+ return moveIdx;
}
}
@@ -345,26 +348,26 @@ static void ContestAI_DoAIProcessing(void)
case CONTESTAI_SETTING_UP:
gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck];
- if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == 0)
- eContestAI.nextMove = 0; // don't process a move that doesn't exist.
+ if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
+ eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
else
eContestAI.nextMove = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
eContestAI.aiState++;
break;
case CONTESTAI_PROCESSING:
- if (eContestAI.nextMove != 0)
+ if (eContestAI.nextMove != MOVE_NONE)
{
sContestAICmdTable[*gAIScriptPtr](); // run the command.
}
else
{
- eContestAI.unk5[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
+ eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
eContestAI.aiAction |= 1;
}
if (eContestAI.aiAction & 1)
{
eContestAI.nextMoveIndex++;
- if (eContestAI.nextMoveIndex < 4)
+ if (eContestAI.nextMoveIndex < MAX_MON_MOVES)
eContestAI.aiState = 0;
else
// aiState = CONTESTAI_FINISHED
@@ -376,12 +379,12 @@ static void ContestAI_DoAIProcessing(void)
}
}
-static u8 sub_81563B0(u8 var)
+static u8 GetContestantIdByTurn(u8 turn)
{
int i;
- for (i = 0; i < 4; i++)
- if (eContestResources8.turnOrder[i] == var)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ if (eContestAppealResults.turnOrder[i] == turn)
break;
return i;
@@ -389,27 +392,27 @@ static u8 sub_81563B0(u8 var)
static void ContestAICmd_score(void)
{
- s16 score = eContestAI.unk5[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
+ s16 score = eContestAI.moveScores[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
if (score > 255)
score = 255;
else if (score < 0)
score = 0;
- eContestAI.unk5[eContestAI.nextMoveIndex] = score;
+ eContestAI.moveScores[eContestAI.nextMoveIndex] = score;
gAIScriptPtr += 2;
}
-static void ContestAICmd_get_turn(void)
+static void ContestAICmd_get_appeal_num(void)
{
- eContestAI.scriptResult = eContest.turnNumber;
+ eContestAI.scriptResult = eContest.appealNumber;
gAIScriptPtr += 1;
}
-static void ContestAICmd_if_turn_less_than(void)
+static void ContestAICmd_if_appeal_num_less_than(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult < gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -417,9 +420,9 @@ static void ContestAICmd_if_turn_less_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_more_than(void)
+static void ContestAICmd_if_appeal_num_more_than(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult > gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -427,9 +430,9 @@ static void ContestAICmd_if_turn_more_than(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_eq(void)
+static void ContestAICmd_if_appeal_num_eq(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult == gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -437,9 +440,9 @@ static void ContestAICmd_if_turn_eq(void)
gAIScriptPtr += 5;
}
-static void ContestAICmd_if_turn_not_eq(void)
+static void ContestAICmd_if_appeal_num_not_eq(void)
{
- ContestAICmd_get_turn();
+ ContestAICmd_get_appeal_num();
if (eContestAI.scriptResult != gAIScriptPtr[0])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -495,7 +498,7 @@ static void ContestAICmd_if_excitement_not_eq(void)
static void ContestAICmd_get_user_order(void)
{
- eContestAI.scriptResult = eContestResources8.turnOrder[eContestAI.contestantId];
+ eContestAI.scriptResult = eContestAppealResults.turnOrder[eContestAI.contestantId];
gAIScriptPtr += 1;
}
@@ -633,7 +636,7 @@ static void ContestAICmd_unk_19(void)
static void ContestAICmd_unk_1A(void)
{
- eContestAI.scriptResult = gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 1;
}
@@ -1146,9 +1149,9 @@ static void ContestAICmd_if_would_not_finish_combo(void)
static void ContestAICmd_get_condition(void)
{
- int var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].condition / 10;
+ eContestAI.scriptResult = eContestantStatus[contestant].condition / 10;
gAIScriptPtr += 2;
}
@@ -1194,11 +1197,11 @@ static void ContestAICmd_if_condition_not_eq(void)
static void ContestAICmd_get_used_combo_starter(void)
{
- u16 result = 0;
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u16 result = FALSE;
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- if (sub_80DE1E8(var))
- result = gContestMoves[eContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
+ if (IsContestantAllowedToCombo(contestant))
+ result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE;
eContestAI.scriptResult = result;
gAIScriptPtr += 2;
@@ -1246,7 +1249,7 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void)
static void ContestAICmd_check_can_participate(void)
{
- if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1])))
+ if (Contest_IsMonsTurnDisabled(GetContestantIdByTurn(gAIScriptPtr[1])))
eContestAI.scriptResult = FALSE;
else
eContestAI.scriptResult = TRUE;
@@ -1276,9 +1279,9 @@ static void ContestAICmd_if_cannot_participate(void)
static void ContestAICmd_get_val_812A188(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].unk15_3;
+ eContestAI.scriptResult = eContestantStatus[contestant].unk15_3;
gAIScriptPtr += 2;
}
@@ -1304,9 +1307,9 @@ static void ContestAICmd_contest_58(void)
static void ContestAICmd_unk_59(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = eContestantStatus[var].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
+ eContestAI.scriptResult = eContestantStatus[contestant].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
gAIScriptPtr += 2;
}
@@ -1352,9 +1355,9 @@ static void ContestAICmd_unk_5D(void)
static void ContestAICmd_unk_5E(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
- eContestAI.scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI.contestantId];
+ eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId];
gAIScriptPtr += 2;
}
@@ -1400,9 +1403,9 @@ static void ContestAICmd_unk_62(void)
static void ContestAICmd_unk_63(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 turn = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[turn][contestant];
eContestAI.scriptResult = gContestMoves[move].effect;
gAIScriptPtr += 3;
@@ -1450,9 +1453,9 @@ static void ContestAICmd_unk_67(void)
static void ContestAICmd_unk_68(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- s8 result = eContest.excitementHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 turn = gAIScriptPtr[2];
+ s8 result = eContest.excitementHistory[turn][contestant];
eContestAI.scriptResult = result;
gAIScriptPtr += 3;
@@ -1500,9 +1503,9 @@ static void ContestAICmd_unk_6C(void)
static void ContestAICmd_unk_6D(void)
{
- u8 var = sub_81563B0(gAIScriptPtr[1]);
- u8 var2 = gAIScriptPtr[2];
- u16 move = eContest.moveHistory[var2][var];
+ u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
+ u8 turn = gAIScriptPtr[2];
+ u16 move = eContest.moveHistory[turn][contestant];
eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
gAIScriptPtr += 3;