Conflicts: include/battle.h include/battle_controllers.h include/battle_script_commands.h include/contest.h include/list_menu.h src/battle_controllers.c src/battle_gfx_sfx_util.c src/battle_main.c src/battle_message.c src/battle_tower.c src/berry_crush.c src/contest.c src/ereader_helpers.c src/evolution_scene.c src/hall_of_fame.c src/mauville_old_man.c src/mystery_gift_menu.c src/pokedex.c src/pokenav_conditions_search_results.c src/pokenav_menu_handler_gfx.c src/pokenav_ribbons_list.c src/rom_header_gf.c src/union_room.c src/union_room_battle.c src/union_room_player_avatar.c
398 lines
16 KiB
C
398 lines
16 KiB
C
#ifndef GUARD_BATTLE_CONTROLLERS_H
|
|
#define GUARD_BATTLE_CONTROLLERS_H
|
|
|
|
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,
|
|
};
|
|
|
|
// Accessors for gBattleControllerExecFlags.
|
|
//
|
|
// These are provided for documentation purposes, to make the battle
|
|
// controller internals and the link communication internals more
|
|
// legible. Several of these have functions that you should call
|
|
// (e.g. MarkBattlerForControllerExec) instead of using these macros
|
|
// directly.
|
|
|
|
#define MARK_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler) \
|
|
gBattleControllerExecFlags |= (1u << battler)
|
|
|
|
#define MARK_BATTLE_CONTROLLER_IDLE_ON_LOCAL(battler) \
|
|
gBattleControllerExecFlags &= ~(1u << battler)
|
|
|
|
#define IS_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler) \
|
|
(gBattleControllerExecFlags & (1u << battler))
|
|
|
|
#define MARK_BATTLE_CONTROLLER_MESSAGE_OUTBOUND_OVER_LINK(battler) \
|
|
gBattleControllerExecFlags |= (1u << battler) << (32 - MAX_BATTLERS_COUNT)
|
|
|
|
#define MARK_BATTLE_CONTROLLER_MESSAGE_SYNCHRONIZED_OVER_LINK(battler) \
|
|
gBattleControllerExecFlags &= ~((1 << 28) << (battler))
|
|
|
|
#define MARK_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
|
|
gBattleControllerExecFlags |= (1u << battler) << ((playerId) << 2)
|
|
|
|
#define MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId) \
|
|
gBattleControllerExecFlags &= ~(1u << battler) << ((playerId) * 4)
|
|
|
|
#define IS_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
|
|
(gBattleControllerExecFlags & (1u << battler) << ((playerId) * 4))
|
|
|
|
// This actually checks if a specific controller is active on any player or if
|
|
// *any* controller is pending sync over link communications, but the macro name
|
|
// can only be so specific before it just gets ridiculous.
|
|
#define IS_BATTLE_CONTROLLER_ACTIVE_OR_PENDING_SYNC_ANYWHERE(battler) \
|
|
(gBattleControllerExecFlags & ( \
|
|
(1u << battler) \
|
|
| (0xF << 28) \
|
|
| (1u << battler << 4) \
|
|
| (1u << battler << 8) \
|
|
| (1u << battler << 12) \
|
|
))
|
|
|
|
// Special arguments for Battle Controller functions.
|
|
|
|
enum {
|
|
// For commands sent from the core battle engine to a controller.
|
|
B_COMM_TO_CONTROLLER, // gBattleBufferA
|
|
|
|
// For replies sent from a controller to the core battle engine.
|
|
B_COMM_TO_ENGINE, // gBattleBufferB
|
|
|
|
// During local play, a controller must directly mark itself as
|
|
// inactive when it's done processing, whether or not it sends
|
|
// a reply. During multiplayer, it must NOT directly mark itself
|
|
// as inactive, but instead send one of these, with the player's
|
|
// multiplayer ID as data.
|
|
B_COMM_CONTROLLER_IS_DONE
|
|
};
|
|
|
|
enum {
|
|
RESET_ACTION_MOVE_SELECTION,
|
|
RESET_ACTION_SELECTION,
|
|
RESET_MOVE_SELECTION,
|
|
};
|
|
|
|
enum {
|
|
BALL_NO_SHAKES,
|
|
BALL_1_SHAKE,
|
|
BALL_2_SHAKES,
|
|
BALL_3_SHAKES_FAIL,
|
|
BALL_3_SHAKES_SUCCESS,
|
|
BALL_TRAINER_BLOCK,
|
|
};
|
|
|
|
enum {
|
|
LINK_STANDBY_MSG_STOP_BOUNCE,
|
|
LINK_STANDBY_STOP_BOUNCE_ONLY,
|
|
LINK_STANDBY_MSG_ONLY,
|
|
};
|
|
|
|
#define INSTANT_HP_BAR_DROP 0x7FFF
|
|
|
|
#define PARTY_SUMM_SKIP_DRAW_DELAY (1 << 7)
|
|
|
|
// Special return values in gBattleBufferB from Battle Controller functions.
|
|
#define RET_VALUE_LEVELED_UP 11
|
|
#define RET_GIMMICK (1 << 7)
|
|
|
|
struct UnusedControllerStruct
|
|
{
|
|
u8 unk:7;
|
|
u8 flag:1;
|
|
};
|
|
|
|
struct HpAndStatus
|
|
{
|
|
u16 hp;
|
|
u32 status;
|
|
};
|
|
|
|
struct MovePpInfo
|
|
{
|
|
u16 moves[MAX_MON_MOVES];
|
|
u8 pp[MAX_MON_MOVES];
|
|
u8 ppBonuses;
|
|
};
|
|
|
|
struct ChooseMoveStruct
|
|
{
|
|
u16 moves[MAX_MON_MOVES];
|
|
u8 currentPp[MAX_MON_MOVES];
|
|
u8 maxPp[MAX_MON_MOVES];
|
|
u16 species;
|
|
u8 monTypes[3];
|
|
struct ZMoveData zmove;
|
|
};
|
|
|
|
enum
|
|
{
|
|
CONTROLLER_GETMONDATA,
|
|
CONTROLLER_GETRAWMONDATA,
|
|
CONTROLLER_SETMONDATA,
|
|
CONTROLLER_SETRAWMONDATA,
|
|
CONTROLLER_LOADMONSPRITE,
|
|
CONTROLLER_SWITCHINANIM,
|
|
CONTROLLER_RETURNMONTOBALL,
|
|
CONTROLLER_DRAWTRAINERPIC,
|
|
CONTROLLER_TRAINERSLIDE,
|
|
CONTROLLER_TRAINERSLIDEBACK,
|
|
CONTROLLER_FAINTANIMATION,
|
|
CONTROLLER_PALETTEFADE,
|
|
CONTROLLER_SUCCESSBALLTHROWANIM,
|
|
CONTROLLER_BALLTHROWANIM,
|
|
CONTROLLER_PAUSE,
|
|
CONTROLLER_MOVEANIMATION,
|
|
CONTROLLER_PRINTSTRING,
|
|
CONTROLLER_PRINTSTRINGPLAYERONLY,
|
|
CONTROLLER_CHOOSEACTION,
|
|
CONTROLLER_YESNOBOX,
|
|
CONTROLLER_CHOOSEMOVE,
|
|
CONTROLLER_OPENBAG,
|
|
CONTROLLER_CHOOSEPOKEMON,
|
|
CONTROLLER_23,
|
|
CONTROLLER_HEALTHBARUPDATE,
|
|
CONTROLLER_EXPUPDATE,
|
|
CONTROLLER_STATUSICONUPDATE,
|
|
CONTROLLER_STATUSANIMATION,
|
|
CONTROLLER_STATUSXOR,
|
|
CONTROLLER_DATATRANSFER,
|
|
CONTROLLER_DMA3TRANSFER,
|
|
CONTROLLER_PLAYBGM,
|
|
CONTROLLER_32,
|
|
CONTROLLER_TWORETURNVALUES,
|
|
CONTROLLER_CHOSENMONRETURNVALUE,
|
|
CONTROLLER_ONERETURNVALUE,
|
|
CONTROLLER_ONERETURNVALUE_DUPLICATE,
|
|
CONTROLLER_HITANIMATION,
|
|
CONTROLLER_CANTSWITCH,
|
|
CONTROLLER_PLAYSE,
|
|
CONTROLLER_PLAYFANFAREORBGM,
|
|
CONTROLLER_FAINTINGCRY,
|
|
CONTROLLER_INTROSLIDE,
|
|
CONTROLLER_INTROTRAINERBALLTHROW,
|
|
CONTROLLER_DRAWPARTYSTATUSSUMMARY,
|
|
CONTROLLER_HIDEPARTYSTATUSSUMMARY,
|
|
CONTROLLER_ENDBOUNCE,
|
|
CONTROLLER_SPRITEINVISIBILITY,
|
|
CONTROLLER_BATTLEANIMATION,
|
|
CONTROLLER_LINKSTANDBYMSG,
|
|
CONTROLLER_RESETACTIONMOVESELECTION,
|
|
CONTROLLER_ENDLINKBATTLE,
|
|
CONTROLLER_DEBUGMENU,
|
|
/*new controllers should go here*/
|
|
CONTROLLER_TERMINATOR_NOP,
|
|
CONTROLLER_CMDS_COUNT
|
|
};
|
|
|
|
extern struct UnusedControllerStruct gUnusedControllerStruct;
|
|
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(u32 battler);
|
|
extern void (*gBattlerControllerEndFuncs[MAX_BATTLERS_COUNT])(u32 battler);
|
|
extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
|
|
|
|
// general functions
|
|
void HandleLinkBattleSetup(void);
|
|
void SetUpBattleVarsAndBirchZigzagoon(void);
|
|
void InitBattleControllers(void);
|
|
bool32 IsValidForBattle(struct Pokemon *mon);
|
|
void TryReceiveLinkBattleData(void);
|
|
void PrepareBufferDataTransferLink(u32 battler, u32 bufferId, u16 size, u8 *data);
|
|
|
|
// emitters
|
|
void BtlController_EmitGetMonData(u32 battler, u32 bufferId, u8 requestId, u8 monToCheck);
|
|
void BtlController_EmitSetMonData(u32 battler, u32 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
|
|
void BtlController_EmitLoadMonSprite(u32 battler, u32 bufferId);
|
|
void BtlController_EmitSwitchInAnim(u32 battler, u32 bufferId, u8 partyId, bool8 dontClearTransform, bool8 dontClearSubstituteBit);
|
|
void BtlController_EmitReturnMonToBall(u32 battler, u32 bufferId, bool8 skipAnim);
|
|
void BtlController_EmitDrawTrainerPic(u32 battler, u32 bufferId);
|
|
void BtlController_EmitTrainerSlide(u32 battler, u32 bufferId);
|
|
void BtlController_EmitTrainerSlideBack(u32 battler, u32 bufferId);
|
|
void BtlController_EmitFaintAnimation(u32 battler, u32 bufferId);
|
|
void BtlController_EmitBallThrowAnim(u32 battler, u32 bufferId, u8 caseId);
|
|
void BtlController_EmitMoveAnimation(u32 battler, u32 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
|
|
void BtlController_EmitPrintString(u32 battler, u32 bufferId, u16 stringId);
|
|
void BtlController_EmitPrintSelectionString(u32 battler, u32 bufferId, u16 stringId);
|
|
void BtlController_EmitChooseAction(u32 battler, u32 bufferId, u8 action, u16 itemId);
|
|
void BtlController_EmitYesNoBox(u32 battler, u32 bufferId);
|
|
void BtlController_EmitChooseMove(u32 battler, u32 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
|
|
void BtlController_EmitChooseItem(u32 battler, u32 bufferId, u8 *battlePartyOrder);
|
|
void BtlController_EmitChoosePokemon(u32 battler, u32 bufferId, u8 caseId, u8 slotId, u16 abilityId, u8 *data);
|
|
void BtlController_EmitHealthBarUpdate(u32 battler, u32 bufferId, u16 hpValue);
|
|
void BtlController_EmitExpUpdate(u32 battler, u32 bufferId, u8 partyId, s32 expPoints);
|
|
void BtlController_EmitStatusIconUpdate(u32 battler, u32 bufferId, u32 status1, u32 status2);
|
|
void BtlController_EmitStatusAnimation(u32 battler, u32 bufferId, bool8 status2, u32 status);
|
|
void BtlController_EmitDataTransfer(u32 battler, u32 bufferId, u16 size, void *data);
|
|
void BtlController_EmitTwoReturnValues(u32 battler, u32 bufferId, u8 ret8, u32 ret32);
|
|
void BtlController_EmitChosenMonReturnValue(u32 battler, u32 bufferId, u8 partyId, u8 *battlePartyOrder);
|
|
void BtlController_EmitOneReturnValue(u32 battler, u32 bufferId, u16 ret);
|
|
void BtlController_EmitOneReturnValue_Duplicate(u32 battler, u32 bufferId, u16 ret);
|
|
void BtlController_EmitHitAnimation(u32 battler, u32 bufferId);
|
|
void BtlController_EmitCantSwitch(u32 battler, u32 bufferId);
|
|
void BtlController_EmitPlaySE(u32 battler, u32 bufferId, u16 songId);
|
|
void BtlController_EmitPlayFanfareOrBGM(u32 battler, u32 bufferId, u16 songId, bool8 playBGM);
|
|
void BtlController_EmitFaintingCry(u32 battler, u32 bufferId);
|
|
void BtlController_EmitIntroSlide(u32 battler, u32 bufferId, u8 terrainId);
|
|
void BtlController_EmitIntroTrainerBallThrow(u32 battler, u32 bufferId);
|
|
void BtlController_EmitDrawPartyStatusSummary(u32 battler, u32 bufferId, struct HpAndStatus *hpAndStatus, u8 flags);
|
|
void BtlController_EmitHidePartyStatusSummary(u32 battler, u32 bufferId);
|
|
void BtlController_EmitEndBounceEffect(u32 battler, u32 bufferId);
|
|
void BtlController_EmitSpriteInvisibility(u32 battler, u32 bufferId, bool8 isInvisible);
|
|
void BtlController_EmitBattleAnimation(u32 battler, u32 bufferId, u8 animationId, struct DisableStruct *disableStructPtr, u16 argument);
|
|
void BtlController_EmitLinkStandbyMsg(u32 battler, u32 bufferId, u8 mode, bool32 record);
|
|
void BtlController_EmitResetActionMoveSelection(u32 battler, u32 bufferId, u8 caseId);
|
|
void BtlController_EmitEndLinkBattle(u32 battler, u32 bufferId, u8 battleOutcome);
|
|
void BtlController_EmitDebugMenu(u32 battler, u32 bufferId);
|
|
|
|
void BattleControllerComplete(u32 battler); // Can be used for all the controllers.
|
|
void BtlController_Empty(u32 battler); // Empty command, does nothing, only completes the execution.
|
|
void BtlController_TerminatorNop(u32 battler); // Dummy function at the end of the table.
|
|
void BattleControllerDummy(u32 battler);
|
|
void StartSendOutAnim(u32 battler, bool32 dontClearTransform, bool32 dontClearSubstituteBit, bool32 doSlideIn);
|
|
void Controller_WaitForString(u32 battler);
|
|
void Controller_WaitForHealthBar(u32 battler);
|
|
|
|
// handlers
|
|
void BtlController_HandleGetMonData(u32 battler);
|
|
void BtlController_HandleGetRawMonData(u32 battler);
|
|
void BtlController_HandleSetMonData(u32 battler);
|
|
void BtlController_HandleSetRawMonData(u32 battler);
|
|
void BtlController_HandleLoadMonSprite(u32 battler, void (*controllerCallback)(u32 battler));
|
|
void BtlController_HandleSwitchInAnim(u32 battler, bool32 isPlayerSide, void (*controllerCallback)(u32 battler));
|
|
void BtlController_HandleReturnMonToBall(u32 battler);
|
|
void BtlController_HandleDrawTrainerPic(u32 battlerId, u32 trainerPicId, bool32 isFrontPic, s16 xPos, s16 yPos, s32 subpriority);
|
|
void BtlController_HandleTrainerSlide(u32 battler, u32 trainerPicId);
|
|
void BtlController_HandleTrainerSlideBack(u32 battlerId, s16 data0, bool32 startAnim);
|
|
void BtlController_HandleFaintAnimation(u32 battler);
|
|
void BtlController_HandleSuccessBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture);
|
|
void BtlController_HandleBallThrowAnim(u32 battler, u32 target, u32 animId, bool32 allowCriticalCapture);
|
|
void BtlController_HandleMoveAnimation(u32 battler, bool32 updateTvData);
|
|
void BtlController_HandlePrintString(u32 battler, bool32 updateTvData, bool32 arenaPtsDeduct);
|
|
void BtlController_HandleHealthBarUpdate(u32 battler, bool32 updateHpText);
|
|
void DoStatusIconUpdate(u32 battler);
|
|
void BtlController_HandleStatusIconUpdate(u32 battler);
|
|
void BtlController_HandleStatusAnimation(u32 battler);
|
|
void BtlController_HandleClearUnkVar(u32 battler);
|
|
void BtlController_HandleSetUnkVar(u32 battler);
|
|
void BtlController_HandleClearUnkFlag(u32 battler);
|
|
void BtlController_HandleToggleUnkFlag(u32 battler);
|
|
void BtlController_HandleHitAnimation(u32 battler);
|
|
void BtlController_HandlePlaySE(u32 battler);
|
|
void BtlController_HandlePlayFanfareOrBGM(u32 battler);
|
|
void BtlController_HandleFaintingCry(u32 battler);
|
|
void BtlController_HandleIntroSlide(u32 battler);
|
|
void BtlController_HandleSpriteInvisibility(u32 battler);
|
|
bool32 TwoPlayerIntroMons(u32 battlerId); // Double battle with both player pokemon active.
|
|
bool32 TwoOpponentIntroMons(u32 battlerId); // Double battle with both opponent pokemon active.
|
|
void BtlController_HandleIntroTrainerBallThrow(u32 battler, u16 tagTrainerPal, const u32 *trainerPal, s16 framesToWait, void (*controllerCallback)(u32 battler));
|
|
void BtlController_HandleDrawPartyStatusSummary(u32 battler, u32 side, bool32 considerDelay);
|
|
void BtlController_HandleHidePartyStatusSummary(u32 battler);
|
|
void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 updateTvData);
|
|
|
|
// player controller
|
|
void SetControllerToPlayer(u32 battler);
|
|
void SetBattleEndCallbacks(u32 battler);
|
|
void PlayerHandleBallThrowAnim(u32 battler);
|
|
void PlayerHandleExpUpdate(u32 battler);
|
|
u32 LinkPlayerGetTrainerPicId(u32 multiplayerId);
|
|
void CB2_SetUpReshowBattleScreenAfterMenu(void);
|
|
void CB2_SetUpReshowBattleScreenAfterMenu2(void);
|
|
void Task_PlayerController_RestoreBgmAfterCry(u8 taskId);
|
|
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
|
|
void ActionSelectionDestroyCursorAt(u8 cursorPos);
|
|
void InitMoveSelectionsVarsAndStrings(u32 battler);
|
|
void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1);
|
|
void MoveSelectionDestroyCursorAt(u8 cursorPosition);
|
|
void PlayerHandleChooseMove(u32 battler);
|
|
void HandleInputChooseMove(u32 battler);
|
|
void HandleInputChooseTarget(u32 battler);
|
|
void HandleInputShowEntireFieldTargets(u32 battler);
|
|
void HandleInputShowTargets(u32 battler);
|
|
void HandleMoveSwitching(u32 battler);
|
|
void HandleChooseMoveAfterDma3(u32 battler);
|
|
|
|
// recorded player controller
|
|
void SetControllerToRecordedPlayer(u32 battler);
|
|
|
|
// opponent controller
|
|
void SetControllerToOpponent(u32 battler);
|
|
void OpponentHandleTrainerSlide(u32 battler);
|
|
|
|
// player partner controller
|
|
void Controller_PlayerPartnerShowIntroHealthbox(u32 battler); // Also used by the link partner.
|
|
void SetControllerToPlayerPartner(u32 battler);
|
|
|
|
// safari controller
|
|
void SetControllerToSafari(u32 battler);
|
|
|
|
// wally controller
|
|
void SetControllerToWally(u32 battler);
|
|
|
|
// recorded opponent controller
|
|
void SetControllerToRecordedOpponent(u32 battler);
|
|
|
|
// link opponent
|
|
void SetControllerToLinkOpponent(u32 battler);
|
|
|
|
// link partner
|
|
void SetControllerToLinkPartner(u32 battler);
|
|
|
|
#endif // GUARD_BATTLE_CONTROLLERS_H
|