summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-04-06 17:58:24 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-04-06 17:58:24 -0400
commitc78101535b72b39cb58295e019c36d2de6b2c1da (patch)
tree9d2f35ffda417ae6d630b2a4b96b03ec922f7030
parenta622448029e7849361d2aabcd2138ed0de207dd1 (diff)
Split quest_log.c
-rw-r--r--data/maps/BirthIsland_Exterior/scripts.inc2
-rw-r--r--data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc2
-rw-r--r--data/maps/CeruleanCave_B1F/scripts.inc2
-rw-r--r--data/maps/CeruleanCity_House4/scripts.inc2
-rw-r--r--data/maps/FiveIsland_MemorialPillar/scripts.inc2
-rw-r--r--data/maps/FiveIsland_ResortGorgeous_House/scripts.inc2
-rw-r--r--data/maps/FiveIsland_WaterLabyrinth/scripts.inc2
-rw-r--r--data/maps/FourIsland/scripts.inc2
-rw-r--r--data/maps/MtEmber_Summit/scripts.inc2
-rw-r--r--data/maps/MtMoon_B2F/scripts.inc4
-rw-r--r--data/maps/NavelRock_Base/scripts.inc2
-rw-r--r--data/maps/NavelRock_Summit/scripts.inc2
-rw-r--r--data/maps/PalletTown_GarysHouse/scripts.inc2
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/scripts.inc2
-rw-r--r--data/maps/PokemonTower_6F/scripts.inc2
-rw-r--r--data/maps/PowerPlant/scripts.inc6
-rw-r--r--data/maps/Route12/scripts.inc2
-rw-r--r--data/maps/Route12_FishingHouse/scripts.inc2
-rw-r--r--data/maps/Route16/scripts.inc2
-rw-r--r--data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc2
-rw-r--r--data/maps/SeafoamIslands_B4F/scripts.inc2
-rw-r--r--data/maps/SixIsland_WaterPath_House1/scripts.inc2
-rw-r--r--data/maps/ThreeIsland_BerryForest/scripts.inc2
-rw-r--r--data/maps/TwoIsland_House/scripts.inc2
-rw-r--r--data/maps/VermilionCity/scripts.inc2
-rw-r--r--data/maps/VermilionCity_Gym/scripts.inc2
-rw-r--r--data/maps/ViridianCity/scripts.inc4
-rw-r--r--data/scripts/cable_club.inc10
-rw-r--r--data/scripts/move_tutors.inc2
-rw-r--r--data/scripts/pokedex_rating.inc2
-rw-r--r--data/scripts/seagallop.inc2
-rw-r--r--data/scripts/trainer_card.inc2
-rw-r--r--data/specials.inc2
-rw-r--r--include/help_message.h10
-rw-r--r--include/overworld.h10
-rw-r--r--include/quest_log.h59
-rw-r--r--ld_script.txt6
-rw-r--r--src/battle_setup.c4
-rw-r--r--src/diploma.c2
-rw-r--r--src/field_control_avatar.c2
-rw-r--r--src/field_effect.c10
-rw-r--r--src/field_fadetransition.c6
-rw-r--r--src/field_specials.c144
-rw-r--r--src/help_message.c197
-rw-r--r--src/load_save.c2
-rw-r--r--src/new_menu_helpers.c9
-rw-r--r--src/overworld.c50
-rw-r--r--src/party_menu.c1
-rw-r--r--src/quest_log.c2854
-rw-r--r--src/quest_log_events.c2148
-rw-r--r--src/start_menu.c1
-rw-r--r--src/trainer_fan_club.c359
-rw-r--r--sym_ewram.txt4
53 files changed, 3027 insertions, 2933 deletions
diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc
index 01417f0d1..30f3b3891 100644
--- a/data/maps/BirthIsland_Exterior/scripts.inc
+++ b/data/maps/BirthIsland_Exterior/scripts.inc
@@ -43,7 +43,7 @@ BirthIsland_Exterior_EventScript_Triangle:: @ 8165271
lock
faceplayer
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
special DoDeoxysTriangleInteraction
waitstate
switch VAR_RESULT
diff --git a/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc b/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc
index fe0d13a8a..dfd19d51f 100644
--- a/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc
+++ b/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc
@@ -3,7 +3,7 @@ CeladonCity_DepartmentStore_Roof_MapScripts:: @ 816BCCC
CeladonCity_DepartmentStore_Roof_EventScript_ThirstyGirl:: @ 816BCCD
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
call CeladonCity_DepartmentStore_Roof_EventScript_CheckPlayerHasDrinks
diff --git a/data/maps/CeruleanCave_B1F/scripts.inc b/data/maps/CeruleanCave_B1F/scripts.inc
index ee0cd370e..0cd5f2628 100644
--- a/data/maps/CeruleanCave_B1F/scripts.inc
+++ b/data/maps/CeruleanCave_B1F/scripts.inc
@@ -24,7 +24,7 @@ CeruleanCave_B1F_EventScript_ShowMewtwo:: @ 81624F1
CeruleanCave_B1F_EventScript_Mewtwo:: @ 81624F5
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
waitse
diff --git a/data/maps/CeruleanCity_House4/scripts.inc b/data/maps/CeruleanCity_House4/scripts.inc
index 5d63feb07..bb4e69bcc 100644
--- a/data/maps/CeruleanCity_House4/scripts.inc
+++ b/data/maps/CeruleanCity_House4/scripts.inc
@@ -3,7 +3,7 @@ CeruleanCity_House4_MapScripts:: @ 816ACEE
CeruleanCity_House4_EventScript_WonderNewsBerryMan:: @ 816ACEF
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
specialvar VAR_0x8004, GetMENewsJisanItemAndState
copyvar VAR_0x8008, VAR_RESULT
diff --git a/data/maps/FiveIsland_MemorialPillar/scripts.inc b/data/maps/FiveIsland_MemorialPillar/scripts.inc
index 19115df34..e32c16494 100644
--- a/data/maps/FiveIsland_MemorialPillar/scripts.inc
+++ b/data/maps/FiveIsland_MemorialPillar/scripts.inc
@@ -33,7 +33,7 @@ FiveIsland_MemorialPillar_EventScript_ReturnedForTM42:: @ 8168A22
FiveIsland_MemorialPillar_EventScript_Memorial:: @ 8168A48
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lockall
goto_if_set FLAG_GOT_TM42_AT_MEMORIAL_PILLAR, FiveIsland_MemorialPillar_EventScript_MemorialLemonadeAlreadyPlaced
goto_if_set FLAG_NO_ROOM_FOR_TM42_AT_MEMORIAL_PILLAR, FiveIsland_MemorialPillar_EventScript_MemorialLemonadeAlreadyPlaced
diff --git a/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc b/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc
index 0d70919dd..9610f62e1 100644
--- a/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc
+++ b/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc
@@ -8,7 +8,7 @@ FiveIsland_ResortGorgeous_House_MapScripts:: @ 8171EBD
FiveIsland_ResortGorgeous_House_EventScript_Selphy:: @ 8171EBE
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
goto_if_set SHOWN_REQUESTED_MON, FiveIsland_ResortGorgeous_House_EventScript_JustFulfilledRequest
diff --git a/data/maps/FiveIsland_WaterLabyrinth/scripts.inc b/data/maps/FiveIsland_WaterLabyrinth/scripts.inc
index 875cb284e..b07235406 100644
--- a/data/maps/FiveIsland_WaterLabyrinth/scripts.inc
+++ b/data/maps/FiveIsland_WaterLabyrinth/scripts.inc
@@ -3,7 +3,7 @@ FiveIsland_WaterLabyrinth_MapScripts:: @ 816884D
FiveIsland_WaterLabyrinth_EventScript_EggGentleman:: @ 816884E
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
goto_if_set FLAG_GOT_TOGEPI_EGG, FiveIsland_WaterLabyrinth_EventScript_PostEggComment
diff --git a/data/maps/FourIsland/scripts.inc b/data/maps/FourIsland/scripts.inc
index 17f509515..ac670db55 100644
--- a/data/maps/FourIsland/scripts.inc
+++ b/data/maps/FourIsland/scripts.inc
@@ -73,7 +73,7 @@ FourIsland_Movement_PlayerWatchRivalExit:: @ 8167D52
FourIsland_EventScript_DaycareMan:: @ 8167D55
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
special GetDaycareMonNicknames
diff --git a/data/maps/MtEmber_Summit/scripts.inc b/data/maps/MtEmber_Summit/scripts.inc
index 815a86ddc..f34e9ff6f 100644
--- a/data/maps/MtEmber_Summit/scripts.inc
+++ b/data/maps/MtEmber_Summit/scripts.inc
@@ -24,7 +24,7 @@ MtEmber_Summit_EventScript_ShowMoltres:: @ 8163B2F
MtEmber_Summit_EventScript_Moltres:: @ 8163B33
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
setwildbattle SPECIES_MOLTRES, 50, ITEM_NONE
diff --git a/data/maps/MtMoon_B2F/scripts.inc b/data/maps/MtMoon_B2F/scripts.inc
index 46a308ce9..9bfe16f79 100644
--- a/data/maps/MtMoon_B2F/scripts.inc
+++ b/data/maps/MtMoon_B2F/scripts.inc
@@ -63,7 +63,7 @@ MtMoon_B2F_EventScript_DomeFossil:: @ 816071B
removeobject LOCALID_DOME_FOSSIL
giveitem_msg MtMoon_B2F_Text_ObtainedDomeFossil, ITEM_DOME_FOSSIL, 1, MUS_FAN5
closemessage
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
delay 10
applymovement LOCALID_MIGUEL, MtMoon_B2F_Movement_MiguelToHelixFossil
waitmovement 0
@@ -95,7 +95,7 @@ MtMoon_B2F_EventScript_HelixFossil:: @ 816077F
removeobject LOCALID_HELIX_FOSSIL
giveitem_msg MtMoon_B2F_Text_ObtainedHelixFossil, ITEM_HELIX_FOSSIL, 1, MUS_FAN5
closemessage
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
delay 10
applymovement LOCALID_MIGUEL, MtMoon_B2F_Movement_MiguelToDomeFossil
waitmovement 0
diff --git a/data/maps/NavelRock_Base/scripts.inc b/data/maps/NavelRock_Base/scripts.inc
index a47454024..9308f1ee1 100644
--- a/data/maps/NavelRock_Base/scripts.inc
+++ b/data/maps/NavelRock_Base/scripts.inc
@@ -30,7 +30,7 @@ NavelRock_Base_EventScript_TryRemoveLugia:: @ 8165120
NavelRock_Base_EventScript_Lugia:: @ 8165134
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
waitse
diff --git a/data/maps/NavelRock_Summit/scripts.inc b/data/maps/NavelRock_Summit/scripts.inc
index 93e1fcdb1..d7459dcde 100644
--- a/data/maps/NavelRock_Summit/scripts.inc
+++ b/data/maps/NavelRock_Summit/scripts.inc
@@ -33,7 +33,7 @@ NavelRock_Summit_EventScript_TryRemoveHoOh:: @ 8164FE7
NavelRock_Summit_EventScript_HoOh:: @ 8164FFB
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lockall
setvar VAR_TEMP_1, 1
special SpawnCameraObject
diff --git a/data/maps/PalletTown_GarysHouse/scripts.inc b/data/maps/PalletTown_GarysHouse/scripts.inc
index a595182fe..b9ce39e52 100644
--- a/data/maps/PalletTown_GarysHouse/scripts.inc
+++ b/data/maps/PalletTown_GarysHouse/scripts.inc
@@ -50,7 +50,7 @@ PalletTown_GarysHouse_EventScript_HeardBattledRival:: @ 8168DAF
PalletTown_GarysHouse_EventScript_GroomMon:: @ 8168DB9
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
compare VAR_MASSAGE_COOLDOWN_STEP_COUNTER, 500
goto_if_lt PalletTown_GarysHouse_EventScript_RateMonFriendship
msgbox PalletTown_GarysHouse_Text_LikeMeToGroomMon, MSGBOX_YESNO
diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
index fecfd0b48..277bc579b 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
@@ -1000,7 +1000,7 @@ PalletTown_ProfessorOaksLab_EventScript_DontStartNationalDexScene:: @ 81699F9
PalletTown_ProfessorOaksLab_EventScript_CheckIfPlayerNeedsBalls:: @ 81699FB
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
goto_if_set FLAG_OAK_SKIP_22_RIVAL_CHECK, PalletTown_ProfessorOaksLab_EventScript_MonsAroundWorldWait
goto_if_set FLAG_GOT_POKEBALLS_FROM_OAK_AFTER_22_RIVAL, PalletTown_ProfessorOaksLab_EventScript_PlayerAlreadyGotBalls
checkitem ITEM_POKE_BALL, 1
diff --git a/data/maps/PokemonTower_6F/scripts.inc b/data/maps/PokemonTower_6F/scripts.inc
index bb20b6ac3..529defec3 100644
--- a/data/maps/PokemonTower_6F/scripts.inc
+++ b/data/maps/PokemonTower_6F/scripts.inc
@@ -9,7 +9,7 @@ PokemonTower_6F_EventScript_MarowakGhost:: @ 81634B8
setwildbattle SPECIES_MAROWAK, 30, ITEM_NONE
special StartMarowakBattle
waitstate
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
compare VAR_RESULT, FALSE @ Set by CB2_EndMarowakBattle
goto_if_eq PokemonTower_6F_EventScript_DefeatedMarowakGhost
applymovement OBJ_EVENT_ID_PLAYER, PokemonTower_6F_Movement_ForcePlayerUp
diff --git a/data/maps/PowerPlant/scripts.inc b/data/maps/PowerPlant/scripts.inc
index 59ba7c6cc..ad6d3fe6a 100644
--- a/data/maps/PowerPlant/scripts.inc
+++ b/data/maps/PowerPlant/scripts.inc
@@ -35,7 +35,7 @@ PowerPlant_EventScript_ShowElectrode2:: @ 81637B4
PowerPlant_EventScript_Zapdos:: @ 81637B8
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
setwildbattle SPECIES_ZAPDOS, 50, ITEM_NONE
@@ -84,7 +84,7 @@ PowerPlant_EventScript_Electrode1:: @ 816382F
setflag FLAG_SYS_SPECIAL_WILD_BATTLE
dowildbattle
clearflag FLAG_SYS_SPECIAL_WILD_BATTLE
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
specialvar VAR_RESULT, GetBattleOutcome
compare VAR_RESULT, B_OUTCOME_WON
goto_if_eq PowerPlant_EventScript_FoughtElectrode1
@@ -113,7 +113,7 @@ PowerPlant_EventScript_Electrode2:: @ 816388D
setflag FLAG_SYS_SPECIAL_WILD_BATTLE
dowildbattle
clearflag FLAG_SYS_SPECIAL_WILD_BATTLE
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
specialvar VAR_RESULT, GetBattleOutcome
compare VAR_RESULT, B_OUTCOME_WON
goto_if_eq PowerPlant_EventScript_FoughtElectrode2
diff --git a/data/maps/Route12/scripts.inc b/data/maps/Route12/scripts.inc
index af0ab05a4..9e3aa0ad0 100644
--- a/data/maps/Route12/scripts.inc
+++ b/data/maps/Route12/scripts.inc
@@ -15,7 +15,7 @@ Route12_EventScript_Snorlax:: @ 8168014
faceplayer
goto_if_unset FLAG_GOT_POKE_FLUTE, Route12_EventScript_SnorlaxNoPokeFlute
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
msgbox Text_WantToUsePokeFlute, MSGBOX_YESNO
compare VAR_RESULT, NO
goto_if_eq Route12_EventScript_DontUsePokeFlute
diff --git a/data/maps/Route12_FishingHouse/scripts.inc b/data/maps/Route12_FishingHouse/scripts.inc
index 646987ddb..60ba742b3 100644
--- a/data/maps/Route12_FishingHouse/scripts.inc
+++ b/data/maps/Route12_FishingHouse/scripts.inc
@@ -31,7 +31,7 @@ Route12_FishingHouse_EventScript_NoRoomForSuperRod:: @ 816FF75
Route12_FishingHouse_EventScript_CheckMagikarpRecord:: @ 816FF7F
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
setvar VAR_0x8004, SPECIES_MAGIKARP
specialvar VAR_RESULT, DoesPlayerPartyContainSpecies
compare VAR_RESULT, FALSE
diff --git a/data/maps/Route16/scripts.inc b/data/maps/Route16/scripts.inc
index 2096b6a2a..f13b2ac6f 100644
--- a/data/maps/Route16/scripts.inc
+++ b/data/maps/Route16/scripts.inc
@@ -34,7 +34,7 @@ Route16_EventScript_Snorlax:: @ 8168121
faceplayer
goto_if_unset FLAG_GOT_POKE_FLUTE, Route16_EventScript_SnorlaxNoPokeFlute
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
msgbox Text_WantToUsePokeFlute, MSGBOX_YESNO
compare VAR_RESULT, NO
goto_if_eq Route16_EventScript_DontUsePokeFlute
diff --git a/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc b/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc
index 3659a1cc6..361849355 100644
--- a/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc
+++ b/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc
@@ -19,7 +19,7 @@ SaffronCity_CopycatsHouse_2F_EventScript_Doll:: @ 816EB70
SaffronCity_CopycatsHouse_2F_EventScript_Copycat:: @ 816EB7B
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
checkitem ITEM_POKE_DOLL, 1
diff --git a/data/maps/SeafoamIslands_B4F/scripts.inc b/data/maps/SeafoamIslands_B4F/scripts.inc
index 47accfa73..306a70562 100644
--- a/data/maps/SeafoamIslands_B4F/scripts.inc
+++ b/data/maps/SeafoamIslands_B4F/scripts.inc
@@ -159,7 +159,7 @@ SeafoamIslands_B4F_Movement_WalkUp:: @ 81631AA
SeafoamIslands_B4F_EventScript_Articuno:: @ 81631AC
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
setwildbattle SPECIES_ARTICUNO, 50, ITEM_NONE
diff --git a/data/maps/SixIsland_WaterPath_House1/scripts.inc b/data/maps/SixIsland_WaterPath_House1/scripts.inc
index ce1520ce0..34d0839be 100644
--- a/data/maps/SixIsland_WaterPath_House1/scripts.inc
+++ b/data/maps/SixIsland_WaterPath_House1/scripts.inc
@@ -5,7 +5,7 @@ SixIsland_WaterPath_House1_EventScript_Beauty:: @ 817206D
lock
faceplayer
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
setvar VAR_0x8004, SPECIES_HERACROSS
specialvar VAR_RESULT, DoesPlayerPartyContainSpecies
compare VAR_RESULT, FALSE
diff --git a/data/maps/ThreeIsland_BerryForest/scripts.inc b/data/maps/ThreeIsland_BerryForest/scripts.inc
index faa340706..dae40d985 100644
--- a/data/maps/ThreeIsland_BerryForest/scripts.inc
+++ b/data/maps/ThreeIsland_BerryForest/scripts.inc
@@ -23,7 +23,7 @@ ThreeIsland_BerryForest_EventScript_Lostelle:: @ 8163C83
waitmoncry
setwildbattle SPECIES_HYPNO, 30, ITEM_NONE
dowildbattle
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
applymovement 1, Movement_FacePlayer
waitmovement 0
msgbox ThreeIsland_BerryForest_Text_ThankYouHaveThis
diff --git a/data/maps/TwoIsland_House/scripts.inc b/data/maps/TwoIsland_House/scripts.inc
index 297a82295..e975add34 100644
--- a/data/maps/TwoIsland_House/scripts.inc
+++ b/data/maps/TwoIsland_House/scripts.inc
@@ -8,7 +8,7 @@ TwoIsland_House_MapScripts:: @ 8171618
TwoIsland_House_EventScript_MoveManiac:: @ 8171619
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
clearflag HAS_BIG_MUSHROOM
diff --git a/data/maps/VermilionCity/scripts.inc b/data/maps/VermilionCity/scripts.inc
index 07abeefd0..84ef9e183 100644
--- a/data/maps/VermilionCity/scripts.inc
+++ b/data/maps/VermilionCity/scripts.inc
@@ -86,7 +86,7 @@ VermilionCity_EventScript_CheckSeagallopPresent:: @ 8166996
VermilionCity_EventScript_ChooseSeagallopDestRainbowPass:: @ 81669BB
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
call VermilionCity_EventScript_CheckHasMysticTicket
compare VAR_RESULT, TRUE
goto_if_eq VermilionCity_EventScript_HasMysticTicket
diff --git a/data/maps/VermilionCity_Gym/scripts.inc b/data/maps/VermilionCity_Gym/scripts.inc
index b7e07a106..2ac39f40e 100644
--- a/data/maps/VermilionCity_Gym/scripts.inc
+++ b/data/maps/VermilionCity_Gym/scripts.inc
@@ -142,7 +142,7 @@ VermilionCity_Gym_EventScript_TrashCan15:: @ 816B837
VermilionCity_Gym_EventScript_TrashCan:: @ 816B843
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
copyvar SWITCH1_ID, VAR_TEMP_0
copyvar SWITCH2_ID, VAR_TEMP_1
goto_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, VermilionCity_Gym_EventScript_LocksAlreadyOpen
diff --git a/data/maps/ViridianCity/scripts.inc b/data/maps/ViridianCity/scripts.inc
index 5eef02b91..5e66c480f 100644
--- a/data/maps/ViridianCity/scripts.inc
+++ b/data/maps/ViridianCity/scripts.inc
@@ -146,7 +146,7 @@ ViridianCity_EventScript_WatchToLearnBasics:: @ 8165A5B
ViridianCity_EventScript_TutorialUnused:: @ 8165A65
msgbox ViridianCity_Text_ThatWasEducationalTakeThis
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
special StartOldManTutorialBattle
waitstate
release
@@ -239,7 +239,7 @@ ViridianCity_EventScript_DoTutorialBattle:: @ 8165B4C
msgbox ViridianCity_Text_ShowYouHowToCatchMons
closemessage
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
special StartOldManTutorialBattle
waitstate
lock
diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc
index 8bb85bc9f..52720d0cc 100644
--- a/data/scripts/cable_club.inc
+++ b/data/scripts/cable_club.inc
@@ -15,7 +15,7 @@ EventScript_HideMysteryGiftMan:: @ 81BB1CE
CableClub_EventScript_MysteryGiftMan:: @ 81BB1D2
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
execram
@ Unused
@@ -775,7 +775,7 @@ CableClub_EventScript_DoLinkRoomExit:: @ 81BB9FC
CableClub_EventScript_UnionRoomAttendant:: @ 81BBA04
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
goto_if_unset FLAG_SYS_POKEDEX_GET, CableClub_EventScript_WirelessClubAdjustements
@@ -885,7 +885,7 @@ CableClub_EventScript_DontAskAboutLinking:: @ 81BBB92
CableClub_EventScript_DirectCornerAttendant:: @ 81BBB9C
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
goto_if_unset FLAG_SYS_POKEDEX_GET, CableClub_EventScript_WirelessClubAdjustements
@@ -1195,7 +1195,7 @@ CableClub_OnResume:: @ 81BC05C
JoyfulGameCorner_EventScript_InfoMan2:: @ 81BC060
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
message Text_DescribeWhichGame
@@ -1225,7 +1225,7 @@ CableClub_EventScript_MinigameInfoExit:: @ 81BC0C4
JoyfulGameCorner_EventScript_MinigameAttendant:: @ 81BC0CE
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
message Text_WelcomeCanYouWait
diff --git a/data/scripts/move_tutors.inc b/data/scripts/move_tutors.inc
index ceea4f7bb..205b452c5 100644
--- a/data/scripts/move_tutors.inc
+++ b/data/scripts/move_tutors.inc
@@ -448,7 +448,7 @@ EventScript_BodySlamTaught:: @ 81C4DE2
TwoIsland_CapeBrink_House_EventScript_StarterTutor:: @ 81C4DEC
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
lock
faceplayer
goto_if_set FLAG_LEARNED_ALL_MOVES_AT_CAPE_BRINK, CapeBrinkTutor_EventScript_TaughtAllMoves
diff --git a/data/scripts/pokedex_rating.inc b/data/scripts/pokedex_rating.inc
index 5cea3a753..05d27ffa9 100644
--- a/data/scripts/pokedex_rating.inc
+++ b/data/scripts/pokedex_rating.inc
@@ -1,6 +1,6 @@
PokedexRating_EventScript_RateInPerson:: @ 81A737B
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
call_if_set FLAG_OAK_SAW_DEX_COMPLETION, PokedexRating_EventScript_DexCompleteIntro
call_if_unset FLAG_OAK_SAW_DEX_COMPLETION, PokedexRating_EventScript_NormalIntro
call PokedexRating_EventScript_Rate
diff --git a/data/scripts/seagallop.inc b/data/scripts/seagallop.inc
index ca3b2bc6b..2367e2dd1 100644
--- a/data/scripts/seagallop.inc
+++ b/data/scripts/seagallop.inc
@@ -111,7 +111,7 @@ EventScript_SetSail:: @ 81A90DA
closemessage
delay 20
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
fadescreen FADE_TO_BLACK
special DoSeagallopFerryScene
waitstate
diff --git a/data/scripts/trainer_card.inc b/data/scripts/trainer_card.inc
index 0f2171d7c..589d84a64 100644
--- a/data/scripts/trainer_card.inc
+++ b/data/scripts/trainer_card.inc
@@ -92,7 +92,7 @@ FourIsland_House2_EventScript_StickerManAskForBrag:: @ 81B2994
applymovement 1, Movement_FacePlayer
waitmovement 0
goto_if_questlog EventScript_ReleaseEnd
- special QuestLog_OnInteractionWithSpecialNpc
+ special QuestLog_CutRecording
compare VAR_0x8008, 0
goto_if_eq FourIsland_House2_EventScript_NothingToBragAbout
message FourIsland_House2_Text_BragAboutWhatToday
diff --git a/data/specials.inc b/data/specials.inc
index c06019606..8788a6105 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -400,7 +400,7 @@ gSpecials:: @ 815FD60
def_special GetMartClerkObjectId
def_special BattleCardAction
def_special GetQuestLogState
- def_special QuestLog_OnInteractionWithSpecialNpc
+ def_special QuestLog_CutRecording
def_special GetMENewsJisanItemAndState
def_special GetPCBoxToSendMon
def_special OpenMuseumFossilPic
diff --git a/include/help_message.h b/include/help_message.h
new file mode 100644
index 000000000..df387c560
--- /dev/null
+++ b/include/help_message.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_HELP_MESSAGE_H
+#define GUARD_HELP_MESSAGE_H
+
+void DestroyHelpMessageWindow(u8 a0);
+u8 CreateHelpMessageWindow(void);
+void PrintTextOnHelpMessageWindow(const u8 * text, u8 mode);
+void MapNamePopupWindowIdSetDummy(void);
+void sub_8112F18(u8 windowId);
+
+#endif //GUARD_HELP_MESSAGE_H
diff --git a/include/overworld.h b/include/overworld.h
index f5cb1987e..42451636f 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -110,10 +110,10 @@ u32 GetGameStat(u8 statId);
void SetGameStat(u8 statId, u32 value);
void CB2_ContinueSavedGame(void);
-void sub_8055D5C(struct WarpData *);
-void sub_80572A8(void);
-void sub_805726C(void);
-void sub_8057430(void);
+void Overworld_SetWarpDestinationFromWarp(struct WarpData *);
+void CB2_SetUpOverworldForQLPlayback(void);
+void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void);
+void CB2_EnterFieldFromQuestLog(void);
void Overworld_PlaySpecialMapMusic(void);
u8 GetCurrentRegionMapSectionId(void);
@@ -133,7 +133,7 @@ extern bool8 (* gFieldCallback2)(void);
void SetLastHealLocationWarp(u8 healLocaionId);
void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum);
-void sub_80568FC(void);
+void CB2_ReturnToFieldFromDiploma(void);
void CB2_OverworldBasic(void);
void CB2_NewGame(void);
bool8 IsMapTypeOutdoors(u8 mapType);
diff --git a/include/quest_log.h b/include/quest_log.h
index 5d474e4f9..415ed2f0e 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -6,10 +6,31 @@
#include "constants/quest_log.h"
#include "field_control_avatar.h"
+struct QuestLogEntry
+{
+ u8 unk_0;
+ u8 unk_1;
+ u8 unk_2;
+ u8 unk_3;
+ u16 unk_4;
+ u8 unk_6;
+};
+
+struct UnkStruct_203B044
+{
+ u8 unk_0;
+ u8 unk_1;
+ u16 unk_2;
+};
+
extern u8 gQuestLogState;
extern u8 gQuestLogPlaybackState;
extern const u16 gUnknown_84566A8[];
extern struct FieldInput gQuestLogFieldInput;
+extern struct UnkStruct_203B044 gUnknown_203B044;
+extern u16 *gUnknown_203AE04;
+extern u16 *sEventRecordingPointer;
+extern u16 sQuestLogCursor;
void sub_8112720(u8);
void SetQuestLogEvent(u16, const u16 *);
@@ -19,24 +40,19 @@ u8 sub_8112CAC(void);
bool8 QuestLog_SchedulePlaybackCB(void (*func)(void));
void sub_8111F38(u16 offset, u16 idx);
void CommitQuestLogWindow1(void);
-void DestroyHelpMessageWindow(u8 a0);
-u8 CreateHelpMessageWindow(void);
-void PrintTextOnHelpMessageWindow(const u8 * text, u8 mode);
-void MapNamePopupWindowIdSetDummy(void);
-void sub_8111CF0(void);
+void QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(void);
void ResetQuestLog(void);
void ResetTrainerFanClub(void);
void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId);
void SaveQuestLogData(void);
-void QuestLog_OnInteractionWithSpecialNpc(void);
+void QuestLog_CutRecording(void);
u8 sub_8112CAC(void);
void sub_81138F8(void);
-void sub_811231C(void);
+void FinishRecordingQuestLogScene(void);
void sub_81139BC(void);
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
-void sub_8110840(void *oldSave);
-void sub_8112F18(u8 windowId);
+void SetQuestLogRecordAndPlaybackPointers(void *oldSave);
void sub_811246C(struct Sprite *sprite);
void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3);
bool8 sub_8111C2C(void);
@@ -53,14 +69,33 @@ void sub_81127F8(struct FieldInput * a0);
void sub_8112B3C(void);
void RunQuestLogCB(void);
void sub_8111C68(void);
-bool8 sub_8111CD0(void);
+bool8 QuestLogScenePlaybackIsEnding(void);
void sub_8115798(void);
-bool8 sub_8113748(void);
-void sub_81119C8(void);
+bool8 QuestLog_ShouldEndSceneOnMapChange(void);
+void QuestLog_AdvancePlayhead_(void);
void sub_8111F14(void);
void sub_8110FCC(void);
u8 GetQuestLogStartType(void);
void sub_81113E4(void);
void sub_8111438(void);
+void StartRecordingQuestLogEntry(u16 eventId);
+bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size);
+bool8 sub_8110944(const void * a0, size_t cmdSize);
+
+void sub_8113BD8(void);
+void ResetUnk203B044(void);
+u16 *TryRecordEvent39_NoParams(u16 *);
+u16 *sub_8113C8C(u16 *, struct QuestLogEntry *);
+u16 *sub_8113CC8(u16 *, struct QuestLogEntry *);
+u16 *sub_8113D08(u16 *, struct QuestLogEntry *);
+u16 *sub_8113D48(u16 *, struct QuestLogEntry *);
+u16 *sub_8113D94(u16 *, struct QuestLogEntry *);
+void sub_811381C(void);
+u16 *QuestLog_SkipCommand(u16 *, u16 **);
+void sub_8113ABC(const u16 *);
+u16 *sub_8113C20(u16 *, struct QuestLogEntry *);
+bool8 sub_8113AE8(const u16 *);
+bool8 sub_8113B44(const u16 *);
+void TryRecordEvent41_IncCursor(u16);
#endif //GUARD_QUEST_LOG_H
diff --git a/ld_script.txt b/ld_script.txt
index 7eea55ec7..8951d15b2 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -248,6 +248,9 @@ SECTIONS {
src/mailbox_pc.o(.text);
src/menu.o(.text);
src/quest_log.o(.text);
+ src/help_message.o(.text);
+ src/trainer_fan_club.o(.text);
+ src/quest_log_events.o(.text);
src/union_room.o(.text);
src/rfu_union_tool.o(.text);
src/union_room_battle.o(.text);
@@ -549,6 +552,9 @@ SECTIONS {
src/decoration.o(.rodata);
src/menu.o(.rodata);
src/quest_log.o(.rodata);
+ src/help_message.o(.rodata);
+ src/trainer_fan_club.o(.rodata);
+ src/quest_log_events.o(.rodata);
src/union_room.o(.rodata);
src/rfu_union_tool.o(.rodata);
src/union_room_battle.o(.rodata);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 0b4c93868..171f9d794 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -794,13 +794,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
SetMapVarsToTrainer();
return EventScript_TryDoDoubleTrainerBattle;
case TRAINER_BATTLE_REMATCH_DOUBLE:
- sub_811231C();
+ FinishRecordingQuestLogScene();
TrainerBattleLoadArgs(sDoubleBattleParams, data);
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_TryDoDoubleRematchBattle;
case TRAINER_BATTLE_REMATCH:
- sub_811231C();
+ FinishRecordingQuestLogScene();
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
diff --git a/src/diploma.c b/src/diploma.c
index 5c653d071..e2e81c113 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -193,7 +193,7 @@ static void Task_DiplomaReturnToOverworld(u8 taskId)
DestroyTask(taskId);
FreeAllWindowBuffers();
FREE_AND_SET_NULL(gDiploma);
- SetMainCallback2(sub_80568FC);
+ SetMainCallback2(CB2_ReturnToFieldFromDiploma);
}
static void DiplomaBgInit(void)
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 9b6072fc8..694ef0392 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -1085,7 +1085,7 @@ void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y)
{
if (events[i].x + 7 == x && events[i].y + 7 == y)
{
- QuestLog_OnInteractionWithSpecialNpc();
+ QuestLog_CutRecording();
ScriptContext1_SetupScript(events[i].script);
ScriptContext2_Enable();
}
diff --git a/src/field_effect.c b/src/field_effect.c
index bf68daa03..b89e9c116 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1105,7 +1105,7 @@ void FieldCB_FallWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
CreateTask(Task_FallWarpFieldEffect, 0);
@@ -1409,7 +1409,7 @@ static void FieldCB_EscalatorWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
CreateTask(Task_EscalatorWarpInFieldEffect, 0);
@@ -1819,7 +1819,7 @@ static void FieldCB_LavaridgeGymB1FWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
gFieldCallback = NULL;
CreateTask(Task_LavaridgeGymB1FWarpExit, 0);
@@ -2186,7 +2186,7 @@ static void FieldCallback_EscapeRopeExit(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
gFieldCallback = NULL;
@@ -2350,7 +2350,7 @@ static void FieldCallback_TeleportIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
ScriptContext2_Enable();
FreezeObjectEvents();
gFieldCallback = NULL;
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 28625d353..10f21bc0f 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -288,7 +288,7 @@ static void sub_807DF4C(bool8 a0)
void FieldCB_DefaultWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
sub_807DE78(FALSE);
ScriptContext2_Enable();
}
@@ -296,7 +296,7 @@ void FieldCB_DefaultWarpExit(void)
void FieldCB_WarpExitFadeFromBlack(void)
{
Overworld_PlaySpecialMapMusic();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
sub_807DE78(TRUE);
ScriptContext2_Enable();
}
@@ -305,7 +305,7 @@ static void FieldCB_TeleportWarpIn(void)
{
Overworld_PlaySpecialMapMusic();
WarpFadeInScreen();
- sub_8111CF0();
+ QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode();
PlaySE(SE_TK_WARPOUT);
CreateTask(Task_TeleportWarpIn, 10);
ScriptContext2_Enable();
diff --git a/src/field_specials.c b/src/field_specials.c
index 90866071c..fe4845fab 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -95,7 +95,7 @@ static u8 *const sStringVarPtrs[] = {
void ShowDiploma(void)
{
- QuestLog_OnInteractionWithSpecialNpc();
+ QuestLog_CutRecording();
SetMainCallback2(CB2_ShowDiploma);
ScriptContext2_Enable();
}
@@ -187,7 +187,7 @@ u8 GetLeadMonFriendship(void)
void ShowTownMap(void)
{
- QuestLog_OnInteractionWithSpecialNpc();
+ QuestLog_CutRecording();
sub_80BFF50(1, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -1775,18 +1775,18 @@ bool8 DoesPlayerPartyContainSpecies(void)
}
static const u8 sMartMaps[][3] = {
- {MAP_GROUP(VIRIDIAN_CITY_MART), MAP_NUM(VIRIDIAN_CITY_MART), 1},
- {MAP_GROUP(PEWTER_CITY_MART), MAP_NUM(PEWTER_CITY_MART), 3},
- {MAP_GROUP(CERULEAN_CITY_MART), MAP_NUM(CERULEAN_CITY_MART), 1},
- {MAP_GROUP(LAVENDER_TOWN_MART), MAP_NUM(LAVENDER_TOWN_MART), 1},
- {MAP_GROUP(VERMILION_CITY_MART), MAP_NUM(VERMILION_CITY_MART), 1},
- {MAP_GROUP(FUCHSIA_CITY_MART), MAP_NUM(FUCHSIA_CITY_MART), 1},
- {MAP_GROUP(CINNABAR_ISLAND_MART), MAP_NUM(CINNABAR_ISLAND_MART), 1},
- {MAP_GROUP(SAFFRON_CITY_MART), MAP_NUM(SAFFRON_CITY_MART), 1},
- {MAP_GROUP(THREE_ISLAND_MART), MAP_NUM(THREE_ISLAND_MART), 1},
- {MAP_GROUP(FOUR_ISLAND_MART), MAP_NUM(FOUR_ISLAND_MART), 1},
- {MAP_GROUP(SEVEN_ISLAND_MART), MAP_NUM(SEVEN_ISLAND_MART), 1},
- {MAP_GROUP(SIX_ISLAND_MART), MAP_NUM(SIX_ISLAND_MART), 1}
+ {MAP(VIRIDIAN_CITY_MART), 1},
+ {MAP(PEWTER_CITY_MART), 3},
+ {MAP(CERULEAN_CITY_MART), 1},
+ {MAP(LAVENDER_TOWN_MART), 1},
+ {MAP(VERMILION_CITY_MART), 1},
+ {MAP(FUCHSIA_CITY_MART), 1},
+ {MAP(CINNABAR_ISLAND_MART), 1},
+ {MAP(SAFFRON_CITY_MART), 1},
+ {MAP(THREE_ISLAND_MART), 1},
+ {MAP(FOUR_ISLAND_MART), 1},
+ {MAP(SEVEN_ISLAND_MART), 1},
+ {MAP(SIX_ISLAND_MART), 1}
};
u8 GetMartClerkObjectId(void)
@@ -1811,57 +1811,57 @@ static const struct {
u16 grp2;
u16 num2;
} sInsideOutsidePairs[51] = {
- {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)},
- {MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)},
- {MAP_GROUP(VIRIDIAN_CITY_GYM), MAP_NUM(VIRIDIAN_CITY_GYM), MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY)},
- {MAP_GROUP(ROUTE22_NORTH_ENTRANCE), MAP_NUM(ROUTE22_NORTH_ENTRANCE), MAP_GROUP(ROUTE22), MAP_NUM(ROUTE22)},
- {MAP_GROUP(ROUTE22_NORTH_ENTRANCE), MAP_NUM(ROUTE22_NORTH_ENTRANCE), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)},
- {MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE), MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)},
- {MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE), MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)},
- {MAP_GROUP(PEWTER_CITY_MUSEUM_1F), MAP_NUM(PEWTER_CITY_MUSEUM_1F), MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY)},
- {MAP_GROUP(PEWTER_CITY_GYM), MAP_NUM(PEWTER_CITY_GYM), MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY)},
- {MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4)},
- {MAP_GROUP(MT_MOON_B1F), MAP_NUM(MT_MOON_B1F), MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4)},
- {MAP_GROUP(CERULEAN_CITY_GYM), MAP_NUM(CERULEAN_CITY_GYM), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)},
- {MAP_GROUP(CERULEAN_CITY_BIKE_SHOP), MAP_NUM(CERULEAN_CITY_BIKE_SHOP), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)},
- {MAP_GROUP(ROUTE25_SEA_COTTAGE), MAP_NUM(ROUTE25_SEA_COTTAGE), MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25)},
- {MAP_GROUP(ROUTE5_POKEMON_DAY_CARE), MAP_NUM(ROUTE5_POKEMON_DAY_CARE), MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5)},
- {MAP_GROUP(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5)},
- {MAP_GROUP(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6)},
- {MAP_GROUP(VERMILION_CITY_POKEMON_FAN_CLUB), MAP_NUM(VERMILION_CITY_POKEMON_FAN_CLUB), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)},
- {MAP_GROUP(VERMILION_CITY_GYM), MAP_NUM(VERMILION_CITY_GYM), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)},
- {MAP_GROUP(SSANNE_1F_CORRIDOR), MAP_NUM(SSANNE_1F_CORRIDOR), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)},
- {MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_GROUP(ROUTE2), MAP_NUM(ROUTE2)},
- {MAP_GROUP(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11)},
- {MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)},
- {MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)},
- {MAP_GROUP(POWER_PLANT), MAP_NUM(POWER_PLANT), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)},
- {MAP_GROUP(POKEMON_TOWER_1F), MAP_NUM(POKEMON_TOWER_1F), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)},
- {MAP_GROUP(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP_NUM(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)},
- {MAP_GROUP(LAVENDER_TOWN_HOUSE2), MAP_NUM(LAVENDER_TOWN_HOUSE2), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)},
- {MAP_GROUP(UNDERGROUND_PATH_EAST_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_EAST_ENTRANCE), MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8)},
- {MAP_GROUP(UNDERGROUND_PATH_WEST_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_WEST_ENTRANCE), MAP_GROUP(ROUTE7), MAP_NUM(ROUTE7)},
- {MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F), MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_1F), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
- {MAP_GROUP(CELADON_CITY_CONDOMINIUMS_1F), MAP_NUM(CELADON_CITY_CONDOMINIUMS_1F), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
- {MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
- {MAP_GROUP(CELADON_CITY_GYM), MAP_NUM(CELADON_CITY_GYM), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
- {MAP_GROUP(CELADON_CITY_RESTAURANT), MAP_NUM(CELADON_CITY_RESTAURANT), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)},
- {MAP_GROUP(ROCKET_HIDEOUT_B1F), MAP_NUM(ROCKET_HIDEOUT_B1F), MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER)},
- {MAP_GROUP(SAFARI_ZONE_CENTER), MAP_NUM(SAFARI_ZONE_CENTER), MAP_GROUP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE), MAP_NUM(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)},
- {MAP_GROUP(FUCHSIA_CITY_GYM), MAP_NUM(FUCHSIA_CITY_GYM), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)},
- {MAP_GROUP(FUCHSIA_CITY_WARDENS_HOUSE), MAP_NUM(FUCHSIA_CITY_WARDENS_HOUSE), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)},
- {MAP_GROUP(SAFFRON_CITY_DOJO), MAP_NUM(SAFFRON_CITY_DOJO), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)},
- {MAP_GROUP(SAFFRON_CITY_GYM), MAP_NUM(SAFFRON_CITY_GYM), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)},
- {MAP_GROUP(SILPH_CO_1F), MAP_NUM(SILPH_CO_1F), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)},
- {MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20)},
- {MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20)},
- {MAP_GROUP(POKEMON_MANSION_1F), MAP_NUM(POKEMON_MANSION_1F), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)},
- {MAP_GROUP(CINNABAR_ISLAND_GYM), MAP_NUM(CINNABAR_ISLAND_GYM), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)},
- {MAP_GROUP(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP_NUM(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)},
- {MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)},
- {MAP_GROUP(VICTORY_ROAD_2F), MAP_NUM(VICTORY_ROAD_2F), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)},
- {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR)},
- {MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)}
+ [QL_LOCATION_HOME] = {MAP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP(PALLET_TOWN)},
+ [QL_LOCATION_OAKS_LAB] = {MAP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP(PALLET_TOWN)},
+ [QL_LOCATION_VIRIDIAN_GYM] = {MAP(VIRIDIAN_CITY_GYM), MAP(VIRIDIAN_CITY)},
+ [QL_LOCATION_LEAGUE_GATE_1] = {MAP(ROUTE22_NORTH_ENTRANCE), MAP(ROUTE22)},
+ [QL_LOCATION_LEAGUE_GATE_2] = {MAP(ROUTE22_NORTH_ENTRANCE), MAP(ROUTE23)},
+ [QL_LOCATION_VIRIDIAN_FOREST_1] = {MAP(VIRIDIAN_FOREST), MAP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)},
+ [QL_LOCATION_VIRIDIAN_FOREST_2] = {MAP(VIRIDIAN_FOREST), MAP(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)},
+ [QL_LOCATION_PEWTER_MUSEUM] = {MAP(PEWTER_CITY_MUSEUM_1F), MAP(PEWTER_CITY)},
+ [QL_LOCATION_PEWTER_GYM] = {MAP(PEWTER_CITY_GYM), MAP(PEWTER_CITY)},
+ [QL_LOCATION_MT_MOON_1] = {MAP(MT_MOON_1F), MAP(ROUTE4)},
+ [QL_LOCATION_MT_MOON_2] = {MAP(MT_MOON_B1F), MAP(ROUTE4)},
+ [QL_LOCATION_CERULEAN_GYM] = {MAP(CERULEAN_CITY_GYM), MAP(CERULEAN_CITY)},
+ [QL_LOCATION_BIKE_SHOP] = {MAP(CERULEAN_CITY_BIKE_SHOP), MAP(CERULEAN_CITY)},
+ [QL_LOCATION_BILLS_HOUSE] = {MAP(ROUTE25_SEA_COTTAGE), MAP(ROUTE25)},
+ [QL_LOCATION_DAY_CARE] = {MAP(ROUTE5_POKEMON_DAY_CARE), MAP(ROUTE5)},
+ [QL_LOCATION_UNDERGROUND_PATH_1] = {MAP(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP(ROUTE5)},
+ [QL_LOCATION_UNDERGROUND_PATH_2] = {MAP(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP(ROUTE6)},
+ [QL_LOCATION_PKMN_FAN_CLUB] = {MAP(VERMILION_CITY_POKEMON_FAN_CLUB), MAP(VERMILION_CITY)},
+ [QL_LOCATION_VERMILION_GYM] = {MAP(VERMILION_CITY_GYM), MAP(VERMILION_CITY)},
+ [QL_LOCATION_SS_ANNE] = {MAP(SSANNE_1F_CORRIDOR), MAP(VERMILION_CITY)},
+ [QL_LOCATION_DIGLETTS_CAVE_1] = {MAP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP(ROUTE2)},
+ [QL_LOCATION_DIGLETTS_CAVE_2] = {MAP(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP(ROUTE11)},
+ [QL_LOCATION_ROCK_TUNNEL_1] = {MAP(ROCK_TUNNEL_1F), MAP(ROUTE10)},
+ [QL_LOCATION_ROCK_TUNNEL_2] = {MAP(ROCK_TUNNEL_1F), MAP(ROUTE10)},
+ [QL_LOCATION_POWER_PLANT] = {MAP(POWER_PLANT), MAP(ROUTE10)},
+ [QL_LOCATION_PKMN_TOWER] = {MAP(POKEMON_TOWER_1F), MAP(LAVENDER_TOWN)},
+ [QL_LOCATION_VOLUNTEER_HOUSE] = {MAP(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP(LAVENDER_TOWN)},
+ [QL_LOCATION_NAME_RATERS_HOUSE] = {MAP(LAVENDER_TOWN_HOUSE2), MAP(LAVENDER_TOWN)},
+ [QL_LOCATION_UNDERGROUND_PATH_3] = {MAP(UNDERGROUND_PATH_EAST_ENTRANCE), MAP(ROUTE8)},
+ [QL_LOCATION_UNDERGROUND_PATH_4] = {MAP(UNDERGROUND_PATH_WEST_ENTRANCE), MAP(ROUTE7)},
+ [QL_LOCATION_CELADON_DEPT_STORE] = {MAP(CELADON_CITY_DEPARTMENT_STORE_1F), MAP(CELADON_CITY)},
+ [QL_LOCATION_CELADON_MANSION] = {MAP(CELADON_CITY_CONDOMINIUMS_1F), MAP(CELADON_CITY)},
+ [QL_LOCATION_GAME_CORNER] = {MAP(CELADON_CITY_GAME_CORNER), MAP(CELADON_CITY)},
+ [QL_LOCATION_CELADON_GYM] = {MAP(CELADON_CITY_GYM), MAP(CELADON_CITY)},
+ [QL_LOCATION_CELADON_RESTAURANT] = {MAP(CELADON_CITY_RESTAURANT), MAP(CELADON_CITY)},
+ [QL_LOCATION_ROCKET_HIDEOUT] = {MAP(ROCKET_HIDEOUT_B1F), MAP(CELADON_CITY_GAME_CORNER)},
+ [QL_LOCATION_SAFARI_ZONE] = {MAP(SAFARI_ZONE_CENTER), MAP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)},
+ [QL_LOCATION_FUCHSIA_GYM] = {MAP(FUCHSIA_CITY_GYM), MAP(FUCHSIA_CITY)},
+ [QL_LOCATION_WARDENS_HOME] = {MAP(FUCHSIA_CITY_WARDENS_HOUSE), MAP(FUCHSIA_CITY)},
+ [QL_LOCATION_FIGHTING_DOJO] = {MAP(SAFFRON_CITY_DOJO), MAP(SAFFRON_CITY)},
+ [QL_LOCATION_SAFFRON_GYM] = {MAP(SAFFRON_CITY_GYM), MAP(SAFFRON_CITY)},
+ [QL_LOCATION_SILPH_CO] = {MAP(SILPH_CO_1F), MAP(SAFFRON_CITY)},
+ [QL_LOCATION_SEAFOAM_ISLANDS_1] = {MAP(SEAFOAM_ISLANDS_1F), MAP(ROUTE20)},
+ [QL_LOCATION_SEAFOAM_ISLANDS_2] = {MAP(SEAFOAM_ISLANDS_1F), MAP(ROUTE20)},
+ [QL_LOCATION_PKMN_MANSION] = {MAP(POKEMON_MANSION_1F), MAP(CINNABAR_ISLAND)},
+ [QL_LOCATION_CINNABAR_GYM] = {MAP(CINNABAR_ISLAND_GYM), MAP(CINNABAR_ISLAND)},
+ [QL_LOCATION_CINNABAR_LAB] = {MAP(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP(CINNABAR_ISLAND)},
+ [QL_LOCATION_VICTORY_ROAD_1] = {MAP(VICTORY_ROAD_1F), MAP(ROUTE23)},
+ [QL_LOCATION_VICTORY_ROAD_2] = {MAP(VICTORY_ROAD_2F), MAP(ROUTE23)},
+ [QL_LOCATION_PKMN_LEAGUE] = {MAP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP(INDIGO_PLATEAU_EXTERIOR)},
+ [QL_LOCATION_CERULEAN_CAVE] = {MAP(CERULEAN_CAVE_1F), MAP(CERULEAN_CITY)}
};
void sub_80CC534(void)
@@ -1871,7 +1871,7 @@ void sub_80CC534(void)
{
if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[i].grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[i].num)
{
- if (VarGet(VAR_0x404D) != 35 || i != 32)
+ if (VarGet(VAR_0x404D) != QL_LOCATION_ROCKET_HIDEOUT || i != QL_LOCATION_GAME_CORNER)
{
VarSet(VAR_0x404D, i);
FlagSet(FLAG_0x808);
@@ -1893,7 +1893,7 @@ void sub_80CC59C(void)
sp0.unk1 = 0;
if (FlagGet(FLAG_0x808))
{
- if (r5 == 5)
+ if (r5 == QL_LOCATION_VIRIDIAN_FOREST_1)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)))
{
@@ -1907,7 +1907,7 @@ void sub_80CC59C(void)
return;
}
}
- else if (r5 == 3)
+ else if (r5 == QL_LOCATION_LEAGUE_GATE_1)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23)))
{
@@ -1925,13 +1925,13 @@ void sub_80CC59C(void)
{
sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId;
sp0.unk1 = r5;
- if (r5 == 22)
+ if (r5 == QL_LOCATION_ROCK_TUNNEL_1)
{
PlayerGetDestCoords(&x, &y);
if (x != 15 || y != 26)
sp0.unk1++;
}
- else if (r5 == 42)
+ else if (r5 == QL_LOCATION_SEAFOAM_ISLANDS_1)
{
PlayerGetDestCoords(&x, &y);
if (x != 67 || y != 15)
@@ -1939,9 +1939,9 @@ void sub_80CC59C(void)
}
SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&sp0);
FlagClear(FLAG_0x808);
- if (r5 == 35)
+ if (r5 == QL_LOCATION_ROCKET_HIDEOUT)
{
- VarSet(VAR_0x404D, 32);
+ VarSet(VAR_0x404D, QL_LOCATION_GAME_CORNER);
FlagSet(FLAG_0x808);
}
}
diff --git a/src/help_message.c b/src/help_message.c
new file mode 100644
index 000000000..ff85d1f82
--- /dev/null
+++ b/src/help_message.c
@@ -0,0 +1,197 @@
+#include "global.h"
+#include "gflib.h"
+#include "menu.h"
+
+static EWRAM_DATA u8 sHelpMessageWindowId = 0;
+
+const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin");
+
+static const struct WindowTemplate sHelpMessageWindowTemplate = {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 15,
+ .width = 30,
+ .height = 5,
+ .paletteNum = 15,
+ .baseBlock = 0x08F
+};
+
+void MapNamePopupWindowIdSetDummy(void)
+{
+ sHelpMessageWindowId = 0xFF;
+}
+
+u8 CreateHelpMessageWindow(void)
+{
+ if (sHelpMessageWindowId == 0xFF)
+ {
+ sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate);
+ PutWindowTilemap(sHelpMessageWindowId);
+ }
+ return sHelpMessageWindowId;
+}
+
+void DestroyHelpMessageWindow(u8 a0)
+{
+ if (sHelpMessageWindowId != 0xFF)
+ {
+ FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0));
+ ClearWindowTilemap(sHelpMessageWindowId);
+
+ if (a0)
+ CopyWindowToVram(sHelpMessageWindowId, a0);
+
+ RemoveWindow(sHelpMessageWindowId);
+ sHelpMessageWindowId = 0xFF;
+ }
+}
+
+#ifdef NONMATCHING
+void sub_8112F18(u8 windowId)
+{
+ u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
+ u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
+ u8 *buffer = Alloc(32 * width * height);
+ u8 i, j;
+ u8 k;
+
+ if (buffer != NULL)
+ {
+ for (i = 0; i < height; i++)
+ {
+ for (j = 0; j < width; j++)
+ {
+ if (i == 0)
+ k = 0;
+ else if (i == height - 1)
+ k = 14;
+ else
+ k = 5;
+ CpuCopy32(
+ (void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction
+ buffer + 32 * (i * width + j),
+ 32
+ );
+ }
+ }
+ CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0);
+ Free(buffer);
+ }
+}
+#else
+NAKED
+void sub_8112F18(u8 windowId)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x8\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r10, r0\n"
+ "\tmovs r1, 0x3\n"
+ "\tbl GetWindowAttribute\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r6, r0, 24\n"
+ "\tmov r0, r10\n"
+ "\tmovs r1, 0x4\n"
+ "\tbl GetWindowAttribute\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tlsls r0, r7, 5\n"
+ "\tmuls r0, r6\n"
+ "\tbl Alloc\n"
+ "\tmov r8, r0\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08112FB8\n"
+ "\tmovs r5, 0\n"
+ "\tadds r0, r6, 0\n"
+ "\tmuls r0, r7\n"
+ "\tstr r0, [sp]\n"
+ "\tcmp r5, r7\n"
+ "\tbcs _08112FA2\n"
+ "_08112F5A:\n"
+ "\tmovs r4, 0\n"
+ "\tadds r1, r5, 0x1\n"
+ "\tmov r9, r1\n"
+ "\tcmp r4, r6\n"
+ "\tbcs _08112F98\n"
+ "\tsubs r3, r7, 0x1\n"
+ "_08112F66:\n"
+ "\tmovs r0, 0\n"
+ "\tcmp r5, 0\n"
+ "\tbeq _08112F74\n"
+ "\tmovs r0, 0x5\n"
+ "\tcmp r5, r3\n"
+ "\tbne _08112F74\n"
+ "\tmovs r0, 0xE\n"
+ "_08112F74:\n"
+ "\tlsls r0, 5\n"
+ "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n"
+ "\tadds r0, r1, r0\n"
+ "\tadds r1, r5, 0\n"
+ "\tmuls r1, r6\n"
+ "\tadds r1, r4\n"
+ "\tlsls r1, 5\n"
+ "\tadd r1, r8\n"
+ "\tldr r2, _08112FCC @ =0x04000008\n"
+ "\tstr r3, [sp, 0x4]\n"
+ "\tbl CpuSet\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r4, r0, 24\n"
+ "\tldr r3, [sp, 0x4]\n"
+ "\tcmp r4, r6\n"
+ "\tbcc _08112F66\n"
+ "_08112F98:\n"
+ "\tmov r1, r9\n"
+ "\tlsls r0, r1, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tcmp r5, r7\n"
+ "\tbcc _08112F5A\n"
+ "_08112FA2:\n"
+ "\tldr r0, [sp]\n"
+ "\tlsls r2, r0, 21\n"
+ "\tlsrs r2, 16\n"
+ "\tmov r0, r10\n"
+ "\tmov r1, r8\n"
+ "\tmovs r3, 0\n"
+ "\tbl CopyToWindowPixelBuffer\n"
+ "\tmov r0, r8\n"
+ "\tbl Free\n"
+ "_08112FB8:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08112FC8: .4byte gUnknown_84566A8\n"
+ "_08112FCC: .4byte 0x04000008");
+}
+#endif
+
+static void sub_8112FD0(void)
+{
+ sub_8112F18(sHelpMessageWindowId);
+}
+
+static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_DARK_GREY};
+
+static void PrintHelpMessageText(const u8 *text)
+{
+ AddTextPrinterParameterized4(sHelpMessageWindowId, 2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text);
+}
+
+void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode)
+{
+ sub_8112FD0();
+ PrintHelpMessageText(text);
+ if (mode)
+ CopyWindowToVram(sHelpMessageWindowId, mode);
+}
diff --git a/src/load_save.c b/src/load_save.c
index 9dff59928..859ec57af 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -78,7 +78,7 @@ void SetSaveBlocksPointers(void)
gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset;
SetBagPocketsPointers();
- sub_8110840(oldSave);
+ SetQuestLogRecordAndPlaybackPointers(oldSave);
}
void MoveSaveBlocks_ResetHeap(void)
diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c
index d8874548e..9ffef06ae 100644
--- a/src/new_menu_helpers.c
+++ b/src/new_menu_helpers.c
@@ -1,18 +1,13 @@
#include "global.h"
-#include "malloc.h"
-#include "dma3.h"
-#include "task.h"
-#include "bg.h"
-#include "window.h"
+#include "gflib.h"
+#include "help_message.h"
#include "menu.h"
#include "menu_helpers.h"
#include "new_menu_helpers.h"
#include "quest_log.h"
-#include "text.h"
#include "field_specials.h"
#include "text_window.h"
#include "script.h"
-#include "palette.h"
#define DLG_WINDOW_PALETTE_NUM 15
#define DLG_WINDOW_BASE_TILE_NUM 0x200
diff --git a/src/overworld.c b/src/overworld.c
index 742213ca2..a26d67b6e 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -160,9 +160,9 @@ static void SetCameraToTrackGuestPlayer_2(void);
static void sub_8057178(void);
static void sub_80571A8(void);
static void CreateLinkPlayerSprites(void);
-static void sub_80572D8(void);
-static void sub_8057300(u8 *state);
-static bool32 sub_8057314(u8 *state);
+static void CB2_LoadMapForQLPlayback(void);
+static void DoLoadMap_QLPlayback(u8 *state);
+static bool32 LoadMap_QLPlayback(u8 *state);
static bool32 SetUpScrollSceneForCredits(u8 *state, u8 unused);
static bool8 MapLdr_Credits(void);
static void CameraCB_CreditsPan(struct CameraObject * camera);
@@ -340,7 +340,7 @@ static void Overworld_ResetStateAfterWhitingOut(void)
VarSet(VAR_0x404D, 0);
}
-static void sub_8054E40(void)
+static void Overworld_ResetStateOnContinue(void)
{
FlagClear(FLAG_SYS_SAFARI_MODE);
VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0);
@@ -979,7 +979,7 @@ void SetCurrentMapLayout(u16 mapLayoutId)
gMapHeader.mapLayout = GetMapLayout();
}
-void sub_8055D5C(struct WarpData * warp)
+void Overworld_SetWarpDestinationFromWarp(struct WarpData * warp)
{
sWarpDestination = *warp;
}
@@ -1441,7 +1441,7 @@ static void DoCB1_Overworld_QuestLogPlayback(void)
RunQuestLogCB();
}
}
- else if (sub_8111CD0() == TRUE)
+ else if (QuestLogScenePlaybackIsEnding() == TRUE)
{
RunQuestLogCB();
}
@@ -1555,7 +1555,7 @@ void CB2_WhiteOut(void)
gFieldCallback = FieldCB_RushInjuredPokemonToCenter;
val = 0;
do_load_map_stuff_loop(&val);
- QuestLog_OnInteractionWithSpecialNpc();
+ QuestLog_CutRecording();
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
@@ -1575,9 +1575,9 @@ void CB2_LoadMap(void)
static void CB2_LoadMap2(void)
{
do_load_map_stuff_loop(&gMain.state);
- if (sub_8113748() == TRUE)
+ if (QuestLog_ShouldEndSceneOnMapChange() == TRUE)
{
- sub_81119C8();
+ QuestLog_AdvancePlayhead_();
}
else
{
@@ -1671,14 +1671,14 @@ void CB2_ReturnToFieldContinueScriptPlayMapMusic(void)
CB2_ReturnToField();
}
-void sub_80568FC(void)
+void CB2_ReturnToFieldFromDiploma(void)
{
FieldClearVBlankHBlankCallbacks();
gFieldCallback = FieldCB_WarpExitFadeFromBlack;
CB2_ReturnToField();
}
-static void sub_8056918(void)
+static void FieldCB_ShowMapNameOnContinue(void)
{
if (SHOW_MAP_NAME_ENABLED)
ShowMapNamePopup(FALSE);
@@ -1693,7 +1693,7 @@ void CB2_ContinueSavedGame(void)
LoadSaveblockMapHeader();
LoadSaveblockObjEventScripts();
UnfreezeObjectEvents();
- sub_8054E40();
+ Overworld_ResetStateOnContinue();
InitMapFromSavedGame();
PlayTimeCounter_Start();
ScriptContext1_Init();
@@ -1709,7 +1709,7 @@ void CB2_ContinueSavedGame(void)
}
else
{
- gFieldCallback = sub_8056918;
+ gFieldCallback = FieldCB_ShowMapNameOnContinue;
SetMainCallback1(CB1_Overworld);
CB2_ReturnToField();
}
@@ -1861,7 +1861,7 @@ static bool32 load_map_stuff(u8 *state, bool32 a1)
(*state)++;
break;
case 3:
- if (sub_8113748() == TRUE)
+ if (QuestLog_ShouldEndSceneOnMapChange() == TRUE)
return TRUE;
(*state)++;
break;
@@ -2205,7 +2205,7 @@ static void CreateLinkPlayerSprites(void)
// Quest Log
-void sub_805726C(void)
+void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void)
{
FieldClearVBlankHBlankCallbacks();
gUnknown_2036E28 = 1;
@@ -2213,10 +2213,10 @@ void sub_805726C(void)
ScriptContext2_Disable();
SetMainCallback1(NULL);
SetMainCallback2(CB2_DoChangeMap);
- gMain.savedCallback = sub_80572D8;
+ gMain.savedCallback = CB2_LoadMapForQLPlayback;
}
-void sub_80572A8(void)
+void CB2_SetUpOverworldForQLPlayback(void)
{
FieldClearVBlankHBlankCallbacks();
gUnknown_2036E28 = 1;
@@ -2224,24 +2224,24 @@ void sub_80572A8(void)
ScriptContext1_Init();
ScriptContext2_Disable();
SetMainCallback1(NULL);
- SetMainCallback2(sub_80572D8);
+ SetMainCallback2(CB2_LoadMapForQLPlayback);
}
-static void sub_80572D8(void)
+static void CB2_LoadMapForQLPlayback(void)
{
- sub_8057300(&gMain.state);
+ DoLoadMap_QLPlayback(&gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
SetMainCallback2(CB2_Overworld);
}
-static void sub_8057300(u8 *state)
+static void DoLoadMap_QLPlayback(u8 *state)
{
- while (!sub_8057314(state))
+ while (!LoadMap_QLPlayback(state))
;
}
-static bool32 sub_8057314(u8 *state)
+static bool32 LoadMap_QLPlayback(u8 *state)
{
switch (*state)
{
@@ -2317,7 +2317,7 @@ static bool32 sub_8057314(u8 *state)
return FALSE;
}
-void sub_8057430(void)
+void CB2_EnterFieldFromQuestLog(void)
{
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
@@ -2326,7 +2326,7 @@ void sub_8057430(void)
LoadSaveblockMapHeader();
LoadSaveblockObjEventScripts();
UnfreezeObjectEvents();
- sub_8054E40();
+ Overworld_ResetStateOnContinue();
InitMapFromSavedGame();
PlayTimeCounter_Start();
ScriptContext1_Init();
diff --git a/src/party_menu.c b/src/party_menu.c
index 5ceeb2c3b..fd90b3be7 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -19,6 +19,7 @@
#include "fieldmap.h"
#include "fldeff.h"
#include "graphics.h"
+#include "help_message.h"
#include "help_system.h"
#include "item.h"
#include "item_menu.h"
diff --git a/src/quest_log.c b/src/quest_log.c
index 40bd94265..e459c49fb 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -44,6 +44,7 @@
#include "constants/items.h"
#include "constants/field_weather.h"
#include "constants/event_object_movement.h"
+#include "constants/region_map_sections.h"
struct TrainerFanClub
{
@@ -60,24 +61,14 @@ struct TrainerFanClub
struct UnkStruct_203AE94
{
- u8 unk_0_0:4;
- u8 unk_0_4:2;
- u8 unk_0_6:2;
- u8 unk_1;
+ u8 playbackSubstate:4;
+ u8 playingEvent:2;
+ u8 sceneEndMode:2;
+ u8 cursor;
u8 unk_2;
u8 unk_3;
};
-struct QuestLogEntry
-{
- u8 unk_0;
- u8 unk_1;
- u8 unk_2;
- u8 unk_3;
- u16 unk_4;
- u8 unk_6;
-};
-
struct UnkStruct_300201C
{
u16 idx:15;
@@ -85,13 +76,6 @@ struct UnkStruct_300201C
u16 value;
};
-struct UnkStruct_203B044
-{
- u8 unk_0;
- u8 unk_1;
- u16 unk_2;
-};
-
u8 gQuestLogPlaybackState;
u16 sNumEventsInLogEntry;
struct FieldInput gQuestLogFieldInput;
@@ -105,25 +89,18 @@ static EWRAM_DATA u8 sNumScenes = 0;
EWRAM_DATA u8 gQuestLogState = 0;
static EWRAM_DATA u16 gUnknown_203ADFC = 0;
static EWRAM_DATA u8 sQuestLogHeaderWindowIds[3] = {0};
-static EWRAM_DATA u16 *gUnknown_203AE04 = NULL;
-static EWRAM_DATA u16 *sEventRecordingPointer = NULL;
+EWRAM_DATA u16 *gUnknown_203AE04 = NULL;
+EWRAM_DATA u16 *sEventRecordingPointer = NULL;
static EWRAM_DATA u16 *gUnknown_203AE0C[32] = {NULL};
static EWRAM_DATA void (* sQuestLogCB)(void) = NULL;
static EWRAM_DATA u16 *gUnknown_203AE90 = NULL;
-static EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0};
+static EWRAM_DATA struct UnkStruct_203AE94 sQuestLogCurrentScene = {0};
static EWRAM_DATA struct QuestLogEntry sQuestLogSceneRecordBuffer[32] = {0};
-static EWRAM_DATA u16 sQuestLogCursor = 0;
+EWRAM_DATA u16 sQuestLogCursor = 0;
static EWRAM_DATA u8 sMovementScripts[64][2] = {{0}};
static EWRAM_DATA u16 sNextStepDelay = 0;
static EWRAM_DATA u16 gUnknown_203B01C = 0;
static EWRAM_DATA u16 sFlagOrVarPlayhead = 0;
-static EWRAM_DATA u8 sHelpMessageWindowId = 0;
-static EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0};
-static EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0};
-static EWRAM_DATA u8 gUnknown_203B048 = 0;
-static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE;
-static EWRAM_DATA u8 gUnknown_203B04A = 0;
-static EWRAM_DATA bool8 gUnknown_203B04B = FALSE;
static void QLogCB_Recording(void);
static void QLogCB_Playback(void);
@@ -134,19 +111,19 @@ static void BackUpTrainerRematchesToVars(void);
static void BackUpMapLayoutToVar(void);
static void SetGameStateAtScene(u8);
static u8 TryRecordQuestLogEntrySequence(struct QuestLogEntry *);
-static void sub_8110F90(u8);
+static void Task_BeginQuestLogPlayback(u8);
static void QuestLogPlaybackSetObjectEventTemplates(u8);
-static void sub_8111368(void);
+static void QLPlayback_InitOverworldState(void);
static void QuestLog_GetSaneMonCounts(void);
static u16 QuestLog_GetSanePartyCount(void);
static u16 QuestLog_GetSaneBoxCount(void);
static void sub_8111688(void);
-static void sub_811175C(u8, struct QuestLogEntry *);
-static void sub_81118F4(s8);
+static void ReadQuestLogScriptFromSav1(u8, struct QuestLogEntry *);
+static void QuestLog_BeginFadeAtEndOfScene(s8 delay);
static void QuestLog_AdvancePlayhead(void);
static void QuestLog_StartFinalScene(void);
static void Task_RunPlaybackCB(u8);
-static void sub_8111AD8(void);
+static void QuestLog_PlayCurrentEvent(void);
static void sub_8111B80(void);
static u8 sub_8111BD4(void);
static void DrawQuestLogSceneDescription(void);
@@ -154,8 +131,8 @@ static void sub_8111D90(u8);
static void QuestLog_CloseTextWindow(void);
static void QuestLog_SkipToEndOfPlayback(s8 delay);
static void QuestLog_WaitFadeAndCancelPlayback(void);
-static bool8 sub_8111F60(void);
-static void sub_8111F8C(u8);
+static bool8 FieldCB2_FinalScene(void);
+static void Task_FinalScene_WaitFade(u8);
static void Task_QuestLogScene_SavedGame(u8);
static void Task_WaitAtEndOfQuestLog(u8);
static void Task_EndQuestLog(u8);
@@ -182,104 +159,6 @@ static bool8 sub_81137E4(u16, const u16 *);
static u16 *sub_8113828(u16, const u16 *);
static bool8 TrySetLinkQuestLogEvent(u16, const u16 *);
static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *);
-static void TryRecordEvent41_IncCursor(u16);
-static void sub_811381C(void);
-static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *);
-static u16 *QuestLog_SkipCommand(u16 *, u16 **);
-static void sub_8113ABC(const u16 *);
-static bool8 sub_8113AE8(const u16 *);
-static bool8 sub_8113B44(const u16 *);
-static void sub_8113B88(void);
-static void sub_8113B94(u16);
-static void sub_8113BD8(void);
-static u16 *TryRecordEvent39_NoParams(u16 *);
-static u16 *sub_8113C20(u16 *, struct QuestLogEntry *);
-static u16 *TryRecordEvent41(u16 *, u16);
-static u16 *sub_8113C8C(u16 *, struct QuestLogEntry *);
-static u16 *sub_8113CC8(u16 *, struct QuestLogEntry *);
-static u16 *sub_8113D08(u16 *, struct QuestLogEntry *);
-static u16 *sub_8113D48(u16 *, struct QuestLogEntry *);
-static u16 *sub_8113D94(u16 *, struct QuestLogEntry *);
-static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *);
-static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *);
-static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *, const u16 *);
-static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *, const u16 *);
-static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *, const u16 *);
-static u16 *BufferQuestLogData_TookHeldItem(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SwappedHeldItem(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *, const u16 *);
-static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *, const u16 *);
-static u16 *BufferQuestLogData_LinkTraded(u16 *, const u16 *);
-static u16 *BufferQuestLogData_LinkBattledSingle(u16 *, const u16 *);
-static u16 *BufferQuestLogData_LinkBattledDouble(u16 *, const u16 *);
-static u16 *BufferQuestLogData_LinkBattledMulti(u16 *, const u16 *);
-static u16 *BufferQuestLogData_UsedUnionRoom(u16 *, const u16 *);
-static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *, const u16 *);
-static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *, const u16 *);
-static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *, const u16 *);
-static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *, const u16 *);
-static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *, const u16 *);
-static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DepositedMonInPC(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DepositedItemInPC(u16 *, const u16 *);
-static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DefeatedWildMon(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DefeatedChampion(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DefeatedTrainer(u16 *, const u16 *);
-static u16 *BufferQuestLogData_DepartedLocation(u16 *, const u16 *);
-static u16 *BufferQuestLogData_UsedFieldMove(u16 *, const u16 *);
-static u16 *BufferQuestLogData_BoughtItem(u16 *, const u16 *);
-static u16 *BufferQuestLogData_SoldItem(u16 *, const u16 *);
-static u16 *BufferQuestLogData_ObtainedItem(u16 *, const u16 *);
-static u16 *BufferQuestLogData_ArrivedInLocation(u16 *, const u16 *);
-static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *);
-static const u16 *BufferQuestLogText_UsedItem(const u16 *);
-static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *);
-static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *);
-static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *);
-static const u16 *BufferQuestLogText_TookHeldItem(const u16 *);
-static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *);
-static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *);
-static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *);
-static const u16 *BufferQuestLogText_LinkTraded(const u16 *);
-static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *);
-static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *);
-static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *);
-static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *);
-static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *);
-static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *);
-static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *);
-static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *);
-static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *);
-static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *);
-static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *);
-static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *);
-static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *);
-static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *);
-static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *);
-static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *);
-static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *);
-static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *);
-static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *);
-static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *);
-static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *);
-static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *);
-static const u16 *BufferQuestLogText_DepartedLocation(const u16 *);
-static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *);
-static const u16 *BufferQuestLogText_BoughtItem(const u16 *);
-static const u16 *BufferQuestLogText_SoldItem(const u16 *);
-static const u16 *BufferQuestLogText_ObtainedItem(const u16 *);
-static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *);
-static bool8 IsSpeciesFromSpecialEncounter(u16);
-static bool8 sub_81153A8(u16, const u16 *);
-static bool8 sub_81153E4(u16, const u16 *);
-static void BufferLinkPartnersName(u8 *);
static const struct WindowTemplate sQuestLogHeaderWindowTemplates[3] = {
{ 0, 0, 0, 30, 2, 15, 0x0e9 },
@@ -293,7 +172,7 @@ static const u16 gUnknown_8456638[] = INCBIN_U16("data/graphics/unknown_8456638.
static const u8 sQuestLogTextLineYCoords[] = {17, 10, 3};
-void sub_8110840(void * oldPointer)
+void SetQuestLogRecordAndPlaybackPointers(void * oldPointer)
{
ptrdiff_t offset = (void *)gSaveBlock1Ptr - oldPointer;
if (gUnknown_203AE04)
@@ -351,7 +230,7 @@ bool8 sub_8110944(const void * a0, size_t cmdSize)
return TRUE;
}
-static bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size)
+bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size)
{
void * start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script;
void * end = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end;
@@ -383,18 +262,21 @@ static void QLogCB_Recording(void)
static void QLogCB_Playback(void)
{
- if (gUnknown_203AE94.unk_0_0 == 2)
- gUnknown_203AE94.unk_0_0 = 0;
+ if (sQuestLogCurrentScene.playbackSubstate == 2)
+ sQuestLogCurrentScene.playbackSubstate = 0;
- if (gUnknown_203AE94.unk_0_6 == 0)
+ if (sQuestLogCurrentScene.sceneEndMode == 0)
{
- if (gQuestLogPlaybackState || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < NELEMS(gUnknown_203AE0C) && gUnknown_203AE0C[gUnknown_203AE94.unk_1] != NULL))
- sub_8111AD8();
+ if (gQuestLogPlaybackState != 0
+ || sQuestLogCurrentScene.playbackSubstate == 1
+ || (sQuestLogCurrentScene.cursor < NELEMS(gUnknown_203AE0C)
+ && gUnknown_203AE0C[sQuestLogCurrentScene.cursor] != NULL))
+ QuestLog_PlayCurrentEvent();
else
{
- gUnknown_203AE94.unk_0_6 = 2;
+ sQuestLogCurrentScene.sceneEndMode = 2;
ScriptContext2_Enable();
- sub_81118F4(0);
+ QuestLog_BeginFadeAtEndOfScene(0);
}
}
}
@@ -409,13 +291,13 @@ u8 GetQuestLogStartType(void)
return gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType;
}
-static void StartRecordingQuestLogEntry(u16 eventId)
+void StartRecordingQuestLogEntry(u16 eventId)
{
if (sCurrentSceneNum >= QUEST_LOG_SCENE_COUNT)
sCurrentSceneNum = 0;
DestroySav1QuestLogEntry(sCurrentSceneNum);
- sub_8113B88();
+ ResetUnk203B044();
sEventRecordingPointer = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script;
if (IS_LINK_QL_EVENT(eventId) || eventId == QL_EVENT_DEPARTED)
gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType = QL_START_WARP;
@@ -565,7 +447,7 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId)
if (sNumScenes != 0)
{
gHelpSystemEnabled = FALSE;
- sub_8110F90(taskId);
+ Task_BeginQuestLogPlayback(taskId);
DestroyTask(taskId);
}
else
@@ -575,21 +457,21 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId)
}
}
-static void sub_8110F90(u8 unused)
+static void Task_BeginQuestLogPlayback(u8 taskId)
{
- gSaveBlock1Ptr->location.mapGroup = 3;
- gSaveBlock1Ptr->location.mapNum = 19;
+ gSaveBlock1Ptr->location.mapGroup = MAP_GROUP(ROUTE1);
+ gSaveBlock1Ptr->location.mapNum = MAP_NUM(ROUTE1);
gSaveBlock1Ptr->location.warpId = -1;
sCurrentSceneNum = 0;
gDisableMapMusicChangeOnMapLoad = 1;
DisableWildEncounters(TRUE);
- sub_8111368();
+ QLPlayback_InitOverworldState();
}
void sub_8110FCC(void)
{
- sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer);
- sub_8113B88();
+ ReadQuestLogScriptFromSav1(sCurrentSceneNum, sQuestLogSceneRecordBuffer);
+ ResetUnk203B044();
SetUpQuestLogEntry(1, sQuestLogSceneRecordBuffer, 0x100);
QuestLogPlaybackSetObjectEventTemplates(sCurrentSceneNum);
}
@@ -599,8 +481,8 @@ static bool8 FieldCB2_QuestLogStartPlaybackWithWarpExit(void)
LoadPalette(stdpal_get(4), 0xF0, 0x20);
SetQuestLogState(QL_STATE_PLAYBACK);
FieldCB_DefaultWarpExit();
- gUnknown_203AE94 = (struct UnkStruct_203AE94){};
- gUnknown_203AE94.unk_0_0 = 2;
+ sQuestLogCurrentScene = (struct UnkStruct_203AE94){};
+ sQuestLogCurrentScene.playbackSubstate = 2;
return 1;
}
@@ -609,8 +491,8 @@ static bool8 FieldCB2_QuestLogStartPlaybackStandingInPlace(void)
LoadPalette(stdpal_get(4), 0xF0, 0x20);
SetQuestLogState(QL_STATE_PLAYBACK);
FieldCB_WarpExitFadeFromBlack();
- gUnknown_203AE94 = (struct UnkStruct_203AE94){};
- gUnknown_203AE94.unk_0_0 = 2;
+ sQuestLogCurrentScene = (struct UnkStruct_203AE94){};
+ sQuestLogCurrentScene.playbackSubstate = 2;
return 1;
}
@@ -669,11 +551,11 @@ static void QuestLogPlaybackSetObjectEventTemplates(u8 sceneNum)
SetSav1ObjectEventsFromQuestLog(questLog, gSaveBlock1Ptr->objectEventTemplates);
}
-void sub_8111274(u8 sceneNum, bool8 a1)
+static void QLPlayback_SetInitialPlayerPosition(u8 sceneNum, bool8 isWarp)
{
struct WarpData sp0;
- if (!a1)
+ if (!isWarp)
{
gSaveBlock1Ptr->location.mapGroup = gSaveBlock1Ptr->questLog[sceneNum].mapGroup;
gSaveBlock1Ptr->location.mapNum = gSaveBlock1Ptr->questLog[sceneNum].mapNum;
@@ -688,11 +570,11 @@ void sub_8111274(u8 sceneNum, bool8 a1)
sp0.warpId = gSaveBlock1Ptr->questLog[sceneNum].warpId;
sp0.x = gSaveBlock1Ptr->questLog[sceneNum].x;
sp0.y = gSaveBlock1Ptr->questLog[sceneNum].y;
- sub_8055D5C(&sp0);
+ Overworld_SetWarpDestinationFromWarp(&sp0);
}
}
-static void sub_8111368(void)
+static void QLPlayback_InitOverworldState(void)
{
gQuestLogState = QL_STATE_PLAYBACK;
ResetSpecialVars();
@@ -700,16 +582,16 @@ static void sub_8111368(void)
ClearPCItemSlots();
if (GetQuestLogStartType() == QL_START_NORMAL)
{
- sub_8111274(sCurrentSceneNum, FALSE);
+ QLPlayback_SetInitialPlayerPosition(sCurrentSceneNum, FALSE);
gFieldCallback2 = FieldCB2_QuestLogStartPlaybackStandingInPlace;
- SetMainCallback2(sub_80572A8);
+ SetMainCallback2(CB2_SetUpOverworldForQLPlayback);
}
else
{
- sub_8111274(sCurrentSceneNum, TRUE);
+ QLPlayback_SetInitialPlayerPosition(sCurrentSceneNum, TRUE);
WarpIntoMap();
gFieldCallback2 = FieldCB2_QuestLogStartPlaybackWithWarpExit;
- SetMainCallback2(sub_805726C);
+ SetMainCallback2(CB2_SetUpOverworldForQLPlaybackWithWarpExit);
}
}
@@ -871,7 +753,7 @@ void sub_8111708(void)
}
}
-static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1)
+static void ReadQuestLogScriptFromSav1(u8 sceneNum, struct QuestLogEntry * a1)
{
u16 i;
u16 *r4;
@@ -918,9 +800,9 @@ static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1)
}
}
-static void sub_81118F4(s8 a0)
+static void QuestLog_BeginFadeAtEndOfScene(s8 delay)
{
- FadeScreen(FADE_TO_BLACK, a0);
+ FadeScreen(FADE_TO_BLACK, delay);
sQuestLogCB = QuestLog_AdvancePlayhead;
}
@@ -932,7 +814,7 @@ static void QuestLog_AdvancePlayhead(void)
if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType != 0)
{
sNumScenes--;
- sub_8111368();
+ QLPlayback_InitOverworldState();
}
else
{
@@ -947,14 +829,14 @@ static void QuestLog_StartFinalScene(void)
ResetSpecialVars();
Save_ResetSaveCounters();
Save_LoadGameData(SAVE_NORMAL);
- SetMainCallback2(sub_8057430);
- gFieldCallback2 = sub_8111F60;
+ SetMainCallback2(CB2_EnterFieldFromQuestLog);
+ gFieldCallback2 = FieldCB2_FinalScene;
FreeAllWindowBuffers();
gQuestLogState = QL_STATE_PLAYBACK_LAST;
sQuestLogCB = NULL;
}
-void sub_81119C8(void)
+void QuestLog_AdvancePlayhead_(void)
{
QuestLog_AdvancePlayhead();
}
@@ -966,7 +848,7 @@ bool8 QuestLog_SchedulePlaybackCB(void (*callback)(void))
switch (gQuestLogState)
{
case QL_STATE_RECORDING:
- QuestLog_OnInteractionWithSpecialNpc();
+ QuestLog_CutRecording();
break;
case QL_STATE_PLAYBACK:
gQuestLogPlaybackState = 3;
@@ -990,7 +872,7 @@ static void Task_RunPlaybackCB(u8 taskId)
if (++data[0] == 0x7F)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gUnknown_203AE94.unk_0_6 = 2;
+ sQuestLogCurrentScene.sceneEndMode = 2;
data[1]++;
}
break;
@@ -1008,46 +890,46 @@ static void Task_RunPlaybackCB(u8 taskId)
}
}
-static void sub_8111AD8(void)
+static void QuestLog_PlayCurrentEvent(void)
{
- if (gUnknown_203AE94.unk_0_0 == 1)
+ if (sQuestLogCurrentScene.playbackSubstate == 1)
{
- if (--gUnknown_203AE94.unk_2 != 0)
+ if (--sQuestLogCurrentScene.unk_2 != 0)
return;
- gUnknown_203AE94.unk_0_0 = 0;
- gUnknown_203AE94.unk_0_4 = 1;
+ sQuestLogCurrentScene.playbackSubstate = 0;
+ sQuestLogCurrentScene.playingEvent = 1;
sub_8112888(2);
}
- if (gUnknown_203AE94.unk_0_4 == 1)
+ if (sQuestLogCurrentScene.playingEvent == 1)
{
- if (++gUnknown_203AE94.unk_3 > 15)
+ if (++sQuestLogCurrentScene.unk_3 > 15)
{
QuestLog_CloseTextWindow();
- gUnknown_203AE94.unk_0_4 = 0;
- gUnknown_203AE94.unk_3 = 0;
+ sQuestLogCurrentScene.playingEvent = 0;
+ sQuestLogCurrentScene.unk_3 = 0;
}
}
- if (gUnknown_203AE94.unk_1 < NELEMS(gUnknown_203AE0C))
+ if (sQuestLogCurrentScene.cursor < NELEMS(gUnknown_203AE0C))
{
- if (sub_8113B44(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1)
+ if (sub_8113B44(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1)
sub_8111B80();
- else if (sub_8113AE8(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1)
+ else if (sub_8113AE8(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1)
sub_8111B80();
}
}
static void sub_8111B80(void)
{
- if (gUnknown_203AE94.unk_0_0 == 0)
+ if (sQuestLogCurrentScene.playbackSubstate == 0)
{
- gUnknown_203AE94.unk_0_0 = 1;
- gUnknown_203AE94.unk_0_4 = 0;
- gUnknown_203AE94.unk_3 = 0;
- gUnknown_203AE94.unk_2 = sub_8111BD4();
+ sQuestLogCurrentScene.playbackSubstate = 1;
+ sQuestLogCurrentScene.playingEvent = 0;
+ sQuestLogCurrentScene.unk_3 = 0;
+ sQuestLogCurrentScene.unk_2 = sub_8111BD4();
if (gUnknown_203B044.unk_2 == 0)
- gUnknown_203AE94.unk_1++;
- if (gUnknown_203AE94.unk_1 > 32)
+ sQuestLogCurrentScene.cursor++;
+ if (sQuestLogCurrentScene.cursor > 32)
return;
DrawQuestLogSceneDescription();
}
@@ -1078,38 +960,38 @@ bool8 sub_8111C2C(void)
{
if (gQuestLogState != QL_STATE_PLAYBACK)
return FALSE;
- if (gQuestLogPlaybackState == 0 || gUnknown_203AE94.unk_0_0 == 1 || gUnknown_203AE94.unk_0_0 == 2)
+ if (gQuestLogPlaybackState == 0 || sQuestLogCurrentScene.playbackSubstate == 1 || sQuestLogCurrentScene.playbackSubstate == 2)
return TRUE;
return FALSE;
}
void sub_8111C68(void)
{
- if (gUnknown_203AE94.unk_0_6 == 0)
+ if (sQuestLogCurrentScene.sceneEndMode == 0)
{
if (JOY_NEW(A_BUTTON))
{
- gUnknown_203AE94.unk_0_6 = 2;
+ sQuestLogCurrentScene.sceneEndMode = 2;
gQuestLogPlaybackState = 0;
- sub_81118F4(-3);
+ QuestLog_BeginFadeAtEndOfScene(-3);
}
else if (JOY_NEW(B_BUTTON))
{
- gUnknown_203AE94.unk_0_6 = 1;
+ sQuestLogCurrentScene.sceneEndMode = 1;
gQuestLogPlaybackState = 0;
QuestLog_SkipToEndOfPlayback(-3);
}
}
}
-bool8 sub_8111CD0(void)
+bool8 QuestLogScenePlaybackIsEnding(void)
{
- if (gUnknown_203AE94.unk_0_6 != 0)
+ if (sQuestLogCurrentScene.sceneEndMode != 0)
return TRUE;
return FALSE;
}
-void sub_8111CF0(void)
+void QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(void)
{
if (gQuestLogState == QL_STATE_PLAYBACK)
DrawPreviouslyOnQuestHeader(sNumScenes);
@@ -1193,7 +1075,7 @@ static void QuestLog_WaitFadeAndCancelPlayback(void)
{
if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType == 0)
break;
- sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer);
+ ReadQuestLogScriptFromSav1(sCurrentSceneNum, sQuestLogSceneRecordBuffer);
}
gQuestLogPlaybackState = 0;
QuestLog_StartFinalScene();
@@ -1211,16 +1093,16 @@ void sub_8111F38(u16 a0, u16 a1)
CpuSet(gPlttBufferUnfaded + a0, gUnknown_203AE90 + a0, a1);
}
-static bool8 sub_8111F60(void)
+static bool8 FieldCB2_FinalScene(void)
{
LoadPalette(stdpal_get(4), 0xF0, 0x20);
DrawPreviouslyOnQuestHeader(0);
FieldCB_WarpExitFadeFromBlack();
- CreateTask(sub_8111F8C, 0xFF);
+ CreateTask(Task_FinalScene_WaitFade, 0xFF);
return TRUE;
}
-static void sub_8111F8C(u8 taskId)
+static void Task_FinalScene_WaitFade(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1240,7 +1122,7 @@ static void Task_QuestLogScene_SavedGame(u8 taskId)
if (!gPaletteFade.active)
{
- if (gUnknown_203AE94.unk_0_6 != 1)
+ if (sQuestLogCurrentScene.sceneEndMode != 1)
{
GetMapNameGeneric(gStringVar1, gMapHeader.regionMapSectionId);
StringExpandPlaceholders(gStringVar4, gText_QuestLog_SavedGameAtLocation);
@@ -1260,7 +1142,7 @@ static void Task_WaitAtEndOfQuestLog(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- if (JOY_NEW(A_BUTTON | B_BUTTON) || task->tTimer >= 127 || gUnknown_203AE94.unk_0_6 == 1)
+ if (JOY_NEW(A_BUTTON | B_BUTTON) || task->tTimer >= 127 || sQuestLogCurrentScene.sceneEndMode == 1)
{
QuestLog_CloseTextWindow();
task->tTimer = 0;
@@ -1310,11 +1192,11 @@ static void Task_EndQuestLog(u8 taskId)
tState++;
break;
default:
- if (gUnknown_203AE94.unk_0_6 == 1)
+ if (sQuestLogCurrentScene.sceneEndMode == 1)
ShowMapNamePopup(TRUE);
CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
Free(gUnknown_203AE90);
- gUnknown_203AE94 = (struct UnkStruct_203AE94){};
+ sQuestLogCurrentScene = (struct UnkStruct_203AE94){};
sub_80696C0();
ScriptContext2_Disable();
gTextFlags.autoScroll = FALSE;
@@ -1359,7 +1241,7 @@ static void sub_811229C(void)
Free(buffer);
}
-void sub_811231C(void)
+void FinishRecordingQuestLogScene(void)
{
if (gQuestLogState == QL_STATE_RECORDING)
{
@@ -1373,7 +1255,7 @@ void sub_811231C(void)
}
}
-void QuestLog_OnInteractionWithSpecialNpc(void)
+void QuestLog_CutRecording(void)
{
if (gQuestLogPlaybackState != 0 && gQuestLogState == QL_STATE_RECORDING)
{
@@ -1414,7 +1296,7 @@ void SaveQuestLogData(void)
{
if (MenuHelpers_LinkSomething() != TRUE)
{
- QuestLog_OnInteractionWithSpecialNpc();
+ QuestLog_CutRecording();
SortQuestLogInSav1();
}
}
@@ -1824,2547 +1706,3 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2)
}
}
}
-
-
-// Probable file boundary, help_message.c below, quest_log.c above
-
-
-const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin");
-
-static const struct WindowTemplate sHelpMessageWindowTemplate = {
- 0x00, 0, 15, 30, 5, 15, 0x008F
-};
-
-void MapNamePopupWindowIdSetDummy(void)
-{
- sHelpMessageWindowId = 0xFF;
-}
-
-u8 CreateHelpMessageWindow(void)
-{
- if (sHelpMessageWindowId == 0xFF)
- {
- sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate);
- PutWindowTilemap(sHelpMessageWindowId);
- }
- return sHelpMessageWindowId;
-}
-
-void DestroyHelpMessageWindow(u8 a0)
-{
- if (sHelpMessageWindowId != 0xFF)
- {
- FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0));
- ClearWindowTilemap(sHelpMessageWindowId);
-
- if (a0)
- CopyWindowToVram(sHelpMessageWindowId, a0);
-
- RemoveWindow(sHelpMessageWindowId);
- sHelpMessageWindowId = 0xFF;
- }
-}
-
-#ifdef NONMATCHING
-void sub_8112F18(u8 windowId)
-{
- u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
- u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
- u8 *buffer = Alloc(32 * width * height);
- u8 i, j;
- u8 k;
-
- if (buffer != NULL)
- {
- for (i = 0; i < height; i++)
- {
- for (j = 0; j < width; j++)
- {
- if (i == 0)
- k = 0;
- else if (i == height - 1)
- k = 14;
- else
- k = 5;
- CpuCopy32(
- (void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction
- buffer + 32 * (i * width + j),
- 32
- );
- }
- }
- CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0);
- Free(buffer);
- }
-}
-#else
-NAKED
-void sub_8112F18(u8 windowId)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r10, r0\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetWindowAttribute\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmov r0, r10\n"
- "\tmovs r1, 0x4\n"
- "\tbl GetWindowAttribute\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tlsls r0, r7, 5\n"
- "\tmuls r0, r6\n"
- "\tbl Alloc\n"
- "\tmov r8, r0\n"
- "\tcmp r0, 0\n"
- "\tbeq _08112FB8\n"
- "\tmovs r5, 0\n"
- "\tadds r0, r6, 0\n"
- "\tmuls r0, r7\n"
- "\tstr r0, [sp]\n"
- "\tcmp r5, r7\n"
- "\tbcs _08112FA2\n"
- "_08112F5A:\n"
- "\tmovs r4, 0\n"
- "\tadds r1, r5, 0x1\n"
- "\tmov r9, r1\n"
- "\tcmp r4, r6\n"
- "\tbcs _08112F98\n"
- "\tsubs r3, r7, 0x1\n"
- "_08112F66:\n"
- "\tmovs r0, 0\n"
- "\tcmp r5, 0\n"
- "\tbeq _08112F74\n"
- "\tmovs r0, 0x5\n"
- "\tcmp r5, r3\n"
- "\tbne _08112F74\n"
- "\tmovs r0, 0xE\n"
- "_08112F74:\n"
- "\tlsls r0, 5\n"
- "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r5, 0\n"
- "\tmuls r1, r6\n"
- "\tadds r1, r4\n"
- "\tlsls r1, 5\n"
- "\tadd r1, r8\n"
- "\tldr r2, _08112FCC @ =0x04000008\n"
- "\tstr r3, [sp, 0x4]\n"
- "\tbl CpuSet\n"
- "\tadds r0, r4, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r3, [sp, 0x4]\n"
- "\tcmp r4, r6\n"
- "\tbcc _08112F66\n"
- "_08112F98:\n"
- "\tmov r1, r9\n"
- "\tlsls r0, r1, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, r7\n"
- "\tbcc _08112F5A\n"
- "_08112FA2:\n"
- "\tldr r0, [sp]\n"
- "\tlsls r2, r0, 21\n"
- "\tlsrs r2, 16\n"
- "\tmov r0, r10\n"
- "\tmov r1, r8\n"
- "\tmovs r3, 0\n"
- "\tbl CopyToWindowPixelBuffer\n"
- "\tmov r0, r8\n"
- "\tbl Free\n"
- "_08112FB8:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_08112FC8: .4byte gUnknown_84566A8\n"
- "_08112FCC: .4byte 0x04000008");
-}
-#endif
-
-static void sub_8112FD0(void)
-{
- sub_8112F18(sHelpMessageWindowId);
-}
-
-static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_DARK_GREY};
-
-static void PrintHelpMessageText(const u8 *text)
-{
- AddTextPrinterParameterized4(sHelpMessageWindowId, 2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text);
-}
-
-void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode)
-{
- sub_8112FD0();
- PrintHelpMessageText(text);
- if (mode)
- CopyWindowToVram(sHelpMessageWindowId, mode);
-}
-
-
-// Probable file boundary, trainer_fan_club.c below, help_message.c above
-
-
-void ResetTrainerFanClub(void)
-{
- VarSet(VAR_FANCLUB_FAN_COUNTER, 0);
- VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, 0);
-}
-
-void Script_TryLoseFansFromPlayTimeAfterLinkBattle(void)
-{
- TryLoseFansFromPlayTimeAfterLinkBattle(TRAINER_FAN_CLUB);
-}
-
-static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *fanClub)
-{
- if (DidPlayerGetFirstFans(fanClub))
- {
- TryLoseFansFromPlayTime(fanClub);
- VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
- }
-}
-
-void Script_UpdateTrainerFanClubGameClear(void)
-{
- UpdateTrainerFanClubGameClear(TRAINER_FAN_CLUB);
-}
-
-static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *fanClub)
-{
- if (!fanClub->gotInitialFans)
- {
- SetPlayerGotFirstFans(fanClub);
- SetInitialFansOfPlayer(fanClub);
- VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
- FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BLACKBELT);
- FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_ROCKER);
- FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_WOMAN);
- FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BEAUTY);
- VarSet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1);
- }
-}
-
-ALIGNED(4) const u8 sCounterIncrements[] = {2, 1, 2, 1};
-
-static u8 TryGainNewFanFromCounter(struct TrainerFanClub *fanClub, u8 a1)
-{
- if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
- {
- if (fanClub->timer + sCounterIncrements[a1] >= 20)
- {
- if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 3)
- {
- PlayerGainRandomTrainerFan(fanClub);
- fanClub->timer = 0;
- }
- else
- fanClub->timer = 20;
- }
- else
- fanClub->timer += sCounterIncrements[a1];
- }
-
- return fanClub->timer;
-}
-
-
-static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *fanClub)
-{
- static const u8 sFanClubMemberIds[] =
- {
- FANCLUB_MEMBER2,
- FANCLUB_MEMBER4,
- FANCLUB_MEMBER6,
- FANCLUB_MEMBER1,
- FANCLUB_MEMBER8,
- FANCLUB_MEMBER7,
- FANCLUB_MEMBER5,
- FANCLUB_MEMBER3
- };
-
- u8 i;
- u8 idx = 0;
-
- for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
- {
- if (!(GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i])))
- {
- idx = i;
- if (Random() % 2)
- {
- SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]);
- return sFanClubMemberIds[i];
- }
- }
- }
-
- SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
- return sFanClubMemberIds[idx];
-}
-
-static u8 PlayerLoseRandomTrainerFan(struct TrainerFanClub *fanClub)
-{
- static const u8 sFanClubMemberIds[] =
- {
- FANCLUB_MEMBER6,
- FANCLUB_MEMBER7,
- FANCLUB_MEMBER4,
- FANCLUB_MEMBER8,
- FANCLUB_MEMBER5,
- FANCLUB_MEMBER2,
- FANCLUB_MEMBER1,
- FANCLUB_MEMBER3
- };
-
- u8 i;
- u8 idx = 0;
-
- if (GetNumFansOfPlayerInTrainerFanClub(fanClub) == 1)
- return 0;
-
- for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
- {
- if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))
- {
- idx = i;
- if (Random() % 2)
- {
- FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]);
- return sFanClubMemberIds[i];
- }
- }
- }
-
- if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]))
- FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
-
- return sFanClubMemberIds[idx];
-}
-
-u16 Script_GetNumFansOfPlayerInTrainerFanClub(void)
-{
- return GetNumFansOfPlayerInTrainerFanClub(TRAINER_FAN_CLUB);
-}
-
-static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *fanClub)
-{
- u8 count = 0;
- u8 i;
-
- for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
- {
- if (GET_TRAINER_FAN_CLUB_FLAG(i))
- count++;
- }
-
- return count;
-}
-
-void Script_TryLoseFansFromPlayTime(void)
-{
- TryLoseFansFromPlayTime(TRAINER_FAN_CLUB);
-}
-
-static void TryLoseFansFromPlayTime(struct TrainerFanClub *fanClub)
-{
- u8 i = 0;
- u16 timer;
-
- if (gSaveBlock2Ptr->playTimeHours < 999)
- {
- while (1)
- {
- if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 5)
- {
- VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
- break;
- }
- if (i == NUM_TRAINER_FAN_CLUB_MEMBERS)
- break;
-
- timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER);
- if (gSaveBlock2Ptr->playTimeHours - timer < 12)
- break;
-
- PlayerLoseRandomTrainerFan(fanClub);
- timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER);
- VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, timer + 12);
- i++;
- }
- }
-}
-
-bool16 Script_IsFanClubMemberFanOfPlayer(void)
-{
- return IsFanClubMemberFanOfPlayer(TRAINER_FAN_CLUB);
-}
-
-static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *fanClub)
-{
- return GET_TRAINER_FAN_CLUB_FLAG(gSpecialVar_0x8004);
-}
-
-static void SetInitialFansOfPlayer(struct TrainerFanClub *fanClub)
-{
- SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER1);
- SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER2);
- SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER3);
-}
-
-void Script_BufferFanClubTrainerName(void)
-{
- u8 whichLinkTrainer = 0;
- u8 whichNPCTrainer = 0;
-
- switch (gSpecialVar_0x8004)
- {
- case FANCLUB_MEMBER1:
- whichNPCTrainer = 0;
- whichLinkTrainer = 0;
- break;
- case FANCLUB_MEMBER2:
- case FANCLUB_MEMBER3:
- case FANCLUB_MEMBER4:
- case FANCLUB_MEMBER8:
- break;
- case FANCLUB_MEMBER5:
- whichNPCTrainer = 1;
- whichLinkTrainer = 0;
- break;
- case FANCLUB_MEMBER6:
- whichNPCTrainer = 0;
- whichLinkTrainer = 1;
- break;
- case FANCLUB_MEMBER7:
- whichNPCTrainer = 2;
- whichLinkTrainer = 1;
- break;
- }
- BufferFanClubTrainerName(&gSaveBlock2Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer);
-}
-
-static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 whichLinkTrainer, u8 whichNPCTrainer)
-{
- u8 *str;
- const u8 *linkTrainerName = linkRecords->entries[whichLinkTrainer].name;
- if (linkTrainerName[0] == EOS)
- {
- switch (whichNPCTrainer)
- {
- case 0:
- StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
- break;
- case 1:
- StringCopy(gStringVar1, gText_LtSurge);
- break;
- case 2:
- StringCopy(gStringVar1, gText_Koga);
- break;
- default:
- StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
- break;
- }
- }
- else
- {
- str = gStringVar1;
- StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH);
- str[PLAYER_NAME_LENGTH] = EOS;
- if ( str[0] == EXT_CTRL_CODE_BEGIN
- && str[1] == EXT_CTRL_CODE_JPN)
- {
- str += 2;
- while (*str != EOS)
- str++;
- *str++ = EXT_CTRL_CODE_BEGIN;
- *str++ = EXT_CTRL_CODE_ENG;
- *str++ = EOS;
- }
- }
-}
-
-void Special_UpdateTrainerFansAfterLinkBattle(void)
-{
- UpdateTrainerFansAfterLinkBattle(TRAINER_FAN_CLUB);
-}
-
-static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *fanClub)
-{
- if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
- {
- TryLoseFansFromPlayTimeAfterLinkBattle(fanClub);
- if (gBattleOutcome == B_OUTCOME_WON)
- PlayerGainRandomTrainerFan(fanClub);
- else
- PlayerLoseRandomTrainerFan(fanClub);
- }
-}
-
-static bool8 DidPlayerGetFirstFans(struct TrainerFanClub *fanClub)
-{
- return fanClub->gotInitialFans;
-}
-
-void Script_SetPlayerGotFirstFans(void)
-{
- SetPlayerGotFirstFans(TRAINER_FAN_CLUB);
-}
-
-static void SetPlayerGotFirstFans(struct TrainerFanClub *fanClub)
-{
- fanClub->gotInitialFans = TRUE;
-}
-
-u8 Script_TryGainNewFanFromCounter(void)
-{
- return TryGainNewFanFromCounter(TRAINER_FAN_CLUB, gSpecialVar_0x8004);
-}
-
-
-// Probable file boundary, quest_log_events.c below, trainer_fan_club.c above
-
-
-static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = {
- [QL_EVENT_0] = NULL,
- [QL_EVENT_1] = NULL,
- [QL_EVENT_2] = NULL,
- [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogData_SwitchedPartyOrder,
- [QL_EVENT_USED_ITEM] = BufferQuestLogData_UsedItem,
- [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogData_GaveHeldItemFromPartyMenu,
- [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogData_GaveHeldItemFromBagMenu,
- [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogData_GaveHeldItemFromPC,
- [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogData_TookHeldItem,
- [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogData_SwappedHeldItem,
- [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogData_SwappedHeldItemFromPC,
- [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogData_UsedPkmnCenter,
- [QL_EVENT_LINK_TRADED] = BufferQuestLogData_LinkTraded,
- [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogData_LinkBattledSingle,
- [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogData_LinkBattledDouble,
- [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogData_LinkBattledMulti,
- [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogData_UsedUnionRoom,
- [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogData_UsedUnionRoomChat,
- [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogData_LinkTradedUnionRoom,
- [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogData_LinkBattledUnionRoom,
- [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogData_SwitchedMonsBetweenBoxes,
- [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogData_SwitchedMonsWithinBox,
- [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogData_SwitchedPartyMonForPCMon,
- [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogData_MovedMonBetweenBoxes,
- [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogData_MovedMonWithinBox,
- [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogData_WithdrewMonFromPC,
- [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogData_DepositedMonInPC,
- [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogData_SwitchedMultipleMons,
- [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogData_DepositedItemInPC,
- [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogData_WithdrewItemFromPC,
- [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogData_DefeatedGymLeader,
- [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogData_DefeatedWildMon,
- [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogData_DefeatedEliteFourMember,
- [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogData_DefeatedChampion,
- [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogData_DefeatedTrainer,
- [QL_EVENT_DEPARTED] = BufferQuestLogData_DepartedLocation,
- [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogData_UsedFieldMove,
- [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogData_BoughtItem,
- [QL_EVENT_SOLD_ITEM] = BufferQuestLogData_SoldItem,
- [QL_EVENT_39] = NULL,
- [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogData_ObtainedItem,
- [QL_EVENT_41] = NULL,
- [QL_EVENT_ARRIVED] = BufferQuestLogData_ArrivedInLocation
-};
-
-void SetQuestLogEvent(u16 eventId, const u16 *eventData)
-{
- u16 *r1;
-
- if (eventId == QL_EVENT_DEPARTED && gUnknown_203B048 == 2)
- {
- sub_811381C();
- return;
- }
- sub_811381C();
- if (gQuestLogState == QL_STATE_PLAYBACK)
- return;
-
- if (!IS_VALID_QL_EVENT(eventId))
- return;
-
- if (InQuestLogDisabledLocation() == TRUE)
- return;
-
- if (TrySetLinkQuestLogEvent(eventId, eventData) == TRUE)
- return;
-
- if (MenuHelpers_LinkSomething() == TRUE)
- return;
-
- if (InUnionRoom() == TRUE)
- return;
-
- if (TrySetTrainerBattleQuestLogEvent(eventId, eventData) == TRUE)
- return;
-
- if (IsQuestLogEventWithSpecialEncounterSpecies(eventId, eventData) == TRUE)
- return;
-
- if (sub_81153E4(eventId, eventData) == FALSE)
- return;
-
- if (gQuestLogPlaybackState == 0)
- {
- if (sub_8113778(eventId, eventData) == TRUE)
- return;
-
- if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL)
- {
- if (sub_81153A8(eventId, eventData) == FALSE)
- return;
- StartRecordingQuestLogEntry(eventId);
- }
- }
- else if (eventId == QL_EVENT_OBTAINED_ITEM)
- return;
-
- sub_8113B94(eventId);
- if (eventId == QL_EVENT_DEFEATED_WILD_MON)
- {
- if (gUnknown_203AE04 == NULL)
- {
- gUnknown_203AE04 = sEventRecordingPointer;
- r1 = sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData);
- }
- else
- {
- sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData);
- return;
- }
- }
- else
- {
- gUnknown_203AE04 = NULL;
- r1 = sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData);
- }
-
- if (r1 == NULL)
- {
- sub_811231C();
- r1 = sub_8113828(eventId, eventData);
- if (r1 == NULL)
- return;
- }
-
- sEventRecordingPointer = r1;
- if (gUnknown_203B048 == 0)
- return;
- sub_811231C();
-}
-
-static bool8 InQuestLogDisabledLocation(void)
-{
- // In Trainer Tower
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_1F)
- && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_1F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_2F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_3F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_4F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_5F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_6F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_7F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_8F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ROOF)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_LOBBY)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR)))
- return TRUE;
-
- // In pokemon trainer fan club
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB))
- return TRUE;
-
- // In E-Reader house
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_HOUSE_ROOM1) &&
- (gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM1)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM2)))
- return TRUE;
-
- // In elevator
- if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROCKET_HIDEOUT_ELEVATOR))
- || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SILPH_CO_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SILPH_CO_ELEVATOR))
- || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR))
- || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR)))
- return TRUE;
-
- return FALSE;
-}
-
-bool8 sub_8113748(void)
-{
- if (InQuestLogDisabledLocation() != TRUE)
- return FALSE;
-
- if (gQuestLogState == QL_STATE_PLAYBACK)
- return TRUE;
-
- if (gQuestLogState == QL_STATE_RECORDING)
- QuestLog_OnInteractionWithSpecialNpc();
-
- return FALSE;
-}
-
-static bool8 sub_8113778(u16 eventId, const u16 *eventData)
-{
- if (eventId == QL_EVENT_USED_FIELD_MOVE || eventId == QL_EVENT_USED_PKMN_CENTER)
- return TRUE;
-
- if (!FlagGet(FLAG_SYS_GAME_CLEAR))
- {
- if (eventId == QL_EVENT_SWITCHED_PARTY_ORDER || eventId == QL_EVENT_DEFEATED_WILD_MON || sub_81137E4(eventId, eventData) == TRUE)
- return TRUE;
- }
-
- if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS))
- {
- if (eventId == QL_EVENT_USED_ITEM
- || eventId == QL_EVENT_GAVE_HELD_ITEM
- || eventId == QL_EVENT_GAVE_HELD_ITEM_BAG
- || eventId == QL_EVENT_GAVE_HELD_ITEM_PC
- || eventId == QL_EVENT_TOOK_HELD_ITEM
- || eventId == QL_EVENT_SWAPPED_HELD_ITEM
- || eventId == QL_EVENT_SWAPPED_HELD_ITEM_PC
- || eventId == QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON
- || eventId == QL_EVENT_WITHDREW_MON_PC
- || eventId == QL_EVENT_DEPOSITED_MON_PC)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static bool8 sub_81137E4(u16 eventId, const u16 *eventData)
-{
- if (eventId == QL_EVENT_DEFEATED_TRAINER)
- {
- u8 trainerClass = gTrainers[*eventData].trainerClass;
- if ( trainerClass == CLASS_RIVAL
- || trainerClass == CLASS_RIVAL_2
- || trainerClass == CLASS_CHAMPION_2
- || trainerClass == CLASS_BOSS)
- return FALSE;
- return TRUE;
- }
- return FALSE;
-}
-
-static void sub_811381C(void)
-{
- gUnknown_203B048 = 0;
-}
-
-static u16 *sub_8113828(u16 eventId, const u16 *eventData)
-{
- if (sub_8113778(eventId, eventData) == TRUE)
- return NULL;
-
- if (sub_81153A8(eventId, eventData) == FALSE)
- return NULL;
-
- StartRecordingQuestLogEntry(eventId);
- sub_8113B94(eventId);
-
- if (eventId == QL_EVENT_DEFEATED_WILD_MON)
- gUnknown_203AE04 = sEventRecordingPointer;
- else
- gUnknown_203AE04 = NULL;
-
- return sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData);
-}
-
-static bool8 TrySetLinkQuestLogEvent(u16 eventId, const u16 *eventData)
-{
- if (!IS_LINK_QL_EVENT(eventId))
- return FALSE;
-
- sub_81138F8();
- gUnknown_203B024.unk_00 = eventId;
-
- if (eventId != QL_EVENT_USED_UNION_ROOM && eventId != QL_EVENT_USED_UNION_ROOM_CHAT)
- {
- if (eventId == QL_EVENT_LINK_TRADED || eventId == QL_EVENT_LINK_TRADED_UNION)
- memcpy(gUnknown_203B024.unk_04, eventData, 12);
- else
- memcpy(gUnknown_203B024.unk_04, eventData, 24);
- }
- return TRUE;
-}
-
-void sub_81138F8(void)
-{
- gUnknown_203B024 = (struct UnkStruct_203B024){};
-}
-
-void QuestLog_StartRecordingInputsAfterDeferredEvent(void)
-{
- if (gUnknown_203B024.unk_00 != QL_EVENT_0)
- {
- u16 *resp;
- gUnknown_203B04A = 0;
- StartRecordingQuestLogEntry(gUnknown_203B024.unk_00);
- resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04);
- sEventRecordingPointer = resp;
- sub_81138F8();
- }
-}
-
-static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData)
-{
- if (eventId != QL_EVENT_DEFEATED_TRAINER
- && eventId != QL_EVENT_DEFEATED_GYM_LEADER
- && eventId != QL_EVENT_DEFEATED_E4_MEMBER
- && eventId != QL_EVENT_DEFEATED_CHAMPION)
- return FALSE;
-
- sub_81138F8();
- if (gQuestLogPlaybackState != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE)
- {
- gUnknown_203B024.unk_00 = eventId;
- memcpy(gUnknown_203B024.unk_04, eventData, 8);
- }
- return TRUE;
-}
-
-void sub_81139BC(void)
-{
- if (gUnknown_203B024.unk_00 != QL_EVENT_0)
- {
- u16 *resp;
- if (gQuestLogPlaybackState == 0)
- {
- gUnknown_203B04A = 0;
- StartRecordingQuestLogEntry(gUnknown_203B024.unk_00);
- }
- sub_8113B94(gUnknown_203B024.unk_00);
- resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04);
- sEventRecordingPointer = resp;
- TryRecordEvent41_IncCursor(1);
- sub_81138F8();
- sub_811231C();
- }
-}
-
-static void TryRecordEvent41_IncCursor(u16 a0)
-{
- sEventRecordingPointer = TryRecordEvent41(sEventRecordingPointer, a0);
- sQuestLogCursor++;
-}
-
-static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16 eventId, const u16 *eventData)
-{
- if (eventId != QL_EVENT_DEFEATED_WILD_MON)
- return FALSE;
-
- if (IsSpeciesFromSpecialEncounter(eventData[0]) == TRUE)
- return TRUE;
-
- if (IsSpeciesFromSpecialEncounter(eventData[1]) == TRUE)
- return TRUE;
-
- return FALSE;
-}
-
-static const u16 *(*const sQuestLogEventTextBufferCBs[])(const u16 *) = {
- [QL_EVENT_0] = NULL,
- [QL_EVENT_1] = NULL,
- [QL_EVENT_2] = NULL,
- [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogText_SwitchedPartyOrder,
- [QL_EVENT_USED_ITEM] = BufferQuestLogText_UsedItem,
- [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogText_GaveHeldItemFromPartyMenu,
- [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogText_GaveHeldItemFromBagMenu,
- [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogText_GaveHeldItemFromPC,
- [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogText_TookHeldItem,
- [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogText_SwappedHeldItem,
- [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogText_SwappedHeldItemFromPC,
- [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogText_UsedPkmnCenter,
- [QL_EVENT_LINK_TRADED] = BufferQuestLogText_LinkTraded,
- [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogText_LinkBattledSingle,
- [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogText_LinkBattledDouble,
- [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogText_LinkBattledMulti,
- [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogText_UsedUnionRoom,
- [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogText_UsedUnionRoomChat,
- [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogText_LinkTradedUnionRoom,
- [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogText_LinkBattledUnionRoom,
- [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogText_SwitchedMonsBetweenBoxes,
- [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogText_SwitchedMonsWithinBox,
- [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogText_SwitchedPartyMonForPCMon,
- [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogText_MovedMonBetweenBoxes,
- [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogText_MovedMonWithinBox,
- [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogText_WithdrewMonFromPC,
- [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogText_DepositedMonInPC,
- [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogText_SwitchedMultipleMons,
- [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogText_DepositedItemInPC,
- [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogText_WithdrewItemFromPC,
- [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogText_DefeatedGymLeader,
- [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogText_DefeatedWildMon,
- [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogText_DefeatedEliteFourMember,
- [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogText_DefeatedChampion,
- [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogText_DefeatedTrainer,
- [QL_EVENT_DEPARTED] = BufferQuestLogText_DepartedLocation,
- [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogText_UsedFieldMove,
- [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogText_BoughtItem,
- [QL_EVENT_SOLD_ITEM] = BufferQuestLogText_SoldItem,
- [QL_EVENT_39] = NULL,
- [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogText_ObtainedItem,
- [QL_EVENT_41] = NULL,
- [QL_EVENT_ARRIVED] = BufferQuestLogText_ArrivedInLocation
-};
-
-static const u8 sQuestLogEventCmdSizes[] = {
- [QL_EVENT_0] = 0x08,
- [QL_EVENT_1] = 0x08,
- [QL_EVENT_2] = 0x08,
- [QL_EVENT_SWITCHED_PARTY_ORDER] = 0x08,
- [QL_EVENT_USED_ITEM] = 0x0a,
- [QL_EVENT_GAVE_HELD_ITEM] = 0x08,
- [QL_EVENT_GAVE_HELD_ITEM_BAG] = 0x08,
- [QL_EVENT_GAVE_HELD_ITEM_PC] = 0x08,
- [QL_EVENT_TOOK_HELD_ITEM] = 0x08,
- [QL_EVENT_SWAPPED_HELD_ITEM] = 0x0a,
- [QL_EVENT_SWAPPED_HELD_ITEM_PC] = 0x0a,
- [QL_EVENT_USED_PKMN_CENTER] = 0x04,
- [QL_EVENT_LINK_TRADED] = 0x10,
- [QL_EVENT_LINK_BATTLED_SINGLE] = 0x0c,
- [QL_EVENT_LINK_BATTLED_DOUBLE] = 0x0c,
- [QL_EVENT_LINK_BATTLED_MULTI] = 0x1a,
- [QL_EVENT_USED_UNION_ROOM] = 0x04,
- [QL_EVENT_USED_UNION_ROOM_CHAT] = 0x04,
- [QL_EVENT_LINK_TRADED_UNION] = 0x10,
- [QL_EVENT_LINK_BATTLED_UNION] = 0x0c,
- [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = 0x0a,
- [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = 0x0a,
- [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = 0x0a,
- [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = 0x08,
- [QL_EVENT_MOVED_MON_WITHIN_BOX] = 0x08,
- [QL_EVENT_WITHDREW_MON_PC] = 0x08,
- [QL_EVENT_DEPOSITED_MON_PC] = 0x08,
- [QL_EVENT_SWITCHED_MULTIPLE_MONS] = 0x06,
- [QL_EVENT_DEPOSITED_ITEM_PC] = 0x06,
- [QL_EVENT_WITHDREW_ITEM_PC] = 0x06,
- [QL_EVENT_DEFEATED_GYM_LEADER] = 0x0c,
- [QL_EVENT_DEFEATED_WILD_MON] = 0x0c,
- [QL_EVENT_DEFEATED_E4_MEMBER] = 0x0c,
- [QL_EVENT_DEFEATED_CHAMPION] = 0x0a,
- [QL_EVENT_DEFEATED_TRAINER] = 0x0c,
- [QL_EVENT_DEPARTED] = 0x06,
- [QL_EVENT_USED_FIELD_MOVE] = 0x08,
- [QL_EVENT_BOUGHT_ITEM] = 0x0e,
- [QL_EVENT_SOLD_ITEM] = 0x0e,
- [QL_EVENT_39] = 0x02,
- [QL_EVENT_OBTAINED_ITEM] = 0x08,
- [QL_EVENT_41] = 0x04,
- [QL_EVENT_ARRIVED] = 0x06
-};
-
-static u16 *QuestLog_SkipCommand(u16 *curPtr, u16 **prevPtr_p)
-{
- u16 eventId = curPtr[0] & 0xfff;
- u16 cnt = curPtr[0] >> 12;
-
- if (eventId == QL_EVENT_DEFEATED_CHAMPION)
- cnt = 0;
-
- if (!IS_VALID_QL_EVENT(eventId))
- return NULL;
-
- *prevPtr_p = curPtr;
- return sQuestLogEventCmdSizes[eventId] + (sQuestLogEventCmdSizes[eventId] - 4) * cnt + (void *)curPtr;
-}
-
-static void sub_8113ABC(const u16 *a0)
-{
- const u8 *r2 = (const u8 *)(a0 + 2);
- if ((a0[0] & 0xFFF) != QL_EVENT_DEPARTED)
- gUnknown_203B04A = 0;
- else
- gUnknown_203B04A = r2[1] + 1;
-}
-
-static bool8 sub_8113AE8(const u16 *a0)
-{
-#ifndef NONMATCHING
- register const u16 *r0 asm("r0") = a0;
-#else
- const u16 *r0 = a0;
-#endif
-
- if (r0 == NULL || r0[1] > sQuestLogCursor)
- return FALSE;
-
- sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0);
- gUnknown_203B044.unk_0 = a0[0];
- gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12;
- if (gUnknown_203B044.unk_1 != 0)
- gUnknown_203B044.unk_2 = 1;
- return TRUE;
-}
-
-static bool8 sub_8113B44(const u16 *a0)
-{
- if (gUnknown_203B044.unk_2 == 0)
- return FALSE;
-
- sQuestLogEventTextBufferCBs[gUnknown_203B044.unk_0](a0);
- gUnknown_203B044.unk_2++;
- if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1)
- sub_8113B88();
- return TRUE;
-}
-
-static void sub_8113B88(void)
-{
- gUnknown_203B044 = (struct UnkStruct_203B044){};
-}
-
-static void sub_8113B94(u16 eventId)
-{
- if (gUnknown_203B044.unk_0 != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor)
- {
- gUnknown_203B044.unk_0 = eventId;
- gUnknown_203B044.unk_1 = 0;
- gUnknown_203B044.unk_2 = sQuestLogCursor;
- }
- else if (gUnknown_203B044.unk_1 < 5)
- gUnknown_203B044.unk_1++;
-}
-
-static void sub_8113BD8(void)
-{
- sNewlyEnteredMap = FALSE;
- gUnknown_203B04A = 0;
- gUnknown_203B04B = FALSE;
-}
-
-static u16 *TryRecordEvent39_NoParams(u16 *a0)
-{
- if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39]))
- return NULL;
- a0[0] = QL_EVENT_39;
- return a0 + 1;
-}
-
-static u16 *sub_8113C20(u16 *a0, struct QuestLogEntry * a1)
-{
- if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39]))
- return NULL;
- a1->unk_6 = 0xFF;
- a1->unk_4 = 0;
- a1->unk_0 = 0;
- a1->unk_1 = 0;
- a1->unk_2 = 0;
- a1->unk_3 = 0;
- return a0 + 1;
-}
-
-static u16 *TryRecordEvent41(u16 *a0, u16 a1)
-{
- if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41]))
- return NULL;
- a0[0] = QL_EVENT_41;
- a0[1] = a1;
- return a0 + 2;
-}
-
-static u16 *sub_8113C8C(u16 *a0, struct QuestLogEntry * a1)
-{
- if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41]))
- return NULL;
- a1->unk_6 = 0xFE;
- a1->unk_4 = a0[1];
- a1->unk_0 = 0;
- a1->unk_1 = 0;
- a1->unk_2 = 0;
- a1->unk_3 = 0;
- return a0 + 2;
-}
-
-static u16 *sub_8113CC8(u16 *a0, struct QuestLogEntry * a1)
-{
- u8 *r6 = (u8 *)a0 + 4;
-
- if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0]))
- return NULL;
- a0[0] = 0;
- a0[1] = a1->unk_4;
- r6[0] = a1->unk_0;
- r6[1] = a1->unk_1;
- r6[2] = a1->unk_2;
- r6[3] = a1->unk_3;
- return (u16 *)(r6 + 4);
-}
-
-static u16 *sub_8113D08(u16 *a0, struct QuestLogEntry * a1)
-{
- u8 *r6 = (u8 *)a0 + 4;
-
- if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0]))
- return NULL;
- a1->unk_6 = 2;
- a1->unk_4 = a0[1];
- a1->unk_0 = r6[0];
- a1->unk_1 = r6[1];
- a1->unk_2 = r6[2];
- a1->unk_3 = r6[3];
- return (u16 *)(r6 + 4);
-}
-
-static u16 *sub_8113D48(u16 *a0, struct QuestLogEntry * a1)
-{
- u16 *r4 = a0;
- u8 *r6 = (u8 *)a0 + 4;
-
- if (!WillCommandOfSizeFitInSav1Record(r4, sQuestLogEventCmdSizes[QL_EVENT_2]))
- return NULL;
- if (a1->unk_6 == 0)
- r4[0] = 2;
- else
- r4[0] = 1;
- r4[1] = a1->unk_4;
- r6[0] = a1->unk_0;
- r6[1] = a1->unk_1;
- r6[2] = a1->unk_2;
- r6[3] = a1->unk_3;
- return (u16 *)(r6 + 4);
-}
-
-static u16 *sub_8113D94(u16 *a0, struct QuestLogEntry * a1)
-{
- u16 *r5 = a0;
- u8 *r6 = (u8 *)a0 + 4;
-
- if (!WillCommandOfSizeFitInSav1Record(r5, sQuestLogEventCmdSizes[QL_EVENT_2]))
- return NULL;
- if (r5[0] == 2)
- a1->unk_6 = 0;
- else
- a1->unk_6 = 1;
- a1->unk_4 = r5[1];
- a1->unk_0 = r6[0];
- a1->unk_1 = r6[1];
- a1->unk_2 = r6[2];
- a1->unk_3 = r6[3];
- return (u16 *)(r6 + 4);
-}
-
-u16 *sub_8113DE0(u16 eventId, u16 *a1)
-{
- u8 cmdSize;
- u16 *r5;
- u8 r4;
- u8 r1;
-
- if (gUnknown_203B044.unk_1 == 0)
- cmdSize = sQuestLogEventCmdSizes[eventId];
- else
- cmdSize = sQuestLogEventCmdSizes[eventId] - 4;
- if (!sub_8110944(a1, cmdSize))
- return NULL;
-
- r5 = (void *)a1;
-
- if (gUnknown_203B044.unk_1 != 0)
- r5 = (void *)r5 - (gUnknown_203B044.unk_1 * cmdSize + 4);
-
- if (gUnknown_203B044.unk_1 == 5)
- {
- for (r4 = 0; r4 < 4; r4++)
- {
- memcpy(
- (void *)r5 + (r4 * cmdSize + 4),
- (void *)r5 + ((r4 + 1) * cmdSize + 4),
- cmdSize
- );
- }
- r1 = 4;
- }
- else
- r1 = gUnknown_203B044.unk_1;
-
- r5[0] = eventId + (r1 << 12);
- r5[1] = sQuestLogCursor;
- r5 = (void *)r5 + (r1 * cmdSize + 4);
- return r5;
-}
-
-static const u16 *sub_8113E88(u16 eventId, const u16 *eventData)
-{
- eventData = (const void *)eventData + (gUnknown_203B044.unk_2 * (sQuestLogEventCmdSizes[eventId] - 4) + 4);
- return eventData;
-}
-
-static void QuestLog_GetSpeciesName(u16 species, u8 *dest, u8 stringVarId)
-{
- if (dest != NULL)
- {
- if (species != SPECIES_EGG)
- GetSpeciesName(dest, species);
- else
- StringCopy(dest, gText_EggNickname);
- }
- else
- {
- if (species != SPECIES_EGG)
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gSpeciesNames[species]);
- else
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gText_EggNickname);
- }
-}
-
-static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *a0, const u16 *eventData)
-{
- u16 *r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_ORDER, a0);
- if (r2 == NULL)
- return NULL;
-
- r2[0] = eventData[0];
- r2[1] = eventData[1];
- return r2 + 2;
-}
-
-static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_PARTY_ORDER, eventData);
- QuestLog_GetSpeciesName(r4[0], gStringVar1, 0);
- QuestLog_GetSpeciesName(r4[1], gStringVar2, 0);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchMon1WithMon2);
- r4 += 2;
- return r4;
-}
-
-static u16 *BufferQuestLogData_UsedItem(u16 *a0, const u16 *eventData)
-{
- u16 *r2 = sub_8113DE0(QL_EVENT_USED_ITEM, a0);
- if (r2 == NULL)
- return NULL;
-
- r2[0] = eventData[0];
- r2[1] = eventData[2];
- r2[2] = eventData[3];
-
- if (eventData[0] == ITEM_ESCAPE_ROPE)
- gUnknown_203B048 = 2;
-
- return r2 + 3;
-}
-
-static const u16 *BufferQuestLogText_UsedItem(const u16 *eventData)
-{
- const u16 *r5 = sub_8113E88(QL_EVENT_USED_ITEM, eventData);
-
- switch (ItemId_GetPocket(r5[0]))
- {
- case POCKET_ITEMS:
- case POCKET_POKE_BALLS:
- case POCKET_BERRY_POUCH:
- StringCopy(gStringVar1, ItemId_GetName(r5[0]));
- if (r5[0] == ITEM_ESCAPE_ROPE)
- {
- GetMapNameGeneric(gStringVar2, (u8)r5[2]);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedEscapeRope);
- }
- else if (r5[1] != 0xFFFF)
- {
- QuestLog_GetSpeciesName(r5[1], gStringVar2, 0);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedItemOnMonAtThisLocation);
- }
- else
- {
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheItem);
- }
- break;
- case POCKET_KEY_ITEMS:
- StringCopy(gStringVar1, ItemId_GetName(r5[0]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheKeyItem);
- break;
- case POCKET_TM_CASE:
- QuestLog_GetSpeciesName(r5[1], gStringVar1, 0);
- StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]);
- if (r5[2] != 0xFFFF)
- {
- StringCopy(gStringVar3, gMoveNames[r5[2]]);
- if (r5[0] > ITEM_TM50)
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithHM);
- else
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithTM);
- }
- else
- {
- if (r5[0] > ITEM_TM50)
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromHM);
- else
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromTM);
- }
- break;
- }
- return r5 + 3;
-}
-
-u16 *BufferQuestLogData_GiveTakeHeldItem(u16 eventId, u16 *a1, const u16 *eventData)
-{
- u16 *r1 = sub_8113DE0(eventId, a1);
- if (r1 == NULL)
- return NULL;
-
- r1[0] = eventData[0];
- r1[1] = eventData[2];
- return r1 + 2;
-}
-
-static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *a0, const u16 *eventData)
-{
- return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM, eventData);
- QuestLog_GetSpeciesName(r4[1], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetName(r4[0]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem);
- r4 += 2;
- return r4;
-}
-
-static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *a0, const u16 *eventData)
-{
- return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_BAG, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_BAG, eventData);
- QuestLog_GetSpeciesName(r4[1], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetName(r4[0]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem2);
- r4 += 2;
- return r4;
-}
-
-static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *a0, const u16 *eventData)
-{
- return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_PC, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_PC, eventData);
-
- QuestLog_GetSpeciesName(r4[1], gStringVar2, 0);
- StringCopy(gStringVar1, ItemId_GetName(r4[0]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItemFromPC);
- r4 += 2;
- return r4;
-}
-
-static u16 *BufferQuestLogData_TookHeldItem(u16 *a0, const u16 *eventData)
-{
- return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_TOOK_HELD_ITEM, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_TookHeldItem(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_TOOK_HELD_ITEM, eventData);
-
- QuestLog_GetSpeciesName(r4[1], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetName(r4[0]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_TookHeldItemFromMon);
- r4 += 2;
- return r4;
-}
-
-u16 *BufferQuestLogData_SwappedHeldItem_(u16 eventId, u16 *a1, const u16 *eventData)
-{
- u16 *r1 = sub_8113DE0(eventId, a1);
- if (r1 == NULL)
- return NULL;
-
- r1[0] = eventData[0];
- r1[1] = eventData[1];
- r1[2] = eventData[2];
- return r1 + 3;
-}
-
-static u16 *BufferQuestLogData_SwappedHeldItem(u16 *a0, const u16 *eventData)
-{
- return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM, eventData);
- QuestLog_GetSpeciesName(r4[2], gStringVar1, 0);
- StringCopy(gStringVar2, ItemId_GetName(r4[0])); // Item taken
- StringCopy(gStringVar3, ItemId_GetName(r4[1])); // Item given
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemsOnMon);
- r4 += 3;
- return r4;
-}
-
-static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *a0, const u16 *eventData)
-{
- return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM_PC, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM_PC, eventData);
- QuestLog_GetSpeciesName(r4[2], gStringVar2, 0);
- StringCopy(gStringVar3, ItemId_GetName(r4[0]));
- StringCopy(gStringVar1, ItemId_GetName(r4[1]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemFromPC);
- r4 += 3;
- return r4;
-}
-
-static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData)
-{
- u16 *r4 = a0;
- if (gUnknown_203B044.unk_0 == QL_EVENT_USED_PKMN_CENTER && gUnknown_203B044.unk_1 != 0)
- return r4;
-
- if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_USED_PKMN_CENTER]))
- return NULL;
-
- r4[0] = QL_EVENT_USED_PKMN_CENTER;
- r4[1] = sQuestLogCursor;
- return r4 + 2;
-}
-
-static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *a0)
-{
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonsWereFullyRestoredAtCenter);
- a0 += 2;
- return a0;
-}
-
-static u16 *BufferQuestLogData_LinkTraded(u16 *a0, const u16 *eventData)
-{
- u16 *r4 = a0 + 4;
-
- a0[0] = QL_EVENT_LINK_TRADED;
- a0[1] = sQuestLogCursor;
- a0[2] = eventData[0];
- a0[3] = eventData[1];
- eventData += 2;
- memcpy(r4, eventData, 7);
- r4 += 4;
- return r4;
-}
-
-static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0)
-{
- const u16 *r6 = a0 + 4;
-
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
- memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
-
- BufferLinkPartnersName(gStringVar1);
- QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received
- QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); // Mon sent
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForPersonsMon2);
- r6 += 4;
- return r6;
-}
-
-static const u8 *const sDefeatedOpponentFlavorTexts[] = {
- gText_QuestLog_Handily,
- gText_QuestLog_Tenaciously,
- gText_QuestLog_Somehow
-};
-
-static const u8 *const sDefeatedChampionFlavorTexts[] = {
- gText_QuestLog_Coolly,
- gText_QuestLog_Somehow,
- gText_QuestLog_Barely
-};
-
-static const u8 *const sBattleOutcomeTexts[] = {
- gText_QuestLog_Win,
- gText_QuestLog_Loss,
- gText_QuestLog_Draw
-};
-
-static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData)
-{
- a0[0] = QL_EVENT_LINK_BATTLED_SINGLE;
- a0[1] = sQuestLogCursor;
- *((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
- a0 += 6;
- return a0;
-}
-
-static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0)
-{
- DynamicPlaceholderTextUtil_Reset();
-
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
- BufferLinkPartnersName(gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SingleBattleWithPersonResultedInOutcome);
- a0 += 6;
- return a0;
-}
-
-static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData)
-{
- a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE;
- a0[1] = sQuestLogCursor;
- *((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
- a0 += 6;
- return a0;
-}
-
-static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0)
-{
- DynamicPlaceholderTextUtil_Reset();
-
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
- BufferLinkPartnersName(gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DoubleBattleWithPersonResultedInOutcome);
- a0 += 6;
- return a0;
-}
-
-static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData)
-{
- a0[0] = QL_EVENT_LINK_BATTLED_MULTI;
- a0[1] = sQuestLogCursor;
- *((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
- memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH);
- memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH);
- a0 += 13;
- return a0;
-}
-
-static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0)
-{
- DynamicPlaceholderTextUtil_Reset();
-
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
- memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1);
- memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1);
- StringCopy7(gStringVar1, (const u8 *)a0 + 5);
- StringCopy7(gStringVar2, (const u8 *)a0 + 12);
- StringCopy7(gStringVar3, (const u8 *)a0 + 19);
- BufferLinkPartnersName(gStringVar1);
- BufferLinkPartnersName(gStringVar2);
- BufferLinkPartnersName(gStringVar3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); // partner
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); // opponent 1
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3); // opponent 2
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MultiBattleWithPeopleResultedInOutcome);
- a0 += 13;
- return a0;
-}
-
-static u16 *BufferQuestLogData_UsedUnionRoom(u16 *a0, const u16 *eventData)
-{
- a0[0] = QL_EVENT_USED_UNION_ROOM;
- a0[1] = sQuestLogCursor;
- return a0 + 2;
-}
-
-static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *a0)
-{
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_MingledInUnionRoom);
- a0 += 2;
- return a0;
-}
-
-static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *a0, const u16 *eventData)
-{
- a0[0] = QL_EVENT_USED_UNION_ROOM_CHAT;
- a0[1] = sQuestLogCursor;
- return a0 + 2;
-}
-
-static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *a0)
-{
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_ChattedWithManyTrainers);
- a0 += 2;
- return a0;
-}
-
-static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData)
-{
- u8 *r4 = (u8 *)(a0 + 4);
- a0[0] = QL_EVENT_LINK_TRADED_UNION;
- a0[1] = sQuestLogCursor;
- a0[2] = eventData[0];
- a0[3] = eventData[1];
- memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH);
- r4 += 8;
- return (u16 *)r4;
-}
-
-static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0)
-{
- const u8 *r6 = (const u8 *)(a0 + 4);
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
- memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
- BufferLinkPartnersName(gStringVar1);
- QuestLog_GetSpeciesName(a0[3], gStringVar2, 0);
- QuestLog_GetSpeciesName(a0[2], gStringVar3, 0);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForTrainersMon2);
- r6 += 8;
- return (const u16 *)r6;
-}
-
-static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventData)
-{
- a0[0] = QL_EVENT_LINK_BATTLED_UNION;
- a0[1] = sQuestLogCursor;
- *(u8 *)&a0[2] = *(const u8 *)&eventData[0];
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
- a0 += 6;
- return a0;
-}
-
-static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0)
-{
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
- BufferLinkPartnersName(gStringVar1);
- StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_BattledTrainerEndedInOutcome);
- a0 += 6;
- return a0;
-}
-
-static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- a0[1] = eventData[1];
- *((u8 *)a0 + 4) = *((const u8 *)eventData + 4);
- *((u8 *)a0 + 5) = *((const u8 *)eventData + 5);
- return a0 + 3;
-}
-
-static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, eventData);
- boxIdxs = (const u8 *)eventData + 4;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1]));
- QuestLog_GetSpeciesName(eventData[1], NULL, 3);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsBetweenBoxes);
- return eventData + 3;
-}
-
-static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- a0[1] = eventData[1];
- *((u8 *)a0 + 4) = *((const u8 *)eventData + 4);
- return a0 + 3;
-}
-
-static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, eventData);
- boxIdxs = (const u8 *)eventData + 4;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- QuestLog_GetSpeciesName(eventData[1], NULL, 2);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsWithinBox);
- return eventData + 3;
-}
-
-static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *a0, const u16 *eventData)
-{
- u16 *r2;
- u16 *ret;
- r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, a0);
- if (r2 == NULL)
- return NULL;
- ret = r2 + 2;
- if (*((const u8 *)eventData + 4) == TOTAL_BOXES_COUNT)
- {
- r2[0] = eventData[1];
- r2[1] = eventData[0];
- *((u8 *)r2 + 4) = *((const u8 *)eventData + 5);
- }
- else
- {
- r2[0] = eventData[0];
- r2[1] = eventData[1];
- *((u8 *)r2 + 4) = *((const u8 *)eventData + 4);
- }
- return ret + 1;
-}
-
-static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, eventData);
- boxIdxs = (const u8 *)eventData + 4;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- QuestLog_GetSpeciesName(eventData[1], NULL, 2);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedPartyMonForPCMon);
- return eventData + 3;
-}
-
-static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *a0, const u16 *eventData)
-{
- u16 *r2;
- u16 *ret;
- r2 = sub_8113DE0(QL_EVENT_MOVED_MON_BETWEEN_BOXES, a0);
- if (r2 == NULL)
- return NULL;
- r2[0] = eventData[0];
- ret = r2 + 1;
- *((u8 *)ret + 0) = *((const u8 *)eventData + 4);
- *((u8 *)ret + 1) = *((const u8 *)eventData + 5);
- return ret + 1;
-}
-
-static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_MOVED_MON_BETWEEN_BOXES, eventData);
- boxIdxs = (const u8 *)eventData + 2;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1]));
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonToNewBox);
- return (const u16 *)boxIdxs + 1;
-}
-
-static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *a0, const u16 *eventData)
-{
- u16 *r2;
- r2 = sub_8113DE0(QL_EVENT_MOVED_MON_WITHIN_BOX, a0);
- if (r2 == NULL)
- return NULL;
- r2[0] = eventData[0];
- *((u8 *)r2 + 2) = *((const u8 *)eventData + 4);
- return r2 + 2;
-}
-
-static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_MOVED_MON_WITHIN_BOX, eventData);
- boxIdxs = (const u8 *)eventData + 2;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonWithinBox);
- return (const u16 *)boxIdxs + 1;
-}
-
-static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *a0, const u16 *eventData)
-{
- u16 *r2;
- r2 = sub_8113DE0(QL_EVENT_WITHDREW_MON_PC, a0);
- if (r2 == NULL)
- return NULL;
- r2[0] = eventData[0];
- *((u8 *)r2 + 2) = *((const u8 *)eventData + 4);
- return r2 + 2;
-}
-
-static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_WITHDREW_MON_PC, eventData);
- boxIdxs = (const u8 *)eventData + 2;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewMonFromPC);
- return (const u16 *)boxIdxs + 1;
-}
-
-static u16 *BufferQuestLogData_DepositedMonInPC(u16 *a0, const u16 *eventData)
-{
- u16 *r2;
- r2 = sub_8113DE0(QL_EVENT_DEPOSITED_MON_PC, a0);
- if (r2 == NULL)
- return NULL;
- r2[0] = eventData[0];
- *((u8 *)r2 + 2) = *((const u8 *)eventData + 4);
- return r2 + 2;
-}
-
-static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *eventData)
-{
- const u8 *boxIdxs;
- eventData = sub_8113E88(QL_EVENT_DEPOSITED_MON_PC, eventData);
- boxIdxs = (const u8 *)eventData + 2;
- DynamicPlaceholderTextUtil_Reset();
- QuestLog_GetSpeciesName(eventData[0], NULL, 0);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(boxIdxs[0]));
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DepositedMonInPC);
- return (const u16 *)boxIdxs + 1;
-}
-
-static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *a0, const u16 *eventData)
-{
- u16 *r2;
- r2 = sub_8113DE0(QL_EVENT_SWITCHED_MULTIPLE_MONS, a0);
- if (r2 == NULL)
- return NULL;
- *((u8 *)r2 + 0) = *((const u8 *)eventData + 4);
- *((u8 *)r2 + 1) = *((const u8 *)eventData + 5);
- return r2 + 1;
-}
-
-static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_MULTIPLE_MONS, eventData);
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(*((const u8 *)r4 + 0)));
- if (*((const u8 *)r4 + 0) == *((const u8 *)r4 + 1))
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_QuestLog_ADifferentSpot);
- else
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(*((const u8 *)r4 + 1)));
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMultipleMons);
- return r4 + 1;
-}
-
-static u16 *BufferQuestLogData_DepositedItemInPC(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_DEPOSITED_ITEM_PC, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- return a0 + 1;
-}
-
-static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_DEPOSITED_ITEM_PC, eventData);
- CopyItemName(r4[0], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_StoredItemInPC);
- return r4 + 1;
-}
-
-static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_WITHDREW_ITEM_PC, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- return a0 + 1;
-}
-
-static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_WITHDREW_ITEM_PC, eventData);
- CopyItemName(r4[0], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewItemFromPC);
- return r4 + 1;
-}
-
-u16 *BufferQuestLogData_DefeatedTrainer_(u16 eventId, u16 *a1, const u16 *a2)
-{
- a1 = sub_8113DE0(eventId, a1);
- if (a1 == NULL)
- return NULL;
- a1[0] = a2[1];
- a1[1] = a2[2];
- a1[2] = a2[0];
- *((u8 *)a1 + 6) = *((const u8 *)a2 + 7);
- *((u8 *)a1 + 7) = *((const u8 *)a2 + 6);
- return a1 + 4;
-}
-
-static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *a0, const u16 *eventData)
-{
- gUnknown_203B048 = 1;
- return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_GYM_LEADER, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *eventData)
-{
- const u8 *r6;
- eventData = sub_8113E88(QL_EVENT_DEFEATED_GYM_LEADER, eventData);
- r6 = (const u8 *)eventData + 6;
- DynamicPlaceholderTextUtil_Reset();
- GetMapNameGeneric(gStringVar1, r6[0]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[eventData[2]].trainerName);
- QuestLog_GetSpeciesName(eventData[0], 0, 2);
- QuestLog_GetSpeciesName(eventData[1], 0, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnGymLeadersMonWithMonAndWon);
- return eventData + 4;
-}
-
-static u16 *BufferQuestLogData_DefeatedWildMon(u16 *a0, const u16 *eventData)
-{
- u16 *r4 = a0;
- u8 *r5 = (u8 *)a0 + 8;
- if (!sub_8110944(r4, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON]))
- return NULL;
- if (r5[0] == 0 && r5[1] == 0)
- {
- r4[0] = QL_EVENT_DEFEATED_WILD_MON;
- r4[1] = sQuestLogCursor;
- }
- if (eventData[0])
- r4[2] = eventData[0];
- if (eventData[1])
- r4[3] = eventData[1];
- if (eventData[0] && r5[0] != 0xFF)
- r5[0]++;
- if (eventData[1] && r5[1] != 0xFF)
- r5[1]++;
- r5[2] = *((const u8 *)eventData + 4);
- return (u16 *)(r5 + 4);
-}
-
-static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *a0)
-{
- const u8 *data;
- if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON]))
- return NULL;
-
- data = (const u8 *)a0 + 8;
- DynamicPlaceholderTextUtil_Reset();
- GetMapNameGeneric(gStringVar1, data[2]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
- QuestLog_GetSpeciesName(a0[2], NULL, 1);
- ConvertIntToDecimalStringN(gStringVar2, data[0], STR_CONV_MODE_LEFT_ALIGN, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
- QuestLog_GetSpeciesName(a0[3], NULL, 3);
- ConvertIntToDecimalStringN(gStringVar3, data[1], STR_CONV_MODE_LEFT_ALIGN, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gSaveBlock2Ptr->playerName);
- if (data[0] == 0)
- {
- if (data[1] == 1)
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMon);
- else
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMons);
- }
- else if (data[1] == 0)
- {
- if (data[0] == 1)
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMon);
- else
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMons);
- }
- else if (data[0] == 1)
- {
- if (data[1] == 1)
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMon);
- else
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMons);
- }
- else
- {
- if (data[1] == 1)
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMon);
- else
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMons);
- }
- return (const u16 *)(data + 4);
-}
-
-static bool8 IsSpeciesFromSpecialEncounter(u16 species)
-{
- switch (species)
- {
- case SPECIES_SNORLAX:
- case SPECIES_ARTICUNO:
- case SPECIES_ZAPDOS:
- case SPECIES_MOLTRES:
- case SPECIES_MEWTWO:
- case SPECIES_LUGIA:
- case SPECIES_HO_OH:
- case SPECIES_DEOXYS:
- return TRUE;
- }
- return FALSE;
-}
-
-static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *a0, const u16 *eventData)
-{
- gUnknown_203B048 = 1;
- return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_E4_MEMBER, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *eventData)
-{
- const u8 *r5;
- eventData = sub_8113E88(QL_EVENT_DEFEATED_E4_MEMBER, eventData);
- r5 = (const u8 *)eventData + 6;
- DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gTrainers[eventData[2]].trainerName);
- QuestLog_GetSpeciesName(eventData[0], NULL, 1);
- QuestLog_GetSpeciesName(eventData[1], NULL, 2);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, sDefeatedOpponentFlavorTexts[r5[1]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnEliteFoursMonWithMonAndWon);
- return eventData + 4;
-}
-
-static u16 *BufferQuestLogData_DefeatedChampion(u16 *a0, const u16 *eventData)
-{
- if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION]))
- return NULL;
- a0[0] = 0x2021;
- a0[1] = sQuestLogCursor;
- a0[2] = eventData[1];
- a0[3] = eventData[2];
- *((u8 *)a0 + 8) = *((const u8 *)eventData + 6);
- gUnknown_203B048 = 1;
- return a0 + 5;
-}
-
-static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *a0)
-{
- const u8 *r5;
- if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION]))
- return NULL;
-
- r5 = (const u8 *)a0 + 8;
- DynamicPlaceholderTextUtil_Reset();
-
- switch (gUnknown_203B044.unk_2)
- {
- case 0:
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gSaveBlock1Ptr->rivalName);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerBattledChampionRival);
- break;
- case 1:
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName);
- QuestLog_GetSpeciesName(a0[2], NULL, 1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName);
- QuestLog_GetSpeciesName(a0[3], NULL, 3);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerSentOutMon1RivalSentOutMon2);
- break;
- case 2:
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sDefeatedChampionFlavorTexts[r5[0]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WonTheMatchAsAResult);
- break;
- }
- return (const u16 *)(r5 + 2);
-}
-
-static u16 *BufferQuestLogData_DefeatedTrainer(u16 *a0, const u16 *eventData)
-{
- gUnknown_203B048 = 1;
- return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_TRAINER, a0, eventData);
-}
-
-static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *eventData)
-{
- const u16 *r5 = sub_8113E88(QL_EVENT_DEFEATED_TRAINER, eventData);
- const u8 *r6 = (const u8 *)r5 + 6;
- DynamicPlaceholderTextUtil_Reset();
- GetMapNameGeneric(gStringVar1, r6[0]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
-
- if (gTrainers[r5[2]].trainerClass == CLASS_RIVAL
- || gTrainers[r5[2]].trainerClass == CLASS_RIVAL_2
- || gTrainers[r5[2]].trainerClass == CLASS_CHAMPION_2)
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetExpandedPlaceholder(PLACEHOLDER_ID_RIVAL));
- else
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[r5[2]].trainerName);
-
- QuestLog_GetSpeciesName(r5[0], NULL, 2);
- QuestLog_GetSpeciesName(r5[1], NULL, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnTrainersMonWithMonAndWon);
- return (const u16 *)(r6 + 2);
-}
-
-static const u8 *const sLocationNameTexts[] =
-{
- [QL_LOCATION_HOME] = gText_QuestLog_Home,
- [QL_LOCATION_OAKS_LAB] = gText_QuestLog_OakResearchLab,
- [QL_LOCATION_VIRIDIAN_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_LEAGUE_GATE_1] = gText_QuestLog_PokemonLeagueGate,
- [QL_LOCATION_LEAGUE_GATE_2] = gText_QuestLog_PokemonLeagueGate,
- [QL_LOCATION_VIRIDIAN_FOREST_1] = gText_QuestLog_ViridianForest,
- [QL_LOCATION_VIRIDIAN_FOREST_2] = gText_QuestLog_ViridianForest,
- [QL_LOCATION_PEWTER_MUSEUM] = gText_QuestLog_PewterMuseumOfScience,
- [QL_LOCATION_PEWTER_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_MT_MOON_1] = gText_QuestLog_MtMoon,
- [QL_LOCATION_MT_MOON_2] = gText_QuestLog_MtMoon,
- [QL_LOCATION_CERULEAN_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_BIKE_SHOP] = gText_QuestLog_BikeShop,
- [QL_LOCATION_BILLS_HOUSE] = gText_QuestLog_BillsHouse,
- [QL_LOCATION_DAY_CARE] = gText_QuestLog_DayCare,
- [QL_LOCATION_UNDERGROUND_PATH_1] = gText_QuestLog_UndergroundPath,
- [QL_LOCATION_UNDERGROUND_PATH_2] = gText_QuestLog_UndergroundPath,
- [QL_LOCATION_PKMN_FAN_CLUB] = gText_QuestLog_PokemonFanClub,
- [QL_LOCATION_VERMILION_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_SS_ANNE] = gText_QuestLog_SSAnne,
- [QL_LOCATION_DIGLETTS_CAVE_1] = gText_QuestLog_DiglettsCave,
- [QL_LOCATION_DIGLETTS_CAVE_2] = gText_QuestLog_DiglettsCave,
- [QL_LOCATION_ROCK_TUNNEL_1] = gText_QuestLog_RockTunnel,
- [QL_LOCATION_ROCK_TUNNEL_2] = gText_QuestLog_RockTunnel,
- [QL_LOCATION_POWER_PLANT] = gText_QuestLog_PowerPlant,
- [QL_LOCATION_PKMN_TOWER] = gText_QuestLog_PokemonTower,
- [QL_LOCATION_VOLUNTEER_HOUSE] = gText_QuestLog_VolunteerHouse,
- [QL_LOCATION_NAME_RATERS_HOUSE] = gText_QuestLog_NameRatersHouse,
- [QL_LOCATION_UNDERGROUND_PATH_3] = gText_QuestLog_UndergroundPath,
- [QL_LOCATION_UNDERGROUND_PATH_4] = gText_QuestLog_UndergroundPath,
- [QL_LOCATION_CELADON_DEPT_STORE] = gText_QuestLog_CeladonDeptStore,
- [QL_LOCATION_CELADON_MANSION] = gText_QuestLog_CeladonMansion,
- [QL_LOCATION_GAME_CORNER] = gText_QuestLog_RocketGameCorner,
- [QL_LOCATION_CELADON_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_CELADON_RESTAURANT] = gText_QuestLog_Restaurant,
- [QL_LOCATION_ROCKET_HIDEOUT] = gText_QuestLog_RocketHideout,
- [QL_LOCATION_SAFARI_ZONE] = gText_QuestLog_SafariZone,
- [QL_LOCATION_FUCHSIA_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_WARDENS_HOME] = gText_QuestLog_WardensHome,
- [QL_LOCATION_FIGHTING_DOJO] = gText_QuestLog_FightingDojo,
- [QL_LOCATION_SAFFRON_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_SILPH_CO] = gText_QuestLog_SilphCo,
- [QL_LOCATION_SEAFOAM_ISLANDS_1] = gText_QuestLog_SeafoamIslands,
- [QL_LOCATION_SEAFOAM_ISLANDS_2] = gText_QuestLog_SeafoamIslands,
- [QL_LOCATION_PKMN_MANSION] = gText_QuestLog_PokemonMansion,
- [QL_LOCATION_CINNABAR_GYM] = gText_QuestLog_Gym,
- [QL_LOCATION_CINNABAR_LAB] = gText_QuestLog_PokemonResearchLab,
- [QL_LOCATION_VICTORY_ROAD_1] = gText_QuestLog_VictoryRoad,
- [QL_LOCATION_VICTORY_ROAD_2] = gText_QuestLog_VictoryRoad,
- [QL_LOCATION_PKMN_LEAGUE] = gText_QuestLog_PokemonLeague,
- [QL_LOCATION_CERULEAN_CAVE] = gText_QuestLog_CeruleanCave
-};
-
-static const u8 *const sDepartedLocationTexts[] =
-{
- [QL_DEPARTED_TOWN_BUILDING] = gText_QuestLog_DepartedPlaceInTownForNextDestination,
- [QL_DEPARTED_MUSEUM] = gText_QuestLog_LeftTownsLocationForNextDestination,
- [QL_DEPARTED_GAME_CORNER] = gText_QuestLog_PlayedGamesAtGameCorner,
- [QL_DEPARTED_HOME] = gText_QuestLog_RestedAtHome,
- [QL_DEPARTED_OAKS_LAB] = gText_QuestLog_LeftOaksLab,
- [QL_DEPARTED_GYM] = gText_QuestLog_GymWasFullOfToughTrainers,
- [QL_DEPARTED_SAFARI_ZONE] = gText_QuestLog_HadGreatTimeInSafariZone,
- [QL_DEPARTED_CAVE] = gText_QuestLog_ManagedToGetOutOfLocation,
- [QL_DEPARTED_MISC_BUILDING_1] = gText_QuestLog_DepartedTheLocationForNextDestination,
- [QL_DEPARTED_MISC_BUILDING_2] = gText_QuestLog_DepartedFromLocationToNextDestination
-};
-
-static const u8 sLocationToDepartedTextId[] =
-{
- [QL_LOCATION_HOME] = QL_DEPARTED_HOME,
- [QL_LOCATION_OAKS_LAB] = QL_DEPARTED_OAKS_LAB,
- [QL_LOCATION_VIRIDIAN_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_LEAGUE_GATE_1] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_LEAGUE_GATE_2] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_VIRIDIAN_FOREST_1] = QL_DEPARTED_CAVE,
- [QL_LOCATION_VIRIDIAN_FOREST_2] = QL_DEPARTED_CAVE,
- [QL_LOCATION_PEWTER_MUSEUM] = QL_DEPARTED_MUSEUM,
- [QL_LOCATION_PEWTER_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_MT_MOON_1] = QL_DEPARTED_CAVE,
- [QL_LOCATION_MT_MOON_2] = QL_DEPARTED_CAVE,
- [QL_LOCATION_CERULEAN_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_BIKE_SHOP] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_BILLS_HOUSE] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_DAY_CARE] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_UNDERGROUND_PATH_1] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_UNDERGROUND_PATH_2] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_PKMN_FAN_CLUB] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_VERMILION_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_SS_ANNE] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_DIGLETTS_CAVE_1] = QL_DEPARTED_CAVE,
- [QL_LOCATION_DIGLETTS_CAVE_2] = QL_DEPARTED_CAVE,
- [QL_LOCATION_ROCK_TUNNEL_1] = QL_DEPARTED_CAVE,
- [QL_LOCATION_ROCK_TUNNEL_2] = QL_DEPARTED_CAVE,
- [QL_LOCATION_POWER_PLANT] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_PKMN_TOWER] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_VOLUNTEER_HOUSE] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_NAME_RATERS_HOUSE] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_UNDERGROUND_PATH_3] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_UNDERGROUND_PATH_4] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_CELADON_DEPT_STORE] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_CELADON_MANSION] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_GAME_CORNER] = QL_DEPARTED_GAME_CORNER,
- [QL_LOCATION_CELADON_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_CELADON_RESTAURANT] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_ROCKET_HIDEOUT] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_SAFARI_ZONE] = QL_DEPARTED_SAFARI_ZONE,
- [QL_LOCATION_FUCHSIA_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_WARDENS_HOME] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_FIGHTING_DOJO] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_SAFFRON_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_SILPH_CO] = QL_DEPARTED_MISC_BUILDING_2,
- [QL_LOCATION_SEAFOAM_ISLANDS_1] = QL_DEPARTED_CAVE,
- [QL_LOCATION_SEAFOAM_ISLANDS_2] = QL_DEPARTED_CAVE,
- [QL_LOCATION_PKMN_MANSION] = QL_DEPARTED_MISC_BUILDING_2,
- [QL_LOCATION_CINNABAR_GYM] = QL_DEPARTED_GYM,
- [QL_LOCATION_CINNABAR_LAB] = QL_DEPARTED_TOWN_BUILDING,
- [QL_LOCATION_VICTORY_ROAD_1] = QL_DEPARTED_CAVE,
- [QL_LOCATION_VICTORY_ROAD_2] = QL_DEPARTED_CAVE,
- [QL_LOCATION_PKMN_LEAGUE] = QL_DEPARTED_MISC_BUILDING_1,
- [QL_LOCATION_CERULEAN_CAVE] = QL_DEPARTED_CAVE
-};
-
-static const u8 gUnknown_8456C17[] = {
- 0x5a,
- 0x5b,
- 0x5d,
- 0x5e,
- 0x5f,
- 0x62,
- 0x60,
- 0x59
-};
-
-static const u8 *const sUsedFieldMoveTexts[] =
-{
- [FIELD_MOVE_FLASH] = gText_QuestLog_UsedFlash,
- [FIELD_MOVE_CUT] = gText_QuestLog_UsedCut,
- [FIELD_MOVE_FLY] = gText_QuestLog_UsedFly,
- [FIELD_MOVE_STRENGTH] = gText_QuestLog_UsedStrength,
- [FIELD_MOVE_SURF] = gText_QuestLog_UsedSurf,
- [FIELD_MOVE_ROCK_SMASH] = gText_QuestLog_UsedRockSmash,
- [FIELD_MOVE_WATERFALL] = gText_QuestLog_UsedWaterfall,
- [FIELD_MOVE_TELEPORT] = gText_QuestLog_UsedTeleportToLocation,
- [FIELD_MOVE_DIG] = gText_QuestLog_UsedDigInLocation,
- [FIELD_MOVE_MILK_DRINK] = gText_QuestLog_UsedMilkDrink,
- [FIELD_MOVE_SOFT_BOILED] = gText_QuestLog_UsedSoftboiled,
- [FIELD_MOVE_SWEET_SCENT] = gText_QuestLog_UsedSweetScent
-};
-
-static u16 *BufferQuestLogData_DepartedLocation(u16 *a0, const u16 *eventData)
-{
- u16 *r2 = sub_8113DE0(QL_EVENT_DEPARTED, a0);
- if (r2 == NULL)
- return NULL;
- *((u8 *)r2 + 0) = *((const u8 *)eventData + 0);
- if ((*((u8 *)r2 + 1) = *((const u8 *)eventData + 1)) == 0x24)
- gUnknown_203B048 = 1;
- return r2 + 1;
-}
-
-static const u16 *BufferQuestLogText_DepartedLocation(const u16 *eventData)
-{
- u8 r4, locationId;
- const u16 *r5 = sub_8113E88(QL_EVENT_DEPARTED, eventData);
- const u8 *r5_2 = (const u8 *)r5 + 0;
- locationId = r5_2[1];
- GetMapNameGeneric(gStringVar1, r5_2[0]);
- StringCopy(gStringVar2, sLocationNameTexts[locationId]);
- if (sLocationToDepartedTextId[locationId] == QL_DEPARTED_GYM)
- {
- for (r4 = 0; r4 < ARRAY_COUNT(gUnknown_8456C17); r4++)
- {
- if (r5_2[0] != gUnknown_8456C17[r4])
- continue;
- if (FlagGet(FLAG_BADGE01_GET + r4) == TRUE)
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_DepartedGym);
- else
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_GymWasFullOfToughTrainers);
- break;
- }
- if (r4 == 8)
- StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]);
- }
- else
- StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]);
-
- return (const u16 *)(r5_2 + 2);
-}
-
-void sub_811539C(void)
-{
- gUnknown_203B04B = TRUE;
-}
-
-static bool8 sub_81153A8(u16 eventId, const u16 *eventData)
-{
- if (eventId != QL_EVENT_DEPARTED)
- {
- gUnknown_203B04A = 0;
- return TRUE;
- }
- if (gUnknown_203B04A == *((u8 *)eventData + 1) + 1)
- return FALSE;
- gUnknown_203B04A = *((u8 *)eventData + 1) + 1;
- return TRUE;
-}
-
-static bool8 sub_81153E4(u16 eventId, const u16 *eventData)
-{
- if (eventId != QL_EVENT_DEPARTED)
- return TRUE;
-
- if (*((u8 *)eventData + 1) == 32 && !gUnknown_203B04B)
- return FALSE;
-
- gUnknown_203B04B = FALSE;
- return TRUE;
-}
-
-static u16 *BufferQuestLogData_UsedFieldMove(u16 *a0, const u16 *eventData)
-{
- u8 *r3;
- a0 = sub_8113DE0(QL_EVENT_USED_FIELD_MOVE, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- r3 = (u8 *)a0 + 2;
- r3[0] = *((const u8 *)eventData + 2);
- r3[1] = *((const u8 *)eventData + 3);
- if (r3[0] == FIELD_MOVE_TELEPORT || r3[0] == FIELD_MOVE_DIG)
- gUnknown_203B048 = 2;
- else
- gUnknown_203B048 = 1;
- return (u16 *)(r3 + 2);
-}
-
-static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_USED_FIELD_MOVE, eventData);
- const u8 *r5 = (const u8 *)r4 + 2;
- QuestLog_GetSpeciesName(r4[0], gStringVar1, 0);
- if (r5[1] != 0xFF)
- GetMapNameGeneric(gStringVar2, r5[1]);
-
- // If used Teleport, get name of destination
- if (r5[0] == FIELD_MOVE_TELEPORT)
- {
- if (r5[1] == 0x58)
- StringCopy(gStringVar3, gText_QuestLog_Home);
- else
- StringCopy(gStringVar3, gText_PokemonCenter);
- }
-
- StringExpandPlaceholders(gStringVar4, sUsedFieldMoveTexts[r5[0]]);
- return (const u16 *)(r5 + 2);
-}
-
-static u16 *BufferQuestLogData_BoughtItem(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_BOUGHT_ITEM, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[2];
- a0[1] = eventData[3];
- a0[2] = *((const u32 *)eventData) >> 16;
- a0[3] = *((const u32 *)eventData);
- *((u8 *)a0 + 8) = *((const u8 *)eventData + 8);
- *((u8 *)a0 + 9) = 1;
- return a0 + 5;
-}
-
-static const u16 *BufferQuestLogText_BoughtItem(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_BOUGHT_ITEM, eventData);
- const u8 *r7 = (const u8 *)r4 + 8;
- u32 r6 = (r4[2] << 16) + r4[3];
- DynamicPlaceholderTextUtil_Reset();
- GetMapNameGeneric(gStringVar1, r7[0]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r4[0]));
- if (r4[1] < 2)
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItem);
- else
- {
- ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItemsIncludingItem);
- }
- return (const u16 *)(r7 + 2);
-}
-
-static u16 *BufferQuestLogData_SoldItem(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_SOLD_ITEM, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[2];
- a0[1] = eventData[3];
- a0[2] = *((const u32 *)eventData) >> 16;
- a0[3] = *((const u32 *)eventData);
- *((u8 *)a0 + 8) = *((const u8 *)eventData + 8);
- *((u8 *)a0 + 9) = *((const u8 *)eventData + 9);
- return a0 + 5;
-}
-
-static const u16 *BufferQuestLogText_SoldItem(const u16 *eventData)
-{
- const u16 *r5 = sub_8113E88(QL_EVENT_SOLD_ITEM, eventData);
- const u8 *r7 = (const u8 *) r5 + 8;
- u32 r6 = (r5[2] << 16) + r5[3];
- DynamicPlaceholderTextUtil_Reset();
- GetMapNameGeneric(gStringVar1, r7[0]);
- if (r7[1] == 0) {
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, ItemId_GetName(r5[0]));
- if (r5[1] == 1)
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gText_QuestLog_JustOne);
- else
- {
- ConvertIntToDecimalStringN(gStringVar2, r5[1], STR_CONV_MODE_LEFT_ALIGN, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar2);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar3, gText_QuestLog_Num);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3);
- }
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldNumOfItem);
- }
- else
- {
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r5[0]));
- ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldItemsIncludingItem);
- }
- return (const u16 *)(r7 + 2);
-}
-
-static u16 *BufferQuestLogData_ObtainedItem(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_OBTAINED_ITEM, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- *((u8 *)a0 + 2) = *((const u8 *)eventData + 2);
- return a0 + 2;
-}
-
-static const u16 *BufferQuestLogText_ObtainedItem(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_OBTAINED_ITEM, eventData);
- const u8 *r5 = (const u8 *)r4 + 2;
- GetMapNameGeneric(gStringVar1, r5[0]);
- StringCopy(gStringVar2, ItemId_GetName(r4[0]));
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_ObtainedItemInLocation);
- return (const u16 *)(r5 + 2);
-}
-
-static const u16 sQuestLogWorldMapFlags[] =
-{
- FLAG_WORLD_MAP_VIRIDIAN_CITY,
- FLAG_WORLD_MAP_PEWTER_CITY,
- FLAG_WORLD_MAP_CERULEAN_CITY,
- FLAG_WORLD_MAP_LAVENDER_TOWN,
- FLAG_WORLD_MAP_VERMILION_CITY,
- FLAG_WORLD_MAP_CELADON_CITY,
- FLAG_WORLD_MAP_FUCHSIA_CITY,
- FLAG_WORLD_MAP_CINNABAR_ISLAND,
- FLAG_WORLD_MAP_INDIGO_PLATEAU_EXTERIOR,
- FLAG_WORLD_MAP_SAFFRON_CITY,
- FLAG_WORLD_MAP_ONE_ISLAND,
- FLAG_WORLD_MAP_TWO_ISLAND,
- FLAG_WORLD_MAP_THREE_ISLAND,
- FLAG_WORLD_MAP_FOUR_ISLAND,
- FLAG_WORLD_MAP_FIVE_ISLAND,
- FLAG_WORLD_MAP_SEVEN_ISLAND,
- FLAG_WORLD_MAP_SIX_ISLAND
-};
-
-void QuestLog_RecordEnteredMap(u16 worldMapFlag)
-{
- s32 i;
-
- if (QL_IS_PLAYBACK_STATE)
- return;
-
- for (i = 0; i < (int)NELEMS(sQuestLogWorldMapFlags); i++)
- {
- if (worldMapFlag == sQuestLogWorldMapFlags[i])
- {
- if (!FlagGet(worldMapFlag))
- {
- sNewlyEnteredMap = TRUE;
- break;
- }
- else
- {
- sNewlyEnteredMap += 0;
- sNewlyEnteredMap = FALSE;
- break;
- }
- }
- }
-}
-
-void sub_8115798(void)
-{
- u16 sp0;
- if (!QL_IS_PLAYBACK_STATE)
- {
- if (sNewlyEnteredMap)
- {
- sp0 = gMapHeader.regionMapSectionId;
- SetQuestLogEvent(QL_EVENT_ARRIVED, &sp0);
- sNewlyEnteredMap = FALSE;
- }
- }
-}
-
-static u16 *BufferQuestLogData_ArrivedInLocation(u16 *a0, const u16 *eventData)
-{
- a0 = sub_8113DE0(QL_EVENT_ARRIVED, a0);
- if (a0 == NULL)
- return NULL;
- a0[0] = eventData[0];
- return a0 + 1;
-}
-
-static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *eventData)
-{
- const u16 *r4 = sub_8113E88(QL_EVENT_ARRIVED, eventData);
- GetMapNameGeneric(gStringVar1, (u8)r4[0]);
- StringExpandPlaceholders(gStringVar4, gText_QuestLog_ArrivedInLocation);
- return r4 + 1;
-}
-
-static void BufferLinkPartnersName(u8 *dest)
-{
- s32 i;
- if (*dest++ == EXT_CTRL_CODE_BEGIN && *dest++ == EXT_CTRL_CODE_JPN)
- {
- for (i = 0; i < 5; i++)
- {
- if (*dest == EXT_CTRL_CODE_BEGIN)
- break;
- dest++;
- }
- *dest++ = EXT_CTRL_CODE_BEGIN;
- *dest++ = EXT_CTRL_CODE_ENG;
- *dest++ = EOS;
- }
-}
diff --git a/src/quest_log_events.c b/src/quest_log_events.c
new file mode 100644
index 000000000..31f249484
--- /dev/null
+++ b/src/quest_log_events.c
@@ -0,0 +1,2148 @@
+#include "global.h"
+#include "gflib.h"
+#include "battle.h"
+#include "data.h"
+#include "dynamic_placeholder_text_util.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "menu_helpers.h"
+#include "item.h"
+#include "link.h"
+#include "quest_log.h"
+#include "party_menu.h"
+#include "pokemon_storage_system.h"
+#include "region_map.h"
+#include "strings.h"
+#include "constants/maps.h"
+#include "constants/flags.h"
+#include "constants/trainer_classes.h"
+#include "constants/species.h"
+#include "constants/items.h"
+#include "constants/region_map_sections.h"
+
+static EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0};
+EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0};
+static EWRAM_DATA u8 gUnknown_203B048 = 0;
+static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE;
+static EWRAM_DATA u8 gUnknown_203B04A = 0;
+static EWRAM_DATA bool8 gUnknown_203B04B = FALSE;
+
+static bool8 InQuestLogDisabledLocation(void);
+static bool8 sub_8113778(u16, const u16 *);
+static bool8 sub_81137E4(u16, const u16 *);
+static u16 *sub_8113828(u16, const u16 *);
+static bool8 TrySetLinkQuestLogEvent(u16, const u16 *);
+static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *);
+static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *);
+static void sub_8113B94(u16);
+static u16 *TryRecordEvent41(u16 *, u16);
+static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *);
+static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *);
+static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *, const u16 *);
+static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *, const u16 *);
+static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *, const u16 *);
+static u16 *BufferQuestLogData_TookHeldItem(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SwappedHeldItem(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *, const u16 *);
+static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *, const u16 *);
+static u16 *BufferQuestLogData_LinkTraded(u16 *, const u16 *);
+static u16 *BufferQuestLogData_LinkBattledSingle(u16 *, const u16 *);
+static u16 *BufferQuestLogData_LinkBattledDouble(u16 *, const u16 *);
+static u16 *BufferQuestLogData_LinkBattledMulti(u16 *, const u16 *);
+static u16 *BufferQuestLogData_UsedUnionRoom(u16 *, const u16 *);
+static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *, const u16 *);
+static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *, const u16 *);
+static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *, const u16 *);
+static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *, const u16 *);
+static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *, const u16 *);
+static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DepositedMonInPC(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DepositedItemInPC(u16 *, const u16 *);
+static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DefeatedWildMon(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DefeatedChampion(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DefeatedTrainer(u16 *, const u16 *);
+static u16 *BufferQuestLogData_DepartedLocation(u16 *, const u16 *);
+static u16 *BufferQuestLogData_UsedFieldMove(u16 *, const u16 *);
+static u16 *BufferQuestLogData_BoughtItem(u16 *, const u16 *);
+static u16 *BufferQuestLogData_SoldItem(u16 *, const u16 *);
+static u16 *BufferQuestLogData_ObtainedItem(u16 *, const u16 *);
+static u16 *BufferQuestLogData_ArrivedInLocation(u16 *, const u16 *);
+static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *);
+static const u16 *BufferQuestLogText_UsedItem(const u16 *);
+static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *);
+static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *);
+static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *);
+static const u16 *BufferQuestLogText_TookHeldItem(const u16 *);
+static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *);
+static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *);
+static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *);
+static const u16 *BufferQuestLogText_LinkTraded(const u16 *);
+static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *);
+static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *);
+static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *);
+static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *);
+static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *);
+static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *);
+static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *);
+static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *);
+static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *);
+static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *);
+static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *);
+static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *);
+static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *);
+static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *);
+static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *);
+static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *);
+static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *);
+static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *);
+static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *);
+static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *);
+static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *);
+static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *);
+static const u16 *BufferQuestLogText_DepartedLocation(const u16 *);
+static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *);
+static const u16 *BufferQuestLogText_BoughtItem(const u16 *);
+static const u16 *BufferQuestLogText_SoldItem(const u16 *);
+static const u16 *BufferQuestLogText_ObtainedItem(const u16 *);
+static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *);
+static bool8 IsSpeciesFromSpecialEncounter(u16);
+static bool8 sub_81153A8(u16, const u16 *);
+static bool8 sub_81153E4(u16, const u16 *);
+static void BufferLinkPartnersName(u8 *);
+
+static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = {
+ [QL_EVENT_0] = NULL,
+ [QL_EVENT_1] = NULL,
+ [QL_EVENT_2] = NULL,
+ [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogData_SwitchedPartyOrder,
+ [QL_EVENT_USED_ITEM] = BufferQuestLogData_UsedItem,
+ [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogData_GaveHeldItemFromPartyMenu,
+ [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogData_GaveHeldItemFromBagMenu,
+ [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogData_GaveHeldItemFromPC,
+ [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogData_TookHeldItem,
+ [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogData_SwappedHeldItem,
+ [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogData_SwappedHeldItemFromPC,
+ [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogData_UsedPkmnCenter,
+ [QL_EVENT_LINK_TRADED] = BufferQuestLogData_LinkTraded,
+ [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogData_LinkBattledSingle,
+ [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogData_LinkBattledDouble,
+ [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogData_LinkBattledMulti,
+ [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogData_UsedUnionRoom,
+ [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogData_UsedUnionRoomChat,
+ [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogData_LinkTradedUnionRoom,
+ [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogData_LinkBattledUnionRoom,
+ [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogData_SwitchedMonsBetweenBoxes,
+ [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogData_SwitchedMonsWithinBox,
+ [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogData_SwitchedPartyMonForPCMon,
+ [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogData_MovedMonBetweenBoxes,
+ [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogData_MovedMonWithinBox,
+ [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogData_WithdrewMonFromPC,
+ [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogData_DepositedMonInPC,
+ [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogData_SwitchedMultipleMons,
+ [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogData_DepositedItemInPC,
+ [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogData_WithdrewItemFromPC,
+ [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogData_DefeatedGymLeader,
+ [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogData_DefeatedWildMon,
+ [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogData_DefeatedEliteFourMember,
+ [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogData_DefeatedChampion,
+ [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogData_DefeatedTrainer,
+ [QL_EVENT_DEPARTED] = BufferQuestLogData_DepartedLocation,
+ [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogData_UsedFieldMove,
+ [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogData_BoughtItem,
+ [QL_EVENT_SOLD_ITEM] = BufferQuestLogData_SoldItem,
+ [QL_EVENT_39] = NULL,
+ [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogData_ObtainedItem,
+ [QL_EVENT_41] = NULL,
+ [QL_EVENT_ARRIVED] = BufferQuestLogData_ArrivedInLocation
+};
+
+void SetQuestLogEvent(u16 eventId, const u16 *eventData)
+{
+ u16 *r1;
+
+ if (eventId == QL_EVENT_DEPARTED && gUnknown_203B048 == 2)
+ {
+ sub_811381C();
+ return;
+ }
+ sub_811381C();
+ if (gQuestLogState == QL_STATE_PLAYBACK)
+ return;
+
+ if (!IS_VALID_QL_EVENT(eventId))
+ return;
+
+ if (InQuestLogDisabledLocation() == TRUE)
+ return;
+
+ if (TrySetLinkQuestLogEvent(eventId, eventData) == TRUE)
+ return;
+
+ if (MenuHelpers_LinkSomething() == TRUE)
+ return;
+
+ if (InUnionRoom() == TRUE)
+ return;
+
+ if (TrySetTrainerBattleQuestLogEvent(eventId, eventData) == TRUE)
+ return;
+
+ if (IsQuestLogEventWithSpecialEncounterSpecies(eventId, eventData) == TRUE)
+ return;
+
+ if (sub_81153E4(eventId, eventData) == FALSE)
+ return;
+
+ if (gQuestLogPlaybackState == 0)
+ {
+ if (sub_8113778(eventId, eventData) == TRUE)
+ return;
+
+ if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL)
+ {
+ if (sub_81153A8(eventId, eventData) == FALSE)
+ return;
+ StartRecordingQuestLogEntry(eventId);
+ }
+ }
+ else if (eventId == QL_EVENT_OBTAINED_ITEM)
+ return;
+
+ sub_8113B94(eventId);
+ if (eventId == QL_EVENT_DEFEATED_WILD_MON)
+ {
+ if (gUnknown_203AE04 == NULL)
+ {
+ gUnknown_203AE04 = sEventRecordingPointer;
+ r1 = sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData);
+ }
+ else
+ {
+ sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData);
+ return;
+ }
+ }
+ else
+ {
+ gUnknown_203AE04 = NULL;
+ r1 = sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData);
+ }
+
+ if (r1 == NULL)
+ {
+ FinishRecordingQuestLogScene();
+ r1 = sub_8113828(eventId, eventData);
+ if (r1 == NULL)
+ return;
+ }
+
+ sEventRecordingPointer = r1;
+ if (gUnknown_203B048 == 0)
+ return;
+ FinishRecordingQuestLogScene();
+}
+
+static bool8 InQuestLogDisabledLocation(void)
+{
+ // In Trainer Tower
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_1F)
+ && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_1F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_2F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_3F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_4F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_5F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_6F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_7F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_8F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ROOF)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_LOBBY)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR)))
+ return TRUE;
+
+ // In pokemon trainer fan club
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB))
+ return TRUE;
+
+ // In E-Reader house
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_HOUSE_ROOM1) &&
+ (gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM1)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM2)))
+ return TRUE;
+
+ // In elevator
+ if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROCKET_HIDEOUT_ELEVATOR))
+ || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SILPH_CO_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SILPH_CO_ELEVATOR))
+ || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR))
+ || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR)))
+ return TRUE;
+
+ return FALSE;
+}
+
+bool8 QuestLog_ShouldEndSceneOnMapChange(void)
+{
+ if (InQuestLogDisabledLocation() != TRUE)
+ return FALSE;
+
+ if (gQuestLogState == QL_STATE_PLAYBACK)
+ return TRUE;
+
+ if (gQuestLogState == QL_STATE_RECORDING)
+ QuestLog_CutRecording();
+
+ return FALSE;
+}
+
+static bool8 sub_8113778(u16 eventId, const u16 *eventData)
+{
+ if (eventId == QL_EVENT_USED_FIELD_MOVE || eventId == QL_EVENT_USED_PKMN_CENTER)
+ return TRUE;
+
+ if (!FlagGet(FLAG_SYS_GAME_CLEAR))
+ {
+ if (eventId == QL_EVENT_SWITCHED_PARTY_ORDER || eventId == QL_EVENT_DEFEATED_WILD_MON || sub_81137E4(eventId, eventData) == TRUE)
+ return TRUE;
+ }
+
+ if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS))
+ {
+ if (eventId == QL_EVENT_USED_ITEM
+ || eventId == QL_EVENT_GAVE_HELD_ITEM
+ || eventId == QL_EVENT_GAVE_HELD_ITEM_BAG
+ || eventId == QL_EVENT_GAVE_HELD_ITEM_PC
+ || eventId == QL_EVENT_TOOK_HELD_ITEM
+ || eventId == QL_EVENT_SWAPPED_HELD_ITEM
+ || eventId == QL_EVENT_SWAPPED_HELD_ITEM_PC
+ || eventId == QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON
+ || eventId == QL_EVENT_WITHDREW_MON_PC
+ || eventId == QL_EVENT_DEPOSITED_MON_PC)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 sub_81137E4(u16 eventId, const u16 *eventData)
+{
+ if (eventId == QL_EVENT_DEFEATED_TRAINER)
+ {
+ u8 trainerClass = gTrainers[*eventData].trainerClass;
+ if ( trainerClass == CLASS_RIVAL
+ || trainerClass == CLASS_RIVAL_2
+ || trainerClass == CLASS_CHAMPION_2
+ || trainerClass == CLASS_BOSS)
+ return FALSE;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_811381C(void)
+{
+ gUnknown_203B048 = 0;
+}
+
+static u16 *sub_8113828(u16 eventId, const u16 *eventData)
+{
+ if (sub_8113778(eventId, eventData) == TRUE)
+ return NULL;
+
+ if (sub_81153A8(eventId, eventData) == FALSE)
+ return NULL;
+
+ StartRecordingQuestLogEntry(eventId);
+ sub_8113B94(eventId);
+
+ if (eventId == QL_EVENT_DEFEATED_WILD_MON)
+ gUnknown_203AE04 = sEventRecordingPointer;
+ else
+ gUnknown_203AE04 = NULL;
+
+ return sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData);
+}
+
+static bool8 TrySetLinkQuestLogEvent(u16 eventId, const u16 *eventData)
+{
+ if (!IS_LINK_QL_EVENT(eventId))
+ return FALSE;
+
+ sub_81138F8();
+ gUnknown_203B024.unk_00 = eventId;
+
+ if (eventId != QL_EVENT_USED_UNION_ROOM && eventId != QL_EVENT_USED_UNION_ROOM_CHAT)
+ {
+ if (eventId == QL_EVENT_LINK_TRADED || eventId == QL_EVENT_LINK_TRADED_UNION)
+ memcpy(gUnknown_203B024.unk_04, eventData, 12);
+ else
+ memcpy(gUnknown_203B024.unk_04, eventData, 24);
+ }
+ return TRUE;
+}
+
+void sub_81138F8(void)
+{
+ gUnknown_203B024 = (struct UnkStruct_203B024){};
+}
+
+void QuestLog_StartRecordingInputsAfterDeferredEvent(void)
+{
+ if (gUnknown_203B024.unk_00 != QL_EVENT_0)
+ {
+ u16 *resp;
+ gUnknown_203B04A = 0;
+ StartRecordingQuestLogEntry(gUnknown_203B024.unk_00);
+ resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04);
+ sEventRecordingPointer = resp;
+ sub_81138F8();
+ }
+}
+
+static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData)
+{
+ if (eventId != QL_EVENT_DEFEATED_TRAINER
+ && eventId != QL_EVENT_DEFEATED_GYM_LEADER
+ && eventId != QL_EVENT_DEFEATED_E4_MEMBER
+ && eventId != QL_EVENT_DEFEATED_CHAMPION)
+ return FALSE;
+
+ sub_81138F8();
+ if (gQuestLogPlaybackState != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE)
+ {
+ gUnknown_203B024.unk_00 = eventId;
+ memcpy(gUnknown_203B024.unk_04, eventData, 8);
+ }
+ return TRUE;
+}
+
+void sub_81139BC(void)
+{
+ if (gUnknown_203B024.unk_00 != QL_EVENT_0)
+ {
+ u16 *resp;
+ if (gQuestLogPlaybackState == 0)
+ {
+ gUnknown_203B04A = 0;
+ StartRecordingQuestLogEntry(gUnknown_203B024.unk_00);
+ }
+ sub_8113B94(gUnknown_203B024.unk_00);
+ resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04);
+ sEventRecordingPointer = resp;
+ TryRecordEvent41_IncCursor(1);
+ sub_81138F8();
+ FinishRecordingQuestLogScene();
+ }
+}
+
+void TryRecordEvent41_IncCursor(u16 a0)
+{
+ sEventRecordingPointer = TryRecordEvent41(sEventRecordingPointer, a0);
+ sQuestLogCursor++;
+}
+
+static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16 eventId, const u16 *eventData)
+{
+ if (eventId != QL_EVENT_DEFEATED_WILD_MON)
+ return FALSE;
+
+ if (IsSpeciesFromSpecialEncounter(eventData[0]) == TRUE)
+ return TRUE;
+
+ if (IsSpeciesFromSpecialEncounter(eventData[1]) == TRUE)
+ return TRUE;
+
+ return FALSE;
+}
+
+static const u16 *(*const sQuestLogEventTextBufferCBs[])(const u16 *) = {
+ [QL_EVENT_0] = NULL,
+ [QL_EVENT_1] = NULL,
+ [QL_EVENT_2] = NULL,
+ [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogText_SwitchedPartyOrder,
+ [QL_EVENT_USED_ITEM] = BufferQuestLogText_UsedItem,
+ [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogText_GaveHeldItemFromPartyMenu,
+ [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogText_GaveHeldItemFromBagMenu,
+ [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogText_GaveHeldItemFromPC,
+ [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogText_TookHeldItem,
+ [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogText_SwappedHeldItem,
+ [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogText_SwappedHeldItemFromPC,
+ [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogText_UsedPkmnCenter,
+ [QL_EVENT_LINK_TRADED] = BufferQuestLogText_LinkTraded,
+ [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogText_LinkBattledSingle,
+ [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogText_LinkBattledDouble,
+ [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogText_LinkBattledMulti,
+ [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogText_UsedUnionRoom,
+ [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogText_UsedUnionRoomChat,
+ [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogText_LinkTradedUnionRoom,
+ [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogText_LinkBattledUnionRoom,
+ [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogText_SwitchedMonsBetweenBoxes,
+ [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogText_SwitchedMonsWithinBox,
+ [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogText_SwitchedPartyMonForPCMon,
+ [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogText_MovedMonBetweenBoxes,
+ [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogText_MovedMonWithinBox,
+ [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogText_WithdrewMonFromPC,
+ [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogText_DepositedMonInPC,
+ [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogText_SwitchedMultipleMons,
+ [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogText_DepositedItemInPC,
+ [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogText_WithdrewItemFromPC,
+ [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogText_DefeatedGymLeader,
+ [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogText_DefeatedWildMon,
+ [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogText_DefeatedEliteFourMember,
+ [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogText_DefeatedChampion,
+ [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogText_DefeatedTrainer,
+ [QL_EVENT_DEPARTED] = BufferQuestLogText_DepartedLocation,
+ [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogText_UsedFieldMove,
+ [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogText_BoughtItem,
+ [QL_EVENT_SOLD_ITEM] = BufferQuestLogText_SoldItem,
+ [QL_EVENT_39] = NULL,
+ [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogText_ObtainedItem,
+ [QL_EVENT_41] = NULL,
+ [QL_EVENT_ARRIVED] = BufferQuestLogText_ArrivedInLocation
+};
+
+static const u8 sQuestLogEventCmdSizes[] = {
+ [QL_EVENT_0] = 0x08,
+ [QL_EVENT_1] = 0x08,
+ [QL_EVENT_2] = 0x08,
+ [QL_EVENT_SWITCHED_PARTY_ORDER] = 0x08,
+ [QL_EVENT_USED_ITEM] = 0x0a,
+ [QL_EVENT_GAVE_HELD_ITEM] = 0x08,
+ [QL_EVENT_GAVE_HELD_ITEM_BAG] = 0x08,
+ [QL_EVENT_GAVE_HELD_ITEM_PC] = 0x08,
+ [QL_EVENT_TOOK_HELD_ITEM] = 0x08,
+ [QL_EVENT_SWAPPED_HELD_ITEM] = 0x0a,
+ [QL_EVENT_SWAPPED_HELD_ITEM_PC] = 0x0a,
+ [QL_EVENT_USED_PKMN_CENTER] = 0x04,
+ [QL_EVENT_LINK_TRADED] = 0x10,
+ [QL_EVENT_LINK_BATTLED_SINGLE] = 0x0c,
+ [QL_EVENT_LINK_BATTLED_DOUBLE] = 0x0c,
+ [QL_EVENT_LINK_BATTLED_MULTI] = 0x1a,
+ [QL_EVENT_USED_UNION_ROOM] = 0x04,
+ [QL_EVENT_USED_UNION_ROOM_CHAT] = 0x04,
+ [QL_EVENT_LINK_TRADED_UNION] = 0x10,
+ [QL_EVENT_LINK_BATTLED_UNION] = 0x0c,
+ [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = 0x0a,
+ [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = 0x0a,
+ [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = 0x0a,
+ [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = 0x08,
+ [QL_EVENT_MOVED_MON_WITHIN_BOX] = 0x08,
+ [QL_EVENT_WITHDREW_MON_PC] = 0x08,
+ [QL_EVENT_DEPOSITED_MON_PC] = 0x08,
+ [QL_EVENT_SWITCHED_MULTIPLE_MONS] = 0x06,
+ [QL_EVENT_DEPOSITED_ITEM_PC] = 0x06,
+ [QL_EVENT_WITHDREW_ITEM_PC] = 0x06,
+ [QL_EVENT_DEFEATED_GYM_LEADER] = 0x0c,
+ [QL_EVENT_DEFEATED_WILD_MON] = 0x0c,
+ [QL_EVENT_DEFEATED_E4_MEMBER] = 0x0c,
+ [QL_EVENT_DEFEATED_CHAMPION] = 0x0a,
+ [QL_EVENT_DEFEATED_TRAINER] = 0x0c,
+ [QL_EVENT_DEPARTED] = 0x06,
+ [QL_EVENT_USED_FIELD_MOVE] = 0x08,
+ [QL_EVENT_BOUGHT_ITEM] = 0x0e,
+ [QL_EVENT_SOLD_ITEM] = 0x0e,
+ [QL_EVENT_39] = 0x02,
+ [QL_EVENT_OBTAINED_ITEM] = 0x08,
+ [QL_EVENT_41] = 0x04,
+ [QL_EVENT_ARRIVED] = 0x06
+};
+
+u16 *QuestLog_SkipCommand(u16 *curPtr, u16 **prevPtr_p)
+{
+ u16 eventId = curPtr[0] & 0xfff;
+ u16 cnt = curPtr[0] >> 12;
+
+ if (eventId == QL_EVENT_DEFEATED_CHAMPION)
+ cnt = 0;
+
+ if (!IS_VALID_QL_EVENT(eventId))
+ return NULL;
+
+ *prevPtr_p = curPtr;
+ return sQuestLogEventCmdSizes[eventId] + (sQuestLogEventCmdSizes[eventId] - 4) * cnt + (void *)curPtr;
+}
+
+void sub_8113ABC(const u16 *a0)
+{
+ const u8 *r2 = (const u8 *)(a0 + 2);
+ if ((a0[0] & 0xFFF) != QL_EVENT_DEPARTED)
+ gUnknown_203B04A = 0;
+ else
+ gUnknown_203B04A = r2[1] + 1;
+}
+
+bool8 sub_8113AE8(const u16 *a0)
+{
+#ifndef NONMATCHING
+ register const u16 *r0 asm("r0") = a0;
+#else
+ const u16 *r0 = a0;
+#endif
+
+ if (r0 == NULL || r0[1] > sQuestLogCursor)
+ return FALSE;
+
+ sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0);
+ gUnknown_203B044.unk_0 = a0[0];
+ gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12;
+ if (gUnknown_203B044.unk_1 != 0)
+ gUnknown_203B044.unk_2 = 1;
+ return TRUE;
+}
+
+bool8 sub_8113B44(const u16 *a0)
+{
+ if (gUnknown_203B044.unk_2 == 0)
+ return FALSE;
+
+ sQuestLogEventTextBufferCBs[gUnknown_203B044.unk_0](a0);
+ gUnknown_203B044.unk_2++;
+ if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1)
+ ResetUnk203B044();
+ return TRUE;
+}
+
+void ResetUnk203B044(void)
+{
+ gUnknown_203B044 = (struct UnkStruct_203B044){};
+}
+
+static void sub_8113B94(u16 eventId)
+{
+ if (gUnknown_203B044.unk_0 != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor)
+ {
+ gUnknown_203B044.unk_0 = eventId;
+ gUnknown_203B044.unk_1 = 0;
+ gUnknown_203B044.unk_2 = sQuestLogCursor;
+ }
+ else if (gUnknown_203B044.unk_1 < 5)
+ gUnknown_203B044.unk_1++;
+}
+
+void sub_8113BD8(void)
+{
+ sNewlyEnteredMap = FALSE;
+ gUnknown_203B04A = 0;
+ gUnknown_203B04B = FALSE;
+}
+
+u16 *TryRecordEvent39_NoParams(u16 *a0)
+{
+ if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39]))
+ return NULL;
+ a0[0] = QL_EVENT_39;
+ return a0 + 1;
+}
+
+u16 *sub_8113C20(u16 *a0, struct QuestLogEntry * a1)
+{
+ if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39]))
+ return NULL;
+ a1->unk_6 = 0xFF;
+ a1->unk_4 = 0;
+ a1->unk_0 = 0;
+ a1->unk_1 = 0;
+ a1->unk_2 = 0;
+ a1->unk_3 = 0;
+ return a0 + 1;
+}
+
+static u16 *TryRecordEvent41(u16 *a0, u16 a1)
+{
+ if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41]))
+ return NULL;
+ a0[0] = QL_EVENT_41;
+ a0[1] = a1;
+ return a0 + 2;
+}
+
+u16 *sub_8113C8C(u16 *a0, struct QuestLogEntry * a1)
+{
+ if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41]))
+ return NULL;
+ a1->unk_6 = 0xFE;
+ a1->unk_4 = a0[1];
+ a1->unk_0 = 0;
+ a1->unk_1 = 0;
+ a1->unk_2 = 0;
+ a1->unk_3 = 0;
+ return a0 + 2;
+}
+
+u16 *sub_8113CC8(u16 *a0, struct QuestLogEntry * a1)
+{
+ u8 *r6 = (u8 *)a0 + 4;
+
+ if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0]))
+ return NULL;
+ a0[0] = 0;
+ a0[1] = a1->unk_4;
+ r6[0] = a1->unk_0;
+ r6[1] = a1->unk_1;
+ r6[2] = a1->unk_2;
+ r6[3] = a1->unk_3;
+ return (u16 *)(r6 + 4);
+}
+
+u16 *sub_8113D08(u16 *a0, struct QuestLogEntry * a1)
+{
+ u8 *r6 = (u8 *)a0 + 4;
+
+ if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0]))
+ return NULL;
+ a1->unk_6 = 2;
+ a1->unk_4 = a0[1];
+ a1->unk_0 = r6[0];
+ a1->unk_1 = r6[1];
+ a1->unk_2 = r6[2];
+ a1->unk_3 = r6[3];
+ return (u16 *)(r6 + 4);
+}
+
+u16 *sub_8113D48(u16 *a0, struct QuestLogEntry * a1)
+{
+ u16 *r4 = a0;
+ u8 *r6 = (u8 *)a0 + 4;
+
+ if (!WillCommandOfSizeFitInSav1Record(r4, sQuestLogEventCmdSizes[QL_EVENT_2]))
+ return NULL;
+ if (a1->unk_6 == 0)
+ r4[0] = 2;
+ else
+ r4[0] = 1;
+ r4[1] = a1->unk_4;
+ r6[0] = a1->unk_0;
+ r6[1] = a1->unk_1;
+ r6[2] = a1->unk_2;
+ r6[3] = a1->unk_3;
+ return (u16 *)(r6 + 4);
+}
+
+u16 *sub_8113D94(u16 *a0, struct QuestLogEntry * a1)
+{
+ u16 *r5 = a0;
+ u8 *r6 = (u8 *)a0 + 4;
+
+ if (!WillCommandOfSizeFitInSav1Record(r5, sQuestLogEventCmdSizes[QL_EVENT_2]))
+ return NULL;
+ if (r5[0] == 2)
+ a1->unk_6 = 0;
+ else
+ a1->unk_6 = 1;
+ a1->unk_4 = r5[1];
+ a1->unk_0 = r6[0];
+ a1->unk_1 = r6[1];
+ a1->unk_2 = r6[2];
+ a1->unk_3 = r6[3];
+ return (u16 *)(r6 + 4);
+}
+
+u16 *sub_8113DE0(u16 eventId, u16 *a1)
+{
+ u8 cmdSize;
+ u16 *r5;
+ u8 r4;
+ u8 r1;
+
+ if (gUnknown_203B044.unk_1 == 0)
+ cmdSize = sQuestLogEventCmdSizes[eventId];
+ else
+ cmdSize = sQuestLogEventCmdSizes[eventId] - 4;
+ if (!sub_8110944(a1, cmdSize))
+ return NULL;
+
+ r5 = (void *)a1;
+
+ if (gUnknown_203B044.unk_1 != 0)
+ r5 = (void *)r5 - (gUnknown_203B044.unk_1 * cmdSize + 4);
+
+ if (gUnknown_203B044.unk_1 == 5)
+ {
+ for (r4 = 0; r4 < 4; r4++)
+ {
+ memcpy(
+ (void *)r5 + (r4 * cmdSize + 4),
+ (void *)r5 + ((r4 + 1) * cmdSize + 4),
+ cmdSize
+ );
+ }
+ r1 = 4;
+ }
+ else
+ r1 = gUnknown_203B044.unk_1;
+
+ r5[0] = eventId + (r1 << 12);
+ r5[1] = sQuestLogCursor;
+ r5 = (void *)r5 + (r1 * cmdSize + 4);
+ return r5;
+}
+
+static const u16 *sub_8113E88(u16 eventId, const u16 *eventData)
+{
+ eventData = (const void *)eventData + (gUnknown_203B044.unk_2 * (sQuestLogEventCmdSizes[eventId] - 4) + 4);
+ return eventData;
+}
+
+static void QuestLog_GetSpeciesName(u16 species, u8 *dest, u8 stringVarId)
+{
+ if (dest != NULL)
+ {
+ if (species != SPECIES_EGG)
+ GetSpeciesName(dest, species);
+ else
+ StringCopy(dest, gText_EggNickname);
+ }
+ else
+ {
+ if (species != SPECIES_EGG)
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gSpeciesNames[species]);
+ else
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gText_EggNickname);
+ }
+}
+
+static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *a0, const u16 *eventData)
+{
+ u16 *r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_ORDER, a0);
+ if (r2 == NULL)
+ return NULL;
+
+ r2[0] = eventData[0];
+ r2[1] = eventData[1];
+ return r2 + 2;
+}
+
+static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_PARTY_ORDER, eventData);
+ QuestLog_GetSpeciesName(r4[0], gStringVar1, 0);
+ QuestLog_GetSpeciesName(r4[1], gStringVar2, 0);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchMon1WithMon2);
+ r4 += 2;
+ return r4;
+}
+
+static u16 *BufferQuestLogData_UsedItem(u16 *a0, const u16 *eventData)
+{
+ u16 *r2 = sub_8113DE0(QL_EVENT_USED_ITEM, a0);
+ if (r2 == NULL)
+ return NULL;
+
+ r2[0] = eventData[0];
+ r2[1] = eventData[2];
+ r2[2] = eventData[3];
+
+ if (eventData[0] == ITEM_ESCAPE_ROPE)
+ gUnknown_203B048 = 2;
+
+ return r2 + 3;
+}
+
+static const u16 *BufferQuestLogText_UsedItem(const u16 *eventData)
+{
+ const u16 *r5 = sub_8113E88(QL_EVENT_USED_ITEM, eventData);
+
+ switch (ItemId_GetPocket(r5[0]))
+ {
+ case POCKET_ITEMS:
+ case POCKET_POKE_BALLS:
+ case POCKET_BERRY_POUCH:
+ StringCopy(gStringVar1, ItemId_GetName(r5[0]));
+ if (r5[0] == ITEM_ESCAPE_ROPE)
+ {
+ GetMapNameGeneric(gStringVar2, (u8)r5[2]);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedEscapeRope);
+ }
+ else if (r5[1] != 0xFFFF)
+ {
+ QuestLog_GetSpeciesName(r5[1], gStringVar2, 0);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedItemOnMonAtThisLocation);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheItem);
+ }
+ break;
+ case POCKET_KEY_ITEMS:
+ StringCopy(gStringVar1, ItemId_GetName(r5[0]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheKeyItem);
+ break;
+ case POCKET_TM_CASE:
+ QuestLog_GetSpeciesName(r5[1], gStringVar1, 0);
+ StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]);
+ if (r5[2] != 0xFFFF)
+ {
+ StringCopy(gStringVar3, gMoveNames[r5[2]]);
+ if (r5[0] > ITEM_TM50)
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithHM);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithTM);
+ }
+ else
+ {
+ if (r5[0] > ITEM_TM50)
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromHM);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromTM);
+ }
+ break;
+ }
+ return r5 + 3;
+}
+
+u16 *BufferQuestLogData_GiveTakeHeldItem(u16 eventId, u16 *a1, const u16 *eventData)
+{
+ u16 *r1 = sub_8113DE0(eventId, a1);
+ if (r1 == NULL)
+ return NULL;
+
+ r1[0] = eventData[0];
+ r1[1] = eventData[2];
+ return r1 + 2;
+}
+
+static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *a0, const u16 *eventData)
+{
+ return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM, eventData);
+ QuestLog_GetSpeciesName(r4[1], gStringVar1, 0);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem);
+ r4 += 2;
+ return r4;
+}
+
+static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *a0, const u16 *eventData)
+{
+ return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_BAG, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_BAG, eventData);
+ QuestLog_GetSpeciesName(r4[1], gStringVar1, 0);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem2);
+ r4 += 2;
+ return r4;
+}
+
+static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *a0, const u16 *eventData)
+{
+ return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_PC, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_PC, eventData);
+
+ QuestLog_GetSpeciesName(r4[1], gStringVar2, 0);
+ StringCopy(gStringVar1, ItemId_GetName(r4[0]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItemFromPC);
+ r4 += 2;
+ return r4;
+}
+
+static u16 *BufferQuestLogData_TookHeldItem(u16 *a0, const u16 *eventData)
+{
+ return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_TOOK_HELD_ITEM, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_TookHeldItem(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_TOOK_HELD_ITEM, eventData);
+
+ QuestLog_GetSpeciesName(r4[1], gStringVar1, 0);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_TookHeldItemFromMon);
+ r4 += 2;
+ return r4;
+}
+
+u16 *BufferQuestLogData_SwappedHeldItem_(u16 eventId, u16 *a1, const u16 *eventData)
+{
+ u16 *r1 = sub_8113DE0(eventId, a1);
+ if (r1 == NULL)
+ return NULL;
+
+ r1[0] = eventData[0];
+ r1[1] = eventData[1];
+ r1[2] = eventData[2];
+ return r1 + 3;
+}
+
+static u16 *BufferQuestLogData_SwappedHeldItem(u16 *a0, const u16 *eventData)
+{
+ return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM, eventData);
+ QuestLog_GetSpeciesName(r4[2], gStringVar1, 0);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0])); // Item taken
+ StringCopy(gStringVar3, ItemId_GetName(r4[1])); // Item given
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemsOnMon);
+ r4 += 3;
+ return r4;
+}
+
+static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *a0, const u16 *eventData)
+{
+ return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM_PC, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM_PC, eventData);
+ QuestLog_GetSpeciesName(r4[2], gStringVar2, 0);
+ StringCopy(gStringVar3, ItemId_GetName(r4[0]));
+ StringCopy(gStringVar1, ItemId_GetName(r4[1]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemFromPC);
+ r4 += 3;
+ return r4;
+}
+
+static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData)
+{
+ u16 *r4 = a0;
+ if (gUnknown_203B044.unk_0 == QL_EVENT_USED_PKMN_CENTER && gUnknown_203B044.unk_1 != 0)
+ return r4;
+
+ if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_USED_PKMN_CENTER]))
+ return NULL;
+
+ r4[0] = QL_EVENT_USED_PKMN_CENTER;
+ r4[1] = sQuestLogCursor;
+ return r4 + 2;
+}
+
+static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *a0)
+{
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonsWereFullyRestoredAtCenter);
+ a0 += 2;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_LinkTraded(u16 *a0, const u16 *eventData)
+{
+ u16 *r4 = a0 + 4;
+
+ a0[0] = QL_EVENT_LINK_TRADED;
+ a0[1] = sQuestLogCursor;
+ a0[2] = eventData[0];
+ a0[3] = eventData[1];
+ eventData += 2;
+ memcpy(r4, eventData, 7);
+ r4 += 4;
+ return r4;
+}
+
+static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0)
+{
+ const u16 *r6 = a0 + 4;
+
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
+
+ BufferLinkPartnersName(gStringVar1);
+ QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received
+ QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); // Mon sent
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForPersonsMon2);
+ r6 += 4;
+ return r6;
+}
+
+static const u8 *const sDefeatedOpponentFlavorTexts[] = {
+ gText_QuestLog_Handily,
+ gText_QuestLog_Tenaciously,
+ gText_QuestLog_Somehow
+};
+
+static const u8 *const sDefeatedChampionFlavorTexts[] = {
+ gText_QuestLog_Coolly,
+ gText_QuestLog_Somehow,
+ gText_QuestLog_Barely
+};
+
+static const u8 *const sBattleOutcomeTexts[] = {
+ gText_QuestLog_Win,
+ gText_QuestLog_Loss,
+ gText_QuestLog_Draw
+};
+
+static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData)
+{
+ a0[0] = QL_EVENT_LINK_BATTLED_SINGLE;
+ a0[1] = sQuestLogCursor;
+ *((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
+ a0 += 6;
+ return a0;
+}
+
+static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0)
+{
+ DynamicPlaceholderTextUtil_Reset();
+
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
+ BufferLinkPartnersName(gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SingleBattleWithPersonResultedInOutcome);
+ a0 += 6;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData)
+{
+ a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE;
+ a0[1] = sQuestLogCursor;
+ *((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
+ a0 += 6;
+ return a0;
+}
+
+static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0)
+{
+ DynamicPlaceholderTextUtil_Reset();
+
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
+ BufferLinkPartnersName(gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DoubleBattleWithPersonResultedInOutcome);
+ a0 += 6;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData)
+{
+ a0[0] = QL_EVENT_LINK_BATTLED_MULTI;
+ a0[1] = sQuestLogCursor;
+ *((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
+ memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH);
+ memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH);
+ a0 += 13;
+ return a0;
+}
+
+static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0)
+{
+ DynamicPlaceholderTextUtil_Reset();
+
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1);
+ memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1);
+ StringCopy7(gStringVar1, (const u8 *)a0 + 5);
+ StringCopy7(gStringVar2, (const u8 *)a0 + 12);
+ StringCopy7(gStringVar3, (const u8 *)a0 + 19);
+ BufferLinkPartnersName(gStringVar1);
+ BufferLinkPartnersName(gStringVar2);
+ BufferLinkPartnersName(gStringVar3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); // partner
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); // opponent 1
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3); // opponent 2
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MultiBattleWithPeopleResultedInOutcome);
+ a0 += 13;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_UsedUnionRoom(u16 *a0, const u16 *eventData)
+{
+ a0[0] = QL_EVENT_USED_UNION_ROOM;
+ a0[1] = sQuestLogCursor;
+ return a0 + 2;
+}
+
+static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *a0)
+{
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_MingledInUnionRoom);
+ a0 += 2;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *a0, const u16 *eventData)
+{
+ a0[0] = QL_EVENT_USED_UNION_ROOM_CHAT;
+ a0[1] = sQuestLogCursor;
+ return a0 + 2;
+}
+
+static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *a0)
+{
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_ChattedWithManyTrainers);
+ a0 += 2;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData)
+{
+ u8 *r4 = (u8 *)(a0 + 4);
+ a0[0] = QL_EVENT_LINK_TRADED_UNION;
+ a0[1] = sQuestLogCursor;
+ a0[2] = eventData[0];
+ a0[3] = eventData[1];
+ memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH);
+ r4 += 8;
+ return (u16 *)r4;
+}
+
+static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0)
+{
+ const u8 *r6 = (const u8 *)(a0 + 4);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
+ BufferLinkPartnersName(gStringVar1);
+ QuestLog_GetSpeciesName(a0[3], gStringVar2, 0);
+ QuestLog_GetSpeciesName(a0[2], gStringVar3, 0);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForTrainersMon2);
+ r6 += 8;
+ return (const u16 *)r6;
+}
+
+static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventData)
+{
+ a0[0] = QL_EVENT_LINK_BATTLED_UNION;
+ a0[1] = sQuestLogCursor;
+ *(u8 *)&a0[2] = *(const u8 *)&eventData[0];
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
+ a0 += 6;
+ return a0;
+}
+
+static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0)
+{
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
+ BufferLinkPartnersName(gStringVar1);
+ StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_BattledTrainerEndedInOutcome);
+ a0 += 6;
+ return a0;
+}
+
+static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ a0[1] = eventData[1];
+ *((u8 *)a0 + 4) = *((const u8 *)eventData + 4);
+ *((u8 *)a0 + 5) = *((const u8 *)eventData + 5);
+ return a0 + 3;
+}
+
+static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, eventData);
+ boxIdxs = (const u8 *)eventData + 4;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1]));
+ QuestLog_GetSpeciesName(eventData[1], NULL, 3);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsBetweenBoxes);
+ return eventData + 3;
+}
+
+static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ a0[1] = eventData[1];
+ *((u8 *)a0 + 4) = *((const u8 *)eventData + 4);
+ return a0 + 3;
+}
+
+static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, eventData);
+ boxIdxs = (const u8 *)eventData + 4;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ QuestLog_GetSpeciesName(eventData[1], NULL, 2);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsWithinBox);
+ return eventData + 3;
+}
+
+static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *a0, const u16 *eventData)
+{
+ u16 *r2;
+ u16 *ret;
+ r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, a0);
+ if (r2 == NULL)
+ return NULL;
+ ret = r2 + 2;
+ if (*((const u8 *)eventData + 4) == TOTAL_BOXES_COUNT)
+ {
+ r2[0] = eventData[1];
+ r2[1] = eventData[0];
+ *((u8 *)r2 + 4) = *((const u8 *)eventData + 5);
+ }
+ else
+ {
+ r2[0] = eventData[0];
+ r2[1] = eventData[1];
+ *((u8 *)r2 + 4) = *((const u8 *)eventData + 4);
+ }
+ return ret + 1;
+}
+
+static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, eventData);
+ boxIdxs = (const u8 *)eventData + 4;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ QuestLog_GetSpeciesName(eventData[1], NULL, 2);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedPartyMonForPCMon);
+ return eventData + 3;
+}
+
+static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *a0, const u16 *eventData)
+{
+ u16 *r2;
+ u16 *ret;
+ r2 = sub_8113DE0(QL_EVENT_MOVED_MON_BETWEEN_BOXES, a0);
+ if (r2 == NULL)
+ return NULL;
+ r2[0] = eventData[0];
+ ret = r2 + 1;
+ *((u8 *)ret + 0) = *((const u8 *)eventData + 4);
+ *((u8 *)ret + 1) = *((const u8 *)eventData + 5);
+ return ret + 1;
+}
+
+static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_MOVED_MON_BETWEEN_BOXES, eventData);
+ boxIdxs = (const u8 *)eventData + 2;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1]));
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonToNewBox);
+ return (const u16 *)boxIdxs + 1;
+}
+
+static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *a0, const u16 *eventData)
+{
+ u16 *r2;
+ r2 = sub_8113DE0(QL_EVENT_MOVED_MON_WITHIN_BOX, a0);
+ if (r2 == NULL)
+ return NULL;
+ r2[0] = eventData[0];
+ *((u8 *)r2 + 2) = *((const u8 *)eventData + 4);
+ return r2 + 2;
+}
+
+static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_MOVED_MON_WITHIN_BOX, eventData);
+ boxIdxs = (const u8 *)eventData + 2;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonWithinBox);
+ return (const u16 *)boxIdxs + 1;
+}
+
+static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *a0, const u16 *eventData)
+{
+ u16 *r2;
+ r2 = sub_8113DE0(QL_EVENT_WITHDREW_MON_PC, a0);
+ if (r2 == NULL)
+ return NULL;
+ r2[0] = eventData[0];
+ *((u8 *)r2 + 2) = *((const u8 *)eventData + 4);
+ return r2 + 2;
+}
+
+static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_WITHDREW_MON_PC, eventData);
+ boxIdxs = (const u8 *)eventData + 2;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewMonFromPC);
+ return (const u16 *)boxIdxs + 1;
+}
+
+static u16 *BufferQuestLogData_DepositedMonInPC(u16 *a0, const u16 *eventData)
+{
+ u16 *r2;
+ r2 = sub_8113DE0(QL_EVENT_DEPOSITED_MON_PC, a0);
+ if (r2 == NULL)
+ return NULL;
+ r2[0] = eventData[0];
+ *((u8 *)r2 + 2) = *((const u8 *)eventData + 4);
+ return r2 + 2;
+}
+
+static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *eventData)
+{
+ const u8 *boxIdxs;
+ eventData = sub_8113E88(QL_EVENT_DEPOSITED_MON_PC, eventData);
+ boxIdxs = (const u8 *)eventData + 2;
+ DynamicPlaceholderTextUtil_Reset();
+ QuestLog_GetSpeciesName(eventData[0], NULL, 0);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(boxIdxs[0]));
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DepositedMonInPC);
+ return (const u16 *)boxIdxs + 1;
+}
+
+static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *a0, const u16 *eventData)
+{
+ u16 *r2;
+ r2 = sub_8113DE0(QL_EVENT_SWITCHED_MULTIPLE_MONS, a0);
+ if (r2 == NULL)
+ return NULL;
+ *((u8 *)r2 + 0) = *((const u8 *)eventData + 4);
+ *((u8 *)r2 + 1) = *((const u8 *)eventData + 5);
+ return r2 + 1;
+}
+
+static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_MULTIPLE_MONS, eventData);
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(*((const u8 *)r4 + 0)));
+ if (*((const u8 *)r4 + 0) == *((const u8 *)r4 + 1))
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_QuestLog_ADifferentSpot);
+ else
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(*((const u8 *)r4 + 1)));
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMultipleMons);
+ return r4 + 1;
+}
+
+static u16 *BufferQuestLogData_DepositedItemInPC(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_DEPOSITED_ITEM_PC, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ return a0 + 1;
+}
+
+static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_DEPOSITED_ITEM_PC, eventData);
+ CopyItemName(r4[0], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_StoredItemInPC);
+ return r4 + 1;
+}
+
+static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_WITHDREW_ITEM_PC, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ return a0 + 1;
+}
+
+static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_WITHDREW_ITEM_PC, eventData);
+ CopyItemName(r4[0], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewItemFromPC);
+ return r4 + 1;
+}
+
+u16 *BufferQuestLogData_DefeatedTrainer_(u16 eventId, u16 *a1, const u16 *a2)
+{
+ a1 = sub_8113DE0(eventId, a1);
+ if (a1 == NULL)
+ return NULL;
+ a1[0] = a2[1];
+ a1[1] = a2[2];
+ a1[2] = a2[0];
+ *((u8 *)a1 + 6) = *((const u8 *)a2 + 7);
+ *((u8 *)a1 + 7) = *((const u8 *)a2 + 6);
+ return a1 + 4;
+}
+
+static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *a0, const u16 *eventData)
+{
+ gUnknown_203B048 = 1;
+ return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_GYM_LEADER, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *eventData)
+{
+ const u8 *r6;
+ eventData = sub_8113E88(QL_EVENT_DEFEATED_GYM_LEADER, eventData);
+ r6 = (const u8 *)eventData + 6;
+ DynamicPlaceholderTextUtil_Reset();
+ GetMapNameGeneric(gStringVar1, r6[0]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[eventData[2]].trainerName);
+ QuestLog_GetSpeciesName(eventData[0], 0, 2);
+ QuestLog_GetSpeciesName(eventData[1], 0, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnGymLeadersMonWithMonAndWon);
+ return eventData + 4;
+}
+
+static u16 *BufferQuestLogData_DefeatedWildMon(u16 *a0, const u16 *eventData)
+{
+ u16 *r4 = a0;
+ u8 *r5 = (u8 *)a0 + 8;
+ if (!sub_8110944(r4, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON]))
+ return NULL;
+ if (r5[0] == 0 && r5[1] == 0)
+ {
+ r4[0] = QL_EVENT_DEFEATED_WILD_MON;
+ r4[1] = sQuestLogCursor;
+ }
+ if (eventData[0])
+ r4[2] = eventData[0];
+ if (eventData[1])
+ r4[3] = eventData[1];
+ if (eventData[0] && r5[0] != 0xFF)
+ r5[0]++;
+ if (eventData[1] && r5[1] != 0xFF)
+ r5[1]++;
+ r5[2] = *((const u8 *)eventData + 4);
+ return (u16 *)(r5 + 4);
+}
+
+static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *a0)
+{
+ const u8 *data;
+ if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON]))
+ return NULL;
+
+ data = (const u8 *)a0 + 8;
+ DynamicPlaceholderTextUtil_Reset();
+ GetMapNameGeneric(gStringVar1, data[2]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ QuestLog_GetSpeciesName(a0[2], NULL, 1);
+ ConvertIntToDecimalStringN(gStringVar2, data[0], STR_CONV_MODE_LEFT_ALIGN, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
+ QuestLog_GetSpeciesName(a0[3], NULL, 3);
+ ConvertIntToDecimalStringN(gStringVar3, data[1], STR_CONV_MODE_LEFT_ALIGN, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gSaveBlock2Ptr->playerName);
+ if (data[0] == 0)
+ {
+ if (data[1] == 1)
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMon);
+ else
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMons);
+ }
+ else if (data[1] == 0)
+ {
+ if (data[0] == 1)
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMon);
+ else
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMons);
+ }
+ else if (data[0] == 1)
+ {
+ if (data[1] == 1)
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMon);
+ else
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMons);
+ }
+ else
+ {
+ if (data[1] == 1)
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMon);
+ else
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMons);
+ }
+ return (const u16 *)(data + 4);
+}
+
+static bool8 IsSpeciesFromSpecialEncounter(u16 species)
+{
+ switch (species)
+ {
+ case SPECIES_SNORLAX:
+ case SPECIES_ARTICUNO:
+ case SPECIES_ZAPDOS:
+ case SPECIES_MOLTRES:
+ case SPECIES_MEWTWO:
+ case SPECIES_LUGIA:
+ case SPECIES_HO_OH:
+ case SPECIES_DEOXYS:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *a0, const u16 *eventData)
+{
+ gUnknown_203B048 = 1;
+ return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_E4_MEMBER, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *eventData)
+{
+ const u8 *r5;
+ eventData = sub_8113E88(QL_EVENT_DEFEATED_E4_MEMBER, eventData);
+ r5 = (const u8 *)eventData + 6;
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gTrainers[eventData[2]].trainerName);
+ QuestLog_GetSpeciesName(eventData[0], NULL, 1);
+ QuestLog_GetSpeciesName(eventData[1], NULL, 2);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, sDefeatedOpponentFlavorTexts[r5[1]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnEliteFoursMonWithMonAndWon);
+ return eventData + 4;
+}
+
+static u16 *BufferQuestLogData_DefeatedChampion(u16 *a0, const u16 *eventData)
+{
+ if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION]))
+ return NULL;
+ a0[0] = 0x2021;
+ a0[1] = sQuestLogCursor;
+ a0[2] = eventData[1];
+ a0[3] = eventData[2];
+ *((u8 *)a0 + 8) = *((const u8 *)eventData + 6);
+ gUnknown_203B048 = 1;
+ return a0 + 5;
+}
+
+static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *a0)
+{
+ const u8 *r5;
+ if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION]))
+ return NULL;
+
+ r5 = (const u8 *)a0 + 8;
+ DynamicPlaceholderTextUtil_Reset();
+
+ switch (gUnknown_203B044.unk_2)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gSaveBlock1Ptr->rivalName);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerBattledChampionRival);
+ break;
+ case 1:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName);
+ QuestLog_GetSpeciesName(a0[2], NULL, 1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName);
+ QuestLog_GetSpeciesName(a0[3], NULL, 3);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerSentOutMon1RivalSentOutMon2);
+ break;
+ case 2:
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sDefeatedChampionFlavorTexts[r5[0]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WonTheMatchAsAResult);
+ break;
+ }
+ return (const u16 *)(r5 + 2);
+}
+
+static u16 *BufferQuestLogData_DefeatedTrainer(u16 *a0, const u16 *eventData)
+{
+ gUnknown_203B048 = 1;
+ return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_TRAINER, a0, eventData);
+}
+
+static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *eventData)
+{
+ const u16 *r5 = sub_8113E88(QL_EVENT_DEFEATED_TRAINER, eventData);
+ const u8 *r6 = (const u8 *)r5 + 6;
+ DynamicPlaceholderTextUtil_Reset();
+ GetMapNameGeneric(gStringVar1, r6[0]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+
+ if (gTrainers[r5[2]].trainerClass == CLASS_RIVAL
+ || gTrainers[r5[2]].trainerClass == CLASS_RIVAL_2
+ || gTrainers[r5[2]].trainerClass == CLASS_CHAMPION_2)
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetExpandedPlaceholder(PLACEHOLDER_ID_RIVAL));
+ else
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[r5[2]].trainerName);
+
+ QuestLog_GetSpeciesName(r5[0], NULL, 2);
+ QuestLog_GetSpeciesName(r5[1], NULL, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnTrainersMonWithMonAndWon);
+ return (const u16 *)(r6 + 2);
+}
+
+static const u8 *const sLocationNameTexts[] =
+ {
+ [QL_LOCATION_HOME] = gText_QuestLog_Home,
+ [QL_LOCATION_OAKS_LAB] = gText_QuestLog_OakResearchLab,
+ [QL_LOCATION_VIRIDIAN_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_LEAGUE_GATE_1] = gText_QuestLog_PokemonLeagueGate,
+ [QL_LOCATION_LEAGUE_GATE_2] = gText_QuestLog_PokemonLeagueGate,
+ [QL_LOCATION_VIRIDIAN_FOREST_1] = gText_QuestLog_ViridianForest,
+ [QL_LOCATION_VIRIDIAN_FOREST_2] = gText_QuestLog_ViridianForest,
+ [QL_LOCATION_PEWTER_MUSEUM] = gText_QuestLog_PewterMuseumOfScience,
+ [QL_LOCATION_PEWTER_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_MT_MOON_1] = gText_QuestLog_MtMoon,
+ [QL_LOCATION_MT_MOON_2] = gText_QuestLog_MtMoon,
+ [QL_LOCATION_CERULEAN_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_BIKE_SHOP] = gText_QuestLog_BikeShop,
+ [QL_LOCATION_BILLS_HOUSE] = gText_QuestLog_BillsHouse,
+ [QL_LOCATION_DAY_CARE] = gText_QuestLog_DayCare,
+ [QL_LOCATION_UNDERGROUND_PATH_1] = gText_QuestLog_UndergroundPath,
+ [QL_LOCATION_UNDERGROUND_PATH_2] = gText_QuestLog_UndergroundPath,
+ [QL_LOCATION_PKMN_FAN_CLUB] = gText_QuestLog_PokemonFanClub,
+ [QL_LOCATION_VERMILION_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_SS_ANNE] = gText_QuestLog_SSAnne,
+ [QL_LOCATION_DIGLETTS_CAVE_1] = gText_QuestLog_DiglettsCave,
+ [QL_LOCATION_DIGLETTS_CAVE_2] = gText_QuestLog_DiglettsCave,
+ [QL_LOCATION_ROCK_TUNNEL_1] = gText_QuestLog_RockTunnel,
+ [QL_LOCATION_ROCK_TUNNEL_2] = gText_QuestLog_RockTunnel,
+ [QL_LOCATION_POWER_PLANT] = gText_QuestLog_PowerPlant,
+ [QL_LOCATION_PKMN_TOWER] = gText_QuestLog_PokemonTower,
+ [QL_LOCATION_VOLUNTEER_HOUSE] = gText_QuestLog_VolunteerHouse,
+ [QL_LOCATION_NAME_RATERS_HOUSE] = gText_QuestLog_NameRatersHouse,
+ [QL_LOCATION_UNDERGROUND_PATH_3] = gText_QuestLog_UndergroundPath,
+ [QL_LOCATION_UNDERGROUND_PATH_4] = gText_QuestLog_UndergroundPath,
+ [QL_LOCATION_CELADON_DEPT_STORE] = gText_QuestLog_CeladonDeptStore,
+ [QL_LOCATION_CELADON_MANSION] = gText_QuestLog_CeladonMansion,
+ [QL_LOCATION_GAME_CORNER] = gText_QuestLog_RocketGameCorner,
+ [QL_LOCATION_CELADON_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_CELADON_RESTAURANT] = gText_QuestLog_Restaurant,
+ [QL_LOCATION_ROCKET_HIDEOUT] = gText_QuestLog_RocketHideout,
+ [QL_LOCATION_SAFARI_ZONE] = gText_QuestLog_SafariZone,
+ [QL_LOCATION_FUCHSIA_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_WARDENS_HOME] = gText_QuestLog_WardensHome,
+ [QL_LOCATION_FIGHTING_DOJO] = gText_QuestLog_FightingDojo,
+ [QL_LOCATION_SAFFRON_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_SILPH_CO] = gText_QuestLog_SilphCo,
+ [QL_LOCATION_SEAFOAM_ISLANDS_1] = gText_QuestLog_SeafoamIslands,
+ [QL_LOCATION_SEAFOAM_ISLANDS_2] = gText_QuestLog_SeafoamIslands,
+ [QL_LOCATION_PKMN_MANSION] = gText_QuestLog_PokemonMansion,
+ [QL_LOCATION_CINNABAR_GYM] = gText_QuestLog_Gym,
+ [QL_LOCATION_CINNABAR_LAB] = gText_QuestLog_PokemonResearchLab,
+ [QL_LOCATION_VICTORY_ROAD_1] = gText_QuestLog_VictoryRoad,
+ [QL_LOCATION_VICTORY_ROAD_2] = gText_QuestLog_VictoryRoad,
+ [QL_LOCATION_PKMN_LEAGUE] = gText_QuestLog_PokemonLeague,
+ [QL_LOCATION_CERULEAN_CAVE] = gText_QuestLog_CeruleanCave
+ };
+
+static const u8 *const sDepartedLocationTexts[] =
+ {
+ [QL_DEPARTED_TOWN_BUILDING] = gText_QuestLog_DepartedPlaceInTownForNextDestination,
+ [QL_DEPARTED_MUSEUM] = gText_QuestLog_LeftTownsLocationForNextDestination,
+ [QL_DEPARTED_GAME_CORNER] = gText_QuestLog_PlayedGamesAtGameCorner,
+ [QL_DEPARTED_HOME] = gText_QuestLog_RestedAtHome,
+ [QL_DEPARTED_OAKS_LAB] = gText_QuestLog_LeftOaksLab,
+ [QL_DEPARTED_GYM] = gText_QuestLog_GymWasFullOfToughTrainers,
+ [QL_DEPARTED_SAFARI_ZONE] = gText_QuestLog_HadGreatTimeInSafariZone,
+ [QL_DEPARTED_CAVE] = gText_QuestLog_ManagedToGetOutOfLocation,
+ [QL_DEPARTED_MISC_BUILDING_1] = gText_QuestLog_DepartedTheLocationForNextDestination,
+ [QL_DEPARTED_MISC_BUILDING_2] = gText_QuestLog_DepartedFromLocationToNextDestination
+ };
+
+static const u8 sLocationToDepartedTextId[] =
+ {
+ [QL_LOCATION_HOME] = QL_DEPARTED_HOME,
+ [QL_LOCATION_OAKS_LAB] = QL_DEPARTED_OAKS_LAB,
+ [QL_LOCATION_VIRIDIAN_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_LEAGUE_GATE_1] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_LEAGUE_GATE_2] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_VIRIDIAN_FOREST_1] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_VIRIDIAN_FOREST_2] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_PEWTER_MUSEUM] = QL_DEPARTED_MUSEUM,
+ [QL_LOCATION_PEWTER_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_MT_MOON_1] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_MT_MOON_2] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_CERULEAN_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_BIKE_SHOP] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_BILLS_HOUSE] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_DAY_CARE] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_UNDERGROUND_PATH_1] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_UNDERGROUND_PATH_2] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_PKMN_FAN_CLUB] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_VERMILION_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_SS_ANNE] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_DIGLETTS_CAVE_1] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_DIGLETTS_CAVE_2] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_ROCK_TUNNEL_1] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_ROCK_TUNNEL_2] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_POWER_PLANT] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_PKMN_TOWER] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_VOLUNTEER_HOUSE] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_NAME_RATERS_HOUSE] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_UNDERGROUND_PATH_3] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_UNDERGROUND_PATH_4] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_CELADON_DEPT_STORE] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_CELADON_MANSION] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_GAME_CORNER] = QL_DEPARTED_GAME_CORNER,
+ [QL_LOCATION_CELADON_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_CELADON_RESTAURANT] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_ROCKET_HIDEOUT] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_SAFARI_ZONE] = QL_DEPARTED_SAFARI_ZONE,
+ [QL_LOCATION_FUCHSIA_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_WARDENS_HOME] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_FIGHTING_DOJO] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_SAFFRON_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_SILPH_CO] = QL_DEPARTED_MISC_BUILDING_2,
+ [QL_LOCATION_SEAFOAM_ISLANDS_1] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_SEAFOAM_ISLANDS_2] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_PKMN_MANSION] = QL_DEPARTED_MISC_BUILDING_2,
+ [QL_LOCATION_CINNABAR_GYM] = QL_DEPARTED_GYM,
+ [QL_LOCATION_CINNABAR_LAB] = QL_DEPARTED_TOWN_BUILDING,
+ [QL_LOCATION_VICTORY_ROAD_1] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_VICTORY_ROAD_2] = QL_DEPARTED_CAVE,
+ [QL_LOCATION_PKMN_LEAGUE] = QL_DEPARTED_MISC_BUILDING_1,
+ [QL_LOCATION_CERULEAN_CAVE] = QL_DEPARTED_CAVE
+ };
+
+static const u8 sGymCityMapSecs[] = {
+ MAPSEC_PEWTER_CITY,
+ MAPSEC_CERULEAN_CITY,
+ MAPSEC_VERMILION_CITY,
+ MAPSEC_CELADON_CITY,
+ MAPSEC_FUCHSIA_CITY,
+ MAPSEC_SAFFRON_CITY,
+ MAPSEC_CINNABAR_ISLAND,
+ MAPSEC_VIRIDIAN_CITY
+};
+
+static const u8 *const sUsedFieldMoveTexts[] =
+ {
+ [FIELD_MOVE_FLASH] = gText_QuestLog_UsedFlash,
+ [FIELD_MOVE_CUT] = gText_QuestLog_UsedCut,
+ [FIELD_MOVE_FLY] = gText_QuestLog_UsedFly,
+ [FIELD_MOVE_STRENGTH] = gText_QuestLog_UsedStrength,
+ [FIELD_MOVE_SURF] = gText_QuestLog_UsedSurf,
+ [FIELD_MOVE_ROCK_SMASH] = gText_QuestLog_UsedRockSmash,
+ [FIELD_MOVE_WATERFALL] = gText_QuestLog_UsedWaterfall,
+ [FIELD_MOVE_TELEPORT] = gText_QuestLog_UsedTeleportToLocation,
+ [FIELD_MOVE_DIG] = gText_QuestLog_UsedDigInLocation,
+ [FIELD_MOVE_MILK_DRINK] = gText_QuestLog_UsedMilkDrink,
+ [FIELD_MOVE_SOFT_BOILED] = gText_QuestLog_UsedSoftboiled,
+ [FIELD_MOVE_SWEET_SCENT] = gText_QuestLog_UsedSweetScent
+ };
+
+static u16 *BufferQuestLogData_DepartedLocation(u16 *a0, const u16 *eventData)
+{
+ u16 *r2 = sub_8113DE0(QL_EVENT_DEPARTED, a0);
+ if (r2 == NULL)
+ return NULL;
+ *((u8 *)r2 + 0) = *((const u8 *)eventData + 0);
+ if ((*((u8 *)r2 + 1) = *((const u8 *)eventData + 1)) == QL_LOCATION_SAFARI_ZONE)
+ gUnknown_203B048 = 1;
+ return r2 + 1;
+}
+
+static const u16 *BufferQuestLogText_DepartedLocation(const u16 *eventData)
+{
+ u8 r4, locationId;
+ const u16 *r5 = sub_8113E88(QL_EVENT_DEPARTED, eventData);
+ const u8 *r5_2 = (const u8 *)r5 + 0;
+ locationId = r5_2[1];
+ GetMapNameGeneric(gStringVar1, r5_2[0]);
+ StringCopy(gStringVar2, sLocationNameTexts[locationId]);
+ if (sLocationToDepartedTextId[locationId] == QL_DEPARTED_GYM)
+ {
+ for (r4 = 0; r4 < NELEMS(sGymCityMapSecs); r4++)
+ {
+ if (r5_2[0] != sGymCityMapSecs[r4])
+ continue;
+ if (FlagGet(FLAG_BADGE01_GET + r4) == TRUE)
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_DepartedGym);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_GymWasFullOfToughTrainers);
+ break;
+ }
+ if (r4 == 8)
+ StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]);
+ }
+ else
+ StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]);
+
+ return (const u16 *)(r5_2 + 2);
+}
+
+void sub_811539C(void)
+{
+ gUnknown_203B04B = TRUE;
+}
+
+static bool8 sub_81153A8(u16 eventId, const u16 *eventData)
+{
+ if (eventId != QL_EVENT_DEPARTED)
+ {
+ gUnknown_203B04A = 0;
+ return TRUE;
+ }
+ if (gUnknown_203B04A == *((u8 *)eventData + 1) + 1)
+ return FALSE;
+ gUnknown_203B04A = *((u8 *)eventData + 1) + 1;
+ return TRUE;
+}
+
+static bool8 sub_81153E4(u16 eventId, const u16 *eventData)
+{
+ if (eventId != QL_EVENT_DEPARTED)
+ return TRUE;
+
+ if (*((u8 *)eventData + 1) == 32 && !gUnknown_203B04B)
+ return FALSE;
+
+ gUnknown_203B04B = FALSE;
+ return TRUE;
+}
+
+static u16 *BufferQuestLogData_UsedFieldMove(u16 *a0, const u16 *eventData)
+{
+ u8 *r3;
+ a0 = sub_8113DE0(QL_EVENT_USED_FIELD_MOVE, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ r3 = (u8 *)a0 + 2;
+ r3[0] = *((const u8 *)eventData + 2);
+ r3[1] = *((const u8 *)eventData + 3);
+ if (r3[0] == FIELD_MOVE_TELEPORT || r3[0] == FIELD_MOVE_DIG)
+ gUnknown_203B048 = 2;
+ else
+ gUnknown_203B048 = 1;
+ return (u16 *)(r3 + 2);
+}
+
+static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_USED_FIELD_MOVE, eventData);
+ const u8 *r5 = (const u8 *)r4 + 2;
+ QuestLog_GetSpeciesName(r4[0], gStringVar1, 0);
+ if (r5[1] != 0xFF)
+ GetMapNameGeneric(gStringVar2, r5[1]);
+
+ // If used Teleport, get name of destination
+ if (r5[0] == FIELD_MOVE_TELEPORT)
+ {
+ if (r5[1] == 0x58)
+ StringCopy(gStringVar3, gText_QuestLog_Home);
+ else
+ StringCopy(gStringVar3, gText_PokemonCenter);
+ }
+
+ StringExpandPlaceholders(gStringVar4, sUsedFieldMoveTexts[r5[0]]);
+ return (const u16 *)(r5 + 2);
+}
+
+static u16 *BufferQuestLogData_BoughtItem(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_BOUGHT_ITEM, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[2];
+ a0[1] = eventData[3];
+ a0[2] = *((const u32 *)eventData) >> 16;
+ a0[3] = *((const u32 *)eventData);
+ *((u8 *)a0 + 8) = *((const u8 *)eventData + 8);
+ *((u8 *)a0 + 9) = 1;
+ return a0 + 5;
+}
+
+static const u16 *BufferQuestLogText_BoughtItem(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_BOUGHT_ITEM, eventData);
+ const u8 *r7 = (const u8 *)r4 + 8;
+ u32 r6 = (r4[2] << 16) + r4[3];
+ DynamicPlaceholderTextUtil_Reset();
+ GetMapNameGeneric(gStringVar1, r7[0]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r4[0]));
+ if (r4[1] < 2)
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItem);
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItemsIncludingItem);
+ }
+ return (const u16 *)(r7 + 2);
+}
+
+static u16 *BufferQuestLogData_SoldItem(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_SOLD_ITEM, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[2];
+ a0[1] = eventData[3];
+ a0[2] = *((const u32 *)eventData) >> 16;
+ a0[3] = *((const u32 *)eventData);
+ *((u8 *)a0 + 8) = *((const u8 *)eventData + 8);
+ *((u8 *)a0 + 9) = *((const u8 *)eventData + 9);
+ return a0 + 5;
+}
+
+static const u16 *BufferQuestLogText_SoldItem(const u16 *eventData)
+{
+ const u16 *r5 = sub_8113E88(QL_EVENT_SOLD_ITEM, eventData);
+ const u8 *r7 = (const u8 *) r5 + 8;
+ u32 r6 = (r5[2] << 16) + r5[3];
+ DynamicPlaceholderTextUtil_Reset();
+ GetMapNameGeneric(gStringVar1, r7[0]);
+ if (r7[1] == 0) {
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, ItemId_GetName(r5[0]));
+ if (r5[1] == 1)
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gText_QuestLog_JustOne);
+ else
+ {
+ ConvertIntToDecimalStringN(gStringVar2, r5[1], STR_CONV_MODE_LEFT_ALIGN, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar2);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar3, gText_QuestLog_Num);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3);
+ }
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldNumOfItem);
+ }
+ else
+ {
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r5[0]));
+ ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldItemsIncludingItem);
+ }
+ return (const u16 *)(r7 + 2);
+}
+
+static u16 *BufferQuestLogData_ObtainedItem(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_OBTAINED_ITEM, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ *((u8 *)a0 + 2) = *((const u8 *)eventData + 2);
+ return a0 + 2;
+}
+
+static const u16 *BufferQuestLogText_ObtainedItem(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_OBTAINED_ITEM, eventData);
+ const u8 *r5 = (const u8 *)r4 + 2;
+ GetMapNameGeneric(gStringVar1, r5[0]);
+ StringCopy(gStringVar2, ItemId_GetName(r4[0]));
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_ObtainedItemInLocation);
+ return (const u16 *)(r5 + 2);
+}
+
+static const u16 sQuestLogWorldMapFlags[] =
+ {
+ FLAG_WORLD_MAP_VIRIDIAN_CITY,
+ FLAG_WORLD_MAP_PEWTER_CITY,
+ FLAG_WORLD_MAP_CERULEAN_CITY,
+ FLAG_WORLD_MAP_LAVENDER_TOWN,
+ FLAG_WORLD_MAP_VERMILION_CITY,
+ FLAG_WORLD_MAP_CELADON_CITY,
+ FLAG_WORLD_MAP_FUCHSIA_CITY,
+ FLAG_WORLD_MAP_CINNABAR_ISLAND,
+ FLAG_WORLD_MAP_INDIGO_PLATEAU_EXTERIOR,
+ FLAG_WORLD_MAP_SAFFRON_CITY,
+ FLAG_WORLD_MAP_ONE_ISLAND,
+ FLAG_WORLD_MAP_TWO_ISLAND,
+ FLAG_WORLD_MAP_THREE_ISLAND,
+ FLAG_WORLD_MAP_FOUR_ISLAND,
+ FLAG_WORLD_MAP_FIVE_ISLAND,
+ FLAG_WORLD_MAP_SEVEN_ISLAND,
+ FLAG_WORLD_MAP_SIX_ISLAND
+ };
+
+void QuestLog_RecordEnteredMap(u16 worldMapFlag)
+{
+ s32 i;
+
+ if (QL_IS_PLAYBACK_STATE)
+ return;
+
+ for (i = 0; i < (int)NELEMS(sQuestLogWorldMapFlags); i++)
+ {
+ if (worldMapFlag == sQuestLogWorldMapFlags[i])
+ {
+ if (!FlagGet(worldMapFlag))
+ {
+ sNewlyEnteredMap = TRUE;
+ break;
+ }
+ else
+ {
+ sNewlyEnteredMap += 0;
+ sNewlyEnteredMap = FALSE;
+ break;
+ }
+ }
+ }
+}
+
+void sub_8115798(void)
+{
+ u16 sp0;
+ if (!QL_IS_PLAYBACK_STATE)
+ {
+ if (sNewlyEnteredMap)
+ {
+ sp0 = gMapHeader.regionMapSectionId;
+ SetQuestLogEvent(QL_EVENT_ARRIVED, &sp0);
+ sNewlyEnteredMap = FALSE;
+ }
+ }
+}
+
+static u16 *BufferQuestLogData_ArrivedInLocation(u16 *a0, const u16 *eventData)
+{
+ a0 = sub_8113DE0(QL_EVENT_ARRIVED, a0);
+ if (a0 == NULL)
+ return NULL;
+ a0[0] = eventData[0];
+ return a0 + 1;
+}
+
+static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *eventData)
+{
+ const u16 *r4 = sub_8113E88(QL_EVENT_ARRIVED, eventData);
+ GetMapNameGeneric(gStringVar1, (u8)r4[0]);
+ StringExpandPlaceholders(gStringVar4, gText_QuestLog_ArrivedInLocation);
+ return r4 + 1;
+}
+
+static void BufferLinkPartnersName(u8 *dest)
+{
+ s32 i;
+ if (*dest++ == EXT_CTRL_CODE_BEGIN && *dest++ == EXT_CTRL_CODE_JPN)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ if (*dest == EXT_CTRL_CODE_BEGIN)
+ break;
+ dest++;
+ }
+ *dest++ = EXT_CTRL_CODE_BEGIN;
+ *dest++ = EXT_CTRL_CODE_ENG;
+ *dest++ = EOS;
+ }
+}
diff --git a/src/start_menu.c b/src/start_menu.c
index a7a59dab0..bac1c886f 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -8,6 +8,7 @@
#include "party_menu.h"
#include "save.h"
#include "link_rfu.h"
+#include "help_message.h"
#include "event_data.h"
#include "fieldmap.h"
#include "safari_zone.h"
diff --git a/src/trainer_fan_club.c b/src/trainer_fan_club.c
new file mode 100644
index 000000000..9040d3405
--- /dev/null
+++ b/src/trainer_fan_club.c
@@ -0,0 +1,359 @@
+#include "global.h"
+#include "gflib.h"
+#include "battle.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "random.h"
+#include "constants/vars.h"
+#include "constants/flags.h"
+
+struct TrainerFanClub
+{
+ u8 timer:7;
+ u8 gotInitialFans:1;
+ u8 fanFlags;
+};
+
+#define TRAINER_FAN_CLUB ((struct TrainerFanClub *)GetVarPointer(VAR_FANCLUB_FAN_COUNTER))
+
+#define GET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags >> (flag) & 1)
+#define SET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags |= 1 << (flag))
+#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(fanClub->fanFlags ^= 1 << (flag))
+
+#define FANCLUB_MEMBER1 0
+#define FANCLUB_MEMBER2 1
+#define FANCLUB_MEMBER3 2
+#define FANCLUB_MEMBER4 3
+#define FANCLUB_MEMBER5 4
+#define FANCLUB_MEMBER6 5
+#define FANCLUB_MEMBER7 6
+#define FANCLUB_MEMBER8 7
+
+#define NUM_TRAINER_FAN_CLUB_MEMBERS 8
+
+static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *);
+static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *);
+static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *);
+static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *);
+static void TryLoseFansFromPlayTime(struct TrainerFanClub *);
+static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *);
+static void SetInitialFansOfPlayer(struct TrainerFanClub *);
+static void BufferFanClubTrainerName(struct LinkBattleRecords *, u8, u8);
+static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *);
+static bool8 DidPlayerGetFirstFans(struct TrainerFanClub * );
+static void SetPlayerGotFirstFans(struct TrainerFanClub *);
+
+void ResetTrainerFanClub(void)
+{
+ VarSet(VAR_FANCLUB_FAN_COUNTER, 0);
+ VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, 0);
+}
+
+void Script_TryLoseFansFromPlayTimeAfterLinkBattle(void)
+{
+ TryLoseFansFromPlayTimeAfterLinkBattle(TRAINER_FAN_CLUB);
+}
+
+static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *fanClub)
+{
+ if (DidPlayerGetFirstFans(fanClub))
+ {
+ TryLoseFansFromPlayTime(fanClub);
+ VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
+ }
+}
+
+void Script_UpdateTrainerFanClubGameClear(void)
+{
+ UpdateTrainerFanClubGameClear(TRAINER_FAN_CLUB);
+}
+
+static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *fanClub)
+{
+ if (!fanClub->gotInitialFans)
+ {
+ SetPlayerGotFirstFans(fanClub);
+ SetInitialFansOfPlayer(fanClub);
+ VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
+ FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BLACKBELT);
+ FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_ROCKER);
+ FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_WOMAN);
+ FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BEAUTY);
+ VarSet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1);
+ }
+}
+
+ALIGNED(4) const u8 sCounterIncrements[] = {2, 1, 2, 1};
+
+static u8 TryGainNewFanFromCounter(struct TrainerFanClub *fanClub, u8 a1)
+{
+ if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
+ {
+ if (fanClub->timer + sCounterIncrements[a1] >= 20)
+ {
+ if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 3)
+ {
+ PlayerGainRandomTrainerFan(fanClub);
+ fanClub->timer = 0;
+ }
+ else
+ fanClub->timer = 20;
+ }
+ else
+ fanClub->timer += sCounterIncrements[a1];
+ }
+
+ return fanClub->timer;
+}
+
+
+static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *fanClub)
+{
+ static const u8 sFanClubMemberIds[] = {
+ FANCLUB_MEMBER2,
+ FANCLUB_MEMBER4,
+ FANCLUB_MEMBER6,
+ FANCLUB_MEMBER1,
+ FANCLUB_MEMBER8,
+ FANCLUB_MEMBER7,
+ FANCLUB_MEMBER5,
+ FANCLUB_MEMBER3
+ };
+
+ u8 i;
+ u8 idx = 0;
+
+ for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
+ {
+ if (!(GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i])))
+ {
+ idx = i;
+ if (Random() % 2)
+ {
+ SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]);
+ return sFanClubMemberIds[i];
+ }
+ }
+ }
+
+ SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
+ return sFanClubMemberIds[idx];
+}
+
+static u8 PlayerLoseRandomTrainerFan(struct TrainerFanClub *fanClub)
+{
+ static const u8 sFanClubMemberIds[] =
+ {
+ FANCLUB_MEMBER6,
+ FANCLUB_MEMBER7,
+ FANCLUB_MEMBER4,
+ FANCLUB_MEMBER8,
+ FANCLUB_MEMBER5,
+ FANCLUB_MEMBER2,
+ FANCLUB_MEMBER1,
+ FANCLUB_MEMBER3
+ };
+
+ u8 i;
+ u8 idx = 0;
+
+ if (GetNumFansOfPlayerInTrainerFanClub(fanClub) == 1)
+ return 0;
+
+ for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
+ {
+ if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))
+ {
+ idx = i;
+ if (Random() % 2)
+ {
+ FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]);
+ return sFanClubMemberIds[i];
+ }
+ }
+ }
+
+ if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]))
+ FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
+
+ return sFanClubMemberIds[idx];
+}
+
+u16 Script_GetNumFansOfPlayerInTrainerFanClub(void)
+{
+ return GetNumFansOfPlayerInTrainerFanClub(TRAINER_FAN_CLUB);
+}
+
+static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *fanClub)
+{
+ u8 count = 0;
+ u8 i;
+
+ for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
+ {
+ if (GET_TRAINER_FAN_CLUB_FLAG(i))
+ count++;
+ }
+
+ return count;
+}
+
+void Script_TryLoseFansFromPlayTime(void)
+{
+ TryLoseFansFromPlayTime(TRAINER_FAN_CLUB);
+}
+
+static void TryLoseFansFromPlayTime(struct TrainerFanClub *fanClub)
+{
+ u8 i = 0;
+ u16 timer;
+
+ if (gSaveBlock2Ptr->playTimeHours < 999)
+ {
+ while (1)
+ {
+ if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 5)
+ {
+ VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours);
+ break;
+ }
+ if (i == NUM_TRAINER_FAN_CLUB_MEMBERS)
+ break;
+
+ timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER);
+ if (gSaveBlock2Ptr->playTimeHours - timer < 12)
+ break;
+
+ PlayerLoseRandomTrainerFan(fanClub);
+ timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER);
+ VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, timer + 12);
+ i++;
+ }
+ }
+}
+
+bool16 Script_IsFanClubMemberFanOfPlayer(void)
+{
+ return IsFanClubMemberFanOfPlayer(TRAINER_FAN_CLUB);
+}
+
+static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *fanClub)
+{
+ return GET_TRAINER_FAN_CLUB_FLAG(gSpecialVar_0x8004);
+}
+
+static void SetInitialFansOfPlayer(struct TrainerFanClub *fanClub)
+{
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER1);
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER2);
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER3);
+}
+
+void Script_BufferFanClubTrainerName(void)
+{
+ u8 whichLinkTrainer = 0;
+ u8 whichNPCTrainer = 0;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case FANCLUB_MEMBER1:
+ whichNPCTrainer = 0;
+ whichLinkTrainer = 0;
+ break;
+ case FANCLUB_MEMBER2:
+ case FANCLUB_MEMBER3:
+ case FANCLUB_MEMBER4:
+ case FANCLUB_MEMBER8:
+ break;
+ case FANCLUB_MEMBER5:
+ whichNPCTrainer = 1;
+ whichLinkTrainer = 0;
+ break;
+ case FANCLUB_MEMBER6:
+ whichNPCTrainer = 0;
+ whichLinkTrainer = 1;
+ break;
+ case FANCLUB_MEMBER7:
+ whichNPCTrainer = 2;
+ whichLinkTrainer = 1;
+ break;
+ }
+ BufferFanClubTrainerName(&gSaveBlock2Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer);
+}
+
+static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 whichLinkTrainer, u8 whichNPCTrainer)
+{
+ u8 *str;
+ const u8 *linkTrainerName = linkRecords->entries[whichLinkTrainer].name;
+ if (linkTrainerName[0] == EOS)
+ {
+ switch (whichNPCTrainer)
+ {
+ case 0:
+ StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
+ break;
+ case 1:
+ StringCopy(gStringVar1, gText_LtSurge);
+ break;
+ case 2:
+ StringCopy(gStringVar1, gText_Koga);
+ break;
+ default:
+ StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
+ break;
+ }
+ }
+ else
+ {
+ str = gStringVar1;
+ StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH);
+ str[PLAYER_NAME_LENGTH] = EOS;
+ if ( str[0] == EXT_CTRL_CODE_BEGIN
+ && str[1] == EXT_CTRL_CODE_JPN)
+ {
+ str += 2;
+ while (*str != EOS)
+ str++;
+ *str++ = EXT_CTRL_CODE_BEGIN;
+ *str++ = EXT_CTRL_CODE_ENG;
+ *str++ = EOS;
+ }
+ }
+}
+
+void Special_UpdateTrainerFansAfterLinkBattle(void)
+{
+ UpdateTrainerFansAfterLinkBattle(TRAINER_FAN_CLUB);
+}
+
+static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *fanClub)
+{
+ if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
+ {
+ TryLoseFansFromPlayTimeAfterLinkBattle(fanClub);
+ if (gBattleOutcome == B_OUTCOME_WON)
+ PlayerGainRandomTrainerFan(fanClub);
+ else
+ PlayerLoseRandomTrainerFan(fanClub);
+ }
+}
+
+static bool8 DidPlayerGetFirstFans(struct TrainerFanClub *fanClub)
+{
+ return fanClub->gotInitialFans;
+}
+
+void Script_SetPlayerGotFirstFans(void)
+{
+ SetPlayerGotFirstFans(TRAINER_FAN_CLUB);
+}
+
+static void SetPlayerGotFirstFans(struct TrainerFanClub *fanClub)
+{
+ fanClub->gotInitialFans = TRUE;
+}
+
+u8 Script_TryGainNewFanFromCounter(void)
+{
+ return TryGainNewFanFromCounter(TRAINER_FAN_CLUB, gSpecialVar_0x8004);
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 812c98214..9b16b6723 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -203,6 +203,10 @@
.align 2
.include "src/quest_log.o"
.align 2
+ .include "src/help_message.o"
+ .align 2
+ .include "src/quest_log_events.o"
+ .align 2
.include "src/union_room.o"
.align 2
.include "src/rfu_union_tool.o"