diff options
102 files changed, 3739 insertions, 3661 deletions
diff --git a/common_syms/quest_log.txt b/common_syms/quest_log.txt index 0846bb687..d4c211bb0 100644 --- a/common_syms/quest_log.txt +++ b/common_syms/quest_log.txt @@ -1,4 +1,4 @@ -gUnknown_3005E88 +gQuestLogPlaybackState sNumEventsInLogEntry gQuestLogFieldInput sCurQuestLogEntry diff --git a/common_syms/scrcmd.txt b/common_syms/scrcmd.txt index 684b63705..bfc21e41f 100644 --- a/common_syms/scrcmd.txt +++ b/common_syms/scrcmd.txt @@ -1,2 +1,2 @@ -gUnknown_3005070 +sQuestLogScriptContextPtr gSelectedObjectEvent diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index c6dc96bf4..c267575a3 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -418,7 +418,7 @@ gBattleAnims_General:: .4byte General_StatsChange .4byte General_SubstituteFade .4byte General_SubstituteAppear - .4byte General_PokeblockThrow + .4byte General_BaitThrow .4byte General_ItemKnockoff .4byte General_TurnTrap .4byte General_ItemEffect @@ -437,11 +437,11 @@ gBattleAnims_General:: .4byte General_FocusPunchSetUp .4byte General_IngrainHeal .4byte General_WishHeal - .4byte gUnknown_81D628A - .4byte gUnknown_81D6301 - .4byte gUnknown_81D637B - .4byte gUnknown_81D6394 - .4byte gUnknown_81D63DC + .4byte General_MonScared + .4byte General_GhostGetOut + .4byte General_SilphScoped + .4byte General_SafariRockThrow + .4byte General_SafariReaction gBattleAnims_Special:: .4byte Special_LevelUp @@ -10584,17 +10584,17 @@ General_SubstituteAppear:: @ 81D5C04 createvisualtask AnimTask_MonToSubstitute, 2, end -General_PokeblockThrow:: @ 81D5C0C +General_BaitThrow:: @ 81D5C0C createvisualtask sub_80F1C8C, 2, 0 - createvisualtask AnimTask_LoadPokeblockGfx, 2, + createvisualtask AnimTask_LoadBaitGfx, 2, delay 0 waitplaysewithpan SE_W026, 192, 22 - createsprite gPokeblockSpriteTemplate, ANIM_TARGET, 3, -18, 12, 0, 32 + createsprite gSafariBaitSpriteTemplate, ANIM_TARGET, 3, -18, 12, 0, 32 delay 50 loopsewithpan SE_W039, 63, 19, 2 createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 2, 1 waitforvisualfinish - createvisualtask AnimTask_FreePokeblockGfx, 2, + createvisualtask AnimTask_FreeBaitGfx, 2, end General_ItemKnockoff:: @ 81D5C54 @@ -10925,7 +10925,7 @@ General_WishHeal:: @ 81D6250 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, 0 end -gUnknown_81D628A:: @ 81D628A +General_MonScared:: @ 81D628A createvisualtask sub_80F1C8C, 2, 1 waitforvisualfinish loadspritegfx ANIM_TAG_SWEAT_BEAD @@ -10942,7 +10942,7 @@ gUnknown_81D628A:: @ 81D628A waitforvisualfinish end -gUnknown_81D6301:: @ 81D6301 +General_GhostGetOut:: @ 81D6301 createvisualtask sub_80F1C8C, 2, 1 waitforvisualfinish fadetobg 2 @@ -10967,7 +10967,7 @@ gUnknown_81D6301:: @ 81D6301 waitbgfadein end -gUnknown_81D637B:: @ 81D637B +General_SilphScoped:: @ 81D637B monbg 0 playsewithpan SE_W100, 192 waitplaysewithpan SE_W107, 192, 48 @@ -10977,7 +10977,7 @@ gUnknown_81D637B:: @ 81D637B clearmonbg 0 end -gUnknown_81D6394:: @ 81D6394 +General_SafariRockThrow:: @ 81D6394 createvisualtask sub_80F1C8C, 2, 0 waitforvisualfinish loadspritegfx ANIM_TAG_ROCKS @@ -10997,7 +10997,7 @@ gUnknown_81D6394:: @ 81D6394 waitforvisualfinish end -gUnknown_81D63DC:: @ 81D63DC +General_SafariReaction:: @ 81D63DC createvisualtask sub_80F1CE4, 2, waitforvisualfinish jumpargeq 7, 0, gUnknown_81D63FD 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/graphics/battle_anims/sprites/pokeblock.png b/graphics/battle_anims/sprites/safari_bait.png Binary files differindex d699f4c48..d699f4c48 100644 --- a/graphics/battle_anims/sprites/pokeblock.png +++ b/graphics/battle_anims/sprites/safari_bait.png diff --git a/include/battle.h b/include/battle.h index c9534745d..aac94da7b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -33,7 +33,7 @@ #define B_ACTION_RUN 3 #define B_ACTION_SAFARI_WATCH_CAREFULLY 4 #define B_ACTION_SAFARI_BALL 5 -#define B_ACTION_SAFARI_POKEBLOCK 6 +#define B_ACTION_SAFARI_BAIT 6 #define B_ACTION_SAFARI_GO_NEAR 7 #define B_ACTION_SAFARI_RUN 8 #define B_ACTION_OLDMAN_THROW 9 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 962cad668..80be08905 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -276,7 +276,7 @@ #define ANIM_TAG_GREEN_SPIKE (ANIM_SPRITES_START + 266) #define ANIM_TAG_WHITE_CIRCLE_OF_LIGHT (ANIM_SPRITES_START + 267) #define ANIM_TAG_GLOWY_BLUE_ORB (ANIM_SPRITES_START + 268) -#define ANIM_TAG_POKEBLOCK (ANIM_SPRITES_START + 269) +#define ANIM_TAG_SAFARI_BAIT (ANIM_SPRITES_START + 269) #define ANIM_TAG_WHITE_FEATHER (ANIM_SPRITES_START + 270) #define ANIM_TAG_SPARKLE_6 (ANIM_SPRITES_START + 271) #define ANIM_TAG_SPLASH (ANIM_SPRITES_START + 272) diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index da979084a..e26f79be0 100644 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -16,12 +16,12 @@ #define MB_OCEAN_WATER 0x15 #define MB_PUDDLE 0x16 #define MB_SHALLOW_WATER 0x17 -#define MB_19 0x19 +#define MB_UNDERWATER_BLOCKED_ABOVE 0x19 #define MB_1A 0x1A #define MB_1B 0x1B #define MB_STRENGTH_BUTTON 0x20 #define MB_SAND 0x21 -#define MB_22 0x22 +#define MB_SEAWEED 0x22 #define MB_ICE 0x23 #define MB_THIN_ICE 0x26 #define MB_CRACKED_ICE 0x27 @@ -68,14 +68,14 @@ #define MB_SOUTH_ARROW_WARP 0x65 #define MB_FALL_WARP 0x66 #define MB_REGULAR_WARP 0x67 -#define MB_68 0x68 +#define MB_LAVARIDGE_1F_WARP 0x68 #define MB_WARP_DOOR 0x69 #define MB_UP_ESCALATOR 0x6A #define MB_DOWN_ESCALATOR 0x6B -#define MB_UNKNOWN_WARP_6C 0x6C -#define MB_UNKNOWN_WARP_6D 0x6D -#define MB_UNKNOWN_WARP_6E 0x6E -#define MB_UNKNOWN_WARP_6F 0x6F +#define MB_UP_RIGHT_STAIR_WARP 0x6C +#define MB_UP_LEFT_STAIR_WARP 0x6D +#define MB_DOWN_RIGHT_STAIR_WARP 0x6E +#define MB_DOWN_LEFT_STAIR_WARP 0x6F #define MB_UNION_ROOM_WARP 0x71 #define MB_COUNTER 0x80 #define MB_BOOKSHELF 0x81 diff --git a/include/constants/quest_log.h b/include/constants/quest_log.h index b5494e7b9..b6f8dc319 100644 --- a/include/constants/quest_log.h +++ b/include/constants/quest_log.h @@ -2,9 +2,14 @@ #define GUARD_CONSTANTS_QUEST_LOG_H // TODO: Name and use state constants -#define QL_STATE_1 1 -#define QL_STATE_2 2 -#define QL_STATE_3 3 +#define QL_STATE_RECORDING 1 +#define QL_STATE_PLAYBACK 2 +#define QL_STATE_PLAYBACK_LAST 3 + +#define QL_START_NORMAL 1 +#define QL_START_WARP 2 + +#define QL_IS_PLAYBACK_STATE (gQuestLogState == QL_STATE_PLAYBACK || gQuestLogState == QL_STATE_PLAYBACK_LAST) #define QL_EVENT_0 0 // Null #define QL_EVENT_1 1 // Null diff --git a/include/event_object_lock.h b/include/event_object_lock.h index 1a0f452fc..de5b9903e 100644 --- a/include/event_object_lock.h +++ b/include/event_object_lock.h @@ -3,9 +3,9 @@ #include "global.h" -bool8 sub_8069590(void); +bool8 NativeScript_WaitPlayerStopMoving(void); void ScriptFreezeObjectEvents(void); -bool8 sub_8069648(void); +bool8 NativeScript_WaitPlayerAndTargetNPCStopMoving(void); void LockSelectedObjectEvent(void); void sub_8098630(void); bool8 sub_8098734(void); diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 0c383b2bb..1b7ee756e 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -66,7 +66,7 @@ u8 GetObjectEventIdByXY(s16, s16); void SetObjectEventDirection(struct ObjectEvent *, u8); u8 sub_808D4F4(void); void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); -u16 sub_805FCD8(u8 localId, u8 mapNum, u8 mapGroup); +u16 GetObjectEventFlagByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); void LoadPlayerObjectReflectionPalette(u16, u8); void LoadSpecialObjectReflectionPalette(u16, u8); void TryMoveObjectEventToMapCoords(u8, u8, u8, s16, s16); diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index e0873aa52..25eaf45ae 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -26,15 +26,15 @@ extern struct FieldInput gInputToStoreInQuestLogMaybe; void RestartWildEncounterImmunitySteps(void); void ClearPoisonStepCounter(void); int SetCableClubWarp(void); -void sub_806DE28(struct ObjectEvent *); +void HandleBoulderFallThroughHole(struct ObjectEvent *); bool8 dive_warp(struct MapPosition * pos, u16 behavior); -bool8 sub_806DB84(u16 metatileBehavior, u8 playerDirection); +bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void FieldClearPlayerInput(struct FieldInput *input); int ProcessPlayerFieldInput(struct FieldInput *input); void FieldInput_HandleCancelSignpost(struct FieldInput * input); void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys); -void sub_806DE70(u16 x, u16 y); +void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y); #endif //GUARD_FIELD_CONTROL_AVATAR_H diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index b57ef14b0..0decdd9ff 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -10,7 +10,7 @@ void DoDoorWarp(void); void DoFallWarp(void); void DoTeleportWarp(void); -void sub_807E500(void); +void DoTeleport2Warp(void); void FieldCB_DefaultWarpExit(void); void WarpFadeOutScreen(void); void FieldCB_ContinueScriptHandleMusic(void); @@ -22,7 +22,7 @@ void sub_807DCE4(void); bool32 FieldFadeTransitionBackgroundEffectIsFinished(void); void palette_bg_faded_fill_black(void); -void sub_807E4A0(u16 metatileBehavior, u16 delay); +void DoStairWarp(u16 metatileBehavior, u16 delay); void DoEscalatorWarp(u8 a0); void DoLavaridgeGymB1FWarp(void); void DoLavaridgeGym1FWarp(void); diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index df9084eab..60ece38fe 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -14,7 +14,7 @@ u8 PlayerGetCopyableMovement(void); void MovePlayerNotOnBike(u8 direction, u16 heldKeys); void MovementType_Player(struct Sprite * sprite); -void sub_805C270(void); +void HandleEnforcedLookDirectionOnPlayerStopMoving(void); void StopPlayerAvatar(void); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetPlayerAvatarGraphicsIdByStateId(u8); @@ -22,7 +22,7 @@ void SetPlayerAvatarStateMask(u8 mask); void AlignFishingAnimationFrames(struct Sprite *sprite); void CreateStopSurfingTask_NoMusicChange(u8 direction); void SavePlayerFacingDirectionForTeleport(u8 direction); -void SetPlayerAvatarTransitionFlags(u16 a); +void SetPlayerAvatarTransitionFlags(u16 flags); bool8 IsPlayerFacingSurfableFishableWater(void); void StartFishing(u8 secondaryId); u8 GetPlayerAvatarObjectId(void); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 06c56d38a..bf27cb49c 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -6,7 +6,7 @@ void sub_80AF79C(void); void AnimateFlash(u8); void sub_80B0244(void); -void sub_807E3EC(void); +void FieldCB_SafariZoneRanOutOfBalls(void); void DoOutwardBarnDoorWipe(void); void Task_BarnDoorWipe(u8 taskId); void FieldCB_RushInjuredPokemonToCenter(void); diff --git a/include/global.h b/include/global.h index aa60be994..67084f2ef 100644 --- a/include/global.h +++ b/include/global.h @@ -544,42 +544,12 @@ struct QuestLogNPCData u32 movementType:8; }; -struct UnkStruct_203B024 -{ - u16 unk_00; - u16 unk_02; - u16 unk_04[14]; -}; - -union QuestLogScene -{ - u8 allocation[32]; - u16 ident; -}; - -typedef union QuestLogScene QuestLogScene; - -// This name is a complete guess and may change. - #define BERRY_TREES_COUNT 128 #define FLAGS_COUNT 288 // 300 #define VARS_COUNT 256 #define MAIL_COUNT (PARTY_SIZE + 10) #define PC_MAIL_NUM(i) (PARTY_SIZE + (i)) -// Declare here so that it can be recursively referenced. -union QuestLogMovement; - -// Define here -union QuestLogMovement -{ - u16 ident_raw; - struct { - u16 ident:12; - u16 flags:4; - } ident_struct; -}; - struct QuestLogObjectEvent { /*0x00*/ u8 active:1; @@ -619,7 +589,7 @@ struct QuestLogObjectEvent struct QuestLog { - /*0x0000*/ u8 unk_000; + /*0x0000*/ u8 startType; /*0x0001*/ u8 mapGroup; /*0x0002*/ u8 mapNum; /*0x0003*/ u8 warpId; @@ -632,7 +602,7 @@ struct QuestLog /*0x0148*/ u8 flags[FLAGS_COUNT]; /*0x02c8*/ u16 vars[VARS_COUNT]; /*0x0468*/ struct QuestLogNPCData npcData[64]; - /*0x0568*/ u16 unk_568[128]; + /*0x0568*/ u16 script[128]; /*0x0668*/ u16 end[0]; }; diff --git a/include/graphics.h b/include/graphics.h index 8978719a8..40a41b87e 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3943,7 +3943,7 @@ extern const u32 gBattleAnimSpriteGfx_IcicleSpear[]; extern const u32 gBattleAnimSpriteGfx_Hail[]; extern const u32 gBattleAnimSpriteGfx_GlowyRedOrb[]; extern const u32 gBattleAnimSpriteGfx_GreenSpike[]; -extern const u32 gBattleAnimSpriteGfx_Pokeblock[]; +extern const u32 gBattleAnimSpriteGfx_SafariBait[]; extern const u32 gBattleAnimSpriteGfx_WhiteFeather[]; extern const u32 gBattleAnimSpriteGfx_Sparkle6[]; extern const u32 gBattleAnimSpriteGfx_Splash[]; @@ -4196,7 +4196,7 @@ extern const u32 gBattleAnimSpritePal_GlowyGreenOrb[]; extern const u32 gBattleAnimSpritePal_GreenSpike[]; extern const u32 gBattleAnimSpritePal_WhiteCircleOfLight[]; extern const u32 gBattleAnimSpritePal_GlowyBlueOrb[]; -extern const u32 gBattleAnimSpritePal_Pokeblock[]; +extern const u32 gBattleAnimSpritePal_SafariBait[]; extern const u32 gBattleAnimSpritePal_WhiteFeather[]; extern const u32 gBattleAnimSpritePal_Sparkle6[]; extern const u32 gBattleAnimSpritePal_Splash[]; 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/metatile_behavior.h b/include/metatile_behavior.h index 793eeb8a1..8af4664a0 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -17,11 +17,11 @@ bool8 MetatileBehavior_IsIce(u8 metatileBehavior); bool8 MetatileBehavior_IsWarpDoor(u8 metatileBehavior); bool8 MetatileBehavior_IsWarpDoor_2(u8 metatileBehavior); bool8 MetatileBehavior_IsEscalator(u8 metatileBehavior); -bool8 MetatileBehavior_IsUnknownWarp6C(u8 metatileBehavior); -bool8 MetatileBehavior_IsUnknownWarp6D(u8 metatileBehavior); -bool8 MetatileBehavior_IsUnknownWarp6E(u8 metatileBehavior); -bool8 MetatileBehavior_IsUnknownWarp6F(u8 metatileBehavior); -bool8 MetatileBehavior_IsUnknownWarp6C_to_6F(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalUpRightStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalUpLeftStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalDownRightStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior); bool8 MetatileBehavior_IsLadder(u8 metatileBehavior); bool8 MetatileBehavior_IsNonAnimDoor(u8 metatileBehavior); bool8 MetatileBehavior_IsDeepSouthWarp(u8 metatileBehavior); 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 090d0daf6..7c20f2de4 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -6,37 +6,53 @@ #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 id; + u8 unk_1; + u16 unk_2; +}; + extern u8 gQuestLogState; -extern u8 gUnknown_3005E88; +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 *); -void sub_811539C(void); +void SetQLPlayedTheSlots(void); void QuestLog_RecordEnteredMap(u16); 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 ResetDeferredLinkEvent(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 sub_8110AC8(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/include/scrcmd.h b/include/scrcmd.h index 0ef357ece..fca747fa0 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -1,6 +1,6 @@ #ifndef GUARD_SCRCMD_H #define GUARD_SCRCMD_H -extern struct ScriptContext * gUnknown_3005070; +extern struct ScriptContext * sQuestLogScriptContextPtr; #endif //GUARD_SCRCMD_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_anim.c b/src/battle_anim.c index 1132b5725..af387bb08 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1382,7 +1382,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_GreenSpike, 0x0080, ANIM_TAG_GREEN_SPIKE}, {gBattleAnimSpriteGfx_CircleOfLight, 0x0800, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_BLUE_ORB}, - {gBattleAnimSpriteGfx_Pokeblock, 0x0080, ANIM_TAG_POKEBLOCK}, + {gBattleAnimSpriteGfx_SafariBait, 0x0080, ANIM_TAG_SAFARI_BAIT}, {gBattleAnimSpriteGfx_WhiteFeather, 0x0400, ANIM_TAG_WHITE_FEATHER}, {gBattleAnimSpriteGfx_Sparkle6, 0x0080, ANIM_TAG_SPARKLE_6}, {gBattleAnimSpriteGfx_Splash, 0x0800, ANIM_TAG_SPLASH}, @@ -1675,7 +1675,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_GreenSpike, ANIM_TAG_GREEN_SPIKE}, {gBattleAnimSpritePal_WhiteCircleOfLight, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, {gBattleAnimSpritePal_GlowyBlueOrb, ANIM_TAG_GLOWY_BLUE_ORB}, - {gBattleAnimSpritePal_Pokeblock, ANIM_TAG_POKEBLOCK}, + {gBattleAnimSpritePal_SafariBait, ANIM_TAG_SAFARI_BAIT}, {gBattleAnimSpritePal_WhiteFeather, ANIM_TAG_WHITE_FEATHER}, {gBattleAnimSpritePal_Sparkle6, ANIM_TAG_SPARKLE_6}, {gBattleAnimSpritePal_Splash, ANIM_TAG_SPLASH}, diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 621ee9039..296e670bd 100644 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -375,10 +375,10 @@ static const u16 sBallOpenFadeColors[] = RGB(4, 0, 0), }; -const struct SpriteTemplate gPokeblockSpriteTemplate = +const struct SpriteTemplate gSafariBaitSpriteTemplate = { - .tileTag = ANIM_TAG_POKEBLOCK, - .paletteTag = ANIM_TAG_POKEBLOCK, + .tileTag = ANIM_TAG_SAFARI_BAIT, + .paletteTag = ANIM_TAG_SAFARI_BAIT, .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, @@ -2205,20 +2205,20 @@ static void sub_80F1A80(struct Sprite *sprite) } } -void AnimTask_LoadPokeblockGfx(u8 taskId) +void AnimTask_LoadBaitGfx(u8 taskId) { u8 paletteIndex; - LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_POKEBLOCK - ANIM_SPRITES_START]); - LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_POKEBLOCK - ANIM_SPRITES_START]); - paletteIndex = IndexOfSpritePaletteTag(ANIM_TAG_POKEBLOCK); + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]); + paletteIndex = IndexOfSpritePaletteTag(ANIM_TAG_SAFARI_BAIT); DestroyAnimVisualTask(taskId); } -void AnimTask_FreePokeblockGfx(u8 taskId) +void AnimTask_FreeBaitGfx(u8 taskId) { - FreeSpriteTilesByTag(ANIM_TAG_POKEBLOCK); - FreeSpritePaletteByTag(ANIM_TAG_POKEBLOCK); + FreeSpriteTilesByTag(ANIM_TAG_SAFARI_BAIT); + FreeSpritePaletteByTag(ANIM_TAG_SAFARI_BAIT); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index e15d76deb..d2f8a1377 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -171,7 +171,7 @@ static void HandleInputChooseAction(void) BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_BALL, 0); break; case 1: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_POKEBLOCK, 0); + BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_BAIT, 0); break; case 2: BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_GO_NEAR, 0); diff --git a/src/battle_main.c b/src/battle_main.c index d2735086f..572dda574 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -569,7 +569,7 @@ static void (*const sTurnActionsFuncsTable[])(void) = [B_ACTION_RUN] = HandleAction_Run, [B_ACTION_SAFARI_WATCH_CAREFULLY] = HandleAction_WatchesCarefully, [B_ACTION_SAFARI_BALL] = HandleAction_SafariZoneBallThrow, - [B_ACTION_SAFARI_POKEBLOCK] = HandleAction_ThrowBait, + [B_ACTION_SAFARI_BAIT] = HandleAction_ThrowBait, [B_ACTION_SAFARI_GO_NEAR] = HandleAction_ThrowRock, [B_ACTION_SAFARI_RUN] = HandleAction_SafariZoneRun, [B_ACTION_OLDMAN_THROW] = HandleAction_OldManBallThrow, @@ -3260,7 +3260,7 @@ static void HandleTurnActionSelectionState(void) case B_ACTION_SAFARI_BALL: ++gBattleCommunication[gActiveBattler]; break; - case B_ACTION_SAFARI_POKEBLOCK: + case B_ACTION_SAFARI_BAIT: case B_ACTION_SAFARI_GO_NEAR: ++gBattleCommunication[gActiveBattler]; break; diff --git a/src/battle_message.c b/src/battle_message.c index e17d3241b..55667de7d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -514,380 +514,380 @@ const u8 gUnknown_83FDD64[] = _("OAK: Hm! Excellent!\pIf you win, you earn prize const u8 gUnknown_83FDDEB[] = _("OAK: Hm…\nHow disappointing…\pIf you win, you earn prize money,\nand your POKéMON grow.\pBut if you lose, {B_PLAYER_NAME}, you end\nup paying prize money…\pHowever, since you had no warning\nthis time, I'll pay for you.\pBut things won't be this way once\nyou step outside these doors.\pThat's why you must strengthen your\nPOKéMON by battling wild POKéMON.\p"); const u8 *const gBattleStringsTable[] = { - gUnknown_83FB219, - gUnknown_83FB265, - gUnknown_83FB28E, - gUnknown_83FB2A4, - gUnknown_83FB2B6, - gUnknown_83FB2D1, - gUnknown_83FB2FC, - gUnknown_83FB31F, - gUnknown_83FB32E, - gUnknown_83FB343, - gUnknown_83FD1B8, - gUnknown_83FB36B, - gUnknown_83FB37F, - gUnknown_83FCBA5, - gUnknown_83FB394, - gUnknown_83FB3EA, - gUnknown_83FB400, - gUnknown_83FB40D, - gUnknown_83FB41A, - gUnknown_83FB433, - gUnknown_83FB451, - gUnknown_83FB508, - gUnknown_83FB545, - gUnknown_83FB555, - gUnknown_83FB565, - gUnknown_83FB57C, - gUnknown_83FB592, - gUnknown_83FB5A8, - gUnknown_83FB5BC, - gUnknown_83FB5CD, - gUnknown_83FB5E2, - gUnknown_83FB5F8, - gUnknown_83FB610, - gUnknown_83FB626, - gUnknown_83FB641, - gUnknown_83FB650, - gUnknown_83FB663, - gUnknown_83FB692, - gUnknown_83FB6A7, - gUnknown_83FB6BF, - gUnknown_83FB6D3, - gUnknown_83FB6E5, - gUnknown_83FB6F7, - gUnknown_83FB70F, - gUnknown_83FB73A, - gUnknown_83FB76A, - gUnknown_83FB78A, - gUnknown_83FB7A3, - gUnknown_83FB7BF, - gUnknown_83FB7D5, - gUnknown_83FB7EE, - gUnknown_83FB806, - gUnknown_83FB826, - gUnknown_83FB844, - gUnknown_83FB854, - gUnknown_83FB871, - gUnknown_83FB885, - gUnknown_83FB89D, - gUnknown_83FB8AE, - gUnknown_83FB8C5, - gUnknown_83FB8E0, - gUnknown_83FB8F3, - gUnknown_83FB914, - gUnknown_83FB921, - gUnknown_83FB935, - gUnknown_83FB946, - gUnknown_83FB97F, - gUnknown_83FB9B8, - gUnknown_83FB9D9, - gUnknown_83FB9FF, - gUnknown_83FBA2F, - gUnknown_83FBA41, - gUnknown_83FBA5E, - gUnknown_83FBA79, - gUnknown_83FBA8E, - gUnknown_83FBAA3, - gUnknown_83FBAB2, - gUnknown_83FBAC3, - gUnknown_83FBAF3, - gUnknown_83FBB11, - gUnknown_83FBB4C, - gUnknown_83FBB62, - gUnknown_83FBB71, - gUnknown_83FBB83, - gUnknown_83FBB99, - gBattleText_MistShroud, - gUnknown_83FBBD0, - gBattleText_GetPumped, - gUnknown_83FBBFF, - gUnknown_83FBC16, - gUnknown_83FBC2B, - gUnknown_83FBC4C, - gUnknown_83FBC74, - gUnknown_83FBC83, - gUnknown_83FBC99, - gUnknown_83FBCBE, - gUnknown_83FBCD1, - gUnknown_83FBCDD, - gUnknown_83FBCFC, - gUnknown_83FBD16, - gUnknown_83FBD2B, - gUnknown_83FBD43, - gUnknown_83FBD53, - gUnknown_83FBD74, - gUnknown_83FBD86, - gUnknown_83FBDA3, - gUnknown_83FBDC4, - gUnknown_83FBDE2, - gUnknown_83FBE00, - gUnknown_83FBE16, - gUnknown_83FBE2B, - gUnknown_83FBE4E, - gUnknown_83FBE61, - gUnknown_83FBE73, - gUnknown_83FBE8B, - gUnknown_83FBEA1, - gUnknown_83FBEBE, - gUnknown_83FBEE2, - gUnknown_83FBEFA, - gUnknown_83FBF0C, - gUnknown_83FBF23, - gUnknown_83FC687, - gUnknown_83FBF39, - gUnknown_83FBF51, - gUnknown_83FBF63, - gUnknown_83FBF76, - gUnknown_83FBF89, - gUnknown_83FBF99, - gUnknown_83FBFBF, - gUnknown_83FBFD3, - gUnknown_83FBFEA, - gUnknown_83FBFFC, - gUnknown_83FC011, - gUnknown_83FC02B, - gUnknown_83FC048, - gUnknown_83FC072, - gUnknown_83FC090, - gUnknown_83FC0C6, - gUnknown_83FC0DC, - gUnknown_83FC0EE, - gUnknown_83FC10C, - gUnknown_83FC11E, - gUnknown_83FC132, - gUnknown_83FC140, - gUnknown_83FC168, - gUnknown_83FC185, - gUnknown_83FC19D, - gUnknown_83FC1B1, - gUnknown_83FC1C6, - gUnknown_83FC1DB, - gUnknown_83FC1F1, - gUnknown_83FC224, - gUnknown_83FC231, - gUnknown_83FC254, - gUnknown_83FC26D, - gUnknown_83FC28A, - gUnknown_83FC670, - gUnknown_83FC2AA, - gUnknown_83FC69D, - gUnknown_83FC2C7, - gUnknown_83FC2E3, - gUnknown_83FC6D6, - gUnknown_83FC2FA, - gUnknown_83FC312, - gUnknown_83FC377, - gUnknown_83FC38A, - gUnknown_83FC39A, - gUnknown_83FC3AF, - gUnknown_83FC3C5, - gUnknown_83FC3EB, - gUnknown_83FC40E, - gUnknown_83FC421, - gUnknown_83FC439, - gUnknown_83FC461, - gUnknown_83FC6F8, - gUnknown_83FC483, - gUnknown_83FC4AB, - gUnknown_83FC4D6, - gUnknown_83FC4F0, - gUnknown_83FC518, - gUnknown_83FC53D, - gUnknown_83FC715, - gUnknown_83FC72B, - gUnknown_83FC745, - gUnknown_83FC75D, - gUnknown_83FC780, - gUnknown_83FC7B6, - gUnknown_83FC7D3, - gUnknown_83FC7EF, - gUnknown_83FC809, - gUnknown_83FC825, - gUnknown_83FC841, - gUnknown_83FC860, - gUnknown_83FC87B, - gUnknown_83FC895, - gUnknown_83FC8B1, - gUnknown_83FC8C2, - gUnknown_83FCB41, - gBattleText_Rose, - gUnknown_83FCB50, - gUnknown_83FCB59, - gUnknown_83FCB5F, - gBattleText_UnknownString3, - gUnknown_83FCB8F, - gUnknown_83FCB9A, - gUnknown_83FCBE4, - gUnknown_83FCBF4, - gUnknown_83FCC07, - gUnknown_83FCC33, - gUnknown_83FCC5B, - gUnknown_83FCC74, - sText_GotAwaySafely, - gUnknown_83FCCD2, - gUnknown_83FCDB3, - gUnknown_83FCDE2, - gUnknown_83FCDF1, - gUnknown_83FCDF2, - gUnknown_83FCE08, - gUnknown_83FCE17, - gUnknown_83FCE38, - gUnknown_83FCE50, - gUnknown_83FCE64, - gUnknown_83FCE78, - gUnknown_83FCE90, - gUnknown_83FCEA8, - gUnknown_83FCEBA, - gUnknown_83FCECE, - gUnknown_83FCEE3, - gUnknown_83FCEFB, - gUnknown_83FCF14, - gUnknown_83FCF2C, - gUnknown_83FCF40, - gUnknown_83FCF54, - gUnknown_83FCF6C, - gUnknown_83FCF7E, - gUnknown_83FCFA0, - gUnknown_83FCFC2, - gUnknown_83FCFE4, - gUnknown_83FD006, - gUnknown_83FD022, - gUnknown_83FD048, - gUnknown_83FD068, - gUnknown_83FD077, - gUnknown_83FD0A7, - gUnknown_83FD0CA, - sText_PlayerUsedItem, - sText_OldManUsedItem, - sText_TrainerBlockedBall, - sText_DontBeAThief, - sText_ItDodgedBall, - sText_YouMissedPkmn, - sText_PkmnBrokeFree, - sText_ItAppearedCaught, - sText_AarghAlmostHadIt, - sText_ShootSoClose, - sText_GotchaPkmnCaught, - sText_GotchaPkmnCaught2, - sText_GiveNicknameCaptured, - sText_PkmnSentToPC, - gUnknown_83FD82B, - gUnknown_83FD850, - gUnknown_83FD85F, - gUnknown_83FB525, - gUnknown_83FD0F1, - gUnknown_83FD111, - gUnknown_83FD124, - gUnknown_83FD135, - gUnknown_83FD14B, - gUnknown_83FD15A, - gUnknown_83FD16A, - gUnknown_83FD186, - gUnknown_83FD1DF, - gUnknown_83FD1FA, - gUnknown_83FD218, - gUnknown_83FD232, - gUnknown_83FD23F, - gUnknown_83FB218, - gUnknown_83FB218, - gUnknown_83FD24D, - gUnknown_83FD8B9, - gUnknown_83FD8D2, - gUnknown_83FD8E8, - gUnknown_83FD901, - gUnknown_83FD917, - gUnknown_83FD937, - gUnknown_83FD95C, - gUnknown_83FD999, - gUnknown_83FD9B2, - gUnknown_83FD9CC, - gUnknown_83FD9E9, - gUnknown_83FDA0B, - gUnknown_83FDA33, - gUnknown_83FDA4C, - gUnknown_83FC8D5, - gUnknown_83FC8ED, - gUnknown_83FC913, - gUnknown_83FC935, - gUnknown_83FC979, - gUnknown_83FC993, - gUnknown_83FC9AA, - gUnknown_83FC9C7, - gUnknown_83FC9E5, - gUnknown_83FCA03, - gUnknown_83FC554, - gUnknown_83FC576, - gUnknown_83FBAD2, - gUnknown_83FBAE5, - gUnknown_83FCC39, - gUnknown_83FC591, - sText_PlayerDefeatedLinkTrainerTrainer1, - gUnknown_83FC5A2, - gUnknown_83FC5CC, - gUnknown_83FC5E8, - gUnknown_83FCB75, - gUnknown_83FC5F6, - gUnknown_83FC79D, - gUnknown_83FBB2F, - gUnknown_83FB282, - gUnknown_83FB283, - gUnknown_83FC955, - gUnknown_83FB3AF, - gUnknown_83FDAB1, - gUnknown_83FCA13, - gUnknown_83FC208, - gUnknown_83FC60C, - gUnknown_83FB359, - gUnknown_83FCCA0, - gUnknown_83FCCBB, - gUnknown_83FC631, - gUnknown_83FCA49, - gUnknown_83FD97A, - sText_Trainer1UsedItem, - gUnknown_83FD876, - gUnknown_83FB3D3, - gUnknown_83FCA71, - gUnknown_83FCA8E, - gUnknown_83FB67B, - gUnknown_83FCBC5, - gUnknown_83FC900, - gUnknown_83FBC62, - gUnknown_83FB997, - gUnknown_83FB95E, - gUnknown_83FC646, - gUnknown_83FCAAA, - gUnknown_83FCAD1, - gUnknown_83FB534, - gUnknown_83FC337, - gUnknown_83FC347, - gUnknown_83FC357, - gUnknown_83FC65A, - gUnknown_83FCAEF, - gUnknown_83FDD64, - gUnknown_83FDDEB, - gUnknown_83FB484, - gUnknown_83FB4BE, - Text_MonSentToBoxInSomeonesPC, - Text_MonSentToBoxInBillsPC, - Text_MonSentToBoxSomeonesBoxFull, - Text_MonSentToBoxBillsBoxFull, - sText_PokedudeUsedItem, - gUnknown_83FDA4D, - gUnknown_83FDA7A, - gUnknown_83FDA8C, - gUnknown_83FB21C, - gUnknown_83FB262, - gUnknown_83FB4F7, - gUnknown_83FCB0C, - gUnknown_83FCB26, - gUnknown_83FD322, - gUnknown_83FD34D, - gUnknown_83FB21F, - gUnknown_83FB232, - gUnknown_83FB235, - gUnknown_83FB248 + [STRINGID_TRAINER1LOSETEXT - 12] = gUnknown_83FB219, + [STRINGID_PKMNGAINEDEXP - 12] = gUnknown_83FB265, + [STRINGID_PKMNGREWTOLV - 12] = gUnknown_83FB28E, + [STRINGID_PKMNLEARNEDMOVE - 12] = gUnknown_83FB2A4, + [STRINGID_TRYTOLEARNMOVE1 - 12] = gUnknown_83FB2B6, + [STRINGID_TRYTOLEARNMOVE2 - 12] = gUnknown_83FB2D1, + [STRINGID_TRYTOLEARNMOVE3 - 12] = gUnknown_83FB2FC, + [STRINGID_PKMNFORGOTMOVE - 12] = gUnknown_83FB31F, + [STRINGID_STOPLEARNINGMOVE - 12] = gUnknown_83FB32E, + [STRINGID_DIDNOTLEARNMOVE - 12] = gUnknown_83FB343, + [STRINGID_PKMNLEARNEDMOVE2 - 12] = gUnknown_83FD1B8, + [STRINGID_ATTACKMISSED - 12] = gUnknown_83FB36B, + [STRINGID_PKMNPROTECTEDITSELF - 12] = gUnknown_83FB37F, + [STRINGID_STATSWONTINCREASE2 - 12] = gUnknown_83FCBA5, + [STRINGID_AVOIDEDDAMAGE - 12] = gUnknown_83FB394, + [STRINGID_ITDOESNTAFFECT - 12] = gUnknown_83FB3EA, + [STRINGID_ATTACKERFAINTED - 12] = gUnknown_83FB400, + [STRINGID_TARGETFAINTED - 12] = gUnknown_83FB40D, + [STRINGID_PLAYERGOTMONEY - 12] = gUnknown_83FB41A, + [STRINGID_PLAYERWHITEOUT - 12] = gUnknown_83FB433, + [STRINGID_PLAYERWHITEOUT2 - 12] = gUnknown_83FB451, + [STRINGID_PREVENTSESCAPE - 12] = gUnknown_83FB508, + [STRINGID_HITXTIMES - 12] = gUnknown_83FB545, + [STRINGID_PKMNFELLASLEEP - 12] = gUnknown_83FB555, + [STRINGID_PKMNMADESLEEP - 12] = gUnknown_83FB565, + [STRINGID_PKMNALREADYASLEEP - 12] = gUnknown_83FB57C, + [STRINGID_PKMNALREADYASLEEP2 - 12] = gUnknown_83FB592, + [STRINGID_PKMNWASNTAFFECTED - 12] = gUnknown_83FB5A8, + [STRINGID_PKMNWASPOISONED - 12] = gUnknown_83FB5BC, + [STRINGID_PKMNPOISONEDBY - 12] = gUnknown_83FB5CD, + [STRINGID_PKMNHURTBYPOISON - 12] = gUnknown_83FB5E2, + [STRINGID_PKMNALREADYPOISONED - 12] = gUnknown_83FB5F8, + [STRINGID_PKMNBADLYPOISONED - 12] = gUnknown_83FB610, + [STRINGID_PKMNENERGYDRAINED - 12] = gUnknown_83FB626, + [STRINGID_PKMNWASBURNED - 12] = gUnknown_83FB641, + [STRINGID_PKMNBURNEDBY - 12] = gUnknown_83FB650, + [STRINGID_PKMNHURTBYBURN - 12] = gUnknown_83FB663, + [STRINGID_PKMNWASFROZEN - 12] = gUnknown_83FB692, + [STRINGID_PKMNFROZENBY - 12] = gUnknown_83FB6A7, + [STRINGID_PKMNISFROZEN - 12] = gUnknown_83FB6BF, + [STRINGID_PKMNWASDEFROSTED - 12] = gUnknown_83FB6D3, + [STRINGID_PKMNWASDEFROSTED2 - 12] = gUnknown_83FB6E5, + [STRINGID_PKMNWASDEFROSTEDBY - 12] = gUnknown_83FB6F7, + [STRINGID_PKMNWASPARALYZED - 12] = gUnknown_83FB70F, + [STRINGID_PKMNWASPARALYZEDBY - 12] = gUnknown_83FB73A, + [STRINGID_PKMNISPARALYZED - 12] = gUnknown_83FB76A, + [STRINGID_PKMNISALREADYPARALYZED - 12] = gUnknown_83FB78A, + [STRINGID_PKMNHEALEDPARALYSIS - 12] = gUnknown_83FB7A3, + [STRINGID_PKMNDREAMEATEN - 12] = gUnknown_83FB7BF, + [STRINGID_STATSWONTINCREASE - 12] = gUnknown_83FB7D5, + [STRINGID_STATSWONTDECREASE - 12] = gUnknown_83FB7EE, + [STRINGID_TEAMSTOPPEDWORKING - 12] = gUnknown_83FB806, + [STRINGID_FOESTOPPEDWORKING - 12] = gUnknown_83FB826, + [STRINGID_PKMNISCONFUSED - 12] = gUnknown_83FB844, + [STRINGID_PKMNHEALEDCONFUSION - 12] = gUnknown_83FB854, + [STRINGID_PKMNWASCONFUSED - 12] = gUnknown_83FB871, + [STRINGID_PKMNALREADYCONFUSED - 12] = gUnknown_83FB885, + [STRINGID_PKMNFELLINLOVE - 12] = gUnknown_83FB89D, + [STRINGID_PKMNINLOVE - 12] = gUnknown_83FB8AE, + [STRINGID_PKMNIMMOBILIZEDBYLOVE - 12] = gUnknown_83FB8C5, + [STRINGID_PKMNBLOWNAWAY - 12] = gUnknown_83FB8E0, + [STRINGID_PKMNCHANGEDTYPE - 12] = gUnknown_83FB8F3, + [STRINGID_PKMNFLINCHED - 12] = gUnknown_83FB914, + [STRINGID_PKMNREGAINEDHEALTH - 12] = gUnknown_83FB921, + [STRINGID_PKMNHPFULL - 12] = gUnknown_83FB935, + [STRINGID_PKMNRAISEDSPDEF - 12] = gUnknown_83FB946, + [STRINGID_PKMNRAISEDDEF - 12] = gUnknown_83FB97F, + [STRINGID_PKMNCOVEREDBYVEIL - 12] = gUnknown_83FB9B8, + [STRINGID_PKMNUSEDSAFEGUARD - 12] = gUnknown_83FB9D9, + [STRINGID_PKMNSAFEGUARDEXPIRED - 12] = gUnknown_83FB9FF, + [STRINGID_PKMNWENTTOSLEEP - 12] = gUnknown_83FBA2F, + [STRINGID_PKMNSLEPTHEALTHY - 12] = gUnknown_83FBA41, + [STRINGID_PKMNWHIPPEDWHIRLWIND - 12] = gUnknown_83FBA5E, + [STRINGID_PKMNTOOKSUNLIGHT - 12] = gUnknown_83FBA79, + [STRINGID_PKMNLOWEREDHEAD - 12] = gUnknown_83FBA8E, + [STRINGID_PKMNISGLOWING - 12] = gUnknown_83FBAA3, + [STRINGID_PKMNFLEWHIGH - 12] = gUnknown_83FBAB2, + [STRINGID_PKMNDUGHOLE - 12] = gUnknown_83FBAC3, + [STRINGID_PKMNSQUEEZEDBYBIND - 12] = gUnknown_83FBAF3, + [STRINGID_PKMNTRAPPEDINVORTEX - 12] = gUnknown_83FBB11, + [STRINGID_PKMNWRAPPEDBY - 12] = gUnknown_83FBB4C, + [STRINGID_PKMNCLAMPED - 12] = gUnknown_83FBB62, + [STRINGID_PKMNHURTBY - 12] = gUnknown_83FBB71, + [STRINGID_PKMNFREEDFROM - 12] = gUnknown_83FBB83, + [STRINGID_PKMNCRASHED - 12] = gUnknown_83FBB99, + [STRINGID_PKMNSHROUDEDINMIST - 12] = gBattleText_MistShroud, + [STRINGID_PKMNPROTECTEDBYMIST - 12] = gUnknown_83FBBD0, + [STRINGID_PKMNGETTINGPUMPED - 12] = gBattleText_GetPumped, + [STRINGID_PKMNHITWITHRECOIL - 12] = gUnknown_83FBBFF, + [STRINGID_PKMNPROTECTEDITSELF2 - 12] = gUnknown_83FBC16, + [STRINGID_PKMNBUFFETEDBYSANDSTORM - 12] = gUnknown_83FBC2B, + [STRINGID_PKMNPELTEDBYHAIL - 12] = gUnknown_83FBC4C, + [STRINGID_PKMNSEEDED - 12] = gUnknown_83FBC74, + [STRINGID_PKMNEVADEDATTACK - 12] = gUnknown_83FBC83, + [STRINGID_PKMNSAPPEDBYLEECHSEED - 12] = gUnknown_83FBC99, + [STRINGID_PKMNFASTASLEEP - 12] = gUnknown_83FBCBE, + [STRINGID_PKMNWOKEUP - 12] = gUnknown_83FBCD1, + [STRINGID_PKMNUPROARKEPTAWAKE - 12] = gUnknown_83FBCDD, + [STRINGID_PKMNWOKEUPINUPROAR - 12] = gUnknown_83FBCFC, + [STRINGID_PKMNCAUSEDUPROAR - 12] = gUnknown_83FBD16, + [STRINGID_PKMNMAKINGUPROAR - 12] = gUnknown_83FBD2B, + [STRINGID_PKMNCALMEDDOWN - 12] = gUnknown_83FBD43, + [STRINGID_PKMNCANTSLEEPINUPROAR - 12] = gUnknown_83FBD53, + [STRINGID_PKMNSTOCKPILED - 12] = gUnknown_83FBD74, + [STRINGID_PKMNCANTSTOCKPILE - 12] = gUnknown_83FBD86, + [STRINGID_PKMNCANTSLEEPINUPROAR2 - 12] = gUnknown_83FBDA3, + [STRINGID_UPROARKEPTPKMNAWAKE - 12] = gUnknown_83FBDC4, + [STRINGID_PKMNSTAYEDAWAKEUSING - 12] = gUnknown_83FBDE2, + [STRINGID_PKMNSTORINGENERGY - 12] = gUnknown_83FBE00, + [STRINGID_PKMNUNLEASHEDENERGY - 12] = gUnknown_83FBE16, + [STRINGID_PKMNFATIGUECONFUSION - 12] = gUnknown_83FBE2B, + [STRINGID_PKMNPICKEDUPITEM - 12] = gUnknown_83FBE4E, + [STRINGID_PKMNUNAFFECTED - 12] = gUnknown_83FBE61, + [STRINGID_PKMNTRANSFORMEDINTO - 12] = gUnknown_83FBE73, + [STRINGID_PKMNMADESUBSTITUTE - 12] = gUnknown_83FBE8B, + [STRINGID_PKMNHASSUBSTITUTE - 12] = gUnknown_83FBEA1, + [STRINGID_SUBSTITUTEDAMAGED - 12] = gUnknown_83FBEBE, + [STRINGID_PKMNSUBSTITUTEFADED - 12] = gUnknown_83FBEE2, + [STRINGID_PKMNMUSTRECHARGE - 12] = gUnknown_83FBEFA, + [STRINGID_PKMNRAGEBUILDING - 12] = gUnknown_83FBF0C, + [STRINGID_PKMNMOVEWASDISABLED - 12] = gUnknown_83FBF23, + [STRINGID_PKMNMOVEISDISABLED - 12] = gUnknown_83FC687, + [STRINGID_PKMNMOVEDISABLEDNOMORE - 12] = gUnknown_83FBF39, + [STRINGID_PKMNGOTENCORE - 12] = gUnknown_83FBF51, + [STRINGID_PKMNENCOREENDED - 12] = gUnknown_83FBF63, + [STRINGID_PKMNTOOKAIM - 12] = gUnknown_83FBF76, + [STRINGID_PKMNSKETCHEDMOVE - 12] = gUnknown_83FBF89, + [STRINGID_PKMNTRYINGTOTAKEFOE - 12] = gUnknown_83FBF99, + [STRINGID_PKMNTOOKFOE - 12] = gUnknown_83FBFBF, + [STRINGID_PKMNREDUCEDPP - 12] = gUnknown_83FBFD3, + [STRINGID_PKMNSTOLEITEM - 12] = gUnknown_83FBFEA, + [STRINGID_TARGETCANTESCAPENOW - 12] = gUnknown_83FBFFC, + [STRINGID_PKMNFELLINTONIGHTMARE - 12] = gUnknown_83FC011, + [STRINGID_PKMNLOCKEDINNIGHTMARE - 12] = gUnknown_83FC02B, + [STRINGID_PKMNLAIDCURSE - 12] = gUnknown_83FC048, + [STRINGID_PKMNAFFLICTEDBYCURSE - 12] = gUnknown_83FC072, + [STRINGID_SPIKESSCATTERED - 12] = gUnknown_83FC090, + [STRINGID_PKMNHURTBYSPIKES - 12] = gUnknown_83FC0C6, + [STRINGID_PKMNIDENTIFIED - 12] = gUnknown_83FC0DC, + [STRINGID_PKMNPERISHCOUNTFELL - 12] = gUnknown_83FC0EE, + [STRINGID_PKMNBRACEDITSELF - 12] = gUnknown_83FC10C, + [STRINGID_PKMNENDUREDHIT - 12] = gUnknown_83FC11E, + [STRINGID_MAGNITUDESTRENGTH - 12] = gUnknown_83FC132, + [STRINGID_PKMNCUTHPMAXEDATTACK - 12] = gUnknown_83FC140, + [STRINGID_PKMNCOPIEDSTATCHANGES - 12] = gUnknown_83FC168, + [STRINGID_PKMNGOTFREE - 12] = gUnknown_83FC185, + [STRINGID_PKMNSHEDLEECHSEED - 12] = gUnknown_83FC19D, + [STRINGID_PKMNBLEWAWAYSPIKES - 12] = gUnknown_83FC1B1, + [STRINGID_PKMNFLEDFROMBATTLE - 12] = gUnknown_83FC1C6, + [STRINGID_PKMNFORESAWATTACK - 12] = gUnknown_83FC1DB, + [STRINGID_PKMNTOOKATTACK - 12] = gUnknown_83FC1F1, + [STRINGID_PKMNATTACK - 12] = gUnknown_83FC224, + [STRINGID_PKMNCENTERATTENTION - 12] = gUnknown_83FC231, + [STRINGID_PKMNCHARGINGPOWER - 12] = gUnknown_83FC254, + [STRINGID_NATUREPOWERTURNEDINTO - 12] = gUnknown_83FC26D, + [STRINGID_PKMNSTATUSNORMAL - 12] = gUnknown_83FC28A, + [STRINGID_PKMNHASNOMOVESLEFT - 12] = gUnknown_83FC670, + [STRINGID_PKMNSUBJECTEDTOTORMENT - 12] = gUnknown_83FC2AA, + [STRINGID_PKMNCANTUSEMOVETORMENT - 12] = gUnknown_83FC69D, + [STRINGID_PKMNTIGHTENINGFOCUS - 12] = gUnknown_83FC2C7, + [STRINGID_PKMNFELLFORTAUNT - 12] = gUnknown_83FC2E3, + [STRINGID_PKMNCANTUSEMOVETAUNT - 12] = gUnknown_83FC6D6, + [STRINGID_PKMNREADYTOHELP - 12] = gUnknown_83FC2FA, + [STRINGID_PKMNSWITCHEDITEMS - 12] = gUnknown_83FC312, + [STRINGID_PKMNCOPIEDFOE - 12] = gUnknown_83FC377, + [STRINGID_PKMNMADEWISH - 12] = gUnknown_83FC38A, + [STRINGID_PKMNWISHCAMETRUE - 12] = gUnknown_83FC39A, + [STRINGID_PKMNPLANTEDROOTS - 12] = gUnknown_83FC3AF, + [STRINGID_PKMNABSORBEDNUTRIENTS - 12] = gUnknown_83FC3C5, + [STRINGID_PKMNANCHOREDITSELF - 12] = gUnknown_83FC3EB, + [STRINGID_PKMNWASMADEDROWSY - 12] = gUnknown_83FC40E, + [STRINGID_PKMNKNOCKEDOFF - 12] = gUnknown_83FC421, + [STRINGID_PKMNSWAPPEDABILITIES - 12] = gUnknown_83FC439, + [STRINGID_PKMNSEALEDOPPONENTMOVE - 12] = gUnknown_83FC461, + [STRINGID_PKMNCANTUSEMOVESEALED - 12] = gUnknown_83FC6F8, + [STRINGID_PKMNWANTSGRUDGE - 12] = gUnknown_83FC483, + [STRINGID_PKMNLOSTPPGRUDGE - 12] = gUnknown_83FC4AB, + [STRINGID_PKMNSHROUDEDITSELF - 12] = gUnknown_83FC4D6, + [STRINGID_PKMNMOVEBOUNCED - 12] = gUnknown_83FC4F0, + [STRINGID_PKMNWAITSFORTARGET - 12] = gUnknown_83FC518, + [STRINGID_PKMNSNATCHEDMOVE - 12] = gUnknown_83FC53D, + [STRINGID_PKMNMADEITRAIN - 12] = gUnknown_83FC715, + [STRINGID_PKMNRAISEDSPEED - 12] = gUnknown_83FC72B, + [STRINGID_PKMNPROTECTEDBY - 12] = gUnknown_83FC745, + [STRINGID_PKMNPREVENTSUSAGE - 12] = gUnknown_83FC75D, + [STRINGID_PKMNRESTOREDHPUSING - 12] = gUnknown_83FC780, + [STRINGID_PKMNCHANGEDTYPEWITH - 12] = gUnknown_83FC7B6, + [STRINGID_PKMNPREVENTSPARALYSISWITH - 12] = gUnknown_83FC7D3, + [STRINGID_PKMNPREVENTSROMANCEWITH - 12] = gUnknown_83FC7EF, + [STRINGID_PKMNPREVENTSPOISONINGWITH - 12] = gUnknown_83FC809, + [STRINGID_PKMNPREVENTSCONFUSIONWITH - 12] = gUnknown_83FC825, + [STRINGID_PKMNRAISEDFIREPOWERWITH - 12] = gUnknown_83FC841, + [STRINGID_PKMNANCHORSITSELFWITH - 12] = gUnknown_83FC860, + [STRINGID_PKMNCUTSATTACKWITH - 12] = gUnknown_83FC87B, + [STRINGID_PKMNPREVENTSSTATLOSSWITH - 12] = gUnknown_83FC895, + [STRINGID_PKMNHURTSWITH - 12] = gUnknown_83FC8B1, + [STRINGID_PKMNTRACED - 12] = gUnknown_83FC8C2, + [STRINGID_STATSHARPLY - 12] = gUnknown_83FCB41, + [STRINGID_STATROSE - 12] = gBattleText_Rose, + [STRINGID_STATHARSHLY - 12] = gUnknown_83FCB50, + [STRINGID_STATFELL - 12] = gUnknown_83FCB59, + [STRINGID_PKMNSSTATCHANGED - 12] = gUnknown_83FCB5F, + [STRINGID_PKMNSSTATCHANGED2 - 12] = gBattleText_UnknownString3, + [STRINGID_PKMNSSTATCHANGED3 - 12] = gUnknown_83FCB8F, + [STRINGID_PKMNSSTATCHANGED4 - 12] = gUnknown_83FCB9A, + [STRINGID_CRITICALHIT - 12] = gUnknown_83FCBE4, + [STRINGID_ONEHITKO - 12] = gUnknown_83FCBF4, + [STRINGID_123POOF - 12] = gUnknown_83FCC07, + [STRINGID_ANDELLIPSIS - 12] = gUnknown_83FCC33, + [STRINGID_NOTVERYEFFECTIVE - 12] = gUnknown_83FCC5B, + [STRINGID_SUPEREFFECTIVE - 12] = gUnknown_83FCC74, + [STRINGID_GOTAWAYSAFELY - 12] = sText_GotAwaySafely, + [STRINGID_WILDPKMNFLED - 12] = gUnknown_83FCCD2, + [STRINGID_NORUNNINGFROMTRAINERS - 12] = gUnknown_83FCDB3, + [STRINGID_CANTESCAPE - 12] = gUnknown_83FCDE2, + [STRINGID_DONTLEAVEBIRCH - 12] = gUnknown_83FCDF1, + [STRINGID_BUTNOTHINGHAPPENED - 12] = gUnknown_83FCDF2, + [STRINGID_BUTITFAILED - 12] = gUnknown_83FCE08, + [STRINGID_ITHURTCONFUSION - 12] = gUnknown_83FCE17, + [STRINGID_MIRRORMOVEFAILED - 12] = gUnknown_83FCE38, + [STRINGID_STARTEDTORAIN - 12] = gUnknown_83FCE50, + [STRINGID_DOWNPOURSTARTED - 12] = gUnknown_83FCE64, + [STRINGID_RAINCONTINUES - 12] = gUnknown_83FCE78, + [STRINGID_DOWNPOURCONTINUES - 12] = gUnknown_83FCE90, + [STRINGID_RAINSTOPPED - 12] = gUnknown_83FCEA8, + [STRINGID_SANDSTORMBREWED - 12] = gUnknown_83FCEBA, + [STRINGID_SANDSTORMRAGES - 12] = gUnknown_83FCECE, + [STRINGID_SANDSTORMSUBSIDED - 12] = gUnknown_83FCEE3, + [STRINGID_SUNLIGHTGOTBRIGHT - 12] = gUnknown_83FCEFB, + [STRINGID_SUNLIGHTSTRONG - 12] = gUnknown_83FCF14, + [STRINGID_SUNLIGHTFADED - 12] = gUnknown_83FCF2C, + [STRINGID_STARTEDHAIL - 12] = gUnknown_83FCF40, + [STRINGID_HAILCONTINUES - 12] = gUnknown_83FCF54, + [STRINGID_HAILSTOPPED - 12] = gUnknown_83FCF6C, + [STRINGID_FAILEDTOSPITUP - 12] = gUnknown_83FCF7E, + [STRINGID_FAILEDTOSWALLOW - 12] = gUnknown_83FCFA0, + [STRINGID_WINDBECAMEHEATWAVE - 12] = gUnknown_83FCFC2, + [STRINGID_STATCHANGESGONE - 12] = gUnknown_83FCFE4, + [STRINGID_COINSSCATTERED - 12] = gUnknown_83FD006, + [STRINGID_TOOWEAKFORSUBSTITUTE - 12] = gUnknown_83FD022, + [STRINGID_SHAREDPAIN - 12] = gUnknown_83FD048, + [STRINGID_BELLCHIMED - 12] = gUnknown_83FD068, + [STRINGID_FAINTINTHREE - 12] = gUnknown_83FD077, + [STRINGID_NOPPLEFT - 12] = gUnknown_83FD0A7, + [STRINGID_BUTNOPPLEFT - 12] = gUnknown_83FD0CA, + [STRINGID_PLAYERUSEDITEM - 12] = sText_PlayerUsedItem, + [STRINGID_OLDMANUSEDITEM - 12] = sText_OldManUsedItem, + [STRINGID_TRAINERBLOCKEDBALL - 12] = sText_TrainerBlockedBall, + [STRINGID_DONTBEATHIEF - 12] = sText_DontBeAThief, + [STRINGID_ITDODGEDBALL - 12] = sText_ItDodgedBall, + [STRINGID_YOUMISSEDPKMN - 12] = sText_YouMissedPkmn, + [STRINGID_PKMNBROKEFREE - 12] = sText_PkmnBrokeFree, + [STRINGID_ITAPPEAREDCAUGHT - 12] = sText_ItAppearedCaught, + [STRINGID_AARGHALMOSTHADIT - 12] = sText_AarghAlmostHadIt, + [STRINGID_SHOOTSOCLOSE - 12] = sText_ShootSoClose, + [STRINGID_GOTCHAPKMNCAUGHT - 12] = sText_GotchaPkmnCaught, + [STRINGID_GOTCHAPKMNCAUGHT2 - 12] = sText_GotchaPkmnCaught2, + [STRINGID_GIVENICKNAMECAPTURED - 12] = sText_GiveNicknameCaptured, + [STRINGID_PKMNSENTTOPC - 12] = sText_PkmnSentToPC, + [STRINGID_PKMNDATAADDEDTODEX - 12] = gUnknown_83FD82B, + [STRINGID_ITISRAINING - 12] = gUnknown_83FD850, + [STRINGID_SANDSTORMISRAGING - 12] = gUnknown_83FD85F, + [STRINGID_CANTESCAPE2 - 12] = gUnknown_83FB525, + [STRINGID_PKMNIGNORESASLEEP - 12] = gUnknown_83FD0F1, + [STRINGID_PKMNIGNOREDORDERS - 12] = gUnknown_83FD111, + [STRINGID_PKMNBEGANTONAP - 12] = gUnknown_83FD124, + [STRINGID_PKMNLOAFING - 12] = gUnknown_83FD135, + [STRINGID_PKMNWONTOBEY - 12] = gUnknown_83FD14B, + [STRINGID_PKMNTURNEDAWAY - 12] = gUnknown_83FD15A, + [STRINGID_PKMNPRETENDNOTNOTICE - 12] = gUnknown_83FD16A, + [STRINGID_ENEMYABOUTTOSWITCHPKMN - 12] = gUnknown_83FD186, + [STRINGID_THREWROCK - 12] = gUnknown_83FD1DF, + [STRINGID_THREWBAIT - 12] = gUnknown_83FD1FA, + [STRINGID_PKMNWATCHINGCAREFULLY - 12] = gUnknown_83FD218, + [STRINGID_PKMNANGRY - 12] = gUnknown_83FD232, + [STRINGID_PKMNEATING - 12] = gUnknown_83FD23F, + [STRINGID_DUMMY288 - 12] = gUnknown_83FB218, + [STRINGID_DUMMY289 - 12] = gUnknown_83FB218, + [STRINGID_OUTOFSAFARIBALLS - 12] = gUnknown_83FD24D, + [STRINGID_PKMNSITEMCUREDPARALYSIS - 12] = gUnknown_83FD8B9, + [STRINGID_PKMNSITEMCUREDPOISON - 12] = gUnknown_83FD8D2, + [STRINGID_PKMNSITEMHEALEDBURN - 12] = gUnknown_83FD8E8, + [STRINGID_PKMNSITEMDEFROSTEDIT - 12] = gUnknown_83FD901, + [STRINGID_PKMNSITEMWOKEIT - 12] = gUnknown_83FD917, + [STRINGID_PKMNSITEMSNAPPEDOUT - 12] = gUnknown_83FD937, + [STRINGID_PKMNSITEMCUREDPROBLEM - 12] = gUnknown_83FD95C, + [STRINGID_PKMNSITEMRESTOREDHEALTH - 12] = gUnknown_83FD999, + [STRINGID_PKMNSITEMRESTOREDPP - 12] = gUnknown_83FD9B2, + [STRINGID_PKMNSITEMRESTOREDSTATUS - 12] = gUnknown_83FD9CC, + [STRINGID_PKMNSITEMRESTOREDHPALITTLE - 12] = gUnknown_83FD9E9, + [STRINGID_ITEMALLOWSONLYYMOVE - 12] = gUnknown_83FDA0B, + [STRINGID_PKMNHUNGONWITHX - 12] = gUnknown_83FDA33, + [STRINGID_EMPTYSTRING3 - 12] = gUnknown_83FDA4C, + [STRINGID_PKMNSXPREVENTSBURNS - 12] = gUnknown_83FC8D5, + [STRINGID_PKMNSXBLOCKSY - 12] = gUnknown_83FC8ED, + [STRINGID_PKMNSXRESTOREDHPALITTLE2 - 12] = gUnknown_83FC913, + [STRINGID_PKMNSXWHIPPEDUPSANDSTORM - 12] = gUnknown_83FC935, + [STRINGID_PKMNSXPREVENTSYLOSS - 12] = gUnknown_83FC979, + [STRINGID_PKMNSXINFATUATEDY - 12] = gUnknown_83FC993, + [STRINGID_PKMNSXMADEYINEFFECTIVE - 12] = gUnknown_83FC9AA, + [STRINGID_PKMNSXCUREDYPROBLEM - 12] = gUnknown_83FC9C7, + [STRINGID_ITSUCKEDLIQUIDOOZE - 12] = gUnknown_83FC9E5, + [STRINGID_PKMNTRANSFORMED - 12] = gUnknown_83FCA03, + [STRINGID_ELECTRICITYWEAKENED - 12] = gUnknown_83FC554, + [STRINGID_FIREWEAKENED - 12] = gUnknown_83FC576, + [STRINGID_PKMNHIDUNDERWATER - 12] = gUnknown_83FBAD2, + [STRINGID_PKMNSPRANGUP - 12] = gUnknown_83FBAE5, + [STRINGID_HMMOVESCANTBEFORGOTTEN - 12] = gUnknown_83FCC39, + [STRINGID_XFOUNDONEY - 12] = gUnknown_83FC591, + [STRINGID_PLAYERDEFEATEDTRAINER1 - 12] = sText_PlayerDefeatedLinkTrainerTrainer1, + [STRINGID_SOOTHINGAROMA - 12] = gUnknown_83FC5A2, + [STRINGID_ITEMSCANTBEUSEDNOW - 12] = gUnknown_83FC5CC, + [STRINGID_FORXCOMMAYZ - 12] = gUnknown_83FC5E8, + [STRINGID_USINGXTHEYOFZN - 12] = gUnknown_83FCB75, + [STRINGID_PKMNUSEDXTOGETPUMPED - 12] = gUnknown_83FC5F6, + [STRINGID_PKMNSXMADEYUSELESS - 12] = gUnknown_83FC79D, + [STRINGID_PKMNTRAPPEDBYSANDTOMB - 12] = gUnknown_83FBB2F, + [STRINGID_EMPTYSTRING4 - 12] = gUnknown_83FB282, + [STRINGID_ABOOSTED - 12] = gUnknown_83FB283, + [STRINGID_PKMNSXINTENSIFIEDSUN - 12] = gUnknown_83FC955, + [STRINGID_PKMNMAKESGROUNDMISS - 12] = gUnknown_83FB3AF, + [STRINGID_YOUTHROWABALLNOWRIGHT - 12] = gUnknown_83FDAB1, + [STRINGID_PKMNSXTOOKATTACK - 12] = gUnknown_83FCA13, + [STRINGID_PKMNCHOSEXASDESTINY - 12] = gUnknown_83FC208, + [STRINGID_PKMNLOSTFOCUS - 12] = gUnknown_83FC60C, + [STRINGID_USENEXTPKMN - 12] = gUnknown_83FB359, + [STRINGID_PKMNFLEDUSINGITS - 12] = gUnknown_83FCCA0, + [STRINGID_PKMNFLEDUSING - 12] = gUnknown_83FCCBB, + [STRINGID_PKMNWASDRAGGEDOUT - 12] = gUnknown_83FC631, + [STRINGID_PREVENTEDFROMWORKING - 12] = gUnknown_83FCA49, + [STRINGID_PKMNSITEMNORMALIZEDSTATUS - 12] = gUnknown_83FD97A, + [STRINGID_TRAINER1USEDITEM - 12] = sText_Trainer1UsedItem, + [STRINGID_BOXISFULL - 12] = gUnknown_83FD876, + [STRINGID_PKMNAVOIDEDATTACK - 12] = gUnknown_83FB3D3, + [STRINGID_PKMNSXMADEITINEFFECTIVE - 12] = gUnknown_83FCA71, + [STRINGID_PKMNSXPREVENTSFLINCHING - 12] = gUnknown_83FCA8E, + [STRINGID_PKMNALREADYHASBURN - 12] = gUnknown_83FB67B, + [STRINGID_STATSWONTDECREASE2 - 12] = gUnknown_83FCBC5, + [STRINGID_PKMNSXBLOCKSY2 - 12] = gUnknown_83FC900, + [STRINGID_PKMNSXWOREOFF - 12] = gUnknown_83FBC62, + [STRINGID_PKMNRAISEDDEFALITTLE - 12] = gUnknown_83FB997, + [STRINGID_PKMNRAISEDSPDEFALITTLE - 12] = gUnknown_83FB95E, + [STRINGID_THEWALLSHATTERED - 12] = gUnknown_83FC646, + [STRINGID_PKMNSXPREVENTSYSZ - 12] = gUnknown_83FCAAA, + [STRINGID_PKMNSXCUREDITSYPROBLEM - 12] = gUnknown_83FCAD1, + [STRINGID_ATTACKERCANTESCAPE - 12] = gUnknown_83FB534, + [STRINGID_PKMNOBTAINEDX - 12] = gUnknown_83FC337, + [STRINGID_PKMNOBTAINEDX2 - 12] = gUnknown_83FC347, + [STRINGID_PKMNOBTAINEDXYOBTAINEDZ - 12] = gUnknown_83FC357, + [STRINGID_BUTNOEFFECT - 12] = gUnknown_83FC65A, + [STRINGID_PKMNSXHADNOEFFECTONY - 12] = gUnknown_83FCAEF, + [STRINGID_OAKPLAYERWON - 12] = gUnknown_83FDD64, + [STRINGID_OAKPLAYERLOST - 12] = gUnknown_83FDDEB, + [STRINGID_PLAYERLOSTAGAINSTENEMYTRAINER - 12] = gUnknown_83FB484, + [STRINGID_PLAYERPAIDPRIZEMONEY - 12] = gUnknown_83FB4BE, + [STRINGID_PKMNTRANSFERREDSOMEONESPC - 12] = Text_MonSentToBoxInSomeonesPC, + [STRINGID_PKMNTRANSFERREDBILLSPC - 12] = Text_MonSentToBoxInBillsPC, + [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = Text_MonSentToBoxSomeonesBoxFull, + [STRINGID_PKMNBOXBILLSPCFULL - 12] = Text_MonSentToBoxBillsBoxFull, + [STRINGID_POKEDUDEUSED - 12] = sText_PokedudeUsedItem, + [STRINGID_POKEFLUTECATCHY - 12] = gUnknown_83FDA4D, + [STRINGID_POKEFLUTE - 12] = gUnknown_83FDA7A, + [STRINGID_MONHEARINGFLUTEAWOKE - 12] = gUnknown_83FDA8C, + [STRINGID_TRAINER2CLASS - 12] = gUnknown_83FB21C, + [STRINGID_TRAINER2NAME - 12] = gUnknown_83FB262, + [STRINGID_PLAYERWHITEDOUT - 12] = gUnknown_83FB4F7, + [STRINGID_MONTOOSCAREDTOMOVE - 12] = gUnknown_83FCB0C, + [STRINGID_GHOSTGETOUTGETOUT - 12] = gUnknown_83FCB26, + [STRINGID_SILPHSCOPEUNVEILED - 12] = gUnknown_83FD322, + [STRINGID_GHOSTWASMAROWAK - 12] = gUnknown_83FD34D, + [STRINGID_TRAINER1MON1COMEBACK - 12] = gUnknown_83FB21F, + [STRINGID_TRAINER1WINTEXT - 12] = gUnknown_83FB232, + [STRINGID_TRAINER1MON2COMEBACK - 12] = gUnknown_83FB235, + [STRINGID_TRAINER1MON1AND2COMEBACK - 12] = gUnknown_83FB248 }; const u16 gMissStringIds[] = { diff --git a/src/battle_setup.c b/src/battle_setup.c index ee923d6c7..0f9ffd655 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -417,7 +417,7 @@ static void CB2_EndWildBattle(void) else { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = sub_807E3EC; + gFieldCallback = FieldCB_SafariZoneRanOutOfBalls; } } @@ -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); @@ -952,7 +952,7 @@ static void CB2_EndRematchBattle(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetBattledTrainerFlag(); sub_810CDE8(); - sub_81138F8(); + ResetDeferredLinkEvent(); } } @@ -994,8 +994,7 @@ void PlayTrainerEncounterMusic(void) { u16 music; - if (gQuestLogState != 2 - && gQuestLogState != 3 + if (!QL_IS_PLAYBACK_STATE && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC) { 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/event_data.c b/src/event_data.c index c012a4a59..6cd6f277b 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -179,7 +179,7 @@ u16 *GetVarPointer(u16 idx) return NULL; if (idx < SPECIAL_VARS_START) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: default: @@ -250,7 +250,7 @@ u8 *GetFlagAddr(u16 idx) return NULL; if (idx < SPECIAL_FLAGS_START) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: default: diff --git a/src/event_object_lock.c b/src/event_object_lock.c index aa9a99895..389d16c05 100644 --- a/src/event_object_lock.c +++ b/src/event_object_lock.c @@ -4,6 +4,8 @@ #include "event_object_movement.h" #include "script_movement.h" #include "event_data.h" +#include "constants/maps.h" +#include "constants/event_objects.h" bool8 walkrun_is_standing_still(void) { @@ -13,18 +15,18 @@ bool8 walkrun_is_standing_still(void) return TRUE; } -void sub_8069570(u8 taskId) +void Task_WaitPlayerStopMoving(u8 taskId) { if (walkrun_is_standing_still()) { - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); DestroyTask(taskId); } } -bool8 sub_8069590(void) +bool8 NativeScript_WaitPlayerStopMoving(void) { - if (FuncIsActiveTask(sub_8069570)) + if (FuncIsActiveTask(Task_WaitPlayerStopMoving)) return FALSE; else { @@ -36,16 +38,16 @@ bool8 sub_8069590(void) void ScriptFreezeObjectEvents(void) { FreezeObjectEvents(); - CreateTask(sub_8069570, 80); + CreateTask(Task_WaitPlayerStopMoving, 80); } -void sub_80695CC(u8 taskId) +void Task_WaitPlayerAndTargetNPCStopMoving(u8 taskId) { struct Task * task = &gTasks[taskId]; if (task->data[0] == 0 && walkrun_is_standing_still() == TRUE) { - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); task->data[0] = 1; } @@ -59,9 +61,9 @@ void sub_80695CC(u8 taskId) DestroyTask(taskId); } -bool8 sub_8069648(void) +bool8 NativeScript_WaitPlayerAndTargetNPCStopMoving(void) { - if (FuncIsActiveTask(sub_80695CC)) + if (FuncIsActiveTask(Task_WaitPlayerAndTargetNPCStopMoving)) return FALSE; else { @@ -75,7 +77,7 @@ void LockSelectedObjectEvent(void) u8 taskId; FreezeObjectEventsExceptOne(gSelectedObjectEvent); - taskId = CreateTask(sub_80695CC, 80); + taskId = CreateTask(Task_WaitPlayerAndTargetNPCStopMoving, 80); if (!gObjectEvents[gSelectedObjectEvent].singleMovementActive) { FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]); @@ -85,7 +87,7 @@ void LockSelectedObjectEvent(void) void sub_80696C0(void) { - u8 objectEventId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objectEventId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); @@ -96,7 +98,7 @@ void UnionRoom_UnlockPlayerAndChatPartner(void) u8 objectEventId; if (gObjectEvents[gSelectedObjectEvent].active) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSelectedObjectEvent]); - objectEventId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + objectEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objectEventId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5361d05dc..7f69963a3 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2805,7 +2805,7 @@ u8 sub_805FC9C(u8 localId, u8 mapNum, u8 mapGroup) return gObjectEvents[objectEventId].trainerType; } -u16 sub_805FCD8(u8 localId, u8 mapNum, u8 mapGroup) +u16 GetObjectEventFlagByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->trainerType; } @@ -5530,7 +5530,7 @@ static void sub_8064544(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->heldMovementFinished = TRUE; if (objectEvent->graphicsId == 0x61) - sub_806DE28(objectEvent); + HandleBoulderFallThroughHole(objectEvent); } } @@ -5550,7 +5550,7 @@ static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct objectEvent->movementActionId = animId; sprite->data[2] = 0; - if (gUnknown_3005E88 == 2) + if (gQuestLogPlaybackState == 2) { sub_81124EC(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, animId); } diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 286f7519a..694ef0392 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -107,7 +107,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) { if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING)) input->pressedStartButton = TRUE; - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + if (!QL_IS_PLAYBACK_STATE) { if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING)) { @@ -123,7 +123,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) } } - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + if (!QL_IS_PLAYBACK_STATE) { if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT)) { @@ -142,7 +142,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) input->checkStandardWildEncounter = TRUE; } - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + if (!QL_IS_PLAYBACK_STATE) { if (heldKeys & DPAD_UP) input->dpadDirection = DIR_NORTH; @@ -650,7 +650,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) { if (InUnionRoom() == TRUE) return FALSE; - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) return FALSE; UpdateHappinessStepCounter(); @@ -836,17 +836,17 @@ static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 DoWarp(); return TRUE; } - else if (sub_806DB84(metatileBehavior, direction) == TRUE) + else if (IsDirectionalStairWarpMetatileBehavior(metatileBehavior, direction) == TRUE) { delay = 0; if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { - SetPlayerAvatarTransitionFlags(1); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); delay = 12; } StoreInitialPlayerAvatarState(); SetupWarp(&gMapHeader, warpEventId, position); - sub_807E4A0(metatileBehavior, delay); + DoStairWarp(metatileBehavior, delay); return TRUE; } } @@ -921,20 +921,20 @@ static bool8 IsWarpMetatileBehavior(u16 metatileBehavior) return FALSE; } -bool8 sub_806DB84(u16 metatileBehavior, u8 playerDirection) +bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection) { switch (playerDirection) { case DIR_WEST: - if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) return TRUE; - if (MetatileBehavior_IsUnknownWarp6F(metatileBehavior)) + if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) return TRUE; break; case DIR_EAST: - if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) return TRUE; - if (MetatileBehavior_IsUnknownWarp6E(metatileBehavior)) + if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) return TRUE; break; } @@ -1063,18 +1063,17 @@ static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 return NULL; } -void sub_806DE28(struct ObjectEvent * object) +void HandleBoulderFallThroughHole(struct ObjectEvent * object) { if (MapGridGetMetatileBehaviorAt(object->currentCoords.x, object->currentCoords.y) == MB_FALL_WARP) { PlaySE(SE_RU_HYUU); - // w-why?! RemoveObjectEventByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - FlagClear(sub_805FCD8(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup)); + FlagClear(GetObjectEventFlagByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup)); } } -void sub_806DE70(u16 x, u16 y) +void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y) { int i; const struct CoordEvent * events = gMapHeader.events->coordEvents; @@ -1086,7 +1085,7 @@ void sub_806DE70(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 b8269ae46..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; @@ -2984,7 +2984,7 @@ static void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { u32 FldEff_UseVsSeeker(void) { - if (gQuestLogState == QL_STATE_1) + if (gQuestLogState == QL_STATE_RECORDING) sub_811278C(8, 89); CreateTask(Task_FldEffUseVsSeeker, 0xFF); return 0; diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index bf5ab0ab3..10f21bc0f 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -23,6 +23,7 @@ #include "start_menu.h" #include "constants/songs.h" #include "constants/event_object_movement.h" +#include "constants/event_objects.h" #include "constants/field_weather.h" static void sub_807DF4C(u8 a0); @@ -30,10 +31,10 @@ static void sub_807DFBC(u8 taskId); static void task_map_chg_seq_0807E20C(u8 taskId); static void task_map_chg_seq_0807E2CC(u8 taskId); static void Task_TeleportWarpIn(u8 taskId); -static void sub_807E718(u8 taskId); +static void Task_Teleport2Warp(u8 taskId); static void Task_TeleportWarp(u8 taskId); -static void sub_807E80C(u8 taskId); -static void sub_807E980(u8 taskId); +static void Task_DoorWarp(u8 taskId); +static void Task_StairWarp(u8 taskId); static void sub_807EB64(u16, s16*, s16*); static void sub_807EBBC(u8 a0, s16 *a1, s16 *a2); static void sub_807EAC4(s16, s16, s16*, s16*, s16*); @@ -262,7 +263,7 @@ static void sub_807DE78(bool8 a0) sub_807DF4C(a0); if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) func = task_map_chg_seq_0807E20C; - else if (MetatileBehavior_IsUnknownWarp6C_to_6F(behavior) == TRUE) + else if (MetatileBehavior_IsDirectionalStairWarp(behavior) == TRUE) { u8 tmp = gUnknown_2031DE0; func = task_map_chg_seq_0807E2CC; @@ -287,7 +288,7 @@ static void sub_807DF4C(bool8 a0) void FieldCB_DefaultWarpExit(void) { Overworld_PlaySpecialMapMusic(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); sub_807DE78(FALSE); ScriptContext2_Enable(); } @@ -295,7 +296,7 @@ void FieldCB_DefaultWarpExit(void) void FieldCB_WarpExitFadeFromBlack(void) { Overworld_PlaySpecialMapMusic(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); sub_807DE78(TRUE); ScriptContext2_Enable(); } @@ -304,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(); @@ -350,7 +351,7 @@ static void sub_807DFBC(u8 taskId) { PlayerGetDestCoords(&task->data[12], &task->data[13]); sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); task->data[0] = 8; } break; @@ -365,7 +366,7 @@ static void sub_807DFBC(u8 taskId) case 9: if (FieldFadeTransitionBackgroundEffectIsFinished() && walkrun_is_standing_still() && !FieldIsDoorAnimationRunning() && !FuncIsActiveTask(Task_BarnDoorWipe)) { - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); task->data[0] = 4; } break; @@ -374,7 +375,7 @@ static void sub_807DFBC(u8 taskId) if (FieldFadeTransitionBackgroundEffectIsFinished()) { sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); task->data[0] = 2; } break; @@ -382,7 +383,7 @@ static void sub_807DFBC(u8 taskId) if (walkrun_is_standing_still()) { task->data[1] = FieldAnimateDoorClose(*x, *y); - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); task->data[0] = 3; } break; @@ -416,7 +417,7 @@ static void task_map_chg_seq_0807E20C(u8 taskId) if (FieldFadeTransitionBackgroundEffectIsFinished()) { sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], GetWalkNormalMovementAction(GetPlayerFacingDirection())); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], GetWalkNormalMovementAction(GetPlayerFacingDirection())); task->data[0] = 2; } break; @@ -497,7 +498,7 @@ bool8 FieldCB_ReturnToFieldOpenStartMenu(void) return FALSE; } -static void task_mpl_807E3C8(u8 taskId) +static void Task_SafariZoneRanOutOfBalls(u8 taskId) { if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE) { @@ -507,12 +508,12 @@ static void task_mpl_807E3C8(u8 taskId) } } -void sub_807E3EC(void) +void FieldCB_SafariZoneRanOutOfBalls(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); - CreateTask(task_mpl_807E3C8, 10); + CreateTask(Task_SafariZoneRanOutOfBalls, 10); } static bool32 WaitWarpFadeOutScreen(void) @@ -536,7 +537,7 @@ void DoWarp(void) PlayRainStoppingSoundEffect(); PlaySE(SE_KAIDAN); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); } void DoDiveWarp(void) @@ -546,28 +547,28 @@ void DoDiveWarp(void) WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); } -void sub_807E4A0(u16 metatileBehavior, u16 delay) +void DoStairWarp(u16 metatileBehavior, u16 delay) { - u8 taskId = CreateTask(sub_807E980, 10); + u8 taskId = CreateTask(Task_StairWarp, 10); gTasks[taskId].data[1] = metatileBehavior; gTasks[taskId].data[15] = delay; - sub_807E980(taskId); + Task_StairWarp(taskId); } void DoDoorWarp(void) { ScriptContext2_Enable(); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_807E80C, 10); + CreateTask(Task_DoorWarp, 10); } -void sub_807E500(void) +void DoTeleport2Warp(void) { ScriptContext2_Enable(); - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); gFieldCallback = FieldCB_TeleportWarpIn; } @@ -614,11 +615,11 @@ void sub_807E5C4(void) { ScriptContext2_Enable(); WarpFadeOutScreen(); - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); gFieldCallback = nullsub_60; } -static void sub_807E5EC(u8 taskId) +static void Task_CableClubWarp(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -645,10 +646,10 @@ void DoCableClubWarp(void) TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlaySE(SE_KAIDAN); - CreateTask(sub_807E5EC, 10); + CreateTask(Task_CableClubWarp, 10); } -static void sub_807E678(u8 taskId) +static void Task_ReturnFromLinkRoomWarp(u8 taskId) { s16 * data = gTasks[taskId].data; switch (data[0]) @@ -680,10 +681,10 @@ static void sub_807E678(u8 taskId) void ReturnFromLinkRoom(void) { - CreateTask(sub_807E678, 10); + CreateTask(Task_ReturnFromLinkRoomWarp, 10); } -static void sub_807E718(u8 taskId) +static void Task_Teleport2Warp(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->data[0]) @@ -736,7 +737,7 @@ static void Task_TeleportWarp(u8 taskId) } } -static void sub_807E80C(u8 taskId) +static void Task_DoorWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; s16 * xp = &task->data[2]; @@ -753,8 +754,8 @@ static void sub_807E80C(u8 taskId) case 1: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { - ObjectEventClearHeldMovementIfActive(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_UP); + ObjectEventClearHeldMovementIfActive(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_UP); task->data[0] = 2; } break; @@ -762,7 +763,7 @@ static void sub_807E80C(u8 taskId) if (walkrun_is_standing_still()) { task->data[1] = FieldAnimateDoorClose(*xp, *yp - 1); - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); sub_807DCB0(FALSE); task->data[0] = 3; } @@ -778,18 +779,18 @@ static void sub_807E80C(u8 taskId) WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); task->data[0] = 0; - task->func = sub_807E718; + task->func = Task_Teleport2Warp; break; case 5: TryFadeOutOldMapMusic(); PlayRainStoppingSoundEffect(); task->data[0] = 0; - task->func = sub_807E718; + task->func = Task_Teleport2Warp; break; } } -static void sub_807E980(u8 taskId) +static void Task_StairWarp(u8 taskId) { s16 * data = gTasks[taskId].data; struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -865,22 +866,22 @@ static void sub_807EB64(u16 a0, s16 *a1, s16 *a2) static void sub_807EBBC(u8 a0, s16 *a1, s16 *a2) { - if (MetatileBehavior_IsUnknownWarp6C(a0)) + if (MetatileBehavior_IsDirectionalUpRightStairWarp(a0)) { *a1 = 16; *a2 = -10; } - else if (MetatileBehavior_IsUnknownWarp6D(a0)) + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(a0)) { *a1 = -17; *a2 = -10; } - else if (MetatileBehavior_IsUnknownWarp6E(a0)) + else if (MetatileBehavior_IsDirectionalDownRightStairWarp(a0)) { *a1 = 17; *a2 = 3; } - else if (MetatileBehavior_IsUnknownWarp6F(a0)) + else if (MetatileBehavior_IsDirectionalDownLeftStairWarp(a0)) { *a1 = -17; *a2 = 3; @@ -927,7 +928,7 @@ static void sub_807ECBC(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) struct Sprite *sprite; PlayerGetDestCoords(&x, &y); behavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsUnknownWarp6E(behavior) || MetatileBehavior_IsUnknownWarp6C(behavior)) + if (MetatileBehavior_IsDirectionalDownRightStairWarp(behavior) || MetatileBehavior_IsDirectionalUpRightStairWarp(behavior)) r1 = 3; else r1 = 4; diff --git a/src/field_message_box.c b/src/field_message_box.c index 1909fd398..bee44f331 100644 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -24,7 +24,7 @@ static void Task_RunFieldMessageBoxPrinter(u8 taskId) switch (task->data[0]) { case 0: - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { gTextFlags.autoScroll = TRUE; TextWindow_LoadTilesStdFrame1(0, 0x200); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 7e3ba59fe..5a8a3e98a 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -556,7 +556,7 @@ static u8 CheckForPlayerAvatarCollision(u8 direction) x = playerObjEvent->currentCoords.x; y = playerObjEvent->currentCoords.y; - if (sub_806DB84(MapGridGetMetatileBehaviorAt(x, y), direction)) + if (IsDirectionalStairWarpMetatileBehavior(MapGridGetMetatileBehaviorAt(x, y), direction)) return 8; MoveCoords(direction, &x, &y); return CheckForObjectEventCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); @@ -673,7 +673,7 @@ static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collis } } -void SetPlayerAvatarTransitionFlags(bool16 flags) +void SetPlayerAvatarTransitionFlags(u16 flags) { gPlayerAvatar.transitionFlags |= flags; DoPlayerAvatarTransition(); @@ -910,7 +910,7 @@ void sub_805C260(void) PlayerSetAnimId(MOVEMENT_ACTION_0x9F, 0); } -void sub_805C270(void) +void HandleEnforcedLookDirectionOnPlayerStopMoving(void) { if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) { @@ -1006,12 +1006,12 @@ static void PlayCollisionSoundIfNotFacingWarp(u8 direction) { if (direction == DIR_WEST) { - if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) || MetatileBehavior_IsUnknownWarp6F(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior) || MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) return; } if (direction == DIR_EAST) { - if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) || MetatileBehavior_IsUnknownWarp6E(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior) || MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) return; } if (direction == DIR_NORTH) @@ -1445,8 +1445,8 @@ static bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, st { ObjectEventClearHeldMovementIfFinished(playerObject); ObjectEventClearHeldMovementIfFinished(strengthObject); - sub_806DE28(strengthObject); - sub_806DE70(strengthObject->currentCoords.x, strengthObject->currentCoords.y); + HandleBoulderFallThroughHole(strengthObject); + HandleBoulderActivateVictoryRoadSwitch(strengthObject->currentCoords.x, strengthObject->currentCoords.y); gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroyTask(FindTaskIdByFunc(Task_BumpBoulder)); @@ -1598,7 +1598,7 @@ void CreateStopSurfingTask_NoMusicChange(u8 direction) void SeafoamIslandsB4F_CurrentDumpsPlayerOnLand(void) { - if (gUnknown_3005E88 != 1 && gUnknown_3005E88 != 3) + if (gQuestLogPlaybackState != 1 && gQuestLogPlaybackState != 3) { sub_811278C(gUnknown_835B820[DIR_NORTH], 16); CreateStopSurfingTask(DIR_NORTH); diff --git a/src/field_specials.c b/src/field_specials.c index 425528d50..f6cdae90b 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -95,15 +95,15 @@ static u8 *const sStringVarPtrs[] = { void ShowDiploma(void) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); SetMainCallback2(CB2_ShowDiploma); ScriptContext2_Enable(); } void ForcePlayerOntoBike(void) { - if (gPlayerAvatar.flags & 1) - SetPlayerAvatarTransitionFlags(2); + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ON_FOOT) + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_MACH_BIKE); Overworld_SetSavedMusic(MUS_CYCLING); Overworld_ChangeMusicTo(MUS_CYCLING); } @@ -187,7 +187,7 @@ u8 GetLeadMonFriendship(void) void ShowTownMap(void) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); InitRegionMapWithExitCB(REGIONMAP_TYPE_WALL, CB2_ReturnToFieldContinueScriptPlayMapMusic); } @@ -1519,7 +1519,7 @@ static void Task_ListMenuRemoveScrollIndicatorArrowPair(u8 taskId) void ForcePlayerToStartSurfing(void) { SetHelpContext(HELPCONTEXT_SURFING); - SetPlayerAvatarTransitionFlags(8); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_SURFING); } static const u16 sStarterSpecies[] = { @@ -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); } } @@ -2481,7 +2481,7 @@ void BrailleCursorToggle(void) // 8005 = y // 8006 = action (0 = create, 1 = delete) u16 x; - if (gQuestLogState != 2) + if (gQuestLogState != QL_STATE_PLAYBACK) { x = gSpecialVar_0x8004 + 27; if (gSpecialVar_0x8006 == 0) diff --git a/src/field_tasks.c b/src/field_tasks.c index 4c7b93f20..53b49b0d8 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -61,7 +61,7 @@ static void Task_RunTimeBasedEvents(u8 taskId) if (!ScriptContext2_IsEnabled()) { - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) { UpdateAmbientCry(&data[1], &data[2]); } diff --git a/src/graphics.c b/src/graphics.c index 14c20496a..7eee42bf0 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1003,8 +1003,8 @@ const u32 gBattleAnimSpritePal_Splash[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_SweatBead[] = INCBIN_U32("graphics/battle_anims/sprites/sweat_bead.4bpp.lz"); -const u32 gBattleAnimSpriteGfx_Pokeblock[] = INCBIN_U32("graphics/battle_anims/sprites/pokeblock.4bpp.lz"); -const u32 gBattleAnimSpritePal_Pokeblock[] = INCBIN_U32("graphics/battle_anims/sprites/pokeblock.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_SafariBait[] = INCBIN_U32("graphics/battle_anims/sprites/safari_bait.4bpp.lz"); +const u32 gBattleAnimSpritePal_SafariBait[] = INCBIN_U32("graphics/battle_anims/sprites/safari_bait.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Gem1[] = INCBIN_U32("graphics/battle_anims/sprites/gem_1.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Gem2[] = INCBIN_U32("graphics/battle_anims/sprites/gem_2.4bpp.lz"); diff --git a/src/help_message.c b/src/help_message.c new file mode 100644 index 000000000..630e32ecd --- /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("graphics/unknown/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/help_system_812B1E0.c b/src/help_system_812B1E0.c index ee26c6de5..0db564460 100644 --- a/src/help_system_812B1E0.c +++ b/src/help_system_812B1E0.c @@ -1892,7 +1892,7 @@ void HelpSystem_Disable(void) void HelpSystem_Enable(void) { - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) { gHelpSystemEnabled = TRUE; HelpSystem_EnableToggleWithRButton(); diff --git a/src/item_menu.c b/src/item_menu.c index ebad0640d..ff59f0985 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2035,7 +2035,7 @@ bool8 UseRegisteredKeyItemOnField(void) { ScriptContext2_Enable(); FreezeObjectEvents(); - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); StopPlayerAvatar(); gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem; taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8); diff --git a/src/link.c b/src/link.c index cb46a50ff..ed04cdc21 100644 --- a/src/link.c +++ b/src/link.c @@ -229,7 +229,7 @@ static const u8 sLinkErrorTextColor[] = { 0x00, 0x01, 0x02 }; bool8 IsWirelessAdapterConnected(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; SetWirelessCommType1(); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 15ffb4813..e86a3b43f 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -499,7 +499,7 @@ void LinkRfu_Shutdown(void) { u8 i; - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; rfu_LMAN_powerDownRFU(); @@ -538,7 +538,7 @@ void LinkRfu_Shutdown(void) static void CreateTask_LinkLeaderSearchForChildren(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; Rfu.unk_67 = CreateTask(Task_LinkLeaderSearchForChildren, 1); } @@ -564,7 +564,7 @@ static bool32 IsParentSuccessfullyReconnected(void) static void CreateTask_JoinGroupSearchForParent(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; Rfu.unk_67 = CreateTask(Task_JoinGroupSearchForParent, 1); } @@ -2481,7 +2481,7 @@ void InitializeRfuLinkManager_JoinGroup(void) void InitializeRfuLinkManager_EnterUnionRoom(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; Rfu.parent_child = 2; CopyPlayerNameToUnameBuffer(); 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/main.c b/src/main.c index 77f668e6f..5ba87aaa0 100644 --- a/src/main.c +++ b/src/main.c @@ -176,7 +176,7 @@ static void InitMainCallbacks(void) gSaveBlock2Ptr = &gSaveBlock2; gSaveBlock1Ptr = &gSaveBlock1; gSaveBlock2.encryptionKey = 0; - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } static void CallCallbacks(void) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 6f7fa5d3c..9126c6b7a 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -31,7 +31,7 @@ static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags); void ShowMapNamePopup(bool32 palIntoFadedBuffer) { u8 taskId; - if (FlagGet(FLAG_DONT_SHOW_MAP_NAME_POPUP) != TRUE && !(gQuestLogState == QL_STATE_2 || gQuestLogState == QL_STATE_3)) + if (FlagGet(FLAG_DONT_SHOW_MAP_NAME_POPUP) != TRUE && !QL_IS_PLAYBACK_STATE) { taskId = FindTaskIdByFunc(Task_MapNamePopup); if (taskId == 0xFF) diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index f3cff7882..6418a3139 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -366,7 +366,7 @@ bool8 MapHasPreviewScreen(u8 mapsec, u8 type) bool32 MapHasPreviewScreen_HandleQLState2(u8 mapsec, u8 type) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { return FALSE; } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 77c839b89..4539c884b 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -131,51 +131,51 @@ bool8 MetatileBehavior_IsEscalator(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsUnknownWarp6C(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalUpRightStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6C) + if(metatileBehavior == MB_UP_RIGHT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6D(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalUpLeftStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6D) + if(metatileBehavior == MB_UP_LEFT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6E(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalDownRightStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6E) + if(metatileBehavior == MB_DOWN_RIGHT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6F(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6F) + if(metatileBehavior == MB_DOWN_LEFT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6C_to_6F(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior) { bool8 result = FALSE; - if(metatileBehavior >= MB_UNKNOWN_WARP_6C && metatileBehavior <= MB_UNKNOWN_WARP_6F) + if(metatileBehavior >= MB_UP_RIGHT_STAIR_WARP && metatileBehavior <= MB_DOWN_LEFT_STAIR_WARP) result = TRUE; else result = FALSE; @@ -484,7 +484,7 @@ bool8 MetatileBehavior_IsDiveable(u8 metatileBehavior) bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior) { - if(metatileBehavior == MB_19) + if(metatileBehavior == MB_UNDERWATER_BLOCKED_ABOVE) return TRUE; else return FALSE; @@ -622,7 +622,7 @@ bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_IsLavaridge1FWarp(u8 metatileBehavior) { - if(metatileBehavior == MB_68) + if(metatileBehavior == MB_LAVARIDGE_1F_WARP) return TRUE; else return FALSE; @@ -685,7 +685,7 @@ bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior) { - if(metatileBehavior == MB_22) + if(metatileBehavior == MB_SEAWEED) return TRUE; else return FALSE; diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 78bc6b7a4..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 @@ -457,7 +452,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP void LoadStdWindowFrameGfx(void) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { gTextFlags.autoScroll = 1; TextWindow_LoadTilesStdFrame1(0, DLG_WINDOW_BASE_TILE_NUM); @@ -495,7 +490,7 @@ void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram) ClearWindowTilemap(windowId); if (copyToVram == TRUE) CopyWindowToVram(windowId, 3); - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) CommitQuestLogWindow1(); } @@ -527,7 +522,7 @@ static void WindowFunc_DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u static void WindowFunc_DrawDialogueFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { - if (!IsMsgSignPost() || gQuestLogState == QL_STATE_2) + if (!IsMsgSignPost() || gQuestLogState == QL_STATE_PLAYBACK) { FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 0, tilemapLeft - 2, tilemapTop - 1, 1, 1, DLG_WINDOW_PALETTE_NUM); FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 1, tilemapLeft - 1, tilemapTop - 1, 1, 1, DLG_WINDOW_PALETTE_NUM); @@ -611,7 +606,7 @@ void SetStdWindowBorderStyle(u8 windowId, bool8 copyToVram) void sub_80F7768(u8 windowId, bool8 copyToVram) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { gTextFlags.autoScroll = 1; TextWindow_LoadTilesStdFrame1(0, DLG_WINDOW_BASE_TILE_NUM); diff --git a/src/overworld.c b/src/overworld.c index a4a6213e6..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); @@ -921,9 +921,9 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr return DIR_EAST; else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE) return DIR_WEST; - else if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6E(metatileBehavior) == TRUE) + else if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior) == TRUE || MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior) == TRUE) return DIR_WEST; - else if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6F(metatileBehavior) == TRUE) + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior) == TRUE || MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior) == TRUE) return DIR_EAST; else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING) || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER )) @@ -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; } @@ -1406,7 +1406,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) { if (ProcessPlayerFieldInput(&fieldInput) == TRUE) { - if (gUnknown_3005E88 == 2) + if (gQuestLogPlaybackState == 2) sub_81127F8(&gInputToStoreInQuestLogMaybe); ScriptContext2_Enable(); DismissMapNamePopup(); @@ -1441,7 +1441,7 @@ static void DoCB1_Overworld_QuestLogPlayback(void) RunQuestLogCB(); } } - else if (sub_8111CD0() == TRUE) + else if (QuestLogScenePlaybackIsEnding() == TRUE) { RunQuestLogCB(); } @@ -1452,7 +1452,7 @@ void CB1_Overworld(void) { if (gMain.callback2 == CB2_Overworld) { - if (sub_8112CAC() == TRUE || gQuestLogState == QL_STATE_2) + if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK) DoCB1_Overworld_QuestLogPlayback(); else DoCB1_Overworld(gMain.newKeys, gMain.heldKeys); @@ -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,14 +1861,14 @@ 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; case 4: mli4_mapscripts_and_other(); sub_8057114(); - if (gQuestLogState != QL_STATE_2) + if (gQuestLogState != QL_STATE_PLAYBACK) { sub_80CC534(); sub_80CC59C(); @@ -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) { @@ -2251,7 +2251,7 @@ static bool32 sub_8057314(u8 *state) sub_8111F14(); sub_81113E4(); sub_8111438(); - if (sub_8110AC8() == 2) + if (GetQuestLogStartType() == QL_START_WARP) { gUnknown_2031DE0 = FALSE; mli0_load_map(FALSE); @@ -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 306a5ce70..93c6c6398 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 5dc9f7f11..1a028f19d 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,22 +61,12 @@ struct TrainerFanClub struct UnkStruct_203AE94 { - u8 unk_0_0:4; - u8 unk_0_4:2; - u8 unk_0_6:2; - u8 unk_1; - 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; + u8 playbackSubstate:4; + u8 playingEvent:2; + u8 sceneEndMode:2; + u8 cursor; + u8 timer; + u8 overlapTimer; }; struct UnkStruct_300201C @@ -85,14 +76,7 @@ struct UnkStruct_300201C u16 value; }; -struct UnkStruct_203B044 -{ - u8 unk_0; - u8 unk_1; - u16 unk_2; -}; - -u8 gUnknown_3005E88; +u8 gQuestLogPlaybackState; u16 sNumEventsInLogEntry; struct FieldInput gQuestLogFieldInput; struct QuestLogEntry * sCurQuestLogEntry; @@ -105,28 +89,21 @@ 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 sub_8110A00(void); -static void sub_8110A3C(void); + +static void QLogCB_Recording(void); +static void QLogCB_Playback(void); static void SetPlayerInitialCoordsAtScene(u8); static void SetNPCInitialCoordsAtScene(u8); static void TryRecordEvent39_GoToNextScene(void); @@ -134,34 +111,34 @@ 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 sub_8111B80(void); -static u8 sub_8111BD4(void); +static void QuestLog_PlayCurrentEvent(void); +static void HandleShowQuestLogMessage(void); +static u8 GetQuestLogTextDisplayDuration(void); static void DrawQuestLogSceneDescription(void); 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); static bool8 sub_81121D8(u8); static void sub_811229C(void); -static void sub_8112888(u8); +static void TogglePlaybackStateForOverworldLock(u8); static void SetUpQuestLogEntry(u8, struct QuestLogEntry *, u16); static bool8 sub_8112CEC(void); static bool8 RecordHeadAtEndOfEntry(void); @@ -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 sUnknown_8456638[] = INCBIN_U16("graphics/unknown/unknown_84566 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) @@ -302,7 +181,7 @@ void sub_8110840(void * oldPointer) { if (sEventRecordingPointer) sEventRecordingPointer = (void *)sEventRecordingPointer + offset; - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { int r3; for (r3 = 0; r3 < (int)NELEMS(gUnknown_203AE0C); r3++) @@ -321,7 +200,7 @@ void ResetQuestLog(void) sEventRecordingPointer = NULL; gUnknown_203AE04 = NULL; sub_8113BD8(); - sub_81138F8(); + ResetDeferredLinkEvent(); } static void DestroySav1QuestLogEntry(u8 a0) @@ -343,7 +222,7 @@ void RunQuestLogCB(void) bool8 sub_8110944(const void * a0, size_t cmdSize) { - void * r2 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_568; + void * r2 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script; void * r0 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end; r0 -= cmdSize; if ((const void *)a0 < r2 || (const void *)a0 > r0) @@ -351,9 +230,9 @@ 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].unk_568; + void * start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script; void * end = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end; end -= size; if ((void *)cursor < start || (void *)cursor > end) @@ -364,37 +243,40 @@ static bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size) static void SetQuestLogState(u8 state) { gQuestLogState = state; - if (state == 1) - sQuestLogCB = sub_8110A00; + if (state == QL_STATE_RECORDING) + sQuestLogCB = QLogCB_Recording; else - sQuestLogCB = sub_8110A3C; + sQuestLogCB = QLogCB_Playback; } -static void sub_8110A00(void) +static void QLogCB_Recording(void) { if (TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer) != 1) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; TryRecordEvent39_GoToNextScene(); gQuestLogState = 0; sQuestLogCB = NULL; } } -static void sub_8110A3C(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 (gUnknown_3005E88 || 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); } } } @@ -404,23 +286,23 @@ void GetQuestLogState(void) gSpecialVar_Result = gQuestLogState; } -u8 sub_8110AC8(void) +u8 GetQuestLogStartType(void) { - return gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000; + 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(); - sEventRecordingPointer = gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_568; + ResetUnk203B044(); + sEventRecordingPointer = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script; if (IS_LINK_QL_EVENT(eventId) || eventId == QL_EVENT_DEPARTED) - gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 = 2; + gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType = QL_START_WARP; else - gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 = 1; + gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType = QL_START_NORMAL; QuestLog_GetSaneMonCounts(); SetPlayerInitialCoordsAtScene(sCurrentSceneNum); SetNPCInitialCoordsAtScene(sCurrentSceneNum); @@ -430,7 +312,7 @@ static void StartRecordingQuestLogEntry(u16 eventId) gUnknown_203ADFC = 0; SetUpQuestLogEntry(2, sQuestLogSceneRecordBuffer, 0x100); TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer); - SetQuestLogState(QL_STATE_1); + SetQuestLogState(QL_STATE_RECORDING); } static void SetPlayerInitialCoordsAtScene(u8 sceneNum) @@ -536,12 +418,12 @@ static bool8 TryRecordQuestLogEntrySequence(struct QuestLogEntry * entry) } if (sEventRecordingPointer == NULL) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; return FALSE; } } - if (gUnknown_3005E88 == 0) + if (gQuestLogPlaybackState == 0) { sEventRecordingPointer = TryRecordEvent39_NoParams(sEventRecordingPointer); return FALSE; @@ -558,14 +440,14 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId) sNumScenes = 0; for (i = 0; i < QUEST_LOG_SCENE_COUNT; i++) { - if (gSaveBlock1Ptr->questLog[i].unk_000) + if (gSaveBlock1Ptr->questLog[i].startType != 0) sNumScenes++; } if (sNumScenes != 0) { gHelpSystemEnabled = FALSE; - sub_8110F90(taskId); + Task_BeginQuestLogPlayback(taskId); DestroyTask(taskId); } else @@ -575,42 +457,42 @@ 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); } -bool8 sub_8111000(void) +static bool8 FieldCB2_QuestLogStartPlaybackWithWarpExit(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); - SetQuestLogState(QL_STATE_2); + 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; } -bool8 sub_8111038(void) +static bool8 FieldCB2_QuestLogStartPlaybackStandingInPlace(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); - SetQuestLogState(QL_STATE_2); + 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,28 +570,28 @@ 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_2; + gQuestLogState = QL_STATE_PLAYBACK; ResetSpecialVars(); ClearBag(); ClearPCItemSlots(); - if (sub_8110AC8() == 1) + if (GetQuestLogStartType() == QL_START_NORMAL) { - sub_8111274(sCurrentSceneNum, FALSE); - gFieldCallback2 = sub_8111038; - SetMainCallback2(sub_80572A8); + QLPlayback_SetInitialPlayerPosition(sCurrentSceneNum, FALSE); + gFieldCallback2 = FieldCB2_QuestLogStartPlaybackStandingInPlace; + SetMainCallback2(CB2_SetUpOverworldForQLPlayback); } else { - sub_8111274(sCurrentSceneNum, TRUE); + QLPlayback_SetInitialPlayerPosition(sCurrentSceneNum, TRUE); WarpIntoMap(); - gFieldCallback2 = sub_8111000; - SetMainCallback2(sub_805726C); + gFieldCallback2 = FieldCB2_QuestLogStartPlaybackWithWarpExit; + 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; @@ -884,7 +766,7 @@ static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1) gUnknown_203AE0C[i] = NULL; } - r4 = gSaveBlock1Ptr->questLog[sceneNum].unk_568; + r4 = gSaveBlock1Ptr->questLog[sceneNum].script; for (i = 0; i < 32; i++) { switch (r4[0] & 0xFFF) @@ -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; } @@ -929,14 +811,14 @@ static void QuestLog_AdvancePlayhead(void) if (!gPaletteFade.active) { ScriptContext2_Enable(); - if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000) + if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType != 0) { sNumScenes--; - sub_8111368(); + QLPlayback_InitOverworldState(); } else { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; QuestLog_StartFinalScene(); } } @@ -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_3; + gQuestLogState = QL_STATE_PLAYBACK_LAST; sQuestLogCB = NULL; } -void sub_81119C8(void) +void QuestLog_AdvancePlayhead_(void) { QuestLog_AdvancePlayhead(); } @@ -965,11 +847,11 @@ bool8 QuestLog_SchedulePlaybackCB(void (*callback)(void)) switch (gQuestLogState) { - case 1: - QuestLog_OnInteractionWithSpecialNpc(); + case QL_STATE_RECORDING: + QuestLog_CutRecording(); break; - case 2: - gUnknown_3005E88 = 3; + case QL_STATE_PLAYBACK: + gQuestLogPlaybackState = 3; taskId = CreateTask(Task_RunPlaybackCB, 80); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; @@ -990,14 +872,14 @@ 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; case 1: if (!gPaletteFade.active) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; routine = (void (*)(void)) GetWordTaskArg(taskId, 14); if (routine != NULL) routine(); @@ -1008,53 +890,53 @@ 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.timer != 0) return; - gUnknown_203AE94.unk_0_0 = 0; - gUnknown_203AE94.unk_0_4 = 1; - sub_8112888(2); + sQuestLogCurrentScene.playbackSubstate = 0; + sQuestLogCurrentScene.playingEvent = 1; + TogglePlaybackStateForOverworldLock(2); } - if (gUnknown_203AE94.unk_0_4 == 1) + if (sQuestLogCurrentScene.playingEvent == 1) { - if (++gUnknown_203AE94.unk_3 > 15) + if (++sQuestLogCurrentScene.overlapTimer > 15) { QuestLog_CloseTextWindow(); - gUnknown_203AE94.unk_0_4 = 0; - gUnknown_203AE94.unk_3 = 0; + sQuestLogCurrentScene.playingEvent = 0; + sQuestLogCurrentScene.overlapTimer = 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) - sub_8111B80(); - else if (sub_8113AE8(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1) - sub_8111B80(); + if (sub_8113B44(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1) + HandleShowQuestLogMessage(); + else if (sub_8113AE8(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1) + HandleShowQuestLogMessage(); } } -static void sub_8111B80(void) +static void HandleShowQuestLogMessage(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.overlapTimer = 0; + sQuestLogCurrentScene.timer = GetQuestLogTextDisplayDuration(); if (gUnknown_203B044.unk_2 == 0) - gUnknown_203AE94.unk_1++; - if (gUnknown_203AE94.unk_1 > 32) + sQuestLogCurrentScene.cursor++; + if (sQuestLogCurrentScene.cursor > 32) return; DrawQuestLogSceneDescription(); } - sub_8112888(1); + TogglePlaybackStateForOverworldLock(1); // lock } -static u8 sub_8111BD4(void) +static u8 GetQuestLogTextDisplayDuration(void) { u16 i; u16 count = 0; @@ -1076,42 +958,42 @@ static u8 sub_8111BD4(void) bool8 sub_8111C2C(void) { - if (gQuestLogState != QL_STATE_2) + if (gQuestLogState != QL_STATE_PLAYBACK) return FALSE; - if (gUnknown_3005E88 == 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; - gUnknown_3005E88 = 0; - sub_81118F4(-3); + sQuestLogCurrentScene.sceneEndMode = 2; + gQuestLogPlaybackState = 0; + QuestLog_BeginFadeAtEndOfScene(-3); } else if (JOY_NEW(B_BUTTON)) { - gUnknown_203AE94.unk_0_6 = 1; - gUnknown_3005E88 = 0; + 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_2) + if (gQuestLogState == QL_STATE_PLAYBACK) DrawPreviouslyOnQuestHeader(sNumScenes); } @@ -1191,18 +1073,18 @@ static void QuestLog_WaitFadeAndCancelPlayback(void) ScriptContext2_Enable(); for (sCurrentSceneNum = sCurrentSceneNum; sCurrentSceneNum < QUEST_LOG_SCENE_COUNT; sCurrentSceneNum++) { - if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 == 0) + if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType == 0) break; - sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer); + ReadQuestLogScriptFromSav1(sCurrentSceneNum, sQuestLogSceneRecordBuffer); } - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; QuestLog_StartFinalScene(); } } void sub_8111F14(void) { - if (gQuestLogState == QL_STATE_3) + if (gQuestLogState == QL_STATE_PLAYBACK_LAST) gUnknown_203AE90 = AllocZeroed(0x200 * sizeof(u16)); } @@ -1211,23 +1093,23 @@ 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]; if (ScriptContext2_IsEnabled() != TRUE) { FreezeObjectEvents(); - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); StopPlayerAvatar(); ScriptContext2_Enable(); task->func = Task_QuestLogScene_SavedGame; @@ -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,9 +1241,9 @@ static void sub_811229C(void) Free(buffer); } -void sub_811231C(void) +void FinishRecordingQuestLogScene(void) { - if (gQuestLogState == QL_STATE_1) + if (gQuestLogState == QL_STATE_RECORDING) { TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer); TryRecordEvent39_GoToNextScene(); @@ -1369,18 +1251,18 @@ void sub_811231C(void) sQuestLogCB = NULL; gUnknown_203AE04 = NULL; sEventRecordingPointer = NULL; - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } } -void QuestLog_OnInteractionWithSpecialNpc(void) +void QuestLog_CutRecording(void) { - if (gUnknown_3005E88 && gQuestLogState == QL_STATE_1) + if (gQuestLogPlaybackState != 0 && gQuestLogState == QL_STATE_RECORDING) { TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer); TryRecordEvent41_IncCursor(1); TryRecordEvent39_GoToNextScene(); - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; gQuestLogState = 0; sQuestLogCB = NULL; } @@ -1398,7 +1280,7 @@ static void SortQuestLogInSav1(void) { if (sceneNum >= QUEST_LOG_SCENE_COUNT) sceneNum = 0; - if (gSaveBlock1Ptr->questLog[sceneNum].unk_000) + if (gSaveBlock1Ptr->questLog[sceneNum].startType != 0) { buffer[count] = gSaveBlock1Ptr->questLog[sceneNum]; count++; @@ -1414,7 +1296,7 @@ void SaveQuestLogData(void) { if (MenuHelpers_LinkSomething() != TRUE) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); SortQuestLogInSav1(); } } @@ -1553,17 +1435,17 @@ void sub_81127F8(struct FieldInput * a0) } } -static void sub_8112888(u8 a0) +static void TogglePlaybackStateForOverworldLock(u8 a0) { switch (a0) { case 1: - if (gUnknown_3005E88 == 1) - gUnknown_3005E88 = 3; + if (gQuestLogPlaybackState == 1) + gQuestLogPlaybackState = 3; // Message visible, overworld locked break; case 2: - if (gUnknown_3005E88 == 3) - gUnknown_3005E88 = 1; + if (gQuestLogPlaybackState == 3) + gQuestLogPlaybackState = 1; // Overworld unlocked break; } } @@ -1576,21 +1458,21 @@ void sub_81128BC(u8 a0) { case 1: if (r1 == 1) - gUnknown_3005E88 = 3; + gQuestLogPlaybackState = 3; else if (r1 == 2) { sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].unk_6 = 3; sQuestLogCursor++; sNextStepDelay = 0; - gUnknown_3005E88 = 4; + gQuestLogPlaybackState = 4; } break; case 2: if (r1 == 1) - gUnknown_3005E88 = 1; + gQuestLogPlaybackState = 1; else if (r1 == 2) - gUnknown_3005E88 = 2; + gQuestLogPlaybackState = 2; break; } } @@ -1602,7 +1484,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) switch (kind) { default: - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; break; case 1: sCurQuestLogEntry = entry; @@ -1618,7 +1500,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4; sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].unk_3; sMovementScripts[0][1] = 0xFF; - gUnknown_3005E88 = 1; + gQuestLogPlaybackState = 1; break; case 2: sCurQuestLogEntry = entry; @@ -1657,14 +1539,14 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) sCurQuestLogEntry[sQuestLogCursor].unk_2 = 0; sCurQuestLogEntry[sQuestLogCursor].unk_3 = 0; sQuestLogCursor++; - gUnknown_3005E88 = 2; + gQuestLogPlaybackState = 2; break; } } void sub_8112B3C(void) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: break; @@ -1690,29 +1572,29 @@ void sub_8112B3C(void) *(u32 *)&gQuestLogFieldInput = ((sCurQuestLogEntry[sQuestLogCursor].unk_3 << 24) | (sCurQuestLogEntry[sQuestLogCursor].unk_2 << 16) | (sCurQuestLogEntry[sQuestLogCursor].unk_1 << 8) | (sCurQuestLogEntry[sQuestLogCursor].unk_0 << 0)); break; case 3: - gUnknown_3005E88 = 3; + gQuestLogPlaybackState = 3; break; case 0xFE: break; case 0xFF: - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; break; } - if (gUnknown_3005E88 == 0) + if (gQuestLogPlaybackState == 0) break; if (++sQuestLogCursor >= sNumEventsInLogEntry) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; break; } sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4; - } while (gUnknown_3005E88 != 3 + } while (gQuestLogPlaybackState != 3 && (sNextStepDelay == 0 || sNextStepDelay == 0xFFFF)); } } else if (sQuestLogCursor >= sNumEventsInLogEntry) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } break; case 2: @@ -1720,7 +1602,7 @@ void sub_8112B3C(void) { sNextStepDelay++; if (sQuestLogCursor >= sNumEventsInLogEntry) - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } break; case 3: @@ -1737,7 +1619,7 @@ void sub_8112C9C(void) u8 sub_8112CAC(void) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: default: @@ -1809,7 +1691,7 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) s32 i; if (a0 == 0 || a0 > 2) - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; else { sFlagOrVarRecords = a1; @@ -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("graphics/unknown/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_2) - 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 (gUnknown_3005E88 == 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_2) - return TRUE; - - if (gQuestLogState == QL_STATE_1) - 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 (gUnknown_3005E88 != 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 (gUnknown_3005E88 == 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 (gQuestLogState == QL_STATE_2 || gQuestLogState == QL_STATE_3) - 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 (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) - { - 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..1f01e731c --- /dev/null +++ b/src/quest_log_events.c @@ -0,0 +1,2155 @@ +#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" + +struct DeferredLinkEvent +{ + u16 id; + u16 ALIGNED(4) data[14]; +}; + +static EWRAM_DATA struct DeferredLinkEvent sDeferredEvent = {0}; +EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; +static EWRAM_DATA u8 sEventShouldNotRecordSteps = 0; +static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE; +static EWRAM_DATA u8 sLastDepartedMap = 0; +static EWRAM_DATA bool8 sPlayedTheSlots = FALSE; + +static bool8 InQuestLogDisabledLocation(void); +static bool8 ShouldRegisterEvent_HandlePartyActions(u16, const u16 *); +static bool8 ShouldRegisterEvent_HandleBeatStoryTrainer(u16, const u16 *); +static u16 *ShouldRegisterEvent(u16, const u16 *); +static bool8 TrySetLinkQuestLogEvent(u16, const u16 *); +static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *); +static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *); +static void SetQuestLogEventToActive(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 ShouldRegisterEvent_HandleDeparted(u16, const u16 *); +static bool8 ShouldRegisterEvent_HandleGameCorner(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 && sEventShouldNotRecordSteps == 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 (ShouldRegisterEvent_HandleGameCorner(eventId, eventData) == FALSE) + return; + + if (gQuestLogPlaybackState == 0) + { + if (ShouldRegisterEvent_HandlePartyActions(eventId, eventData) == TRUE) + return; + + if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL) + { + if (ShouldRegisterEvent_HandleDeparted(eventId, eventData) == FALSE) + return; + StartRecordingQuestLogEntry(eventId); + } + } + else if (eventId == QL_EVENT_OBTAINED_ITEM) + return; + + SetQuestLogEventToActive(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 = ShouldRegisterEvent(eventId, eventData); + if (r1 == NULL) + return; + } + + sEventRecordingPointer = r1; + if (sEventShouldNotRecordSteps == 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 ShouldRegisterEvent_HandlePartyActions(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 || ShouldRegisterEvent_HandleBeatStoryTrainer(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 ShouldRegisterEvent_HandleBeatStoryTrainer(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) +{ + sEventShouldNotRecordSteps = 0; +} + +static u16 *ShouldRegisterEvent(u16 eventId, const u16 *eventData) +{ + if (ShouldRegisterEvent_HandlePartyActions(eventId, eventData) == TRUE) + return NULL; + + if (ShouldRegisterEvent_HandleDeparted(eventId, eventData) == FALSE) + return NULL; + + StartRecordingQuestLogEntry(eventId); + SetQuestLogEventToActive(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; + + ResetDeferredLinkEvent(); + sDeferredEvent.id = 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(sDeferredEvent.data, eventData, 12); + else + memcpy(sDeferredEvent.data, eventData, 24); + } + return TRUE; +} + +void ResetDeferredLinkEvent(void) +{ + sDeferredEvent = (struct DeferredLinkEvent){}; +} + +void QuestLog_StartRecordingInputsAfterDeferredEvent(void) +{ + if (sDeferredEvent.id != QL_EVENT_0) + { + u16 *resp; + sLastDepartedMap = 0; + StartRecordingQuestLogEntry(sDeferredEvent.id); + resp = sQuestLogStorageCBs[sDeferredEvent.id](sEventRecordingPointer, sDeferredEvent.data); + sEventRecordingPointer = resp; + ResetDeferredLinkEvent(); + } +} + +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; + + ResetDeferredLinkEvent(); + if (gQuestLogPlaybackState != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || ShouldRegisterEvent_HandleBeatStoryTrainer(eventId, eventData) != TRUE) + { + sDeferredEvent.id = eventId; + memcpy(sDeferredEvent.data, eventData, 8); + } + return TRUE; +} + +void sub_81139BC(void) +{ + if (sDeferredEvent.id != QL_EVENT_0) + { + u16 *resp; + if (gQuestLogPlaybackState == 0) + { + sLastDepartedMap = 0; + StartRecordingQuestLogEntry(sDeferredEvent.id); + } + SetQuestLogEventToActive(sDeferredEvent.id); + resp = sQuestLogStorageCBs[sDeferredEvent.id](sEventRecordingPointer, sDeferredEvent.data); + sEventRecordingPointer = resp; + TryRecordEvent41_IncCursor(1); + ResetDeferredLinkEvent(); + 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) + sLastDepartedMap = 0; + else + sLastDepartedMap = 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.id = 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.id](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 SetQuestLogEventToActive(u16 eventId) +{ + if (gUnknown_203B044.id != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor) + { + gUnknown_203B044.id = 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; + sLastDepartedMap = 0; + sPlayedTheSlots = 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) + sEventShouldNotRecordSteps = 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.id == 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) +{ + sEventShouldNotRecordSteps = 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) +{ + sEventShouldNotRecordSteps = 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] = QL_EVENT_DEFEATED_CHAMPION | (2 << 12); + a0[1] = sQuestLogCursor; + a0[2] = eventData[1]; + a0[3] = eventData[2]; + *((u8 *)a0 + 8) = *((const u8 *)eventData + 6); + sEventShouldNotRecordSteps = 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) +{ + sEventShouldNotRecordSteps = 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) + sEventShouldNotRecordSteps = 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 SetQLPlayedTheSlots(void) +{ + sPlayedTheSlots = TRUE; +} + +static bool8 ShouldRegisterEvent_HandleDeparted(u16 eventId, const u16 *eventData) +{ + if (eventId != QL_EVENT_DEPARTED) + { + sLastDepartedMap = 0; + return TRUE; + } + if (sLastDepartedMap == *((u8 *)eventData + 1) + 1) + return FALSE; + sLastDepartedMap = *((u8 *)eventData + 1) + 1; + return TRUE; +} + +static bool8 ShouldRegisterEvent_HandleGameCorner(u16 eventId, const u16 *eventData) +{ + if (eventId != QL_EVENT_DEPARTED) + return TRUE; + + // Bug: should be QL_LOCATION_GAME_CORNER + 1 + if (*((u8 *)eventData + 1) == QL_LOCATION_GAME_CORNER && !sPlayedTheSlots) + return FALSE; + + sPlayedTheSlots = 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) + sEventShouldNotRecordSteps = 2; + else + sEventShouldNotRecordSteps = 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_objects.c b/src/quest_log_objects.c index 64b4b7fe5..fa3bbcce5 100644 --- a/src/quest_log_objects.c +++ b/src/quest_log_objects.c @@ -131,7 +131,7 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str void sub_815A540(void) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { s16 x, y; @@ -139,7 +139,7 @@ void sub_815A540(void) if (!MetatileBehavior_IsSurfable(MapGridGetMetatileBehaviorAt(x, y)) && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) { struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - SetPlayerAvatarTransitionFlags(0x01); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); } } diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 8abf7fab5..715061963 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -41,7 +41,7 @@ void sub_8150454(u8 a0) bool32 sub_8150474(u8 a0) { - if (gUnknown_3005E88 == 2) + if (gQuestLogPlaybackState == 2) { sub_8112720(a0); return TRUE; @@ -76,7 +76,7 @@ static void sub_8150530(void) struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[objectEvent->spriteId]; - if (gUnknown_3005E88 == 1 || gUnknown_3005E88 == 3) + if (gQuestLogPlaybackState == 1 || gQuestLogPlaybackState == 3) { u8 taskId; ScriptContext2_Enable(); diff --git a/src/safari_zone.c b/src/safari_zone.c index 29e436d35..748a7d996 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -67,7 +67,7 @@ void CB2_EndSafariBattle(void) { ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); - gFieldCallback = sub_807E3EC; + gFieldCallback = FieldCB_SafariZoneRanOutOfBalls; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) diff --git a/src/scrcmd.c b/src/scrcmd.c index bec0f4942..e3a9b3b72 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -37,24 +37,25 @@ #include "field_effect.h" #include "fieldmap.h" #include "field_door.h" +#include "constants/event_objects.h" extern u16 (*const gSpecials[])(void); extern u16 (*const gSpecialsEnd[])(void); extern const u8 *const gStdScripts[]; extern const u8 *const gStdScriptsEnd[]; -static bool8 sub_806B93C(struct ScriptContext * ctx); -static u8 sub_806B96C(struct ScriptContext * ctx); +static bool8 ScriptContext_NextCommandEndsScript(struct ScriptContext * ctx); +static u8 ScriptContext_GetQuestLogInput(struct ScriptContext * ctx); static EWRAM_DATA ptrdiff_t gVScriptOffset = 0; -static EWRAM_DATA u8 gUnknown_20370AC = 0; +static EWRAM_DATA u8 sQuestLogWaitButtonPressTimer = 0; static EWRAM_DATA u16 sPauseCounter = 0; static EWRAM_DATA u16 sMovingNpcId = 0; static EWRAM_DATA u16 sMovingNpcMapBank = 0; static EWRAM_DATA u16 sMovingNpcMapId = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0; -struct ScriptContext * gUnknown_3005070; +struct ScriptContext * sQuestLogScriptContextPtr; u8 gSelectedObjectEvent; // This is defined in here so the optimizer can't see its value when compiling @@ -803,7 +804,7 @@ bool8 ScrCmd_warpteleport2(struct ScriptContext * ctx) SetWarpDestination(mapGroup, mapNum, warpId, x, y); SavePlayerFacingDirectionForTeleport(GetPlayerFacingDirection()); - sub_807E500(); + DoTeleport2Warp(); ResetInitialPlayerAvatarState(); return TRUE; } @@ -926,7 +927,7 @@ bool8 ScrCmd_playbgm(struct ScriptContext * ctx) u16 songId = ScriptReadHalfword(ctx); bool8 val = ScriptReadByte(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; if (val == TRUE) Overworld_SetSavedMusic(songId); @@ -942,7 +943,7 @@ bool8 ScrCmd_savebgm(struct ScriptContext * ctx) bool8 ScrCmd_fadedefaultbgm(struct ScriptContext * ctx) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; Overworld_ChangeMusicToDefault(); return FALSE; @@ -951,7 +952,7 @@ bool8 ScrCmd_fadedefaultbgm(struct ScriptContext * ctx) bool8 ScrCmd_fadenewbgm(struct ScriptContext * ctx) { u16 music = ScriptReadHalfword(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; Overworld_ChangeMusicTo(music); return FALSE; @@ -961,7 +962,7 @@ bool8 ScrCmd_fadeoutbgm(struct ScriptContext * ctx) { u8 speed = ScriptReadByte(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; if (speed != 0) FadeOutBGMTemporarily(4 * speed); @@ -975,7 +976,7 @@ bool8 ScrCmd_fadeinbgm(struct ScriptContext * ctx) { u8 speed = ScriptReadByte(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; if (speed != 0) FadeInBGM(4 * speed); @@ -1203,7 +1204,7 @@ bool8 ScrCmd_lockall(struct ScriptContext * ctx) else { ScriptFreezeObjectEvents(); - SetupNativeScript(ctx, sub_8069590); + SetupNativeScript(ctx, NativeScript_WaitPlayerStopMoving); return TRUE; } } @@ -1219,12 +1220,12 @@ bool8 ScrCmd_lock(struct ScriptContext * ctx) if (gObjectEvents[gSelectedObjectEvent].active) { LockSelectedObjectEvent(); - SetupNativeScript(ctx, sub_8069648); + SetupNativeScript(ctx, NativeScript_WaitPlayerAndTargetNPCStopMoving); } else { ScriptFreezeObjectEvents(); - SetupNativeScript(ctx, sub_8069590); + SetupNativeScript(ctx, NativeScript_WaitPlayerStopMoving); } return TRUE; } @@ -1235,7 +1236,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext * ctx) u8 playerObjectId; HideFieldMessageBox(); - playerObjectId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); @@ -1249,7 +1250,7 @@ bool8 ScrCmd_release(struct ScriptContext * ctx) HideFieldMessageBox(); if (gObjectEvents[gSelectedObjectEvent].active) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSelectedObjectEvent]); - playerObjectId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); @@ -1319,16 +1320,16 @@ static bool8 WaitForAorBPress(void) if (JOY_NEW(B_BUTTON)) return TRUE; - if (sub_806B93C(gUnknown_3005070) == TRUE) + if (ScriptContext_NextCommandEndsScript(sQuestLogScriptContextPtr) == TRUE) { - u8 r4 = sub_806B96C(gUnknown_3005070); - RegisterQuestLogInput(r4); - if (r4 != QL_INPUT_OFF) + u8 qlogInput = ScriptContext_GetQuestLogInput(sQuestLogScriptContextPtr); + RegisterQuestLogInput(qlogInput); + if (qlogInput != QL_INPUT_OFF) { - if (gQuestLogState != QL_STATE_2) + if (gQuestLogState != QL_STATE_PLAYBACK) { ClearMsgBoxCancelableState(); - if (r4 != QL_INPUT_A && r4 != QL_INPUT_B) + if (qlogInput != QL_INPUT_A && qlogInput != QL_INPUT_B) SetQuestLogInputIsDpadFlag(); else { @@ -1339,18 +1340,18 @@ static bool8 WaitForAorBPress(void) } } } - if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_2) + if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK) { - if (gUnknown_20370AC == 120) + if (sQuestLogWaitButtonPressTimer == 120) return TRUE; else - gUnknown_20370AC++; + sQuestLogWaitButtonPressTimer++; } return FALSE; } -static bool8 sub_806B93C(struct ScriptContext * ctx) +static bool8 ScriptContext_NextCommandEndsScript(struct ScriptContext * ctx) { const u8 * script = ctx->scriptPtr; u8 nextCmd = *script; @@ -1365,7 +1366,7 @@ static bool8 sub_806B93C(struct ScriptContext * ctx) return TRUE; } -static u8 sub_806B96C(struct ScriptContext * ctx) +static u8 ScriptContext_GetQuestLogInput(struct ScriptContext * ctx) { if (JOY_HELD(DPAD_UP) && gSpecialVar_Facing != DIR_NORTH) return QL_INPUT_UP; @@ -1402,10 +1403,10 @@ static u8 sub_806B96C(struct ScriptContext * ctx) bool8 ScrCmd_waitbuttonpress(struct ScriptContext * ctx) { - gUnknown_3005070 = ctx; + sQuestLogScriptContextPtr = ctx; - if (sub_8112CAC() == 1 || gQuestLogState == 2) - gUnknown_20370AC = 0; + if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK) + sQuestLogWaitButtonPressTimer = 0; SetupNativeScript(ctx, WaitForAorBPress); return TRUE; } diff --git a/src/script.c b/src/script.c index 097f6d3f3..c45c6744c 100644 --- a/src/script.c +++ b/src/script.c @@ -435,7 +435,7 @@ bool8 TryRunOnFrameMapScript(void) { u8 *ptr; - if(gQuestLogState == 3) + if(gQuestLogState == QL_STATE_PLAYBACK_LAST) return 0; ptr = mapheader_get_first_match_from_tagged_ptr_list(2); diff --git a/src/slot_machine.c b/src/slot_machine.c index d0422ab99..c3496f6e5 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -814,7 +814,7 @@ static void MainTask_SlotsGameLoop(u8 taskId) } break; case 2: - sub_811539C(); + SetQLPlayedTheSlots(); sub_81409B4(); sub_8140148(); sSlotMachineState->field_06 = 0; diff --git a/src/sound.c b/src/sound.c index 99e9a162e..43b51020d 100644 --- a/src/sound.c +++ b/src/sound.c @@ -193,7 +193,7 @@ void PlayFanfareByFanfareNum(u8 fanfareNum) { u16 songNum; - if(gQuestLogState == 2) + if(gQuestLogState == QL_STATE_PLAYBACK) { sFanfareCounter = 0xFF; } @@ -362,7 +362,7 @@ void PlayCry4(u16 species, s8 pan, u8 mode) void PlayCry7(u16 species, u8 mode) // exclusive to FR/LG { - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); PlayCryInternal(species, 0, CRY_VOLUME, 10, mode); @@ -571,7 +571,7 @@ void PlayBGM(u16 songNum) void PlaySE(u16 songNum) { - if(gDisableMapMusicChangeOnMapLoad == 0 && gQuestLogState != 2) + if(gDisableMapMusicChangeOnMapLoad == 0 && gQuestLogState != QL_STATE_PLAYBACK) m4aSongNumStart(songNum); } diff --git a/src/start_menu.c b/src/start_menu.c index 6fd69d9e0..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" @@ -390,7 +391,7 @@ void ShowStartMenu(void) if (!IsUpdateLinkStateCBActive()) { FreezeObjectEvents(); - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); StopPlayerAvatar(); } OpenStartMenuWithFollowupFunc(Task_StartMenuHandleInput); diff --git a/src/text.c b/src/text.c index b1a098f53..1a0858604 100644 --- a/src/text.c +++ b/src/text.c @@ -523,7 +523,7 @@ void TextPrinterClearDownArrow(struct TextPrinter *textPrinter) bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - u8 delay = (gQuestLogState == 2) ? 50 : 120; + u8 delay = (gQuestLogState == QL_STATE_PLAYBACK) ? 50 : 120; if (subStruct->autoScrollDelay == delay) { @@ -712,7 +712,7 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; currChar |= *textPrinter->printerTemplate.currentChar << 8; textPrinter->printerTemplate.currentChar++; - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) PlayBGM(currChar); return 2; case 16: 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/src/union_room.c b/src/union_room.c index 7bace05ef..f24406267 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3461,7 +3461,7 @@ void InitUnionRoom(void) struct UnkStruct_URoom * ptr; sUnionRoomPlayerName[0] = EOS; - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; CreateTask(Task_InitUnionRoom, 0); sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; // Needed to match. diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 849c599e8..813cb029f 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -598,7 +598,7 @@ static void Task_ResetObjectsRematchWantedState(u8 taskId) if (task->data[0] == 0 && walkrun_is_standing_still() == TRUE) { - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); task->data[0] = 1; } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 118df3c8c..5e1daaf36 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -584,7 +584,7 @@ bool8 UpdateRepelCounter(void) if (InUnionRoom() == TRUE) return FALSE; - if (gQuestLogState == 2) + if (gQuestLogState == QL_STATE_PLAYBACK) return FALSE; steps = VarGet(VAR_REPEL_STEP_COUNT); 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" |
