Merge branch 'master' into pokenav_match_call
This commit is contained in:
@@ -45,7 +45,6 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
|
||||
AI scripts.
|
||||
*/
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 * const gBattleAI_ScriptsTable[];
|
||||
|
||||
extern u32 GetAiScriptsInRecordedBattle();
|
||||
@@ -346,7 +345,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
|
||||
}
|
||||
gBattleResources->AI_ScriptsStack->size = 0;
|
||||
sBattler_AI = gActiveBattler;
|
||||
// decide a random target bank in doubles
|
||||
// decide a random target battlerId in doubles
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
gBattlerTarget = (Random() & BIT_FLANK) + (GetBattlerSide(gActiveBattler) ^ BIT_SIDE);
|
||||
@@ -620,32 +619,32 @@ static void RecordLastUsedMoveByTarget(void)
|
||||
}
|
||||
}
|
||||
|
||||
void ClearBattlerMoveHistory(u8 bank)
|
||||
void ClearBattlerMoveHistory(u8 battlerId)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
gBattleResources->battleHistory->usedMoves[bank].moves[i] = 0;
|
||||
gBattleResources->battleHistory->usedMoves[battlerId].moves[i] = 0;
|
||||
}
|
||||
|
||||
void RecordAbilityBattle(u8 bank, u8 abilityId)
|
||||
void RecordAbilityBattle(u8 battlerId, u8 abilityId)
|
||||
{
|
||||
gBattleResources->battleHistory->abilities[bank] = abilityId;
|
||||
gBattleResources->battleHistory->abilities[battlerId] = abilityId;
|
||||
}
|
||||
|
||||
void ClearBattlerAbilityHistory(u8 bank)
|
||||
void ClearBattlerAbilityHistory(u8 battlerId)
|
||||
{
|
||||
gBattleResources->battleHistory->abilities[bank] = 0;
|
||||
gBattleResources->battleHistory->abilities[battlerId] = 0;
|
||||
}
|
||||
|
||||
void RecordItemEffectBattle(u8 bank, u8 itemEffect)
|
||||
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
|
||||
{
|
||||
gBattleResources->battleHistory->itemEffects[bank] = itemEffect;
|
||||
gBattleResources->battleHistory->itemEffects[battlerId] = itemEffect;
|
||||
}
|
||||
|
||||
void ClearBankItemEffectHistory(u8 bank)
|
||||
void ClearBankItemEffectHistory(u8 battlerId)
|
||||
{
|
||||
gBattleResources->battleHistory->itemEffects[bank] = 0;
|
||||
gBattleResources->battleHistory->itemEffects[battlerId] = 0;
|
||||
}
|
||||
|
||||
static void BattleAICmd_if_random_less_than(void)
|
||||
@@ -700,14 +699,14 @@ static void BattleAICmd_score(void)
|
||||
|
||||
static void BattleAICmd_if_hp_less_than(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) < gAIScriptPtr[2])
|
||||
if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
|
||||
else
|
||||
gAIScriptPtr += 7;
|
||||
@@ -715,14 +714,14 @@ static void BattleAICmd_if_hp_less_than(void)
|
||||
|
||||
static void BattleAICmd_if_hp_more_than(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) > gAIScriptPtr[2])
|
||||
if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
|
||||
else
|
||||
gAIScriptPtr += 7;
|
||||
@@ -730,14 +729,14 @@ static void BattleAICmd_if_hp_more_than(void)
|
||||
|
||||
static void BattleAICmd_if_hp_equal(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) == gAIScriptPtr[2])
|
||||
if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
|
||||
else
|
||||
gAIScriptPtr += 7;
|
||||
@@ -745,14 +744,14 @@ static void BattleAICmd_if_hp_equal(void)
|
||||
|
||||
static void BattleAICmd_if_hp_not_equal(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) != gAIScriptPtr[2])
|
||||
if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
|
||||
else
|
||||
gAIScriptPtr += 7;
|
||||
@@ -760,17 +759,17 @@ static void BattleAICmd_if_hp_not_equal(void)
|
||||
|
||||
static void BattleAICmd_if_status(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gBattleMons[bank].status1 & status) != 0)
|
||||
if ((gBattleMons[battlerId].status1 & status) != 0)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
|
||||
else
|
||||
gAIScriptPtr += 10;
|
||||
@@ -778,17 +777,17 @@ static void BattleAICmd_if_status(void)
|
||||
|
||||
static void BattleAICmd_if_not_status(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gBattleMons[bank].status1 & status) == 0)
|
||||
if ((gBattleMons[battlerId].status1 & status) == 0)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
|
||||
else
|
||||
gAIScriptPtr += 10;
|
||||
@@ -796,17 +795,17 @@ static void BattleAICmd_if_not_status(void)
|
||||
|
||||
static void BattleAICmd_if_status2(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gBattleMons[bank].status2 & status) != 0)
|
||||
if ((gBattleMons[battlerId].status2 & status) != 0)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
|
||||
else
|
||||
gAIScriptPtr += 10;
|
||||
@@ -814,17 +813,17 @@ static void BattleAICmd_if_status2(void)
|
||||
|
||||
static void BattleAICmd_if_not_status2(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gBattleMons[bank].status2 & status) == 0)
|
||||
if ((gBattleMons[battlerId].status2 & status) == 0)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
|
||||
else
|
||||
gAIScriptPtr += 10;
|
||||
@@ -832,17 +831,17 @@ static void BattleAICmd_if_not_status2(void)
|
||||
|
||||
static void BattleAICmd_if_status3(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gStatuses3[bank] & status) != 0)
|
||||
if ((gStatuses3[battlerId] & status) != 0)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
|
||||
else
|
||||
gAIScriptPtr += 10;
|
||||
@@ -850,17 +849,17 @@ static void BattleAICmd_if_status3(void)
|
||||
|
||||
static void BattleAICmd_if_not_status3(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gStatuses3[bank] & status) == 0)
|
||||
if ((gStatuses3[battlerId] & status) == 0)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
|
||||
else
|
||||
gAIScriptPtr += 10;
|
||||
@@ -868,15 +867,15 @@ static void BattleAICmd_if_not_status3(void)
|
||||
|
||||
static void BattleAICmd_if_side_affecting(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 side, status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
side = GET_BATTLER_SIDE(bank);
|
||||
side = GET_BATTLER_SIDE(battlerId);
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gSideStatuses[side] & status) != 0)
|
||||
@@ -887,15 +886,15 @@ static void BattleAICmd_if_side_affecting(void)
|
||||
|
||||
static void BattleAICmd_if_not_side_affecting(void)
|
||||
{
|
||||
u16 bank;
|
||||
u16 battlerId;
|
||||
u32 side, status;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
side = GET_BATTLER_SIDE(bank);
|
||||
side = GET_BATTLER_SIDE(battlerId);
|
||||
status = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
if ((gSideStatuses[side] & status) == 0)
|
||||
@@ -1123,9 +1122,9 @@ static void BattleAICmd_get_type(void)
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static u8 BattleAI_GetWantedBank(u8 bank)
|
||||
static u8 BattleAI_GetWantedBank(u8 battlerId)
|
||||
{
|
||||
switch (bank)
|
||||
switch (battlerId)
|
||||
{
|
||||
case AI_USER:
|
||||
return sBattler_AI;
|
||||
@@ -1141,9 +1140,9 @@ static u8 BattleAI_GetWantedBank(u8 bank)
|
||||
|
||||
static void BattleAICmd_is_of_type(void)
|
||||
{
|
||||
u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
|
||||
if(gBattleMons[bank].type1 == gAIScriptPtr[2] || gBattleMons[bank].type2 == gAIScriptPtr[2])
|
||||
if(gBattleMons[battlerId].type1 == gAIScriptPtr[2] || gBattleMons[battlerId].type2 == gAIScriptPtr[2])
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = TRUE;
|
||||
}
|
||||
@@ -1277,7 +1276,7 @@ static void BattleAICmd_nullsub_2B(void)
|
||||
|
||||
static void BattleAICmd_count_usable_party_mons(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
u8 bankOnField1, bankOnField2;
|
||||
struct Pokemon *party;
|
||||
int i;
|
||||
@@ -1285,11 +1284,11 @@ static void BattleAICmd_count_usable_party_mons(void)
|
||||
AI_THINKING_STRUCT->funcResult = 0;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (GetBattlerSide(bank) == B_SIDE_PLAYER)
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
party = gPlayerParty;
|
||||
else
|
||||
party = gEnemyParty;
|
||||
@@ -1297,14 +1296,14 @@ static void BattleAICmd_count_usable_party_mons(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
{
|
||||
u32 position;
|
||||
bankOnField1 = gBattlerPartyIndexes[bank];
|
||||
position = GetBattlerPosition(bank) ^ BIT_FLANK;
|
||||
bankOnField1 = gBattlerPartyIndexes[battlerId];
|
||||
position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
|
||||
bankOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
|
||||
}
|
||||
else // in singles there's only one bank by side
|
||||
else // in singles there's only one battlerId by side
|
||||
{
|
||||
bankOnField1 = gBattlerPartyIndexes[bank];
|
||||
bankOnField2 = gBattlerPartyIndexes[bank];
|
||||
bankOnField1 = gBattlerPartyIndexes[battlerId];
|
||||
bankOnField2 = gBattlerPartyIndexes[battlerId];
|
||||
}
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
@@ -1335,110 +1334,110 @@ static void BattleAICmd_get_considered_move_effect(void)
|
||||
|
||||
static void BattleAICmd_get_ability(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gActiveBattler != bank)
|
||||
if (gActiveBattler != battlerId)
|
||||
{
|
||||
if (BATTLE_HISTORY->abilities[bank] != 0)
|
||||
if (BATTLE_HISTORY->abilities[battlerId] != 0)
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[bank];
|
||||
AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[battlerId];
|
||||
gAIScriptPtr += 2;
|
||||
return;
|
||||
}
|
||||
|
||||
// abilities that prevent fleeing.
|
||||
if (gBattleMons[bank].ability == ABILITY_SHADOW_TAG
|
||||
|| gBattleMons[bank].ability == ABILITY_MAGNET_PULL
|
||||
|| gBattleMons[bank].ability == ABILITY_ARENA_TRAP)
|
||||
if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
|
||||
|| gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
|
||||
|| gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBattleMons[bank].ability;
|
||||
AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
|
||||
gAIScriptPtr += 2;
|
||||
return;
|
||||
}
|
||||
|
||||
if (gBaseStats[gBattleMons[bank].species].ability1 != ABILITY_NONE)
|
||||
if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE)
|
||||
{
|
||||
if (gBaseStats[gBattleMons[bank].species].ability2 != ABILITY_NONE)
|
||||
if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
|
||||
{
|
||||
// AI has no knowledge of opponent, so it guesses which ability.
|
||||
if (Random() & 1)
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability1;
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1;
|
||||
}
|
||||
else
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability2;
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability1; // it's definitely ability 1.
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; // it's definitely ability 1.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
|
||||
AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The AI knows its own ability.
|
||||
AI_THINKING_STRUCT->funcResult = gBattleMons[bank].ability;
|
||||
AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
|
||||
}
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static void BattleAICmd_check_ability(void)
|
||||
{
|
||||
u32 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
u32 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
u32 ability = gAIScriptPtr[2];
|
||||
|
||||
if (gAIScriptPtr[1] == AI_TARGET || gAIScriptPtr[1] == AI_TARGET_PARTNER)
|
||||
{
|
||||
if (BATTLE_HISTORY->abilities[bank] != 0)
|
||||
if (BATTLE_HISTORY->abilities[battlerId] != 0)
|
||||
{
|
||||
ability = BATTLE_HISTORY->abilities[bank];
|
||||
ability = BATTLE_HISTORY->abilities[battlerId];
|
||||
AI_THINKING_STRUCT->funcResult = ability;
|
||||
}
|
||||
// abilities that prevent fleeing.
|
||||
else if (gBattleMons[bank].ability == ABILITY_SHADOW_TAG
|
||||
|| gBattleMons[bank].ability == ABILITY_MAGNET_PULL
|
||||
|| gBattleMons[bank].ability == ABILITY_ARENA_TRAP)
|
||||
else if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
|
||||
|| gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
|
||||
|| gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
|
||||
{
|
||||
ability = gBattleMons[bank].ability;
|
||||
ability = gBattleMons[battlerId].ability;
|
||||
}
|
||||
else if (gBaseStats[gBattleMons[bank].species].ability1 != ABILITY_NONE)
|
||||
else if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE)
|
||||
{
|
||||
if (gBaseStats[gBattleMons[bank].species].ability2 != ABILITY_NONE)
|
||||
if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
|
||||
{
|
||||
u8 abilityDummyVariable = ability; // needed to match
|
||||
if (gBaseStats[gBattleMons[bank].species].ability1 != abilityDummyVariable
|
||||
&& gBaseStats[gBattleMons[bank].species].ability2 != abilityDummyVariable)
|
||||
if (gBaseStats[gBattleMons[battlerId].species].ability1 != abilityDummyVariable
|
||||
&& gBaseStats[gBattleMons[battlerId].species].ability2 != abilityDummyVariable)
|
||||
{
|
||||
ability = gBaseStats[gBattleMons[bank].species].ability1;
|
||||
ability = gBaseStats[gBattleMons[battlerId].species].ability1;
|
||||
}
|
||||
else
|
||||
ability = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ability = gBaseStats[gBattleMons[bank].species].ability1;
|
||||
ability = gBaseStats[gBattleMons[battlerId].species].ability1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ability = gBaseStats[gBattleMons[bank].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
|
||||
ability = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// The AI knows its own or partner's ability.
|
||||
ability = gBattleMons[bank].ability;
|
||||
ability = gBattleMons[battlerId].ability;
|
||||
}
|
||||
if (ability == 0)
|
||||
{
|
||||
@@ -1546,19 +1545,19 @@ static void BattleAICmd_if_status_in_party(void)
|
||||
struct Pokemon *party;
|
||||
int i;
|
||||
u32 statusToCompareTo;
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
switch(gAIScriptPtr[1])
|
||||
{
|
||||
case AI_USER:
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
break;
|
||||
default:
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
break;
|
||||
}
|
||||
|
||||
party = (GetBattlerSide(bank) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
|
||||
statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
@@ -1583,19 +1582,19 @@ static void BattleAICmd_if_status_not_in_party(void)
|
||||
struct Pokemon *party;
|
||||
int i;
|
||||
u32 statusToCompareTo;
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
switch(gAIScriptPtr[1])
|
||||
{
|
||||
case 1:
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
break;
|
||||
default:
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
break;
|
||||
}
|
||||
|
||||
party = (GetBattlerSide(bank) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
|
||||
|
||||
statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
|
||||
|
||||
@@ -1646,14 +1645,14 @@ static void BattleAICmd_if_not_effect(void)
|
||||
|
||||
static void BattleAICmd_if_stat_level_less_than(void)
|
||||
{
|
||||
u32 bank;
|
||||
u32 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gBattleMons[bank].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
|
||||
if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
|
||||
else
|
||||
gAIScriptPtr += 8;
|
||||
@@ -1661,14 +1660,14 @@ static void BattleAICmd_if_stat_level_less_than(void)
|
||||
|
||||
static void BattleAICmd_if_stat_level_more_than(void)
|
||||
{
|
||||
u32 bank;
|
||||
u32 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gBattleMons[bank].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
|
||||
if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
|
||||
else
|
||||
gAIScriptPtr += 8;
|
||||
@@ -1676,14 +1675,14 @@ static void BattleAICmd_if_stat_level_more_than(void)
|
||||
|
||||
static void BattleAICmd_if_stat_level_equal(void)
|
||||
{
|
||||
u32 bank;
|
||||
u32 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gBattleMons[bank].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
|
||||
if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
|
||||
else
|
||||
gAIScriptPtr += 8;
|
||||
@@ -1691,14 +1690,14 @@ static void BattleAICmd_if_stat_level_equal(void)
|
||||
|
||||
static void BattleAICmd_if_stat_level_not_equal(void)
|
||||
{
|
||||
u32 bank;
|
||||
u32 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gBattleMons[bank].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
|
||||
if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
|
||||
else
|
||||
gAIScriptPtr += 8;
|
||||
@@ -1940,16 +1939,16 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
|
||||
|
||||
static void BattleAICmd_if_any_move_disabled_or_encored(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gAIScriptPtr[2] == 0)
|
||||
{
|
||||
if (gDisableStructs[bank].disabledMove == 0)
|
||||
if (gDisableStructs[battlerId].disabledMove == 0)
|
||||
{
|
||||
gAIScriptPtr += 7;
|
||||
return;
|
||||
@@ -1962,7 +1961,7 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void)
|
||||
gAIScriptPtr += 7;
|
||||
return;
|
||||
}
|
||||
else if (gDisableStructs[bank].encoredMove != 0)
|
||||
else if (gDisableStructs[battlerId].encoredMove != 0)
|
||||
{
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
|
||||
return;
|
||||
@@ -2018,31 +2017,31 @@ static void BattleAICmd_watch(void)
|
||||
|
||||
static void BattleAICmd_get_hold_effect(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
if (gActiveBattler != bank)
|
||||
AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[bank]);
|
||||
if (gActiveBattler != battlerId)
|
||||
AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[battlerId]);
|
||||
else
|
||||
AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[bank].item);
|
||||
AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static void BattleAICmd_if_holds_item(void)
|
||||
{
|
||||
u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
u16 item;
|
||||
u8 var1, var2;
|
||||
|
||||
if ((bank & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
|
||||
item = gBattleMons[bank].item;
|
||||
if ((battlerId & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
|
||||
item = gBattleMons[battlerId].item;
|
||||
else
|
||||
item = BATTLE_HISTORY->itemEffects[bank];
|
||||
item = BATTLE_HISTORY->itemEffects[battlerId];
|
||||
|
||||
// UB: doesn't properly read an unaligned u16
|
||||
var2 = gAIScriptPtr[2];
|
||||
@@ -2056,42 +2055,42 @@ static void BattleAICmd_if_holds_item(void)
|
||||
|
||||
static void BattleAICmd_get_gender(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[bank].species, gBattleMons[bank].personality);
|
||||
AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, gBattleMons[battlerId].personality);
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static void BattleAICmd_is_first_turn_for(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].isFirstTurn;
|
||||
AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].isFirstTurn;
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static void BattleAICmd_get_stockpile_count(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].stockpileCounter;
|
||||
AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].stockpileCounter;
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
@@ -2105,18 +2104,18 @@ static void BattleAICmd_is_double_battle(void)
|
||||
|
||||
static void BattleAICmd_get_used_held_item(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
// This is likely a leftover from Ruby's code and its ugly ewram access
|
||||
#ifdef NONMATCHING
|
||||
AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[bank];
|
||||
AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[battlerId];
|
||||
#else
|
||||
AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (bank * 2));
|
||||
AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (battlerId * 2));
|
||||
#endif // NONMATCHING
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
@@ -2145,14 +2144,14 @@ static void BattleAICmd_get_move_effect_from_result(void)
|
||||
|
||||
static void BattleAICmd_get_protect_count(void)
|
||||
{
|
||||
u8 bank;
|
||||
u8 battlerId;
|
||||
|
||||
if (gAIScriptPtr[1] == AI_USER)
|
||||
bank = sBattler_AI;
|
||||
battlerId = sBattler_AI;
|
||||
else
|
||||
bank = gBattlerTarget;
|
||||
battlerId = gBattlerTarget;
|
||||
|
||||
AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].protectUses;
|
||||
AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].protectUses;
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
@@ -2255,9 +2254,9 @@ static void BattleAICmd_if_target_is_ally(void)
|
||||
|
||||
static void BattleAICmd_if_flash_fired(void)
|
||||
{
|
||||
u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
|
||||
|
||||
if (gBattleResources->flags->flags[bank] & UNKNOWN_FLAG_FLASH_FIRE)
|
||||
if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE)
|
||||
gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
|
||||
else
|
||||
gAIScriptPtr += 6;
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
#include "util.h"
|
||||
#include "constants/items.h"
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gTypeEffectiveness[];
|
||||
extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
|
||||
|
||||
// this file's functions
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_tv.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
#include "util.h"
|
||||
@@ -32,7 +32,6 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
@@ -1414,7 +1413,7 @@ static void LinkOpponentHandleMoveAnimation(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
|
||||
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
|
||||
sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
|
||||
BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1478,7 +1477,7 @@ static void LinkOpponentHandlePrintString(void)
|
||||
BufferStringBattle(*stringId);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
|
||||
sub_817C95C(*stringId);
|
||||
BattleTv_SetDataBasedOnString(*stringId);
|
||||
}
|
||||
|
||||
static void LinkOpponentHandlePrintSelectionString(void)
|
||||
@@ -1831,7 +1830,7 @@ static void LinkOpponentHandleBattleAnimation(void)
|
||||
else
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
sub_817E32C(animationId);
|
||||
BattleTv_SetDataBasedOnAnimation(animationId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_tv.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
#include "util.h"
|
||||
@@ -31,7 +31,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
@@ -1238,7 +1237,7 @@ static void LinkPartnerHandleMoveAnimation(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
|
||||
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
|
||||
sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
|
||||
BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1302,7 +1301,7 @@ static void LinkPartnerHandlePrintString(void)
|
||||
BufferStringBattle(*stringId);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
|
||||
sub_817C95C(*stringId);
|
||||
BattleTv_SetDataBasedOnString(*stringId);
|
||||
}
|
||||
|
||||
static void LinkPartnerHandlePrintSelectionString(void)
|
||||
@@ -1666,7 +1665,7 @@ static void LinkPartnerHandleBattleAnimation(void)
|
||||
else
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
sub_817E32C(animationId);
|
||||
BattleTv_SetDataBasedOnAnimation(animationId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_tv.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
@@ -35,7 +35,6 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
@@ -1563,7 +1562,7 @@ static void OpponentHandleChooseMove(void)
|
||||
BtlController_EmitTwoReturnValues(1, 15, gBattlerTarget);
|
||||
break;
|
||||
default:
|
||||
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_x10))
|
||||
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
|
||||
gBattlerTarget = gActiveBattler;
|
||||
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
|
||||
{
|
||||
@@ -1585,7 +1584,7 @@ static void OpponentHandleChooseMove(void)
|
||||
move = moveInfo->moves[chosenMoveId];
|
||||
} while (move == MOVE_NONE);
|
||||
|
||||
if (gBattleMoves[move].target & (MOVE_TARGET_USER | MOVE_TARGET_x10))
|
||||
if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
|
||||
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gActiveBattler << 8));
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(Random() & 2) << 8));
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_tv.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
#include "util.h"
|
||||
@@ -42,8 +42,6 @@ extern struct SpriteTemplate gUnknown_0202499C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
extern const u8 gTypeNames[][7];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern const u8 gText_BattleSwitchWhich[];
|
||||
extern const u8 gText_MoveInterfacePP[];
|
||||
@@ -432,7 +430,7 @@ static void HandleInputChooseTarget(void)
|
||||
case B_POSITION_PLAYER_RIGHT:
|
||||
if (gActiveBattler != gMultiUsePlayerCursor)
|
||||
i++;
|
||||
else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER)
|
||||
else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
|
||||
i++;
|
||||
break;
|
||||
case B_POSITION_OPPONENT_LEFT:
|
||||
@@ -474,7 +472,7 @@ static void HandleInputChooseTarget(void)
|
||||
case B_POSITION_PLAYER_RIGHT:
|
||||
if (gActiveBattler != gMultiUsePlayerCursor)
|
||||
i++;
|
||||
else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER)
|
||||
else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
|
||||
i++;
|
||||
break;
|
||||
case B_POSITION_OPPONENT_LEFT:
|
||||
@@ -508,7 +506,7 @@ static void HandleInputChooseMove(void)
|
||||
if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
|
||||
{
|
||||
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
|
||||
moveTarget = MOVE_TARGET_x10;
|
||||
moveTarget = MOVE_TARGET_USER;
|
||||
else
|
||||
moveTarget = MOVE_TARGET_SELECTED;
|
||||
}
|
||||
@@ -517,26 +515,26 @@ static void HandleInputChooseMove(void)
|
||||
moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
|
||||
}
|
||||
|
||||
if (moveTarget & MOVE_TARGET_x10)
|
||||
if (moveTarget & MOVE_TARGET_USER)
|
||||
gMultiUsePlayerCursor = gActiveBattler;
|
||||
else
|
||||
gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE);
|
||||
|
||||
if (!gBattleBufferA[gActiveBattler][1]) // not a double battle
|
||||
{
|
||||
if (moveTarget & MOVE_TARGET_USER && !gBattleBufferA[gActiveBattler][2])
|
||||
if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2])
|
||||
canSelectTarget++;
|
||||
}
|
||||
else // double battle
|
||||
{
|
||||
if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_x10)))
|
||||
if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
|
||||
canSelectTarget++; // either selected or user
|
||||
|
||||
if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0)
|
||||
{
|
||||
canSelectTarget = FALSE;
|
||||
}
|
||||
else if (!(moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
|
||||
else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
|
||||
{
|
||||
gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler);
|
||||
canSelectTarget = FALSE;
|
||||
@@ -552,7 +550,7 @@ static void HandleInputChooseMove(void)
|
||||
{
|
||||
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
|
||||
|
||||
if (moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
|
||||
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
|
||||
gMultiUsePlayerCursor = gActiveBattler;
|
||||
else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)])
|
||||
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
@@ -881,7 +879,7 @@ static void sub_80586F8(void)
|
||||
gMain.callback1 = gPreBattleCallback1;
|
||||
SetMainCallback2(sub_8038D64);
|
||||
if (gBattleOutcome == B_OUTCOME_WON)
|
||||
sub_817E3F4();
|
||||
TryPutLinkBattleTvShowOnAir();
|
||||
FreeAllWindowBuffers();
|
||||
}
|
||||
}
|
||||
@@ -894,7 +892,7 @@ static void sub_80586F8(void)
|
||||
gMain.callback1 = gPreBattleCallback1;
|
||||
SetMainCallback2(sub_8038D64);
|
||||
if (gBattleOutcome == B_OUTCOME_WON)
|
||||
sub_817E3F4();
|
||||
TryPutLinkBattleTvShowOnAir();
|
||||
FreeAllWindowBuffers();
|
||||
}
|
||||
}
|
||||
@@ -2484,7 +2482,7 @@ static void PlayerHandleMoveAnimation(void)
|
||||
{
|
||||
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
|
||||
gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
|
||||
sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
|
||||
BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2548,7 +2546,7 @@ static void PlayerHandlePrintString(void)
|
||||
BufferStringBattle(*stringId);
|
||||
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
|
||||
sub_817C95C(*stringId);
|
||||
BattleTv_SetDataBasedOnString(*stringId);
|
||||
sub_81A57E4(gActiveBattler, *stringId);
|
||||
}
|
||||
|
||||
@@ -2575,7 +2573,7 @@ static void PlayerHandleChooseAction(void)
|
||||
s32 i;
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
|
||||
sub_817F2A8();
|
||||
BattleTv_ClearExplosionFaintCause();
|
||||
BattleHandleAddTextPrinter(gText_BattleMenu, 2);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
@@ -3069,7 +3067,7 @@ static void PlayerHandleBattleAnimation(void)
|
||||
else
|
||||
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
|
||||
|
||||
sub_817E32C(animationId);
|
||||
BattleTv_SetDataBasedOnAnimation(animationId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_81358F4(void);
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
@@ -1521,7 +1520,7 @@ static void PlayerPartnerHandleChooseMove(void)
|
||||
BattleAI_SetupAIData(0xF);
|
||||
chosenMoveId = BattleAI_ChooseMoveOrAction();
|
||||
|
||||
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
|
||||
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
|
||||
gBattlerTarget = gActiveBattler;
|
||||
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_ai_script_commands.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_tv.h"
|
||||
#include "recorded_battle.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
|
||||
@@ -34,7 +34,6 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
|
||||
|
||||
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
|
||||
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
|
||||
extern void sub_806A068(u16, u8);
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "battle_interface.h"
|
||||
#include "battle_anim.h"
|
||||
#include "constants/battle_anim.h"
|
||||
#include "battle_link_817C95C.h"
|
||||
#include "battle_tv.h"
|
||||
#include "pokemon.h"
|
||||
#include "link.h"
|
||||
#include "util.h"
|
||||
|
||||
@@ -36,7 +36,6 @@ extern u8 gBattleBuffersTransferData[0x100];
|
||||
|
||||
static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {};
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void task00_08081A90(u8 taskId); // cable_club
|
||||
extern void sub_81B8D64(u8 bank, u8 arg1); // party_menu
|
||||
@@ -97,7 +96,6 @@ void SetUpBattleVarsAndBirchZigzagoon(void)
|
||||
void sub_8032768(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 *data;
|
||||
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
|
||||
sub_8184DA4(1);
|
||||
@@ -120,11 +118,11 @@ void sub_8032768(void)
|
||||
sub_81B8D64(i, 0);
|
||||
}
|
||||
|
||||
for (i = 0; i < sizeof(gBattleStruct->field_1A4); i++)
|
||||
*(gBattleStruct->field_1A4 + i) = 0;
|
||||
for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++)
|
||||
*((u8*)(&gBattleStruct->tvMovePoints) + i) = 0;
|
||||
|
||||
for (i = 0; i < sizeof(gBattleStruct->field_204); i++)
|
||||
*(gBattleStruct->field_204 + i) = 0;
|
||||
for (i = 0; i < sizeof(gBattleStruct->tv); i++)
|
||||
*((u8*)(&gBattleStruct->tv) + i) = 0;
|
||||
}
|
||||
|
||||
static void InitSinglePlayerBtlControllers(void)
|
||||
|
||||
@@ -28,7 +28,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gUnknown_0831C604[];
|
||||
extern const u8 * const gBattleAnims_VariousTable[];
|
||||
extern const u8 * const gBattleAnims_Special[];
|
||||
@@ -237,7 +236,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
|
||||
{
|
||||
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
|
||||
var1 = MOVE_TARGET_x10;
|
||||
var1 = MOVE_TARGET_USER;
|
||||
else
|
||||
var1 = MOVE_TARGET_SELECTED;
|
||||
}
|
||||
@@ -246,7 +245,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
|
||||
var1 = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
|
||||
}
|
||||
|
||||
if (var1 & MOVE_TARGET_x10)
|
||||
if (var1 & MOVE_TARGET_USER)
|
||||
chosenMoveId |= (gActiveBattler << 8);
|
||||
else if (var1 == MOVE_TARGET_SELECTED)
|
||||
chosenMoveId |= (BattlePalaceGetTargetRetValue());
|
||||
@@ -261,7 +260,7 @@ static u8 sub_805D4A8(u16 move)
|
||||
switch (gBattleMoves[move].target)
|
||||
{
|
||||
case MOVE_TARGET_SELECTED:
|
||||
case MOVE_TARGET_USER:
|
||||
case MOVE_TARGET_USER_OR_SELECTED:
|
||||
case MOVE_TARGET_RANDOM:
|
||||
case MOVE_TARGET_BOTH:
|
||||
case MOVE_TARGET_FOES_AND_ALLY:
|
||||
@@ -273,7 +272,7 @@ static u8 sub_805D4A8(u16 move)
|
||||
case MOVE_TARGET_DEPENDS:
|
||||
case MOVE_TARGET_OPPONENTS_FIELD:
|
||||
return 2;
|
||||
case MOVE_TARGET_x10:
|
||||
case MOVE_TARGET_USER:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
|
||||
@@ -81,7 +81,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_SE2;
|
||||
extern u8 gUnknown_0203CF00[];
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u16 gBattleTextboxPalette[]; // battle textbox palette
|
||||
extern const struct BgTemplate gUnknown_0831AA08[];
|
||||
extern const struct WindowTemplate * const gUnknown_0831ABA0[];
|
||||
@@ -301,6 +300,214 @@ u8 gNumberOfMovesToChoose;
|
||||
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
|
||||
|
||||
// rom const data
|
||||
|
||||
// format: attacking type, defending type, damage multiplier
|
||||
// the multiplier is a (decimal) fixed-point number:
|
||||
// 20 is ×2.0 TYPE_MUL_SUPER_EFFECTIVE
|
||||
// 10 is ×1.0 TYPE_MUL_NORMAL
|
||||
// 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE
|
||||
// 00 is ×0.0 TYPE_MUL_NO_EFFECT
|
||||
const u8 gTypeEffectiveness[336] =
|
||||
{
|
||||
TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
|
||||
TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
|
||||
TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
|
||||
TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT
|
||||
};
|
||||
|
||||
const u8 gTypeNames[][TYPE_NAME_LENGTH + 1] =
|
||||
{
|
||||
_("NORMAL"),
|
||||
_("FIGHT"),
|
||||
_("FLYING"),
|
||||
_("POISON"),
|
||||
_("GROUND"),
|
||||
_("ROCK"),
|
||||
_("BUG"),
|
||||
_("GHOST"),
|
||||
_("STEEL"),
|
||||
_("???"),
|
||||
_("FIRE"),
|
||||
_("WATER"),
|
||||
_("GRASS"),
|
||||
_("ELECTR"),
|
||||
_("PSYCHC"),
|
||||
_("ICE"),
|
||||
_("DRAGON"),
|
||||
_("DARK"),
|
||||
};
|
||||
|
||||
// This is a factor in how much money you get for beating a trainer.
|
||||
const struct TrainerMoney gTrainerMoneyTable[] =
|
||||
{
|
||||
{TRAINER_CLASS_TEAM_AQUA, 5},
|
||||
{TRAINER_CLASS_AQUA_ADMIN, 10},
|
||||
{TRAINER_CLASS_AQUA_LEADER, 20},
|
||||
{TRAINER_CLASS_AROMA_LADY, 10},
|
||||
{TRAINER_CLASS_RUIN_MANIAC, 15},
|
||||
{TRAINER_CLASS_INTERVIEWER, 12},
|
||||
{TRAINER_CLASS_TUBER_1, 1},
|
||||
{TRAINER_CLASS_TUBER_2, 1},
|
||||
{TRAINER_CLASS_SIS_AND_BRO, 3},
|
||||
{TRAINER_CLASS_COOLTRAINER_1, 12},
|
||||
{TRAINER_CLASS_HEX_MANIAC, 6},
|
||||
{TRAINER_CLASS_LADY, 50},
|
||||
{TRAINER_CLASS_BEAUTY, 20},
|
||||
{TRAINER_CLASS_RICH_BOY, 50},
|
||||
{TRAINER_CLASS_POKEMANIAC, 15},
|
||||
{TRAINER_CLASS_SWIMMER_M, 2},
|
||||
{TRAINER_CLASS_BLACK_BELT, 8},
|
||||
{TRAINER_CLASS_GUITARIST, 8},
|
||||
{TRAINER_CLASS_KINDLER, 8},
|
||||
{TRAINER_CLASS_CAMPER, 4},
|
||||
{TRAINER_CLASS_OLD_COUPLE, 10},
|
||||
{TRAINER_CLASS_BUG_MANIAC, 15},
|
||||
{TRAINER_CLASS_PSYCHIC, 6},
|
||||
{TRAINER_CLASS_GENTLEMAN, 20},
|
||||
{TRAINER_CLASS_ELITE_FOUR, 25},
|
||||
{TRAINER_CLASS_LEADER, 25},
|
||||
{TRAINER_CLASS_SCHOOL_KID, 5},
|
||||
{TRAINER_CLASS_SR_AND_JR, 4},
|
||||
{TRAINER_CLASS_POKEFAN, 20},
|
||||
{TRAINER_CLASS_EXPERT, 10},
|
||||
{TRAINER_CLASS_YOUNGSTER, 4},
|
||||
{TRAINER_CLASS_CHAMPION, 50},
|
||||
{TRAINER_CLASS_FISHERMAN, 10},
|
||||
{TRAINER_CLASS_TRIATHLETE, 10},
|
||||
{TRAINER_CLASS_DRAGON_TAMER, 12},
|
||||
{TRAINER_CLASS_BIRD_KEEPER, 8},
|
||||
{TRAINER_CLASS_NINJA_BOY, 3},
|
||||
{TRAINER_CLASS_BATTLE_GIRL, 6},
|
||||
{TRAINER_CLASS_PARASOL_LADY, 10},
|
||||
{TRAINER_CLASS_SWIMMER_F, 2},
|
||||
{TRAINER_CLASS_PICNICKER, 4},
|
||||
{TRAINER_CLASS_TWINS, 3},
|
||||
{TRAINER_CLASS_SAILOR, 8},
|
||||
{TRAINER_CLASS_COLLECTOR, 15},
|
||||
{TRAINER_CLASS_PKMN_TRAINER_3, 15},
|
||||
{TRAINER_CLASS_PKMN_BREEDER, 10},
|
||||
{TRAINER_CLASS_PKMN_RANGER, 12},
|
||||
{TRAINER_CLASS_TEAM_MAGMA, 5},
|
||||
{TRAINER_CLASS_MAGMA_ADMIN, 10},
|
||||
{TRAINER_CLASS_MAGMA_LEADER, 20},
|
||||
{TRAINER_CLASS_LASS, 4},
|
||||
{TRAINER_CLASS_BUG_CATCHER, 4},
|
||||
{TRAINER_CLASS_HIKER, 10},
|
||||
{TRAINER_CLASS_YOUNG_COUPLE, 8},
|
||||
{TRAINER_CLASS_WINSTRATE, 10},
|
||||
{0xFF, 5},
|
||||
};
|
||||
|
||||
#include "data/text/abilities.h"
|
||||
|
||||
static void (* const sTurnActionsFuncsTable[])(void) =
|
||||
{
|
||||
HandleAction_UseMove, // B_ACTION_USE_MOVE
|
||||
@@ -5133,7 +5340,7 @@ static void HandleAction_UseMove(void)
|
||||
else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
&& gSideTimers[side].followmeTimer == 0
|
||||
&& (gBattleMoves[gCurrentMove].power != 0
|
||||
|| gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10)
|
||||
|| gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER)
|
||||
&& gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD
|
||||
&& gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
|
||||
{
|
||||
|
||||
@@ -22,9 +22,7 @@ extern u8 gUnknown_0203C7B4;
|
||||
extern struct StringInfoBattle *gStringInfo;
|
||||
|
||||
extern const u8 gMoveNames[LAST_MOVE_INDEX + 1][13];
|
||||
extern const u8 gAbilityNames[][13];
|
||||
extern const u8 gTrainerClassNames[][13];
|
||||
extern const u8 gTypeNames[][7];
|
||||
extern const u16 gUnknown_08D85620[];
|
||||
|
||||
// strings
|
||||
@@ -516,375 +514,375 @@ const u8 gText_Trainer2LoseText[];
|
||||
|
||||
const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||
{
|
||||
gText_Trainer1LoseText,
|
||||
gText_PkmnGainedEXP,
|
||||
gText_PkmnGrewToLv,
|
||||
gText_PkmnLearnedMove,
|
||||
gText_TryToLearnMove1,
|
||||
gText_TryToLearnMove2,
|
||||
gText_TryToLearnMove3,
|
||||
gText_PkmnForgotMove,
|
||||
gText_StopLearningMove,
|
||||
gText_DidNotLearnMove,
|
||||
gText_PkmnLearnedMove2,
|
||||
gText_AttackMissed,
|
||||
gText_PkmnProtectedItself,
|
||||
gText_StatsWontIncrease2,
|
||||
gText_AvoidedDamage,
|
||||
gText_ItDoesntAffect,
|
||||
gText_AttackerFainted,
|
||||
gText_TargetFainted,
|
||||
gText_PlayerGotMoney,
|
||||
gText_PlayerWhiteout,
|
||||
gText_PlayerWhiteout2,
|
||||
gText_PreventsEscape,
|
||||
gText_HitXTimes,
|
||||
gText_PkmnFellAsleep,
|
||||
gText_PkmnMadeSleep,
|
||||
gText_PkmnAlreadyAsleep,
|
||||
gText_PkmnAlreadyAsleep2,
|
||||
gText_PkmnWasntAffected,
|
||||
gText_PkmnWasPoisoned,
|
||||
gText_PkmnPoisonedBy,
|
||||
gText_PkmnHurtByPoison,
|
||||
gText_PkmnAlreadyPoisoned,
|
||||
gText_PkmnBadlyPoisoned,
|
||||
gText_PkmnEnergyDrained,
|
||||
gText_PkmnWasBurned,
|
||||
gText_PkmnBurnedBy,
|
||||
gText_PkmnHurtByBurn,
|
||||
gText_PkmnWasFrozen,
|
||||
gText_PkmnFrozenBy,
|
||||
gText_PkmnIsFrozen,
|
||||
gText_PkmnWasDefrosted,
|
||||
gText_PkmnWasDefrosted2,
|
||||
gText_PkmnWasDefrostedBy,
|
||||
gText_PkmnWasParalyzed,
|
||||
gText_PkmnWasParalyzedBy,
|
||||
gText_PkmnIsParalyzed,
|
||||
gText_PkmnIsAlreadyParalyzed,
|
||||
gText_PkmnHealedParalysis,
|
||||
gText_PkmnDreamEaten,
|
||||
gText_StatsWontIncrease,
|
||||
gText_StatsWontDecrease,
|
||||
gText_TeamStoppedWorking,
|
||||
gText_FoeStoppedWorking,
|
||||
gText_PkmnIsConfused,
|
||||
gText_PkmnHealedConfusion,
|
||||
gText_PkmnWasConfused,
|
||||
gText_PkmnAlreadyConfused,
|
||||
gText_PkmnFellInLove,
|
||||
gText_PkmnInLove,
|
||||
gText_PkmnImmobilizedByLove,
|
||||
gText_PkmnBlownAway,
|
||||
gText_PkmnChangedType,
|
||||
gText_PkmnFlinched,
|
||||
gText_PkmnRegainedHealth,
|
||||
gText_PkmnHPFull,
|
||||
gText_PkmnRaisedSpDef,
|
||||
gText_PkmnRaisedDef,
|
||||
gText_PkmnCoveredByVeil,
|
||||
gText_PkmnUsedSafeguard,
|
||||
gText_PkmnSafeguardExpired,
|
||||
gText_PkmnWentToSleep,
|
||||
gText_PkmnSleptHealthy,
|
||||
gText_PkmnWhippedWhirlwind,
|
||||
gText_PkmnTookSunlight,
|
||||
gText_PkmnLoweredHead,
|
||||
gText_PkmnIsGlowing,
|
||||
gText_PkmnFlewHigh,
|
||||
gText_PkmnDugHole,
|
||||
gText_PkmnSqueezedByBind,
|
||||
gText_PkmnTrappedInVortex,
|
||||
gText_PkmnWrappedBy,
|
||||
gText_PkmnClamped,
|
||||
gText_PkmnHurtBy,
|
||||
gText_PkmnFreedFrom,
|
||||
gText_PkmnCrashed,
|
||||
gText_PkmnShroudedInMist,
|
||||
gText_PkmnProtectedByMist,
|
||||
gText_PkmnGettingPumped,
|
||||
gText_PkmnHitWithRecoil,
|
||||
gText_PkmnProtectedItself2,
|
||||
gText_PkmnBuffetedBySandstorm,
|
||||
gText_PkmnPeltedByHail,
|
||||
gText_PkmnSeeded,
|
||||
gText_PkmnEvadedAttack,
|
||||
gText_PkmnSappedByLeechSeed,
|
||||
gText_PkmnFastAsleep,
|
||||
gText_PkmnWokeUp,
|
||||
gText_PkmnUproarKeptAwake,
|
||||
gText_PkmnWokeUpInUproar,
|
||||
gText_PkmnCausedUproar,
|
||||
gText_PkmnMakingUproar,
|
||||
gText_PkmnCalmedDown,
|
||||
gText_PkmnCantSleepInUproar,
|
||||
gText_PkmnStockpiled,
|
||||
gText_PkmnCantStockpile,
|
||||
gText_PkmnCantSleepInUproar2,
|
||||
gText_UproarKeptPkmnAwake,
|
||||
gText_PkmnStayedAwakeUsing,
|
||||
gText_PkmnStoringEnergy,
|
||||
gText_PkmnUnleashedEnergy,
|
||||
gText_PkmnFatigueConfusion,
|
||||
gText_PkmnPickedUpItem,
|
||||
gText_PkmnUnaffected,
|
||||
gText_PkmnTransformedInto,
|
||||
gText_PkmnMadeSubstitute,
|
||||
gText_PkmnHasSubstitute,
|
||||
gText_SubstituteDamaged,
|
||||
gText_PkmnSubstituteFaded,
|
||||
gText_PkmnMustRecharge,
|
||||
gText_PkmnRageBuilding,
|
||||
gText_PkmnMoveWasDisabled,
|
||||
gText_PkmnMoveIsDisabled,
|
||||
gText_PkmnMoveDisabledNoMore,
|
||||
gText_PkmnGotEncore,
|
||||
gText_PkmnEncoreEnded,
|
||||
gText_PkmnTookAim,
|
||||
gText_PkmnSketchedMove,
|
||||
gText_PkmnTryingToTakeFoe,
|
||||
gText_PkmnTookFoe,
|
||||
gText_PkmnReducedPP,
|
||||
gText_PkmnStoleItem,
|
||||
gText_TargetCantEscapeNow,
|
||||
gText_PkmnFellIntoNightmare,
|
||||
gText_PkmnLockedInNightmare,
|
||||
gText_PkmnLaidCurse,
|
||||
gText_PkmnAfflictedByCurse,
|
||||
gText_SpikesScattered,
|
||||
gText_PkmnHurtBySpikes,
|
||||
gText_PkmnIdentified,
|
||||
gText_PkmnPerishCountFell,
|
||||
gText_PkmnBracedItself,
|
||||
gText_PkmnEnduredHit,
|
||||
gText_MagnitudeStrength,
|
||||
gText_PkmnCutHPMaxedAttack,
|
||||
gText_PkmnCopiedStatChanges,
|
||||
gText_PkmnGotFree,
|
||||
gText_PkmnShedLeechSeed,
|
||||
gText_PkmnBlewAwaySpikes,
|
||||
gText_PkmnFledFromBattle,
|
||||
gText_PkmnForesawAttack,
|
||||
gText_PkmnTookAttack,
|
||||
gText_PkmnAttack,
|
||||
gText_PkmnCenterAttention,
|
||||
gText_PkmnChargingPower,
|
||||
gText_NaturePowerTurnedInto,
|
||||
gText_PkmnStatusNormal,
|
||||
gText_PkmnHasNoMovesLeft,
|
||||
gText_PkmnSubjectedToTorment,
|
||||
gText_PkmnCantUseMoveTorment,
|
||||
gText_PkmnTighteningFocus,
|
||||
gText_PkmnFellForTaunt,
|
||||
gText_PkmnCantUseMoveTaunt,
|
||||
gText_PkmnReadyToHelp,
|
||||
gText_PkmnSwitchedItems,
|
||||
gText_PkmnCopiedFoe,
|
||||
gText_PkmnMadeWish,
|
||||
gText_PkmnWishCameTrue,
|
||||
gText_PkmnPlantedRoots,
|
||||
gText_PkmnAbsorbedNutrients,
|
||||
gText_PkmnAnchoredItself,
|
||||
gText_PkmnWasMadeDrowsy,
|
||||
gText_PkmnKnockedOff,
|
||||
gText_PkmnSwappedAbilities,
|
||||
gText_PkmnSealedOpponentMove,
|
||||
gText_PkmnCantUseMoveSealed,
|
||||
gText_PkmnWantsGrudge,
|
||||
gText_PkmnLostPPGrudge,
|
||||
gText_PkmnShroudedItself,
|
||||
gText_PkmnMoveBounced,
|
||||
gText_PkmnWaitsForTarget,
|
||||
gText_PkmnSnatchedMove,
|
||||
gText_PkmnMadeItRain,
|
||||
gText_PkmnRaisedSpeed,
|
||||
gText_PkmnProtectedBy,
|
||||
gText_PkmnPreventsUsage,
|
||||
gText_PkmnRestoredHPUsing,
|
||||
gText_PkmnChangedTypeWith,
|
||||
gText_PkmnPreventsParalysisWith,
|
||||
gText_PkmnPreventsRomanceWith,
|
||||
gText_PkmnPreventsPoisoningWith,
|
||||
gText_PkmnPreventsConfusionWith,
|
||||
gText_PkmnRaisedFirePowerWith,
|
||||
gText_PkmnAnchorsItselfWith,
|
||||
gText_PkmnCutsAttackWith,
|
||||
gText_PkmnPreventsStatLossWith,
|
||||
gText_PkmnHurtsWith,
|
||||
gText_PkmnTraced,
|
||||
gText_StatSharply,
|
||||
gText_StatRose,
|
||||
gText_StatHarshly,
|
||||
gText_StatFell,
|
||||
gText_PkmnsStatChanged,
|
||||
gText_PkmnsStatChanged2,
|
||||
gText_PkmnsStatChanged3,
|
||||
gText_PkmnsStatChanged4,
|
||||
gText_CriticalHit,
|
||||
gText_OneHitKO,
|
||||
gText_123Poof,
|
||||
gText_AndEllipsis,
|
||||
gText_NotVeryEffective,
|
||||
gText_SuperEffective,
|
||||
gText_GotAwaySafely,
|
||||
gText_WildPkmnFled,
|
||||
gText_NoRunningFromTrainers,
|
||||
gText_CantEscape,
|
||||
gText_DontLeaveBirch,
|
||||
gText_ButNothingHappened,
|
||||
gText_ButItFailed,
|
||||
gText_ItHurtConfusion,
|
||||
gText_MirrorMoveFailed,
|
||||
gText_StartedToRain,
|
||||
gText_DownpourStarted,
|
||||
gText_RainContinues,
|
||||
gText_DownpourContinues,
|
||||
gText_RainStopped,
|
||||
gText_SandstormBrewed,
|
||||
gText_SandstormRages,
|
||||
gText_SandstormSubsided,
|
||||
gText_SunlightGotBright,
|
||||
gText_SunlightStrong,
|
||||
gText_SunlightFaded,
|
||||
gText_StartedHail,
|
||||
gText_HailContinues,
|
||||
gText_HailStopped,
|
||||
gText_FailedToSpitUp,
|
||||
gText_FailedToSwallow,
|
||||
gText_WindBecameHeatWave,
|
||||
gText_StatChangesGone,
|
||||
gText_CoinsScattered,
|
||||
gText_TooWeakForSubstitute,
|
||||
gText_SharedPain,
|
||||
gText_BellChimed,
|
||||
gText_FaintInThree,
|
||||
gText_NoPPLeft,
|
||||
gText_ButNoPPLeft,
|
||||
gText_PlayerUsedItem,
|
||||
gText_WallyUsedItem,
|
||||
gText_TrainerBlockedBall,
|
||||
gText_DontBeAThief,
|
||||
gText_ItDodgedBall,
|
||||
gText_YouMissedPkmn,
|
||||
gText_PkmnBrokeFree,
|
||||
gText_ItAppearedCaught,
|
||||
gText_AarghAlmostHadIt,
|
||||
gText_ShootSoClose,
|
||||
gText_GotchaPkmnCaught,
|
||||
gText_GotchaPkmnCaught2,
|
||||
gText_GiveNicknameCaptured,
|
||||
gText_PkmnSentToPC,
|
||||
gText_PkmnDataAddedToDex,
|
||||
gText_ItIsRaining,
|
||||
gText_SandstormIsRaging,
|
||||
gText_CantEscape2,
|
||||
gText_PkmnIgnoresAsleep,
|
||||
gText_PkmnIgnoredOrders,
|
||||
gText_PkmnBeganToNap,
|
||||
gText_PkmnLoafing,
|
||||
gText_PkmnWontObey,
|
||||
gText_PkmnTurnedAway,
|
||||
gText_PkmnPretendNotNotice,
|
||||
gText_EnemyAboutToSwitchPkmn,
|
||||
gText_CreptCloser,
|
||||
gText_CantGetCloser,
|
||||
gText_PkmnWatchingCarefully,
|
||||
gText_PkmnCuriousAboutX,
|
||||
gText_PkmnEnthralledByX,
|
||||
gText_PkmnIgnoredX,
|
||||
gText_ThrewPokeblockAtPkmn,
|
||||
gText_OutOfSafariBalls,
|
||||
gText_PkmnsItemCuredParalysis,
|
||||
gText_PkmnsItemCuredPoison,
|
||||
gText_PkmnsItemHealedBurn,
|
||||
gText_PkmnsItemDefrostedIt,
|
||||
gText_PkmnsItemWokeIt,
|
||||
gText_PkmnsItemSnappedOut,
|
||||
gText_PkmnsItemCuredProblem,
|
||||
gText_PkmnsItemRestoredHealth,
|
||||
gText_PkmnsItemRestoredPP,
|
||||
gText_PkmnsItemRestoredStatus,
|
||||
gText_PkmnsItemRestoredHPALittle,
|
||||
gText_ItemAllowsOnlyYMove,
|
||||
gText_PkmnHungOnWithX,
|
||||
gText_EmptyString3,
|
||||
gText_PkmnsXPreventsBurns,
|
||||
gText_PkmnsXBlocksY,
|
||||
gText_PkmnsXRestoredHPALittle2,
|
||||
gText_PkmnsXWhippedUpSandstorm,
|
||||
gText_PkmnsXPreventsYLoss,
|
||||
gText_PkmnsXInfatuatedY,
|
||||
gText_PkmnsXMadeYIneffective,
|
||||
gText_PkmnsXCuredYProblem,
|
||||
gText_ItSuckedLiquidOoze,
|
||||
gText_PkmnTransformed,
|
||||
gText_ElectricityWeakened,
|
||||
gText_FireWeakened,
|
||||
gText_PkmnHidUnderwater,
|
||||
gText_PkmnSprangUp,
|
||||
gText_HMMovesCantBeForgotten,
|
||||
gText_XFoundOneY,
|
||||
gText_PlayerDefeatedLinkTrainerTrainer1,
|
||||
gText_SoothingAroma,
|
||||
gText_ItemsCantBeUsedNow,
|
||||
gText_ForXCommaYZ,
|
||||
gText_UsingXTheYOfZN,
|
||||
gText_PkmnUsedXToGetPumped,
|
||||
gText_PkmnsXMadeYUseless,
|
||||
gText_PkmnTrappedBySandTomb,
|
||||
gText_EmptyString4,
|
||||
gText_ABoosted,
|
||||
gText_PkmnsXIntensifiedSun,
|
||||
gText_PkmnMakesGroundMiss,
|
||||
gText_YouThrowABallNowRight,
|
||||
gText_PkmnsXTookAttack,
|
||||
gText_PkmnChoseXAsDestiny,
|
||||
gText_PkmnLostFocus,
|
||||
gText_UseNextPkmn,
|
||||
gText_PkmnFledUsingIts,
|
||||
gText_PkmnFledUsing,
|
||||
gText_PkmnWasDraggedOut,
|
||||
gText_PreventedFromWorking,
|
||||
gText_PkmnsItemNormalizedStatus,
|
||||
gText_Trainer1UsedItem,
|
||||
gText_BoxIsFull,
|
||||
gText_PkmnAvoidedAttack,
|
||||
gText_PkmnsXMadeItIneffective,
|
||||
gText_PkmnsXPreventsFlinching,
|
||||
gText_PkmnAlreadyHasBurn,
|
||||
gText_StatsWontDecrease2,
|
||||
gText_PkmnsXBlocksY2,
|
||||
gText_PkmnsXWoreOff,
|
||||
gText_PkmnRaisedDefALittle,
|
||||
gText_PkmnRaisedSpDefALittle,
|
||||
gText_TheWallShattered,
|
||||
gText_PkmnsXPreventsYsZ,
|
||||
gText_PkmnsXCuredItsYProblem,
|
||||
gText_AttackerCantEscape,
|
||||
gText_PkmnObtainedX,
|
||||
gText_PkmnObtainedX2,
|
||||
gText_PkmnObtainedXYObtainedZ,
|
||||
gText_ButNoEffect,
|
||||
gText_PkmnsXHadNoEffectOnY,
|
||||
gText_TwoInGameTrainersDefeated,
|
||||
gText_Trainer2LoseText,
|
||||
gText_PkmnIncapableOfPower,
|
||||
gText_GlintAppearsInEye,
|
||||
gText_PkmnGettingIntoPosition,
|
||||
gText_PkmnBeganGrowlingDeeply,
|
||||
gText_PkmnEagerForMore,
|
||||
gText_DefeatedOpponentByReferee,
|
||||
gText_LostToOpponentByReferee,
|
||||
gText_TiedOpponentByReferee,
|
||||
gText_QuestionForfeitMatch,
|
||||
gText_ForfeitedMatch,
|
||||
gText_PkmnTransferredSomeonesPC,
|
||||
gText_PkmnTransferredLanettesPC,
|
||||
gText_PkmnBoxSomeonesPCFull,
|
||||
gText_PkmnBoxLanettesPCFull,
|
||||
gText_Trainer1WinText,
|
||||
gText_Trainer2WinText,
|
||||
gText_Trainer1LoseText, // 12
|
||||
gText_PkmnGainedEXP, // 13
|
||||
gText_PkmnGrewToLv, // 14
|
||||
gText_PkmnLearnedMove, // 15
|
||||
gText_TryToLearnMove1, // 16
|
||||
gText_TryToLearnMove2, // 17
|
||||
gText_TryToLearnMove3, // 18
|
||||
gText_PkmnForgotMove, // 19
|
||||
gText_StopLearningMove, // 20
|
||||
gText_DidNotLearnMove, // 21
|
||||
gText_PkmnLearnedMove2, // 22
|
||||
gText_AttackMissed, // 23
|
||||
gText_PkmnProtectedItself, // 24
|
||||
gText_StatsWontIncrease2, // 25
|
||||
gText_AvoidedDamage, // 26
|
||||
gText_ItDoesntAffect, // 27
|
||||
gText_AttackerFainted, // 28
|
||||
gText_TargetFainted, // 29
|
||||
gText_PlayerGotMoney, // 30
|
||||
gText_PlayerWhiteout, // 31
|
||||
gText_PlayerWhiteout2, // 32
|
||||
gText_PreventsEscape, // 33
|
||||
gText_HitXTimes, // 34
|
||||
gText_PkmnFellAsleep, // 35
|
||||
gText_PkmnMadeSleep, // 36
|
||||
gText_PkmnAlreadyAsleep, // 37
|
||||
gText_PkmnAlreadyAsleep2, // 38
|
||||
gText_PkmnWasntAffected, // 39
|
||||
gText_PkmnWasPoisoned, // 40
|
||||
gText_PkmnPoisonedBy, // 41
|
||||
gText_PkmnHurtByPoison, // 42
|
||||
gText_PkmnAlreadyPoisoned, // 43
|
||||
gText_PkmnBadlyPoisoned, // 44
|
||||
gText_PkmnEnergyDrained, // 45
|
||||
gText_PkmnWasBurned, // 46
|
||||
gText_PkmnBurnedBy, // 47
|
||||
gText_PkmnHurtByBurn, // 48
|
||||
gText_PkmnWasFrozen, // 49
|
||||
gText_PkmnFrozenBy, // 50
|
||||
gText_PkmnIsFrozen, // 51
|
||||
gText_PkmnWasDefrosted, // 52
|
||||
gText_PkmnWasDefrosted2, // 53
|
||||
gText_PkmnWasDefrostedBy, // 54
|
||||
gText_PkmnWasParalyzed, // 55
|
||||
gText_PkmnWasParalyzedBy, // 56
|
||||
gText_PkmnIsParalyzed, // 57
|
||||
gText_PkmnIsAlreadyParalyzed, // 58
|
||||
gText_PkmnHealedParalysis, // 59
|
||||
gText_PkmnDreamEaten, // 60
|
||||
gText_StatsWontIncrease, // 61
|
||||
gText_StatsWontDecrease, // 62
|
||||
gText_TeamStoppedWorking, // 63
|
||||
gText_FoeStoppedWorking, // 64
|
||||
gText_PkmnIsConfused, // 65
|
||||
gText_PkmnHealedConfusion, // 66
|
||||
gText_PkmnWasConfused, // 67
|
||||
gText_PkmnAlreadyConfused, // 68
|
||||
gText_PkmnFellInLove, // 69
|
||||
gText_PkmnInLove, // 70
|
||||
gText_PkmnImmobilizedByLove, // 71
|
||||
gText_PkmnBlownAway, // 72
|
||||
gText_PkmnChangedType, // 73
|
||||
gText_PkmnFlinched, // 74
|
||||
gText_PkmnRegainedHealth, // 75
|
||||
gText_PkmnHPFull, // 76
|
||||
gText_PkmnRaisedSpDef, // 77
|
||||
gText_PkmnRaisedDef, // 78
|
||||
gText_PkmnCoveredByVeil, // 79
|
||||
gText_PkmnUsedSafeguard, // 80
|
||||
gText_PkmnSafeguardExpired, // 81
|
||||
gText_PkmnWentToSleep, // 82
|
||||
gText_PkmnSleptHealthy, // 83
|
||||
gText_PkmnWhippedWhirlwind, // 84
|
||||
gText_PkmnTookSunlight, // 85
|
||||
gText_PkmnLoweredHead, // 86
|
||||
gText_PkmnIsGlowing, // 87
|
||||
gText_PkmnFlewHigh, // 88
|
||||
gText_PkmnDugHole, // 89
|
||||
gText_PkmnSqueezedByBind, // 90
|
||||
gText_PkmnTrappedInVortex, // 91
|
||||
gText_PkmnWrappedBy, // 92
|
||||
gText_PkmnClamped, // 93
|
||||
gText_PkmnHurtBy, // 94
|
||||
gText_PkmnFreedFrom, // 95
|
||||
gText_PkmnCrashed, // 96
|
||||
gText_PkmnShroudedInMist, // 97
|
||||
gText_PkmnProtectedByMist, // 98
|
||||
gText_PkmnGettingPumped, // 99
|
||||
gText_PkmnHitWithRecoil, // 100
|
||||
gText_PkmnProtectedItself2, // 101
|
||||
gText_PkmnBuffetedBySandstorm, // 102
|
||||
gText_PkmnPeltedByHail, // 103
|
||||
gText_PkmnSeeded, // 104
|
||||
gText_PkmnEvadedAttack, // 105
|
||||
gText_PkmnSappedByLeechSeed, // 106
|
||||
gText_PkmnFastAsleep, // 107
|
||||
gText_PkmnWokeUp, // 108
|
||||
gText_PkmnUproarKeptAwake, // 109
|
||||
gText_PkmnWokeUpInUproar, // 110
|
||||
gText_PkmnCausedUproar, // 111
|
||||
gText_PkmnMakingUproar, // 112
|
||||
gText_PkmnCalmedDown, // 113
|
||||
gText_PkmnCantSleepInUproar, // 114
|
||||
gText_PkmnStockpiled, // 115
|
||||
gText_PkmnCantStockpile, // 116
|
||||
gText_PkmnCantSleepInUproar2, // 117
|
||||
gText_UproarKeptPkmnAwake, // 118
|
||||
gText_PkmnStayedAwakeUsing, // 119
|
||||
gText_PkmnStoringEnergy, // 120
|
||||
gText_PkmnUnleashedEnergy, // 121
|
||||
gText_PkmnFatigueConfusion, // 122
|
||||
gText_PkmnPickedUpItem, // 123
|
||||
gText_PkmnUnaffected, // 124
|
||||
gText_PkmnTransformedInto, // 125
|
||||
gText_PkmnMadeSubstitute, // 126
|
||||
gText_PkmnHasSubstitute, // 127
|
||||
gText_SubstituteDamaged, // 128
|
||||
gText_PkmnSubstituteFaded, // 129
|
||||
gText_PkmnMustRecharge, // 130
|
||||
gText_PkmnRageBuilding, // 131
|
||||
gText_PkmnMoveWasDisabled, // 132
|
||||
gText_PkmnMoveIsDisabled, // 133
|
||||
gText_PkmnMoveDisabledNoMore, // 134
|
||||
gText_PkmnGotEncore, // 135
|
||||
gText_PkmnEncoreEnded, // 136
|
||||
gText_PkmnTookAim, // 137
|
||||
gText_PkmnSketchedMove, // 138
|
||||
gText_PkmnTryingToTakeFoe, // 139
|
||||
gText_PkmnTookFoe, // 140
|
||||
gText_PkmnReducedPP, // 141
|
||||
gText_PkmnStoleItem, // 142
|
||||
gText_TargetCantEscapeNow, // 143
|
||||
gText_PkmnFellIntoNightmare, // 144
|
||||
gText_PkmnLockedInNightmare, // 145
|
||||
gText_PkmnLaidCurse, // 146
|
||||
gText_PkmnAfflictedByCurse, // 147
|
||||
gText_SpikesScattered, // 148
|
||||
gText_PkmnHurtBySpikes, // 149
|
||||
gText_PkmnIdentified, // 150
|
||||
gText_PkmnPerishCountFell, // 151
|
||||
gText_PkmnBracedItself, // 152
|
||||
gText_PkmnEnduredHit, // 153
|
||||
gText_MagnitudeStrength, // 154
|
||||
gText_PkmnCutHPMaxedAttack, // 155
|
||||
gText_PkmnCopiedStatChanges, // 156
|
||||
gText_PkmnGotFree, // 157
|
||||
gText_PkmnShedLeechSeed, // 158
|
||||
gText_PkmnBlewAwaySpikes, // 159
|
||||
gText_PkmnFledFromBattle, // 160
|
||||
gText_PkmnForesawAttack, // 161
|
||||
gText_PkmnTookAttack, // 162
|
||||
gText_PkmnAttack, // 163
|
||||
gText_PkmnCenterAttention, // 164
|
||||
gText_PkmnChargingPower, // 165
|
||||
gText_NaturePowerTurnedInto, // 166
|
||||
gText_PkmnStatusNormal, // 167
|
||||
gText_PkmnHasNoMovesLeft, // 168
|
||||
gText_PkmnSubjectedToTorment, // 169
|
||||
gText_PkmnCantUseMoveTorment, // 170
|
||||
gText_PkmnTighteningFocus, // 171
|
||||
gText_PkmnFellForTaunt, // 172
|
||||
gText_PkmnCantUseMoveTaunt, // 173
|
||||
gText_PkmnReadyToHelp, // 174
|
||||
gText_PkmnSwitchedItems, // 175
|
||||
gText_PkmnCopiedFoe, // 176
|
||||
gText_PkmnMadeWish, // 177
|
||||
gText_PkmnWishCameTrue, // 178
|
||||
gText_PkmnPlantedRoots, // 179
|
||||
gText_PkmnAbsorbedNutrients, // 180
|
||||
gText_PkmnAnchoredItself, // 181
|
||||
gText_PkmnWasMadeDrowsy, // 182
|
||||
gText_PkmnKnockedOff, // 183
|
||||
gText_PkmnSwappedAbilities, // 184
|
||||
gText_PkmnSealedOpponentMove, // 185
|
||||
gText_PkmnCantUseMoveSealed, // 186
|
||||
gText_PkmnWantsGrudge, // 187
|
||||
gText_PkmnLostPPGrudge, // 188
|
||||
gText_PkmnShroudedItself, // 189
|
||||
gText_PkmnMoveBounced, // 190
|
||||
gText_PkmnWaitsForTarget, // 191
|
||||
gText_PkmnSnatchedMove, // 192
|
||||
gText_PkmnMadeItRain, // 193
|
||||
gText_PkmnRaisedSpeed, // 194
|
||||
gText_PkmnProtectedBy, // 195
|
||||
gText_PkmnPreventsUsage, // 196
|
||||
gText_PkmnRestoredHPUsing, // 197
|
||||
gText_PkmnChangedTypeWith, // 198
|
||||
gText_PkmnPreventsParalysisWith, // 199
|
||||
gText_PkmnPreventsRomanceWith, // 200
|
||||
gText_PkmnPreventsPoisoningWith, // 201
|
||||
gText_PkmnPreventsConfusionWith, // 202
|
||||
gText_PkmnRaisedFirePowerWith, // 203
|
||||
gText_PkmnAnchorsItselfWith, // 204
|
||||
gText_PkmnCutsAttackWith, // 205
|
||||
gText_PkmnPreventsStatLossWith, // 206
|
||||
gText_PkmnHurtsWith, // 207
|
||||
gText_PkmnTraced, // 208
|
||||
gText_StatSharply, // 209
|
||||
gText_StatRose, // 210
|
||||
gText_StatHarshly, // 211
|
||||
gText_StatFell, // 212
|
||||
gText_PkmnsStatChanged, // 213
|
||||
gText_PkmnsStatChanged2, // 214
|
||||
gText_PkmnsStatChanged3, // 215
|
||||
gText_PkmnsStatChanged4, // 216
|
||||
gText_CriticalHit, // 217
|
||||
gText_OneHitKO, // 218
|
||||
gText_123Poof, // 219
|
||||
gText_AndEllipsis, // 220
|
||||
gText_NotVeryEffective, // 221
|
||||
gText_SuperEffective, // 222
|
||||
gText_GotAwaySafely, // 223
|
||||
gText_WildPkmnFled, // 224
|
||||
gText_NoRunningFromTrainers, // 225
|
||||
gText_CantEscape, // 226
|
||||
gText_DontLeaveBirch, // 227
|
||||
gText_ButNothingHappened, // 228
|
||||
gText_ButItFailed, // 229
|
||||
gText_ItHurtConfusion, // 230
|
||||
gText_MirrorMoveFailed, // 231
|
||||
gText_StartedToRain, // 232
|
||||
gText_DownpourStarted, // 233
|
||||
gText_RainContinues, // 234
|
||||
gText_DownpourContinues, // 235
|
||||
gText_RainStopped, // 236
|
||||
gText_SandstormBrewed, // 237
|
||||
gText_SandstormRages, // 238
|
||||
gText_SandstormSubsided, // 239
|
||||
gText_SunlightGotBright, // 240
|
||||
gText_SunlightStrong, // 241
|
||||
gText_SunlightFaded, // 242
|
||||
gText_StartedHail, // 243
|
||||
gText_HailContinues, // 244
|
||||
gText_HailStopped, // 245
|
||||
gText_FailedToSpitUp, // 246
|
||||
gText_FailedToSwallow, // 247
|
||||
gText_WindBecameHeatWave, // 248
|
||||
gText_StatChangesGone, // 249
|
||||
gText_CoinsScattered, // 250
|
||||
gText_TooWeakForSubstitute, // 251
|
||||
gText_SharedPain, // 252
|
||||
gText_BellChimed, // 253
|
||||
gText_FaintInThree, // 254
|
||||
gText_NoPPLeft, // 255
|
||||
gText_ButNoPPLeft, // 256
|
||||
gText_PlayerUsedItem, // 257
|
||||
gText_WallyUsedItem, // 258
|
||||
gText_TrainerBlockedBall, // 259
|
||||
gText_DontBeAThief, // 260
|
||||
gText_ItDodgedBall, // 261
|
||||
gText_YouMissedPkmn, // 262
|
||||
gText_PkmnBrokeFree, // 263
|
||||
gText_ItAppearedCaught, // 264
|
||||
gText_AarghAlmostHadIt, // 265
|
||||
gText_ShootSoClose, // 266
|
||||
gText_GotchaPkmnCaught, // 267
|
||||
gText_GotchaPkmnCaught2, // 268
|
||||
gText_GiveNicknameCaptured, // 269
|
||||
gText_PkmnSentToPC, // 270
|
||||
gText_PkmnDataAddedToDex, // 271
|
||||
gText_ItIsRaining, // 272
|
||||
gText_SandstormIsRaging, // 273
|
||||
gText_CantEscape2, // 274
|
||||
gText_PkmnIgnoresAsleep, // 275
|
||||
gText_PkmnIgnoredOrders, // 276
|
||||
gText_PkmnBeganToNap, // 277
|
||||
gText_PkmnLoafing, // 278
|
||||
gText_PkmnWontObey, // 279
|
||||
gText_PkmnTurnedAway, // 280
|
||||
gText_PkmnPretendNotNotice, // 281
|
||||
gText_EnemyAboutToSwitchPkmn, // 282
|
||||
gText_CreptCloser, // 283
|
||||
gText_CantGetCloser, // 284
|
||||
gText_PkmnWatchingCarefully, // 285
|
||||
gText_PkmnCuriousAboutX, // 286
|
||||
gText_PkmnEnthralledByX, // 287
|
||||
gText_PkmnIgnoredX, // 288
|
||||
gText_ThrewPokeblockAtPkmn, // 289
|
||||
gText_OutOfSafariBalls, // 290
|
||||
gText_PkmnsItemCuredParalysis, // 291
|
||||
gText_PkmnsItemCuredPoison, // 292
|
||||
gText_PkmnsItemHealedBurn, // 293
|
||||
gText_PkmnsItemDefrostedIt, // 294
|
||||
gText_PkmnsItemWokeIt, // 295
|
||||
gText_PkmnsItemSnappedOut, // 296
|
||||
gText_PkmnsItemCuredProblem, // 297
|
||||
gText_PkmnsItemRestoredHealth, // 298
|
||||
gText_PkmnsItemRestoredPP, // 299
|
||||
gText_PkmnsItemRestoredStatus, // 300
|
||||
gText_PkmnsItemRestoredHPALittle, // 301
|
||||
gText_ItemAllowsOnlyYMove, // 302
|
||||
gText_PkmnHungOnWithX, // 303
|
||||
gText_EmptyString3, // 304
|
||||
gText_PkmnsXPreventsBurns, // 305
|
||||
gText_PkmnsXBlocksY, // 306
|
||||
gText_PkmnsXRestoredHPALittle2, // 307
|
||||
gText_PkmnsXWhippedUpSandstorm, // 308
|
||||
gText_PkmnsXPreventsYLoss, // 309
|
||||
gText_PkmnsXInfatuatedY, // 310
|
||||
gText_PkmnsXMadeYIneffective, // 311
|
||||
gText_PkmnsXCuredYProblem, // 312
|
||||
gText_ItSuckedLiquidOoze, // 313
|
||||
gText_PkmnTransformed, // 314
|
||||
gText_ElectricityWeakened, // 315
|
||||
gText_FireWeakened, // 316
|
||||
gText_PkmnHidUnderwater, // 317
|
||||
gText_PkmnSprangUp, // 318
|
||||
gText_HMMovesCantBeForgotten, // 319
|
||||
gText_XFoundOneY, // 320
|
||||
gText_PlayerDefeatedLinkTrainerTrainer1, // 321
|
||||
gText_SoothingAroma, // 322
|
||||
gText_ItemsCantBeUsedNow, // 323
|
||||
gText_ForXCommaYZ, // 324
|
||||
gText_UsingXTheYOfZN, // 325
|
||||
gText_PkmnUsedXToGetPumped, // 326
|
||||
gText_PkmnsXMadeYUseless, // 327
|
||||
gText_PkmnTrappedBySandTomb, // 328
|
||||
gText_EmptyString4, // 329
|
||||
gText_ABoosted, // 330
|
||||
gText_PkmnsXIntensifiedSun, // 331
|
||||
gText_PkmnMakesGroundMiss, // 332
|
||||
gText_YouThrowABallNowRight, // 333
|
||||
gText_PkmnsXTookAttack, // 334
|
||||
gText_PkmnChoseXAsDestiny, // 335
|
||||
gText_PkmnLostFocus, // 336
|
||||
gText_UseNextPkmn, // 337
|
||||
gText_PkmnFledUsingIts, // 338
|
||||
gText_PkmnFledUsing, // 339
|
||||
gText_PkmnWasDraggedOut, // 340
|
||||
gText_PreventedFromWorking, // 341
|
||||
gText_PkmnsItemNormalizedStatus, // 342
|
||||
gText_Trainer1UsedItem, // 343
|
||||
gText_BoxIsFull, // 344
|
||||
gText_PkmnAvoidedAttack, // 345
|
||||
gText_PkmnsXMadeItIneffective, // 346
|
||||
gText_PkmnsXPreventsFlinching, // 347
|
||||
gText_PkmnAlreadyHasBurn, // 348
|
||||
gText_StatsWontDecrease2, // 349
|
||||
gText_PkmnsXBlocksY2, // 350
|
||||
gText_PkmnsXWoreOff, // 351
|
||||
gText_PkmnRaisedDefALittle, // 352
|
||||
gText_PkmnRaisedSpDefALittle, // 353
|
||||
gText_TheWallShattered, // 354
|
||||
gText_PkmnsXPreventsYsZ, // 355
|
||||
gText_PkmnsXCuredItsYProblem, // 356
|
||||
gText_AttackerCantEscape, // 357
|
||||
gText_PkmnObtainedX, // 358
|
||||
gText_PkmnObtainedX2, // 359
|
||||
gText_PkmnObtainedXYObtainedZ, // 360
|
||||
gText_ButNoEffect, // 361
|
||||
gText_PkmnsXHadNoEffectOnY, // 362
|
||||
gText_TwoInGameTrainersDefeated, // 363
|
||||
gText_Trainer2LoseText, // 364
|
||||
gText_PkmnIncapableOfPower, // 365
|
||||
gText_GlintAppearsInEye, // 366
|
||||
gText_PkmnGettingIntoPosition, // 367
|
||||
gText_PkmnBeganGrowlingDeeply, // 368
|
||||
gText_PkmnEagerForMore, // 369
|
||||
gText_DefeatedOpponentByReferee, // 370
|
||||
gText_LostToOpponentByReferee, // 371
|
||||
gText_TiedOpponentByReferee, // 372
|
||||
gText_QuestionForfeitMatch, // 373
|
||||
gText_ForfeitedMatch, // 374
|
||||
gText_PkmnTransferredSomeonesPC, // 375
|
||||
gText_PkmnTransferredLanettesPC, // 376
|
||||
gText_PkmnBoxSomeonesPCFull, // 377
|
||||
gText_PkmnBoxLanettesPCFull, // 378
|
||||
gText_Trainer1WinText, // 379
|
||||
gText_Trainer2WinText, // 380
|
||||
};
|
||||
|
||||
const u16 gMissStringIds[] =
|
||||
|
||||
@@ -48,15 +48,6 @@ extern u16 gBattle_BG2_Y;
|
||||
extern u16 gBattle_BG3_X;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
struct TrainerMoney
|
||||
{
|
||||
u8 classId;
|
||||
u8 value;
|
||||
};
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gTypeEffectiveness[336];
|
||||
extern const struct TrainerMoney gTrainerMoneyTable[];
|
||||
extern const u8* const gBattleScriptsForMoveEffects[];
|
||||
|
||||
// functions
|
||||
@@ -4436,31 +4427,34 @@ static void atk47_setgraphicalstatchangevalues(void)
|
||||
gBattlescriptCurrInstr++;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static void atk48_playstatchangeanimation(void)
|
||||
{
|
||||
u32 currStat = 0;
|
||||
s16 statAnimId = 0;
|
||||
s16 checkingStatAnimId = 0;
|
||||
s32 changeableStats = 0;
|
||||
u32 statsToCheck = 0;
|
||||
u16 statAnimId = 0;
|
||||
s32 changeableStatsCount = 0;
|
||||
u8 statsToCheck = 0;
|
||||
|
||||
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
|
||||
statsToCheck = gBattlescriptCurrInstr[2];
|
||||
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
|
||||
{
|
||||
checkingStatAnimId = (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) ? 0x2D : 0x15;
|
||||
s16 startingStatAnimId;
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
|
||||
startingStatAnimId = 0x2D;
|
||||
else
|
||||
startingStatAnimId = 0x15;
|
||||
|
||||
while (statsToCheck != 0)
|
||||
{
|
||||
if (statsToCheck & 1)
|
||||
{
|
||||
if (!(gBattlescriptCurrInstr[3] & ATK48_LOWER_FAIL_CHECK))
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER)
|
||||
{
|
||||
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
|
||||
{
|
||||
statAnimId = checkingStatAnimId;
|
||||
changeableStats++;
|
||||
statAnimId = startingStatAnimId + currStat;
|
||||
changeableStatsCount++;
|
||||
}
|
||||
}
|
||||
else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
|
||||
@@ -4471,15 +4465,15 @@ static void atk48_playstatchangeanimation(void)
|
||||
{
|
||||
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
|
||||
{
|
||||
statAnimId = checkingStatAnimId;
|
||||
changeableStats++;
|
||||
statAnimId = startingStatAnimId + currStat;
|
||||
changeableStatsCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
statsToCheck >>= 1, checkingStatAnimId++, currStat++;
|
||||
statsToCheck >>= 1, currStat++;
|
||||
}
|
||||
|
||||
if (changeableStats > 1) // more than one stat, so the color is gray
|
||||
if (changeableStatsCount > 1) // more than one stat, so the color is gray
|
||||
{
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
|
||||
statAnimId = 0x3A;
|
||||
@@ -4489,18 +4483,23 @@ static void atk48_playstatchangeanimation(void)
|
||||
}
|
||||
else // goes up
|
||||
{
|
||||
checkingStatAnimId = (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) ? 0x26 : 0xE;
|
||||
s16 startingStatAnimId;
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
|
||||
startingStatAnimId = 0x26;
|
||||
else
|
||||
startingStatAnimId = 0xE;
|
||||
|
||||
while (statsToCheck != 0)
|
||||
{
|
||||
if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
|
||||
{
|
||||
statAnimId = checkingStatAnimId;
|
||||
changeableStats++;
|
||||
statAnimId = startingStatAnimId + currStat;
|
||||
changeableStatsCount++;
|
||||
}
|
||||
statsToCheck >>= 1, checkingStatAnimId += 1, currStat++;
|
||||
statsToCheck >>= 1, currStat++;
|
||||
}
|
||||
|
||||
if (changeableStats > 1) // more than one stat, so the color is gray
|
||||
if (changeableStatsCount > 1) // more than one stat, so the color is gray
|
||||
{
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
|
||||
statAnimId = 0x38;
|
||||
@@ -4509,15 +4508,15 @@ static void atk48_playstatchangeanimation(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStats < 2)
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount < 2)
|
||||
{
|
||||
gBattlescriptCurrInstr += 4;
|
||||
}
|
||||
else if (changeableStats != 0 && gBattleScripting.field_1B == 0)
|
||||
else if (changeableStatsCount != 0 && gBattleScripting.field_1B == 0)
|
||||
{
|
||||
BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
|
||||
MarkBattlerForControllerExec(gActiveBattler);
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStats > 1)
|
||||
if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount > 1)
|
||||
gBattleScripting.field_1B = 1;
|
||||
gBattlescriptCurrInstr += 4;
|
||||
}
|
||||
@@ -4526,261 +4525,6 @@ static void atk48_playstatchangeanimation(void)
|
||||
gBattlescriptCurrInstr += 4;
|
||||
}
|
||||
}
|
||||
#else
|
||||
ASM_DIRECT
|
||||
static void atk48_playstatchangeanimation(void)
|
||||
{
|
||||
asm("\n\
|
||||
.syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x4\n\
|
||||
movs r7, 0\n\
|
||||
movs r0, 0\n\
|
||||
mov r8, r0\n\
|
||||
movs r3, 0\n\
|
||||
ldr r5, =gBattlescriptCurrInstr\n\
|
||||
ldr r0, [r5]\n\
|
||||
ldrb r0, [r0, 0x1]\n\
|
||||
str r3, [sp]\n\
|
||||
bl GetBattlerForBattleScript\n\
|
||||
ldr r2, =gActiveBattler\n\
|
||||
strb r0, [r2]\n\
|
||||
ldr r0, [r5]\n\
|
||||
ldrb r4, [r0, 0x2]\n\
|
||||
ldrb r1, [r0, 0x3]\n\
|
||||
movs r0, 0x1\n\
|
||||
ands r0, r1\n\
|
||||
ldr r3, [sp]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BAEC\n\
|
||||
movs r0, 0x2\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x15\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BA18\n\
|
||||
movs r1, 0x2D\n\
|
||||
_0804BA18:\n\
|
||||
cmp r4, 0\n\
|
||||
beq _0804BAC0\n\
|
||||
movs r0, 0x1\n\
|
||||
mov r10, r0\n\
|
||||
ldr r0, =gBattleMons + 0x18\n\
|
||||
mov r9, r0\n\
|
||||
lsls r5, r1, 16\n\
|
||||
_0804BA26:\n\
|
||||
adds r0, r4, 0\n\
|
||||
mov r1, r10\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BAB2\n\
|
||||
ldr r0, =gBattlescriptCurrInstr\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldrb r1, [r0, 0x3]\n\
|
||||
movs r0, 0x8\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BA58\n\
|
||||
ldr r0, =gActiveBattler\n\
|
||||
ldrb r1, [r0]\n\
|
||||
movs r0, 0x58\n\
|
||||
muls r0, r1\n\
|
||||
adds r0, r7, r0\n\
|
||||
b _0804BAA0\n\
|
||||
.pool\n\
|
||||
_0804BA58:\n\
|
||||
ldr r6, =gActiveBattler\n\
|
||||
ldrb r0, [r6]\n\
|
||||
str r3, [sp]\n\
|
||||
bl GetBattlerPosition\n\
|
||||
mov r1, r10\n\
|
||||
ands r1, r0\n\
|
||||
lsls r0, r1, 1\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 2\n\
|
||||
ldr r1, =gSideTimers\n\
|
||||
adds r0, r1\n\
|
||||
ldrb r0, [r0, 0x4]\n\
|
||||
ldr r3, [sp]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0804BAB2\n\
|
||||
ldr r0, =gBattleMons\n\
|
||||
ldrb r2, [r6]\n\
|
||||
movs r1, 0x58\n\
|
||||
muls r2, r1\n\
|
||||
adds r0, r2, r0\n\
|
||||
adds r0, 0x20\n\
|
||||
ldrb r0, [r0]\n\
|
||||
cmp r0, 0x1D\n\
|
||||
beq _0804BAB2\n\
|
||||
cmp r0, 0x49\n\
|
||||
beq _0804BAB2\n\
|
||||
cmp r0, 0x33\n\
|
||||
bne _0804BA96\n\
|
||||
cmp r7, 0x6\n\
|
||||
beq _0804BAB2\n\
|
||||
_0804BA96:\n\
|
||||
cmp r0, 0x34\n\
|
||||
bne _0804BA9E\n\
|
||||
cmp r7, 0x1\n\
|
||||
beq _0804BAB2\n\
|
||||
_0804BA9E:\n\
|
||||
adds r0, r7, r2\n\
|
||||
_0804BAA0:\n\
|
||||
add r0, r9\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
cmp r0, 0\n\
|
||||
ble _0804BAB2\n\
|
||||
lsrs r0, r5, 16\n\
|
||||
mov r8, r0\n\
|
||||
adds r3, 0x1\n\
|
||||
_0804BAB2:\n\
|
||||
lsrs r4, 1\n\
|
||||
movs r1, 0x80\n\
|
||||
lsls r1, 9\n\
|
||||
adds r5, r1\n\
|
||||
adds r7, 0x1\n\
|
||||
cmp r4, 0\n\
|
||||
bne _0804BA26\n\
|
||||
_0804BAC0:\n\
|
||||
ldr r0, =gBattlescriptCurrInstr\n\
|
||||
mov r9, r0\n\
|
||||
cmp r3, 0x1\n\
|
||||
ble _0804BB4E\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldrb r1, [r0, 0x3]\n\
|
||||
movs r0, 0x2\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x39\n\
|
||||
mov r8, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BB4E\n\
|
||||
movs r0, 0x3A\n\
|
||||
b _0804BB4C\n\
|
||||
.pool\n\
|
||||
_0804BAEC:\n\
|
||||
movs r0, 0x2\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0xE\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BAF8\n\
|
||||
movs r1, 0x26\n\
|
||||
_0804BAF8:\n\
|
||||
mov r9, r5\n\
|
||||
cmp r4, 0\n\
|
||||
beq _0804BB34\n\
|
||||
ldr r6, =gBattleMons + 0x18\n\
|
||||
adds r5, r2, 0\n\
|
||||
lsls r2, r1, 16\n\
|
||||
_0804BB04:\n\
|
||||
movs r0, 0x1\n\
|
||||
ands r0, r4\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BB26\n\
|
||||
ldrb r1, [r5]\n\
|
||||
movs r0, 0x58\n\
|
||||
muls r0, r1\n\
|
||||
adds r0, r7, r0\n\
|
||||
adds r0, r6\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 24\n\
|
||||
asrs r0, 24\n\
|
||||
cmp r0, 0xB\n\
|
||||
bgt _0804BB26\n\
|
||||
lsrs r1, r2, 16\n\
|
||||
mov r8, r1\n\
|
||||
adds r3, 0x1\n\
|
||||
_0804BB26:\n\
|
||||
lsrs r4, 1\n\
|
||||
movs r0, 0x80\n\
|
||||
lsls r0, 9\n\
|
||||
adds r2, r0\n\
|
||||
adds r7, 0x1\n\
|
||||
cmp r4, 0\n\
|
||||
bne _0804BB04\n\
|
||||
_0804BB34:\n\
|
||||
cmp r3, 0x1\n\
|
||||
ble _0804BB4E\n\
|
||||
mov r1, r9\n\
|
||||
ldr r0, [r1]\n\
|
||||
ldrb r1, [r0, 0x3]\n\
|
||||
movs r0, 0x2\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x37\n\
|
||||
mov r8, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BB4E\n\
|
||||
movs r0, 0x38\n\
|
||||
_0804BB4C:\n\
|
||||
mov r8, r0\n\
|
||||
_0804BB4E:\n\
|
||||
mov r1, r9\n\
|
||||
ldr r2, [r1]\n\
|
||||
ldrb r1, [r2, 0x3]\n\
|
||||
movs r0, 0x4\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BB6C\n\
|
||||
cmp r3, 0x1\n\
|
||||
bgt _0804BB6C\n\
|
||||
adds r0, r2, 0x4\n\
|
||||
mov r1, r9\n\
|
||||
b _0804BBBA\n\
|
||||
.pool\n\
|
||||
_0804BB6C:\n\
|
||||
cmp r3, 0\n\
|
||||
beq _0804BBB4\n\
|
||||
ldr r4, =gBattleScripting\n\
|
||||
ldrb r0, [r4, 0x1B]\n\
|
||||
cmp r0, 0\n\
|
||||
bne _0804BBB4\n\
|
||||
movs r0, 0\n\
|
||||
movs r1, 0x1\n\
|
||||
mov r2, r8\n\
|
||||
str r3, [sp]\n\
|
||||
bl BtlController_EmitBattleAnimation\n\
|
||||
ldr r0, =gActiveBattler\n\
|
||||
ldrb r0, [r0]\n\
|
||||
bl MarkBattlerForControllerExec\n\
|
||||
ldr r0, =gBattlescriptCurrInstr\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldrb r1, [r0, 0x3]\n\
|
||||
movs r0, 0x4\n\
|
||||
ands r0, r1\n\
|
||||
ldr r3, [sp]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0804BBA4\n\
|
||||
cmp r3, 0x1\n\
|
||||
ble _0804BBA4\n\
|
||||
movs r0, 0x1\n\
|
||||
strb r0, [r4, 0x1B]\n\
|
||||
_0804BBA4:\n\
|
||||
ldr r1, =gBattlescriptCurrInstr\n\
|
||||
b _0804BBB6\n\
|
||||
.pool\n\
|
||||
_0804BBB4:\n\
|
||||
mov r1, r9\n\
|
||||
_0804BBB6:\n\
|
||||
ldr r0, [r1]\n\
|
||||
adds r0, 0x4\n\
|
||||
_0804BBBA:\n\
|
||||
str r0, [r1]\n\
|
||||
add sp, 0x4\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.syntax divided");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
#define ATK49_LAST_CASE 17
|
||||
|
||||
@@ -5271,10 +5015,9 @@ static void atk4E_switchinanim(void)
|
||||
|
||||
static void atk4F_jumpifcantswitch(void)
|
||||
{
|
||||
s32 val = 0;
|
||||
s32 compareVar = 0;
|
||||
struct Pokemon *party = NULL;
|
||||
s32 r7 = 0;
|
||||
s32 i;
|
||||
s32 lastMonId;
|
||||
struct Pokemon *party;
|
||||
|
||||
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
|
||||
|
||||
@@ -5294,20 +5037,20 @@ static void atk4F_jumpifcantswitch(void)
|
||||
else
|
||||
party = gPlayerParty;
|
||||
|
||||
val = 0;
|
||||
if (2 & gActiveBattler)
|
||||
val = 3;
|
||||
i = 0;
|
||||
if (gActiveBattler & 2)
|
||||
i = 3;
|
||||
|
||||
for (compareVar = val + 3; val < compareVar; val++)
|
||||
for (lastMonId = i + 3; i < lastMonId; i++)
|
||||
{
|
||||
if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[val], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&party[val], MON_DATA_HP) != 0
|
||||
&& gBattlerPartyIndexes[gActiveBattler] != val)
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&party[i], MON_DATA_HP) != 0
|
||||
&& gBattlerPartyIndexes[gActiveBattler] != i)
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == compareVar)
|
||||
if (i == lastMonId)
|
||||
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
@@ -5320,18 +5063,18 @@ static void atk4F_jumpifcantswitch(void)
|
||||
{
|
||||
party = gPlayerParty;
|
||||
|
||||
val = 0;
|
||||
i = 0;
|
||||
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
|
||||
val = 3;
|
||||
i = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
party = gEnemyParty;
|
||||
|
||||
if (gActiveBattler == 1)
|
||||
val = 0;
|
||||
i = 0;
|
||||
else
|
||||
val = 3;
|
||||
i = 3;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -5341,22 +5084,21 @@ static void atk4F_jumpifcantswitch(void)
|
||||
else
|
||||
party = gPlayerParty;
|
||||
|
||||
|
||||
val = 0;
|
||||
i = 0;
|
||||
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
|
||||
val = 3;
|
||||
i = 3;
|
||||
}
|
||||
|
||||
for (compareVar = val + 3; val < compareVar; val++)
|
||||
for (lastMonId = i + 3; i < lastMonId; i++)
|
||||
{
|
||||
if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[val], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&party[val], MON_DATA_HP) != 0
|
||||
&& gBattlerPartyIndexes[gActiveBattler] != val)
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&party[i], MON_DATA_HP) != 0
|
||||
&& gBattlerPartyIndexes[gActiveBattler] != i)
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == compareVar)
|
||||
if (i == lastMonId)
|
||||
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
@@ -5365,58 +5107,61 @@ static void atk4F_jumpifcantswitch(void)
|
||||
{
|
||||
party = gEnemyParty;
|
||||
|
||||
val = 0;
|
||||
if (gActiveBattler == 3)
|
||||
val = 3;
|
||||
i = 0;
|
||||
if (gActiveBattler == B_POSITION_OPPONENT_RIGHT)
|
||||
i = 3;
|
||||
|
||||
for (compareVar = val + 3; val < compareVar; val++)
|
||||
for (lastMonId = i + 3; i < lastMonId; i++)
|
||||
{
|
||||
if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[val], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&party[val], MON_DATA_HP) != 0
|
||||
&& gBattlerPartyIndexes[gActiveBattler] != val)
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
|
||||
&& GetMonData(&party[i], MON_DATA_HP) != 0
|
||||
&& gBattlerPartyIndexes[gActiveBattler] != i)
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == compareVar)
|
||||
if (i == lastMonId)
|
||||
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 battlerIn1, battlerIn2;
|
||||
|
||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
|
||||
{
|
||||
r7 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
compareVar = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
else
|
||||
compareVar = r7;
|
||||
battlerIn2 = battlerIn1;
|
||||
|
||||
party = gEnemyParty;
|
||||
}
|
||||
else
|
||||
{
|
||||
r7 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||
compareVar = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
|
||||
else
|
||||
compareVar = r7;
|
||||
battlerIn2 = battlerIn1;
|
||||
|
||||
party = gPlayerParty;
|
||||
}
|
||||
for (val = 0; val < 6; val++)
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
if (GetMonData(&party[val], MON_DATA_HP) != 0
|
||||
&& GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[val], MON_DATA_IS_EGG)
|
||||
&& val != gBattlerPartyIndexes[r7] && val != gBattlerPartyIndexes[compareVar])
|
||||
if (GetMonData(&party[i], MON_DATA_HP) != 0
|
||||
&& GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
|
||||
&& i != gBattlerPartyIndexes[battlerIn1] && i != gBattlerPartyIndexes[battlerIn2])
|
||||
break;
|
||||
}
|
||||
|
||||
if (val == 6)
|
||||
if (i == 6)
|
||||
gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
|
||||
else
|
||||
gBattlescriptCurrInstr += 6;
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "string_util.h"
|
||||
#include "overworld.h"
|
||||
#include "field_weather.h"
|
||||
#include "gym_leader_rematch.h"
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -66,7 +67,6 @@ extern void Overworld_ClearSavedMusic(void);
|
||||
extern void CB2_WhiteOut(void);
|
||||
extern void sub_80AF6F0(void);
|
||||
extern void PlayBattleBGM(void);
|
||||
extern void sub_81DA57C(void);
|
||||
extern u8 Overworld_GetFlashLevel(void);
|
||||
extern u16 sub_81A9AA8(u8 localId);
|
||||
extern u16 sub_81D6180(u8 localId);
|
||||
@@ -252,84 +252,84 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
|
||||
|
||||
const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
|
||||
{
|
||||
{{0x0025, 0x0028, 0x0029, 0x002a, 0x002b}, 0x0000, 0x0021},
|
||||
{{0x02e1, 0x032c, 0x032d, 0x032e, 0x032f}, 0x0000, 0x0014},
|
||||
{{0x002c, 0x002f, 0x0030, 0x0031, 0x0032}, 0x0000, 0x001a},
|
||||
{{0x0039, 0x003c, 0x003d, 0x003e, 0x003f}, 0x0000, 0x0018},
|
||||
{{0x0040, 0x0043, 0x0044, 0x0045, 0x0046}, 0x0000, 0x0018},
|
||||
{{0x02af, 0x02b0, 0x02b1, 0x02b2, 0x02b3}, 0x0000, 0x0027},
|
||||
{{0x02ff, 0x033c, 0x033d, 0x033e, 0x033f}, 0x0000, 0x0024},
|
||||
{{0x005e, 0x0065, 0x0066, 0x0067, 0x0068}, 0x0000, 0x001a},
|
||||
{{0x004e, 0x0054, 0x0055, 0x0056, 0x0057}, 0x0000, 0x001a},
|
||||
{{0x006c, 0x006e, 0x006f, 0x0070, 0x0071}, 0x0018, 0x0014},
|
||||
{{0x0072, 0x0078, 0x0079, 0x007a, 0x007b}, 0x0000, 0x0013},
|
||||
{{0x0090, 0x034c, 0x034d, 0x034e, 0x034f}, 0x0018, 0x0038},
|
||||
{{0x007f, 0x0084, 0x0085, 0x0086, 0x0087}, 0x0000, 0x0024},
|
||||
{{0x0088, 0x008b, 0x008c, 0x008d, 0x008e}, 0x0000, 0x0013},
|
||||
{{0x008f, 0x0093, 0x0094, 0x0095, 0x0096}, 0x0000, 0x001d},
|
||||
{{0x009b, 0x00af, 0x00b0, 0x00b1, 0x00b2}, 0x0000, 0x0016},
|
||||
{{0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb}, 0x0000, 0x001e},
|
||||
{{0x02a0, 0x0338, 0x0339, 0x033a, 0x033b}, 0x0000, 0x002a},
|
||||
{{0x00c3, 0x0340, 0x0341, 0x0342, 0x0343}, 0x0000, 0x0026},
|
||||
{{0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8}, 0x0000, 0x0021},
|
||||
{{0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2}, 0x0000, 0x001d},
|
||||
{{0x00d8, 0x00db, 0x00dc, 0x00dd, 0x00de}, 0x0018, 0x000d},
|
||||
{{0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad}, 0x0018, 0x0001},
|
||||
{{0x00e2, 0x00e4, 0x00e5, 0x00e6, 0x00e7}, 0x0000, 0x0023},
|
||||
{{0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2}, 0x0000, 0x0026},
|
||||
{{0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd}, 0x0000, 0x0026},
|
||||
{{0x00fe, 0x0101, 0x0102, 0x0103, 0x0104}, 0x0000, 0x0024},
|
||||
{{0x0118, 0x011a, 0x011b, 0x011c, 0x011d}, 0x0000, 0x001f},
|
||||
{{0x0111, 0x0114, 0x0115, 0x0116, 0x0117}, 0x0000, 0x001f},
|
||||
{{0x011f, 0x0120, 0x0121, 0x0122, 0x0123}, 0x0000, 0x0020},
|
||||
{{0x012e, 0x012f, 0x0130, 0x0131, 0x0132}, 0x0000, 0x0019},
|
||||
{{0x0125, 0x0127, 0x0128, 0x0129, 0x012a}, 0x0000, 0x0012},
|
||||
{{0x0133, 0x0134, 0x0135, 0x0136, 0x0137}, 0x0000, 0x001e},
|
||||
{{0x0139, 0x013a, 0x013b, 0x013c, 0x013d}, 0x0018, 0x000c},
|
||||
{{0x013e, 0x0148, 0x0149, 0x014a, 0x014b}, 0x0000, 0x0011},
|
||||
{{0x0153, 0x015a, 0x015b, 0x015c, 0x015d}, 0x0000, 0x0015},
|
||||
{{0x0178, 0x017b, 0x017c, 0x017d, 0x017e}, 0x0000, 0x002b},
|
||||
{{0x0171, 0x0172, 0x0173, 0x0174, 0x0175}, 0x0000, 0x0020},
|
||||
{{0x0166, 0x0168, 0x0169, 0x016a, 0x016b}, 0x0000, 0x0019},
|
||||
{{0x016c, 0x016d, 0x016e, 0x016f, 0x0170}, 0x0000, 0x0020},
|
||||
{{0x0182, 0x0184, 0x0185, 0x0186, 0x0187}, 0x0000, 0x002b},
|
||||
{{0x0161, 0x0162, 0x0163, 0x0164, 0x0165}, 0x0000, 0x0019},
|
||||
{{0x0179, 0x0334, 0x0335, 0x0336, 0x0337}, 0x0000, 0x0029},
|
||||
{{0x0188, 0x0189, 0x018a, 0x018b, 0x018c}, 0x0018, 0x0001},
|
||||
{{0x0196, 0x0199, 0x019a, 0x019b, 0x019c}, 0x0000, 0x0023},
|
||||
{{0x01a3, 0x01a5, 0x01a6, 0x01a7, 0x01a8}, 0x0000, 0x001c},
|
||||
{{0x01ab, 0x01ae, 0x01af, 0x01b0, 0x01b1}, 0x0000, 0x001e},
|
||||
{{0x01b2, 0x01b5, 0x01b6, 0x01b7, 0x01b8}, 0x0000, 0x001c},
|
||||
{{0x01c1, 0x01d1, 0x01d2, 0x01d3, 0x01d4}, 0x0000, 0x0027},
|
||||
{{0x01da, 0x01dd, 0x01de, 0x01df, 0x01e0}, 0x0018, 0x000d},
|
||||
{{0x01e1, 0x01e2, 0x01e7, 0x01e8, 0x01e9}, 0x0000, 0x0012},
|
||||
{{0x01ec, 0x01f1, 0x01f2, 0x01f3, 0x01f4}, 0x0000, 0x0028},
|
||||
{{0x02e4, 0x0330, 0x0331, 0x0332, 0x0333}, 0x0000, 0x0017},
|
||||
{{0x0200, 0x0203, 0x0204, 0x0205, 0x0206}, 0x0000, 0x0019},
|
||||
{{0x0221, 0x0224, 0x0225, 0x0226, 0x0227}, 0x0000, 0x0020},
|
||||
{{0x021a, 0x021d, 0x021e, 0x021f, 0x0220}, 0x0000, 0x0020},
|
||||
{{0x0009, 0x0348, 0x0349, 0x034a, 0x034b}, 0x0018, 0x0011},
|
||||
{{0x022f, 0x0232, 0x0233, 0x0234, 0x0235}, 0x0000, 0x0022},
|
||||
{{0x0228, 0x022b, 0x022c, 0x022d, 0x022e}, 0x0000, 0x0022},
|
||||
{{0x025c, 0x025f, 0x0260, 0x0261, 0x0262}, 0x0000, 0x0013},
|
||||
{{0x026d, 0x026e, 0x026f, 0x0270, 0x0271}, 0x0018, 0x000b},
|
||||
{{0x0273, 0x027c, 0x027d, 0x027e, 0x027f}, 0x0000, 0x001b},
|
||||
{{0x0001, 0x0344, 0x0345, 0x0346, 0x0347}, 0x0018, 0x000c},
|
||||
{{0x0282, 0x0283, 0x0284, 0x0285, 0x0286}, 0x0018, 0x003e},
|
||||
{{0x0291, 0x0292, 0x0293, 0x0294, 0x0294}, 0x0018, 0x002b},
|
||||
{{0x0109, 0x0302, 0x0303, 0x0304, 0x0305}, 0x0000, 0x0003},
|
||||
{{0x010a, 0x0306, 0x0307, 0x0308, 0x0309}, 0x0000, 0x000b},
|
||||
{{0x010b, 0x030a, 0x030b, 0x030c, 0x030d}, 0x0000, 0x0002},
|
||||
{{0x010c, 0x030e, 0x030f, 0x0310, 0x0311}, 0x0000, 0x000c},
|
||||
{{0x010d, 0x0312, 0x0313, 0x0314, 0x0315}, 0x0000, 0x0000},
|
||||
{{0x010e, 0x0316, 0x0317, 0x0318, 0x0319}, 0x0000, 0x0004},
|
||||
{{0x010f, 0x031a, 0x031b, 0x031c, 0x031d}, 0x0000, 0x0006},
|
||||
{{0x0110, 0x031e, 0x031f, 0x0320, 0x0321}, 0x0000, 0x0007},
|
||||
{{0x0105, 0x0105, 0x0105, 0x0105, 0x0105}, 0x0000, 0x0008},
|
||||
{{0x0106, 0x0106, 0x0106, 0x0106, 0x0106}, 0x0000, 0x0008},
|
||||
{{0x0107, 0x0107, 0x0107, 0x0107, 0x0107}, 0x0000, 0x0008},
|
||||
{{0x0108, 0x0108, 0x0108, 0x0108, 0x0108}, 0x0000, 0x0008},
|
||||
{{0x014f, 0x014f, 0x014f, 0x014f, 0x014f}, 0x0000, 0x0008},
|
||||
{{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21},
|
||||
{{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14},
|
||||
{{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a},
|
||||
{{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18},
|
||||
{{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18},
|
||||
{{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27},
|
||||
{{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24},
|
||||
{{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a},
|
||||
{{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a},
|
||||
{{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14},
|
||||
{{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13},
|
||||
{{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38},
|
||||
{{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24},
|
||||
{{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13},
|
||||
{{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d},
|
||||
{{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16},
|
||||
{{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e},
|
||||
{{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a},
|
||||
{{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26},
|
||||
{{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21},
|
||||
{{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d},
|
||||
{{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd},
|
||||
{{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1},
|
||||
{{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23},
|
||||
{{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26},
|
||||
{{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26},
|
||||
{{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24},
|
||||
{{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f},
|
||||
{{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f},
|
||||
{{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20},
|
||||
{{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19},
|
||||
{{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12},
|
||||
{{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e},
|
||||
{{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc},
|
||||
{{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11},
|
||||
{{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15},
|
||||
{{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b},
|
||||
{{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20},
|
||||
{{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19},
|
||||
{{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20},
|
||||
{{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b},
|
||||
{{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19},
|
||||
{{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29},
|
||||
{{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1},
|
||||
{{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23},
|
||||
{{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c},
|
||||
{{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e},
|
||||
{{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c},
|
||||
{{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27},
|
||||
{{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd},
|
||||
{{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12},
|
||||
{{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28},
|
||||
{{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17},
|
||||
{{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19},
|
||||
{{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20},
|
||||
{{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20},
|
||||
{{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11},
|
||||
{{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22},
|
||||
{{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22},
|
||||
{{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13},
|
||||
{{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb},
|
||||
{{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b},
|
||||
{{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc},
|
||||
{{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e},
|
||||
{{TRAINER_WALLY_3, 0x292, 0x293, 0x294, 0x294}, 0x18, 0x2b},
|
||||
{{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3},
|
||||
{{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb},
|
||||
{{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2},
|
||||
{{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc},
|
||||
{{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0},
|
||||
{{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4},
|
||||
{{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6},
|
||||
{{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7},
|
||||
{{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8},
|
||||
{{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8},
|
||||
{{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8},
|
||||
{{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8},
|
||||
{{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8},
|
||||
};
|
||||
|
||||
static const u16 sBadgeFlags[8] =
|
||||
@@ -945,13 +945,13 @@ static void CB2_EndFirstBattle(void)
|
||||
static void sub_80B1218(void)
|
||||
{
|
||||
if (GetGameStat(GAME_STAT_WILD_BATTLES) % 60 == 0)
|
||||
sub_81DA57C();
|
||||
UpdateGymLeaderRematch();
|
||||
}
|
||||
|
||||
static void sub_80B1234(void)
|
||||
{
|
||||
if (GetGameStat(GAME_STAT_TRAINER_BATTLES) % 20 == 0)
|
||||
sub_81DA57C();
|
||||
UpdateGymLeaderRematch();
|
||||
}
|
||||
|
||||
// why not just use the macros? maybe its because they didnt want to uncast const every time?
|
||||
|
||||
1576
src/battle_tv.c
Normal file
1576
src/battle_tv.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,6 @@
|
||||
#include "link.h"
|
||||
#include "berry.h"
|
||||
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
|
||||
extern u8 weather_get_current(void);
|
||||
|
||||
@@ -3255,8 +3254,8 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
|
||||
else
|
||||
targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
|
||||
break;
|
||||
case MOVE_TARGET_USER_OR_SELECTED:
|
||||
case MOVE_TARGET_USER:
|
||||
case MOVE_TARGET_x10:
|
||||
targetBank = gBattlerAttacker;
|
||||
break;
|
||||
}
|
||||
|
||||
209
src/blit.c
Normal file
209
src/blit.c
Normal file
@@ -0,0 +1,209 @@
|
||||
#include "global.h"
|
||||
#include "blit.h"
|
||||
|
||||
void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
|
||||
{
|
||||
BlitBitmapRect4Bit(src, dst, srcX, srcY, dstX, dstY, width, height, 0xFF);
|
||||
}
|
||||
|
||||
void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey)
|
||||
{
|
||||
s32 xEnd;
|
||||
s32 yEnd;
|
||||
s32 multiplierSrcY;
|
||||
s32 multiplierDstY;
|
||||
s32 loopSrcY, loopDstY;
|
||||
s32 loopSrcX, loopDstX;
|
||||
u8 *pixelsSrc;
|
||||
u8 *pixelsDst;
|
||||
s32 toOrr;
|
||||
s32 toAnd;
|
||||
s32 toShift;
|
||||
|
||||
if (dst->width - dstX < width)
|
||||
xEnd = (dst->width - dstX) + srcX;
|
||||
else
|
||||
xEnd = srcX + width;
|
||||
|
||||
if (dst->height - dstY < height)
|
||||
yEnd = (dst->height - dstY) + srcY;
|
||||
else
|
||||
yEnd = height + srcY;
|
||||
|
||||
multiplierSrcY = (src->width + (src->width & 7)) >> 3;
|
||||
multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
|
||||
|
||||
if (colorKey == 0xFF)
|
||||
{
|
||||
for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
|
||||
{
|
||||
for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
|
||||
{
|
||||
pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
|
||||
pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
|
||||
toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
|
||||
toShift = ((loopDstX & 1) << 2);
|
||||
toOrr <<= toShift;
|
||||
toAnd = 0xF0 >> (toShift);
|
||||
*pixelsDst = toOrr | (*pixelsDst & toAnd);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
|
||||
{
|
||||
for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
|
||||
{
|
||||
pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
|
||||
pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
|
||||
toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
|
||||
if (toOrr != colorKey)
|
||||
{
|
||||
toShift = ((loopDstX & 1) << 2);
|
||||
toOrr <<= toShift;
|
||||
toAnd = 0xF0 >> (toShift);
|
||||
*pixelsDst = toOrr | (*pixelsDst & toAnd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
|
||||
{
|
||||
s32 xEnd;
|
||||
s32 yEnd;
|
||||
s32 multiplierY;
|
||||
s32 loopX, loopY;
|
||||
s32 toOrr1, toOrr2;
|
||||
|
||||
xEnd = x + width;
|
||||
if (xEnd > surface->width)
|
||||
xEnd = surface->width;
|
||||
|
||||
yEnd = y + height;
|
||||
if (yEnd > surface->height)
|
||||
yEnd = surface->height;
|
||||
|
||||
multiplierY = (surface->width + (surface->width & 7)) >> 3;
|
||||
toOrr1 = (u32)(fillValue << 0x1C) >> 0x18;
|
||||
toOrr2 = (fillValue & 0xF);
|
||||
|
||||
for (loopY = y; loopY < yEnd; loopY++)
|
||||
{
|
||||
for (loopX = x; loopX < xEnd; loopX++)
|
||||
{
|
||||
u8 *pixels = surface->pixels + ((loopX >> 1) & 3) + ((loopX >> 3) << 5) + (((loopY >> 3) * multiplierY) << 5) + ((u32)(loopY << 0x1d) >> 0x1B);
|
||||
if ((loopX << 0x1F) != 0)
|
||||
*pixels = toOrr1 | (*pixels & 0xF);
|
||||
else
|
||||
*pixels = toOrr2 | (*pixels & 0xF0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
|
||||
{
|
||||
s32 palOffsetBits;
|
||||
s32 xEnd;
|
||||
s32 yEnd;
|
||||
s32 multiplierSrcY;
|
||||
s32 multiplierDstY;
|
||||
s32 loopSrcY, loopDstY;
|
||||
s32 loopSrcX, loopDstX;
|
||||
u8 *pixelsSrc;
|
||||
u8 *pixelsDst;
|
||||
s32 colorKeyBits;
|
||||
|
||||
palOffsetBits = (u32)(paletteOffset << 0x1C) >> 0x18;
|
||||
colorKeyBits = (u32)(colorKey << 0x1C) >> 0x18;
|
||||
|
||||
if (dst->width - dstX < width)
|
||||
xEnd = (dst->width - dstX) + srcX;
|
||||
else
|
||||
xEnd = width + srcX;
|
||||
|
||||
if (dst->height - dstY < height)
|
||||
yEnd = (srcY + dst->height) - dstY;
|
||||
else
|
||||
yEnd = srcY + height;
|
||||
|
||||
multiplierSrcY = (src->width + (src->width & 7)) >> 3;
|
||||
multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
|
||||
|
||||
if (colorKey == 0xFF)
|
||||
{
|
||||
for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
|
||||
{
|
||||
pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
|
||||
for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
|
||||
{
|
||||
pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
|
||||
if (loopSrcX & 1)
|
||||
{
|
||||
*pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
|
||||
*pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
|
||||
{
|
||||
pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
|
||||
for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
|
||||
{
|
||||
if (loopSrcX & 1)
|
||||
{
|
||||
if ((*pixelsSrc & 0xF0) != colorKeyBits)
|
||||
{
|
||||
pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
|
||||
*pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
|
||||
if ((*pixelsSrc & 0xF) != colorKey)
|
||||
{
|
||||
pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
|
||||
*pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
|
||||
{
|
||||
s32 xEnd;
|
||||
s32 yEnd;
|
||||
s32 multiplierY;
|
||||
s32 loopX, loopY;
|
||||
|
||||
xEnd = x + width;
|
||||
if (xEnd > surface->width)
|
||||
xEnd = surface->width;
|
||||
|
||||
yEnd = y + height;
|
||||
if (yEnd > surface->height)
|
||||
yEnd = surface->height;
|
||||
|
||||
multiplierY = (surface->width + (surface->width & 7)) >> 3;
|
||||
|
||||
for (loopY = y; loopY < yEnd; loopY++)
|
||||
{
|
||||
for (loopX = x; loopX < xEnd; loopX++)
|
||||
{
|
||||
u8 *pixels = surface->pixels + (loopX & 7) + ((loopX >> 3) << 6) + (((loopY >> 3) * multiplierY) << 6) + ((u32)(loopY << 0x1d) >> 0x1a);
|
||||
*pixels = fillValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
367
src/fldeff_flash.c
Normal file
367
src/fldeff_flash.c
Normal file
@@ -0,0 +1,367 @@
|
||||
#include "global.h"
|
||||
#include "constants/songs.h"
|
||||
#include "braille_puzzles.h"
|
||||
#include "event_data.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_effect.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "gba/io_reg.h"
|
||||
#include "main.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "overworld.h"
|
||||
#include "rom6.h"
|
||||
#include "script.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
|
||||
// structures
|
||||
struct FlashStruct
|
||||
{
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
bool8 unk2;
|
||||
bool8 unk3;
|
||||
void (*func)(void);
|
||||
};
|
||||
|
||||
// static functions
|
||||
static void hm2_flash(void);
|
||||
static void sub_81371B4(void);
|
||||
static bool8 sub_8137304(void);
|
||||
static void sub_81373F0(void);
|
||||
static void sub_8137404(u8 taskId);
|
||||
static void sub_8137420(u8 taskId);
|
||||
static void sub_81374C4(u8 taskId);
|
||||
static void sub_813750C(u8 taskId);
|
||||
static void sub_8137574(u8 taskId);
|
||||
static void sub_81375A8(void);
|
||||
static void sub_81375BC(u8 taskId);
|
||||
static void sub_81375D8(u8 taskId);
|
||||
static void sub_8137678(u8 taskId);
|
||||
static void sub_81376DC(u8 taskId);
|
||||
|
||||
// rodata
|
||||
static const struct FlashStruct gUnknown_085B27C8[] =
|
||||
{
|
||||
{1, 4, 1, 0, sub_81375A8},
|
||||
{2, 4, 1, 0, sub_81375A8},
|
||||
{3, 4, 1, 0, sub_81375A8},
|
||||
{5, 4, 1, 0, sub_81375A8},
|
||||
{6, 4, 1, 0, sub_81375A8},
|
||||
{7, 4, 1, 0, sub_81375A8},
|
||||
{8, 4, 1, 0, sub_81375A8},
|
||||
{9, 4, 1, 0, sub_81375A8},
|
||||
{4, 1, 0, 1, sub_81373F0},
|
||||
{4, 2, 0, 1, sub_81373F0},
|
||||
{4, 3, 0, 1, sub_81373F0},
|
||||
{4, 5, 0, 1, sub_81373F0},
|
||||
{4, 6, 0, 1, sub_81373F0},
|
||||
{4, 7, 0, 1, sub_81373F0},
|
||||
{4, 8, 0, 1, sub_81373F0},
|
||||
{4, 9, 0, 1, sub_81373F0},
|
||||
{0, 0, 0, 0, NULL},
|
||||
};
|
||||
|
||||
static const u16 gCaveTransitionPalette_White[] = INCBIN_U16("graphics/misc/cave_transition_white.gbapal");
|
||||
static const u16 gCaveTransitionPalette_Black[] = INCBIN_U16("graphics/misc/cave_transition_black.gbapal");
|
||||
|
||||
static const u16 gUnknown_085B2890[] = INCBIN_U16("graphics/misc/85B2890.gbapal");
|
||||
static const u16 gUnknown_085B28A0[] = INCBIN_U16("graphics/misc/85B28A0.gbapal");
|
||||
static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz");
|
||||
static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz");
|
||||
|
||||
// text
|
||||
bool8 SetUpFieldMove_Flash(void)
|
||||
{
|
||||
if (ShouldDoBrailleFlyEffect())
|
||||
{
|
||||
gSpecialVar_Result = GetCursorSelectionMonId();
|
||||
gUnknown_03005DB0 = FieldCallback_Teleport;
|
||||
gUnknown_0203CEEC = sub_8179918;
|
||||
return TRUE;
|
||||
}
|
||||
else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
|
||||
{
|
||||
gUnknown_03005DB0 = FieldCallback_Teleport;
|
||||
gUnknown_0203CEEC = hm2_flash;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void hm2_flash(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
gTasks[taskId].data[8] = (uintptr_t)sub_81371B4 >> 16;
|
||||
gTasks[taskId].data[9] = (uintptr_t)sub_81371B4;
|
||||
}
|
||||
|
||||
static void sub_81371B4(void)
|
||||
{
|
||||
PlaySE(SE_W115);
|
||||
FlagSet(FLAG_SYS_USE_FLASH);
|
||||
ScriptContext1_SetupScript(EventScript_2926F8);
|
||||
}
|
||||
|
||||
static void sub_81371D4(void)
|
||||
{
|
||||
RunTasks();
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
}
|
||||
|
||||
static void sub_81371EC(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void c2_change_map(void)
|
||||
{
|
||||
u16 ime;
|
||||
|
||||
SetVBlankCallback(NULL);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG1CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0CNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2HOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
|
||||
DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
|
||||
DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
|
||||
ResetPaletteFade();
|
||||
ResetTasks();
|
||||
ResetSpriteData();
|
||||
ime = REG_IME;
|
||||
REG_IME = 0;
|
||||
REG_IE |= INTR_FLAG_VBLANK;
|
||||
REG_IME = ime;
|
||||
SetVBlankCallback(sub_81371EC);
|
||||
SetMainCallback2(sub_81371D4);
|
||||
if (!sub_8137304())
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
}
|
||||
|
||||
static bool8 sub_8137304(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 v0 = get_map_light_from_warp0();
|
||||
u8 v1 = Overworld_GetMapTypeOfSaveblockLocation();
|
||||
|
||||
for (i = 0; gUnknown_085B27C8[i].unk0; i++)
|
||||
{
|
||||
if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
|
||||
{
|
||||
gUnknown_085B27C8[i].func();
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_8137360(u8 a1, u8 a2)
|
||||
{
|
||||
u8 i;
|
||||
u8 v0 = a1;
|
||||
u8 v1 = a2;
|
||||
|
||||
for (i = 0; gUnknown_085B27C8[i].unk0; i++)
|
||||
{
|
||||
if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
|
||||
{
|
||||
return gUnknown_085B27C8[i].unk2;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 fade_type_for_given_maplight_pair(u8 a1, u8 a2)
|
||||
{
|
||||
u8 i;
|
||||
u8 v0 = a1;
|
||||
u8 v1 = a2;
|
||||
|
||||
for (i = 0; gUnknown_085B27C8[i].unk0; i++)
|
||||
{
|
||||
if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
|
||||
{
|
||||
return gUnknown_085B27C8[i].unk3;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_81373F0(void)
|
||||
{
|
||||
CreateTask(sub_8137404, 0);
|
||||
}
|
||||
|
||||
static void sub_8137404(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = sub_8137420;
|
||||
}
|
||||
|
||||
static void sub_8137420(u8 taskId)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000);
|
||||
LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800);
|
||||
LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20);
|
||||
LoadPalette(gUnknown_085B28A0, 0xE0, 0x10);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
|
||||
| BLDCNT_EFFECT_BLEND
|
||||
| BLDCNT_TGT2_BG1
|
||||
| BLDCNT_TGT2_BG2
|
||||
| BLDCNT_TGT2_BG3
|
||||
| BLDCNT_TGT2_OBJ
|
||||
| BLDCNT_TGT2_BD);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
|
||||
| BGCNT_CHARBASE(3)
|
||||
| BGCNT_SCREENBASE(31)
|
||||
| BGCNT_16COLOR
|
||||
| BGCNT_TXT256x256);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
|
||||
| DISPCNT_OBJ_1D_MAP
|
||||
| DISPCNT_BG0_ON
|
||||
| DISPCNT_OBJ_ON);
|
||||
gTasks[taskId].func = sub_81374C4;
|
||||
gTasks[taskId].data[0] = 16;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
}
|
||||
|
||||
static void sub_81374C4(u8 taskId)
|
||||
{
|
||||
u16 count = gTasks[taskId].data[1];
|
||||
u16 blend = count + 0x1000;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, blend);
|
||||
if (count <= 0x10)
|
||||
{
|
||||
gTasks[taskId].data[1]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[2] = 0;
|
||||
gTasks[taskId].func = sub_813750C;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_813750C(u8 taskId)
|
||||
{
|
||||
u16 count;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16));
|
||||
count = gTasks[taskId].data[2];
|
||||
|
||||
if (count < 8)
|
||||
{
|
||||
gTasks[taskId].data[2]++;
|
||||
LoadPalette(&gUnknown_085B28A0[count], 0xE0, 16 - 2 * count);
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadPalette(gCaveTransitionPalette_White, 0, 0x20);
|
||||
gTasks[taskId].func = sub_8137574;
|
||||
gTasks[taskId].data[2] = 8;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8137574(u8 taskId)
|
||||
{
|
||||
if (gTasks[taskId].data[2])
|
||||
gTasks[taskId].data[2]--;
|
||||
else
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
}
|
||||
|
||||
static void sub_81375A8(void)
|
||||
{
|
||||
CreateTask(sub_81375BC, 0);
|
||||
}
|
||||
|
||||
static void sub_81375BC(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = sub_81375D8;
|
||||
}
|
||||
|
||||
static void sub_81375D8(u8 taskId)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||
LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000);
|
||||
LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800);
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
|
||||
| BGCNT_CHARBASE(3)
|
||||
| BGCNT_SCREENBASE(31)
|
||||
| BGCNT_16COLOR
|
||||
| BGCNT_TXT256x256);
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
|
||||
| DISPCNT_OBJ_1D_MAP
|
||||
| DISPCNT_BG0_ON
|
||||
| DISPCNT_OBJ_ON);
|
||||
LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20);
|
||||
LoadPalette(gCaveTransitionPalette_Black, 0, 0x20);
|
||||
gTasks[taskId].func = sub_8137678;
|
||||
gTasks[taskId].data[0] = 16;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = 0;
|
||||
}
|
||||
|
||||
static void sub_8137678(u8 taskId)
|
||||
{
|
||||
u16 count = gTasks[taskId].data[2];
|
||||
|
||||
if (count < 16)
|
||||
{
|
||||
gTasks[taskId].data[2]++;
|
||||
gTasks[taskId].data[2]++;
|
||||
LoadPalette(&gUnknown_085B2890[15 - count], 0xE0, 2 * (count + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16));
|
||||
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
|
||||
| BLDCNT_EFFECT_BLEND
|
||||
| BLDCNT_TGT2_BG1
|
||||
| BLDCNT_TGT2_BG2
|
||||
| BLDCNT_TGT2_BG3
|
||||
| BLDCNT_TGT2_OBJ
|
||||
| BLDCNT_TGT2_BD);
|
||||
gTasks[taskId].func = sub_81376DC;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81376DC(u8 taskId)
|
||||
{
|
||||
u16 count = 16 - gTasks[taskId].data[1];
|
||||
u16 blend = count + 0x1000;
|
||||
|
||||
SetGpuReg(REG_OFFSET_BLDALPHA, blend);
|
||||
if (count)
|
||||
{
|
||||
gTasks[taskId].data[1]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadPalette(gCaveTransitionPalette_Black, 0, 0x20);
|
||||
SetMainCallback2(gMain.savedCallback);
|
||||
}
|
||||
}
|
||||
299
src/fldeff_groundshake.c
Normal file
299
src/fldeff_groundshake.c
Normal file
@@ -0,0 +1,299 @@
|
||||
#include "global.h"
|
||||
#include "global.fieldmap.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/songs.h"
|
||||
#include "event_data.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_map_obj.h"
|
||||
#include "malloc.h"
|
||||
#include "random.h"
|
||||
#include "roulette_util.h"
|
||||
#include "script.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
|
||||
// structures
|
||||
struct Struct203CF18 {
|
||||
u8 taskId;
|
||||
struct InnerStruct203CF18 unk4;
|
||||
}; //size = 0xC8
|
||||
|
||||
// extern data
|
||||
extern const struct SpriteSheet gUnknown_08617D94[];
|
||||
extern const s16 gUnknown_08617D64[][3];
|
||||
|
||||
// static functions
|
||||
static void sub_81BE808(u8 taskId);
|
||||
static void sub_81BE900(u8 taskId);
|
||||
static void sub_81BE968(void);
|
||||
static void sub_81BE9C0(u8 taskId);
|
||||
static void sub_81BEA00(u8 taskId);
|
||||
static void sub_81BEA20(void);
|
||||
static void sub_81BEAD8(struct Sprite* sprite);
|
||||
|
||||
// rodata
|
||||
static const u8 gUnknown_08617E18[] = {0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b};
|
||||
|
||||
static const union AnimCmd gSpriteAnim_8617E20[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 12),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gSpriteAnimTable_8617E28[] =
|
||||
{
|
||||
gSpriteAnim_8617E20,
|
||||
};
|
||||
|
||||
static const struct OamData gUnknown_08617E2C =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 0,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_08617E34 = {
|
||||
0x0FA0, 0xFFFF, &gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
|
||||
};
|
||||
|
||||
static const union AnimCmd gSpriteAnim_8617E4C[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 12),
|
||||
ANIMCMD_JUMP(0),
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gSpriteAnim_8617E54[] =
|
||||
{
|
||||
gSpriteAnim_8617E4C,
|
||||
};
|
||||
|
||||
static const struct OamData gSpriteAnim_8617E58 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 1,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 0,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_08617E60 = {
|
||||
0x0FA0, 0xFFFF, &gSpriteAnim_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
|
||||
};
|
||||
|
||||
// ewram
|
||||
EWRAM_DATA struct Struct203CF18 *gUnknown_0203CF18 = NULL;
|
||||
|
||||
// text
|
||||
bool8 sub_81BE66C(void)
|
||||
{
|
||||
if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A))
|
||||
return 0;
|
||||
return FlagGet(FLAG_0x14E);
|
||||
}
|
||||
|
||||
void sub_81BE698(u8 taskId)
|
||||
{
|
||||
sub_8151E50(&(gUnknown_0203CF18->unk4));
|
||||
}
|
||||
|
||||
void sub_81BE6AC(void)
|
||||
{
|
||||
gUnknown_0203CF18 = NULL;
|
||||
}
|
||||
|
||||
void sub_81BE6B8(void)
|
||||
{
|
||||
if(gUnknown_0203CF18 != NULL)
|
||||
{
|
||||
gUnknown_0203CF18 = NULL;
|
||||
return;
|
||||
}
|
||||
if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E))
|
||||
return;
|
||||
|
||||
gUnknown_0203CF18 = (struct Struct203CF18 *)AllocZeroed(sizeof(struct Struct203CF18));
|
||||
sub_8151B3C(&(gUnknown_0203CF18->unk4));
|
||||
sub_8151B68(&(gUnknown_0203CF18->unk4), gUnknown_08617E18);
|
||||
sub_8151CA8(&(gUnknown_0203CF18->unk4), 1, 1);
|
||||
gUnknown_0203CF18->taskId = CreateTask(sub_81BE698, 0xFF);
|
||||
}
|
||||
|
||||
void sub_81BE72C(void)
|
||||
{
|
||||
if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E) || gUnknown_0203CF18 == NULL)
|
||||
return;
|
||||
if(FuncIsActiveTask(sub_81BE698))
|
||||
DestroyTask(gUnknown_0203CF18->taskId);
|
||||
sub_8151D28(&(gUnknown_0203CF18->unk4), 1, 1);
|
||||
sub_8151C50(&(gUnknown_0203CF18->unk4), 1, 1);
|
||||
Free(gUnknown_0203CF18);
|
||||
gUnknown_0203CF18 = NULL;
|
||||
}
|
||||
|
||||
void sub_81BE79C(void)
|
||||
{
|
||||
u16 rand;
|
||||
bool8 chance;
|
||||
|
||||
if(VarGet(VAR_0x40CB) != 0)
|
||||
{
|
||||
FlagClear(FLAG_0x14E);
|
||||
return;
|
||||
}
|
||||
rand = Random();
|
||||
chance = rand & 1;
|
||||
if(FlagGet(FLAG_0x09D) == TRUE)
|
||||
chance = TRUE;
|
||||
if(chance)
|
||||
{
|
||||
FlagSet(FLAG_0x14E);
|
||||
sub_81BE6B8();
|
||||
return;
|
||||
}
|
||||
FlagClear(FLAG_0x14E);
|
||||
}
|
||||
|
||||
void sub_81BE7F4(void)
|
||||
{
|
||||
CreateTask(sub_81BE808, 0x8);
|
||||
}
|
||||
|
||||
static void sub_81BE808(u8 taskId)
|
||||
{
|
||||
u8 mapObjectIdBuffer;
|
||||
struct MapObject *fieldMapObject;
|
||||
struct MapObject *playerAvatarMapObject;
|
||||
|
||||
TryGetFieldObjectIdByLocalIdAndMap(0x2D, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectIdBuffer);
|
||||
fieldMapObject = &(gMapObjects[mapObjectIdBuffer]);
|
||||
gSprites[fieldMapObject->spriteId].pos2.y += 4;
|
||||
playerAvatarMapObject = &(gMapObjects[gPlayerAvatar.mapObjectId]);
|
||||
|
||||
if((gSprites[fieldMapObject->spriteId].pos1.y + gSprites[fieldMapObject->spriteId].pos2.y) >=
|
||||
(gSprites[playerAvatarMapObject->spriteId].pos1.y + gSprites[playerAvatarMapObject->spriteId].pos2.y))
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
}
|
||||
|
||||
static void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
taskId = CreateTask(sub_81BE900, 0x9);
|
||||
gTasks[taskId].data[0] = b;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[2] = c;
|
||||
gTasks[taskId].data[3] = d;
|
||||
gTasks[taskId].data[4] = a;
|
||||
SetCameraPanningCallback(NULL);
|
||||
PlaySE(SE_W070);
|
||||
}
|
||||
|
||||
static void sub_81BE900(u8 taskId)
|
||||
{
|
||||
s16 *data;
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
data[1]++;
|
||||
if((data[1] % data[3]) == 0)
|
||||
{
|
||||
data[1] = 0;
|
||||
data[2]--;
|
||||
data[0] = -data[0];
|
||||
data[4] = -data[4];
|
||||
SetCameraPanning(data[0], data[4]);
|
||||
if(!data[2])
|
||||
{
|
||||
sub_81BE968();
|
||||
DestroyTask(taskId);
|
||||
InstallCameraPanAheadCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81BE968(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
taskId = FindTaskIdByFunc(sub_81BE9C0);
|
||||
if(taskId != 0xFF)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
|
||||
void sub_81BE994(void)
|
||||
{
|
||||
LoadSpriteSheets(gUnknown_08617D94);
|
||||
sub_81BEA20();
|
||||
CreateTask(sub_81BE9C0, 0x8);
|
||||
sp136_strengh_sound(2, 1, 16, 3);
|
||||
}
|
||||
|
||||
static void sub_81BE9C0(u8 taskId)
|
||||
{
|
||||
u16 *data;
|
||||
|
||||
data = gTasks[taskId].data;
|
||||
data[1]++;
|
||||
if(data[1] == 1000 || data[0] == 17)
|
||||
gTasks[taskId].func = sub_81BEA00;
|
||||
}
|
||||
|
||||
static void sub_81BEA00(u8 taskId)
|
||||
{
|
||||
FreeSpriteTilesByTag(4000);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
|
||||
static void sub_81BEA20(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 spriteId;
|
||||
|
||||
for(i = 0; i < 8; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[i][0] + 120, gUnknown_08617D64[i][1], 8);
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
gSprites[spriteId].oam.paletteNum = 0;
|
||||
gSprites[spriteId].data[0] = i;
|
||||
}
|
||||
for(i = 0; i < 8; i++)
|
||||
{
|
||||
spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[i][0] + 115, gUnknown_08617D64[i][1] - 3, 8);
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
gSprites[spriteId].oam.paletteNum = 0;
|
||||
gSprites[spriteId].data[0] = i;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81BEAD8(struct Sprite* sprite)
|
||||
{
|
||||
sprite->data[1] += 2;
|
||||
sprite->pos2.y = (sprite->data[1] / 2);
|
||||
if(((sprite->pos1.y) + (sprite->pos2.y)) > gUnknown_08617D64[sprite->data[0]][2])
|
||||
{
|
||||
DestroySprite(sprite);
|
||||
sub_81BE968();
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,10 @@
|
||||
#include "strings.h"
|
||||
#include "task.h"
|
||||
|
||||
void sub_816166C(u8 taskId);
|
||||
void sub_81617B8(u8 taskId);
|
||||
void sub_81616C0(u8 taskId);
|
||||
void sub_8161724(u8 taskId);
|
||||
static void sub_816166C(u8 taskId);
|
||||
static void sub_81616C0(u8 taskId);
|
||||
static void sub_8161724(u8 taskId);
|
||||
static void sub_81617B8(u8 taskId);
|
||||
|
||||
bool8 SetUpFieldMove_SoftBoiled(void)
|
||||
{
|
||||
@@ -63,13 +63,13 @@ void sub_81615A8(u8 taskId)
|
||||
sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C);
|
||||
}
|
||||
|
||||
void sub_816166C(u8 taskId)
|
||||
static void sub_816166C(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_KAIFUKU);
|
||||
sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0);
|
||||
}
|
||||
|
||||
void sub_81616C0(u8 taskId)
|
||||
static void sub_81616C0(u8 taskId)
|
||||
{
|
||||
GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1);
|
||||
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
|
||||
@@ -78,7 +78,7 @@ void sub_81616C0(u8 taskId)
|
||||
gTasks[taskId].func = sub_8161724;
|
||||
}
|
||||
|
||||
void sub_8161724(u8 taskId)
|
||||
static void sub_8161724(u8 taskId)
|
||||
{
|
||||
if(sub_81B1BD4() == 1)
|
||||
return;
|
||||
@@ -92,7 +92,7 @@ void sub_8161724(u8 taskId)
|
||||
gTasks[taskId].func = sub_81B1370;
|
||||
}
|
||||
|
||||
void sub_8161784(u8 taskId)
|
||||
static void sub_8161784(u8 taskId)
|
||||
{
|
||||
if(sub_81B1BD4() == 1)
|
||||
return;
|
||||
@@ -100,7 +100,7 @@ void sub_8161784(u8 taskId)
|
||||
gTasks[taskId].func = sub_81B1370;
|
||||
}
|
||||
|
||||
void sub_81617B8(u8 taskId)
|
||||
static void sub_81617B8(u8 taskId)
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0);
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
#include "script.h"
|
||||
#include "task.h"
|
||||
|
||||
void FldEff_UseStrength(void);
|
||||
void sub_8145E74(void);
|
||||
// static functions
|
||||
static void FldEff_UseStrength(void);
|
||||
static void sub_8145E74(void);
|
||||
|
||||
// text
|
||||
bool8 SetUpFieldMove_Strength(void)
|
||||
{
|
||||
if (npc_before_player_of_type(87) == TRUE)
|
||||
@@ -22,7 +24,7 @@ bool8 SetUpFieldMove_Strength(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void FldEff_UseStrength(void)
|
||||
static void FldEff_UseStrength(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(FieryPath_EventScript_2908FD);
|
||||
@@ -37,7 +39,7 @@ bool8 sub_8145E2C(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8145E74(void)
|
||||
static void sub_8145E74(void)
|
||||
{
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
|
||||
EnableBothScriptContexts();
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "field_effect.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "field_screen.h"
|
||||
#include "fldeff_groundshake.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "rom6.h"
|
||||
@@ -20,6 +19,8 @@ void hm2_sweet_scent(void);
|
||||
void sub_8159F5C(void);
|
||||
void sub_8159FEC(u8 taskId);
|
||||
void sub_815A090(u8 taskId);
|
||||
void sub_81BE6B8(void);
|
||||
void sub_81BE72C(void);
|
||||
|
||||
bool8 SetUpFieldMove_SweetScent(void)
|
||||
{
|
||||
|
||||
770
src/fossil_specials.c
Normal file
770
src/fossil_specials.c
Normal file
@@ -0,0 +1,770 @@
|
||||
#include "global.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/songs.h"
|
||||
#include "bg.h"
|
||||
#include "event_data.h"
|
||||
#include "field_camera.h"
|
||||
#include "field_map_obj.h"
|
||||
#include "fieldmap.h"
|
||||
#include "global.fieldmap.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "malloc.h"
|
||||
#include "menu.h"
|
||||
#include "random.h"
|
||||
#include "script.h"
|
||||
#include "sound.h"
|
||||
#include "sprite.h"
|
||||
#include "task.h"
|
||||
#include "window.h"
|
||||
|
||||
#define MIRAGE_TOWER_GFX_LENGTH (sizeof(gUnknown_08617274) + sizeof(gMirageTower_Gfx))
|
||||
#define MIRAGE_TOWER_PALETTE_LENGTH 0x800
|
||||
#define ROOT_FOSSIL_GFX_LENGTH sizeof(gRootFossil_Gfx)
|
||||
#define ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH 0x100
|
||||
|
||||
//struct
|
||||
struct Struct8617DA4 {
|
||||
u8 x;
|
||||
u8 y;
|
||||
u16 tileId;
|
||||
};
|
||||
|
||||
struct Struct203CF10 {
|
||||
u8 *buffer;
|
||||
u8 curr_buffer_index;
|
||||
};
|
||||
|
||||
struct DynamicSpriteFrameImage{
|
||||
u8 *data;
|
||||
u16 size;
|
||||
};
|
||||
|
||||
struct Struct203CF0C {
|
||||
u8 *frameImageTiles;
|
||||
struct DynamicSpriteFrameImage *frameImage;
|
||||
u8 spriteId;
|
||||
u16 *unkC;
|
||||
u16 unk10;
|
||||
};
|
||||
|
||||
// static functions
|
||||
static void sub_81BED50(u8 taskId);
|
||||
static void sub_81BEBF4(u8 taskId);
|
||||
static void sub_81BF028(u8 taskId);
|
||||
static void sub_81BF248(struct Sprite *);
|
||||
/*static*/ void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e);
|
||||
|
||||
// .rodata
|
||||
static const u8 gUnknown_08617274[] = {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00};
|
||||
static const u8 gMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp");
|
||||
static const u16 gUnknown_08617B94[] = INCBIN_U16("graphics/misc/mirage_tower.bin");
|
||||
static const u16 gRootFossil_Pal[] = INCBIN_U16("graphics/misc/fossil.gbapal");
|
||||
static const u8 gRootFossil_Gfx[] = INCBIN_U8("graphics/misc/fossil.4bpp");
|
||||
static const u8 gMirageTowerCrumbles_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower_crumbles.4bpp");
|
||||
static const u16 gMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal");
|
||||
|
||||
const s16 gUnknown_08617D64[][3] =
|
||||
{
|
||||
{ 0, 10, 65},
|
||||
{ 17, 3, 50},
|
||||
{-12, 0, 75},
|
||||
{ 10, 15, 90},
|
||||
{ 7, 8, 65},
|
||||
{-18, 5, 75},
|
||||
{ 22, -10, 55},
|
||||
{-24, -4, 65},
|
||||
};
|
||||
|
||||
const struct SpriteSheet gUnknown_08617D94[] =
|
||||
{
|
||||
{gMirageTowerCrumbles_Gfx, 0x0080, 0x0fa0},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
static const struct Struct8617DA4 gUnknown_08617DA4[] =
|
||||
{
|
||||
{0x12, 0x35, 0x251},
|
||||
{0x13, 0x35, 0x251},
|
||||
{0x14, 0x35, 0x251},
|
||||
{0x12, 0x36, 0x251},
|
||||
{0x13, 0x36, 0x251},
|
||||
{0x14, 0x36, 0x251},
|
||||
{0x12, 0x37, 0x251},
|
||||
{0x13, 0x37, 0x251},
|
||||
{0x14, 0x37, 0x251},
|
||||
{0x12, 0x38, 0x251},
|
||||
{0x13, 0x38, 0x251},
|
||||
{0x14, 0x38, 0x251},
|
||||
{0x12, 0x39, 0x259},
|
||||
{0x13, 0x39, 0x259},
|
||||
{0x14, 0x39, 0x259},
|
||||
{0x12, 0x3A, 0x121},
|
||||
{0x13, 0x3A, 0x121},
|
||||
{0x14, 0x3A, 0x121},
|
||||
};
|
||||
|
||||
static const union AnimCmd gSpriteAnim_8617DEC[] =
|
||||
{
|
||||
ANIMCMD_FRAME(0, 1),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
static const struct OamData gOamData_8617DF4 =
|
||||
{
|
||||
.y = 0,
|
||||
.affineMode = 0,
|
||||
.objMode = 0,
|
||||
.mosaic = 0,
|
||||
.bpp = 0,
|
||||
.shape = 0,
|
||||
.x = 0,
|
||||
.matrixNum = 0,
|
||||
.size = 1,
|
||||
.tileNum = 0,
|
||||
.priority = 0,
|
||||
.paletteNum = 3,
|
||||
.affineParam = 0,
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gSpriteAnimTable_8617DFC[] =
|
||||
{
|
||||
gSpriteAnim_8617DEC,
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_08617E00 = {
|
||||
0xFFFF, 0xFFFF, &gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
};
|
||||
|
||||
// ewram
|
||||
EWRAM_DATA u8* gUnknown_0203CF04 = NULL;
|
||||
EWRAM_DATA u8* gUnknown_0203CF08 = NULL;
|
||||
EWRAM_DATA struct Struct203CF0C *gUnknown_0203CF0C = NULL;
|
||||
EWRAM_DATA struct Struct203CF10 *gUnknown_0203CF10 = NULL;
|
||||
EWRAM_DATA u16 *gUnknown_0203CF14 = NULL;
|
||||
|
||||
// iwram
|
||||
IWRAM_DATA u16 gUnknown_030012A8[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
// text
|
||||
void sub_81BEB24(void)
|
||||
{
|
||||
u8 i;
|
||||
for(i = 0; i < (sizeof(gUnknown_08617DA4)/sizeof(gUnknown_08617DA4[0])); i++)
|
||||
MapGridSetMetatileIdAt(gUnknown_08617DA4[i].x + 7, gUnknown_08617DA4[i].y + 7, gUnknown_08617DA4[i].tileId);
|
||||
DrawWholeMapView();
|
||||
}
|
||||
|
||||
void sub_81BEB54(void)
|
||||
{
|
||||
CreateTask(sub_81BED50, 0x9);
|
||||
}
|
||||
|
||||
void sub_81BEB68(void)
|
||||
{
|
||||
CreateTask(sub_81BEBF4, 0x9);
|
||||
}
|
||||
|
||||
void sub_81BEB7C(void)
|
||||
{
|
||||
CreateTask(sub_81BF028, 0x9);
|
||||
}
|
||||
|
||||
void sub_81BEB90(void)
|
||||
{
|
||||
SetGpuReg(REG_OFFSET_BG0HOFS, gUnknown_0203CF14[0]);
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, gUnknown_0203CF14[1]);
|
||||
}
|
||||
|
||||
void sub_81BEBB4(u8 taskId)
|
||||
{
|
||||
if(!(gTasks[taskId].data[0]))
|
||||
{
|
||||
gUnknown_0203CF14[0] = -gUnknown_0203CF14[0];
|
||||
gTasks[taskId].data[0] = 2;
|
||||
sub_81BEB90();
|
||||
}
|
||||
else
|
||||
gTasks[taskId].data[0]--;
|
||||
}
|
||||
|
||||
static void sub_81BEBF4(u8 taskId)
|
||||
{
|
||||
u8 zero;
|
||||
|
||||
switch(gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
FreeAllWindowBuffers();
|
||||
SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 2);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
gUnknown_0203CF04 = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH);
|
||||
gUnknown_0203CF08 = (u8 *)AllocZeroed(MIRAGE_TOWER_PALETTE_LENGTH);
|
||||
ChangeBgX(0, 0, 0);
|
||||
ChangeBgY(0, 0, 0);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
CpuSet(gUnknown_08617274, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH / 2);
|
||||
LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 3:
|
||||
SetBgTilemapBuffer(0, gUnknown_0203CF08);
|
||||
CopyToBgTilemapBufferRect_ChangePalette(0, &gUnknown_08617B94, 12, 29, 6, 12, 17);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 4:
|
||||
ShowBg(0);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 5:
|
||||
sub_81BEB24();
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 6:
|
||||
gUnknown_0203CF14 = (u16 *)Alloc(4);
|
||||
zero = 0;
|
||||
gUnknown_0203CF14[0] = 2;
|
||||
gUnknown_0203CF14[1] = zero;
|
||||
CreateTask(sub_81BEBB4, 0xA);
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
#define OUTER_BUFFER_LENGTH 0x60
|
||||
#define INNER_BUFFER_LENGTH 0x30
|
||||
static void sub_81BED50(u8 taskId)
|
||||
{
|
||||
u8 anotherTaskId, j;
|
||||
|
||||
|
||||
switch(gTasks[taskId].data[0])
|
||||
{
|
||||
case 1:
|
||||
gUnknown_0203CF10 = (struct Struct203CF10 *)AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct Struct203CF10));
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
u16 i;
|
||||
u16 left;
|
||||
u32 index, next;
|
||||
|
||||
index = (u16)gTasks[taskId].data[3];
|
||||
if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
|
||||
{
|
||||
if(gTasks[taskId].data[1] > 1)
|
||||
{
|
||||
index = (u8)index;
|
||||
gUnknown_0203CF10[index].buffer = (u8 *)Alloc(INNER_BUFFER_LENGTH);
|
||||
for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
|
||||
gUnknown_0203CF10[index].buffer[i] = i;
|
||||
for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
|
||||
{
|
||||
u16 rand1, rand2, temp;
|
||||
|
||||
rand1 = Random() % 0x30;
|
||||
rand2 = Random() % 0x30;
|
||||
temp = gUnknown_0203CF10[index].buffer[rand2];
|
||||
gUnknown_0203CF10[index].buffer[rand2] = gUnknown_0203CF10[index].buffer[rand1];
|
||||
gUnknown_0203CF10[index].buffer[rand1] = temp;
|
||||
}
|
||||
if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
|
||||
gTasks[taskId].data[3]++;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
}
|
||||
gTasks[taskId].data[1]++;
|
||||
}
|
||||
index = (u8)gTasks[taskId].data[3];
|
||||
for(left = (u8)gTasks[taskId].data[2]; left < (u16)index; left = next)
|
||||
{
|
||||
j = 0;
|
||||
next = left + 1;
|
||||
while(!j)
|
||||
{
|
||||
sub_81BF2B8(gUnknown_0203CF04, ((((OUTER_BUFFER_LENGTH - 1) - left) * INNER_BUFFER_LENGTH) + gUnknown_0203CF10[left].buffer[(gUnknown_0203CF10[left].curr_buffer_index)++]), 0, INNER_BUFFER_LENGTH, 1);
|
||||
j++;
|
||||
}
|
||||
if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1))
|
||||
{
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF10[left].buffer);
|
||||
gTasks[taskId].data[2]++;
|
||||
if((left % 2) == 1)
|
||||
gUnknown_0203CF14[1]--;
|
||||
}
|
||||
}
|
||||
LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0);
|
||||
if(gUnknown_0203CF10[OUTER_BUFFER_LENGTH - 1].curr_buffer_index > (INNER_BUFFER_LENGTH - 1))
|
||||
break;
|
||||
return;
|
||||
}
|
||||
case 4:
|
||||
UnsetBgTilemapBuffer(0);
|
||||
anotherTaskId = FindTaskIdByFunc(sub_81BEBB4);
|
||||
if(anotherTaskId != 0xFF)
|
||||
DestroyTask(anotherTaskId);
|
||||
gUnknown_0203CF14[1] = gUnknown_0203CF14[0] = 0;
|
||||
sub_81BEB90();
|
||||
break;
|
||||
case 5:
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF14);
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF10);
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF04);
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF08);
|
||||
break;
|
||||
case 6:
|
||||
SetGpuRegBits(REG_OFFSET_BG2CNT, 0x2);
|
||||
SetGpuRegBits(REG_OFFSET_BG0CNT, 0x0);
|
||||
SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0);
|
||||
sub_81971D0();
|
||||
break;
|
||||
case 7:
|
||||
ShowBg(0);
|
||||
break;
|
||||
case 8:
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
break;
|
||||
}
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
|
||||
#else
|
||||
ASM_DIRECT
|
||||
static void sub_81BED50(u8 taskId)
|
||||
{
|
||||
asm("\n\
|
||||
.syntax unified\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r10\n\
|
||||
mov r6, r9\n\
|
||||
mov r5, r8\n\
|
||||
push {r5-r7}\n\
|
||||
sub sp, 0x10\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r10, r0\n\
|
||||
ldr r1, =gTasks\n\
|
||||
lsls r0, 2\n\
|
||||
add r0, r10\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r1\n\
|
||||
ldrh r0, [r0, 0x8]\n\
|
||||
subs r0, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
asrs r0, 16\n\
|
||||
adds r6, r1, 0\n\
|
||||
cmp r0, 0x7\n\
|
||||
bls _081BED7C\n\
|
||||
b _081BF002\n\
|
||||
_081BED7C:\n\
|
||||
lsls r0, 2\n\
|
||||
ldr r1, =_081BED90\n\
|
||||
adds r0, r1\n\
|
||||
ldr r0, [r0]\n\
|
||||
mov pc, r0\n\
|
||||
.pool\n\
|
||||
.align 2, 0\n\
|
||||
_081BED90:\n\
|
||||
.4byte _081BEDB0\n\
|
||||
.4byte _081BF002\n\
|
||||
.4byte _081BEDC4\n\
|
||||
.4byte _081BEF64\n\
|
||||
.4byte _081BEF94\n\
|
||||
.4byte _081BEFD0\n\
|
||||
.4byte _081BEFF0\n\
|
||||
.4byte _081BEFF8\n\
|
||||
_081BEDB0:\n\
|
||||
ldr r4, =gUnknown_0203CF10\n\
|
||||
movs r0, 0xC0\n\
|
||||
lsls r0, 2\n\
|
||||
bl AllocZeroed\n\
|
||||
str r0, [r4]\n\
|
||||
b _081BF002\n\
|
||||
.pool\n\
|
||||
_081BEDC4:\n\
|
||||
mov r1, r10\n\
|
||||
lsls r0, r1, 2\n\
|
||||
adds r1, r0, r1\n\
|
||||
lsls r1, 3\n\
|
||||
adds r2, r1, r6\n\
|
||||
ldrh r3, [r2, 0xE]\n\
|
||||
movs r4, 0xE\n\
|
||||
ldrsh r1, [r2, r4]\n\
|
||||
str r0, [sp, 0x8]\n\
|
||||
cmp r1, 0x5F\n\
|
||||
bgt _081BEE8A\n\
|
||||
movs r1, 0xA\n\
|
||||
ldrsh r0, [r2, r1]\n\
|
||||
cmp r0, 0x1\n\
|
||||
ble _081BEE7C\n\
|
||||
lsls r0, r3, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
movs r0, 0x30\n\
|
||||
bl Alloc\n\
|
||||
ldr r3, =gUnknown_0203CF10\n\
|
||||
ldr r1, [r3]\n\
|
||||
lsls r2, r4, 3\n\
|
||||
adds r1, r2, r1\n\
|
||||
str r0, [r1]\n\
|
||||
movs r5, 0\n\
|
||||
adds r4, r2, 0\n\
|
||||
_081BEDFA:\n\
|
||||
ldr r0, [r3]\n\
|
||||
adds r0, r4, r0\n\
|
||||
ldr r0, [r0]\n\
|
||||
adds r0, r5\n\
|
||||
strb r5, [r0]\n\
|
||||
adds r0, r5, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
cmp r5, 0x2F\n\
|
||||
bls _081BEDFA\n\
|
||||
movs r5, 0\n\
|
||||
ldr r7, =gUnknown_0203CF10\n\
|
||||
adds r6, r2, 0\n\
|
||||
_081BEE14:\n\
|
||||
bl Random\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0x30\n\
|
||||
bl __umodsi3\n\
|
||||
adds r4, r0, 0\n\
|
||||
lsls r4, 16\n\
|
||||
lsrs r4, 16\n\
|
||||
bl Random\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
movs r1, 0x30\n\
|
||||
bl __umodsi3\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r0, 16\n\
|
||||
ldr r1, [r7]\n\
|
||||
adds r1, r6, r1\n\
|
||||
ldr r1, [r1]\n\
|
||||
adds r0, r1, r0\n\
|
||||
ldrb r2, [r0]\n\
|
||||
adds r1, r4 \n\
|
||||
ldrb r1, [r1]\n\
|
||||
strb r1, [r0]\n\
|
||||
ldr r0, [r7]\n\
|
||||
adds r0, r6, r0\n\
|
||||
ldr r0, [r0]\n\
|
||||
adds r0, r4\n\
|
||||
strb r2, [r0]\n\
|
||||
adds r0, r5, 0x1\n\
|
||||
lsls r0, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
cmp r5, 0x2F\n\
|
||||
bls _081BEE14\n\
|
||||
ldr r0, =gTasks\n\
|
||||
ldr r1, [sp, 0x8]\n\
|
||||
add r1, r10\n\
|
||||
lsls r1, 3\n\
|
||||
adds r2, r1, r0\n\
|
||||
ldrh r3, [r2, 0xE]\n\
|
||||
movs r4, 0xE\n\
|
||||
ldrsh r1, [r2, r4]\n\
|
||||
adds r6, r0, 0\n\
|
||||
cmp r1, 0x5F\n\
|
||||
bgt _081BEE78\n\
|
||||
adds r0, r3, 0x1\n\
|
||||
strh r0, [r2, 0xE]\n\
|
||||
_081BEE78:\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r2, 0xA]\n\
|
||||
_081BEE7C:\n\
|
||||
ldr r1, [sp, 0x8]\n\
|
||||
add r1, r10\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r6\n\
|
||||
ldrh r0, [r1, 0xA]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r1, 0xA]\n\
|
||||
_081BEE8A:\n\
|
||||
ldr r0, [sp, 0x8]\n\
|
||||
add r0, r10\n\
|
||||
lsls r0, 3\n\
|
||||
adds r0, r6\n\
|
||||
ldrb r4, [r0, 0xE]\n\
|
||||
ldrb r5, [r0, 0xC]\n\
|
||||
lsls r0, r4, 16\n\
|
||||
cmp r5, r4\n\
|
||||
bcs _081BEF32\n\
|
||||
str r0, [sp, 0xC]\n\
|
||||
_081BEE9E:\n\
|
||||
movs r6, 0\n\
|
||||
adds r0, r5, 0x1\n\
|
||||
str r0, [sp, 0x4]\n\
|
||||
lsls r4, r5, 3\n\
|
||||
movs r2, 0x5F\n\
|
||||
subs r1, r2, r5\n\
|
||||
lsls r0, r1, 1\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 4\n\
|
||||
mov r9, r0\n\
|
||||
_081BEEB2:\n\
|
||||
ldr r0, =gUnknown_0203CF04\n\
|
||||
ldr r0, [r0]\n\
|
||||
ldr r7, =gUnknown_0203CF10\n\
|
||||
ldr r3, [r7]\n\
|
||||
adds r3, r4, r3\n\
|
||||
ldrb r2, [r3, 0x4]\n\
|
||||
adds r1, r2, 0x1\n\
|
||||
strb r1, [r3, 0x4]\n\
|
||||
lsls r2, 24\n\
|
||||
lsrs r2, 24\n\
|
||||
ldr r1, [r3]\n\
|
||||
adds r1, r2\n\
|
||||
ldrb r1, [r1]\n\
|
||||
add r1, r9\n\
|
||||
lsls r1, 16\n\
|
||||
lsrs r1, 16\n\
|
||||
movs r2, 0x1\n\
|
||||
mov r8, r2\n\
|
||||
str r2, [sp]\n\
|
||||
movs r2, 0\n\
|
||||
movs r3, 0x30\n\
|
||||
bl sub_81BF2B8\n\
|
||||
adds r0, r6, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
cmp r6, 0\n\
|
||||
beq _081BEEB2\n\
|
||||
ldr r0, [r7]\n\
|
||||
adds r1, r4, r0\n\
|
||||
ldrb r0, [r1, 0x4]\n\
|
||||
cmp r0, 0x2F\n\
|
||||
bls _081BEF24\n\
|
||||
ldr r0, [r1]\n\
|
||||
bl Free\n\
|
||||
ldr r0, [r7]\n\
|
||||
adds r0, r4, r0\n\
|
||||
movs r1, 0\n\
|
||||
str r1, [r0]\n\
|
||||
ldr r1, [sp, 0x8]\n\
|
||||
add r1, r10\n\
|
||||
lsls r1, 3\n\
|
||||
ldr r4, =gTasks\n\
|
||||
adds r1, r4\n\
|
||||
ldrh r0, [r1, 0xC]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r1, 0xC]\n\
|
||||
mov r0, r8\n\
|
||||
ands r5, r0\n\
|
||||
cmp r5, 0x1\n\
|
||||
bne _081BEF24\n\
|
||||
ldr r0, =gUnknown_0203CF14\n\
|
||||
ldr r1, [r0]\n\
|
||||
ldrh r0, [r1, 0x2]\n\
|
||||
subs r0, 0x1\n\
|
||||
strh r0, [r1, 0x2]\n\
|
||||
_081BEF24:\n\
|
||||
ldr r1, [sp, 0x4]\n\
|
||||
lsls r0, r1, 16\n\
|
||||
lsrs r5, r0, 16\n\
|
||||
ldr r2, [sp, 0xC]\n\
|
||||
lsrs r0, r2, 16\n\
|
||||
cmp r5, r0\n\
|
||||
bcc _081BEE9E\n\
|
||||
_081BEF32:\n\
|
||||
ldr r0, =gUnknown_0203CF04\n\
|
||||
ldr r1, [r0]\n\
|
||||
movs r2, 0x92\n\
|
||||
lsls r2, 4\n\
|
||||
movs r0, 0\n\
|
||||
movs r3, 0\n\
|
||||
bl LoadBgTiles\n\
|
||||
ldr r0, =gUnknown_0203CF10\n\
|
||||
ldr r0, [r0]\n\
|
||||
movs r4, 0xBE\n\
|
||||
lsls r4, 2\n\
|
||||
adds r0, r4\n\
|
||||
ldrb r0, [r0, 0x4]\n\
|
||||
cmp r0, 0x2F\n\
|
||||
bhi _081BF002\n\
|
||||
b _081BF014\n\
|
||||
.pool\n\
|
||||
_081BEF64:\n\
|
||||
movs r0, 0\n\
|
||||
bl UnsetBgTilemapBuffer\n\
|
||||
ldr r0, =sub_81BEBB4\n\
|
||||
bl FindTaskIdByFunc\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
cmp r0, 0xFF\n\
|
||||
beq _081BEF7C\n\
|
||||
bl DestroyTask\n\
|
||||
_081BEF7C:\n\
|
||||
ldr r0, =gUnknown_0203CF14\n\
|
||||
ldr r1, [r0]\n\
|
||||
movs r0, 0\n\
|
||||
strh r0, [r1]\n\
|
||||
strh r0, [r1, 0x2]\n\
|
||||
bl sub_81BEB90\n\
|
||||
b _081BF002\n\
|
||||
.pool\n\
|
||||
_081BEF94:\n\
|
||||
ldr r4, =gUnknown_0203CF14\n\
|
||||
ldr r0, [r4]\n\
|
||||
bl Free\n\
|
||||
movs r5, 0\n\
|
||||
str r5, [r4]\n\
|
||||
ldr r4, =gUnknown_0203CF10\n\
|
||||
ldr r0, [r4]\n\
|
||||
bl Free\n\
|
||||
str r5, [r4]\n\
|
||||
ldr r4, =gUnknown_0203CF04\n\
|
||||
ldr r0, [r4]\n\
|
||||
bl Free\n\
|
||||
str r5, [r4]\n\
|
||||
ldr r4, =gUnknown_0203CF08\n\
|
||||
ldr r0, [r4]\n\
|
||||
bl Free\n\
|
||||
str r5, [r4]\n\
|
||||
b _081BF002\n\
|
||||
.pool\n\
|
||||
_081BEFD0:\n\
|
||||
movs r0, 0xC\n\
|
||||
movs r1, 0x2\n\
|
||||
bl SetGpuRegBits\n\
|
||||
movs r0, 0x8\n\
|
||||
movs r1, 0\n\
|
||||
bl SetGpuRegBits\n\
|
||||
movs r0, 0\n\
|
||||
movs r1, 0x7\n\
|
||||
movs r2, 0\n\
|
||||
bl SetBgAttribute\n\
|
||||
bl sub_81971D0\n\
|
||||
b _081BF002\n\
|
||||
_081BEFF0:\n\
|
||||
movs r0, 0\n\
|
||||
bl ShowBg\n\
|
||||
b _081BF002\n\
|
||||
_081BEFF8:\n\
|
||||
mov r0, r10\n\
|
||||
bl DestroyTask\n\
|
||||
bl EnableBothScriptContexts\n\
|
||||
_081BF002:\n\
|
||||
ldr r0, =gTasks\n\
|
||||
mov r2, r10\n\
|
||||
lsls r1, r2, 2\n\
|
||||
add r1, r10\n\
|
||||
lsls r1, 3\n\
|
||||
adds r1, r0\n\
|
||||
ldrh r0, [r1, 0x8]\n\
|
||||
adds r0, 0x1\n\
|
||||
strh r0, [r1, 0x8]\n\
|
||||
_081BF014:\n\
|
||||
add sp, 0x10\n\
|
||||
pop {r3-r5}\n\
|
||||
mov r8, r3\n\
|
||||
mov r9, r4\n\
|
||||
mov r10, r5\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool\n\
|
||||
.syntax divided");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
static void sub_81BF028(u8 taskId)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
switch(gTasks[taskId].data[0])
|
||||
{
|
||||
case 1:
|
||||
gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(sizeof(struct Struct203CF0C));
|
||||
gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_LENGTH);
|
||||
gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(sizeof(struct DynamicSpriteFrameImage));
|
||||
gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16));
|
||||
gUnknown_0203CF0C->unk10 = 0;
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
u8 *buffer;
|
||||
buffer = gUnknown_0203CF0C->frameImageTiles;
|
||||
for(i = 0; i < ROOT_FOSSIL_GFX_LENGTH; i++, buffer++)
|
||||
*buffer = gRootFossil_Gfx[i];
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles;
|
||||
gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_LENGTH;
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
u8 spriteId, zero;
|
||||
struct SpriteTemplate fossilTemplate;
|
||||
|
||||
fossilTemplate = gUnknown_08617E00;
|
||||
fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage);
|
||||
spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
|
||||
gUnknown_0203CF0C->spriteId = spriteId;
|
||||
zero = 0;
|
||||
gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero;
|
||||
gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x;
|
||||
gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1;
|
||||
}
|
||||
case 5:
|
||||
for(i = 0; i < ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH; i++)
|
||||
gUnknown_0203CF0C->unkC[i] = i;
|
||||
break;
|
||||
case 6:
|
||||
{
|
||||
u16 rand1, rand2, temp, j;
|
||||
j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1;
|
||||
for(i = 0; i <= j; i++)
|
||||
{
|
||||
rand1 = Random() % 0x100;
|
||||
rand2 = Random() % 0x100;
|
||||
j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1;
|
||||
temp = gUnknown_0203CF0C->unkC[rand2];
|
||||
gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1];
|
||||
gUnknown_0203CF0C->unkC[rand1] = temp;
|
||||
}
|
||||
gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248;
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
|
||||
return;
|
||||
DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]);
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF0C->unkC);;
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImage);
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImageTiles);
|
||||
FREE_AND_SET_NULL(gUnknown_0203CF0C);
|
||||
break;
|
||||
case 8:
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
++gTasks[taskId].data[0];
|
||||
}
|
||||
|
||||
static void sub_81BF248(struct Sprite *sprite)
|
||||
{
|
||||
if (gUnknown_0203CF0C->unk10 >= (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH))
|
||||
{
|
||||
sprite->callback = SpriteCallbackDummy;
|
||||
}
|
||||
else if (sprite->pos1.y >= 0x60)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
sub_81BF2B8(gUnknown_0203CF0C->frameImageTiles, gUnknown_0203CF0C->unkC[gUnknown_0203CF0C->unk10++], 0, 16, 0);
|
||||
}
|
||||
StartSpriteAnim(sprite, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprite->pos1.y++;
|
||||
}
|
||||
}
|
||||
106
src/gym_leader_rematch.c
Normal file
106
src/gym_leader_rematch.c
Normal file
@@ -0,0 +1,106 @@
|
||||
#include "global.h"
|
||||
#include "constants/flags.h"
|
||||
#include "random.h"
|
||||
#include "event_data.h"
|
||||
#include "battle_setup.h"
|
||||
#include "gym_leader_rematch.h"
|
||||
|
||||
static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch);
|
||||
static s32 GetRematchIndex(u32 trainerIdx);
|
||||
|
||||
static const u16 GymLeaderRematches_AfterNewMauville[] = {
|
||||
REMATCH_ROXANNE,
|
||||
REMATCH_BRAWLY,
|
||||
REMATCH_WATTSON,
|
||||
REMATCH_FLANNERY,
|
||||
REMATCH_NORMAN,
|
||||
REMATCH_WINONA,
|
||||
REMATCH_TATE_AND_LIZA,
|
||||
REMATCH_JUAN
|
||||
};
|
||||
|
||||
static const u16 GymLeaderRematches_BeforeNewMauville[] = {
|
||||
REMATCH_ROXANNE,
|
||||
REMATCH_BRAWLY,
|
||||
// Wattson isn't available at this time
|
||||
REMATCH_FLANNERY,
|
||||
REMATCH_NORMAN,
|
||||
REMATCH_WINONA,
|
||||
REMATCH_TATE_AND_LIZA,
|
||||
REMATCH_JUAN
|
||||
};
|
||||
|
||||
void UpdateGymLeaderRematch(void)
|
||||
{
|
||||
if (FlagGet(FLAG_SYS_GAME_CLEAR) && (Random() % 100) <= 30)
|
||||
{
|
||||
if (FlagGet(FLAG_WATTSON_REMATCH_AVAILABLE))
|
||||
UpdateGymLeaderRematchFromArray(GymLeaderRematches_AfterNewMauville, ARRAY_COUNT(GymLeaderRematches_AfterNewMauville), 5);
|
||||
else
|
||||
UpdateGymLeaderRematchFromArray(GymLeaderRematches_BeforeNewMauville, ARRAY_COUNT(GymLeaderRematches_BeforeNewMauville), 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch)
|
||||
{
|
||||
s32 whichLeader = 0;
|
||||
s32 lowestRematchIndex = 5;
|
||||
u32 i;
|
||||
s32 rematchIndex;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (!gSaveBlock1Ptr->trainerRematches[data[i]])
|
||||
{
|
||||
rematchIndex = GetRematchIndex(data[i]);
|
||||
if (lowestRematchIndex > rematchIndex)
|
||||
lowestRematchIndex = rematchIndex;
|
||||
whichLeader++;
|
||||
}
|
||||
}
|
||||
if (whichLeader != 0 && lowestRematchIndex <= maxRematch)
|
||||
{
|
||||
whichLeader = 0;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (!gSaveBlock1Ptr->trainerRematches[data[i]])
|
||||
{
|
||||
rematchIndex = GetRematchIndex(data[i]);
|
||||
if (rematchIndex == lowestRematchIndex)
|
||||
whichLeader++;
|
||||
}
|
||||
}
|
||||
if (whichLeader != 0)
|
||||
{
|
||||
whichLeader = Random() % whichLeader;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
if (!gSaveBlock1Ptr->trainerRematches[data[i]])
|
||||
{
|
||||
rematchIndex = GetRematchIndex(data[i]);
|
||||
if (rematchIndex == lowestRematchIndex)
|
||||
{
|
||||
if (whichLeader == 0)
|
||||
{
|
||||
gSaveBlock1Ptr->trainerRematches[data[i]] = lowestRematchIndex;
|
||||
break;
|
||||
}
|
||||
whichLeader--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static s32 GetRematchIndex(u32 trainerIdx)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (!HasTrainerBeenFought(gRematchTable[trainerIdx].trainerIds[i]))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return 5;
|
||||
}
|
||||
@@ -328,7 +328,6 @@ extern u8* gReturnToXStringsTable[];
|
||||
extern u32 gUnknown_0203CE5E[];
|
||||
extern u8 EventScript_2736B3[];
|
||||
extern const u16 gUnknown_0860F074[];
|
||||
extern struct BattleMove gBattleMoves[];
|
||||
|
||||
void ResetBagScrollPositions(void)
|
||||
{
|
||||
|
||||
@@ -606,7 +606,6 @@ u8 sub_818E06C(void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
static u8 sub_818E13C(void)
|
||||
{
|
||||
u8 retval;
|
||||
@@ -627,9 +626,11 @@ static u8 sub_818E13C(void)
|
||||
len = sub_818E258(gUnknown_0203CD68->playerName);
|
||||
if (len == sub_818E258(gSaveBlock2Ptr->playerName))
|
||||
{
|
||||
u8 *name = gUnknown_0203CD68->playerName;
|
||||
for (i = 0; i < len; i ++)
|
||||
{
|
||||
if (gUnknown_0203CD68->playerName[i] != gSaveBlock2Ptr->playerName[i])
|
||||
name = gUnknown_0203CD68->playerName;
|
||||
if (name[i] != gSaveBlock2Ptr->playerName[i])
|
||||
{
|
||||
retval = 2;
|
||||
break;
|
||||
@@ -640,85 +641,6 @@ static u8 sub_818E13C(void)
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
#else
|
||||
ASM_DIRECT static u8 sub_818E13C(void)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmovs r7, 0x1\n"
|
||||
"\tldr r5, =gUnknown_0203CD68\n"
|
||||
"\tldr r0, =gSaveBlock1Ptr\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tldr r2, =0x00003b58\n"
|
||||
"\tadds r0, r1, r2\n"
|
||||
"\tstr r0, [r5]\n"
|
||||
"\tldrb r0, [r0, 0x18]\n"
|
||||
"\tcmp r0, 0xFF\n"
|
||||
"\tbne _0818E174\n"
|
||||
"\tldr r0, =gStringVar1\n"
|
||||
"\tldr r1, =gText_Lady2\n"
|
||||
"\tbl StringCopy7\n"
|
||||
"\tmovs r7, 0\n"
|
||||
"\tb _0818E1DC\n"
|
||||
"\t.pool\n"
|
||||
"_0818E174:\n"
|
||||
"\tldr r4, =gStringVar1\n"
|
||||
"\tldr r0, =0x00003b70\n"
|
||||
"\tadds r1, r0\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tbl StringCopy7\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tadds r0, 0x2D\n"
|
||||
"\tldrb r1, [r0]\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tbl ConvertInternationalString\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tadds r0, 0x18\n"
|
||||
"\tbl sub_818E258\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r4, r0, 24\n"
|
||||
"\tldr r6, =gSaveBlock2Ptr\n"
|
||||
"\tldr r0, [r6]\n"
|
||||
"\tbl sub_818E258\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r0, 24\n"
|
||||
"\tcmp r4, r0\n"
|
||||
"\tbne _0818E1DC\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tcmp r2, r4\n"
|
||||
"\tbcs _0818E1DC\n"
|
||||
"\tldr r1, [r6]\n"
|
||||
"\tldrb r0, [r0, 0x18]\n"
|
||||
"\tldrb r1, [r1]\n"
|
||||
"\tcmp r0, r1\n"
|
||||
"\tbne _0818E1DA\n"
|
||||
"_0818E1BA:\n"
|
||||
"\tadds r0, r2, 0x1\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r2, r0, 24\n"
|
||||
"\tcmp r2, r4\n"
|
||||
"\tbcs _0818E1DC\n"
|
||||
"\tldr r0, =gUnknown_0203CD68\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tadds r1, 0x18\n"
|
||||
"\tadds r1, r2\n"
|
||||
"\tldr r0, =gSaveBlock2Ptr\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tadds r0, r2\n"
|
||||
"\tldrb r1, [r1]\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tcmp r1, r0\n"
|
||||
"\tbeq _0818E1BA\n"
|
||||
"_0818E1DA:\n"
|
||||
"\tmovs r7, 0x2\n"
|
||||
"_0818E1DC:\n"
|
||||
"\tadds r0, r7, 0\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1\n"
|
||||
"\t.pool");
|
||||
}
|
||||
#endif
|
||||
|
||||
static u8 sub_818E1F4(void)
|
||||
{
|
||||
|
||||
@@ -67,7 +67,6 @@ extern const union AnimCmd *gUnknown_082FF70C[];
|
||||
extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[];
|
||||
extern const union AnimCmd *const *const gUnknown_08305D0C[];
|
||||
extern const union AnimCmd *const *const gUnknown_0830536C[];
|
||||
extern const struct BattleMove gBattleMoves[];
|
||||
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
|
||||
extern const struct UnknownPokemonStruct3 gUnknown_08610970[];
|
||||
extern const struct CompressedSpritePalette gMonPaletteTable[];
|
||||
@@ -110,6 +109,9 @@ EWRAM_DATA struct SpriteTemplate gUnknown_0202499C = {0};
|
||||
EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
|
||||
|
||||
// const rom data
|
||||
#include "data/battle_moves.h"
|
||||
static const u8 sUnreferencedData[] = {0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00};
|
||||
|
||||
const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
|
||||
const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
|
||||
const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
|
||||
@@ -2196,7 +2198,7 @@ void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
|
||||
(var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \
|
||||
}
|
||||
|
||||
s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef)
|
||||
s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 battlerIdAtk, u8 battlerIdDef)
|
||||
{
|
||||
u32 i;
|
||||
s32 damage = 0;
|
||||
@@ -2226,8 +2228,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
|
||||
if (attacker->item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
|
||||
attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
|
||||
attackerHoldEffect = gEnigmaBerries[battlerIdAtk].holdEffect;
|
||||
attackerHoldEffectParam = gEnigmaBerries[battlerIdAtk].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2237,8 +2239,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
|
||||
if (defender->item == ITEM_ENIGMA_BERRY)
|
||||
{
|
||||
defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
|
||||
defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
|
||||
defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect;
|
||||
defenderHoldEffectParam = gEnigmaBerries[battlerIdDef].holdEffectParam;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2249,13 +2251,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
if (attacker->ability == ABILITY_HUGE_POWER || attacker->ability == ABILITY_PURE_POWER)
|
||||
attack *= 2;
|
||||
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, bankAtk))
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE01_GET, battlerIdAtk))
|
||||
attack = (110 * attack) / 100;
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, bankDef))
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef))
|
||||
defense = (110 * defense) / 100;
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankAtk))
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk))
|
||||
spAttack = (110 * spAttack) / 100;
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, bankDef))
|
||||
if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef))
|
||||
spDefense = (110 * spDefense) / 100;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sHoldEffectToType); i++)
|
||||
@@ -2440,7 +2442,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
}
|
||||
|
||||
// flash fire triggered
|
||||
if ((gBattleResources->flags->flags[bankAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
|
||||
if ((gBattleResources->flags->flags[battlerIdAtk] & UNKNOWN_FLAG_FLASH_FIRE) && type == TYPE_FIRE)
|
||||
damage = (15 * damage) / 10;
|
||||
}
|
||||
|
||||
|
||||
@@ -115,8 +115,6 @@ extern u8 gText_Appeal[];
|
||||
extern u8 gText_Jam[];
|
||||
extern u8 gText_OTSlash[];
|
||||
extern u8 gText_UnkCtrlF907F908[];
|
||||
extern u8 gAbilityNames[][13];
|
||||
extern u8 *gAbilityDescriptionPointers[];
|
||||
extern u8 gText_XNature[];
|
||||
extern u8 gText_XNatureHatchedAtYZ[];
|
||||
extern u8 gText_XNatureHatchedSomewhereAt[];
|
||||
@@ -146,7 +144,6 @@ extern u8 gText_OneDash[];
|
||||
extern u8 gText_TwoDashes[];
|
||||
extern u8 gText_ThreeDashes[];
|
||||
extern u8 gUnknown_0861CE97[];
|
||||
extern struct BattleMove gBattleMoves[];
|
||||
|
||||
extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
|
||||
extern bool8 sub_81A6BF4();
|
||||
@@ -2539,7 +2536,7 @@ void sub_81C2554()
|
||||
gUnknown_0203CF1C->unk40CB[i] |= 0xFF;
|
||||
}
|
||||
|
||||
void sub_81C25A4(u8 a, u8 *b, u8 c, u8 d, u8 e, u8 f)
|
||||
void sub_81C25A4(u8 a, const u8 *b, u8 c, u8 d, u8 e, u8 f)
|
||||
{
|
||||
AddTextPrinterParameterized2(a, 1, c, d, 0, e, gUnknown_0861CD2C[f], 0, b);
|
||||
}
|
||||
|
||||
@@ -1612,7 +1612,7 @@ bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 stringVarIndex = ScriptReadByte(ctx);
|
||||
u16 v1 = VarGet(ScriptReadHalfword(ctx));
|
||||
u8 v2 = sub_80EF370(v1);
|
||||
u8 v2 = CountDigits(v1);
|
||||
|
||||
ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
|
||||
return FALSE;
|
||||
|
||||
12
src/text.c
12
src/text.c
@@ -4,18 +4,15 @@
|
||||
#include "m4a.h"
|
||||
#include "palette.h"
|
||||
#include "sound.h"
|
||||
#include "constants/songs.h"
|
||||
#include "string_util.h"
|
||||
#include "window.h"
|
||||
#include "text.h"
|
||||
#include "blit.h"
|
||||
|
||||
extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
|
||||
extern void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
|
||||
extern void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
|
||||
extern u8 GetKeypadIconWidth(u8 keypadIconId);
|
||||
extern void CopyWindowToVram(u8 windowId, u8 mode);
|
||||
extern u16 Font6Func(struct TextPrinter *textPrinter);
|
||||
extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
|
||||
extern void PlaySE(u16 songNum);
|
||||
extern u8* UnkTextUtil_GetPtrI(u8 a1);
|
||||
extern int sub_8197964();
|
||||
|
||||
@@ -27,7 +24,6 @@ static u16 gLastTextBgColor;
|
||||
static u16 gLastTextFgColor;
|
||||
static u16 gLastTextShadowColor;
|
||||
|
||||
extern struct Main gMain;
|
||||
extern struct MusicPlayerInfo gMPlayInfo_BGM;
|
||||
|
||||
const struct FontInfo *gFonts;
|
||||
@@ -1986,7 +1982,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
|
||||
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
result = TRUE;
|
||||
PlaySE(5);
|
||||
PlaySE(SE_SELECT);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -2004,7 +2000,7 @@ bool16 TextPrinterWait(struct TextPrinter *textPrinter)
|
||||
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
{
|
||||
result = TRUE;
|
||||
PlaySE(5);
|
||||
PlaySE(SE_SELECT);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
23
src/window.c
23
src/window.c
@@ -1,6 +1,8 @@
|
||||
#include "global.h"
|
||||
#include "window.h"
|
||||
#include "malloc.h"
|
||||
#include "bg.h"
|
||||
#include "blit.h"
|
||||
|
||||
u32 filler_03002F58;
|
||||
u32 filler_03002F5C;
|
||||
@@ -15,19 +17,6 @@ EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};
|
||||
EWRAM_DATA static struct Window* sWindowPtr = NULL;
|
||||
EWRAM_DATA static u16 sWindowSize = 0;
|
||||
|
||||
extern void* GetBgTilemapBuffer(u8 bg);
|
||||
extern int DummiedOutFireRedLeafGreenTileAllocFunc(int, int, int, int);
|
||||
extern u16 GetBgAttribute(u8 bg, u8 attributeId);
|
||||
extern void SetBgTilemapBuffer(u8 bg, void *tilemap);
|
||||
extern void CopyBgTilemapBufferToVram(u8 bg);
|
||||
extern u8 LoadBgTiles(u8 bg, void *src, u16 size, u16 destOffset);
|
||||
extern void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, u16 tileNumDelta);
|
||||
extern void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
|
||||
extern void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey);
|
||||
extern void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteNum);
|
||||
extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
|
||||
extern void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
|
||||
|
||||
static u8 GetNumActiveWindowsOnBg(u8 bgId);
|
||||
static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId);
|
||||
|
||||
@@ -130,13 +119,13 @@ u16 AddWindow(const struct WindowTemplate *template)
|
||||
u8 *allocatedTilemapBuffer;
|
||||
int i;
|
||||
|
||||
for (win = 0; win < 0x20; ++win)
|
||||
for (win = 0; win < WINDOWS_MAX; ++win)
|
||||
{
|
||||
if ((bgLayer = gWindows[win].window.priority) == 0xFF)
|
||||
break;
|
||||
}
|
||||
|
||||
if (win == 0x20)
|
||||
if (win == WINDOWS_MAX)
|
||||
return 0xFF;
|
||||
|
||||
bgLayer = template->priority;
|
||||
@@ -199,13 +188,13 @@ int AddWindowWithoutTileMap(const struct WindowTemplate *template)
|
||||
u8 bgLayer;
|
||||
int allocatedBaseBlock;
|
||||
|
||||
for (win = 0; win < 0x20; ++win)
|
||||
for (win = 0; win < WINDOWS_MAX; ++win)
|
||||
{
|
||||
if (gWindows[win].window.priority == 0xFF)
|
||||
break;
|
||||
}
|
||||
|
||||
if (win == 0x20)
|
||||
if (win == WINDOWS_MAX)
|
||||
return 0xFF;
|
||||
|
||||
bgLayer = template->priority;
|
||||
|
||||
Reference in New Issue
Block a user