summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h14
-rw-r--r--include/battle_2.h2
-rw-r--r--include/battle_anim.h79
-rw-r--r--include/battle_controller_player.h7
-rw-r--r--include/battle_controllers.h182
-rw-r--r--include/battle_interface.h2
-rw-r--r--include/battle_util.h1
-rw-r--r--include/contest.h31
-rw-r--r--include/gba/io_reg.h2
-rw-r--r--include/link.h7
-rw-r--r--include/recorded_battle.h3
-rw-r--r--include/sprite.h2
12 files changed, 286 insertions, 46 deletions
diff --git a/include/battle.h b/include/battle.h
index 719db0fa3..8ea1b78f4 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -27,7 +27,9 @@
#define BIT_SIDE 0x1
#define BIT_MON 0x2
+#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank]))
#define GET_BANK_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE))
+#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE))
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
@@ -655,7 +657,9 @@ struct BattleStruct
u8 field_1A1;
bool8 overworldWeatherDone;
u8 atkCancellerTracker;
- u8 field_1A4[240];
+ u8 field_1A4[96];
+ u8 field_204[104];
+ u8 field_26C[40];
u8 field_294[4];
u8 field_298[8];
u8 field_2A0;
@@ -826,6 +830,7 @@ void LoadBattleTextboxAndBackground(void);
void LoadBattleEntryBackground(void);
void ApplyPlayerChosenFrameToBattleMenu(void);
bool8 LoadChosenBattleElement(u8 caseId);
+void DrawMainBattleBackground(void);
void task00_0800F6FC(u8 taskId);
// battle_5
@@ -903,6 +908,8 @@ struct BattleHealthboxInfo
u8 flag_x1 : 1;
u8 flag_x2 : 1;
u8 flag_x4 : 1;
+ u8 flag_x8 : 1;
+ u8 flag_x10 : 1;
u8 field_1;
u8 field_2;
u8 field_3;
@@ -935,6 +942,11 @@ struct BattleSpriteData
extern struct BattleSpriteData *gBattleSpritesDataPtr;
+#define BATTLE_BUFFER_LINK_SIZE 0x1000
+
+extern u8 *gLinkBattleSendBuffer;
+extern u8 *gLinkBattleRecvBuffer;
+
// Move this somewhere else
#include "sprite.h"
diff --git a/include/battle_2.h b/include/battle_2.h
index 677bf0505..ceec2aa00 100644
--- a/include/battle_2.h
+++ b/include/battle_2.h
@@ -17,6 +17,8 @@ void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
u32 sub_80397C4(u32 setId, u32 tableId);
void sub_8039E9C(struct Sprite *sprite);
+void nullsub_20(void);
+void BeginBattleIntro(void);
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
diff --git a/include/battle_anim.h b/include/battle_anim.h
new file mode 100644
index 000000000..f38572d19
--- /dev/null
+++ b/include/battle_anim.h
@@ -0,0 +1,79 @@
+#ifndef GUARD_BATTLE_ANIM_H
+#define GUARD_BATTLE_ANIM_H
+
+enum
+{
+ ANIM_BANK_ATTACKER,
+ ANIM_BANK_TARGET,
+ ANIM_BANK_ATK_PARTNER,
+ ANIM_BANK_DEF_PARTNER,
+};
+
+enum
+{
+ BG_ANIM_SCREEN_SIZE,
+ BG_ANIM_AREA_OVERFLOW_MODE,
+ BG_ANIM2,
+ BG_ANIM3,
+ BG_ANIM_PRIORITY,
+ BG_ANIM_5,
+ BG_ANIM_6
+};
+
+struct UnknownAnimStruct2
+{
+ void *unk0;
+ u16 *unk4;
+ u8 unk8;
+ u8 unk9;
+ u16 unkA;
+ u16 unkC;
+};
+
+struct BattleAnimBackground
+{
+ void *image;
+ void *palette;
+ void *tilemap;
+};
+
+#define ANIM_ARGS_COUNT 8
+
+#define PAN_ATTACKER_PLAYER -64
+#define PAN_ATTACKER_OPPONENT 63
+
+extern void (*gAnimScriptCallback)(void);
+extern bool8 gAnimScriptActive;
+extern u8 gAnimVisualTaskCount;
+extern u8 gAnimSoundTaskCount;
+extern struct DisableStruct *gAnimDisableStructPtr;
+extern u32 gAnimMoveDmg;
+extern u16 gAnimMovePower;
+extern u8 gAnimFriendship;
+extern u16 gWeatherMoveAnim;
+extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
+extern u8 gAnimMoveTurn;
+extern u8 gAnimBankAttacker;
+extern u8 gAnimBankTarget;
+extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT];
+extern u8 gUnknown_02038440;
+
+void ClearBattleAnimationVars(void);
+void DoMoveAnim(u16 move);
+void DoBattleAnim(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim);
+void DestroyAnimSprite(struct Sprite *sprite);
+void DestroyAnimVisualTask(u8 taskId);
+void DestroyAnimSoundTask(u8 taskId);
+bool8 IsAnimBankSpriteVisible(u8 bank);
+void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible);
+bool8 IsContest(void);
+s8 BattleAnimAdjustPanning(s8 pan);
+s8 BattleAnimAdjustPanning2(s8 pan);
+s16 sub_80A52EC(s16 a);
+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);
+
+#endif // GUARD_BATTLE_ANIM_H
diff --git a/include/battle_controller_player.h b/include/battle_controller_player.h
deleted file mode 100644
index 6d095efe7..000000000
--- a/include/battle_controller_player.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef GUARD_BATTLE_CONTROLLER_PLAYER_H
-#define GUARD_BATTLE_CONTROLLER_PLAYER_H
-
-void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
-void ActionSelectionDestroyCursorAt(u8 cursorPos);
-
-#endif // GUARD_BATTLE_CONTROLLER_PLAYER_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index e710deea5..4bc6b7b84 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -1,8 +1,6 @@
#ifndef GUARD_BATTLE_CONTROLLERS_H
#define GUARD_BATTLE_CONTROLLERS_H
-#include "battle_controller_player.h"
-
#define REQUEST_ALL_BATTLE 0x0
#define REQUEST_SPECIES_BATTLE 0x1
#define REQUEST_HELDITEM_BATTLE 0x2
@@ -48,44 +46,162 @@ struct ChooseMoveStruct
u8 monType2;
};
-// rom3.s, emitters
-void EmitSetMonData(u8 bufferId, u8 request, u8 c, u8 bytes, void *data);
-void EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct* disableStructPtr, u8 multihit);
-void EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
-void EmitEffectivenessSound(u8 bufferId, u16 songId);
-void EmitPlaySound(u8 bufferId, u16 songId, u8 arg2);
-void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringId);
-void EmitFaintAnimation(u8 bufferId);
-void Emit_x2A(u8 bufferId);
-void EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
-void EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
-void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
-void EmitReturnPokeToBall(u8 bufferId, u8 arg1);
+enum
+{
+ CONTROLLER_GETMONDATA,
+ CONTROLLER_GETRAWMONDATA,
+ CONTROLLER_SETMONDATA,
+ CONTROLLER_SETRAWMONDATA,
+ CONTROLLER_LOADMONSPRITE,
+ CONTROLLER_SWITCHINANIM,
+ CONTROLLER_RETURNMONTOBALL,
+ CONTROLLER_DRAWTRAINERPIC,
+ CONTROLLER_TRAINERSLIDE,
+ CONTROLLER_TRAINERSLIDEBACK,
+ CONTROLLER_FAINTANIMATION,
+ CONTROLLER_11,
+ CONTROLLER_12,
+ CONTROLLER_BALLTHROW,
+ CONTROLLER_PAUSE,
+ CONTROLLER_MOVEANIMATION,
+ CONTROLLER_PRINTSTRING,
+ CONTROLLER_PRINTSTRINGPLAYERONLY,
+ CONTROLLER_CHOOSEACTION,
+ CONTROLLER_19,
+ CONTROLLER_CHOOSEMOVE,
+ CONTROLLER_OPENBAG,
+ CONTROLLER_CHOOSEPOKEMON,
+ CONTROLLER_23,
+ CONTROLLER_HEALTHBARUPDATE,
+ CONTROLLER_EXPUPDATE,
+ CONTROLLER_STATUSICONUPDATE,
+ CONTROLLER_STATUSANIMATION,
+ CONTROLLER_STATUSXOR,
+ CONTROLLER_DATATRANSFER,
+ CONTROLLER_DMA3TRANSFER,
+ CONTROLLER_31,
+ CONTROLLER_32,
+ CONTROLLER_33,
+ CONTROLLER_34,
+ CONTROLLER_35,
+ CONTROLLER_36,
+ CONTROLLER_37,
+ CONTROLLER_38,
+ CONTROLLER_39,
+ CONTROLLER_40,
+ CONTROLLER_HITANIMATION,
+ CONTROLLER_42,
+ CONTROLLER_EFFECTIVENESSSOUND,
+ CONTROLLER_PLAYFANFAREORBGM,
+ CONTROLLER_FAINTINGCRY,
+ CONTROLLER_INTROSLIDE,
+ CONTROLLER_INTROTRAINERBALLTHROW,
+ CONTROLLER_DRAWPARTYSTATUSSUMMARY,
+ CONTROLLER_49,
+ CONTROLLER_50,
+ CONTROLLER_SPRITEINVISIBILITY,
+ CONTROLLER_BATTLEANIMATION,
+ CONTROLLER_LINKSTANDBYMSG,
+ CONTROLLER_RESETACTIONMOVESELECTION,
+ CONTROLLER_55,
+ CONTROLLER_56
+};
+
+#define LAST_CONTROLLER_CMD_ID CONTROLLER_56 + 1
+
+// general functions
+void HandleLinkBattleSetup(void);
+void SetUpBattleVarsAndBirchZigzagoon(void);
+void sub_8032768(void);
+void sub_8033648(void);
+void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
+
+// emitters
void EmitGetMonData(u8 bufferId, u8 arg1, u8 arg2);
+void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
+void EmitSetMonData(u8 bufferId, u8 request, u8 c, 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);
-void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
-void EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
+void EmitReturnMonToBall(u8 bufferId, u8 arg1);
+void EmitDrawTrainerPic(u8 bufferId);
void EmitTrainerSlide(u8 bufferId);
void EmitTrainerSlideBack(u8 bufferId);
-void EmitFaintingCry(u8 bufferId);
-void Emit_x37(u8 bufferId, u8 arg1);
-void EmitHitAnimation(u8 bufferId);
-void EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
-void EmitCmd49(u8 bufferId);
-void EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
-void EmitCmd13(u8 bufferId);
+void EmitFaintAnimation(u8 bufferId);
+void EmitCmd11(u8 bufferId); // unused
+void EmitCmd12(u8 bufferId); // unused
+void EmitBallThrow(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 EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
+void EmitOpenBag(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);
+void EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
void EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
+void EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
+void EmitStatusXor(u8 bufferId, u8 b); // unused
+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 EmitHitAnimation(u8 bufferId);
+void EmitCmd42(u8 bufferId);
+void EmitEffectivenessSound(u8 bufferId, u16 songId);
+void EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
+void EmitFaintingCry(u8 bufferId);
void EmitIntroSlide(u8 bufferId, u8 terrainId);
-void EmitDrawTrainerPic(u8 bufferId);
-void EmitLoadMonSprite(u8 bufferId);
void EmitIntroTrainerBallThrow(u8 bufferId);
-void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
-void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct* movePpData);
-void EmitOpenBag(u8 bufferId, u8* arg1);
-void Emit_x32(u8 bufferId);
-void EmitPrintString(u8 bufferId, u16 stringId);
+void EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
+void EmitCmd49(u8 bufferId);
+void EmitCmd50(u8 bufferId);
+void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
+void EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
+void EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
void EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
-void EmitBallThrow(u8 bufferId, u8 caseId);
-void EmitCmd_x21(u8 bufferId, u8 arg1, u16 arg2);
+void EmitCmd55(u8 bufferId, u8 arg1);
+
+// player controller
+void SetBankFuncToPlayerBufferRunCommand(void);
+void nullsub_21(void);
+void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
+void ActionSelectionDestroyCursorAt(u8 cursorPos);
+
+// recorded player controller
+void SetBankFuncToRecordedPlayerBufferRunCommand(void);
+
+// opponent controller
+void SetBankFuncToOpponentBufferRunCommand(void);
+
+// player partner controller
+void SetBankFuncToPlayerPartnerBufferRunCommand(void);
+
+// safari controller
+void SetBankFuncToSafariBufferRunCommand(void);
+
+// wally controller
+void SetBankFuncToWallyBufferRunCommand(void);
+
+// recorded opponent controller
+void SetBankFuncToRecordedOpponentBufferRunCommand(void);
+
+// link opponent
+void SetBankFuncToLinkOpponentBufferRunCommand(void);
+
+// link partner
+void SetBankFuncToLinkPartnerBufferRunCommand(void);
#endif // GUARD_BATTLE_CONTROLLERS_H
diff --git a/include/battle_interface.h b/include/battle_interface.h
index dee884374..05ea1c021 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -1,6 +1,8 @@
#ifndef GUARD_BATTLE_INTERFACE_H
#define GUARD_BATTLE_INTERFACE_H
+#include "battle_controllers.h"
+
#define TAG_HEALTHBOX_PLAYER1_TILE 0xD6FF
#define TAG_HEALTHBOX_PLAYER2_TILE 0xD700
#define TAG_HEALTHBOX_OPPONENT1_TILE 0xD701
diff --git a/include/battle_util.h b/include/battle_util.h
index c1ff7d8ab..b21b250c4 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -33,6 +33,7 @@
#define ITEMEFFECT_ON_SWITCH_IN 0x0
#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
+#define WEATHER_HAS_EFFECT2 ((!AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_AIR_LOCK, 0, 0)))
#define BS_GET_TARGET 0
#define BS_GET_ATTACKER 1
diff --git a/include/contest.h b/include/contest.h
index 5c473bd2c..7dcde7da2 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -1,7 +1,8 @@
#ifndef GUARD_CONTEST_H
#define GUARD_CONTEST_H
-struct ContestStruct_02039E00 {
+struct ContestStruct_02039E00
+{
u16 unk_00;
u8 unk_02[11];
u8 unk_0d[8];
@@ -11,8 +12,30 @@ struct ContestStruct_02039E00 {
extern struct ContestStruct_02039E00 gUnknown_02039E00[4];
extern u8 gUnknown_02039F24;
-extern EWRAM_DATA u16 gScriptContestCategory;
-extern EWRAM_DATA u8 gUnknown_02039F2E;
-extern EWRAM_DATA u8 gUnknown_02039F30;
+extern u16 gScriptContestCategory;
+extern u8 gUnknown_02039F2E;
+extern u8 gUnknown_02039F30;
+
+struct ContestStruct_field_18
+{
+ // unknown size
+ u16 field_0;
+};
+
+struct ContestResources
+{
+ void *field_0;
+ void *field_4;
+ void *field_8;
+ void *field_C;
+ void *field_10;
+ void *field_14;
+ struct ContestStruct_field_18 *field_18;
+};
+
+extern struct ContestResources *gContestResources;
+
+bool8 IsSpeciesNotUnown(u16 species);
+void LoadContestBgAfterMoveAnim(void);
#endif //GUARD_CONTEST_H
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 5234e5b6c..f8c89fdbd 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -521,6 +521,8 @@
#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled
#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled
+// BLDCNT
+
// SOUNDCNT_H
#define SOUND_CGB_MIX_QUARTER 0x0000
#define SOUND_CGB_MIX_HALF 0x0001
diff --git a/include/link.h b/include/link.h
index 5f5654e4d..b8835ce04 100644
--- a/include/link.h
+++ b/include/link.h
@@ -141,6 +141,7 @@ extern u8 gShouldAdvanceLinkState;
extern struct LinkPlayer gLinkPlayers[];
extern u16 word_3002910[];
extern bool8 gReceivedRemoteLinkPlayers;
+extern bool8 gLinkVSyncDisabled;
void Task_DestroySelf(u8);
void OpenLink(void);
@@ -184,5 +185,11 @@ bool8 sub_800A520(void);
bool8 sub_8010500(void);
void sub_800DFB4(u8, u8);
void sub_800ADF8(void);
+void sub_800B488(void);
+void sub_8009734(void);
+void sub_800A620(void);
+void sub_8011BD0(void);
+u8 sub_800ABAC(void);
+u8 sub_800ABBC(void);
#endif // GUARD_LINK_H
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index 65ad998e6..6b80e220f 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -3,6 +3,7 @@
extern u32 gRecordedBattleRngSeed;
+void sub_8184DA4(u8 arg0);
void sub_8185F84(void);
void sub_8184E58(void);
void RecordedBattle_SetBankAction(u8 bank, u8 action);
@@ -15,5 +16,7 @@ u8 MoveRecordedBattleToSaveData(void);
void sub_818603C(u8);
void sub_8185FD0(void);
void sub_8186444(void);
+void sub_8185EB8(void);
+u8 sub_81850DC(u8 *arg0);
#endif // GUARD_RECORDED_BATTLE_H
diff --git a/include/sprite.h b/include/sprite.h
index a9377165e..531314079 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -251,7 +251,7 @@ void BuildOamBuffer(void);
u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
u8 CreateInvisibleSprite(void (*callback)(struct Sprite *));
-u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
+u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
void DestroySprite(struct Sprite *sprite);
void ResetOamRange(u8 a, u8 b);
void LoadOam(void);