diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/battle.h | 115 | ||||
-rw-r--r-- | include/battle_2.h | 44 | ||||
-rw-r--r-- | include/battle_anim.h | 21 | ||||
-rw-r--r-- | include/battle_controllers.h | 161 | ||||
-rw-r--r-- | include/battle_interface.h | 14 | ||||
-rw-r--r-- | include/battle_link_817C95C.h | 11 | ||||
-rw-r--r-- | include/battle_script_commands.h | 4 | ||||
-rw-r--r-- | include/data2.h | 1 | ||||
-rw-r--r-- | include/gba/io_reg.h | 2 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-rw-r--r-- | include/link.h | 1 | ||||
-rw-r--r-- | include/party_menu.h | 1 | ||||
-rw-r--r-- | include/pokeball.h | 8 | ||||
-rw-r--r-- | include/pokemon.h | 7 | ||||
-rw-r--r-- | include/recorded_battle.h | 2 | ||||
-rw-r--r-- | include/trainer_classes.h | 51 | ||||
-rw-r--r-- | include/trainer_front_sprites.h | 101 |
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 |