summaryrefslogtreecommitdiff
path: root/src/battle_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_main.c')
-rw-r--r--src/battle_main.c117
1 files changed, 61 insertions, 56 deletions
diff --git a/src/battle_main.c b/src/battle_main.c
index 3507ff765..37ab6109c 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -434,24 +434,24 @@ const u8 gTypeEffectiveness[336] =
const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] =
{
- _("NORMAL"),
- _("FIGHT"),
- _("FLYING"),
- _("POISON"),
- _("GROUND"),
- _("ROCK"),
- _("BUG"),
- _("GHOST"),
- _("STEEL"),
- _("???"),
- _("FIRE"),
- _("WATER"),
- _("GRASS"),
- _("ELECTR"),
- _("PSYCHC"),
- _("ICE"),
- _("DRAGON"),
- _("DARK"),
+ [TYPE_NORMAL] = _("NORMAL"),
+ [TYPE_FIGHTING] = _("FIGHT"),
+ [TYPE_FLYING] = _("FLYING"),
+ [TYPE_POISON] = _("POISON"),
+ [TYPE_GROUND] = _("GROUND"),
+ [TYPE_ROCK] = _("ROCK"),
+ [TYPE_BUG] = _("BUG"),
+ [TYPE_GHOST] = _("GHOST"),
+ [TYPE_STEEL] = _("STEEL"),
+ [TYPE_MYSTERY] = _("???"),
+ [TYPE_FIRE] = _("FIRE"),
+ [TYPE_WATER] = _("WATER"),
+ [TYPE_GRASS] = _("GRASS"),
+ [TYPE_ELECTRIC] = _("ELECTR"),
+ [TYPE_PSYCHIC] = _("PSYCHC"),
+ [TYPE_ICE] = _("ICE"),
+ [TYPE_DRAGON] = _("DRAGON"),
+ [TYPE_DARK] = _("DARK"),
};
// This is a factor in how much money you get for beating a trainer.
@@ -611,22 +611,22 @@ static void CB2_InitBattleInternal(void)
CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
SetGpuReg(REG_OFFSET_MOSAIC, 0);
- SetGpuReg(REG_OFFSET_WIN0H, 240);
- SetGpuReg(REG_OFFSET_WIN0V, 0x5051);
+ SetGpuReg(REG_OFFSET_WIN0H, DISPLAY_WIDTH);
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1));
SetGpuReg(REG_OFFSET_WININ, 0);
SetGpuReg(REG_OFFSET_WINOUT, 0);
- gBattle_WIN0H = 240;
+ gBattle_WIN0H = DISPLAY_WIDTH;
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
{
- gBattle_WIN0V = 159;
- gBattle_WIN1H = 240;
+ gBattle_WIN0V = DISPLAY_HEIGHT - 1;
+ gBattle_WIN1H = DISPLAY_WIDTH;
gBattle_WIN1V = 32;
}
else
{
- gBattle_WIN0V = 0x5051;
+ gBattle_WIN0V = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1);
ScanlineEffect_Clear();
i = 0;
@@ -1961,10 +1961,10 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
if (gTrainers[trainerNum].doubleBattle == TRUE)
personalityValue = 0x80;
- else if (gTrainers[trainerNum].encounterMusic_gender & 0x80)
- personalityValue = 0x78;
+ else if (gTrainers[trainerNum].encounterMusic_gender & F_TRAINER_FEMALE)
+ personalityValue = 0x78; // Use personality more likely to result in a female Pokémon
else
- personalityValue = 0x88;
+ personalityValue = 0x88; // Use personality more likely to result in a male Pokémon
for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++)
nameHash += gTrainers[trainerNum].trainerName[j];
@@ -2047,7 +2047,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir
void sub_8038A04(void) // unused
{
if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F)
- SetGpuReg(REG_OFFSET_BG0CNT, 0x9800);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_SCREENBASE(24) | BGCNT_TXT256x512);
}
void VBlankCB_Battle(void)
@@ -2082,9 +2082,9 @@ void SpriteCB_VsLetterDummy(struct Sprite *sprite)
static void SpriteCB_VsLetter(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
- sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8);
+ sprite->x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8);
else
- sprite->pos1.x = sprite->data[1] - ((sprite->data[2] & 0xFF00) >> 8);
+ sprite->x = sprite->data[1] - ((sprite->data[2] & 0xFF00) >> 8);
sprite->data[2] += 0x180;
@@ -2618,8 +2618,8 @@ static void SpriteCb_MoveWildMonToRight(struct Sprite *sprite)
{
if ((gIntroSlideFlags & 1) == 0)
{
- sprite->pos2.x += 2;
- if (sprite->pos2.x == 0)
+ sprite->x2 += 2;
+ if (sprite->x2 == 0)
{
sprite->callback = SpriteCb_WildMonShowHealthbox;
}
@@ -2730,7 +2730,7 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite)
if (--sprite->data[4] == 0)
{
sprite->data[4] = 2;
- sprite->pos2.y += 8; // Move the sprite down.
+ sprite->y2 += 8; // Move the sprite down.
if (--sprite->data[3] < 0)
{
FreeSpriteOamMatrix(sprite);
@@ -2795,8 +2795,8 @@ static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite)
{
if (!(gIntroSlideFlags & 1))
{
- sprite->pos2.x -= 2;
- if (sprite->pos2.x == 0)
+ sprite->x2 -= 2;
+ if (sprite->x2 == 0)
{
sprite->callback = SpriteCallbackDummy_3;
sprite->data[1] = 0;
@@ -2821,8 +2821,8 @@ void SpriteCB_FaintSlideAnim(struct Sprite *sprite)
{
if (!(gIntroSlideFlags & 1))
{
- sprite->pos2.x += sprite->sSpeedX;
- sprite->pos2.y += sprite->sSpeedY;
+ sprite->x2 += sprite->sSpeedX;
+ sprite->y2 += sprite->sSpeedY;
}
}
@@ -2872,8 +2872,8 @@ void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude)
gSprites[invisibleSpriteId].sAmplitude = amplitude;
gSprites[invisibleSpriteId].sBouncerSpriteId = bouncerSpriteId;
gSprites[invisibleSpriteId].sWhich = which;
- gSprites[bouncerSpriteId].pos2.x = 0;
- gSprites[bouncerSpriteId].pos2.y = 0;
+ gSprites[bouncerSpriteId].x2 = 0;
+ gSprites[bouncerSpriteId].y2 = 0;
}
void EndBounceEffect(u8 battler, u8 which)
@@ -2899,8 +2899,8 @@ void EndBounceEffect(u8 battler, u8 which)
gBattleSpritesDataPtr->healthBoxesData[battler].battlerIsBouncing = 0;
}
- gSprites[bouncerSpriteId].pos2.x = 0;
- gSprites[bouncerSpriteId].pos2.y = 0;
+ gSprites[bouncerSpriteId].x2 = 0;
+ gSprites[bouncerSpriteId].y2 = 0;
}
static void SpriteCB_BounceEffect(struct Sprite *sprite)
@@ -2913,7 +2913,7 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite)
else
index = sprite->sSinIndex;
- gSprites[bouncerSpriteId].pos2.y = Sin(index, sprite->sAmplitude) + sprite->sAmplitude;
+ gSprites[bouncerSpriteId].y2 = Sin(index, sprite->sAmplitude) + sprite->sAmplitude;
sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF;
}
@@ -3959,7 +3959,7 @@ u8 IsRunningFromBattleImpossible(void)
{
gBattleScripting.battler = i;
gLastUsedAbility = gBattleMons[i].ability;
- gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE;
return 2;
}
if (side != GetBattlerSide(i)
@@ -3969,7 +3969,7 @@ u8 IsRunningFromBattleImpossible(void)
{
gBattleScripting.battler = i;
gLastUsedAbility = gBattleMons[i].ability;
- gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE;
return 2;
}
}
@@ -3978,18 +3978,18 @@ u8 IsRunningFromBattleImpossible(void)
{
gBattleScripting.battler = i - 1;
gLastUsedAbility = gBattleMons[i - 1].ability;
- gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PREVENTS_ESCAPE;
return 2;
}
if ((gBattleMons[gActiveBattler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED))
|| (gStatuses3[gActiveBattler] & STATUS3_ROOTED))
{
- gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_CANT_ESCAPE;
return 1;
}
if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)
{
- gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DONT_LEAVE_BIRCH;
return 1;
}
return 0;
@@ -4087,7 +4087,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action.
- if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
RecordedBattle_SetBattlerAction(gActiveBattler, gBattleBufferB[gActiveBattler][1]);
gChosenActionByBattler[gActiveBattler] = gBattleBufferB[gActiveBattler][1];
@@ -4266,7 +4266,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case STATE_WAIT_ACTION_CASE_CHOSEN:
- if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
switch (gChosenActionByBattler[gActiveBattler])
{
@@ -4375,7 +4375,7 @@ static void HandleTurnActionSelectionState(void)
break;
case STATE_WAIT_ACTION_CONFIRMED_STANDBY:
if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler])
- | (0xF0000000)
+ | (0xF << 28)
| (gBitTable[gActiveBattler] << 4)
| (gBitTable[gActiveBattler] << 8)
| (gBitTable[gActiveBattler] << 12))))
@@ -4400,7 +4400,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case STATE_WAIT_ACTION_CONFIRMED:
- if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
gBattleCommunication[ACTIONS_CONFIRMED_COUNT]++;
}
@@ -4414,7 +4414,7 @@ static void HandleTurnActionSelectionState(void)
{
gBattlerAttacker = gActiveBattler;
gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBattler];
- if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
@@ -4422,7 +4422,7 @@ static void HandleTurnActionSelectionState(void)
}
break;
case STATE_WAIT_SET_BEFORE_ACTION:
- if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
gBattleCommunication[gActiveBattler] = STATE_BEFORE_ACTION_CHOSEN;
}
@@ -4446,7 +4446,7 @@ static void HandleTurnActionSelectionState(void)
{
gBattlerAttacker = gActiveBattler;
gBattlescriptCurrInstr = gSelectionBattleScripts[gActiveBattler];
- if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF0000000) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 0xC))))
+ if (!(gBattleControllerExecFlags & ((gBitTable[gActiveBattler]) | (0xF << 28) | (gBitTable[gActiveBattler] << 4) | (gBitTable[gActiveBattler] << 8) | (gBitTable[gActiveBattler] << 12))))
{
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
@@ -5039,7 +5039,7 @@ static void HandleEndTurn_FinishBattle(void)
}
}
}
- PutPokemonTodayCaughtOnAir();
+ TryPutPokemonTodayOnAir();
}
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK
@@ -5052,7 +5052,7 @@ static void HandleEndTurn_FinishBattle(void)
| BATTLE_TYPE_WALLY_TUTORIAL))
&& gBattleResults.shinyWildMon)
{
- sub_80EE184();
+ TryPutBreakingNewsOnAir();
}
sub_8186444();
@@ -5148,7 +5148,12 @@ static void ReturnFromBattleToOverworld(void)
if (gBattleTypeFlags & BATTLE_TYPE_ROAMER)
{
UpdateRoamerHPStatus(&gEnemyParty[0]);
+
+#ifndef BUGFIX
if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT)
+#else
+ if ((gBattleOutcome == B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) // Bug: When Roar is used by roamer, gBattleOutcome is B_OUTCOME_PLAYER_TELEPORTED (5).
+#endif // & with B_OUTCOME_WON (1) will return TRUE and deactivates the roamer.
SetRoamerInactive();
}