summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/quest_log.c2
-rw-r--r--src/quest_log_battle.c97
2 files changed, 98 insertions, 1 deletions
diff --git a/src/quest_log.c b/src/quest_log.c
index ed7214bdd..546ff6e05 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -2820,7 +2820,7 @@ static u16 * (*const sQuestLogStorageCBs[])(u16 *, const u16 *) = {
};
#ifdef NONMATCHING
-void sub_8113550(u16 a0, u16 * a1)
+void sub_8113550(u16 a0, const u16 * a1)
{
u16 * r1;
diff --git a/src/quest_log_battle.c b/src/quest_log_battle.c
new file mode 100644
index 000000000..c5d8ec2af
--- /dev/null
+++ b/src/quest_log_battle.c
@@ -0,0 +1,97 @@
+#include "global.h"
+#include "constants/species.h"
+#include "malloc.h"
+#include "battle.h"
+#include "overworld.h"
+#include "quest_log.h"
+
+struct QuestLogStruct_01
+{
+ u16 v0;
+ u16 v2;
+ u16 v4;
+ u8 v6;
+ u8 v7;
+};
+
+struct QuestLogStruct_02
+{
+ u16 v0;
+ u16 v2;
+ u8 v4;
+};
+
+void sub_812BFDC(void)
+{
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_DOME)) && (gUnknown_2023E8A == 1 || gUnknown_2023E8A == 7))
+ {
+ struct QuestLogStruct_01 * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_01));
+ struct QuestLogStruct_02 * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_02));
+ 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);
+ }
+}