pokeemerald/include/battle_controllers.h

282 lines
9.3 KiB
C
Raw Normal View History

2017-09-20 00:28:00 +02:00
#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,
};
2017-10-06 17:06:45 +02:00
2018-07-07 19:57:09 +02:00
// Special arguments for Battle Controller functions.
2017-10-06 17:06:45 +02:00
#define RESET_ACTION_MOVE_SELECTION 0
#define RESET_ACTION_SELECTION 1
#define RESET_MOVE_SELECTION 2
#define BALL_NO_SHAKES 0
#define BALL_1_SHAKE 1
#define BALL_2_SHAKES 2
#define BALL_3_SHAKES_FAIL 3
#define BALL_3_SHAKES_SUCCESS 4
#define BALL_TRAINER_BLOCK 5
2017-10-22 18:43:15 +02:00
#define INSTANT_HP_BAR_DROP 32767
2018-07-07 19:57:09 +02:00
// Special return values in gBattleBufferB from Battle Controller functions.
#define RET_VALUE_LEVELLED_UP 11
2017-10-22 18:43:15 +02:00
struct UnusedControllerStruct
{
2018-06-20 23:07:51 +02:00
u8 field_0:7;
u8 flag_x80:1;
2017-10-22 18:43:15 +02:00
};
2017-09-25 00:09:13 +02:00
struct HpAndStatus
{
u16 hp;
u32 status;
};
2017-09-26 22:39:59 +02:00
struct MovePpInfo
{
u16 moves[4];
2017-09-26 22:39:59 +02:00
u8 pp[4];
u8 ppBonuses;
};
struct ChooseMoveStruct
{
u16 moves[4];
2017-10-08 14:54:51 +02:00
u8 currentPp[4];
u8 maxPp[4];
u16 species;
u8 monType1;
u8 monType2;
};
2017-10-13 19:46:27 +02:00
enum
{
CONTROLLER_GETMONDATA,
CONTROLLER_GETRAWMONDATA,
CONTROLLER_SETMONDATA,
CONTROLLER_SETRAWMONDATA,
CONTROLLER_LOADMONSPRITE,
CONTROLLER_SWITCHINANIM,
2017-10-14 11:34:26 +02:00
CONTROLLER_RETURNMONTOBALL,
2017-10-13 19:46:27 +02:00
CONTROLLER_DRAWTRAINERPIC,
CONTROLLER_TRAINERSLIDE,
CONTROLLER_TRAINERSLIDEBACK,
CONTROLLER_FAINTANIMATION,
CONTROLLER_PALETTEFADE,
2017-10-22 18:43:15 +02:00
CONTROLLER_SUCCESSBALLTHROWANIM,
CONTROLLER_BALLTHROWANIM,
2017-10-13 19:46:27 +02:00
CONTROLLER_PAUSE,
CONTROLLER_MOVEANIMATION,
CONTROLLER_PRINTSTRING,
CONTROLLER_PRINTSTRINGPLAYERONLY,
CONTROLLER_CHOOSEACTION,
2017-10-22 18:43:15 +02:00
CONTROLLER_UNKNOWNYESNOBOX,
2017-10-14 11:34:26 +02:00
CONTROLLER_CHOOSEMOVE,
2017-10-13 19:46:27 +02:00
CONTROLLER_OPENBAG,
2017-10-14 11:34:26 +02:00
CONTROLLER_CHOOSEPOKEMON,
2017-10-13 19:46:27 +02:00
CONTROLLER_23,
CONTROLLER_HEALTHBARUPDATE,
2017-10-14 11:34:26 +02:00
CONTROLLER_EXPUPDATE,
2017-10-13 19:46:27 +02:00
CONTROLLER_STATUSICONUPDATE,
CONTROLLER_STATUSANIMATION,
CONTROLLER_STATUSXOR,
2017-10-14 11:34:26 +02:00
CONTROLLER_DATATRANSFER,
CONTROLLER_DMA3TRANSFER,
2017-10-13 19:46:27 +02:00
CONTROLLER_31,
CONTROLLER_32,
2017-10-22 18:43:15 +02:00
CONTROLLER_TWORETURNVALUES,
CONTROLLER_CHOSENMONRETURNVALUE,
CONTROLLER_ONERETURNVALUE,
CONTROLLER_ONERETURNVALUE_DUPLICATE,
2017-10-13 19:46:27 +02:00
CONTROLLER_37,
CONTROLLER_38,
CONTROLLER_39,
CONTROLLER_40,
CONTROLLER_HITANIMATION,
CONTROLLER_42,
CONTROLLER_EFFECTIVENESSSOUND,
2017-10-14 11:34:26 +02:00
CONTROLLER_PLAYFANFAREORBGM,
2017-10-13 19:46:27 +02:00
CONTROLLER_FAINTINGCRY,
CONTROLLER_INTROSLIDE,
2017-10-14 11:34:26 +02:00
CONTROLLER_INTROTRAINERBALLTHROW,
CONTROLLER_DRAWPARTYSTATUSSUMMARY,
2018-06-28 21:06:32 +02:00
CONTROLLER_HIDEPARTYSTATUSSUMMARY,
2018-06-20 23:07:51 +02:00
CONTROLLER_ENDBOUNCE,
2017-10-13 19:46:27 +02:00
CONTROLLER_SPRITEINVISIBILITY,
CONTROLLER_BATTLEANIMATION,
CONTROLLER_LINKSTANDBYMSG,
CONTROLLER_RESETACTIONMOVESELECTION,
CONTROLLER_55,
2017-10-31 18:49:29 +01:00
/*new controllers should go here*/
CONTROLLER_TERMINATOR_NOP,
2017-10-31 18:04:08 +01:00
CONTROLLER_CMDS_COUNT
2017-10-13 19:46:27 +02:00
};
2017-10-13 17:22:50 +02:00
// general functions
void HandleLinkBattleSetup(void);
void SetUpBattleVarsAndBirchZigzagoon(void);
void sub_8032768(void);
void sub_8033648(void);
2017-10-14 11:34:26 +02:00
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
2017-10-13 17:22:50 +02:00
// emitters
2018-02-06 20:48:02 +01:00
void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck);
void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused
void BtlController_EmitLoadMonSprite(u8 bufferId);
void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1);
void BtlController_EmitDrawTrainerPic(u8 bufferId);
void BtlController_EmitTrainerSlide(u8 bufferId);
void BtlController_EmitTrainerSlideBack(u8 bufferId);
void BtlController_EmitFaintAnimation(u8 bufferId);
void BtlController_EmitPaletteFade(u8 bufferId); // unused
void BtlController_EmitSuccessBallThrowAnim(u8 bufferId); // unused
void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId);
void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data); // unused
void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
void BtlController_EmitPrintString(u8 bufferId, u16 stringId);
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
void BtlController_EmitUnknownYesNoBox(u8 bufferId);
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
void BtlController_EmitChooseItem(u8 bufferId, u8* arg1);
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
void BtlController_EmitCmd23(u8 bufferId); // unused
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
void BtlController_EmitStatusXor(u8 bufferId, u8 b); // unused
void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data);
void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused
void BtlController_EmitCmd32(u8 bufferId, u16 size, void *c); // unused
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1);
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
void BtlController_EmitCmd37(u8 bufferId); // unused
void BtlController_EmitCmd38(u8 bufferId, u8 b); // unused
void BtlController_EmitCmd39(u8 bufferId); // unused
void BtlController_EmitCmd40(u8 bufferId); // unused
void BtlController_EmitHitAnimation(u8 bufferId);
void BtlController_EmitCmd42(u8 bufferId);
void BtlController_EmitPlaySE(u8 bufferId, u16 songId);
void BtlController_EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
void BtlController_EmitFaintingCry(u8 bufferId);
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId);
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId);
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
2018-06-28 21:06:32 +02:00
void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
2018-06-20 23:07:51 +02:00
void BtlController_EmitEndBounceEffect(u8 bufferId);
2018-02-06 20:48:02 +01:00
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
2018-06-28 21:06:32 +02:00
void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome);
2017-09-28 15:34:21 +02:00
2017-10-13 17:22:50 +02:00
// player controller
2017-10-26 23:12:48 +02:00
void SetControllerToPlayer(void);
2017-10-13 17:22:50 +02:00
void nullsub_21(void);
2017-10-22 18:43:15 +02:00
void PlayerHandleGetRawMonData(void);
void sub_80587B0(void);
void sub_805CC00(struct Sprite *sprite);
void SetCB2ToReshowScreenAfterMenu(void);
void SetCB2ToReshowScreenAfterMenu2(void);
void c3_0802FDF4(u8 taskId);
2017-10-13 17:22:50 +02:00
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
2017-10-22 18:43:15 +02:00
void InitMoveSelectionsVarsAndStrings(void);
2017-10-13 17:22:50 +02:00
// recorded player controller
2017-10-26 23:12:48 +02:00
void SetControllerToRecordedPlayer(void);
2017-10-13 17:22:50 +02:00
// opponent controller
2017-10-26 23:12:48 +02:00
void SetControllerToOpponent(void);
2017-10-13 17:22:50 +02:00
// player partner controller
2017-10-26 23:12:48 +02:00
void SetControllerToPlayerPartner(void);
2017-10-13 17:22:50 +02:00
// safari controller
2017-10-26 23:12:48 +02:00
void SetControllerToSafari(void);
2017-10-13 17:22:50 +02:00
// wally controller
2017-10-26 23:12:48 +02:00
void SetControllerToWally(void);
2017-10-13 17:22:50 +02:00
// recorded opponent controller
2017-10-26 23:12:48 +02:00
void SetControllerToRecordedOpponent(void);
2017-10-13 17:22:50 +02:00
// link opponent
2017-10-26 23:12:48 +02:00
void SetControllerToLinkOpponent(void);
2017-10-13 17:22:50 +02:00
// link partner
2017-10-26 23:12:48 +02:00
void SetControllerToLinkPartner(void);
2017-10-13 17:22:50 +02:00
2017-09-20 00:28:00 +02:00
#endif // GUARD_BATTLE_CONTROLLERS_H