Merge https://github.com/pret/pokeemerald into spritesheet
This commit is contained in:
@@ -3964,9 +3964,9 @@ void BattleTurnPassed(void)
|
||||
TurnValuesCleanUp(TRUE);
|
||||
if (gBattleOutcome == 0)
|
||||
{
|
||||
if (UpdateTurnCounters())
|
||||
if (DoFieldEndTurnEffects())
|
||||
return;
|
||||
if (TurnBasedEffects())
|
||||
if (DoBattlerEndTurnEffects())
|
||||
return;
|
||||
}
|
||||
if (HandleFaintedMonActions())
|
||||
@@ -4008,7 +4008,7 @@ void BattleTurnPassed(void)
|
||||
gChosenMoveByBattler[i] = MOVE_NONE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
*(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
|
||||
|
||||
*(&gBattleStruct->field_91) = gAbsentBattlerFlags;
|
||||
|
||||
@@ -1120,9 +1120,9 @@ static void atk01_accuracycheck(void)
|
||||
{
|
||||
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
|
||||
|
||||
if (move == 0xFFFE || move == 0xFFFF)
|
||||
if (move == NO_ACC_CALC || move == NO_ACC_CALC_CHECK_LOCK_ON)
|
||||
{
|
||||
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
|
||||
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == NO_ACC_CALC_CHECK_LOCK_ON && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
|
||||
gBattlescriptCurrInstr += 7;
|
||||
else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
|
||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||
@@ -4378,22 +4378,22 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
|
||||
static void atk47_setgraphicalstatchangevalues(void)
|
||||
{
|
||||
u8 value = 0;
|
||||
switch (gBattleScripting.statChanger & 0xF0)
|
||||
switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger))
|
||||
{
|
||||
case 0x10: // +1
|
||||
case SET_STAT_BUFF_VALUE(1): // +1
|
||||
value = 0xF;
|
||||
break;
|
||||
case 0x20: // +2
|
||||
case SET_STAT_BUFF_VALUE(2): // +2
|
||||
value = 0x27;
|
||||
break;
|
||||
case 0x90: // -1
|
||||
case SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE: // -1
|
||||
value = 0x16;
|
||||
break;
|
||||
case 0xA0: // -2
|
||||
case SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE: // -2
|
||||
value = 0x2E;
|
||||
break;
|
||||
}
|
||||
gBattleScripting.animArg1 = (gBattleScripting.statChanger & 0xF) + value - 1;
|
||||
gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1;
|
||||
gBattleScripting.animArg2 = 0;
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
@@ -4479,16 +4479,16 @@ static void atk48_playstatchangeanimation(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount < 2)
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount < 2)
|
||||
{
|
||||
gBattlescriptCurrInstr += 4;
|
||||
}
|
||||
else if (changeableStatsCount != 0 && gBattleScripting.field_1B == 0)
|
||||
else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed)
|
||||
{
|
||||
BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount > 1)
|
||||
gBattleScripting.field_1B = 1;
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount > 1)
|
||||
gBattleScripting.statAnimPlayed = TRUE;
|
||||
gBattlescriptCurrInstr += 4;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -426,7 +426,7 @@ u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check)
|
||||
|
||||
gPotentialItemEffectBattler = battlerId;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (gBattleMons[battlerId].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE)
|
||||
unusableMoves |= gBitTable[i];
|
||||
@@ -490,7 +490,22 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
|
||||
return imprisionedMoves;
|
||||
}
|
||||
|
||||
u8 UpdateTurnCounters(void)
|
||||
enum
|
||||
{
|
||||
ENDTURN_ORDER,
|
||||
ENDTURN_REFLECT,
|
||||
ENDTURN_LIGHT_SCREEN,
|
||||
ENDTURN_MIST,
|
||||
ENDTURN_SAFEGUARD,
|
||||
ENDTURN_WISH,
|
||||
ENDTURN_RAIN,
|
||||
ENDTURN_SANDSTORM,
|
||||
ENDTURN_SUN,
|
||||
ENDTURN_HAIL,
|
||||
ENDTURN_FIELD_COUNT,
|
||||
};
|
||||
|
||||
u8 DoFieldEndTurnEffects(void)
|
||||
{
|
||||
u8 effect = 0;
|
||||
s32 i;
|
||||
@@ -508,7 +523,7 @@ u8 UpdateTurnCounters(void)
|
||||
|
||||
switch (gBattleStruct->turnCountersTracker)
|
||||
{
|
||||
case 0:
|
||||
case ENDTURN_ORDER:
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
gBattlerByTurnOrder[i] = i;
|
||||
@@ -530,7 +545,7 @@ u8 UpdateTurnCounters(void)
|
||||
gBattleStruct->turnSideTracker = 0;
|
||||
}
|
||||
// fall through
|
||||
case 1:
|
||||
case ENDTURN_REFLECT:
|
||||
while (gBattleStruct->turnSideTracker < 2)
|
||||
{
|
||||
side = gBattleStruct->turnSideTracker;
|
||||
@@ -555,7 +570,7 @@ u8 UpdateTurnCounters(void)
|
||||
gBattleStruct->turnSideTracker = 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case ENDTURN_LIGHT_SCREEN:
|
||||
while (gBattleStruct->turnSideTracker < 2)
|
||||
{
|
||||
side = gBattleStruct->turnSideTracker;
|
||||
@@ -581,7 +596,7 @@ u8 UpdateTurnCounters(void)
|
||||
gBattleStruct->turnSideTracker = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
case ENDTURN_MIST:
|
||||
while (gBattleStruct->turnSideTracker < 2)
|
||||
{
|
||||
side = gBattleStruct->turnSideTracker;
|
||||
@@ -605,7 +620,7 @@ u8 UpdateTurnCounters(void)
|
||||
gBattleStruct->turnSideTracker = 0;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case ENDTURN_SAFEGUARD:
|
||||
while (gBattleStruct->turnSideTracker < 2)
|
||||
{
|
||||
side = gBattleStruct->turnSideTracker;
|
||||
@@ -629,7 +644,7 @@ u8 UpdateTurnCounters(void)
|
||||
gBattleStruct->turnSideTracker = 0;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
case ENDTURN_WISH:
|
||||
while (gBattleStruct->turnSideTracker < gBattlersCount)
|
||||
{
|
||||
gActiveBattler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
|
||||
@@ -650,7 +665,7 @@ u8 UpdateTurnCounters(void)
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
case ENDTURN_RAIN:
|
||||
if (gBattleWeather & WEATHER_RAIN_ANY)
|
||||
{
|
||||
if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
|
||||
@@ -680,7 +695,7 @@ u8 UpdateTurnCounters(void)
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case 7:
|
||||
case ENDTURN_SANDSTORM:
|
||||
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
|
||||
{
|
||||
if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
||||
@@ -700,7 +715,7 @@ u8 UpdateTurnCounters(void)
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case 8:
|
||||
case ENDTURN_SUN:
|
||||
if (gBattleWeather & WEATHER_SUN_ANY)
|
||||
{
|
||||
if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
||||
@@ -718,8 +733,8 @@ u8 UpdateTurnCounters(void)
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case 9:
|
||||
if (gBattleWeather & WEATHER_HAIL)
|
||||
case ENDTURN_HAIL:
|
||||
if (gBattleWeather & WEATHER_HAIL_ANY)
|
||||
{
|
||||
if (--gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
@@ -738,7 +753,7 @@ u8 UpdateTurnCounters(void)
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case 10:
|
||||
case ENDTURN_FIELD_COUNT:
|
||||
effect++;
|
||||
break;
|
||||
}
|
||||
@@ -746,14 +761,36 @@ u8 UpdateTurnCounters(void)
|
||||
return (gBattleMainFunc != BattleTurnPassed);
|
||||
}
|
||||
|
||||
#define TURNBASED_MAX_CASE 19
|
||||
enum
|
||||
{
|
||||
ENDTURN_INGRAIN,
|
||||
ENDTURN_ABILITIES,
|
||||
ENDTURN_ITEMS1,
|
||||
ENDTURN_LEECH_SEED,
|
||||
ENDTURN_POISON,
|
||||
ENDTURN_BAD_POISON,
|
||||
ENDTURN_BURN,
|
||||
ENDTURN_NIGHTMARES,
|
||||
ENDTURN_CURSE,
|
||||
ENDTURN_WRAP,
|
||||
ENDTURN_UPROAR,
|
||||
ENDTURN_THRASH,
|
||||
ENDTURN_DISABLE,
|
||||
ENDTURN_ENCORE,
|
||||
ENDTURN_LOCK_ON,
|
||||
ENDTURN_CHARGE,
|
||||
ENDTURN_TAUNT,
|
||||
ENDTURN_YAWN,
|
||||
ENDTURN_ITEMS2,
|
||||
ENDTURN_BATTLER_COUNT
|
||||
};
|
||||
|
||||
u8 TurnBasedEffects(void)
|
||||
u8 DoBattlerEndTurnEffects(void)
|
||||
{
|
||||
u8 effect = 0;
|
||||
|
||||
gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20);
|
||||
while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE)
|
||||
while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT)
|
||||
{
|
||||
gActiveBattler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId];
|
||||
if (gAbsentBattlerFlags & gBitTable[gActiveBattler])
|
||||
@@ -764,7 +801,7 @@ u8 TurnBasedEffects(void)
|
||||
{
|
||||
switch (gBattleStruct->turnEffectsTracker)
|
||||
{
|
||||
case 0: // ingrain
|
||||
case ENDTURN_INGRAIN: // ingrain
|
||||
if ((gStatuses3[gActiveBattler] & STATUS3_ROOTED)
|
||||
&& gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP
|
||||
&& gBattleMons[gActiveBattler].hp != 0)
|
||||
@@ -778,22 +815,22 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 1: // end turn abilities
|
||||
case ENDTURN_ABILITIES: // end turn abilities
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBattler, 0, 0, 0))
|
||||
effect++;
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 2: // item effects
|
||||
case ENDTURN_ITEMS1: // item effects
|
||||
if (ItemBattleEffects(1, gActiveBattler, 0))
|
||||
effect++;
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 18: // item effects again
|
||||
case ENDTURN_ITEMS2: // item effects again
|
||||
if (ItemBattleEffects(1, gActiveBattler, 1))
|
||||
effect++;
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 3: // leech seed
|
||||
case ENDTURN_LEECH_SEED: // leech seed
|
||||
if ((gStatuses3[gActiveBattler] & STATUS3_LEECHSEED)
|
||||
&& gBattleMons[gStatuses3[gActiveBattler] & STATUS3_LEECHSEED_BATTLER].hp != 0
|
||||
&& gBattleMons[gActiveBattler].hp != 0)
|
||||
@@ -809,7 +846,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 4: // poison
|
||||
case ENDTURN_POISON: // poison
|
||||
if ((gBattleMons[gActiveBattler].status1 & STATUS1_POISON) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
|
||||
@@ -820,7 +857,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 5: // toxic poison
|
||||
case ENDTURN_BAD_POISON: // toxic poison
|
||||
if ((gBattleMons[gActiveBattler].status1 & STATUS1_TOXIC_POISON) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 16;
|
||||
@@ -834,7 +871,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 6: // burn
|
||||
case ENDTURN_BURN: // burn
|
||||
if ((gBattleMons[gActiveBattler].status1 & STATUS1_BURN) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 8;
|
||||
@@ -845,7 +882,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 7: // spooky nightmares
|
||||
case ENDTURN_NIGHTMARES: // spooky nightmares
|
||||
if ((gBattleMons[gActiveBattler].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
// R/S does not perform this sleep check, which causes the nightmare effect to
|
||||
@@ -865,7 +902,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 8: // curse
|
||||
case ENDTURN_CURSE: // curse
|
||||
if ((gBattleMons[gActiveBattler].status2 & STATUS2_CURSED) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4;
|
||||
@@ -876,7 +913,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 9: // wrap
|
||||
case ENDTURN_WRAP: // wrap
|
||||
if ((gBattleMons[gActiveBattler].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBattler].hp != 0)
|
||||
{
|
||||
gBattleMons[gActiveBattler].status2 -= 0x2000;
|
||||
@@ -909,7 +946,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 10: // uproar
|
||||
case ENDTURN_UPROAR: // uproar
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_UPROAR)
|
||||
{
|
||||
for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++)
|
||||
@@ -958,7 +995,7 @@ u8 TurnBasedEffects(void)
|
||||
if (effect != 2)
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 11: // thrash
|
||||
case ENDTURN_THRASH: // thrash
|
||||
if (gBattleMons[gActiveBattler].status2 & STATUS2_LOCK_CONFUSE)
|
||||
{
|
||||
gBattleMons[gActiveBattler].status2 -= 0x400;
|
||||
@@ -980,7 +1017,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 12: // disable
|
||||
case ENDTURN_DISABLE: // disable
|
||||
if (gDisableStructs[gActiveBattler].disableTimer1 != 0)
|
||||
{
|
||||
s32 i;
|
||||
@@ -1003,7 +1040,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 13: // encore
|
||||
case ENDTURN_ENCORE: // encore
|
||||
if (gDisableStructs[gActiveBattler].encoreTimer1 != 0)
|
||||
{
|
||||
if (gBattleMons[gActiveBattler].moves[gDisableStructs[gActiveBattler].encoredMovePos] != gDisableStructs[gActiveBattler].encoredMove) // pokemon does not have the encored move anymore
|
||||
@@ -1022,22 +1059,22 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 14: // lock-on decrement
|
||||
case ENDTURN_LOCK_ON: // lock-on decrement
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_ALWAYS_HITS)
|
||||
gStatuses3[gActiveBattler] -= 0x8;
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 15: // charge
|
||||
case ENDTURN_CHARGE: // charge
|
||||
if (gDisableStructs[gActiveBattler].chargeTimer1 && --gDisableStructs[gActiveBattler].chargeTimer1 == 0)
|
||||
gStatuses3[gActiveBattler] &= ~STATUS3_CHARGED_UP;
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 16: // taunt
|
||||
case ENDTURN_TAUNT: // taunt
|
||||
if (gDisableStructs[gActiveBattler].tauntTimer1)
|
||||
gDisableStructs[gActiveBattler].tauntTimer1--;
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 17: // yawn
|
||||
case ENDTURN_YAWN: // yawn
|
||||
if (gStatuses3[gActiveBattler] & STATUS3_YAWN)
|
||||
{
|
||||
gStatuses3[gActiveBattler] -= 0x800;
|
||||
@@ -1056,7 +1093,7 @@ u8 TurnBasedEffects(void)
|
||||
}
|
||||
gBattleStruct->turnEffectsTracker++;
|
||||
break;
|
||||
case 19: // done
|
||||
case ENDTURN_BATTLER_COUNT: // done
|
||||
gBattleStruct->turnEffectsTracker = 0;
|
||||
gBattleStruct->turnEffectsBattlerId++;
|
||||
break;
|
||||
@@ -1264,7 +1301,24 @@ void TryClearRageStatuses(void)
|
||||
}
|
||||
}
|
||||
|
||||
#define ATKCANCELLER_MAX_CASE 14
|
||||
enum
|
||||
{
|
||||
CANCELLER_FLAGS,
|
||||
CANCELLER_ASLEEP,
|
||||
CANCELLER_FROZEN,
|
||||
CANCELLER_TRUANT,
|
||||
CANCELLER_RECHARGE,
|
||||
CANCELLER_FLINCH,
|
||||
CANCELLER_DISABLED,
|
||||
CANCELLER_TAUNTED,
|
||||
CANCELLER_IMPRISONED,
|
||||
CANCELLER_CONFUSED,
|
||||
CANCELLER_PARALYSED,
|
||||
CANCELLER_IN_LOVE,
|
||||
CANCELLER_BIDE,
|
||||
CANCELLER_THAW,
|
||||
CANCELLER_END,
|
||||
};
|
||||
|
||||
u8 AtkCanceller_UnableToUseMove(void)
|
||||
{
|
||||
@@ -1274,12 +1328,12 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
{
|
||||
switch (gBattleStruct->atkCancellerTracker)
|
||||
{
|
||||
case 0: // flags clear
|
||||
case CANCELLER_FLAGS: // flags clear
|
||||
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_DESTINY_BOND);
|
||||
gStatuses3[gBattlerAttacker] &= ~(STATUS3_GRUDGE);
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 1: // check being asleep
|
||||
case CANCELLER_ASLEEP: // check being asleep
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
if (UproarWakeUpCheck(gBattlerAttacker))
|
||||
@@ -1323,7 +1377,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 2: // check being frozen
|
||||
case CANCELLER_FROZEN: // check being frozen
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
|
||||
{
|
||||
if (Random() % 5)
|
||||
@@ -1350,7 +1404,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 3: // truant
|
||||
case CANCELLER_TRUANT: // truant
|
||||
if (gBattleMons[gBattlerAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBattlerAttacker].truantCounter)
|
||||
{
|
||||
CancelMultiTurnMoves(gBattlerAttacker);
|
||||
@@ -1362,7 +1416,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 4: // recharge
|
||||
case CANCELLER_RECHARGE: // recharge
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_RECHARGE)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RECHARGE);
|
||||
@@ -1374,7 +1428,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 5: // flinch
|
||||
case CANCELLER_FLINCH: // flinch
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_FLINCHED);
|
||||
@@ -1386,7 +1440,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 6: // disabled move
|
||||
case CANCELLER_DISABLED: // disabled move
|
||||
if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != 0)
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].usedDisabledMove = 1;
|
||||
@@ -1398,7 +1452,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 7: // taunt
|
||||
case CANCELLER_TAUNTED: // taunt
|
||||
if (gDisableStructs[gBattlerAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0)
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].usedTauntedMove = 1;
|
||||
@@ -1409,7 +1463,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 8: // imprisoned
|
||||
case CANCELLER_IMPRISONED: // imprisoned
|
||||
if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].usedImprisionedMove = 1;
|
||||
@@ -1420,7 +1474,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 9: // confusion
|
||||
case CANCELLER_CONFUSED: // confusion
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_CONFUSION)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status2--;
|
||||
@@ -1450,7 +1504,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 10: // paralysis
|
||||
case CANCELLER_PARALYSED: // paralysis
|
||||
if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0)
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].prlzImmobility = 1;
|
||||
@@ -1462,7 +1516,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 11: // infatuation
|
||||
case CANCELLER_IN_LOVE: // infatuation
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
|
||||
{
|
||||
gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10);
|
||||
@@ -1482,7 +1536,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 12: // bide
|
||||
case CANCELLER_BIDE: // bide
|
||||
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_BIDE)
|
||||
{
|
||||
gBattleMons[gBattlerAttacker].status2 -= 0x100;
|
||||
@@ -1512,7 +1566,7 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case 13: // move thawing
|
||||
case CANCELLER_THAW: // move thawing
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)
|
||||
{
|
||||
if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT)
|
||||
@@ -1526,11 +1580,11 @@ u8 AtkCanceller_UnableToUseMove(void)
|
||||
}
|
||||
gBattleStruct->atkCancellerTracker++;
|
||||
break;
|
||||
case ATKCANCELLER_MAX_CASE:
|
||||
case CANCELLER_END:
|
||||
break;
|
||||
}
|
||||
|
||||
} while (gBattleStruct->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0);
|
||||
} while (gBattleStruct->atkCancellerTracker != CANCELLER_END && effect == 0);
|
||||
|
||||
if (effect == 2)
|
||||
{
|
||||
|
||||
@@ -631,7 +631,7 @@ static void CB2_EggHatch_1(void)
|
||||
GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
|
||||
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
|
||||
PlayFanfare(371);
|
||||
PlayFanfare(MUS_FANFA5);
|
||||
sEggHatchData->CB2_state++;
|
||||
PutWindowTilemap(sEggHatchData->windowId);
|
||||
CopyWindowToVram(sEggHatchData->windowId, 3);
|
||||
|
||||
@@ -27,21 +27,8 @@
|
||||
#include "scanline_effect.h"
|
||||
#include "menu_helpers.h"
|
||||
#include "daycare.h"
|
||||
|
||||
struct ContestMove
|
||||
{
|
||||
u8 effect;
|
||||
u8 type;
|
||||
u8 comboID;
|
||||
u8 combo[4];
|
||||
};
|
||||
|
||||
struct ContestEffect
|
||||
{
|
||||
u8 type;
|
||||
u8 appeal;
|
||||
u8 jam;
|
||||
};
|
||||
#include "data2.h"
|
||||
#include "contest.h"
|
||||
|
||||
extern struct UnkSummaryStruct* gUnknown_0203CF1C;
|
||||
extern struct BgTemplate gUnknown_0861CBB4;
|
||||
@@ -69,6 +56,8 @@ extern u8 gUnknown_0861CE74[];
|
||||
extern u8 gUnknown_0861CE7B[];
|
||||
extern struct WindowTemplate gUnknown_0861CCEC;
|
||||
extern struct WindowTemplate gUnknown_0861CD14;
|
||||
extern const u8 *const gContestEffectDescriptionPointers[];
|
||||
extern const u8 *const gMoveDescriptionPointers[];
|
||||
|
||||
void sub_81C488C(u8 a);
|
||||
extern u8 sub_81221EC();
|
||||
@@ -96,6 +85,7 @@ extern u8 gText_PkmnInfo[];
|
||||
extern u8 gText_PkmnSkills[];
|
||||
extern u8 gText_BattleMoves[];
|
||||
extern u8 gText_ContestMoves[];
|
||||
extern u8 gText_HMMovesCantBeForgotten2[];
|
||||
extern u8 gText_Cancel2[];
|
||||
extern u8 gText_Info[];
|
||||
extern u8 gText_Switch[];
|
||||
@@ -144,7 +134,9 @@ extern u8 gUnknown_0861CE8E[];
|
||||
extern u8 gText_OneDash[];
|
||||
extern u8 gText_TwoDashes[];
|
||||
extern u8 gText_ThreeDashes[];
|
||||
extern u8 gText_Cancel[];
|
||||
extern u8 gUnknown_0861CE97[];
|
||||
extern const struct SpriteTemplate gUnknown_0861CFC4;
|
||||
|
||||
extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
|
||||
extern bool8 sub_81A6BF4();
|
||||
@@ -173,6 +165,9 @@ void sub_81C4984();
|
||||
void sub_81C4A08();
|
||||
void sub_81C4A88();
|
||||
void sub_81C4280();
|
||||
void sub_81C43A0();
|
||||
void sub_81C4484();
|
||||
void sub_81C4420();
|
||||
void sub_81C0510(u8 taskId);
|
||||
void sub_81C171C(u8 taskId);
|
||||
void ResetAllBgsCoordinates();
|
||||
@@ -341,10 +336,7 @@ struct UnkSummaryStruct
|
||||
u8 unk40C9;
|
||||
u8 unk40CA;
|
||||
u8 unk40CB[8];
|
||||
u8 unk40D3;
|
||||
u8 unk40D4;
|
||||
u8 unk40D5;
|
||||
u8 unk_filler5[0x19];
|
||||
u8 unk40D3[0x1C];
|
||||
u8 unk40EF;
|
||||
s16 unk40F0;
|
||||
u8 unk_filler4[6];
|
||||
@@ -506,8 +498,8 @@ bool8 sub_81BFB10(void)
|
||||
gMain.state++;
|
||||
break;
|
||||
case 17:
|
||||
gUnknown_0203CF1C->unk40D3 = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &gUnknown_0203CF1C->unk40F0);
|
||||
if (gUnknown_0203CF1C->unk40D3 != 0xFF)
|
||||
gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &gUnknown_0203CF1C->unk40F0);
|
||||
if (gUnknown_0203CF1C->unk40D3[0] != 0xFF)
|
||||
{
|
||||
gUnknown_0203CF1C->unk40F0 = 0;
|
||||
gMain.state++;
|
||||
@@ -890,10 +882,10 @@ void sub_81C0704(u8 taskId)
|
||||
break;
|
||||
case 1:
|
||||
sub_81C4898();
|
||||
DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3]);
|
||||
DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[0]]);
|
||||
break;
|
||||
case 2:
|
||||
DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D4]);
|
||||
DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[1]]);
|
||||
break;
|
||||
case 3:
|
||||
sub_81C0098(&gUnknown_0203CF1C->currentMon);
|
||||
@@ -916,10 +908,10 @@ void sub_81C0704(u8 taskId)
|
||||
data[1] = 0;
|
||||
break;
|
||||
case 8:
|
||||
gUnknown_0203CF1C->unk40D3 = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &data[1]);
|
||||
if (gUnknown_0203CF1C->unk40D3 == 0xFF)
|
||||
gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &data[1]);
|
||||
if (gUnknown_0203CF1C->unk40D3[0] == 0xFF)
|
||||
return;
|
||||
gSprites[gUnknown_0203CF1C->unk40D3].data[2] = 1;
|
||||
gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 1;
|
||||
sub_81C0E24();
|
||||
data[1] = 0;
|
||||
break;
|
||||
@@ -934,7 +926,7 @@ void sub_81C0704(u8 taskId)
|
||||
sub_81C2524();
|
||||
break;
|
||||
case 12:
|
||||
gSprites[gUnknown_0203CF1C->unk40D3].data[2] = 0;
|
||||
gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 0;
|
||||
break;
|
||||
default:
|
||||
if (sub_81221EC() == 0 && FuncIsActiveTask(sub_81C20F0) == 0)
|
||||
@@ -1139,7 +1131,7 @@ void sub_81C0E48(u8 taskId)
|
||||
gUnknown_0203CF1C->unk40C6 = 0;
|
||||
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
|
||||
ClearWindowTilemap(0x13);
|
||||
if (gSprites[gUnknown_0203CF1C->unk40D5].invisible == 0)
|
||||
if (gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible == 0)
|
||||
ClearWindowTilemap(0xD);
|
||||
sub_81C1DA4(9, -3);
|
||||
sub_81C1EFC(9, -3, move);
|
||||
@@ -1245,7 +1237,7 @@ void sub_81C1070(s16 *a, s8 b, u8 *c)
|
||||
if ((*c == 4 && gUnknown_0203CF1C->unk40C4 == 0) || a[1] == 1)
|
||||
{
|
||||
ClearWindowTilemap(19);
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
|
||||
ClearWindowTilemap(13);
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
sub_81C1DA4(9, -3);
|
||||
@@ -1889,7 +1881,7 @@ void sub_81C1940(u8 taskId)
|
||||
{
|
||||
|
||||
ClearWindowTilemap(19);
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
|
||||
ClearWindowTilemap(13);
|
||||
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
|
||||
gTasks[taskId].func = sub_81C174C;
|
||||
@@ -1903,7 +1895,7 @@ void sub_81C1940(u8 taskId)
|
||||
if (gUnknown_0203CF1C->unk40C0 != 3)
|
||||
{
|
||||
ClearWindowTilemap(19);
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
|
||||
ClearWindowTilemap(13);
|
||||
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
|
||||
gTasks[taskId].func = sub_81C174C;
|
||||
@@ -1915,7 +1907,7 @@ void sub_81C1940(u8 taskId)
|
||||
else if (gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
ClearWindowTilemap(19);
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
|
||||
ClearWindowTilemap(13);
|
||||
move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
|
||||
sub_81C3E9C(move);
|
||||
@@ -2208,7 +2200,7 @@ void sub_81C1E20(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
|
||||
PutWindowTilemap(13);
|
||||
PutWindowTilemap(19);
|
||||
}
|
||||
@@ -2259,7 +2251,7 @@ void sub_81C1F80(u8 taskId)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D5].invisible)
|
||||
if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
|
||||
{
|
||||
PutWindowTilemap(13);
|
||||
}
|
||||
@@ -3591,3 +3583,238 @@ void sub_81C3D54(u8 taskId)
|
||||
}
|
||||
data[0]++;
|
||||
}
|
||||
|
||||
void sub_81C3E2C(u8 moveSlot)
|
||||
{
|
||||
u16 move;
|
||||
|
||||
if (moveSlot == 4)
|
||||
move = gUnknown_0203CF1C->unk40C4;
|
||||
else
|
||||
move = gUnknown_0203CF1C->summary.moves[moveSlot];
|
||||
|
||||
if (move != MOVE_NONE)
|
||||
{
|
||||
u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
|
||||
sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C3E9C(u16 move)
|
||||
{
|
||||
u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
|
||||
FillWindowPixelBuffer(windowId, 0);
|
||||
if (move != MOVE_NONE)
|
||||
{
|
||||
if (gUnknown_0203CF1C->unk40C0 == 2)
|
||||
{
|
||||
sub_81C3C5C(move);
|
||||
sub_81C25A4(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
|
||||
}
|
||||
PutWindowTilemap(windowId);
|
||||
}
|
||||
else
|
||||
{
|
||||
ClearWindowTilemap(windowId);
|
||||
}
|
||||
|
||||
schedule_bg_copy_tilemap_to_vram(0);
|
||||
}
|
||||
|
||||
void sub_81C3F44(void)
|
||||
{
|
||||
u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
|
||||
u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
|
||||
if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
|
||||
{
|
||||
sub_81C25A4(windowId1, gText_Cancel, 0, 0x41, 0, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 move = gUnknown_0203CF1C->unk40C4;
|
||||
if (gUnknown_0203CF1C->unk40C0 == 2)
|
||||
sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 6);
|
||||
else
|
||||
sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 5);
|
||||
|
||||
ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, 1, 2);
|
||||
DynamicPlaceholderTextUtil_Reset();
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
|
||||
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
|
||||
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
|
||||
sub_81C25A4(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x2C), 0x41, 0, 12);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C4064(void)
|
||||
{
|
||||
u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 0);
|
||||
FillWindowPixelRect(windowId, 0, 0, 0x42, 0x48, 0x10);
|
||||
CopyWindowToVram(windowId, 2);
|
||||
}
|
||||
|
||||
void sub_81C40A0(u8 a, u8 b)
|
||||
{
|
||||
u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
|
||||
u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
|
||||
|
||||
FillWindowPixelRect(windowId1, 0, 0, a * 16, 0x48, 0x10);
|
||||
FillWindowPixelRect(windowId1, 0, 0, b * 16, 0x48, 0x10);
|
||||
|
||||
FillWindowPixelRect(windowId2, 0, 0, a * 16, 0x30, 0x10);
|
||||
FillWindowPixelRect(windowId2, 0, 0, b * 16, 0x30, 0x10);
|
||||
|
||||
sub_81C3B08(a);
|
||||
sub_81C3B08(b);
|
||||
}
|
||||
|
||||
void sub_81C4154(void)
|
||||
{
|
||||
u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
|
||||
FillWindowPixelBuffer(windowId, 0);
|
||||
sub_81C25A4(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
|
||||
}
|
||||
|
||||
void sub_81C4190(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 28; i++)
|
||||
gUnknown_0203CF1C->unk40D3[i] |= 0xFF;
|
||||
}
|
||||
|
||||
void sub_81C41C0(u8 spriteArrayId)
|
||||
{
|
||||
if (gUnknown_0203CF1C->unk40D3[spriteArrayId] != 0xFF)
|
||||
{
|
||||
DestroySprite(&gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]]);
|
||||
gUnknown_0203CF1C->unk40D3[spriteArrayId] = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C4204(u8 spriteArrayId, bool8 invisible)
|
||||
{
|
||||
gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]].invisible = invisible;
|
||||
}
|
||||
|
||||
void sub_81C424C(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 3; i < 28; i++)
|
||||
{
|
||||
if (gUnknown_0203CF1C->unk40D3[i] != 0xFF)
|
||||
sub_81C4204(i, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C4280(void)
|
||||
{
|
||||
switch (gUnknown_0203CF1C->unk40C0)
|
||||
{
|
||||
case 0:
|
||||
sub_81C43A0();
|
||||
break;
|
||||
case 2:
|
||||
sub_81C4420();
|
||||
sub_81C44F0();
|
||||
break;
|
||||
case 3:
|
||||
sub_81C4484();
|
||||
sub_81C44F0();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C42C8(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 3; i < 8; i++)
|
||||
{
|
||||
if (gUnknown_0203CF1C->unk40D3[i] == 0xFF)
|
||||
gUnknown_0203CF1C->unk40D3[i] = CreateSprite(&gUnknown_0861CFC4, 0, 0, 2);
|
||||
|
||||
sub_81C4204(i, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
extern const u8 gUnknown_0861CFDC[];
|
||||
|
||||
void sub_81C4318(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]];
|
||||
StartSpriteAnim(sprite, typeId);
|
||||
sprite->oam.paletteNum = gUnknown_0861CFDC[typeId];
|
||||
sprite->pos1.x = x + 16;
|
||||
sprite->pos1.y = y + 8;
|
||||
sub_81C4204(spriteArrayId, FALSE);
|
||||
}
|
||||
|
||||
void sub_81C43A0(void)
|
||||
{
|
||||
struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
|
||||
if (summary->isEgg)
|
||||
{
|
||||
sub_81C4318(TYPE_MYSTERY, 0x78, 0x30, 3);
|
||||
sub_81C4204(4, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_81C4318(gBaseStats[summary->species].type1, 0x78, 0x30, 3);
|
||||
if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2)
|
||||
{
|
||||
sub_81C4318(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
|
||||
sub_81C4204(4, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_81C4204(4, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C4420(void)
|
||||
{
|
||||
u8 i;
|
||||
struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (summary->moves[i] != MOVE_NONE)
|
||||
sub_81C4318(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
|
||||
else
|
||||
sub_81C4204(i + 3, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C4484(void)
|
||||
{
|
||||
u8 i;
|
||||
struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if (summary->moves[i] != MOVE_NONE)
|
||||
sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
|
||||
else
|
||||
sub_81C4204(i + 3, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81C44F0(void)
|
||||
{
|
||||
if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
|
||||
{
|
||||
sub_81C4204(7, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gUnknown_0203CF1C->unk40C0 == 2)
|
||||
sub_81C4318(gBattleMoves[gUnknown_0203CF1C->unk40C4].type, 0x55, 0x60, 7);
|
||||
else
|
||||
sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[gUnknown_0203CF1C->unk40C4].contestCategory, 0x55, 0x60, 7);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user