From 4a45b4de4ecc5fb1dbe12868866737e1fc81b7fb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 25 Feb 2018 18:45:00 +0100 Subject: more work --- include/battle.h | 2 +- include/tv.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/battle.h b/include/battle.h index 5225b72e3..6d456fd1b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -472,7 +472,7 @@ struct BattleStruct u8 wishPerishSongBattlerId; bool8 overworldWeatherDone; u8 atkCancellerTracker; - u8 field_1A4[96]; + s16 field_1A4[2][6][4]; u8 field_204[104]; u8 field_26C[40]; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; diff --git a/include/tv.h b/include/tv.h index eca11385e..8235373ae 100644 --- a/include/tv.h +++ b/include/tv.h @@ -16,5 +16,6 @@ size_t sub_80EF370(int value); bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language); void SetPokemonAnglerSpecies(u16 species); void UpdateTVShowsPerDay(u16 days); +void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3); #endif //GUARD_TV_H -- cgit v1.2.3 From 8ff9cb0edec3d8af7f89d7a7a6f83cc457f0ed7c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 26 Feb 2018 11:45:47 +0100 Subject: give up for now --- include/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include') diff --git a/include/battle.h b/include/battle.h index 6d456fd1b..71e8f336d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -472,7 +472,7 @@ struct BattleStruct u8 wishPerishSongBattlerId; bool8 overworldWeatherDone; u8 atkCancellerTracker; - s16 field_1A4[2][6][4]; + s16 field_1A4[2][PARTY_SIZE * 4]; u8 field_204[104]; u8 field_26C[40]; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; -- cgit v1.2.3 From a9212eeb664efcdfb74a2f4bbc5e94f37e27e748 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 27 Feb 2018 18:13:28 +0100 Subject: battle file more done and clean up tv --- include/battle.h | 95 ++++++++++++++++++++++++++++++++++++++-- include/battle_script_commands.h | 8 ++-- include/tv.h | 41 ++++++++++++----- 3 files changed, 127 insertions(+), 17 deletions(-) (limited to 'include') diff --git a/include/battle.h b/include/battle.h index 71e8f336d..8c819f047 100644 --- a/include/battle.h +++ b/include/battle.h @@ -368,6 +368,94 @@ struct BattleResults u8 catchAttempts[11]; // 0x36 }; +struct BattleLinkStringSide +{ + u32 spikesMonId:3; + u32 reflectMonId:3; + u32 lightScreenMonId:3; + u32 safeguardMonId:3; + u32 mistMonId:3; + u32 futureSightMonId:3; + u32 doomDesireMonId:3; + u32 perishSongMonId:3; + u32 wishMonId:3; + u32 grudgeMonId:3; + u32 field_8_6:2; + u32 spikesMoveSlot:2; + u32 reflectMoveSlot:2; + u32 lightScreenMoveSlot:2; + u32 safeguardMoveSlot:2; + u32 mistMoveSlot:2; + u32 futureSightMoveSlot:2; + u32 doomDesireMoveSlot:2; + u32 perishSongMoveSlot:2; + u32 wishMoveSlot:2; + u32 grudgeMoveSlot:2; + u32 destinyBondMonId:3; + u32 destinyBondMoveSlot:2; + u32 field_3_0:4; + u32 field_3_1:3; + u32 explosion:1; + u32 explosionMoveSlot:2; + u32 explosionMonId:3; + u32 perishSong:1; + u32 field_4_2:1; + u32 field_5_0:3; + u32 field_5_1:2; +}; + +struct BattleLinkStringPosition +{ + u32 curseMonId:3; + u32 leechSeedMonId:3; + u32 nightmareMonId:3; + u32 wrapMonId:3; + u32 attractMonId:3; + u32 confusionMonId:3; + u32 curseMoveSlot:2; + u32 leechSeedMoveSlot:2; + u32 nightmareMoveSlot:2; + u32 wrapMoveSlot:2; + u32 attractMoveSlot:2; + u32 confusionMoveSlot:2; + u32 waterSportMoveSlot:2; + u32 waterSportMonId:3; + u32 mudSportMonId:3; + u32 mudSportMoveSlot:2; + u32 ingrainMonId:3; + u32 ingrainMoveSlot:2; + u32 field_5_5:3; + u32 field_6_0:2; +}; + +struct BattleLinkStringMon +{ + u32 psnMonId:3; + u32 badPsnMonId:3; + u32 brnMonId:3; + u32 prlzMonId:3; + u32 slpMonId:3; + u32 frzMonId:3; + u32 psnMoveSlot:2; + u32 badPsnMoveSlot:2; + u32 brnMoveSlot:2; + u32 prlzMoveSlot:2; + u32 slpMoveSlot:2; + u32 frzMoveSlot:2; +}; + +struct UnknownBattleLinkStruct +{ + struct BattleLinkStringMon mon[2][6]; // [side][partyId] + struct BattleLinkStringPosition pos[2][2]; // [side][flank] + struct BattleLinkStringSide side[2]; // [side] +}; + +struct UnknownBattleLinkArrayStruct +{ + s16 unk0[2][6*4]; +}; + struct BattleStruct { u8 turnEffectsTracker; @@ -472,9 +560,9 @@ struct BattleStruct u8 wishPerishSongBattlerId; bool8 overworldWeatherDone; u8 atkCancellerTracker; - s16 field_1A4[2][PARTY_SIZE * 4]; - u8 field_204[104]; - u8 field_26C[40]; + struct UnknownBattleLinkArrayStruct field_1A4; + struct UnknownBattleLinkStruct field_204; + u8 notSureWhatFieldLol[0x28]; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; u8 field_298[8]; u8 field_2A0; @@ -493,6 +581,7 @@ struct BattleStruct #define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY) #define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY) + #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 diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 6c84d1f0f..142ac1f7b 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -4,16 +4,16 @@ #define WINDOW_CLEAR 0x1 #define WINDOW_x80 0x80 -void AI_CalcDmg(u8 bankAtk, u8 bankDef); -u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef); +void AI_CalcDmg(u8 battlerIdAtk, u8 battlerIdDef); +u8 TypeCalc(u16 move, u8 battlerIdAtk, u8 battlerIdDef); u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility); -u8 GetBattlerTurnOrderNum(u8 bank); +u8 GetBattlerTurnOrderNum(u8 battlerId); void SetMoveEffect(bool8 primary, u8 certain); void BattleDestroyYesNoCursorAt(u8 cursorPosition); void BattleCreateYesNoCursorAt(u8 cursorPosition); void BufferMoveToLearnIntoBattleTextBuff2(void); void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags); -bool8 UproarWakeUpCheck(u8 bank); +bool8 UproarWakeUpCheck(u8 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gUnknown_0831C494[][4]; diff --git a/include/tv.h b/include/tv.h index 8235373ae..93854be56 100644 --- a/include/tv.h +++ b/include/tv.h @@ -3,19 +3,40 @@ extern u8 *const gTVStringVarPtrs[3]; -void ClearTVShowData(void); -void PutPokemonTodayCaughtOnAir(void); +void sub_80EE184(void); +void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove); +void sub_80EE8C8(u16 winStreak, u8 facility); +void DoTVShow(void); +void DoTVShowInSearchOfTrainers(void); +void sub_80EDCE8(void); +void sub_80EE2CC(void); +void sub_80EE72C(void); +void sub_80EED10(void); +void sub_80EED34(void); +void sub_80EED60(u16 delta); +void sub_80F01B8(void); +void sub_80F01E8(void *src, u32 size, u8 masterIdx); +void sub_80EE4DC(struct Pokemon *pokemon, u8 ribbonMonDataIdx); u32 GetPlayerIDAsU32(void); bool8 GetPriceReduction(u8 newsKind); +void sub_80F14F8(TVShow *shows); +size_t CountDigits(int value); u8 GetRibbonCount(struct Pokemon *pokemon); -void TV_PutSecretBaseVisitOnTheAir(void); -void sub_80EE184(void); +void sub_80EDE70(u16 nCoinsSpent); +void sub_80EDE84(u16 nCoinsSpent); +void sub_80EDD78(u16 nCoinsPaidOut); void sub_80EEA70(void); -void sub_80F14F8(TVShow *shows); -size_t sub_80EF370(int value); -bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language); -void SetPokemonAnglerSpecies(u16 species); -void UpdateTVShowsPerDay(u16 days); -void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3); +void sub_80EDB44(void); +void sub_80EDC60(const u16 *words); +void sub_80EDA80(void); +void sub_80F0C7C(void *src, u32 size, u8 masterIdx); +void sub_80F0BB8(void); +void sub_80ED950(bool8 flag); +void sub_80EEC80(void); +void sub_80EECA4(void); +void sub_80EECC8(void); +void sub_80EECEC(void); +void sub_80F1208(TVShow *shows); +void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed); #endif //GUARD_TV_H -- cgit v1.2.3 From 59ff4aec9b792acacbdf6978ba4e9f63543af41f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 27 Feb 2018 20:40:09 +0100 Subject: decompile and document battle tv --- include/battle.h | 37 +++++++++++++++++-------------------- include/battle_link_817C95C.h | 11 ----------- include/battle_tv.h | 11 +++++++++++ include/global.tv.h | 4 ++-- include/tv.h | 1 + 5 files changed, 31 insertions(+), 33 deletions(-) delete mode 100644 include/battle_link_817C95C.h create mode 100644 include/battle_tv.h (limited to 'include') diff --git a/include/battle.h b/include/battle.h index 8c819f047..731b5692e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -368,7 +368,7 @@ struct BattleResults u8 catchAttempts[11]; // 0x36 }; -struct BattleLinkStringSide +struct BattleTv_Side { u32 spikesMonId:3; u32 reflectMonId:3; @@ -380,7 +380,7 @@ struct BattleLinkStringSide u32 perishSongMonId:3; u32 wishMonId:3; u32 grudgeMonId:3; - u32 field_8_6:2; + u32 usedMoveSlot:2; u32 spikesMoveSlot:2; u32 reflectMoveSlot:2; u32 lightScreenMoveSlot:2; @@ -393,18 +393,15 @@ struct BattleLinkStringSide u32 grudgeMoveSlot:2; u32 destinyBondMonId:3; u32 destinyBondMoveSlot:2; - u32 field_3_0:4; - u32 field_3_1:3; + u32 faintCause:4; + u32 faintCauseMonId:3; u32 explosion:1; u32 explosionMoveSlot:2; u32 explosionMonId:3; u32 perishSong:1; - u32 field_4_2:1; - u32 field_5_0:3; - u32 field_5_1:2; }; -struct BattleLinkStringPosition +struct BattleTv_Position { u32 curseMonId:3; u32 leechSeedMonId:3; @@ -424,11 +421,11 @@ struct BattleLinkStringPosition u32 mudSportMoveSlot:2; u32 ingrainMonId:3; u32 ingrainMoveSlot:2; - u32 field_5_5:3; - u32 field_6_0:2; + u32 attackedByMonId:3; + u32 attackedByMoveSlot:2; }; -struct BattleLinkStringMon +struct BattleTv_Mon { u32 psnMonId:3; u32 badPsnMonId:3; @@ -444,16 +441,16 @@ struct BattleLinkStringMon u32 frzMoveSlot:2; }; -struct UnknownBattleLinkStruct +struct BattleTv { - struct BattleLinkStringMon mon[2][6]; // [side][partyId] - struct BattleLinkStringPosition pos[2][2]; // [side][flank] - struct BattleLinkStringSide side[2]; // [side] + struct BattleTv_Mon mon[2][6]; // [side][partyId] + struct BattleTv_Position pos[2][2]; // [side][flank] + struct BattleTv_Side side[2]; // [side] }; -struct UnknownBattleLinkArrayStruct +struct BattleTvMovePoints { - s16 unk0[2][6*4]; + s16 points[2][PARTY_SIZE * 4]; }; struct BattleStruct @@ -535,7 +532,7 @@ struct BattleStruct u8 field_B0; u8 hpScale; u8 synchronizeMoveEffect; - u8 field_B3; + bool8 anyMonHasTransformed; void (*savedCallback)(void); u16 usedHeldItems[MAX_BATTLERS_COUNT]; u8 chosenItem[4]; // why is this an u8? @@ -560,8 +557,8 @@ struct BattleStruct u8 wishPerishSongBattlerId; bool8 overworldWeatherDone; u8 atkCancellerTracker; - struct UnknownBattleLinkArrayStruct field_1A4; - struct UnknownBattleLinkStruct field_204; + struct BattleTvMovePoints tvMovePoints; + struct BattleTv tv; u8 notSureWhatFieldLol[0x28]; u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT]; u8 field_298[8]; diff --git a/include/battle_link_817C95C.h b/include/battle_link_817C95C.h deleted file mode 100644 index cb2cb0b27..000000000 --- a/include/battle_link_817C95C.h +++ /dev/null @@ -1,11 +0,0 @@ -#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 GetBattlerMoveSlotId(u8 bank, u16 move); - -#endif // GUARD_BATTLE_LINK_817C95C_H diff --git a/include/battle_tv.h b/include/battle_tv.h new file mode 100644 index 000000000..72466d73b --- /dev/null +++ b/include/battle_tv.h @@ -0,0 +1,11 @@ +#ifndef GUARD_BATTLE_TV_H +#define GUARD_BATTLE_TV_H + +void BattleTv_SetDataBasedOnString(u16 stringId); +void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr); +void BattleTv_SetDataBasedOnAnimation(u8 animationId); +void TryPutLinkBattleTvShowOnAir(void); +void BattleTv_ClearExplosionFaintCause(void); +u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId); + +#endif // GUARD_BATTLE_TV_H diff --git a/include/global.tv.h b/include/global.tv.h index 5f65aa8e0..81f181cf3 100644 --- a/include/global.tv.h +++ b/include/global.tv.h @@ -188,11 +188,11 @@ typedef union // size = 0x24 struct { /*0x00*/ u8 kind; /*0x01*/ bool8 active; - /*0x02*/ u16 species; + /*0x02*/ u16 speciesOpponent; /*0x04*/ u8 playerName[8]; /*0x0C*/ u8 linkOpponentName[8]; /*0x14*/ u16 move; - /*0x16*/ u16 species2; + /*0x16*/ u16 speciesPlayer; /*0x18*/ u8 battleType; /*0x19*/ u8 language; /*0x1A*/ u8 linkOpponentLanguage; diff --git a/include/tv.h b/include/tv.h index 93854be56..8c7c4701e 100644 --- a/include/tv.h +++ b/include/tv.h @@ -38,5 +38,6 @@ void sub_80EECC8(void); void sub_80EECEC(void); void sub_80F1208(TVShow *shows); void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed); +void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent); #endif //GUARD_TV_H -- cgit v1.2.3 From d29b9d268fe46322c740fe5ac440641834686f9d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 28 Feb 2018 00:18:59 +0100 Subject: make it compile --- include/tv.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include') diff --git a/include/tv.h b/include/tv.h index 8c7c4701e..19c900ba8 100644 --- a/include/tv.h +++ b/include/tv.h @@ -3,6 +3,7 @@ extern u8 *const gTVStringVarPtrs[3]; +void ClearTVShowData(void); void sub_80EE184(void); void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove); void sub_80EE8C8(u16 winStreak, u8 facility); @@ -38,6 +39,11 @@ void sub_80EECC8(void); void sub_80EECEC(void); void sub_80F1208(TVShow *shows); void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed); +void SetPokemonAnglerSpecies(u16 species); +void UpdateTVShowsPerDay(u16 days); +void PutPokemonTodayCaughtOnAir(void); +void TV_PutSecretBaseVisitOnTheAir(void); +bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language); void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent); #endif //GUARD_TV_H -- cgit v1.2.3