diff options
Diffstat (limited to 'src')
46 files changed, 3567 insertions, 3519 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c index 1132b5725..af387bb08 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1382,7 +1382,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_GreenSpike, 0x0080, ANIM_TAG_GREEN_SPIKE}, {gBattleAnimSpriteGfx_CircleOfLight, 0x0800, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, {gBattleAnimSpriteGfx_GlowyRedOrb, 0x0020, ANIM_TAG_GLOWY_BLUE_ORB}, - {gBattleAnimSpriteGfx_Pokeblock, 0x0080, ANIM_TAG_POKEBLOCK}, + {gBattleAnimSpriteGfx_SafariBait, 0x0080, ANIM_TAG_SAFARI_BAIT}, {gBattleAnimSpriteGfx_WhiteFeather, 0x0400, ANIM_TAG_WHITE_FEATHER}, {gBattleAnimSpriteGfx_Sparkle6, 0x0080, ANIM_TAG_SPARKLE_6}, {gBattleAnimSpriteGfx_Splash, 0x0800, ANIM_TAG_SPLASH}, @@ -1675,7 +1675,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_GreenSpike, ANIM_TAG_GREEN_SPIKE}, {gBattleAnimSpritePal_WhiteCircleOfLight, ANIM_TAG_WHITE_CIRCLE_OF_LIGHT}, {gBattleAnimSpritePal_GlowyBlueOrb, ANIM_TAG_GLOWY_BLUE_ORB}, - {gBattleAnimSpritePal_Pokeblock, ANIM_TAG_POKEBLOCK}, + {gBattleAnimSpritePal_SafariBait, ANIM_TAG_SAFARI_BAIT}, {gBattleAnimSpritePal_WhiteFeather, ANIM_TAG_WHITE_FEATHER}, {gBattleAnimSpritePal_Sparkle6, ANIM_TAG_SPARKLE_6}, {gBattleAnimSpritePal_Splash, ANIM_TAG_SPLASH}, diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 621ee9039..296e670bd 100644 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -375,10 +375,10 @@ static const u16 sBallOpenFadeColors[] = RGB(4, 0, 0), }; -const struct SpriteTemplate gPokeblockSpriteTemplate = +const struct SpriteTemplate gSafariBaitSpriteTemplate = { - .tileTag = ANIM_TAG_POKEBLOCK, - .paletteTag = ANIM_TAG_POKEBLOCK, + .tileTag = ANIM_TAG_SAFARI_BAIT, + .paletteTag = ANIM_TAG_SAFARI_BAIT, .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, @@ -2205,20 +2205,20 @@ static void sub_80F1A80(struct Sprite *sprite) } } -void AnimTask_LoadPokeblockGfx(u8 taskId) +void AnimTask_LoadBaitGfx(u8 taskId) { u8 paletteIndex; - LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_POKEBLOCK - ANIM_SPRITES_START]); - LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_POKEBLOCK - ANIM_SPRITES_START]); - paletteIndex = IndexOfSpritePaletteTag(ANIM_TAG_POKEBLOCK); + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]); + paletteIndex = IndexOfSpritePaletteTag(ANIM_TAG_SAFARI_BAIT); DestroyAnimVisualTask(taskId); } -void AnimTask_FreePokeblockGfx(u8 taskId) +void AnimTask_FreeBaitGfx(u8 taskId) { - FreeSpriteTilesByTag(ANIM_TAG_POKEBLOCK); - FreeSpritePaletteByTag(ANIM_TAG_POKEBLOCK); + FreeSpriteTilesByTag(ANIM_TAG_SAFARI_BAIT); + FreeSpritePaletteByTag(ANIM_TAG_SAFARI_BAIT); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index e15d76deb..d2f8a1377 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -171,7 +171,7 @@ static void HandleInputChooseAction(void) BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_BALL, 0); break; case 1: - BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_POKEBLOCK, 0); + BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_BAIT, 0); break; case 2: BtlController_EmitTwoReturnValues(1, B_ACTION_SAFARI_GO_NEAR, 0); diff --git a/src/battle_main.c b/src/battle_main.c index d2735086f..572dda574 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -569,7 +569,7 @@ static void (*const sTurnActionsFuncsTable[])(void) = [B_ACTION_RUN] = HandleAction_Run, [B_ACTION_SAFARI_WATCH_CAREFULLY] = HandleAction_WatchesCarefully, [B_ACTION_SAFARI_BALL] = HandleAction_SafariZoneBallThrow, - [B_ACTION_SAFARI_POKEBLOCK] = HandleAction_ThrowBait, + [B_ACTION_SAFARI_BAIT] = HandleAction_ThrowBait, [B_ACTION_SAFARI_GO_NEAR] = HandleAction_ThrowRock, [B_ACTION_SAFARI_RUN] = HandleAction_SafariZoneRun, [B_ACTION_OLDMAN_THROW] = HandleAction_OldManBallThrow, @@ -3260,7 +3260,7 @@ static void HandleTurnActionSelectionState(void) case B_ACTION_SAFARI_BALL: ++gBattleCommunication[gActiveBattler]; break; - case B_ACTION_SAFARI_POKEBLOCK: + case B_ACTION_SAFARI_BAIT: case B_ACTION_SAFARI_GO_NEAR: ++gBattleCommunication[gActiveBattler]; break; diff --git a/src/battle_message.c b/src/battle_message.c index e17d3241b..55667de7d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -514,380 +514,380 @@ const u8 gUnknown_83FDD64[] = _("OAK: Hm! Excellent!\pIf you win, you earn prize const u8 gUnknown_83FDDEB[] = _("OAK: Hm…\nHow disappointing…\pIf you win, you earn prize money,\nand your POKéMON grow.\pBut if you lose, {B_PLAYER_NAME}, you end\nup paying prize money…\pHowever, since you had no warning\nthis time, I'll pay for you.\pBut things won't be this way once\nyou step outside these doors.\pThat's why you must strengthen your\nPOKéMON by battling wild POKéMON.\p"); const u8 *const gBattleStringsTable[] = { - gUnknown_83FB219, - gUnknown_83FB265, - gUnknown_83FB28E, - gUnknown_83FB2A4, - gUnknown_83FB2B6, - gUnknown_83FB2D1, - gUnknown_83FB2FC, - gUnknown_83FB31F, - gUnknown_83FB32E, - gUnknown_83FB343, - gUnknown_83FD1B8, - gUnknown_83FB36B, - gUnknown_83FB37F, - gUnknown_83FCBA5, - gUnknown_83FB394, - gUnknown_83FB3EA, - gUnknown_83FB400, - gUnknown_83FB40D, - gUnknown_83FB41A, - gUnknown_83FB433, - gUnknown_83FB451, - gUnknown_83FB508, - gUnknown_83FB545, - gUnknown_83FB555, - gUnknown_83FB565, - gUnknown_83FB57C, - gUnknown_83FB592, - gUnknown_83FB5A8, - gUnknown_83FB5BC, - gUnknown_83FB5CD, - gUnknown_83FB5E2, - gUnknown_83FB5F8, - gUnknown_83FB610, - gUnknown_83FB626, - gUnknown_83FB641, - gUnknown_83FB650, - gUnknown_83FB663, - gUnknown_83FB692, - gUnknown_83FB6A7, - gUnknown_83FB6BF, - gUnknown_83FB6D3, - gUnknown_83FB6E5, - gUnknown_83FB6F7, - gUnknown_83FB70F, - gUnknown_83FB73A, - gUnknown_83FB76A, - gUnknown_83FB78A, - gUnknown_83FB7A3, - gUnknown_83FB7BF, - gUnknown_83FB7D5, - gUnknown_83FB7EE, - gUnknown_83FB806, - gUnknown_83FB826, - gUnknown_83FB844, - gUnknown_83FB854, - gUnknown_83FB871, - gUnknown_83FB885, - gUnknown_83FB89D, - gUnknown_83FB8AE, - gUnknown_83FB8C5, - gUnknown_83FB8E0, - gUnknown_83FB8F3, - gUnknown_83FB914, - gUnknown_83FB921, - gUnknown_83FB935, - gUnknown_83FB946, - gUnknown_83FB97F, - gUnknown_83FB9B8, - gUnknown_83FB9D9, - gUnknown_83FB9FF, - gUnknown_83FBA2F, - gUnknown_83FBA41, - gUnknown_83FBA5E, - gUnknown_83FBA79, - gUnknown_83FBA8E, - gUnknown_83FBAA3, - gUnknown_83FBAB2, - gUnknown_83FBAC3, - gUnknown_83FBAF3, - gUnknown_83FBB11, - gUnknown_83FBB4C, - gUnknown_83FBB62, - gUnknown_83FBB71, - gUnknown_83FBB83, - gUnknown_83FBB99, - gBattleText_MistShroud, - gUnknown_83FBBD0, - gBattleText_GetPumped, - gUnknown_83FBBFF, - gUnknown_83FBC16, - gUnknown_83FBC2B, - gUnknown_83FBC4C, - gUnknown_83FBC74, - gUnknown_83FBC83, - gUnknown_83FBC99, - gUnknown_83FBCBE, - gUnknown_83FBCD1, - gUnknown_83FBCDD, - gUnknown_83FBCFC, - gUnknown_83FBD16, - gUnknown_83FBD2B, - gUnknown_83FBD43, - gUnknown_83FBD53, - gUnknown_83FBD74, - gUnknown_83FBD86, - gUnknown_83FBDA3, - gUnknown_83FBDC4, - gUnknown_83FBDE2, - gUnknown_83FBE00, - gUnknown_83FBE16, - gUnknown_83FBE2B, - gUnknown_83FBE4E, - gUnknown_83FBE61, - gUnknown_83FBE73, - gUnknown_83FBE8B, - gUnknown_83FBEA1, - gUnknown_83FBEBE, - gUnknown_83FBEE2, - gUnknown_83FBEFA, - gUnknown_83FBF0C, - gUnknown_83FBF23, - gUnknown_83FC687, - gUnknown_83FBF39, - gUnknown_83FBF51, - gUnknown_83FBF63, - gUnknown_83FBF76, - gUnknown_83FBF89, - gUnknown_83FBF99, - gUnknown_83FBFBF, - gUnknown_83FBFD3, - gUnknown_83FBFEA, - gUnknown_83FBFFC, - gUnknown_83FC011, - gUnknown_83FC02B, - gUnknown_83FC048, - gUnknown_83FC072, - gUnknown_83FC090, - gUnknown_83FC0C6, - gUnknown_83FC0DC, - gUnknown_83FC0EE, - gUnknown_83FC10C, - gUnknown_83FC11E, - gUnknown_83FC132, - gUnknown_83FC140, - gUnknown_83FC168, - gUnknown_83FC185, - gUnknown_83FC19D, - gUnknown_83FC1B1, - gUnknown_83FC1C6, - gUnknown_83FC1DB, - gUnknown_83FC1F1, - gUnknown_83FC224, - gUnknown_83FC231, - gUnknown_83FC254, - gUnknown_83FC26D, - gUnknown_83FC28A, - gUnknown_83FC670, - gUnknown_83FC2AA, - gUnknown_83FC69D, - gUnknown_83FC2C7, - gUnknown_83FC2E3, - gUnknown_83FC6D6, - gUnknown_83FC2FA, - gUnknown_83FC312, - gUnknown_83FC377, - gUnknown_83FC38A, - gUnknown_83FC39A, - gUnknown_83FC3AF, - gUnknown_83FC3C5, - gUnknown_83FC3EB, - gUnknown_83FC40E, - gUnknown_83FC421, - gUnknown_83FC439, - gUnknown_83FC461, - gUnknown_83FC6F8, - gUnknown_83FC483, - gUnknown_83FC4AB, - gUnknown_83FC4D6, - gUnknown_83FC4F0, - gUnknown_83FC518, - gUnknown_83FC53D, - gUnknown_83FC715, - gUnknown_83FC72B, - gUnknown_83FC745, - gUnknown_83FC75D, - gUnknown_83FC780, - gUnknown_83FC7B6, - gUnknown_83FC7D3, - gUnknown_83FC7EF, - gUnknown_83FC809, - gUnknown_83FC825, - gUnknown_83FC841, - gUnknown_83FC860, - gUnknown_83FC87B, - gUnknown_83FC895, - gUnknown_83FC8B1, - gUnknown_83FC8C2, - gUnknown_83FCB41, - gBattleText_Rose, - gUnknown_83FCB50, - gUnknown_83FCB59, - gUnknown_83FCB5F, - gBattleText_UnknownString3, - gUnknown_83FCB8F, - gUnknown_83FCB9A, - gUnknown_83FCBE4, - gUnknown_83FCBF4, - gUnknown_83FCC07, - gUnknown_83FCC33, - gUnknown_83FCC5B, - gUnknown_83FCC74, - sText_GotAwaySafely, - gUnknown_83FCCD2, - gUnknown_83FCDB3, - gUnknown_83FCDE2, - gUnknown_83FCDF1, - gUnknown_83FCDF2, - gUnknown_83FCE08, - gUnknown_83FCE17, - gUnknown_83FCE38, - gUnknown_83FCE50, - gUnknown_83FCE64, - gUnknown_83FCE78, - gUnknown_83FCE90, - gUnknown_83FCEA8, - gUnknown_83FCEBA, - gUnknown_83FCECE, - gUnknown_83FCEE3, - gUnknown_83FCEFB, - gUnknown_83FCF14, - gUnknown_83FCF2C, - gUnknown_83FCF40, - gUnknown_83FCF54, - gUnknown_83FCF6C, - gUnknown_83FCF7E, - gUnknown_83FCFA0, - gUnknown_83FCFC2, - gUnknown_83FCFE4, - gUnknown_83FD006, - gUnknown_83FD022, - gUnknown_83FD048, - gUnknown_83FD068, - gUnknown_83FD077, - gUnknown_83FD0A7, - gUnknown_83FD0CA, - sText_PlayerUsedItem, - sText_OldManUsedItem, - sText_TrainerBlockedBall, - sText_DontBeAThief, - sText_ItDodgedBall, - sText_YouMissedPkmn, - sText_PkmnBrokeFree, - sText_ItAppearedCaught, - sText_AarghAlmostHadIt, - sText_ShootSoClose, - sText_GotchaPkmnCaught, - sText_GotchaPkmnCaught2, - sText_GiveNicknameCaptured, - sText_PkmnSentToPC, - gUnknown_83FD82B, - gUnknown_83FD850, - gUnknown_83FD85F, - gUnknown_83FB525, - gUnknown_83FD0F1, - gUnknown_83FD111, - gUnknown_83FD124, - gUnknown_83FD135, - gUnknown_83FD14B, - gUnknown_83FD15A, - gUnknown_83FD16A, - gUnknown_83FD186, - gUnknown_83FD1DF, - gUnknown_83FD1FA, - gUnknown_83FD218, - gUnknown_83FD232, - gUnknown_83FD23F, - gUnknown_83FB218, - gUnknown_83FB218, - gUnknown_83FD24D, - gUnknown_83FD8B9, - gUnknown_83FD8D2, - gUnknown_83FD8E8, - gUnknown_83FD901, - gUnknown_83FD917, - gUnknown_83FD937, - gUnknown_83FD95C, - gUnknown_83FD999, - gUnknown_83FD9B2, - gUnknown_83FD9CC, - gUnknown_83FD9E9, - gUnknown_83FDA0B, - gUnknown_83FDA33, - gUnknown_83FDA4C, - gUnknown_83FC8D5, - gUnknown_83FC8ED, - gUnknown_83FC913, - gUnknown_83FC935, - gUnknown_83FC979, - gUnknown_83FC993, - gUnknown_83FC9AA, - gUnknown_83FC9C7, - gUnknown_83FC9E5, - gUnknown_83FCA03, - gUnknown_83FC554, - gUnknown_83FC576, - gUnknown_83FBAD2, - gUnknown_83FBAE5, - gUnknown_83FCC39, - gUnknown_83FC591, - sText_PlayerDefeatedLinkTrainerTrainer1, - gUnknown_83FC5A2, - gUnknown_83FC5CC, - gUnknown_83FC5E8, - gUnknown_83FCB75, - gUnknown_83FC5F6, - gUnknown_83FC79D, - gUnknown_83FBB2F, - gUnknown_83FB282, - gUnknown_83FB283, - gUnknown_83FC955, - gUnknown_83FB3AF, - gUnknown_83FDAB1, - gUnknown_83FCA13, - gUnknown_83FC208, - gUnknown_83FC60C, - gUnknown_83FB359, - gUnknown_83FCCA0, - gUnknown_83FCCBB, - gUnknown_83FC631, - gUnknown_83FCA49, - gUnknown_83FD97A, - sText_Trainer1UsedItem, - gUnknown_83FD876, - gUnknown_83FB3D3, - gUnknown_83FCA71, - gUnknown_83FCA8E, - gUnknown_83FB67B, - gUnknown_83FCBC5, - gUnknown_83FC900, - gUnknown_83FBC62, - gUnknown_83FB997, - gUnknown_83FB95E, - gUnknown_83FC646, - gUnknown_83FCAAA, - gUnknown_83FCAD1, - gUnknown_83FB534, - gUnknown_83FC337, - gUnknown_83FC347, - gUnknown_83FC357, - gUnknown_83FC65A, - gUnknown_83FCAEF, - gUnknown_83FDD64, - gUnknown_83FDDEB, - gUnknown_83FB484, - gUnknown_83FB4BE, - Text_MonSentToBoxInSomeonesPC, - Text_MonSentToBoxInBillsPC, - Text_MonSentToBoxSomeonesBoxFull, - Text_MonSentToBoxBillsBoxFull, - sText_PokedudeUsedItem, - gUnknown_83FDA4D, - gUnknown_83FDA7A, - gUnknown_83FDA8C, - gUnknown_83FB21C, - gUnknown_83FB262, - gUnknown_83FB4F7, - gUnknown_83FCB0C, - gUnknown_83FCB26, - gUnknown_83FD322, - gUnknown_83FD34D, - gUnknown_83FB21F, - gUnknown_83FB232, - gUnknown_83FB235, - gUnknown_83FB248 + [STRINGID_TRAINER1LOSETEXT - 12] = gUnknown_83FB219, + [STRINGID_PKMNGAINEDEXP - 12] = gUnknown_83FB265, + [STRINGID_PKMNGREWTOLV - 12] = gUnknown_83FB28E, + [STRINGID_PKMNLEARNEDMOVE - 12] = gUnknown_83FB2A4, + [STRINGID_TRYTOLEARNMOVE1 - 12] = gUnknown_83FB2B6, + [STRINGID_TRYTOLEARNMOVE2 - 12] = gUnknown_83FB2D1, + [STRINGID_TRYTOLEARNMOVE3 - 12] = gUnknown_83FB2FC, + [STRINGID_PKMNFORGOTMOVE - 12] = gUnknown_83FB31F, + [STRINGID_STOPLEARNINGMOVE - 12] = gUnknown_83FB32E, + [STRINGID_DIDNOTLEARNMOVE - 12] = gUnknown_83FB343, + [STRINGID_PKMNLEARNEDMOVE2 - 12] = gUnknown_83FD1B8, + [STRINGID_ATTACKMISSED - 12] = gUnknown_83FB36B, + [STRINGID_PKMNPROTECTEDITSELF - 12] = gUnknown_83FB37F, + [STRINGID_STATSWONTINCREASE2 - 12] = gUnknown_83FCBA5, + [STRINGID_AVOIDEDDAMAGE - 12] = gUnknown_83FB394, + [STRINGID_ITDOESNTAFFECT - 12] = gUnknown_83FB3EA, + [STRINGID_ATTACKERFAINTED - 12] = gUnknown_83FB400, + [STRINGID_TARGETFAINTED - 12] = gUnknown_83FB40D, + [STRINGID_PLAYERGOTMONEY - 12] = gUnknown_83FB41A, + [STRINGID_PLAYERWHITEOUT - 12] = gUnknown_83FB433, + [STRINGID_PLAYERWHITEOUT2 - 12] = gUnknown_83FB451, + [STRINGID_PREVENTSESCAPE - 12] = gUnknown_83FB508, + [STRINGID_HITXTIMES - 12] = gUnknown_83FB545, + [STRINGID_PKMNFELLASLEEP - 12] = gUnknown_83FB555, + [STRINGID_PKMNMADESLEEP - 12] = gUnknown_83FB565, + [STRINGID_PKMNALREADYASLEEP - 12] = gUnknown_83FB57C, + [STRINGID_PKMNALREADYASLEEP2 - 12] = gUnknown_83FB592, + [STRINGID_PKMNWASNTAFFECTED - 12] = gUnknown_83FB5A8, + [STRINGID_PKMNWASPOISONED - 12] = gUnknown_83FB5BC, + [STRINGID_PKMNPOISONEDBY - 12] = gUnknown_83FB5CD, + [STRINGID_PKMNHURTBYPOISON - 12] = gUnknown_83FB5E2, + [STRINGID_PKMNALREADYPOISONED - 12] = gUnknown_83FB5F8, + [STRINGID_PKMNBADLYPOISONED - 12] = gUnknown_83FB610, + [STRINGID_PKMNENERGYDRAINED - 12] = gUnknown_83FB626, + [STRINGID_PKMNWASBURNED - 12] = gUnknown_83FB641, + [STRINGID_PKMNBURNEDBY - 12] = gUnknown_83FB650, + [STRINGID_PKMNHURTBYBURN - 12] = gUnknown_83FB663, + [STRINGID_PKMNWASFROZEN - 12] = gUnknown_83FB692, + [STRINGID_PKMNFROZENBY - 12] = gUnknown_83FB6A7, + [STRINGID_PKMNISFROZEN - 12] = gUnknown_83FB6BF, + [STRINGID_PKMNWASDEFROSTED - 12] = gUnknown_83FB6D3, + [STRINGID_PKMNWASDEFROSTED2 - 12] = gUnknown_83FB6E5, + [STRINGID_PKMNWASDEFROSTEDBY - 12] = gUnknown_83FB6F7, + [STRINGID_PKMNWASPARALYZED - 12] = gUnknown_83FB70F, + [STRINGID_PKMNWASPARALYZEDBY - 12] = gUnknown_83FB73A, + [STRINGID_PKMNISPARALYZED - 12] = gUnknown_83FB76A, + [STRINGID_PKMNISALREADYPARALYZED - 12] = gUnknown_83FB78A, + [STRINGID_PKMNHEALEDPARALYSIS - 12] = gUnknown_83FB7A3, + [STRINGID_PKMNDREAMEATEN - 12] = gUnknown_83FB7BF, + [STRINGID_STATSWONTINCREASE - 12] = gUnknown_83FB7D5, + [STRINGID_STATSWONTDECREASE - 12] = gUnknown_83FB7EE, + [STRINGID_TEAMSTOPPEDWORKING - 12] = gUnknown_83FB806, + [STRINGID_FOESTOPPEDWORKING - 12] = gUnknown_83FB826, + [STRINGID_PKMNISCONFUSED - 12] = gUnknown_83FB844, + [STRINGID_PKMNHEALEDCONFUSION - 12] = gUnknown_83FB854, + [STRINGID_PKMNWASCONFUSED - 12] = gUnknown_83FB871, + [STRINGID_PKMNALREADYCONFUSED - 12] = gUnknown_83FB885, + [STRINGID_PKMNFELLINLOVE - 12] = gUnknown_83FB89D, + [STRINGID_PKMNINLOVE - 12] = gUnknown_83FB8AE, + [STRINGID_PKMNIMMOBILIZEDBYLOVE - 12] = gUnknown_83FB8C5, + [STRINGID_PKMNBLOWNAWAY - 12] = gUnknown_83FB8E0, + [STRINGID_PKMNCHANGEDTYPE - 12] = gUnknown_83FB8F3, + [STRINGID_PKMNFLINCHED - 12] = gUnknown_83FB914, + [STRINGID_PKMNREGAINEDHEALTH - 12] = gUnknown_83FB921, + [STRINGID_PKMNHPFULL - 12] = gUnknown_83FB935, + [STRINGID_PKMNRAISEDSPDEF - 12] = gUnknown_83FB946, + [STRINGID_PKMNRAISEDDEF - 12] = gUnknown_83FB97F, + [STRINGID_PKMNCOVEREDBYVEIL - 12] = gUnknown_83FB9B8, + [STRINGID_PKMNUSEDSAFEGUARD - 12] = gUnknown_83FB9D9, + [STRINGID_PKMNSAFEGUARDEXPIRED - 12] = gUnknown_83FB9FF, + [STRINGID_PKMNWENTTOSLEEP - 12] = gUnknown_83FBA2F, + [STRINGID_PKMNSLEPTHEALTHY - 12] = gUnknown_83FBA41, + [STRINGID_PKMNWHIPPEDWHIRLWIND - 12] = gUnknown_83FBA5E, + [STRINGID_PKMNTOOKSUNLIGHT - 12] = gUnknown_83FBA79, + [STRINGID_PKMNLOWEREDHEAD - 12] = gUnknown_83FBA8E, + [STRINGID_PKMNISGLOWING - 12] = gUnknown_83FBAA3, + [STRINGID_PKMNFLEWHIGH - 12] = gUnknown_83FBAB2, + [STRINGID_PKMNDUGHOLE - 12] = gUnknown_83FBAC3, + [STRINGID_PKMNSQUEEZEDBYBIND - 12] = gUnknown_83FBAF3, + [STRINGID_PKMNTRAPPEDINVORTEX - 12] = gUnknown_83FBB11, + [STRINGID_PKMNWRAPPEDBY - 12] = gUnknown_83FBB4C, + [STRINGID_PKMNCLAMPED - 12] = gUnknown_83FBB62, + [STRINGID_PKMNHURTBY - 12] = gUnknown_83FBB71, + [STRINGID_PKMNFREEDFROM - 12] = gUnknown_83FBB83, + [STRINGID_PKMNCRASHED - 12] = gUnknown_83FBB99, + [STRINGID_PKMNSHROUDEDINMIST - 12] = gBattleText_MistShroud, + [STRINGID_PKMNPROTECTEDBYMIST - 12] = gUnknown_83FBBD0, + [STRINGID_PKMNGETTINGPUMPED - 12] = gBattleText_GetPumped, + [STRINGID_PKMNHITWITHRECOIL - 12] = gUnknown_83FBBFF, + [STRINGID_PKMNPROTECTEDITSELF2 - 12] = gUnknown_83FBC16, + [STRINGID_PKMNBUFFETEDBYSANDSTORM - 12] = gUnknown_83FBC2B, + [STRINGID_PKMNPELTEDBYHAIL - 12] = gUnknown_83FBC4C, + [STRINGID_PKMNSEEDED - 12] = gUnknown_83FBC74, + [STRINGID_PKMNEVADEDATTACK - 12] = gUnknown_83FBC83, + [STRINGID_PKMNSAPPEDBYLEECHSEED - 12] = gUnknown_83FBC99, + [STRINGID_PKMNFASTASLEEP - 12] = gUnknown_83FBCBE, + [STRINGID_PKMNWOKEUP - 12] = gUnknown_83FBCD1, + [STRINGID_PKMNUPROARKEPTAWAKE - 12] = gUnknown_83FBCDD, + [STRINGID_PKMNWOKEUPINUPROAR - 12] = gUnknown_83FBCFC, + [STRINGID_PKMNCAUSEDUPROAR - 12] = gUnknown_83FBD16, + [STRINGID_PKMNMAKINGUPROAR - 12] = gUnknown_83FBD2B, + [STRINGID_PKMNCALMEDDOWN - 12] = gUnknown_83FBD43, + [STRINGID_PKMNCANTSLEEPINUPROAR - 12] = gUnknown_83FBD53, + [STRINGID_PKMNSTOCKPILED - 12] = gUnknown_83FBD74, + [STRINGID_PKMNCANTSTOCKPILE - 12] = gUnknown_83FBD86, + [STRINGID_PKMNCANTSLEEPINUPROAR2 - 12] = gUnknown_83FBDA3, + [STRINGID_UPROARKEPTPKMNAWAKE - 12] = gUnknown_83FBDC4, + [STRINGID_PKMNSTAYEDAWAKEUSING - 12] = gUnknown_83FBDE2, + [STRINGID_PKMNSTORINGENERGY - 12] = gUnknown_83FBE00, + [STRINGID_PKMNUNLEASHEDENERGY - 12] = gUnknown_83FBE16, + [STRINGID_PKMNFATIGUECONFUSION - 12] = gUnknown_83FBE2B, + [STRINGID_PKMNPICKEDUPITEM - 12] = gUnknown_83FBE4E, + [STRINGID_PKMNUNAFFECTED - 12] = gUnknown_83FBE61, + [STRINGID_PKMNTRANSFORMEDINTO - 12] = gUnknown_83FBE73, + [STRINGID_PKMNMADESUBSTITUTE - 12] = gUnknown_83FBE8B, + [STRINGID_PKMNHASSUBSTITUTE - 12] = gUnknown_83FBEA1, + [STRINGID_SUBSTITUTEDAMAGED - 12] = gUnknown_83FBEBE, + [STRINGID_PKMNSUBSTITUTEFADED - 12] = gUnknown_83FBEE2, + [STRINGID_PKMNMUSTRECHARGE - 12] = gUnknown_83FBEFA, + [STRINGID_PKMNRAGEBUILDING - 12] = gUnknown_83FBF0C, + [STRINGID_PKMNMOVEWASDISABLED - 12] = gUnknown_83FBF23, + [STRINGID_PKMNMOVEISDISABLED - 12] = gUnknown_83FC687, + [STRINGID_PKMNMOVEDISABLEDNOMORE - 12] = gUnknown_83FBF39, + [STRINGID_PKMNGOTENCORE - 12] = gUnknown_83FBF51, + [STRINGID_PKMNENCOREENDED - 12] = gUnknown_83FBF63, + [STRINGID_PKMNTOOKAIM - 12] = gUnknown_83FBF76, + [STRINGID_PKMNSKETCHEDMOVE - 12] = gUnknown_83FBF89, + [STRINGID_PKMNTRYINGTOTAKEFOE - 12] = gUnknown_83FBF99, + [STRINGID_PKMNTOOKFOE - 12] = gUnknown_83FBFBF, + [STRINGID_PKMNREDUCEDPP - 12] = gUnknown_83FBFD3, + [STRINGID_PKMNSTOLEITEM - 12] = gUnknown_83FBFEA, + [STRINGID_TARGETCANTESCAPENOW - 12] = gUnknown_83FBFFC, + [STRINGID_PKMNFELLINTONIGHTMARE - 12] = gUnknown_83FC011, + [STRINGID_PKMNLOCKEDINNIGHTMARE - 12] = gUnknown_83FC02B, + [STRINGID_PKMNLAIDCURSE - 12] = gUnknown_83FC048, + [STRINGID_PKMNAFFLICTEDBYCURSE - 12] = gUnknown_83FC072, + [STRINGID_SPIKESSCATTERED - 12] = gUnknown_83FC090, + [STRINGID_PKMNHURTBYSPIKES - 12] = gUnknown_83FC0C6, + [STRINGID_PKMNIDENTIFIED - 12] = gUnknown_83FC0DC, + [STRINGID_PKMNPERISHCOUNTFELL - 12] = gUnknown_83FC0EE, + [STRINGID_PKMNBRACEDITSELF - 12] = gUnknown_83FC10C, + [STRINGID_PKMNENDUREDHIT - 12] = gUnknown_83FC11E, + [STRINGID_MAGNITUDESTRENGTH - 12] = gUnknown_83FC132, + [STRINGID_PKMNCUTHPMAXEDATTACK - 12] = gUnknown_83FC140, + [STRINGID_PKMNCOPIEDSTATCHANGES - 12] = gUnknown_83FC168, + [STRINGID_PKMNGOTFREE - 12] = gUnknown_83FC185, + [STRINGID_PKMNSHEDLEECHSEED - 12] = gUnknown_83FC19D, + [STRINGID_PKMNBLEWAWAYSPIKES - 12] = gUnknown_83FC1B1, + [STRINGID_PKMNFLEDFROMBATTLE - 12] = gUnknown_83FC1C6, + [STRINGID_PKMNFORESAWATTACK - 12] = gUnknown_83FC1DB, + [STRINGID_PKMNTOOKATTACK - 12] = gUnknown_83FC1F1, + [STRINGID_PKMNATTACK - 12] = gUnknown_83FC224, + [STRINGID_PKMNCENTERATTENTION - 12] = gUnknown_83FC231, + [STRINGID_PKMNCHARGINGPOWER - 12] = gUnknown_83FC254, + [STRINGID_NATUREPOWERTURNEDINTO - 12] = gUnknown_83FC26D, + [STRINGID_PKMNSTATUSNORMAL - 12] = gUnknown_83FC28A, + [STRINGID_PKMNHASNOMOVESLEFT - 12] = gUnknown_83FC670, + [STRINGID_PKMNSUBJECTEDTOTORMENT - 12] = gUnknown_83FC2AA, + [STRINGID_PKMNCANTUSEMOVETORMENT - 12] = gUnknown_83FC69D, + [STRINGID_PKMNTIGHTENINGFOCUS - 12] = gUnknown_83FC2C7, + [STRINGID_PKMNFELLFORTAUNT - 12] = gUnknown_83FC2E3, + [STRINGID_PKMNCANTUSEMOVETAUNT - 12] = gUnknown_83FC6D6, + [STRINGID_PKMNREADYTOHELP - 12] = gUnknown_83FC2FA, + [STRINGID_PKMNSWITCHEDITEMS - 12] = gUnknown_83FC312, + [STRINGID_PKMNCOPIEDFOE - 12] = gUnknown_83FC377, + [STRINGID_PKMNMADEWISH - 12] = gUnknown_83FC38A, + [STRINGID_PKMNWISHCAMETRUE - 12] = gUnknown_83FC39A, + [STRINGID_PKMNPLANTEDROOTS - 12] = gUnknown_83FC3AF, + [STRINGID_PKMNABSORBEDNUTRIENTS - 12] = gUnknown_83FC3C5, + [STRINGID_PKMNANCHOREDITSELF - 12] = gUnknown_83FC3EB, + [STRINGID_PKMNWASMADEDROWSY - 12] = gUnknown_83FC40E, + [STRINGID_PKMNKNOCKEDOFF - 12] = gUnknown_83FC421, + [STRINGID_PKMNSWAPPEDABILITIES - 12] = gUnknown_83FC439, + [STRINGID_PKMNSEALEDOPPONENTMOVE - 12] = gUnknown_83FC461, + [STRINGID_PKMNCANTUSEMOVESEALED - 12] = gUnknown_83FC6F8, + [STRINGID_PKMNWANTSGRUDGE - 12] = gUnknown_83FC483, + [STRINGID_PKMNLOSTPPGRUDGE - 12] = gUnknown_83FC4AB, + [STRINGID_PKMNSHROUDEDITSELF - 12] = gUnknown_83FC4D6, + [STRINGID_PKMNMOVEBOUNCED - 12] = gUnknown_83FC4F0, + [STRINGID_PKMNWAITSFORTARGET - 12] = gUnknown_83FC518, + [STRINGID_PKMNSNATCHEDMOVE - 12] = gUnknown_83FC53D, + [STRINGID_PKMNMADEITRAIN - 12] = gUnknown_83FC715, + [STRINGID_PKMNRAISEDSPEED - 12] = gUnknown_83FC72B, + [STRINGID_PKMNPROTECTEDBY - 12] = gUnknown_83FC745, + [STRINGID_PKMNPREVENTSUSAGE - 12] = gUnknown_83FC75D, + [STRINGID_PKMNRESTOREDHPUSING - 12] = gUnknown_83FC780, + [STRINGID_PKMNCHANGEDTYPEWITH - 12] = gUnknown_83FC7B6, + [STRINGID_PKMNPREVENTSPARALYSISWITH - 12] = gUnknown_83FC7D3, + [STRINGID_PKMNPREVENTSROMANCEWITH - 12] = gUnknown_83FC7EF, + [STRINGID_PKMNPREVENTSPOISONINGWITH - 12] = gUnknown_83FC809, + [STRINGID_PKMNPREVENTSCONFUSIONWITH - 12] = gUnknown_83FC825, + [STRINGID_PKMNRAISEDFIREPOWERWITH - 12] = gUnknown_83FC841, + [STRINGID_PKMNANCHORSITSELFWITH - 12] = gUnknown_83FC860, + [STRINGID_PKMNCUTSATTACKWITH - 12] = gUnknown_83FC87B, + [STRINGID_PKMNPREVENTSSTATLOSSWITH - 12] = gUnknown_83FC895, + [STRINGID_PKMNHURTSWITH - 12] = gUnknown_83FC8B1, + [STRINGID_PKMNTRACED - 12] = gUnknown_83FC8C2, + [STRINGID_STATSHARPLY - 12] = gUnknown_83FCB41, + [STRINGID_STATROSE - 12] = gBattleText_Rose, + [STRINGID_STATHARSHLY - 12] = gUnknown_83FCB50, + [STRINGID_STATFELL - 12] = gUnknown_83FCB59, + [STRINGID_PKMNSSTATCHANGED - 12] = gUnknown_83FCB5F, + [STRINGID_PKMNSSTATCHANGED2 - 12] = gBattleText_UnknownString3, + [STRINGID_PKMNSSTATCHANGED3 - 12] = gUnknown_83FCB8F, + [STRINGID_PKMNSSTATCHANGED4 - 12] = gUnknown_83FCB9A, + [STRINGID_CRITICALHIT - 12] = gUnknown_83FCBE4, + [STRINGID_ONEHITKO - 12] = gUnknown_83FCBF4, + [STRINGID_123POOF - 12] = gUnknown_83FCC07, + [STRINGID_ANDELLIPSIS - 12] = gUnknown_83FCC33, + [STRINGID_NOTVERYEFFECTIVE - 12] = gUnknown_83FCC5B, + [STRINGID_SUPEREFFECTIVE - 12] = gUnknown_83FCC74, + [STRINGID_GOTAWAYSAFELY - 12] = sText_GotAwaySafely, + [STRINGID_WILDPKMNFLED - 12] = gUnknown_83FCCD2, + [STRINGID_NORUNNINGFROMTRAINERS - 12] = gUnknown_83FCDB3, + [STRINGID_CANTESCAPE - 12] = gUnknown_83FCDE2, + [STRINGID_DONTLEAVEBIRCH - 12] = gUnknown_83FCDF1, + [STRINGID_BUTNOTHINGHAPPENED - 12] = gUnknown_83FCDF2, + [STRINGID_BUTITFAILED - 12] = gUnknown_83FCE08, + [STRINGID_ITHURTCONFUSION - 12] = gUnknown_83FCE17, + [STRINGID_MIRRORMOVEFAILED - 12] = gUnknown_83FCE38, + [STRINGID_STARTEDTORAIN - 12] = gUnknown_83FCE50, + [STRINGID_DOWNPOURSTARTED - 12] = gUnknown_83FCE64, + [STRINGID_RAINCONTINUES - 12] = gUnknown_83FCE78, + [STRINGID_DOWNPOURCONTINUES - 12] = gUnknown_83FCE90, + [STRINGID_RAINSTOPPED - 12] = gUnknown_83FCEA8, + [STRINGID_SANDSTORMBREWED - 12] = gUnknown_83FCEBA, + [STRINGID_SANDSTORMRAGES - 12] = gUnknown_83FCECE, + [STRINGID_SANDSTORMSUBSIDED - 12] = gUnknown_83FCEE3, + [STRINGID_SUNLIGHTGOTBRIGHT - 12] = gUnknown_83FCEFB, + [STRINGID_SUNLIGHTSTRONG - 12] = gUnknown_83FCF14, + [STRINGID_SUNLIGHTFADED - 12] = gUnknown_83FCF2C, + [STRINGID_STARTEDHAIL - 12] = gUnknown_83FCF40, + [STRINGID_HAILCONTINUES - 12] = gUnknown_83FCF54, + [STRINGID_HAILSTOPPED - 12] = gUnknown_83FCF6C, + [STRINGID_FAILEDTOSPITUP - 12] = gUnknown_83FCF7E, + [STRINGID_FAILEDTOSWALLOW - 12] = gUnknown_83FCFA0, + [STRINGID_WINDBECAMEHEATWAVE - 12] = gUnknown_83FCFC2, + [STRINGID_STATCHANGESGONE - 12] = gUnknown_83FCFE4, + [STRINGID_COINSSCATTERED - 12] = gUnknown_83FD006, + [STRINGID_TOOWEAKFORSUBSTITUTE - 12] = gUnknown_83FD022, + [STRINGID_SHAREDPAIN - 12] = gUnknown_83FD048, + [STRINGID_BELLCHIMED - 12] = gUnknown_83FD068, + [STRINGID_FAINTINTHREE - 12] = gUnknown_83FD077, + [STRINGID_NOPPLEFT - 12] = gUnknown_83FD0A7, + [STRINGID_BUTNOPPLEFT - 12] = gUnknown_83FD0CA, + [STRINGID_PLAYERUSEDITEM - 12] = sText_PlayerUsedItem, + [STRINGID_OLDMANUSEDITEM - 12] = sText_OldManUsedItem, + [STRINGID_TRAINERBLOCKEDBALL - 12] = sText_TrainerBlockedBall, + [STRINGID_DONTBEATHIEF - 12] = sText_DontBeAThief, + [STRINGID_ITDODGEDBALL - 12] = sText_ItDodgedBall, + [STRINGID_YOUMISSEDPKMN - 12] = sText_YouMissedPkmn, + [STRINGID_PKMNBROKEFREE - 12] = sText_PkmnBrokeFree, + [STRINGID_ITAPPEAREDCAUGHT - 12] = sText_ItAppearedCaught, + [STRINGID_AARGHALMOSTHADIT - 12] = sText_AarghAlmostHadIt, + [STRINGID_SHOOTSOCLOSE - 12] = sText_ShootSoClose, + [STRINGID_GOTCHAPKMNCAUGHT - 12] = sText_GotchaPkmnCaught, + [STRINGID_GOTCHAPKMNCAUGHT2 - 12] = sText_GotchaPkmnCaught2, + [STRINGID_GIVENICKNAMECAPTURED - 12] = sText_GiveNicknameCaptured, + [STRINGID_PKMNSENTTOPC - 12] = sText_PkmnSentToPC, + [STRINGID_PKMNDATAADDEDTODEX - 12] = gUnknown_83FD82B, + [STRINGID_ITISRAINING - 12] = gUnknown_83FD850, + [STRINGID_SANDSTORMISRAGING - 12] = gUnknown_83FD85F, + [STRINGID_CANTESCAPE2 - 12] = gUnknown_83FB525, + [STRINGID_PKMNIGNORESASLEEP - 12] = gUnknown_83FD0F1, + [STRINGID_PKMNIGNOREDORDERS - 12] = gUnknown_83FD111, + [STRINGID_PKMNBEGANTONAP - 12] = gUnknown_83FD124, + [STRINGID_PKMNLOAFING - 12] = gUnknown_83FD135, + [STRINGID_PKMNWONTOBEY - 12] = gUnknown_83FD14B, + [STRINGID_PKMNTURNEDAWAY - 12] = gUnknown_83FD15A, + [STRINGID_PKMNPRETENDNOTNOTICE - 12] = gUnknown_83FD16A, + [STRINGID_ENEMYABOUTTOSWITCHPKMN - 12] = gUnknown_83FD186, + [STRINGID_THREWROCK - 12] = gUnknown_83FD1DF, + [STRINGID_THREWBAIT - 12] = gUnknown_83FD1FA, + [STRINGID_PKMNWATCHINGCAREFULLY - 12] = gUnknown_83FD218, + [STRINGID_PKMNANGRY - 12] = gUnknown_83FD232, + [STRINGID_PKMNEATING - 12] = gUnknown_83FD23F, + [STRINGID_DUMMY288 - 12] = gUnknown_83FB218, + [STRINGID_DUMMY289 - 12] = gUnknown_83FB218, + [STRINGID_OUTOFSAFARIBALLS - 12] = gUnknown_83FD24D, + [STRINGID_PKMNSITEMCUREDPARALYSIS - 12] = gUnknown_83FD8B9, + [STRINGID_PKMNSITEMCUREDPOISON - 12] = gUnknown_83FD8D2, + [STRINGID_PKMNSITEMHEALEDBURN - 12] = gUnknown_83FD8E8, + [STRINGID_PKMNSITEMDEFROSTEDIT - 12] = gUnknown_83FD901, + [STRINGID_PKMNSITEMWOKEIT - 12] = gUnknown_83FD917, + [STRINGID_PKMNSITEMSNAPPEDOUT - 12] = gUnknown_83FD937, + [STRINGID_PKMNSITEMCUREDPROBLEM - 12] = gUnknown_83FD95C, + [STRINGID_PKMNSITEMRESTOREDHEALTH - 12] = gUnknown_83FD999, + [STRINGID_PKMNSITEMRESTOREDPP - 12] = gUnknown_83FD9B2, + [STRINGID_PKMNSITEMRESTOREDSTATUS - 12] = gUnknown_83FD9CC, + [STRINGID_PKMNSITEMRESTOREDHPALITTLE - 12] = gUnknown_83FD9E9, + [STRINGID_ITEMALLOWSONLYYMOVE - 12] = gUnknown_83FDA0B, + [STRINGID_PKMNHUNGONWITHX - 12] = gUnknown_83FDA33, + [STRINGID_EMPTYSTRING3 - 12] = gUnknown_83FDA4C, + [STRINGID_PKMNSXPREVENTSBURNS - 12] = gUnknown_83FC8D5, + [STRINGID_PKMNSXBLOCKSY - 12] = gUnknown_83FC8ED, + [STRINGID_PKMNSXRESTOREDHPALITTLE2 - 12] = gUnknown_83FC913, + [STRINGID_PKMNSXWHIPPEDUPSANDSTORM - 12] = gUnknown_83FC935, + [STRINGID_PKMNSXPREVENTSYLOSS - 12] = gUnknown_83FC979, + [STRINGID_PKMNSXINFATUATEDY - 12] = gUnknown_83FC993, + [STRINGID_PKMNSXMADEYINEFFECTIVE - 12] = gUnknown_83FC9AA, + [STRINGID_PKMNSXCUREDYPROBLEM - 12] = gUnknown_83FC9C7, + [STRINGID_ITSUCKEDLIQUIDOOZE - 12] = gUnknown_83FC9E5, + [STRINGID_PKMNTRANSFORMED - 12] = gUnknown_83FCA03, + [STRINGID_ELECTRICITYWEAKENED - 12] = gUnknown_83FC554, + [STRINGID_FIREWEAKENED - 12] = gUnknown_83FC576, + [STRINGID_PKMNHIDUNDERWATER - 12] = gUnknown_83FBAD2, + [STRINGID_PKMNSPRANGUP - 12] = gUnknown_83FBAE5, + [STRINGID_HMMOVESCANTBEFORGOTTEN - 12] = gUnknown_83FCC39, + [STRINGID_XFOUNDONEY - 12] = gUnknown_83FC591, + [STRINGID_PLAYERDEFEATEDTRAINER1 - 12] = sText_PlayerDefeatedLinkTrainerTrainer1, + [STRINGID_SOOTHINGAROMA - 12] = gUnknown_83FC5A2, + [STRINGID_ITEMSCANTBEUSEDNOW - 12] = gUnknown_83FC5CC, + [STRINGID_FORXCOMMAYZ - 12] = gUnknown_83FC5E8, + [STRINGID_USINGXTHEYOFZN - 12] = gUnknown_83FCB75, + [STRINGID_PKMNUSEDXTOGETPUMPED - 12] = gUnknown_83FC5F6, + [STRINGID_PKMNSXMADEYUSELESS - 12] = gUnknown_83FC79D, + [STRINGID_PKMNTRAPPEDBYSANDTOMB - 12] = gUnknown_83FBB2F, + [STRINGID_EMPTYSTRING4 - 12] = gUnknown_83FB282, + [STRINGID_ABOOSTED - 12] = gUnknown_83FB283, + [STRINGID_PKMNSXINTENSIFIEDSUN - 12] = gUnknown_83FC955, + [STRINGID_PKMNMAKESGROUNDMISS - 12] = gUnknown_83FB3AF, + [STRINGID_YOUTHROWABALLNOWRIGHT - 12] = gUnknown_83FDAB1, + [STRINGID_PKMNSXTOOKATTACK - 12] = gUnknown_83FCA13, + [STRINGID_PKMNCHOSEXASDESTINY - 12] = gUnknown_83FC208, + [STRINGID_PKMNLOSTFOCUS - 12] = gUnknown_83FC60C, + [STRINGID_USENEXTPKMN - 12] = gUnknown_83FB359, + [STRINGID_PKMNFLEDUSINGITS - 12] = gUnknown_83FCCA0, + [STRINGID_PKMNFLEDUSING - 12] = gUnknown_83FCCBB, + [STRINGID_PKMNWASDRAGGEDOUT - 12] = gUnknown_83FC631, + [STRINGID_PREVENTEDFROMWORKING - 12] = gUnknown_83FCA49, + [STRINGID_PKMNSITEMNORMALIZEDSTATUS - 12] = gUnknown_83FD97A, + [STRINGID_TRAINER1USEDITEM - 12] = sText_Trainer1UsedItem, + [STRINGID_BOXISFULL - 12] = gUnknown_83FD876, + [STRINGID_PKMNAVOIDEDATTACK - 12] = gUnknown_83FB3D3, + [STRINGID_PKMNSXMADEITINEFFECTIVE - 12] = gUnknown_83FCA71, + [STRINGID_PKMNSXPREVENTSFLINCHING - 12] = gUnknown_83FCA8E, + [STRINGID_PKMNALREADYHASBURN - 12] = gUnknown_83FB67B, + [STRINGID_STATSWONTDECREASE2 - 12] = gUnknown_83FCBC5, + [STRINGID_PKMNSXBLOCKSY2 - 12] = gUnknown_83FC900, + [STRINGID_PKMNSXWOREOFF - 12] = gUnknown_83FBC62, + [STRINGID_PKMNRAISEDDEFALITTLE - 12] = gUnknown_83FB997, + [STRINGID_PKMNRAISEDSPDEFALITTLE - 12] = gUnknown_83FB95E, + [STRINGID_THEWALLSHATTERED - 12] = gUnknown_83FC646, + [STRINGID_PKMNSXPREVENTSYSZ - 12] = gUnknown_83FCAAA, + [STRINGID_PKMNSXCUREDITSYPROBLEM - 12] = gUnknown_83FCAD1, + [STRINGID_ATTACKERCANTESCAPE - 12] = gUnknown_83FB534, + [STRINGID_PKMNOBTAINEDX - 12] = gUnknown_83FC337, + [STRINGID_PKMNOBTAINEDX2 - 12] = gUnknown_83FC347, + [STRINGID_PKMNOBTAINEDXYOBTAINEDZ - 12] = gUnknown_83FC357, + [STRINGID_BUTNOEFFECT - 12] = gUnknown_83FC65A, + [STRINGID_PKMNSXHADNOEFFECTONY - 12] = gUnknown_83FCAEF, + [STRINGID_OAKPLAYERWON - 12] = gUnknown_83FDD64, + [STRINGID_OAKPLAYERLOST - 12] = gUnknown_83FDDEB, + [STRINGID_PLAYERLOSTAGAINSTENEMYTRAINER - 12] = gUnknown_83FB484, + [STRINGID_PLAYERPAIDPRIZEMONEY - 12] = gUnknown_83FB4BE, + [STRINGID_PKMNTRANSFERREDSOMEONESPC - 12] = Text_MonSentToBoxInSomeonesPC, + [STRINGID_PKMNTRANSFERREDBILLSPC - 12] = Text_MonSentToBoxInBillsPC, + [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = Text_MonSentToBoxSomeonesBoxFull, + [STRINGID_PKMNBOXBILLSPCFULL - 12] = Text_MonSentToBoxBillsBoxFull, + [STRINGID_POKEDUDEUSED - 12] = sText_PokedudeUsedItem, + [STRINGID_POKEFLUTECATCHY - 12] = gUnknown_83FDA4D, + [STRINGID_POKEFLUTE - 12] = gUnknown_83FDA7A, + [STRINGID_MONHEARINGFLUTEAWOKE - 12] = gUnknown_83FDA8C, + [STRINGID_TRAINER2CLASS - 12] = gUnknown_83FB21C, + [STRINGID_TRAINER2NAME - 12] = gUnknown_83FB262, + [STRINGID_PLAYERWHITEDOUT - 12] = gUnknown_83FB4F7, + [STRINGID_MONTOOSCAREDTOMOVE - 12] = gUnknown_83FCB0C, + [STRINGID_GHOSTGETOUTGETOUT - 12] = gUnknown_83FCB26, + [STRINGID_SILPHSCOPEUNVEILED - 12] = gUnknown_83FD322, + [STRINGID_GHOSTWASMAROWAK - 12] = gUnknown_83FD34D, + [STRINGID_TRAINER1MON1COMEBACK - 12] = gUnknown_83FB21F, + [STRINGID_TRAINER1WINTEXT - 12] = gUnknown_83FB232, + [STRINGID_TRAINER1MON2COMEBACK - 12] = gUnknown_83FB235, + [STRINGID_TRAINER1MON1AND2COMEBACK - 12] = gUnknown_83FB248 }; const u16 gMissStringIds[] = { diff --git a/src/battle_setup.c b/src/battle_setup.c index ee923d6c7..0f9ffd655 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -417,7 +417,7 @@ static void CB2_EndWildBattle(void) else { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = sub_807E3EC; + gFieldCallback = FieldCB_SafariZoneRanOutOfBalls; } } @@ -794,13 +794,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) SetMapVarsToTrainer(); return EventScript_TryDoDoubleTrainerBattle; case TRAINER_BATTLE_REMATCH_DOUBLE: - sub_811231C(); + FinishRecordingQuestLogScene(); TrainerBattleLoadArgs(sDoubleBattleParams, data); SetMapVarsToTrainer(); gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); return EventScript_TryDoDoubleRematchBattle; case TRAINER_BATTLE_REMATCH: - sub_811231C(); + FinishRecordingQuestLogScene(); TrainerBattleLoadArgs(sOrdinaryBattleParams, data); SetMapVarsToTrainer(); gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); @@ -952,7 +952,7 @@ static void CB2_EndRematchBattle(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetBattledTrainerFlag(); sub_810CDE8(); - sub_81138F8(); + ResetDeferredLinkEvent(); } } @@ -994,8 +994,7 @@ void PlayTrainerEncounterMusic(void) { u16 music; - if (gQuestLogState != 2 - && gQuestLogState != 3 + if (!QL_IS_PLAYBACK_STATE && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC && sTrainerBattleMode != TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC) { diff --git a/src/diploma.c b/src/diploma.c index 5c653d071..e2e81c113 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -193,7 +193,7 @@ static void Task_DiplomaReturnToOverworld(u8 taskId) DestroyTask(taskId); FreeAllWindowBuffers(); FREE_AND_SET_NULL(gDiploma); - SetMainCallback2(sub_80568FC); + SetMainCallback2(CB2_ReturnToFieldFromDiploma); } static void DiplomaBgInit(void) diff --git a/src/event_data.c b/src/event_data.c index c012a4a59..6cd6f277b 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -179,7 +179,7 @@ u16 *GetVarPointer(u16 idx) return NULL; if (idx < SPECIAL_VARS_START) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: default: @@ -250,7 +250,7 @@ u8 *GetFlagAddr(u16 idx) return NULL; if (idx < SPECIAL_FLAGS_START) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: default: diff --git a/src/event_object_lock.c b/src/event_object_lock.c index aa9a99895..389d16c05 100644 --- a/src/event_object_lock.c +++ b/src/event_object_lock.c @@ -4,6 +4,8 @@ #include "event_object_movement.h" #include "script_movement.h" #include "event_data.h" +#include "constants/maps.h" +#include "constants/event_objects.h" bool8 walkrun_is_standing_still(void) { @@ -13,18 +15,18 @@ bool8 walkrun_is_standing_still(void) return TRUE; } -void sub_8069570(u8 taskId) +void Task_WaitPlayerStopMoving(u8 taskId) { if (walkrun_is_standing_still()) { - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); DestroyTask(taskId); } } -bool8 sub_8069590(void) +bool8 NativeScript_WaitPlayerStopMoving(void) { - if (FuncIsActiveTask(sub_8069570)) + if (FuncIsActiveTask(Task_WaitPlayerStopMoving)) return FALSE; else { @@ -36,16 +38,16 @@ bool8 sub_8069590(void) void ScriptFreezeObjectEvents(void) { FreezeObjectEvents(); - CreateTask(sub_8069570, 80); + CreateTask(Task_WaitPlayerStopMoving, 80); } -void sub_80695CC(u8 taskId) +void Task_WaitPlayerAndTargetNPCStopMoving(u8 taskId) { struct Task * task = &gTasks[taskId]; if (task->data[0] == 0 && walkrun_is_standing_still() == TRUE) { - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); task->data[0] = 1; } @@ -59,9 +61,9 @@ void sub_80695CC(u8 taskId) DestroyTask(taskId); } -bool8 sub_8069648(void) +bool8 NativeScript_WaitPlayerAndTargetNPCStopMoving(void) { - if (FuncIsActiveTask(sub_80695CC)) + if (FuncIsActiveTask(Task_WaitPlayerAndTargetNPCStopMoving)) return FALSE; else { @@ -75,7 +77,7 @@ void LockSelectedObjectEvent(void) u8 taskId; FreezeObjectEventsExceptOne(gSelectedObjectEvent); - taskId = CreateTask(sub_80695CC, 80); + taskId = CreateTask(Task_WaitPlayerAndTargetNPCStopMoving, 80); if (!gObjectEvents[gSelectedObjectEvent].singleMovementActive) { FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]); @@ -85,7 +87,7 @@ void LockSelectedObjectEvent(void) void sub_80696C0(void) { - u8 objectEventId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + u8 objectEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objectEventId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); @@ -96,7 +98,7 @@ void UnionRoom_UnlockPlayerAndChatPartner(void) u8 objectEventId; if (gObjectEvents[gSelectedObjectEvent].active) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSelectedObjectEvent]); - objectEventId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + objectEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objectEventId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 5361d05dc..7f69963a3 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -2805,7 +2805,7 @@ u8 sub_805FC9C(u8 localId, u8 mapNum, u8 mapGroup) return gObjectEvents[objectEventId].trainerType; } -u16 sub_805FCD8(u8 localId, u8 mapNum, u8 mapGroup) +u16 GetObjectEventFlagByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->trainerType; } @@ -5530,7 +5530,7 @@ static void sub_8064544(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->heldMovementFinished = TRUE; if (objectEvent->graphicsId == 0x61) - sub_806DE28(objectEvent); + HandleBoulderFallThroughHole(objectEvent); } } @@ -5550,7 +5550,7 @@ static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct objectEvent->movementActionId = animId; sprite->data[2] = 0; - if (gUnknown_3005E88 == 2) + if (gQuestLogPlaybackState == 2) { sub_81124EC(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, animId); } diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 286f7519a..694ef0392 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -107,7 +107,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) { if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING)) input->pressedStartButton = TRUE; - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + if (!QL_IS_PLAYBACK_STATE) { if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FISHING)) { @@ -123,7 +123,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) } } - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + if (!QL_IS_PLAYBACK_STATE) { if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT)) { @@ -142,7 +142,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) input->checkStandardWildEncounter = TRUE; } - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + if (!QL_IS_PLAYBACK_STATE) { if (heldKeys & DPAD_UP) input->dpadDirection = DIR_NORTH; @@ -650,7 +650,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) { if (InUnionRoom() == TRUE) return FALSE; - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) return FALSE; UpdateHappinessStepCounter(); @@ -836,17 +836,17 @@ static bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 DoWarp(); return TRUE; } - else if (sub_806DB84(metatileBehavior, direction) == TRUE) + else if (IsDirectionalStairWarpMetatileBehavior(metatileBehavior, direction) == TRUE) { delay = 0; if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { - SetPlayerAvatarTransitionFlags(1); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); delay = 12; } StoreInitialPlayerAvatarState(); SetupWarp(&gMapHeader, warpEventId, position); - sub_807E4A0(metatileBehavior, delay); + DoStairWarp(metatileBehavior, delay); return TRUE; } } @@ -921,20 +921,20 @@ static bool8 IsWarpMetatileBehavior(u16 metatileBehavior) return FALSE; } -bool8 sub_806DB84(u16 metatileBehavior, u8 playerDirection) +bool8 IsDirectionalStairWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection) { switch (playerDirection) { case DIR_WEST: - if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior)) return TRUE; - if (MetatileBehavior_IsUnknownWarp6F(metatileBehavior)) + if (MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) return TRUE; break; case DIR_EAST: - if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior)) return TRUE; - if (MetatileBehavior_IsUnknownWarp6E(metatileBehavior)) + if (MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) return TRUE; break; } @@ -1063,18 +1063,17 @@ static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 return NULL; } -void sub_806DE28(struct ObjectEvent * object) +void HandleBoulderFallThroughHole(struct ObjectEvent * object) { if (MapGridGetMetatileBehaviorAt(object->currentCoords.x, object->currentCoords.y) == MB_FALL_WARP) { PlaySE(SE_RU_HYUU); - // w-why?! RemoveObjectEventByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - FlagClear(sub_805FCD8(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup)); + FlagClear(GetObjectEventFlagByLocalIdAndMap(object->localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup)); } } -void sub_806DE70(u16 x, u16 y) +void HandleBoulderActivateVictoryRoadSwitch(u16 x, u16 y) { int i; const struct CoordEvent * events = gMapHeader.events->coordEvents; @@ -1086,7 +1085,7 @@ void sub_806DE70(u16 x, u16 y) { if (events[i].x + 7 == x && events[i].y + 7 == y) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); ScriptContext1_SetupScript(events[i].script); ScriptContext2_Enable(); } diff --git a/src/field_effect.c b/src/field_effect.c index b8269ae46..b89e9c116 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1105,7 +1105,7 @@ void FieldCB_FallWarpExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); ScriptContext2_Enable(); FreezeObjectEvents(); CreateTask(Task_FallWarpFieldEffect, 0); @@ -1409,7 +1409,7 @@ static void FieldCB_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); ScriptContext2_Enable(); FreezeObjectEvents(); CreateTask(Task_EscalatorWarpInFieldEffect, 0); @@ -1819,7 +1819,7 @@ static void FieldCB_LavaridgeGymB1FWarpExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); ScriptContext2_Enable(); gFieldCallback = NULL; CreateTask(Task_LavaridgeGymB1FWarpExit, 0); @@ -2186,7 +2186,7 @@ static void FieldCallback_EscapeRopeExit(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); ScriptContext2_Enable(); FreezeObjectEvents(); gFieldCallback = NULL; @@ -2350,7 +2350,7 @@ static void FieldCallback_TeleportIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); ScriptContext2_Enable(); FreezeObjectEvents(); gFieldCallback = NULL; @@ -2984,7 +2984,7 @@ static void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { u32 FldEff_UseVsSeeker(void) { - if (gQuestLogState == QL_STATE_1) + if (gQuestLogState == QL_STATE_RECORDING) sub_811278C(8, 89); CreateTask(Task_FldEffUseVsSeeker, 0xFF); return 0; diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index bf5ab0ab3..10f21bc0f 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -23,6 +23,7 @@ #include "start_menu.h" #include "constants/songs.h" #include "constants/event_object_movement.h" +#include "constants/event_objects.h" #include "constants/field_weather.h" static void sub_807DF4C(u8 a0); @@ -30,10 +31,10 @@ static void sub_807DFBC(u8 taskId); static void task_map_chg_seq_0807E20C(u8 taskId); static void task_map_chg_seq_0807E2CC(u8 taskId); static void Task_TeleportWarpIn(u8 taskId); -static void sub_807E718(u8 taskId); +static void Task_Teleport2Warp(u8 taskId); static void Task_TeleportWarp(u8 taskId); -static void sub_807E80C(u8 taskId); -static void sub_807E980(u8 taskId); +static void Task_DoorWarp(u8 taskId); +static void Task_StairWarp(u8 taskId); static void sub_807EB64(u16, s16*, s16*); static void sub_807EBBC(u8 a0, s16 *a1, s16 *a2); static void sub_807EAC4(s16, s16, s16*, s16*, s16*); @@ -262,7 +263,7 @@ static void sub_807DE78(bool8 a0) sub_807DF4C(a0); if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE) func = task_map_chg_seq_0807E20C; - else if (MetatileBehavior_IsUnknownWarp6C_to_6F(behavior) == TRUE) + else if (MetatileBehavior_IsDirectionalStairWarp(behavior) == TRUE) { u8 tmp = gUnknown_2031DE0; func = task_map_chg_seq_0807E2CC; @@ -287,7 +288,7 @@ static void sub_807DF4C(bool8 a0) void FieldCB_DefaultWarpExit(void) { Overworld_PlaySpecialMapMusic(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); sub_807DE78(FALSE); ScriptContext2_Enable(); } @@ -295,7 +296,7 @@ void FieldCB_DefaultWarpExit(void) void FieldCB_WarpExitFadeFromBlack(void) { Overworld_PlaySpecialMapMusic(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); sub_807DE78(TRUE); ScriptContext2_Enable(); } @@ -304,7 +305,7 @@ static void FieldCB_TeleportWarpIn(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); - sub_8111CF0(); + QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(); PlaySE(SE_TK_WARPOUT); CreateTask(Task_TeleportWarpIn, 10); ScriptContext2_Enable(); @@ -350,7 +351,7 @@ static void sub_807DFBC(u8 taskId) { PlayerGetDestCoords(&task->data[12], &task->data[13]); sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); task->data[0] = 8; } break; @@ -365,7 +366,7 @@ static void sub_807DFBC(u8 taskId) case 9: if (FieldFadeTransitionBackgroundEffectIsFinished() && walkrun_is_standing_still() && !FieldIsDoorAnimationRunning() && !FuncIsActiveTask(Task_BarnDoorWipe)) { - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); task->data[0] = 4; } break; @@ -374,7 +375,7 @@ static void sub_807DFBC(u8 taskId) if (FieldFadeTransitionBackgroundEffectIsFinished()) { sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); task->data[0] = 2; } break; @@ -382,7 +383,7 @@ static void sub_807DFBC(u8 taskId) if (walkrun_is_standing_still()) { task->data[1] = FieldAnimateDoorClose(*x, *y); - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); task->data[0] = 3; } break; @@ -416,7 +417,7 @@ static void task_map_chg_seq_0807E20C(u8 taskId) if (FieldFadeTransitionBackgroundEffectIsFinished()) { sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], GetWalkNormalMovementAction(GetPlayerFacingDirection())); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], GetWalkNormalMovementAction(GetPlayerFacingDirection())); task->data[0] = 2; } break; @@ -497,7 +498,7 @@ bool8 FieldCB_ReturnToFieldOpenStartMenu(void) return FALSE; } -static void task_mpl_807E3C8(u8 taskId) +static void Task_SafariZoneRanOutOfBalls(u8 taskId) { if (FieldFadeTransitionBackgroundEffectIsFinished() == TRUE) { @@ -507,12 +508,12 @@ static void task_mpl_807E3C8(u8 taskId) } } -void sub_807E3EC(void) +void FieldCB_SafariZoneRanOutOfBalls(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); - CreateTask(task_mpl_807E3C8, 10); + CreateTask(Task_SafariZoneRanOutOfBalls, 10); } static bool32 WaitWarpFadeOutScreen(void) @@ -536,7 +537,7 @@ void DoWarp(void) PlayRainStoppingSoundEffect(); PlaySE(SE_KAIDAN); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); } void DoDiveWarp(void) @@ -546,28 +547,28 @@ void DoDiveWarp(void) WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); } -void sub_807E4A0(u16 metatileBehavior, u16 delay) +void DoStairWarp(u16 metatileBehavior, u16 delay) { - u8 taskId = CreateTask(sub_807E980, 10); + u8 taskId = CreateTask(Task_StairWarp, 10); gTasks[taskId].data[1] = metatileBehavior; gTasks[taskId].data[15] = delay; - sub_807E980(taskId); + Task_StairWarp(taskId); } void DoDoorWarp(void) { ScriptContext2_Enable(); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_807E80C, 10); + CreateTask(Task_DoorWarp, 10); } -void sub_807E500(void) +void DoTeleport2Warp(void) { ScriptContext2_Enable(); - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); gFieldCallback = FieldCB_TeleportWarpIn; } @@ -614,11 +615,11 @@ void sub_807E5C4(void) { ScriptContext2_Enable(); WarpFadeOutScreen(); - CreateTask(sub_807E718, 10); + CreateTask(Task_Teleport2Warp, 10); gFieldCallback = nullsub_60; } -static void sub_807E5EC(u8 taskId) +static void Task_CableClubWarp(u8 taskId) { struct Task * task = &gTasks[taskId]; switch (task->data[0]) @@ -645,10 +646,10 @@ void DoCableClubWarp(void) TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlaySE(SE_KAIDAN); - CreateTask(sub_807E5EC, 10); + CreateTask(Task_CableClubWarp, 10); } -static void sub_807E678(u8 taskId) +static void Task_ReturnFromLinkRoomWarp(u8 taskId) { s16 * data = gTasks[taskId].data; switch (data[0]) @@ -680,10 +681,10 @@ static void sub_807E678(u8 taskId) void ReturnFromLinkRoom(void) { - CreateTask(sub_807E678, 10); + CreateTask(Task_ReturnFromLinkRoomWarp, 10); } -static void sub_807E718(u8 taskId) +static void Task_Teleport2Warp(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->data[0]) @@ -736,7 +737,7 @@ static void Task_TeleportWarp(u8 taskId) } } -static void sub_807E80C(u8 taskId) +static void Task_DoorWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; s16 * xp = &task->data[2]; @@ -753,8 +754,8 @@ static void sub_807E80C(u8 taskId) case 1: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { - ObjectEventClearHeldMovementIfActive(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_UP); + ObjectEventClearHeldMovementIfActive(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_UP); task->data[0] = 2; } break; @@ -762,7 +763,7 @@ static void sub_807E80C(u8 taskId) if (walkrun_is_standing_still()) { task->data[1] = FieldAnimateDoorClose(*xp, *yp - 1); - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0)]); sub_807DCB0(FALSE); task->data[0] = 3; } @@ -778,18 +779,18 @@ static void sub_807E80C(u8 taskId) WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); task->data[0] = 0; - task->func = sub_807E718; + task->func = Task_Teleport2Warp; break; case 5: TryFadeOutOldMapMusic(); PlayRainStoppingSoundEffect(); task->data[0] = 0; - task->func = sub_807E718; + task->func = Task_Teleport2Warp; break; } } -static void sub_807E980(u8 taskId) +static void Task_StairWarp(u8 taskId) { s16 * data = gTasks[taskId].data; struct ObjectEvent *playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; @@ -865,22 +866,22 @@ static void sub_807EB64(u16 a0, s16 *a1, s16 *a2) static void sub_807EBBC(u8 a0, s16 *a1, s16 *a2) { - if (MetatileBehavior_IsUnknownWarp6C(a0)) + if (MetatileBehavior_IsDirectionalUpRightStairWarp(a0)) { *a1 = 16; *a2 = -10; } - else if (MetatileBehavior_IsUnknownWarp6D(a0)) + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(a0)) { *a1 = -17; *a2 = -10; } - else if (MetatileBehavior_IsUnknownWarp6E(a0)) + else if (MetatileBehavior_IsDirectionalDownRightStairWarp(a0)) { *a1 = 17; *a2 = 3; } - else if (MetatileBehavior_IsUnknownWarp6F(a0)) + else if (MetatileBehavior_IsDirectionalDownLeftStairWarp(a0)) { *a1 = -17; *a2 = 3; @@ -927,7 +928,7 @@ static void sub_807ECBC(s16 *a0, s16 *a1, s16 *a2, s16 *a3, s16 *a4) struct Sprite *sprite; PlayerGetDestCoords(&x, &y); behavior = MapGridGetMetatileBehaviorAt(x, y); - if (MetatileBehavior_IsUnknownWarp6E(behavior) || MetatileBehavior_IsUnknownWarp6C(behavior)) + if (MetatileBehavior_IsDirectionalDownRightStairWarp(behavior) || MetatileBehavior_IsDirectionalUpRightStairWarp(behavior)) r1 = 3; else r1 = 4; diff --git a/src/field_message_box.c b/src/field_message_box.c index 1909fd398..bee44f331 100644 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -24,7 +24,7 @@ static void Task_RunFieldMessageBoxPrinter(u8 taskId) switch (task->data[0]) { case 0: - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { gTextFlags.autoScroll = TRUE; TextWindow_LoadTilesStdFrame1(0, 0x200); diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 7e3ba59fe..5a8a3e98a 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -556,7 +556,7 @@ static u8 CheckForPlayerAvatarCollision(u8 direction) x = playerObjEvent->currentCoords.x; y = playerObjEvent->currentCoords.y; - if (sub_806DB84(MapGridGetMetatileBehaviorAt(x, y), direction)) + if (IsDirectionalStairWarpMetatileBehavior(MapGridGetMetatileBehaviorAt(x, y), direction)) return 8; MoveCoords(direction, &x, &y); return CheckForObjectEventCollision(playerObjEvent, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); @@ -673,7 +673,7 @@ static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collis } } -void SetPlayerAvatarTransitionFlags(bool16 flags) +void SetPlayerAvatarTransitionFlags(u16 flags) { gPlayerAvatar.transitionFlags |= flags; DoPlayerAvatarTransition(); @@ -910,7 +910,7 @@ void sub_805C260(void) PlayerSetAnimId(MOVEMENT_ACTION_0x9F, 0); } -void sub_805C270(void) +void HandleEnforcedLookDirectionOnPlayerStopMoving(void) { if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) { @@ -1006,12 +1006,12 @@ static void PlayCollisionSoundIfNotFacingWarp(u8 direction) { if (direction == DIR_WEST) { - if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) || MetatileBehavior_IsUnknownWarp6F(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior) || MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior)) return; } if (direction == DIR_EAST) { - if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) || MetatileBehavior_IsUnknownWarp6E(metatileBehavior)) + if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior) || MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior)) return; } if (direction == DIR_NORTH) @@ -1445,8 +1445,8 @@ static bool8 sub_805CE20(struct Task *task, struct ObjectEvent *playerObject, st { ObjectEventClearHeldMovementIfFinished(playerObject); ObjectEventClearHeldMovementIfFinished(strengthObject); - sub_806DE28(strengthObject); - sub_806DE70(strengthObject->currentCoords.x, strengthObject->currentCoords.y); + HandleBoulderFallThroughHole(strengthObject); + HandleBoulderActivateVictoryRoadSwitch(strengthObject->currentCoords.x, strengthObject->currentCoords.y); gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroyTask(FindTaskIdByFunc(Task_BumpBoulder)); @@ -1598,7 +1598,7 @@ void CreateStopSurfingTask_NoMusicChange(u8 direction) void SeafoamIslandsB4F_CurrentDumpsPlayerOnLand(void) { - if (gUnknown_3005E88 != 1 && gUnknown_3005E88 != 3) + if (gQuestLogPlaybackState != 1 && gQuestLogPlaybackState != 3) { sub_811278C(gUnknown_835B820[DIR_NORTH], 16); CreateStopSurfingTask(DIR_NORTH); diff --git a/src/field_specials.c b/src/field_specials.c index 425528d50..f6cdae90b 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -95,15 +95,15 @@ static u8 *const sStringVarPtrs[] = { void ShowDiploma(void) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); SetMainCallback2(CB2_ShowDiploma); ScriptContext2_Enable(); } void ForcePlayerOntoBike(void) { - if (gPlayerAvatar.flags & 1) - SetPlayerAvatarTransitionFlags(2); + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ON_FOOT) + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_MACH_BIKE); Overworld_SetSavedMusic(MUS_CYCLING); Overworld_ChangeMusicTo(MUS_CYCLING); } @@ -187,7 +187,7 @@ u8 GetLeadMonFriendship(void) void ShowTownMap(void) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); InitRegionMapWithExitCB(REGIONMAP_TYPE_WALL, CB2_ReturnToFieldContinueScriptPlayMapMusic); } @@ -1519,7 +1519,7 @@ static void Task_ListMenuRemoveScrollIndicatorArrowPair(u8 taskId) void ForcePlayerToStartSurfing(void) { SetHelpContext(HELPCONTEXT_SURFING); - SetPlayerAvatarTransitionFlags(8); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_SURFING); } static const u16 sStarterSpecies[] = { @@ -1775,18 +1775,18 @@ bool8 DoesPlayerPartyContainSpecies(void) } static const u8 sMartMaps[][3] = { - {MAP_GROUP(VIRIDIAN_CITY_MART), MAP_NUM(VIRIDIAN_CITY_MART), 1}, - {MAP_GROUP(PEWTER_CITY_MART), MAP_NUM(PEWTER_CITY_MART), 3}, - {MAP_GROUP(CERULEAN_CITY_MART), MAP_NUM(CERULEAN_CITY_MART), 1}, - {MAP_GROUP(LAVENDER_TOWN_MART), MAP_NUM(LAVENDER_TOWN_MART), 1}, - {MAP_GROUP(VERMILION_CITY_MART), MAP_NUM(VERMILION_CITY_MART), 1}, - {MAP_GROUP(FUCHSIA_CITY_MART), MAP_NUM(FUCHSIA_CITY_MART), 1}, - {MAP_GROUP(CINNABAR_ISLAND_MART), MAP_NUM(CINNABAR_ISLAND_MART), 1}, - {MAP_GROUP(SAFFRON_CITY_MART), MAP_NUM(SAFFRON_CITY_MART), 1}, - {MAP_GROUP(THREE_ISLAND_MART), MAP_NUM(THREE_ISLAND_MART), 1}, - {MAP_GROUP(FOUR_ISLAND_MART), MAP_NUM(FOUR_ISLAND_MART), 1}, - {MAP_GROUP(SEVEN_ISLAND_MART), MAP_NUM(SEVEN_ISLAND_MART), 1}, - {MAP_GROUP(SIX_ISLAND_MART), MAP_NUM(SIX_ISLAND_MART), 1} + {MAP(VIRIDIAN_CITY_MART), 1}, + {MAP(PEWTER_CITY_MART), 3}, + {MAP(CERULEAN_CITY_MART), 1}, + {MAP(LAVENDER_TOWN_MART), 1}, + {MAP(VERMILION_CITY_MART), 1}, + {MAP(FUCHSIA_CITY_MART), 1}, + {MAP(CINNABAR_ISLAND_MART), 1}, + {MAP(SAFFRON_CITY_MART), 1}, + {MAP(THREE_ISLAND_MART), 1}, + {MAP(FOUR_ISLAND_MART), 1}, + {MAP(SEVEN_ISLAND_MART), 1}, + {MAP(SIX_ISLAND_MART), 1} }; u8 GetMartClerkObjectId(void) @@ -1811,57 +1811,57 @@ static const struct { u16 grp2; u16 num2; } sInsideOutsidePairs[51] = { - {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)}, - {MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)}, - {MAP_GROUP(VIRIDIAN_CITY_GYM), MAP_NUM(VIRIDIAN_CITY_GYM), MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY)}, - {MAP_GROUP(ROUTE22_NORTH_ENTRANCE), MAP_NUM(ROUTE22_NORTH_ENTRANCE), MAP_GROUP(ROUTE22), MAP_NUM(ROUTE22)}, - {MAP_GROUP(ROUTE22_NORTH_ENTRANCE), MAP_NUM(ROUTE22_NORTH_ENTRANCE), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)}, - {MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE), MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)}, - {MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE), MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)}, - {MAP_GROUP(PEWTER_CITY_MUSEUM_1F), MAP_NUM(PEWTER_CITY_MUSEUM_1F), MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY)}, - {MAP_GROUP(PEWTER_CITY_GYM), MAP_NUM(PEWTER_CITY_GYM), MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY)}, - {MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4)}, - {MAP_GROUP(MT_MOON_B1F), MAP_NUM(MT_MOON_B1F), MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4)}, - {MAP_GROUP(CERULEAN_CITY_GYM), MAP_NUM(CERULEAN_CITY_GYM), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)}, - {MAP_GROUP(CERULEAN_CITY_BIKE_SHOP), MAP_NUM(CERULEAN_CITY_BIKE_SHOP), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)}, - {MAP_GROUP(ROUTE25_SEA_COTTAGE), MAP_NUM(ROUTE25_SEA_COTTAGE), MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25)}, - {MAP_GROUP(ROUTE5_POKEMON_DAY_CARE), MAP_NUM(ROUTE5_POKEMON_DAY_CARE), MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5)}, - {MAP_GROUP(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP_GROUP(ROUTE5), MAP_NUM(ROUTE5)}, - {MAP_GROUP(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6)}, - {MAP_GROUP(VERMILION_CITY_POKEMON_FAN_CLUB), MAP_NUM(VERMILION_CITY_POKEMON_FAN_CLUB), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)}, - {MAP_GROUP(VERMILION_CITY_GYM), MAP_NUM(VERMILION_CITY_GYM), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)}, - {MAP_GROUP(SSANNE_1F_CORRIDOR), MAP_NUM(SSANNE_1F_CORRIDOR), MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY)}, - {MAP_GROUP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP_GROUP(ROUTE2), MAP_NUM(ROUTE2)}, - {MAP_GROUP(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP_NUM(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11)}, - {MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)}, - {MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)}, - {MAP_GROUP(POWER_PLANT), MAP_NUM(POWER_PLANT), MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10)}, - {MAP_GROUP(POKEMON_TOWER_1F), MAP_NUM(POKEMON_TOWER_1F), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)}, - {MAP_GROUP(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP_NUM(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)}, - {MAP_GROUP(LAVENDER_TOWN_HOUSE2), MAP_NUM(LAVENDER_TOWN_HOUSE2), MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN)}, - {MAP_GROUP(UNDERGROUND_PATH_EAST_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_EAST_ENTRANCE), MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8)}, - {MAP_GROUP(UNDERGROUND_PATH_WEST_ENTRANCE), MAP_NUM(UNDERGROUND_PATH_WEST_ENTRANCE), MAP_GROUP(ROUTE7), MAP_NUM(ROUTE7)}, - {MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_1F), MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_1F), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)}, - {MAP_GROUP(CELADON_CITY_CONDOMINIUMS_1F), MAP_NUM(CELADON_CITY_CONDOMINIUMS_1F), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)}, - {MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)}, - {MAP_GROUP(CELADON_CITY_GYM), MAP_NUM(CELADON_CITY_GYM), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)}, - {MAP_GROUP(CELADON_CITY_RESTAURANT), MAP_NUM(CELADON_CITY_RESTAURANT), MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY)}, - {MAP_GROUP(ROCKET_HIDEOUT_B1F), MAP_NUM(ROCKET_HIDEOUT_B1F), MAP_GROUP(CELADON_CITY_GAME_CORNER), MAP_NUM(CELADON_CITY_GAME_CORNER)}, - {MAP_GROUP(SAFARI_ZONE_CENTER), MAP_NUM(SAFARI_ZONE_CENTER), MAP_GROUP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE), MAP_NUM(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)}, - {MAP_GROUP(FUCHSIA_CITY_GYM), MAP_NUM(FUCHSIA_CITY_GYM), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)}, - {MAP_GROUP(FUCHSIA_CITY_WARDENS_HOUSE), MAP_NUM(FUCHSIA_CITY_WARDENS_HOUSE), MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY)}, - {MAP_GROUP(SAFFRON_CITY_DOJO), MAP_NUM(SAFFRON_CITY_DOJO), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)}, - {MAP_GROUP(SAFFRON_CITY_GYM), MAP_NUM(SAFFRON_CITY_GYM), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)}, - {MAP_GROUP(SILPH_CO_1F), MAP_NUM(SILPH_CO_1F), MAP_GROUP(SAFFRON_CITY), MAP_NUM(SAFFRON_CITY)}, - {MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20)}, - {MAP_GROUP(SEAFOAM_ISLANDS_1F), MAP_NUM(SEAFOAM_ISLANDS_1F), MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20)}, - {MAP_GROUP(POKEMON_MANSION_1F), MAP_NUM(POKEMON_MANSION_1F), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)}, - {MAP_GROUP(CINNABAR_ISLAND_GYM), MAP_NUM(CINNABAR_ISLAND_GYM), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)}, - {MAP_GROUP(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP_NUM(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND)}, - {MAP_GROUP(VICTORY_ROAD_1F), MAP_NUM(VICTORY_ROAD_1F), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)}, - {MAP_GROUP(VICTORY_ROAD_2F), MAP_NUM(VICTORY_ROAD_2F), MAP_GROUP(ROUTE23), MAP_NUM(ROUTE23)}, - {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR)}, - {MAP_GROUP(CERULEAN_CAVE_1F), MAP_NUM(CERULEAN_CAVE_1F), MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY)} + [QL_LOCATION_HOME] = {MAP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP(PALLET_TOWN)}, + [QL_LOCATION_OAKS_LAB] = {MAP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP(PALLET_TOWN)}, + [QL_LOCATION_VIRIDIAN_GYM] = {MAP(VIRIDIAN_CITY_GYM), MAP(VIRIDIAN_CITY)}, + [QL_LOCATION_LEAGUE_GATE_1] = {MAP(ROUTE22_NORTH_ENTRANCE), MAP(ROUTE22)}, + [QL_LOCATION_LEAGUE_GATE_2] = {MAP(ROUTE22_NORTH_ENTRANCE), MAP(ROUTE23)}, + [QL_LOCATION_VIRIDIAN_FOREST_1] = {MAP(VIRIDIAN_FOREST), MAP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)}, + [QL_LOCATION_VIRIDIAN_FOREST_2] = {MAP(VIRIDIAN_FOREST), MAP(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)}, + [QL_LOCATION_PEWTER_MUSEUM] = {MAP(PEWTER_CITY_MUSEUM_1F), MAP(PEWTER_CITY)}, + [QL_LOCATION_PEWTER_GYM] = {MAP(PEWTER_CITY_GYM), MAP(PEWTER_CITY)}, + [QL_LOCATION_MT_MOON_1] = {MAP(MT_MOON_1F), MAP(ROUTE4)}, + [QL_LOCATION_MT_MOON_2] = {MAP(MT_MOON_B1F), MAP(ROUTE4)}, + [QL_LOCATION_CERULEAN_GYM] = {MAP(CERULEAN_CITY_GYM), MAP(CERULEAN_CITY)}, + [QL_LOCATION_BIKE_SHOP] = {MAP(CERULEAN_CITY_BIKE_SHOP), MAP(CERULEAN_CITY)}, + [QL_LOCATION_BILLS_HOUSE] = {MAP(ROUTE25_SEA_COTTAGE), MAP(ROUTE25)}, + [QL_LOCATION_DAY_CARE] = {MAP(ROUTE5_POKEMON_DAY_CARE), MAP(ROUTE5)}, + [QL_LOCATION_UNDERGROUND_PATH_1] = {MAP(UNDERGROUND_PATH_NORTH_ENTRANCE), MAP(ROUTE5)}, + [QL_LOCATION_UNDERGROUND_PATH_2] = {MAP(UNDERGROUND_PATH_SOUTH_ENTRANCE), MAP(ROUTE6)}, + [QL_LOCATION_PKMN_FAN_CLUB] = {MAP(VERMILION_CITY_POKEMON_FAN_CLUB), MAP(VERMILION_CITY)}, + [QL_LOCATION_VERMILION_GYM] = {MAP(VERMILION_CITY_GYM), MAP(VERMILION_CITY)}, + [QL_LOCATION_SS_ANNE] = {MAP(SSANNE_1F_CORRIDOR), MAP(VERMILION_CITY)}, + [QL_LOCATION_DIGLETTS_CAVE_1] = {MAP(DIGLETTS_CAVE_NORTH_ENTRANCE), MAP(ROUTE2)}, + [QL_LOCATION_DIGLETTS_CAVE_2] = {MAP(DIGLETTS_CAVE_SOUTH_ENTRANCE), MAP(ROUTE11)}, + [QL_LOCATION_ROCK_TUNNEL_1] = {MAP(ROCK_TUNNEL_1F), MAP(ROUTE10)}, + [QL_LOCATION_ROCK_TUNNEL_2] = {MAP(ROCK_TUNNEL_1F), MAP(ROUTE10)}, + [QL_LOCATION_POWER_PLANT] = {MAP(POWER_PLANT), MAP(ROUTE10)}, + [QL_LOCATION_PKMN_TOWER] = {MAP(POKEMON_TOWER_1F), MAP(LAVENDER_TOWN)}, + [QL_LOCATION_VOLUNTEER_HOUSE] = {MAP(LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE), MAP(LAVENDER_TOWN)}, + [QL_LOCATION_NAME_RATERS_HOUSE] = {MAP(LAVENDER_TOWN_HOUSE2), MAP(LAVENDER_TOWN)}, + [QL_LOCATION_UNDERGROUND_PATH_3] = {MAP(UNDERGROUND_PATH_EAST_ENTRANCE), MAP(ROUTE8)}, + [QL_LOCATION_UNDERGROUND_PATH_4] = {MAP(UNDERGROUND_PATH_WEST_ENTRANCE), MAP(ROUTE7)}, + [QL_LOCATION_CELADON_DEPT_STORE] = {MAP(CELADON_CITY_DEPARTMENT_STORE_1F), MAP(CELADON_CITY)}, + [QL_LOCATION_CELADON_MANSION] = {MAP(CELADON_CITY_CONDOMINIUMS_1F), MAP(CELADON_CITY)}, + [QL_LOCATION_GAME_CORNER] = {MAP(CELADON_CITY_GAME_CORNER), MAP(CELADON_CITY)}, + [QL_LOCATION_CELADON_GYM] = {MAP(CELADON_CITY_GYM), MAP(CELADON_CITY)}, + [QL_LOCATION_CELADON_RESTAURANT] = {MAP(CELADON_CITY_RESTAURANT), MAP(CELADON_CITY)}, + [QL_LOCATION_ROCKET_HIDEOUT] = {MAP(ROCKET_HIDEOUT_B1F), MAP(CELADON_CITY_GAME_CORNER)}, + [QL_LOCATION_SAFARI_ZONE] = {MAP(SAFARI_ZONE_CENTER), MAP(FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE)}, + [QL_LOCATION_FUCHSIA_GYM] = {MAP(FUCHSIA_CITY_GYM), MAP(FUCHSIA_CITY)}, + [QL_LOCATION_WARDENS_HOME] = {MAP(FUCHSIA_CITY_WARDENS_HOUSE), MAP(FUCHSIA_CITY)}, + [QL_LOCATION_FIGHTING_DOJO] = {MAP(SAFFRON_CITY_DOJO), MAP(SAFFRON_CITY)}, + [QL_LOCATION_SAFFRON_GYM] = {MAP(SAFFRON_CITY_GYM), MAP(SAFFRON_CITY)}, + [QL_LOCATION_SILPH_CO] = {MAP(SILPH_CO_1F), MAP(SAFFRON_CITY)}, + [QL_LOCATION_SEAFOAM_ISLANDS_1] = {MAP(SEAFOAM_ISLANDS_1F), MAP(ROUTE20)}, + [QL_LOCATION_SEAFOAM_ISLANDS_2] = {MAP(SEAFOAM_ISLANDS_1F), MAP(ROUTE20)}, + [QL_LOCATION_PKMN_MANSION] = {MAP(POKEMON_MANSION_1F), MAP(CINNABAR_ISLAND)}, + [QL_LOCATION_CINNABAR_GYM] = {MAP(CINNABAR_ISLAND_GYM), MAP(CINNABAR_ISLAND)}, + [QL_LOCATION_CINNABAR_LAB] = {MAP(CINNABAR_ISLAND_POKEMON_LAB_ENTRANCE), MAP(CINNABAR_ISLAND)}, + [QL_LOCATION_VICTORY_ROAD_1] = {MAP(VICTORY_ROAD_1F), MAP(ROUTE23)}, + [QL_LOCATION_VICTORY_ROAD_2] = {MAP(VICTORY_ROAD_2F), MAP(ROUTE23)}, + [QL_LOCATION_PKMN_LEAGUE] = {MAP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP(INDIGO_PLATEAU_EXTERIOR)}, + [QL_LOCATION_CERULEAN_CAVE] = {MAP(CERULEAN_CAVE_1F), MAP(CERULEAN_CITY)} }; void sub_80CC534(void) @@ -1871,7 +1871,7 @@ void sub_80CC534(void) { if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[i].grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[i].num) { - if (VarGet(VAR_0x404D) != 35 || i != 32) + if (VarGet(VAR_0x404D) != QL_LOCATION_ROCKET_HIDEOUT || i != QL_LOCATION_GAME_CORNER) { VarSet(VAR_0x404D, i); FlagSet(FLAG_0x808); @@ -1893,7 +1893,7 @@ void sub_80CC59C(void) sp0.unk1 = 0; if (FlagGet(FLAG_0x808)) { - if (r5 == 5) + if (r5 == QL_LOCATION_VIRIDIAN_FOREST_1) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE))) { @@ -1907,7 +1907,7 @@ void sub_80CC59C(void) return; } } - else if (r5 == 3) + else if (r5 == QL_LOCATION_LEAGUE_GATE_1) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23))) { @@ -1925,13 +1925,13 @@ void sub_80CC59C(void) { sp0.unk0 = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId; sp0.unk1 = r5; - if (r5 == 22) + if (r5 == QL_LOCATION_ROCK_TUNNEL_1) { PlayerGetDestCoords(&x, &y); if (x != 15 || y != 26) sp0.unk1++; } - else if (r5 == 42) + else if (r5 == QL_LOCATION_SEAFOAM_ISLANDS_1) { PlayerGetDestCoords(&x, &y); if (x != 67 || y != 15) @@ -1939,9 +1939,9 @@ void sub_80CC59C(void) } SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&sp0); FlagClear(FLAG_0x808); - if (r5 == 35) + if (r5 == QL_LOCATION_ROCKET_HIDEOUT) { - VarSet(VAR_0x404D, 32); + VarSet(VAR_0x404D, QL_LOCATION_GAME_CORNER); FlagSet(FLAG_0x808); } } @@ -2481,7 +2481,7 @@ void BrailleCursorToggle(void) // 8005 = y // 8006 = action (0 = create, 1 = delete) u16 x; - if (gQuestLogState != 2) + if (gQuestLogState != QL_STATE_PLAYBACK) { x = gSpecialVar_0x8004 + 27; if (gSpecialVar_0x8006 == 0) diff --git a/src/field_tasks.c b/src/field_tasks.c index 4c7b93f20..53b49b0d8 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -61,7 +61,7 @@ static void Task_RunTimeBasedEvents(u8 taskId) if (!ScriptContext2_IsEnabled()) { - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) { UpdateAmbientCry(&data[1], &data[2]); } diff --git a/src/graphics.c b/src/graphics.c index 14c20496a..7eee42bf0 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1003,8 +1003,8 @@ const u32 gBattleAnimSpritePal_Splash[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_SweatBead[] = INCBIN_U32("graphics/battle_anims/sprites/sweat_bead.4bpp.lz"); -const u32 gBattleAnimSpriteGfx_Pokeblock[] = INCBIN_U32("graphics/battle_anims/sprites/pokeblock.4bpp.lz"); -const u32 gBattleAnimSpritePal_Pokeblock[] = INCBIN_U32("graphics/battle_anims/sprites/pokeblock.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_SafariBait[] = INCBIN_U32("graphics/battle_anims/sprites/safari_bait.4bpp.lz"); +const u32 gBattleAnimSpritePal_SafariBait[] = INCBIN_U32("graphics/battle_anims/sprites/safari_bait.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Gem1[] = INCBIN_U32("graphics/battle_anims/sprites/gem_1.4bpp.lz"); const u32 gBattleAnimSpriteGfx_Gem2[] = INCBIN_U32("graphics/battle_anims/sprites/gem_2.4bpp.lz"); diff --git a/src/help_message.c b/src/help_message.c new file mode 100644 index 000000000..630e32ecd --- /dev/null +++ b/src/help_message.c @@ -0,0 +1,197 @@ +#include "global.h" +#include "gflib.h" +#include "menu.h" + +static EWRAM_DATA u8 sHelpMessageWindowId = 0; + +const u16 gUnknown_84566A8[] = INCBIN_U16("graphics/unknown/unknown_84566a8.bin"); + +static const struct WindowTemplate sHelpMessageWindowTemplate = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 30, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x08F +}; + +void MapNamePopupWindowIdSetDummy(void) +{ + sHelpMessageWindowId = 0xFF; +} + +u8 CreateHelpMessageWindow(void) +{ + if (sHelpMessageWindowId == 0xFF) + { + sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate); + PutWindowTilemap(sHelpMessageWindowId); + } + return sHelpMessageWindowId; +} + +void DestroyHelpMessageWindow(u8 a0) +{ + if (sHelpMessageWindowId != 0xFF) + { + FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0)); + ClearWindowTilemap(sHelpMessageWindowId); + + if (a0) + CopyWindowToVram(sHelpMessageWindowId, a0); + + RemoveWindow(sHelpMessageWindowId); + sHelpMessageWindowId = 0xFF; + } +} + +#ifdef NONMATCHING +void sub_8112F18(u8 windowId) +{ + u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH); + u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT); + u8 *buffer = Alloc(32 * width * height); + u8 i, j; + u8 k; + + if (buffer != NULL) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + if (i == 0) + k = 0; + else if (i == height - 1) + k = 14; + else + k = 5; + CpuCopy32( + (void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction + buffer + 32 * (i * width + j), + 32 + ); + } + } + CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0); + Free(buffer); + } +} +#else +NAKED +void sub_8112F18(u8 windowId) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r10, r0\n" + "\tmovs r1, 0x3\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r0, r10\n" + "\tmovs r1, 0x4\n" + "\tbl GetWindowAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r0, r7, 5\n" + "\tmuls r0, r6\n" + "\tbl Alloc\n" + "\tmov r8, r0\n" + "\tcmp r0, 0\n" + "\tbeq _08112FB8\n" + "\tmovs r5, 0\n" + "\tadds r0, r6, 0\n" + "\tmuls r0, r7\n" + "\tstr r0, [sp]\n" + "\tcmp r5, r7\n" + "\tbcs _08112FA2\n" + "_08112F5A:\n" + "\tmovs r4, 0\n" + "\tadds r1, r5, 0x1\n" + "\tmov r9, r1\n" + "\tcmp r4, r6\n" + "\tbcs _08112F98\n" + "\tsubs r3, r7, 0x1\n" + "_08112F66:\n" + "\tmovs r0, 0\n" + "\tcmp r5, 0\n" + "\tbeq _08112F74\n" + "\tmovs r0, 0x5\n" + "\tcmp r5, r3\n" + "\tbne _08112F74\n" + "\tmovs r0, 0xE\n" + "_08112F74:\n" + "\tlsls r0, 5\n" + "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n" + "\tadds r0, r1, r0\n" + "\tadds r1, r5, 0\n" + "\tmuls r1, r6\n" + "\tadds r1, r4\n" + "\tlsls r1, 5\n" + "\tadd r1, r8\n" + "\tldr r2, _08112FCC @ =0x04000008\n" + "\tstr r3, [sp, 0x4]\n" + "\tbl CpuSet\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r4, r6\n" + "\tbcc _08112F66\n" + "_08112F98:\n" + "\tmov r1, r9\n" + "\tlsls r0, r1, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, r7\n" + "\tbcc _08112F5A\n" + "_08112FA2:\n" + "\tldr r0, [sp]\n" + "\tlsls r2, r0, 21\n" + "\tlsrs r2, 16\n" + "\tmov r0, r10\n" + "\tmov r1, r8\n" + "\tmovs r3, 0\n" + "\tbl CopyToWindowPixelBuffer\n" + "\tmov r0, r8\n" + "\tbl Free\n" + "_08112FB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08112FC8: .4byte gUnknown_84566A8\n" + "_08112FCC: .4byte 0x04000008"); +} +#endif + +static void sub_8112FD0(void) +{ + sub_8112F18(sHelpMessageWindowId); +} + +static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_DARK_GREY}; + +static void PrintHelpMessageText(const u8 *text) +{ + AddTextPrinterParameterized4(sHelpMessageWindowId, 2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text); +} + +void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode) +{ + sub_8112FD0(); + PrintHelpMessageText(text); + if (mode) + CopyWindowToVram(sHelpMessageWindowId, mode); +} diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c index ee26c6de5..0db564460 100644 --- a/src/help_system_812B1E0.c +++ b/src/help_system_812B1E0.c @@ -1892,7 +1892,7 @@ void HelpSystem_Disable(void) void HelpSystem_Enable(void) { - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) { gHelpSystemEnabled = TRUE; HelpSystem_EnableToggleWithRButton(); diff --git a/src/item_menu.c b/src/item_menu.c index ebad0640d..ff59f0985 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2035,7 +2035,7 @@ bool8 UseRegisteredKeyItemOnField(void) { ScriptContext2_Enable(); FreezeObjectEvents(); - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); StopPlayerAvatar(); gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem; taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8); diff --git a/src/link.c b/src/link.c index cb46a50ff..ed04cdc21 100644 --- a/src/link.c +++ b/src/link.c @@ -229,7 +229,7 @@ static const u8 sLinkErrorTextColor[] = { 0x00, 0x01, 0x02 }; bool8 IsWirelessAdapterConnected(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; SetWirelessCommType1(); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 15ffb4813..e86a3b43f 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -499,7 +499,7 @@ void LinkRfu_Shutdown(void) { u8 i; - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; rfu_LMAN_powerDownRFU(); @@ -538,7 +538,7 @@ void LinkRfu_Shutdown(void) static void CreateTask_LinkLeaderSearchForChildren(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; Rfu.unk_67 = CreateTask(Task_LinkLeaderSearchForChildren, 1); } @@ -564,7 +564,7 @@ static bool32 IsParentSuccessfullyReconnected(void) static void CreateTask_JoinGroupSearchForParent(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; Rfu.unk_67 = CreateTask(Task_JoinGroupSearchForParent, 1); } @@ -2481,7 +2481,7 @@ void InitializeRfuLinkManager_JoinGroup(void) void InitializeRfuLinkManager_EnterUnionRoom(void) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; Rfu.parent_child = 2; CopyPlayerNameToUnameBuffer(); diff --git a/src/load_save.c b/src/load_save.c index 9dff59928..859ec57af 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -78,7 +78,7 @@ void SetSaveBlocksPointers(void) gPokemonStoragePtr = (void*)(&gPokemonStorage) + offset; SetBagPocketsPointers(); - sub_8110840(oldSave); + SetQuestLogRecordAndPlaybackPointers(oldSave); } void MoveSaveBlocks_ResetHeap(void) diff --git a/src/main.c b/src/main.c index 77f668e6f..5ba87aaa0 100644 --- a/src/main.c +++ b/src/main.c @@ -176,7 +176,7 @@ static void InitMainCallbacks(void) gSaveBlock2Ptr = &gSaveBlock2; gSaveBlock1Ptr = &gSaveBlock1; gSaveBlock2.encryptionKey = 0; - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } static void CallCallbacks(void) diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 6f7fa5d3c..9126c6b7a 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -31,7 +31,7 @@ static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags); void ShowMapNamePopup(bool32 palIntoFadedBuffer) { u8 taskId; - if (FlagGet(FLAG_DONT_SHOW_MAP_NAME_POPUP) != TRUE && !(gQuestLogState == QL_STATE_2 || gQuestLogState == QL_STATE_3)) + if (FlagGet(FLAG_DONT_SHOW_MAP_NAME_POPUP) != TRUE && !QL_IS_PLAYBACK_STATE) { taskId = FindTaskIdByFunc(Task_MapNamePopup); if (taskId == 0xFF) diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index f3cff7882..6418a3139 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -366,7 +366,7 @@ bool8 MapHasPreviewScreen(u8 mapsec, u8 type) bool32 MapHasPreviewScreen_HandleQLState2(u8 mapsec, u8 type) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { return FALSE; } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 77c839b89..4539c884b 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -131,51 +131,51 @@ bool8 MetatileBehavior_IsEscalator(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsUnknownWarp6C(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalUpRightStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6C) + if(metatileBehavior == MB_UP_RIGHT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6D(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalUpLeftStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6D) + if(metatileBehavior == MB_UP_LEFT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6E(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalDownRightStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6E) + if(metatileBehavior == MB_DOWN_RIGHT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6F(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior) { u8 result = FALSE; - if(metatileBehavior == MB_UNKNOWN_WARP_6F) + if(metatileBehavior == MB_DOWN_LEFT_STAIR_WARP) result = TRUE; return result; } -bool8 MetatileBehavior_IsUnknownWarp6C_to_6F(u8 metatileBehavior) +bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior) { bool8 result = FALSE; - if(metatileBehavior >= MB_UNKNOWN_WARP_6C && metatileBehavior <= MB_UNKNOWN_WARP_6F) + if(metatileBehavior >= MB_UP_RIGHT_STAIR_WARP && metatileBehavior <= MB_DOWN_LEFT_STAIR_WARP) result = TRUE; else result = FALSE; @@ -484,7 +484,7 @@ bool8 MetatileBehavior_IsDiveable(u8 metatileBehavior) bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior) { - if(metatileBehavior == MB_19) + if(metatileBehavior == MB_UNDERWATER_BLOCKED_ABOVE) return TRUE; else return FALSE; @@ -622,7 +622,7 @@ bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_IsLavaridge1FWarp(u8 metatileBehavior) { - if(metatileBehavior == MB_68) + if(metatileBehavior == MB_LAVARIDGE_1F_WARP) return TRUE; else return FALSE; @@ -685,7 +685,7 @@ bool8 MetatileBehavior_IsHorizontalRail(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_IsSeaweed(u8 metatileBehavior) { - if(metatileBehavior == MB_22) + if(metatileBehavior == MB_SEAWEED) return TRUE; else return FALSE; diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 78bc6b7a4..9ffef06ae 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -1,18 +1,13 @@ #include "global.h" -#include "malloc.h" -#include "dma3.h" -#include "task.h" -#include "bg.h" -#include "window.h" +#include "gflib.h" +#include "help_message.h" #include "menu.h" #include "menu_helpers.h" #include "new_menu_helpers.h" #include "quest_log.h" -#include "text.h" #include "field_specials.h" #include "text_window.h" #include "script.h" -#include "palette.h" #define DLG_WINDOW_PALETTE_NUM 15 #define DLG_WINDOW_BASE_TILE_NUM 0x200 @@ -457,7 +452,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP void LoadStdWindowFrameGfx(void) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { gTextFlags.autoScroll = 1; TextWindow_LoadTilesStdFrame1(0, DLG_WINDOW_BASE_TILE_NUM); @@ -495,7 +490,7 @@ void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram) ClearWindowTilemap(windowId); if (copyToVram == TRUE) CopyWindowToVram(windowId, 3); - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) CommitQuestLogWindow1(); } @@ -527,7 +522,7 @@ static void WindowFunc_DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u static void WindowFunc_DrawDialogueFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) { - if (!IsMsgSignPost() || gQuestLogState == QL_STATE_2) + if (!IsMsgSignPost() || gQuestLogState == QL_STATE_PLAYBACK) { FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 0, tilemapLeft - 2, tilemapTop - 1, 1, 1, DLG_WINDOW_PALETTE_NUM); FillBgTilemapBufferRect(bg, DLG_WINDOW_BASE_TILE_NUM + 1, tilemapLeft - 1, tilemapTop - 1, 1, 1, DLG_WINDOW_PALETTE_NUM); @@ -611,7 +606,7 @@ void SetStdWindowBorderStyle(u8 windowId, bool8 copyToVram) void sub_80F7768(u8 windowId, bool8 copyToVram) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { gTextFlags.autoScroll = 1; TextWindow_LoadTilesStdFrame1(0, DLG_WINDOW_BASE_TILE_NUM); diff --git a/src/overworld.c b/src/overworld.c index a4a6213e6..a26d67b6e 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -160,9 +160,9 @@ static void SetCameraToTrackGuestPlayer_2(void); static void sub_8057178(void); static void sub_80571A8(void); static void CreateLinkPlayerSprites(void); -static void sub_80572D8(void); -static void sub_8057300(u8 *state); -static bool32 sub_8057314(u8 *state); +static void CB2_LoadMapForQLPlayback(void); +static void DoLoadMap_QLPlayback(u8 *state); +static bool32 LoadMap_QLPlayback(u8 *state); static bool32 SetUpScrollSceneForCredits(u8 *state, u8 unused); static bool8 MapLdr_Credits(void); static void CameraCB_CreditsPan(struct CameraObject * camera); @@ -340,7 +340,7 @@ static void Overworld_ResetStateAfterWhitingOut(void) VarSet(VAR_0x404D, 0); } -static void sub_8054E40(void) +static void Overworld_ResetStateOnContinue(void) { FlagClear(FLAG_SYS_SAFARI_MODE); VarSet(VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0); @@ -921,9 +921,9 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr return DIR_EAST; else if (MetatileBehavior_IsEastArrowWarp(metatileBehavior) == TRUE) return DIR_WEST; - else if (MetatileBehavior_IsUnknownWarp6C(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6E(metatileBehavior) == TRUE) + else if (MetatileBehavior_IsDirectionalUpRightStairWarp(metatileBehavior) == TRUE || MetatileBehavior_IsDirectionalDownRightStairWarp(metatileBehavior) == TRUE) return DIR_WEST; - else if (MetatileBehavior_IsUnknownWarp6D(metatileBehavior) == TRUE || MetatileBehavior_IsUnknownWarp6F(metatileBehavior) == TRUE) + else if (MetatileBehavior_IsDirectionalUpLeftStairWarp(metatileBehavior) == TRUE || MetatileBehavior_IsDirectionalDownLeftStairWarp(metatileBehavior) == TRUE) return DIR_EAST; else if ((playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER && transitionFlags == PLAYER_AVATAR_FLAG_SURFING) || (playerStruct->transitionFlags == PLAYER_AVATAR_FLAG_SURFING && transitionFlags == PLAYER_AVATAR_FLAG_UNDERWATER )) @@ -979,7 +979,7 @@ void SetCurrentMapLayout(u16 mapLayoutId) gMapHeader.mapLayout = GetMapLayout(); } -void sub_8055D5C(struct WarpData * warp) +void Overworld_SetWarpDestinationFromWarp(struct WarpData * warp) { sWarpDestination = *warp; } @@ -1406,7 +1406,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) { if (ProcessPlayerFieldInput(&fieldInput) == TRUE) { - if (gUnknown_3005E88 == 2) + if (gQuestLogPlaybackState == 2) sub_81127F8(&gInputToStoreInQuestLogMaybe); ScriptContext2_Enable(); DismissMapNamePopup(); @@ -1441,7 +1441,7 @@ static void DoCB1_Overworld_QuestLogPlayback(void) RunQuestLogCB(); } } - else if (sub_8111CD0() == TRUE) + else if (QuestLogScenePlaybackIsEnding() == TRUE) { RunQuestLogCB(); } @@ -1452,7 +1452,7 @@ void CB1_Overworld(void) { if (gMain.callback2 == CB2_Overworld) { - if (sub_8112CAC() == TRUE || gQuestLogState == QL_STATE_2) + if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK) DoCB1_Overworld_QuestLogPlayback(); else DoCB1_Overworld(gMain.newKeys, gMain.heldKeys); @@ -1555,7 +1555,7 @@ void CB2_WhiteOut(void) gFieldCallback = FieldCB_RushInjuredPokemonToCenter; val = 0; do_load_map_stuff_loop(&val); - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); SetMainCallback2(CB2_Overworld); @@ -1575,9 +1575,9 @@ void CB2_LoadMap(void) static void CB2_LoadMap2(void) { do_load_map_stuff_loop(&gMain.state); - if (sub_8113748() == TRUE) + if (QuestLog_ShouldEndSceneOnMapChange() == TRUE) { - sub_81119C8(); + QuestLog_AdvancePlayhead_(); } else { @@ -1671,14 +1671,14 @@ void CB2_ReturnToFieldContinueScriptPlayMapMusic(void) CB2_ReturnToField(); } -void sub_80568FC(void) +void CB2_ReturnToFieldFromDiploma(void) { FieldClearVBlankHBlankCallbacks(); gFieldCallback = FieldCB_WarpExitFadeFromBlack; CB2_ReturnToField(); } -static void sub_8056918(void) +static void FieldCB_ShowMapNameOnContinue(void) { if (SHOW_MAP_NAME_ENABLED) ShowMapNamePopup(FALSE); @@ -1693,7 +1693,7 @@ void CB2_ContinueSavedGame(void) LoadSaveblockMapHeader(); LoadSaveblockObjEventScripts(); UnfreezeObjectEvents(); - sub_8054E40(); + Overworld_ResetStateOnContinue(); InitMapFromSavedGame(); PlayTimeCounter_Start(); ScriptContext1_Init(); @@ -1709,7 +1709,7 @@ void CB2_ContinueSavedGame(void) } else { - gFieldCallback = sub_8056918; + gFieldCallback = FieldCB_ShowMapNameOnContinue; SetMainCallback1(CB1_Overworld); CB2_ReturnToField(); } @@ -1861,14 +1861,14 @@ static bool32 load_map_stuff(u8 *state, bool32 a1) (*state)++; break; case 3: - if (sub_8113748() == TRUE) + if (QuestLog_ShouldEndSceneOnMapChange() == TRUE) return TRUE; (*state)++; break; case 4: mli4_mapscripts_and_other(); sub_8057114(); - if (gQuestLogState != QL_STATE_2) + if (gQuestLogState != QL_STATE_PLAYBACK) { sub_80CC534(); sub_80CC59C(); @@ -2205,7 +2205,7 @@ static void CreateLinkPlayerSprites(void) // Quest Log -void sub_805726C(void) +void CB2_SetUpOverworldForQLPlaybackWithWarpExit(void) { FieldClearVBlankHBlankCallbacks(); gUnknown_2036E28 = 1; @@ -2213,10 +2213,10 @@ void sub_805726C(void) ScriptContext2_Disable(); SetMainCallback1(NULL); SetMainCallback2(CB2_DoChangeMap); - gMain.savedCallback = sub_80572D8; + gMain.savedCallback = CB2_LoadMapForQLPlayback; } -void sub_80572A8(void) +void CB2_SetUpOverworldForQLPlayback(void) { FieldClearVBlankHBlankCallbacks(); gUnknown_2036E28 = 1; @@ -2224,24 +2224,24 @@ void sub_80572A8(void) ScriptContext1_Init(); ScriptContext2_Disable(); SetMainCallback1(NULL); - SetMainCallback2(sub_80572D8); + SetMainCallback2(CB2_LoadMapForQLPlayback); } -static void sub_80572D8(void) +static void CB2_LoadMapForQLPlayback(void) { - sub_8057300(&gMain.state); + DoLoadMap_QLPlayback(&gMain.state); SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); SetMainCallback2(CB2_Overworld); } -static void sub_8057300(u8 *state) +static void DoLoadMap_QLPlayback(u8 *state) { - while (!sub_8057314(state)) + while (!LoadMap_QLPlayback(state)) ; } -static bool32 sub_8057314(u8 *state) +static bool32 LoadMap_QLPlayback(u8 *state) { switch (*state) { @@ -2251,7 +2251,7 @@ static bool32 sub_8057314(u8 *state) sub_8111F14(); sub_81113E4(); sub_8111438(); - if (sub_8110AC8() == 2) + if (GetQuestLogStartType() == QL_START_WARP) { gUnknown_2031DE0 = FALSE; mli0_load_map(FALSE); @@ -2317,7 +2317,7 @@ static bool32 sub_8057314(u8 *state) return FALSE; } -void sub_8057430(void) +void CB2_EnterFieldFromQuestLog(void) { FieldClearVBlankHBlankCallbacks(); StopMapMusic(); @@ -2326,7 +2326,7 @@ void sub_8057430(void) LoadSaveblockMapHeader(); LoadSaveblockObjEventScripts(); UnfreezeObjectEvents(); - sub_8054E40(); + Overworld_ResetStateOnContinue(); InitMapFromSavedGame(); PlayTimeCounter_Start(); ScriptContext1_Init(); diff --git a/src/party_menu.c b/src/party_menu.c index 306a5ce70..93c6c6398 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -19,6 +19,7 @@ #include "fieldmap.h" #include "fldeff.h" #include "graphics.h" +#include "help_message.h" #include "help_system.h" #include "item.h" #include "item_menu.h" diff --git a/src/quest_log.c b/src/quest_log.c index 5dc9f7f11..1a028f19d 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -44,6 +44,7 @@ #include "constants/items.h" #include "constants/field_weather.h" #include "constants/event_object_movement.h" +#include "constants/region_map_sections.h" struct TrainerFanClub { @@ -60,22 +61,12 @@ struct TrainerFanClub struct UnkStruct_203AE94 { - u8 unk_0_0:4; - u8 unk_0_4:2; - u8 unk_0_6:2; - u8 unk_1; - u8 unk_2; - u8 unk_3; -}; - -struct QuestLogEntry -{ - u8 unk_0; - u8 unk_1; - u8 unk_2; - u8 unk_3; - u16 unk_4; - u8 unk_6; + u8 playbackSubstate:4; + u8 playingEvent:2; + u8 sceneEndMode:2; + u8 cursor; + u8 timer; + u8 overlapTimer; }; struct UnkStruct_300201C @@ -85,14 +76,7 @@ struct UnkStruct_300201C u16 value; }; -struct UnkStruct_203B044 -{ - u8 unk_0; - u8 unk_1; - u16 unk_2; -}; - -u8 gUnknown_3005E88; +u8 gQuestLogPlaybackState; u16 sNumEventsInLogEntry; struct FieldInput gQuestLogFieldInput; struct QuestLogEntry * sCurQuestLogEntry; @@ -105,28 +89,21 @@ static EWRAM_DATA u8 sNumScenes = 0; EWRAM_DATA u8 gQuestLogState = 0; static EWRAM_DATA u16 gUnknown_203ADFC = 0; static EWRAM_DATA u8 sQuestLogHeaderWindowIds[3] = {0}; -static EWRAM_DATA u16 *gUnknown_203AE04 = NULL; -static EWRAM_DATA u16 *sEventRecordingPointer = NULL; +EWRAM_DATA u16 *gUnknown_203AE04 = NULL; +EWRAM_DATA u16 *sEventRecordingPointer = NULL; static EWRAM_DATA u16 *gUnknown_203AE0C[32] = {NULL}; static EWRAM_DATA void (* sQuestLogCB)(void) = NULL; static EWRAM_DATA u16 *gUnknown_203AE90 = NULL; -static EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; +static EWRAM_DATA struct UnkStruct_203AE94 sQuestLogCurrentScene = {0}; static EWRAM_DATA struct QuestLogEntry sQuestLogSceneRecordBuffer[32] = {0}; -static EWRAM_DATA u16 sQuestLogCursor = 0; +EWRAM_DATA u16 sQuestLogCursor = 0; static EWRAM_DATA u8 sMovementScripts[64][2] = {{0}}; static EWRAM_DATA u16 sNextStepDelay = 0; static EWRAM_DATA u16 gUnknown_203B01C = 0; static EWRAM_DATA u16 sFlagOrVarPlayhead = 0; -static EWRAM_DATA u8 sHelpMessageWindowId = 0; -static EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0}; -static EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; -static EWRAM_DATA u8 gUnknown_203B048 = 0; -static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE; -static EWRAM_DATA u8 gUnknown_203B04A = 0; -static EWRAM_DATA bool8 gUnknown_203B04B = FALSE; - -static void sub_8110A00(void); -static void sub_8110A3C(void); + +static void QLogCB_Recording(void); +static void QLogCB_Playback(void); static void SetPlayerInitialCoordsAtScene(u8); static void SetNPCInitialCoordsAtScene(u8); static void TryRecordEvent39_GoToNextScene(void); @@ -134,34 +111,34 @@ static void BackUpTrainerRematchesToVars(void); static void BackUpMapLayoutToVar(void); static void SetGameStateAtScene(u8); static u8 TryRecordQuestLogEntrySequence(struct QuestLogEntry *); -static void sub_8110F90(u8); +static void Task_BeginQuestLogPlayback(u8); static void QuestLogPlaybackSetObjectEventTemplates(u8); -static void sub_8111368(void); +static void QLPlayback_InitOverworldState(void); static void QuestLog_GetSaneMonCounts(void); static u16 QuestLog_GetSanePartyCount(void); static u16 QuestLog_GetSaneBoxCount(void); static void sub_8111688(void); -static void sub_811175C(u8, struct QuestLogEntry *); -static void sub_81118F4(s8); +static void ReadQuestLogScriptFromSav1(u8, struct QuestLogEntry *); +static void QuestLog_BeginFadeAtEndOfScene(s8 delay); static void QuestLog_AdvancePlayhead(void); static void QuestLog_StartFinalScene(void); static void Task_RunPlaybackCB(u8); -static void sub_8111AD8(void); -static void sub_8111B80(void); -static u8 sub_8111BD4(void); +static void QuestLog_PlayCurrentEvent(void); +static void HandleShowQuestLogMessage(void); +static u8 GetQuestLogTextDisplayDuration(void); static void DrawQuestLogSceneDescription(void); static void sub_8111D90(u8); static void QuestLog_CloseTextWindow(void); static void QuestLog_SkipToEndOfPlayback(s8 delay); static void QuestLog_WaitFadeAndCancelPlayback(void); -static bool8 sub_8111F60(void); -static void sub_8111F8C(u8); +static bool8 FieldCB2_FinalScene(void); +static void Task_FinalScene_WaitFade(u8); static void Task_QuestLogScene_SavedGame(u8); static void Task_WaitAtEndOfQuestLog(u8); static void Task_EndQuestLog(u8); static bool8 sub_81121D8(u8); static void sub_811229C(void); -static void sub_8112888(u8); +static void TogglePlaybackStateForOverworldLock(u8); static void SetUpQuestLogEntry(u8, struct QuestLogEntry *, u16); static bool8 sub_8112CEC(void); static bool8 RecordHeadAtEndOfEntry(void); @@ -182,104 +159,6 @@ static bool8 sub_81137E4(u16, const u16 *); static u16 *sub_8113828(u16, const u16 *); static bool8 TrySetLinkQuestLogEvent(u16, const u16 *); static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *); -static void TryRecordEvent41_IncCursor(u16); -static void sub_811381C(void); -static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *); -static u16 *QuestLog_SkipCommand(u16 *, u16 **); -static void sub_8113ABC(const u16 *); -static bool8 sub_8113AE8(const u16 *); -static bool8 sub_8113B44(const u16 *); -static void sub_8113B88(void); -static void sub_8113B94(u16); -static void sub_8113BD8(void); -static u16 *TryRecordEvent39_NoParams(u16 *); -static u16 *sub_8113C20(u16 *, struct QuestLogEntry *); -static u16 *TryRecordEvent41(u16 *, u16); -static u16 *sub_8113C8C(u16 *, struct QuestLogEntry *); -static u16 *sub_8113CC8(u16 *, struct QuestLogEntry *); -static u16 *sub_8113D08(u16 *, struct QuestLogEntry *); -static u16 *sub_8113D48(u16 *, struct QuestLogEntry *); -static u16 *sub_8113D94(u16 *, struct QuestLogEntry *); -static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *); -static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *); -static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *, const u16 *); -static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *, const u16 *); -static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *, const u16 *); -static u16 *BufferQuestLogData_TookHeldItem(u16 *, const u16 *); -static u16 *BufferQuestLogData_SwappedHeldItem(u16 *, const u16 *); -static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *, const u16 *); -static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *, const u16 *); -static u16 *BufferQuestLogData_LinkTraded(u16 *, const u16 *); -static u16 *BufferQuestLogData_LinkBattledSingle(u16 *, const u16 *); -static u16 *BufferQuestLogData_LinkBattledDouble(u16 *, const u16 *); -static u16 *BufferQuestLogData_LinkBattledMulti(u16 *, const u16 *); -static u16 *BufferQuestLogData_UsedUnionRoom(u16 *, const u16 *); -static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *, const u16 *); -static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *, const u16 *); -static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *, const u16 *); -static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *, const u16 *); -static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *, const u16 *); -static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *, const u16 *); -static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *, const u16 *); -static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *, const u16 *); -static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *, const u16 *); -static u16 *BufferQuestLogData_DepositedMonInPC(u16 *, const u16 *); -static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *, const u16 *); -static u16 *BufferQuestLogData_DepositedItemInPC(u16 *, const u16 *); -static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *, const u16 *); -static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *, const u16 *); -static u16 *BufferQuestLogData_DefeatedWildMon(u16 *, const u16 *); -static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *, const u16 *); -static u16 *BufferQuestLogData_DefeatedChampion(u16 *, const u16 *); -static u16 *BufferQuestLogData_DefeatedTrainer(u16 *, const u16 *); -static u16 *BufferQuestLogData_DepartedLocation(u16 *, const u16 *); -static u16 *BufferQuestLogData_UsedFieldMove(u16 *, const u16 *); -static u16 *BufferQuestLogData_BoughtItem(u16 *, const u16 *); -static u16 *BufferQuestLogData_SoldItem(u16 *, const u16 *); -static u16 *BufferQuestLogData_ObtainedItem(u16 *, const u16 *); -static u16 *BufferQuestLogData_ArrivedInLocation(u16 *, const u16 *); -static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *); -static const u16 *BufferQuestLogText_UsedItem(const u16 *); -static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *); -static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *); -static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *); -static const u16 *BufferQuestLogText_TookHeldItem(const u16 *); -static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *); -static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *); -static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *); -static const u16 *BufferQuestLogText_LinkTraded(const u16 *); -static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *); -static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *); -static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *); -static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *); -static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *); -static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *); -static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *); -static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *); -static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *); -static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *); -static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *); -static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *); -static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *); -static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *); -static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *); -static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *); -static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *); -static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *); -static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *); -static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *); -static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *); -static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *); -static const u16 *BufferQuestLogText_DepartedLocation(const u16 *); -static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *); -static const u16 *BufferQuestLogText_BoughtItem(const u16 *); -static const u16 *BufferQuestLogText_SoldItem(const u16 *); -static const u16 *BufferQuestLogText_ObtainedItem(const u16 *); -static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *); -static bool8 IsSpeciesFromSpecialEncounter(u16); -static bool8 sub_81153A8(u16, const u16 *); -static bool8 sub_81153E4(u16, const u16 *); -static void BufferLinkPartnersName(u8 *); static const struct WindowTemplate sQuestLogHeaderWindowTemplates[3] = { { 0, 0, 0, 30, 2, 15, 0x0e9 }, @@ -293,7 +172,7 @@ static const u16 sUnknown_8456638[] = INCBIN_U16("graphics/unknown/unknown_84566 static const u8 sQuestLogTextLineYCoords[] = {17, 10, 3}; -void sub_8110840(void * oldPointer) +void SetQuestLogRecordAndPlaybackPointers(void * oldPointer) { ptrdiff_t offset = (void *)gSaveBlock1Ptr - oldPointer; if (gUnknown_203AE04) @@ -302,7 +181,7 @@ void sub_8110840(void * oldPointer) { if (sEventRecordingPointer) sEventRecordingPointer = (void *)sEventRecordingPointer + offset; - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { int r3; for (r3 = 0; r3 < (int)NELEMS(gUnknown_203AE0C); r3++) @@ -321,7 +200,7 @@ void ResetQuestLog(void) sEventRecordingPointer = NULL; gUnknown_203AE04 = NULL; sub_8113BD8(); - sub_81138F8(); + ResetDeferredLinkEvent(); } static void DestroySav1QuestLogEntry(u8 a0) @@ -343,7 +222,7 @@ void RunQuestLogCB(void) bool8 sub_8110944(const void * a0, size_t cmdSize) { - void * r2 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_568; + void * r2 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script; void * r0 = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end; r0 -= cmdSize; if ((const void *)a0 < r2 || (const void *)a0 > r0) @@ -351,9 +230,9 @@ bool8 sub_8110944(const void * a0, size_t cmdSize) return TRUE; } -static bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size) +bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size) { - void * start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_568; + void * start = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script; void * end = gSaveBlock1Ptr->questLog[sCurrentSceneNum].end; end -= size; if ((void *)cursor < start || (void *)cursor > end) @@ -364,37 +243,40 @@ static bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size) static void SetQuestLogState(u8 state) { gQuestLogState = state; - if (state == 1) - sQuestLogCB = sub_8110A00; + if (state == QL_STATE_RECORDING) + sQuestLogCB = QLogCB_Recording; else - sQuestLogCB = sub_8110A3C; + sQuestLogCB = QLogCB_Playback; } -static void sub_8110A00(void) +static void QLogCB_Recording(void) { if (TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer) != 1) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; TryRecordEvent39_GoToNextScene(); gQuestLogState = 0; sQuestLogCB = NULL; } } -static void sub_8110A3C(void) +static void QLogCB_Playback(void) { - if (gUnknown_203AE94.unk_0_0 == 2) - gUnknown_203AE94.unk_0_0 = 0; + if (sQuestLogCurrentScene.playbackSubstate == 2) + sQuestLogCurrentScene.playbackSubstate = 0; - if (gUnknown_203AE94.unk_0_6 == 0) + if (sQuestLogCurrentScene.sceneEndMode == 0) { - if (gUnknown_3005E88 || gUnknown_203AE94.unk_0_0 == 1 || (gUnknown_203AE94.unk_1 < NELEMS(gUnknown_203AE0C) && gUnknown_203AE0C[gUnknown_203AE94.unk_1] != NULL)) - sub_8111AD8(); + if (gQuestLogPlaybackState != 0 + || sQuestLogCurrentScene.playbackSubstate == 1 + || (sQuestLogCurrentScene.cursor < NELEMS(gUnknown_203AE0C) + && gUnknown_203AE0C[sQuestLogCurrentScene.cursor] != NULL)) + QuestLog_PlayCurrentEvent(); else { - gUnknown_203AE94.unk_0_6 = 2; + sQuestLogCurrentScene.sceneEndMode = 2; ScriptContext2_Enable(); - sub_81118F4(0); + QuestLog_BeginFadeAtEndOfScene(0); } } } @@ -404,23 +286,23 @@ void GetQuestLogState(void) gSpecialVar_Result = gQuestLogState; } -u8 sub_8110AC8(void) +u8 GetQuestLogStartType(void) { - return gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000; + return gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType; } -static void StartRecordingQuestLogEntry(u16 eventId) +void StartRecordingQuestLogEntry(u16 eventId) { if (sCurrentSceneNum >= QUEST_LOG_SCENE_COUNT) sCurrentSceneNum = 0; DestroySav1QuestLogEntry(sCurrentSceneNum); - sub_8113B88(); - sEventRecordingPointer = gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_568; + ResetUnk203B044(); + sEventRecordingPointer = gSaveBlock1Ptr->questLog[sCurrentSceneNum].script; if (IS_LINK_QL_EVENT(eventId) || eventId == QL_EVENT_DEPARTED) - gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 = 2; + gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType = QL_START_WARP; else - gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 = 1; + gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType = QL_START_NORMAL; QuestLog_GetSaneMonCounts(); SetPlayerInitialCoordsAtScene(sCurrentSceneNum); SetNPCInitialCoordsAtScene(sCurrentSceneNum); @@ -430,7 +312,7 @@ static void StartRecordingQuestLogEntry(u16 eventId) gUnknown_203ADFC = 0; SetUpQuestLogEntry(2, sQuestLogSceneRecordBuffer, 0x100); TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer); - SetQuestLogState(QL_STATE_1); + SetQuestLogState(QL_STATE_RECORDING); } static void SetPlayerInitialCoordsAtScene(u8 sceneNum) @@ -536,12 +418,12 @@ static bool8 TryRecordQuestLogEntrySequence(struct QuestLogEntry * entry) } if (sEventRecordingPointer == NULL) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; return FALSE; } } - if (gUnknown_3005E88 == 0) + if (gQuestLogPlaybackState == 0) { sEventRecordingPointer = TryRecordEvent39_NoParams(sEventRecordingPointer); return FALSE; @@ -558,14 +440,14 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId) sNumScenes = 0; for (i = 0; i < QUEST_LOG_SCENE_COUNT; i++) { - if (gSaveBlock1Ptr->questLog[i].unk_000) + if (gSaveBlock1Ptr->questLog[i].startType != 0) sNumScenes++; } if (sNumScenes != 0) { gHelpSystemEnabled = FALSE; - sub_8110F90(taskId); + Task_BeginQuestLogPlayback(taskId); DestroyTask(taskId); } else @@ -575,42 +457,42 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId) } } -static void sub_8110F90(u8 unused) +static void Task_BeginQuestLogPlayback(u8 taskId) { - gSaveBlock1Ptr->location.mapGroup = 3; - gSaveBlock1Ptr->location.mapNum = 19; + gSaveBlock1Ptr->location.mapGroup = MAP_GROUP(ROUTE1); + gSaveBlock1Ptr->location.mapNum = MAP_NUM(ROUTE1); gSaveBlock1Ptr->location.warpId = -1; sCurrentSceneNum = 0; gDisableMapMusicChangeOnMapLoad = 1; DisableWildEncounters(TRUE); - sub_8111368(); + QLPlayback_InitOverworldState(); } void sub_8110FCC(void) { - sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer); - sub_8113B88(); + ReadQuestLogScriptFromSav1(sCurrentSceneNum, sQuestLogSceneRecordBuffer); + ResetUnk203B044(); SetUpQuestLogEntry(1, sQuestLogSceneRecordBuffer, 0x100); QuestLogPlaybackSetObjectEventTemplates(sCurrentSceneNum); } -bool8 sub_8111000(void) +static bool8 FieldCB2_QuestLogStartPlaybackWithWarpExit(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); - SetQuestLogState(QL_STATE_2); + SetQuestLogState(QL_STATE_PLAYBACK); FieldCB_DefaultWarpExit(); - gUnknown_203AE94 = (struct UnkStruct_203AE94){}; - gUnknown_203AE94.unk_0_0 = 2; + sQuestLogCurrentScene = (struct UnkStruct_203AE94){}; + sQuestLogCurrentScene.playbackSubstate = 2; return 1; } -bool8 sub_8111038(void) +static bool8 FieldCB2_QuestLogStartPlaybackStandingInPlace(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); - SetQuestLogState(QL_STATE_2); + SetQuestLogState(QL_STATE_PLAYBACK); FieldCB_WarpExitFadeFromBlack(); - gUnknown_203AE94 = (struct UnkStruct_203AE94){}; - gUnknown_203AE94.unk_0_0 = 2; + sQuestLogCurrentScene = (struct UnkStruct_203AE94){}; + sQuestLogCurrentScene.playbackSubstate = 2; return 1; } @@ -669,11 +551,11 @@ static void QuestLogPlaybackSetObjectEventTemplates(u8 sceneNum) SetSav1ObjectEventsFromQuestLog(questLog, gSaveBlock1Ptr->objectEventTemplates); } -void sub_8111274(u8 sceneNum, bool8 a1) +static void QLPlayback_SetInitialPlayerPosition(u8 sceneNum, bool8 isWarp) { struct WarpData sp0; - if (!a1) + if (!isWarp) { gSaveBlock1Ptr->location.mapGroup = gSaveBlock1Ptr->questLog[sceneNum].mapGroup; gSaveBlock1Ptr->location.mapNum = gSaveBlock1Ptr->questLog[sceneNum].mapNum; @@ -688,28 +570,28 @@ void sub_8111274(u8 sceneNum, bool8 a1) sp0.warpId = gSaveBlock1Ptr->questLog[sceneNum].warpId; sp0.x = gSaveBlock1Ptr->questLog[sceneNum].x; sp0.y = gSaveBlock1Ptr->questLog[sceneNum].y; - sub_8055D5C(&sp0); + Overworld_SetWarpDestinationFromWarp(&sp0); } } -static void sub_8111368(void) +static void QLPlayback_InitOverworldState(void) { - gQuestLogState = QL_STATE_2; + gQuestLogState = QL_STATE_PLAYBACK; ResetSpecialVars(); ClearBag(); ClearPCItemSlots(); - if (sub_8110AC8() == 1) + if (GetQuestLogStartType() == QL_START_NORMAL) { - sub_8111274(sCurrentSceneNum, FALSE); - gFieldCallback2 = sub_8111038; - SetMainCallback2(sub_80572A8); + QLPlayback_SetInitialPlayerPosition(sCurrentSceneNum, FALSE); + gFieldCallback2 = FieldCB2_QuestLogStartPlaybackStandingInPlace; + SetMainCallback2(CB2_SetUpOverworldForQLPlayback); } else { - sub_8111274(sCurrentSceneNum, TRUE); + QLPlayback_SetInitialPlayerPosition(sCurrentSceneNum, TRUE); WarpIntoMap(); - gFieldCallback2 = sub_8111000; - SetMainCallback2(sub_805726C); + gFieldCallback2 = FieldCB2_QuestLogStartPlaybackWithWarpExit; + SetMainCallback2(CB2_SetUpOverworldForQLPlaybackWithWarpExit); } } @@ -871,7 +753,7 @@ void sub_8111708(void) } } -static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1) +static void ReadQuestLogScriptFromSav1(u8 sceneNum, struct QuestLogEntry * a1) { u16 i; u16 *r4; @@ -884,7 +766,7 @@ static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1) gUnknown_203AE0C[i] = NULL; } - r4 = gSaveBlock1Ptr->questLog[sceneNum].unk_568; + r4 = gSaveBlock1Ptr->questLog[sceneNum].script; for (i = 0; i < 32; i++) { switch (r4[0] & 0xFFF) @@ -918,9 +800,9 @@ static void sub_811175C(u8 sceneNum, struct QuestLogEntry * a1) } } -static void sub_81118F4(s8 a0) +static void QuestLog_BeginFadeAtEndOfScene(s8 delay) { - FadeScreen(FADE_TO_BLACK, a0); + FadeScreen(FADE_TO_BLACK, delay); sQuestLogCB = QuestLog_AdvancePlayhead; } @@ -929,14 +811,14 @@ static void QuestLog_AdvancePlayhead(void) if (!gPaletteFade.active) { ScriptContext2_Enable(); - if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000) + if (++sCurrentSceneNum < QUEST_LOG_SCENE_COUNT && gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType != 0) { sNumScenes--; - sub_8111368(); + QLPlayback_InitOverworldState(); } else { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; QuestLog_StartFinalScene(); } } @@ -947,14 +829,14 @@ static void QuestLog_StartFinalScene(void) ResetSpecialVars(); Save_ResetSaveCounters(); Save_LoadGameData(SAVE_NORMAL); - SetMainCallback2(sub_8057430); - gFieldCallback2 = sub_8111F60; + SetMainCallback2(CB2_EnterFieldFromQuestLog); + gFieldCallback2 = FieldCB2_FinalScene; FreeAllWindowBuffers(); - gQuestLogState = QL_STATE_3; + gQuestLogState = QL_STATE_PLAYBACK_LAST; sQuestLogCB = NULL; } -void sub_81119C8(void) +void QuestLog_AdvancePlayhead_(void) { QuestLog_AdvancePlayhead(); } @@ -965,11 +847,11 @@ bool8 QuestLog_SchedulePlaybackCB(void (*callback)(void)) switch (gQuestLogState) { - case 1: - QuestLog_OnInteractionWithSpecialNpc(); + case QL_STATE_RECORDING: + QuestLog_CutRecording(); break; - case 2: - gUnknown_3005E88 = 3; + case QL_STATE_PLAYBACK: + gQuestLogPlaybackState = 3; taskId = CreateTask(Task_RunPlaybackCB, 80); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; @@ -990,14 +872,14 @@ static void Task_RunPlaybackCB(u8 taskId) if (++data[0] == 0x7F) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gUnknown_203AE94.unk_0_6 = 2; + sQuestLogCurrentScene.sceneEndMode = 2; data[1]++; } break; case 1: if (!gPaletteFade.active) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; routine = (void (*)(void)) GetWordTaskArg(taskId, 14); if (routine != NULL) routine(); @@ -1008,53 +890,53 @@ static void Task_RunPlaybackCB(u8 taskId) } } -static void sub_8111AD8(void) +static void QuestLog_PlayCurrentEvent(void) { - if (gUnknown_203AE94.unk_0_0 == 1) + if (sQuestLogCurrentScene.playbackSubstate == 1) { - if (--gUnknown_203AE94.unk_2 != 0) + if (--sQuestLogCurrentScene.timer != 0) return; - gUnknown_203AE94.unk_0_0 = 0; - gUnknown_203AE94.unk_0_4 = 1; - sub_8112888(2); + sQuestLogCurrentScene.playbackSubstate = 0; + sQuestLogCurrentScene.playingEvent = 1; + TogglePlaybackStateForOverworldLock(2); } - if (gUnknown_203AE94.unk_0_4 == 1) + if (sQuestLogCurrentScene.playingEvent == 1) { - if (++gUnknown_203AE94.unk_3 > 15) + if (++sQuestLogCurrentScene.overlapTimer > 15) { QuestLog_CloseTextWindow(); - gUnknown_203AE94.unk_0_4 = 0; - gUnknown_203AE94.unk_3 = 0; + sQuestLogCurrentScene.playingEvent = 0; + sQuestLogCurrentScene.overlapTimer = 0; } } - if (gUnknown_203AE94.unk_1 < NELEMS(gUnknown_203AE0C)) + if (sQuestLogCurrentScene.cursor < NELEMS(gUnknown_203AE0C)) { - if (sub_8113B44(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1) - sub_8111B80(); - else if (sub_8113AE8(gUnknown_203AE0C[gUnknown_203AE94.unk_1]) == 1) - sub_8111B80(); + if (sub_8113B44(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1) + HandleShowQuestLogMessage(); + else if (sub_8113AE8(gUnknown_203AE0C[sQuestLogCurrentScene.cursor]) == 1) + HandleShowQuestLogMessage(); } } -static void sub_8111B80(void) +static void HandleShowQuestLogMessage(void) { - if (gUnknown_203AE94.unk_0_0 == 0) + if (sQuestLogCurrentScene.playbackSubstate == 0) { - gUnknown_203AE94.unk_0_0 = 1; - gUnknown_203AE94.unk_0_4 = 0; - gUnknown_203AE94.unk_3 = 0; - gUnknown_203AE94.unk_2 = sub_8111BD4(); + sQuestLogCurrentScene.playbackSubstate = 1; + sQuestLogCurrentScene.playingEvent = 0; + sQuestLogCurrentScene.overlapTimer = 0; + sQuestLogCurrentScene.timer = GetQuestLogTextDisplayDuration(); if (gUnknown_203B044.unk_2 == 0) - gUnknown_203AE94.unk_1++; - if (gUnknown_203AE94.unk_1 > 32) + sQuestLogCurrentScene.cursor++; + if (sQuestLogCurrentScene.cursor > 32) return; DrawQuestLogSceneDescription(); } - sub_8112888(1); + TogglePlaybackStateForOverworldLock(1); // lock } -static u8 sub_8111BD4(void) +static u8 GetQuestLogTextDisplayDuration(void) { u16 i; u16 count = 0; @@ -1076,42 +958,42 @@ static u8 sub_8111BD4(void) bool8 sub_8111C2C(void) { - if (gQuestLogState != QL_STATE_2) + if (gQuestLogState != QL_STATE_PLAYBACK) return FALSE; - if (gUnknown_3005E88 == 0 || gUnknown_203AE94.unk_0_0 == 1 || gUnknown_203AE94.unk_0_0 == 2) + if (gQuestLogPlaybackState == 0 || sQuestLogCurrentScene.playbackSubstate == 1 || sQuestLogCurrentScene.playbackSubstate == 2) return TRUE; return FALSE; } void sub_8111C68(void) { - if (gUnknown_203AE94.unk_0_6 == 0) + if (sQuestLogCurrentScene.sceneEndMode == 0) { if (JOY_NEW(A_BUTTON)) { - gUnknown_203AE94.unk_0_6 = 2; - gUnknown_3005E88 = 0; - sub_81118F4(-3); + sQuestLogCurrentScene.sceneEndMode = 2; + gQuestLogPlaybackState = 0; + QuestLog_BeginFadeAtEndOfScene(-3); } else if (JOY_NEW(B_BUTTON)) { - gUnknown_203AE94.unk_0_6 = 1; - gUnknown_3005E88 = 0; + sQuestLogCurrentScene.sceneEndMode = 1; + gQuestLogPlaybackState = 0; QuestLog_SkipToEndOfPlayback(-3); } } } -bool8 sub_8111CD0(void) +bool8 QuestLogScenePlaybackIsEnding(void) { - if (gUnknown_203AE94.unk_0_6 != 0) + if (sQuestLogCurrentScene.sceneEndMode != 0) return TRUE; return FALSE; } -void sub_8111CF0(void) +void QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(void) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) DrawPreviouslyOnQuestHeader(sNumScenes); } @@ -1191,18 +1073,18 @@ static void QuestLog_WaitFadeAndCancelPlayback(void) ScriptContext2_Enable(); for (sCurrentSceneNum = sCurrentSceneNum; sCurrentSceneNum < QUEST_LOG_SCENE_COUNT; sCurrentSceneNum++) { - if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].unk_000 == 0) + if (gSaveBlock1Ptr->questLog[sCurrentSceneNum].startType == 0) break; - sub_811175C(sCurrentSceneNum, sQuestLogSceneRecordBuffer); + ReadQuestLogScriptFromSav1(sCurrentSceneNum, sQuestLogSceneRecordBuffer); } - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; QuestLog_StartFinalScene(); } } void sub_8111F14(void) { - if (gQuestLogState == QL_STATE_3) + if (gQuestLogState == QL_STATE_PLAYBACK_LAST) gUnknown_203AE90 = AllocZeroed(0x200 * sizeof(u16)); } @@ -1211,23 +1093,23 @@ void sub_8111F38(u16 a0, u16 a1) CpuSet(gPlttBufferUnfaded + a0, gUnknown_203AE90 + a0, a1); } -static bool8 sub_8111F60(void) +static bool8 FieldCB2_FinalScene(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); DrawPreviouslyOnQuestHeader(0); FieldCB_WarpExitFadeFromBlack(); - CreateTask(sub_8111F8C, 0xFF); + CreateTask(Task_FinalScene_WaitFade, 0xFF); return TRUE; } -static void sub_8111F8C(u8 taskId) +static void Task_FinalScene_WaitFade(u8 taskId) { struct Task *task = &gTasks[taskId]; if (ScriptContext2_IsEnabled() != TRUE) { FreezeObjectEvents(); - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); StopPlayerAvatar(); ScriptContext2_Enable(); task->func = Task_QuestLogScene_SavedGame; @@ -1240,7 +1122,7 @@ static void Task_QuestLogScene_SavedGame(u8 taskId) if (!gPaletteFade.active) { - if (gUnknown_203AE94.unk_0_6 != 1) + if (sQuestLogCurrentScene.sceneEndMode != 1) { GetMapNameGeneric(gStringVar1, gMapHeader.regionMapSectionId); StringExpandPlaceholders(gStringVar4, gText_QuestLog_SavedGameAtLocation); @@ -1260,7 +1142,7 @@ static void Task_WaitAtEndOfQuestLog(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (JOY_NEW(A_BUTTON | B_BUTTON) || task->tTimer >= 127 || gUnknown_203AE94.unk_0_6 == 1) + if (JOY_NEW(A_BUTTON | B_BUTTON) || task->tTimer >= 127 || sQuestLogCurrentScene.sceneEndMode == 1) { QuestLog_CloseTextWindow(); task->tTimer = 0; @@ -1310,11 +1192,11 @@ static void Task_EndQuestLog(u8 taskId) tState++; break; default: - if (gUnknown_203AE94.unk_0_6 == 1) + if (sQuestLogCurrentScene.sceneEndMode == 1) ShowMapNamePopup(TRUE); CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400); Free(gUnknown_203AE90); - gUnknown_203AE94 = (struct UnkStruct_203AE94){}; + sQuestLogCurrentScene = (struct UnkStruct_203AE94){}; sub_80696C0(); ScriptContext2_Disable(); gTextFlags.autoScroll = FALSE; @@ -1359,9 +1241,9 @@ static void sub_811229C(void) Free(buffer); } -void sub_811231C(void) +void FinishRecordingQuestLogScene(void) { - if (gQuestLogState == QL_STATE_1) + if (gQuestLogState == QL_STATE_RECORDING) { TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer); TryRecordEvent39_GoToNextScene(); @@ -1369,18 +1251,18 @@ void sub_811231C(void) sQuestLogCB = NULL; gUnknown_203AE04 = NULL; sEventRecordingPointer = NULL; - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } } -void QuestLog_OnInteractionWithSpecialNpc(void) +void QuestLog_CutRecording(void) { - if (gUnknown_3005E88 && gQuestLogState == QL_STATE_1) + if (gQuestLogPlaybackState != 0 && gQuestLogState == QL_STATE_RECORDING) { TryRecordQuestLogEntrySequence(sQuestLogSceneRecordBuffer); TryRecordEvent41_IncCursor(1); TryRecordEvent39_GoToNextScene(); - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; gQuestLogState = 0; sQuestLogCB = NULL; } @@ -1398,7 +1280,7 @@ static void SortQuestLogInSav1(void) { if (sceneNum >= QUEST_LOG_SCENE_COUNT) sceneNum = 0; - if (gSaveBlock1Ptr->questLog[sceneNum].unk_000) + if (gSaveBlock1Ptr->questLog[sceneNum].startType != 0) { buffer[count] = gSaveBlock1Ptr->questLog[sceneNum]; count++; @@ -1414,7 +1296,7 @@ void SaveQuestLogData(void) { if (MenuHelpers_LinkSomething() != TRUE) { - QuestLog_OnInteractionWithSpecialNpc(); + QuestLog_CutRecording(); SortQuestLogInSav1(); } } @@ -1553,17 +1435,17 @@ void sub_81127F8(struct FieldInput * a0) } } -static void sub_8112888(u8 a0) +static void TogglePlaybackStateForOverworldLock(u8 a0) { switch (a0) { case 1: - if (gUnknown_3005E88 == 1) - gUnknown_3005E88 = 3; + if (gQuestLogPlaybackState == 1) + gQuestLogPlaybackState = 3; // Message visible, overworld locked break; case 2: - if (gUnknown_3005E88 == 3) - gUnknown_3005E88 = 1; + if (gQuestLogPlaybackState == 3) + gQuestLogPlaybackState = 1; // Overworld unlocked break; } } @@ -1576,21 +1458,21 @@ void sub_81128BC(u8 a0) { case 1: if (r1 == 1) - gUnknown_3005E88 = 3; + gQuestLogPlaybackState = 3; else if (r1 == 2) { sCurQuestLogEntry[sQuestLogCursor].unk_4 = sNextStepDelay; sCurQuestLogEntry[sQuestLogCursor].unk_6 = 3; sQuestLogCursor++; sNextStepDelay = 0; - gUnknown_3005E88 = 4; + gQuestLogPlaybackState = 4; } break; case 2: if (r1 == 1) - gUnknown_3005E88 = 1; + gQuestLogPlaybackState = 1; else if (r1 == 2) - gUnknown_3005E88 = 2; + gQuestLogPlaybackState = 2; break; } } @@ -1602,7 +1484,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) switch (kind) { default: - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; break; case 1: sCurQuestLogEntry = entry; @@ -1618,7 +1500,7 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4; sMovementScripts[0][0] = sCurQuestLogEntry[sQuestLogCursor].unk_3; sMovementScripts[0][1] = 0xFF; - gUnknown_3005E88 = 1; + gQuestLogPlaybackState = 1; break; case 2: sCurQuestLogEntry = entry; @@ -1657,14 +1539,14 @@ static void SetUpQuestLogEntry(u8 kind, struct QuestLogEntry *entry, u16 size) sCurQuestLogEntry[sQuestLogCursor].unk_2 = 0; sCurQuestLogEntry[sQuestLogCursor].unk_3 = 0; sQuestLogCursor++; - gUnknown_3005E88 = 2; + gQuestLogPlaybackState = 2; break; } } void sub_8112B3C(void) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: break; @@ -1690,29 +1572,29 @@ void sub_8112B3C(void) *(u32 *)&gQuestLogFieldInput = ((sCurQuestLogEntry[sQuestLogCursor].unk_3 << 24) | (sCurQuestLogEntry[sQuestLogCursor].unk_2 << 16) | (sCurQuestLogEntry[sQuestLogCursor].unk_1 << 8) | (sCurQuestLogEntry[sQuestLogCursor].unk_0 << 0)); break; case 3: - gUnknown_3005E88 = 3; + gQuestLogPlaybackState = 3; break; case 0xFE: break; case 0xFF: - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; break; } - if (gUnknown_3005E88 == 0) + if (gQuestLogPlaybackState == 0) break; if (++sQuestLogCursor >= sNumEventsInLogEntry) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; break; } sNextStepDelay = sCurQuestLogEntry[sQuestLogCursor].unk_4; - } while (gUnknown_3005E88 != 3 + } while (gQuestLogPlaybackState != 3 && (sNextStepDelay == 0 || sNextStepDelay == 0xFFFF)); } } else if (sQuestLogCursor >= sNumEventsInLogEntry) { - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } break; case 2: @@ -1720,7 +1602,7 @@ void sub_8112B3C(void) { sNextStepDelay++; if (sQuestLogCursor >= sNumEventsInLogEntry) - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; } break; case 3: @@ -1737,7 +1619,7 @@ void sub_8112C9C(void) u8 sub_8112CAC(void) { - switch (gUnknown_3005E88) + switch (gQuestLogPlaybackState) { case 0: default: @@ -1809,7 +1691,7 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) s32 i; if (a0 == 0 || a0 > 2) - gUnknown_3005E88 = 0; + gQuestLogPlaybackState = 0; else { sFlagOrVarRecords = a1; @@ -1824,2547 +1706,3 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) } } } - - -// Probable file boundary, help_message.c below, quest_log.c above - - -const u16 gUnknown_84566A8[] = INCBIN_U16("graphics/unknown/unknown_84566a8.bin"); - -static const struct WindowTemplate sHelpMessageWindowTemplate = { - 0x00, 0, 15, 30, 5, 15, 0x008F -}; - -void MapNamePopupWindowIdSetDummy(void) -{ - sHelpMessageWindowId = 0xFF; -} - -u8 CreateHelpMessageWindow(void) -{ - if (sHelpMessageWindowId == 0xFF) - { - sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate); - PutWindowTilemap(sHelpMessageWindowId); - } - return sHelpMessageWindowId; -} - -void DestroyHelpMessageWindow(u8 a0) -{ - if (sHelpMessageWindowId != 0xFF) - { - FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0)); - ClearWindowTilemap(sHelpMessageWindowId); - - if (a0) - CopyWindowToVram(sHelpMessageWindowId, a0); - - RemoveWindow(sHelpMessageWindowId); - sHelpMessageWindowId = 0xFF; - } -} - -#ifdef NONMATCHING -void sub_8112F18(u8 windowId) -{ - u8 width = GetWindowAttribute(windowId, WINDOW_WIDTH); - u8 height = GetWindowAttribute(windowId, WINDOW_HEIGHT); - u8 *buffer = Alloc(32 * width * height); - u8 i, j; - u8 k; - - if (buffer != NULL) - { - for (i = 0; i < height; i++) - { - for (j = 0; j < width; j++) - { - if (i == 0) - k = 0; - else if (i == height - 1) - k = 14; - else - k = 5; - CpuCopy32( - (void *)gUnknown_84566A8 + 32 * k, // operand swap on "add" instruction - buffer + 32 * (i * width + j), - 32 - ); - } - } - CopyToWindowPixelBuffer(windowId, buffer, width * height * 32, 0); - Free(buffer); - } -} -#else -NAKED -void sub_8112F18(u8 windowId) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r10, r0\n" - "\tmovs r1, 0x3\n" - "\tbl GetWindowAttribute\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tmov r0, r10\n" - "\tmovs r1, 0x4\n" - "\tbl GetWindowAttribute\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tlsls r0, r7, 5\n" - "\tmuls r0, r6\n" - "\tbl Alloc\n" - "\tmov r8, r0\n" - "\tcmp r0, 0\n" - "\tbeq _08112FB8\n" - "\tmovs r5, 0\n" - "\tadds r0, r6, 0\n" - "\tmuls r0, r7\n" - "\tstr r0, [sp]\n" - "\tcmp r5, r7\n" - "\tbcs _08112FA2\n" - "_08112F5A:\n" - "\tmovs r4, 0\n" - "\tadds r1, r5, 0x1\n" - "\tmov r9, r1\n" - "\tcmp r4, r6\n" - "\tbcs _08112F98\n" - "\tsubs r3, r7, 0x1\n" - "_08112F66:\n" - "\tmovs r0, 0\n" - "\tcmp r5, 0\n" - "\tbeq _08112F74\n" - "\tmovs r0, 0x5\n" - "\tcmp r5, r3\n" - "\tbne _08112F74\n" - "\tmovs r0, 0xE\n" - "_08112F74:\n" - "\tlsls r0, 5\n" - "\tldr r1, _08112FC8 @ =gUnknown_84566A8\n" - "\tadds r0, r1, r0\n" - "\tadds r1, r5, 0\n" - "\tmuls r1, r6\n" - "\tadds r1, r4\n" - "\tlsls r1, 5\n" - "\tadd r1, r8\n" - "\tldr r2, _08112FCC @ =0x04000008\n" - "\tstr r3, [sp, 0x4]\n" - "\tbl CpuSet\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tldr r3, [sp, 0x4]\n" - "\tcmp r4, r6\n" - "\tbcc _08112F66\n" - "_08112F98:\n" - "\tmov r1, r9\n" - "\tlsls r0, r1, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, r7\n" - "\tbcc _08112F5A\n" - "_08112FA2:\n" - "\tldr r0, [sp]\n" - "\tlsls r2, r0, 21\n" - "\tlsrs r2, 16\n" - "\tmov r0, r10\n" - "\tmov r1, r8\n" - "\tmovs r3, 0\n" - "\tbl CopyToWindowPixelBuffer\n" - "\tmov r0, r8\n" - "\tbl Free\n" - "_08112FB8:\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08112FC8: .4byte gUnknown_84566A8\n" - "_08112FCC: .4byte 0x04000008"); -} -#endif - -static void sub_8112FD0(void) -{ - sub_8112F18(sHelpMessageWindowId); -} - -static const u8 sHelpMessageTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_DARK_GREY}; - -static void PrintHelpMessageText(const u8 *text) -{ - AddTextPrinterParameterized4(sHelpMessageWindowId, 2, 2, 5, 1, 1, sHelpMessageTextColors, -1, text); -} - -void PrintTextOnHelpMessageWindow(const u8 *text, u8 mode) -{ - sub_8112FD0(); - PrintHelpMessageText(text); - if (mode) - CopyWindowToVram(sHelpMessageWindowId, mode); -} - - -// Probable file boundary, trainer_fan_club.c below, help_message.c above - - -void ResetTrainerFanClub(void) -{ - VarSet(VAR_FANCLUB_FAN_COUNTER, 0); - VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, 0); -} - -void Script_TryLoseFansFromPlayTimeAfterLinkBattle(void) -{ - TryLoseFansFromPlayTimeAfterLinkBattle(TRAINER_FAN_CLUB); -} - -static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *fanClub) -{ - if (DidPlayerGetFirstFans(fanClub)) - { - TryLoseFansFromPlayTime(fanClub); - VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours); - } -} - -void Script_UpdateTrainerFanClubGameClear(void) -{ - UpdateTrainerFanClubGameClear(TRAINER_FAN_CLUB); -} - -static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *fanClub) -{ - if (!fanClub->gotInitialFans) - { - SetPlayerGotFirstFans(fanClub); - SetInitialFansOfPlayer(fanClub); - VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours); - FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BLACKBELT); - FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_ROCKER); - FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_WOMAN); - FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BEAUTY); - VarSet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1); - } -} - -ALIGNED(4) const u8 sCounterIncrements[] = {2, 1, 2, 1}; - -static u8 TryGainNewFanFromCounter(struct TrainerFanClub *fanClub, u8 a1) -{ - if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2) - { - if (fanClub->timer + sCounterIncrements[a1] >= 20) - { - if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 3) - { - PlayerGainRandomTrainerFan(fanClub); - fanClub->timer = 0; - } - else - fanClub->timer = 20; - } - else - fanClub->timer += sCounterIncrements[a1]; - } - - return fanClub->timer; -} - - -static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *fanClub) -{ - static const u8 sFanClubMemberIds[] = - { - FANCLUB_MEMBER2, - FANCLUB_MEMBER4, - FANCLUB_MEMBER6, - FANCLUB_MEMBER1, - FANCLUB_MEMBER8, - FANCLUB_MEMBER7, - FANCLUB_MEMBER5, - FANCLUB_MEMBER3 - }; - - u8 i; - u8 idx = 0; - - for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++) - { - if (!(GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))) - { - idx = i; - if (Random() % 2) - { - SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]); - return sFanClubMemberIds[i]; - } - } - } - - SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]); - return sFanClubMemberIds[idx]; -} - -static u8 PlayerLoseRandomTrainerFan(struct TrainerFanClub *fanClub) -{ - static const u8 sFanClubMemberIds[] = - { - FANCLUB_MEMBER6, - FANCLUB_MEMBER7, - FANCLUB_MEMBER4, - FANCLUB_MEMBER8, - FANCLUB_MEMBER5, - FANCLUB_MEMBER2, - FANCLUB_MEMBER1, - FANCLUB_MEMBER3 - }; - - u8 i; - u8 idx = 0; - - if (GetNumFansOfPlayerInTrainerFanClub(fanClub) == 1) - return 0; - - for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++) - { - if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i])) - { - idx = i; - if (Random() % 2) - { - FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]); - return sFanClubMemberIds[i]; - } - } - } - - if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx])) - FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]); - - return sFanClubMemberIds[idx]; -} - -u16 Script_GetNumFansOfPlayerInTrainerFanClub(void) -{ - return GetNumFansOfPlayerInTrainerFanClub(TRAINER_FAN_CLUB); -} - -static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *fanClub) -{ - u8 count = 0; - u8 i; - - for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++) - { - if (GET_TRAINER_FAN_CLUB_FLAG(i)) - count++; - } - - return count; -} - -void Script_TryLoseFansFromPlayTime(void) -{ - TryLoseFansFromPlayTime(TRAINER_FAN_CLUB); -} - -static void TryLoseFansFromPlayTime(struct TrainerFanClub *fanClub) -{ - u8 i = 0; - u16 timer; - - if (gSaveBlock2Ptr->playTimeHours < 999) - { - while (1) - { - if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 5) - { - VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours); - break; - } - if (i == NUM_TRAINER_FAN_CLUB_MEMBERS) - break; - - timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER); - if (gSaveBlock2Ptr->playTimeHours - timer < 12) - break; - - PlayerLoseRandomTrainerFan(fanClub); - timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER); - VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, timer + 12); - i++; - } - } -} - -bool16 Script_IsFanClubMemberFanOfPlayer(void) -{ - return IsFanClubMemberFanOfPlayer(TRAINER_FAN_CLUB); -} - -static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *fanClub) -{ - return GET_TRAINER_FAN_CLUB_FLAG(gSpecialVar_0x8004); -} - -static void SetInitialFansOfPlayer(struct TrainerFanClub *fanClub) -{ - SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER1); - SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER2); - SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER3); -} - -void Script_BufferFanClubTrainerName(void) -{ - u8 whichLinkTrainer = 0; - u8 whichNPCTrainer = 0; - - switch (gSpecialVar_0x8004) - { - case FANCLUB_MEMBER1: - whichNPCTrainer = 0; - whichLinkTrainer = 0; - break; - case FANCLUB_MEMBER2: - case FANCLUB_MEMBER3: - case FANCLUB_MEMBER4: - case FANCLUB_MEMBER8: - break; - case FANCLUB_MEMBER5: - whichNPCTrainer = 1; - whichLinkTrainer = 0; - break; - case FANCLUB_MEMBER6: - whichNPCTrainer = 0; - whichLinkTrainer = 1; - break; - case FANCLUB_MEMBER7: - whichNPCTrainer = 2; - whichLinkTrainer = 1; - break; - } - BufferFanClubTrainerName(&gSaveBlock2Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer); -} - -static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 whichLinkTrainer, u8 whichNPCTrainer) -{ - u8 *str; - const u8 *linkTrainerName = linkRecords->entries[whichLinkTrainer].name; - if (linkTrainerName[0] == EOS) - { - switch (whichNPCTrainer) - { - case 0: - StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); - break; - case 1: - StringCopy(gStringVar1, gText_LtSurge); - break; - case 2: - StringCopy(gStringVar1, gText_Koga); - break; - default: - StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); - break; - } - } - else - { - str = gStringVar1; - StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH); - str[PLAYER_NAME_LENGTH] = EOS; - if ( str[0] == EXT_CTRL_CODE_BEGIN - && str[1] == EXT_CTRL_CODE_JPN) - { - str += 2; - while (*str != EOS) - str++; - *str++ = EXT_CTRL_CODE_BEGIN; - *str++ = EXT_CTRL_CODE_ENG; - *str++ = EOS; - } - } -} - -void Special_UpdateTrainerFansAfterLinkBattle(void) -{ - UpdateTrainerFansAfterLinkBattle(TRAINER_FAN_CLUB); -} - -static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *fanClub) -{ - if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2) - { - TryLoseFansFromPlayTimeAfterLinkBattle(fanClub); - if (gBattleOutcome == B_OUTCOME_WON) - PlayerGainRandomTrainerFan(fanClub); - else - PlayerLoseRandomTrainerFan(fanClub); - } -} - -static bool8 DidPlayerGetFirstFans(struct TrainerFanClub *fanClub) -{ - return fanClub->gotInitialFans; -} - -void Script_SetPlayerGotFirstFans(void) -{ - SetPlayerGotFirstFans(TRAINER_FAN_CLUB); -} - -static void SetPlayerGotFirstFans(struct TrainerFanClub *fanClub) -{ - fanClub->gotInitialFans = TRUE; -} - -u8 Script_TryGainNewFanFromCounter(void) -{ - return TryGainNewFanFromCounter(TRAINER_FAN_CLUB, gSpecialVar_0x8004); -} - - -// Probable file boundary, quest_log_events.c below, trainer_fan_club.c above - - -static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = { - [QL_EVENT_0] = NULL, - [QL_EVENT_1] = NULL, - [QL_EVENT_2] = NULL, - [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogData_SwitchedPartyOrder, - [QL_EVENT_USED_ITEM] = BufferQuestLogData_UsedItem, - [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogData_GaveHeldItemFromPartyMenu, - [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogData_GaveHeldItemFromBagMenu, - [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogData_GaveHeldItemFromPC, - [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogData_TookHeldItem, - [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogData_SwappedHeldItem, - [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogData_SwappedHeldItemFromPC, - [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogData_UsedPkmnCenter, - [QL_EVENT_LINK_TRADED] = BufferQuestLogData_LinkTraded, - [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogData_LinkBattledSingle, - [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogData_LinkBattledDouble, - [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogData_LinkBattledMulti, - [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogData_UsedUnionRoom, - [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogData_UsedUnionRoomChat, - [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogData_LinkTradedUnionRoom, - [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogData_LinkBattledUnionRoom, - [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogData_SwitchedMonsBetweenBoxes, - [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogData_SwitchedMonsWithinBox, - [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogData_SwitchedPartyMonForPCMon, - [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogData_MovedMonBetweenBoxes, - [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogData_MovedMonWithinBox, - [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogData_WithdrewMonFromPC, - [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogData_DepositedMonInPC, - [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogData_SwitchedMultipleMons, - [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogData_DepositedItemInPC, - [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogData_WithdrewItemFromPC, - [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogData_DefeatedGymLeader, - [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogData_DefeatedWildMon, - [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogData_DefeatedEliteFourMember, - [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogData_DefeatedChampion, - [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogData_DefeatedTrainer, - [QL_EVENT_DEPARTED] = BufferQuestLogData_DepartedLocation, - [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogData_UsedFieldMove, - [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogData_BoughtItem, - [QL_EVENT_SOLD_ITEM] = BufferQuestLogData_SoldItem, - [QL_EVENT_39] = NULL, - [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogData_ObtainedItem, - [QL_EVENT_41] = NULL, - [QL_EVENT_ARRIVED] = BufferQuestLogData_ArrivedInLocation -}; - -void SetQuestLogEvent(u16 eventId, const u16 *eventData) -{ - u16 *r1; - - if (eventId == QL_EVENT_DEPARTED && gUnknown_203B048 == 2) - { - sub_811381C(); - return; - } - sub_811381C(); - if (gQuestLogState == QL_STATE_2) - return; - - if (!IS_VALID_QL_EVENT(eventId)) - return; - - if (InQuestLogDisabledLocation() == TRUE) - return; - - if (TrySetLinkQuestLogEvent(eventId, eventData) == TRUE) - return; - - if (MenuHelpers_LinkSomething() == TRUE) - return; - - if (InUnionRoom() == TRUE) - return; - - if (TrySetTrainerBattleQuestLogEvent(eventId, eventData) == TRUE) - return; - - if (IsQuestLogEventWithSpecialEncounterSpecies(eventId, eventData) == TRUE) - return; - - if (sub_81153E4(eventId, eventData) == FALSE) - return; - - if (gUnknown_3005E88 == 0) - { - if (sub_8113778(eventId, eventData) == TRUE) - return; - - if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL) - { - if (sub_81153A8(eventId, eventData) == FALSE) - return; - StartRecordingQuestLogEntry(eventId); - } - } - else if (eventId == QL_EVENT_OBTAINED_ITEM) - return; - - sub_8113B94(eventId); - if (eventId == QL_EVENT_DEFEATED_WILD_MON) - { - if (gUnknown_203AE04 == NULL) - { - gUnknown_203AE04 = sEventRecordingPointer; - r1 = sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData); - } - else - { - sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData); - return; - } - } - else - { - gUnknown_203AE04 = NULL; - r1 = sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData); - } - - if (r1 == NULL) - { - sub_811231C(); - r1 = sub_8113828(eventId, eventData); - if (r1 == NULL) - return; - } - - sEventRecordingPointer = r1; - if (gUnknown_203B048 == 0) - return; - sub_811231C(); -} - -static bool8 InQuestLogDisabledLocation(void) -{ - // In Trainer Tower - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_1F) - && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_1F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_2F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_3F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_4F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_5F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_6F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_7F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_8F) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ROOF) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_LOBBY) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR))) - return TRUE; - - // In pokemon trainer fan club - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB)) - return TRUE; - - // In E-Reader house - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_HOUSE_ROOM1) && - (gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM1) - || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM2))) - return TRUE; - - // In elevator - if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROCKET_HIDEOUT_ELEVATOR)) - || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SILPH_CO_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SILPH_CO_ELEVATOR)) - || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR)) - || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR))) - return TRUE; - - return FALSE; -} - -bool8 sub_8113748(void) -{ - if (InQuestLogDisabledLocation() != TRUE) - return FALSE; - - if (gQuestLogState == QL_STATE_2) - return TRUE; - - if (gQuestLogState == QL_STATE_1) - QuestLog_OnInteractionWithSpecialNpc(); - - return FALSE; -} - -static bool8 sub_8113778(u16 eventId, const u16 *eventData) -{ - if (eventId == QL_EVENT_USED_FIELD_MOVE || eventId == QL_EVENT_USED_PKMN_CENTER) - return TRUE; - - if (!FlagGet(FLAG_SYS_GAME_CLEAR)) - { - if (eventId == QL_EVENT_SWITCHED_PARTY_ORDER || eventId == QL_EVENT_DEFEATED_WILD_MON || sub_81137E4(eventId, eventData) == TRUE) - return TRUE; - } - - if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) - { - if (eventId == QL_EVENT_USED_ITEM - || eventId == QL_EVENT_GAVE_HELD_ITEM - || eventId == QL_EVENT_GAVE_HELD_ITEM_BAG - || eventId == QL_EVENT_GAVE_HELD_ITEM_PC - || eventId == QL_EVENT_TOOK_HELD_ITEM - || eventId == QL_EVENT_SWAPPED_HELD_ITEM - || eventId == QL_EVENT_SWAPPED_HELD_ITEM_PC - || eventId == QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON - || eventId == QL_EVENT_WITHDREW_MON_PC - || eventId == QL_EVENT_DEPOSITED_MON_PC) - return TRUE; - } - - return FALSE; -} - -static bool8 sub_81137E4(u16 eventId, const u16 *eventData) -{ - if (eventId == QL_EVENT_DEFEATED_TRAINER) - { - u8 trainerClass = gTrainers[*eventData].trainerClass; - if ( trainerClass == CLASS_RIVAL - || trainerClass == CLASS_RIVAL_2 - || trainerClass == CLASS_CHAMPION_2 - || trainerClass == CLASS_BOSS) - return FALSE; - return TRUE; - } - return FALSE; -} - -static void sub_811381C(void) -{ - gUnknown_203B048 = 0; -} - -static u16 *sub_8113828(u16 eventId, const u16 *eventData) -{ - if (sub_8113778(eventId, eventData) == TRUE) - return NULL; - - if (sub_81153A8(eventId, eventData) == FALSE) - return NULL; - - StartRecordingQuestLogEntry(eventId); - sub_8113B94(eventId); - - if (eventId == QL_EVENT_DEFEATED_WILD_MON) - gUnknown_203AE04 = sEventRecordingPointer; - else - gUnknown_203AE04 = NULL; - - return sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData); -} - -static bool8 TrySetLinkQuestLogEvent(u16 eventId, const u16 *eventData) -{ - if (!IS_LINK_QL_EVENT(eventId)) - return FALSE; - - sub_81138F8(); - gUnknown_203B024.unk_00 = eventId; - - if (eventId != QL_EVENT_USED_UNION_ROOM && eventId != QL_EVENT_USED_UNION_ROOM_CHAT) - { - if (eventId == QL_EVENT_LINK_TRADED || eventId == QL_EVENT_LINK_TRADED_UNION) - memcpy(gUnknown_203B024.unk_04, eventData, 12); - else - memcpy(gUnknown_203B024.unk_04, eventData, 24); - } - return TRUE; -} - -void sub_81138F8(void) -{ - gUnknown_203B024 = (struct UnkStruct_203B024){}; -} - -void QuestLog_StartRecordingInputsAfterDeferredEvent(void) -{ - if (gUnknown_203B024.unk_00 != QL_EVENT_0) - { - u16 *resp; - gUnknown_203B04A = 0; - StartRecordingQuestLogEntry(gUnknown_203B024.unk_00); - resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04); - sEventRecordingPointer = resp; - sub_81138F8(); - } -} - -static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData) -{ - if (eventId != QL_EVENT_DEFEATED_TRAINER - && eventId != QL_EVENT_DEFEATED_GYM_LEADER - && eventId != QL_EVENT_DEFEATED_E4_MEMBER - && eventId != QL_EVENT_DEFEATED_CHAMPION) - return FALSE; - - sub_81138F8(); - if (gUnknown_3005E88 != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || sub_81137E4(eventId, eventData) != TRUE) - { - gUnknown_203B024.unk_00 = eventId; - memcpy(gUnknown_203B024.unk_04, eventData, 8); - } - return TRUE; -} - -void sub_81139BC(void) -{ - if (gUnknown_203B024.unk_00 != QL_EVENT_0) - { - u16 *resp; - if (gUnknown_3005E88 == 0) - { - gUnknown_203B04A = 0; - StartRecordingQuestLogEntry(gUnknown_203B024.unk_00); - } - sub_8113B94(gUnknown_203B024.unk_00); - resp = sQuestLogStorageCBs[gUnknown_203B024.unk_00](sEventRecordingPointer, gUnknown_203B024.unk_04); - sEventRecordingPointer = resp; - TryRecordEvent41_IncCursor(1); - sub_81138F8(); - sub_811231C(); - } -} - -static void TryRecordEvent41_IncCursor(u16 a0) -{ - sEventRecordingPointer = TryRecordEvent41(sEventRecordingPointer, a0); - sQuestLogCursor++; -} - -static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16 eventId, const u16 *eventData) -{ - if (eventId != QL_EVENT_DEFEATED_WILD_MON) - return FALSE; - - if (IsSpeciesFromSpecialEncounter(eventData[0]) == TRUE) - return TRUE; - - if (IsSpeciesFromSpecialEncounter(eventData[1]) == TRUE) - return TRUE; - - return FALSE; -} - -static const u16 *(*const sQuestLogEventTextBufferCBs[])(const u16 *) = { - [QL_EVENT_0] = NULL, - [QL_EVENT_1] = NULL, - [QL_EVENT_2] = NULL, - [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogText_SwitchedPartyOrder, - [QL_EVENT_USED_ITEM] = BufferQuestLogText_UsedItem, - [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogText_GaveHeldItemFromPartyMenu, - [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogText_GaveHeldItemFromBagMenu, - [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogText_GaveHeldItemFromPC, - [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogText_TookHeldItem, - [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogText_SwappedHeldItem, - [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogText_SwappedHeldItemFromPC, - [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogText_UsedPkmnCenter, - [QL_EVENT_LINK_TRADED] = BufferQuestLogText_LinkTraded, - [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogText_LinkBattledSingle, - [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogText_LinkBattledDouble, - [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogText_LinkBattledMulti, - [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogText_UsedUnionRoom, - [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogText_UsedUnionRoomChat, - [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogText_LinkTradedUnionRoom, - [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogText_LinkBattledUnionRoom, - [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogText_SwitchedMonsBetweenBoxes, - [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogText_SwitchedMonsWithinBox, - [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogText_SwitchedPartyMonForPCMon, - [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogText_MovedMonBetweenBoxes, - [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogText_MovedMonWithinBox, - [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogText_WithdrewMonFromPC, - [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogText_DepositedMonInPC, - [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogText_SwitchedMultipleMons, - [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogText_DepositedItemInPC, - [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogText_WithdrewItemFromPC, - [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogText_DefeatedGymLeader, - [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogText_DefeatedWildMon, - [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogText_DefeatedEliteFourMember, - [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogText_DefeatedChampion, - [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogText_DefeatedTrainer, - [QL_EVENT_DEPARTED] = BufferQuestLogText_DepartedLocation, - [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogText_UsedFieldMove, - [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogText_BoughtItem, - [QL_EVENT_SOLD_ITEM] = BufferQuestLogText_SoldItem, - [QL_EVENT_39] = NULL, - [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogText_ObtainedItem, - [QL_EVENT_41] = NULL, - [QL_EVENT_ARRIVED] = BufferQuestLogText_ArrivedInLocation -}; - -static const u8 sQuestLogEventCmdSizes[] = { - [QL_EVENT_0] = 0x08, - [QL_EVENT_1] = 0x08, - [QL_EVENT_2] = 0x08, - [QL_EVENT_SWITCHED_PARTY_ORDER] = 0x08, - [QL_EVENT_USED_ITEM] = 0x0a, - [QL_EVENT_GAVE_HELD_ITEM] = 0x08, - [QL_EVENT_GAVE_HELD_ITEM_BAG] = 0x08, - [QL_EVENT_GAVE_HELD_ITEM_PC] = 0x08, - [QL_EVENT_TOOK_HELD_ITEM] = 0x08, - [QL_EVENT_SWAPPED_HELD_ITEM] = 0x0a, - [QL_EVENT_SWAPPED_HELD_ITEM_PC] = 0x0a, - [QL_EVENT_USED_PKMN_CENTER] = 0x04, - [QL_EVENT_LINK_TRADED] = 0x10, - [QL_EVENT_LINK_BATTLED_SINGLE] = 0x0c, - [QL_EVENT_LINK_BATTLED_DOUBLE] = 0x0c, - [QL_EVENT_LINK_BATTLED_MULTI] = 0x1a, - [QL_EVENT_USED_UNION_ROOM] = 0x04, - [QL_EVENT_USED_UNION_ROOM_CHAT] = 0x04, - [QL_EVENT_LINK_TRADED_UNION] = 0x10, - [QL_EVENT_LINK_BATTLED_UNION] = 0x0c, - [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = 0x0a, - [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = 0x0a, - [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = 0x0a, - [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = 0x08, - [QL_EVENT_MOVED_MON_WITHIN_BOX] = 0x08, - [QL_EVENT_WITHDREW_MON_PC] = 0x08, - [QL_EVENT_DEPOSITED_MON_PC] = 0x08, - [QL_EVENT_SWITCHED_MULTIPLE_MONS] = 0x06, - [QL_EVENT_DEPOSITED_ITEM_PC] = 0x06, - [QL_EVENT_WITHDREW_ITEM_PC] = 0x06, - [QL_EVENT_DEFEATED_GYM_LEADER] = 0x0c, - [QL_EVENT_DEFEATED_WILD_MON] = 0x0c, - [QL_EVENT_DEFEATED_E4_MEMBER] = 0x0c, - [QL_EVENT_DEFEATED_CHAMPION] = 0x0a, - [QL_EVENT_DEFEATED_TRAINER] = 0x0c, - [QL_EVENT_DEPARTED] = 0x06, - [QL_EVENT_USED_FIELD_MOVE] = 0x08, - [QL_EVENT_BOUGHT_ITEM] = 0x0e, - [QL_EVENT_SOLD_ITEM] = 0x0e, - [QL_EVENT_39] = 0x02, - [QL_EVENT_OBTAINED_ITEM] = 0x08, - [QL_EVENT_41] = 0x04, - [QL_EVENT_ARRIVED] = 0x06 -}; - -static u16 *QuestLog_SkipCommand(u16 *curPtr, u16 **prevPtr_p) -{ - u16 eventId = curPtr[0] & 0xfff; - u16 cnt = curPtr[0] >> 12; - - if (eventId == QL_EVENT_DEFEATED_CHAMPION) - cnt = 0; - - if (!IS_VALID_QL_EVENT(eventId)) - return NULL; - - *prevPtr_p = curPtr; - return sQuestLogEventCmdSizes[eventId] + (sQuestLogEventCmdSizes[eventId] - 4) * cnt + (void *)curPtr; -} - -static void sub_8113ABC(const u16 *a0) -{ - const u8 *r2 = (const u8 *)(a0 + 2); - if ((a0[0] & 0xFFF) != QL_EVENT_DEPARTED) - gUnknown_203B04A = 0; - else - gUnknown_203B04A = r2[1] + 1; -} - -static bool8 sub_8113AE8(const u16 *a0) -{ -#ifndef NONMATCHING - register const u16 *r0 asm("r0") = a0; -#else - const u16 *r0 = a0; -#endif - - if (r0 == NULL || r0[1] > sQuestLogCursor) - return FALSE; - - sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0); - gUnknown_203B044.unk_0 = a0[0]; - gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12; - if (gUnknown_203B044.unk_1 != 0) - gUnknown_203B044.unk_2 = 1; - return TRUE; -} - -static bool8 sub_8113B44(const u16 *a0) -{ - if (gUnknown_203B044.unk_2 == 0) - return FALSE; - - sQuestLogEventTextBufferCBs[gUnknown_203B044.unk_0](a0); - gUnknown_203B044.unk_2++; - if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1) - sub_8113B88(); - return TRUE; -} - -static void sub_8113B88(void) -{ - gUnknown_203B044 = (struct UnkStruct_203B044){}; -} - -static void sub_8113B94(u16 eventId) -{ - if (gUnknown_203B044.unk_0 != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor) - { - gUnknown_203B044.unk_0 = eventId; - gUnknown_203B044.unk_1 = 0; - gUnknown_203B044.unk_2 = sQuestLogCursor; - } - else if (gUnknown_203B044.unk_1 < 5) - gUnknown_203B044.unk_1++; -} - -static void sub_8113BD8(void) -{ - sNewlyEnteredMap = FALSE; - gUnknown_203B04A = 0; - gUnknown_203B04B = FALSE; -} - -static u16 *TryRecordEvent39_NoParams(u16 *a0) -{ - if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39])) - return NULL; - a0[0] = QL_EVENT_39; - return a0 + 1; -} - -static u16 *sub_8113C20(u16 *a0, struct QuestLogEntry * a1) -{ - if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39])) - return NULL; - a1->unk_6 = 0xFF; - a1->unk_4 = 0; - a1->unk_0 = 0; - a1->unk_1 = 0; - a1->unk_2 = 0; - a1->unk_3 = 0; - return a0 + 1; -} - -static u16 *TryRecordEvent41(u16 *a0, u16 a1) -{ - if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41])) - return NULL; - a0[0] = QL_EVENT_41; - a0[1] = a1; - return a0 + 2; -} - -static u16 *sub_8113C8C(u16 *a0, struct QuestLogEntry * a1) -{ - if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41])) - return NULL; - a1->unk_6 = 0xFE; - a1->unk_4 = a0[1]; - a1->unk_0 = 0; - a1->unk_1 = 0; - a1->unk_2 = 0; - a1->unk_3 = 0; - return a0 + 2; -} - -static u16 *sub_8113CC8(u16 *a0, struct QuestLogEntry * a1) -{ - u8 *r6 = (u8 *)a0 + 4; - - if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0])) - return NULL; - a0[0] = 0; - a0[1] = a1->unk_4; - r6[0] = a1->unk_0; - r6[1] = a1->unk_1; - r6[2] = a1->unk_2; - r6[3] = a1->unk_3; - return (u16 *)(r6 + 4); -} - -static u16 *sub_8113D08(u16 *a0, struct QuestLogEntry * a1) -{ - u8 *r6 = (u8 *)a0 + 4; - - if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0])) - return NULL; - a1->unk_6 = 2; - a1->unk_4 = a0[1]; - a1->unk_0 = r6[0]; - a1->unk_1 = r6[1]; - a1->unk_2 = r6[2]; - a1->unk_3 = r6[3]; - return (u16 *)(r6 + 4); -} - -static u16 *sub_8113D48(u16 *a0, struct QuestLogEntry * a1) -{ - u16 *r4 = a0; - u8 *r6 = (u8 *)a0 + 4; - - if (!WillCommandOfSizeFitInSav1Record(r4, sQuestLogEventCmdSizes[QL_EVENT_2])) - return NULL; - if (a1->unk_6 == 0) - r4[0] = 2; - else - r4[0] = 1; - r4[1] = a1->unk_4; - r6[0] = a1->unk_0; - r6[1] = a1->unk_1; - r6[2] = a1->unk_2; - r6[3] = a1->unk_3; - return (u16 *)(r6 + 4); -} - -static u16 *sub_8113D94(u16 *a0, struct QuestLogEntry * a1) -{ - u16 *r5 = a0; - u8 *r6 = (u8 *)a0 + 4; - - if (!WillCommandOfSizeFitInSav1Record(r5, sQuestLogEventCmdSizes[QL_EVENT_2])) - return NULL; - if (r5[0] == 2) - a1->unk_6 = 0; - else - a1->unk_6 = 1; - a1->unk_4 = r5[1]; - a1->unk_0 = r6[0]; - a1->unk_1 = r6[1]; - a1->unk_2 = r6[2]; - a1->unk_3 = r6[3]; - return (u16 *)(r6 + 4); -} - -u16 *sub_8113DE0(u16 eventId, u16 *a1) -{ - u8 cmdSize; - u16 *r5; - u8 r4; - u8 r1; - - if (gUnknown_203B044.unk_1 == 0) - cmdSize = sQuestLogEventCmdSizes[eventId]; - else - cmdSize = sQuestLogEventCmdSizes[eventId] - 4; - if (!sub_8110944(a1, cmdSize)) - return NULL; - - r5 = (void *)a1; - - if (gUnknown_203B044.unk_1 != 0) - r5 = (void *)r5 - (gUnknown_203B044.unk_1 * cmdSize + 4); - - if (gUnknown_203B044.unk_1 == 5) - { - for (r4 = 0; r4 < 4; r4++) - { - memcpy( - (void *)r5 + (r4 * cmdSize + 4), - (void *)r5 + ((r4 + 1) * cmdSize + 4), - cmdSize - ); - } - r1 = 4; - } - else - r1 = gUnknown_203B044.unk_1; - - r5[0] = eventId + (r1 << 12); - r5[1] = sQuestLogCursor; - r5 = (void *)r5 + (r1 * cmdSize + 4); - return r5; -} - -static const u16 *sub_8113E88(u16 eventId, const u16 *eventData) -{ - eventData = (const void *)eventData + (gUnknown_203B044.unk_2 * (sQuestLogEventCmdSizes[eventId] - 4) + 4); - return eventData; -} - -static void QuestLog_GetSpeciesName(u16 species, u8 *dest, u8 stringVarId) -{ - if (dest != NULL) - { - if (species != SPECIES_EGG) - GetSpeciesName(dest, species); - else - StringCopy(dest, gText_EggNickname); - } - else - { - if (species != SPECIES_EGG) - DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gSpeciesNames[species]); - else - DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gText_EggNickname); - } -} - -static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *a0, const u16 *eventData) -{ - u16 *r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_ORDER, a0); - if (r2 == NULL) - return NULL; - - r2[0] = eventData[0]; - r2[1] = eventData[1]; - return r2 + 2; -} - -static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_PARTY_ORDER, eventData); - QuestLog_GetSpeciesName(r4[0], gStringVar1, 0); - QuestLog_GetSpeciesName(r4[1], gStringVar2, 0); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchMon1WithMon2); - r4 += 2; - return r4; -} - -static u16 *BufferQuestLogData_UsedItem(u16 *a0, const u16 *eventData) -{ - u16 *r2 = sub_8113DE0(QL_EVENT_USED_ITEM, a0); - if (r2 == NULL) - return NULL; - - r2[0] = eventData[0]; - r2[1] = eventData[2]; - r2[2] = eventData[3]; - - if (eventData[0] == ITEM_ESCAPE_ROPE) - gUnknown_203B048 = 2; - - return r2 + 3; -} - -static const u16 *BufferQuestLogText_UsedItem(const u16 *eventData) -{ - const u16 *r5 = sub_8113E88(QL_EVENT_USED_ITEM, eventData); - - switch (ItemId_GetPocket(r5[0])) - { - case POCKET_ITEMS: - case POCKET_POKE_BALLS: - case POCKET_BERRY_POUCH: - StringCopy(gStringVar1, ItemId_GetName(r5[0])); - if (r5[0] == ITEM_ESCAPE_ROPE) - { - GetMapNameGeneric(gStringVar2, (u8)r5[2]); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedEscapeRope); - } - else if (r5[1] != 0xFFFF) - { - QuestLog_GetSpeciesName(r5[1], gStringVar2, 0); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedItemOnMonAtThisLocation); - } - else - { - StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheItem); - } - break; - case POCKET_KEY_ITEMS: - StringCopy(gStringVar1, ItemId_GetName(r5[0])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheKeyItem); - break; - case POCKET_TM_CASE: - QuestLog_GetSpeciesName(r5[1], gStringVar1, 0); - StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]); - if (r5[2] != 0xFFFF) - { - StringCopy(gStringVar3, gMoveNames[r5[2]]); - if (r5[0] > ITEM_TM50) - StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithHM); - else - StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithTM); - } - else - { - if (r5[0] > ITEM_TM50) - StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromHM); - else - StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromTM); - } - break; - } - return r5 + 3; -} - -u16 *BufferQuestLogData_GiveTakeHeldItem(u16 eventId, u16 *a1, const u16 *eventData) -{ - u16 *r1 = sub_8113DE0(eventId, a1); - if (r1 == NULL) - return NULL; - - r1[0] = eventData[0]; - r1[1] = eventData[2]; - return r1 + 2; -} - -static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *a0, const u16 *eventData) -{ - return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM, a0, eventData); -} - -static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM, eventData); - QuestLog_GetSpeciesName(r4[1], gStringVar1, 0); - StringCopy(gStringVar2, ItemId_GetName(r4[0])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem); - r4 += 2; - return r4; -} - -static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *a0, const u16 *eventData) -{ - return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_BAG, a0, eventData); -} - -static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_BAG, eventData); - QuestLog_GetSpeciesName(r4[1], gStringVar1, 0); - StringCopy(gStringVar2, ItemId_GetName(r4[0])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem2); - r4 += 2; - return r4; -} - -static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *a0, const u16 *eventData) -{ - return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_PC, a0, eventData); -} - -static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_PC, eventData); - - QuestLog_GetSpeciesName(r4[1], gStringVar2, 0); - StringCopy(gStringVar1, ItemId_GetName(r4[0])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItemFromPC); - r4 += 2; - return r4; -} - -static u16 *BufferQuestLogData_TookHeldItem(u16 *a0, const u16 *eventData) -{ - return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_TOOK_HELD_ITEM, a0, eventData); -} - -static const u16 *BufferQuestLogText_TookHeldItem(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_TOOK_HELD_ITEM, eventData); - - QuestLog_GetSpeciesName(r4[1], gStringVar1, 0); - StringCopy(gStringVar2, ItemId_GetName(r4[0])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_TookHeldItemFromMon); - r4 += 2; - return r4; -} - -u16 *BufferQuestLogData_SwappedHeldItem_(u16 eventId, u16 *a1, const u16 *eventData) -{ - u16 *r1 = sub_8113DE0(eventId, a1); - if (r1 == NULL) - return NULL; - - r1[0] = eventData[0]; - r1[1] = eventData[1]; - r1[2] = eventData[2]; - return r1 + 3; -} - -static u16 *BufferQuestLogData_SwappedHeldItem(u16 *a0, const u16 *eventData) -{ - return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM, a0, eventData); -} - -static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM, eventData); - QuestLog_GetSpeciesName(r4[2], gStringVar1, 0); - StringCopy(gStringVar2, ItemId_GetName(r4[0])); // Item taken - StringCopy(gStringVar3, ItemId_GetName(r4[1])); // Item given - StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemsOnMon); - r4 += 3; - return r4; -} - -static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *a0, const u16 *eventData) -{ - return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM_PC, a0, eventData); -} - -static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM_PC, eventData); - QuestLog_GetSpeciesName(r4[2], gStringVar2, 0); - StringCopy(gStringVar3, ItemId_GetName(r4[0])); - StringCopy(gStringVar1, ItemId_GetName(r4[1])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemFromPC); - r4 += 3; - return r4; -} - -static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData) -{ - u16 *r4 = a0; - if (gUnknown_203B044.unk_0 == QL_EVENT_USED_PKMN_CENTER && gUnknown_203B044.unk_1 != 0) - return r4; - - if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_USED_PKMN_CENTER])) - return NULL; - - r4[0] = QL_EVENT_USED_PKMN_CENTER; - r4[1] = sQuestLogCursor; - return r4 + 2; -} - -static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *a0) -{ - StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonsWereFullyRestoredAtCenter); - a0 += 2; - return a0; -} - -static u16 *BufferQuestLogData_LinkTraded(u16 *a0, const u16 *eventData) -{ - u16 *r4 = a0 + 4; - - a0[0] = QL_EVENT_LINK_TRADED; - a0[1] = sQuestLogCursor; - a0[2] = eventData[0]; - a0[3] = eventData[1]; - eventData += 2; - memcpy(r4, eventData, 7); - r4 += 4; - return r4; -} - -static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0) -{ - const u16 *r6 = a0 + 4; - - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); - memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); - - BufferLinkPartnersName(gStringVar1); - QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received - QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); // Mon sent - StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForPersonsMon2); - r6 += 4; - return r6; -} - -static const u8 *const sDefeatedOpponentFlavorTexts[] = { - gText_QuestLog_Handily, - gText_QuestLog_Tenaciously, - gText_QuestLog_Somehow -}; - -static const u8 *const sDefeatedChampionFlavorTexts[] = { - gText_QuestLog_Coolly, - gText_QuestLog_Somehow, - gText_QuestLog_Barely -}; - -static const u8 *const sBattleOutcomeTexts[] = { - gText_QuestLog_Win, - gText_QuestLog_Loss, - gText_QuestLog_Draw -}; - -static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData) -{ - a0[0] = QL_EVENT_LINK_BATTLED_SINGLE; - a0[1] = sQuestLogCursor; - *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); - a0 += 6; - return a0; -} - -static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0) -{ - DynamicPlaceholderTextUtil_Reset(); - - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); - BufferLinkPartnersName(gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SingleBattleWithPersonResultedInOutcome); - a0 += 6; - return a0; -} - -static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData) -{ - a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE; - a0[1] = sQuestLogCursor; - *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); - a0 += 6; - return a0; -} - -static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0) -{ - DynamicPlaceholderTextUtil_Reset(); - - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); - BufferLinkPartnersName(gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DoubleBattleWithPersonResultedInOutcome); - a0 += 6; - return a0; -} - -static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData) -{ - a0[0] = QL_EVENT_LINK_BATTLED_MULTI; - a0[1] = sQuestLogCursor; - *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); - memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH); - memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH); - a0 += 13; - return a0; -} - -static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0) -{ - DynamicPlaceholderTextUtil_Reset(); - - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); - memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1); - memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1); - StringCopy7(gStringVar1, (const u8 *)a0 + 5); - StringCopy7(gStringVar2, (const u8 *)a0 + 12); - StringCopy7(gStringVar3, (const u8 *)a0 + 19); - BufferLinkPartnersName(gStringVar1); - BufferLinkPartnersName(gStringVar2); - BufferLinkPartnersName(gStringVar3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); // partner - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); // opponent 1 - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3); // opponent 2 - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sBattleOutcomeTexts[((const u8 *)a0)[4]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MultiBattleWithPeopleResultedInOutcome); - a0 += 13; - return a0; -} - -static u16 *BufferQuestLogData_UsedUnionRoom(u16 *a0, const u16 *eventData) -{ - a0[0] = QL_EVENT_USED_UNION_ROOM; - a0[1] = sQuestLogCursor; - return a0 + 2; -} - -static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *a0) -{ - StringExpandPlaceholders(gStringVar4, gText_QuestLog_MingledInUnionRoom); - a0 += 2; - return a0; -} - -static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *a0, const u16 *eventData) -{ - a0[0] = QL_EVENT_USED_UNION_ROOM_CHAT; - a0[1] = sQuestLogCursor; - return a0 + 2; -} - -static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *a0) -{ - StringExpandPlaceholders(gStringVar4, gText_QuestLog_ChattedWithManyTrainers); - a0 += 2; - return a0; -} - -static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData) -{ - u8 *r4 = (u8 *)(a0 + 4); - a0[0] = QL_EVENT_LINK_TRADED_UNION; - a0[1] = sQuestLogCursor; - a0[2] = eventData[0]; - a0[3] = eventData[1]; - memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH); - r4 += 8; - return (u16 *)r4; -} - -static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0) -{ - const u8 *r6 = (const u8 *)(a0 + 4); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); - memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); - BufferLinkPartnersName(gStringVar1); - QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); - QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForTrainersMon2); - r6 += 8; - return (const u16 *)r6; -} - -static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventData) -{ - a0[0] = QL_EVENT_LINK_BATTLED_UNION; - a0[1] = sQuestLogCursor; - *(u8 *)&a0[2] = *(const u8 *)&eventData[0]; - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); - a0 += 6; - return a0; -} - -static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0) -{ - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); - BufferLinkPartnersName(gStringVar1); - StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_BattledTrainerEndedInOutcome); - a0 += 6; - return a0; -} - -static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - a0[1] = eventData[1]; - *((u8 *)a0 + 4) = *((const u8 *)eventData + 4); - *((u8 *)a0 + 5) = *((const u8 *)eventData + 5); - return a0 + 3; -} - -static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, eventData); - boxIdxs = (const u8 *)eventData + 4; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1])); - QuestLog_GetSpeciesName(eventData[1], NULL, 3); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsBetweenBoxes); - return eventData + 3; -} - -static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - a0[1] = eventData[1]; - *((u8 *)a0 + 4) = *((const u8 *)eventData + 4); - return a0 + 3; -} - -static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, eventData); - boxIdxs = (const u8 *)eventData + 4; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - QuestLog_GetSpeciesName(eventData[1], NULL, 2); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsWithinBox); - return eventData + 3; -} - -static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *a0, const u16 *eventData) -{ - u16 *r2; - u16 *ret; - r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, a0); - if (r2 == NULL) - return NULL; - ret = r2 + 2; - if (*((const u8 *)eventData + 4) == TOTAL_BOXES_COUNT) - { - r2[0] = eventData[1]; - r2[1] = eventData[0]; - *((u8 *)r2 + 4) = *((const u8 *)eventData + 5); - } - else - { - r2[0] = eventData[0]; - r2[1] = eventData[1]; - *((u8 *)r2 + 4) = *((const u8 *)eventData + 4); - } - return ret + 1; -} - -static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, eventData); - boxIdxs = (const u8 *)eventData + 4; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - QuestLog_GetSpeciesName(eventData[1], NULL, 2); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedPartyMonForPCMon); - return eventData + 3; -} - -static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *a0, const u16 *eventData) -{ - u16 *r2; - u16 *ret; - r2 = sub_8113DE0(QL_EVENT_MOVED_MON_BETWEEN_BOXES, a0); - if (r2 == NULL) - return NULL; - r2[0] = eventData[0]; - ret = r2 + 1; - *((u8 *)ret + 0) = *((const u8 *)eventData + 4); - *((u8 *)ret + 1) = *((const u8 *)eventData + 5); - return ret + 1; -} - -static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_MOVED_MON_BETWEEN_BOXES, eventData); - boxIdxs = (const u8 *)eventData + 2; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1])); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonToNewBox); - return (const u16 *)boxIdxs + 1; -} - -static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *a0, const u16 *eventData) -{ - u16 *r2; - r2 = sub_8113DE0(QL_EVENT_MOVED_MON_WITHIN_BOX, a0); - if (r2 == NULL) - return NULL; - r2[0] = eventData[0]; - *((u8 *)r2 + 2) = *((const u8 *)eventData + 4); - return r2 + 2; -} - -static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_MOVED_MON_WITHIN_BOX, eventData); - boxIdxs = (const u8 *)eventData + 2; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonWithinBox); - return (const u16 *)boxIdxs + 1; -} - -static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *a0, const u16 *eventData) -{ - u16 *r2; - r2 = sub_8113DE0(QL_EVENT_WITHDREW_MON_PC, a0); - if (r2 == NULL) - return NULL; - r2[0] = eventData[0]; - *((u8 *)r2 + 2) = *((const u8 *)eventData + 4); - return r2 + 2; -} - -static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_WITHDREW_MON_PC, eventData); - boxIdxs = (const u8 *)eventData + 2; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewMonFromPC); - return (const u16 *)boxIdxs + 1; -} - -static u16 *BufferQuestLogData_DepositedMonInPC(u16 *a0, const u16 *eventData) -{ - u16 *r2; - r2 = sub_8113DE0(QL_EVENT_DEPOSITED_MON_PC, a0); - if (r2 == NULL) - return NULL; - r2[0] = eventData[0]; - *((u8 *)r2 + 2) = *((const u8 *)eventData + 4); - return r2 + 2; -} - -static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *eventData) -{ - const u8 *boxIdxs; - eventData = sub_8113E88(QL_EVENT_DEPOSITED_MON_PC, eventData); - boxIdxs = (const u8 *)eventData + 2; - DynamicPlaceholderTextUtil_Reset(); - QuestLog_GetSpeciesName(eventData[0], NULL, 0); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(boxIdxs[0])); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DepositedMonInPC); - return (const u16 *)boxIdxs + 1; -} - -static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *a0, const u16 *eventData) -{ - u16 *r2; - r2 = sub_8113DE0(QL_EVENT_SWITCHED_MULTIPLE_MONS, a0); - if (r2 == NULL) - return NULL; - *((u8 *)r2 + 0) = *((const u8 *)eventData + 4); - *((u8 *)r2 + 1) = *((const u8 *)eventData + 5); - return r2 + 1; -} - -static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_MULTIPLE_MONS, eventData); - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(*((const u8 *)r4 + 0))); - if (*((const u8 *)r4 + 0) == *((const u8 *)r4 + 1)) - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_QuestLog_ADifferentSpot); - else - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(*((const u8 *)r4 + 1))); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMultipleMons); - return r4 + 1; -} - -static u16 *BufferQuestLogData_DepositedItemInPC(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_DEPOSITED_ITEM_PC, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - return a0 + 1; -} - -static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_DEPOSITED_ITEM_PC, eventData); - CopyItemName(r4[0], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_StoredItemInPC); - return r4 + 1; -} - -static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_WITHDREW_ITEM_PC, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - return a0 + 1; -} - -static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_WITHDREW_ITEM_PC, eventData); - CopyItemName(r4[0], gStringVar1); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewItemFromPC); - return r4 + 1; -} - -u16 *BufferQuestLogData_DefeatedTrainer_(u16 eventId, u16 *a1, const u16 *a2) -{ - a1 = sub_8113DE0(eventId, a1); - if (a1 == NULL) - return NULL; - a1[0] = a2[1]; - a1[1] = a2[2]; - a1[2] = a2[0]; - *((u8 *)a1 + 6) = *((const u8 *)a2 + 7); - *((u8 *)a1 + 7) = *((const u8 *)a2 + 6); - return a1 + 4; -} - -static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *a0, const u16 *eventData) -{ - gUnknown_203B048 = 1; - return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_GYM_LEADER, a0, eventData); -} - -static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *eventData) -{ - const u8 *r6; - eventData = sub_8113E88(QL_EVENT_DEFEATED_GYM_LEADER, eventData); - r6 = (const u8 *)eventData + 6; - DynamicPlaceholderTextUtil_Reset(); - GetMapNameGeneric(gStringVar1, r6[0]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[eventData[2]].trainerName); - QuestLog_GetSpeciesName(eventData[0], 0, 2); - QuestLog_GetSpeciesName(eventData[1], 0, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnGymLeadersMonWithMonAndWon); - return eventData + 4; -} - -static u16 *BufferQuestLogData_DefeatedWildMon(u16 *a0, const u16 *eventData) -{ - u16 *r4 = a0; - u8 *r5 = (u8 *)a0 + 8; - if (!sub_8110944(r4, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON])) - return NULL; - if (r5[0] == 0 && r5[1] == 0) - { - r4[0] = QL_EVENT_DEFEATED_WILD_MON; - r4[1] = sQuestLogCursor; - } - if (eventData[0]) - r4[2] = eventData[0]; - if (eventData[1]) - r4[3] = eventData[1]; - if (eventData[0] && r5[0] != 0xFF) - r5[0]++; - if (eventData[1] && r5[1] != 0xFF) - r5[1]++; - r5[2] = *((const u8 *)eventData + 4); - return (u16 *)(r5 + 4); -} - -static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *a0) -{ - const u8 *data; - if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON])) - return NULL; - - data = (const u8 *)a0 + 8; - DynamicPlaceholderTextUtil_Reset(); - GetMapNameGeneric(gStringVar1, data[2]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - QuestLog_GetSpeciesName(a0[2], NULL, 1); - ConvertIntToDecimalStringN(gStringVar2, data[0], STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); - QuestLog_GetSpeciesName(a0[3], NULL, 3); - ConvertIntToDecimalStringN(gStringVar3, data[1], STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gSaveBlock2Ptr->playerName); - if (data[0] == 0) - { - if (data[1] == 1) - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMon); - else - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMons); - } - else if (data[1] == 0) - { - if (data[0] == 1) - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMon); - else - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMons); - } - else if (data[0] == 1) - { - if (data[1] == 1) - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMon); - else - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMons); - } - else - { - if (data[1] == 1) - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMon); - else - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMons); - } - return (const u16 *)(data + 4); -} - -static bool8 IsSpeciesFromSpecialEncounter(u16 species) -{ - switch (species) - { - case SPECIES_SNORLAX: - case SPECIES_ARTICUNO: - case SPECIES_ZAPDOS: - case SPECIES_MOLTRES: - case SPECIES_MEWTWO: - case SPECIES_LUGIA: - case SPECIES_HO_OH: - case SPECIES_DEOXYS: - return TRUE; - } - return FALSE; -} - -static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *a0, const u16 *eventData) -{ - gUnknown_203B048 = 1; - return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_E4_MEMBER, a0, eventData); -} - -static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *eventData) -{ - const u8 *r5; - eventData = sub_8113E88(QL_EVENT_DEFEATED_E4_MEMBER, eventData); - r5 = (const u8 *)eventData + 6; - DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gTrainers[eventData[2]].trainerName); - QuestLog_GetSpeciesName(eventData[0], NULL, 1); - QuestLog_GetSpeciesName(eventData[1], NULL, 2); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, sDefeatedOpponentFlavorTexts[r5[1]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnEliteFoursMonWithMonAndWon); - return eventData + 4; -} - -static u16 *BufferQuestLogData_DefeatedChampion(u16 *a0, const u16 *eventData) -{ - if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION])) - return NULL; - a0[0] = 0x2021; - a0[1] = sQuestLogCursor; - a0[2] = eventData[1]; - a0[3] = eventData[2]; - *((u8 *)a0 + 8) = *((const u8 *)eventData + 6); - gUnknown_203B048 = 1; - return a0 + 5; -} - -static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *a0) -{ - const u8 *r5; - if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION])) - return NULL; - - r5 = (const u8 *)a0 + 8; - DynamicPlaceholderTextUtil_Reset(); - - switch (gUnknown_203B044.unk_2) - { - case 0: - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gSaveBlock1Ptr->rivalName); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerBattledChampionRival); - break; - case 1: - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName); - QuestLog_GetSpeciesName(a0[2], NULL, 1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName); - QuestLog_GetSpeciesName(a0[3], NULL, 3); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerSentOutMon1RivalSentOutMon2); - break; - case 2: - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sDefeatedChampionFlavorTexts[r5[0]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WonTheMatchAsAResult); - break; - } - return (const u16 *)(r5 + 2); -} - -static u16 *BufferQuestLogData_DefeatedTrainer(u16 *a0, const u16 *eventData) -{ - gUnknown_203B048 = 1; - return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_TRAINER, a0, eventData); -} - -static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *eventData) -{ - const u16 *r5 = sub_8113E88(QL_EVENT_DEFEATED_TRAINER, eventData); - const u8 *r6 = (const u8 *)r5 + 6; - DynamicPlaceholderTextUtil_Reset(); - GetMapNameGeneric(gStringVar1, r6[0]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - - if (gTrainers[r5[2]].trainerClass == CLASS_RIVAL - || gTrainers[r5[2]].trainerClass == CLASS_RIVAL_2 - || gTrainers[r5[2]].trainerClass == CLASS_CHAMPION_2) - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetExpandedPlaceholder(PLACEHOLDER_ID_RIVAL)); - else - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[r5[2]].trainerName); - - QuestLog_GetSpeciesName(r5[0], NULL, 2); - QuestLog_GetSpeciesName(r5[1], NULL, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnTrainersMonWithMonAndWon); - return (const u16 *)(r6 + 2); -} - -static const u8 *const sLocationNameTexts[] = -{ - [QL_LOCATION_HOME] = gText_QuestLog_Home, - [QL_LOCATION_OAKS_LAB] = gText_QuestLog_OakResearchLab, - [QL_LOCATION_VIRIDIAN_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_LEAGUE_GATE_1] = gText_QuestLog_PokemonLeagueGate, - [QL_LOCATION_LEAGUE_GATE_2] = gText_QuestLog_PokemonLeagueGate, - [QL_LOCATION_VIRIDIAN_FOREST_1] = gText_QuestLog_ViridianForest, - [QL_LOCATION_VIRIDIAN_FOREST_2] = gText_QuestLog_ViridianForest, - [QL_LOCATION_PEWTER_MUSEUM] = gText_QuestLog_PewterMuseumOfScience, - [QL_LOCATION_PEWTER_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_MT_MOON_1] = gText_QuestLog_MtMoon, - [QL_LOCATION_MT_MOON_2] = gText_QuestLog_MtMoon, - [QL_LOCATION_CERULEAN_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_BIKE_SHOP] = gText_QuestLog_BikeShop, - [QL_LOCATION_BILLS_HOUSE] = gText_QuestLog_BillsHouse, - [QL_LOCATION_DAY_CARE] = gText_QuestLog_DayCare, - [QL_LOCATION_UNDERGROUND_PATH_1] = gText_QuestLog_UndergroundPath, - [QL_LOCATION_UNDERGROUND_PATH_2] = gText_QuestLog_UndergroundPath, - [QL_LOCATION_PKMN_FAN_CLUB] = gText_QuestLog_PokemonFanClub, - [QL_LOCATION_VERMILION_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_SS_ANNE] = gText_QuestLog_SSAnne, - [QL_LOCATION_DIGLETTS_CAVE_1] = gText_QuestLog_DiglettsCave, - [QL_LOCATION_DIGLETTS_CAVE_2] = gText_QuestLog_DiglettsCave, - [QL_LOCATION_ROCK_TUNNEL_1] = gText_QuestLog_RockTunnel, - [QL_LOCATION_ROCK_TUNNEL_2] = gText_QuestLog_RockTunnel, - [QL_LOCATION_POWER_PLANT] = gText_QuestLog_PowerPlant, - [QL_LOCATION_PKMN_TOWER] = gText_QuestLog_PokemonTower, - [QL_LOCATION_VOLUNTEER_HOUSE] = gText_QuestLog_VolunteerHouse, - [QL_LOCATION_NAME_RATERS_HOUSE] = gText_QuestLog_NameRatersHouse, - [QL_LOCATION_UNDERGROUND_PATH_3] = gText_QuestLog_UndergroundPath, - [QL_LOCATION_UNDERGROUND_PATH_4] = gText_QuestLog_UndergroundPath, - [QL_LOCATION_CELADON_DEPT_STORE] = gText_QuestLog_CeladonDeptStore, - [QL_LOCATION_CELADON_MANSION] = gText_QuestLog_CeladonMansion, - [QL_LOCATION_GAME_CORNER] = gText_QuestLog_RocketGameCorner, - [QL_LOCATION_CELADON_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_CELADON_RESTAURANT] = gText_QuestLog_Restaurant, - [QL_LOCATION_ROCKET_HIDEOUT] = gText_QuestLog_RocketHideout, - [QL_LOCATION_SAFARI_ZONE] = gText_QuestLog_SafariZone, - [QL_LOCATION_FUCHSIA_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_WARDENS_HOME] = gText_QuestLog_WardensHome, - [QL_LOCATION_FIGHTING_DOJO] = gText_QuestLog_FightingDojo, - [QL_LOCATION_SAFFRON_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_SILPH_CO] = gText_QuestLog_SilphCo, - [QL_LOCATION_SEAFOAM_ISLANDS_1] = gText_QuestLog_SeafoamIslands, - [QL_LOCATION_SEAFOAM_ISLANDS_2] = gText_QuestLog_SeafoamIslands, - [QL_LOCATION_PKMN_MANSION] = gText_QuestLog_PokemonMansion, - [QL_LOCATION_CINNABAR_GYM] = gText_QuestLog_Gym, - [QL_LOCATION_CINNABAR_LAB] = gText_QuestLog_PokemonResearchLab, - [QL_LOCATION_VICTORY_ROAD_1] = gText_QuestLog_VictoryRoad, - [QL_LOCATION_VICTORY_ROAD_2] = gText_QuestLog_VictoryRoad, - [QL_LOCATION_PKMN_LEAGUE] = gText_QuestLog_PokemonLeague, - [QL_LOCATION_CERULEAN_CAVE] = gText_QuestLog_CeruleanCave -}; - -static const u8 *const sDepartedLocationTexts[] = -{ - [QL_DEPARTED_TOWN_BUILDING] = gText_QuestLog_DepartedPlaceInTownForNextDestination, - [QL_DEPARTED_MUSEUM] = gText_QuestLog_LeftTownsLocationForNextDestination, - [QL_DEPARTED_GAME_CORNER] = gText_QuestLog_PlayedGamesAtGameCorner, - [QL_DEPARTED_HOME] = gText_QuestLog_RestedAtHome, - [QL_DEPARTED_OAKS_LAB] = gText_QuestLog_LeftOaksLab, - [QL_DEPARTED_GYM] = gText_QuestLog_GymWasFullOfToughTrainers, - [QL_DEPARTED_SAFARI_ZONE] = gText_QuestLog_HadGreatTimeInSafariZone, - [QL_DEPARTED_CAVE] = gText_QuestLog_ManagedToGetOutOfLocation, - [QL_DEPARTED_MISC_BUILDING_1] = gText_QuestLog_DepartedTheLocationForNextDestination, - [QL_DEPARTED_MISC_BUILDING_2] = gText_QuestLog_DepartedFromLocationToNextDestination -}; - -static const u8 sLocationToDepartedTextId[] = -{ - [QL_LOCATION_HOME] = QL_DEPARTED_HOME, - [QL_LOCATION_OAKS_LAB] = QL_DEPARTED_OAKS_LAB, - [QL_LOCATION_VIRIDIAN_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_LEAGUE_GATE_1] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_LEAGUE_GATE_2] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_VIRIDIAN_FOREST_1] = QL_DEPARTED_CAVE, - [QL_LOCATION_VIRIDIAN_FOREST_2] = QL_DEPARTED_CAVE, - [QL_LOCATION_PEWTER_MUSEUM] = QL_DEPARTED_MUSEUM, - [QL_LOCATION_PEWTER_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_MT_MOON_1] = QL_DEPARTED_CAVE, - [QL_LOCATION_MT_MOON_2] = QL_DEPARTED_CAVE, - [QL_LOCATION_CERULEAN_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_BIKE_SHOP] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_BILLS_HOUSE] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_DAY_CARE] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_UNDERGROUND_PATH_1] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_UNDERGROUND_PATH_2] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_PKMN_FAN_CLUB] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_VERMILION_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_SS_ANNE] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_DIGLETTS_CAVE_1] = QL_DEPARTED_CAVE, - [QL_LOCATION_DIGLETTS_CAVE_2] = QL_DEPARTED_CAVE, - [QL_LOCATION_ROCK_TUNNEL_1] = QL_DEPARTED_CAVE, - [QL_LOCATION_ROCK_TUNNEL_2] = QL_DEPARTED_CAVE, - [QL_LOCATION_POWER_PLANT] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_PKMN_TOWER] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_VOLUNTEER_HOUSE] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_NAME_RATERS_HOUSE] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_UNDERGROUND_PATH_3] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_UNDERGROUND_PATH_4] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_CELADON_DEPT_STORE] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_CELADON_MANSION] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_GAME_CORNER] = QL_DEPARTED_GAME_CORNER, - [QL_LOCATION_CELADON_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_CELADON_RESTAURANT] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_ROCKET_HIDEOUT] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_SAFARI_ZONE] = QL_DEPARTED_SAFARI_ZONE, - [QL_LOCATION_FUCHSIA_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_WARDENS_HOME] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_FIGHTING_DOJO] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_SAFFRON_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_SILPH_CO] = QL_DEPARTED_MISC_BUILDING_2, - [QL_LOCATION_SEAFOAM_ISLANDS_1] = QL_DEPARTED_CAVE, - [QL_LOCATION_SEAFOAM_ISLANDS_2] = QL_DEPARTED_CAVE, - [QL_LOCATION_PKMN_MANSION] = QL_DEPARTED_MISC_BUILDING_2, - [QL_LOCATION_CINNABAR_GYM] = QL_DEPARTED_GYM, - [QL_LOCATION_CINNABAR_LAB] = QL_DEPARTED_TOWN_BUILDING, - [QL_LOCATION_VICTORY_ROAD_1] = QL_DEPARTED_CAVE, - [QL_LOCATION_VICTORY_ROAD_2] = QL_DEPARTED_CAVE, - [QL_LOCATION_PKMN_LEAGUE] = QL_DEPARTED_MISC_BUILDING_1, - [QL_LOCATION_CERULEAN_CAVE] = QL_DEPARTED_CAVE -}; - -static const u8 gUnknown_8456C17[] = { - 0x5a, - 0x5b, - 0x5d, - 0x5e, - 0x5f, - 0x62, - 0x60, - 0x59 -}; - -static const u8 *const sUsedFieldMoveTexts[] = -{ - [FIELD_MOVE_FLASH] = gText_QuestLog_UsedFlash, - [FIELD_MOVE_CUT] = gText_QuestLog_UsedCut, - [FIELD_MOVE_FLY] = gText_QuestLog_UsedFly, - [FIELD_MOVE_STRENGTH] = gText_QuestLog_UsedStrength, - [FIELD_MOVE_SURF] = gText_QuestLog_UsedSurf, - [FIELD_MOVE_ROCK_SMASH] = gText_QuestLog_UsedRockSmash, - [FIELD_MOVE_WATERFALL] = gText_QuestLog_UsedWaterfall, - [FIELD_MOVE_TELEPORT] = gText_QuestLog_UsedTeleportToLocation, - [FIELD_MOVE_DIG] = gText_QuestLog_UsedDigInLocation, - [FIELD_MOVE_MILK_DRINK] = gText_QuestLog_UsedMilkDrink, - [FIELD_MOVE_SOFT_BOILED] = gText_QuestLog_UsedSoftboiled, - [FIELD_MOVE_SWEET_SCENT] = gText_QuestLog_UsedSweetScent -}; - -static u16 *BufferQuestLogData_DepartedLocation(u16 *a0, const u16 *eventData) -{ - u16 *r2 = sub_8113DE0(QL_EVENT_DEPARTED, a0); - if (r2 == NULL) - return NULL; - *((u8 *)r2 + 0) = *((const u8 *)eventData + 0); - if ((*((u8 *)r2 + 1) = *((const u8 *)eventData + 1)) == 0x24) - gUnknown_203B048 = 1; - return r2 + 1; -} - -static const u16 *BufferQuestLogText_DepartedLocation(const u16 *eventData) -{ - u8 r4, locationId; - const u16 *r5 = sub_8113E88(QL_EVENT_DEPARTED, eventData); - const u8 *r5_2 = (const u8 *)r5 + 0; - locationId = r5_2[1]; - GetMapNameGeneric(gStringVar1, r5_2[0]); - StringCopy(gStringVar2, sLocationNameTexts[locationId]); - if (sLocationToDepartedTextId[locationId] == QL_DEPARTED_GYM) - { - for (r4 = 0; r4 < ARRAY_COUNT(gUnknown_8456C17); r4++) - { - if (r5_2[0] != gUnknown_8456C17[r4]) - continue; - if (FlagGet(FLAG_BADGE01_GET + r4) == TRUE) - StringExpandPlaceholders(gStringVar4, gText_QuestLog_DepartedGym); - else - StringExpandPlaceholders(gStringVar4, gText_QuestLog_GymWasFullOfToughTrainers); - break; - } - if (r4 == 8) - StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]); - } - else - StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]); - - return (const u16 *)(r5_2 + 2); -} - -void sub_811539C(void) -{ - gUnknown_203B04B = TRUE; -} - -static bool8 sub_81153A8(u16 eventId, const u16 *eventData) -{ - if (eventId != QL_EVENT_DEPARTED) - { - gUnknown_203B04A = 0; - return TRUE; - } - if (gUnknown_203B04A == *((u8 *)eventData + 1) + 1) - return FALSE; - gUnknown_203B04A = *((u8 *)eventData + 1) + 1; - return TRUE; -} - -static bool8 sub_81153E4(u16 eventId, const u16 *eventData) -{ - if (eventId != QL_EVENT_DEPARTED) - return TRUE; - - if (*((u8 *)eventData + 1) == 32 && !gUnknown_203B04B) - return FALSE; - - gUnknown_203B04B = FALSE; - return TRUE; -} - -static u16 *BufferQuestLogData_UsedFieldMove(u16 *a0, const u16 *eventData) -{ - u8 *r3; - a0 = sub_8113DE0(QL_EVENT_USED_FIELD_MOVE, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - r3 = (u8 *)a0 + 2; - r3[0] = *((const u8 *)eventData + 2); - r3[1] = *((const u8 *)eventData + 3); - if (r3[0] == FIELD_MOVE_TELEPORT || r3[0] == FIELD_MOVE_DIG) - gUnknown_203B048 = 2; - else - gUnknown_203B048 = 1; - return (u16 *)(r3 + 2); -} - -static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_USED_FIELD_MOVE, eventData); - const u8 *r5 = (const u8 *)r4 + 2; - QuestLog_GetSpeciesName(r4[0], gStringVar1, 0); - if (r5[1] != 0xFF) - GetMapNameGeneric(gStringVar2, r5[1]); - - // If used Teleport, get name of destination - if (r5[0] == FIELD_MOVE_TELEPORT) - { - if (r5[1] == 0x58) - StringCopy(gStringVar3, gText_QuestLog_Home); - else - StringCopy(gStringVar3, gText_PokemonCenter); - } - - StringExpandPlaceholders(gStringVar4, sUsedFieldMoveTexts[r5[0]]); - return (const u16 *)(r5 + 2); -} - -static u16 *BufferQuestLogData_BoughtItem(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_BOUGHT_ITEM, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[2]; - a0[1] = eventData[3]; - a0[2] = *((const u32 *)eventData) >> 16; - a0[3] = *((const u32 *)eventData); - *((u8 *)a0 + 8) = *((const u8 *)eventData + 8); - *((u8 *)a0 + 9) = 1; - return a0 + 5; -} - -static const u16 *BufferQuestLogText_BoughtItem(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_BOUGHT_ITEM, eventData); - const u8 *r7 = (const u8 *)r4 + 8; - u32 r6 = (r4[2] << 16) + r4[3]; - DynamicPlaceholderTextUtil_Reset(); - GetMapNameGeneric(gStringVar1, r7[0]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r4[0])); - if (r4[1] < 2) - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItem); - else - { - ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItemsIncludingItem); - } - return (const u16 *)(r7 + 2); -} - -static u16 *BufferQuestLogData_SoldItem(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_SOLD_ITEM, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[2]; - a0[1] = eventData[3]; - a0[2] = *((const u32 *)eventData) >> 16; - a0[3] = *((const u32 *)eventData); - *((u8 *)a0 + 8) = *((const u8 *)eventData + 8); - *((u8 *)a0 + 9) = *((const u8 *)eventData + 9); - return a0 + 5; -} - -static const u16 *BufferQuestLogText_SoldItem(const u16 *eventData) -{ - const u16 *r5 = sub_8113E88(QL_EVENT_SOLD_ITEM, eventData); - const u8 *r7 = (const u8 *) r5 + 8; - u32 r6 = (r5[2] << 16) + r5[3]; - DynamicPlaceholderTextUtil_Reset(); - GetMapNameGeneric(gStringVar1, r7[0]); - if (r7[1] == 0) { - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, ItemId_GetName(r5[0])); - if (r5[1] == 1) - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gText_QuestLog_JustOne); - else - { - ConvertIntToDecimalStringN(gStringVar2, r5[1], STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar2); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar3, gText_QuestLog_Num); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3); - } - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldNumOfItem); - } - else - { - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r5[0])); - ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldItemsIncludingItem); - } - return (const u16 *)(r7 + 2); -} - -static u16 *BufferQuestLogData_ObtainedItem(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_OBTAINED_ITEM, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - *((u8 *)a0 + 2) = *((const u8 *)eventData + 2); - return a0 + 2; -} - -static const u16 *BufferQuestLogText_ObtainedItem(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_OBTAINED_ITEM, eventData); - const u8 *r5 = (const u8 *)r4 + 2; - GetMapNameGeneric(gStringVar1, r5[0]); - StringCopy(gStringVar2, ItemId_GetName(r4[0])); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_ObtainedItemInLocation); - return (const u16 *)(r5 + 2); -} - -static const u16 sQuestLogWorldMapFlags[] = -{ - FLAG_WORLD_MAP_VIRIDIAN_CITY, - FLAG_WORLD_MAP_PEWTER_CITY, - FLAG_WORLD_MAP_CERULEAN_CITY, - FLAG_WORLD_MAP_LAVENDER_TOWN, - FLAG_WORLD_MAP_VERMILION_CITY, - FLAG_WORLD_MAP_CELADON_CITY, - FLAG_WORLD_MAP_FUCHSIA_CITY, - FLAG_WORLD_MAP_CINNABAR_ISLAND, - FLAG_WORLD_MAP_INDIGO_PLATEAU_EXTERIOR, - FLAG_WORLD_MAP_SAFFRON_CITY, - FLAG_WORLD_MAP_ONE_ISLAND, - FLAG_WORLD_MAP_TWO_ISLAND, - FLAG_WORLD_MAP_THREE_ISLAND, - FLAG_WORLD_MAP_FOUR_ISLAND, - FLAG_WORLD_MAP_FIVE_ISLAND, - FLAG_WORLD_MAP_SEVEN_ISLAND, - FLAG_WORLD_MAP_SIX_ISLAND -}; - -void QuestLog_RecordEnteredMap(u16 worldMapFlag) -{ - s32 i; - - if (gQuestLogState == QL_STATE_2 || gQuestLogState == QL_STATE_3) - return; - - for (i = 0; i < (int)NELEMS(sQuestLogWorldMapFlags); i++) - { - if (worldMapFlag == sQuestLogWorldMapFlags[i]) - { - if (!FlagGet(worldMapFlag)) - { - sNewlyEnteredMap = TRUE; - break; - } - else - { - sNewlyEnteredMap += 0; - sNewlyEnteredMap = FALSE; - break; - } - } - } -} - -void sub_8115798(void) -{ - u16 sp0; - if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) - { - if (sNewlyEnteredMap) - { - sp0 = gMapHeader.regionMapSectionId; - SetQuestLogEvent(QL_EVENT_ARRIVED, &sp0); - sNewlyEnteredMap = FALSE; - } - } -} - -static u16 *BufferQuestLogData_ArrivedInLocation(u16 *a0, const u16 *eventData) -{ - a0 = sub_8113DE0(QL_EVENT_ARRIVED, a0); - if (a0 == NULL) - return NULL; - a0[0] = eventData[0]; - return a0 + 1; -} - -static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *eventData) -{ - const u16 *r4 = sub_8113E88(QL_EVENT_ARRIVED, eventData); - GetMapNameGeneric(gStringVar1, (u8)r4[0]); - StringExpandPlaceholders(gStringVar4, gText_QuestLog_ArrivedInLocation); - return r4 + 1; -} - -static void BufferLinkPartnersName(u8 *dest) -{ - s32 i; - if (*dest++ == EXT_CTRL_CODE_BEGIN && *dest++ == EXT_CTRL_CODE_JPN) - { - for (i = 0; i < 5; i++) - { - if (*dest == EXT_CTRL_CODE_BEGIN) - break; - dest++; - } - *dest++ = EXT_CTRL_CODE_BEGIN; - *dest++ = EXT_CTRL_CODE_ENG; - *dest++ = EOS; - } -} diff --git a/src/quest_log_events.c b/src/quest_log_events.c new file mode 100644 index 000000000..1f01e731c --- /dev/null +++ b/src/quest_log_events.c @@ -0,0 +1,2155 @@ +#include "global.h" +#include "gflib.h" +#include "battle.h" +#include "data.h" +#include "dynamic_placeholder_text_util.h" +#include "event_data.h" +#include "event_scripts.h" +#include "menu_helpers.h" +#include "item.h" +#include "link.h" +#include "quest_log.h" +#include "party_menu.h" +#include "pokemon_storage_system.h" +#include "region_map.h" +#include "strings.h" +#include "constants/maps.h" +#include "constants/flags.h" +#include "constants/trainer_classes.h" +#include "constants/species.h" +#include "constants/items.h" +#include "constants/region_map_sections.h" + +struct DeferredLinkEvent +{ + u16 id; + u16 ALIGNED(4) data[14]; +}; + +static EWRAM_DATA struct DeferredLinkEvent sDeferredEvent = {0}; +EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; +static EWRAM_DATA u8 sEventShouldNotRecordSteps = 0; +static EWRAM_DATA bool8 sNewlyEnteredMap = FALSE; +static EWRAM_DATA u8 sLastDepartedMap = 0; +static EWRAM_DATA bool8 sPlayedTheSlots = FALSE; + +static bool8 InQuestLogDisabledLocation(void); +static bool8 ShouldRegisterEvent_HandlePartyActions(u16, const u16 *); +static bool8 ShouldRegisterEvent_HandleBeatStoryTrainer(u16, const u16 *); +static u16 *ShouldRegisterEvent(u16, const u16 *); +static bool8 TrySetLinkQuestLogEvent(u16, const u16 *); +static bool8 TrySetTrainerBattleQuestLogEvent(u16, const u16 *); +static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16, const u16 *); +static void SetQuestLogEventToActive(u16); +static u16 *TryRecordEvent41(u16 *, u16); +static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *, const u16 *); +static u16 *BufferQuestLogData_UsedItem(u16 *, const u16 *); +static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *, const u16 *); +static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *, const u16 *); +static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *, const u16 *); +static u16 *BufferQuestLogData_TookHeldItem(u16 *, const u16 *); +static u16 *BufferQuestLogData_SwappedHeldItem(u16 *, const u16 *); +static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *, const u16 *); +static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *, const u16 *); +static u16 *BufferQuestLogData_LinkTraded(u16 *, const u16 *); +static u16 *BufferQuestLogData_LinkBattledSingle(u16 *, const u16 *); +static u16 *BufferQuestLogData_LinkBattledDouble(u16 *, const u16 *); +static u16 *BufferQuestLogData_LinkBattledMulti(u16 *, const u16 *); +static u16 *BufferQuestLogData_UsedUnionRoom(u16 *, const u16 *); +static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *, const u16 *); +static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *, const u16 *); +static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *, const u16 *); +static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *, const u16 *); +static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *, const u16 *); +static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *, const u16 *); +static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *, const u16 *); +static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *, const u16 *); +static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *, const u16 *); +static u16 *BufferQuestLogData_DepositedMonInPC(u16 *, const u16 *); +static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *, const u16 *); +static u16 *BufferQuestLogData_DepositedItemInPC(u16 *, const u16 *); +static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *, const u16 *); +static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *, const u16 *); +static u16 *BufferQuestLogData_DefeatedWildMon(u16 *, const u16 *); +static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *, const u16 *); +static u16 *BufferQuestLogData_DefeatedChampion(u16 *, const u16 *); +static u16 *BufferQuestLogData_DefeatedTrainer(u16 *, const u16 *); +static u16 *BufferQuestLogData_DepartedLocation(u16 *, const u16 *); +static u16 *BufferQuestLogData_UsedFieldMove(u16 *, const u16 *); +static u16 *BufferQuestLogData_BoughtItem(u16 *, const u16 *); +static u16 *BufferQuestLogData_SoldItem(u16 *, const u16 *); +static u16 *BufferQuestLogData_ObtainedItem(u16 *, const u16 *); +static u16 *BufferQuestLogData_ArrivedInLocation(u16 *, const u16 *); +static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *); +static const u16 *BufferQuestLogText_UsedItem(const u16 *); +static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *); +static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *); +static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *); +static const u16 *BufferQuestLogText_TookHeldItem(const u16 *); +static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *); +static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *); +static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *); +static const u16 *BufferQuestLogText_LinkTraded(const u16 *); +static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *); +static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *); +static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *); +static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *); +static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *); +static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *); +static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *); +static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *); +static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *); +static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *); +static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *); +static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *); +static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *); +static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *); +static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *); +static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *); +static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *); +static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *); +static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *); +static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *); +static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *); +static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *); +static const u16 *BufferQuestLogText_DepartedLocation(const u16 *); +static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *); +static const u16 *BufferQuestLogText_BoughtItem(const u16 *); +static const u16 *BufferQuestLogText_SoldItem(const u16 *); +static const u16 *BufferQuestLogText_ObtainedItem(const u16 *); +static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *); +static bool8 IsSpeciesFromSpecialEncounter(u16); +static bool8 ShouldRegisterEvent_HandleDeparted(u16, const u16 *); +static bool8 ShouldRegisterEvent_HandleGameCorner(u16, const u16 *); +static void BufferLinkPartnersName(u8 *); + +static u16 *(*const sQuestLogStorageCBs[])(u16 *, const u16 *) = { + [QL_EVENT_0] = NULL, + [QL_EVENT_1] = NULL, + [QL_EVENT_2] = NULL, + [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogData_SwitchedPartyOrder, + [QL_EVENT_USED_ITEM] = BufferQuestLogData_UsedItem, + [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogData_GaveHeldItemFromPartyMenu, + [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogData_GaveHeldItemFromBagMenu, + [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogData_GaveHeldItemFromPC, + [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogData_TookHeldItem, + [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogData_SwappedHeldItem, + [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogData_SwappedHeldItemFromPC, + [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogData_UsedPkmnCenter, + [QL_EVENT_LINK_TRADED] = BufferQuestLogData_LinkTraded, + [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogData_LinkBattledSingle, + [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogData_LinkBattledDouble, + [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogData_LinkBattledMulti, + [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogData_UsedUnionRoom, + [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogData_UsedUnionRoomChat, + [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogData_LinkTradedUnionRoom, + [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogData_LinkBattledUnionRoom, + [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogData_SwitchedMonsBetweenBoxes, + [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogData_SwitchedMonsWithinBox, + [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogData_SwitchedPartyMonForPCMon, + [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogData_MovedMonBetweenBoxes, + [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogData_MovedMonWithinBox, + [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogData_WithdrewMonFromPC, + [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogData_DepositedMonInPC, + [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogData_SwitchedMultipleMons, + [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogData_DepositedItemInPC, + [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogData_WithdrewItemFromPC, + [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogData_DefeatedGymLeader, + [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogData_DefeatedWildMon, + [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogData_DefeatedEliteFourMember, + [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogData_DefeatedChampion, + [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogData_DefeatedTrainer, + [QL_EVENT_DEPARTED] = BufferQuestLogData_DepartedLocation, + [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogData_UsedFieldMove, + [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogData_BoughtItem, + [QL_EVENT_SOLD_ITEM] = BufferQuestLogData_SoldItem, + [QL_EVENT_39] = NULL, + [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogData_ObtainedItem, + [QL_EVENT_41] = NULL, + [QL_EVENT_ARRIVED] = BufferQuestLogData_ArrivedInLocation +}; + +void SetQuestLogEvent(u16 eventId, const u16 *eventData) +{ + u16 *r1; + + if (eventId == QL_EVENT_DEPARTED && sEventShouldNotRecordSteps == 2) + { + sub_811381C(); + return; + } + sub_811381C(); + if (gQuestLogState == QL_STATE_PLAYBACK) + return; + + if (!IS_VALID_QL_EVENT(eventId)) + return; + + if (InQuestLogDisabledLocation() == TRUE) + return; + + if (TrySetLinkQuestLogEvent(eventId, eventData) == TRUE) + return; + + if (MenuHelpers_LinkSomething() == TRUE) + return; + + if (InUnionRoom() == TRUE) + return; + + if (TrySetTrainerBattleQuestLogEvent(eventId, eventData) == TRUE) + return; + + if (IsQuestLogEventWithSpecialEncounterSpecies(eventId, eventData) == TRUE) + return; + + if (ShouldRegisterEvent_HandleGameCorner(eventId, eventData) == FALSE) + return; + + if (gQuestLogPlaybackState == 0) + { + if (ShouldRegisterEvent_HandlePartyActions(eventId, eventData) == TRUE) + return; + + if (eventId != QL_EVENT_DEFEATED_WILD_MON || gUnknown_203AE04 == NULL) + { + if (ShouldRegisterEvent_HandleDeparted(eventId, eventData) == FALSE) + return; + StartRecordingQuestLogEntry(eventId); + } + } + else if (eventId == QL_EVENT_OBTAINED_ITEM) + return; + + SetQuestLogEventToActive(eventId); + if (eventId == QL_EVENT_DEFEATED_WILD_MON) + { + if (gUnknown_203AE04 == NULL) + { + gUnknown_203AE04 = sEventRecordingPointer; + r1 = sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData); + } + else + { + sQuestLogStorageCBs[eventId](gUnknown_203AE04, eventData); + return; + } + } + else + { + gUnknown_203AE04 = NULL; + r1 = sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData); + } + + if (r1 == NULL) + { + FinishRecordingQuestLogScene(); + r1 = ShouldRegisterEvent(eventId, eventData); + if (r1 == NULL) + return; + } + + sEventRecordingPointer = r1; + if (sEventShouldNotRecordSteps == 0) + return; + FinishRecordingQuestLogScene(); +} + +static bool8 InQuestLogDisabledLocation(void) +{ + // In Trainer Tower + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_1F) + && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_1F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_2F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_3F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_4F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_5F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_6F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_7F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_8F) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ROOF) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_LOBBY) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR))) + return TRUE; + + // In pokemon trainer fan club + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB)) + return TRUE; + + // In E-Reader house + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_HOUSE_ROOM1) && + (gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM1) + || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_HOUSE_ROOM2))) + return TRUE; + + // In elevator + if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROCKET_HIDEOUT_ELEVATOR)) + || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SILPH_CO_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SILPH_CO_ELEVATOR)) + || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR)) + || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR))) + return TRUE; + + return FALSE; +} + +bool8 QuestLog_ShouldEndSceneOnMapChange(void) +{ + if (InQuestLogDisabledLocation() != TRUE) + return FALSE; + + if (gQuestLogState == QL_STATE_PLAYBACK) + return TRUE; + + if (gQuestLogState == QL_STATE_RECORDING) + QuestLog_CutRecording(); + + return FALSE; +} + +static bool8 ShouldRegisterEvent_HandlePartyActions(u16 eventId, const u16 *eventData) +{ + if (eventId == QL_EVENT_USED_FIELD_MOVE || eventId == QL_EVENT_USED_PKMN_CENTER) + return TRUE; + + if (!FlagGet(FLAG_SYS_GAME_CLEAR)) + { + if (eventId == QL_EVENT_SWITCHED_PARTY_ORDER || eventId == QL_EVENT_DEFEATED_WILD_MON || ShouldRegisterEvent_HandleBeatStoryTrainer(eventId, eventData) == TRUE) + return TRUE; + } + + if (!FlagGet(FLAG_SYS_CAN_LINK_WITH_RS)) + { + if (eventId == QL_EVENT_USED_ITEM + || eventId == QL_EVENT_GAVE_HELD_ITEM + || eventId == QL_EVENT_GAVE_HELD_ITEM_BAG + || eventId == QL_EVENT_GAVE_HELD_ITEM_PC + || eventId == QL_EVENT_TOOK_HELD_ITEM + || eventId == QL_EVENT_SWAPPED_HELD_ITEM + || eventId == QL_EVENT_SWAPPED_HELD_ITEM_PC + || eventId == QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON + || eventId == QL_EVENT_WITHDREW_MON_PC + || eventId == QL_EVENT_DEPOSITED_MON_PC) + return TRUE; + } + + return FALSE; +} + +static bool8 ShouldRegisterEvent_HandleBeatStoryTrainer(u16 eventId, const u16 *eventData) +{ + if (eventId == QL_EVENT_DEFEATED_TRAINER) + { + u8 trainerClass = gTrainers[*eventData].trainerClass; + if ( trainerClass == CLASS_RIVAL + || trainerClass == CLASS_RIVAL_2 + || trainerClass == CLASS_CHAMPION_2 + || trainerClass == CLASS_BOSS) + return FALSE; + return TRUE; + } + return FALSE; +} + +void sub_811381C(void) +{ + sEventShouldNotRecordSteps = 0; +} + +static u16 *ShouldRegisterEvent(u16 eventId, const u16 *eventData) +{ + if (ShouldRegisterEvent_HandlePartyActions(eventId, eventData) == TRUE) + return NULL; + + if (ShouldRegisterEvent_HandleDeparted(eventId, eventData) == FALSE) + return NULL; + + StartRecordingQuestLogEntry(eventId); + SetQuestLogEventToActive(eventId); + + if (eventId == QL_EVENT_DEFEATED_WILD_MON) + gUnknown_203AE04 = sEventRecordingPointer; + else + gUnknown_203AE04 = NULL; + + return sQuestLogStorageCBs[eventId](sEventRecordingPointer, eventData); +} + +static bool8 TrySetLinkQuestLogEvent(u16 eventId, const u16 *eventData) +{ + if (!IS_LINK_QL_EVENT(eventId)) + return FALSE; + + ResetDeferredLinkEvent(); + sDeferredEvent.id = eventId; + + if (eventId != QL_EVENT_USED_UNION_ROOM && eventId != QL_EVENT_USED_UNION_ROOM_CHAT) + { + if (eventId == QL_EVENT_LINK_TRADED || eventId == QL_EVENT_LINK_TRADED_UNION) + memcpy(sDeferredEvent.data, eventData, 12); + else + memcpy(sDeferredEvent.data, eventData, 24); + } + return TRUE; +} + +void ResetDeferredLinkEvent(void) +{ + sDeferredEvent = (struct DeferredLinkEvent){}; +} + +void QuestLog_StartRecordingInputsAfterDeferredEvent(void) +{ + if (sDeferredEvent.id != QL_EVENT_0) + { + u16 *resp; + sLastDepartedMap = 0; + StartRecordingQuestLogEntry(sDeferredEvent.id); + resp = sQuestLogStorageCBs[sDeferredEvent.id](sEventRecordingPointer, sDeferredEvent.data); + sEventRecordingPointer = resp; + ResetDeferredLinkEvent(); + } +} + +static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData) +{ + if (eventId != QL_EVENT_DEFEATED_TRAINER + && eventId != QL_EVENT_DEFEATED_GYM_LEADER + && eventId != QL_EVENT_DEFEATED_E4_MEMBER + && eventId != QL_EVENT_DEFEATED_CHAMPION) + return FALSE; + + ResetDeferredLinkEvent(); + if (gQuestLogPlaybackState != 0 || FlagGet(FLAG_SYS_GAME_CLEAR) || ShouldRegisterEvent_HandleBeatStoryTrainer(eventId, eventData) != TRUE) + { + sDeferredEvent.id = eventId; + memcpy(sDeferredEvent.data, eventData, 8); + } + return TRUE; +} + +void sub_81139BC(void) +{ + if (sDeferredEvent.id != QL_EVENT_0) + { + u16 *resp; + if (gQuestLogPlaybackState == 0) + { + sLastDepartedMap = 0; + StartRecordingQuestLogEntry(sDeferredEvent.id); + } + SetQuestLogEventToActive(sDeferredEvent.id); + resp = sQuestLogStorageCBs[sDeferredEvent.id](sEventRecordingPointer, sDeferredEvent.data); + sEventRecordingPointer = resp; + TryRecordEvent41_IncCursor(1); + ResetDeferredLinkEvent(); + FinishRecordingQuestLogScene(); + } +} + +void TryRecordEvent41_IncCursor(u16 a0) +{ + sEventRecordingPointer = TryRecordEvent41(sEventRecordingPointer, a0); + sQuestLogCursor++; +} + +static bool8 IsQuestLogEventWithSpecialEncounterSpecies(u16 eventId, const u16 *eventData) +{ + if (eventId != QL_EVENT_DEFEATED_WILD_MON) + return FALSE; + + if (IsSpeciesFromSpecialEncounter(eventData[0]) == TRUE) + return TRUE; + + if (IsSpeciesFromSpecialEncounter(eventData[1]) == TRUE) + return TRUE; + + return FALSE; +} + +static const u16 *(*const sQuestLogEventTextBufferCBs[])(const u16 *) = { + [QL_EVENT_0] = NULL, + [QL_EVENT_1] = NULL, + [QL_EVENT_2] = NULL, + [QL_EVENT_SWITCHED_PARTY_ORDER] = BufferQuestLogText_SwitchedPartyOrder, + [QL_EVENT_USED_ITEM] = BufferQuestLogText_UsedItem, + [QL_EVENT_GAVE_HELD_ITEM] = BufferQuestLogText_GaveHeldItemFromPartyMenu, + [QL_EVENT_GAVE_HELD_ITEM_BAG] = BufferQuestLogText_GaveHeldItemFromBagMenu, + [QL_EVENT_GAVE_HELD_ITEM_PC] = BufferQuestLogText_GaveHeldItemFromPC, + [QL_EVENT_TOOK_HELD_ITEM] = BufferQuestLogText_TookHeldItem, + [QL_EVENT_SWAPPED_HELD_ITEM] = BufferQuestLogText_SwappedHeldItem, + [QL_EVENT_SWAPPED_HELD_ITEM_PC] = BufferQuestLogText_SwappedHeldItemFromPC, + [QL_EVENT_USED_PKMN_CENTER] = BufferQuestLogText_UsedPkmnCenter, + [QL_EVENT_LINK_TRADED] = BufferQuestLogText_LinkTraded, + [QL_EVENT_LINK_BATTLED_SINGLE] = BufferQuestLogText_LinkBattledSingle, + [QL_EVENT_LINK_BATTLED_DOUBLE] = BufferQuestLogText_LinkBattledDouble, + [QL_EVENT_LINK_BATTLED_MULTI] = BufferQuestLogText_LinkBattledMulti, + [QL_EVENT_USED_UNION_ROOM] = BufferQuestLogText_UsedUnionRoom, + [QL_EVENT_USED_UNION_ROOM_CHAT] = BufferQuestLogText_UsedUnionRoomChat, + [QL_EVENT_LINK_TRADED_UNION] = BufferQuestLogText_LinkTradedUnionRoom, + [QL_EVENT_LINK_BATTLED_UNION] = BufferQuestLogText_LinkBattledUnionRoom, + [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = BufferQuestLogText_SwitchedMonsBetweenBoxes, + [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = BufferQuestLogText_SwitchedMonsWithinBox, + [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = BufferQuestLogText_SwitchedPartyMonForPCMon, + [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = BufferQuestLogText_MovedMonBetweenBoxes, + [QL_EVENT_MOVED_MON_WITHIN_BOX] = BufferQuestLogText_MovedMonWithinBox, + [QL_EVENT_WITHDREW_MON_PC] = BufferQuestLogText_WithdrewMonFromPC, + [QL_EVENT_DEPOSITED_MON_PC] = BufferQuestLogText_DepositedMonInPC, + [QL_EVENT_SWITCHED_MULTIPLE_MONS] = BufferQuestLogText_SwitchedMultipleMons, + [QL_EVENT_DEPOSITED_ITEM_PC] = BufferQuestLogText_DepositedItemInPC, + [QL_EVENT_WITHDREW_ITEM_PC] = BufferQuestLogText_WithdrewItemFromPC, + [QL_EVENT_DEFEATED_GYM_LEADER] = BufferQuestLogText_DefeatedGymLeader, + [QL_EVENT_DEFEATED_WILD_MON] = BufferQuestLogText_DefeatedWildMon, + [QL_EVENT_DEFEATED_E4_MEMBER] = BufferQuestLogText_DefeatedEliteFourMember, + [QL_EVENT_DEFEATED_CHAMPION] = BufferQuestLogText_DefeatedChampion, + [QL_EVENT_DEFEATED_TRAINER] = BufferQuestLogText_DefeatedTrainer, + [QL_EVENT_DEPARTED] = BufferQuestLogText_DepartedLocation, + [QL_EVENT_USED_FIELD_MOVE] = BufferQuestLogText_UsedFieldMove, + [QL_EVENT_BOUGHT_ITEM] = BufferQuestLogText_BoughtItem, + [QL_EVENT_SOLD_ITEM] = BufferQuestLogText_SoldItem, + [QL_EVENT_39] = NULL, + [QL_EVENT_OBTAINED_ITEM] = BufferQuestLogText_ObtainedItem, + [QL_EVENT_41] = NULL, + [QL_EVENT_ARRIVED] = BufferQuestLogText_ArrivedInLocation +}; + +static const u8 sQuestLogEventCmdSizes[] = { + [QL_EVENT_0] = 0x08, + [QL_EVENT_1] = 0x08, + [QL_EVENT_2] = 0x08, + [QL_EVENT_SWITCHED_PARTY_ORDER] = 0x08, + [QL_EVENT_USED_ITEM] = 0x0a, + [QL_EVENT_GAVE_HELD_ITEM] = 0x08, + [QL_EVENT_GAVE_HELD_ITEM_BAG] = 0x08, + [QL_EVENT_GAVE_HELD_ITEM_PC] = 0x08, + [QL_EVENT_TOOK_HELD_ITEM] = 0x08, + [QL_EVENT_SWAPPED_HELD_ITEM] = 0x0a, + [QL_EVENT_SWAPPED_HELD_ITEM_PC] = 0x0a, + [QL_EVENT_USED_PKMN_CENTER] = 0x04, + [QL_EVENT_LINK_TRADED] = 0x10, + [QL_EVENT_LINK_BATTLED_SINGLE] = 0x0c, + [QL_EVENT_LINK_BATTLED_DOUBLE] = 0x0c, + [QL_EVENT_LINK_BATTLED_MULTI] = 0x1a, + [QL_EVENT_USED_UNION_ROOM] = 0x04, + [QL_EVENT_USED_UNION_ROOM_CHAT] = 0x04, + [QL_EVENT_LINK_TRADED_UNION] = 0x10, + [QL_EVENT_LINK_BATTLED_UNION] = 0x0c, + [QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES] = 0x0a, + [QL_EVENT_SWITCHED_MONS_WITHIN_BOX] = 0x0a, + [QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON] = 0x0a, + [QL_EVENT_MOVED_MON_BETWEEN_BOXES] = 0x08, + [QL_EVENT_MOVED_MON_WITHIN_BOX] = 0x08, + [QL_EVENT_WITHDREW_MON_PC] = 0x08, + [QL_EVENT_DEPOSITED_MON_PC] = 0x08, + [QL_EVENT_SWITCHED_MULTIPLE_MONS] = 0x06, + [QL_EVENT_DEPOSITED_ITEM_PC] = 0x06, + [QL_EVENT_WITHDREW_ITEM_PC] = 0x06, + [QL_EVENT_DEFEATED_GYM_LEADER] = 0x0c, + [QL_EVENT_DEFEATED_WILD_MON] = 0x0c, + [QL_EVENT_DEFEATED_E4_MEMBER] = 0x0c, + [QL_EVENT_DEFEATED_CHAMPION] = 0x0a, + [QL_EVENT_DEFEATED_TRAINER] = 0x0c, + [QL_EVENT_DEPARTED] = 0x06, + [QL_EVENT_USED_FIELD_MOVE] = 0x08, + [QL_EVENT_BOUGHT_ITEM] = 0x0e, + [QL_EVENT_SOLD_ITEM] = 0x0e, + [QL_EVENT_39] = 0x02, + [QL_EVENT_OBTAINED_ITEM] = 0x08, + [QL_EVENT_41] = 0x04, + [QL_EVENT_ARRIVED] = 0x06 +}; + +u16 *QuestLog_SkipCommand(u16 *curPtr, u16 **prevPtr_p) +{ + u16 eventId = curPtr[0] & 0xfff; + u16 cnt = curPtr[0] >> 12; + + if (eventId == QL_EVENT_DEFEATED_CHAMPION) + cnt = 0; + + if (!IS_VALID_QL_EVENT(eventId)) + return NULL; + + *prevPtr_p = curPtr; + return sQuestLogEventCmdSizes[eventId] + (sQuestLogEventCmdSizes[eventId] - 4) * cnt + (void *)curPtr; +} + +void sub_8113ABC(const u16 *a0) +{ + const u8 *r2 = (const u8 *)(a0 + 2); + if ((a0[0] & 0xFFF) != QL_EVENT_DEPARTED) + sLastDepartedMap = 0; + else + sLastDepartedMap = r2[1] + 1; +} + +bool8 sub_8113AE8(const u16 *a0) +{ +#ifndef NONMATCHING + register const u16 *r0 asm("r0") = a0; +#else + const u16 *r0 = a0; +#endif + + if (r0 == NULL || r0[1] > sQuestLogCursor) + return FALSE; + + sQuestLogEventTextBufferCBs[a0[0] & 0xFFF](a0); + gUnknown_203B044.id = a0[0]; + gUnknown_203B044.unk_1 = (a0[0] & 0xF000) >> 12; + if (gUnknown_203B044.unk_1 != 0) + gUnknown_203B044.unk_2 = 1; + return TRUE; +} + +bool8 sub_8113B44(const u16 *a0) +{ + if (gUnknown_203B044.unk_2 == 0) + return FALSE; + + sQuestLogEventTextBufferCBs[gUnknown_203B044.id](a0); + gUnknown_203B044.unk_2++; + if (gUnknown_203B044.unk_2 > gUnknown_203B044.unk_1) + ResetUnk203B044(); + return TRUE; +} + +void ResetUnk203B044(void) +{ + gUnknown_203B044 = (struct UnkStruct_203B044){}; +} + +static void SetQuestLogEventToActive(u16 eventId) +{ + if (gUnknown_203B044.id != (u8)eventId || gUnknown_203B044.unk_2 != sQuestLogCursor) + { + gUnknown_203B044.id = eventId; + gUnknown_203B044.unk_1 = 0; + gUnknown_203B044.unk_2 = sQuestLogCursor; + } + else if (gUnknown_203B044.unk_1 < 5) + gUnknown_203B044.unk_1++; +} + +void sub_8113BD8(void) +{ + sNewlyEnteredMap = FALSE; + sLastDepartedMap = 0; + sPlayedTheSlots = FALSE; +} + +u16 *TryRecordEvent39_NoParams(u16 *a0) +{ + if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39])) + return NULL; + a0[0] = QL_EVENT_39; + return a0 + 1; +} + +u16 *sub_8113C20(u16 *a0, struct QuestLogEntry * a1) +{ + if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_39])) + return NULL; + a1->unk_6 = 0xFF; + a1->unk_4 = 0; + a1->unk_0 = 0; + a1->unk_1 = 0; + a1->unk_2 = 0; + a1->unk_3 = 0; + return a0 + 1; +} + +static u16 *TryRecordEvent41(u16 *a0, u16 a1) +{ + if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41])) + return NULL; + a0[0] = QL_EVENT_41; + a0[1] = a1; + return a0 + 2; +} + +u16 *sub_8113C8C(u16 *a0, struct QuestLogEntry * a1) +{ + if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_41])) + return NULL; + a1->unk_6 = 0xFE; + a1->unk_4 = a0[1]; + a1->unk_0 = 0; + a1->unk_1 = 0; + a1->unk_2 = 0; + a1->unk_3 = 0; + return a0 + 2; +} + +u16 *sub_8113CC8(u16 *a0, struct QuestLogEntry * a1) +{ + u8 *r6 = (u8 *)a0 + 4; + + if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0])) + return NULL; + a0[0] = 0; + a0[1] = a1->unk_4; + r6[0] = a1->unk_0; + r6[1] = a1->unk_1; + r6[2] = a1->unk_2; + r6[3] = a1->unk_3; + return (u16 *)(r6 + 4); +} + +u16 *sub_8113D08(u16 *a0, struct QuestLogEntry * a1) +{ + u8 *r6 = (u8 *)a0 + 4; + + if (!WillCommandOfSizeFitInSav1Record(a0, sQuestLogEventCmdSizes[QL_EVENT_0])) + return NULL; + a1->unk_6 = 2; + a1->unk_4 = a0[1]; + a1->unk_0 = r6[0]; + a1->unk_1 = r6[1]; + a1->unk_2 = r6[2]; + a1->unk_3 = r6[3]; + return (u16 *)(r6 + 4); +} + +u16 *sub_8113D48(u16 *a0, struct QuestLogEntry * a1) +{ + u16 *r4 = a0; + u8 *r6 = (u8 *)a0 + 4; + + if (!WillCommandOfSizeFitInSav1Record(r4, sQuestLogEventCmdSizes[QL_EVENT_2])) + return NULL; + if (a1->unk_6 == 0) + r4[0] = 2; + else + r4[0] = 1; + r4[1] = a1->unk_4; + r6[0] = a1->unk_0; + r6[1] = a1->unk_1; + r6[2] = a1->unk_2; + r6[3] = a1->unk_3; + return (u16 *)(r6 + 4); +} + +u16 *sub_8113D94(u16 *a0, struct QuestLogEntry * a1) +{ + u16 *r5 = a0; + u8 *r6 = (u8 *)a0 + 4; + + if (!WillCommandOfSizeFitInSav1Record(r5, sQuestLogEventCmdSizes[QL_EVENT_2])) + return NULL; + if (r5[0] == 2) + a1->unk_6 = 0; + else + a1->unk_6 = 1; + a1->unk_4 = r5[1]; + a1->unk_0 = r6[0]; + a1->unk_1 = r6[1]; + a1->unk_2 = r6[2]; + a1->unk_3 = r6[3]; + return (u16 *)(r6 + 4); +} + +u16 *sub_8113DE0(u16 eventId, u16 *a1) +{ + u8 cmdSize; + u16 *r5; + u8 r4; + u8 r1; + + if (gUnknown_203B044.unk_1 == 0) + cmdSize = sQuestLogEventCmdSizes[eventId]; + else + cmdSize = sQuestLogEventCmdSizes[eventId] - 4; + if (!sub_8110944(a1, cmdSize)) + return NULL; + + r5 = (void *)a1; + + if (gUnknown_203B044.unk_1 != 0) + r5 = (void *)r5 - (gUnknown_203B044.unk_1 * cmdSize + 4); + + if (gUnknown_203B044.unk_1 == 5) + { + for (r4 = 0; r4 < 4; r4++) + { + memcpy( + (void *)r5 + (r4 * cmdSize + 4), + (void *)r5 + ((r4 + 1) * cmdSize + 4), + cmdSize + ); + } + r1 = 4; + } + else + r1 = gUnknown_203B044.unk_1; + + r5[0] = eventId + (r1 << 12); + r5[1] = sQuestLogCursor; + r5 = (void *)r5 + (r1 * cmdSize + 4); + return r5; +} + +static const u16 *sub_8113E88(u16 eventId, const u16 *eventData) +{ + eventData = (const void *)eventData + (gUnknown_203B044.unk_2 * (sQuestLogEventCmdSizes[eventId] - 4) + 4); + return eventData; +} + +static void QuestLog_GetSpeciesName(u16 species, u8 *dest, u8 stringVarId) +{ + if (dest != NULL) + { + if (species != SPECIES_EGG) + GetSpeciesName(dest, species); + else + StringCopy(dest, gText_EggNickname); + } + else + { + if (species != SPECIES_EGG) + DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gSpeciesNames[species]); + else + DynamicPlaceholderTextUtil_SetPlaceholderPtr(stringVarId, gText_EggNickname); + } +} + +static u16 *BufferQuestLogData_SwitchedPartyOrder(u16 *a0, const u16 *eventData) +{ + u16 *r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_ORDER, a0); + if (r2 == NULL) + return NULL; + + r2[0] = eventData[0]; + r2[1] = eventData[1]; + return r2 + 2; +} + +static const u16 *BufferQuestLogText_SwitchedPartyOrder(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_PARTY_ORDER, eventData); + QuestLog_GetSpeciesName(r4[0], gStringVar1, 0); + QuestLog_GetSpeciesName(r4[1], gStringVar2, 0); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchMon1WithMon2); + r4 += 2; + return r4; +} + +static u16 *BufferQuestLogData_UsedItem(u16 *a0, const u16 *eventData) +{ + u16 *r2 = sub_8113DE0(QL_EVENT_USED_ITEM, a0); + if (r2 == NULL) + return NULL; + + r2[0] = eventData[0]; + r2[1] = eventData[2]; + r2[2] = eventData[3]; + + if (eventData[0] == ITEM_ESCAPE_ROPE) + sEventShouldNotRecordSteps = 2; + + return r2 + 3; +} + +static const u16 *BufferQuestLogText_UsedItem(const u16 *eventData) +{ + const u16 *r5 = sub_8113E88(QL_EVENT_USED_ITEM, eventData); + + switch (ItemId_GetPocket(r5[0])) + { + case POCKET_ITEMS: + case POCKET_POKE_BALLS: + case POCKET_BERRY_POUCH: + StringCopy(gStringVar1, ItemId_GetName(r5[0])); + if (r5[0] == ITEM_ESCAPE_ROPE) + { + GetMapNameGeneric(gStringVar2, (u8)r5[2]); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedEscapeRope); + } + else if (r5[1] != 0xFFFF) + { + QuestLog_GetSpeciesName(r5[1], gStringVar2, 0); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedItemOnMonAtThisLocation); + } + else + { + StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheItem); + } + break; + case POCKET_KEY_ITEMS: + StringCopy(gStringVar1, ItemId_GetName(r5[0])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_UsedTheKeyItem); + break; + case POCKET_TM_CASE: + QuestLog_GetSpeciesName(r5[1], gStringVar1, 0); + StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]); + if (r5[2] != 0xFFFF) + { + StringCopy(gStringVar3, gMoveNames[r5[2]]); + if (r5[0] > ITEM_TM50) + StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithHM); + else + StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonReplacedMoveWithTM); + } + else + { + if (r5[0] > ITEM_TM50) + StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromHM); + else + StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonLearnedMoveFromTM); + } + break; + } + return r5 + 3; +} + +u16 *BufferQuestLogData_GiveTakeHeldItem(u16 eventId, u16 *a1, const u16 *eventData) +{ + u16 *r1 = sub_8113DE0(eventId, a1); + if (r1 == NULL) + return NULL; + + r1[0] = eventData[0]; + r1[1] = eventData[2]; + return r1 + 2; +} + +static u16 *BufferQuestLogData_GaveHeldItemFromPartyMenu(u16 *a0, const u16 *eventData) +{ + return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM, a0, eventData); +} + +static const u16 *BufferQuestLogText_GaveHeldItemFromPartyMenu(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM, eventData); + QuestLog_GetSpeciesName(r4[1], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetName(r4[0])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem); + r4 += 2; + return r4; +} + +static u16 *BufferQuestLogData_GaveHeldItemFromBagMenu(u16 *a0, const u16 *eventData) +{ + return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_BAG, a0, eventData); +} + +static const u16 *BufferQuestLogText_GaveHeldItemFromBagMenu(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_BAG, eventData); + QuestLog_GetSpeciesName(r4[1], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetName(r4[0])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItem2); + r4 += 2; + return r4; +} + +static u16 *BufferQuestLogData_GaveHeldItemFromPC(u16 *a0, const u16 *eventData) +{ + return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_GAVE_HELD_ITEM_PC, a0, eventData); +} + +static const u16 *BufferQuestLogText_GaveHeldItemFromPC(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_GAVE_HELD_ITEM_PC, eventData); + + QuestLog_GetSpeciesName(r4[1], gStringVar2, 0); + StringCopy(gStringVar1, ItemId_GetName(r4[0])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_GaveMonHeldItemFromPC); + r4 += 2; + return r4; +} + +static u16 *BufferQuestLogData_TookHeldItem(u16 *a0, const u16 *eventData) +{ + return BufferQuestLogData_GiveTakeHeldItem(QL_EVENT_TOOK_HELD_ITEM, a0, eventData); +} + +static const u16 *BufferQuestLogText_TookHeldItem(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_TOOK_HELD_ITEM, eventData); + + QuestLog_GetSpeciesName(r4[1], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetName(r4[0])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_TookHeldItemFromMon); + r4 += 2; + return r4; +} + +u16 *BufferQuestLogData_SwappedHeldItem_(u16 eventId, u16 *a1, const u16 *eventData) +{ + u16 *r1 = sub_8113DE0(eventId, a1); + if (r1 == NULL) + return NULL; + + r1[0] = eventData[0]; + r1[1] = eventData[1]; + r1[2] = eventData[2]; + return r1 + 3; +} + +static u16 *BufferQuestLogData_SwappedHeldItem(u16 *a0, const u16 *eventData) +{ + return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM, a0, eventData); +} + +static const u16 *BufferQuestLogText_SwappedHeldItem(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM, eventData); + QuestLog_GetSpeciesName(r4[2], gStringVar1, 0); + StringCopy(gStringVar2, ItemId_GetName(r4[0])); // Item taken + StringCopy(gStringVar3, ItemId_GetName(r4[1])); // Item given + StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemsOnMon); + r4 += 3; + return r4; +} + +static u16 *BufferQuestLogData_SwappedHeldItemFromPC(u16 *a0, const u16 *eventData) +{ + return BufferQuestLogData_SwappedHeldItem_(QL_EVENT_SWAPPED_HELD_ITEM_PC, a0, eventData); +} + +static const u16 *BufferQuestLogText_SwappedHeldItemFromPC(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_SWAPPED_HELD_ITEM_PC, eventData); + QuestLog_GetSpeciesName(r4[2], gStringVar2, 0); + StringCopy(gStringVar3, ItemId_GetName(r4[0])); + StringCopy(gStringVar1, ItemId_GetName(r4[1])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_SwappedHeldItemFromPC); + r4 += 3; + return r4; +} + +static u16 *BufferQuestLogData_UsedPkmnCenter(u16 *a0, const u16 *eventData) +{ + u16 *r4 = a0; + if (gUnknown_203B044.id == QL_EVENT_USED_PKMN_CENTER && gUnknown_203B044.unk_1 != 0) + return r4; + + if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_USED_PKMN_CENTER])) + return NULL; + + r4[0] = QL_EVENT_USED_PKMN_CENTER; + r4[1] = sQuestLogCursor; + return r4 + 2; +} + +static const u16 *BufferQuestLogText_UsedPkmnCenter(const u16 *a0) +{ + StringExpandPlaceholders(gStringVar4, gText_QuestLog_MonsWereFullyRestoredAtCenter); + a0 += 2; + return a0; +} + +static u16 *BufferQuestLogData_LinkTraded(u16 *a0, const u16 *eventData) +{ + u16 *r4 = a0 + 4; + + a0[0] = QL_EVENT_LINK_TRADED; + a0[1] = sQuestLogCursor; + a0[2] = eventData[0]; + a0[3] = eventData[1]; + eventData += 2; + memcpy(r4, eventData, 7); + r4 += 4; + return r4; +} + +static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0) +{ + const u16 *r6 = a0 + 4; + + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); + + BufferLinkPartnersName(gStringVar1); + QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received + QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); // Mon sent + StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForPersonsMon2); + r6 += 4; + return r6; +} + +static const u8 *const sDefeatedOpponentFlavorTexts[] = { + gText_QuestLog_Handily, + gText_QuestLog_Tenaciously, + gText_QuestLog_Somehow +}; + +static const u8 *const sDefeatedChampionFlavorTexts[] = { + gText_QuestLog_Coolly, + gText_QuestLog_Somehow, + gText_QuestLog_Barely +}; + +static const u8 *const sBattleOutcomeTexts[] = { + gText_QuestLog_Win, + gText_QuestLog_Loss, + gText_QuestLog_Draw +}; + +static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData) +{ + a0[0] = QL_EVENT_LINK_BATTLED_SINGLE; + a0[1] = sQuestLogCursor; + *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); + a0 += 6; + return a0; +} + +static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0) +{ + DynamicPlaceholderTextUtil_Reset(); + + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); + BufferLinkPartnersName(gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SingleBattleWithPersonResultedInOutcome); + a0 += 6; + return a0; +} + +static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData) +{ + a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE; + a0[1] = sQuestLogCursor; + *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); + a0 += 6; + return a0; +} + +static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0) +{ + DynamicPlaceholderTextUtil_Reset(); + + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); + BufferLinkPartnersName(gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DoubleBattleWithPersonResultedInOutcome); + a0 += 6; + return a0; +} + +static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData) +{ + a0[0] = QL_EVENT_LINK_BATTLED_MULTI; + a0[1] = sQuestLogCursor; + *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); + memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH); + memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH); + a0 += 13; + return a0; +} + +static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0) +{ + DynamicPlaceholderTextUtil_Reset(); + + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1); + memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1); + StringCopy7(gStringVar1, (const u8 *)a0 + 5); + StringCopy7(gStringVar2, (const u8 *)a0 + 12); + StringCopy7(gStringVar3, (const u8 *)a0 + 19); + BufferLinkPartnersName(gStringVar1); + BufferLinkPartnersName(gStringVar2); + BufferLinkPartnersName(gStringVar3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); // partner + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); // opponent 1 + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3); // opponent 2 + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sBattleOutcomeTexts[((const u8 *)a0)[4]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MultiBattleWithPeopleResultedInOutcome); + a0 += 13; + return a0; +} + +static u16 *BufferQuestLogData_UsedUnionRoom(u16 *a0, const u16 *eventData) +{ + a0[0] = QL_EVENT_USED_UNION_ROOM; + a0[1] = sQuestLogCursor; + return a0 + 2; +} + +static const u16 *BufferQuestLogText_UsedUnionRoom(const u16 *a0) +{ + StringExpandPlaceholders(gStringVar4, gText_QuestLog_MingledInUnionRoom); + a0 += 2; + return a0; +} + +static u16 *BufferQuestLogData_UsedUnionRoomChat(u16 *a0, const u16 *eventData) +{ + a0[0] = QL_EVENT_USED_UNION_ROOM_CHAT; + a0[1] = sQuestLogCursor; + return a0 + 2; +} + +static const u16 *BufferQuestLogText_UsedUnionRoomChat(const u16 *a0) +{ + StringExpandPlaceholders(gStringVar4, gText_QuestLog_ChattedWithManyTrainers); + a0 += 2; + return a0; +} + +static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData) +{ + u8 *r4 = (u8 *)(a0 + 4); + a0[0] = QL_EVENT_LINK_TRADED_UNION; + a0[1] = sQuestLogCursor; + a0[2] = eventData[0]; + a0[3] = eventData[1]; + memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH); + r4 += 8; + return (u16 *)r4; +} + +static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0) +{ + const u8 *r6 = (const u8 *)(a0 + 4); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); + BufferLinkPartnersName(gStringVar1); + QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); + QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_TradedMon1ForTrainersMon2); + r6 += 8; + return (const u16 *)r6; +} + +static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventData) +{ + a0[0] = QL_EVENT_LINK_BATTLED_UNION; + a0[1] = sQuestLogCursor; + *(u8 *)&a0[2] = *(const u8 *)&eventData[0]; + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); + a0 += 6; + return a0; +} + +static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0) +{ + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); + BufferLinkPartnersName(gStringVar1); + StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_BattledTrainerEndedInOutcome); + a0 += 6; + return a0; +} + +static u16 *BufferQuestLogData_SwitchedMonsBetweenBoxes(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + a0[1] = eventData[1]; + *((u8 *)a0 + 4) = *((const u8 *)eventData + 4); + *((u8 *)a0 + 5) = *((const u8 *)eventData + 5); + return a0 + 3; +} + +static const u16 *BufferQuestLogText_SwitchedMonsBetweenBoxes(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES, eventData); + boxIdxs = (const u8 *)eventData + 4; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1])); + QuestLog_GetSpeciesName(eventData[1], NULL, 3); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsBetweenBoxes); + return eventData + 3; +} + +static u16 *BufferQuestLogData_SwitchedMonsWithinBox(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + a0[1] = eventData[1]; + *((u8 *)a0 + 4) = *((const u8 *)eventData + 4); + return a0 + 3; +} + +static const u16 *BufferQuestLogText_SwitchedMonsWithinBox(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_SWITCHED_MONS_WITHIN_BOX, eventData); + boxIdxs = (const u8 *)eventData + 4; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + QuestLog_GetSpeciesName(eventData[1], NULL, 2); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMonsWithinBox); + return eventData + 3; +} + +static u16 *BufferQuestLogData_SwitchedPartyMonForPCMon(u16 *a0, const u16 *eventData) +{ + u16 *r2; + u16 *ret; + r2 = sub_8113DE0(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, a0); + if (r2 == NULL) + return NULL; + ret = r2 + 2; + if (*((const u8 *)eventData + 4) == TOTAL_BOXES_COUNT) + { + r2[0] = eventData[1]; + r2[1] = eventData[0]; + *((u8 *)r2 + 4) = *((const u8 *)eventData + 5); + } + else + { + r2[0] = eventData[0]; + r2[1] = eventData[1]; + *((u8 *)r2 + 4) = *((const u8 *)eventData + 4); + } + return ret + 1; +} + +static const u16 *BufferQuestLogText_SwitchedPartyMonForPCMon(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON, eventData); + boxIdxs = (const u8 *)eventData + 4; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + QuestLog_GetSpeciesName(eventData[1], NULL, 2); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedPartyMonForPCMon); + return eventData + 3; +} + +static u16 *BufferQuestLogData_MovedMonBetweenBoxes(u16 *a0, const u16 *eventData) +{ + u16 *r2; + u16 *ret; + r2 = sub_8113DE0(QL_EVENT_MOVED_MON_BETWEEN_BOXES, a0); + if (r2 == NULL) + return NULL; + r2[0] = eventData[0]; + ret = r2 + 1; + *((u8 *)ret + 0) = *((const u8 *)eventData + 4); + *((u8 *)ret + 1) = *((const u8 *)eventData + 5); + return ret + 1; +} + +static const u16 *BufferQuestLogText_MovedMonBetweenBoxes(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_MOVED_MON_BETWEEN_BOXES, eventData); + boxIdxs = (const u8 *)eventData + 2; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, GetBoxNamePtr(boxIdxs[1])); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonToNewBox); + return (const u16 *)boxIdxs + 1; +} + +static u16 *BufferQuestLogData_MovedMonWithinBox(u16 *a0, const u16 *eventData) +{ + u16 *r2; + r2 = sub_8113DE0(QL_EVENT_MOVED_MON_WITHIN_BOX, a0); + if (r2 == NULL) + return NULL; + r2[0] = eventData[0]; + *((u8 *)r2 + 2) = *((const u8 *)eventData + 4); + return r2 + 2; +} + +static const u16 *BufferQuestLogText_MovedMonWithinBox(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_MOVED_MON_WITHIN_BOX, eventData); + boxIdxs = (const u8 *)eventData + 2; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_MovedMonWithinBox); + return (const u16 *)boxIdxs + 1; +} + +static u16 *BufferQuestLogData_WithdrewMonFromPC(u16 *a0, const u16 *eventData) +{ + u16 *r2; + r2 = sub_8113DE0(QL_EVENT_WITHDREW_MON_PC, a0); + if (r2 == NULL) + return NULL; + r2[0] = eventData[0]; + *((u8 *)r2 + 2) = *((const u8 *)eventData + 4); + return r2 + 2; +} + +static const u16 *BufferQuestLogText_WithdrewMonFromPC(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_WITHDREW_MON_PC, eventData); + boxIdxs = (const u8 *)eventData + 2; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(boxIdxs[0])); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewMonFromPC); + return (const u16 *)boxIdxs + 1; +} + +static u16 *BufferQuestLogData_DepositedMonInPC(u16 *a0, const u16 *eventData) +{ + u16 *r2; + r2 = sub_8113DE0(QL_EVENT_DEPOSITED_MON_PC, a0); + if (r2 == NULL) + return NULL; + r2[0] = eventData[0]; + *((u8 *)r2 + 2) = *((const u8 *)eventData + 4); + return r2 + 2; +} + +static const u16 *BufferQuestLogText_DepositedMonInPC(const u16 *eventData) +{ + const u8 *boxIdxs; + eventData = sub_8113E88(QL_EVENT_DEPOSITED_MON_PC, eventData); + boxIdxs = (const u8 *)eventData + 2; + DynamicPlaceholderTextUtil_Reset(); + QuestLog_GetSpeciesName(eventData[0], NULL, 0); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(boxIdxs[0])); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DepositedMonInPC); + return (const u16 *)boxIdxs + 1; +} + +static u16 *BufferQuestLogData_SwitchedMultipleMons(u16 *a0, const u16 *eventData) +{ + u16 *r2; + r2 = sub_8113DE0(QL_EVENT_SWITCHED_MULTIPLE_MONS, a0); + if (r2 == NULL) + return NULL; + *((u8 *)r2 + 0) = *((const u8 *)eventData + 4); + *((u8 *)r2 + 1) = *((const u8 *)eventData + 5); + return r2 + 1; +} + +static const u16 *BufferQuestLogText_SwitchedMultipleMons(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_SWITCHED_MULTIPLE_MONS, eventData); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, GetBoxNamePtr(*((const u8 *)r4 + 0))); + if (*((const u8 *)r4 + 0) == *((const u8 *)r4 + 1)) + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gText_QuestLog_ADifferentSpot); + else + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetBoxNamePtr(*((const u8 *)r4 + 1))); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SwitchedMultipleMons); + return r4 + 1; +} + +static u16 *BufferQuestLogData_DepositedItemInPC(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_DEPOSITED_ITEM_PC, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + return a0 + 1; +} + +static const u16 *BufferQuestLogText_DepositedItemInPC(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_DEPOSITED_ITEM_PC, eventData); + CopyItemName(r4[0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_StoredItemInPC); + return r4 + 1; +} + +static u16 *BufferQuestLogData_WithdrewItemFromPC(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_WITHDREW_ITEM_PC, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + return a0 + 1; +} + +static const u16 *BufferQuestLogText_WithdrewItemFromPC(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_WITHDREW_ITEM_PC, eventData); + CopyItemName(r4[0], gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_WithdrewItemFromPC); + return r4 + 1; +} + +u16 *BufferQuestLogData_DefeatedTrainer_(u16 eventId, u16 *a1, const u16 *a2) +{ + a1 = sub_8113DE0(eventId, a1); + if (a1 == NULL) + return NULL; + a1[0] = a2[1]; + a1[1] = a2[2]; + a1[2] = a2[0]; + *((u8 *)a1 + 6) = *((const u8 *)a2 + 7); + *((u8 *)a1 + 7) = *((const u8 *)a2 + 6); + return a1 + 4; +} + +static u16 *BufferQuestLogData_DefeatedGymLeader(u16 *a0, const u16 *eventData) +{ + sEventShouldNotRecordSteps = 1; + return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_GYM_LEADER, a0, eventData); +} + +static const u16 *BufferQuestLogText_DefeatedGymLeader(const u16 *eventData) +{ + const u8 *r6; + eventData = sub_8113E88(QL_EVENT_DEFEATED_GYM_LEADER, eventData); + r6 = (const u8 *)eventData + 6; + DynamicPlaceholderTextUtil_Reset(); + GetMapNameGeneric(gStringVar1, r6[0]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[eventData[2]].trainerName); + QuestLog_GetSpeciesName(eventData[0], 0, 2); + QuestLog_GetSpeciesName(eventData[1], 0, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnGymLeadersMonWithMonAndWon); + return eventData + 4; +} + +static u16 *BufferQuestLogData_DefeatedWildMon(u16 *a0, const u16 *eventData) +{ + u16 *r4 = a0; + u8 *r5 = (u8 *)a0 + 8; + if (!sub_8110944(r4, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON])) + return NULL; + if (r5[0] == 0 && r5[1] == 0) + { + r4[0] = QL_EVENT_DEFEATED_WILD_MON; + r4[1] = sQuestLogCursor; + } + if (eventData[0]) + r4[2] = eventData[0]; + if (eventData[1]) + r4[3] = eventData[1]; + if (eventData[0] && r5[0] != 0xFF) + r5[0]++; + if (eventData[1] && r5[1] != 0xFF) + r5[1]++; + r5[2] = *((const u8 *)eventData + 4); + return (u16 *)(r5 + 4); +} + +static const u16 *BufferQuestLogText_DefeatedWildMon(const u16 *a0) +{ + const u8 *data; + if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_WILD_MON])) + return NULL; + + data = (const u8 *)a0 + 8; + DynamicPlaceholderTextUtil_Reset(); + GetMapNameGeneric(gStringVar1, data[2]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + QuestLog_GetSpeciesName(a0[2], NULL, 1); + ConvertIntToDecimalStringN(gStringVar2, data[0], STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); + QuestLog_GetSpeciesName(a0[3], NULL, 3); + ConvertIntToDecimalStringN(gStringVar3, data[1], STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gSaveBlock2Ptr->playerName); + if (data[0] == 0) + { + if (data[1] == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMon); + else + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_CaughtWildMons); + } + else if (data[1] == 0) + { + if (data[0] == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMon); + else + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMons); + } + else if (data[0] == 1) + { + if (data[1] == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMon); + else + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonAndCaughtWildMons); + } + else + { + if (data[1] == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMon); + else + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_DefeatedWildMonsAndCaughtWildMons); + } + return (const u16 *)(data + 4); +} + +static bool8 IsSpeciesFromSpecialEncounter(u16 species) +{ + switch (species) + { + case SPECIES_SNORLAX: + case SPECIES_ARTICUNO: + case SPECIES_ZAPDOS: + case SPECIES_MOLTRES: + case SPECIES_MEWTWO: + case SPECIES_LUGIA: + case SPECIES_HO_OH: + case SPECIES_DEOXYS: + return TRUE; + } + return FALSE; +} + +static u16 *BufferQuestLogData_DefeatedEliteFourMember(u16 *a0, const u16 *eventData) +{ + sEventShouldNotRecordSteps = 1; + return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_E4_MEMBER, a0, eventData); +} + +static const u16 *BufferQuestLogText_DefeatedEliteFourMember(const u16 *eventData) +{ + const u8 *r5; + eventData = sub_8113E88(QL_EVENT_DEFEATED_E4_MEMBER, eventData); + r5 = (const u8 *)eventData + 6; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gTrainers[eventData[2]].trainerName); + QuestLog_GetSpeciesName(eventData[0], NULL, 1); + QuestLog_GetSpeciesName(eventData[1], NULL, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, sDefeatedOpponentFlavorTexts[r5[1]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnEliteFoursMonWithMonAndWon); + return eventData + 4; +} + +static u16 *BufferQuestLogData_DefeatedChampion(u16 *a0, const u16 *eventData) +{ + if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION])) + return NULL; + a0[0] = QL_EVENT_DEFEATED_CHAMPION | (2 << 12); + a0[1] = sQuestLogCursor; + a0[2] = eventData[1]; + a0[3] = eventData[2]; + *((u8 *)a0 + 8) = *((const u8 *)eventData + 6); + sEventShouldNotRecordSteps = 1; + return a0 + 5; +} + +static const u16 *BufferQuestLogText_DefeatedChampion(const u16 *a0) +{ + const u8 *r5; + if (!sub_8110944(a0, sQuestLogEventCmdSizes[QL_EVENT_DEFEATED_CHAMPION])) + return NULL; + + r5 = (const u8 *)a0 + 8; + DynamicPlaceholderTextUtil_Reset(); + + switch (gUnknown_203B044.unk_2) + { + case 0: + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gSaveBlock1Ptr->rivalName); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerBattledChampionRival); + break; + case 1: + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName); + QuestLog_GetSpeciesName(a0[2], NULL, 1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName); + QuestLog_GetSpeciesName(a0[3], NULL, 3); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_PlayerSentOutMon1RivalSentOutMon2); + break; + case 2: + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sDefeatedChampionFlavorTexts[r5[0]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_WonTheMatchAsAResult); + break; + } + return (const u16 *)(r5 + 2); +} + +static u16 *BufferQuestLogData_DefeatedTrainer(u16 *a0, const u16 *eventData) +{ + sEventShouldNotRecordSteps = 1; + return BufferQuestLogData_DefeatedTrainer_(QL_EVENT_DEFEATED_TRAINER, a0, eventData); +} + +static const u16 *BufferQuestLogText_DefeatedTrainer(const u16 *eventData) +{ + const u16 *r5 = sub_8113E88(QL_EVENT_DEFEATED_TRAINER, eventData); + const u8 *r6 = (const u8 *)r5 + 6; + DynamicPlaceholderTextUtil_Reset(); + GetMapNameGeneric(gStringVar1, r6[0]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + + if (gTrainers[r5[2]].trainerClass == CLASS_RIVAL + || gTrainers[r5[2]].trainerClass == CLASS_RIVAL_2 + || gTrainers[r5[2]].trainerClass == CLASS_CHAMPION_2) + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, GetExpandedPlaceholder(PLACEHOLDER_ID_RIVAL)); + else + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gTrainers[r5[2]].trainerName); + + QuestLog_GetSpeciesName(r5[0], NULL, 2); + QuestLog_GetSpeciesName(r5[1], NULL, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, sDefeatedOpponentFlavorTexts[r6[1]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_TookOnTrainersMonWithMonAndWon); + return (const u16 *)(r6 + 2); +} + +static const u8 *const sLocationNameTexts[] = + { + [QL_LOCATION_HOME] = gText_QuestLog_Home, + [QL_LOCATION_OAKS_LAB] = gText_QuestLog_OakResearchLab, + [QL_LOCATION_VIRIDIAN_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_LEAGUE_GATE_1] = gText_QuestLog_PokemonLeagueGate, + [QL_LOCATION_LEAGUE_GATE_2] = gText_QuestLog_PokemonLeagueGate, + [QL_LOCATION_VIRIDIAN_FOREST_1] = gText_QuestLog_ViridianForest, + [QL_LOCATION_VIRIDIAN_FOREST_2] = gText_QuestLog_ViridianForest, + [QL_LOCATION_PEWTER_MUSEUM] = gText_QuestLog_PewterMuseumOfScience, + [QL_LOCATION_PEWTER_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_MT_MOON_1] = gText_QuestLog_MtMoon, + [QL_LOCATION_MT_MOON_2] = gText_QuestLog_MtMoon, + [QL_LOCATION_CERULEAN_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_BIKE_SHOP] = gText_QuestLog_BikeShop, + [QL_LOCATION_BILLS_HOUSE] = gText_QuestLog_BillsHouse, + [QL_LOCATION_DAY_CARE] = gText_QuestLog_DayCare, + [QL_LOCATION_UNDERGROUND_PATH_1] = gText_QuestLog_UndergroundPath, + [QL_LOCATION_UNDERGROUND_PATH_2] = gText_QuestLog_UndergroundPath, + [QL_LOCATION_PKMN_FAN_CLUB] = gText_QuestLog_PokemonFanClub, + [QL_LOCATION_VERMILION_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_SS_ANNE] = gText_QuestLog_SSAnne, + [QL_LOCATION_DIGLETTS_CAVE_1] = gText_QuestLog_DiglettsCave, + [QL_LOCATION_DIGLETTS_CAVE_2] = gText_QuestLog_DiglettsCave, + [QL_LOCATION_ROCK_TUNNEL_1] = gText_QuestLog_RockTunnel, + [QL_LOCATION_ROCK_TUNNEL_2] = gText_QuestLog_RockTunnel, + [QL_LOCATION_POWER_PLANT] = gText_QuestLog_PowerPlant, + [QL_LOCATION_PKMN_TOWER] = gText_QuestLog_PokemonTower, + [QL_LOCATION_VOLUNTEER_HOUSE] = gText_QuestLog_VolunteerHouse, + [QL_LOCATION_NAME_RATERS_HOUSE] = gText_QuestLog_NameRatersHouse, + [QL_LOCATION_UNDERGROUND_PATH_3] = gText_QuestLog_UndergroundPath, + [QL_LOCATION_UNDERGROUND_PATH_4] = gText_QuestLog_UndergroundPath, + [QL_LOCATION_CELADON_DEPT_STORE] = gText_QuestLog_CeladonDeptStore, + [QL_LOCATION_CELADON_MANSION] = gText_QuestLog_CeladonMansion, + [QL_LOCATION_GAME_CORNER] = gText_QuestLog_RocketGameCorner, + [QL_LOCATION_CELADON_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_CELADON_RESTAURANT] = gText_QuestLog_Restaurant, + [QL_LOCATION_ROCKET_HIDEOUT] = gText_QuestLog_RocketHideout, + [QL_LOCATION_SAFARI_ZONE] = gText_QuestLog_SafariZone, + [QL_LOCATION_FUCHSIA_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_WARDENS_HOME] = gText_QuestLog_WardensHome, + [QL_LOCATION_FIGHTING_DOJO] = gText_QuestLog_FightingDojo, + [QL_LOCATION_SAFFRON_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_SILPH_CO] = gText_QuestLog_SilphCo, + [QL_LOCATION_SEAFOAM_ISLANDS_1] = gText_QuestLog_SeafoamIslands, + [QL_LOCATION_SEAFOAM_ISLANDS_2] = gText_QuestLog_SeafoamIslands, + [QL_LOCATION_PKMN_MANSION] = gText_QuestLog_PokemonMansion, + [QL_LOCATION_CINNABAR_GYM] = gText_QuestLog_Gym, + [QL_LOCATION_CINNABAR_LAB] = gText_QuestLog_PokemonResearchLab, + [QL_LOCATION_VICTORY_ROAD_1] = gText_QuestLog_VictoryRoad, + [QL_LOCATION_VICTORY_ROAD_2] = gText_QuestLog_VictoryRoad, + [QL_LOCATION_PKMN_LEAGUE] = gText_QuestLog_PokemonLeague, + [QL_LOCATION_CERULEAN_CAVE] = gText_QuestLog_CeruleanCave + }; + +static const u8 *const sDepartedLocationTexts[] = + { + [QL_DEPARTED_TOWN_BUILDING] = gText_QuestLog_DepartedPlaceInTownForNextDestination, + [QL_DEPARTED_MUSEUM] = gText_QuestLog_LeftTownsLocationForNextDestination, + [QL_DEPARTED_GAME_CORNER] = gText_QuestLog_PlayedGamesAtGameCorner, + [QL_DEPARTED_HOME] = gText_QuestLog_RestedAtHome, + [QL_DEPARTED_OAKS_LAB] = gText_QuestLog_LeftOaksLab, + [QL_DEPARTED_GYM] = gText_QuestLog_GymWasFullOfToughTrainers, + [QL_DEPARTED_SAFARI_ZONE] = gText_QuestLog_HadGreatTimeInSafariZone, + [QL_DEPARTED_CAVE] = gText_QuestLog_ManagedToGetOutOfLocation, + [QL_DEPARTED_MISC_BUILDING_1] = gText_QuestLog_DepartedTheLocationForNextDestination, + [QL_DEPARTED_MISC_BUILDING_2] = gText_QuestLog_DepartedFromLocationToNextDestination + }; + +static const u8 sLocationToDepartedTextId[] = + { + [QL_LOCATION_HOME] = QL_DEPARTED_HOME, + [QL_LOCATION_OAKS_LAB] = QL_DEPARTED_OAKS_LAB, + [QL_LOCATION_VIRIDIAN_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_LEAGUE_GATE_1] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_LEAGUE_GATE_2] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_VIRIDIAN_FOREST_1] = QL_DEPARTED_CAVE, + [QL_LOCATION_VIRIDIAN_FOREST_2] = QL_DEPARTED_CAVE, + [QL_LOCATION_PEWTER_MUSEUM] = QL_DEPARTED_MUSEUM, + [QL_LOCATION_PEWTER_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_MT_MOON_1] = QL_DEPARTED_CAVE, + [QL_LOCATION_MT_MOON_2] = QL_DEPARTED_CAVE, + [QL_LOCATION_CERULEAN_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_BIKE_SHOP] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_BILLS_HOUSE] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_DAY_CARE] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_UNDERGROUND_PATH_1] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_UNDERGROUND_PATH_2] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_PKMN_FAN_CLUB] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_VERMILION_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_SS_ANNE] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_DIGLETTS_CAVE_1] = QL_DEPARTED_CAVE, + [QL_LOCATION_DIGLETTS_CAVE_2] = QL_DEPARTED_CAVE, + [QL_LOCATION_ROCK_TUNNEL_1] = QL_DEPARTED_CAVE, + [QL_LOCATION_ROCK_TUNNEL_2] = QL_DEPARTED_CAVE, + [QL_LOCATION_POWER_PLANT] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_PKMN_TOWER] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_VOLUNTEER_HOUSE] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_NAME_RATERS_HOUSE] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_UNDERGROUND_PATH_3] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_UNDERGROUND_PATH_4] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_CELADON_DEPT_STORE] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_CELADON_MANSION] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_GAME_CORNER] = QL_DEPARTED_GAME_CORNER, + [QL_LOCATION_CELADON_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_CELADON_RESTAURANT] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_ROCKET_HIDEOUT] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_SAFARI_ZONE] = QL_DEPARTED_SAFARI_ZONE, + [QL_LOCATION_FUCHSIA_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_WARDENS_HOME] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_FIGHTING_DOJO] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_SAFFRON_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_SILPH_CO] = QL_DEPARTED_MISC_BUILDING_2, + [QL_LOCATION_SEAFOAM_ISLANDS_1] = QL_DEPARTED_CAVE, + [QL_LOCATION_SEAFOAM_ISLANDS_2] = QL_DEPARTED_CAVE, + [QL_LOCATION_PKMN_MANSION] = QL_DEPARTED_MISC_BUILDING_2, + [QL_LOCATION_CINNABAR_GYM] = QL_DEPARTED_GYM, + [QL_LOCATION_CINNABAR_LAB] = QL_DEPARTED_TOWN_BUILDING, + [QL_LOCATION_VICTORY_ROAD_1] = QL_DEPARTED_CAVE, + [QL_LOCATION_VICTORY_ROAD_2] = QL_DEPARTED_CAVE, + [QL_LOCATION_PKMN_LEAGUE] = QL_DEPARTED_MISC_BUILDING_1, + [QL_LOCATION_CERULEAN_CAVE] = QL_DEPARTED_CAVE + }; + +static const u8 sGymCityMapSecs[] = { + MAPSEC_PEWTER_CITY, + MAPSEC_CERULEAN_CITY, + MAPSEC_VERMILION_CITY, + MAPSEC_CELADON_CITY, + MAPSEC_FUCHSIA_CITY, + MAPSEC_SAFFRON_CITY, + MAPSEC_CINNABAR_ISLAND, + MAPSEC_VIRIDIAN_CITY +}; + +static const u8 *const sUsedFieldMoveTexts[] = + { + [FIELD_MOVE_FLASH] = gText_QuestLog_UsedFlash, + [FIELD_MOVE_CUT] = gText_QuestLog_UsedCut, + [FIELD_MOVE_FLY] = gText_QuestLog_UsedFly, + [FIELD_MOVE_STRENGTH] = gText_QuestLog_UsedStrength, + [FIELD_MOVE_SURF] = gText_QuestLog_UsedSurf, + [FIELD_MOVE_ROCK_SMASH] = gText_QuestLog_UsedRockSmash, + [FIELD_MOVE_WATERFALL] = gText_QuestLog_UsedWaterfall, + [FIELD_MOVE_TELEPORT] = gText_QuestLog_UsedTeleportToLocation, + [FIELD_MOVE_DIG] = gText_QuestLog_UsedDigInLocation, + [FIELD_MOVE_MILK_DRINK] = gText_QuestLog_UsedMilkDrink, + [FIELD_MOVE_SOFT_BOILED] = gText_QuestLog_UsedSoftboiled, + [FIELD_MOVE_SWEET_SCENT] = gText_QuestLog_UsedSweetScent + }; + +static u16 *BufferQuestLogData_DepartedLocation(u16 *a0, const u16 *eventData) +{ + u16 *r2 = sub_8113DE0(QL_EVENT_DEPARTED, a0); + if (r2 == NULL) + return NULL; + *((u8 *)r2 + 0) = *((const u8 *)eventData + 0); + if ((*((u8 *)r2 + 1) = *((const u8 *)eventData + 1)) == QL_LOCATION_SAFARI_ZONE) + sEventShouldNotRecordSteps = 1; + return r2 + 1; +} + +static const u16 *BufferQuestLogText_DepartedLocation(const u16 *eventData) +{ + u8 r4, locationId; + const u16 *r5 = sub_8113E88(QL_EVENT_DEPARTED, eventData); + const u8 *r5_2 = (const u8 *)r5 + 0; + locationId = r5_2[1]; + GetMapNameGeneric(gStringVar1, r5_2[0]); + StringCopy(gStringVar2, sLocationNameTexts[locationId]); + if (sLocationToDepartedTextId[locationId] == QL_DEPARTED_GYM) + { + for (r4 = 0; r4 < NELEMS(sGymCityMapSecs); r4++) + { + if (r5_2[0] != sGymCityMapSecs[r4]) + continue; + if (FlagGet(FLAG_BADGE01_GET + r4) == TRUE) + StringExpandPlaceholders(gStringVar4, gText_QuestLog_DepartedGym); + else + StringExpandPlaceholders(gStringVar4, gText_QuestLog_GymWasFullOfToughTrainers); + break; + } + if (r4 == 8) + StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]); + } + else + StringExpandPlaceholders(gStringVar4, sDepartedLocationTexts[sLocationToDepartedTextId[locationId]]); + + return (const u16 *)(r5_2 + 2); +} + +void SetQLPlayedTheSlots(void) +{ + sPlayedTheSlots = TRUE; +} + +static bool8 ShouldRegisterEvent_HandleDeparted(u16 eventId, const u16 *eventData) +{ + if (eventId != QL_EVENT_DEPARTED) + { + sLastDepartedMap = 0; + return TRUE; + } + if (sLastDepartedMap == *((u8 *)eventData + 1) + 1) + return FALSE; + sLastDepartedMap = *((u8 *)eventData + 1) + 1; + return TRUE; +} + +static bool8 ShouldRegisterEvent_HandleGameCorner(u16 eventId, const u16 *eventData) +{ + if (eventId != QL_EVENT_DEPARTED) + return TRUE; + + // Bug: should be QL_LOCATION_GAME_CORNER + 1 + if (*((u8 *)eventData + 1) == QL_LOCATION_GAME_CORNER && !sPlayedTheSlots) + return FALSE; + + sPlayedTheSlots = FALSE; + return TRUE; +} + +static u16 *BufferQuestLogData_UsedFieldMove(u16 *a0, const u16 *eventData) +{ + u8 *r3; + a0 = sub_8113DE0(QL_EVENT_USED_FIELD_MOVE, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + r3 = (u8 *)a0 + 2; + r3[0] = *((const u8 *)eventData + 2); + r3[1] = *((const u8 *)eventData + 3); + if (r3[0] == FIELD_MOVE_TELEPORT || r3[0] == FIELD_MOVE_DIG) + sEventShouldNotRecordSteps = 2; + else + sEventShouldNotRecordSteps = 1; + return (u16 *)(r3 + 2); +} + +static const u16 *BufferQuestLogText_UsedFieldMove(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_USED_FIELD_MOVE, eventData); + const u8 *r5 = (const u8 *)r4 + 2; + QuestLog_GetSpeciesName(r4[0], gStringVar1, 0); + if (r5[1] != 0xFF) + GetMapNameGeneric(gStringVar2, r5[1]); + + // If used Teleport, get name of destination + if (r5[0] == FIELD_MOVE_TELEPORT) + { + if (r5[1] == 0x58) + StringCopy(gStringVar3, gText_QuestLog_Home); + else + StringCopy(gStringVar3, gText_PokemonCenter); + } + + StringExpandPlaceholders(gStringVar4, sUsedFieldMoveTexts[r5[0]]); + return (const u16 *)(r5 + 2); +} + +static u16 *BufferQuestLogData_BoughtItem(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_BOUGHT_ITEM, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[2]; + a0[1] = eventData[3]; + a0[2] = *((const u32 *)eventData) >> 16; + a0[3] = *((const u32 *)eventData); + *((u8 *)a0 + 8) = *((const u8 *)eventData + 8); + *((u8 *)a0 + 9) = 1; + return a0 + 5; +} + +static const u16 *BufferQuestLogText_BoughtItem(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_BOUGHT_ITEM, eventData); + const u8 *r7 = (const u8 *)r4 + 8; + u32 r6 = (r4[2] << 16) + r4[3]; + DynamicPlaceholderTextUtil_Reset(); + GetMapNameGeneric(gStringVar1, r7[0]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r4[0])); + if (r4[1] < 2) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItem); + else + { + ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_BoughtItemsIncludingItem); + } + return (const u16 *)(r7 + 2); +} + +static u16 *BufferQuestLogData_SoldItem(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_SOLD_ITEM, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[2]; + a0[1] = eventData[3]; + a0[2] = *((const u32 *)eventData) >> 16; + a0[3] = *((const u32 *)eventData); + *((u8 *)a0 + 8) = *((const u8 *)eventData + 8); + *((u8 *)a0 + 9) = *((const u8 *)eventData + 9); + return a0 + 5; +} + +static const u16 *BufferQuestLogText_SoldItem(const u16 *eventData) +{ + const u16 *r5 = sub_8113E88(QL_EVENT_SOLD_ITEM, eventData); + const u8 *r7 = (const u8 *) r5 + 8; + u32 r6 = (r5[2] << 16) + r5[3]; + DynamicPlaceholderTextUtil_Reset(); + GetMapNameGeneric(gStringVar1, r7[0]); + if (r7[1] == 0) { + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, ItemId_GetName(r5[0])); + if (r5[1] == 1) + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gText_QuestLog_JustOne); + else + { + ConvertIntToDecimalStringN(gStringVar2, r5[1], STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, gStringVar2); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar3, gText_QuestLog_Num); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, gStringVar3); + } + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldNumOfItem); + } + else + { + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, ItemId_GetName(r5[0])); + ConvertIntToDecimalStringN(gStringVar2, r6, STR_CONV_MODE_LEFT_ALIGN, 6); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar2); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_QuestLog_SoldItemsIncludingItem); + } + return (const u16 *)(r7 + 2); +} + +static u16 *BufferQuestLogData_ObtainedItem(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_OBTAINED_ITEM, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + *((u8 *)a0 + 2) = *((const u8 *)eventData + 2); + return a0 + 2; +} + +static const u16 *BufferQuestLogText_ObtainedItem(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_OBTAINED_ITEM, eventData); + const u8 *r5 = (const u8 *)r4 + 2; + GetMapNameGeneric(gStringVar1, r5[0]); + StringCopy(gStringVar2, ItemId_GetName(r4[0])); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_ObtainedItemInLocation); + return (const u16 *)(r5 + 2); +} + +static const u16 sQuestLogWorldMapFlags[] = + { + FLAG_WORLD_MAP_VIRIDIAN_CITY, + FLAG_WORLD_MAP_PEWTER_CITY, + FLAG_WORLD_MAP_CERULEAN_CITY, + FLAG_WORLD_MAP_LAVENDER_TOWN, + FLAG_WORLD_MAP_VERMILION_CITY, + FLAG_WORLD_MAP_CELADON_CITY, + FLAG_WORLD_MAP_FUCHSIA_CITY, + FLAG_WORLD_MAP_CINNABAR_ISLAND, + FLAG_WORLD_MAP_INDIGO_PLATEAU_EXTERIOR, + FLAG_WORLD_MAP_SAFFRON_CITY, + FLAG_WORLD_MAP_ONE_ISLAND, + FLAG_WORLD_MAP_TWO_ISLAND, + FLAG_WORLD_MAP_THREE_ISLAND, + FLAG_WORLD_MAP_FOUR_ISLAND, + FLAG_WORLD_MAP_FIVE_ISLAND, + FLAG_WORLD_MAP_SEVEN_ISLAND, + FLAG_WORLD_MAP_SIX_ISLAND + }; + +void QuestLog_RecordEnteredMap(u16 worldMapFlag) +{ + s32 i; + + if (QL_IS_PLAYBACK_STATE) + return; + + for (i = 0; i < (int)NELEMS(sQuestLogWorldMapFlags); i++) + { + if (worldMapFlag == sQuestLogWorldMapFlags[i]) + { + if (!FlagGet(worldMapFlag)) + { + sNewlyEnteredMap = TRUE; + break; + } + else + { + sNewlyEnteredMap += 0; + sNewlyEnteredMap = FALSE; + break; + } + } + } +} + +void sub_8115798(void) +{ + u16 sp0; + if (!QL_IS_PLAYBACK_STATE) + { + if (sNewlyEnteredMap) + { + sp0 = gMapHeader.regionMapSectionId; + SetQuestLogEvent(QL_EVENT_ARRIVED, &sp0); + sNewlyEnteredMap = FALSE; + } + } +} + +static u16 *BufferQuestLogData_ArrivedInLocation(u16 *a0, const u16 *eventData) +{ + a0 = sub_8113DE0(QL_EVENT_ARRIVED, a0); + if (a0 == NULL) + return NULL; + a0[0] = eventData[0]; + return a0 + 1; +} + +static const u16 *BufferQuestLogText_ArrivedInLocation(const u16 *eventData) +{ + const u16 *r4 = sub_8113E88(QL_EVENT_ARRIVED, eventData); + GetMapNameGeneric(gStringVar1, (u8)r4[0]); + StringExpandPlaceholders(gStringVar4, gText_QuestLog_ArrivedInLocation); + return r4 + 1; +} + +static void BufferLinkPartnersName(u8 *dest) +{ + s32 i; + if (*dest++ == EXT_CTRL_CODE_BEGIN && *dest++ == EXT_CTRL_CODE_JPN) + { + for (i = 0; i < 5; i++) + { + if (*dest == EXT_CTRL_CODE_BEGIN) + break; + dest++; + } + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_ENG; + *dest++ = EOS; + } +} diff --git a/src/quest_log_objects.c b/src/quest_log_objects.c index 64b4b7fe5..fa3bbcce5 100644 --- a/src/quest_log_objects.c +++ b/src/quest_log_objects.c @@ -131,7 +131,7 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str void sub_815A540(void) { - if (gQuestLogState == QL_STATE_2) + if (gQuestLogState == QL_STATE_PLAYBACK) { s16 x, y; @@ -139,7 +139,7 @@ void sub_815A540(void) if (!MetatileBehavior_IsSurfable(MapGridGetMetatileBehaviorAt(x, y)) && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) { struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; - SetPlayerAvatarTransitionFlags(0x01); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); } } diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 8abf7fab5..715061963 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -41,7 +41,7 @@ void sub_8150454(u8 a0) bool32 sub_8150474(u8 a0) { - if (gUnknown_3005E88 == 2) + if (gQuestLogPlaybackState == 2) { sub_8112720(a0); return TRUE; @@ -76,7 +76,7 @@ static void sub_8150530(void) struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[objectEvent->spriteId]; - if (gUnknown_3005E88 == 1 || gUnknown_3005E88 == 3) + if (gQuestLogPlaybackState == 1 || gQuestLogPlaybackState == 3) { u8 taskId; ScriptContext2_Enable(); diff --git a/src/safari_zone.c b/src/safari_zone.c index 29e436d35..748a7d996 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -67,7 +67,7 @@ void CB2_EndSafariBattle(void) { ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); - gFieldCallback = sub_807E3EC; + gFieldCallback = FieldCB_SafariZoneRanOutOfBalls; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) diff --git a/src/scrcmd.c b/src/scrcmd.c index bec0f4942..e3a9b3b72 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -37,24 +37,25 @@ #include "field_effect.h" #include "fieldmap.h" #include "field_door.h" +#include "constants/event_objects.h" extern u16 (*const gSpecials[])(void); extern u16 (*const gSpecialsEnd[])(void); extern const u8 *const gStdScripts[]; extern const u8 *const gStdScriptsEnd[]; -static bool8 sub_806B93C(struct ScriptContext * ctx); -static u8 sub_806B96C(struct ScriptContext * ctx); +static bool8 ScriptContext_NextCommandEndsScript(struct ScriptContext * ctx); +static u8 ScriptContext_GetQuestLogInput(struct ScriptContext * ctx); static EWRAM_DATA ptrdiff_t gVScriptOffset = 0; -static EWRAM_DATA u8 gUnknown_20370AC = 0; +static EWRAM_DATA u8 sQuestLogWaitButtonPressTimer = 0; static EWRAM_DATA u16 sPauseCounter = 0; static EWRAM_DATA u16 sMovingNpcId = 0; static EWRAM_DATA u16 sMovingNpcMapBank = 0; static EWRAM_DATA u16 sMovingNpcMapId = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0; -struct ScriptContext * gUnknown_3005070; +struct ScriptContext * sQuestLogScriptContextPtr; u8 gSelectedObjectEvent; // This is defined in here so the optimizer can't see its value when compiling @@ -803,7 +804,7 @@ bool8 ScrCmd_warpteleport2(struct ScriptContext * ctx) SetWarpDestination(mapGroup, mapNum, warpId, x, y); SavePlayerFacingDirectionForTeleport(GetPlayerFacingDirection()); - sub_807E500(); + DoTeleport2Warp(); ResetInitialPlayerAvatarState(); return TRUE; } @@ -926,7 +927,7 @@ bool8 ScrCmd_playbgm(struct ScriptContext * ctx) u16 songId = ScriptReadHalfword(ctx); bool8 val = ScriptReadByte(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; if (val == TRUE) Overworld_SetSavedMusic(songId); @@ -942,7 +943,7 @@ bool8 ScrCmd_savebgm(struct ScriptContext * ctx) bool8 ScrCmd_fadedefaultbgm(struct ScriptContext * ctx) { - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; Overworld_ChangeMusicToDefault(); return FALSE; @@ -951,7 +952,7 @@ bool8 ScrCmd_fadedefaultbgm(struct ScriptContext * ctx) bool8 ScrCmd_fadenewbgm(struct ScriptContext * ctx) { u16 music = ScriptReadHalfword(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; Overworld_ChangeMusicTo(music); return FALSE; @@ -961,7 +962,7 @@ bool8 ScrCmd_fadeoutbgm(struct ScriptContext * ctx) { u8 speed = ScriptReadByte(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; if (speed != 0) FadeOutBGMTemporarily(4 * speed); @@ -975,7 +976,7 @@ bool8 ScrCmd_fadeinbgm(struct ScriptContext * ctx) { u8 speed = ScriptReadByte(ctx); - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return FALSE; if (speed != 0) FadeInBGM(4 * speed); @@ -1203,7 +1204,7 @@ bool8 ScrCmd_lockall(struct ScriptContext * ctx) else { ScriptFreezeObjectEvents(); - SetupNativeScript(ctx, sub_8069590); + SetupNativeScript(ctx, NativeScript_WaitPlayerStopMoving); return TRUE; } } @@ -1219,12 +1220,12 @@ bool8 ScrCmd_lock(struct ScriptContext * ctx) if (gObjectEvents[gSelectedObjectEvent].active) { LockSelectedObjectEvent(); - SetupNativeScript(ctx, sub_8069648); + SetupNativeScript(ctx, NativeScript_WaitPlayerAndTargetNPCStopMoving); } else { ScriptFreezeObjectEvents(); - SetupNativeScript(ctx, sub_8069590); + SetupNativeScript(ctx, NativeScript_WaitPlayerStopMoving); } return TRUE; } @@ -1235,7 +1236,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext * ctx) u8 playerObjectId; HideFieldMessageBox(); - playerObjectId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); @@ -1249,7 +1250,7 @@ bool8 ScrCmd_release(struct ScriptContext * ctx) HideFieldMessageBox(); if (gObjectEvents[gSelectedObjectEvent].active) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSelectedObjectEvent]); - playerObjectId = GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0); + playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); @@ -1319,16 +1320,16 @@ static bool8 WaitForAorBPress(void) if (JOY_NEW(B_BUTTON)) return TRUE; - if (sub_806B93C(gUnknown_3005070) == TRUE) + if (ScriptContext_NextCommandEndsScript(sQuestLogScriptContextPtr) == TRUE) { - u8 r4 = sub_806B96C(gUnknown_3005070); - RegisterQuestLogInput(r4); - if (r4 != QL_INPUT_OFF) + u8 qlogInput = ScriptContext_GetQuestLogInput(sQuestLogScriptContextPtr); + RegisterQuestLogInput(qlogInput); + if (qlogInput != QL_INPUT_OFF) { - if (gQuestLogState != QL_STATE_2) + if (gQuestLogState != QL_STATE_PLAYBACK) { ClearMsgBoxCancelableState(); - if (r4 != QL_INPUT_A && r4 != QL_INPUT_B) + if (qlogInput != QL_INPUT_A && qlogInput != QL_INPUT_B) SetQuestLogInputIsDpadFlag(); else { @@ -1339,18 +1340,18 @@ static bool8 WaitForAorBPress(void) } } } - if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_2) + if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK) { - if (gUnknown_20370AC == 120) + if (sQuestLogWaitButtonPressTimer == 120) return TRUE; else - gUnknown_20370AC++; + sQuestLogWaitButtonPressTimer++; } return FALSE; } -static bool8 sub_806B93C(struct ScriptContext * ctx) +static bool8 ScriptContext_NextCommandEndsScript(struct ScriptContext * ctx) { const u8 * script = ctx->scriptPtr; u8 nextCmd = *script; @@ -1365,7 +1366,7 @@ static bool8 sub_806B93C(struct ScriptContext * ctx) return TRUE; } -static u8 sub_806B96C(struct ScriptContext * ctx) +static u8 ScriptContext_GetQuestLogInput(struct ScriptContext * ctx) { if (JOY_HELD(DPAD_UP) && gSpecialVar_Facing != DIR_NORTH) return QL_INPUT_UP; @@ -1402,10 +1403,10 @@ static u8 sub_806B96C(struct ScriptContext * ctx) bool8 ScrCmd_waitbuttonpress(struct ScriptContext * ctx) { - gUnknown_3005070 = ctx; + sQuestLogScriptContextPtr = ctx; - if (sub_8112CAC() == 1 || gQuestLogState == 2) - gUnknown_20370AC = 0; + if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK) + sQuestLogWaitButtonPressTimer = 0; SetupNativeScript(ctx, WaitForAorBPress); return TRUE; } diff --git a/src/script.c b/src/script.c index 097f6d3f3..c45c6744c 100644 --- a/src/script.c +++ b/src/script.c @@ -435,7 +435,7 @@ bool8 TryRunOnFrameMapScript(void) { u8 *ptr; - if(gQuestLogState == 3) + if(gQuestLogState == QL_STATE_PLAYBACK_LAST) return 0; ptr = mapheader_get_first_match_from_tagged_ptr_list(2); diff --git a/src/slot_machine.c b/src/slot_machine.c index d0422ab99..c3496f6e5 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -814,7 +814,7 @@ static void MainTask_SlotsGameLoop(u8 taskId) } break; case 2: - sub_811539C(); + SetQLPlayedTheSlots(); sub_81409B4(); sub_8140148(); sSlotMachineState->field_06 = 0; diff --git a/src/sound.c b/src/sound.c index 99e9a162e..43b51020d 100644 --- a/src/sound.c +++ b/src/sound.c @@ -193,7 +193,7 @@ void PlayFanfareByFanfareNum(u8 fanfareNum) { u16 songNum; - if(gQuestLogState == 2) + if(gQuestLogState == QL_STATE_PLAYBACK) { sFanfareCounter = 0xFF; } @@ -362,7 +362,7 @@ void PlayCry4(u16 species, s8 pan, u8 mode) void PlayCry7(u16 species, u8 mode) // exclusive to FR/LG { - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 85); PlayCryInternal(species, 0, CRY_VOLUME, 10, mode); @@ -571,7 +571,7 @@ void PlayBGM(u16 songNum) void PlaySE(u16 songNum) { - if(gDisableMapMusicChangeOnMapLoad == 0 && gQuestLogState != 2) + if(gDisableMapMusicChangeOnMapLoad == 0 && gQuestLogState != QL_STATE_PLAYBACK) m4aSongNumStart(songNum); } diff --git a/src/start_menu.c b/src/start_menu.c index 6fd69d9e0..bac1c886f 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -8,6 +8,7 @@ #include "party_menu.h" #include "save.h" #include "link_rfu.h" +#include "help_message.h" #include "event_data.h" #include "fieldmap.h" #include "safari_zone.h" @@ -390,7 +391,7 @@ void ShowStartMenu(void) if (!IsUpdateLinkStateCBActive()) { FreezeObjectEvents(); - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); StopPlayerAvatar(); } OpenStartMenuWithFollowupFunc(Task_StartMenuHandleInput); diff --git a/src/text.c b/src/text.c index b1a098f53..1a0858604 100644 --- a/src/text.c +++ b/src/text.c @@ -523,7 +523,7 @@ void TextPrinterClearDownArrow(struct TextPrinter *textPrinter) bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - u8 delay = (gQuestLogState == 2) ? 50 : 120; + u8 delay = (gQuestLogState == QL_STATE_PLAYBACK) ? 50 : 120; if (subStruct->autoScrollDelay == delay) { @@ -712,7 +712,7 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentChar++; currChar |= *textPrinter->printerTemplate.currentChar << 8; textPrinter->printerTemplate.currentChar++; - if (gQuestLogState != 2 && gQuestLogState != 3) + if (!QL_IS_PLAYBACK_STATE) PlayBGM(currChar); return 2; case 16: diff --git a/src/trainer_fan_club.c b/src/trainer_fan_club.c new file mode 100644 index 000000000..9040d3405 --- /dev/null +++ b/src/trainer_fan_club.c @@ -0,0 +1,359 @@ +#include "global.h" +#include "gflib.h" +#include "battle.h" +#include "event_data.h" +#include "event_scripts.h" +#include "random.h" +#include "constants/vars.h" +#include "constants/flags.h" + +struct TrainerFanClub +{ + u8 timer:7; + u8 gotInitialFans:1; + u8 fanFlags; +}; + +#define TRAINER_FAN_CLUB ((struct TrainerFanClub *)GetVarPointer(VAR_FANCLUB_FAN_COUNTER)) + +#define GET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags >> (flag) & 1) +#define SET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags |= 1 << (flag)) +#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(fanClub->fanFlags ^= 1 << (flag)) + +#define FANCLUB_MEMBER1 0 +#define FANCLUB_MEMBER2 1 +#define FANCLUB_MEMBER3 2 +#define FANCLUB_MEMBER4 3 +#define FANCLUB_MEMBER5 4 +#define FANCLUB_MEMBER6 5 +#define FANCLUB_MEMBER7 6 +#define FANCLUB_MEMBER8 7 + +#define NUM_TRAINER_FAN_CLUB_MEMBERS 8 + +static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *); +static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *); +static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *); +static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *); +static void TryLoseFansFromPlayTime(struct TrainerFanClub *); +static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *); +static void SetInitialFansOfPlayer(struct TrainerFanClub *); +static void BufferFanClubTrainerName(struct LinkBattleRecords *, u8, u8); +static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *); +static bool8 DidPlayerGetFirstFans(struct TrainerFanClub * ); +static void SetPlayerGotFirstFans(struct TrainerFanClub *); + +void ResetTrainerFanClub(void) +{ + VarSet(VAR_FANCLUB_FAN_COUNTER, 0); + VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, 0); +} + +void Script_TryLoseFansFromPlayTimeAfterLinkBattle(void) +{ + TryLoseFansFromPlayTimeAfterLinkBattle(TRAINER_FAN_CLUB); +} + +static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *fanClub) +{ + if (DidPlayerGetFirstFans(fanClub)) + { + TryLoseFansFromPlayTime(fanClub); + VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours); + } +} + +void Script_UpdateTrainerFanClubGameClear(void) +{ + UpdateTrainerFanClubGameClear(TRAINER_FAN_CLUB); +} + +static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *fanClub) +{ + if (!fanClub->gotInitialFans) + { + SetPlayerGotFirstFans(fanClub); + SetInitialFansOfPlayer(fanClub); + VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours); + FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BLACKBELT); + FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_ROCKER); + FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_WOMAN); + FlagClear(FLAG_HIDE_SAFFRON_FAN_CLUB_BEAUTY); + VarSet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1); + } +} + +ALIGNED(4) const u8 sCounterIncrements[] = {2, 1, 2, 1}; + +static u8 TryGainNewFanFromCounter(struct TrainerFanClub *fanClub, u8 a1) +{ + if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2) + { + if (fanClub->timer + sCounterIncrements[a1] >= 20) + { + if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 3) + { + PlayerGainRandomTrainerFan(fanClub); + fanClub->timer = 0; + } + else + fanClub->timer = 20; + } + else + fanClub->timer += sCounterIncrements[a1]; + } + + return fanClub->timer; +} + + +static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *fanClub) +{ + static const u8 sFanClubMemberIds[] = { + FANCLUB_MEMBER2, + FANCLUB_MEMBER4, + FANCLUB_MEMBER6, + FANCLUB_MEMBER1, + FANCLUB_MEMBER8, + FANCLUB_MEMBER7, + FANCLUB_MEMBER5, + FANCLUB_MEMBER3 + }; + + u8 i; + u8 idx = 0; + + for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++) + { + if (!(GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))) + { + idx = i; + if (Random() % 2) + { + SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]); + return sFanClubMemberIds[i]; + } + } + } + + SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]); + return sFanClubMemberIds[idx]; +} + +static u8 PlayerLoseRandomTrainerFan(struct TrainerFanClub *fanClub) +{ + static const u8 sFanClubMemberIds[] = + { + FANCLUB_MEMBER6, + FANCLUB_MEMBER7, + FANCLUB_MEMBER4, + FANCLUB_MEMBER8, + FANCLUB_MEMBER5, + FANCLUB_MEMBER2, + FANCLUB_MEMBER1, + FANCLUB_MEMBER3 + }; + + u8 i; + u8 idx = 0; + + if (GetNumFansOfPlayerInTrainerFanClub(fanClub) == 1) + return 0; + + for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++) + { + if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i])) + { + idx = i; + if (Random() % 2) + { + FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]); + return sFanClubMemberIds[i]; + } + } + } + + if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx])) + FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]); + + return sFanClubMemberIds[idx]; +} + +u16 Script_GetNumFansOfPlayerInTrainerFanClub(void) +{ + return GetNumFansOfPlayerInTrainerFanClub(TRAINER_FAN_CLUB); +} + +static u16 GetNumFansOfPlayerInTrainerFanClub(struct TrainerFanClub *fanClub) +{ + u8 count = 0; + u8 i; + + for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++) + { + if (GET_TRAINER_FAN_CLUB_FLAG(i)) + count++; + } + + return count; +} + +void Script_TryLoseFansFromPlayTime(void) +{ + TryLoseFansFromPlayTime(TRAINER_FAN_CLUB); +} + +static void TryLoseFansFromPlayTime(struct TrainerFanClub *fanClub) +{ + u8 i = 0; + u16 timer; + + if (gSaveBlock2Ptr->playTimeHours < 999) + { + while (1) + { + if (GetNumFansOfPlayerInTrainerFanClub(fanClub) < 5) + { + VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, gSaveBlock2Ptr->playTimeHours); + break; + } + if (i == NUM_TRAINER_FAN_CLUB_MEMBERS) + break; + + timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER); + if (gSaveBlock2Ptr->playTimeHours - timer < 12) + break; + + PlayerLoseRandomTrainerFan(fanClub); + timer = VarGet(VAR_FANCLUB_LOSE_FAN_TIMER); + VarSet(VAR_FANCLUB_LOSE_FAN_TIMER, timer + 12); + i++; + } + } +} + +bool16 Script_IsFanClubMemberFanOfPlayer(void) +{ + return IsFanClubMemberFanOfPlayer(TRAINER_FAN_CLUB); +} + +static bool16 IsFanClubMemberFanOfPlayer(struct TrainerFanClub *fanClub) +{ + return GET_TRAINER_FAN_CLUB_FLAG(gSpecialVar_0x8004); +} + +static void SetInitialFansOfPlayer(struct TrainerFanClub *fanClub) +{ + SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER1); + SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER2); + SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER3); +} + +void Script_BufferFanClubTrainerName(void) +{ + u8 whichLinkTrainer = 0; + u8 whichNPCTrainer = 0; + + switch (gSpecialVar_0x8004) + { + case FANCLUB_MEMBER1: + whichNPCTrainer = 0; + whichLinkTrainer = 0; + break; + case FANCLUB_MEMBER2: + case FANCLUB_MEMBER3: + case FANCLUB_MEMBER4: + case FANCLUB_MEMBER8: + break; + case FANCLUB_MEMBER5: + whichNPCTrainer = 1; + whichLinkTrainer = 0; + break; + case FANCLUB_MEMBER6: + whichNPCTrainer = 0; + whichLinkTrainer = 1; + break; + case FANCLUB_MEMBER7: + whichNPCTrainer = 2; + whichLinkTrainer = 1; + break; + } + BufferFanClubTrainerName(&gSaveBlock2Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer); +} + +static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 whichLinkTrainer, u8 whichNPCTrainer) +{ + u8 *str; + const u8 *linkTrainerName = linkRecords->entries[whichLinkTrainer].name; + if (linkTrainerName[0] == EOS) + { + switch (whichNPCTrainer) + { + case 0: + StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); + break; + case 1: + StringCopy(gStringVar1, gText_LtSurge); + break; + case 2: + StringCopy(gStringVar1, gText_Koga); + break; + default: + StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); + break; + } + } + else + { + str = gStringVar1; + StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH); + str[PLAYER_NAME_LENGTH] = EOS; + if ( str[0] == EXT_CTRL_CODE_BEGIN + && str[1] == EXT_CTRL_CODE_JPN) + { + str += 2; + while (*str != EOS) + str++; + *str++ = EXT_CTRL_CODE_BEGIN; + *str++ = EXT_CTRL_CODE_ENG; + *str++ = EOS; + } + } +} + +void Special_UpdateTrainerFansAfterLinkBattle(void) +{ + UpdateTrainerFansAfterLinkBattle(TRAINER_FAN_CLUB); +} + +static void UpdateTrainerFansAfterLinkBattle(struct TrainerFanClub *fanClub) +{ + if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2) + { + TryLoseFansFromPlayTimeAfterLinkBattle(fanClub); + if (gBattleOutcome == B_OUTCOME_WON) + PlayerGainRandomTrainerFan(fanClub); + else + PlayerLoseRandomTrainerFan(fanClub); + } +} + +static bool8 DidPlayerGetFirstFans(struct TrainerFanClub *fanClub) +{ + return fanClub->gotInitialFans; +} + +void Script_SetPlayerGotFirstFans(void) +{ + SetPlayerGotFirstFans(TRAINER_FAN_CLUB); +} + +static void SetPlayerGotFirstFans(struct TrainerFanClub *fanClub) +{ + fanClub->gotInitialFans = TRUE; +} + +u8 Script_TryGainNewFanFromCounter(void) +{ + return TryGainNewFanFromCounter(TRAINER_FAN_CLUB, gSpecialVar_0x8004); +} diff --git a/src/union_room.c b/src/union_room.c index 7bace05ef..f24406267 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3461,7 +3461,7 @@ void InitUnionRoom(void) struct UnkStruct_URoom * ptr; sUnionRoomPlayerName[0] = EOS; - if (gQuestLogState == 2 || gQuestLogState == 3) + if (QL_IS_PLAYBACK_STATE) return; CreateTask(Task_InitUnionRoom, 0); sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; // Needed to match. diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 849c599e8..813cb029f 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -598,7 +598,7 @@ static void Task_ResetObjectsRematchWantedState(u8 taskId) if (task->data[0] == 0 && walkrun_is_standing_still() == TRUE) { - sub_805C270(); + HandleEnforcedLookDirectionOnPlayerStopMoving(); task->data[0] = 1; } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 118df3c8c..5e1daaf36 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -584,7 +584,7 @@ bool8 UpdateRepelCounter(void) if (InUnionRoom() == TRUE) return FALSE; - if (gQuestLogState == 2) + if (gQuestLogState == QL_STATE_PLAYBACK) return FALSE; steps = VarGet(VAR_REPEL_STEP_COUNT); |