mirror of
https://github.com/pret/pokefirered.git
synced 2026-05-11 22:45:18 -05:00
4444 lines
113 KiB
C
4444 lines
113 KiB
C
#include "global.h"
|
|
#include "constants/species.h"
|
|
#include "constants/items.h"
|
|
#include "data.h"
|
|
#include "malloc.h"
|
|
#include "main.h"
|
|
#include "task.h"
|
|
#include "palette.h"
|
|
#include "menu.h"
|
|
#include "random.h"
|
|
#include "menu_helpers.h"
|
|
#include "window.h"
|
|
#include "text_window.h"
|
|
#include "dynamic_placeholder_text_util.h"
|
|
#include "event_data.h"
|
|
#include "event_scripts.h"
|
|
#include "string_util.h"
|
|
#include "script.h"
|
|
#include "overworld.h"
|
|
#include "field_fadetransition.h"
|
|
#include "field_weather.h"
|
|
#include "event_object_movement.h"
|
|
#include "event_object_80688E4.h"
|
|
#include "event_object_lock.h"
|
|
#include "field_player_avatar.h"
|
|
#include "field_control_avatar.h"
|
|
#include "battle.h"
|
|
#include "item.h"
|
|
#include "region_map.h"
|
|
#include "map_name_popup.h"
|
|
#include "wild_encounter.h"
|
|
#include "help_system.h"
|
|
#include "party_menu.h"
|
|
#include "pokemon_storage_system.h"
|
|
#include "save.h"
|
|
#include "link.h"
|
|
#include "quest_log_815A008.h"
|
|
#include "quest_log_8150454.h"
|
|
#include "quest_log.h"
|
|
#include "new_menu_helpers.h"
|
|
#include "strings.h"
|
|
|
|
u8 gUnknown_3005E88;
|
|
|
|
struct Var4038Struct
|
|
{
|
|
u8 unk_0_0:7;
|
|
u8 unk_0_7:1;
|
|
u8 unk_1;
|
|
};
|
|
|
|
#define VAR_0x4038_STRUCT ((struct Var4038Struct *)GetVarPointer(VAR_0x4038))
|
|
|
|
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 UnkStruct_203AE98
|
|
{
|
|
u8 unk_0;
|
|
u8 unk_1;
|
|
u8 unk_2;
|
|
u8 unk_3;
|
|
u16 unk_4;
|
|
u8 unk_6;
|
|
};
|
|
|
|
struct UnkStruct_300201C
|
|
{
|
|
u16 idx:15;
|
|
u16 isFlag:1;
|
|
u16 value;
|
|
};
|
|
|
|
struct UnkStruct_203B044
|
|
{
|
|
u8 unk_0;
|
|
u8 unk_1;
|
|
u16 unk_2;
|
|
};
|
|
|
|
u8 gUnknown_3005E88;
|
|
u16 sNumQuestLogs;
|
|
struct UnkStruct_3005E90 gUnknown_3005E90;
|
|
struct UnkStruct_203AE98 * gUnknown_3005E94;
|
|
|
|
static struct UnkStruct_300201C * sFlagOrVarRecords;
|
|
static u16 sNumFlagsOrVars;
|
|
|
|
static EWRAM_DATA u8 gUnknown_203ADF8 = 0;
|
|
static EWRAM_DATA u8 sNumScenes = 0;
|
|
EWRAM_DATA u8 gUnknown_203ADFA = 0;
|
|
static EWRAM_DATA u16 gUnknown_203ADFC = 0;
|
|
static EWRAM_DATA u8 gUnknown_203ADFE[3] = {0};
|
|
static EWRAM_DATA u16 *gUnknown_203AE04 = NULL;
|
|
static EWRAM_DATA u16 *gUnknown_203AE08 = 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_203AE98 gUnknown_203AE98[32] = {0};
|
|
static EWRAM_DATA u16 sQuestLogIdx = 0;
|
|
static EWRAM_DATA u8 gUnknown_203AF9A[64][2] = {{0}};
|
|
static EWRAM_DATA u16 gUnknown_203B01A = 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 u8 gUnknown_203B049 = 0;
|
|
static EWRAM_DATA u8 gUnknown_203B04A = 0;
|
|
static EWRAM_DATA u8 gUnknown_203B04B = 0;
|
|
|
|
static void sub_8110A00(void);
|
|
static void sub_8110A3C(void);
|
|
static void sub_8110BB0(u8);
|
|
static void sub_8110BE8(u8);
|
|
static void sub_8110E3C(void);
|
|
static void sub_8110D94(void);
|
|
static void sub_8110E20(void);
|
|
static void sub_8110D48(u8);
|
|
static u8 sub_8110E68(struct UnkStruct_203AE98 *);
|
|
static void sub_8110F90(u8);
|
|
static void sub_8111150(u8);
|
|
static void sub_8111368(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 UnkStruct_203AE98 *);
|
|
static void sub_81118F4(s8);
|
|
static void QuestLog_AdvancePlayhead(void);
|
|
static void QuestLog_EndPlayback(void);
|
|
static void Task_RunPlaybackCB(u8);
|
|
static void sub_8111AD8(void);
|
|
static void sub_8111B80(void);
|
|
static u8 sub_8111BD4(void);
|
|
static void sub_8111D10(void);
|
|
static void sub_8111D90(u8);
|
|
static void sub_8111E20(void);
|
|
static void QuestLog_SkipToEndOfPlayback(s8);
|
|
static void QuestLog_WaitFadeAndCancelPlayback(void);
|
|
static bool8 sub_8111F60(void);
|
|
static void sub_8111F8C(u8);
|
|
static void sub_8111FCC(u8);
|
|
static void sub_8112044(u8);
|
|
static void sub_81120AC(u8);
|
|
static bool8 sub_81121D8(u8);
|
|
static void sub_811229C(void);
|
|
static void sub_8112888(u8);
|
|
static void sub_8112940(u8, struct UnkStruct_203AE98 *, u16);
|
|
static bool8 sub_8112CEC(void);
|
|
static bool8 sub_8112D1C(void);
|
|
static void sub_8113078(struct Var4038Struct *);
|
|
static void sub_81130BC(struct Var4038Struct *);
|
|
static u8 sub_8113194(struct Var4038Struct *);
|
|
static u16 sub_81132A0(struct Var4038Struct *);
|
|
static void sub_81132E0(struct Var4038Struct *);
|
|
static bool16 sub_811337C(struct Var4038Struct *);
|
|
static void sub_8113390(struct Var4038Struct *);
|
|
static void sub_8113414(struct LinkBattleRecords *, u8, u8);
|
|
static void sub_81134CC(struct Var4038Struct *);
|
|
static bool8 sub_8113508(struct Var4038Struct * );
|
|
static void sub_8113524(struct Var4038Struct *);
|
|
static bool8 sub_81136D4(void);
|
|
static bool8 sub_8113778(u16, const u16 *);
|
|
static bool8 sub_81137E4(u16, const u16 *);
|
|
static u16 *sub_8113828(u16, const u16 *);
|
|
static bool8 sub_81138A0(u16, const u16 *);
|
|
static bool8 sub_8113954(u16, const u16 *);
|
|
static void sub_8113A1C(u16);
|
|
static void sub_811381C(void);
|
|
static bool8 sub_8113A44(u16, const u16 *);
|
|
static u16 *QuestLog_SkipCommand(u16 *, u16 **);
|
|
static void sub_8113ABC(u16 *);
|
|
static bool8 sub_8113AE8(u16 *);
|
|
static bool8 sub_8113B44(u16 *);
|
|
static void sub_8113B88(void);
|
|
static void sub_8113B94(u16);
|
|
static void sub_8113BD8(void);
|
|
static u16 *sub_8113BF4(u16 *);
|
|
static u16 *sub_8113C20(u16 *, struct UnkStruct_203AE98 *);
|
|
static u16 *sub_8113C5C(u16 *, u16);
|
|
static u16 *sub_8113C8C(u16 *, struct UnkStruct_203AE98 *);
|
|
static u16 *sub_8113CC8(u16 *, struct UnkStruct_203AE98 *);
|
|
static u16 *sub_8113D08(u16 *, struct UnkStruct_203AE98 *);
|
|
static u16 *sub_8113D48(u16 *, struct UnkStruct_203AE98 *);
|
|
static u16 *sub_8113D94(u16 *, struct UnkStruct_203AE98 *);
|
|
static u16 *sub_8113F14(u16 *, const u16 *);
|
|
static const u16 *sub_8113F3C(const u16 *);
|
|
static u16 *sub_8113F80(u16 *, const u16 *);
|
|
static const u16 *sub_8113FBC(const u16 *);
|
|
static u16 *sub_8114174(u16 *, const u16 *);
|
|
static const u16 *sub_8114188(const u16 *);
|
|
static u16 *sub_81141D0(u16 *, const u16 *);
|
|
static const u16 *sub_81141E4(const u16 *);
|
|
static u16 *sub_811422C(u16 *, const u16 *);
|
|
static const u16 *sub_8114240(const u16 *);
|
|
static u16 *sub_8114288(u16 *, const u16 *);
|
|
static const u16 *sub_811429C(const u16 *);
|
|
static u16 *sub_8114310(u16 *, const u16 *);
|
|
static const u16 *sub_8114324(const u16 *);
|
|
static u16 *sub_8114380(u16 *, const u16 *);
|
|
static const u16 *sub_8114394(const u16 *);
|
|
static u16 *sub_81143F0(u16 *, const u16 *);
|
|
static const u16 *sub_811443C(const u16 *);
|
|
static u16 *sub_811445C(u16 *, const u16 *);
|
|
static const u16 *sub_811448C(const u16 *);
|
|
static u16 *sub_81144EC(u16 *, const u16 *);
|
|
static const u16 *sub_8114518(const u16 *);
|
|
static u16 *sub_8114578(u16 *, const u16 *);
|
|
static const u16 *sub_81145A4(const u16 *);
|
|
static u16 *sub_8114604(u16 *, const u16 *);
|
|
static const u16 *sub_811464C(const u16 *);
|
|
static u16 *sub_8114710(u16 *, const u16 *);
|
|
static const u16 *sub_8114724(const u16 *);
|
|
static u16 *sub_8114744(u16 *, const u16 *);
|
|
static const u16 *sub_8114758(const u16 *);
|
|
static u16 *sub_8114778(u16 *, const u16 *);
|
|
static const u16 *sub_81147A8(const u16 *);
|
|
static u16 *sub_8114808(u16 *, const u16 *);
|
|
static const u16 *sub_8114834(const u16 *);
|
|
static u16 *sub_811488C(u16 *, const u16 *);
|
|
static const u16 *sub_81148BC(const u16 *);
|
|
static u16 *sub_8114918(u16 *, const u16 *);
|
|
static const u16 *sub_8114944(const u16 *);
|
|
static u16 *sub_8114990(u16 *, const u16 *);
|
|
static const u16 *sub_81149D0(const u16 *);
|
|
static u16 *sub_8114A1C(u16 *, const u16 *);
|
|
static const u16 *sub_8114A4C(const u16 *);
|
|
static u16 *sub_8114AA0(u16 *, const u16 *);
|
|
static const u16 *sub_8114AC8(const u16 *);
|
|
static u16 *sub_8114B0C(u16 *, const u16 *);
|
|
static const u16 *sub_8114B34(const u16 *);
|
|
static u16 *sub_8114B78(u16 *, const u16 *);
|
|
static const u16 *sub_8114BA0(const u16 *);
|
|
static u16 *sub_8114BE4(u16 *, const u16 *);
|
|
static const u16 *sub_8114C0C(const u16 *);
|
|
static u16 *sub_8114C68(u16 *, const u16 *);
|
|
static const u16 *sub_8114C8C(const u16 *);
|
|
static u16 *sub_8114CC0(u16 *, const u16 *);
|
|
static const u16 *sub_8114CE4(const u16 *);
|
|
static u16 *sub_8114D4C(u16 *, const u16 *);
|
|
static const u16 *sub_8114D68(const u16 *);
|
|
static u16 *sub_8114DE8(u16 *, const u16 *);
|
|
static const u16 *sub_8114E68(const u16 *);
|
|
static bool8 sub_8114FBC(u16);
|
|
static u16 *sub_8114FF0(u16 *, const u16 *);
|
|
static const u16 *sub_811500C(const u16 *);
|
|
static u16 *sub_8115078(u16 *, const u16 *);
|
|
static const u16 *sub_81150CC(const u16 *);
|
|
static u16 *sub_81151C0(u16 *, const u16 *);
|
|
static const u16 *sub_81151DC(const u16 *);
|
|
static u16 *sub_8115280(u16 *, const u16 *);
|
|
static const u16 *sub_81152BC(const u16 *);
|
|
static bool8 sub_81153A8(u16, const u16 *);
|
|
static bool8 sub_81153E4(u16, const u16 *);
|
|
static u16 *sub_8115410(u16 *, const u16 *);
|
|
static const u16 *sub_8115460(const u16 *);
|
|
static u16 *sub_81154DC(u16 *, const u16 *);
|
|
static const u16 *sub_8115518(const u16 *);
|
|
static u16 *sub_81155A4(u16 *, const u16 *);
|
|
static const u16 *sub_81155E0(const u16 *);
|
|
static u16 *sub_81156D8(u16 *, const u16 *);
|
|
static const u16 *sub_8115700(const u16 *);
|
|
static u16 *sub_81157DC(u16 *, const u16 *);
|
|
static const u16 *sub_8115800(const u16 *);
|
|
void sub_8115834(u8 *);
|
|
|
|
extern const u8 gUnknown_841A155[];
|
|
extern const u8 gUnknown_841A16F[];
|
|
extern const u8 gUnknown_841A193[];
|
|
extern const u8 gUnknown_841A1CD[];
|
|
extern const u8 gUnknown_841A1E7[];
|
|
extern const u8 gUnknown_841A210[];
|
|
extern const u8 gUnknown_841A220[];
|
|
extern const u8 gUnknown_841A255[];
|
|
extern const u8 gUnknown_841A277[];
|
|
extern const u8 gUnknown_841A2B0[];
|
|
extern const u8 gUnknown_841A2E1[];
|
|
extern const u8 gUnknown_841A312[];
|
|
extern const u8 gUnknown_841A349[];
|
|
extern const u8 gUnknown_841A391[];
|
|
extern const u8 gUnknown_841A3DA[];
|
|
extern const u8 gUnknown_841A3FF[];
|
|
extern const u8 gUnknown_841A422[];
|
|
extern const u8 gUnknown_841A477[];
|
|
extern const u8 gUnknown_841A4C6[];
|
|
extern const u8 gUnknown_841A502[];
|
|
extern const u8 gUnknown_841A506[];
|
|
extern const u8 gUnknown_841A50B[];
|
|
extern const u8 gUnknown_841A53A[];
|
|
extern const u8 gUnknown_841A566[];
|
|
extern const u8 gUnknown_841A59C[];
|
|
extern const u8 gUnknown_841A5D9[];
|
|
extern const u8 gUnknown_841A5FA[];
|
|
extern const u8 gUnknown_841A60A[];
|
|
extern const u8 gUnknown_841A632[];
|
|
extern const u8 gUnknown_841A64F[];
|
|
extern const u8 gUnknown_841A66E[];
|
|
extern const u8 gUnknown_841A694[];
|
|
extern const u8 gUnknown_841A6A5[];
|
|
extern const u8 gUnknown_841A6E1[];
|
|
extern const u8 gUnknown_841A732[];
|
|
extern const u8 gUnknown_841A74E[];
|
|
extern const u8 gUnknown_841A756[];
|
|
extern const u8 gUnknown_841A762[];
|
|
extern const u8 gUnknown_841A76A[];
|
|
extern const u8 gUnknown_841A7B0[];
|
|
extern const u8 gUnknown_841A7DD[];
|
|
extern const u8 gUnknown_841A810[];
|
|
extern const u8 gUnknown_841A858[];
|
|
extern const u8 gUnknown_841A896[];
|
|
extern const u8 gUnknown_841A8D4[];
|
|
extern const u8 gUnknown_841A8DD[];
|
|
extern const u8 gUnknown_841A8E0[];
|
|
extern const u8 gUnknown_841A90C[];
|
|
extern const u8 gUnknown_841A938[];
|
|
extern const u8 gUnknown_841A965[];
|
|
extern const u8 gUnknown_841A9A9[];
|
|
extern const u8 gUnknown_841A9D4[];
|
|
extern const u8 gUnknown_841AA01[];
|
|
extern const u8 gUnknown_841AA2B[];
|
|
extern const u8 gUnknown_841AA76[];
|
|
extern const u8 gUnknown_841AAAA[];
|
|
extern const u8 gUnknown_841AAEC[];
|
|
extern const u8 gUnknown_841AB29[];
|
|
extern const u8 gUnknown_841AB74[];
|
|
extern const u8 gUnknown_841AB8E[];
|
|
extern const u8 gUnknown_841ABAB[];
|
|
extern const u8 gUnknown_841ABCD[];
|
|
extern const u8 gUnknown_841ABF9[];
|
|
extern const u8 gUnknown_841AC2A[];
|
|
extern const u8 gUnknown_841AC51[];
|
|
extern const u8 gUnknown_841AC93[];
|
|
extern const u8 gUnknown_841ACBC[];
|
|
extern const u8 gUnknown_841ACF9[];
|
|
extern const u8 gUnknown_841AD1D[];
|
|
extern const u8 gUnknown_841AD3C[];
|
|
extern const u8 gUnknown_841AD69[];
|
|
extern const u8 gUnknown_841AD9E[];
|
|
extern const u8 gUnknown_841ADC8[];
|
|
extern const u8 gUnknown_841ADFF[];
|
|
extern const u8 gUnknown_841AE1E[];
|
|
extern const u8 gUnknown_841AE48[];
|
|
extern const u8 gUnknown_841AE8F[];
|
|
extern const u8 gUnknown_841AEA7[];
|
|
extern const u8 gUnknown_841AEDC[];
|
|
extern const u8 gUnknown_841AF0C[];
|
|
extern const u8 gUnknown_841AF3E[];
|
|
extern const u8 gUnknown_841AF6D[];
|
|
extern const u8 gUnknown_841AF98[];
|
|
extern const u8 gUnknown_841AF9F[];
|
|
extern const u8 gUnknown_841AFA6[];
|
|
extern const u8 gUnknown_841AFD1[];
|
|
extern const u8 gUnknown_841AFD6[];
|
|
extern const u8 gUnknown_841B005[];
|
|
extern const u8 gUnknown_841B03F[];
|
|
extern const u8 gUnknown_841B064[];
|
|
extern const u8 gUnknown_841B073[];
|
|
extern const u8 gQuestLogString_Home[];
|
|
extern const u8 gQuestLogString_OakResearchLab[];
|
|
extern const u8 gQuestLogString_Gym[];
|
|
extern const u8 gQuestLogString_PokemonLeagueGate[];
|
|
extern const u8 gQuestLogString_ViridianForest[];
|
|
extern const u8 gQuestLogString_PewterMuseumOfScience[];
|
|
extern const u8 gQuestLogString_MtMoon[];
|
|
extern const u8 gQuestLogString_BikeShop[];
|
|
extern const u8 gQuestLogString_BillSHouse[];
|
|
extern const u8 gQuestLogString_DayCare[];
|
|
extern const u8 gQuestLogString_UndergroundPath[];
|
|
extern const u8 gQuestLogString_PokemonFanClub[];
|
|
extern const u8 gQuestLogString_SSAnne[];
|
|
extern const u8 gQuestLogString_DiglettSCave[];
|
|
extern const u8 gQuestLogString_RockTunnel[];
|
|
extern const u8 gQuestLogString_PowerPlant[];
|
|
extern const u8 gQuestLogString_PokemonTower[];
|
|
extern const u8 gQuestLogString_VolunteerHouse[];
|
|
extern const u8 gQuestLogString_NameRaterSHouse[];
|
|
extern const u8 gQuestLogString_CeladonDeptStore[];
|
|
extern const u8 gQuestLogString_CeladonMansion[];
|
|
extern const u8 gQuestLogString_RocketGameCorner[];
|
|
extern const u8 gQuestLogString_Restaurant[];
|
|
extern const u8 gQuestLogString_RocketHideout[];
|
|
extern const u8 gQuestLogString_SafariZone[];
|
|
extern const u8 gQuestLogString_WardenSHome[];
|
|
extern const u8 gQuestLogString_FightingDojo[];
|
|
extern const u8 gQuestLogString_SilphCo[];
|
|
extern const u8 gQuestLogString_SeafoamIslands[];
|
|
extern const u8 gQuestLogString_PokemonMansion[];
|
|
extern const u8 gQuestLogString_PokemonResearchLab[];
|
|
extern const u8 gQuestLogString_VictoryRoad[];
|
|
extern const u8 gQuestLogString_PokemonLeague[];
|
|
extern const u8 gQuestLogString_CeruleanCave[];
|
|
extern const u8 gUnknown_8418C1B[];
|
|
|
|
|
|
static const struct WindowTemplate gUnknown_845661C[3] = {
|
|
{ 0, 0, 0, 30, 2, 15, 0x0e9 },
|
|
{ 0, 0, 18, 30, 2, 15, 0x0ad },
|
|
{ 0, 0, 14, 30, 6, 15, 0x14c }
|
|
};
|
|
|
|
static const u8 gUnknown_8456634[3] = {15, 1, 12};
|
|
|
|
static const u16 gUnknown_8456638[] = INCBIN_U16("data/graphics/unknown_8456638.bin");
|
|
|
|
static const u8 gUnknown_8456698[] = {17, 10, 3};
|
|
|
|
void sub_8110840(void * oldPointer)
|
|
{
|
|
ptrdiff_t offset = (void *)gSaveBlock1Ptr - oldPointer;
|
|
if (gUnknown_203AE04)
|
|
gUnknown_203AE04 = (void *)gUnknown_203AE04 + offset;
|
|
if (gUnknown_203ADFA != 0)
|
|
{
|
|
if (gUnknown_203AE08)
|
|
gUnknown_203AE08 = (void *)gUnknown_203AE08 + offset;
|
|
if (gUnknown_203ADFA == 2)
|
|
{
|
|
int r3;
|
|
for (r3 = 0; r3 < 0x20; r3++)
|
|
if (gUnknown_203AE0C[r3])
|
|
gUnknown_203AE0C[r3] = (void *)gUnknown_203AE0C[r3] + offset;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_811089C(void)
|
|
{
|
|
memset(gSaveBlock1Ptr->questLog, 0, sizeof(gSaveBlock1Ptr->questLog));
|
|
gUnknown_203ADF8 = 0;
|
|
gUnknown_203ADFA = 0;
|
|
sQuestLogCB = NULL;
|
|
gUnknown_203AE08 = NULL;
|
|
gUnknown_203AE04 = NULL;
|
|
sub_8113BD8();
|
|
sub_81138F8();
|
|
}
|
|
|
|
void sub_81108F0(u8 a0)
|
|
{
|
|
memset(gSaveBlock1Ptr->questLog + a0, 0, sizeof(struct QuestLog));
|
|
gUnknown_203AE04 = NULL;
|
|
}
|
|
|
|
void sub_8110920(void)
|
|
{
|
|
gUnknown_203AE04 = NULL;
|
|
}
|
|
|
|
void RunQuestLogCB(void)
|
|
{
|
|
if (sQuestLogCB != NULL)
|
|
sQuestLogCB();
|
|
}
|
|
|
|
bool8 sub_8110944(const void * a0, size_t a1)
|
|
{
|
|
void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568;
|
|
void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end;
|
|
r0 -= a1;
|
|
if ((const void *)a0 < r2 || (const void *)a0 > r0)
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
bool8 sub_8110988(u16 *a0, size_t a1)
|
|
{
|
|
void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568;
|
|
void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end;
|
|
r0 -= a1;
|
|
if ((void *)a0 < r2 || (void *)a0 > r0)
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_81109CC(u8 a0)
|
|
{
|
|
gUnknown_203ADFA = a0;
|
|
if (a0 == 1)
|
|
sQuestLogCB = sub_8110A00;
|
|
else
|
|
sQuestLogCB = sub_8110A3C;
|
|
}
|
|
|
|
static void sub_8110A00(void)
|
|
{
|
|
if (sub_8110E68(gUnknown_203AE98) != 1)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
sub_8110E3C();
|
|
gUnknown_203ADFA = 0;
|
|
sQuestLogCB = NULL;
|
|
}
|
|
}
|
|
|
|
static void sub_8110A3C(void)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_0 == 2)
|
|
gUnknown_203AE94.unk_0_0 = 0;
|
|
|
|
if (gUnknown_203AE94.unk_0_6 == 0)
|
|
{
|
|
if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < 32 && gUnknown_203AE0C[gUnknown_203AE94.unk_1]))
|
|
sub_8111AD8();
|
|
else
|
|
{
|
|
gUnknown_203AE94.unk_0_6 = 2;
|
|
ScriptContext2_Enable();
|
|
sub_81118F4(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_8110AB4(void)
|
|
{
|
|
gSpecialVar_Result = gUnknown_203ADFA;
|
|
}
|
|
|
|
u8 sub_8110AC8(void)
|
|
{
|
|
return gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000;
|
|
}
|
|
|
|
void sub_8110AEC(u16 a0)
|
|
{
|
|
if (gUnknown_203ADF8 > 3)
|
|
gUnknown_203ADF8 = 0;
|
|
|
|
sub_81108F0(gUnknown_203ADF8);
|
|
sub_8113B88();
|
|
gUnknown_203AE08 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568;
|
|
if ((a0 >= 12 && a0 < 20) || a0 == 35)
|
|
gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 2;
|
|
else
|
|
gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 1;
|
|
QuestLog_GetSaneMonCounts();
|
|
sub_8110BB0(gUnknown_203ADF8);
|
|
sub_8110BE8(gUnknown_203ADF8);
|
|
sub_8110D94();
|
|
sub_8110E20();
|
|
sub_8110D48(gUnknown_203ADF8);
|
|
gUnknown_203ADFC = 0;
|
|
sub_8112940(2, gUnknown_203AE98, 0x100);
|
|
sub_8110E68(gUnknown_203AE98);
|
|
sub_81109CC(1);
|
|
}
|
|
|
|
static void sub_8110BB0(u8 a0)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
questLog->unk_001 = gSaveBlock1Ptr->location.mapGroup;
|
|
questLog->unk_002 = gSaveBlock1Ptr->location.mapNum;
|
|
questLog->unk_003 = gSaveBlock1Ptr->location.warpId;
|
|
questLog->unk_004 = gSaveBlock1Ptr->pos.x;
|
|
questLog->unk_006 = gSaveBlock1Ptr->pos.y;
|
|
}
|
|
|
|
static void sub_8110BE8(u8 a0)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
u16 i;
|
|
|
|
sub_815A008(questLog);
|
|
|
|
for (i = 0; i < NELEMS(gSaveBlock1Ptr->objectEventTemplates); i++)
|
|
{
|
|
if (gSaveBlock1Ptr->objectEventTemplates[i].x < 0)
|
|
{
|
|
questLog->npcData[i].x = -1 * gSaveBlock1Ptr->objectEventTemplates[i].x;
|
|
questLog->npcData[i].negx = TRUE;
|
|
}
|
|
else
|
|
{
|
|
questLog->npcData[i].x = (u8)gSaveBlock1Ptr->objectEventTemplates[i].x;
|
|
questLog->npcData[i].negx = FALSE;
|
|
}
|
|
if (gSaveBlock1Ptr->objectEventTemplates[i].y < 0)
|
|
{
|
|
questLog->npcData[i].y = (-gSaveBlock1Ptr->objectEventTemplates[i].y << 24) >> 24;
|
|
questLog->npcData[i].negy = TRUE;
|
|
}
|
|
else
|
|
{
|
|
questLog->npcData[i].y = (u8)gSaveBlock1Ptr->objectEventTemplates[i].y;
|
|
questLog->npcData[i].negy = FALSE;
|
|
}
|
|
questLog->npcData[i].elevation = gSaveBlock1Ptr->objectEventTemplates[i].elevation;
|
|
questLog->npcData[i].movementType = gSaveBlock1Ptr->objectEventTemplates[i].movementType;
|
|
}
|
|
}
|
|
|
|
static void sub_8110D48(u8 a0)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
|
|
CpuCopy16(gSaveBlock1Ptr->flags, questLog->flags, FLAGS_COUNT * sizeof(u8));
|
|
CpuCopy16(gSaveBlock1Ptr->vars, questLog->vars, VARS_COUNT * sizeof(u16));
|
|
}
|
|
|
|
static void sub_8110D94(void)
|
|
{
|
|
u16 i, j;
|
|
u16 sp0[4];
|
|
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
sp0[i] = 0;
|
|
for (j = 0; j < 16; j++)
|
|
{
|
|
if (gSaveBlock1Ptr->trainerRematches[16 * i + j])
|
|
{
|
|
sp0[i] += (1 << j);
|
|
}
|
|
}
|
|
VarSet(VAR_0x40AA + i, sp0[i]);
|
|
}
|
|
}
|
|
|
|
static void sub_8110E20(void)
|
|
{
|
|
VarSet(VAR_0x40AE, gSaveBlock1Ptr->mapLayoutId);
|
|
}
|
|
|
|
static void sub_8110E3C(void)
|
|
{
|
|
sub_8113BF4(gUnknown_203AE08);
|
|
if (++gUnknown_203ADF8 > 3)
|
|
gUnknown_203ADF8 = 0;
|
|
}
|
|
|
|
static bool8 sub_8110E68(struct UnkStruct_203AE98 * a0)
|
|
{
|
|
u16 i;
|
|
|
|
for (i = gUnknown_203ADFC; i < sQuestLogIdx; i++)
|
|
{
|
|
if (gUnknown_203AE08 == NULL)
|
|
return FALSE;
|
|
switch (a0[i].unk_6)
|
|
{
|
|
case 0:
|
|
case 1:
|
|
gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]);
|
|
break;
|
|
default:
|
|
gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]);
|
|
break;
|
|
}
|
|
if (gUnknown_203AE08 == NULL)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (gUnknown_3005E88 == 0)
|
|
{
|
|
gUnknown_203AE08 = sub_8113BF4(gUnknown_203AE08);
|
|
return FALSE;
|
|
}
|
|
gUnknown_203ADFC = sQuestLogIdx;
|
|
return TRUE;
|
|
}
|
|
|
|
void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId)
|
|
{
|
|
u8 i;
|
|
|
|
sub_811381C();
|
|
sNumScenes = 0;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if (gSaveBlock1Ptr->questLog[i].unk_000)
|
|
sNumScenes++;
|
|
}
|
|
|
|
if (sNumScenes != 0)
|
|
{
|
|
gHelpSystemEnabled = FALSE;
|
|
sub_8110F90(taskId);
|
|
DestroyTask(taskId);
|
|
}
|
|
else
|
|
{
|
|
SetMainCallback2(CB2_ContinueSavedGame);
|
|
DestroyTask(taskId);
|
|
}
|
|
}
|
|
|
|
static void sub_8110F90(u8 unused)
|
|
{
|
|
gSaveBlock1Ptr->location.mapGroup = 3;
|
|
gSaveBlock1Ptr->location.mapNum = 19;
|
|
gSaveBlock1Ptr->location.warpId = -1;
|
|
gUnknown_203ADF8 = 0;
|
|
gDisableMapMusicChangeOnMapLoad = 1;
|
|
DisableWildEncounters(TRUE);
|
|
sub_8111368();
|
|
}
|
|
|
|
void sub_8110FCC(void)
|
|
{
|
|
sub_811175C(gUnknown_203ADF8, gUnknown_203AE98);
|
|
sub_8113B88();
|
|
sub_8112940(1, gUnknown_203AE98, 0x100);
|
|
sub_8111150(gUnknown_203ADF8);
|
|
}
|
|
|
|
bool8 sub_8111000(void)
|
|
{
|
|
LoadPalette(stdpal_get(4), 0xF0, 0x20);
|
|
sub_81109CC(2);
|
|
sub_807DF64();
|
|
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
|
|
gUnknown_203AE94.unk_0_0 = 2;
|
|
return 1;
|
|
}
|
|
|
|
bool8 sub_8111038(void)
|
|
{
|
|
LoadPalette(stdpal_get(4), 0xF0, 0x20);
|
|
sub_81109CC(2);
|
|
sub_807DF7C();
|
|
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
|
|
gUnknown_203AE94.unk_0_0 = 2;
|
|
return 1;
|
|
}
|
|
|
|
void sub_8111070(u8 a0)
|
|
{
|
|
u8 i;
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
gUnknown_203ADFE[i] = AddWindow(&gUnknown_845661C[i]);
|
|
FillWindowPixelRect(gUnknown_203ADFE[i], 15, 0, 0, gUnknown_845661C[i].width * 8, gUnknown_845661C[i].height * 8);
|
|
}
|
|
|
|
// _("Previously on your quest…$")
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A155);
|
|
|
|
if (a0)
|
|
{
|
|
ConvertIntToDecimalStringN(gStringVar1, a0, STR_CONV_MODE_LEFT_ALIGN, 1);
|
|
StringAppend(gStringVar4, gStringVar1);
|
|
}
|
|
|
|
AddTextPrinterParameterized4(gUnknown_203ADFE[0], 2, 2, 2, 1, 2, gUnknown_8456634, 0, gStringVar4);
|
|
PutWindowTilemap(gUnknown_203ADFE[0]);
|
|
PutWindowTilemap(gUnknown_203ADFE[1]);
|
|
CopyWindowToVram(gUnknown_203ADFE[0], 2);
|
|
CopyWindowToVram(gUnknown_203ADFE[2], 2);
|
|
CopyWindowToVram(gUnknown_203ADFE[1], 3);
|
|
}
|
|
|
|
void sub_8111134(void)
|
|
{
|
|
PutWindowTilemap(gUnknown_203ADFE[1]);
|
|
CopyWindowToVram(gUnknown_203ADFE[1], 1);
|
|
}
|
|
|
|
static void sub_8111150(u8 a0)
|
|
{
|
|
struct QuestLog *questLog = &gSaveBlock1Ptr->questLog[a0];
|
|
u16 i;
|
|
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
if (questLog->npcData[i].negx)
|
|
gSaveBlock1Ptr->objectEventTemplates[i].x = -questLog->npcData[i].x;
|
|
else
|
|
gSaveBlock1Ptr->objectEventTemplates[i].x = questLog->npcData[i].x;
|
|
if (questLog->npcData[i].negy)
|
|
gSaveBlock1Ptr->objectEventTemplates[i].y = -(u8)questLog->npcData[i].y;
|
|
else
|
|
gSaveBlock1Ptr->objectEventTemplates[i].y = questLog->npcData[i].y;
|
|
gSaveBlock1Ptr->objectEventTemplates[i].elevation = questLog->npcData[i].elevation;
|
|
gSaveBlock1Ptr->objectEventTemplates[i].movementType = questLog->npcData[i].movementType;
|
|
}
|
|
|
|
sub_815A1F8(questLog, gSaveBlock1Ptr->objectEventTemplates);
|
|
}
|
|
|
|
void sub_8111274(u8 a0, u8 a1)
|
|
{
|
|
struct WarpData sp0;
|
|
|
|
if (!a1)
|
|
{
|
|
gSaveBlock1Ptr->location.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001;
|
|
gSaveBlock1Ptr->location.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002;
|
|
gSaveBlock1Ptr->location.warpId = gSaveBlock1Ptr->questLog[a0].unk_003;
|
|
gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->questLog[a0].unk_004;
|
|
gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->questLog[a0].unk_006;
|
|
}
|
|
else
|
|
{
|
|
sp0.mapGroup = gSaveBlock1Ptr->questLog[a0].unk_001;
|
|
sp0.mapNum = gSaveBlock1Ptr->questLog[a0].unk_002;
|
|
sp0.warpId = gSaveBlock1Ptr->questLog[a0].unk_003;
|
|
sp0.x = gSaveBlock1Ptr->questLog[a0].unk_004;
|
|
sp0.y = gSaveBlock1Ptr->questLog[a0].unk_006;
|
|
sub_8055D5C(&sp0);
|
|
}
|
|
}
|
|
|
|
static void sub_8111368(void)
|
|
{
|
|
gUnknown_203ADFA = 2;
|
|
ResetSpecialVars();
|
|
ClearBag();
|
|
ClearPCItemSlots();
|
|
if (sub_8110AC8() == 1)
|
|
{
|
|
sub_8111274(gUnknown_203ADF8, 0);
|
|
gFieldCallback2 = sub_8111038;
|
|
SetMainCallback2(sub_80572A8);
|
|
}
|
|
else
|
|
{
|
|
sub_8111274(gUnknown_203ADF8, 1);
|
|
WarpIntoMap();
|
|
gFieldCallback2 = sub_8111000;
|
|
SetMainCallback2(sub_805726C);
|
|
}
|
|
}
|
|
|
|
void sub_81113E4(void)
|
|
{
|
|
struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[gUnknown_203ADF8];
|
|
|
|
CpuCopy16(questLog->flags, gSaveBlock1Ptr->flags, FLAGS_COUNT * sizeof(u8));
|
|
CpuCopy16(questLog->vars, gSaveBlock1Ptr->vars, VARS_COUNT * sizeof(u16));
|
|
sub_8111688();
|
|
}
|
|
|
|
struct PokemonAndSomethingElse
|
|
{
|
|
struct Pokemon mon;
|
|
u16 sanePartyCount;
|
|
u16 saneBoxesCount;
|
|
};
|
|
|
|
void sub_8111438(void)
|
|
{
|
|
struct PokemonAndSomethingElse *r9 = AllocZeroed(sizeof(struct PokemonAndSomethingElse));
|
|
u16 r0, r3, r5, r6;
|
|
|
|
CreateMon(&r9->mon, SPECIES_RATTATA, 1, 0x20, FALSE, 0, 0, 0);
|
|
r0 = VarGet(VAR_QUEST_LOG_MON_COUNTS);
|
|
r9->sanePartyCount = r0 >> 12;
|
|
r9->saneBoxesCount = r0 % 0x1000;
|
|
|
|
r5 = QuestLog_GetSanePartyCount();
|
|
if (r5 > r9->sanePartyCount)
|
|
{
|
|
for (r3 = 0; r3 < r5 - r9->sanePartyCount; r3++)
|
|
{
|
|
ZeroMonData(&gPlayerParty[5 - r3]);
|
|
}
|
|
}
|
|
else if (r5 < r9->sanePartyCount)
|
|
{
|
|
for (r3 = 0; r3 < 5; r3++)
|
|
{
|
|
sub_808BCB4(0, r3);
|
|
}
|
|
for (r3 = r5; r3 < r9->sanePartyCount; r3++)
|
|
{
|
|
CopyMon(&gPlayerParty[r3], &r9->mon, sizeof(struct Pokemon));
|
|
}
|
|
}
|
|
|
|
r5 = QuestLog_GetSaneBoxCount();
|
|
if (r5 > r9->saneBoxesCount)
|
|
{
|
|
for (r3 = 0; r3 < 14; r3++)
|
|
{
|
|
for (r6 = 0; r6 < 30; r6++)
|
|
{
|
|
if (GetBoxMonDataFromAnyBox(r3, r6, MON_DATA_SANITY_HAS_SPECIES))
|
|
{
|
|
sub_808BCB4(r3, r6);
|
|
r5--;
|
|
if (r5 == r9->saneBoxesCount)
|
|
break;
|
|
}
|
|
}
|
|
if (r5 == r9->saneBoxesCount)
|
|
break;
|
|
}
|
|
}
|
|
else if (r5 < r9->saneBoxesCount)
|
|
{
|
|
for (r3 = 0; r3 < TOTAL_BOXES_COUNT; r3++)
|
|
{
|
|
for (r6 = 0; r6 < IN_BOX_COUNT; r6++)
|
|
{
|
|
struct BoxPokemon * boxMon = GetBoxedMonPtr(r3, r6);
|
|
if (!GetBoxMonData(boxMon, MON_DATA_SANITY_HAS_SPECIES))
|
|
{
|
|
CopyMon(boxMon, &r9->mon.box, sizeof(struct BoxPokemon));
|
|
r5++;
|
|
if (r5 == r9->saneBoxesCount)
|
|
break;
|
|
}
|
|
}
|
|
if (r5 == r9->saneBoxesCount)
|
|
break;
|
|
}
|
|
}
|
|
|
|
Free(r9);
|
|
}
|
|
|
|
static void QuestLog_GetSaneMonCounts(void)
|
|
{
|
|
u16 partyCount = QuestLog_GetSanePartyCount();
|
|
u16 boxesCount = QuestLog_GetSaneBoxCount();
|
|
VarSet(VAR_QUEST_LOG_MON_COUNTS, (partyCount << 12) + boxesCount);
|
|
}
|
|
|
|
static u16 QuestLog_GetSanePartyCount(void)
|
|
{
|
|
u16 count = 0;
|
|
u16 i;
|
|
|
|
for (i = 0; i < PARTY_SIZE; i++)
|
|
{
|
|
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES))
|
|
count++;
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
static u16 QuestLog_GetSaneBoxCount(void)
|
|
{
|
|
u16 count = 0;
|
|
u16 i, j;
|
|
|
|
for (i = 0; i < TOTAL_BOXES_COUNT; i++)
|
|
{
|
|
for (j = 0; j < IN_BOX_COUNT; j++)
|
|
{
|
|
if (GetBoxMonDataFromAnyBox(i, j, MON_DATA_SANITY_HAS_SPECIES))
|
|
count++;
|
|
}
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
static void sub_8111688(void)
|
|
{
|
|
u16 i, j;
|
|
u16 sp0[4];
|
|
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
sp0[i] = VarGet(VAR_0x40AA + i);
|
|
|
|
for (j = 0; j < 16; j++)
|
|
{
|
|
if (sp0[i] & 1)
|
|
gSaveBlock1Ptr->trainerRematches[16 * i + j] = 30;
|
|
else
|
|
gSaveBlock1Ptr->trainerRematches[16 * i + j] = 0;
|
|
sp0[i] >>= 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_8111708(void)
|
|
{
|
|
struct MapHeader sp0;
|
|
|
|
gSaveBlock1Ptr->mapLayoutId = VarGet(VAR_0x40AE);
|
|
if (gSaveBlock1Ptr->mapLayoutId == 0)
|
|
{
|
|
sp0 = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
|
|
gSaveBlock1Ptr->mapLayoutId = sp0.mapLayoutId;
|
|
}
|
|
}
|
|
|
|
static void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1)
|
|
{
|
|
u16 i;
|
|
u16 *r4;
|
|
u16 r6 = 0;
|
|
u16 r9 = 0;
|
|
|
|
memset(a1, 0, 32 * sizeof(struct UnkStruct_203AE98));
|
|
for (i = 0; i < 32; i++)
|
|
{
|
|
gUnknown_203AE0C[i] = NULL;
|
|
}
|
|
|
|
r4 = gSaveBlock1Ptr->questLog[a0].unk_568;
|
|
for (i = 0; i < 32; i++)
|
|
{
|
|
switch (r4[0] & 0xFFF)
|
|
{
|
|
case 0:
|
|
r4 = sub_8113D08(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
r4 = sub_8113D94(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
case 39:
|
|
r4 = sub_8113C20(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
case 41:
|
|
r4 = sub_8113C8C(r4, &a1[r6]);
|
|
r6++;
|
|
break;
|
|
default:
|
|
r4 = QuestLog_SkipCommand(r4, &gUnknown_203AE0C[r9]);
|
|
if (r9 == 0)
|
|
sub_8113ABC(gUnknown_203AE0C[0]);
|
|
r9++;
|
|
break;
|
|
}
|
|
if (r4 == NULL)
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sub_81118F4(s8 a0)
|
|
{
|
|
fade_screen(1, a0);
|
|
sQuestLogCB = QuestLog_AdvancePlayhead;
|
|
}
|
|
|
|
static void QuestLog_AdvancePlayhead(void)
|
|
{
|
|
if (!gPaletteFade.active)
|
|
{
|
|
ScriptContext2_Enable();
|
|
if (++gUnknown_203ADF8 < 4 && gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000)
|
|
{
|
|
sNumScenes--;
|
|
sub_8111368();
|
|
}
|
|
else
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
QuestLog_EndPlayback();
|
|
}
|
|
}
|
|
}
|
|
|
|
static void QuestLog_EndPlayback(void)
|
|
{
|
|
ResetSpecialVars();
|
|
Save_ResetSaveCounters();
|
|
Save_LoadGameData(SAVE_NORMAL);
|
|
SetMainCallback2(sub_8057430);
|
|
gFieldCallback2 = sub_8111F60;
|
|
FreeAllWindowBuffers();
|
|
gUnknown_203ADFA = 3;
|
|
sQuestLogCB = NULL;
|
|
}
|
|
|
|
void sub_81119C8(void)
|
|
{
|
|
QuestLog_AdvancePlayhead();
|
|
}
|
|
|
|
bool8 QuestLog_SchedulePlaybackCB(void (*callback)(void))
|
|
{
|
|
u8 taskId;
|
|
|
|
switch (gUnknown_203ADFA)
|
|
{
|
|
case 1:
|
|
sub_8112364();
|
|
break;
|
|
case 2:
|
|
gUnknown_3005E88 = 3;
|
|
taskId = CreateTask(Task_RunPlaybackCB, 80);
|
|
gTasks[taskId].data[0] = 0;
|
|
gTasks[taskId].data[1] = 0;
|
|
SetWordTaskArg(taskId, 14, (uintptr_t)callback);
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static void Task_RunPlaybackCB(u8 taskId)
|
|
{
|
|
void (*routine)(void);
|
|
s16 *data = gTasks[taskId].data;
|
|
|
|
switch (data[1])
|
|
{
|
|
case 0:
|
|
if (++data[0] == 0x7F)
|
|
{
|
|
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
|
gUnknown_203AE94.unk_0_6 = 2;
|
|
data[1]++;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (!gPaletteFade.active)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
routine = (void (*)(void)) GetWordTaskArg(taskId, 14);
|
|
if (routine != NULL)
|
|
routine();
|
|
DestroyTask(taskId);
|
|
sQuestLogCB = QuestLog_AdvancePlayhead;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sub_8111AD8(void)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_0 == 1)
|
|
{
|
|
if (--gUnknown_203AE94.unk_2 != 0)
|
|
return;
|
|
gUnknown_203AE94.unk_0_0 = 0;
|
|
gUnknown_203AE94.unk_0_4 = 1;
|
|
sub_8112888(2);
|
|
}
|
|
|
|
if (gUnknown_203AE94.unk_0_4 == 1)
|
|
{
|
|
if (++gUnknown_203AE94.unk_3 > 15)
|
|
{
|
|
sub_8111E20();
|
|
gUnknown_203AE94.unk_0_4 = 0;
|
|
gUnknown_203AE94.unk_3 = 0;
|
|
}
|
|
}
|
|
if (gUnknown_203AE94.unk_1 < 32)
|
|
{
|
|
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();
|
|
}
|
|
}
|
|
|
|
static void sub_8111B80(void)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_0 == 0)
|
|
{
|
|
gUnknown_203AE94.unk_0_0 = 1;
|
|
gUnknown_203AE94.unk_0_4 = 0;
|
|
gUnknown_203AE94.unk_3 = 0;
|
|
gUnknown_203AE94.unk_2 = sub_8111BD4();
|
|
if (gUnknown_203B044.unk_2 == 0)
|
|
gUnknown_203AE94.unk_1++;
|
|
if (gUnknown_203AE94.unk_1 > 32)
|
|
return;
|
|
sub_8111D10();
|
|
}
|
|
sub_8112888(1);
|
|
}
|
|
|
|
static u8 sub_8111BD4(void)
|
|
{
|
|
u16 i;
|
|
u16 count = 0;
|
|
|
|
for (i = 0; i < 0x400 && gStringVar4[i] != EOS; i++)
|
|
{
|
|
if (gStringVar4[i] != CHAR_NEWLINE)
|
|
count++;
|
|
}
|
|
|
|
if (count < 20)
|
|
return 0x5F;
|
|
if (count < 36)
|
|
return 0x7F;
|
|
if (count < 46)
|
|
return 0xBF;
|
|
return 0xFF;
|
|
}
|
|
|
|
bool8 sub_8111C2C(void)
|
|
{
|
|
if (gUnknown_203ADFA != 2)
|
|
return FALSE;
|
|
if (gUnknown_3005E88 == 0 || gUnknown_203AE94.unk_0_0 == 1 || gUnknown_203AE94.unk_0_0 == 2)
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
void sub_8111C68(void)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_6 == 0)
|
|
{
|
|
if (gMain.newKeys & A_BUTTON)
|
|
{
|
|
gUnknown_203AE94.unk_0_6 = 2;
|
|
gUnknown_3005E88 = 0;
|
|
sub_81118F4(-3);
|
|
}
|
|
else if (gMain.newKeys & B_BUTTON)
|
|
{
|
|
gUnknown_203AE94.unk_0_6 = 1;
|
|
gUnknown_3005E88 = 0;
|
|
QuestLog_SkipToEndOfPlayback(-3);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool8 sub_8111CD0(void)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_6 != 0)
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
void sub_8111CF0(void)
|
|
{
|
|
if (gUnknown_203ADFA == 2)
|
|
sub_8111070(sNumScenes);
|
|
}
|
|
|
|
static void sub_8111D10(void)
|
|
{
|
|
u16 i;
|
|
u8 count = 0;
|
|
|
|
for (i = 0; i < 0x100 && gStringVar4[i] != EOS; i++)
|
|
{
|
|
if (gStringVar4[i] == CHAR_NEWLINE)
|
|
count++;
|
|
}
|
|
|
|
PutWindowTilemap(gUnknown_203ADFE[2]);
|
|
sub_8111D90(gUnknown_203ADFE[2]);
|
|
AddTextPrinterParameterized4(gUnknown_203ADFE[2], 2, 2, gUnknown_8456698[count], 1, 0, gUnknown_8456634, 0, gStringVar4);
|
|
ScheduleBgCopyTilemapToVram(0);
|
|
}
|
|
|
|
static void sub_8111D90(u8 a0)
|
|
{
|
|
const u16 *src = gUnknown_8456638;
|
|
u16 *buffer = Alloc(0x1680);
|
|
u8 i, j, y;
|
|
|
|
if (buffer)
|
|
{
|
|
for (i = 0; i < 6; i++)
|
|
{
|
|
switch (i)
|
|
{
|
|
default:
|
|
y = 1;
|
|
break;
|
|
case 0:
|
|
y = 0;
|
|
break;
|
|
case 5:
|
|
y = 2;
|
|
break;
|
|
}
|
|
|
|
// r6 = y * 32
|
|
// r5 = 2 * (i % 16)
|
|
// r4 = j
|
|
for (j = 0; j < 30; j++)
|
|
{
|
|
CpuCopy32(src + 16 * y, buffer + 16 * (2 * (15 * i) + j), 32);
|
|
}
|
|
}
|
|
|
|
CopyToWindowPixelBuffer(a0, (const u8 *)buffer, 0x1680, 0);
|
|
Free(buffer);
|
|
}
|
|
}
|
|
|
|
static void sub_8111E20(void)
|
|
{
|
|
ClearWindowTilemap(gUnknown_203ADFE[2]);
|
|
FillWindowPixelRect(gUnknown_203ADFE[2], 15, 0, 0, 0xf0, 0x30);
|
|
CopyWindowToVram(gUnknown_203ADFE[2], 2);
|
|
PutWindowTilemap(gUnknown_203ADFE[1]);
|
|
CopyWindowToVram(gUnknown_203ADFE[1], 1);
|
|
}
|
|
|
|
static void QuestLog_SkipToEndOfPlayback(s8 a0)
|
|
{
|
|
fade_screen(1, a0);
|
|
sQuestLogCB = QuestLog_WaitFadeAndCancelPlayback;
|
|
}
|
|
|
|
static void QuestLog_WaitFadeAndCancelPlayback(void)
|
|
{
|
|
if (!gPaletteFade.active)
|
|
{
|
|
ScriptContext2_Enable();
|
|
for (gUnknown_203ADF8 = gUnknown_203ADF8; gUnknown_203ADF8 < 4; gUnknown_203ADF8++)
|
|
{
|
|
if (gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 == 0)
|
|
break;
|
|
sub_811175C(gUnknown_203ADF8, gUnknown_203AE98);
|
|
}
|
|
gUnknown_3005E88 = 0;
|
|
QuestLog_EndPlayback();
|
|
}
|
|
}
|
|
|
|
void sub_8111F14(void)
|
|
{
|
|
if (gUnknown_203ADFA == 3)
|
|
gUnknown_203AE90 = AllocZeroed(0x200 * sizeof(u16));
|
|
}
|
|
|
|
void sub_8111F38(u16 a0, u16 a1)
|
|
{
|
|
CpuSet(gPlttBufferUnfaded + a0, gUnknown_203AE90 + a0, a1);
|
|
}
|
|
|
|
static bool8 sub_8111F60(void)
|
|
{
|
|
LoadPalette(stdpal_get(4), 0xF0, 0x20);
|
|
sub_8111070(0);
|
|
sub_807DF7C();
|
|
CreateTask(sub_8111F8C, 0xFF);
|
|
return TRUE;
|
|
}
|
|
|
|
static void sub_8111F8C(u8 taskId)
|
|
{
|
|
struct Task *task = &gTasks[taskId];
|
|
|
|
if (ScriptContext2_IsEnabled() != TRUE)
|
|
{
|
|
FreezeObjectEvents();
|
|
sub_805C270();
|
|
sub_805C780();
|
|
ScriptContext2_Enable();
|
|
task->func = sub_8111FCC;
|
|
}
|
|
}
|
|
|
|
static void sub_8111FCC(u8 taskId)
|
|
{
|
|
struct Task *task = &gTasks[taskId];
|
|
|
|
if (!gPaletteFade.active)
|
|
{
|
|
if (gUnknown_203AE94.unk_0_6 != 1)
|
|
{
|
|
GetMapNameGeneric(gStringVar1, gMapHeader.regionMapSectionId);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841B073);
|
|
sub_8111D10();
|
|
}
|
|
task->data[0] = 0;
|
|
task->data[1] = 0;
|
|
task->func = sub_8112044;
|
|
FreezeObjectEvents();
|
|
ScriptContext2_Enable();
|
|
}
|
|
}
|
|
|
|
static void sub_8112044(u8 taskId)
|
|
{
|
|
struct Task *task = &gTasks[taskId];
|
|
|
|
if (gMain.newKeys & (A_BUTTON | B_BUTTON) || task->data[0] >= 0x7f || gUnknown_203AE94.unk_0_6 == 1)
|
|
{
|
|
sub_8111E20();
|
|
task->data[0] = 0;
|
|
task->func = sub_81120AC;
|
|
gUnknown_203ADFA = 0;
|
|
}
|
|
else
|
|
task->data[0]++;
|
|
}
|
|
|
|
static void sub_81120AC(u8 taskId)
|
|
{
|
|
s16 *data = gTasks[taskId].data;
|
|
u8 i;
|
|
|
|
switch (data[0])
|
|
{
|
|
case 0:
|
|
gDisableMapMusicChangeOnMapLoad = 0;
|
|
Overworld_PlaySpecialMapMusic();
|
|
sub_811229C();
|
|
FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8);
|
|
data[0]++;
|
|
break;
|
|
case 1:
|
|
if (sub_81121D8(taskId))
|
|
{
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
ClearWindowTilemap(gUnknown_203ADFE[i]);
|
|
CopyWindowToVram(gUnknown_203ADFE[i], 1);
|
|
RemoveWindow(gUnknown_203ADFE[i]);
|
|
}
|
|
data[1] = 0;
|
|
data[0]++;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (data[1] < 32)
|
|
data[1]++;
|
|
else
|
|
data[0]++;
|
|
break;
|
|
default:
|
|
if (gUnknown_203AE94.unk_0_6 == 1)
|
|
CreateMapNamePopupIfNotAlreadyRunning(1);
|
|
CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
|
|
Free(gUnknown_203AE90);
|
|
gUnknown_203AE94 = (struct UnkStruct_203AE94){};
|
|
sub_80696C0();
|
|
ScriptContext2_Disable();
|
|
gTextFlags.autoScroll = FALSE;
|
|
gUnknown_2036E28 = 0;
|
|
DisableWildEncounters(FALSE);
|
|
gHelpSystemEnabled = TRUE;
|
|
DestroyTask(taskId);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static bool8 sub_81121D8(u8 taskId)
|
|
{
|
|
s16 *data = gTasks[taskId].data;
|
|
|
|
if (data[1] > 15)
|
|
return TRUE;
|
|
|
|
sub_80716F8(gPlttBufferUnfaded + 0x01, gPlttBufferFaded + 0x01, 0xDF, 0x0F - data[1]);
|
|
sub_80716F8(gPlttBufferUnfaded + 0x100, gPlttBufferFaded + 0x100, 0x100, 0x0F - data[1]);
|
|
FillWindowPixelRect(gUnknown_203ADFE[0], 0x00, 0, gUnknown_845661C[0].height * 8 - 1 - data[1], gUnknown_845661C[0].width * 8, 1);
|
|
FillWindowPixelRect(gUnknown_203ADFE[1], 0x00, 0, data[1], gUnknown_845661C[1].width * 8, 1);
|
|
CopyWindowToVram(gUnknown_203ADFE[0], 2);
|
|
CopyWindowToVram(gUnknown_203ADFE[1], 2);
|
|
data[1]++;
|
|
return FALSE;
|
|
}
|
|
|
|
static void sub_811229C(void)
|
|
{
|
|
u16 *buffer = Alloc(0x400);
|
|
CpuCopy16(gUnknown_203AE90, buffer, 0x400);
|
|
sub_807B0C4(gUnknown_203AE90, gUnknown_203AE90, 0xd0);
|
|
sub_807B0C4(gUnknown_203AE90 + 0x110, gUnknown_203AE90 + 0x110, 0x10);
|
|
sub_807B0C4(gUnknown_203AE90 + 0x160, gUnknown_203AE90 + 0x160, 0x40);
|
|
sub_807B0C4(gUnknown_203AE90 + 0x1b0, gUnknown_203AE90 + 0x1b0, 0x50);
|
|
CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
|
|
CpuCopy16(buffer, gUnknown_203AE90, 0x400);
|
|
Free(buffer);
|
|
}
|
|
|
|
void sub_811231C(void)
|
|
{
|
|
if (gUnknown_203ADFA == 1)
|
|
{
|
|
sub_8110E68(gUnknown_203AE98);
|
|
sub_8110E3C();
|
|
gUnknown_203ADFA = 0;
|
|
sQuestLogCB = NULL;
|
|
gUnknown_203AE04 = NULL;
|
|
gUnknown_203AE08 = NULL;
|
|
gUnknown_3005E88 = 0;
|
|
}
|
|
}
|
|
|
|
void sub_8112364(void)
|
|
{
|
|
if (gUnknown_3005E88 && gUnknown_203ADFA == 1)
|
|
{
|
|
sub_8110E68(gUnknown_203AE98);
|
|
sub_8113A1C(1);
|
|
sub_8110E3C();
|
|
gUnknown_3005E88 = 0;
|
|
gUnknown_203ADFA = 0;
|
|
sQuestLogCB = NULL;
|
|
}
|
|
gUnknown_203AE04 = NULL;
|
|
gUnknown_203AE08 = NULL;
|
|
}
|
|
|
|
void sub_81123BC(void)
|
|
{
|
|
struct QuestLog * buffer = AllocZeroed(4 * sizeof(struct QuestLog));
|
|
u8 i;
|
|
u8 r4 = gUnknown_203ADF8;
|
|
u8 count = 0;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if (r4 > 3)
|
|
r4 = 0;
|
|
if (gSaveBlock1Ptr->questLog[r4].unk_000)
|
|
{
|
|
buffer[count] = gSaveBlock1Ptr->questLog[r4];
|
|
count++;
|
|
}
|
|
r4++;
|
|
}
|
|
gUnknown_203ADF8 = count % 4;
|
|
CpuCopy16(buffer, gSaveBlock1Ptr->questLog, 4 * sizeof(struct QuestLog));
|
|
Free(buffer);
|
|
}
|
|
|
|
void sub_8112450(void)
|
|
{
|
|
if (MenuHelpers_LinkSomething() != 1)
|
|
{
|
|
sub_8112364();
|
|
sub_81123BC();
|
|
}
|
|
}
|
|
|
|
void sub_811246C(struct Sprite *sprite)
|
|
{
|
|
struct ObjectEvent *objectEvent = &gObjectEvents[sprite->data[0]];
|
|
if (objectEvent->localId == 0xFF)
|
|
{
|
|
if (gUnknown_203AF9A[0][0] != 0xFF)
|
|
{
|
|
ObjectEventSetHeldMovement(objectEvent, gUnknown_203AF9A[0][0]);
|
|
gUnknown_203AF9A[0][0] = 0xFF;
|
|
}
|
|
if (gUnknown_203AF9A[0][1] != 0xFF)
|
|
{
|
|
sub_8150454();
|
|
gUnknown_203AF9A[0][1] = 0xFF;
|
|
}
|
|
sub_8063E28(objectEvent, sprite);
|
|
}
|
|
else
|
|
{
|
|
if (gUnknown_203AF9A[objectEvent->localId][0] != 0xFF)
|
|
{
|
|
ObjectEventSetHeldMovement(objectEvent, gUnknown_203AF9A[objectEvent->localId][0]);
|
|
gUnknown_203AF9A[objectEvent->localId][0] = 0xFF;
|
|
}
|
|
sub_8063E28(objectEvent, sprite);
|
|
}
|
|
}
|
|
|
|
void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3)
|
|
{
|
|
if (!sub_8112CEC())
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = a0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_1 = a1;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_2 = a2;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = a3;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = 0;
|
|
}
|
|
}
|
|
|
|
void sub_8112588(u8 a0, u8 a1, u8 a2, u8 a3, u8 a4)
|
|
{
|
|
if (!sub_8112D1C())
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = a0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_1 = a1;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_2 = a2;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = a3;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = a4;
|
|
}
|
|
}
|
|
|
|
void sub_8112628(u8 a0)
|
|
{
|
|
if (!sub_8112CEC())
|
|
{
|
|
if (a0 != gUnknown_3005E94[gUnknown_203B01C].unk_3 || a0 > 3)
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
|
|
gUnknown_203B01C = sQuestLogIdx;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_81126AC(u8 a0, u8 a1)
|
|
{
|
|
if (!sub_8112D1C())
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
|
|
gUnknown_203B01C = sQuestLogIdx;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = a1;
|
|
}
|
|
}
|
|
|
|
void sub_8112720(u8 a0)
|
|
{
|
|
if (!sub_8112D1C())
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 1;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = 0;
|
|
}
|
|
}
|
|
|
|
void sub_811278C(u8 a0, u8 a1)
|
|
{
|
|
if (!sub_8112D1C())
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 1;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = a0;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = a1;
|
|
}
|
|
}
|
|
|
|
void sub_81127F8(struct UnkStruct_3005E90 * a0)
|
|
{
|
|
if (sQuestLogIdx < sNumQuestLogs)
|
|
{
|
|
u32 r2 = *(u32 *)a0 & 0x00FF00F3;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 2;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = r2;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_1 = r2 >> 8;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_2 = r2 >> 16;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = r2 >> 24;
|
|
sQuestLogIdx++;
|
|
if (ScriptContext2_IsEnabled())
|
|
gUnknown_203B01A = TRUE;
|
|
else
|
|
gUnknown_203B01A = FALSE;
|
|
}
|
|
}
|
|
|
|
static void sub_8112888(u8 a0)
|
|
{
|
|
switch (a0)
|
|
{
|
|
case 1:
|
|
if (gUnknown_3005E88 == 1)
|
|
gUnknown_3005E88 = 3;
|
|
break;
|
|
case 2:
|
|
if (gUnknown_3005E88 == 3)
|
|
gUnknown_3005E88 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sub_81128BC(u8 a0)
|
|
{
|
|
u8 r1 = sub_8112CAC();
|
|
|
|
switch (a0)
|
|
{
|
|
case 1:
|
|
if (r1 == 1)
|
|
gUnknown_3005E88 = 3;
|
|
else if (r1 == 2)
|
|
{
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 3;
|
|
sQuestLogIdx++;
|
|
gUnknown_203B01A = 0;
|
|
gUnknown_3005E88 = 4;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (r1 == 1)
|
|
gUnknown_3005E88 = 1;
|
|
else if (r1 == 2)
|
|
gUnknown_3005E88 = 2;
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2)
|
|
{
|
|
s32 i;
|
|
|
|
switch (a0)
|
|
{
|
|
default:
|
|
gUnknown_3005E88 = 0;
|
|
break;
|
|
case 1:
|
|
gUnknown_3005E94 = a1;
|
|
sNumQuestLogs = a2 / 8;
|
|
for (i = 0; i < 0x40; i++)
|
|
{
|
|
gUnknown_203AF9A[i][0] |= 0xFF;
|
|
gUnknown_203AF9A[i][1] |= 0xFF;
|
|
}
|
|
sQuestLogIdx = 0;
|
|
gUnknown_203B01C = 0;
|
|
gUnknown_3005E90 = (struct UnkStruct_3005E90){};
|
|
gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4;
|
|
gUnknown_203AF9A[0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3;
|
|
gUnknown_203AF9A[0][1] = 0xFF;
|
|
gUnknown_3005E88 = 1;
|
|
break;
|
|
case 2:
|
|
gUnknown_3005E94 = a1;
|
|
sNumQuestLogs = a2 / 8;
|
|
for (i = 0; i < sNumQuestLogs; i++)
|
|
{
|
|
gUnknown_3005E94[i] = (struct UnkStruct_203AE98){ 0, 0, 0, 0, 0xFFFF, 0xFF };
|
|
}
|
|
sQuestLogIdx = 0;
|
|
gUnknown_203B01A = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
|
|
switch (GetPlayerFacingDirection())
|
|
{
|
|
case 0:
|
|
case 1:
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = 0;
|
|
break;
|
|
case 4:
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = 3;
|
|
break;
|
|
case 2:
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = 1;
|
|
break;
|
|
case 3:
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = 2;
|
|
break;
|
|
}
|
|
gUnknown_203B01C = 0;
|
|
sQuestLogIdx++;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_4 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_6 = 2;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_0 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_1 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_2 = 0;
|
|
gUnknown_3005E94[sQuestLogIdx].unk_3 = 0;
|
|
sQuestLogIdx++;
|
|
gUnknown_3005E88 = 2;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sub_8112B3C(void)
|
|
{
|
|
switch (gUnknown_3005E88)
|
|
{
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
if (!sub_8112CEC())
|
|
{
|
|
if (gUnknown_203B01A != 0)
|
|
gUnknown_203B01A--;
|
|
else
|
|
{
|
|
do
|
|
{
|
|
switch (gUnknown_3005E94[sQuestLogIdx].unk_6)
|
|
{
|
|
case 0:
|
|
gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3;
|
|
break;
|
|
case 1:
|
|
gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][1] = gUnknown_3005E94[sQuestLogIdx].unk_3;
|
|
break;
|
|
case 2:
|
|
*(u32 *)&gUnknown_3005E90 = ((gUnknown_3005E94[sQuestLogIdx].unk_3 << 24) | (gUnknown_3005E94[sQuestLogIdx].unk_2 << 16) | (gUnknown_3005E94[sQuestLogIdx].unk_1 << 8) | (gUnknown_3005E94[sQuestLogIdx].unk_0 << 0));
|
|
break;
|
|
case 3:
|
|
gUnknown_3005E88 = 3;
|
|
break;
|
|
case 0xFE:
|
|
break;
|
|
case 0xFF:
|
|
gUnknown_3005E88 = 0;
|
|
break;
|
|
}
|
|
if (gUnknown_3005E88 == 0)
|
|
break;
|
|
if (++sQuestLogIdx >= sNumQuestLogs)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
break;
|
|
}
|
|
gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4;
|
|
} while (gUnknown_3005E88 != 3
|
|
&& (gUnknown_203B01A == 0 || gUnknown_203B01A == 0xFFFF));
|
|
}
|
|
}
|
|
else if (sQuestLogIdx >= sNumQuestLogs)
|
|
{
|
|
gUnknown_3005E88 = 0;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (ScriptContext2_IsEnabled() != TRUE)
|
|
{
|
|
gUnknown_203B01A++;
|
|
if (sQuestLogIdx >= sNumQuestLogs)
|
|
gUnknown_3005E88 = 0;
|
|
}
|
|
break;
|
|
case 3:
|
|
break;
|
|
case 4:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void sub_8112C9C(void)
|
|
{
|
|
gUnknown_203B01A++;
|
|
}
|
|
|
|
u8 sub_8112CAC(void)
|
|
{
|
|
switch (gUnknown_3005E88)
|
|
{
|
|
case 0:
|
|
default:
|
|
return 0;
|
|
case 1:
|
|
case 3:
|
|
return 1;
|
|
case 2:
|
|
case 4:
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
static bool8 sub_8112CEC(void)
|
|
{
|
|
if (sQuestLogIdx >= sNumQuestLogs || ScriptContext2_IsEnabled() == TRUE)
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
static bool8 sub_8112D1C(void)
|
|
{
|
|
if (sQuestLogIdx >= sNumQuestLogs)
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
static const struct UnkStruct_300201C gUnknown_84566A4 = {
|
|
0,
|
|
FALSE,
|
|
0x7FFF
|
|
};
|
|
|
|
void * QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx)
|
|
{
|
|
void * response;
|
|
if (sQuestLogIdx == 0)
|
|
return NULL;
|
|
if (sQuestLogIdx >= sNumQuestLogs)
|
|
return NULL;
|
|
if (sFlagOrVarPlayhead >= sNumFlagsOrVars)
|
|
return NULL;
|
|
if (sFlagOrVarRecords[sFlagOrVarPlayhead].idx == idx && sFlagOrVarRecords[sFlagOrVarPlayhead].isFlag == isFlag)
|
|
{
|
|
response = &sFlagOrVarRecords[sFlagOrVarPlayhead].value;
|
|
sFlagOrVarPlayhead++;
|
|
}
|
|
else
|
|
response = NULL;
|
|
return response;
|
|
}
|
|
|
|
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value)
|
|
{
|
|
if (sQuestLogIdx == 0)
|
|
return;
|
|
if (sQuestLogIdx >= sNumQuestLogs)
|
|
return;
|
|
if (sFlagOrVarPlayhead >= sNumFlagsOrVars)
|
|
return;
|
|
sFlagOrVarRecords[sFlagOrVarPlayhead].idx = idx;
|
|
sFlagOrVarRecords[sFlagOrVarPlayhead].isFlag = isFlag;
|
|
sFlagOrVarRecords[sFlagOrVarPlayhead].value = value;
|
|
sFlagOrVarPlayhead++;
|
|
}
|
|
|
|
void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2)
|
|
{
|
|
s32 i;
|
|
|
|
if (a0 == 0 || a0 > 2)
|
|
gUnknown_3005E88 = 0;
|
|
else
|
|
{
|
|
sFlagOrVarRecords = a1;
|
|
sNumFlagsOrVars = a2 >> 2;
|
|
sFlagOrVarPlayhead = 0;
|
|
if (a0 == 2)
|
|
{
|
|
for (i = 0; i < sNumQuestLogs; i++)
|
|
{
|
|
sFlagOrVarRecords[i] = gUnknown_84566A4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin");
|
|
|
|
static const struct WindowTemplate sHelpMessageWindowTemplate = {
|
|
0x00, 0, 15, 30, 5, 15, 0x008F
|
|
};
|
|
|
|
void MapNamePopupWindowIdSetDummy(void)
|
|
{
|
|
sHelpMessageWindowId = 0xFF;
|
|
}
|
|
|
|
u8 CreateHelpMessageWindow(void)
|
|
{
|
|
if (sHelpMessageWindowId == 0xFF)
|
|
{
|
|
sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate);
|
|
PutWindowTilemap(sHelpMessageWindowId);
|
|
}
|
|
return sHelpMessageWindowId;
|
|
}
|
|
|
|
void DestroyHelpMessageWindow(u8 a0)
|
|
{
|
|
if (sHelpMessageWindowId != 0xFF)
|
|
{
|
|
FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0));
|
|
ClearWindowTilemap(sHelpMessageWindowId);
|
|
|
|
if (a0)
|
|
CopyWindowToVram(sHelpMessageWindowId, a0);
|
|
|
|
RemoveWindow(sHelpMessageWindowId);
|
|
sHelpMessageWindowId = 0xFF;
|
|
}
|
|
}
|
|
|
|
#ifdef NONMATCHING
|
|
void sub_8112F18(u8 windowId)
|
|
{
|
|
u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH);
|
|
u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT);
|
|
u8 *buffer = Alloc(32 * width * height);
|
|
u8 i, j;
|
|
u8 k;
|
|
|
|
if (buffer != NULL)
|
|
{
|
|
for (i = 0; i < height; i++)
|
|
{
|
|
for (j = 0; j < width; j++)
|
|
{
|
|
if (i == 0)
|
|
k = 0;
|
|
else if (i == height - 1)
|
|
k = 14;
|
|
else
|
|
k = 5;
|
|
CpuCopy32(
|
|
(void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction
|
|
buffer + 32 * (i * width + j),
|
|
32
|
|
);
|
|
}
|
|
}
|
|
CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0);
|
|
Free(buffer);
|
|
}
|
|
}
|
|
#else
|
|
NAKED
|
|
void sub_8112F18(u8 windowId)
|
|
{
|
|
asm_unified("\tpush {r4-r7,lr}\n"
|
|
"\tmov r7, r10\n"
|
|
"\tmov r6, r9\n"
|
|
"\tmov r5, r8\n"
|
|
"\tpush {r5-r7}\n"
|
|
"\tsub sp, 0x8\n"
|
|
"\tlsls r0, 24\n"
|
|
"\tlsrs r0, 24\n"
|
|
"\tmov r10, r0\n"
|
|
"\tmovs r1, 0x3\n"
|
|
"\tbl GetWindowAttribute\n"
|
|
"\tlsls r0, 24\n"
|
|
"\tlsrs r6, r0, 24\n"
|
|
"\tmov r0, r10\n"
|
|
"\tmovs r1, 0x4\n"
|
|
"\tbl GetWindowAttribute\n"
|
|
"\tlsls r0, 24\n"
|
|
"\tlsrs r7, r0, 24\n"
|
|
"\tlsls r0, r7, 5\n"
|
|
"\tmuls r0, r6\n"
|
|
"\tbl Alloc\n"
|
|
"\tmov r8, r0\n"
|
|
"\tcmp r0, 0\n"
|
|
"\tbeq _08112FB8\n"
|
|
"\tmovs r5, 0\n"
|
|
"\tadds r0, r6, 0\n"
|
|
"\tmuls r0, r7\n"
|
|
"\tstr r0, [sp]\n"
|
|
"\tcmp r5, r7\n"
|
|
"\tbcs _08112FA2\n"
|
|
"_08112F5A:\n"
|
|
"\tmovs r4, 0\n"
|
|
"\tadds r1, r5, 0x1\n"
|
|
"\tmov r9, r1\n"
|
|
"\tcmp r4, r6\n"
|
|
"\tbcs _08112F98\n"
|
|
"\tsubs r3, r7, 0x1\n"
|
|
"_08112F66:\n"
|
|
"\tmovs r0, 0\n"
|
|
"\tcmp r5, 0\n"
|
|
"\tbeq _08112F74\n"
|
|
"\tmovs r0, 0x5\n"
|
|
"\tcmp r5, r3\n"
|
|
"\tbne _08112F74\n"
|
|
"\tmovs r0, 0xE\n"
|
|
"_08112F74:\n"
|
|
"\tlsls r0, 5\n"
|
|
"\tldr r1, _08112FC8 @ =gUnknown_84566A8\n"
|
|
"\tadds r0, r1, r0\n"
|
|
"\tadds r1, r5, 0\n"
|
|
"\tmuls r1, r6\n"
|
|
"\tadds r1, r4\n"
|
|
"\tlsls r1, 5\n"
|
|
"\tadd r1, r8\n"
|
|
"\tldr r2, _08112FCC @ =0x04000008\n"
|
|
"\tstr r3, [sp, 0x4]\n"
|
|
"\tbl CpuSet\n"
|
|
"\tadds r0, r4, 0x1\n"
|
|
"\tlsls r0, 24\n"
|
|
"\tlsrs r4, r0, 24\n"
|
|
"\tldr r3, [sp, 0x4]\n"
|
|
"\tcmp r4, r6\n"
|
|
"\tbcc _08112F66\n"
|
|
"_08112F98:\n"
|
|
"\tmov r1, r9\n"
|
|
"\tlsls r0, r1, 24\n"
|
|
"\tlsrs r5, r0, 24\n"
|
|
"\tcmp r5, r7\n"
|
|
"\tbcc _08112F5A\n"
|
|
"_08112FA2:\n"
|
|
"\tldr r0, [sp]\n"
|
|
"\tlsls r2, r0, 21\n"
|
|
"\tlsrs r2, 16\n"
|
|
"\tmov r0, r10\n"
|
|
"\tmov r1, r8\n"
|
|
"\tmovs r3, 0\n"
|
|
"\tbl CopyToWindowPixelBuffer\n"
|
|
"\tmov r0, r8\n"
|
|
"\tbl Free\n"
|
|
"_08112FB8:\n"
|
|
"\tadd sp, 0x8\n"
|
|
"\tpop {r3-r5}\n"
|
|
"\tmov r8, r3\n"
|
|
"\tmov r9, r4\n"
|
|
"\tmov r10, r5\n"
|
|
"\tpop {r4-r7}\n"
|
|
"\tpop {r0}\n"
|
|
"\tbx r0\n"
|
|
"\t.align 2, 0\n"
|
|
"_08112FC8: .4byte gUnknown_84566A8\n"
|
|
"_08112FCC: .4byte 0x04000008");
|
|
}
|
|
#endif
|
|
|
|
void sub_8112FD0(void)
|
|
{
|
|
sub_8112F18(sHelpMessageWindowId);
|
|
}
|
|
|
|
static const u8 gUnknown_8456930[3] = {
|
|
0, 10, 2
|
|
};
|
|
|
|
void sub_8112FE4(const u8 *a0)
|
|
{
|
|
AddTextPrinterParameterized4(sHelpMessageWindowId, 0x02, 2, 5, 1, 1, gUnknown_8456930, -1, a0);
|
|
}
|
|
|
|
void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode)
|
|
{
|
|
sub_8112FD0();
|
|
sub_8112FE4(text);
|
|
if (mode)
|
|
CopyWindowToVram(sHelpMessageWindowId, mode);
|
|
}
|
|
|
|
void sub_8113044(void)
|
|
{
|
|
VarSet(VAR_0x4038, 0);
|
|
VarSet(VAR_0x4039, 0);
|
|
}
|
|
|
|
void sub_8113064(void)
|
|
{
|
|
sub_8113078(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static void sub_8113078(struct Var4038Struct * varPtr)
|
|
{
|
|
if (sub_8113508(varPtr))
|
|
{
|
|
sub_81132E0(varPtr);
|
|
VarSet(VAR_0x4039, gSaveBlock2Ptr->playTimeHours);
|
|
}
|
|
}
|
|
|
|
void sub_81130A8(void)
|
|
{
|
|
sub_81130BC(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static void sub_81130BC(struct Var4038Struct * varPtr)
|
|
{
|
|
if (!varPtr->unk_0_7)
|
|
{
|
|
sub_8113524(varPtr);
|
|
sub_8113390(varPtr);
|
|
VarSet(VAR_0x4039, 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 gUnknown_8456934[] = {2, 1, 2, 1};
|
|
|
|
u8 sub_8113114(struct Var4038Struct * a0, u8 a1)
|
|
{
|
|
if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
|
|
{
|
|
if (a0->unk_0_0 + gUnknown_8456934[a1] >= 20)
|
|
{
|
|
if (sub_81132A0(a0) < 3)
|
|
{
|
|
sub_8113194(a0);
|
|
a0->unk_0_0 = 0;
|
|
}
|
|
else
|
|
a0->unk_0_0 = 20;
|
|
}
|
|
else
|
|
a0->unk_0_0 += gUnknown_8456934[a1];
|
|
}
|
|
|
|
return a0->unk_0_0;
|
|
}
|
|
|
|
static const u8 gUnknown_8456938[] = {
|
|
1, 3, 5, 0, 7, 6, 4, 2
|
|
};
|
|
|
|
static u8 sub_8113194(struct Var4038Struct * a0)
|
|
{
|
|
u8 i;
|
|
u8 retval = 0;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
if (!((a0->unk_1 >> gUnknown_8456938[i]) & 1))
|
|
{
|
|
retval = i;
|
|
if (Random() % 2)
|
|
{
|
|
a0->unk_1 |= 1 << gUnknown_8456938[i];
|
|
return gUnknown_8456938[i];
|
|
}
|
|
}
|
|
}
|
|
a0->unk_1 |= 1 << gUnknown_8456938[retval];
|
|
return gUnknown_8456938[retval];
|
|
}
|
|
|
|
static const u8 gUnknown_8456940[] = {
|
|
5, 6, 3, 7, 4, 1, 0, 2
|
|
};
|
|
|
|
u8 sub_81131FC(struct Var4038Struct * a0)
|
|
{
|
|
u8 i;
|
|
u8 retval = 0;
|
|
|
|
if (sub_81132A0(a0) == 1)
|
|
return 0;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
if ((a0->unk_1 >> gUnknown_8456940[i]) & 1)
|
|
{
|
|
retval = i;
|
|
if (Random() % 2)
|
|
{
|
|
a0->unk_1 ^= 1 << gUnknown_8456940[i];
|
|
return gUnknown_8456940[i];
|
|
}
|
|
}
|
|
}
|
|
if ((a0->unk_1 >> gUnknown_8456940[retval]) & 1)
|
|
a0->unk_1 ^= 1 << gUnknown_8456940[retval];
|
|
return gUnknown_8456940[retval];
|
|
}
|
|
|
|
u16 GetNumMovedSaffronFanClubMembers(void)
|
|
{
|
|
return sub_81132A0(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static u16 sub_81132A0(struct Var4038Struct * a0)
|
|
{
|
|
u8 count = 0;
|
|
u8 i;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
if ((a0->unk_1 >> i) & 1)
|
|
count++;
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
void UpdateMovedSaffronFanClubMembers(void)
|
|
{
|
|
sub_81132E0(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static void sub_81132E0(struct Var4038Struct * a0)
|
|
{
|
|
u8 i = 0;
|
|
u16 var_4039;
|
|
|
|
if (gSaveBlock2Ptr->playTimeHours < 999)
|
|
{
|
|
while (1)
|
|
{
|
|
if (sub_81132A0(a0) < 5)
|
|
{
|
|
VarSet(VAR_0x4039, gSaveBlock2Ptr->playTimeHours);
|
|
break;
|
|
}
|
|
if (i == 8)
|
|
break;
|
|
var_4039 = VarGet(VAR_0x4039);
|
|
if (gSaveBlock2Ptr->playTimeHours - var_4039 < 12)
|
|
break;
|
|
sub_81131FC(a0);
|
|
var_4039 = VarGet(VAR_0x4039);
|
|
VarSet(VAR_0x4039, var_4039 + 12);
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool16 ShouldMoveSaffronFanClubMember(void)
|
|
{
|
|
return sub_811337C(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static bool16 sub_811337C(struct Var4038Struct * a0)
|
|
{
|
|
return (a0->unk_1 >> gSpecialVar_0x8004) & 1;
|
|
}
|
|
|
|
static void sub_8113390(struct Var4038Struct * a0)
|
|
{
|
|
a0->unk_1 |= 1;
|
|
a0->unk_1 |= 2;
|
|
a0->unk_1 |= 4;
|
|
}
|
|
|
|
void BufferStreakTrainerText(void)
|
|
{
|
|
u8 r3 = 0;
|
|
u8 r2 = 0;
|
|
|
|
switch (gSpecialVar_0x8004)
|
|
{
|
|
case 0:
|
|
r2 = 0;
|
|
r3 = 0;
|
|
break;
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 7:
|
|
break;
|
|
case 4:
|
|
r2 = 1;
|
|
r3 = 0;
|
|
break;
|
|
case 5:
|
|
r2 = 0;
|
|
r3 = 1;
|
|
break;
|
|
case 6:
|
|
r2 = 2;
|
|
r3 = 1;
|
|
break;
|
|
}
|
|
sub_8113414(&gSaveBlock2Ptr->linkBattleRecords, r3, r2);
|
|
}
|
|
|
|
static void sub_8113414(struct LinkBattleRecords * a0, u8 a1, u8 a2)
|
|
{
|
|
u8 *str;
|
|
const u8 *src = a0->entries[a1].name;
|
|
if (src[0] == EOS)
|
|
{
|
|
switch (a2)
|
|
{
|
|
case 0:
|
|
StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
|
|
break;
|
|
case 1:
|
|
StringCopy(gStringVar1, gUnknown_84178D0); // LT. SURGE
|
|
break;
|
|
case 2:
|
|
StringCopy(gStringVar1, gUnknown_84178DA); // KOGA
|
|
break;
|
|
default:
|
|
StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
str = gStringVar1;
|
|
StringCopyN(str, src, 7);
|
|
str[7] = 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 sub_81134B8(void)
|
|
{
|
|
sub_81134CC(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static void sub_81134CC(struct Var4038Struct * a0)
|
|
{
|
|
if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2)
|
|
{
|
|
sub_8113078(a0);
|
|
if (gBattleOutcome == B_OUTCOME_WON)
|
|
sub_8113194(a0);
|
|
else
|
|
sub_81131FC(a0);
|
|
}
|
|
}
|
|
|
|
static bool8 sub_8113508(struct Var4038Struct * a0)
|
|
{
|
|
return a0->unk_0_7;
|
|
}
|
|
|
|
void sub_8113510(void)
|
|
{
|
|
sub_8113524(VAR_0x4038_STRUCT);
|
|
}
|
|
|
|
static void sub_8113524(struct Var4038Struct * a0)
|
|
{
|
|
a0->unk_0_7 = TRUE;
|
|
}
|
|
|
|
u8 sub_8113530(void)
|
|
{
|
|
return sub_8113114(VAR_0x4038_STRUCT, gSpecialVar_0x8004);
|
|
}
|
|
|
|
static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = {
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
sub_8113F14,
|
|
sub_8113F80,
|
|
sub_8114174,
|
|
sub_81141D0,
|
|
sub_811422C,
|
|
sub_8114288,
|
|
sub_8114310,
|
|
sub_8114380,
|
|
sub_81143F0,
|
|
sub_811445C,
|
|
sub_81144EC,
|
|
sub_8114578,
|
|
sub_8114604,
|
|
sub_8114710,
|
|
sub_8114744,
|
|
sub_8114778,
|
|
sub_8114808,
|
|
sub_811488C,
|
|
sub_8114918,
|
|
sub_8114990,
|
|
sub_8114A1C,
|
|
sub_8114AA0,
|
|
sub_8114B0C,
|
|
sub_8114B78,
|
|
sub_8114BE4,
|
|
sub_8114C68,
|
|
sub_8114CC0,
|
|
sub_8114D4C,
|
|
sub_8114DE8,
|
|
sub_8114FF0,
|
|
sub_8115078,
|
|
sub_81151C0,
|
|
sub_8115280,
|
|
sub_8115410,
|
|
sub_81154DC,
|
|
sub_81155A4,
|
|
NULL,
|
|
sub_81156D8,
|
|
NULL,
|
|
sub_81157DC
|
|
};
|
|
|
|
void sub_8113550(u16 a0, const u16 *a1)
|
|
{
|
|
u16 *r1;
|
|
|
|
if (a0 == 35 && gUnknown_203B048 == 2)
|
|
{
|
|
sub_811381C();
|
|
return;
|
|
}
|
|
sub_811381C();
|
|
if (gUnknown_203ADFA == 2)
|
|
return;
|
|
|
|
if (a0 < 3 || a0 > 42)
|
|
return;
|
|
|
|
if (sub_81136D4() == TRUE)
|
|
return;
|
|
|
|
if (sub_81138A0(a0, a1) == TRUE)
|
|
return;
|
|
|
|
if (MenuHelpers_LinkSomething() == TRUE)
|
|
return;
|
|
|
|
if (InUnionRoom() == TRUE)
|
|
return;
|
|
|
|
if (sub_8113954(a0, a1) == TRUE)
|
|
return;
|
|
|
|
if (sub_8113A44(a0, a1) == TRUE)
|
|
return;
|
|
|
|
if (sub_81153E4(a0, a1) == FALSE)
|
|
return;
|
|
|
|
if (gUnknown_3005E88 == 0)
|
|
{
|
|
if (sub_8113778(a0, a1) == TRUE)
|
|
return;
|
|
|
|
if (a0 != 31 || gUnknown_203AE04 == NULL)
|
|
{
|
|
if (sub_81153A8(a0, a1) == FALSE)
|
|
return;
|
|
sub_8110AEC(a0);
|
|
}
|
|
}
|
|
else if (a0 == 40)
|
|
return;
|
|
|
|
sub_8113B94(a0);
|
|
if (a0 == 31)
|
|
{
|
|
if (gUnknown_203AE04 == NULL)
|
|
{
|
|
gUnknown_203AE04 = gUnknown_203AE08;
|
|
r1 = sQuestLogStorageCBs[a0](gUnknown_203AE04, a1);
|
|
}
|
|
else
|
|
{
|
|
sQuestLogStorageCBs[a0](gUnknown_203AE04, a1);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
gUnknown_203AE04 = NULL;
|
|
r1 = sQuestLogStorageCBs[a0](gUnknown_203AE08, a1);
|
|
}
|
|
|
|
if (r1 == NULL)
|
|
{
|
|
sub_811231C();
|
|
r1 = sub_8113828(a0, a1);
|
|
if (r1 == NULL)
|
|
return;
|
|
}
|
|
|
|
gUnknown_203AE08 = r1;
|
|
if (gUnknown_203B048 == 0)
|
|
return;
|
|
sub_811231C();
|
|
}
|
|
|
|
static bool8 sub_81136D4(void)
|
|
{
|
|
if (gSaveBlock1Ptr->location.mapGroup == 2 && (gSaveBlock1Ptr->location.mapNum == 1 || gSaveBlock1Ptr->location.mapNum == 2 || gSaveBlock1Ptr->location.mapNum == 3 || gSaveBlock1Ptr->location.mapNum == 4 || gSaveBlock1Ptr->location.mapNum == 5 || gSaveBlock1Ptr->location.mapNum == 6 || gSaveBlock1Ptr->location.mapNum == 7 || gSaveBlock1Ptr->location.mapNum == 8 || gSaveBlock1Ptr->location.mapNum == 9 || gSaveBlock1Ptr->location.mapNum == 10 || gSaveBlock1Ptr->location.mapNum == 11))
|
|
return TRUE;
|
|
|
|
if (gSaveBlock1Ptr->location.mapGroup == 14 && gSaveBlock1Ptr->location.mapNum == 9)
|
|
return TRUE;
|
|
|
|
if (gSaveBlock1Ptr->location.mapGroup == 31 && (gSaveBlock1Ptr->location.mapNum == 0 || gSaveBlock1Ptr->location.mapNum == 1))
|
|
return TRUE;
|
|
|
|
if ((gSaveBlock1Ptr->location.mapGroup == 1 && gSaveBlock1Ptr->location.mapNum == 46) || (gSaveBlock1Ptr->location.mapGroup == 1 && gSaveBlock1Ptr->location.mapNum == 58) || (gSaveBlock1Ptr->location.mapGroup == 2 && gSaveBlock1Ptr->location.mapNum == 11) || (gSaveBlock1Ptr->location.mapGroup == 10 && gSaveBlock1Ptr->location.mapNum == 6))
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
bool8 sub_8113748(void)
|
|
{
|
|
if (sub_81136D4() != TRUE)
|
|
return FALSE;
|
|
|
|
if (gUnknown_203ADFA == 2)
|
|
return TRUE;
|
|
|
|
if (gUnknown_203ADFA == 1)
|
|
sub_8112364();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static bool8 sub_8113778(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 == 36 || a0 == 11)
|
|
return TRUE;
|
|
|
|
if (!FlagGet(FLAG_SYS_GAME_CLEAR))
|
|
{
|
|
if (a0 == 3 || a0 == 31 || sub_81137E4(a0, a1) == TRUE)
|
|
return TRUE;
|
|
}
|
|
|
|
if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS))
|
|
{
|
|
if (a0 == 4 || a0 == 5 || a0 == 6 || a0 == 7 || a0 == 8 || a0 == 9 || a0 == 10 || a0 == 22 || a0 == 25 || a0 == 26)
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static bool8 sub_81137E4(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 == 34)
|
|
{
|
|
u8 trainerClass = gTrainers[*a1].trainerClass;
|
|
if ( trainerClass == 0x51
|
|
|| trainerClass == 0x59
|
|
|| trainerClass == 0x5A
|
|
|| trainerClass == 0x53)
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static void sub_811381C(void)
|
|
{
|
|
gUnknown_203B048 = 0;
|
|
}
|
|
|
|
static u16 *sub_8113828(u16 a0, const u16 *a1)
|
|
{
|
|
if (sub_8113778(a0, a1) == TRUE)
|
|
return NULL;
|
|
|
|
if (sub_81153A8(a0, a1) == FALSE)
|
|
return NULL;
|
|
|
|
sub_8110AEC(a0);
|
|
sub_8113B94(a0);
|
|
|
|
if (a0 == 31)
|
|
gUnknown_203AE04 = gUnknown_203AE08;
|
|
else
|
|
gUnknown_203AE04 = NULL;
|
|
|
|
return sQuestLogStorageCBs[a0](gUnknown_203AE08, a1);
|
|
}
|
|
|
|
static bool8 sub_81138A0(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 < 12 || a0 > 19)
|
|
return FALSE;
|
|
|
|
sub_81138F8();
|
|
gUnknown_203B024.unk_00 = a0;
|
|
|
|
if (a0 < 16 || a0 > 17)
|
|
{
|
|
if (a0 == 12 || a0 == 18)
|
|
memcpy(gUnknown_203B024.unk_04, a1, 12);
|
|
else
|
|
memcpy(gUnknown_203B024.unk_04, a1, 24);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_81138F8(void)
|
|
{
|
|
gUnknown_203B024 = (struct UnkStruct_203B024){};
|
|
}
|
|
|
|
void sub_811390C(void)
|
|
{
|
|
if (gUnknown_203B024.unk_00 != 0)
|
|
{
|
|
u16 *resp;
|
|
gUnknown_203B04A = 0;
|
|
sub_8110AEC(gUnknown_203B024.unk_00);
|
|
resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](gUnknown_203AE08, gUnknown_203B024.unk_04);
|
|
gUnknown_203AE08 = resp;
|
|
sub_81138F8();
|
|
}
|
|
}
|
|
|
|
static bool8 sub_8113954(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 != 34 && a0 != 30 && a0 != 32 && a0 != 33)
|
|
return FALSE;
|
|
sub_81138F8();
|
|
if (gUnknown_3005E88 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(a0, a1) != TRUE)
|
|
{
|
|
gUnknown_203B024.unk_00 = a0;
|
|
memcpy(gUnknown_203B024.unk_04, a1, 8);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void sub_81139BC(void)
|
|
{
|
|
if (gUnknown_203B024.unk_00 != 0)
|
|
{
|
|
u16 *resp;
|
|
if (gUnknown_3005E88 == 0)
|
|
{
|
|
gUnknown_203B04A = 0;
|
|
sub_8110AEC(gUnknown_203B024.unk_00);
|
|
}
|
|
sub_8113B94(gUnknown_203B024.unk_00);
|
|
resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](gUnknown_203AE08, gUnknown_203B024.unk_04);
|
|
gUnknown_203AE08 = resp;
|
|
sub_8113A1C(1);
|
|
sub_81138F8();
|
|
sub_811231C();
|
|
}
|
|
}
|
|
|
|
static void sub_8113A1C(u16 a0)
|
|
{
|
|
gUnknown_203AE08 = sub_8113C5C(gUnknown_203AE08, a0);
|
|
sQuestLogIdx++;
|
|
}
|
|
|
|
static bool8 sub_8113A44(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 != 31)
|
|
return FALSE;
|
|
|
|
if (sub_8114FBC(a1[0]) == TRUE)
|
|
return TRUE;
|
|
|
|
if (sub_8114FBC(a1[1]) == TRUE)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
static const u16 *(*const sQuestLogScriptParsingCBs[])(const u16 *) = {
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
sub_8113F3C,
|
|
sub_8113FBC,
|
|
sub_8114188,
|
|
sub_81141E4,
|
|
sub_8114240,
|
|
sub_811429C,
|
|
sub_8114324,
|
|
sub_8114394,
|
|
sub_811443C,
|
|
sub_811448C,
|
|
sub_8114518,
|
|
sub_81145A4,
|
|
sub_811464C,
|
|
sub_8114724,
|
|
sub_8114758,
|
|
sub_81147A8,
|
|
sub_8114834,
|
|
sub_81148BC,
|
|
sub_8114944,
|
|
sub_81149D0,
|
|
sub_8114A4C,
|
|
sub_8114AC8,
|
|
sub_8114B34,
|
|
sub_8114BA0,
|
|
sub_8114C0C,
|
|
sub_8114C8C,
|
|
sub_8114CE4,
|
|
sub_8114D68,
|
|
sub_8114E68,
|
|
sub_811500C,
|
|
sub_81150CC,
|
|
sub_81151DC,
|
|
sub_81152BC,
|
|
sub_8115460,
|
|
sub_8115518,
|
|
sub_81155E0,
|
|
NULL,
|
|
sub_8115700,
|
|
NULL,
|
|
sub_8115800
|
|
};
|
|
|
|
static const u8 sQuestLogEventCmdSizes[] = {
|
|
0x08,
|
|
0x08,
|
|
0x08,
|
|
0x08,
|
|
0x0a,
|
|
0x08,
|
|
0x08,
|
|
0x08,
|
|
0x08,
|
|
0x0a,
|
|
0x0a,
|
|
0x04,
|
|
0x10,
|
|
0x0c,
|
|
0x0c,
|
|
0x1a,
|
|
0x04,
|
|
0x04,
|
|
0x10,
|
|
0x0c,
|
|
0x0a,
|
|
0x0a,
|
|
0x0a,
|
|
0x08,
|
|
0x08,
|
|
0x08,
|
|
0x08,
|
|
0x06,
|
|
0x06,
|
|
0x06,
|
|
0x0c,
|
|
0x0c,
|
|
0x0c,
|
|
0x0a,
|
|
0x0c,
|
|
0x06,
|
|
0x08,
|
|
0x0e,
|
|
0x0e,
|
|
0x02,
|
|
0x08,
|
|
0x04,
|
|
0x06
|
|
};
|
|
|
|
static u16 *QuestLog_SkipCommand(u16 *curPtr, u16 **prevPtr_p)
|
|
{
|
|
u16 idx = curPtr[0] & 0xfff;
|
|
u16 cnt = curPtr[0] >> 12;
|
|
if (idx == 33)
|
|
cnt = 0;
|
|
if (idx < 3 || idx > 42)
|
|
return NULL;
|
|
*prevPtr_p = curPtr;
|
|
return sQuestLogEventCmdSizes[idx] + (sQuestLogEventCmdSizes[idx] - 4) * cnt + (void *)curPtr;
|
|
}
|
|
|
|
static void sub_8113ABC(u16 *a0)
|
|
{
|
|
u8 *r2 = (u8 *)(a0 + 2);
|
|
if ((a0[0] & 0xFFF) != 35)
|
|
gUnknown_203B04A = 0;
|
|
else
|
|
gUnknown_203B04A = r2[1] + 1;
|
|
}
|
|
|
|
#ifdef NONMATCHING
|
|
static bool8 sub_8113AE8(u16 *a0)
|
|
{
|
|
if (a0 == NULL || a0[1] > sQuestLogIdx)
|
|
return FALSE;
|
|
|
|
sQuestLogScriptParsingCBs[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;
|
|
}
|
|
#else
|
|
NAKED
|
|
static bool8 sub_8113AE8(u16 *a0)
|
|
{
|
|
asm_unified("\tpush {r4,lr}\n"
|
|
"\tadds r4, r0, 0\n"
|
|
"\tcmp r0, 0\n"
|
|
"\tbeq _08113AFA\n"
|
|
"\tldr r1, _08113B00 @ =sQuestLogIdx\n"
|
|
"\tldrh r0, [r0, 0x2]\n"
|
|
"\tldrh r1, [r1]\n"
|
|
"\tcmp r0, r1\n"
|
|
"\tbls _08113B04\n"
|
|
"_08113AFA:\n"
|
|
"\tmovs r0, 0\n"
|
|
"\tb _08113B32\n"
|
|
"\t.align 2, 0\n"
|
|
"_08113B00: .4byte sQuestLogIdx\n"
|
|
"_08113B04:\n"
|
|
"\tldr r2, _08113B38 @ =sQuestLogScriptParsingCBs\n"
|
|
"\tldrh r1, [r4]\n"
|
|
"\tldr r0, _08113B3C @ =0x00000fff\n"
|
|
"\tands r0, r1\n"
|
|
"\tlsls r0, 2\n"
|
|
"\tadds r0, r2\n"
|
|
"\tldr r1, [r0]\n"
|
|
"\tadds r0, r4, 0\n"
|
|
"\tbl _call_via_r1\n"
|
|
"\tldr r2, _08113B40 @ =gUnknown_203B044\n"
|
|
"\tldrh r1, [r4]\n"
|
|
"\tstrb r1, [r2]\n"
|
|
"\tmovs r0, 0xF0\n"
|
|
"\tlsls r0, 8\n"
|
|
"\tands r0, r1\n"
|
|
"\tlsrs r0, 12\n"
|
|
"\tstrb r0, [r2, 0x1]\n"
|
|
"\tcmp r0, 0\n"
|
|
"\tbeq _08113B30\n"
|
|
"\tmovs r0, 0x1\n"
|
|
"\tstrh r0, [r2, 0x2]\n"
|
|
"_08113B30:\n"
|
|
"\tmovs r0, 0x1\n"
|
|
"_08113B32:\n"
|
|
"\tpop {r4}\n"
|
|
"\tpop {r1}\n"
|
|
"\tbx r1\n"
|
|
"\t.align 2, 0\n"
|
|
"_08113B38: .4byte sQuestLogScriptParsingCBs\n"
|
|
"_08113B3C: .4byte 0x00000fff\n"
|
|
"_08113B40: .4byte gUnknown_203B044");
|
|
}
|
|
#endif
|
|
|
|
static bool8 sub_8113B44(u16 *a0)
|
|
{
|
|
if (gUnknown_203B044.unk_2 == 0)
|
|
return FALSE;
|
|
|
|
sQuestLogScriptParsingCBs[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 a0)
|
|
{
|
|
if (gUnknown_203B044.unk_0 != (u8)a0 || gUnknown_203B044.unk_2 != sQuestLogIdx)
|
|
{
|
|
gUnknown_203B044.unk_0 = a0;
|
|
gUnknown_203B044.unk_1 = 0;
|
|
gUnknown_203B044.unk_2 = sQuestLogIdx;
|
|
}
|
|
else if (gUnknown_203B044.unk_1 < 5)
|
|
gUnknown_203B044.unk_1++;
|
|
}
|
|
|
|
static void sub_8113BD8(void)
|
|
{
|
|
gUnknown_203B049 = 0;
|
|
gUnknown_203B04A = 0;
|
|
gUnknown_203B04B = 0;
|
|
}
|
|
|
|
static u16 *sub_8113BF4(u16 *a0)
|
|
{
|
|
if (!sub_8110988(a0, sQuestLogEventCmdSizes[39]))
|
|
return NULL;
|
|
a0[0] = 39;
|
|
return a0 + 1;
|
|
}
|
|
|
|
static u16 *sub_8113C20(u16 *a0, struct UnkStruct_203AE98 * a1)
|
|
{
|
|
if (!sub_8110988(a0, sQuestLogEventCmdSizes[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 *sub_8113C5C(u16 *a0, u16 a1)
|
|
{
|
|
if (!sub_8110988(a0, sQuestLogEventCmdSizes[41]))
|
|
return NULL;
|
|
a0[0] = 41;
|
|
a0[1] = a1;
|
|
return a0 + 2;
|
|
}
|
|
|
|
static u16 *sub_8113C8C(u16 *a0, struct UnkStruct_203AE98 * a1)
|
|
{
|
|
if (!sub_8110988(a0, sQuestLogEventCmdSizes[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 UnkStruct_203AE98 * a1)
|
|
{
|
|
u8 *r6 = (u8 *)a0 + 4;
|
|
|
|
if (!sub_8110988(a0, sQuestLogEventCmdSizes[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 UnkStruct_203AE98 * a1)
|
|
{
|
|
u8 *r6 = (u8 *)a0 + 4;
|
|
|
|
if (!sub_8110988(a0, sQuestLogEventCmdSizes[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 UnkStruct_203AE98 * a1)
|
|
{
|
|
u16 *r4 = a0;
|
|
u8 *r6 = (u8 *)a0 + 4;
|
|
|
|
if (!sub_8110988(r4, sQuestLogEventCmdSizes[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 UnkStruct_203AE98 * a1)
|
|
{
|
|
u16 *r5 = a0;
|
|
u8 *r6 = (u8 *)a0 + 4;
|
|
|
|
if (!sub_8110988(r5, sQuestLogEventCmdSizes[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 a0, u16 *a1)
|
|
{
|
|
u8 r6;
|
|
u16 *r5;
|
|
u8 r4;
|
|
u8 r1;
|
|
|
|
if (gUnknown_203B044.unk_1 == 0)
|
|
r6 = sQuestLogEventCmdSizes[a0];
|
|
else
|
|
r6 = sQuestLogEventCmdSizes[a0] - 4;
|
|
if (!sub_8110944(a1, r6))
|
|
return NULL;
|
|
|
|
r5 = (void *)a1;
|
|
|
|
if (gUnknown_203B044.unk_1 != 0)
|
|
r5 = (void *)r5 - (gUnknown_203B044.unk_1 * r6 + 4);
|
|
|
|
if (gUnknown_203B044.unk_1 == 5)
|
|
{
|
|
for (r4 = 0; r4 < 4; r4++)
|
|
{
|
|
memcpy(
|
|
(void *)r5 + (r4 * r6 + 4),
|
|
(void *)r5 + ((r4 + 1) * r6 + 4),
|
|
r6
|
|
);
|
|
}
|
|
r1 = 4;
|
|
}
|
|
else
|
|
r1 = gUnknown_203B044.unk_1;
|
|
|
|
r5[0] = a0 + (r1 << 12);
|
|
r5[1] = sQuestLogIdx;
|
|
r5 = (void *)r5 + (r1 * r6 + 4);
|
|
return r5;
|
|
}
|
|
|
|
static const u16 *sub_8113E88(u16 a0, const u16 *a1)
|
|
{
|
|
a1 = (const void *)a1 + (gUnknown_203B044.unk_2 * (sQuestLogEventCmdSizes[a0] - 4) + 4);
|
|
return a1;
|
|
}
|
|
|
|
void QuestLog_AutoGetSpeciesName(u16 a0, u8 *a1, u8 a2)
|
|
{
|
|
if (a1 != NULL)
|
|
{
|
|
if (a0 != SPECIES_EGG)
|
|
GetSpeciesName(a1, a0);
|
|
else
|
|
StringCopy(a1, gText_EggNickname);
|
|
}
|
|
else
|
|
{
|
|
if (a0 != SPECIES_EGG)
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(a2, gSpeciesNames[a0]);
|
|
else
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(a2, gText_EggNickname);
|
|
}
|
|
}
|
|
|
|
static u16 *sub_8113F14(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2 = sub_8113DE0(3, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
|
|
r2[0] = a1[0];
|
|
r2[1] = a1[1];
|
|
return r2 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8113F3C(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(3, a0);
|
|
QuestLog_AutoGetSpeciesName(r4[0], gStringVar1, 0);
|
|
QuestLog_AutoGetSpeciesName(r4[1], gStringVar2, 0);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A16F);
|
|
r4 += 2;
|
|
return r4;
|
|
}
|
|
|
|
static u16 *sub_8113F80(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2 = sub_8113DE0(4, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
|
|
r2[0] = a1[0];
|
|
r2[1] = a1[2];
|
|
r2[2] = a1[3];
|
|
|
|
if (a1[0] == ITEM_ESCAPE_ROPE)
|
|
gUnknown_203B048 = 2;
|
|
|
|
return r2 + 3;
|
|
}
|
|
|
|
static const u16 *sub_8113FBC(const u16 *a0)
|
|
{
|
|
const u16 *r5 = sub_8113E88(4, a0);
|
|
|
|
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, r5[2]);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6);
|
|
}
|
|
else if (r5[1] != 0xFFFF)
|
|
{
|
|
QuestLog_AutoGetSpeciesName(r5[1], gStringVar2, 0);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A1E7);
|
|
}
|
|
else
|
|
{
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A210);
|
|
}
|
|
break;
|
|
case POCKET_KEY_ITEMS:
|
|
StringCopy(gStringVar1, ItemId_GetName(r5[0]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A220);
|
|
break;
|
|
case POCKET_TM_CASE:
|
|
QuestLog_AutoGetSpeciesName(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, gUnknown_841A965);
|
|
else
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A277);
|
|
}
|
|
else
|
|
{
|
|
if (r5[0] > ITEM_TM50)
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A938);
|
|
else
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A255);
|
|
}
|
|
break;
|
|
}
|
|
return r5 + 3;
|
|
}
|
|
|
|
u16 *sub_811414C(u16 a0, u16 *a1, const u16 *a2)
|
|
{
|
|
u16 *r1 = sub_8113DE0(a0, a1);
|
|
if (r1 == NULL)
|
|
return NULL;
|
|
|
|
r1[0] = a2[0];
|
|
r1[1] = a2[2];
|
|
return r1 + 2;
|
|
}
|
|
|
|
static u16 *sub_8114174(u16 *a0, const u16 *a1)
|
|
{
|
|
return sub_811414C(5, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_8114188(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(5, a0);
|
|
QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0);
|
|
StringCopy(gStringVar2, ItemId_GetName(r4[0]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841AB74);
|
|
r4 += 2;
|
|
return r4;
|
|
}
|
|
|
|
static u16 *sub_81141D0(u16 *a0, const u16 *a1)
|
|
{
|
|
return sub_811414C(6, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_81141E4(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(6, a0);
|
|
|
|
QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0);
|
|
StringCopy(gStringVar2, ItemId_GetName(r4[0]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841AB8E);
|
|
r4 += 2;
|
|
return r4;
|
|
}
|
|
|
|
static u16 *sub_811422C(u16 *a0, const u16 *a1)
|
|
{
|
|
return sub_811414C(7, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_8114240(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(7, a0);
|
|
|
|
QuestLog_AutoGetSpeciesName(r4[1], gStringVar2, 0);
|
|
StringCopy(gStringVar1, ItemId_GetName(r4[0]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A6A5);
|
|
r4 += 2;
|
|
return r4;
|
|
}
|
|
|
|
static u16 *sub_8114288(u16 *a0, const u16 *a1)
|
|
{
|
|
return sub_811414C(8, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_811429C(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(8, a0);
|
|
|
|
QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0);
|
|
StringCopy(gStringVar2, ItemId_GetName(r4[0]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A1CD);
|
|
r4 += 2;
|
|
return r4;
|
|
}
|
|
|
|
u16 *sub_81142E4(u16 a0, u16 *a1, const u16 *a2)
|
|
{
|
|
u16 *r1 = sub_8113DE0(a0, a1);
|
|
if (r1 == NULL)
|
|
return NULL;
|
|
|
|
r1[0] = a2[0];
|
|
r1[1] = a2[1];
|
|
r1[2] = a2[2];
|
|
return r1 + 3;
|
|
}
|
|
|
|
static u16 *sub_8114310(u16 *a0, const u16 *a1)
|
|
{
|
|
return sub_81142E4(9, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_8114324(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(9, a0);
|
|
QuestLog_AutoGetSpeciesName(r4[2], gStringVar1, 0);
|
|
StringCopy(gStringVar2, ItemId_GetName(r4[0]));
|
|
StringCopy(gStringVar3, ItemId_GetName(r4[1]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A193);
|
|
r4 += 3;
|
|
return r4;
|
|
}
|
|
|
|
static u16 *sub_8114380(u16 *a0, const u16 *a1)
|
|
{
|
|
return sub_81142E4(10, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_8114394(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(10, a0);
|
|
QuestLog_AutoGetSpeciesName(r4[2], gStringVar2, 0);
|
|
StringCopy(gStringVar3, ItemId_GetName(r4[0]));
|
|
StringCopy(gStringVar1, ItemId_GetName(r4[1]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A6E1);
|
|
r4 += 3;
|
|
return r4;
|
|
}
|
|
|
|
static u16 *sub_81143F0(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r4 = a0;
|
|
if (gUnknown_203B044.unk_0 == 11 && gUnknown_203B044.unk_1 != 0)
|
|
return r4;
|
|
|
|
if (!sub_8110944(a0, sQuestLogEventCmdSizes[11]))
|
|
return NULL;
|
|
|
|
r4[0] = 11;
|
|
r4[1] = sQuestLogIdx;
|
|
return r4 + 2;
|
|
}
|
|
|
|
static const u16 *sub_811443C(const u16 *a0)
|
|
{
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A2B0);
|
|
a0 += 2;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_811445C(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r4 = a0 + 4;
|
|
|
|
a0[0] = 12;
|
|
a0[1] = sQuestLogIdx;
|
|
a0[2] = a1[0];
|
|
a0[3] = a1[1];
|
|
a1 += 2;
|
|
memcpy(r4, a1, 7);
|
|
r4 += 4;
|
|
return r4;
|
|
}
|
|
|
|
static const u16 *sub_811448C(const u16 *a0)
|
|
{
|
|
const u16 *r6 = a0 + 4;
|
|
|
|
memset(gStringVar1, EOS, 8);
|
|
memcpy(gStringVar1, r6, 7);
|
|
|
|
sub_8115834(gStringVar1);
|
|
QuestLog_AutoGetSpeciesName(a0[3], gStringVar2, 0);
|
|
QuestLog_AutoGetSpeciesName(a0[2], gStringVar3, 0);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A3FF);
|
|
r6 += 4;
|
|
return r6;
|
|
}
|
|
|
|
static const u8 *const gUnknown_8456ACC[] = {
|
|
gUnknown_841A74E,
|
|
gUnknown_841A756,
|
|
gUnknown_841A762
|
|
};
|
|
|
|
static const u8 *const gUnknown_8456AD8[] = {
|
|
gUnknown_841AF98,
|
|
gUnknown_841A762,
|
|
gUnknown_841AF9F
|
|
};
|
|
|
|
static const u8 *const gUnknown_8456AE4[] = {
|
|
gUnknown_841A502,
|
|
gUnknown_841A506,
|
|
gUnknown_841AFD1
|
|
};
|
|
|
|
static u16 *sub_81144EC(u16 *a0, const u16 *a1)
|
|
{
|
|
a0[0] = 13;
|
|
a0[1] = sQuestLogIdx;
|
|
*((u8 *)a0 + 4) = *((const u8 *)a1 + 0);
|
|
memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7);
|
|
a0 += 6;
|
|
return a0;
|
|
}
|
|
|
|
static const u16 *sub_8114518(const u16 *a0)
|
|
{
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
|
|
memset(gStringVar1, EOS, 8);
|
|
memcpy(gStringVar1, (const u8 *)a0 + 5, 7);
|
|
sub_8115834(gStringVar1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_8456AE4[((const u8 *)a0)[4]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A422);
|
|
a0 += 6;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_8114578(u16 *a0, const u16 *a1)
|
|
{
|
|
a0[0] = 14;
|
|
a0[1] = sQuestLogIdx;
|
|
*((u8 *)a0 + 4) = *((const u8 *)a1 + 0);
|
|
memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7);
|
|
a0 += 6;
|
|
return a0;
|
|
}
|
|
|
|
static const u16 *sub_81145A4(const u16 *a0)
|
|
{
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
|
|
memset(gStringVar1, EOS, 8);
|
|
memcpy(gStringVar1, (const u8 *)a0 + 5, 7);
|
|
sub_8115834(gStringVar1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_8456AE4[((const u8 *)a0)[4]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A477);
|
|
a0 += 6;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_8114604(u16 *a0, const u16 *a1)
|
|
{
|
|
a0[0] = 15;
|
|
a0[1] = sQuestLogIdx;
|
|
*((u8 *)a0 + 4) = *((const u8 *)a1 + 0);
|
|
memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7);
|
|
memcpy((u8 *)a0 + 12, (const u8 *)a1 + 8, 7);
|
|
memcpy((u8 *)a0 + 19, (const u8 *)a1 + 15, 7);
|
|
a0 += 13;
|
|
return a0;
|
|
}
|
|
|
|
static const u16 *sub_811464C(const u16 *a0)
|
|
{
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
|
|
memset(gStringVar1, EOS, 8);
|
|
memset(gStringVar2, EOS, 8);
|
|
memset(gStringVar3, EOS, 8);
|
|
StringCopy7(gStringVar1, (const u8 *)a0 + 5);
|
|
StringCopy7(gStringVar2, (const u8 *)a0 + 12);
|
|
StringCopy7(gStringVar3, (const u8 *)a0 + 19);
|
|
sub_8115834(gStringVar1);
|
|
sub_8115834(gStringVar2);
|
|
sub_8115834(gStringVar3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gUnknown_8456AE4[((const u8 *)a0)[4]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A4C6);
|
|
a0 += 13;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_8114710(u16 *a0, const u16 *a1)
|
|
{
|
|
a0[0] = 16;
|
|
a0[1] = sQuestLogIdx;
|
|
return a0 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8114724(const u16 *a0)
|
|
{
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A50B);
|
|
a0 += 2;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_8114744(u16 *a0, const u16 *a1)
|
|
{
|
|
a0[0] = 17;
|
|
a0[1] = sQuestLogIdx;
|
|
return a0 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8114758(const u16 *a0)
|
|
{
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A732);
|
|
a0 += 2;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_8114778(u16 *a0, const u16 *a1)
|
|
{
|
|
u8 *r4 = (u8 *)(a0 + 4);
|
|
a0[0] = 18;
|
|
a0[1] = sQuestLogIdx;
|
|
a0[2] = a1[0];
|
|
a0[3] = a1[1];
|
|
memcpy(r4, a1 + 2, 7);
|
|
r4 += 8;
|
|
return (u16 *)r4;
|
|
}
|
|
|
|
static const u16 *sub_81147A8(const u16 *a0)
|
|
{
|
|
const u8 *r6 = (const u8 *)(a0 + 4);
|
|
memset(gStringVar1, EOS, 8);
|
|
memcpy(gStringVar1, r6, 7);
|
|
sub_8115834(gStringVar1);
|
|
QuestLog_AutoGetSpeciesName(a0[3], gStringVar2, 0);
|
|
QuestLog_AutoGetSpeciesName(a0[2], gStringVar3, 0);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A76A);
|
|
r6 += 8;
|
|
return (const u16 *)r6;
|
|
}
|
|
|
|
static u16 *sub_8114808(u16 *a0, const u16 *a1)
|
|
{
|
|
a0[0] = 19;
|
|
a0[1] = sQuestLogIdx;
|
|
*(u8 *)&a0[2] = *(const u8 *)&a1[0];
|
|
memcpy((u8 *)a0 + 5, (const u8 *)a1 + 1, 7);
|
|
a0 += 6;
|
|
return a0;
|
|
}
|
|
|
|
static const u16 *sub_8114834(const u16 *a0)
|
|
{
|
|
memset(gStringVar1, EOS, 8);
|
|
memcpy(gStringVar1, (const u8 *)a0 + 5, 7);
|
|
sub_8115834(gStringVar1);
|
|
StringCopy(gStringVar2, gUnknown_8456AE4[*(const u8 *)&a0[2]]);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A7B0);
|
|
a0 += 6;
|
|
return a0;
|
|
}
|
|
|
|
static u16 *sub_811488C(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(20, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
a0[1] = a1[1];
|
|
*((u8 *)a0 + 4) = *((const u8 *)a1 + 4);
|
|
*((u8 *)a0 + 5) = *((const u8 *)a1 + 5);
|
|
return a0 + 3;
|
|
}
|
|
|
|
static const u16 *sub_81148BC(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(20, a0);
|
|
boxIdxs = (const u8 *)a0 + 4;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1]));
|
|
QuestLog_AutoGetSpeciesName(a0[1], NULL, 3);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A566);
|
|
return a0 + 3;
|
|
}
|
|
|
|
static u16 *sub_8114918(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(21, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
a0[1] = a1[1];
|
|
*((u8 *)a0 + 4) = *((const u8 *)a1 + 4);
|
|
return a0 + 3;
|
|
}
|
|
|
|
static const u16 *sub_8114944(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(21, a0);
|
|
boxIdxs = (const u8 *)a0 + 4;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
QuestLog_AutoGetSpeciesName(a0[1], NULL, 2);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A5D9);
|
|
return a0 + 3;
|
|
}
|
|
|
|
static u16 *sub_8114990(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2;
|
|
u16 *ret;
|
|
r2 = sub_8113DE0(22, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
ret = r2 + 2;
|
|
if (*((const u8 *)a1 + 4) == TOTAL_BOXES_COUNT)
|
|
{
|
|
r2[0] = a1[1];
|
|
r2[1] = a1[0];
|
|
*((u8 *)r2 + 4) = *((const u8 *)a1 + 5);
|
|
}
|
|
else
|
|
{
|
|
r2[0] = a1[0];
|
|
r2[1] = a1[1];
|
|
*((u8 *)r2 + 4) = *((const u8 *)a1 + 4);
|
|
}
|
|
return ret + 1;
|
|
}
|
|
|
|
static const u16 *sub_81149D0(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(22, a0);
|
|
boxIdxs = (const u8 *)a0 + 4;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
QuestLog_AutoGetSpeciesName(a0[1], NULL, 2);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A60A);
|
|
return a0 + 3;
|
|
}
|
|
|
|
static u16 *sub_8114A1C(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2;
|
|
u16 *ret;
|
|
r2 = sub_8113DE0(23, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
r2[0] = a1[0];
|
|
ret = r2 + 1;
|
|
*((u8 *)ret + 0) = *((const u8 *)a1 + 4);
|
|
*((u8 *)ret + 1) = *((const u8 *)a1 + 5);
|
|
return ret + 1;
|
|
}
|
|
|
|
static const u16 *sub_8114A4C(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(23, a0);
|
|
boxIdxs = (const u8 *)a0 + 2;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1]));
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A59C);
|
|
return (const u16 *)boxIdxs + 1;
|
|
}
|
|
|
|
static u16 *sub_8114AA0(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2;
|
|
r2 = sub_8113DE0(24, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
r2[0] = a1[0];
|
|
*((u8 *)r2 + 2) = *((const u8 *)a1 + 4);
|
|
return r2 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8114AC8(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(24, a0);
|
|
boxIdxs = (const u8 *)a0 + 2;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A5FA);
|
|
return (const u16 *)boxIdxs + 1;
|
|
}
|
|
|
|
static u16 *sub_8114B0C(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2;
|
|
r2 = sub_8113DE0(25, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
r2[0] = a1[0];
|
|
*((u8 *)r2 + 2) = *((const u8 *)a1 + 4);
|
|
return r2 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8114B34(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(25, a0);
|
|
boxIdxs = (const u8 *)a0 + 2;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0]));
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A632);
|
|
return (const u16 *)boxIdxs + 1;
|
|
}
|
|
|
|
static u16 *sub_8114B78(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2;
|
|
r2 = sub_8113DE0(26, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
r2[0] = a1[0];
|
|
*((u8 *)r2 + 2) = *((const u8 *)a1 + 4);
|
|
return r2 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8114BA0(const u16 *a0)
|
|
{
|
|
const u8 *boxIdxs;
|
|
a0 = sub_8113E88(26, a0);
|
|
boxIdxs = (const u8 *)a0 + 2;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 0);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(boxIdxs[0]));
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A64F);
|
|
return (const u16 *)boxIdxs + 1;
|
|
}
|
|
|
|
static u16 *sub_8114BE4(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2;
|
|
r2 = sub_8113DE0(27, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
*((u8 *)r2 + 0) = *((const u8 *)a1 + 4);
|
|
*((u8 *)r2 + 1) = *((const u8 *)a1 + 5);
|
|
return r2 + 1;
|
|
}
|
|
|
|
static const u16 *sub_8114C0C(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(27, a0);
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(*((const u8 *)r4 + 0)));
|
|
if (*((const u8 *)r4 + 0) == *((const u8 *)r4 + 1))
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841A694);
|
|
else
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(*((const u8 *)r4 + 1)));
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A66E);
|
|
return r4 + 1;
|
|
}
|
|
|
|
static u16 *sub_8114C68(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(28, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
return a0 + 1;
|
|
}
|
|
|
|
static const u16 *sub_8114C8C(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(28, a0);
|
|
CopyItemName(r4[0], gStringVar1);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A391);
|
|
return r4 + 1;
|
|
}
|
|
|
|
static u16 *sub_8114CC0(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(29, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
return a0 + 1;
|
|
}
|
|
|
|
static const u16 *sub_8114CE4(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(29, a0);
|
|
CopyItemName(r4[0], gStringVar1);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841A3DA);
|
|
return r4 + 1;
|
|
}
|
|
|
|
u16 *sub_8114D18(u16 a0, u16 *a1, const u16 *a2)
|
|
{
|
|
a1 = sub_8113DE0(a0, 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 *sub_8114D4C(u16 *a0, const u16 *a1)
|
|
{
|
|
gUnknown_203B048 = TRUE;
|
|
return sub_8114D18(30, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_8114D68(const u16 *a0)
|
|
{
|
|
const u8 *r6;
|
|
a0 = sub_8113E88(30, a0);
|
|
r6 = (const u8 *)a0 + 6;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
GetMapNameGeneric(gStringVar1, r6[0]);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[a0[2]].trainerName);
|
|
QuestLog_AutoGetSpeciesName(a0[0], 0, 2);
|
|
QuestLog_AutoGetSpeciesName(a0[1], 0, 3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gUnknown_8456ACC[r6[1]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AF0C);
|
|
return a0 + 4;
|
|
}
|
|
|
|
static u16 *sub_8114DE8(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r4 = a0;
|
|
u8 *r5 = (u8 *)a0 + 8;
|
|
if (!sub_8110944(r4, sQuestLogEventCmdSizes[31]))
|
|
return NULL;
|
|
if (r5[0] == 0 && r5[1] == 0)
|
|
{
|
|
r4[0] = 31;
|
|
r4[1] = sQuestLogIdx;
|
|
}
|
|
if (a1[0])
|
|
r4[2] = a1[0];
|
|
if (a1[1])
|
|
r4[3] = a1[1];
|
|
if (a1[0] && r5[0] != 0xFF)
|
|
r5[0]++;
|
|
if (a1[1] && r5[1] != 0xFF)
|
|
r5[1]++;
|
|
r5[2] = *((const u8 *)a1 + 4);
|
|
return (u16 *)(r5 + 4);
|
|
}
|
|
|
|
static const u16 *sub_8114E68(const u16 *a0)
|
|
{
|
|
const u8 *r6;
|
|
if (!sub_8110944(a0, sQuestLogEventCmdSizes[31]))
|
|
return NULL;
|
|
|
|
r6 = (const u8 *)a0 + 8;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
GetMapNameGeneric(gStringVar1, r6[2]);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
|
|
QuestLog_AutoGetSpeciesName(a0[2], NULL, 1);
|
|
ConvertIntToDecimalStringN(gStringVar2, r6[0], STR_CONV_MODE_LEFT_ALIGN, 3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
|
|
QuestLog_AutoGetSpeciesName(a0[3], NULL, 3);
|
|
ConvertIntToDecimalStringN(gStringVar3, r6[1], STR_CONV_MODE_LEFT_ALIGN, 3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gSaveBlock2Ptr->playerName);
|
|
if (r6[0] == 0)
|
|
{
|
|
if (r6[1] == 1)
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AA01);
|
|
else
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AA2B);
|
|
}
|
|
else if (r6[1] == 0)
|
|
{
|
|
if (r6[0] == 1)
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A9A9);
|
|
else
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A9D4);
|
|
}
|
|
else if (r6[0] == 1)
|
|
{
|
|
if (r6[1] == 1)
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AA76);
|
|
else
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AAAA);
|
|
}
|
|
else
|
|
{
|
|
if (r6[1] == 1)
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AAEC);
|
|
else
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AB29);
|
|
}
|
|
return (const u16 *)(r6 + 4);
|
|
}
|
|
|
|
static bool8 sub_8114FBC(u16 a0)
|
|
{
|
|
switch (a0)
|
|
{
|
|
case 0x96:
|
|
case 0x8F ... 0x92:
|
|
case 0xF9 ... 0xFA:
|
|
case 0x19A:
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static u16 *sub_8114FF0(u16 *a0, const u16 *a1)
|
|
{
|
|
gUnknown_203B048 = TRUE;
|
|
return sub_8114D18(32, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_811500C(const u16 *a0)
|
|
{
|
|
const u8 *r5;
|
|
a0 = sub_8113E88(32, a0);
|
|
r5 = (const u8 *)a0 + 6;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gTrainers[a0[2]].trainerName);
|
|
QuestLog_AutoGetSpeciesName(a0[0], NULL, 1);
|
|
QuestLog_AutoGetSpeciesName(a0[1], NULL, 2);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gUnknown_8456ACC[r5[1]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AF3E);
|
|
return a0 + 4;
|
|
}
|
|
|
|
static u16 *sub_8115078(u16 *a0, const u16 *a1)
|
|
{
|
|
if (!sub_8110944(a0, sQuestLogEventCmdSizes[33]))
|
|
return NULL;
|
|
a0[0] = 0x2021;
|
|
a0[1] = sQuestLogIdx;
|
|
a0[2] = a1[1];
|
|
a0[3] = a1[2];
|
|
*((u8 *)a0 + 8) = *((const u8 *)a1 + 6);
|
|
gUnknown_203B048 = TRUE;
|
|
return a0 + 5;
|
|
}
|
|
|
|
static const u16 *sub_81150CC(const u16 *a0)
|
|
{
|
|
const u8 *r5;
|
|
if (!sub_8110944(a0, sQuestLogEventCmdSizes[33]))
|
|
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, gUnknown_841A2E1);
|
|
break;
|
|
case 1:
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName);
|
|
QuestLog_AutoGetSpeciesName(a0[2], NULL, 1);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName);
|
|
QuestLog_AutoGetSpeciesName(a0[3], NULL, 3);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A312);
|
|
break;
|
|
case 2:
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_8456AD8[r5[0]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A349);
|
|
break;
|
|
}
|
|
return (const u16 *)(r5 + 2);
|
|
}
|
|
|
|
static u16 *sub_81151C0(u16 *a0, const u16 *a1)
|
|
{
|
|
gUnknown_203B048 = TRUE;
|
|
return sub_8114D18(34, a0, a1);
|
|
}
|
|
|
|
static const u16 *sub_81151DC(const u16 *a0)
|
|
{
|
|
const u16 *r5 = sub_8113E88(34, a0);
|
|
const u8 *r6 = (const u8 *)r5 + 6;
|
|
DynamicPlaceholderTextUtil_Reset();
|
|
GetMapNameGeneric(gStringVar1, r6[0]);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
|
|
if (
|
|
gTrainers[r5[2]].trainerClass == 0x51
|
|
|| gTrainers[r5[2]].trainerClass == 0x59
|
|
|| gTrainers[r5[2]].trainerClass == 0x5A
|
|
)
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetExpandedPlaceholder(6));
|
|
else
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[r5[2]].trainerName);
|
|
QuestLog_AutoGetSpeciesName(r5[0], NULL, 2);
|
|
QuestLog_AutoGetSpeciesName(r5[1], NULL, 3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gUnknown_8456ACC[r6[1]]);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841AF6D);
|
|
return (const u16 *)(r6 + 2);
|
|
}
|
|
|
|
static const u8 *const gUnknown_8456AF0[] = {
|
|
gQuestLogString_Home,
|
|
gQuestLogString_OakResearchLab,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_PokemonLeagueGate,
|
|
gQuestLogString_PokemonLeagueGate,
|
|
gQuestLogString_ViridianForest,
|
|
gQuestLogString_ViridianForest,
|
|
gQuestLogString_PewterMuseumOfScience,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_MtMoon,
|
|
gQuestLogString_MtMoon,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_BikeShop,
|
|
gQuestLogString_BillSHouse,
|
|
gQuestLogString_DayCare,
|
|
gQuestLogString_UndergroundPath,
|
|
gQuestLogString_UndergroundPath,
|
|
gQuestLogString_PokemonFanClub,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_SSAnne,
|
|
gQuestLogString_DiglettSCave,
|
|
gQuestLogString_DiglettSCave,
|
|
gQuestLogString_RockTunnel,
|
|
gQuestLogString_RockTunnel,
|
|
gQuestLogString_PowerPlant,
|
|
gQuestLogString_PokemonTower,
|
|
gQuestLogString_VolunteerHouse,
|
|
gQuestLogString_NameRaterSHouse,
|
|
gQuestLogString_UndergroundPath,
|
|
gQuestLogString_UndergroundPath,
|
|
gQuestLogString_CeladonDeptStore,
|
|
gQuestLogString_CeladonMansion,
|
|
gQuestLogString_RocketGameCorner,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_Restaurant,
|
|
gQuestLogString_RocketHideout,
|
|
gQuestLogString_SafariZone,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_WardenSHome,
|
|
gQuestLogString_FightingDojo,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_SilphCo,
|
|
gQuestLogString_SeafoamIslands,
|
|
gQuestLogString_SeafoamIslands,
|
|
gQuestLogString_PokemonMansion,
|
|
gQuestLogString_Gym,
|
|
gQuestLogString_PokemonResearchLab,
|
|
gQuestLogString_VictoryRoad,
|
|
gQuestLogString_VictoryRoad,
|
|
gQuestLogString_PokemonLeague,
|
|
gQuestLogString_CeruleanCave
|
|
};
|
|
|
|
static const u8 *const gUnknown_8456BBC[] = {
|
|
gUnknown_841A53A,
|
|
gUnknown_841AD9E,
|
|
gUnknown_841ADC8,
|
|
gUnknown_841ADFF,
|
|
gUnknown_841AE1E,
|
|
gUnknown_841AE48,
|
|
gUnknown_841AEA7,
|
|
gUnknown_841AEDC,
|
|
gUnknown_841AFD6,
|
|
gUnknown_841B005
|
|
};
|
|
|
|
static const u8 gUnknown_8456BE4[] = {
|
|
0x03,
|
|
0x04,
|
|
0x05,
|
|
0x08,
|
|
0x08,
|
|
0x07,
|
|
0x07,
|
|
0x01,
|
|
0x05,
|
|
0x07,
|
|
0x07,
|
|
0x05,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
0x08,
|
|
0x08,
|
|
0x00,
|
|
0x05,
|
|
0x08,
|
|
0x07,
|
|
0x07,
|
|
0x07,
|
|
0x07,
|
|
0x08,
|
|
0x08,
|
|
0x00,
|
|
0x00,
|
|
0x08,
|
|
0x08,
|
|
0x00,
|
|
0x00,
|
|
0x02,
|
|
0x05,
|
|
0x00,
|
|
0x08,
|
|
0x06,
|
|
0x05,
|
|
0x00,
|
|
0x00,
|
|
0x05,
|
|
0x09,
|
|
0x07,
|
|
0x07,
|
|
0x09,
|
|
0x05,
|
|
0x00,
|
|
0x07,
|
|
0x07,
|
|
0x08,
|
|
0x07
|
|
};
|
|
|
|
static const u8 gUnknown_8456C17[] = {
|
|
0x5a,
|
|
0x5b,
|
|
0x5d,
|
|
0x5e,
|
|
0x5f,
|
|
0x62,
|
|
0x60,
|
|
0x59
|
|
};
|
|
|
|
static const u8 *const gUnknown_8456C20[] = {
|
|
gUnknown_841AC51,
|
|
gUnknown_841ABAB,
|
|
gUnknown_841ABCD,
|
|
gUnknown_841AC2A,
|
|
gUnknown_841ABF9,
|
|
gUnknown_841AC93,
|
|
gUnknown_841ACBC,
|
|
gUnknown_841AD69,
|
|
gUnknown_841AD1D,
|
|
gUnknown_841A90C,
|
|
gUnknown_841A8E0,
|
|
gUnknown_841AD3C
|
|
};
|
|
|
|
static u16 *sub_8115280(u16 *a0, const u16 *a1)
|
|
{
|
|
u16 *r2 = sub_8113DE0(35, a0);
|
|
if (r2 == NULL)
|
|
return NULL;
|
|
*((u8 *)r2 + 0) = *((const u8 *)a1 + 0);
|
|
if ((*((u8 *)r2 + 1) = *((const u8 *)a1 + 1)) == 0x24)
|
|
gUnknown_203B048 = TRUE;
|
|
return r2 + 1;
|
|
}
|
|
|
|
static const u16 *sub_81152BC(const u16 *a0)
|
|
{
|
|
u8 r4, r6;
|
|
const u16 *r5 = sub_8113E88(35, a0);
|
|
const u8 *r5_2 = (const u8 *)r5 + 0;
|
|
r6 = r5_2[1];
|
|
GetMapNameGeneric(gStringVar1, r5_2[0]);
|
|
StringCopy(gStringVar2, gUnknown_8456AF0[r6]);
|
|
if (gUnknown_8456BE4[r6] == 5)
|
|
{
|
|
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, gUnknown_841AE8F);
|
|
else
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841AE48);
|
|
break;
|
|
}
|
|
if (r4 == 8)
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_8456BBC[gUnknown_8456BE4[r6]]);
|
|
}
|
|
else
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_8456BBC[gUnknown_8456BE4[r6]]);
|
|
|
|
return (const u16 *)(r5_2 + 2);
|
|
}
|
|
|
|
void sub_811539C(void)
|
|
{
|
|
gUnknown_203B04B = TRUE;
|
|
}
|
|
|
|
static bool8 sub_81153A8(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 != 35)
|
|
{
|
|
gUnknown_203B04A = 0;
|
|
return TRUE;
|
|
}
|
|
if (gUnknown_203B04A == *((u8 *)a1 + 1) + 1)
|
|
return FALSE;
|
|
gUnknown_203B04A = *((u8 *)a1 + 1) + 1;
|
|
return TRUE;
|
|
}
|
|
|
|
static bool8 sub_81153E4(u16 a0, const u16 *a1)
|
|
{
|
|
if (a0 != 35)
|
|
return TRUE;
|
|
if (*((u8 *)a1 + 1) == 32 && gUnknown_203B04B == 0)
|
|
return FALSE;
|
|
gUnknown_203B04B = 0;
|
|
return TRUE;
|
|
}
|
|
|
|
static u16 *sub_8115410(u16 *a0, const u16 *a1)
|
|
{
|
|
u8 *r3;
|
|
a0 = sub_8113DE0(36, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
r3 = (u8 *)a0 + 2;
|
|
r3[0] = *((const u8 *)a1 + 2);
|
|
r3[1] = *((const u8 *)a1 + 3);
|
|
if (r3[0] == 7 || r3[0] == 8)
|
|
gUnknown_203B048 = 2;
|
|
else
|
|
gUnknown_203B048 = 1;
|
|
return (u16 *)(r3 + 2);
|
|
}
|
|
|
|
static const u16 *sub_8115460(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(36, a0);
|
|
const u8 *r5 = (const u8 *)r4 + 2;
|
|
QuestLog_AutoGetSpeciesName(r4[0], gStringVar1, 0);
|
|
if (r5[1] != 0xFF)
|
|
GetMapNameGeneric(gStringVar2, r5[1]);
|
|
if (r5[0] == 7)
|
|
{
|
|
if (r5[1] == 0x58)
|
|
StringCopy(gStringVar3, gQuestLogString_Home);
|
|
else
|
|
StringCopy(gStringVar3, gUnknown_8418C1B);
|
|
}
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_8456C20[r5[0]]);
|
|
return (const u16 *)(r5 + 2);
|
|
}
|
|
|
|
static u16 *sub_81154DC(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(37, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[2];
|
|
a0[1] = a1[3];
|
|
a0[2] = *((const u32 *)a1) >> 16;
|
|
a0[3] = *((const u32 *)a1);
|
|
*((u8 *)a0 + 8) = *((const u8 *)a1 + 8);
|
|
*((u8 *)a0 + 9) = 1;
|
|
return a0 + 5;
|
|
}
|
|
|
|
static const u16 *sub_8115518(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(37, a0);
|
|
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, gUnknown_841A7DD);
|
|
else
|
|
{
|
|
ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A810);
|
|
}
|
|
return (const u16 *)(r7 + 2);
|
|
}
|
|
|
|
static u16 *sub_81155A4(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(38, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[2];
|
|
a0[1] = a1[3];
|
|
a0[2] = *((const u32 *)a1) >> 16;
|
|
a0[3] = *((const u32 *)a1);
|
|
*((u8 *)a0 + 8) = *((const u8 *)a1 + 8);
|
|
*((u8 *)a0 + 9) = *((const u8 *)a1 + 9);
|
|
return a0 + 5;
|
|
}
|
|
|
|
static const u16 *sub_81155E0(const u16 *a0) {
|
|
const u16 *r5 = sub_8113E88(38, a0);
|
|
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, gUnknown_841A8D4);
|
|
else
|
|
{
|
|
ConvertIntToDecimalStringN(gStringVar2, r5[1], STR_CONV_MODE_LEFT_ALIGN, 3);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar2);
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar3, gUnknown_841A8DD);
|
|
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3);
|
|
}
|
|
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A858);
|
|
}
|
|
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, gUnknown_841A896);
|
|
}
|
|
return (const u16 *)(r7 + 2);
|
|
}
|
|
|
|
static u16 *sub_81156D8(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(40, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
*((u8 *)a0 + 2) = *((const u8 *)a1 + 2);
|
|
return a0 + 2;
|
|
}
|
|
|
|
static const u16 *sub_8115700(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(40, a0);
|
|
const u8 *r5 = (const u8 *)r4 + 2;
|
|
GetMapNameGeneric(gStringVar1, r5[0]);
|
|
StringCopy(gStringVar2, ItemId_GetName(r4[0]));
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841B03F);
|
|
return (const u16 *)(r5 + 2);
|
|
}
|
|
|
|
static const u16 gUnknown_8456C50[] = {
|
|
0x0891,
|
|
0x0892,
|
|
0x0893,
|
|
0x0894,
|
|
0x0895,
|
|
0x0896,
|
|
0x0897,
|
|
0x0898,
|
|
0x0899,
|
|
0x089a,
|
|
0x089b,
|
|
0x089c,
|
|
0x089d,
|
|
0x089e,
|
|
0x089f,
|
|
0x08a0,
|
|
0x08a1
|
|
};
|
|
|
|
void sub_8115748(u16 a0)
|
|
{
|
|
s32 i;
|
|
if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
|
|
return;
|
|
for (i = 0; i < 17; i++)
|
|
{
|
|
if (a0 == gUnknown_8456C50[i])
|
|
{
|
|
if (!FlagGet(a0))
|
|
{
|
|
gUnknown_203B049 = TRUE;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_203B049 += 0;
|
|
gUnknown_203B049 = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_8115798(void)
|
|
{
|
|
u16 sp0;
|
|
if (gUnknown_203ADFA != 2 && gUnknown_203ADFA != 3)
|
|
{
|
|
if (gUnknown_203B049)
|
|
{
|
|
sp0 = gMapHeader.regionMapSectionId;
|
|
sub_8113550(42, &sp0);
|
|
gUnknown_203B049 = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
static u16 *sub_81157DC(u16 *a0, const u16 *a1)
|
|
{
|
|
a0 = sub_8113DE0(42, a0);
|
|
if (a0 == NULL)
|
|
return NULL;
|
|
a0[0] = a1[0];
|
|
return a0 + 1;
|
|
}
|
|
|
|
static const u16 *sub_8115800(const u16 *a0)
|
|
{
|
|
const u16 *r4 = sub_8113E88(42, a0);
|
|
GetMapNameGeneric(gStringVar1, r4[0]);
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_841B064);
|
|
return r4 + 1;
|
|
}
|
|
|
|
void sub_8115834(u8 *a0)
|
|
{
|
|
s32 i;
|
|
if (*a0++ == EXT_CTRL_CODE_BEGIN && *a0++ == EXT_CTRL_CODE_JPN)
|
|
{
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
if (*a0 == EXT_CTRL_CODE_BEGIN)
|
|
break;
|
|
a0++;
|
|
}
|
|
*a0++ = EXT_CTRL_CODE_BEGIN;
|
|
*a0++ = EXT_CTRL_CODE_ENG;
|
|
*a0++ = EOS;
|
|
}
|
|
}
|