summaryrefslogtreecommitdiff
path: root/src/quest_log_battle.c
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-11-24 10:45:15 -0600
committerGitHub <noreply@github.com>2018-11-24 10:45:15 -0600
commit80116a80fd98679c0449efe33c4e460947f4b8d0 (patch)
tree312a72b8513694aab4db01941cc5d2b37b53dd4e /src/quest_log_battle.c
parent2ed26ab8fcd4e302ab4aac6bb01dba7b5c985914 (diff)
parentbc6416ddd96182d5f786add8d1c1945a2f82f2b9 (diff)
Merge pull request #22 from PikalaxALT/quest_log
Quest log
Diffstat (limited to 'src/quest_log_battle.c')
-rw-r--r--src/quest_log_battle.c164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c
new file mode 100644
index 000000000..c702b6a5c
--- /dev/null
+++ b/src/quest_log_battle.c
@@ -0,0 +1,164 @@
+#include "global.h"
+#include "constants/species.h"
+#include "malloc.h"
+#include "battle.h"
+#include "link.h"
+#include "overworld.h"
+#include "quest_log.h"
+
+struct QuestLogStruct_TrainerBattleRecord
+{
+ u16 v0;
+ u16 v2;
+ u16 v4;
+ u8 v6;
+ u8 v7;
+};
+
+struct QuestLogStruct_WildBattleRecord
+{
+ u16 v0;
+ u16 v2;
+ u8 v4;
+};
+
+void sub_812C334(s32 *, s32 *);
+
+void sub_812BFDC(void)
+{
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_DOME)) && (gUnknown_2023E8A == 1 || gUnknown_2023E8A == 7))
+ {
+ struct QuestLogStruct_TrainerBattleRecord * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_TrainerBattleRecord));
+ struct QuestLogStruct_WildBattleRecord * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_WildBattleRecord));
+ u16 questLogMessageType;
+ u16 playerEndingHP;
+ u16 playerMaxHP;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ {
+ switch (gTrainers[gTrainerBattleOpponent_A].trainerClass)
+ {
+ case 0x54:
+ questLogMessageType = 30;
+ break;
+ case 0x5a:
+ questLogMessageType = 33;
+ break;
+ case 0x57:
+ questLogMessageType = 32;
+ break;
+ default:
+ questLogMessageType = 34;
+ break;
+ }
+ questLogTrainerBattleRecord->v0 = gTrainerBattleOpponent_A;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies;
+ if (GetBattlerSide(gBattleStruct->field_182) == B_SIDE_PLAYER)
+ questLogTrainerBattleRecord->v4 = gBattleMons[gBattleStruct->field_182].species;
+ else if (gBattleMons[GetBattlerAtPosition(0)].hp != 0)
+ questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species;
+ else
+ questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(2)].species;
+ playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp + gBattleMons[GetBattlerAtPosition(2)].hp;
+ playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP + gBattleMons[GetBattlerAtPosition(2)].maxHP;
+ }
+ else
+ {
+ questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies;
+ questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species;
+ playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp;
+ playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP;
+ }
+ questLogTrainerBattleRecord->v7 = sav1_map_get_name();
+ questLogTrainerBattleRecord->v6 = 0;
+ if (playerEndingHP < playerMaxHP / 3 * 2)
+ questLogTrainerBattleRecord->v6 = 1;
+ if (playerEndingHP < playerMaxHP / 3)
+ questLogTrainerBattleRecord->v6++;
+ sub_8113550(questLogMessageType, (const u16 *)questLogTrainerBattleRecord);
+ }
+ else
+ {
+ if (gUnknown_2023E8A == 1)
+ {
+ questLogWildBattleRecord->v0 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES);
+ questLogWildBattleRecord->v2 = SPECIES_NONE;
+ }
+ else
+ {
+ questLogWildBattleRecord->v0 = SPECIES_NONE;
+ questLogWildBattleRecord->v2 = GetMonData(gEnemyParty + 0, MON_DATA_SPECIES);
+ }
+ questLogWildBattleRecord->v4 = sav1_map_get_name();
+ sub_8113550(31, (const u16 *)questLogWildBattleRecord);
+ }
+ Free(questLogTrainerBattleRecord);
+ Free(questLogWildBattleRecord);
+ }
+}
+
+struct QuestLogStruct_LinkBattleRecord
+{
+ u8 v0;
+ u8 v1[3][7];
+};
+
+void sub_812C224(void)
+{
+ s32 sp0;
+ s32 sp4[2];
+ u16 r8;
+ s32 r3;
+ u32 r0;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ struct QuestLogStruct_LinkBattleRecord * r5 = Alloc(sizeof(struct QuestLogStruct_LinkBattleRecord));
+ r5->v0 = gUnknown_2023E8A - 1;
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ r8 = 15;
+ sub_812C334(&sp0, sp4);
+ for (r3 = 0; r3 < 7; r3++)
+ {
+ r5->v1[0][r3] = gLinkPlayers[sp0].name[r3];
+ r5->v1[1][r3] = gLinkPlayers[sp4[0]].name[r3];
+ r5->v1[2][r3] = gLinkPlayers[sp4[1]].name[r3];
+ }
+ }
+ else
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ r8 = 14;
+ else
+ {
+ r0 = InUnionRoom();
+ r8 = 13;
+ if (r0 == TRUE)
+ r8 = 19;
+ }
+ for (r3 = 0; r3 < 7; r3++)
+ {
+ r5->v1[0][r3] = gLinkPlayers[gBattleStruct->field_B5 ^ 1].name[r3];
+ }
+ }
+ sub_8113550(r8, (const u16 *)r5);
+ Free(r5);
+ }
+}
+
+void sub_812C334(s32 * a0, s32 * a1)
+{
+ s32 r5;
+ s32 _optimized_out = 0;
+ u8 r2 = gLinkPlayers[gBattleStruct->field_B5].id ^ 2;
+ for (r5 = 0; r5 < 4; r5++)
+ {
+ if (r2 == gLinkPlayers[r5].id)
+ a0[0] = r5;
+ else if (r5 != gBattleStruct->field_B5)
+ a1[_optimized_out++] = r5;
+ }
+}