More quest log doccing

This commit is contained in:
PikalaxALT
2020-04-06 20:43:53 -04:00
parent 0394317ae4
commit a7d74b1779
6 changed files with 106 additions and 129 deletions
-30
View File
@@ -544,42 +544,12 @@ struct QuestLogNPCData
u32 movementType:8; u32 movementType:8;
}; };
struct UnkStruct_203B024
{
u16 unk_00;
u16 unk_02;
u16 unk_04[14];
};
union QuestLogScene
{
u8 allocation[32];
u16 ident;
};
typedef union QuestLogScene QuestLogScene;
// This name is a complete guess and may change.
#define BERRY_TREES_COUNT 128 #define BERRY_TREES_COUNT 128
#define FLAGS_COUNT 288 // 300 #define FLAGS_COUNT 288 // 300
#define VARS_COUNT 256 #define VARS_COUNT 256
#define MAIL_COUNT (PARTY_SIZE + 10) #define MAIL_COUNT (PARTY_SIZE + 10)
#define PC_MAIL_NUM(i) (PARTY_SIZE + (i)) #define PC_MAIL_NUM(i) (PARTY_SIZE + (i))
// Declare here so that it can be recursively referenced.
union QuestLogMovement;
// Define here
union QuestLogMovement
{
u16 ident_raw;
struct {
u16 ident:12;
u16 flags:4;
} ident_struct;
};
struct QuestLogObjectEvent struct QuestLogObjectEvent
{ {
/*0x00*/ u8 active:1; /*0x00*/ u8 active:1;
+3 -3
View File
@@ -18,7 +18,7 @@ struct QuestLogEntry
struct UnkStruct_203B044 struct UnkStruct_203B044
{ {
u8 unk_0; u8 id;
u8 unk_1; u8 unk_1;
u16 unk_2; u16 unk_2;
}; };
@@ -34,7 +34,7 @@ extern u16 sQuestLogCursor;
void sub_8112720(u8); void sub_8112720(u8);
void SetQuestLogEvent(u16, const u16 *); void SetQuestLogEvent(u16, const u16 *);
void sub_811539C(void); void SetQLPlayedTheSlots(void);
void QuestLog_RecordEnteredMap(u16); void QuestLog_RecordEnteredMap(u16);
u8 sub_8112CAC(void); u8 sub_8112CAC(void);
bool8 QuestLog_SchedulePlaybackCB(void (*func)(void)); bool8 QuestLog_SchedulePlaybackCB(void (*func)(void));
@@ -47,7 +47,7 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId);
void SaveQuestLogData(void); void SaveQuestLogData(void);
void QuestLog_CutRecording(void); void QuestLog_CutRecording(void);
u8 sub_8112CAC(void); u8 sub_8112CAC(void);
void sub_81138F8(void); void ResetDeferredLinkEvent(void);
void FinishRecordingQuestLogScene(void); void FinishRecordingQuestLogScene(void);
void sub_81139BC(void); void sub_81139BC(void);
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx); void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
+1 -1
View File
@@ -952,7 +952,7 @@ static void CB2_EndRematchBattle(void)
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
SetBattledTrainerFlag(); SetBattledTrainerFlag();
sub_810CDE8(); sub_810CDE8();
sub_81138F8(); ResetDeferredLinkEvent();
} }
} }
+20 -20
View File
@@ -65,8 +65,8 @@ struct UnkStruct_203AE94
u8 playingEvent:2; u8 playingEvent:2;
u8 sceneEndMode:2; u8 sceneEndMode:2;
u8 cursor; u8 cursor;
u8 unk_2; u8 timer;
u8 unk_3; u8 overlapTimer;
}; };
struct UnkStruct_300201C struct UnkStruct_300201C
@@ -124,8 +124,8 @@ static void QuestLog_AdvancePlayhead(void);
static void QuestLog_StartFinalScene(void); static void QuestLog_StartFinalScene(void);
static void Task_RunPlaybackCB(u8); static void Task_RunPlaybackCB(u8);
static void QuestLog_PlayCurrentEvent(void); static void QuestLog_PlayCurrentEvent(void);
static void sub_8111B80(void); static void HandleShowQuestLogMessage(void);
static u8 sub_8111BD4(void); static u8 GetQuestLogTextDisplayDuration(void);
static void DrawQuestLogSceneDescription(void); static void DrawQuestLogSceneDescription(void);
static void sub_8111D90(u8); static void sub_8111D90(u8);
static void QuestLog_CloseTextWindow(void); static void QuestLog_CloseTextWindow(void);
@@ -138,7 +138,7 @@ static void Task_WaitAtEndOfQuestLog(u8);
static void Task_EndQuestLog(u8); static void Task_EndQuestLog(u8);
static bool8 sub_81121D8(u8); static bool8 sub_81121D8(u8);
static void sub_811229C(void); static void sub_811229C(void);
static void sub_8112888(u8); static void TogglePlaybackStateForOverworldLock(u8);
static void SetUpQuestLogEntry(u8, struct QuestLogEntry *, u16); static void SetUpQuestLogEntry(u8, struct QuestLogEntry *, u16);
static bool8 sub_8112CEC(void); static bool8 sub_8112CEC(void);
static bool8 RecordHeadAtEndOfEntry(void); static bool8 RecordHeadAtEndOfEntry(void);
@@ -200,7 +200,7 @@ void ResetQuestLog(void)
sEventRecordingPointer = NULL; sEventRecordingPointer = NULL;
gUnknown_203AE04 = NULL; gUnknown_203AE04 = NULL;
sub_8113BD8(); sub_8113BD8();
sub_81138F8(); ResetDeferredLinkEvent();
} }
static void DestroySav1QuestLogEntry(u8 a0) static void DestroySav1QuestLogEntry(u8 a0)
@@ -894,49 +894,49 @@ static void QuestLog_PlayCurrentEvent(void)
{ {
if (sQuestLogCurrentScene.playbackSubstate == 1) if (sQuestLogCurrentScene.playbackSubstate == 1)
{ {
if (--sQuestLogCurrentScene.unk_2 != 0) if (--sQuestLogCurrentScene.timer != 0)
return; return;
sQuestLogCurrentScene.playbackSubstate = 0; sQuestLogCurrentScene.playbackSubstate = 0;
sQuestLogCurrentScene.playingEvent = 1; sQuestLogCurrentScene.playingEvent = 1;
sub_8112888(2); TogglePlaybackStateForOverworldLock(2);
} }
if (sQuestLogCurrentScene.playingEvent == 1) if (sQuestLogCurrentScene.playingEvent == 1)
{ {
if (++sQuestLogCurrentScene.unk_3 > 15) if (++sQuestLogCurrentScene.overlapTimer > 15)
{ {
QuestLog_CloseTextWindow(); QuestLog_CloseTextWindow();
sQuestLogCurrentScene.playingEvent = 0; sQuestLogCurrentScene.playingEvent = 0;
sQuestLogCurrentScene.unk_3 = 0; sQuestLogCurrentScene.overlapTimer = 0;
} }
} }
if (sQuestLogCurrentScene.cursor < NELEMS(gUnknown_203AE0C)) if (sQuestLogCurrentScene.cursor < NELEMS(gUnknown_203AE0C))
{ {
if (sub_8113B44(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1) if (sub_8113B44(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1)
sub_8111B80(); HandleShowQuestLogMessage();
else if (sub_8113AE8(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1) else if (sub_8113AE8(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1)
sub_8111B80(); HandleShowQuestLogMessage();
} }
} }
static void sub_8111B80(void) static void HandleShowQuestLogMessage(void)
{ {
if (sQuestLogCurrentScene.playbackSubstate == 0) if (sQuestLogCurrentScene.playbackSubstate == 0)
{ {
sQuestLogCurrentScene.playbackSubstate = 1; sQuestLogCurrentScene.playbackSubstate = 1;
sQuestLogCurrentScene.playingEvent = 0; sQuestLogCurrentScene.playingEvent = 0;
sQuestLogCurrentScene.unk_3 = 0; sQuestLogCurrentScene.overlapTimer = 0;
sQuestLogCurrentScene.unk_2 = sub_8111BD4(); sQuestLogCurrentScene.timer = GetQuestLogTextDisplayDuration();
if (gUnknown_203B044.unk_2 == 0) if (gUnknown_203B044.unk_2 == 0)
sQuestLogCurrentScene.cursor++; sQuestLogCurrentScene.cursor++;
if (sQuestLogCurrentScene.cursor > 32) if (sQuestLogCurrentScene.cursor > 32)
return; return;
DrawQuestLogSceneDescription(); DrawQuestLogSceneDescription();
} }
sub_8112888(1); TogglePlaybackStateForOverworldLock(1); // lock
} }
static u8 sub_8111BD4(void) static u8 GetQuestLogTextDisplayDuration(void)
{ {
u16 i; u16 i;
u16 count = 0; u16 count = 0;
@@ -1435,17 +1435,17 @@ void sub_81127F8(struct FieldInput * a0)
} }
} }
static void sub_8112888(u8 a0) static void TogglePlaybackStateForOverworldLock(u8 a0)
{ {
switch (a0) switch (a0)
{ {
case 1: case 1:
if (gQuestLogPlaybackState == 1) if (gQuestLogPlaybackState == 1)
gQuestLogPlaybackState = 3; gQuestLogPlaybackState = 3; // Message visible, overworld locked
break; break;
case 2: case 2:
if (gQuestLogPlaybackState == 3) if (gQuestLogPlaybackState == 3)
gQuestLogPlaybackState = 1; gQuestLogPlaybackState = 1; // Overworld unlocked
break; break;
} }
} }
+81 -74
View File
@@ -20,21 +20,27 @@
#include "constants/items.h" #include "constants/items.h"
#include "constants/region_map_sections.h" #include "constants/region_map_sections.h"
static EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0}; struct DeferredLinkEvent
{
u16 id;
u16 ALIGNED(4) data[14];
};
static EWRAM_DATA struct DeferredLinkEvent sDeferredEvent = {0};
EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0};
static EWRAM_DATA u8 gUnknown_203B048 = 0; static EWRAM_DATA u8 sEventShouldNotRecordSteps = 0;
static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE; static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE;
static EWRAM_DATA u8 gUnknown_203B04A = 0; static EWRAM_DATA u8 sLastDepartedMap = 0;
static EWRAM_DATA bool8 gUnknown_203B04B = FALSE; static EWRAM_DATA bool8 sPlayedTheSlots = FALSE;
static bool8 InQuestLogDisabledLocation(void); static bool8 InQuestLogDisabledLocation(void);
static bool8 sub_8113778(u16, const u16 *); static bool8 ShouldRegisterEvent_HandlePartyActions(u16, const u16 *);
static bool8 sub_81137E4(u16, const u16 *); static bool8 ShouldRegisterEvent_HandleBeatStoryTrainer(u16, const u16 *);
static u16 *sub_8113828(u16, const u16 *); static u16 *ShouldRegisterEvent(u16, const u16 *);
static bool8 TrySetLinkQuestLogEvent(u16, const u16 *); static bool8 TrySetLinkQuestLogEvent(u16, const u16 *);
static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *); static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *);
static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *); static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *);
static void sub_8113B94(u16); static void SetQuestLogEventToActive(u16);
static u16 *TryRecordEvent41(u16 *, u16); static u16 *TryRecordEvent41(u16 *, u16);
static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *); static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *);
static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *); static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *);
@@ -113,8 +119,8 @@ static const u16 *BufferQuestLogText_SoldItem(const u16 *);
static const u16 *BufferQuestLogText_ObtainedItem(const u16 *); static const u16 *BufferQuestLogText_ObtainedItem(const u16 *);
static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *); static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *);
static bool8 IsSpeciesFromSpecialEncounter(u16); static bool8 IsSpeciesFromSpecialEncounter(u16);
static bool8 sub_81153A8(u16, const u16 *); static bool8 ShouldRegisterEvent_HandleDeparted(u16, const u16 *);
static bool8 sub_81153E4(u16, const u16 *); static bool8 ShouldRegisterEvent_HandleGameCorner(u16, const u16 *);
static void BufferLinkPartnersName(u8 *); static void BufferLinkPartnersName(u8 *);
static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = { static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = {
@@ -167,7 +173,7 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
{ {
u16 *r1; u16 *r1;
if (eventId == QL_EVENT_DEPARTED && gUnknown_203B048 == 2) if (eventId == QL_EVENT_DEPARTED && sEventShouldNotRecordSteps == 2)
{ {
sub_811381C(); sub_811381C();
return; return;
@@ -197,17 +203,17 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
if (IsQuestLogEventWithSpecialEncounterSpecies(eventId, eventData) == TRUE) if (IsQuestLogEventWithSpecialEncounterSpecies(eventId, eventData) == TRUE)
return; return;
if (sub_81153E4(eventId, eventData) == FALSE) if (ShouldRegisterEvent_HandleGameCorner(eventId, eventData) == FALSE)
return; return;
if (gQuestLogPlaybackState == 0) if (gQuestLogPlaybackState == 0)
{ {
if (sub_8113778(eventId, eventData) == TRUE) if (ShouldRegisterEvent_HandlePartyActions(eventId, eventData) == TRUE)
return; return;
if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL) if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL)
{ {
if (sub_81153A8(eventId, eventData) == FALSE) if (ShouldRegisterEvent_HandleDeparted(eventId, eventData) == FALSE)
return; return;
StartRecordingQuestLogEntry(eventId); StartRecordingQuestLogEntry(eventId);
} }
@@ -215,7 +221,7 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
else if (eventId == QL_EVENT_OBTAINED_ITEM) else if (eventId == QL_EVENT_OBTAINED_ITEM)
return; return;
sub_8113B94(eventId); SetQuestLogEventToActive(eventId);
if (eventId == QL_EVENT_DEFEATED_WILD_MON) if (eventId == QL_EVENT_DEFEATED_WILD_MON)
{ {
if (gUnknown_203AE04 == NULL) if (gUnknown_203AE04 == NULL)
@@ -238,13 +244,13 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
if (r1 == NULL) if (r1 == NULL)
{ {
FinishRecordingQuestLogScene(); FinishRecordingQuestLogScene();
r1 = sub_8113828(eventId, eventData); r1 = ShouldRegisterEvent(eventId, eventData);
if (r1 == NULL) if (r1 == NULL)
return; return;
} }
sEventRecordingPointer = r1; sEventRecordingPointer = r1;
if (gUnknown_203B048 == 0) if (sEventShouldNotRecordSteps == 0)
return; return;
FinishRecordingQuestLogScene(); FinishRecordingQuestLogScene();
} }
@@ -300,14 +306,14 @@ bool8 QuestLog_ShouldEndSceneOnMapChange(void)
return FALSE; return FALSE;
} }
static bool8 sub_8113778(u16 eventId, const u16 *eventData) static bool8 ShouldRegisterEvent_HandlePartyActions(u16 eventId, const u16 *eventData)
{ {
if (eventId == QL_EVENT_USED_FIELD_MOVE || eventId == QL_EVENT_USED_PKMN_CENTER) if (eventId == QL_EVENT_USED_FIELD_MOVE || eventId == QL_EVENT_USED_PKMN_CENTER)
return TRUE; return TRUE;
if (!FlagGet(FLAG_SYS_GAME_CLEAR)) if (!FlagGet(FLAG_SYS_GAME_CLEAR))
{ {
if (eventId == QL_EVENT_SWITCHED_PARTY_ORDER || eventId == QL_EVENT_DEFEATED_WILD_MON || sub_81137E4(eventId, eventData) == TRUE) if (eventId == QL_EVENT_SWITCHED_PARTY_ORDER || eventId == QL_EVENT_DEFEATED_WILD_MON || ShouldRegisterEvent_HandleBeatStoryTrainer(eventId, eventData) == TRUE)
return TRUE; return TRUE;
} }
@@ -329,7 +335,7 @@ static bool8 sub_8113778(u16 eventId, const u16 *eventData)
return FALSE; return FALSE;
} }
static bool8 sub_81137E4(u16 eventId, const u16 *eventData) static bool8 ShouldRegisterEvent_HandleBeatStoryTrainer(u16 eventId, const u16 *eventData)
{ {
if (eventId == QL_EVENT_DEFEATED_TRAINER) if (eventId == QL_EVENT_DEFEATED_TRAINER)
{ {
@@ -346,19 +352,19 @@ static bool8 sub_81137E4(u16 eventId, const u16 *eventData)
void sub_811381C(void) void sub_811381C(void)
{ {
gUnknown_203B048 = 0; sEventShouldNotRecordSteps = 0;
} }
static u16 *sub_8113828(u16 eventId, const u16 *eventData) static u16 *ShouldRegisterEvent(u16 eventId, const u16 *eventData)
{ {
if (sub_8113778(eventId, eventData) == TRUE) if (ShouldRegisterEvent_HandlePartyActions(eventId, eventData) == TRUE)
return NULL; return NULL;
if (sub_81153A8(eventId, eventData) == FALSE) if (ShouldRegisterEvent_HandleDeparted(eventId, eventData) == FALSE)
return NULL; return NULL;
StartRecordingQuestLogEntry(eventId); StartRecordingQuestLogEntry(eventId);
sub_8113B94(eventId); SetQuestLogEventToActive(eventId);
if (eventId == QL_EVENT_DEFEATED_WILD_MON) if (eventId == QL_EVENT_DEFEATED_WILD_MON)
gUnknown_203AE04 = sEventRecordingPointer; gUnknown_203AE04 = sEventRecordingPointer;
@@ -373,34 +379,34 @@ static bool8 TrySetLinkQuestLogEvent(u16 eventId, const u16 *eventData)
if (!IS_LINK_QL_EVENT(eventId)) if (!IS_LINK_QL_EVENT(eventId))
return FALSE; return FALSE;
sub_81138F8(); ResetDeferredLinkEvent();
gUnknown_203B024.unk_00 = eventId; sDeferredEvent.id = eventId;
if (eventId != QL_EVENT_USED_UNION_ROOM && eventId != QL_EVENT_USED_UNION_ROOM_CHAT) if (eventId != QL_EVENT_USED_UNION_ROOM && eventId != QL_EVENT_USED_UNION_ROOM_CHAT)
{ {
if (eventId == QL_EVENT_LINK_TRADED || eventId == QL_EVENT_LINK_TRADED_UNION) if (eventId == QL_EVENT_LINK_TRADED || eventId == QL_EVENT_LINK_TRADED_UNION)
memcpy(gUnknown_203B024.unk_04, eventData, 12); memcpy(sDeferredEvent.data, eventData, 12);
else else
memcpy(gUnknown_203B024.unk_04, eventData, 24); memcpy(sDeferredEvent.data, eventData, 24);
} }
return TRUE; return TRUE;
} }
void sub_81138F8(void) void ResetDeferredLinkEvent(void)
{ {
gUnknown_203B024 = (struct UnkStruct_203B024){}; sDeferredEvent = (struct DeferredLinkEvent){};
} }
void QuestLog_StartRecordingInputsAfterDeferredEvent(void) void QuestLog_StartRecordingInputsAfterDeferredEvent(void)
{ {
if (gUnknown_203B024.unk_00 != QL_EVENT_0) if (sDeferredEvent.id != QL_EVENT_0)
{ {
u16 *resp; u16 *resp;
gUnknown_203B04A = 0; sLastDepartedMap = 0;
StartRecordingQuestLogEntry(gUnknown_203B024.unk_00); StartRecordingQuestLogEntry(sDeferredEvent.id);
resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04); resp = sQuestLogStorageCBs[sDeferredEvent.id](sEventRecordingPointer, sDeferredEvent.data);
sEventRecordingPointer = resp; sEventRecordingPointer = resp;
sub_81138F8(); ResetDeferredLinkEvent();
} }
} }
@@ -412,30 +418,30 @@ static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData)
&& eventId != QL_EVENT_DEFEATED_CHAMPION) && eventId != QL_EVENT_DEFEATED_CHAMPION)
return FALSE; return FALSE;
sub_81138F8(); ResetDeferredLinkEvent();
if (gQuestLogPlaybackState != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE) if (gQuestLogPlaybackState != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || ShouldRegisterEvent_HandleBeatStoryTrainer(eventId, eventData) != TRUE)
{ {
gUnknown_203B024.unk_00 = eventId; sDeferredEvent.id = eventId;
memcpy(gUnknown_203B024.unk_04, eventData, 8); memcpy(sDeferredEvent.data, eventData, 8);
} }
return TRUE; return TRUE;
} }
void sub_81139BC(void) void sub_81139BC(void)
{ {
if (gUnknown_203B024.unk_00 != QL_EVENT_0) if (sDeferredEvent.id != QL_EVENT_0)
{ {
u16 *resp; u16 *resp;
if (gQuestLogPlaybackState == 0) if (gQuestLogPlaybackState == 0)
{ {
gUnknown_203B04A = 0; sLastDepartedMap = 0;
StartRecordingQuestLogEntry(gUnknown_203B024.unk_00); StartRecordingQuestLogEntry(sDeferredEvent.id);
} }
sub_8113B94(gUnknown_203B024.unk_00); SetQuestLogEventToActive(sDeferredEvent.id);
resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04); resp = sQuestLogStorageCBs[sDeferredEvent.id](sEventRecordingPointer, sDeferredEvent.data);
sEventRecordingPointer = resp; sEventRecordingPointer = resp;
TryRecordEvent41_IncCursor(1); TryRecordEvent41_IncCursor(1);
sub_81138F8(); ResetDeferredLinkEvent();
FinishRecordingQuestLogScene(); FinishRecordingQuestLogScene();
} }
} }
@@ -571,9 +577,9 @@ void sub_8113ABC(const u16 *a0)
{ {
const u8 *r2 = (const u8 *)(a0 + 2); const u8 *r2 = (const u8 *)(a0 + 2);
if ((a0[0] & 0xFFF) != QL_EVENT_DEPARTED) if ((a0[0] & 0xFFF) != QL_EVENT_DEPARTED)
gUnknown_203B04A = 0; sLastDepartedMap = 0;
else else
gUnknown_203B04A = r2[1] + 1; sLastDepartedMap = r2[1] + 1;
} }
bool8 sub_8113AE8(const u16 *a0) bool8 sub_8113AE8(const u16 *a0)
@@ -588,7 +594,7 @@ bool8 sub_8113AE8(const u16 *a0)
return FALSE; return FALSE;
sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0); sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0);
gUnknown_203B044.unk_0 = a0[0]; gUnknown_203B044.id = a0[0];
gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12; gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12;
if (gUnknown_203B044.unk_1 != 0) if (gUnknown_203B044.unk_1 != 0)
gUnknown_203B044.unk_2 = 1; gUnknown_203B044.unk_2 = 1;
@@ -600,7 +606,7 @@ bool8 sub_8113B44(const u16 *a0)
if (gUnknown_203B044.unk_2 == 0) if (gUnknown_203B044.unk_2 == 0)
return FALSE; return FALSE;
sQuestLogEventTextBufferCBs[gUnknown_203B044.unk_0](a0); sQuestLogEventTextBufferCBs[gUnknown_203B044.id](a0);
gUnknown_203B044.unk_2++; gUnknown_203B044.unk_2++;
if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1) if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1)
ResetUnk203B044(); ResetUnk203B044();
@@ -612,11 +618,11 @@ void ResetUnk203B044(void)
gUnknown_203B044 = (struct UnkStruct_203B044){}; gUnknown_203B044 = (struct UnkStruct_203B044){};
} }
static void sub_8113B94(u16 eventId) static void SetQuestLogEventToActive(u16 eventId)
{ {
if (gUnknown_203B044.unk_0 != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor) if (gUnknown_203B044.id != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor)
{ {
gUnknown_203B044.unk_0 = eventId; gUnknown_203B044.id = eventId;
gUnknown_203B044.unk_1 = 0; gUnknown_203B044.unk_1 = 0;
gUnknown_203B044.unk_2 = sQuestLogCursor; gUnknown_203B044.unk_2 = sQuestLogCursor;
} }
@@ -627,8 +633,8 @@ static void sub_8113B94(u16 eventId)
void sub_8113BD8(void) void sub_8113BD8(void)
{ {
sNewlyEnteredMap = FALSE; sNewlyEnteredMap = FALSE;
gUnknown_203B04A = 0; sLastDepartedMap = 0;
gUnknown_203B04B = FALSE; sPlayedTheSlots = FALSE;
} }
u16 *TryRecordEvent39_NoParams(u16 *a0) u16 *TryRecordEvent39_NoParams(u16 *a0)
@@ -838,7 +844,7 @@ static u16 *BufferQuestLogData_UsedItem(u16 *a0, const u16 *eventData)
r2[2] = eventData[3]; r2[2] = eventData[3];
if (eventData[0] == ITEM_ESCAPE_ROPE) if (eventData[0] == ITEM_ESCAPE_ROPE)
gUnknown_203B048 = 2; sEventShouldNotRecordSteps = 2;
return r2 + 3; return r2 + 3;
} }
@@ -1015,7 +1021,7 @@ static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *eventData)
static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData) static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData)
{ {
u16 *r4 = a0; u16 *r4 = a0;
if (gUnknown_203B044.unk_0 == QL_EVENT_USED_PKMN_CENTER && gUnknown_203B044.unk_1 != 0) if (gUnknown_203B044.id == QL_EVENT_USED_PKMN_CENTER && gUnknown_203B044.unk_1 != 0)
return r4; return r4;
if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_USED_PKMN_CENTER])) if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_USED_PKMN_CENTER]))
@@ -1492,7 +1498,7 @@ u16 *BufferQuestLogData_DefeatedTrainer_(u16 eventId, u16 *a1, const u16 *a2)
static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *a0, const u16 *eventData) static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *a0, const u16 *eventData)
{ {
gUnknown_203B048 = 1; sEventShouldNotRecordSteps = 1;
return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_GYM_LEADER, a0, eventData); return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_GYM_LEADER, a0, eventData);
} }
@@ -1602,7 +1608,7 @@ static bool8 IsSpeciesFromSpecialEncounter(u16 species)
static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *a0, const u16 *eventData) static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *a0, const u16 *eventData)
{ {
gUnknown_203B048 = 1; sEventShouldNotRecordSteps = 1;
return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_E4_MEMBER, a0, eventData); return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_E4_MEMBER, a0, eventData);
} }
@@ -1624,12 +1630,12 @@ static u16 *BufferQuestLogData_DefeatedChampion(u16 *a0, const u16 *eventData)
{ {
if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION])) if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION]))
return NULL; return NULL;
a0[0] = 0x2021; a0[0] = QL_EVENT_DEFEATED_CHAMPION | (2 << 12);
a0[1] = sQuestLogCursor; a0[1] = sQuestLogCursor;
a0[2] = eventData[1]; a0[2] = eventData[1];
a0[3] = eventData[2]; a0[3] = eventData[2];
*((u8 *)a0 + 8) = *((const u8 *)eventData + 6); *((u8 *)a0 + 8) = *((const u8 *)eventData + 6);
gUnknown_203B048 = 1; sEventShouldNotRecordSteps = 1;
return a0 + 5; return a0 + 5;
} }
@@ -1666,7 +1672,7 @@ static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *a0)
static u16 *BufferQuestLogData_DefeatedTrainer(u16 *a0, const u16 *eventData) static u16 *BufferQuestLogData_DefeatedTrainer(u16 *a0, const u16 *eventData)
{ {
gUnknown_203B048 = 1; sEventShouldNotRecordSteps = 1;
return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_TRAINER, a0, eventData); return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_TRAINER, a0, eventData);
} }
@@ -1850,7 +1856,7 @@ static u16 *BufferQuestLogData_DepartedLocation(u16 *a0, const u16 *eventData)
return NULL; return NULL;
*((u8 *)r2 + 0) = *((const u8 *)eventData + 0); *((u8 *)r2 + 0) = *((const u8 *)eventData + 0);
if ((*((u8 *)r2 + 1) = *((const u8 *)eventData + 1)) == QL_LOCATION_SAFARI_ZONE) if ((*((u8 *)r2 + 1) = *((const u8 *)eventData + 1)) == QL_LOCATION_SAFARI_ZONE)
gUnknown_203B048 = 1; sEventShouldNotRecordSteps = 1;
return r2 + 1; return r2 + 1;
} }
@@ -1883,33 +1889,34 @@ static const u16 *BufferQuestLogText_DepartedLocation(const u16 *eventData)
return (const u16 *)(r5_2 + 2); return (const u16 *)(r5_2 + 2);
} }
void sub_811539C(void) void SetQLPlayedTheSlots(void)
{ {
gUnknown_203B04B = TRUE; sPlayedTheSlots = TRUE;
} }
static bool8 sub_81153A8(u16 eventId, const u16 *eventData) static bool8 ShouldRegisterEvent_HandleDeparted(u16 eventId, const u16 *eventData)
{ {
if (eventId != QL_EVENT_DEPARTED) if (eventId != QL_EVENT_DEPARTED)
{ {
gUnknown_203B04A = 0; sLastDepartedMap = 0;
return TRUE; return TRUE;
} }
if (gUnknown_203B04A == *((u8 *)eventData + 1) + 1) if (sLastDepartedMap == *((u8 *)eventData + 1) + 1)
return FALSE; return FALSE;
gUnknown_203B04A = *((u8 *)eventData + 1) + 1; sLastDepartedMap = *((u8 *)eventData + 1) + 1;
return TRUE; return TRUE;
} }
static bool8 sub_81153E4(u16 eventId, const u16 *eventData) static bool8 ShouldRegisterEvent_HandleGameCorner(u16 eventId, const u16 *eventData)
{ {
if (eventId != QL_EVENT_DEPARTED) if (eventId != QL_EVENT_DEPARTED)
return TRUE; return TRUE;
if (*((u8 *)eventData + 1) == 32 && !gUnknown_203B04B) // Bug: should be QL_LOCATION_GAME_CORNER + 1
if (*((u8 *)eventData + 1) == QL_LOCATION_GAME_CORNER && !sPlayedTheSlots)
return FALSE; return FALSE;
gUnknown_203B04B = FALSE; sPlayedTheSlots = FALSE;
return TRUE; return TRUE;
} }
@@ -1924,9 +1931,9 @@ static u16 *BufferQuestLogData_UsedFieldMove(u16 *a0, const u16 *eventData)
r3[0] = *((const u8 *)eventData + 2); r3[0] = *((const u8 *)eventData + 2);
r3[1] = *((const u8 *)eventData + 3); r3[1] = *((const u8 *)eventData + 3);
if (r3[0] == FIELD_MOVE_TELEPORT || r3[0] == FIELD_MOVE_DIG) if (r3[0] == FIELD_MOVE_TELEPORT || r3[0] == FIELD_MOVE_DIG)
gUnknown_203B048 = 2; sEventShouldNotRecordSteps = 2;
else else
gUnknown_203B048 = 1; sEventShouldNotRecordSteps = 1;
return (u16 *)(r3 + 2); return (u16 *)(r3 + 2);
} }
+1 -1
View File
@@ -814,7 +814,7 @@ static void MainTask_SlotsGameLoop(u8 taskId)
} }
break; break;
case 2: case 2:
sub_811539C(); SetQLPlayedTheSlots();
sub_81409B4(); sub_81409B4();
sub_8140148(); sub_8140148();
sSlotMachineState->field_06 = 0; sSlotMachineState->field_06 = 0;