summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h41
-rw-r--r--include/battle_ai.h1
-rw-r--r--include/battle_message.h137
-rw-r--r--include/battle_util.h29
-rw-r--r--include/cable_car_util.h13
-rw-r--r--include/constants/battle_constants.h74
-rw-r--r--include/contest.h167
-rwxr-xr-xinclude/ewram.h10
-rw-r--r--include/field_weather.h4
-rw-r--r--include/gba/macro.h34
-rw-r--r--include/global.h7
-rw-r--r--include/graphics.h7
-rw-r--r--include/pokemon.h14
-rw-r--r--include/roamer.h2
-rw-r--r--include/rom_8077ABC.h6
-rw-r--r--include/trainer.h270
-rw-r--r--include/tv.h1
17 files changed, 644 insertions, 173 deletions
diff --git a/include/battle.h b/include/battle.h
index 0881cf82c..27ed57045 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -227,10 +227,8 @@ struct BattleStruct /* 0x2000000 */
/*0x160D5*/ u8 unk160D5;
/*0x160D6*/ u8 unk160D6;
/*0x160D7*/ u8 unk160D7;
- /*0x160D8*/ u8 unk160D8;
- /*0x160D9*/ u8 unk160D9;
- /*0x160DA*/ u8 unk160DA;
- /*0x160DB*/ u8 unk160DB;
+ /*0x160D8*/ u8 unk160D8[2];
+ /*0x160DA*/ u8 unk160DA[2];
/*0x160DC*/ u8 unk160DC;
/*0x160DD*/ u8 intimidateBank;
/*0x160DE*/ u8 unk160DE;
@@ -368,16 +366,6 @@ struct Struct2017100
u32 arr[4];
};
-struct Struct2019348
-{
- u16 unk0;
- u16 unk2;
- u8 unk4;
- u32 unk8;
- u32 unkC;
- u32 unk10;
-};
-
struct Struct2017800
{
u8 invisible:1;
@@ -511,7 +499,7 @@ extern struct DisableStruct gDisableStructs[MAX_BANKS_BATTLE];
extern struct BattleResults gBattleResults;
extern struct ProtectStruct gProtectStructs[MAX_BANKS_BATTLE];
extern struct SpecialStatus gSpecialStatuses[MAX_BANKS_BATTLE];
-extern struct sideTimer gSideTimer[2];
+extern struct sideTimer gSideTimers[2];
extern struct WishFutureKnock gWishFutureKnock;
extern struct AI_ThinkingStruct gAIThinkingSpace;
extern struct Struct20238C8 gUnknown_020238C8;
@@ -561,7 +549,7 @@ extern u8 gBattleTextBuff1[];
//function declarations of buffer emits
void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0
void Emitcmd1(u8 a, u8 b, u8 c); //0x1
-void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
+void EmitSetMonData(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
void EmitSendOutPoke(u8 a, u8 b, u8 c); //0x5
void EmitReturnPokeToBall(u8 a, u8 b); //0x6
void EmitTrainerSlide(u8 a); //0x8
@@ -616,7 +604,7 @@ void InitBattle(void);
void sub_800EC9C(void);
void sub_800F104(void);
void sub_800F298(void);
-void sub_800F808(void);
+void BattleMainCB2(void);
void sub_800F838(struct Sprite *);
u8 CreateNPCTrainerParty(struct Pokemon *, u16);
void sub_800FCFC(void);
@@ -648,32 +636,28 @@ void sub_8011970(void);
void sub_80119B4(void);
void BattleBeginFirstTurn(void);
void BattleTurnPassed(void);
+void RunBattleScriptCommands_PopCallbacksStack(void);
+void RunBattleScriptCommands(void);
+bool8 TryRunFromBattle(u8 bank);
// asm/battle_2.o
void sub_8012324(void);
-void sub_8012FBC(u8, u8);
+void SwapTurnOrder(u8, u8);
u8 GetWhoStrikesFirst(u8, u8, u8);
-void TurnValuesCleanUp(u8);
-void SpecialStatusesClear(void);
-void sub_80138F0(void);
-void sub_80155A4();
-void CancelMultiTurnMoves(u8 bank);
-void PrepareStringBattle();
-void sub_80156DC();
-void sub_80157C4(u8 index);
// asm/battle_3.o
u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check);
u8 UpdateTurnCounters(void);
u8 TurnBasedEffects(void);
-u8 sub_80170DC();
-u8 sub_80173A4();
+u8 HandleFaintedMonActions();
u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 move);
u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn);
+u8 GetMoveTarget(u16 move, u8 useMoveTarget);
// asm/battle_4.o
void AI_CalcDmg(u8, u8);
u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def);
+u8 BankGetTurnOrder(u8 bank);
// asm/battle_5.o
void nullsub_91(void);
@@ -696,6 +680,7 @@ void sub_80324F8(struct Pokemon *, u8);
void sub_8032638();
void sub_8032AA8(u8, u8);
void SetBankFuncToOpponentBufferRunCommand(void);
+void BattleMusicStop(void);
// asm/battle_9.o
void SetBankFuncToLinkOpponentBufferRunCommand(void);
diff --git a/include/battle_ai.h b/include/battle_ai.h
index 60ca5d000..c22ca8633 100644
--- a/include/battle_ai.h
+++ b/include/battle_ai.h
@@ -24,5 +24,6 @@ void sub_810745C(void);
void AIStackPushVar(u8 *);
u8 AIStackPop(void);
void BattleAI_HandleItemUseBeforeAISetup(void);
+void RecordAbilityBattle(u8 a, u8 b);
#endif
diff --git a/include/battle_message.h b/include/battle_message.h
index 3e37a1ccd..9c27994ee 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -16,6 +16,143 @@ struct StringInfoBattle
u8 textBuffs[3][0x10];
};
+// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3
+
+#define B_BUFF_STRING 0
+#define B_BUFF_NUMBER 1
+#define B_BUFF_MOVE 2
+#define B_BUFF_TYPE 3
+#define B_BUFF_MON_NICK_WITH_PREFIX 4
+#define B_BUFF_STAT 5
+#define B_BUFF_SPECIES 6
+#define B_BUFF_MON_NICK 7
+#define B_BUFF_NEGATIVE_FLAVOR 8
+#define B_BUFF_ABILITY 9
+#define B_BUFF_ITEM 10
+
+#define B_BUFF_PLACEHOLDER_BEGIN 0xFD
+#define B_BUFF_EOS 0xFF
+
+#define PREPARE_FLAVOR_BUFFER(textVar, flavorId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NEGATIVE_FLAVOR; \
+ textVar[2] = flavorId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_STAT_BUFFER(textVar, statId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_STAT; \
+ textVar[2] = statId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_ABILITY_BUFFER(textVar, abilityId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_ABILITY; \
+ textVar[2] = abilityId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_TYPE_BUFFER(textVar, typeId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_TYPE; \
+ textVar[2] = typeId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_BYTE_NUMBER_BUFFER(textVar, maxDigits, number) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NUMBER; \
+ textVar[2] = 1; \
+ textVar[3] = maxDigits; \
+ textVar[4] = (number); \
+ textVar[5] = B_BUFF_EOS; \
+}
+
+#define PREPARE_HWORD_NUMBER_BUFFER(textVar, maxDigits, number) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NUMBER; \
+ textVar[2] = 2; \
+ textVar[3] = maxDigits; \
+ textVar[4] = (number); \
+ textVar[5] = (number & 0x0000FF00) >> 8; \
+ textVar[6] = B_BUFF_EOS; \
+}
+
+#define PREPARE_WORD_NUMBER_BUFFER(textVar, maxDigits, number) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NUMBER; \
+ textVar[2] = 4; \
+ textVar[3] = maxDigits; \
+ textVar[4] = (number); \
+ textVar[5] = (number & 0x0000FF00) >> 8; \
+ textVar[6] = (number & 0x00FF0000) >> 16; \
+ textVar[7] = (number & 0xFF000000) >> 24; \
+ textVar[8] = B_BUFF_EOS; \
+}
+
+#define PREPARE_STRING_BUFFER(textVar, stringId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_STRING; \
+ textVar[2] = stringId; \
+ textVar[3] = (stringId & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_MOVE_BUFFER(textVar, move) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_MOVE; \
+ textVar[2] = move; \
+ textVar[3] = (move & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_ITEM_BUFFER(textVar, item) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_ITEM; \
+ textVar[2] = item; \
+ textVar[3] = (item & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_SPECIES_BUFFER(textVar, species) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_SPECIES; \
+ textVar[2] = species; \
+ textVar[3] = (species & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, bank, partyId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \
+ textVar[2] = bank; \
+ textVar[3] = partyId; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_MON_NICK_BUFFER(textVar, bank, partyId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_MON_NICK; \
+ textVar[2] = bank; \
+ textVar[3] = partyId; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
void BufferStringBattle(u16 stringID);
u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
u32 StrCpyDecodeBattle(const u8* src, u8* dst);
diff --git a/include/battle_util.h b/include/battle_util.h
new file mode 100644
index 000000000..f47b00b2c
--- /dev/null
+++ b/include/battle_util.h
@@ -0,0 +1,29 @@
+#ifndef GUARD_BATTLE_UTIL_H
+#define GUARD_BATTLE_UTIL_H
+
+#define BS_GET_TARGET 0
+#define BS_GET_ATTACKER 1
+#define BS_GET_EFFECT_BANK 2
+#define BS_GET_SCRIPTING_BANK 10
+#define BS_GET_PLAYER1 11
+#define BS_GET_OPPONENT1 12
+#define BS_GET_PLAYER2 13
+#define BS_GET_OPPONENT2 14
+
+void TryClearRageStatuses(void);
+void BattleScriptPush(u8* BS_ptr);
+void PressurePPLoseOnUsingImprision(u8 bankAtk);
+void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
+void sub_80155A4(u8);
+void CancelMultiTurnMoves(u8 bank);
+bool8 WasUnableToUseMove(u8 bank);
+void PrepareStringBattle(u16 stringId, u8 bank);
+void ResetSentPokesToOpponentValue(void);
+void sub_8015740(u8 bank);
+void sub_80157C4(u8 bank);
+bool8 HandleWishPerishSongOnTurnEnd(void);
+void BattleScriptExecute(u8* BS_ptr);
+void BattleScriptPushCursorAndCallback(u8* BS_ptr);
+u8 IsMonDisobedient(void);
+
+#endif // GUARD_BATTLE_UTIL_H
diff --git a/include/cable_car_util.h b/include/cable_car_util.h
new file mode 100644
index 000000000..7126331a1
--- /dev/null
+++ b/include/cable_car_util.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CABLE_CAR_UTIL_H
+#define GUARD_CABLE_CAR_UTIL_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void CableCarUtil_FillWrapped(void *dest, u16 value, u8 x, u8 y, u8 width, u8 height);
+void CableCarUtil_CopyWrapped(void *dest, const u16 *src, u8 x, u8 y, u8 width, u8 height);
+
+#endif //GUARD_CABLE_CAR_UTIL_H
diff --git a/include/constants/battle_constants.h b/include/constants/battle_constants.h
index f7efb0dfd..49768f33e 100644
--- a/include/constants/battle_constants.h
+++ b/include/constants/battle_constants.h
@@ -1,6 +1,13 @@
#ifndef GUARD_CONSTANTS_BATTLE_CONSTANTS_H
#define GUARD_CONSTANTS_BATTLE_CONSTANTS_H
+// Bank sides
+#define SIDE_PLAYER 0x0
+#define SIDE_OPPONENT 0x1
+
+#define BIT_SIDE 0x1
+#define BIT_MON 0x2
+
#define STATUS_SLEEP 0x7
#define STATUS_POISON 0x8
#define STATUS_BURN 0x10
@@ -65,6 +72,7 @@
#define HITMARKER_PURSUIT_TRAP 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
+#define HITMARKER_RUN 0x00008000
#define HITMARKER_IGNORE_ON_AIR 0x00010000
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
@@ -75,6 +83,7 @@
#define HITMARKER_x800000 0x00800000
#define HITMARKER_GRUDGE 0x01000000
#define HITMARKER_OBEYS 0x02000000
+#define HITMARKER_x4000000 0x04000000
#define HITMARKER_x8000000 0x08000000
#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
#define HITMARKER_UNK(bank) ((0x10000000 << bank))
@@ -88,6 +97,11 @@
#define MOVESTATUS_ENDURED (1 << 6)
#define MOVESTATUS_HUNGON (1 << 7)
+#define IDENTITY_PLAYER_MON1 0
+#define IDENTITY_OPPONENT_MON1 1
+#define IDENTITY_PLAYER_MON2 2
+#define IDENTITY_OPPONENT_MON2 3
+
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
#define BATTLE_TYPE_WILD 0x0004
@@ -117,6 +131,8 @@
#define BATTLE_OUT_OF_BALLS 0x8
#define BATTLE_OPPONENT_TELEPORTED 0xA
+#define OUTCOME_LINK_BATTLE_RUN 0x80
+
#define SIDE_STATUS_REFLECT (1 << 0)
#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
#define SIDE_STATUS_X4 (1 << 2)
@@ -126,6 +142,22 @@
#define SIDE_STATUS_MIST (1 << 8)
#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
+#define ACTION_USE_MOVE 0
+#define ACTION_USE_ITEM 1
+#define ACTION_SWITCH 2
+#define ACTION_RUN 3
+#define ACTION_WATCHES_CAREFULLY 4
+#define ACTION_SAFARI_ZONE_BALL 5
+#define ACTION_POKEBLOCK_CASE 6
+#define ACTION_GO_NEAR 7
+#define ACTION_SAFARI_ZONE_RUN 8
+#define ACTION_9 9
+#define ACTION_RUN_BATTLESCRIPT 10 // when executing an action
+#define ACTION_CANCEL_PARTNER 12 // when choosing an action
+#define ACTION_FINISHED 12 // when executing an action
+#define ACTION_NOTHING_FAINTED 13 // when choosing an action
+#define ACTION_INIT_VALUE 0xFF
+
#define TARGET_SELECTED_POKEMON 0
#define TARGET_SPECIAL (1 << 0)
#define TARGET_UNK2 (1 << 1)
@@ -192,6 +224,40 @@
#define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT))
#define WEATHER_HAIL (1 << 7)
+#define MOVE_TARGET_SELECTED 0x0
+#define MOVE_TARGET_DEPENDS 0x1
+#define MOVE_TARGET_USER 0x2
+#define MOVE_TARGET_RANDOM 0x4
+#define MOVE_TARGET_x10 0x10
+#define MOVE_TARGET_BOTH 0x8
+#define MOVE_TARGET_FOES_AND_ALLY 0x20
+#define MOVE_TARGET_OPPONENTS_FIELD 0x40
+
+// array entries for battle communication
+#define MULTIUSE_STATE 0x0
+#define CURSOR_POSITION 0x1
+#define TASK_ID 0x1 // task Id and cursor position share the same field
+#define SPRITES_INIT_STATE1 0x1 // shares the Id as well
+#define SPRITES_INIT_STATE2 0x2
+#define MOVE_EFFECT_BYTE 0x3
+#define ACTIONS_CONFIRMED_COUNT 0x4
+#define MULTISTRING_CHOOSER 0x5
+#define MSG_DISPLAY 0x7
+#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8
+
+#define BS_GET_TARGET 0
+#define BS_GET_ATTACKER 1
+#define BS_GET_EFFECT_BANK 2
+#define BS_GET_gBank1 3
+#define BS_GET_BANK_0 7
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
+#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
+#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+#define BS_GET_SCRIPTING_BANK 10
+#define BS_GET_OPPONENT1 12
+#define BS_GET_PLAYER2 13
+#define BS_GET_OPPONENT2 14
+
// status animation table
#define B_ANIM_STATUS_PSN 0x0
#define B_ANIM_STATUS_CONFUSION 0x1
@@ -238,4 +304,12 @@
#define B_ANIM_SUBSTITUTE_TO_MON 0x5
#define B_ANIM_MON_TO_SUBSTITUTE 0x6
+// AI switch items
+#define AI_ITEM_FULL_RESTORE 1
+#define AI_ITEM_HEAL_HP 2
+#define AI_ITEM_CURE_CONDITION 3
+#define AI_ITEM_X_STAT 4
+#define AI_ITEM_GUARD_SPECS 5
+#define AI_ITEM_NOT_RECOGNIZABLE 6
+
#endif // GUARD_CONSTANTS_BATTLE_CONSTANTS_H
diff --git a/include/contest.h b/include/contest.h
index 10392c00e..6e71358a2 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -87,4 +87,171 @@ bool8 Contest_SaveWinner(u8);
u8 sub_80B2C4C(u8, u8);
void Contest_ResetWinners(void);
+// Contest Shared EWRAM
+
+struct Shared18000
+{
+ /*0x18000*/ u8 unk18000;
+ /*0x18001*/ u8 filler18001[3];
+ /*0x18004*/ u16 unk18004[16][16];
+ /*0x18204*/ u16 unk18204[0x200];
+ /*0x18604*/ u16 unk18604[0x200];
+ /*0x18A04*/ u8 unk18A04[0x800];
+};
+
+struct Contest
+{
+ /*0x19204*/ u8 playerMoveChoice;
+ /*0x19205*/ u8 turnNumber;
+ /*0x19206*/ u8 unk19206[4]; // seems to only be used by an unref function
+ /*0x1920A*/ u16 unk1920A_0:1; // Task active flags?
+ u16 unk1920A_1:1;
+ u16 unk1920A_2:1;
+ u16 unk1920A_3:1;
+ u16 unk1920A_4:1;
+ u16 unk1920A_5:1;
+ u16 unk1920A_6:1;
+ u16 unk1920A_7:1;
+ /*0x1920B*/ u16 unk1920B_0:1;
+ u16 unk1920B_1:1;
+ u16 unk1920B_2:1;
+ /*0x1920C*/ u8 mainTaskId;
+ /*0x1920D*/ u8 unk1920D[4];
+ /*0x19211*/ u8 unk19211;
+ /*0x19212*/ u8 unk19212;
+ /*0x19213*/ u8 filler19213;
+ /*0x19214*/ u8 unk19214;
+ /*0x19215*/ u8 unk19215;
+ /*0x19216*/ u8 unk19216; // sprite ID
+ /*0x19217*/ s8 applauseLevel;
+ /*0x19218*/ u8 unk19218[4];
+ /*0x1921C*/ u32 unk1921C; // saved RNG value?
+ u16 unk19220[5][4]; // move history?
+ u8 unk19248[5][4]; // excitement history
+ u8 applauseMeterSpriteId; // sprite ID
+ /*0x1925D*/ u8 unk1925D;
+ /*0x1925E*/ u8 unk1925E;
+};
+
+struct ContestantStatus
+{
+ s16 appeal1; // move appeal?
+ s16 appeal2; // final appeal after end of turn, maybe?
+ s16 unk4;
+ u16 currMove;
+ u16 prevMove;
+ u8 moveCategory;
+ u8 unkB_0:2;
+ u8 unkB_2:2;
+ u8 moveRepeatCount:3;
+ u8 unkB_7:1; // used a one-time move?
+ u8 unkC_0:1;
+ u8 unkC_1:2;
+ s8 unkD;
+ u8 unkE;
+ u8 unkF;
+ u8 unk10_0:1;
+ u8 unk10_1:1;
+ u8 unk10_2:1;
+ u8 unk10_3:1;
+ u8 unk10_4:2;
+ u8 unk10_6:2;
+ u8 unk11_0:2;
+ u8 unk11_2:1;
+ u8 unk11_3:1;
+ u8 unk11_4:1;
+ u8 unk11_5:1;
+ u8 unk12;
+ u8 unk13; // status action?
+ u8 unk14;
+ u8 disappointedRepeat:1;
+ u8 unk15_1:1;
+ u8 unk15_2:1;
+ u8 unk15_3:1;
+ u8 unk15_4:1;
+ u8 unk15_5:1;
+ u8 unk15_6:1;
+ u8 unk16;
+ u8 unk17;
+ u8 unk18;
+ u8 unk19; // turn position
+ u8 attentionLevel; // How much the Pokemon "stood out"
+ u8 unk1B;
+};
+
+struct UnknownContestStruct3
+{
+ u8 unk0;
+ u8 unk1;
+ //u8 unk2_0:1;
+ //u8 unk2_1:1;
+ u8 unk2; // maybe a bitfield
+ u8 filler3;
+};
+
+// possibly the same as UnknownContestStruct3?
+struct UnknownContestStruct4
+{
+ u8 unk0; // sprite ID
+ u8 unk1; // sprite ID
+ u8 unk2_0:1;
+ u8 unk2_1:1;
+ u8 unk2_2:1;
+ u8 filler3;
+};
+
+struct UnknownContestStruct5
+{
+ s8 bits_0; // current move excitement?
+ u8 bits_8:1;
+ u8 bits_9:3;
+ u8 bits_C:4;
+ s8 unk2;
+ u8 filler3;
+};
+
+struct UnknownContestStruct7
+{
+ u8 unk0[4];
+ u16 unk4;
+ u16 unk6;
+ u8 filler8[0xD-8];
+ u8 unkD[4];
+ u8 unk11;
+ u8 filler12[2];
+};
+
+struct UnknownContestStruct8
+{
+ u16 unk0;
+ u16 unk2;
+ u8 unk4_0:1;
+ u8 unk5;
+ u8 filler6[2];
+ u32 unk8;
+ u32 unkC;
+ u32 unk10;
+};
+
+struct UnknownContestStruct6
+{
+ s32 unk0;
+ s32 unk4;
+ s32 unk8;
+ s32 unkC;
+};
+
+#define shared15800 (gSharedMem + 0x15800)
+#define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0))
+#define shared16800 (gSharedMem + 0x16800)
+#define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000))
+#define shared18004 ((u16 *)(gSharedMem + 0x18004))
+#define sContest (*(struct Contest *)(gSharedMem + 0x19204))
+#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260))
+#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0))
+#define shared192E4 (gSharedMem + 0x192E4)
+#define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328))
+#define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338))
+#define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348))
+
#endif // GUARD_CONTEST_H
diff --git a/include/ewram.h b/include/ewram.h
index 9a281368f..19e05134f 100755
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -109,6 +109,7 @@ extern u8 gSharedMem[];
#define ewram16010arr(bank) (gSharedMem[0x16010 + bank])
#define ewram1601B (gSharedMem[0x1601B])
#define eDynamicMoveType (gSharedMem[0x1601C])
+#define eFocusPunchBank (gSharedMem[0x1601D])
#define eDmgMultiplier (gSharedMem[0x1601F])
#define ewram16020 ((u8 *)(gSharedMem + 0x16020))
#define ewram16020arr(i) (gSharedMem[0x16020 + i])
@@ -134,6 +135,8 @@ extern u8 gSharedMem[];
#define ewram1608Carr(bank) (gSharedMem[0x1608C + bank])
#define EWRAM_1609D (gSharedMem[0x1609D])
#define ewram160A1 (gSharedMem[0x160A1])
+#define ewram160A4 (gSharedMem[0x160A4])
+#define ewram160A5 (gSharedMem[0x160A5])
#define ewram160A6 (gSharedMem[0x160A6])
#define ewram160A8 (gSharedMem[0x160A8])
#define ewram160A9 (gSharedMem[0x160A9])
@@ -156,9 +159,12 @@ extern u8 gSharedMem[];
#define USED_HELD_ITEM(bank) ((((u16*)(&gSharedMem[0x160CC + bank * 2]))))
#define USED_HELD_ITEMS(bank) (*(u16 *)&gSharedMem[0x160CC + 2 * (bank)])
#define ewram160D4(bank) (gSharedMem[0x160D4 + (bank / 2) * 2])
+#define ewram160D8(bank) (gSharedMem[0x160D8 + (bank / 2)])
+#define ewram160DA(bank) (gSharedMem[0x160DA + (bank / 2)])
#define ewram160DD (gSharedMem[0x160DD])
#define ewram160E0(i) (gSharedMem[0x160E0 + i])
#define ewram160E6 (gSharedMem[0x160E6])
+#define ewram160E7 (gSharedMem[0x160E7])
#define CHOICED_MOVE(bank) (((u16*)(&gSharedMem[0x160E8 + bank * 2])))
#define ewram160E8 ((u8 *)(gSharedMem + 0x160E8))
#define ewram160E8arr(i) (gSharedMem[0x160E8 + i])
@@ -176,6 +182,7 @@ extern u8 gSharedMem[];
#define ewram16108arr(i) (gSharedMem[0x16108 + i])
#define ewram16110 (gSharedMem[0x16110])
#define ewram16111 (gSharedMem[0x16111])
+#define eMultihitMoveEffect (gSharedMem[0x16112])
#define ewram16113 (gSharedMem[0x16113])
#define ewram16400 (gSharedMem + 0x16400)
#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gSharedMem + 0x16800))
@@ -186,6 +193,7 @@ extern u8 gSharedMem[];
#define ewram17000 (&gSharedMem[0x17000])
#define eLearnMoveStruct (struct LearnMoveStruct *)(gSharedMem + 0x17000)
#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000))
+#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
#define ewram17002 (&gSharedMem[0x17002])
#define eFlashFireArr (*(struct Struct2017100 *)(gSharedMem + 0x17100))
#define B_BATTLESCRIPTS_STACK ((struct scriptsStack *) (gSharedMem + 0x17110))
@@ -214,9 +222,9 @@ extern u8 gSharedMem[];
#define ewram18800 (&gSharedMem[0x18800])
#define ePokedexView2 (struct PokedexView *)(gSharedMem + 0x18800)
#define ewram19000 (&gSharedMem[0x19000])
+#define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000))
#define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000)
#define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348))
-#define ewram19348 (*(struct Struct2019348 *)(gSharedMem + 0x19348))
#define ewram19800 (&gSharedMem[0x19800])
#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800)
#define ewram1A000 (&gSharedMem[0x1A000])
diff --git a/include/field_weather.h b/include/field_weather.h
index c96d4055e..267650a2a 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -163,4 +163,8 @@ bool8 sub_807DDFC(void);
void SetWeather(u32);
void UpdateWeatherPerDay(u16);
+extern struct Weather gWeather;
+
+extern struct Weather *const gWeatherPtr;
+
#endif // GUARD_WEATHER_H
diff --git a/include/gba/macro.h b/include/gba/macro.h
index 540e08375..59b22758e 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -87,7 +87,7 @@
#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \
{ \
const void *_src = src; \
- void *_dest = dest; \
+ void *_dest = (void *)(dest); \
u32 _size = size; \
while (1) \
{ \
@@ -129,7 +129,7 @@
#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \
{ \
const void *_src = src; \
- void *_dest = dest; \
+ void *_dest = (void *)(dest); \
u32 _size = size; \
DmaCopy##bit(dmaNum, _src, _dest, _size); \
}
@@ -137,4 +137,34 @@
#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16)
#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32)
+#define DmaFillLarge(dmaNum, fillval, dest, size, block, bit) \
+{ \
+ void *_dest = (void *)(dest); \
+ u32 _size = (u32)(size); \
+ while (1) \
+ { \
+ DmaFill##bit(dmaNum, fillval, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) \
+ { \
+ DmaFill##bit(dmaNum, fillval, _dest, _size); \
+ break; \
+ } \
+ } \
+}
+
+#define DmaFill16Large(dmaNum, fillval, dest, size, block) DmaFillLarge(dmaNum, fillval, dest, size, block, 16)
+#define DmaFill32Large(dmaNum, fillval, dest, size, block) DmaFillLarge(dmaNum, fillval, dest, size, block, 32)
+
+#define DmaFillDefvars(dmaNum, fillval, dest, size, bit) \
+{ \
+ void *_dest = (void *)(dest); \
+ u32 _size = (u##bit)(size); \
+ DmaFill##bit(dmaNum, fillval, _dest, _size); \
+}
+
+#define DmaFill16Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 16)
+#define DmaFill32Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 32)
+
#endif // GUARD_GBA_MACRO_H
diff --git a/include/global.h b/include/global.h
index 0764718ca..eea1574b7 100644
--- a/include/global.h
+++ b/include/global.h
@@ -14,9 +14,9 @@
#define INCBIN_S8 {0}
#define INCBIN_S16 {0}
#define INCBIN_S32 {0}
-void * memcpy (void *, const void *, size_t);
-void * memset (void *, int, size_t);
-int strcmp (const char *, const char *);
+void *memcpy (void *, const void *, size_t);
+void *memset (void *, int, size_t);
+int strcmp (const char *, const char *);
#endif
// Prevent cross-jump optimization.
@@ -843,5 +843,6 @@ struct HallOfFame
extern struct HallOfFame gHallOfFame;
extern struct SaveBlock2 gSaveBlock2;
+extern u8 ewram[];
#endif // GUARD_GLOBAL_H
diff --git a/include/graphics.h b/include/graphics.h
index 42e6fd5c6..00a210350 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2736,4 +2736,11 @@ extern const u8 gVersionTiles[];
extern const u16 gUnknown_08E9F624[];
extern const u8 gUnknown_08E9F7E4[];
+extern const u8 gCableCar_Gfx[];
+extern const u8 gCableCarDoor_Gfx[];
+extern const u8 gCableCarCord_Gfx[];
+extern const u16 gCableCar_Pal[];
+extern const u16 gCableCarBG_Pal[];
+extern const u8 gCableCarBG_Gfx[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 7edd3395f..fd1709320 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -363,6 +363,16 @@ enum
STAT_STAGE_EVASION, // 7
};
+enum
+{
+ STAT_HP, // 0
+ STAT_ATK, // 1
+ STAT_DEF, // 2
+ STAT_SPD, // 3
+ STAT_SPATK, // 4
+ STAT_SPDEF, // 5
+};
+
struct BaseStats
{
/*0x00*/ u8 baseHP;
@@ -405,7 +415,7 @@ struct BattleMove
u8 pp;
u8 secondaryEffectChance;
u8 target;
- u8 priority;
+ s8 priority;
u8 flags;
u8 pad[3];
};
@@ -613,6 +623,8 @@ bool8 IsPokeSpriteNotFlipped(u16);
u8 GetLevelUpMovesBySpecies(u16, u16 *);
u8 TryIncrementMonLevel(struct Pokemon *);
bool8 IsShiny(struct Pokemon *mon);
+void RandomlyGivePartyPokerus(struct Pokemon *party);
+void PartySpreadPokerus(struct Pokemon *party);
struct Sprite *sub_80F7920(u16, u16, const u16 *);
diff --git a/include/roamer.h b/include/roamer.h
index 9d5f3c4ed..86908bd00 100644
--- a/include/roamer.h
+++ b/include/roamer.h
@@ -7,5 +7,7 @@ void UpdateLocationHistoryForRoamer(void);
void RoamerMoveToOtherLocationSet(void);
void RoamerMove();
u8 TryStartRoamerEncounter(void);
+void UpdateRoamerHPStatus(struct Pokemon *mon);
+void SetRoamerInactive(void);
#endif
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index dda90c48f..21ec88a90 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -25,9 +25,9 @@ u8 GetBankSide(u8 slot);
u8 GetBankSide(u8);
u8 GetBankIdentity(u8);
u8 GetBankIdentity(u8 slot);
-u8 GetBankByPlayerAI(u8);
-u8 GetBankByPlayerAI(u8);
-u8 GetBankByPlayerAI(u8 state);
+u8 GetBankByIdentity(u8);
+u8 GetBankByIdentity(u8);
+u8 GetBankByIdentity(u8 state);
bool8 IsBankSpritePresent(u8);
bool8 IsDoubleBattle();
u8 IsDoubleBattle(void);
diff --git a/include/trainer.h b/include/trainer.h
index 2e0beb342..e8f2776d2 100644
--- a/include/trainer.h
+++ b/include/trainer.h
@@ -17,83 +17,83 @@
#define TRAINER_ENCOUNTER_MUSIC_RICH 13 // Rich Boys and Gentlemen
enum {
- TRAINER_CLASS_AQUA_LEADER,
- TRAINER_CLASS_TEAM_AQUA_M,
- TRAINER_CLASS_TEAM_AQUA_F,
- TRAINER_CLASS_AROMA_LADY,
- TRAINER_CLASS_RUIN_MANIAC,
- TRAINER_CLASS_INTERVIEWER,
- TRAINER_CLASS_TUBER_F,
- TRAINER_CLASS_TUBER_M,
- TRAINER_CLASS_COOL_TRAINER_M,
- TRAINER_CLASS_COOL_TRAINER_F,
- TRAINER_CLASS_HEX_MANIAC,
- TRAINER_CLASS_LADY,
- TRAINER_CLASS_BEAUTY,
- TRAINER_CLASS_RICH_BOY,
- TRAINER_CLASS_POKEMANIAC,
- TRAINER_CLASS_SWIMMER_M,
- TRAINER_CLASS_BLACK_BELT,
- TRAINER_CLASS_GUITARIST,
- TRAINER_CLASS_KINDLER,
- TRAINER_CLASS_CAMPER,
- TRAINER_CLASS_BUG_MANIAC,
- TRAINER_CLASS_PSYCHIC_M,
- TRAINER_CLASS_PSYCHIC_F,
- TRAINER_CLASS_GENTLEMAN,
- TRAINER_CLASS_ELITE_FOUR_M,
- TRAINER_CLASS_ELITE_FOUR_F,
- TRAINER_CLASS_LEADER_F,
- TRAINER_CLASS_LEADER_M,
- TRAINER_CLASS_LEADER_MF,
- TRAINER_CLASS_SCHOOL_KID_M,
- TRAINER_CLASS_SCHOOL_KID_F,
- TRAINER_CLASS_SR_AND_JR,
- TRAINER_CLASS_POKEFAN_M,
- TRAINER_CLASS_POKEFAN_F,
- TRAINER_CLASS_EXPERT_M,
- TRAINER_CLASS_EXPERT_F,
- TRAINER_CLASS_YOUNGSTER,
- TRAINER_CLASS_CHAMPION,
- TRAINER_CLASS_FISHERMAN,
- TRAINER_CLASS_CYCLING_TRIATHLETE_M,
- TRAINER_CLASS_CYCLING_TRIATHLETE_F,
- TRAINER_CLASS_RUNNING_TRIATHLETE_M,
- TRAINER_CLASS_RUNNING_TRIATHLETE_F,
- TRAINER_CLASS_SWIMMING_TRIATHLETE_M,
- TRAINER_CLASS_SWIMMING_TRIATHLETE_F,
- TRAINER_CLASS_DRAGON_TAMER,
- TRAINER_CLASS_BIRD_KEEPER,
- TRAINER_CLASS_NINJA_BOY,
- TRAINER_CLASS_BATTLE_GIRL,
- TRAINER_CLASS_PARASOL_LADY,
- TRAINER_CLASS_SWIMMER_F,
- TRAINER_CLASS_PICNICKER,
- TRAINER_CLASS_TWINS,
- TRAINER_CLASS_SAILOR,
- TRAINER_CLASS_BOARDER_1,
- TRAINER_CLASS_BOARDER_2,
- TRAINER_CLASS_COLLECTOR,
- TRAINER_CLASS_WALLY,
- TRAINER_CLASS_BRENDAN_1,
- TRAINER_CLASS_BRENDAN_2,
- TRAINER_CLASS_BRENDAN_3,
- TRAINER_CLASS_MAY_1,
- TRAINER_CLASS_MAY_2,
- TRAINER_CLASS_MAY_3,
- TRAINER_CLASS_POKEMON_BREEDER_M,
- TRAINER_CLASS_POKEMON_BREEDER_F,
- TRAINER_CLASS_POKEMON_RANGER_M,
- TRAINER_CLASS_POKEMON_RANGER_F,
- TRAINER_CLASS_MAGMA_LEADER,
- TRAINER_CLASS_TEAM_MAGMA_M,
- TRAINER_CLASS_TEAM_MAGMA_F,
- TRAINER_CLASS_LASS,
- TRAINER_CLASS_BUG_CATCHER,
- TRAINER_CLASS_HIKER,
- TRAINER_CLASS_YOUNG_COUPLE,
- TRAINER_CLASS_OLD_COUPLE,
- TRAINER_CLASS_SIS_AND_BRO
+ FACILITY_CLASS_AQUA_LEADER,
+ FACILITY_CLASS_TEAM_AQUA_M,
+ FACILITY_CLASS_TEAM_AQUA_F,
+ FACILITY_CLASS_AROMA_LADY,
+ FACILITY_CLASS_RUIN_MANIAC,
+ FACILITY_CLASS_INTERVIEWER,
+ FACILITY_CLASS_TUBER_F,
+ FACILITY_CLASS_TUBER_M,
+ FACILITY_CLASS_COOL_TRAINER_M,
+ FACILITY_CLASS_COOL_TRAINER_F,
+ FACILITY_CLASS_HEX_MANIAC,
+ FACILITY_CLASS_LADY,
+ FACILITY_CLASS_BEAUTY,
+ FACILITY_CLASS_RICH_BOY,
+ FACILITY_CLASS_POKEMANIAC,
+ FACILITY_CLASS_SWIMMER_M,
+ FACILITY_CLASS_BLACK_BELT,
+ FACILITY_CLASS_GUITARIST,
+ FACILITY_CLASS_KINDLER,
+ FACILITY_CLASS_CAMPER,
+ FACILITY_CLASS_BUG_MANIAC,
+ FACILITY_CLASS_PSYCHIC_M,
+ FACILITY_CLASS_PSYCHIC_F,
+ FACILITY_CLASS_GENTLEMAN,
+ FACILITY_CLASS_ELITE_FOUR_M,
+ FACILITY_CLASS_ELITE_FOUR_F,
+ FACILITY_CLASS_LEADER_F,
+ FACILITY_CLASS_LEADER_M,
+ FACILITY_CLASS_LEADER_MF,
+ FACILITY_CLASS_SCHOOL_KID_M,
+ FACILITY_CLASS_SCHOOL_KID_F,
+ FACILITY_CLASS_SR_AND_JR,
+ FACILITY_CLASS_POKEFAN_M,
+ FACILITY_CLASS_POKEFAN_F,
+ FACILITY_CLASS_EXPERT_M,
+ FACILITY_CLASS_EXPERT_F,
+ FACILITY_CLASS_YOUNGSTER,
+ FACILITY_CLASS_CHAMPION,
+ FACILITY_CLASS_FISHERMAN,
+ FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ FACILITY_CLASS_DRAGON_TAMER,
+ FACILITY_CLASS_BIRD_KEEPER,
+ FACILITY_CLASS_NINJA_BOY,
+ FACILITY_CLASS_BATTLE_GIRL,
+ FACILITY_CLASS_PARASOL_LADY,
+ FACILITY_CLASS_SWIMMER_F,
+ FACILITY_CLASS_PICNICKER,
+ FACILITY_CLASS_TWINS,
+ FACILITY_CLASS_SAILOR,
+ FACILITY_CLASS_BOARDER_1,
+ FACILITY_CLASS_BOARDER_2,
+ FACILITY_CLASS_COLLECTOR,
+ FACILITY_CLASS_WALLY,
+ FACILITY_CLASS_BRENDAN_1,
+ FACILITY_CLASS_BRENDAN_2,
+ FACILITY_CLASS_BRENDAN_3,
+ FACILITY_CLASS_MAY_1,
+ FACILITY_CLASS_MAY_2,
+ FACILITY_CLASS_MAY_3,
+ FACILITY_CLASS_POKEMON_BREEDER_M,
+ FACILITY_CLASS_POKEMON_BREEDER_F,
+ FACILITY_CLASS_POKEMON_RANGER_M,
+ FACILITY_CLASS_POKEMON_RANGER_F,
+ FACILITY_CLASS_MAGMA_LEADER,
+ FACILITY_CLASS_TEAM_MAGMA_M,
+ FACILITY_CLASS_TEAM_MAGMA_F,
+ FACILITY_CLASS_LASS,
+ FACILITY_CLASS_BUG_CATCHER,
+ FACILITY_CLASS_HIKER,
+ FACILITY_CLASS_YOUNG_COUPLE,
+ FACILITY_CLASS_OLD_COUPLE,
+ FACILITY_CLASS_SIS_AND_BRO
};
enum {
@@ -183,64 +183,64 @@ enum {
};
enum {
- TRAINER_CLASS_NAME_POKEMON_TRAINER_1,
- TRAINER_CLASS_NAME_POKEMON_TRAINER_2,
- TRAINER_CLASS_NAME_AQUA_LEADER,
- TRAINER_CLASS_NAME_TEAM_AQUA,
- TRAINER_CLASS_NAME_AQUA_ADMIN,
- TRAINER_CLASS_NAME_AROMA_LADY,
- TRAINER_CLASS_NAME_RUIN_MANIAC,
- TRAINER_CLASS_NAME_INTERVIEWER,
- TRAINER_CLASS_NAME_TUBER_F,
- TRAINER_CLASS_NAME_TUBER_M,
- TRAINER_CLASS_NAME_COOL_TRAINER,
- TRAINER_CLASS_NAME_HEX_MANIAC,
- TRAINER_CLASS_NAME_LADY,
- TRAINER_CLASS_NAME_BEAUTY,
- TRAINER_CLASS_NAME_RICH_BOY,
- TRAINER_CLASS_NAME_POKEMANIAC,
- TRAINER_CLASS_NAME_SWIMMER_M,
- TRAINER_CLASS_NAME_BLACK_BELT,
- TRAINER_CLASS_NAME_GUITARIST,
- TRAINER_CLASS_NAME_KINDLER,
- TRAINER_CLASS_NAME_CAMPER,
- TRAINER_CLASS_NAME_BUG_MANIAC,
- TRAINER_CLASS_NAME_PSYCHIC,
- TRAINER_CLASS_NAME_GENTLEMAN,
- TRAINER_CLASS_NAME_ELITE_FOUR,
- TRAINER_CLASS_NAME_LEADER,
- TRAINER_CLASS_NAME_SCHOOL_KID,
- TRAINER_CLASS_NAME_SR_AND_JR,
- TRAINER_CLASS_NAME_WINSTRATE,
- TRAINER_CLASS_NAME_POKEFAN,
- TRAINER_CLASS_NAME_EXPERT,
- TRAINER_CLASS_NAME_YOUNGSTER,
- TRAINER_CLASS_NAME_CHAMPION,
- TRAINER_CLASS_NAME_FISHERMAN,
- TRAINER_CLASS_NAME_TRIATHLETE,
- TRAINER_CLASS_NAME_DRAGON_TAMER,
- TRAINER_CLASS_NAME_BIRD_KEEPER,
- TRAINER_CLASS_NAME_NINJA_BOY,
- TRAINER_CLASS_NAME_BATTLE_GIRL,
- TRAINER_CLASS_NAME_PARASOL_LADY,
- TRAINER_CLASS_NAME_SWIMMER_F,
- TRAINER_CLASS_NAME_PICNICKER,
- TRAINER_CLASS_NAME_TWINS,
- TRAINER_CLASS_NAME_SAILOR,
- TRAINER_CLASS_NAME_BOARDER,
- TRAINER_CLASS_NAME_COLLECTOR,
- TRAINER_CLASS_NAME_POKEMON_TRAINER_3,
- TRAINER_CLASS_NAME_POKEMON_BREEDER,
- TRAINER_CLASS_NAME_POKEMON_RANGER,
- TRAINER_CLASS_NAME_MAGMA_LEADER,
- TRAINER_CLASS_NAME_TEAM_MAGMA,
- TRAINER_CLASS_NAME_MAGMA_ADMIN,
- TRAINER_CLASS_NAME_LASS,
- TRAINER_CLASS_NAME_BUG_CATCHER,
- TRAINER_CLASS_NAME_HIKER,
- TRAINER_CLASS_NAME_YOUNG_COUPLE,
- TRAINER_CLASS_NAME_OLD_COUPLE,
- TRAINER_CLASS_NAME_SIS_AND_BRO
+ TRAINER_CLASS_POKEMON_TRAINER_1,
+ TRAINER_CLASS_POKEMON_TRAINER_2,
+ TRAINER_CLASS_AQUA_LEADER,
+ TRAINER_CLASS_TEAM_AQUA,
+ TRAINER_CLASS_AQUA_ADMIN,
+ TRAINER_CLASS_AROMA_LADY,
+ TRAINER_CLASS_RUIN_MANIAC,
+ TRAINER_CLASS_INTERVIEWER,
+ TRAINER_CLASS_TUBER_F,
+ TRAINER_CLASS_TUBER_M,
+ TRAINER_CLASS_COOL_TRAINER,
+ TRAINER_CLASS_HEX_MANIAC,
+ TRAINER_CLASS_LADY,
+ TRAINER_CLASS_BEAUTY,
+ TRAINER_CLASS_RICH_BOY,
+ TRAINER_CLASS_POKEMANIAC,
+ TRAINER_CLASS_SWIMMER_M,
+ TRAINER_CLASS_BLACK_BELT,
+ TRAINER_CLASS_GUITARIST,
+ TRAINER_CLASS_KINDLER,
+ TRAINER_CLASS_CAMPER,
+ TRAINER_CLASS_BUG_MANIAC,
+ TRAINER_CLASS_PSYCHIC,
+ TRAINER_CLASS_GENTLEMAN,
+ TRAINER_CLASS_ELITE_FOUR,
+ TRAINER_CLASS_LEADER,
+ TRAINER_CLASS_SCHOOL_KID,
+ TRAINER_CLASS_SR_AND_JR,
+ TRAINER_CLASS_WINSTRATE,
+ TRAINER_CLASS_POKEFAN,
+ TRAINER_CLASS_EXPERT,
+ TRAINER_CLASS_YOUNGSTER,
+ TRAINER_CLASS_CHAMPION,
+ TRAINER_CLASS_FISHERMAN,
+ TRAINER_CLASS_TRIATHLETE,
+ TRAINER_CLASS_DRAGON_TAMER,
+ TRAINER_CLASS_BIRD_KEEPER,
+ TRAINER_CLASS_NINJA_BOY,
+ TRAINER_CLASS_BATTLE_GIRL,
+ TRAINER_CLASS_PARASOL_LADY,
+ TRAINER_CLASS_SWIMMER_F,
+ TRAINER_CLASS_PICNICKER,
+ TRAINER_CLASS_TWINS,
+ TRAINER_CLASS_SAILOR,
+ TRAINER_CLASS_BOARDER,
+ TRAINER_CLASS_COLLECTOR,
+ TRAINER_CLASS_POKEMON_TRAINER_3,
+ TRAINER_CLASS_POKEMON_BREEDER,
+ TRAINER_CLASS_POKEMON_RANGER,
+ TRAINER_CLASS_MAGMA_LEADER,
+ TRAINER_CLASS_TEAM_MAGMA,
+ TRAINER_CLASS_MAGMA_ADMIN,
+ TRAINER_CLASS_LASS,
+ TRAINER_CLASS_BUG_CATCHER,
+ TRAINER_CLASS_HIKER,
+ TRAINER_CLASS_YOUNG_COUPLE,
+ TRAINER_CLASS_OLD_COUPLE,
+ TRAINER_CLASS_SIS_AND_BRO
};
#endif // GUARD_TRAINER_H
diff --git a/include/tv.h b/include/tv.h
index 91b871f71..2edccb365 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -107,5 +107,6 @@ void UpdateTVShowsPerDay(u16);
void sub_80C045C();
void sub_80BF088(u8, s32);
void sub_80BFD20(void);
+void PutPokemonTodayCaughtOnAir(void);
#endif // GUARD_TV_H