From 729f4e10ed8a53155d992b8904926a10181acafa Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 1 Oct 2017 01:12:42 +0200 Subject: start decompiling battle2 --- include/battle.h | 51 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 14 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index 67d3d873d..72168aa60 100644 --- a/include/battle.h +++ b/include/battle.h @@ -55,6 +55,8 @@ #define BATTLE_TYPE_KYORGE 0x20000000 #define BATTLE_TYPE_RAYQUAZA 0x40000000 +#define TRAINER_OPPONENT_C00 0xC00 +#define TRAINER_OPPONENT_800 0x800 #define STEVEN_PARTNER_ID 0xC03 #define SECRET_BASE_OPPONENT 0x400 @@ -215,14 +217,17 @@ #define BATTLE_TERRAIN_POND 5 #define BATTLE_TERRAIN_ROCK 6 #define BATTLE_TERRAIN_CAVE 7 +#define BATTLE_TERRAIN_INSIDE 8 // 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 MOVE_EFFECT_BYTE 0x3 -#define MULTISTRING_CHOOSER 0x5 -#define MSG_DISPLAY 0x7 +#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 MULTISTRING_CHOOSER 0x5 +#define MSG_DISPLAY 0x7 #define MOVE_TARGET_SELECTED 0x0 #define MOVE_TARGET_DEPENDS 0x1 @@ -633,15 +638,13 @@ struct BattleStruct u8 field_A5; u8 field_A6; u8 field_A7; - u16 hpOnSwitchout[4]; + u16 hpOnSwitchout[2]; + u32 savedBattleTypeFlags; u8 field_B0; u8 hpScale; u8 synchronizeMoveEffect; u8 field_B3; - u8 field_B4; - u8 field_B5; - u8 field_B6; - u8 field_B7; + void (*savedCallback)(void); u16 usedHeldItems[BATTLE_BANKS_COUNT]; u8 field_C0[8]; u16 choicedMove[BATTLE_BANKS_COUNT]; @@ -654,7 +657,11 @@ struct BattleStruct u8 field_DF; u8 mirrorMoveArrays[32]; u16 castformPalette[4][16]; - u8 field_180[32]; + u8 field_180; + u8 field_181; + u8 field_182; + u8 field_183; + struct BattleEnigmaBerry battleEnigmaBerry; u8 field_1A0; u8 field_1A1; u8 filler1A2; @@ -842,13 +849,24 @@ struct BattleScripting u8 atk6C_state; u8 learnMoveState; u8 field_20; + u8 field_21; + u8 field_22; + u8 field_23; + u8 field_24; + u8 multiplayerId; }; extern struct BattleScripting gBattleScripting; // functions +// battle_1 +void LoadBattleTextboxAndBackground(void); +void LoadBattleEntryBackground(void); +void task00_0800F6FC(u8 taskId); + // battle_2 +void CB2_InitBattle(void); void CancelMultiTurnMoves(u8 bank); void PressurePPLose(u8 bankAtk, u8 bankDef, u16 move); void PrepareStringBattle(u16 stringId, u8 bank); @@ -914,13 +932,18 @@ extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gUnknown_0831C494[]; // battle_5 +void AllocateBattleResrouces(void); void AdjustFriendshipOnBattleFaint(u8 bank); void sub_80571DC(u8 bank, u8 arg1); u32 sub_805725C(u8 bank); // battle 7 +void AllocateBattleSpritesData(void); void BattleMusicStop(void); void sub_805E990(struct Pokemon* mon, u8 bank); +void AllocateMonSpritesGfx(void); +void sub_805EF14(void); +bool8 BattleInitAllSprites(u8 *state1, u8 *state2); // rom_80A5C6C u8 GetBankSide(u8 bank); @@ -931,13 +954,13 @@ u8 GetBankByIdentity(u8 bank); #include "sprite.h" -struct BattleSpritesGfx +struct MonSpritesGfx { void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon void* sprites[4]; struct SpriteTemplate templates[4]; }; -extern struct BattleSpritesGfx* gBattleSpritesGfx; +extern struct MonSpritesGfx* gMonSpritesGfxPtr; #endif // GUARD_BATTLE_H -- cgit v1.2.3 From 1fcafaf35aaf92251e7802e1e3ea36e8d5a6067b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 1 Oct 2017 18:54:01 +0200 Subject: more of battle2 done --- include/battle.h | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index 72168aa60..afb3c8d6e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -264,32 +264,32 @@ struct TrainerMonNoItemDefaultMoves { - u16 species; + u16 iv; u8 lvl; - u16 evsValue; + u16 species; }; struct TrainerMonItemDefaultMoves { - u16 species; + u16 iv; u8 lvl; - u16 evsValue; + u16 species; u16 heldItem; }; struct TrainerMonNoItemCustomMoves { - u16 species; + u16 iv; u8 lvl; - u16 evsValue; + u16 species; u16 moves[4]; }; struct TrainerMonItemCustomMoves { - u16 species; + u16 iv; u8 lvl; - u16 evsValue; + u16 species; u16 heldItem; u16 moves[4]; }; @@ -863,10 +863,13 @@ extern struct BattleScripting gBattleScripting; // battle_1 void LoadBattleTextboxAndBackground(void); void LoadBattleEntryBackground(void); +void ApplyPlayerChosenFrameToBattleMenu(void); +bool8 LoadChosenBattleElement(u8 caseId); void task00_0800F6FC(u8 taskId); // battle_2 void CB2_InitBattle(void); +void CB2_QuitRecordedBattle(void); void CancelMultiTurnMoves(u8 bank); void PressurePPLose(u8 bankAtk, u8 bankDef, u16 move); void PrepareStringBattle(u16 stringId, u8 bank); @@ -933,15 +936,18 @@ extern const u8 gUnknown_0831C494[]; // battle_5 void AllocateBattleResrouces(void); +void FreeBattleResources(void); void AdjustFriendshipOnBattleFaint(u8 bank); void sub_80571DC(u8 bank, u8 arg1); u32 sub_805725C(u8 bank); // battle 7 void AllocateBattleSpritesData(void); +void FreeBattleSpritesData(void); +void AllocateMonSpritesGfx(void); +void FreeMonSpritesGfx(void); void BattleMusicStop(void); void sub_805E990(struct Pokemon* mon, u8 bank); -void AllocateMonSpritesGfx(void); void sub_805EF14(void); bool8 BattleInitAllSprites(u8 *state1, u8 *state2); @@ -950,6 +956,30 @@ u8 GetBankSide(u8 bank); u8 GetBankIdentity(u8 bank); u8 GetBankByIdentity(u8 bank); +struct BattleSpriteInfo +{ + u16 invisible : 1; // 0x1 + u16 flag_x2 : 1; // 0x2 + u16 behindSubstitute : 1; // 0x4 + u16 flag_x8 : 1; // 0x8 + u16 hpNumbersNoBars : 1; // 0x10 + u16 transformSpecies; +}; + +struct BattleAnimationInfo +{ + u16 field; // to fill up later +}; + +struct BattleSpriteData +{ + struct BattleSpriteInfo *bankData; + void* field_4; + struct BattleAnimationInfo *animationData; +}; + +extern struct BattleSpriteData *gBattleSpritesDataPtr; + // Move this somewhere else #include "sprite.h" -- cgit v1.2.3 From db58d5e24a89d9c411231a74ce01daed7a303d67 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 2 Oct 2017 23:32:39 +0200 Subject: battle2 3500 C lines --- include/battle.h | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index afb3c8d6e..e5e5a94d1 100644 --- a/include/battle.h +++ b/include/battle.h @@ -54,6 +54,7 @@ #define BATTLE_TYPE_GROUDON 0x10000000 #define BATTLE_TYPE_KYORGE 0x20000000 #define BATTLE_TYPE_RAYQUAZA 0x40000000 +#define BATTLE_TYPE_x80000000 0x80000000 #define TRAINER_OPPONENT_C00 0xC00 #define TRAINER_OPPONENT_800 0x800 @@ -178,6 +179,9 @@ #define ABILITYEFFECT_COUNT_BANK_SIDE 0x11 #define ABILITYEFFECT_COUNT_ON_FIELD 0x12 #define ABILITYEFFECT_CHECK_ON_FIELD 0x13 +#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF + +#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))) @@ -228,6 +232,7 @@ #define MOVE_EFFECT_BYTE 0x3 #define MULTISTRING_CHOOSER 0x5 #define MSG_DISPLAY 0x7 +#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8 #define MOVE_TARGET_SELECTED 0x0 #define MOVE_TARGET_DEPENDS 0x1 @@ -556,7 +561,7 @@ struct BattleResults u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[10]; // 0x2A u8 filler34[2]; - u8 catchAttempts[10]; // 0x36 + u8 catchAttempts[12]; // 0x36 }; extern struct BattleResults gBattleResults; @@ -587,7 +592,7 @@ struct BattleStruct u8 field_49; u8 moneyMultiplier; u8 field_4B; - u8 field_4C; + u8 switchInAbilitiesCounter; u8 field_4D; u8 field_4E; u8 field_4F; @@ -650,7 +655,7 @@ struct BattleStruct u16 choicedMove[BATTLE_BANKS_COUNT]; u16 changedItems[BATTLE_BANKS_COUNT]; u8 intimidateBank; - u8 fillerD9[0xDA-0xD9]; + u8 switchInItemsCounter; u8 field_DA; u8 turnSideTracker; u8 fillerDC[0xDF-0xDC]; @@ -664,7 +669,7 @@ struct BattleStruct struct BattleEnigmaBerry battleEnigmaBerry; u8 field_1A0; u8 field_1A1; - u8 filler1A2; + bool8 overworldWeatherDone; u8 atkCancellerTracker; u8 field_1A4[240]; u8 field_294[4]; @@ -845,7 +850,7 @@ struct BattleScripting u8 statChanger; u8 field_1B; u8 atk23_state; - u8 field_1D; + u8 battleStyle; u8 atk6C_state; u8 learnMoveState; u8 field_20; @@ -874,9 +879,9 @@ void CancelMultiTurnMoves(u8 bank); void PressurePPLose(u8 bankAtk, u8 bankDef, u16 move); void PrepareStringBattle(u16 stringId, u8 bank); u8 GetBattleBank(u8 caseId); -void UndoEffectsAfterFainting(void); +void FaintClearSetData(void); bool8 HasMoveFailed(u8 bank); -void SwitchInClearStructs(void); +void SwitchInClearSetData(void); void sub_803BDA0(u8 bank); void sub_803FA70(u8 bank); void BattleMainCB2(void); @@ -886,6 +891,9 @@ bool8 CanRunFromBattle(u8 bank); bool8 IsRunningFromBattleImpossible(void); void PressurePPLoseOnUsingPerishSong(u8 bankAtk); void PressurePPLoseOnUsingImprision(u8 bankAtk); +u8 GetWhoStrikesFirst(u8 bankAtk, u8 bankDef, bool8 ignoreChosenMoves); +void sub_803CEDC(u8, u8); +void BattleTurnPassed(void); // battle_3 #define MOVE_LIMITATION_ZEROMOVE (1 << 0) @@ -971,10 +979,28 @@ struct BattleAnimationInfo u16 field; // to fill up later }; +struct BattleHealthboxInfo +{ + u8 flag_x1 : 1; + u8 flag_x2 : 1; + u8 flag_x4 : 1; + u8 field_1; + u8 field_2; + u8 field_3; + u8 field_4; + u8 field_5; + u8 field_6; + u8 field_7; + u8 field_8; + u8 field_9; + u8 field_A; + u8 field_B; +}; + struct BattleSpriteData { struct BattleSpriteInfo *bankData; - void* field_4; + struct BattleHealthboxInfo *healthBoxesData; struct BattleAnimationInfo *animationData; }; -- cgit v1.2.3 From 46fe1f441f1f40633b538c9db7d24aa4439629cf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 3 Oct 2017 21:35:27 +0200 Subject: giant battle handler is done wohohohhohoho --- include/battle.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index e5e5a94d1..50d2389ac 100644 --- a/include/battle.h +++ b/include/battle.h @@ -61,7 +61,8 @@ #define STEVEN_PARTNER_ID 0xC03 #define SECRET_BASE_OPPONENT 0x400 -#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000 | BATTLE_TYPE_PYRAMID) +#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000 | BATTLE_TYPE_PYRAMID) +#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000) #define BATTLE_WON 0x1 #define BATTLE_LOST 0x2 @@ -136,6 +137,7 @@ #define HITMARKER_PURSUIT_TRAP 0x00001000 #define HITMARKER_IGNORE_SAFEGUARD 0x00002000 #define HITMARKER_SYNCHRONISE_EFFECT 0x00004000 +#define HITMARKER_x8000 0x00008000 #define HITMARKER_IGNORE_ON_AIR 0x00010000 #define HITMARKER_IGNORE_UNDERGROUND 0x00020000 #define HITMARKER_IGNORE_UNDERWATER 0x00040000 @@ -614,10 +616,7 @@ struct BattleStruct u8 field_7E; u8 formToChangeInto; u8 chosenMovesIds[4]; - u8 field_84; - u8 field_85; - u8 field_86; - u8 field_87; + u8 field_84[4]; u8 field_88; u8 field_89; u8 field_8A; @@ -906,7 +905,7 @@ void BattleTurnPassed(void); void BattleScriptPush(const u8* bsPtr); void BattleScriptPushCursor(void); void BattleScriptPop(void); -u8 sub_803FB4C(void); // msg, can't select a move +u8 TrySetCantSelectMoveBattleScript(void); u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check); bool8 AreAllMovesUnusable(void); u8 GetImprisonedMovesCount(u8 bank, u16 move); -- cgit v1.2.3 From d87d19cfe5903f5fabb0de37d2c46ef84a83c168 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 4 Oct 2017 19:25:14 +0200 Subject: more battle2 done --- include/battle.h | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index 50d2389ac..7c8d89e57 100644 --- a/include/battle.h +++ b/include/battle.h @@ -161,6 +161,20 @@ #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_CANCEL_PARTNER 12 +#define ACTION_NOTHING_FAINTED 13 +#define ACTION_INIT_VALUE 0xFF + #define ABILITYEFFECT_ON_SWITCHIN 0x0 #define ABILITYEFFECT_ENDTURN 0x1 #define ABILITYEFFECT_MOVES_BLOCK 0x2 @@ -232,6 +246,7 @@ #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 @@ -601,7 +616,7 @@ struct BattleStruct u16 expValue; u8 field_52; u8 sentInPokes; - u8 field_54[4]; + bool8 selectionScriptFinished[BATTLE_BANKS_COUNT]; u8 field_58[4]; u8 field_5C[4]; u8 field_60[4][3]; @@ -615,8 +630,8 @@ struct BattleStruct u8 field_7D; u8 field_7E; u8 formToChangeInto; - u8 chosenMovesIds[4]; - u8 field_84[4]; + u8 chosenMovesIds[BATTLE_BANKS_COUNT]; + u8 stateIdAfterSelScript[BATTLE_BANKS_COUNT]; u8 field_88; u8 field_89; u8 field_8A; @@ -890,8 +905,8 @@ bool8 CanRunFromBattle(u8 bank); bool8 IsRunningFromBattleImpossible(void); void PressurePPLoseOnUsingPerishSong(u8 bankAtk); void PressurePPLoseOnUsingImprision(u8 bankAtk); -u8 GetWhoStrikesFirst(u8 bankAtk, u8 bankDef, bool8 ignoreChosenMoves); -void sub_803CEDC(u8, u8); +u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves); +void SwapTurnOrder(u8, u8); void BattleTurnPassed(void); // battle_3 -- cgit v1.2.3 From 342e616d4b49d1772628947782a931964d36e167 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 6 Oct 2017 00:12:01 +0200 Subject: battle2 more and more and more --- include/battle.h | 54 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index 7c8d89e57..639558e60 100644 --- a/include/battle.h +++ b/include/battle.h @@ -56,6 +56,7 @@ #define BATTLE_TYPE_RAYQUAZA 0x40000000 #define BATTLE_TYPE_x80000000 0x80000000 +#define TRAINER_OPPONENT_3FE 0x3FE #define TRAINER_OPPONENT_C00 0xC00 #define TRAINER_OPPONENT_800 0x800 #define STEVEN_PARTNER_ID 0xC03 @@ -71,8 +72,11 @@ #define BATTLE_PLAYER_TELEPORTED 0x5 #define BATTLE_POKE_FLED 0x6 #define BATTLE_CAUGHT 0x7 +#define BATTLE_FORFEITED 0x9 #define BATTLE_OPPONENT_TELEPORTED 0xA +#define BATTLE_OUTCOME_BIT_x80 0x80 + #define STATUS_SLEEP 0x7 #define STATUS_POISON 0x8 #define STATUS_BURN 0x10 @@ -171,8 +175,10 @@ #define ACTION_GO_NEAR 7 #define ACTION_SAFARI_ZONE_RUN 8 #define ACTION_9 9 -#define ACTION_CANCEL_PARTNER 12 -#define ACTION_NOTHING_FAINTED 13 +#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 ABILITYEFFECT_ON_SWITCHIN 0x0 @@ -559,22 +565,19 @@ struct BattleResults u8 playerSwitchesCounter; // 0x2 u8 unk3; // 0x3 u8 unk4; // 0x4 - u8 unk5_0:1; // 0x5 - u8 unk5_1:1; // 0x5 - u8 caughtMonBall:4; // 0x5 - u8 unk5_6:1; // 0x5 - u8 unk5_7:1; // 0x5 - u16 poke1Species; // 0x6 - u8 pokeString1[10]; // 0x8 - u8 unk12; + u8 unk5_0:1; // 0x5 , 0x1 + u8 unk5_1:1; // 0x5 , 0x2 + u8 caughtMonBall:4; // 0x5 , 0x4/0x8/0x10/0x20 + u8 unk5_6:1; // 0x5 , 0x40 + u8 unk5_7:1; // 0x5 , 0x80 + u16 playerMon1Species; // 0x6 + u8 playerMon1Name[11]; // 0x8 u8 battleTurnCounter; // 0x13 - u8 pokeString2[10]; // 0x14 - u8 field_1E; // 0x1E - u8 field_1F; // 0x1F + u8 playerMon2Name[11]; // 0x14 u16 lastOpponentSpecies; // 0x20 - u16 lastUsedMove; // 0x22 - u16 opponentMove; // 0x24 - u16 opponentSpecies; // 0x26 + u16 lastUsedMovePlayer; // 0x22 + u16 lastUsedMoveOpponent; // 0x24 + u16 playerMon2Species; // 0x26 u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[10]; // 0x2A u8 filler34[2]; @@ -605,7 +608,7 @@ struct BattleStruct u8 field_45; u8 field_46; u8 field_47; - u8 field_48; + u8 focusPunchBank; u8 field_49; u8 moneyMultiplier; u8 field_4B; @@ -620,7 +623,7 @@ struct BattleStruct u8 field_58[4]; u8 field_5C[4]; u8 field_60[4][3]; - u8 field_6C; + u8 runTries; u8 caughtMonNick[11]; u8 field_78; u8 field_79; @@ -630,7 +633,7 @@ struct BattleStruct u8 field_7D; u8 field_7E; u8 formToChangeInto; - u8 chosenMovesIds[BATTLE_BANKS_COUNT]; + u8 chosenMovePositions[BATTLE_BANKS_COUNT]; u8 stateIdAfterSelScript[BATTLE_BANKS_COUNT]; u8 field_88; u8 field_89; @@ -665,7 +668,9 @@ struct BattleStruct u8 field_B3; void (*savedCallback)(void); u16 usedHeldItems[BATTLE_BANKS_COUNT]; - u8 field_C0[8]; + u8 field_C0[4]; + u8 field_C4[2]; + u8 field_C6[2]; u16 choicedMove[BATTLE_BANKS_COUNT]; u16 changedItems[BATTLE_BANKS_COUNT]; u8 intimidateBank; @@ -818,6 +823,7 @@ extern struct BattleStruct* gBattleStruct; #define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 #define VARIOUS_SET_MAGIC_COAT_TARGET 1 +#define VARIOUS_CAN_RUN_FROM_BATTLE 2 #define VARIOUS_GET_MOVE_TARGET 3 #define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 #define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 @@ -901,13 +907,15 @@ void sub_803FA70(u8 bank); void BattleMainCB2(void); void VBlankCB_Battle(void); void ResetSentPokesToOpponentValue(void); -bool8 CanRunFromBattle(u8 bank); +bool8 TryRunFromBattle(u8 bank); bool8 IsRunningFromBattleImpossible(void); void PressurePPLoseOnUsingPerishSong(u8 bankAtk); void PressurePPLoseOnUsingImprision(u8 bankAtk); u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves); void SwapTurnOrder(u8, u8); void BattleTurnPassed(void); +void RunBattleScriptCommands_PopCallbacksStack(void); +void RunBattleScriptCommands(void); // battle_3 #define MOVE_LIMITATION_ZEROMOVE (1 << 0) @@ -928,7 +936,7 @@ u8 UpdateTurnCounters(void); u8 TurnBasedEffects(void); bool8 sub_8041364(void); bool8 sub_8041728(void); -void b_clear_atk_up_if_hit_flag_unless_enraged(void); +void TryClearRageStatuses(void); u8 AtkCanceller_UnableToUseMove(void); bool8 sub_80423F4(u8 bank, u8 r1, u8 r2); u8 CastformDataTypeChange(u8 bank); @@ -936,7 +944,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) void BattleScriptExecute(const u8* BS_ptr); void BattleScriptPushCursorAndCallback(const u8* BS_ptr); u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn); -void sub_8045868(u8 bank); +void ClearFuryCutterDestinyBondGrudge(u8 bank); void sub_80458B4(void); u8 GetMoveTarget(u16 move, u8 useMoveTarget); u8 IsPokeDisobedient(void); -- cgit v1.2.3 From 3cc20c7c3f9c3b6a3c0fc8b47c0128c067f34a4a Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 6 Oct 2017 17:06:45 +0200 Subject: battle 2 is done --- include/battle.h | 166 +++++-------------------------------------------------- 1 file changed, 14 insertions(+), 152 deletions(-) (limited to 'include/battle.h') diff --git a/include/battle.h b/include/battle.h index 639558e60..d41702396 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1,6 +1,11 @@ #ifndef GUARD_BATTLE_H #define GUARD_BATTLE_H +// should they be included here or included individually by every file? +#include "battle_util.h" +#include "battle_script_commands.h" +#include "battle_2.h" + /* Banks are a name given to what could be called a 'battlerId' or 'monControllerId'. Each bank has a value consisting of two bits. @@ -119,8 +124,8 @@ #define STATUS3_MINIMIZED 0x100 #define STATUS3_ROOTED 0x400 #define STATUS3_CHARGED_UP 0x200 -#define STATUS3_YAWN 0x1800 //two bits -#define STATUS3_IMPRISONED_OTHERS 0x2000 +#define STATUS3_YAWN 0x1800 // two bits +#define STATUS3_IMPRISONED_OTHERS 0x2000 #define STATUS3_GRUDGE 0x4000 #define STATUS3_CANT_SCORE_A_CRIT 0x8000 #define STATUS3_MUDSPORT 0x10000 @@ -131,6 +136,7 @@ #define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)) +#define HITMARKER_x10 0x00000010 #define HITMARKER_x20 0x00000020 #define HITMARKER_DESTINYBOND 0x00000040 #define HITMARKER_NO_ANIMATIONS 0x00000080 @@ -141,7 +147,7 @@ #define HITMARKER_PURSUIT_TRAP 0x00001000 #define HITMARKER_IGNORE_SAFEGUARD 0x00002000 #define HITMARKER_SYNCHRONISE_EFFECT 0x00004000 -#define HITMARKER_x8000 0x00008000 +#define HITMARKER_RUN 0x00008000 #define HITMARKER_IGNORE_ON_AIR 0x00010000 #define HITMARKER_IGNORE_UNDERGROUND 0x00020000 #define HITMARKER_IGNORE_UNDERWATER 0x00040000 @@ -152,6 +158,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)) @@ -181,32 +188,6 @@ #define ACTION_NOTHING_FAINTED 13 // when choosing an action #define ACTION_INIT_VALUE 0xFF -#define ABILITYEFFECT_ON_SWITCHIN 0x0 -#define ABILITYEFFECT_ENDTURN 0x1 -#define ABILITYEFFECT_MOVES_BLOCK 0x2 -#define ABILITYEFFECT_ABSORBING 0x3 -#define ABILITYEFFECT_CONTACT 0x4 -#define ABILITYEFFECT_IMMUNITY 0x5 -#define ABILITYEFFECT_FORECAST 0x6 -#define ABILITYEFFECT_SYNCHRONIZE 0x7 -#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8 -#define ABILITYEFFECT_INTIMIDATE1 0x9 -#define ABILITYEFFECT_INTIMIDATE2 0xA -#define ABILITYEFFECT_TRACE 0xB -#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC -#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD -#define ABILITYEFFECT_FIELD_SPORT 0xE -#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF -#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10 -#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11 -#define ABILITYEFFECT_COUNT_ON_FIELD 0x12 -#define ABILITYEFFECT_CHECK_ON_FIELD 0x13 -#define ABILITYEFFECT_SWITCH_IN_WEATHER 0xFF - -#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 MOVESTATUS_MISSED (1 << 0) #define MOVESTATUS_SUPEREFFECTIVE (1 << 1) #define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2) @@ -271,25 +252,6 @@ #define TYPE_MUL_NORMAL 10 #define TYPE_MUL_SUPER_EFFECTIVE 20 -#define BS_GET_TARGET 0 -#define BS_GET_ATTACKER 1 -#define BS_GET_EFFECT_BANK 2 -#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 - -// for battle script commands -#define CMP_EQUAL 0x0 -#define CMP_NOT_EQUAL 0x1 -#define CMP_GREATER_THAN 0x2 -#define CMP_LESS_THAN 0x3 -#define CMP_COMMON_BITS 0x4 -#define CMP_NO_COMMON_BITS 0x5 - struct TrainerMonNoItemDefaultMoves { u16 iv; @@ -375,8 +337,8 @@ struct DisableStruct /*0x0F*/ u8 perishSong1 : 4; /*0x0F*/ u8 perishSong2 : 4; /*0x10*/ u8 furyCutterCounter; - /*0x11*/ u8 rolloutTimer1 : 4; - /*0x11*/ u8 rolloutTimer2 : 4; + /*0x11*/ u8 rolloutCounter1 : 4; + /*0x11*/ u8 rolloutCounter2 : 4; /*0x12*/ u8 chargeTimer1 : 4; /*0x12*/ u8 chargeTimer2 : 4; /*0x13*/ u8 tauntTimer1:4; @@ -408,7 +370,7 @@ struct ProtectStruct u32 prlzImmobility:1; /* field_1 */ u32 confusionSelfDmg:1; - u32 notEffective:1; + u32 targetNotAffected:1; u32 chargingTurn:1; u32 fleeFlag:2; // for RunAway and Smoke Ball u32 usedImprisionedMove:1; @@ -574,6 +536,7 @@ struct BattleResults u8 playerMon1Name[11]; // 0x8 u8 battleTurnCounter; // 0x13 u8 playerMon2Name[11]; // 0x14 + u8 field_1F; // 0x1F u16 lastOpponentSpecies; // 0x20 u16 lastUsedMovePlayer; // 0x22 u16 lastUsedMoveOpponent; // 0x24 @@ -814,39 +777,10 @@ extern struct BattleStruct* gBattleStruct; #define B_ANIM_x1C 0x1C #define B_ANIM_x1D 0x1D -#define ATK48_STAT_NEGATIVE 0x1 -#define ATK48_STAT_BY_TWO 0x2 -#define ATK48_BIT_x4 0x4 -#define ATK48_LOWER_FAIL_CHECK 0x8 - -#define ATK4F_DONT_CHECK_STATUSES 0x80 - -#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 -#define VARIOUS_SET_MAGIC_COAT_TARGET 1 -#define VARIOUS_CAN_RUN_FROM_BATTLE 2 -#define VARIOUS_GET_MOVE_TARGET 3 -#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 -#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 -#define VARIOUS_WAIT_CRY 18 -#define VARIOUS_RETURN_OPPONENT_MON1 19 -#define VARIOUS_RETURN_OPPONENT_MON2 20 -#define VARIOUS_SET_TELEPORT_OUTCOME 25 -#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 - -#define ATK80_DMG_CHANGE_SIGN 0 -#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1 -#define ATK80_DMG_DOUBLED 2 - #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 #define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit -#define STAT_CHANGE_BS_PTR 0x1 -#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20 - -#define STAT_CHANGE_WORKED 0 -#define STAT_CHANGE_DIDNT_WORK 1 - #define SET_STAT_BUFF_ID(n)((n & 0xF)) #define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0)) @@ -892,78 +826,6 @@ void ApplyPlayerChosenFrameToBattleMenu(void); bool8 LoadChosenBattleElement(u8 caseId); void task00_0800F6FC(u8 taskId); -// battle_2 -void CB2_InitBattle(void); -void CB2_QuitRecordedBattle(void); -void CancelMultiTurnMoves(u8 bank); -void PressurePPLose(u8 bankAtk, u8 bankDef, u16 move); -void PrepareStringBattle(u16 stringId, u8 bank); -u8 GetBattleBank(u8 caseId); -void FaintClearSetData(void); -bool8 HasMoveFailed(u8 bank); -void SwitchInClearSetData(void); -void sub_803BDA0(u8 bank); -void sub_803FA70(u8 bank); -void BattleMainCB2(void); -void VBlankCB_Battle(void); -void ResetSentPokesToOpponentValue(void); -bool8 TryRunFromBattle(u8 bank); -bool8 IsRunningFromBattleImpossible(void); -void PressurePPLoseOnUsingPerishSong(u8 bankAtk); -void PressurePPLoseOnUsingImprision(u8 bankAtk); -u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves); -void SwapTurnOrder(u8, u8); -void BattleTurnPassed(void); -void RunBattleScriptCommands_PopCallbacksStack(void); -void RunBattleScriptCommands(void); - -// battle_3 -#define MOVE_LIMITATION_ZEROMOVE (1 << 0) -#define MOVE_LIMITATION_PP (1 << 1) -#define MOVE_LIMITATION_DISABLED (1 << 2) -#define MOVE_LIMITATION_TORMENTED (1 << 3) -#define MOVE_LIMITATION_TAUNT (1 << 4) -#define MOVE_LIMITATION_IMPRISION (1 << 5) - -void BattleScriptPush(const u8* bsPtr); -void BattleScriptPushCursor(void); -void BattleScriptPop(void); -u8 TrySetCantSelectMoveBattleScript(void); -u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check); -bool8 AreAllMovesUnusable(void); -u8 GetImprisonedMovesCount(u8 bank, u16 move); -u8 UpdateTurnCounters(void); -u8 TurnBasedEffects(void); -bool8 sub_8041364(void); -bool8 sub_8041728(void); -void TryClearRageStatuses(void); -u8 AtkCanceller_UnableToUseMove(void); -bool8 sub_80423F4(u8 bank, u8 r1, u8 r2); -u8 CastformDataTypeChange(u8 bank); -u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg); -void BattleScriptExecute(const u8* BS_ptr); -void BattleScriptPushCursorAndCallback(const u8* BS_ptr); -u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn); -void ClearFuryCutterDestinyBondGrudge(u8 bank); -void sub_80458B4(void); -u8 GetMoveTarget(u16 move, u8 useMoveTarget); -u8 IsPokeDisobedient(void); - -// battle_script_commands -void AI_CalcDmg(u8 bankAtk, u8 bankDef); -u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef); -u8 AI_TypeCalc(u16 move, u16 species, u8 ability); -u8 BankGetTurnOrder(u8 bank); -void SetMoveEffect(bool8 primary, u8 certain); -void BattleDestroyCursorAt(u8 cursorPosition); -void BattleCreateCursorAt(u8 cursorPosition); -void BufferMoveToLearnIntoBattleTextBuff2(void); -void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags); -bool8 UproarWakeUpCheck(u8 bank); - -extern void (* const gBattleScriptingCommandsTable[])(void); -extern const u8 gUnknown_0831C494[]; - // battle_5 void AllocateBattleResrouces(void); void FreeBattleResources(void); -- cgit v1.2.3