summaryrefslogtreecommitdiff
path: root/src/battle_arena.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle_arena.c')
-rw-r--r--src/battle_arena.c548
1 files changed, 484 insertions, 64 deletions
diff --git a/src/battle_arena.c b/src/battle_arena.c
index 5ab71965b..2d9f82ab6 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "battle_arena.h"
#include "event_data.h"
#include "palette.h"
#include "gpu_regs.h"
@@ -19,14 +20,13 @@
#include "constants/songs.h"
#include "constants/battle_string_ids.h"
#include "constants/battle_frontier.h"
+#include "constants/moves.h"
extern u16 gBattle_WIN0H;
extern u16 gBattle_WIN0V;
extern const u32 gUnknown_08D854E8[];
extern const u16 gUnknown_08D855E8[];
-extern const struct SpriteTemplate gUnknown_08611F5C;
-extern const s8 gBattleArenaMoveMindRatings[];
// This file's functions.
static void sub_81A58B4(void);
@@ -36,16 +36,436 @@ static void sub_81A5AC4(void);
static void sub_81A5B08(void);
static void sub_81A5B88(void);
static void sub_81A5BE0(void);
-static void sub_81A5558(u8 x, u8 y, u8 arg2, u8 battler);
+static void SpriteCb_JudgmentIcon(struct Sprite *sprite);
+static void ShowJudgmentSprite(u8 x, u8 y, u8 arg2, u8 battler);
// Const rom data.
+static const s8 sMindRatings[] =
+{
+ [MOVE_NONE] = 0,
+ [MOVE_POUND] = 1,
+ [MOVE_KARATE_CHOP] = 1,
+ [MOVE_DOUBLE_SLAP] = 1,
+ [MOVE_COMET_PUNCH] = 1,
+ [MOVE_MEGA_PUNCH] = 1,
+ [MOVE_PAY_DAY] = 1,
+ [MOVE_FIRE_PUNCH] = 1,
+ [MOVE_ICE_PUNCH] = 1,
+ [MOVE_THUNDER_PUNCH] = 1,
+ [MOVE_SCRATCH] = 1,
+ [MOVE_VICE_GRIP] = 1,
+ [MOVE_GUILLOTINE] = 1,
+ [MOVE_RAZOR_WIND] = 1,
+ [MOVE_SWORDS_DANCE] = 0,
+ [MOVE_CUT] = 1,
+ [MOVE_GUST] = 1,
+ [MOVE_WING_ATTACK] = 1,
+ [MOVE_WHIRLWIND] = 0,
+ [MOVE_FLY] = 1,
+ [MOVE_BIND] = 1,
+ [MOVE_SLAM] = 1,
+ [MOVE_VINE_WHIP] = 1,
+ [MOVE_STOMP] = 1,
+ [MOVE_DOUBLE_KICK] = 1,
+ [MOVE_MEGA_KICK] = 1,
+ [MOVE_JUMP_KICK] = 1,
+ [MOVE_ROLLING_KICK] = 1,
+ [MOVE_SAND_ATTACK] = 0,
+ [MOVE_HEADBUTT] = 1,
+ [MOVE_HORN_ATTACK] = 1,
+ [MOVE_FURY_ATTACK] = 1,
+ [MOVE_HORN_DRILL] = 1,
+ [MOVE_TACKLE] = 1,
+ [MOVE_BODY_SLAM] = 1,
+ [MOVE_WRAP] = 1,
+ [MOVE_TAKE_DOWN] = 1,
+ [MOVE_THRASH] = 1,
+ [MOVE_DOUBLE_EDGE] = 1,
+ [MOVE_TAIL_WHIP] = 0,
+ [MOVE_POISON_STING] = 1,
+ [MOVE_TWINEEDLE] = 1,
+ [MOVE_PIN_MISSILE] = 1,
+ [MOVE_LEER] = 0,
+ [MOVE_BITE] = 1,
+ [MOVE_GROWL] = 0,
+ [MOVE_ROAR] = 0,
+ [MOVE_SING] = 0,
+ [MOVE_SUPERSONIC] = 0,
+ [MOVE_SONIC_BOOM] = 1,
+ [MOVE_DISABLE] = 0,
+ [MOVE_ACID] = 1,
+ [MOVE_EMBER] = 1,
+ [MOVE_FLAMETHROWER] = 1,
+ [MOVE_MIST] = 0,
+ [MOVE_WATER_GUN] = 1,
+ [MOVE_HYDRO_PUMP] = 1,
+ [MOVE_SURF] = 1,
+ [MOVE_ICE_BEAM] = 1,
+ [MOVE_BLIZZARD] = 1,
+ [MOVE_PSYBEAM] = 1,
+ [MOVE_BUBBLE_BEAM] = 1,
+ [MOVE_AURORA_BEAM] = 1,
+ [MOVE_HYPER_BEAM] = 1,
+ [MOVE_PECK] = 1,
+ [MOVE_DRILL_PECK] = 1,
+ [MOVE_SUBMISSION] = 1,
+ [MOVE_LOW_KICK] = 1,
+ [MOVE_COUNTER] = 0,
+ [MOVE_SEISMIC_TOSS] = 1,
+ [MOVE_STRENGTH] = 1,
+ [MOVE_ABSORB] = 1,
+ [MOVE_MEGA_DRAIN] = 1,
+ [MOVE_LEECH_SEED] = 0,
+ [MOVE_GROWTH] = 0,
+ [MOVE_RAZOR_LEAF] = 1,
+ [MOVE_SOLAR_BEAM] = 1,
+ [MOVE_POISON_POWDER] = 0,
+ [MOVE_STUN_SPORE] = 0,
+ [MOVE_SLEEP_POWDER] = 0,
+ [MOVE_PETAL_DANCE] = 1,
+ [MOVE_STRING_SHOT] = 0,
+ [MOVE_DRAGON_RAGE] = 1,
+ [MOVE_FIRE_SPIN] = 1,
+ [MOVE_THUNDER_SHOCK] = 1,
+ [MOVE_THUNDERBOLT] = 1,
+ [MOVE_THUNDER_WAVE] = 0,
+ [MOVE_THUNDER] = 1,
+ [MOVE_ROCK_THROW] = 1,
+ [MOVE_EARTHQUAKE] = 1,
+ [MOVE_FISSURE] = 1,
+ [MOVE_DIG] = 1,
+ [MOVE_TOXIC] = 0,
+ [MOVE_CONFUSION] = 1,
+ [MOVE_PSYCHIC] = 1,
+ [MOVE_HYPNOSIS] = 0,
+ [MOVE_MEDITATE] = 0,
+ [MOVE_AGILITY] = 0,
+ [MOVE_QUICK_ATTACK] = 1,
+ [MOVE_RAGE] = 1,
+ [MOVE_TELEPORT] = 0,
+ [MOVE_NIGHT_SHADE] = 1,
+ [MOVE_MIMIC] = 0,
+ [MOVE_SCREECH] = 0,
+ [MOVE_DOUBLE_TEAM] = 0,
+ [MOVE_RECOVER] = 0,
+ [MOVE_HARDEN] = 0,
+ [MOVE_MINIMIZE] = 0,
+ [MOVE_SMOKESCREEN] = 0,
+ [MOVE_CONFUSE_RAY] = 0,
+ [MOVE_WITHDRAW] = 0,
+ [MOVE_DEFENSE_CURL] = 0,
+ [MOVE_BARRIER] = 0,
+ [MOVE_LIGHT_SCREEN] = 0,
+ [MOVE_HAZE] = 0,
+ [MOVE_REFLECT] = 0,
+ [MOVE_FOCUS_ENERGY] = 0,
+ [MOVE_BIDE] = 0,
+ [MOVE_METRONOME] = 0,
+ [MOVE_MIRROR_MOVE] = 0,
+ [MOVE_SELF_DESTRUCT] = 1,
+ [MOVE_EGG_BOMB] = 1,
+ [MOVE_LICK] = 1,
+ [MOVE_SMOG] = 1,
+ [MOVE_SLUDGE] = 1,
+ [MOVE_BONE_CLUB] = 1,
+ [MOVE_FIRE_BLAST] = 1,
+ [MOVE_WATERFALL] = 1,
+ [MOVE_CLAMP] = 1,
+ [MOVE_SWIFT] = 1,
+ [MOVE_SKULL_BASH] = 1,
+ [MOVE_SPIKE_CANNON] = 1,
+ [MOVE_CONSTRICT] = 1,
+ [MOVE_AMNESIA] = 0,
+ [MOVE_KINESIS] = 0,
+ [MOVE_SOFT_BOILED] = 0,
+ [MOVE_HI_JUMP_KICK] = 1,
+ [MOVE_GLARE] = 0,
+ [MOVE_DREAM_EATER] = 1,
+ [MOVE_POISON_GAS] = 0,
+ [MOVE_BARRAGE] = 1,
+ [MOVE_LEECH_LIFE] = 1,
+ [MOVE_LOVELY_KISS] = 0,
+ [MOVE_SKY_ATTACK] = 1,
+ [MOVE_TRANSFORM] = 0,
+ [MOVE_BUBBLE] = 1,
+ [MOVE_DIZZY_PUNCH] = 1,
+ [MOVE_SPORE] = 0,
+ [MOVE_FLASH] = 0,
+ [MOVE_PSYWAVE] = 1,
+ [MOVE_SPLASH] = 0,
+ [MOVE_ACID_ARMOR] = 0,
+ [MOVE_CRABHAMMER] = 1,
+ [MOVE_EXPLOSION] = 1,
+ [MOVE_FURY_SWIPES] = 1,
+ [MOVE_BONEMERANG] = 1,
+ [MOVE_REST] = 0,
+ [MOVE_ROCK_SLIDE] = 1,
+ [MOVE_HYPER_FANG] = 1,
+ [MOVE_SHARPEN] = 0,
+ [MOVE_CONVERSION] = 0,
+ [MOVE_TRI_ATTACK] = 1,
+ [MOVE_SUPER_FANG] = 1,
+ [MOVE_SLASH] = 1,
+ [MOVE_SUBSTITUTE] = 0,
+ [MOVE_STRUGGLE] = 1,
+ [MOVE_SKETCH] = 0,
+ [MOVE_TRIPLE_KICK] = 1,
+ [MOVE_THIEF] = 1,
+ [MOVE_SPIDER_WEB] = 0,
+ [MOVE_MIND_READER] = 0,
+ [MOVE_NIGHTMARE] = 0,
+ [MOVE_FLAME_WHEEL] = 1,
+ [MOVE_SNORE] = 1,
+ [MOVE_CURSE] = 0,
+ [MOVE_FLAIL] = 1,
+ [MOVE_CONVERSION_2] = 0,
+ [MOVE_AEROBLAST] = 1,
+ [MOVE_COTTON_SPORE] = 0,
+ [MOVE_REVERSAL] = 1,
+ [MOVE_SPITE] = 0,
+ [MOVE_POWDER_SNOW] = 1,
+ [MOVE_PROTECT] = -1,
+ [MOVE_MACH_PUNCH] = 1,
+ [MOVE_SCARY_FACE] = 0,
+ [MOVE_FAINT_ATTACK] = 1,
+ [MOVE_SWEET_KISS] = 0,
+ [MOVE_BELLY_DRUM] = 0,
+ [MOVE_SLUDGE_BOMB] = 1,
+ [MOVE_MUD_SLAP] = 1,
+ [MOVE_OCTAZOOKA] = 1,
+ [MOVE_SPIKES] = 0,
+ [MOVE_ZAP_CANNON] = 1,
+ [MOVE_FORESIGHT] = 0,
+ [MOVE_DESTINY_BOND] = 0,
+ [MOVE_PERISH_SONG] = 0,
+ [MOVE_ICY_WIND] = 1,
+ [MOVE_DETECT] = -1,
+ [MOVE_BONE_RUSH] = 1,
+ [MOVE_LOCK_ON] = 0,
+ [MOVE_OUTRAGE] = 1,
+ [MOVE_SANDSTORM] = 0,
+ [MOVE_GIGA_DRAIN] = 1,
+ [MOVE_ENDURE] = -1,
+ [MOVE_CHARM] = 0,
+ [MOVE_ROLLOUT] = 1,
+ [MOVE_FALSE_SWIPE] = 1,
+ [MOVE_SWAGGER] = 0,
+ [MOVE_MILK_DRINK] = 0,
+ [MOVE_SPARK] = 1,
+ [MOVE_FURY_CUTTER] = 1,
+ [MOVE_STEEL_WING] = 1,
+ [MOVE_MEAN_LOOK] = 0,
+ [MOVE_ATTRACT] = 0,
+ [MOVE_SLEEP_TALK] = 0,
+ [MOVE_HEAL_BELL] = 0,
+ [MOVE_RETURN] = 1,
+ [MOVE_PRESENT] = 1,
+ [MOVE_FRUSTRATION] = 1,
+ [MOVE_SAFEGUARD] = 0,
+ [MOVE_PAIN_SPLIT] = 0,
+ [MOVE_SACRED_FIRE] = 1,
+ [MOVE_MAGNITUDE] = 1,
+ [MOVE_DYNAMIC_PUNCH] = 1,
+ [MOVE_MEGAHORN] = 1,
+ [MOVE_DRAGON_BREATH] = 1,
+ [MOVE_BATON_PASS] = 0,
+ [MOVE_ENCORE] = 0,
+ [MOVE_PURSUIT] = 1,
+ [MOVE_RAPID_SPIN] = 1,
+ [MOVE_SWEET_SCENT] = 0,
+ [MOVE_IRON_TAIL] = 1,
+ [MOVE_METAL_CLAW] = 1,
+ [MOVE_VITAL_THROW] = 1,
+ [MOVE_MORNING_SUN] = 0,
+ [MOVE_SYNTHESIS] = 0,
+ [MOVE_MOONLIGHT] = 0,
+ [MOVE_HIDDEN_POWER] = 1,
+ [MOVE_CROSS_CHOP] = 1,
+ [MOVE_TWISTER] = 1,
+ [MOVE_RAIN_DANCE] = 0,
+ [MOVE_SUNNY_DAY] = 0,
+ [MOVE_CRUNCH] = 1,
+ [MOVE_MIRROR_COAT] = 0,
+ [MOVE_PSYCH_UP] = 0,
+ [MOVE_EXTREME_SPEED] = 1,
+ [MOVE_ANCIENT_POWER] = 1,
+ [MOVE_SHADOW_BALL] = 1,
+ [MOVE_FUTURE_SIGHT] = 1,
+ [MOVE_ROCK_SMASH] = 1,
+ [MOVE_WHIRLPOOL] = 1,
+ [MOVE_BEAT_UP] = 1,
+ [MOVE_FAKE_OUT] = -1,
+ [MOVE_UPROAR] = 1,
+ [MOVE_STOCKPILE] = 0,
+ [MOVE_SPIT_UP] = 1,
+ [MOVE_SWALLOW] = 0,
+ [MOVE_HEAT_WAVE] = 1,
+ [MOVE_HAIL] = 0,
+ [MOVE_TORMENT] = 0,
+ [MOVE_FLATTER] = 0,
+ [MOVE_WILL_O_WISP] = 0,
+ [MOVE_MEMENTO] = 0,
+ [MOVE_FACADE] = 1,
+ [MOVE_FOCUS_PUNCH] = 1,
+ [MOVE_SMELLING_SALT] = 1,
+ [MOVE_FOLLOW_ME] = 0,
+ [MOVE_NATURE_POWER] = 0,
+ [MOVE_CHARGE] = 0,
+ [MOVE_TAUNT] = 0,
+ [MOVE_HELPING_HAND] = 0,
+ [MOVE_TRICK] = 0,
+ [MOVE_ROLE_PLAY] = 0,
+ [MOVE_WISH] = 0,
+ [MOVE_ASSIST] = 0,
+ [MOVE_INGRAIN] = 0,
+ [MOVE_SUPERPOWER] = 1,
+ [MOVE_MAGIC_COAT] = 0,
+ [MOVE_RECYCLE] = 0,
+ [MOVE_REVENGE] = 1,
+ [MOVE_BRICK_BREAK] = 1,
+ [MOVE_YAWN] = 0,
+ [MOVE_KNOCK_OFF] = 1,
+ [MOVE_ENDEAVOR] = 1,
+ [MOVE_ERUPTION] = 1,
+ [MOVE_SKILL_SWAP] = 0,
+ [MOVE_IMPRISON] = 0,
+ [MOVE_REFRESH] = 0,
+ [MOVE_GRUDGE] = 0,
+ [MOVE_SNATCH] = 0,
+ [MOVE_SECRET_POWER] = 1,
+ [MOVE_DIVE] = 1,
+ [MOVE_ARM_THRUST] = 1,
+ [MOVE_CAMOUFLAGE] = 0,
+ [MOVE_TAIL_GLOW] = 0,
+ [MOVE_LUSTER_PURGE] = 1,
+ [MOVE_MIST_BALL] = 1,
+ [MOVE_FEATHER_DANCE] = 0,
+ [MOVE_TEETER_DANCE] = 0,
+ [MOVE_BLAZE_KICK] = 1,
+ [MOVE_MUD_SPORT] = 0,
+ [MOVE_ICE_BALL] = 1,
+ [MOVE_NEEDLE_ARM] = 1,
+ [MOVE_SLACK_OFF] = 0,
+ [MOVE_HYPER_VOICE] = 1,
+ [MOVE_POISON_FANG] = 1,
+ [MOVE_CRUSH_CLAW] = 1,
+ [MOVE_BLAST_BURN] = 1,
+ [MOVE_HYDRO_CANNON] = 1,
+ [MOVE_METEOR_MASH] = 1,
+ [MOVE_ASTONISH] = 1,
+ [MOVE_WEATHER_BALL] = 1,
+ [MOVE_AROMATHERAPY] = 0,
+ [MOVE_FAKE_TEARS] = 0,
+ [MOVE_AIR_CUTTER] = 1,
+ [MOVE_OVERHEAT] = 1,
+ [MOVE_ODOR_SLEUTH] = 0,
+ [MOVE_ROCK_TOMB] = 1,
+ [MOVE_SILVER_WIND] = 1,
+ [MOVE_METAL_SOUND] = 0,
+ [MOVE_GRASS_WHISTLE] = 0,
+ [MOVE_TICKLE] = 0,
+ [MOVE_COSMIC_POWER] = 0,
+ [MOVE_WATER_SPOUT] = 1,
+ [MOVE_SIGNAL_BEAM] = 1,
+ [MOVE_SHADOW_PUNCH] = 1,
+ [MOVE_EXTRASENSORY] = 1,
+ [MOVE_SKY_UPPERCUT] = 1,
+ [MOVE_SAND_TOMB] = 1,
+ [MOVE_SHEER_COLD] = 1,
+ [MOVE_MUDDY_WATER] = 1,
+ [MOVE_BULLET_SEED] = 1,
+ [MOVE_AERIAL_ACE] = 1,
+ [MOVE_ICICLE_SPEAR] = 1,
+ [MOVE_IRON_DEFENSE] = 0,
+ [MOVE_BLOCK] = 0,
+ [MOVE_HOWL] = 0,
+ [MOVE_DRAGON_CLAW] = 1,
+ [MOVE_FRENZY_PLANT] = 1,
+ [MOVE_BULK_UP] = 0,
+ [MOVE_BOUNCE] = 1,
+ [MOVE_MUD_SHOT] = 1,
+ [MOVE_POISON_TAIL] = 1,
+ [MOVE_COVET] = 1,
+ [MOVE_VOLT_TACKLE] = 1,
+ [MOVE_MAGICAL_LEAF] = 1,
+ [MOVE_WATER_SPORT] = 0,
+ [MOVE_CALM_MIND] = 0,
+ [MOVE_LEAF_BLADE] = 1,
+ [MOVE_DRAGON_DANCE] = 0,
+ [MOVE_ROCK_BLAST] = 1,
+ [MOVE_SHOCK_WAVE] = 1,
+ [MOVE_WATER_PULSE] = 1,
+ [MOVE_DOOM_DESIRE] = 1,
+ [MOVE_PSYCHO_BOOST] = 1,
+};
+
+static const struct OamData sOamData_8611F24 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 15,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_8611F2C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_8611F34[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_8611F3C[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_8611F44[] =
+{
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_8611F4C[] =
+{
+ sSpriteAnim_8611F2C,
+ sSpriteAnim_8611F34,
+ sSpriteAnim_8611F3C,
+ sSpriteAnim_8611F44
+};
+
+static const struct SpriteTemplate sSpriteTemplate_JudgmentIcon =
+{
+ .tileTag = 0x3E8,
+ .paletteTag = 0xFFFF,
+ .oam = &sOamData_8611F24,
+ .anims = sSpriteAnimTable_8611F4C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_JudgmentIcon,
+};
+
static const struct CompressedSpriteSheet gUnknown_08611F74[] =
{
{gUnknown_08D854E8, 0x200, 0x3E8},
{0}
};
-static void (* const gUnknown_08611F84[])(void) =
+static void (* const sArenaFunctions[])(void) =
{
sub_81A58B4,
sub_81A5964,
@@ -69,10 +489,10 @@ static const u16 gUnknown_08611FAC[9] =
// code
void CallBattleArenaFunction(void)
{
- gUnknown_08611F84[gSpecialVar_0x8004]();
+ sArenaFunctions[gSpecialVar_0x8004]();
}
-u8 sub_81A5258(u8 *state)
+u8 BattleArena_ShowJudgmentWindow(u8 *state)
{
s32 i;
u8 ret = 0;
@@ -120,7 +540,7 @@ u8 sub_81A5258(u8 *state)
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
for (i = 0; i < 8; i++)
{
- u8 spriteId = CreateSprite(&gUnknown_08611F5C, 0x40 + (i * 0x10), 84, 0);
+ u8 spriteId = CreateSprite(&sSpriteTemplate_JudgmentIcon, 0x40 + (i * 0x10), 84, 0);
StartSpriteAnim(&gSprites[spriteId], 3);
}
ret = 1;
@@ -129,8 +549,8 @@ u8 sub_81A5258(u8 *state)
break;
case 4:
PlaySE(SE_HANTEI1);
- sub_81A5558(80, 40, 0, 0);
- sub_81A5558(160, 40, 0, 1);
+ ShowJudgmentSprite(80, 40, 0, 0);
+ ShowJudgmentSprite(160, 40, 0, 1);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, 21);
(*state)++;
@@ -138,8 +558,8 @@ u8 sub_81A5258(u8 *state)
break;
case 5:
PlaySE(SE_HANTEI1);
- sub_81A5558(80, 56, 1, 0);
- sub_81A5558(160, 56, 1, 1);
+ ShowJudgmentSprite(80, 56, 1, 0);
+ ShowJudgmentSprite(160, 56, 1, 1);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, 21);
(*state)++;
@@ -147,8 +567,8 @@ u8 sub_81A5258(u8 *state)
break;
case 6:
PlaySE(SE_HANTEI1);
- sub_81A5558(80, 72, 2, 0);
- sub_81A5558(160, 72, 2, 1);
+ ShowJudgmentSprite(80, 72, 2, 0);
+ ShowJudgmentSprite(160, 72, 2, 1);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, 21);
(*state)++;
@@ -197,32 +617,32 @@ u8 sub_81A5258(u8 *state)
return ret;
}
-static void sub_81A5558(u8 x, u8 y, u8 arg2, u8 battler)
+static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler)
{
s32 animNum = 0;
- s32 r6 = 0;
- s32 r1 = 0;
- s8 *ptr1 = gBattleStruct->field_298;
- s8 *ptr2 = gBattleStruct->field_29A;
- u16 *ptr3 = gBattleStruct->field_29C;
+ s32 pointsPlayer = 0;
+ s32 pointsOpponent = 0;
+ s8 *mindPoints = gBattleStruct->arenaMindPoints;
+ s8 *skillPoints = gBattleStruct->arenaSkillPoints;
+ u16 *hpAtStart = gBattleStruct->arenaStartHp;
- switch (arg2)
+ switch (category)
{
case 0:
- r6 = ptr1[battler];
- r1 = ptr1[BATTLE_OPPOSITE(battler)];
+ pointsPlayer = mindPoints[battler];
+ pointsOpponent = mindPoints[BATTLE_OPPOSITE(battler)];
break;
case 1:
- r6 = ptr2[battler];
- r1 = ptr2[BATTLE_OPPOSITE(battler)];
+ pointsPlayer = skillPoints[battler];
+ pointsOpponent = skillPoints[BATTLE_OPPOSITE(battler)];
break;
case 2:
- r6 = (gBattleMons[battler].hp * 100) / ptr3[battler];
- r1 = (gBattleMons[BATTLE_OPPOSITE(battler)].hp * 100) / ptr3[BATTLE_OPPOSITE(battler)];
+ pointsPlayer = (gBattleMons[battler].hp * 100) / hpAtStart[battler];
+ pointsOpponent = (gBattleMons[BATTLE_OPPOSITE(battler)].hp * 100) / hpAtStart[BATTLE_OPPOSITE(battler)];
break;
}
- if (r6 > r1)
+ if (pointsPlayer > pointsOpponent)
{
animNum = 2;
if (battler != 0)
@@ -230,7 +650,7 @@ static void sub_81A5558(u8 x, u8 y, u8 arg2, u8 battler)
else
gBattleTextBuff1[0] += 2;
}
- else if (r6 == r1)
+ else if (pointsPlayer == pointsOpponent)
{
animNum = 1;
if (battler != 0)
@@ -243,76 +663,76 @@ static void sub_81A5558(u8 x, u8 y, u8 arg2, u8 battler)
animNum = 0;
}
- r6 = CreateSprite(&gUnknown_08611F5C, x, y, 0);
- StartSpriteAnim(&gSprites[r6], animNum);
+ pointsPlayer = CreateSprite(&sSpriteTemplate_JudgmentIcon, x, y, 0);
+ StartSpriteAnim(&gSprites[pointsPlayer], animNum);
}
-void sub_81A5698(struct Sprite *sprite)
+static void SpriteCb_JudgmentIcon(struct Sprite *sprite)
{
if (gBattleCommunication[0] > 8)
DestroySprite(sprite);
}
-void sub_81A56B4(void)
+void BattleArena_InitPoints(void)
{
- s8 *ptr1 = gBattleStruct->field_298;
- s8 *ptr2 = gBattleStruct->field_29A;
- u16 *ptr3 = gBattleStruct->field_29C;
-
- ptr1[0] = 0;
- ptr1[1] = 0;
- ptr2[0] = 0;
- ptr2[1] = 0;
- ptr3[0] = gBattleMons[0].hp;
- ptr3[1] = gBattleMons[1].hp;
+ s8 *mindPoints = gBattleStruct->arenaMindPoints;
+ s8 *skillPoints = gBattleStruct->arenaSkillPoints;
+ u16 *hpAtStart = gBattleStruct->arenaStartHp;
+
+ mindPoints[0] = 0;
+ mindPoints[1] = 0;
+ skillPoints[0] = 0;
+ skillPoints[1] = 0;
+ hpAtStart[0] = gBattleMons[0].hp;
+ hpAtStart[1] = gBattleMons[1].hp;
}
-void sub_81A56E8(u8 battler)
+void BattleArena_AddMindPoints(u8 battler)
{
- s8 *ptr1 = gBattleStruct->field_298;
+ s8 *mindPoints = gBattleStruct->arenaMindPoints;
- ptr1[battler] += gBattleArenaMoveMindRatings[gCurrentMove];
+ mindPoints[battler] += sMindRatings[gCurrentMove];
}
-void sub_81A5718(u8 battler)
+void BattleArena_AddSkillPoints(u8 battler)
{
- s8 *ptr2 = gBattleStruct->field_29A;
+ s8 *skillPoints = gBattleStruct->arenaSkillPoints;
if (gHitMarker & HITMARKER_OBEYS)
{
- u8 *ptr4 = &gBattleStruct->field_2A2;
- if (*ptr4 & gBitTable[battler])
+ u8 *failedMoveBits = &gBattleStruct->alreadyStatusedMoveAttempt;
+ if (*failedMoveBits & gBitTable[battler])
{
- *ptr4 &= ~(gBitTable[battler]);
- ptr2[battler] -= 2;
+ *failedMoveBits &= ~(gBitTable[battler]);
+ skillPoints[battler] -= 2;
}
else if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
if (!(gMoveResultFlags & MOVE_RESULT_MISSED) || gBattleCommunication[6] != 1)
- ptr2[battler] -= 2;
+ skillPoints[battler] -= 2;
}
else if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE && gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
{
- ptr2[battler] += 1;
+ skillPoints[battler] += 1;
}
else if (gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE)
{
- ptr2[battler] += 2;
+ skillPoints[battler] += 2;
}
else if (gMoveResultFlags & MOVE_RESULT_NOT_VERY_EFFECTIVE)
{
- ptr2[battler] -= 1;
+ skillPoints[battler] -= 1;
}
else if (!gProtectStructs[battler].protected)
{
- ptr2[battler] += 1;
+ skillPoints[battler] += 1;
}
}
}
-void sub_81A57E4(u8 battler, u16 stringId)
+void BattleArena_DeductMindPoints(u8 battler, u16 stringId)
{
- s8 *ptr2 = gBattleStruct->field_29A;
+ s8 *skillPoints = gBattleStruct->arenaSkillPoints;
switch (stringId)
{
@@ -335,18 +755,18 @@ void sub_81A57E4(u8 battler, u16 stringId)
case STRINGID_PKMNANCHORSITSELFWITH:
case STRINGID_PKMNPREVENTSSTATLOSSWITH:
case STRINGID_PKMNSTAYEDAWAKEUSING:
- ptr2[battler] -= 3;
+ skillPoints[battler] -= 3;
break;
}
}
-void sub_81A586C(u8 battler)
+void sub_81A586C(u8 battler) // Unused.
{
- u16 *ptr3 = gBattleStruct->field_29C;
+ u16 *hpAtStart = gBattleStruct->arenaStartHp;
- ptr3[battler] = gBattleMons[battler].hp;
- if (ptr3[BATTLE_OPPOSITE(battler)] > gBattleMons[BATTLE_OPPOSITE(battler)].hp)
- ptr3[BATTLE_OPPOSITE(battler)] = gBattleMons[BATTLE_OPPOSITE(battler)].hp;
+ hpAtStart[battler] = gBattleMons[battler].hp;
+ if (hpAtStart[BATTLE_OPPOSITE(battler)] > gBattleMons[BATTLE_OPPOSITE(battler)].hp)
+ hpAtStart[BATTLE_OPPOSITE(battler)] = gBattleMons[BATTLE_OPPOSITE(battler)].hp;
}
static void sub_81A58B4(void)