mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-04-26 02:14:22 -05:00
Tie Break failsafe correction (#8596)
Co-authored-by: hedara90 <90hedara@gmail.com>
This commit is contained in:
parent
7ff31d5e2f
commit
c27f770db9
|
|
@ -556,6 +556,33 @@ static void BattleTest_Run(void *data)
|
|||
PrintTestName();
|
||||
}
|
||||
|
||||
static bool32 IsTieBreakTag(enum RandomTag tag)
|
||||
{
|
||||
switch (tag)
|
||||
{
|
||||
case RNG_AI_SCORE_TIE_SINGLES:
|
||||
case RNG_AI_SCORE_TIE_DOUBLES_MOVE:
|
||||
case RNG_AI_SCORE_TIE_DOUBLES_TARGET:
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void SanitizeTieCounts(void)
|
||||
{
|
||||
if (DATA.trial.scoreTieCount < 1)
|
||||
DATA.trial.scoreTieCount = 1;
|
||||
if (DATA.trial.scoreTieCount > MAX_MON_MOVES)
|
||||
DATA.trial.scoreTieCount = MAX_MON_MOVES;
|
||||
|
||||
if (DATA.trial.targetTieCount < 1)
|
||||
DATA.trial.targetTieCount = 1;
|
||||
if (DATA.trial.targetTieCount >= gBattlersCount)
|
||||
DATA.trial.targetTieCount = (gBattlersCount - 1);
|
||||
}
|
||||
|
||||
u32 RandomUniformTrials(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32), void *caller)
|
||||
{
|
||||
STATE->didRunRandomly = TRUE;
|
||||
|
|
@ -577,7 +604,7 @@ u32 RandomUniformTrials(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32
|
|||
|
||||
if (!reject)
|
||||
{
|
||||
if (STATE->trials != (hi - lo + 1))
|
||||
if ((STATE->trials != (hi - lo + 1)) && !(IsTieBreakTag(tag)))
|
||||
Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomUniform called from %p with tag %d and inconsistent trials %d and %d", caller, tag, STATE->trials, hi - lo + 1);
|
||||
return STATE->runTrial + lo;
|
||||
}
|
||||
|
|
@ -651,6 +678,10 @@ static u32 BattleTest_RandomUniform(enum RandomTag tag, u32 lo, u32 hi, bool32 (
|
|||
return turn->rng.value;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsTieBreakTag(tag))
|
||||
SanitizeTieCounts();
|
||||
|
||||
//trials
|
||||
switch (tag)
|
||||
{
|
||||
|
|
@ -661,12 +692,12 @@ static u32 BattleTest_RandomUniform(enum RandomTag tag, u32 lo, u32 hi, bool32 (
|
|||
case SCORE_TIE_HI:
|
||||
return (DATA.trial.scoreTieCount - 1);
|
||||
case SCORE_TIE_RANDOM:
|
||||
if (DATA.trial.scoreTieCount == 0)
|
||||
return 0; // Failsafe
|
||||
else
|
||||
return RandomUniformTrials(tag, lo, hi, reject, caller);
|
||||
return RandomUniformTrials(tag, lo, hi, reject, caller);
|
||||
case SCORE_TIE_CHOSEN:
|
||||
return DATA.scoreTieOverride;
|
||||
if (DATA.scoreTieOverride >= DATA.trial.scoreTieCount)
|
||||
return (DATA.trial.scoreTieCount - 1);
|
||||
else
|
||||
return DATA.scoreTieOverride;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -676,12 +707,12 @@ static u32 BattleTest_RandomUniform(enum RandomTag tag, u32 lo, u32 hi, bool32 (
|
|||
case TARGET_TIE_HI:
|
||||
return (DATA.trial.targetTieCount - 1);
|
||||
case TARGET_TIE_RANDOM:
|
||||
if (DATA.trial.targetTieCount == 0)
|
||||
return 0; // Failsafe
|
||||
else
|
||||
return RandomUniformTrials(tag, lo, hi, reject, caller);
|
||||
return RandomUniformTrials(tag, lo, hi, reject, caller);
|
||||
case TARGET_TIE_CHOSEN:
|
||||
return DATA.targetTieOverride;
|
||||
if (DATA.targetTieOverride >= DATA.trial.targetTieCount)
|
||||
return (DATA.trial.targetTieCount - 1);
|
||||
else
|
||||
return DATA.targetTieOverride;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user