summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h115
-rw-r--r--include/battle_2.h44
-rw-r--r--include/battle_anim.h21
-rw-r--r--include/battle_controllers.h161
-rw-r--r--include/battle_interface.h14
-rw-r--r--include/battle_link_817C95C.h11
-rw-r--r--include/battle_script_commands.h4
-rw-r--r--include/data2.h1
-rw-r--r--include/gba/io_reg.h2
-rw-r--r--include/global.h2
-rw-r--r--include/link.h1
-rw-r--r--include/party_menu.h1
-rw-r--r--include/pokeball.h8
-rw-r--r--include/pokemon.h7
-rw-r--r--include/recorded_battle.h2
-rw-r--r--include/trainer_classes.h51
-rw-r--r--include/trainer_front_sprites.h101
17 files changed, 428 insertions, 118 deletions
diff --git a/include/battle.h b/include/battle.h
index 0bdeb4f1e..1916f450a 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -349,7 +349,7 @@ struct UnknownFlags
struct DisableStruct
{
- /*0x00*/ u32 unk0;
+ /*0x00*/ u32 transformedMonPersonality;
/*0x04*/ u16 disabledMove;
/*0x06*/ u16 encoredMove;
/*0x08*/ u8 protectUses;
@@ -637,10 +637,10 @@ struct BattleStruct
u8 field_91;
u8 field_92;
u8 field_93;
- u8 field_94;
- u8 field_95;
- u8 field_96;
- u8 field_97;
+ u8 wallyBattleState;
+ u8 wallyMovesState;
+ u8 wallyWaitFrames;
+ u8 wallyMoveFrames;
u8 mirrorMoves[8]; // ask gamefreak why they declared it that way
u8 field_A0;
u8 field_A1;
@@ -658,7 +658,7 @@ struct BattleStruct
u8 field_B3;
void (*savedCallback)(void);
u16 usedHeldItems[BATTLE_BANKS_COUNT];
- u8 field_C0[4];
+ u8 chosenItem[4]; // why is this an u8?
u8 AI_itemType[2];
u8 AI_itemFlags[2];
u16 choicedMove[BATTLE_BANKS_COUNT];
@@ -773,38 +773,39 @@ extern struct BattleStruct* gBattleStruct;
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
-// battle animations ids
-
-#define B_ANIM_CASTFORM_CHANGE 0x0
-#define B_ANIM_STATS_CHANGE 0x1
-#define B_ANIM_SUBSTITUTE_FADE 0x2
-#define B_ANIM_SUBSTITUTE_APPEAR 0x3
-#define B_ANIM_x4 0x4
-#define B_ANIM_ITEM_KNOCKOFF 0x5
-#define B_ANIM_TURN_TRAP 0x6
-#define B_ANIM_ITEM_EFFECT 0x7
-#define B_ANIM_SMOKEBALL_ESCAPE 0x8
-#define B_ANIM_HANGED_ON 0x9
-#define B_ANIM_RAIN_CONTINUES 0xA
-#define B_ANIM_SUN_CONTINUES 0xB
-#define B_ANIM_SANDSTORM_CONTINUES 0xC
-#define B_ANIM_HAIL_CONTINUES 0xD
-#define B_ANIM_LEECH_SEED_DRAIN 0xE
-#define B_ANIM_MON_HIT 0xF
-#define B_ANIM_ITEM_STEAL 0x10
-#define B_ANIM_SNATCH_MOVE 0x11
-#define B_ANIM_FUTURE_SIGHT_HIT 0x12
-#define B_ANIM_x13 0x13
-#define B_ANIM_x14 0x14
-#define B_ANIM_INGRAIN_HEAL 0x15
-#define B_ANIM_WISH_HEAL 0x16
-#define B_ANIM_x17 0x17
-#define B_ANIM_x18 0x18
-#define B_ANIM_x19 0x19
-#define B_ANIM_x1A 0x1A
-#define B_ANIM_x1B 0x1B
-#define B_ANIM_x1C 0x1C
-#define B_ANIM_x1D 0x1D
+// table ids for general animations
+#define B_ANIM_CASTFORM_CHANGE 0x0
+#define B_ANIM_STATS_CHANGE 0x1
+#define B_ANIM_SUBSTITUTE_FADE 0x2
+#define B_ANIM_SUBSTITUTE_APPEAR 0x3
+#define B_ANIM_x4 0x4
+#define B_ANIM_ITEM_KNOCKOFF 0x5
+#define B_ANIM_TURN_TRAP 0x6
+#define B_ANIM_ITEM_EFFECT 0x7
+#define B_ANIM_SMOKEBALL_ESCAPE 0x8
+#define B_ANIM_HANGED_ON 0x9
+#define B_ANIM_RAIN_CONTINUES 0xA
+#define B_ANIM_SUN_CONTINUES 0xB
+#define B_ANIM_SANDSTORM_CONTINUES 0xC
+#define B_ANIM_HAIL_CONTINUES 0xD
+#define B_ANIM_LEECH_SEED_DRAIN 0xE
+#define B_ANIM_MON_HIT 0xF
+#define B_ANIM_ITEM_STEAL 0x10
+#define B_ANIM_SNATCH_MOVE 0x11
+#define B_ANIM_FUTURE_SIGHT_HIT 0x12
+#define B_ANIM_x13 0x13
+#define B_ANIM_x14 0x14
+#define B_ANIM_INGRAIN_HEAL 0x15
+#define B_ANIM_WISH_HEAL 0x16
+
+// special animations table
+#define B_ANIM_LVL_UP 0x0
+#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
+#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
+#define B_ANIM_BALL_THROW 0x3
+#define B_ANIM_SAFARI_BALL_THROW 0x4
+#define B_ANIM_SUBSTITUTE_TO_MON 0x5
+#define B_ANIM_MON_TO_SUBSTITUTE 0x6
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
@@ -879,6 +880,26 @@ void SetBankEnemyShadowSpriteCallback(u8 bank, u16 species);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank);
void BattleLoadSubstituteSpriteGfx(u8 bank, bool8 arg1);
+void nullsub_24(u16 arg0);
+void nullsub_25(u8 arg0);
+void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute);
+void sub_805D714(struct Sprite *sprite);
+void DecompressTrainerBackPic(u16 backPicId, u8 bank);
+void DecompressTrainerFrontPic(u16 frontPicId, u8 bank);
+void FreeTrainerFrontPicPalette(u16 frontPicId);
+void sub_805D7AC(struct Sprite *sprite);
+bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
+void sub_805EB9C(u8 arg0);
+void sub_805E394(void);
+void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move);
+void DoStatusAnimation(bool8 isStatus2, u32 status);
+void DoSpecialBattleAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId);
+bool8 DoBattleAnimationFromTable(u8 active, u8 atkBank, u8 defBank, u8 tableId, u16 argument);
+void CopyBattleSpriteInvisibility(u8 bank);
+u16 ChooseMoveAndTargetInBattlePalace(void);
+void LoadBattleBarGfx(u8 arg0);
+bool8 mplay_80342A4(u8 bank);
+void sub_805EEE0(u8 bank);
enum
{
@@ -891,7 +912,6 @@ enum
BACK_PIC_WALLY,
BACK_PIC_STEVEN
};
-void LoadBackTrainerBankSpriteGfx(u8 backPicId, u8 bank);
// rom_80A5C6C
u8 GetBankSide(u8 bank);
@@ -917,7 +937,7 @@ struct BattleAnimationInfo
u8 field_5;
u8 field_6;
u8 field_7;
- u8 field_8;
+ u8 ballThrowCaseId;
u8 field_9_x1 : 1;
u8 field_9_x2 : 1;
u8 field_9_x1C : 3;
@@ -932,11 +952,18 @@ struct BattleHealthboxInfo
u8 flag_x2 : 1;
u8 flag_x4 : 1;
u8 flag_x8 : 1;
- u8 flag_x10 : 1;
- u8 field_1;
+ u8 statusAnimActive : 1; // x10
+ u8 animFromTableActive : 1; // x20
+ u8 specialAnimActive : 1; //x40
+ u8 flag_x80 : 1;
+ u8 field_1_x1 : 1;
+ u8 field_1_x1E : 4;
+ u8 field_1_x20 : 1;
+ u8 field_1_x40 : 1;
+ u8 field_1_x80 : 1;
u8 field_2;
u8 field_3;
- u8 field_4;
+ u8 animationState;
u8 field_5;
u8 field_6;
u8 field_7;
@@ -951,7 +978,7 @@ struct BattleBarInfo
u8 healthboxSpriteId;
s32 maxValue;
s32 currentValue;
- s32 field_C;
+ s32 receivedValue;
s32 field_10;
};
diff --git a/include/battle_2.h b/include/battle_2.h
index ceec2aa00..ee61efd9b 100644
--- a/include/battle_2.h
+++ b/include/battle_2.h
@@ -2,23 +2,45 @@
#define GUARD_BATTLE_2_H
void CB2_InitBattle(void);
-void CB2_QuitRecordedBattle(void);
-void FaintClearSetData(void);
-void SwitchInClearSetData(void);
-void sub_803BDA0(u8 bank);
void BattleMainCB2(void);
+void CB2_QuitRecordedBattle(void);
+void sub_8038528(struct Sprite* sprite);
+void sub_8038A04(void); // unused
void VBlankCB_Battle(void);
-bool8 TryRunFromBattle(u8 bank);
-u8 IsRunningFromBattleImpossible(void);
-u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
-void SwapTurnOrder(u8 id1, u8 id2);
-void BattleTurnPassed(void);
-void RunBattleScriptCommands_PopCallbacksStack(void);
-void RunBattleScriptCommands(void);
+void nullsub_17(void);
+void sub_8038B74(struct Sprite *sprite);
+void sub_8038D64(void);
+u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
+void oac_poke_opponent(struct Sprite *sprite);
+void SpriteCallbackDummy_2(struct Sprite *sprite);
+void sub_8039934(struct Sprite *sprite);
+void sub_8039AD8(struct Sprite *sprite);
+void sub_8039B2C(struct Sprite *sprite);
+void sub_8039B58(struct Sprite *sprite);
+void sub_8039BB4(struct Sprite *sprite);
+void sub_80105DC(struct Sprite *sprite);
+void sub_8039C00(struct Sprite *sprite);
+void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
+void dp11b_obj_free(u8 bank, bool8 b);
+void sub_8039E44(struct Sprite *sprite);
+void sub_8039E60(struct Sprite *sprite);
+void sub_8039E84(struct Sprite *sprite);
void sub_8039E9C(struct Sprite *sprite);
void nullsub_20(void);
void BeginBattleIntro(void);
+void SwitchInClearSetData(void);
+void FaintClearSetData(void);
+void sub_803B3AC(void); // unused
+void sub_803B598(void); // unused
+void BattleTurnPassed(void);
+u8 IsRunningFromBattleImpossible(void);
+void sub_803BDA0(u8 bank);
+void SwapTurnOrder(u8 id1, u8 id2);
+u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
+void RunBattleScriptCommands_PopCallbacksStack(void);
+void RunBattleScriptCommands(void);
+bool8 TryRunFromBattle(u8 bank);
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 5282916c0..e912af6b1 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -60,7 +60,7 @@ extern u8 gUnknown_02038440;
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
-void DoBattleAnim(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
+void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
@@ -75,5 +75,24 @@ s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
// battle_anim_80FE840.s
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
void sub_8118FBC(u8 arg0, u8 arg1, u8 arg2, u8 bankIdentity, u8 arg4, void *arg5, u16 *arg6, u16 arg7);
+void HandleIntroSlide(u8 terrainId);
+
+// battle_anim_80A5C6C.s
+void sub_80A6EEC(struct Sprite *sprite);
+void sub_80A8278(void);
+void sub_80A6B30(struct UnknownAnimStruct2*);
+void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
+u8 sub_80A82E4(u8 bank);
+u8 sub_80A5C6C(u8 bank, u8 attributeId);
+bool8 IsBankSpritePresent(u8 bank);
+void sub_80A6C68(u8 arg0);
+u8 GetAnimBankSpriteId(u8 wantedBank);
+bool8 IsDoubleBattle(void);
+u8 sub_80A6D94(void);
+u8 sub_80A8364(u8);
+void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
+void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
+u8 sub_80A6138(u8 bank);
+u8 sub_80A82E4(u8 bank);
#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 4bc6b7b84..973a723e0 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -1,16 +1,69 @@
#ifndef GUARD_BATTLE_CONTROLLERS_H
#define GUARD_BATTLE_CONTROLLERS_H
-#define REQUEST_ALL_BATTLE 0x0
-#define REQUEST_SPECIES_BATTLE 0x1
-#define REQUEST_HELDITEM_BATTLE 0x2
-#define REQUEST_MOVES_PP_BATTLE 0x3
-#define REQUEST_PPMOVE1_BATTLE 0x9
-#define REQUEST_PPMOVE2_BATTLE 0xA
-#define REQUEST_PPMOVE3_BATTLE 0xB
-#define REQUEST_PPMOVE4_BATTLE 0xC
-#define REQUEST_STATUS_BATTLE 0x28
-#define REQUEST_HP_BATTLE 0x2A
+enum
+{
+ REQUEST_ALL_BATTLE,
+ REQUEST_SPECIES_BATTLE,
+ REQUEST_HELDITEM_BATTLE,
+ REQUEST_MOVES_PP_BATTLE,
+ REQUEST_MOVE1_BATTLE,
+ REQUEST_MOVE2_BATTLE,
+ REQUEST_MOVE3_BATTLE,
+ REQUEST_MOVE4_BATTLE,
+ REQUEST_PP_DATA_BATTLE,
+ REQUEST_PPMOVE1_BATTLE,
+ REQUEST_PPMOVE2_BATTLE,
+ REQUEST_PPMOVE3_BATTLE,
+ REQUEST_PPMOVE4_BATTLE,
+ REQUEST_UNUSED_13_BATTLE,
+ REQUEST_UNUSED_14_BATTLE,
+ REQUEST_UNUSED_15_BATTLE,
+ REQUEST_UNUSED_16_BATTLE,
+ REQUEST_OTID_BATTLE,
+ REQUEST_EXP_BATTLE,
+ REQUEST_HP_EV_BATTLE,
+ REQUEST_ATK_EV_BATTLE,
+ REQUEST_DEF_EV_BATTLE,
+ REQUEST_SPEED_EV_BATTLE,
+ REQUEST_SPATK_EV_BATTLE,
+ REQUEST_SPDEF_EV_BATTLE,
+ REQUEST_FRIENDSHIP_BATTLE,
+ REQUEST_POKERUS_BATTLE,
+ REQUEST_MET_LOCATION_BATTLE,
+ REQUEST_MET_LEVEL_BATTLE,
+ REQUEST_MET_GAME_BATTLE,
+ REQUEST_POKEBALL_BATTLE,
+ REQUEST_ALL_IVS_BATTLE,
+ REQUEST_HP_IV_BATTLE,
+ REQUEST_ATK_IV_BATTLE,
+ REQUEST_DEF_IV_BATTLE,
+ REQUEST_SPEED_IV_BATTLE,
+ REQUEST_SPATK_IV_BATTLE,
+ REQUEST_SPDEF_IV_BATTLE,
+ REQUEST_PERSONALITY_BATTLE,
+ REQUEST_CHECKSUM_BATTLE,
+ REQUEST_STATUS_BATTLE,
+ REQUEST_LEVEL_BATTLE,
+ REQUEST_HP_BATTLE,
+ REQUEST_MAX_HP_BATTLE,
+ REQUEST_ATK_BATTLE,
+ REQUEST_DEF_BATTLE,
+ REQUEST_SPEED_BATTLE,
+ REQUEST_SPATK_BATTLE,
+ REQUEST_SPDEF_BATTLE,
+ REQUEST_COOL_BATTLE,
+ REQUEST_BEAUTY_BATTLE,
+ REQUEST_CUTE_BATTLE,
+ REQUEST_SMART_BATTLE,
+ REQUEST_TOUGH_BATTLE,
+ REQUEST_SHEEN_BATTLE,
+ REQUEST_COOL_RIBBON_BATTLE,
+ REQUEST_BEAUTY_RIBBON_BATTLE,
+ REQUEST_CUTE_RIBBON_BATTLE,
+ REQUEST_SMART_RIBBON_BATTLE,
+ REQUEST_TOUGH_RIBBON_BATTLE,
+};
#define RESET_ACTION_MOVE_SELECTION 0
#define RESET_ACTION_SELECTION 1
@@ -23,6 +76,16 @@
#define BALL_3_SHAKES_SUCCESS 4
#define BALL_TRAINER_BLOCK 5
+#define RET_VALUE_LEVELLED_UP 11
+
+#define INSTANT_HP_BAR_DROP 32767
+
+struct UnusedControllerStruct
+{
+ u8 field_0 : 7;
+ u8 flag_x80 : 1;
+};
+
struct HpAndStatus
{
u16 hp;
@@ -31,7 +94,7 @@ struct HpAndStatus
struct MovePpInfo
{
- u16 move[4];
+ u16 moves[4];
u8 pp[4];
u8 ppBonuses;
};
@@ -59,15 +122,15 @@ enum
CONTROLLER_TRAINERSLIDE,
CONTROLLER_TRAINERSLIDEBACK,
CONTROLLER_FAINTANIMATION,
- CONTROLLER_11,
- CONTROLLER_12,
- CONTROLLER_BALLTHROW,
+ CONTROLLER_PALETTEFADE,
+ CONTROLLER_SUCCESSBALLTHROWANIM,
+ CONTROLLER_BALLTHROWANIM,
CONTROLLER_PAUSE,
CONTROLLER_MOVEANIMATION,
CONTROLLER_PRINTSTRING,
CONTROLLER_PRINTSTRINGPLAYERONLY,
CONTROLLER_CHOOSEACTION,
- CONTROLLER_19,
+ CONTROLLER_UNKNOWNYESNOBOX,
CONTROLLER_CHOOSEMOVE,
CONTROLLER_OPENBAG,
CONTROLLER_CHOOSEPOKEMON,
@@ -81,10 +144,10 @@ enum
CONTROLLER_DMA3TRANSFER,
CONTROLLER_31,
CONTROLLER_32,
- CONTROLLER_33,
- CONTROLLER_34,
- CONTROLLER_35,
- CONTROLLER_36,
+ CONTROLLER_TWORETURNVALUES,
+ CONTROLLER_CHOSENMONRETURNVALUE,
+ CONTROLLER_ONERETURNVALUE,
+ CONTROLLER_ONERETURNVALUE_DUPLICATE,
CONTROLLER_37,
CONTROLLER_38,
CONTROLLER_39,
@@ -104,10 +167,11 @@ enum
CONTROLLER_LINKSTANDBYMSG,
CONTROLLER_RESETACTIONMOVESELECTION,
CONTROLLER_55,
- CONTROLLER_56
+ /*new controllers should go here*/
+ CONTROLLER_TERMINATOR_NOP,
+ CONTROLLER_CMDS_COUNT
};
-#define LAST_CONTROLLER_CMD_ID CONTROLLER_56 + 1
// general functions
void HandleLinkBattleSetup(void);
@@ -117,9 +181,9 @@ void sub_8033648(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
// emitters
-void EmitGetMonData(u8 bufferId, u8 arg1, u8 arg2);
+void EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck);
void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
-void EmitSetMonData(u8 bufferId, u8 request, u8 c, u8 bytes, void *data);
+void EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
void EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused
void EmitLoadMonSprite(u8 bufferId);
void EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
@@ -128,17 +192,17 @@ void EmitDrawTrainerPic(u8 bufferId);
void EmitTrainerSlide(u8 bufferId);
void EmitTrainerSlideBack(u8 bufferId);
void EmitFaintAnimation(u8 bufferId);
-void EmitCmd11(u8 bufferId); // unused
-void EmitCmd12(u8 bufferId); // unused
-void EmitBallThrow(u8 bufferId, u8 caseId);
+void EmitPaletteFade(u8 bufferId); // unused
+void EmitSuccessBallThrowAnim(u8 bufferId); // unused
+void EmitBallThrowAnim(u8 bufferId, u8 caseId);
void EmitPause(u8 bufferId, u8 toWait, void *data); // unused
void EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
void EmitPrintString(u8 bufferId, u16 stringId);
void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringId);
void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
-void EmitCmd19(u8 bufferId);
+void EmitUnknownYesNoBox(u8 bufferId);
void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
-void EmitOpenBag(u8 bufferId, u8* arg1);
+void EmitChooseItem(u8 bufferId, u8* arg1);
void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
void EmitCmd23(u8 bufferId); // unused
void EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
@@ -150,14 +214,14 @@ void EmitDataTransfer(u8 bufferId, u16 size, void *data);
void EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
void EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused
void EmitCmd32(u8 bufferId, u16 size, void *c); // unused
-void EmitCmd33(u8 bufferId, u8 arg1, u16 arg2);
-void EmitCmd34(u8 bufferId, u8 b, u8 *c);
-void EmitCmd35(u8 bufferId, u16 b);
-void EmitCmd36(u8 bufferId, u16 b);
-void EmitCmd37(u8 bufferId);
-void EmitCmd38(u8 bufferId, u8 b);
-void EmitCmd39(u8 bufferId);
-void EmitCmd40(u8 bufferId);
+void EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
+void EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
+void EmitOneReturnValue(u8 bufferId, u16 arg1);
+void EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
+void EmitCmd37(u8 bufferId); // unused
+void EmitCmd38(u8 bufferId, u8 b); // unused
+void EmitCmd39(u8 bufferId); // unused
+void EmitCmd40(u8 bufferId); // unused
void EmitHitAnimation(u8 bufferId);
void EmitCmd42(u8 bufferId);
void EmitEffectivenessSound(u8 bufferId, u16 songId);
@@ -175,33 +239,40 @@ void EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void EmitCmd55(u8 bufferId, u8 arg1);
// player controller
-void SetBankFuncToPlayerBufferRunCommand(void);
+void SetControllerToPlayer(void);
void nullsub_21(void);
+void PlayerHandleGetRawMonData(void);
+void sub_80587B0(void);
+void sub_805CC00(struct Sprite *sprite);
+void SetCB2ToReshowScreenAfterMenu(void);
+void SetCB2ToReshowScreenAfterMenu2(void);
+void c3_0802FDF4(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
+void InitMoveSelectionsVarsAndStrings(void);
// recorded player controller
-void SetBankFuncToRecordedPlayerBufferRunCommand(void);
+void SetControllerToRecordedPlayer(void);
// opponent controller
-void SetBankFuncToOpponentBufferRunCommand(void);
+void SetControllerToOpponent(void);
// player partner controller
-void SetBankFuncToPlayerPartnerBufferRunCommand(void);
+void SetControllerToPlayerPartner(void);
// safari controller
-void SetBankFuncToSafariBufferRunCommand(void);
+void SetControllerToSafari(void);
// wally controller
-void SetBankFuncToWallyBufferRunCommand(void);
+void SetControllerToWally(void);
// recorded opponent controller
-void SetBankFuncToRecordedOpponentBufferRunCommand(void);
+void SetControllerToRecordedOpponent(void);
// link opponent
-void SetBankFuncToLinkOpponentBufferRunCommand(void);
+void SetControllerToLinkOpponent(void);
// link partner
-void SetBankFuncToLinkPartnerBufferRunCommand(void);
+void SetControllerToLinkPartner(void);
#endif // GUARD_BATTLE_CONTROLLERS_H
diff --git a/include/battle_interface.h b/include/battle_interface.h
index 05ea1c021..aad30f7b3 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -3,6 +3,18 @@
#include "battle_controllers.h"
+enum
+{
+ HP_CURRENT,
+ HP_MAX
+};
+
+enum
+{
+ HEALTH_BAR,
+ EXP_BAR
+};
+
#define TAG_HEALTHBOX_PLAYER1_TILE 0xD6FF
#define TAG_HEALTHBOX_PLAYER2_TILE 0xD700
#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701
@@ -35,7 +47,7 @@ enum
u8 CreateBankHealthboxSprites(u8 bank);
u8 CreateSafariPlayerHealthboxSprites(void);
-void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 field_C);
+void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId);
diff --git a/include/battle_link_817C95C.h b/include/battle_link_817C95C.h
new file mode 100644
index 000000000..815c1f058
--- /dev/null
+++ b/include/battle_link_817C95C.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_BATTLE_LINK_817C95C_H
+#define GUARD_BATTLE_LINK_817C95C_H
+
+void sub_817C95C(u16 stringId);
+void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
+void sub_817E32C(u8 animationId);
+void sub_817E3F4(void);
+void sub_817F2A8(void);
+u8 GetBankMoveSlotId(u8 bank, u16 move);
+
+#endif // GUARD_BATTLE_LINK_817C95C_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 9684425fe..a466abc04 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -25,6 +25,7 @@
#define VARIOUS_GET_MOVE_TARGET 3
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_EMIT_YESNOBOX 13
#define VARIOUS_WAIT_CRY 18
#define VARIOUS_RETURN_OPPONENT_MON1 19
#define VARIOUS_RETURN_OPPONENT_MON2 20
@@ -41,6 +42,9 @@
#define STAT_CHANGE_WORKED 0
#define STAT_CHANGE_DIDNT_WORK 1
+#define WINDOW_CLEAR 0x1
+#define WINDOW_x80 0x80
+
void AI_CalcDmg(u8 bankAtk, u8 bankDef);
u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
diff --git a/include/data2.h b/include/data2.h
index db9532811..be0f33ab8 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -10,6 +10,7 @@ struct MonCoords
};
extern struct MonCoords gTrainerBackPicCoords[];
+extern struct MonCoords gTrainerFrontPicCoords[];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const u8 gMoveNames[][13];
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 83a2a123b..f86f2434c 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -628,6 +628,8 @@
#define KEY_OR_INTR 0x0000
#define KEY_AND_INTR 0x8000
+#define DPAD_ANY ((DPAD_RIGHT | DPAD_LEFT | DPAD_UP | DPAD_DOWN))
+
// interrupt flags
#define INTR_FLAG_VBLANK (1 << 0)
#define INTR_FLAG_HBLANK (1 << 1)
diff --git a/include/global.h b/include/global.h
index 8860b4ae3..2e3a106eb 100644
--- a/include/global.h
+++ b/include/global.h
@@ -41,6 +41,8 @@ enum
VERSION_SAPPHIRE = 1,
VERSION_RUBY = 2,
VERSION_EMERALD = 3,
+ VERSION_FIRE_RED = 4,
+ VERSION_LEAF_GREEN = 5,
};
enum LanguageId {
diff --git a/include/link.h b/include/link.h
index b8835ce04..7a6563144 100644
--- a/include/link.h
+++ b/include/link.h
@@ -191,5 +191,6 @@ void sub_800A620(void);
void sub_8011BD0(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
+void sub_800AC34(void);
#endif // GUARD_LINK_H
diff --git a/include/party_menu.h b/include/party_menu.h
index 175aba639..c93f63a6d 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -2,5 +2,6 @@
#define GUARD_PARTY_MENU_H
bool8 pokemon_has_move(struct Pokemon *, u16);
+void DoWallyTutorialBagMenu(void);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokeball.h b/include/pokeball.h
new file mode 100644
index 000000000..76f084465
--- /dev/null
+++ b/include/pokeball.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_POKEBALL_H
+#define GUARD_POKEBALL_H
+
+u8 sub_80753E8(u16, u8);
+void sub_8076918(u8 bank);
+void DoHitAnimHealthboxEffect(u8 bank);
+
+#endif // GUARD_POKEBALL_H
diff --git a/include/pokemon.h b/include/pokemon.h
index c1c61d241..0c7d6ac40 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -629,7 +629,7 @@ bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
bool8 IsTradedMon(struct Pokemon *mon);
void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality);
-s32 sub_806D864(u16 a1);
+s32 GetBankMultiplayerId(u16 a1);
bool16 sub_806D82C(u8 id);
u16 MonTryLearningNewMove(struct Pokemon* mon, bool8);
void sub_8068AA4(void); // sets stats for deoxys
@@ -643,6 +643,11 @@ void PartySpreadPokerus(struct Pokemon *party);
s8 GetMonFlavourRelation(struct Pokemon *mon, u8 a2);
s8 GetFlavourRelationByPersonality(u32 personality, u8 a2);
u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
+u8 GetDefaultMoveTarget(u8 atkBank);
+u16 PlayerGenderToFrontTrainerPicId(u8 playerGender);
+void sub_806A1C0(u16 arg0, u8 bankIdentity);
+void sub_806A12C(u16 trainerSpriteId, u8 bankIdentity);
+u8 GetSecretBaseTrainerPicIndex(void);
#include "sprite.h"
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index 6b80e220f..ae2ed1a79 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -6,6 +6,7 @@ extern u32 gRecordedBattleRngSeed;
void sub_8184DA4(u8 arg0);
void sub_8185F84(void);
void sub_8184E58(void);
+u8 RecordedBattle_ReadBankAction(u8 bank);
void RecordedBattle_SetBankAction(u8 bank, u8 action);
void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear);
void sub_8185F90(u16 arg0);
@@ -18,5 +19,6 @@ void sub_8185FD0(void);
void sub_8186444(void);
void sub_8185EB8(void);
u8 sub_81850DC(u8 *arg0);
+u8 sub_8185F40(void);
#endif // GUARD_RECORDED_BATTLE_H
diff --git a/include/trainer_classes.h b/include/trainer_classes.h
index 3f13dfc37..e5e26b359 100644
--- a/include/trainer_classes.h
+++ b/include/trainer_classes.h
@@ -3,16 +3,16 @@
enum
{
- CLASS_PKMN_TRAINER0, //0
- CLASS_PKMN_TRAINER1, //1
- CLASS_HIKER, //2
- CLASS_TEAM_AQUA, //3
- CLASS_PKMN_BREEDER, //4
- CLASS_COOLTRAINER, //5
- CLASS_BIRDKEEPER, //6
- CLASS_COLLECTOR, //7
- CLASS_SWIMMER_MALE, //8
- CLASS_TEAM_MAGMA, //9
+ CLASS_PKMN_TRAINER0, // 0
+ CLASS_PKMN_TRAINER1, // 1
+ CLASS_HIKER, // 2
+ CLASS_TEAM_AQUA, // 3
+ CLASS_PKMN_BREEDER, // 4
+ CLASS_COOLTRAINER, // 5
+ CLASS_BIRDKEEPER, // 6
+ CLASS_COLLECTOR, // 7
+ CLASS_SWIMMER_MALE, // 8
+ CLASS_TEAM_MAGMA, // 9
CLASS_EXPERT, // 0xA
CLASS_AQUA_ADMIN, // 0xB
CLASS_BLACK_BELT, // 0xC
@@ -36,11 +36,32 @@ enum
CLASS_GENTLEMAN, // 0x1E
CLASS_ELITE_FOUR, // 0x1F
CLASS_LEADER, // 0x20
- CLASS_CHAMPION = 0x26,
- CLASS_MAGMA_ADMIN = 0x31,
- CLASS_PKMN_TRAINER_RIVAL = 0x32,
- CLASS_MAGMA_LEADER = 0x35,
- CLASS_SALON_MAIDEN = 0x3A,
+ CLASS_SCHOOL_KID, // 0x21
+ CLASS_SCHOOL_SR_JR, // 0x22
+ CLASS_WINSTRATE, // 0x23
+ CLASS_POKE_FAN, // 0x24
+ CLASS_YOUNGSTER, // 0x25
+ CLASS_CHAMPION, // 0x26
+ CLASS_FISHERMAN, // 0x27
+ CLASS_TRIATHLETE, // 0x28
+ CLASS_DRAGON_TAMER, // 0x29
+ CLASS_NINJA_BOY, // 0x2A
+ CLASS_BATTLE_GIRL, // 0x2B
+ CLASS_PARASOL_LADY, // 0x2C
+ CLASS_SWIMMER_FEMALE, // 0x2D
+ CLASS_TWINS, // 0x2E
+ CLASS_SAILOR, // 0x2F
+ CLASS_COOLTRAINER_2, // 0x30
+ CLASS_MAGMA_ADMIN, // 0x31
+ CLASS_PKMN_TRAINER_RIVAL, // 0x32
+ CLASS_BUG_CATCHER, // 0x33
+ CLASS_PKMN_RANGER, // 0x34
+ CLASS_MAGMA_LEADER, // 0x35
+ CLASS_LASS, // 0x36
+ CLASS_YOUNG_COUPLE, // 0x37
+ CLASS_OLD_COUPLE, // 0x38
+ CLASS_SIS_AND_BRO, // 0x39
+ CLASS_SALON_MAIDEN, // 0x3A
CLASS_DOME_ACE, // 0x3B
CLASS_PALACE_MAVEN, // 0x3C
CLASS_ARENA_TYCOON, // 0x3D
diff --git a/include/trainer_front_sprites.h b/include/trainer_front_sprites.h
new file mode 100644
index 000000000..3259bec88
--- /dev/null
+++ b/include/trainer_front_sprites.h
@@ -0,0 +1,101 @@
+#ifndef GUARD_TRAINER_FRONT_SPRITES_H
+#define GUARD_TRAINER_FRONT_SPRITES_H
+
+enum
+{
+ TRAINER_FRONT_PIC_HIKER,
+ TRAINER_FRONT_PIC_AQUA_GRUNT_M,
+ TRAINER_FRONT_PIC_PKMN_BREEDER_F,
+ TRAINER_FRONT_PIC_COOLTRAINER_M,
+ TRAINER_FRONT_PIC_BIRD_KEEPER,
+ TRAINER_FRONT_PIC_COLLECTOR,
+ TRAINER_FRONT_PIC_AQUA_GRUNT_F,
+ TRAINER_FRONT_PIC_SWIMMER_M,
+ TRAINER_FRONT_PIC_MAGMA_GRUNT_M,
+ TRAINER_FRONT_PIC_EXPERT_M,
+ TRAINER_FRONT_PIC_AQUA_ADMIN_M,
+ TRAINER_FRONT_PIC_BLACK_BELT,
+ TRAINER_FRONT_PIC_AQUA_ADMIN_F,
+ TRAINER_FRONT_PIC_AQUA_LEADER,
+ TRAINER_FRONT_PIC_HEX_MANIAC,
+ TRAINER_FRONT_PIC_AROMA_LADY,
+ TRAINER_FRONT_PIC_RUIN_MANIAC,
+ TRAINER_FRONT_PIC_INTERVIEWER,
+ TRAINER_FRONT_PIC_TUBER_F,
+ TRAINER_FRONT_PIC_TUBER_M,
+ TRAINER_FRONT_PIC_COOLTRAINER_F,
+ TRAINER_FRONT_PIC_LADY,
+ TRAINER_FRONT_PIC_BEAUTY,
+ TRAINER_FRONT_PIC_RICH_BOY,
+ TRAINER_FRONT_PIC_EXPERT_F,
+ TRAINER_FRONT_PIC_POKE_MANIAC,
+ TRAINER_FRONT_PIC_MAGMA_GRUNT_F,
+ TRAINER_FRONT_PIC_GUITARIST,
+ TRAINER_FRONT_PIC_KINDLER,
+ TRAINER_FRONT_PIC_CAMPER,
+ TRAINER_FRONT_PIC_PICNICKER,
+ TRAINER_FRONT_PIC_BUG_MANIAC,
+ TRAINER_FRONT_PIC_PKMN_BREEDER_M,
+ TRAINER_FRONT_PIC_PSYCHIC_M,
+ TRAINER_FRONT_PIC_PSYCHIC_F,
+ TRAINER_FRONT_PIC_GENTLEMAN,
+ TRAINER_FRONT_PIC_SIDNEY,
+ TRAINER_FRONT_PIC_PHOEBE,
+ TRAINER_FRONT_PIC_GLACIA,
+ TRAINER_FRONT_PIC_DRAKE,
+ TRAINER_FRONT_PIC_ROXANNE,
+ TRAINER_FRONT_PIC_BRAWLY,
+ TRAINER_FRONT_PIC_WATTSON,
+ TRAINER_FRONT_PIC_FLANNERY,
+ TRAINER_FRONT_PIC_NORMAN,
+ TRAINER_FRONT_PIC_WINONA,
+ TRAINER_FRONT_PIC_TATE_LIZA,
+ TRAINER_FRONT_PIC_JUAN,
+ TRAINER_FRONT_PIC_SCHOOL_KID_M,
+ TRAINER_FRONT_PIC_SCHOOL_KID_F,
+ TRAINER_FRONT_PIC_SR_JR,
+ TRAINER_FRONT_PIC_POKÉFAN_M,
+ TRAINER_FRONT_PIC_POKÉFAN_F,
+ TRAINER_FRONT_PIC_YOUNGSTER,
+ TRAINER_FRONT_PIC_WALLACE,
+ TRAINER_FRONT_PIC_FISHERMAN,
+ TRAINER_FRONT_PIC_TRIATHLETE_BIKER_M,
+ TRAINER_FRONT_PIC_TRIATHLETE_BIKER_F,
+ TRAINER_FRONT_PIC_TRIATHLETE_JOGGER_M,
+ TRAINER_FRONT_PIC_TRIATHLETE_JOGGER_F,
+ TRAINER_FRONT_PIC_TRIATHLETE_SWIMMER_M,
+ TRAINER_FRONT_PIC_TRIATHLETE_SWIMMER_F,
+ TRAINER_FRONT_PIC_DRAGON_TAMER,
+ TRAINER_FRONT_PIC_NINJA_BOY,
+ TRAINER_FRONT_PIC_BATTLE_GIRL,
+ TRAINER_FRONT_PIC_PARASOL_LADY,
+ TRAINER_FRONT_PIC_SWIMMER_F,
+ TRAINER_FRONT_PIC_TWINS,
+ TRAINER_FRONT_PIC_SAILOR,
+ TRAINER_FRONT_PIC_MAGMA_ADMIN_M,
+ TRAINER_FRONT_PIC_WALLY,
+ TRAINER_FRONT_PIC_BRENDAN_E,
+ TRAINER_FRONT_PIC_MAY_E,
+ TRAINER_FRONT_PIC_BUG_CATCHER,
+ TRAINER_FRONT_PIC_PKMN_RANGER_M,
+ TRAINER_FRONT_PIC_PKMN_RANGER_F,
+ TRAINER_FRONT_PIC_MAGMA_LEADER,
+ TRAINER_FRONT_PIC_LASS,
+ TRAINER_FRONT_PIC_YOUNG_COUPLE,
+ TRAINER_FRONT_PIC_OLD_COUPLE,
+ TRAINER_FRONT_PIC_SIS_AND_BRO,
+ TRAINER_FRONT_PIC_STEVEN,
+ TRAINER_FRONT_PIC_ANABEL,
+ TRAINER_FRONT_PIC_TUCKER,
+ TRAINER_FRONT_PIC_SPENSER,
+ TRAINER_FRONT_PIC_GRETA,
+ TRAINER_FRONT_PIC_NOLAND,
+ TRAINER_FRONT_PIC_LUCY,
+ TRAINER_FRONT_PIC_BRANDON,
+ TRAINER_FRONT_PIC_RED,
+ TRAINER_FRONT_PIC_LEAF,
+ TRAINER_FRONT_PIC_BRENDAN_RS,
+ TRAINER_FRONT_PIC_MAY_RS
+};
+
+#endif // GUARD_TRAINER_FRONT_SPRITES_H